From 9bb7038a073441f1f0c3c33070fc1601a2638b1e Mon Sep 17 00:00:00 2001 From: Chris Patterson <chrispat@github.com> Date: Sat, 3 Aug 2019 21:49:54 -0400 Subject: [PATCH] Initial Import --- .github/eslint-compact.json | 18 + .github/eslint-stylish.json | 22 + .github/tsc.json | 17 + .github/workflows/workflow.yml | 25 + .gitignore | 2 + .prettierrc.json | 11 + LICENSE | 22 + README.md | 48 + __tests__/installer.test.ts | 132 + action.yml | 10 + docs/contributors.md | 22 + externals/7zr.exe | Bin 0 -> 518656 bytes jest.config.js | 11 + lib/installer.js | 227 + lib/setup-node.js | 44 + node_modules/.bin/semver | 15 + node_modules/.bin/semver.cmd | 7 + node_modules/.bin/shjs | 15 + node_modules/.bin/shjs.cmd | 7 + node_modules/.bin/uuid | 15 + node_modules/.bin/uuid.cmd | 7 + node_modules/@actions/core/README.md | 7 + node_modules/@actions/core/lib/command.d.ts | 16 + node_modules/@actions/core/lib/command.js | 66 + node_modules/@actions/core/lib/command.js.map | 1 + node_modules/@actions/core/lib/core.d.ts | 57 + node_modules/@actions/core/lib/core.js | 100 + node_modules/@actions/core/lib/core.js.map | 1 + node_modules/@actions/core/package.json | 66 + node_modules/@actions/exec/README.md | 7 + node_modules/@actions/exec/lib/exec.d.ts | 12 + node_modules/@actions/exec/lib/exec.js | 36 + node_modules/@actions/exec/lib/exec.js.map | 1 + .../@actions/exec/lib/interfaces.d.ts | 35 + node_modules/@actions/exec/lib/interfaces.js | 3 + .../@actions/exec/lib/interfaces.js.map | 1 + .../@actions/exec/lib/toolrunner.d.ts | 37 + node_modules/@actions/exec/lib/toolrunner.js | 573 ++ .../@actions/exec/lib/toolrunner.js.map | 1 + node_modules/@actions/exec/package.json | 63 + node_modules/@actions/exit/LICENSE.md | 7 + node_modules/@actions/exit/README.md | 7 + node_modules/@actions/exit/lib/exit.d.ts | 29 + node_modules/@actions/exit/lib/exit.js | 44 + node_modules/@actions/exit/lib/exit.js.map | 1 + node_modules/@actions/exit/package.json | 61 + node_modules/@actions/io/README.md | 49 + node_modules/@actions/io/lib/io-util.d.ts | 29 + node_modules/@actions/io/lib/io-util.js | 194 + node_modules/@actions/io/lib/io-util.js.map | 1 + node_modules/@actions/io/lib/io.d.ts | 48 + node_modules/@actions/io/lib/io.js | 262 + node_modules/@actions/io/lib/io.js.map | 1 + node_modules/@actions/io/package.json | 60 + node_modules/@actions/tool-cache/README.md | 7 + .../@actions/tool-cache/lib/tool-cache.d.ts | 78 + .../@actions/tool-cache/lib/tool-cache.js | 437 ++ .../@actions/tool-cache/lib/tool-cache.js.map | 1 + node_modules/@actions/tool-cache/package.json | 75 + .../tool-cache/scripts/Invoke-7zdec.ps1 | 60 + .../tool-cache/scripts/externals/7zdec.exe | Bin 0 -> 42496 bytes .../tool-cache/scripts/externals/unzip | Bin 0 -> 174216 bytes node_modules/semver/CHANGELOG.md | 47 + node_modules/semver/LICENSE | 15 + node_modules/semver/README.md | 430 ++ node_modules/semver/bin/semver | 160 + node_modules/semver/package.json | 62 + node_modules/semver/range.bnf | 16 + node_modules/semver/semver.js | 1552 +++++ node_modules/shelljs/.documentup.json | 6 + node_modules/shelljs/.jshintrc | 7 + node_modules/shelljs/.npmignore | 2 + node_modules/shelljs/.travis.yml | 5 + node_modules/shelljs/LICENSE | 26 + node_modules/shelljs/README.md | 569 ++ node_modules/shelljs/bin/shjs | 51 + node_modules/shelljs/global.js | 3 + node_modules/shelljs/make.js | 47 + node_modules/shelljs/package.json | 66 + node_modules/shelljs/scripts/generate-docs.js | 21 + node_modules/shelljs/scripts/run-tests.js | 50 + node_modules/shelljs/shell.js | 157 + node_modules/shelljs/src/cat.js | 43 + node_modules/shelljs/src/cd.js | 19 + node_modules/shelljs/src/chmod.js | 208 + node_modules/shelljs/src/common.js | 203 + node_modules/shelljs/src/cp.js | 201 + node_modules/shelljs/src/dirs.js | 191 + node_modules/shelljs/src/echo.js | 20 + node_modules/shelljs/src/error.js | 10 + node_modules/shelljs/src/exec.js | 181 + node_modules/shelljs/src/find.js | 51 + node_modules/shelljs/src/grep.js | 52 + node_modules/shelljs/src/ln.js | 53 + node_modules/shelljs/src/ls.js | 126 + node_modules/shelljs/src/mkdir.js | 68 + node_modules/shelljs/src/mv.js | 80 + node_modules/shelljs/src/popd.js | 1 + node_modules/shelljs/src/pushd.js | 1 + node_modules/shelljs/src/pwd.js | 11 + node_modules/shelljs/src/rm.js | 145 + node_modules/shelljs/src/sed.js | 43 + node_modules/shelljs/src/tempdir.js | 56 + node_modules/shelljs/src/test.js | 85 + node_modules/shelljs/src/to.js | 29 + node_modules/shelljs/src/toEnd.js | 29 + node_modules/shelljs/src/which.js | 83 + node_modules/tunnel/.npmignore | 2 + node_modules/tunnel/CHANGELOG.md | 13 + node_modules/tunnel/LICENSE | 21 + node_modules/tunnel/README.md | 179 + node_modules/tunnel/index.js | 1 + node_modules/tunnel/lib/tunnel.js | 247 + node_modules/tunnel/package.json | 64 + node_modules/tunnel/test/http-over-http.js | 108 + node_modules/tunnel/test/http-over-https.js | 130 + node_modules/tunnel/test/https-over-http.js | 130 + .../tunnel/test/https-over-https-error.js | 261 + node_modules/tunnel/test/https-over-https.js | 146 + node_modules/tunnel/test/keys/Makefile | 157 + node_modules/tunnel/test/keys/agent1-cert.pem | 14 + node_modules/tunnel/test/keys/agent1-csr.pem | 10 + node_modules/tunnel/test/keys/agent1-key.pem | 9 + node_modules/tunnel/test/keys/agent1.cnf | 19 + node_modules/tunnel/test/keys/agent2-cert.pem | 13 + node_modules/tunnel/test/keys/agent2-csr.pem | 10 + node_modules/tunnel/test/keys/agent2-key.pem | 9 + node_modules/tunnel/test/keys/agent2.cnf | 19 + node_modules/tunnel/test/keys/agent3-cert.pem | 14 + node_modules/tunnel/test/keys/agent3-csr.pem | 10 + node_modules/tunnel/test/keys/agent3-key.pem | 9 + node_modules/tunnel/test/keys/agent3.cnf | 19 + node_modules/tunnel/test/keys/agent4-cert.pem | 15 + node_modules/tunnel/test/keys/agent4-csr.pem | 10 + node_modules/tunnel/test/keys/agent4-key.pem | 9 + node_modules/tunnel/test/keys/agent4.cnf | 21 + node_modules/tunnel/test/keys/ca1-cert.pem | 14 + node_modules/tunnel/test/keys/ca1-cert.srl | 1 + node_modules/tunnel/test/keys/ca1-key.pem | 17 + node_modules/tunnel/test/keys/ca1.cnf | 17 + node_modules/tunnel/test/keys/ca2-cert.pem | 14 + node_modules/tunnel/test/keys/ca2-cert.srl | 1 + node_modules/tunnel/test/keys/ca2-crl.pem | 10 + .../tunnel/test/keys/ca2-database.txt | 1 + node_modules/tunnel/test/keys/ca2-key.pem | 17 + node_modules/tunnel/test/keys/ca2-serial | 1 + node_modules/tunnel/test/keys/ca2.cnf | 17 + node_modules/tunnel/test/keys/ca3-cert.pem | 14 + node_modules/tunnel/test/keys/ca3-cert.srl | 1 + node_modules/tunnel/test/keys/ca3-key.pem | 17 + node_modules/tunnel/test/keys/ca3.cnf | 17 + node_modules/tunnel/test/keys/ca4-cert.pem | 14 + node_modules/tunnel/test/keys/ca4-cert.srl | 1 + node_modules/tunnel/test/keys/ca4-key.pem | 17 + node_modules/tunnel/test/keys/ca4.cnf | 17 + node_modules/tunnel/test/keys/client.cnf | 16 + .../tunnel/test/keys/client1-cert.pem | 14 + node_modules/tunnel/test/keys/client1-csr.pem | 12 + node_modules/tunnel/test/keys/client1-key.pem | 15 + node_modules/tunnel/test/keys/client1.cnf | 16 + .../tunnel/test/keys/client2-cert.pem | 14 + node_modules/tunnel/test/keys/client2-csr.pem | 12 + node_modules/tunnel/test/keys/client2-key.pem | 15 + node_modules/tunnel/test/keys/client2.cnf | 16 + node_modules/tunnel/test/keys/proxy1-cert.pem | 14 + node_modules/tunnel/test/keys/proxy1-csr.pem | 12 + node_modules/tunnel/test/keys/proxy1-key.pem | 15 + node_modules/tunnel/test/keys/proxy1.cnf | 16 + node_modules/tunnel/test/keys/proxy2-cert.pem | 14 + node_modules/tunnel/test/keys/proxy2-csr.pem | 12 + node_modules/tunnel/test/keys/proxy2-key.pem | 15 + node_modules/tunnel/test/keys/proxy2.cnf | 16 + .../tunnel/test/keys/server1-cert.pem | 14 + node_modules/tunnel/test/keys/server1-csr.pem | 12 + node_modules/tunnel/test/keys/server1-key.pem | 15 + node_modules/tunnel/test/keys/server1.cnf | 16 + .../tunnel/test/keys/server2-cert.pem | 14 + node_modules/tunnel/test/keys/server2-csr.pem | 12 + node_modules/tunnel/test/keys/server2-key.pem | 15 + node_modules/tunnel/test/keys/server2.cnf | 16 + node_modules/tunnel/test/keys/test.js | 43 + node_modules/typed-rest-client/Handlers.d.ts | 4 + node_modules/typed-rest-client/Handlers.js | 10 + .../typed-rest-client/HttpClient.d.ts | 103 + node_modules/typed-rest-client/HttpClient.js | 455 ++ node_modules/typed-rest-client/Index.d.ts | 0 node_modules/typed-rest-client/Index.js | 2 + .../typed-rest-client/Interfaces.d.ts | 62 + node_modules/typed-rest-client/Interfaces.js | 5 + node_modules/typed-rest-client/LICENSE | 21 + node_modules/typed-rest-client/README.md | 100 + .../typed-rest-client/RestClient.d.ts | 77 + node_modules/typed-rest-client/RestClient.js | 217 + .../typed-rest-client/ThirdPartyNotice.txt | 1318 ++++ node_modules/typed-rest-client/Util.d.ts | 7 + node_modules/typed-rest-client/Util.js | 35 + .../handlers/basiccreds.d.ts | 9 + .../typed-rest-client/handlers/basiccreds.js | 24 + .../handlers/bearertoken.d.ts | 8 + .../typed-rest-client/handlers/bearertoken.js | 23 + .../typed-rest-client/handlers/ntlm.d.ts | 13 + .../typed-rest-client/handlers/ntlm.js | 137 + .../handlers/personalaccesstoken.d.ts | 8 + .../handlers/personalaccesstoken.js | 23 + .../opensource/node-http-ntlm/ntlm.js | 389 ++ .../opensource/node-http-ntlm/readme.txt | 6 + node_modules/typed-rest-client/package.json | 73 + node_modules/underscore/LICENSE | 23 + node_modules/underscore/README.md | 22 + node_modules/underscore/package.json | 73 + node_modules/underscore/underscore-min.js | 6 + node_modules/underscore/underscore-min.map | 1 + node_modules/underscore/underscore.js | 1548 +++++ node_modules/uuid/.eslintrc.json | 47 + node_modules/uuid/AUTHORS | 5 + node_modules/uuid/CHANGELOG.md | 110 + node_modules/uuid/LICENSE.md | 21 + node_modules/uuid/README.md | 293 + node_modules/uuid/README_js.md | 280 + node_modules/uuid/bin/uuid | 65 + node_modules/uuid/index.js | 8 + node_modules/uuid/lib/bytesToUuid.js | 24 + node_modules/uuid/lib/md5-browser.js | 216 + node_modules/uuid/lib/md5.js | 25 + node_modules/uuid/lib/rng-browser.js | 34 + node_modules/uuid/lib/rng.js | 8 + node_modules/uuid/lib/sha1-browser.js | 89 + node_modules/uuid/lib/sha1.js | 25 + node_modules/uuid/lib/v35.js | 57 + node_modules/uuid/package.json | 96 + node_modules/uuid/v1.js | 109 + node_modules/uuid/v3.js | 4 + node_modules/uuid/v4.js | 29 + node_modules/uuid/v5.js | 3 + package-lock.json | 5412 +++++++++++++++++ package.json | 50 + src/installer.ts | 234 + src/setup-node.ts | 31 + toolkit/actions-core-0.0.0.tgz | Bin 0 -> 3556 bytes toolkit/actions-exec-0.0.0.tgz | Bin 0 -> 11281 bytes toolkit/actions-exit-0.0.0.tgz | Bin 0 -> 1983 bytes toolkit/actions-io-0.0.0.tgz | Bin 0 -> 7727 bytes toolkit/actions-tool-cache-0.0.0.tgz | Bin 0 -> 118504 bytes tsconfig.json | 66 + 244 files changed, 22913 insertions(+) create mode 100644 .github/eslint-compact.json create mode 100644 .github/eslint-stylish.json create mode 100644 .github/tsc.json create mode 100644 .github/workflows/workflow.yml create mode 100644 .gitignore create mode 100644 .prettierrc.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 __tests__/installer.test.ts create mode 100644 action.yml create mode 100644 docs/contributors.md create mode 100644 externals/7zr.exe create mode 100644 jest.config.js create mode 100644 lib/installer.js create mode 100644 lib/setup-node.js create mode 100644 node_modules/.bin/semver create mode 100644 node_modules/.bin/semver.cmd create mode 100644 node_modules/.bin/shjs create mode 100644 node_modules/.bin/shjs.cmd create mode 100644 node_modules/.bin/uuid create mode 100644 node_modules/.bin/uuid.cmd create mode 100644 node_modules/@actions/core/README.md create mode 100644 node_modules/@actions/core/lib/command.d.ts create mode 100644 node_modules/@actions/core/lib/command.js create mode 100644 node_modules/@actions/core/lib/command.js.map create mode 100644 node_modules/@actions/core/lib/core.d.ts create mode 100644 node_modules/@actions/core/lib/core.js create mode 100644 node_modules/@actions/core/lib/core.js.map create mode 100644 node_modules/@actions/core/package.json create mode 100644 node_modules/@actions/exec/README.md create mode 100644 node_modules/@actions/exec/lib/exec.d.ts create mode 100644 node_modules/@actions/exec/lib/exec.js create mode 100644 node_modules/@actions/exec/lib/exec.js.map create mode 100644 node_modules/@actions/exec/lib/interfaces.d.ts create mode 100644 node_modules/@actions/exec/lib/interfaces.js create mode 100644 node_modules/@actions/exec/lib/interfaces.js.map create mode 100644 node_modules/@actions/exec/lib/toolrunner.d.ts create mode 100644 node_modules/@actions/exec/lib/toolrunner.js create mode 100644 node_modules/@actions/exec/lib/toolrunner.js.map create mode 100644 node_modules/@actions/exec/package.json create mode 100644 node_modules/@actions/exit/LICENSE.md create mode 100644 node_modules/@actions/exit/README.md create mode 100644 node_modules/@actions/exit/lib/exit.d.ts create mode 100644 node_modules/@actions/exit/lib/exit.js create mode 100644 node_modules/@actions/exit/lib/exit.js.map create mode 100644 node_modules/@actions/exit/package.json create mode 100644 node_modules/@actions/io/README.md create mode 100644 node_modules/@actions/io/lib/io-util.d.ts create mode 100644 node_modules/@actions/io/lib/io-util.js create mode 100644 node_modules/@actions/io/lib/io-util.js.map create mode 100644 node_modules/@actions/io/lib/io.d.ts create mode 100644 node_modules/@actions/io/lib/io.js create mode 100644 node_modules/@actions/io/lib/io.js.map create mode 100644 node_modules/@actions/io/package.json create mode 100644 node_modules/@actions/tool-cache/README.md create mode 100644 node_modules/@actions/tool-cache/lib/tool-cache.d.ts create mode 100644 node_modules/@actions/tool-cache/lib/tool-cache.js create mode 100644 node_modules/@actions/tool-cache/lib/tool-cache.js.map create mode 100644 node_modules/@actions/tool-cache/package.json create mode 100644 node_modules/@actions/tool-cache/scripts/Invoke-7zdec.ps1 create mode 100644 node_modules/@actions/tool-cache/scripts/externals/7zdec.exe create mode 100644 node_modules/@actions/tool-cache/scripts/externals/unzip create mode 100644 node_modules/semver/CHANGELOG.md create mode 100644 node_modules/semver/LICENSE create mode 100644 node_modules/semver/README.md create mode 100755 node_modules/semver/bin/semver create mode 100644 node_modules/semver/package.json create mode 100644 node_modules/semver/range.bnf create mode 100644 node_modules/semver/semver.js create mode 100644 node_modules/shelljs/.documentup.json create mode 100644 node_modules/shelljs/.jshintrc create mode 100644 node_modules/shelljs/.npmignore create mode 100644 node_modules/shelljs/.travis.yml create mode 100644 node_modules/shelljs/LICENSE create mode 100644 node_modules/shelljs/README.md create mode 100644 node_modules/shelljs/bin/shjs create mode 100644 node_modules/shelljs/global.js create mode 100644 node_modules/shelljs/make.js create mode 100644 node_modules/shelljs/package.json create mode 100644 node_modules/shelljs/scripts/generate-docs.js create mode 100644 node_modules/shelljs/scripts/run-tests.js create mode 100644 node_modules/shelljs/shell.js create mode 100644 node_modules/shelljs/src/cat.js create mode 100644 node_modules/shelljs/src/cd.js create mode 100644 node_modules/shelljs/src/chmod.js create mode 100644 node_modules/shelljs/src/common.js create mode 100644 node_modules/shelljs/src/cp.js create mode 100644 node_modules/shelljs/src/dirs.js create mode 100644 node_modules/shelljs/src/echo.js create mode 100644 node_modules/shelljs/src/error.js create mode 100644 node_modules/shelljs/src/exec.js create mode 100644 node_modules/shelljs/src/find.js create mode 100644 node_modules/shelljs/src/grep.js create mode 100644 node_modules/shelljs/src/ln.js create mode 100644 node_modules/shelljs/src/ls.js create mode 100644 node_modules/shelljs/src/mkdir.js create mode 100644 node_modules/shelljs/src/mv.js create mode 100644 node_modules/shelljs/src/popd.js create mode 100644 node_modules/shelljs/src/pushd.js create mode 100644 node_modules/shelljs/src/pwd.js create mode 100644 node_modules/shelljs/src/rm.js create mode 100644 node_modules/shelljs/src/sed.js create mode 100644 node_modules/shelljs/src/tempdir.js create mode 100644 node_modules/shelljs/src/test.js create mode 100644 node_modules/shelljs/src/to.js create mode 100644 node_modules/shelljs/src/toEnd.js create mode 100644 node_modules/shelljs/src/which.js create mode 100644 node_modules/tunnel/.npmignore create mode 100644 node_modules/tunnel/CHANGELOG.md create mode 100644 node_modules/tunnel/LICENSE create mode 100644 node_modules/tunnel/README.md create mode 100644 node_modules/tunnel/index.js create mode 100644 node_modules/tunnel/lib/tunnel.js create mode 100644 node_modules/tunnel/package.json create mode 100644 node_modules/tunnel/test/http-over-http.js create mode 100644 node_modules/tunnel/test/http-over-https.js create mode 100644 node_modules/tunnel/test/https-over-http.js create mode 100644 node_modules/tunnel/test/https-over-https-error.js create mode 100644 node_modules/tunnel/test/https-over-https.js create mode 100644 node_modules/tunnel/test/keys/Makefile create mode 100644 node_modules/tunnel/test/keys/agent1-cert.pem create mode 100644 node_modules/tunnel/test/keys/agent1-csr.pem create mode 100644 node_modules/tunnel/test/keys/agent1-key.pem create mode 100644 node_modules/tunnel/test/keys/agent1.cnf create mode 100644 node_modules/tunnel/test/keys/agent2-cert.pem create mode 100644 node_modules/tunnel/test/keys/agent2-csr.pem create mode 100644 node_modules/tunnel/test/keys/agent2-key.pem create mode 100644 node_modules/tunnel/test/keys/agent2.cnf create mode 100644 node_modules/tunnel/test/keys/agent3-cert.pem create mode 100644 node_modules/tunnel/test/keys/agent3-csr.pem create mode 100644 node_modules/tunnel/test/keys/agent3-key.pem create mode 100644 node_modules/tunnel/test/keys/agent3.cnf create mode 100644 node_modules/tunnel/test/keys/agent4-cert.pem create mode 100644 node_modules/tunnel/test/keys/agent4-csr.pem create mode 100644 node_modules/tunnel/test/keys/agent4-key.pem create mode 100644 node_modules/tunnel/test/keys/agent4.cnf create mode 100644 node_modules/tunnel/test/keys/ca1-cert.pem create mode 100644 node_modules/tunnel/test/keys/ca1-cert.srl create mode 100644 node_modules/tunnel/test/keys/ca1-key.pem create mode 100644 node_modules/tunnel/test/keys/ca1.cnf create mode 100644 node_modules/tunnel/test/keys/ca2-cert.pem create mode 100644 node_modules/tunnel/test/keys/ca2-cert.srl create mode 100644 node_modules/tunnel/test/keys/ca2-crl.pem create mode 100644 node_modules/tunnel/test/keys/ca2-database.txt create mode 100644 node_modules/tunnel/test/keys/ca2-key.pem create mode 100644 node_modules/tunnel/test/keys/ca2-serial create mode 100644 node_modules/tunnel/test/keys/ca2.cnf create mode 100644 node_modules/tunnel/test/keys/ca3-cert.pem create mode 100644 node_modules/tunnel/test/keys/ca3-cert.srl create mode 100644 node_modules/tunnel/test/keys/ca3-key.pem create mode 100644 node_modules/tunnel/test/keys/ca3.cnf create mode 100644 node_modules/tunnel/test/keys/ca4-cert.pem create mode 100644 node_modules/tunnel/test/keys/ca4-cert.srl create mode 100644 node_modules/tunnel/test/keys/ca4-key.pem create mode 100644 node_modules/tunnel/test/keys/ca4.cnf create mode 100644 node_modules/tunnel/test/keys/client.cnf create mode 100644 node_modules/tunnel/test/keys/client1-cert.pem create mode 100644 node_modules/tunnel/test/keys/client1-csr.pem create mode 100644 node_modules/tunnel/test/keys/client1-key.pem create mode 100644 node_modules/tunnel/test/keys/client1.cnf create mode 100644 node_modules/tunnel/test/keys/client2-cert.pem create mode 100644 node_modules/tunnel/test/keys/client2-csr.pem create mode 100644 node_modules/tunnel/test/keys/client2-key.pem create mode 100644 node_modules/tunnel/test/keys/client2.cnf create mode 100644 node_modules/tunnel/test/keys/proxy1-cert.pem create mode 100644 node_modules/tunnel/test/keys/proxy1-csr.pem create mode 100644 node_modules/tunnel/test/keys/proxy1-key.pem create mode 100644 node_modules/tunnel/test/keys/proxy1.cnf create mode 100644 node_modules/tunnel/test/keys/proxy2-cert.pem create mode 100644 node_modules/tunnel/test/keys/proxy2-csr.pem create mode 100644 node_modules/tunnel/test/keys/proxy2-key.pem create mode 100644 node_modules/tunnel/test/keys/proxy2.cnf create mode 100644 node_modules/tunnel/test/keys/server1-cert.pem create mode 100644 node_modules/tunnel/test/keys/server1-csr.pem create mode 100644 node_modules/tunnel/test/keys/server1-key.pem create mode 100644 node_modules/tunnel/test/keys/server1.cnf create mode 100644 node_modules/tunnel/test/keys/server2-cert.pem create mode 100644 node_modules/tunnel/test/keys/server2-csr.pem create mode 100644 node_modules/tunnel/test/keys/server2-key.pem create mode 100644 node_modules/tunnel/test/keys/server2.cnf create mode 100644 node_modules/tunnel/test/keys/test.js create mode 100644 node_modules/typed-rest-client/Handlers.d.ts create mode 100644 node_modules/typed-rest-client/Handlers.js create mode 100644 node_modules/typed-rest-client/HttpClient.d.ts create mode 100644 node_modules/typed-rest-client/HttpClient.js create mode 100644 node_modules/typed-rest-client/Index.d.ts create mode 100644 node_modules/typed-rest-client/Index.js create mode 100644 node_modules/typed-rest-client/Interfaces.d.ts create mode 100644 node_modules/typed-rest-client/Interfaces.js create mode 100644 node_modules/typed-rest-client/LICENSE create mode 100644 node_modules/typed-rest-client/README.md create mode 100644 node_modules/typed-rest-client/RestClient.d.ts create mode 100644 node_modules/typed-rest-client/RestClient.js create mode 100644 node_modules/typed-rest-client/ThirdPartyNotice.txt create mode 100644 node_modules/typed-rest-client/Util.d.ts create mode 100644 node_modules/typed-rest-client/Util.js create mode 100644 node_modules/typed-rest-client/handlers/basiccreds.d.ts create mode 100644 node_modules/typed-rest-client/handlers/basiccreds.js create mode 100644 node_modules/typed-rest-client/handlers/bearertoken.d.ts create mode 100644 node_modules/typed-rest-client/handlers/bearertoken.js create mode 100644 node_modules/typed-rest-client/handlers/ntlm.d.ts create mode 100644 node_modules/typed-rest-client/handlers/ntlm.js create mode 100644 node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts create mode 100644 node_modules/typed-rest-client/handlers/personalaccesstoken.js create mode 100644 node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js create mode 100644 node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt create mode 100644 node_modules/typed-rest-client/package.json create mode 100644 node_modules/underscore/LICENSE create mode 100644 node_modules/underscore/README.md create mode 100644 node_modules/underscore/package.json create mode 100644 node_modules/underscore/underscore-min.js create mode 100644 node_modules/underscore/underscore-min.map create mode 100644 node_modules/underscore/underscore.js create mode 100644 node_modules/uuid/.eslintrc.json create mode 100644 node_modules/uuid/AUTHORS create mode 100644 node_modules/uuid/CHANGELOG.md create mode 100644 node_modules/uuid/LICENSE.md create mode 100644 node_modules/uuid/README.md create mode 100644 node_modules/uuid/README_js.md create mode 100755 node_modules/uuid/bin/uuid create mode 100644 node_modules/uuid/index.js create mode 100644 node_modules/uuid/lib/bytesToUuid.js create mode 100644 node_modules/uuid/lib/md5-browser.js create mode 100644 node_modules/uuid/lib/md5.js create mode 100644 node_modules/uuid/lib/rng-browser.js create mode 100644 node_modules/uuid/lib/rng.js create mode 100644 node_modules/uuid/lib/sha1-browser.js create mode 100644 node_modules/uuid/lib/sha1.js create mode 100644 node_modules/uuid/lib/v35.js create mode 100644 node_modules/uuid/package.json create mode 100644 node_modules/uuid/v1.js create mode 100644 node_modules/uuid/v3.js create mode 100644 node_modules/uuid/v4.js create mode 100644 node_modules/uuid/v5.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/installer.ts create mode 100644 src/setup-node.ts create mode 100644 toolkit/actions-core-0.0.0.tgz create mode 100644 toolkit/actions-exec-0.0.0.tgz create mode 100644 toolkit/actions-exit-0.0.0.tgz create mode 100644 toolkit/actions-io-0.0.0.tgz create mode 100644 toolkit/actions-tool-cache-0.0.0.tgz create mode 100644 tsconfig.json diff --git a/.github/eslint-compact.json b/.github/eslint-compact.json new file mode 100644 index 0000000..72173f0 --- /dev/null +++ b/.github/eslint-compact.json @@ -0,0 +1,18 @@ +{ + "problemMatcher": [ + { + "owner": "eslint-compact", + "pattern": [ + { + "regexp": "^(.+):\\sline\\s(\\d+),\\scol\\s(\\d+),\\s(Error|Warning|Info)\\s-\\s(.+)\\s\\((.+)\\)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5, + "code": 6 + } + ] + } + ] +} diff --git a/.github/eslint-stylish.json b/.github/eslint-stylish.json new file mode 100644 index 0000000..1d75d6c --- /dev/null +++ b/.github/eslint-stylish.json @@ -0,0 +1,22 @@ +{ + "problemMatcher": [ + { + "owner": "eslint-stylish", + "pattern": [ + { + "regexp": "^([^\\s].*)$", + "file": 1 + }, + { + "regexp": "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.*)\\s\\s+(.*)$", + "line": 1, + "column": 2, + "severity": 3, + "message": 4, + "code": 5, + "loop": true + } + ] + } + ] +} diff --git a/.github/tsc.json b/.github/tsc.json new file mode 100644 index 0000000..5b0b664 --- /dev/null +++ b/.github/tsc.json @@ -0,0 +1,17 @@ +{ + "problemMatcher": [ + { + "owner": "tsc", + "pattern": [ + { + "regexp": "^(?:\\s+\\d+\\>)?([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\)\\s*:\\s+(error|warning|info)\\s+(\\w{1,2}\\d+)\\s*:\\s*(.*)$", + "file": 1, + "location": 2, + "severity": 3, + "code": 4, + "message": 5 + } + ] + } + ] +} \ No newline at end of file diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml new file mode 100644 index 0000000..024c7f1 --- /dev/null +++ b/.github/workflows/workflow.yml @@ -0,0 +1,25 @@ +name: Main workflow +on: [push] +jobs: + run: + name: Run + runs-on: ${{ matrix.operating-system }} + strategy: + matrix: + operating-system: [ubuntu-latest, windows-latest] + steps: + - uses: actions/checkout@master + + - name: Set Node.js 10.x + uses: actions/setup-node@master + with: + version: 10.x + + - name: npm install + run: npm install + + - name: Lint + run: npm run format-check + + - name: npm test + run: npm test diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f42404f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +!node_modules/ +__tests__/runner/* diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..f6736bc --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,11 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "trailingComma": "none", + "bracketSpacing": false, + "arrowParens": "avoid", + "parser": "typescript" + } \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a426ef2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2018 GitHub, Inc. and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1bd83f2 --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +# setup-node + +This action sets by node environment for use in actions by: + +- optionally downloading and caching a version of node - npm by version spec and add to PATH +- registering problem matchers for error output + +# Usage + +See [action.yml](action.yml) + +Basic: +```yaml +steps: +- uses: actions/checkout@master +- uses: actions/setup-node@v1 + with: + version: '10.x' +- run: npm install +- run: npm test +``` + +Matrix Testing: +```yaml +jobs: + build: + runs-on: ubuntu-16.04 + strategy: + matrix: + node: [ '10', '8' ] + name: Node ${{ matrix.node }} sample + steps: + - uses: actions/checkout@master + - name: Setup node + uses: actions/setup-node@v1 + with: + version: ${{ matrix.node }} + - run: npm install + - run: npm test +``` + +# License + +The scripts and documentation in this project are released under the [MIT License](LICENSE) + +# Contributions + +Contributions are welcome! See [Contributor's Guide](docs/contributors.md) diff --git a/__tests__/installer.test.ts b/__tests__/installer.test.ts new file mode 100644 index 0000000..e2aa653 --- /dev/null +++ b/__tests__/installer.test.ts @@ -0,0 +1,132 @@ +import io = require('@actions/io'); +import fs = require('fs'); +import os = require('os'); +import path = require('path'); + +const toolDir = path.join( + process.cwd(), + 'runner', + path.join( + Math.random() + .toString(36) + .substring(7) + ), + 'tools' +); +const tempDir = path.join( + process.cwd(), + 'runner', + path.join( + Math.random() + .toString(36) + .substring(7) + ), + 'temp' +); + +process.env['RUNNER_TOOL_CACHE'] = toolDir; +process.env['RUNNER_TEMP'] = tempDir; +import * as installer from '../src/installer'; + +const IS_WINDOWS = process.platform === 'win32'; + +describe('installer tests', () => { + beforeAll(async () => { + await io.rmRF(toolDir); + await io.rmRF(tempDir); + }, 100000); + + afterAll(async () => { + try { + await io.rmRF(toolDir); + await io.rmRF(tempDir); + } catch { + console.log('Failed to remove test directories'); + } + }, 100000); + + it('Acquires version of node if no matching version is installed', async () => { + await installer.getNode('10.16.0'); + const nodeDir = path.join(toolDir, 'node', '10.16.0', os.arch()); + + expect(fs.existsSync(`${nodeDir}.complete`)).toBe(true); + if (IS_WINDOWS) { + expect(fs.existsSync(path.join(nodeDir, 'node.exe'))).toBe(true); + } else { + expect(fs.existsSync(path.join(nodeDir, 'bin', 'node'))).toBe(true); + } + }, 100000); + + if (IS_WINDOWS) { + it('Falls back to backup location if first one doesnt contain correct version', async () => { + await installer.getNode('5.10.1'); + const nodeDir = path.join(toolDir, 'node', '5.10.1', os.arch()); + + expect(fs.existsSync(`${nodeDir}.complete`)).toBe(true); + expect(fs.existsSync(path.join(nodeDir, 'node.exe'))).toBe(true); + }, 100000); + + it('Falls back to third location if second one doesnt contain correct version', async () => { + await installer.getNode('0.12.18'); + const nodeDir = path.join(toolDir, 'node', '0.12.18', os.arch()); + + expect(fs.existsSync(`${nodeDir}.complete`)).toBe(true); + expect(fs.existsSync(path.join(nodeDir, 'node.exe'))).toBe(true); + }, 100000); + } + + it('Throws if no location contains correct node version', async () => { + let thrown = false; + try { + await installer.getNode('1000'); + } catch { + thrown = true; + } + expect(thrown).toBe(true); + }); + + it('Acquires version of node with long paths', async () => { + const toolpath = await installer.getNode('8.8.1'); + const nodeDir = path.join(toolDir, 'node', '8.8.1', os.arch()); + + expect(fs.existsSync(`${nodeDir}.complete`)).toBe(true); + if (IS_WINDOWS) { + expect(fs.existsSync(path.join(nodeDir, 'node.exe'))).toBe(true); + } else { + expect(fs.existsSync(path.join(nodeDir, 'bin', 'node'))).toBe(true); + } + }, 100000); + + it('Uses version of node installed in cache', async () => { + const nodeDir: string = path.join(toolDir, 'node', '250.0.0', os.arch()); + await io.mkdirP(nodeDir); + fs.writeFileSync(`${nodeDir}.complete`, 'hello'); + // This will throw if it doesn't find it in the cache (because no such version exists) + await installer.getNode('250.0.0'); + return; + }); + + it('Doesnt use version of node that was only partially installed in cache', async () => { + const nodeDir: string = path.join(toolDir, 'node', '251.0.0', os.arch()); + await io.mkdirP(nodeDir); + let thrown = false; + try { + // This will throw if it doesn't find it in the cache (because no such version exists) + await installer.getNode('251.0.0'); + } catch { + thrown = true; + } + expect(thrown).toBe(true); + return; + }); + + it('Resolves semantic versions of node installed in cache', async () => { + const nodeDir: string = path.join(toolDir, 'node', '252.0.0', os.arch()); + await io.mkdirP(nodeDir); + fs.writeFileSync(`${nodeDir}.complete`, 'hello'); + // These will throw if it doesn't find it in the cache (because no such version exists) + await installer.getNode('252.0.0'); + await installer.getNode('252'); + await installer.getNode('252.0'); + }); +}); diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..0d97307 --- /dev/null +++ b/action.yml @@ -0,0 +1,10 @@ +name: 'Setup Node.js for use with actions' +description: 'Setup a Node.js environment and add it to the PATH, additionally providing proxy support' +author: 'GitHub' +inputs: + version: + description: 'Version Spec of the version to use. Examples: 10.x, 10.15.1, >=10.15.0, lts' + default: '10.x' +runs: + using: 'node12' + main: 'lib/setup-node.js' diff --git a/docs/contributors.md b/docs/contributors.md new file mode 100644 index 0000000..fece2ea --- /dev/null +++ b/docs/contributors.md @@ -0,0 +1,22 @@ +# Contributors + +### Checkin + +- Do checkin source (src) +- Do checkin build output (lib) +- Do checkin runtime node_modules +- Do not checkin devDependency node_modules (husky can help see below) + +### devDependencies + +In order to handle correctly checking in node_modules without devDependencies, we run [Husky](https://github.com/typicode/husky) before each commit. +This step ensures that formatting and checkin rules are followed and that devDependencies are excluded. To make sure Husky runs correctly, please use the following workflow: + +``` +npm install # installs all devDependencies including Husky +git add abc.ext # Add the files you've changed. This should include files in src, lib, and node_modules (see above) +git commit -m "Informative commit message" # Commit. This will run Husky +``` + +During the commit step, Husky will take care of formatting all files with [Prettier](https://github.com/prettier/prettier) as well as pruning out devDependencies using `npm prune --production`. +It will also make sure these changes are appropriately included in your commit (no further work is needed) \ No newline at end of file diff --git a/externals/7zr.exe b/externals/7zr.exe new file mode 100644 index 0000000000000000000000000000000000000000..04e96e7235b8444e9872224f6416fe819215bc0e GIT binary patch literal 518656 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	R#+)(QJ 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 F;9qQ~yq*96 literal 0 HcmV?d00001 diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..563d4cc --- /dev/null +++ b/jest.config.js @@ -0,0 +1,11 @@ +module.exports = { + clearMocks: true, + moduleFileExtensions: ['js', 'ts'], + testEnvironment: 'node', + testMatch: ['**/*.test.ts'], + testRunner: 'jest-circus/runner', + transform: { + '^.+\\.ts$': 'ts-jest' + }, + verbose: true +} \ No newline at end of file diff --git a/lib/installer.js b/lib/installer.js new file mode 100644 index 0000000..7e6a7de --- /dev/null +++ b/lib/installer.js @@ -0,0 +1,227 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// Load tempDirectory before it gets wiped by tool-cache +let tempDirectory = process.env['RUNNER_TEMPDIRECTORY'] || ''; +const core = __importStar(require("@actions/core")); +const io = __importStar(require("@actions/io")); +const tc = __importStar(require("@actions/tool-cache")); +const restm = __importStar(require("typed-rest-client/RestClient")); +const os = __importStar(require("os")); +const path = __importStar(require("path")); +const semver = __importStar(require("semver")); +let osPlat = os.platform(); +let osArch = os.arch(); +if (!tempDirectory) { + let baseLocation; + if (process.platform === 'win32') { + // On windows use the USERPROFILE env variable + baseLocation = process.env['USERPROFILE'] || 'C:\\'; + } + else { + if (process.platform === 'darwin') { + baseLocation = '/Users'; + } + else { + baseLocation = '/home'; + } + } + tempDirectory = path.join(baseLocation, 'actions', 'temp'); +} +function getNode(versionSpec) { + return __awaiter(this, void 0, void 0, function* () { + // check cache + let toolPath; + toolPath = tc.find('node', versionSpec); + // If not found in cache, download + if (!toolPath) { + let version; + const c = semver.clean(versionSpec) || ''; + // If explicit version + if (semver.valid(c) != null) { + // version to download + version = versionSpec; + } + else { + // query nodejs.org for a matching version + version = yield queryLatestMatch(versionSpec); + if (!version) { + throw new Error(`Unable to find Node version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.`); + } + // check cache + toolPath = tc.find('node', version); + } + if (!toolPath) { + // download, extract, cache + toolPath = yield acquireNode(version); + } + } + // + // a tool installer initimately knows details about the layout of that tool + // for example, node binary is in the bin folder after the extract on Mac/Linux. + // layouts could change by version, by platform etc... but that's the tool installers job + // + if (osPlat != 'win32') { + toolPath = path.join(toolPath, 'bin'); + } + // + // prepend the tools path. instructs the agent to prepend for future tasks + core.addPath(toolPath); + }); +} +exports.getNode = getNode; +function queryLatestMatch(versionSpec) { + return __awaiter(this, void 0, void 0, function* () { + // node offers a json list of versions + let dataFileName; + switch (osPlat) { + case 'linux': + dataFileName = 'linux-' + osArch; + break; + case 'darwin': + dataFileName = 'osx-' + osArch + '-tar'; + break; + case 'win32': + dataFileName = 'win-' + osArch + '-exe'; + break; + default: + throw new Error(`Unexpected OS '${osPlat}'`); + } + let versions = []; + let dataUrl = 'https://nodejs.org/dist/index.json'; + let rest = new restm.RestClient('vsts-node-tool'); + let nodeVersions = (yield rest.get(dataUrl)).result || []; + nodeVersions.forEach((nodeVersion) => { + // ensure this version supports your os and platform + if (nodeVersion.files.indexOf(dataFileName) >= 0) { + versions.push(nodeVersion.version); + } + }); + // get the latest version that matches the version spec + let version = evaluateVersions(versions, versionSpec); + return version; + }); +} +// TODO - should we just export this from @actions/tool-cache? Lifted directly from there +function evaluateVersions(versions, versionSpec) { + let version = ''; + core.debug(`evaluating ${versions.length} versions`); + versions = versions.sort((a, b) => { + if (semver.gt(a, b)) { + return 1; + } + return -1; + }); + for (let i = versions.length - 1; i >= 0; i--) { + const potential = versions[i]; + const satisfied = semver.satisfies(potential, versionSpec); + if (satisfied) { + version = potential; + break; + } + } + if (version) { + core.debug(`matched: ${version}`); + } + else { + core.debug('match not found'); + } + return version; +} +function acquireNode(version) { + return __awaiter(this, void 0, void 0, function* () { + // + // Download - a tool installer intimately knows how to get the tool (and construct urls) + // + version = semver.clean(version) || ''; + let fileName = osPlat == 'win32' + ? 'node-v' + version + '-win-' + os.arch() + : 'node-v' + version + '-' + osPlat + '-' + os.arch(); + let urlFileName = osPlat == 'win32' ? fileName + '.7z' : fileName + '.tar.gz'; + let downloadUrl = 'https://nodejs.org/dist/v' + version + '/' + urlFileName; + let downloadPath; + try { + downloadPath = yield tc.downloadTool(downloadUrl); + } + catch (err) { + if (err instanceof tc.HTTPError && err.httpStatusCode == 404) { + return yield acquireNodeFromFallbackLocation(version); + } + throw err; + } + // + // Extract + // + let extPath; + if (osPlat == 'win32') { + let _7zPath = path.join(__dirname, '..', 'externals', '7zr.exe'); + extPath = yield tc.extract7z(downloadPath, undefined, _7zPath); + } + else { + extPath = yield tc.extractTar(downloadPath); + } + // + // Install into the local tool cache - node extracts with a root folder that matches the fileName downloaded + // + let toolRoot = path.join(extPath, fileName); + return yield tc.cacheDir(toolRoot, 'node', version); + }); +} +// For non LTS versions of Node, the files we need (for Windows) are sometimes located +// in a different folder than they normally are for other versions. +// Normally the format is similar to: https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-x64.7z +// In this case, there will be two files located at: +// /dist/v5.10.1/win-x64/node.exe +// /dist/v5.10.1/win-x64/node.lib +// If this is not the structure, there may also be two files located at: +// /dist/v0.12.18/node.exe +// /dist/v0.12.18/node.lib +// This method attempts to download and cache the resources from these alternative locations. +// Note also that the files are normally zipped but in this case they are just an exe +// and lib file in a folder, not zipped. +function acquireNodeFromFallbackLocation(version) { + return __awaiter(this, void 0, void 0, function* () { + // Create temporary folder to download in to + let tempDownloadFolder = 'temp_' + Math.floor(Math.random() * 2000000000); + let tempDir = path.join(tempDirectory, tempDownloadFolder); + yield io.mkdirP(tempDir); + let exeUrl; + let libUrl; + try { + exeUrl = `https://nodejs.org/dist/v${version}/win-${os.arch()}/node.exe`; + libUrl = `https://nodejs.org/dist/v${version}/win-${os.arch()}/node.lib`; + const exePath = yield tc.downloadTool(exeUrl); + yield io.mv(exePath, path.join(tempDir, 'node.exe')); + const libPath = yield tc.downloadTool(libUrl); + yield io.mv(libPath, path.join(tempDir, 'node.lib')); + } + catch (err) { + if (err instanceof tc.HTTPError && err.httpStatusCode == 404) { + exeUrl = `https://nodejs.org/dist/v${version}/node.exe`; + libUrl = `https://nodejs.org/dist/v${version}/node.lib`; + const exePath = yield tc.downloadTool(exeUrl); + yield io.mv(exePath, path.join(tempDir, 'node.exe')); + const libPath = yield tc.downloadTool(libUrl); + yield io.mv(libPath, path.join(tempDir, 'node.lib')); + } + else { + throw err; + } + } + return yield tc.cacheDir(tempDir, 'node', version); + }); +} diff --git a/lib/setup-node.js b/lib/setup-node.js new file mode 100644 index 0000000..b59c4b3 --- /dev/null +++ b/lib/setup-node.js @@ -0,0 +1,44 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const core = __importStar(require("@actions/core")); +const installer = __importStar(require("./installer")); +const path = __importStar(require("path")); +function run() { + return __awaiter(this, void 0, void 0, function* () { + try { + // + // Version is optional. If supplied, install / use from the tool cache + // If not supplied then task is still used to setup proxy, auth, etc... + // + const version = core.getInput('version'); + if (version) { + // TODO: installer doesn't support proxy + yield installer.getNode(version); + } + // TODO: setup proxy from runner proxy config + const matchersPath = path.join(__dirname, '..', '.github'); + console.log(`##[add-matcher]${path.join(matchersPath, 'tsc.json')}`); + console.log(`##[add-matcher]${path.join(matchersPath, 'eslint-stylish.json')}`); + console.log(`##[add-matcher]${path.join(matchersPath, 'eslint-compact.json')}`); + } + catch (error) { + core.setFailed(error.message); + } + }); +} +run(); diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 100644 index 0000000..d592e69 --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../semver/bin/semver" "$@" + ret=$? +else + node "$basedir/../semver/bin/semver" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/semver.cmd b/node_modules/.bin/semver.cmd new file mode 100644 index 0000000..37c00a4 --- /dev/null +++ b/node_modules/.bin/semver.cmd @@ -0,0 +1,7 @@ +@IF EXIST "%~dp0\node.exe" ( + "%~dp0\node.exe" "%~dp0\..\semver\bin\semver" %* +) ELSE ( + @SETLOCAL + @SET PATHEXT=%PATHEXT:;.JS;=;% + node "%~dp0\..\semver\bin\semver" %* +) \ No newline at end of file diff --git a/node_modules/.bin/shjs b/node_modules/.bin/shjs new file mode 100644 index 0000000..1d45691 --- /dev/null +++ b/node_modules/.bin/shjs @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../shelljs/bin/shjs" "$@" + ret=$? +else + node "$basedir/../shelljs/bin/shjs" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/shjs.cmd b/node_modules/.bin/shjs.cmd new file mode 100644 index 0000000..3d98b0b --- /dev/null +++ b/node_modules/.bin/shjs.cmd @@ -0,0 +1,7 @@ +@IF EXIST "%~dp0\node.exe" ( + "%~dp0\node.exe" "%~dp0\..\shelljs\bin\shjs" %* +) ELSE ( + @SETLOCAL + @SET PATHEXT=%PATHEXT:;.JS;=;% + node "%~dp0\..\shelljs\bin\shjs" %* +) \ No newline at end of file diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid new file mode 100644 index 0000000..f3bfcf4 --- /dev/null +++ b/node_modules/.bin/uuid @@ -0,0 +1,15 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + "$basedir/node" "$basedir/../uuid/bin/uuid" "$@" + ret=$? +else + node "$basedir/../uuid/bin/uuid" "$@" + ret=$? +fi +exit $ret diff --git a/node_modules/.bin/uuid.cmd b/node_modules/.bin/uuid.cmd new file mode 100644 index 0000000..da52d68 --- /dev/null +++ b/node_modules/.bin/uuid.cmd @@ -0,0 +1,7 @@ +@IF EXIST "%~dp0\node.exe" ( + "%~dp0\node.exe" "%~dp0\..\uuid\bin\uuid" %* +) ELSE ( + @SETLOCAL + @SET PATHEXT=%PATHEXT:;.JS;=;% + node "%~dp0\..\uuid\bin\uuid" %* +) \ No newline at end of file diff --git a/node_modules/@actions/core/README.md b/node_modules/@actions/core/README.md new file mode 100644 index 0000000..d5bf5ba --- /dev/null +++ b/node_modules/@actions/core/README.md @@ -0,0 +1,7 @@ +# `@actions/core` + +> Core functions for setting results, logging, registering secrets and exporting variables across actions + +## Usage + +See [src/core.ts](src/core.ts). diff --git a/node_modules/@actions/core/lib/command.d.ts b/node_modules/@actions/core/lib/command.d.ts new file mode 100644 index 0000000..9ad8647 --- /dev/null +++ b/node_modules/@actions/core/lib/command.d.ts @@ -0,0 +1,16 @@ +interface CommandProperties { + [key: string]: string; +} +/** + * Commands + * + * Command Format: + * ##[name key=value;key=value]message + * + * Examples: + * ##[warning]This is the user warning message + * ##[set-secret name=mypassword]definatelyNotAPassword! + */ +export declare function issueCommand(command: string, properties: CommandProperties, message: string): void; +export declare function issue(name: string, message: string): void; +export {}; diff --git a/node_modules/@actions/core/lib/command.js b/node_modules/@actions/core/lib/command.js new file mode 100644 index 0000000..911698e --- /dev/null +++ b/node_modules/@actions/core/lib/command.js @@ -0,0 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const os = require("os"); +/** + * Commands + * + * Command Format: + * ##[name key=value;key=value]message + * + * Examples: + * ##[warning]This is the user warning message + * ##[set-secret name=mypassword]definatelyNotAPassword! + */ +function issueCommand(command, properties, message) { + const cmd = new Command(command, properties, message); + process.stdout.write(cmd.toString() + os.EOL); +} +exports.issueCommand = issueCommand; +function issue(name, message) { + issueCommand(name, {}, message); +} +exports.issue = issue; +const CMD_PREFIX = '##['; +class Command { + constructor(command, properties, message) { + if (!command) { + command = 'missing.command'; + } + this.command = command; + this.properties = properties; + this.message = message; + } + toString() { + let cmdStr = CMD_PREFIX + this.command; + if (this.properties && Object.keys(this.properties).length > 0) { + cmdStr += ' '; + for (const key in this.properties) { + if (this.properties.hasOwnProperty(key)) { + const val = this.properties[key]; + if (val) { + // safely append the val - avoid blowing up when attempting to + // call .replace() if message is not a string for some reason + cmdStr += `${key}=${escape(`${val || ''}`)};`; + } + } + } + } + cmdStr += ']'; + // safely append the message - avoid blowing up when attempting to + // call .replace() if message is not a string for some reason + const message = `${this.message || ''}`; + cmdStr += escapeData(message); + return cmdStr; + } +} +function escapeData(s) { + return s.replace(/\r/g, '%0D').replace(/\n/g, '%0A'); +} +function escape(s) { + return s + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A') + .replace(/]/g, '%5D') + .replace(/;/g, '%3B'); +} +//# sourceMappingURL=command.js.map \ No newline at end of file diff --git a/node_modules/@actions/core/lib/command.js.map b/node_modules/@actions/core/lib/command.js.map new file mode 100644 index 0000000..28ea330 --- /dev/null +++ b/node_modules/@actions/core/lib/command.js.map @@ -0,0 +1 @@ +{"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":";;AAAA,yBAAwB;AAQxB;;;;;;;;;GASG;AACH,SAAgB,YAAY,CAC1B,OAAe,EACf,UAA6B,EAC7B,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAC/C,CAAC;AAPD,oCAOC;AAED,SAAgB,KAAK,CAAC,IAAY,EAAE,OAAe;IACjD,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAFD,sBAEC;AAED,MAAM,UAAU,GAAG,KAAK,CAAA;AAExB,MAAM,OAAO;IAKX,YAAY,OAAe,EAAE,UAA6B,EAAE,OAAe;QACzE,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,iBAAiB,CAAA;SAC5B;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAA;QAEtC,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9D,MAAM,IAAI,GAAG,CAAA;YACb,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;oBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAChC,IAAI,GAAG,EAAE;wBACP,8DAA8D;wBAC9D,6DAA6D;wBAC7D,MAAM,IAAI,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAA;qBAC9C;iBACF;aACF;SACF;QAED,MAAM,IAAI,GAAG,CAAA;QAEb,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAA;QACvC,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;QAE7B,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC;SACL,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACzB,CAAC"} \ No newline at end of file diff --git a/node_modules/@actions/core/lib/core.d.ts b/node_modules/@actions/core/lib/core.d.ts new file mode 100644 index 0000000..da2572f --- /dev/null +++ b/node_modules/@actions/core/lib/core.d.ts @@ -0,0 +1,57 @@ +/** + * Interface for getInput options + */ +export interface InputOptions { + /** Optional. Whether the input is required. If required and not present, will throw. Defaults to false */ + required?: boolean; +} +/** + * sets env variable for this action and future actions in the job + * @param name the name of the variable to set + * @param val the value of the variable + */ +export declare function exportVariable(name: string, val: string): void; +/** + * exports the variable and registers a secret which will get masked from logs + * @param name the name of the variable to set + * @param val value of the secret + */ +export declare function exportSecret(name: string, val: string): void; +/** + * Prepends inputPath to the PATH (for this action and future actions) + * @param inputPath + */ +export declare function addPath(inputPath: string): void; +/** + * Gets the value of an input. The value is also trimmed. + * + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string + */ +export declare function getInput(name: string, options?: InputOptions): string; +/** + * Sets the action status to neutral + */ +export declare function setNeutral(): void; +/** + * Sets the action status to failed. + * When the action exits it will be with an exit code of 1 + * @param message add error issue message + */ +export declare function setFailed(message: string): void; +/** + * Writes debug message to user log + * @param message debug message + */ +export declare function debug(message: string): void; +/** + * Adds an error issue + * @param message error issue message + */ +export declare function error(message: string): void; +/** + * Adds an warning issue + * @param message warning issue message + */ +export declare function warning(message: string): void; diff --git a/node_modules/@actions/core/lib/core.js b/node_modules/@actions/core/lib/core.js new file mode 100644 index 0000000..092b75b --- /dev/null +++ b/node_modules/@actions/core/lib/core.js @@ -0,0 +1,100 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const exit_1 = require("@actions/exit"); +const command_1 = require("./command"); +const path = require("path"); +//----------------------------------------------------------------------- +// Variables +//----------------------------------------------------------------------- +/** + * sets env variable for this action and future actions in the job + * @param name the name of the variable to set + * @param val the value of the variable + */ +function exportVariable(name, val) { + process.env[name] = val; + command_1.issueCommand('set-env', { name }, val); +} +exports.exportVariable = exportVariable; +/** + * exports the variable and registers a secret which will get masked from logs + * @param name the name of the variable to set + * @param val value of the secret + */ +function exportSecret(name, val) { + exportVariable(name, val); + command_1.issueCommand('set-secret', {}, val); +} +exports.exportSecret = exportSecret; +/** + * Prepends inputPath to the PATH (for this action and future actions) + * @param inputPath + */ +function addPath(inputPath) { + command_1.issueCommand('add-path', {}, inputPath); + process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; +} +exports.addPath = addPath; +/** + * Gets the value of an input. The value is also trimmed. + * + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string + */ +function getInput(name, options) { + const val = process.env[`INPUT_${name.replace(' ', '_').toUpperCase()}`] || ''; + if (options && options.required && !val) { + throw new Error(`Input required and not supplied: ${name}`); + } + return val.trim(); +} +exports.getInput = getInput; +//----------------------------------------------------------------------- +// Results +//----------------------------------------------------------------------- +/** + * Sets the action status to neutral + */ +function setNeutral() { + process.exitCode = exit_1.ExitCode.Neutral; +} +exports.setNeutral = setNeutral; +/** + * Sets the action status to failed. + * When the action exits it will be with an exit code of 1 + * @param message add error issue message + */ +function setFailed(message) { + process.exitCode = exit_1.ExitCode.Failure; + error(message); +} +exports.setFailed = setFailed; +//----------------------------------------------------------------------- +// Logging Commands +//----------------------------------------------------------------------- +/** + * Writes debug message to user log + * @param message debug message + */ +function debug(message) { + command_1.issueCommand('debug', {}, message); +} +exports.debug = debug; +/** + * Adds an error issue + * @param message error issue message + */ +function error(message) { + command_1.issue('error', message); +} +exports.error = error; +/** + * Adds an warning issue + * @param message warning issue message + */ +function warning(message) { + command_1.issue('warning', message); +} +exports.warning = warning; +//# sourceMappingURL=core.js.map \ No newline at end of file diff --git a/node_modules/@actions/core/lib/core.js.map b/node_modules/@actions/core/lib/core.js.map new file mode 100644 index 0000000..b9a308d --- /dev/null +++ b/node_modules/@actions/core/lib/core.js.map @@ -0,0 +1 @@ +{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;AAAA,wCAAsC;AACtC,uCAA6C;AAE7C,6BAA4B;AAU5B,yEAAyE;AACzE,YAAY;AACZ,yEAAyE;AAEzE;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,GAAW;IACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;IACvB,sBAAY,CAAC,SAAS,EAAE,EAAC,IAAI,EAAC,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC;AAHD,wCAGC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,IAAY,EAAE,GAAW;IACpD,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACzB,sBAAY,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;AACrC,CAAC;AAHD,oCAGC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,SAAiB;IACvC,sBAAY,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAA;AAC7E,CAAC;AAHD,0BAGC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAsB;IAC3D,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;IACpE,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAA;KAC5D;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AARD,4BAQC;AAED,yEAAyE;AACzE,UAAU;AACV,yEAAyE;AAEzE;;GAEG;AACH,SAAgB,UAAU;IACxB,OAAO,CAAC,QAAQ,GAAG,eAAQ,CAAC,OAAO,CAAA;AACrC,CAAC;AAFD,gCAEC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,QAAQ,GAAG,eAAQ,CAAC,OAAO,CAAA;IACnC,KAAK,CAAC,OAAO,CAAC,CAAA;AAChB,CAAC;AAHD,8BAGC;AAED,yEAAyE;AACzE,mBAAmB;AACnB,yEAAyE;AAEzE;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,sBAAY,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;AACpC,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,OAAe;IACnC,eAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACzB,CAAC;AAFD,sBAEC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,OAAe;IACrC,eAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;AAC3B,CAAC;AAFD,0BAEC"} \ No newline at end of file diff --git a/node_modules/@actions/core/package.json b/node_modules/@actions/core/package.json new file mode 100644 index 0000000..1b51eee --- /dev/null +++ b/node_modules/@actions/core/package.json @@ -0,0 +1,66 @@ +{ + "_from": "file:toolkit\\actions-core-0.0.0.tgz", + "_id": "@actions/core@0.0.0", + "_inBundle": false, + "_integrity": "sha512-58ituSV1rzBMmmsWoFDnrnsT+Wm4kD/u9NgAGbPvZ7rQHWluYtD5bDbIsjDC6rKFuhqytkxDJPsF/TWBdgc/nA==", + "_location": "/@actions/core", + "_phantomChildren": {}, + "_requested": { + "type": "file", + "where": "C:\\Users\\Administrator\\Documents\\setup-node", + "raw": "@actions/core@file:toolkit/actions-core-0.0.0.tgz", + "name": "@actions/core", + "escapedName": "@actions%2fcore", + "scope": "@actions", + "rawSpec": "file:toolkit/actions-core-0.0.0.tgz", + "saveSpec": "file:toolkit\\actions-core-0.0.0.tgz", + "fetchSpec": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-core-0.0.0.tgz" + }, + "_requiredBy": [ + "/", + "/@actions/tool-cache" + ], + "_resolved": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-core-0.0.0.tgz", + "_shasum": "346d90a534fa6c5021bc2e1b732574fd2c66fc35", + "_spec": "@actions/core@file:toolkit/actions-core-0.0.0.tgz", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node", + "bugs": { + "url": "https://github.com/actions/toolkit/issues" + }, + "bundleDependencies": false, + "dependencies": { + "@actions/exit": "^0.0.0" + }, + "deprecated": false, + "description": "Actions core lib", + "devDependencies": { + "@types/node": "^12.0.2" + }, + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/actions/toolkit/tree/master/packages/core", + "keywords": [ + "core", + "actions" + ], + "license": "MIT", + "main": "lib/core.js", + "name": "@actions/core", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/actions/toolkit.git" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1", + "tsc": "tsc" + }, + "version": "0.0.0" +} diff --git a/node_modules/@actions/exec/README.md b/node_modules/@actions/exec/README.md new file mode 100644 index 0000000..3529e50 --- /dev/null +++ b/node_modules/@actions/exec/README.md @@ -0,0 +1,7 @@ +# `@actions/exec` + +> Functions necessary for running tools on the command line + +## Usage + +See [src/exec.ts](src/exec.ts). \ No newline at end of file diff --git a/node_modules/@actions/exec/lib/exec.d.ts b/node_modules/@actions/exec/lib/exec.d.ts new file mode 100644 index 0000000..5c8f3b3 --- /dev/null +++ b/node_modules/@actions/exec/lib/exec.d.ts @@ -0,0 +1,12 @@ +import * as im from './interfaces'; +/** + * Exec a command. + * Output will be streamed to the live console. + * Returns promise with return code + * + * @param commandLine command to execute (can include additional args). Must be correctly escaped. + * @param args optional arguments for tool. Escaping is handled by the lib. + * @param options optional exec options. See ExecOptions + * @returns Promise<number> exit code + */ +export declare function exec(commandLine: string, args?: string[], options?: im.ExecOptions): Promise<number>; diff --git a/node_modules/@actions/exec/lib/exec.js b/node_modules/@actions/exec/lib/exec.js new file mode 100644 index 0000000..e467927 --- /dev/null +++ b/node_modules/@actions/exec/lib/exec.js @@ -0,0 +1,36 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const tr = require("./toolrunner"); +/** + * Exec a command. + * Output will be streamed to the live console. + * Returns promise with return code + * + * @param commandLine command to execute (can include additional args). Must be correctly escaped. + * @param args optional arguments for tool. Escaping is handled by the lib. + * @param options optional exec options. See ExecOptions + * @returns Promise<number> exit code + */ +function exec(commandLine, args, options) { + return __awaiter(this, void 0, void 0, function* () { + const commandArgs = tr.argStringToArray(commandLine); + if (commandArgs.length === 0) { + throw new Error(`Parameter 'commandLine' cannot be null or empty.`); + } + // Path to tool to execute should be first arg + const toolPath = commandArgs[0]; + args = commandArgs.slice(1).concat(args || []); + const runner = new tr.ToolRunner(toolPath, args, options); + return runner.exec(); + }); +} +exports.exec = exec; +//# sourceMappingURL=exec.js.map \ No newline at end of file diff --git a/node_modules/@actions/exec/lib/exec.js.map b/node_modules/@actions/exec/lib/exec.js.map new file mode 100644 index 0000000..155287e --- /dev/null +++ b/node_modules/@actions/exec/lib/exec.js.map @@ -0,0 +1 @@ +{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":";;;;;;;;;;AACA,mCAAkC;AAElC;;;;;;;;;GASG;AACH,SAAsB,IAAI,CACxB,WAAmB,EACnB,IAAe,EACf,OAAwB;;QAExB,MAAM,WAAW,GAAG,EAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACpD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;SACpE;QACD,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAkB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACxE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAA;IACtB,CAAC;CAAA;AAdD,oBAcC"} \ No newline at end of file diff --git a/node_modules/@actions/exec/lib/interfaces.d.ts b/node_modules/@actions/exec/lib/interfaces.d.ts new file mode 100644 index 0000000..0d7202a --- /dev/null +++ b/node_modules/@actions/exec/lib/interfaces.d.ts @@ -0,0 +1,35 @@ +/// <reference types="node" /> +import * as stream from 'stream'; +/** + * Interface for exec options + */ +export interface ExecOptions { + /** optional working directory. defaults to current */ + cwd?: string; + /** optional envvar dictionary. defaults to current process's env */ + env?: { + [key: string]: string; + }; + /** optional. defaults to false */ + silent?: boolean; + /** optional out stream to use. Defaults to process.stdout */ + outStream?: stream.Writable; + /** optional err stream to use. Defaults to process.stderr */ + errStream?: stream.Writable; + /** optional. whether to skip quoting/escaping arguments if needed. defaults to false. */ + windowsVerbatimArguments?: boolean; + /** optional. whether to fail if output to stderr. defaults to false */ + failOnStdErr?: boolean; + /** optional. defaults to failing on non zero. ignore will not fail leaving it up to the caller */ + ignoreReturnCode?: boolean; + /** optional. How long in ms to wait for STDIO streams to close after the exit event of the process before terminating. defaults to 10000 */ + delay?: number; + /** optional. Listeners for output. Callback functions that will be called on these events */ + listeners?: { + stdout?: (data: Buffer) => void; + stderr?: (data: Buffer) => void; + stdline?: (data: string) => void; + errline?: (data: string) => void; + debug?: (data: string) => void; + }; +} diff --git a/node_modules/@actions/exec/lib/interfaces.js b/node_modules/@actions/exec/lib/interfaces.js new file mode 100644 index 0000000..e979780 --- /dev/null +++ b/node_modules/@actions/exec/lib/interfaces.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=interfaces.js.map \ No newline at end of file diff --git a/node_modules/@actions/exec/lib/interfaces.js.map b/node_modules/@actions/exec/lib/interfaces.js.map new file mode 100644 index 0000000..8fb5f7d --- /dev/null +++ b/node_modules/@actions/exec/lib/interfaces.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/node_modules/@actions/exec/lib/toolrunner.d.ts b/node_modules/@actions/exec/lib/toolrunner.d.ts new file mode 100644 index 0000000..71198da --- /dev/null +++ b/node_modules/@actions/exec/lib/toolrunner.d.ts @@ -0,0 +1,37 @@ +/// <reference types="node" /> +import * as events from 'events'; +import * as im from './interfaces'; +export declare class ToolRunner extends events.EventEmitter { + constructor(toolPath: string, args?: string[], options?: im.ExecOptions); + private toolPath; + private args; + private options; + private _debug; + private _getCommandString; + private _processLineBuffer; + private _getSpawnFileName; + private _getSpawnArgs; + private _endsWith; + private _isCmdFile; + private _windowsQuoteCmdArg; + private _uvQuoteCmdArg; + private _cloneExecOptions; + private _getSpawnOptions; + /** + * Exec a tool. + * Output will be streamed to the live console. + * Returns promise with return code + * + * @param tool path to tool to exec + * @param options optional exec options. See ExecOptions + * @returns number + */ + exec(): Promise<number>; +} +/** + * Convert an arg string to an array of args. Handles escaping + * + * @param argString string of arguments + * @returns string[] array of arguments + */ +export declare function argStringToArray(argString: string): string[]; diff --git a/node_modules/@actions/exec/lib/toolrunner.js b/node_modules/@actions/exec/lib/toolrunner.js new file mode 100644 index 0000000..6ed5a52 --- /dev/null +++ b/node_modules/@actions/exec/lib/toolrunner.js @@ -0,0 +1,573 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const os = require("os"); +const events = require("events"); +const child = require("child_process"); +/* eslint-disable @typescript-eslint/unbound-method */ +const IS_WINDOWS = process.platform === 'win32'; +/* + * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way. + */ +class ToolRunner extends events.EventEmitter { + constructor(toolPath, args, options) { + super(); + if (!toolPath) { + throw new Error("Parameter 'toolPath' cannot be null or empty."); + } + this.toolPath = toolPath; + this.args = args || []; + this.options = options || {}; + } + _debug(message) { + if (this.options.listeners && this.options.listeners.debug) { + this.options.listeners.debug(message); + } + } + _getCommandString(options, noPrefix) { + const toolPath = this._getSpawnFileName(); + const args = this._getSpawnArgs(options); + let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool + if (IS_WINDOWS) { + // Windows + cmd file + if (this._isCmdFile()) { + cmd += toolPath; + for (const a of args) { + cmd += ` ${a}`; + } + } + // Windows + verbatim + else if (options.windowsVerbatimArguments) { + cmd += `"${toolPath}"`; + for (const a of args) { + cmd += ` ${a}`; + } + } + // Windows (regular) + else { + cmd += this._windowsQuoteCmdArg(toolPath); + for (const a of args) { + cmd += ` ${this._windowsQuoteCmdArg(a)}`; + } + } + } + else { + // OSX/Linux - this can likely be improved with some form of quoting. + // creating processes on Unix is fundamentally different than Windows. + // on Unix, execvp() takes an arg array. + cmd += toolPath; + for (const a of args) { + cmd += ` ${a}`; + } + } + return cmd; + } + _processLineBuffer(data, strBuffer, onLine) { + try { + let s = strBuffer + data.toString(); + let n = s.indexOf(os.EOL); + while (n > -1) { + const line = s.substring(0, n); + onLine(line); + // the rest of the string ... + s = s.substring(n + os.EOL.length); + n = s.indexOf(os.EOL); + } + strBuffer = s; + } + catch (err) { + // streaming lines to console is best effort. Don't fail a build. + this._debug(`error processing line. Failed with error ${err}`); + } + } + _getSpawnFileName() { + if (IS_WINDOWS) { + if (this._isCmdFile()) { + return process.env['COMSPEC'] || 'cmd.exe'; + } + } + return this.toolPath; + } + _getSpawnArgs(options) { + if (IS_WINDOWS) { + if (this._isCmdFile()) { + let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`; + for (const a of this.args) { + argline += ' '; + argline += options.windowsVerbatimArguments + ? a + : this._windowsQuoteCmdArg(a); + } + argline += '"'; + return [argline]; + } + } + return this.args; + } + _endsWith(str, end) { + return str.endsWith(end); + } + _isCmdFile() { + const upperToolPath = this.toolPath.toUpperCase(); + return (this._endsWith(upperToolPath, '.CMD') || + this._endsWith(upperToolPath, '.BAT')); + } + _windowsQuoteCmdArg(arg) { + // for .exe, apply the normal quoting rules that libuv applies + if (!this._isCmdFile()) { + return this._uvQuoteCmdArg(arg); + } + // otherwise apply quoting rules specific to the cmd.exe command line parser. + // the libuv rules are generic and are not designed specifically for cmd.exe + // command line parser. + // + // for a detailed description of the cmd.exe command line parser, refer to + // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912 + // need quotes for empty arg + if (!arg) { + return '""'; + } + // determine whether the arg needs to be quoted + const cmdSpecialChars = [ + ' ', + '\t', + '&', + '(', + ')', + '[', + ']', + '{', + '}', + '^', + '=', + ';', + '!', + "'", + '+', + ',', + '`', + '~', + '|', + '<', + '>', + '"' + ]; + let needsQuotes = false; + for (const char of arg) { + if (cmdSpecialChars.some(x => x === char)) { + needsQuotes = true; + break; + } + } + // short-circuit if quotes not needed + if (!needsQuotes) { + return arg; + } + // the following quoting rules are very similar to the rules that by libuv applies. + // + // 1) wrap the string in quotes + // + // 2) double-up quotes - i.e. " => "" + // + // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately + // doesn't work well with a cmd.exe command line. + // + // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app. + // for example, the command line: + // foo.exe "myarg:""my val""" + // is parsed by a .NET console app into an arg array: + // [ "myarg:\"my val\"" ] + // which is the same end result when applying libuv quoting rules. although the actual + // command line from libuv quoting rules would look like: + // foo.exe "myarg:\"my val\"" + // + // 3) double-up slashes that preceed a quote, + // e.g. hello \world => "hello \world" + // hello\"world => "hello\\""world" + // hello\\"world => "hello\\\\""world" + // hello world\ => "hello world\\" + // + // technically this is not required for a cmd.exe command line, or the batch argument parser. + // the reasons for including this as a .cmd quoting rule are: + // + // a) this is optimized for the scenario where the argument is passed from the .cmd file to an + // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule. + // + // b) it's what we've been doing previously (by deferring to node default behavior) and we + // haven't heard any complaints about that aspect. + // + // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be + // escaped when used on the command line directly - even though within a .cmd file % can be escaped + // by using %%. + // + // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts + // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing. + // + // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would + // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the + // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args + // to an external program. + // + // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file. + // % can be escaped within a .cmd file. + let reverse = '"'; + let quoteHit = true; + for (let i = arg.length; i > 0; i--) { + // walk the string in reverse + reverse += arg[i - 1]; + if (quoteHit && arg[i - 1] === '\\') { + reverse += '\\'; // double the slash + } + else if (arg[i - 1] === '"') { + quoteHit = true; + reverse += '"'; // double the quote + } + else { + quoteHit = false; + } + } + reverse += '"'; + return reverse + .split('') + .reverse() + .join(''); + } + _uvQuoteCmdArg(arg) { + // Tool runner wraps child_process.spawn() and needs to apply the same quoting as + // Node in certain cases where the undocumented spawn option windowsVerbatimArguments + // is used. + // + // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV, + // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details), + // pasting copyright notice from Node within this function: + // + // Copyright Joyent, Inc. and other Node contributors. All rights reserved. + // + // Permission is hereby granted, free of charge, to any person obtaining a copy + // of this software and associated documentation files (the "Software"), to + // deal in the Software without restriction, including without limitation the + // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + // sell copies of the Software, and to permit persons to whom the Software is + // furnished to do so, subject to the following conditions: + // + // The above copyright notice and this permission notice shall be included in + // all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + // IN THE SOFTWARE. + if (!arg) { + // Need double quotation for empty argument + return '""'; + } + if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) { + // No quotation needed + return arg; + } + if (!arg.includes('"') && !arg.includes('\\')) { + // No embedded double quotes or backslashes, so I can just wrap + // quote marks around the whole thing. + return `"${arg}"`; + } + // Expected input/output: + // input : hello"world + // output: "hello\"world" + // input : hello""world + // output: "hello\"\"world" + // input : hello\world + // output: hello\world + // input : hello\\world + // output: hello\\world + // input : hello\"world + // output: "hello\\\"world" + // input : hello\\"world + // output: "hello\\\\\"world" + // input : hello world\ + // output: "hello world\\" - note the comment in libuv actually reads "hello world\" + // but it appears the comment is wrong, it should be "hello world\\" + let reverse = '"'; + let quoteHit = true; + for (let i = arg.length; i > 0; i--) { + // walk the string in reverse + reverse += arg[i - 1]; + if (quoteHit && arg[i - 1] === '\\') { + reverse += '\\'; + } + else if (arg[i - 1] === '"') { + quoteHit = true; + reverse += '\\'; + } + else { + quoteHit = false; + } + } + reverse += '"'; + return reverse + .split('') + .reverse() + .join(''); + } + _cloneExecOptions(options) { + options = options || {}; + const result = { + cwd: options.cwd || process.cwd(), + env: options.env || process.env, + silent: options.silent || false, + windowsVerbatimArguments: options.windowsVerbatimArguments || false, + failOnStdErr: options.failOnStdErr || false, + ignoreReturnCode: options.ignoreReturnCode || false, + delay: options.delay || 10000 + }; + result.outStream = options.outStream || process.stdout; + result.errStream = options.errStream || process.stderr; + return result; + } + _getSpawnOptions(options, toolPath) { + options = options || {}; + const result = {}; + result.cwd = options.cwd; + result.env = options.env; + result['windowsVerbatimArguments'] = + options.windowsVerbatimArguments || this._isCmdFile(); + if (options.windowsVerbatimArguments) { + result.argv0 = `"${toolPath}"`; + } + return result; + } + /** + * Exec a tool. + * Output will be streamed to the live console. + * Returns promise with return code + * + * @param tool path to tool to exec + * @param options optional exec options. See ExecOptions + * @returns number + */ + exec() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + this._debug(`exec tool: ${this.toolPath}`); + this._debug('arguments:'); + for (const arg of this.args) { + this._debug(` ${arg}`); + } + const optionsNonNull = this._cloneExecOptions(this.options); + if (!optionsNonNull.silent && optionsNonNull.outStream) { + optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); + } + const state = new ExecState(optionsNonNull, this.toolPath); + state.on('debug', (message) => { + this._debug(message); + }); + const fileName = this._getSpawnFileName(); + const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); + const stdbuffer = ''; + if (cp.stdout) { + cp.stdout.on('data', (data) => { + if (this.options.listeners && this.options.listeners.stdout) { + this.options.listeners.stdout(data); + } + if (!optionsNonNull.silent && optionsNonNull.outStream) { + optionsNonNull.outStream.write(data); + } + this._processLineBuffer(data, stdbuffer, (line) => { + if (this.options.listeners && this.options.listeners.stdline) { + this.options.listeners.stdline(line); + } + }); + }); + } + const errbuffer = ''; + if (cp.stderr) { + cp.stderr.on('data', (data) => { + state.processStderr = true; + if (this.options.listeners && this.options.listeners.stderr) { + this.options.listeners.stderr(data); + } + if (!optionsNonNull.silent && + optionsNonNull.errStream && + optionsNonNull.outStream) { + const s = optionsNonNull.failOnStdErr + ? optionsNonNull.errStream + : optionsNonNull.outStream; + s.write(data); + } + this._processLineBuffer(data, errbuffer, (line) => { + if (this.options.listeners && this.options.listeners.errline) { + this.options.listeners.errline(line); + } + }); + }); + } + cp.on('error', (err) => { + state.processError = err.message; + state.processExited = true; + state.processClosed = true; + state.CheckComplete(); + }); + cp.on('exit', (code) => { + state.processExitCode = code; + state.processExited = true; + this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); + state.CheckComplete(); + }); + cp.on('close', (code) => { + state.processExitCode = code; + state.processExited = true; + state.processClosed = true; + this._debug(`STDIO streams have closed for tool '${this.toolPath}'`); + state.CheckComplete(); + }); + state.on('done', (error, exitCode) => { + if (stdbuffer.length > 0) { + this.emit('stdline', stdbuffer); + } + if (errbuffer.length > 0) { + this.emit('errline', errbuffer); + } + cp.removeAllListeners(); + if (error) { + reject(error); + } + else { + resolve(exitCode); + } + }); + }); + }); + } +} +exports.ToolRunner = ToolRunner; +/** + * Convert an arg string to an array of args. Handles escaping + * + * @param argString string of arguments + * @returns string[] array of arguments + */ +function argStringToArray(argString) { + const args = []; + let inQuotes = false; + let escaped = false; + let arg = ''; + function append(c) { + // we only escape double quotes. + if (escaped && c !== '"') { + arg += '\\'; + } + arg += c; + escaped = false; + } + for (let i = 0; i < argString.length; i++) { + const c = argString.charAt(i); + if (c === '"') { + if (!escaped) { + inQuotes = !inQuotes; + } + else { + append(c); + } + continue; + } + if (c === '\\' && escaped) { + append(c); + continue; + } + if (c === '\\' && inQuotes) { + escaped = true; + continue; + } + if (c === ' ' && !inQuotes) { + if (arg.length > 0) { + args.push(arg); + arg = ''; + } + continue; + } + append(c); + } + if (arg.length > 0) { + args.push(arg.trim()); + } + return args; +} +exports.argStringToArray = argStringToArray; +class ExecState extends events.EventEmitter { + constructor(options, toolPath) { + super(); + this.processClosed = false; // tracks whether the process has exited and stdio is closed + this.processError = ''; + this.processExitCode = 0; + this.processExited = false; // tracks whether the process has exited + this.processStderr = false; // tracks whether stderr was written to + this.delay = 10000; // 10 seconds + this.done = false; + this.timeout = null; + if (!toolPath) { + throw new Error('toolPath must not be empty'); + } + this.options = options; + this.toolPath = toolPath; + if (options.delay) { + this.delay = options.delay; + } + } + CheckComplete() { + if (this.done) { + return; + } + if (this.processClosed) { + this._setResult(); + } + else if (this.processExited) { + this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this); + } + } + _debug(message) { + this.emit('debug', message); + } + _setResult() { + // determine whether there is an error + let error; + if (this.processExited) { + if (this.processError) { + error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`); + } + else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) { + error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); + } + else if (this.processStderr && this.options.failOnStdErr) { + error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); + } + } + // clear the timeout + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; + } + this.done = true; + this.emit('done', error, this.processExitCode); + } + static HandleTimeout(state) { + if (state.done) { + return; + } + if (!state.processClosed && state.processExited) { + const message = `The STDIO streams did not close within ${state.delay / + 1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`; + state._debug(message); + } + state._setResult(); + } +} +//# sourceMappingURL=toolrunner.js.map \ No newline at end of file diff --git a/node_modules/@actions/exec/lib/toolrunner.js.map b/node_modules/@actions/exec/lib/toolrunner.js.map new file mode 100644 index 0000000..724b15a --- /dev/null +++ b/node_modules/@actions/exec/lib/toolrunner.js.map @@ -0,0 +1 @@ +{"version":3,"file":"toolrunner.js","sourceRoot":"","sources":["../src/toolrunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@actions/exec/package.json b/node_modules/@actions/exec/package.json new file mode 100644 index 0000000..df0651b --- /dev/null +++ b/node_modules/@actions/exec/package.json @@ -0,0 +1,63 @@ +{ + "_from": "file:toolkit\\actions-exec-0.0.0.tgz", + "_id": "@actions/exec@0.0.0", + "_inBundle": false, + "_integrity": "sha512-HHObusC4p1RElxIlrrN0sY/cweBYl+jKm3J/XWHPQZMipgJXB/dkVhUfl4KqH3Vim7oM2KjCGSfn+vTYrqVH3A==", + "_location": "/@actions/exec", + "_phantomChildren": {}, + "_requested": { + "type": "file", + "where": "C:\\Users\\Administrator\\Documents\\setup-node", + "raw": "@actions/exec@file:toolkit/actions-exec-0.0.0.tgz", + "name": "@actions/exec", + "escapedName": "@actions%2fexec", + "scope": "@actions", + "rawSpec": "file:toolkit/actions-exec-0.0.0.tgz", + "saveSpec": "file:toolkit\\actions-exec-0.0.0.tgz", + "fetchSpec": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-exec-0.0.0.tgz" + }, + "_requiredBy": [ + "/", + "/@actions/tool-cache" + ], + "_resolved": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-exec-0.0.0.tgz", + "_shasum": "341d868fe6c4123ded20db9c2106b7b8c16e1d73", + "_spec": "@actions/exec@file:toolkit/actions-exec-0.0.0.tgz", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node", + "bugs": { + "url": "https://github.com/actions/toolkit/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Actions exec lib", + "devDependencies": { + "@actions/io": "^0.0.0" + }, + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/actions/toolkit/tree/master/packages/exec", + "keywords": [ + "exec", + "actions" + ], + "license": "MIT", + "main": "lib/exec.js", + "name": "@actions/exec", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/actions/toolkit.git" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1", + "tsc": "tsc" + }, + "version": "0.0.0" +} diff --git a/node_modules/@actions/exit/LICENSE.md b/node_modules/@actions/exit/LICENSE.md new file mode 100644 index 0000000..5b674fe --- /dev/null +++ b/node_modules/@actions/exit/LICENSE.md @@ -0,0 +1,7 @@ +Copyright 2019 GitHub + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/@actions/exit/README.md b/node_modules/@actions/exit/README.md new file mode 100644 index 0000000..2a53c6c --- /dev/null +++ b/node_modules/@actions/exit/README.md @@ -0,0 +1,7 @@ +# `@actions/exit` + +> TODO: description + +## Usage + +See [src/exit.ts](src/exit.ts). \ No newline at end of file diff --git a/node_modules/@actions/exit/lib/exit.d.ts b/node_modules/@actions/exit/lib/exit.d.ts new file mode 100644 index 0000000..22ebe16 --- /dev/null +++ b/node_modules/@actions/exit/lib/exit.d.ts @@ -0,0 +1,29 @@ +/** + * The code to exit an action + */ +export declare enum ExitCode { + /** + * A code indicating that the action was successful + */ + Success = 0, + /** + * A code indicating that the action was a failure + */ + Failure = 1, + /** + * A code indicating that the action is complete, but neither succeeded nor failed + */ + Neutral = 78 +} +/** + * Exit the action as a success. + */ +export declare function success(): void; +/** + * Exit the action as a failure. + */ +export declare function failure(): void; +/** + * Exit the action neither a success or a failure + */ +export declare function neutral(): void; diff --git a/node_modules/@actions/exit/lib/exit.js b/node_modules/@actions/exit/lib/exit.js new file mode 100644 index 0000000..6048c78 --- /dev/null +++ b/node_modules/@actions/exit/lib/exit.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * The code to exit an action + */ +var ExitCode; +(function (ExitCode) { + /** + * A code indicating that the action was successful + */ + ExitCode[ExitCode["Success"] = 0] = "Success"; + /** + * A code indicating that the action was a failure + */ + ExitCode[ExitCode["Failure"] = 1] = "Failure"; + /** + * A code indicating that the action is complete, but neither succeeded nor failed + */ + ExitCode[ExitCode["Neutral"] = 78] = "Neutral"; +})(ExitCode = exports.ExitCode || (exports.ExitCode = {})); +// TODO: These exit codes may not behave as expected on the new runtime, due to +// complexities of async logging and sync exiting. +/** + * Exit the action as a success. + */ +function success() { + process.exit(ExitCode.Success); +} +exports.success = success; +/** + * Exit the action as a failure. + */ +function failure() { + process.exit(ExitCode.Failure); +} +exports.failure = failure; +/** + * Exit the action neither a success or a failure + */ +function neutral() { + process.exit(ExitCode.Neutral); +} +exports.neutral = neutral; +//# sourceMappingURL=exit.js.map \ No newline at end of file diff --git a/node_modules/@actions/exit/lib/exit.js.map b/node_modules/@actions/exit/lib/exit.js.map new file mode 100644 index 0000000..2fc9d31 --- /dev/null +++ b/node_modules/@actions/exit/lib/exit.js.map @@ -0,0 +1 @@ +{"version":3,"file":"exit.js","sourceRoot":"","sources":["../src/exit.ts"],"names":[],"mappings":";;AAAA;;GAEG;AACH,IAAY,QAeX;AAfD,WAAY,QAAQ;IAClB;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,6CAAW,CAAA;IAEX;;OAEG;IACH,8CAAY,CAAA;AACd,CAAC,EAfW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAenB;AAED,+EAA+E;AAC/E,kDAAkD;AAElD;;GAEG;AACH,SAAgB,OAAO;IACrB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAFD,0BAEC;AAED;;GAEG;AACH,SAAgB,OAAO;IACrB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAFD,0BAEC;AAED;;GAEG;AACH,SAAgB,OAAO;IACrB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAFD,0BAEC"} \ No newline at end of file diff --git a/node_modules/@actions/exit/package.json b/node_modules/@actions/exit/package.json new file mode 100644 index 0000000..9658eea --- /dev/null +++ b/node_modules/@actions/exit/package.json @@ -0,0 +1,61 @@ +{ + "_from": "file:toolkit\\actions-exit-0.0.0.tgz", + "_id": "@actions/exit@0.0.0", + "_inBundle": false, + "_integrity": "sha512-vQdxFWM0/AERkC79mQ886SqPmV4joWhrSF7hiSTiJoKkE9eTjrKV5WQtp7SXv6OntrQkKX+ZjgdGpv+0rvJRCw==", + "_location": "/@actions/exit", + "_phantomChildren": {}, + "_requested": { + "type": "file", + "where": "C:\\Users\\Administrator\\Documents\\setup-node", + "raw": "@actions/exit@file:toolkit/actions-exit-0.0.0.tgz", + "name": "@actions/exit", + "escapedName": "@actions%2fexit", + "scope": "@actions", + "rawSpec": "file:toolkit/actions-exit-0.0.0.tgz", + "saveSpec": "file:toolkit\\actions-exit-0.0.0.tgz", + "fetchSpec": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-exit-0.0.0.tgz" + }, + "_requiredBy": [ + "/", + "/@actions/core" + ], + "_resolved": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-exit-0.0.0.tgz", + "_shasum": "d47c8c61b45750ae49fea3061e3419a547b2a48f", + "_spec": "@actions/exit@file:toolkit/actions-exit-0.0.0.tgz", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node", + "bugs": { + "url": "https://github.com/actions/toolkit/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Functions for safely exiting from GitHub Actions", + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/actions/toolkit/tree/master/packages/exit", + "keywords": [ + "github", + "actions", + "toolkit" + ], + "license": "MIT", + "main": "lib/exit.js", + "name": "@actions/exit", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/actions/toolkit.git" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1", + "tsc": "tsc" + }, + "version": "0.0.0" +} diff --git a/node_modules/@actions/io/README.md b/node_modules/@actions/io/README.md new file mode 100644 index 0000000..79b3f8d --- /dev/null +++ b/node_modules/@actions/io/README.md @@ -0,0 +1,49 @@ +# `@actions/io` + +> Core functions for cli filesystem scenarios + +## Usage + +``` +/** + * Copies a file or folder. + * + * @param source source path + * @param dest destination path + * @param options optional. See CopyOptions. + */ +export function cp(source: string, dest: string, options?: CopyOptions): Promise<void> + +/** + * Remove a path recursively with force + * + * @param path path to remove + */ +export function rmRF(path: string): Promise<void> + +/** + * Make a directory. Creates the full path with folders in between + * + * @param p path to create + * @returns Promise<void> + */ +export function mkdirP(p: string): Promise<void> + +/** + * Moves a path. + * + * @param source source path + * @param dest destination path + * @param options optional. See CopyOptions. + */ +export function mv(source: string, dest: string, options?: CopyOptions): Promise<void> + +/** + * Returns path of a tool had the tool actually been invoked. Resolves via paths. + * + * @param tool name of the tool + * @param options optional. See WhichOptions. + * @returns Promise<string> path to tool + */ +export function which(tool: string, options?: WhichOptions): Promise<string> +``` \ No newline at end of file diff --git a/node_modules/@actions/io/lib/io-util.d.ts b/node_modules/@actions/io/lib/io-util.d.ts new file mode 100644 index 0000000..73086d4 --- /dev/null +++ b/node_modules/@actions/io/lib/io-util.d.ts @@ -0,0 +1,29 @@ +/// <reference types="node" /> +import * as fs from 'fs'; +export declare const copyFile: typeof fs.promises.copyFile, lstat: typeof fs.promises.lstat, mkdir: typeof fs.promises.mkdir, readdir: typeof fs.promises.readdir, rmdir: typeof fs.promises.rmdir, stat: typeof fs.promises.stat, unlink: typeof fs.promises.unlink; +export declare const IS_WINDOWS: boolean; +export declare function exists(fsPath: string): Promise<boolean>; +export declare function isDirectory(fsPath: string, useStat?: boolean): Promise<boolean>; +/** + * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like: + * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases). + */ +export declare function isRooted(p: string): boolean; +/** + * Recursively create a directory at `fsPath`. + * + * This implementation is optimistic, meaning it attempts to create the full + * path first, and backs up the path stack from there. + * + * @param fsPath The path to create + * @param maxDepth The maximum recursion depth + * @param depth The current recursion depth + */ +export declare function mkdirP(fsPath: string, maxDepth?: number, depth?: number): Promise<void>; +/** + * Best effort attempt to determine whether a file exists and is executable. + * @param filePath file path to check + * @param extensions additional file extensions to try + * @return if file exists and is executable, returns the file path. otherwise empty string. + */ +export declare function tryGetExecutablePath(filePath: string, extensions: string[]): Promise<string>; diff --git a/node_modules/@actions/io/lib/io-util.js b/node_modules/@actions/io/lib/io-util.js new file mode 100644 index 0000000..d686c5a --- /dev/null +++ b/node_modules/@actions/io/lib/io-util.js @@ -0,0 +1,194 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +const assert_1 = require("assert"); +const fs = require("fs"); +const path = require("path"); +_a = fs.promises, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.unlink = _a.unlink; +exports.IS_WINDOWS = process.platform === 'win32'; +function exists(fsPath) { + return __awaiter(this, void 0, void 0, function* () { + try { + yield exports.stat(fsPath); + } + catch (err) { + if (err.code === 'ENOENT') { + return false; + } + throw err; + } + return true; + }); +} +exports.exists = exists; +function isDirectory(fsPath, useStat = false) { + return __awaiter(this, void 0, void 0, function* () { + const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath); + return stats.isDirectory(); + }); +} +exports.isDirectory = isDirectory; +/** + * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like: + * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases). + */ +function isRooted(p) { + p = normalizeSeparators(p); + if (!p) { + throw new Error('isRooted() parameter "p" cannot be empty'); + } + if (exports.IS_WINDOWS) { + return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello + ); // e.g. C: or C:\hello + } + return p.startsWith('/'); +} +exports.isRooted = isRooted; +/** + * Recursively create a directory at `fsPath`. + * + * This implementation is optimistic, meaning it attempts to create the full + * path first, and backs up the path stack from there. + * + * @param fsPath The path to create + * @param maxDepth The maximum recursion depth + * @param depth The current recursion depth + */ +function mkdirP(fsPath, maxDepth = 1000, depth = 1) { + return __awaiter(this, void 0, void 0, function* () { + assert_1.ok(fsPath, 'a path argument must be provided'); + fsPath = path.resolve(fsPath); + if (depth >= maxDepth) + return exports.mkdir(fsPath); + try { + yield exports.mkdir(fsPath); + return; + } + catch (err) { + switch (err.code) { + case 'ENOENT': { + yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1); + yield exports.mkdir(fsPath); + return; + } + default: { + let stats; + try { + stats = yield exports.stat(fsPath); + } + catch (err2) { + throw err; + } + if (!stats.isDirectory()) + throw err; + } + } + } + }); +} +exports.mkdirP = mkdirP; +/** + * Best effort attempt to determine whether a file exists and is executable. + * @param filePath file path to check + * @param extensions additional file extensions to try + * @return if file exists and is executable, returns the file path. otherwise empty string. + */ +function tryGetExecutablePath(filePath, extensions) { + return __awaiter(this, void 0, void 0, function* () { + let stats = undefined; + try { + // test file exists + stats = yield exports.stat(filePath); + } + catch (err) { + if (err.code !== 'ENOENT') { + // eslint-disable-next-line no-console + console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); + } + } + if (stats && stats.isFile()) { + if (exports.IS_WINDOWS) { + // on Windows, test for valid extension + const upperExt = path.extname(filePath).toUpperCase(); + if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) { + return filePath; + } + } + else { + if (isUnixExecutable(stats)) { + return filePath; + } + } + } + // try each extension + const originalFilePath = filePath; + for (const extension of extensions) { + filePath = originalFilePath + extension; + stats = undefined; + try { + stats = yield exports.stat(filePath); + } + catch (err) { + if (err.code !== 'ENOENT') { + // eslint-disable-next-line no-console + console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); + } + } + if (stats && stats.isFile()) { + if (exports.IS_WINDOWS) { + // preserve the case of the actual file (since an extension was appended) + try { + const directory = path.dirname(filePath); + const upperName = path.basename(filePath).toUpperCase(); + for (const actualName of yield exports.readdir(directory)) { + if (upperName === actualName.toUpperCase()) { + filePath = path.join(directory, actualName); + break; + } + } + } + catch (err) { + // eslint-disable-next-line no-console + console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); + } + return filePath; + } + else { + if (isUnixExecutable(stats)) { + return filePath; + } + } + } + } + return ''; + }); +} +exports.tryGetExecutablePath = tryGetExecutablePath; +function normalizeSeparators(p) { + p = p || ''; + if (exports.IS_WINDOWS) { + // convert slashes on Windows + p = p.replace(/\//g, '\\'); + // remove redundant slashes + return p.replace(/\\\\+/g, '\\'); + } + // remove redundant slashes + return p.replace(/\/\/+/g, '/'); +} +// on Mac/Linux, test the execute bit +// R W X R W X R W X +// 256 128 64 32 16 8 4 2 1 +function isUnixExecutable(stats) { + return ((stats.mode & 1) > 0 || + ((stats.mode & 8) > 0 && stats.gid === process.getgid()) || + ((stats.mode & 64) > 0 && stats.uid === process.getuid())); +} +//# sourceMappingURL=io-util.js.map \ No newline at end of file diff --git a/node_modules/@actions/io/lib/io-util.js.map b/node_modules/@actions/io/lib/io-util.js.map new file mode 100644 index 0000000..322ba14 --- /dev/null +++ b/node_modules/@actions/io/lib/io-util.js.map @@ -0,0 +1 @@ +{"version":3,"file":"io-util.js","sourceRoot":"","sources":["../src/io-util.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@actions/io/lib/io.d.ts b/node_modules/@actions/io/lib/io.d.ts new file mode 100644 index 0000000..0116f6e --- /dev/null +++ b/node_modules/@actions/io/lib/io.d.ts @@ -0,0 +1,48 @@ +/** + * Interface for cp/mv options + */ +export interface CopyOptions { + /** Optional. Whether to recursively copy all subdirectories. Defaults to false */ + recursive?: boolean; + /** Optional. Whether to overwrite existing files in the destination. Defaults to true */ + force?: boolean; +} +/** + * Copies a file or folder. + * + * @param source source path + * @param dest destination path + * @param options optional. See CopyOptions. + */ +export declare function cp(source: string, dest: string, options?: CopyOptions): Promise<void>; +/** + * Moves a path. + * + * @param source source path + * @param dest destination path + * @param options optional. See CopyOptions. + */ +export declare function mv(source: string, dest: string, options?: CopyOptions): Promise<void>; +/** + * Remove a path recursively with force + * + * @param inputPath path to remove + */ +export declare function rmRF(inputPath: string): Promise<void>; +/** + * Make a directory. Creates the full path with folders in between + * Will throw if it fails + * + * @param fsPath path to create + * @returns Promise<void> + */ +export declare function mkdirP(fsPath: string): Promise<void>; +/** + * Returns path of a tool had the tool actually been invoked. Resolves via paths. + * If you check and the tool does not exist, it will throw. + * + * @param tool name of the tool + * @param check whether to check if tool exists + * @returns Promise<string> path to tool + */ +export declare function which(tool: string, check?: boolean): Promise<string>; diff --git a/node_modules/@actions/io/lib/io.js b/node_modules/@actions/io/lib/io.js new file mode 100644 index 0000000..4ce2d24 --- /dev/null +++ b/node_modules/@actions/io/lib/io.js @@ -0,0 +1,262 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const childProcess = require("child_process"); +const fs = require("fs"); +const path = require("path"); +const util_1 = require("util"); +const ioUtil = require("./io-util"); +const exec = util_1.promisify(childProcess.exec); +/** + * Copies a file or folder. + * + * @param source source path + * @param dest destination path + * @param options optional. See CopyOptions. + */ +function cp(source, dest, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + yield move(source, dest, options, { deleteOriginal: false }); + }); +} +exports.cp = cp; +/** + * Moves a path. + * + * @param source source path + * @param dest destination path + * @param options optional. See CopyOptions. + */ +function mv(source, dest, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + yield move(source, dest, options, { deleteOriginal: true }); + }); +} +exports.mv = mv; +/** + * Remove a path recursively with force + * + * @param inputPath path to remove + */ +function rmRF(inputPath) { + return __awaiter(this, void 0, void 0, function* () { + if (ioUtil.IS_WINDOWS) { + // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another + // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del. + try { + if (yield ioUtil.isDirectory(inputPath, true)) { + yield exec(`rd /s /q "${inputPath}"`); + } + else { + yield exec(`del /f /a "${inputPath}"`); + } + } + catch (err) { + // if you try to delete a file that doesn't exist, desired result is achieved + // other errors are valid + if (err.code !== 'ENOENT') + throw err; + } + // Shelling out fails to remove a symlink folder with missing source, this unlink catches that + try { + yield ioUtil.unlink(inputPath); + } + catch (err) { + // if you try to delete a file that doesn't exist, desired result is achieved + // other errors are valid + if (err.code !== 'ENOENT') + throw err; + } + } + else { + let isDir = false; + try { + isDir = yield ioUtil.isDirectory(inputPath); + } + catch (err) { + // if you try to delete a file that doesn't exist, desired result is achieved + // other errors are valid + if (err.code !== 'ENOENT') + throw err; + return; + } + if (isDir) { + yield exec(`rm -rf "${inputPath}"`); + } + else { + yield ioUtil.unlink(inputPath); + } + } + }); +} +exports.rmRF = rmRF; +/** + * Make a directory. Creates the full path with folders in between + * Will throw if it fails + * + * @param fsPath path to create + * @returns Promise<void> + */ +function mkdirP(fsPath) { + return __awaiter(this, void 0, void 0, function* () { + yield ioUtil.mkdirP(fsPath); + }); +} +exports.mkdirP = mkdirP; +/** + * Returns path of a tool had the tool actually been invoked. Resolves via paths. + * If you check and the tool does not exist, it will throw. + * + * @param tool name of the tool + * @param check whether to check if tool exists + * @returns Promise<string> path to tool + */ +function which(tool, check) { + return __awaiter(this, void 0, void 0, function* () { + if (!tool) { + throw new Error("parameter 'tool' is required"); + } + // recursive when check=true + if (check) { + const result = yield which(tool, false); + if (!result) { + if (ioUtil.IS_WINDOWS) { + throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`); + } + else { + throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`); + } + } + } + try { + // build the list of extensions to try + const extensions = []; + if (ioUtil.IS_WINDOWS && process.env.PATHEXT) { + for (const extension of process.env.PATHEXT.split(path.delimiter)) { + if (extension) { + extensions.push(extension); + } + } + } + // if it's rooted, return it if exists. otherwise return empty. + if (ioUtil.isRooted(tool)) { + const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions); + if (filePath) { + return filePath; + } + return ''; + } + // if any path separators, return empty + if (tool.includes('/') || (ioUtil.IS_WINDOWS && tool.includes('\\'))) { + return ''; + } + // build the list of directories + // + // Note, technically "where" checks the current directory on Windows. From a task lib perspective, + // it feels like we should not do this. Checking the current directory seems like more of a use + // case of a shell, and the which() function exposed by the task lib should strive for consistency + // across platforms. + const directories = []; + if (process.env.PATH) { + for (const p of process.env.PATH.split(path.delimiter)) { + if (p) { + directories.push(p); + } + } + } + // return the first match + for (const directory of directories) { + const filePath = yield ioUtil.tryGetExecutablePath(directory + path.sep + tool, extensions); + if (filePath) { + return filePath; + } + } + return ''; + } + catch (err) { + throw new Error(`which failed with message ${err.message}`); + } + }); +} +exports.which = which; +// Copies contents of source into dest, making any necessary folders along the way. +// Deletes the original copy if deleteOriginal is true +function copyDirectoryContents(source, dest, force, deleteOriginal = false) { + return __awaiter(this, void 0, void 0, function* () { + if (yield ioUtil.isDirectory(source)) { + if (yield ioUtil.exists(dest)) { + if (!(yield ioUtil.isDirectory(dest))) { + throw new Error(`${dest} is not a directory`); + } + } + else { + yield mkdirP(dest); + } + // Copy all child files, and directories recursively + const sourceChildren = yield ioUtil.readdir(source); + for (const newSource of sourceChildren) { + const newDest = path.join(dest, path.basename(newSource)); + yield copyDirectoryContents(path.resolve(source, newSource), newDest, force, deleteOriginal); + } + if (deleteOriginal) { + yield ioUtil.rmdir(source); + } + } + else { + if (force) { + yield ioUtil.copyFile(source, dest); + } + else { + yield ioUtil.copyFile(source, dest, fs.constants.COPYFILE_EXCL); + } + if (deleteOriginal) { + yield ioUtil.unlink(source); + } + } + }); +} +function move(source, dest, options = {}, moveOptions) { + return __awaiter(this, void 0, void 0, function* () { + const { force, recursive } = readCopyOptions(options); + if (yield ioUtil.isDirectory(source)) { + if (!recursive) { + throw new Error(`non-recursive cp failed, ${source} is a directory`); + } + // If directory exists, move source inside it. Otherwise, create it and move contents of source inside. + if (yield ioUtil.exists(dest)) { + if (!(yield ioUtil.isDirectory(dest))) { + throw new Error(`${dest} is not a directory`); + } + dest = path.join(dest, path.basename(source)); + } + yield copyDirectoryContents(source, dest, force, moveOptions.deleteOriginal); + } + else { + if ((yield ioUtil.exists(dest)) && (yield ioUtil.isDirectory(dest))) { + dest = path.join(dest, path.basename(source)); + } + if (force) { + yield ioUtil.copyFile(source, dest); + } + else { + yield ioUtil.copyFile(source, dest, fs.constants.COPYFILE_EXCL); + } + if (moveOptions.deleteOriginal) { + yield ioUtil.unlink(source); + } + } + }); +} +function readCopyOptions(options) { + const force = options.force == null ? true : options.force; + const recursive = Boolean(options.recursive); + return { force, recursive }; +} +//# sourceMappingURL=io.js.map \ No newline at end of file diff --git a/node_modules/@actions/io/lib/io.js.map b/node_modules/@actions/io/lib/io.js.map new file mode 100644 index 0000000..6e28f2c --- /dev/null +++ b/node_modules/@actions/io/lib/io.js.map @@ -0,0 +1 @@ +{"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@actions/io/package.json b/node_modules/@actions/io/package.json new file mode 100644 index 0000000..ce4ed2d --- /dev/null +++ b/node_modules/@actions/io/package.json @@ -0,0 +1,60 @@ +{ + "_from": "file:toolkit\\actions-io-0.0.0.tgz", + "_id": "@actions/io@0.0.0", + "_inBundle": false, + "_integrity": "sha512-BArfobXB/b6RjR4i/+P4UcdaqR2tPjEb2WzZf9GdKiSARQn7d301pKOZAqxA+0N11X07Lk46t/txeUBcrCNbeg==", + "_location": "/@actions/io", + "_phantomChildren": {}, + "_requested": { + "type": "file", + "where": "C:\\Users\\Administrator\\Documents\\setup-node", + "raw": "@actions/io@file:toolkit/actions-io-0.0.0.tgz", + "name": "@actions/io", + "escapedName": "@actions%2fio", + "scope": "@actions", + "rawSpec": "file:toolkit/actions-io-0.0.0.tgz", + "saveSpec": "file:toolkit\\actions-io-0.0.0.tgz", + "fetchSpec": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-io-0.0.0.tgz" + }, + "_requiredBy": [ + "/", + "/@actions/tool-cache" + ], + "_resolved": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-io-0.0.0.tgz", + "_shasum": "1e8f0faca6b39215bebacedf473e5bb0716e39bf", + "_spec": "@actions/io@file:toolkit/actions-io-0.0.0.tgz", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node", + "bugs": { + "url": "https://github.com/actions/toolkit/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Actions io lib", + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/actions/toolkit/tree/master/packages/io", + "keywords": [ + "io", + "actions" + ], + "license": "MIT", + "main": "lib/io.js", + "name": "@actions/io", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/actions/toolkit.git" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1", + "tsc": "tsc" + }, + "version": "0.0.0" +} diff --git a/node_modules/@actions/tool-cache/README.md b/node_modules/@actions/tool-cache/README.md new file mode 100644 index 0000000..9737206 --- /dev/null +++ b/node_modules/@actions/tool-cache/README.md @@ -0,0 +1,7 @@ +# `@actions/tool-cache` + +> Functions necessary for downloading and caching tools. + +## Usage + +See [src/tool-cache.ts](src/tool-cache.ts). \ No newline at end of file diff --git a/node_modules/@actions/tool-cache/lib/tool-cache.d.ts b/node_modules/@actions/tool-cache/lib/tool-cache.d.ts new file mode 100644 index 0000000..2f66b06 --- /dev/null +++ b/node_modules/@actions/tool-cache/lib/tool-cache.d.ts @@ -0,0 +1,78 @@ +export declare class HTTPError extends Error { + readonly httpStatusCode: number | undefined; + constructor(httpStatusCode: number | undefined); +} +/** + * Download a tool from an url and stream it into a file + * + * @param url url of tool to download + * @returns path to downloaded tool + */ +export declare function downloadTool(url: string): Promise<string>; +/** + * Extract a .7z file + * + * @param file path to the .7z file + * @param dest destination directory. Optional. + * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this + * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will + * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is + * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line + * interface, it is smaller than the full command line interface, and it does support long paths. At the + * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. + * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path + * to 7zr.exe can be pass to this function. + * @returns path to the destination directory + */ +export declare function extract7z(file: string, dest?: string, _7zPath?: string): Promise<string>; +/** + * Extract a tar + * + * @param file path to the tar + * @param dest destination directory. Optional. + * @returns path to the destination directory + */ +export declare function extractTar(file: string, dest?: string): Promise<string>; +/** + * Extract a zip + * + * @param file path to the zip + * @param dest destination directory. Optional. + * @returns path to the destination directory + */ +export declare function extractZip(file: string, dest?: string): Promise<string>; +/** + * Caches a directory and installs it into the tool cacheDir + * + * @param sourceDir the directory to cache into tools + * @param tool tool name + * @param version version of the tool. semver format + * @param arch architecture of the tool. Optional. Defaults to machine architecture + */ +export declare function cacheDir(sourceDir: string, tool: string, version: string, arch?: string): Promise<string>; +/** + * Caches a downloaded file (GUID) and installs it + * into the tool cache with a given targetName + * + * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. + * @param targetFile the name of the file name in the tools directory + * @param tool tool name + * @param version version of the tool. semver format + * @param arch architecture of the tool. Optional. Defaults to machine architecture + */ +export declare function cacheFile(sourceFile: string, targetFile: string, tool: string, version: string, arch?: string): Promise<string>; +/** + * Finds the path to a tool version in the local installed tool cache + * + * @param toolName name of the tool + * @param versionSpec version of the tool + * @param arch optional arch. defaults to arch of computer + */ +export declare function find(toolName: string, versionSpec: string, arch?: string): string; +/** + * Finds the paths to all versions of a tool that are installed in the local tool cache + * + * @param toolName name of the tool + * @param arch optional arch. defaults to arch of computer + */ +export declare function findAllVersions(toolName: string, arch?: string): string[]; diff --git a/node_modules/@actions/tool-cache/lib/tool-cache.js b/node_modules/@actions/tool-cache/lib/tool-cache.js new file mode 100644 index 0000000..b2dc2e4 --- /dev/null +++ b/node_modules/@actions/tool-cache/lib/tool-cache.js @@ -0,0 +1,437 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const core = require("@actions/core"); +const io = require("@actions/io"); +const fs = require("fs"); +const os = require("os"); +const path = require("path"); +const httpm = require("typed-rest-client/HttpClient"); +const semver = require("semver"); +const shell = require("shelljs"); +const uuidV4 = require("uuid/v4"); +const exec_1 = require("@actions/exec/lib/exec"); +const assert_1 = require("assert"); +class HTTPError extends Error { + constructor(httpStatusCode) { + super(`Unexpected HTTP response: ${httpStatusCode}`); + this.httpStatusCode = httpStatusCode; + Object.setPrototypeOf(this, new.target.prototype); + } +} +exports.HTTPError = HTTPError; +const IS_WINDOWS = process.platform === 'win32'; +const userAgent = 'actions/tool-cache'; +// On load grab temp directory and cache directory and remove them from env (currently don't want to expose this) +let tempDirectory = process.env['RUNNER_TEMP'] || ''; +let cacheRoot = process.env['RUNNER_TOOL_CACHE'] || ''; +// If directories not found, place them in common temp locations +if (!tempDirectory || !cacheRoot) { + let baseLocation; + if (IS_WINDOWS) { + // On windows use the USERPROFILE env variable + baseLocation = process.env['USERPROFILE'] || 'C:\\'; + } + else { + if (process.platform === 'darwin') { + baseLocation = '/Users'; + } + else { + baseLocation = '/home'; + } + } + if (!tempDirectory) { + tempDirectory = path.join(baseLocation, 'actions', 'temp'); + } + if (!cacheRoot) { + cacheRoot = path.join(baseLocation, 'actions', 'cache'); + } +} +/** + * Download a tool from an url and stream it into a file + * + * @param url url of tool to download + * @returns path to downloaded tool + */ +function downloadTool(url) { + return __awaiter(this, void 0, void 0, function* () { + // Wrap in a promise so that we can resolve from within stream callbacks + return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + try { + const http = new httpm.HttpClient(userAgent, [], { + allowRetries: true, + maxRetries: 3 + }); + const destPath = path.join(tempDirectory, uuidV4()); + yield io.mkdirP(tempDirectory); + core.debug(`Downloading ${url}`); + core.debug(`Downloading ${destPath}`); + if (fs.existsSync(destPath)) { + throw new Error(`Destination file path ${destPath} already exists`); + } + const response = yield http.get(url); + if (response.message.statusCode !== 200) { + const err = new HTTPError(response.message.statusCode); + core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); + throw err; + } + const file = fs.createWriteStream(destPath); + file.on('open', () => __awaiter(this, void 0, void 0, function* () { + try { + const stream = response.message.pipe(file); + stream.on('close', () => { + core.debug('download complete'); + resolve(destPath); + }); + } + catch (err) { + core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); + reject(err); + } + })); + file.on('error', err => { + file.end(); + reject(err); + }); + } + catch (err) { + reject(err); + } + })); + }); +} +exports.downloadTool = downloadTool; +/** + * Extract a .7z file + * + * @param file path to the .7z file + * @param dest destination directory. Optional. + * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this + * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will + * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is + * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line + * interface, it is smaller than the full command line interface, and it does support long paths. At the + * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. + * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path + * to 7zr.exe can be pass to this function. + * @returns path to the destination directory + */ +function extract7z(file, dest, _7zPath) { + return __awaiter(this, void 0, void 0, function* () { + assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS'); + assert_1.ok(file, 'parameter "file" is required'); + dest = dest || (yield _createExtractFolder(dest)); + const originalCwd = process.cwd(); + process.chdir(dest); + if (_7zPath) { + try { + const args = [ + 'x', + '-bb1', + '-bd', + '-sccUTF-8', + file + ]; + const options = { + silent: true + }; + yield exec_1.exec(`"${_7zPath}"`, args, options); + } + finally { + process.chdir(originalCwd); + } + } + else { + const escapedScript = path + .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1') + .replace(/'/g, "''") + .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines + const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); + const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); + const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`; + const args = [ + '-NoLogo', + '-Sta', + '-NoProfile', + '-NonInteractive', + '-ExecutionPolicy', + 'Unrestricted', + '-Command', + command + ]; + const options = { + silent: true + }; + try { + const powershellPath = yield io.which('powershell', true); + yield exec_1.exec(`"${powershellPath}"`, args, options); + } + finally { + process.chdir(originalCwd); + } + } + return dest; + }); +} +exports.extract7z = extract7z; +/** + * Extract a tar + * + * @param file path to the tar + * @param dest destination directory. Optional. + * @returns path to the destination directory + */ +function extractTar(file, dest) { + return __awaiter(this, void 0, void 0, function* () { + if (!file) { + throw new Error("parameter 'file' is required"); + } + dest = dest || (yield _createExtractFolder(dest)); + const tarPath = yield io.which('tar', true); + yield exec_1.exec(`"${tarPath}"`, ['xzC', dest, '-f', file]); + return dest; + }); +} +exports.extractTar = extractTar; +/** + * Extract a zip + * + * @param file path to the zip + * @param dest destination directory. Optional. + * @returns path to the destination directory + */ +function extractZip(file, dest) { + return __awaiter(this, void 0, void 0, function* () { + if (!file) { + throw new Error("parameter 'file' is required"); + } + dest = dest || (yield _createExtractFolder(dest)); + if (IS_WINDOWS) { + yield extractZipWin(file, dest); + } + else { + yield extractZipNix(file, dest); + } + return dest; + }); +} +exports.extractZip = extractZip; +function extractZipWin(file, dest) { + return __awaiter(this, void 0, void 0, function* () { + // build the powershell command + const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines + const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); + const command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`; + // run powershell + const powershellPath = yield io.which('powershell'); + const args = [ + '-NoLogo', + '-Sta', + '-NoProfile', + '-NonInteractive', + '-ExecutionPolicy', + 'Unrestricted', + '-Command', + command + ]; + yield exec_1.exec(`"${powershellPath}"`, args); + }); +} +function extractZipNix(file, dest) { + return __awaiter(this, void 0, void 0, function* () { + const unzipPath = path.join(__dirname, '..', 'scripts', 'externals', 'unzip'); + yield exec_1.exec(`"${unzipPath}"`, [file], { cwd: dest }); + }); +} +/** + * Caches a directory and installs it into the tool cacheDir + * + * @param sourceDir the directory to cache into tools + * @param tool tool name + * @param version version of the tool. semver format + * @param arch architecture of the tool. Optional. Defaults to machine architecture + */ +function cacheDir(sourceDir, tool, version, arch) { + return __awaiter(this, void 0, void 0, function* () { + version = semver.clean(version) || version; + arch = arch || os.arch(); + core.debug(`Caching tool ${tool} ${version} ${arch}`); + core.debug(`source dir: ${sourceDir}`); + if (!fs.statSync(sourceDir).isDirectory()) { + throw new Error('sourceDir is not a directory'); + } + // Create the tool dir + const destPath = yield _createToolPath(tool, version, arch); + // copy each child item. do not move. move can fail on Windows + // due to anti-virus software having an open handle on a file. + for (const itemName of fs.readdirSync(sourceDir)) { + const s = path.join(sourceDir, itemName); + shell.cp('-R', s, destPath); + } + // write .complete + _completeToolPath(tool, version, arch); + return destPath; + }); +} +exports.cacheDir = cacheDir; +/** + * Caches a downloaded file (GUID) and installs it + * into the tool cache with a given targetName + * + * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. + * @param targetFile the name of the file name in the tools directory + * @param tool tool name + * @param version version of the tool. semver format + * @param arch architecture of the tool. Optional. Defaults to machine architecture + */ +function cacheFile(sourceFile, targetFile, tool, version, arch) { + return __awaiter(this, void 0, void 0, function* () { + version = semver.clean(version) || version; + arch = arch || os.arch(); + core.debug(`Caching tool ${tool} ${version} ${arch}`); + core.debug(`source file: ${sourceFile}`); + if (!fs.statSync(sourceFile).isFile()) { + throw new Error('sourceFile is not a file'); + } + // create the tool dir + const destFolder = yield _createToolPath(tool, version, arch); + // copy instead of move. move can fail on Windows due to + // anti-virus software having an open handle on a file. + const destPath = path.join(destFolder, targetFile); + core.debug(`destination file ${destPath}`); + yield io.cp(sourceFile, destPath); + // write .complete + _completeToolPath(tool, version, arch); + return destFolder; + }); +} +exports.cacheFile = cacheFile; +/** + * Finds the path to a tool version in the local installed tool cache + * + * @param toolName name of the tool + * @param versionSpec version of the tool + * @param arch optional arch. defaults to arch of computer + */ +function find(toolName, versionSpec, arch) { + if (!toolName) { + throw new Error('toolName parameter is required'); + } + if (!versionSpec) { + throw new Error('versionSpec parameter is required'); + } + arch = arch || os.arch(); + // attempt to resolve an explicit version + if (!_isExplicitVersion(versionSpec)) { + const localVersions = findAllVersions(toolName, arch); + const match = _evaluateVersions(localVersions, versionSpec); + versionSpec = match; + } + // check for the explicit version in the cache + let toolPath = ''; + if (versionSpec) { + versionSpec = semver.clean(versionSpec) || ''; + const cachePath = path.join(cacheRoot, toolName, versionSpec, arch); + core.debug(`checking cache: ${cachePath}`); + if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { + core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); + toolPath = cachePath; + } + else { + core.debug('not found'); + } + } + return toolPath; +} +exports.find = find; +/** + * Finds the paths to all versions of a tool that are installed in the local tool cache + * + * @param toolName name of the tool + * @param arch optional arch. defaults to arch of computer + */ +function findAllVersions(toolName, arch) { + const versions = []; + arch = arch || os.arch(); + const toolPath = path.join(cacheRoot, toolName); + if (fs.existsSync(toolPath)) { + const children = fs.readdirSync(toolPath); + for (const child of children) { + if (_isExplicitVersion(child)) { + const fullPath = path.join(toolPath, child, arch || ''); + if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) { + versions.push(child); + } + } + } + } + return versions; +} +exports.findAllVersions = findAllVersions; +function _createExtractFolder(dest) { + return __awaiter(this, void 0, void 0, function* () { + if (!dest) { + // create a temp dir + dest = path.join(tempDirectory, uuidV4()); + } + yield io.mkdirP(dest); + return dest; + }); +} +function _createToolPath(tool, version, arch) { + return __awaiter(this, void 0, void 0, function* () { + const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || ''); + core.debug(`destination ${folderPath}`); + const markerPath = `${folderPath}.complete`; + yield io.rmRF(folderPath); + yield io.rmRF(markerPath); + yield io.mkdirP(folderPath); + return folderPath; + }); +} +function _completeToolPath(tool, version, arch) { + const folderPath = path.join(cacheRoot, tool, semver.clean(version) || version, arch || ''); + const markerPath = `${folderPath}.complete`; + fs.writeFileSync(markerPath, ''); + core.debug('finished caching tool'); +} +function _isExplicitVersion(versionSpec) { + const c = semver.clean(versionSpec) || ''; + core.debug(`isExplicit: ${c}`); + const valid = semver.valid(c) != null; + core.debug(`explicit? ${valid}`); + return valid; +} +function _evaluateVersions(versions, versionSpec) { + let version = ''; + core.debug(`evaluating ${versions.length} versions`); + versions = versions.sort((a, b) => { + if (semver.gt(a, b)) { + return 1; + } + return -1; + }); + for (let i = versions.length - 1; i >= 0; i--) { + const potential = versions[i]; + const satisfied = semver.satisfies(potential, versionSpec); + if (satisfied) { + version = potential; + break; + } + } + if (version) { + core.debug(`matched: ${version}`); + } + else { + core.debug('match not found'); + } + return version; +} +//# sourceMappingURL=tool-cache.js.map diff --git a/node_modules/@actions/tool-cache/lib/tool-cache.js.map b/node_modules/@actions/tool-cache/lib/tool-cache.js.map new file mode 100644 index 0000000..5501774 --- /dev/null +++ b/node_modules/@actions/tool-cache/lib/tool-cache.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../src/tool-cache.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@actions/tool-cache/package.json b/node_modules/@actions/tool-cache/package.json new file mode 100644 index 0000000..aee6aea --- /dev/null +++ b/node_modules/@actions/tool-cache/package.json @@ -0,0 +1,75 @@ +{ + "_from": "file:toolkit\\actions-tool-cache-0.0.0.tgz", + "_id": "@actions/tool-cache@0.0.0", + "_inBundle": false, + "_integrity": "sha512-R08MGFekNLkf1ofh5wi8QVgmFyPgkKC+Cp8FRE1n6zOpHbUWv3QGa6eR6z+2ESuGCstOPtbq/tRgZsSusItm9Q==", + "_location": "/@actions/tool-cache", + "_phantomChildren": {}, + "_requested": { + "type": "file", + "where": "C:\\Users\\Administrator\\Documents\\setup-node", + "raw": "@actions/tool-cache@file:toolkit/actions-tool-cache-0.0.0.tgz", + "name": "@actions/tool-cache", + "escapedName": "@actions%2ftool-cache", + "scope": "@actions", + "rawSpec": "file:toolkit/actions-tool-cache-0.0.0.tgz", + "saveSpec": "file:toolkit\\actions-tool-cache-0.0.0.tgz", + "fetchSpec": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-tool-cache-0.0.0.tgz" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-tool-cache-0.0.0.tgz", + "_shasum": "e4ffe745db46f47e512db20e80f8ad25910e41d1", + "_spec": "@actions/tool-cache@file:toolkit/actions-tool-cache-0.0.0.tgz", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node", + "bugs": { + "url": "https://github.com/actions/toolkit/issues" + }, + "bundleDependencies": false, + "dependencies": { + "@actions/core": "^0.0.0", + "@actions/exec": "^0.0.0", + "@actions/io": "^0.0.0", + "semver": "^6.1.0", + "shelljs": "^0.3.0", + "typed-rest-client": "^1.4.0", + "uuid": "^3.3.2" + }, + "deprecated": false, + "description": "Actions tool-cache lib", + "devDependencies": { + "@types/nock": "^10.0.3", + "@types/semver": "^6.0.0", + "@types/uuid": "^3.4.4", + "nock": "^10.0.6" + }, + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib", + "scripts" + ], + "homepage": "https://github.com/actions/toolkit/tree/master/packages/exec", + "keywords": [ + "exec", + "actions" + ], + "license": "MIT", + "main": "lib/tool-cache.js", + "name": "@actions/tool-cache", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/actions/toolkit.git" + }, + "scripts": { + "test": "echo \"Error: run tests from root\" && exit 1", + "tsc": "tsc" + }, + "version": "0.0.0" +} diff --git a/node_modules/@actions/tool-cache/scripts/Invoke-7zdec.ps1 b/node_modules/@actions/tool-cache/scripts/Invoke-7zdec.ps1 new file mode 100644 index 0000000..ee3822d --- /dev/null +++ b/node_modules/@actions/tool-cache/scripts/Invoke-7zdec.ps1 @@ -0,0 +1,60 @@ +[CmdletBinding()] +param( + [Parameter(Mandatory = $true)] + [string]$Source, + + [Parameter(Mandatory = $true)] + [string]$Target) + +# This script translates the output from 7zdec into UTF8. Node has limited +# built-in support for encodings. +# +# 7zdec uses the system default code page. The system default code page varies +# depending on the locale configuration. On an en-US box, the system default code +# page is Windows-1252. +# +# Note, on a typical en-US box, testing with the 'ç' character is a good way to +# determine whether data is passed correctly between processes. This is because +# the 'ç' character has a different code point across each of the common encodings +# on a typical en-US box, i.e. +# 1) the default console-output code page (IBM437) +# 2) the system default code page (i.e. CP_ACP) (Windows-1252) +# 3) UTF8 + +$ErrorActionPreference = 'Stop' + +# Redefine the wrapper over STDOUT to use UTF8. Node expects UTF8 by default. +$stdout = [System.Console]::OpenStandardOutput() +$utf8 = New-Object System.Text.UTF8Encoding($false) # do not emit BOM +$writer = New-Object System.IO.StreamWriter($stdout, $utf8) +[System.Console]::SetOut($writer) + +# All subsequent output must be written using [System.Console]::WriteLine(). In +# PowerShell 4, Write-Host and Out-Default do not consider the updated stream writer. + +Set-Location -LiteralPath $Target + +# Print the ##command. +$_7zdec = Join-Path -Path "$PSScriptRoot" -ChildPath "externals/7zdec.exe" +[System.Console]::WriteLine("##[command]$_7zdec x `"$Source`"") + +# The $OutputEncoding variable instructs PowerShell how to interpret the output +# from the external command. +$OutputEncoding = [System.Text.Encoding]::Default + +# Note, the output from 7zdec.exe needs to be iterated over. Otherwise PowerShell.exe +# will launch the external command in such a way that it inherits the streams. +& $_7zdec x $Source 2>&1 | + ForEach-Object { + if ($_ -is [System.Management.Automation.ErrorRecord]) { + [System.Console]::WriteLine($_.Exception.Message) + } + else { + [System.Console]::WriteLine($_) + } + } +[System.Console]::WriteLine("##[debug]7zdec.exe exit code '$LASTEXITCODE'") +[System.Console]::Out.Flush() +if ($LASTEXITCODE -ne 0) { + exit $LASTEXITCODE +} \ No newline at end of file diff --git a/node_modules/@actions/tool-cache/scripts/externals/7zdec.exe b/node_modules/@actions/tool-cache/scripts/externals/7zdec.exe new file mode 100644 index 0000000000000000000000000000000000000000..1106aa0e4414c31f73e779ae7f2ee28084909006 GIT binary patch literal 42496 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 MGWhiRKc>LH0L->Eu>b%7 literal 0 HcmV?d00001 diff --git a/node_modules/@actions/tool-cache/scripts/externals/unzip b/node_modules/@actions/tool-cache/scripts/externals/unzip new file mode 100644 index 0000000000000000000000000000000000000000..40824180954830c745c837044f339897f12dcab0 GIT binary patch literal 174216 zcmdqKdwdi{_BY&<&=4-6gA$DjGD2915=fA+i4w`cL^?W1M9_#p5^^!okc4Cgg4f{8 zAZ<Gs@2KmF*Tu`axULXb#RMb+UIU0m@e)y_hj59g5ag2Qd#bA^orXN`?|t6)uV?&( z?*7)PQ>RXyI#qS5y1g&cbxnlLCK$g+;c9`NR!!2844$z3g$RBp2pK}E&=>y>5iSyX z0~PU?!Bef*4$j)RMsd1GTzla!m9w>8hj2RMYDh>|DzB&C&jFpGaTNqRBc*&K>()9w zeQVuth8x%A5_=S4QuqzeN7R%r=~+Er(zAL#<JwG&@iVSQ{itsAH&f4c#??ug@H4JN zOTX;B?n1h+Db+JtuP>A0@H4JPz8jE_<ouuhVmRRpUS3anN#*J=uDrU!*s{|36UL7% zD@-gaE%($U)}&5IoG^Y&b;X!*tlq?*Xs2F3i<LyRA^Gh1Bbf)|kE%lH`|5TVP5)>A z$UY0=FZy)gqC1A9zIp3Nq}_@?q9vW$UTIj9v8307m-&(-{x&)0;rLNYg{YTf`U<sC zwv55UGl<ss&B4uF{N>^=AAj@lSAf4F{L$|={UVg|>+QJS!SCr(hQ9@-=W^UH#9tNu zs!g~D_lxkigkyK%dN=;=!QZ|3dsqCXt>DT(Uw-TSEitA0t~gx&dFY9@orebwyZn*= z9(*@Kczx3=`8T)^ANu9$BWnv@e*NaZe3dpd?T9)gVdz6chBZXo?!9YVed3#|W=lgJ z%dD%|b;*E_D(qLidgqT{FU%S8-=7}6`_1cqYDn0+I%({Aznm(bl^-)XbJv0EW)?ho z^+z9_Dp>#Y>$limU-tR*9k;I!{5r6vbKI6&?pjg;vCjIt6^(JuSyJvo!<`NPxd;4_ z9{7yxf&Swj@bxgBvz06NfRF6~C-b$RrC#3wI~)J$J@DDzgPec%fG_WX&nrF9Kh}dh z&-XyzuLr!K2mIC^@P$3d`9=@;Uwgp6>w$kk5A^Ll)c46A=wI)FKC%b;Q$66+0nXO$ z|L%ca>7iZ^_kh3M13s(={>OU2U+sZUO%MI+iyrv=y$Af|9`KSL_>by=eq#@EUJgCm z@n`)F>w*5p9?FgEf&S_q@TYpfw?UAzwfmqR=)dfNetHk|5BH#-`+MM%)B~UWJ@A>; z10LIh-j4TB?i)Rn`*RQU{d*{PZx8e{dyuEShjJh6fxdqa_(wg+6Y2qv>jA$K^4sxe z{jKXk&f9z7<LrSxt_Qpg1)j|g|K0=rt{(8+J;-xC_}i_O!gECr`kVlK_*v+O_dvg( z2YF~RceZ+E_JHre#BPuv2@ONR5Wk6BhW(&t_{BQz<haD?E2-n)cOl2?IKGC{59Iih zjL!u^-m2jYG3MnoKRZVlD9ro;3N-y1c)7xOoqsJ)yPNU9KxpNBI^y*S@h6-<FJ7ll z;PgWneVh=_>G8;Zsa(!HE@u|UH*@+Ji=3T|f1EJN!smVzH%PcZsI}0yqdJ6_Snx_- zZmp$WKXLu6;`A4AdH%-bNwSo?i_0_Gg0BRA3CgwVd5uvnZ{K*%|6`6XAEN8cXqVOC z69YckoIfWQ{=@N>Ey)JNu9G>RJl>9YWWQw`U&Z;a;P?#&J;z6Id@k2pB`?>I=LJ@7 z+!^wW;e718-BUQ9Scb<58Jv%?zPgv=aTfk>ay}VcKZ%^rJWg-t^mt^ym+|j8LO)@( z(NQ?Q9&%E<H*k8R9e-yyY?a&FR8B8o-8TQuakNlN9+M>GX3d<ITUb<8bX#e)yQpgB zv?*m3<wY~|=a&@;xw*G3s3^~^cIQ{Qb905<YZv9t;B-^U@~f+hs`cz=%{+PbxZL@7 zI*SS_7F1RhRaa-07Yez>rRAl9HH8C^>!zZr>e7mGAs1xsGw8Ai1XTgaJ^|8IyDJMS zm*f_d+#wVfmwBp7glcyc5TUrBWI;utP*j5qxmnY5D?RQ4p}NRjR#A|TdV#8{pri^M z78kfH7R+ZHDvPSBDyoEnvWn`W!qO_Cy7ad4{4$~~Cze!Ne!(3?np>P-S|)hPvF^P? zSa1gsR~6-#fjOuPOUv=JxD>U$ZGpRV0co+oy`-`z_qHN;E|uk}%3Y9OBa~L>yWLBK zvVxL|#pOcvk_C)iF{r8qNU3wHDk~}%78EUj?BD|l%PVrJ5^mCxy8tklR1rnNf=W;n zS5}plyNh*|aL(?+3XfYTW;&pMs~I`d64g~$5H1XS1<!)~>N}Vo^Q((=rd$P#sryb{ zl(HJA!#!cVP+pc>mS28bX?bylP*GV_PTI)LHBybb&nKw`)UBv|5h)2Z5lSlx++4pX zx40Bltq_VASCzVpgkmVPP$(^^C|{JzS_C>R&u7Y{y7ERRO_VVmmsJ-P-2rK+{n4-< z2D0qbG=&ffi3_VMs@$9@i3$ZmBBnrUU9ucjM?+|LMOnq-qADgju$p`_-~6)DJE={p z&6*}|C_v|u?`B+xA=(5N-LP_V$#i*VT96Mj(T$JlN(@QlJJI!o+@ivKcRrB$)zvyV zAehti%xSq(vW1GG1>;JqD{@m)l7yL6p7MfBN43B-ky}z&l?$^KvTmGCl+=>B^Gng- zQ;N#nH<sQut@<_roN^2BSe0MKXqOb`FR2!aNx9YL#0leBGArTwnKwEG^k2?`dK5GC zTo1a6Fa;ePjaPVcsk<c10RnLjkaZknX7Wyj)w3sIMo}dig9PGz-kFbPHv}^(l37zw zb`2Q@q`SVtJuTl|P=XS<3WV9Em1K4|qV0*(R9DvIDY@guToJxY9v{B#x*InpC5&D% zW<0sY2uxnO|3|T@uK&6}^$Mrxc=yz<Ty#fc99>2BZ&x`+nFi9u)5ve-YH;d}C>rs# z@&6*jcU?#q)^(?+TAvBke>TYY0d9?P>)g`PXo}c<g8_)J#~*nT;X6_InLiI^>Ai%* z{MmD1X<w50IDd9uK+h3^$b+>;oYfd#S7qqsHuE^Ff#-3&)q;OS6K(u73w{qD|JyCN zLEmA)V}9l}eq=b~XOwHuNA-ZmSnv$aC(eS`aoldfTRA?;f<M9KPqN^KJgFA^@0>ov zf{)s(*GsnG2A^yTUeEdDSnx{DC(nW#d`c{M1E;UF;0Aq-1s8tN<*c>f2K{mip3Uj& zEVx0x(t@w#^s6kmLBHC9Yn*<K1y9|l%UN&1gIsS77Tn;!)q*#3`eqAW%lWrh@CJ^z zT5yBEX2Atbm$Ti1XLG#6f*X8<M|-e;3x0shA7jC5IR7{ceuC56E%+KvKgxn@98a>~ zNwlEHFV%uqay-L=ui?0C!CN?<ZNW!Tpas7i3w}YXj^|nMJWgL?!N+s@N(;W4)7Mz= zc8=Ft@QgOS+~pShdd|Pjg4c2Sl@{D+-&Gd;HqK|Y1+V9P)>v@ifG$tH1<&Akg9TsC z@vRoTh2zZ@+<s8!-(taYINoZ(YdNl2@Mey;Tkx1eI{yv}E^}OXth@c!aQ#GC@RgiC z#)4}ckF(%OhxKyp7W_fZf0PBU<@8Awd@ILOEqEL)^zqBE;CUREE%<7VXIt=Qj^|kL zxL<Ytc^15c<0Te+HODJ0_{+S$H5R;s)7M&X`G{WbatmI`@j44$&+(NOT=-4rv&w?Y z9A9n0S8{xf1=l!UZ^1|XuJdoO;58iIYQeX1yxD@cbG*fZXZ)e_Z?)j>aD8ePypGei zTkuwncUbUIM|J+f<K6B5GsFHZcnznIvEUk~kF($noZfE1V`!rTzfl%EhvP{Wd^N{Y zEqF7>Gc35BA25(DcqPZPEqDXRb1ZlV$MY<>d|a2m#DXv9c%=nz;dqS&AN8lsr`CcS zetUTjc%23B^`p*br3J6y{8w4<H5^}U!8<s<#)7Aw(D~O}@Z}tDu;BF^-)g~)dNo^c ziOb(&!J|&<<+fUInd6!TU(WG%3*N%<4huetHU{bUM0fi)<czZ5Ih;Pmg0JFuoCVi7 zZnxk`r}c72S#YD=Bnw{2=~FFu9mg{)cq_+c3m(t)oNd94a&s(rI;YRG;4z)L{3RAV zmE)Bbd^+b-W5JDbYb|&or(bTtYdQZq3*OA}l@>gXt+@qZl?5;1_-YGY&+#=Dd;yoI z-hvzQH}rsSwct^<2xe~07Cf8dEf#zg$6GCUJI6H(o)Mw*Z@1ue9PhB;EgTn~>~8;Y zw9$%Rlm##0c#H+F=Xjh2kLsoKv0LyAj*qh7bsSH!;4K_awcw*foqvV}ui?0C!MAce z+k!{+*7@XEaHD<mdcaF8_#$p6l@>gM^RKbs%Q;?a!CN@K+=3hO)LHO{dATbscuXI? zUaKs)!Dn?3_!<lTvSI%gJeBiru;8^E-)h0Pa=h7s$3^LKwpj2yj<;HHLw?PIzt81t zx8SQepAHLd@DZLGuG>5NR}jA7e4;FP2j>%G!IS#x^2b^5JdWEf_-c-ivfze1Nf!JU zE>EfjZ{>V4EO;Cp2*OXc;D2&H*%myN)8|<5^Y-X|KF@;ZarzPqK918@TJSnfUt_`R zIbLhQHI6U0;D&zcEO<<Ry}m0gcn-%`S@2qpueRV@Iljh%8|Btp@D5JjV8IRgRttV; zj4r2U!S`{z-GaAryrTzPSUH@vvk|v6=%aeTV=Q<J=O1Umw{qNW!5cU}%7U-qc#;KQ z#qm@N{uIYEEcl}wmo4~mj%Qo&8jj~!@Jf#7S@1%R*IIDlO1)i{TkwW79j~+CwH#k* z!816%%7WL;(fO>l;LAC_#)99^@p=nh!|?_S-a1$3ztw{8<ao0MZ{T=~1z*MSRtsLs zam|9~alGAv%N*~p;HexJo*v%KZbxxE%7VvmJjQ~zb3Mda@K%o7EqDvZM_KT#98a>~ zYdD^2!B=rS!-B8mc%B7cGf!`q5)1ws$15%PD;%$};Hx-ZYr&u9_;L$g$MHG~Ud!>7 z7QB+<t1NgP$5&hM9FDKC;Mp9nx8PYEZ?NDQ9N%ielQ`aN!R;JxvEY|;yw!rA%W=(u zM{&H}f=6(?!-BVSJIsEjyWPfd`aBD6zm~VV1&`r)r3Du_USq-AvvfYS7Cgl9<raJo z$5&bKDRfW~ztt8ziQ{W5xSiwm7CeUI4HkTEq0WD+1ux@xvjwl>c#8!$=vyuLJ)B;% z;0ArW1uy?WpSN^aa3AL*@b@;1aq~frM_F)#KE{GS!s+8IxIu5X;43-(C<|`TN39y( z%^w=i)^lLSc{J<!A>%xkao)(Nmyn{jOWbohe|qOa*9<F8u$yq5QpZP`a2y>9|B_5N zwsyn6R1?m(cv)J82{*rwBAf6&VJ>*z#e|3Jfb<*_j*aB-FVBSc3!{QiV#52I@JbUt zz=YSBaBOskf3+suI7>*0%S||cC5GjxGvUVGIVG$#;e!~Z{?95CZay!$+Jv8LqF-ae z>75zlS8u{&4G`A`6Mmiv-)h3oH{s1DJkEr-m~i7v86~%xaN`Un;hG7*hyea;H{nAJ z5Z4Y9KGcK@fA6x}i%ocx2_I&{V@$Z+gvXiiOH8=kgzF{giK9&T2orsh36D47sV01+ z3C}R$e=*^*3BS~YXPfX*COpT4Cz$X&6MmTqFEQbC_TKnan()yEh--}rH_jeXa;*s; zW1?Sf!pEBMIuo8`!dIGb^U2LsCVZTUezgg|!i29e;q0&uPpdcK#u-dXYB1pwOnkPQ z@V}byW)q%j!dpyunh9?;;dF-F_-Q8mDg(r|-GrNuZg!aPbQ8Vse3$)SZNj5WIDa*h zrN)@>3=@5v33r%qy9u9c!bh3#DJDG0ggZ@mstM0D;Tb0U8WS#?@bFnwq-UFO*+idX z!m~_xo(aF!gqN7`>r8m133r+B8WTRvgx8wz>rMD_6F%L9*O~Ba6TZ@f-(bR5neZ7V ze6<O`(S)xt;WJHmy$PRX!W&HZO(uM+3BTEdH=FPr6W(INZ!zJmCVaLD&*SqMnhVf- zm&VUHk4|{00pe<$w<dg%39mKrDKX))_dt}aio5cM3$nk#9nsk=dq0fYEOe$!&KoXt zj&$N*X;=pC=()J=|NHe?&gcL3>kMAc|LJu$r~kk0I-l3;|MYr0&;LKW8m2w#Mp^ko zIYH*Fty+)xEv#Br4k<s}IybZi6P@IPS<3c#va(0^{@k8D(-jb(dEO?-f#?zJlKx&N zezD8u4HtfwhQUG0f%GL1L=K2_nI$K5$jV;X+c9uaEV@tmT)q4Bo!i-3%;@KCre0G# zMjGa0A|Zbo%bzk%&wrZoH=d4^m3FyNn<U$s<n5>3abUJES7$arXQt=3@~ch11bhU~ zrLs4DIx;{cWv_dHtfoJRC+*YIot>JDD$H#XI{?^zJ5!$IY?R}jBzXFV=7Ca|8|A-- zN|P@L5zEfzxuFcCI%YX$&bl#qw{nV9szwh$>HbdXiOnu`WR5#o@NbiR9jGZ3^f9)u zpvc?5CVi&7^c`K&KgmlHGLyGC>S+;_oxOopPd9+-@vm&cP1&~#8)-3>+@Otz;ApEP zxu9A38rdI5K4cG|4vx+*T!E2Z2BaKVWfRuNQ-P}3Qk^WglzqR+uP9%u=ed+$l=G!^ zv4>t@1>cCA#Y${tev+_ZBnp9p3q;?$%O;@7|B4Hfgq02!$qg<wQ2{&c%~PG75TKwL z>`;C*D}R^wl<k5BGNoh9w|ZOq&2`LiP{T0$5Z8Z;0?C~QqOac0%Kj>sSDIFA*-*_I z>=Jerh-#z8lTi{_+Kn2&h)gK)S+oMHarCdBGhqilM?9lPG&9zBgQ|-Y$vtv=73BW? zB$pey%h5UAU~m#2XkjeupD`9`XR=s9EZ#P;h}BsPG+0D`i1vc!qIFJ-K4zQ_&pSgH zCvm#X#OY(upjscIr|8vEhy~OIZew+B@<)u@3kEmG4csbFx!)Ip-}xqfcj^4xI=`IR zp*&blSATQd?6`?+))h#6d#g>Dbz^4o&nRt_I!so3%gWvHF|y*0j|=u98xn%f_+E5% z2C6$<ftsjH|IvE~%4$Xw^#idsHPJmu?G^7-{+Onm_BTkrJy?<^cX}trN64x(J|-xj zhjdE5d4SQBqi$t};h5*h4Sfia$rH$d5}UL(!<Mx^akhPdr`m1T`<t&p4$QSlzQ3V# zua-D*n)JYrSjS6i8?p+Ve!*qaI$J5fSG1v~He~XVpdiS!$;x+aA4tP$={eK?v*dph zD{lCM+&S<E&~*;3l7AkS+p;qBIy}_gV-q}?4)19ccm!~kIyK7SJ!H!Y+zjU^jv|uO zM9KFh(ug)o`O0&iE~iuZ&82jNc0<X!y?Zy?YOfO9`(*vbbExfGl9S}{O+sWLDE@jY z#30d<f9BGL28R6%llOM?i=f!Z=?tO}%BW*}{(;DaD!zhrm^xY~p;eMMft?~g0?eRa zAEy5bcdGdHS?ITz=oO+zXH1&|i(JoMBe~LUcPXy;s0}nFM$fsJk^<@HBbTg1$@TM# z?8T*3)$a8a8iA$;QhL3;qLSViLe}U%ZUvx-r|D8(Tv27mOB7kfO7u`7RK!CJ$6FP4 zyg*g7-Ued>+R9M-D7<}9aEBehR}7eS{p_r4`=WdRpE01Sl-?VglmK80fX>)`<;kq} zWVYltVF)f2;)mXXFVWkJ>8}qgNfo!uK2v{h12gou1exmS!QuUoY${X&faQM*`GaBr zwDdEz<2BvOIfmJ$DkhwzoLEyigY-<g{WAVPp#4?x)GcSq7XoI;_cgkZZV!`KIp3Xy zew&H@wJ`l(S^XQ&LjO+_{gN>Kec&Gyvyf(~?@b^H>s1wVDYu_qee{YmaF3qNdShse znNITk0~A3q<xGCPyVFf){oqv28RdR|!c?xo@7*)$)^?|(mt0lx1<+ahO#ql7>{2~b zS9|!I(BI%cE~Nq_|I<i^<G2t{%yCTA9mfkG%2IFUj$<kuN9?hiL2@M=haYLW;|NN= zZD#)5O-R0Xh%5IQ`$MnbiTM-QgDUnR>HNnd1c97v7PR7Ruqk3Y*c(EB@~7@kb^B)e z4ItUlUax{G++LFJd`9;irwfV&XXbF5`ASTGeo$HUw-A^iibF4?OMkq*6VK#+UN?FC zC8!y3@u8MKLAHrd-3r(qTu$LlD3k(&vhuwaJVKSNrOFv9I~J-UUV496M{>r#k1Rpa zi+|}Cxc>qe*U~>Vq%r9wm+ms31c4#?vg6(K^E@;j6qj%grhY!JJ000oP)t6PZbEmu zVc>^;J?l*Ug@74C*z`;${ap%Y78HL34gE}VeA&@W-iMhSU!O_$R(HCotX@T&j>-j3 z@^H(#(fM1@21a{42Hw;jr*TDl{65pv9)JDyEbXy}c-1*EKgfjD`U~(#ye5`NzUPRC z@*O4_<fTI~lw=yeP3}AN`!Pz(pfOHwH9pW$`G&%p8I7*5ptu1k#MVgtH&VOiKVI<# zN;eXpU|F5yu%0vH_ZWCkTw&oi-@?yh&X;NA^NPu4Jkh{|;y??(b1eM6yU`@yA4jSB zkS{2HM7XJ5-yo^DE+~Fu!8Z{eUS9>pWtQ|8yQO=@_s!+`yUH{21x1&ILmneC^nI}< zb+U#3sTrpFj5PRr#i8bMqYZqi7y*1AGvuw5(^O;akIv4Z_-_lk1E{&aM=k09wxqvh zNq^LmzRZ$d)h*pCDwJ;6&nzVJ_8Di%cO~UR`&?_mhj-(rPcti`B;PBjX_lIcsr7Ej zw-OJvSE0K-j2m>fq8qxpTb6QI+j6k8GbCV;=*s^lR29yT#k!uKzHfy5nU?&1%AXB~ z7!+Sc68u59zuf;j2BJV_gx*0ZMOHQ&^(~^rdSh;giPwM`G_%Xcw5+VO&<-Gy0R<)b zRrv+(A^?BhKonK>qVj@@!cqXgGNAl6dv!^Lrwo9`fI@q51>Qqn4B!U_*xe;X_QWh= z`XvMMt8Viwz{|u<;x0TxEU^h!Hf!9F!Ss}J4-p2^7hwtC8QW5rEWpRm+!S7@`vPQh zS1mrkJHA4bSipH+Ni6DhY0GabR?@QwP{hj^UTrVPFTd1nH|DBC7>aptdC_h8?hWLj zK|7GpK+554CXF_oq`9_Bn$QBw_qzl@hAl*CR^xjNFsbn!2AI_NIs;5<e1QQbHLhfU zuEy#1(0?$$?<#a7sU;}ZfQBaPkio&o*&6J&(nZBeN+AJ?n9T4Zdtp&Q)sjl1;v*Q! z=J}QR)f;F}1hlaXtzKMFRcK#a3Kblf&UlDAb%{MO8><7f&==R!5<>g~$(^xd3&IT* zn$b;4$A)sq*(Ck~I--A$*wr%`t1F9&ol5M-dI1lygo4uIC3d`iZwPrWLyPd)g{mcX z_lC*3kd+LrurDqtEhw==$f-JyJchd~>_s(rVI4w_)rHJvc!3)=a)VwG8GU_Xp}x=o za5X48V@u|DRYS$3zDwD<jnX~}h`+v`>JZKyNZCq&B5q@Nxt(5fw=V$Dz<`RXA~az> zwa_{S*el8litM8*0KBDVDO&=ph$MT30Yx>?fjyu4*54RFUlu4#=treI2B0(c{roOb zTj2(}M0Kp!HSPu-(O=FOm^2=J3n7YlAxp4od;mkO8b3Xas%+BuE&{OrV|ZBOinx~n zCRKmSfUvR@aVLPz*i(63^4m%Nz|aRL4o3uLWWf}=i1YBinH)%50P41W(lEiLMq;W+ zF{mt@AjMR|ria#K<uD6wy$Oce=leT5leZz@gor4bKgmTgnO&~5pF9mbAQGZ!x*9tU zDgGUj4-phh=yK?(!81@5Z(?_nkK!|3Dh-O4K@9lEeof+~xTBhX;UbMB7MI(xD9$(R zwTYqSOYHcJ$^6m{w1EWLdL3n-;jmZ0UY{aB5mz(3*q&H0+MZYjf$zJHb*hyN2Udwc z_xq5As2?;?k3GM<5WrFf*b^5qGX_w@fQs^JducgaW>)~{jC~{*y5=itZ~7RN5pi$7 zpg5dvz}l&%PseShztbJ#R1+t$`-74{8*3h?I`R(o{Ile50j;+!BExskGux?(hp(kP z4W7|zdK^gnou1)p%Efed)Dx#h$J5<5=rr~;2uat^fL~B_0;eB~FDVEMJLBVAN>b<| zzE0t|H+=`P*^K0SMem7D_nn9Z^isC=7u%3lPij$`q|9HHW1(COhpJddC1I*cu~t=_ z&7Rz7)iRD>MmQAVKbRpsz6F#|H1ypPqOi;d#7xWirL&Xrp9k+A6w8r|exW{igx>HN zDXT-L%tMUg;Q^=&LM?v}GAn%>FO~8L>5%tWtnb}xS%frumZKhPBH?zE#UeC%sRoNj zXjHe=K*|H4M)TKZVVv2CuCSOrr$jx3STG&>KrHx^xydks9}o+c)}Dto)bjH;)KN+x z{aVV^tnKup;QCqR2+-K8E5TX$9ww1Uoa&1TO7qKLlN&}*7DXJ!Q2GuB*(7-M1`ps8 z!(q}a{u31Y<GK1u=5|hIkttmRDbP8eLjOQdY@mzsLsw^HJ#jc_w9I|1Cqf2v#z6Y3 zvfdK|;t)Nn|EyW}%|X_F-Lu{i&bkdf0i|Ah)~s(**3Z#^dd*p>N#U&5=vk$+W?e{G zAMc*^kEw>hZLC3~zaS20)O7-7y`_8B4dJY-^sG;xHS396k@e#4S?>#Houy};ch;;8 zl=Y{*-RkNLXZ_~COid%sn$=HPS9j0aH=H$B&#F=3XVmpt%DSL?*3YhCYI3U4LuSK1 z1LD&gSQz~wT+meiVwd#QGKJAQ1>Iw3`nS2H%m#D=JD9<m6eNSV>a3-H0lwO?pS#sH zM=upw53OhA{PnC^pQfzub<a99oV8lddXlPqMqTGo)}`IE?#X0z)h6$u;VSw!I3QT| zCsUIUPHyO`9_l3{BZPY!Ng#aYtR<Yh1tkpYUP7&20<zxAm`AhrI77Hb%KGz9-Bgkp z&U(3?HU6xnE~Bikb<f&Q&x*!dwT@|XJuZ&*bSTbIPXmOZp6prZKD3#Iy`*$vlm|xS zW(u0o=>qAEPNpEazMt-e@(m}nI+L7Gc_9lPmv0!QJE3P7iqJ7W@>E)d{7aD^PUt~~ zSCrFA!CuiMK7wb$?_@ahOz=qn76RyueJ6(uFa2G(aP6<H5Xj$<r8L4(KZ69vY{#vV z??%+3HWgINUR;uMD^%=52DHurW(MgZc$xi}=0ht(e)1zJnv)tb{YT79$UUcLP+1@U zU@B`2%94CPKs|an%fOYFbFN;FPcP>=u<BOM5K}p|dO1ssa+;xUt-xGP)6G=Q9pQ2= z?keXc@@;|WA$mC})^h&yV^@9R^l}Cn<>XK~C%!k;XC5o(7#d2i&srE2ug~RrIsehk z|I;a!`nXUIH;9xqNQAmxn@oBOr6K4i*B9jDYg-lNS2l@_NYxjAXiGnl*4yp#D=<S( z+<+8n^2H1-r}>UOktR;_2vEe^bZV?1Fnz@;CH)!{0sLl$7ZqM*$Jf|setkUy@R76I zke_TO6F_I|eK%o7B+f!6`i0Iz1ScrIjz_ZZP(B`Af#^->2BH2K`*FXP?w`U$0r#)d z{RsX3?{xn!S}FvhUA4?1{C9E^`b`c@u3I~ghiQg>LM|3<=!$pfyLs5v_a4B`-S~J^ zvH+jR!A9PI<W6k@8vg@qT4DcFZyxvgsO>NJp(LegJ<TkBdsXtaK<uFS<V^kCTu}6d z@9quX-Ocahpy=tkt>U*@=Dj5R(6^Qg!UuYv|6WU`B9-qypyR7rJb$1vwe$G{wjnTH z^M_vaaOyif4|xx*9S_M3UR1><J>H;*;~i)vTFI+%@F`jX(b`(7W831o^dWmSo1C_J zF*Ya1dXC6}92+zu!M|^y!YJFdPf-}%Jp}kqka~kI?ho2HhD-i$K<5gS#Sh4$9q#D6 z*q9dU!^Nc>4T_g$=*{dx6y{-^@TCdgDP&QR1KZ%ziVLAlml{tFR1n(EHN~mZzLQp* z1em2x{8qc;TS%Xthc)4%pHR%p`cU_N23lWfF*m)eCQ4AVHV%5y*9pw2JO)a%<wKLu zId;{v{WtH2F~$xnHs6i-+{PKnx?PgZ)iG_}JA|n*kiPdG%n+FZ)XFF_g-B+v;mSYB zq>5dM3#<HPD2;wp`A5-4s65L8K}LW^amGh!7ou4(OOC<>wM!gqI_UCX<{!EmD>UUO zc(B0mh0v2$gl_L|Q0K%C!1Nn3DBm>hALiR3`7gx-3G3f2t1+%XMwBu%8A1fb%fq5< zaVf9~CAM)AIk%ChPEZ^aP8BEPHZ%FCtY$~K)Yv&FJTrMWw!i<K&en^2@3skTgTwNH zEM{835#>_0%KjbGlt%2gK)`9V0-*^rcECNmv8Ur%RC}kb##32)XN2InT~=dvgK<_` zv*f!U<eC26?hCRKn&n^yCi)bz-<{Ri5$RM!H^}5bc8v111CEd^GWIos686iDe?}&3 zr}CBP8Gu3_RJ~5?-w!V0M>L(jZ$s%0W?G?Hl&-g)@+F<~cvbSxC3OX^jer2M5?z5R zO1?%E<HC@3dGueYBrcNNcsx>x-U|w<g5;+U!n*=;40iWpFa}D#ry(9Z-sPmGv@Kcc z4Tw>GPef|$`M^-6&`yYjQL%(p-fFB3Xi$6#|5C+*q91qk1Cx!o)#ZmGv80M!3V>9) z4(Z<X;grWcUmLpz)ZNUc4lU4Di}gG7F8OAlc6v=b$kDwf!+?a6L7<o8QWCR(1jSAW zN59ZA2pbevPuF`x+oM780Fp>l$exMYP#!6dq#A{rEEoX}x+r1<6_udLXupI;CHftr z?4XK=$09wtGZLIYeqy3N5|vlD5l4cP*-wBXwlN%Wr2;pG6LgpzSAnl0?q>K^c7!-E z=mf>D@QjcTEzq~(mi6pn{k}7{cXqN6`h*p3#9(>2W(#PE-QA2`I9#Jdzd?W^mNDEK zt(nJAYqTbtp{8ifr8<uchKHjyfpkf)LK4GGK^sQj72#6Ei$T#DD?|6JKA{^BMd9|0 zlP(|7|8YZ`+(O!KaA&jQP<C(qLE86mDIcw;E@b!*S@}}len?i1xsrq4J=m82Q<j`x zdP6qP-fNY?TeG~4wydScsaZWAqS`~RgpzSCDeMoi6z)qH3hD)rExWbF)bOg<p2msm zOyh}~{x!jfZp6_NT^sQwXoF${K>88$-!_}*$xi!F*TJD0mn!}ZbknFi9R;z{A$$Mq zbF5if_AZ`Wff*exWxL!MigX2BpJBuJ*Wx-Qm@zJ`QG@qvjLMMKb~>);)j`;j;{dw> ze_DYPR^X%+IAsM+TY*j!;7Z#j`OBy)c=vR8_w>0o;64w#6Fb}^WZRK&dw82{N+WWO zyB^zn+aT^%Iqgf2c8t!;j@n$8+^|_zX2xT{cGJ<KyD>oYh5bS^_oqUwDkZ6uq#}tO zqv_HmwZF7ZOmrm+-mMYJCU3h<`qw6D?T03PtFgV2EUPKrv}EX4+1|K6D)~4hxnl5V zYV?uo0LK1|f2FlMB4dBRP3aEN7Zv5*WK&|B@z}UOF8QOzP!!Uy81SVM-2iN}x&6_M zS<3OC_$(4?ZW@11P<#S+%59k=g5txts{<%)yt)vB)W}g}5EumGk{dF7IQMiB>>x{N zr+R2NGDSAn9MZ;ABzg|1=`)c%OSQQI&iDb8ZGc0?z!PxA$Khcxg)K7#6#+L$zphj1 zARPp~$Do6b#=}vLajA~wsbmovd7~_x2$+`E==mIWT$!4L`p%3$|7gbO2+5~FDrs%> zZ>h;b+V*;g(dn5l7erU#8ROQuXa=;#9C}LIE-PE5>6-%C7>uU{TroEH1U`R})}_C4 zEorz%DXPL!Z1rqUZlG3;E0nJo&$Qwh%FLm-PFff3Mp2<Ei17jGF7zkzX+=Bv%$815 z%Ith9Od{oC6sau%0Rn~5;J_vn=(g|+>PQ<BG3;rVAg>&#v1!5=%!A0v7WY^>o~Q)1 z=m53I518$0<G=>dUedERZwH&B3<$GiYH53}xGqcS2#Wv8GTQnz-05xo67KZ2o`mLe zU%>UE-E~S=ez;xX4NUgaRUf<6M9@-A6Ox45ywRt%l-n_4V$y`B655i;FR9|T3A8fJ zhL4Ngh+AoGj9h@jOlYFzGY1SndwV<jqc&0ZU5B$^AYiSg#6E-D`x>+<cL+kUx1&?p z<k|Y)2r|rW4WhJ2{wC(8KD5)M5lXG4!nLb#Y957;CduT{HZ}U26pF-3evHj<YUvNk zSSComsgyT>skwG7YaYq>Z=|cSZX{y}^$(zQHFho@je5zLRKvUr;|H{5!TIa+K@^n+ z8nk0mmj<+>P%1q1eD8_V9)y}N0tNU9G_8a$UGXmxMU53GV<39lUvW{zk5ZC__4Mk4 z9=xv}kBM>YL6CSmL~LOC-a``1Xa$+flZ?OTU&VEp#n7s%OCJC3p!gH=($9@$Rr=FY zslt8<220C_cbd7iJ-VG+n^*%1_f0Hd8q}^pdQdC{L=uNuz?|$=pR(1E4XWu=kxC<q zsO|b3-GGGFri9rgP^z*?@^1$9e{uXp2xaK`B&29BA`1qf&TAkRrNtvn8;Mfc%FsC9 zNxkS(8iV+m&ac?9PHh%thGs`#PgiTEBGst2K5QJ^Y?Gyp=N@(5V6%IE_3iLvqO)it zb$U>{?b@pUEqyHde77^6te=v~YKaNXc@o1p5Hw3^s;AZ7H2+ceCroYoT^P`n-*5^= zyNK09fGn3gaPBUn_SA66_ZD=CjRW^IZ3vSAGj`LuifAcy>``Zl&F(&6JP*?jftjpg z@*wC*uhDTKp6ofm_6pQgr){4%Xp;*%<;H!H+JE&LXDK+T)ya$){x~a;3wMO2WHw$3 zLE{X{Qu^rg7f0>YknbiCx|HgUOljj7?3-u$4?35Z#Y;H&g=%UgB!#qbX1s*VZLzGK zvM_E=12srp%6@m=QD-(p58=@r<!I_HP&#olSh=s(F6qXGpFg$miDP^`A=>LgR>?mH zW=r-bWA7tIwZTU?Y#;h}D1+Q%2*Ti-9FR|=>6Fhg<*?Ps>fj~}*jv!m8?caW^c=#Z zB~Z2n^~Sg+2Q$g$P}fwZJf~u(HcxIa)}4;r&AMKswNs$3Y8>VA3<-UWEXFvpb~5lP z;F50>;EB*4R=dK)IkIxZ^J6Vm<dUy|%pF5?+xEI?fpR)~=~C|KfQP-t=28xMJBGXO zL{E-wb7MT&sPltO!`lsa=X*OCr+vi9-IsCMjrMm17TFLdsB;Bw2fwetMpHiN>_m79 zaVc%%99F5r+FoGjALxFbU7@=n1`Jb60>}(DbP@9#S;|rOr=)naQ`?7BlYax31M_U5 zrMNLqU<5jA?NI(O2DK<P_Rl1^>dBpG1Mx6!r4?_YY<RP8@PMToq>KI>w@zv8aOwbP zvE+mP1|@bAz<UeeFW+W_Y+QI1x6)cf3>q4>Ufx#8fj?)!CF00xgDo>Hw0M%TUvCd( zJM`&D+wN3)sh%Sa?*Ut&OtiT#RK?rDgAX0KxV`T=Evg8E&>N1lgYFnsZ8UL|-oTra z8`^%=v_kCc1@dgFI0hL)vteRk|7r3+OAk<P)2Qc*Ukw1ZRv`W{7UP01z7|zyahXU_ z9gFE;x+6MLke+M6F>h}}pQGY*@b9Jg;(efV&y)jyi(iGijpSM}s@#p^)aZ;qXcSrV zH#n3JC7-U$_gG1oeN1Gt52w;9`G1K4@zM`TCX=;>d1eqVh_oD6`Vrqr24BycH1|i; zckVw~l=M6}BsriHC-2ypq0?u(0uM0(wZCB6!31*TIBs!Qdpm5BznBIP^}TqCB4{ID zg6Ez|2>50uH&6gvujU4-9IGKDU>xZzkoLtxoa0=_T*-$QcQCAh=^)OOq}G~W1k+B) z40|_ZV)GMSH~x1b1mUQ7Vob6SA^Cqp4k{e6rzjj9Lfw|)LQ<e4A$bQ%XFQk)tBL&$ zNSJ+#vKg8mMPWQTr__$C_XLj3{{|#nyQvU_9!M&EoJ#@XP`(Z2L%OhNbnt+SmdaHD zG5&mmsrU*m4e>aeiZ`o<idl?)02nZh96||UK{mbsjeH9vY@fUxpU?|g@p@O4jS464 z=&JHO6f!SYuQJ(bD2nM@Z+M!r+u<x!z2RuUxESZwfMx)y1vw5NeDWGfP#=n?MpT-R z=7Jx+TgIV!c+iKKF#t?b@lFGQ*?4d&?evJd9HoQbk+&Vi?@QnVh9=Ss0)7fkS@I?0 z{f6Y-2y!8;b=T#?1*Ii38J_DmwA5%=6ExpM@e_ZZh&hzFWOTU0m*ZAi!Oobe;w^aK z^UdoCUn|IcHy_=M#vOxDpJP2K0AeJ`+uLMsS$v$$nYLA0MqLv<!{`wPt@RB=!j zpWd9$&Q>gE!OfBO$)X!o@z~{I2@c@)zK`e~1MQJK@TUpx%C^rmA0FhDp*y*Kvrg0g zd^fX_{O`hmLId%SL)oT$b8N?mnek4!aZfKfa%Q|;!bsyl#HLYN8zJv(%Tzw|cG$^B zEZYl_y&VOTkLHn1dglc%bnx-X;r)47X4>zI<~x;N+eQ{+JQN)ek?UmwZb>iZ`lP7h zrCs$I(p8_vT%$f_`o+!qJWcsbX*t$Bd4%&7L2hjAl@&QPisl@66-H@vBs4jswS6G9 zF7l!=B(9(0Qx1f(yR@Kv_jmn)`G{sbgy?j-OZn4@^>mE1Zbp<->2P3r<5-IQQ|!wv ze_Rx712M+#K*(4|G&l}(+aEA$;YAjwavE`|D=$kzhtmq?^Zw;|6pO{o%b)`__Ll@Q zu0}0V4vZg!SMwwvt>ZAG^&{Q!9?T1&GE6o9loLLZ6E<Px@*Z-8rh$m-7X~}Jt9QKh zD)o-PvEBibMPi2D6Xw9ofK#&rL>&w`6_4i5;6ek%kZ^iuh(SCW#)=RUx<chBgejHN zm{p=9*hz2GFw0S3x~w<EK?ACIM?%;Z^KdJzphY{FUWW(X>KTNujdS%qf!>g%d@cEw zQAN=QVr*I4LynEqGr(FEFYaP?E@QTv2vza)s4%nNa0?THc{#jIQLv1xzCi~f0Jf>i z-y2CylTPh~YCyUyTIYKYMZs#RsbbJnlcCB?oLI3Vna%6Aw>j#0&qSc&2S-AK(uiI< zI&0_QOr^=0*088l+2TYLbvWc$)FsCqx*WP`LWZ<Y7p1G>T%de1Fax*ueaw31u{nk% zw|%bd$AetZ5;_RCs(nWfD??+*GL_HBfXG7}`*MUkUX~kw=_Ln7C(+qaX4AM4AQo&I ztD9wSz*<-@{3q#1nG>HaBmN)fR0`vB9Lg6)N6ev)IJ(P!WBzk#SedWlHryXck?=3^ zs`wOOUW<ot%l%7oS1mqc!ge^7J;$0y^m>dspd6WrrS+C@2kb8F@0c~PJ~*Fh%KBi) z2ggGr4eNU|pGDt0(b3rn6Uhu97UtiM6G?ED&NNp%7GZPZV-{V7v;ThyOLhde(h3T@ zqhY?o1Glyvgp+}610VQ+R=KYeQ+N1((oYO?X?V)eeHwi5qC2|#-$%N5Ez^0K{m-H+ zRdF$3uAeg8a{UatHQdT*N%F{@v*`#IbIGAHy@|11kHS;CTG$ncPlB_80ULe`n=#CB zNy|P#<yaG61E)leHgB4;k6iFD!D!ywsd*E-rp(aA_K{&-G~qVfzI^<Ezg-8I%l{^B zx%@XkT3uLkegBXA?LgMnIjC|-MKexQPLe;(b4cqDfhdLx%7YSI&b0PLw=muR+IE?- z9>w_AC4cX;$PfEG79W=X0B()(?-oP;HnLAXpye0?S~d-6ydTkkhHfM+`^eDn&v<Es zG+YLGFq(z?i=k)Jc(xEla$76L?OF7DbC-OsF8O}VG35LINxw9ng)WESe7q|2H#lj? za!<n>Rectxsp4lN!iw6ATWJL?v|%D|;el7-CBn`A6lNl=-Ary%ZfuKk*fvpU8E&Q7 zsTRh^IF;j03Pn2+4I53}5(DH;HehX%(>m&*PJ|vNZ*q<(j4#n=S7`D)8Z`2p$|+~U zj|q)z{Dz=Ef*K?02lOvqPjMt1cBCC}N>e+WX(yc0H7A@2CjeB5v}Ks19G(&wFcAw8 zXTm=6+sY<%n*YR-!w(GZgVkEvR>yMv+4Garc53M<V(Xsd-|czap&TZeM^pcgBEe&1 z>^A3x(&28f{iY005{Tl@<fF(a+k#r|#?DSEu5CTW^V^Y(2{f@oryi|6h;D))n!gEi zRZJO^52DYEZhOj!D1DR`eKYlV+`*~8#%9v+%cQs*X<a6>{A}_)WcgE-Ep3;gErt&d zx5fFm?ba4>$<DMt77bCwUP$6y_V^_*`6lf}d@cl2y&Vv|`^+uXZ0LNvXp)wFXqfsv z<XF*iIkK`-`NO++7!{FCek7jF*B$|XZXC;S8@6wKkVE&Y0m@}rK(gqA+&PekPd`6L z_v2R6p&X(iVx2xjOu-NV>*8}XX>Ft--l9vG$Dnilq3>YPaQym&nR))u)lB4Xr~z{f zBfs7-@{m0&&iA;LR+Q>Sz6}q&9vcZa8##@2(%K+dIh!QtRu1cKb}BzQm0g)i>zPJ9 zVotn^Y#Q@IXMA?T*D&REU+YHv9+^i%OJ>4{&a}<2;Z|qbUfA$nXTn|pRZ(bkJ3=nk zI2BA*1`JVJ5`KV-abkA%zq8{^TdQMf2Q%ae{)3)JGL;WQSKxFEjP{FRNf_dS7=dB6 zkSU7n_8<R+6GKr^R0cA)HNt*h2W6N2Mrj|xM9F>!LQ6ESqb`dTG&Nn@GoZh-i(dOX zr~L*rv>4K9J42Cp2PgSxXdo`S-N)ivH-_Cm3A=Y34ca{OUCN2fz%}|Pj`3Go_7q-I zQpMC^XfPQ|S0y?TxA#&n7=jx)AXD^a5N=sxH6pV<fNu`XMNU>v?R9)^hgA~Bzni_j zv;D9>mn4Ib9yko4LT}?Are9R(wTr_F&_0EcQs~R5c<5^o!sUnd|E6CL<Eov%0h2_$ z(HBTxfV@uS7tH4$V>xN?^?wW+%;^_i43X8?b1ohZk`D8v{&gZy)7OCDtdshELouoM zgNXWDA6Y$*eG)*u6TPD;G!BJ#jpqnMACZ;cWSSYK{{x!Qu0*=hA}0)efmCJ_AH@YR zA=}X7xVaTUV^~#J{^T7L8cErUWprC_%p24JPo^DLn%xpb_OP2e$aAoM5SkUcE-a@h z{)A6*kZb=6OMdLcj=T&)yVR8Gp(vF`09tOtn<m~4KzpJR&M0tKghL4;blO{gX5N6g zTNo&IFo*sXq(N~P)B@WBm&7kgh2Bu_Vw`@Lm6Xrv5qpS3uu6(P2gH)^BnTaWsT~MT z+7``FQ$`~#Q(70KZQ=%SaWuAK1Zu#pnoCLfY6#+fN@5ExE@k8rkOsxuz>|Jw#MXTb zPVOvrcsu)ILtrf@#M$(q_6m!R(6+}_C`3(v_abcKbb4lcJFwR*?t7lX9-^>{F3}gT zOZwy?Nwk}?8EFWKHf*47%Z{j^an!_z5U|t!wZ7XCq!{FYjr9fZ&RsaDbs`eSv;w{S z2r~(xM7TnV2NYmW5huwHYm@8AsA69NHP(d#AZ;>qb_msOy@*x&M_f?t`#}&CE1^C5 zX>Z`*o16yy<5Z^Py9baOz3)Pt-;anwSHQj$ZQrn{jw%Mh0TpU_)+Thi5u1ViU)244 zA<lJfLi|hH3t>!$sjdMTs3(DM=gypZs=(~fgJ2B%j?ITCp=?&23|MN2Haf%eD-`z{ zibLjzGmE;Jin_CVQM)f>MSXDr6~#&lMS!8PAI8q}DZ8+3C@ZJ1{S@rwP<}`CVzh{I zGP%w5(;*z*5%k2uBDxM(8Tm5<p5B>hzf|vW1TuTcwk@Rj`UU7w@ERB%_GH<<XN9`b zj(9dwjPv8Q`i2Z!!(v0`H4GrKvLB7+ObAi*`*kdHa77mwp#9}tec!arYm_IarF;#o zSNEwO2e~%ah5Ccsy#I;sjbtgGo5JAuP)@KHdL~w<s8^hJA*6EzJiixvTl>I0p=%C6 zz+Cd<+!NK)jZ;&XXQut(RE}jyQ%-3YL0-1l-|SAAMtf*Tt8$<doV2;8OZQ_S6X*dE z&L44$E<8XE%o^at3q7bTeK!DVLtkz&#eiu(=2VWj;G?i*{0!>I*m>U0R5aPUWq>Pi zoehT{B5ldr5dV&2erC1JGuF}M=oE1DMBc8kb0=xPx?l8fyANOWn1$}T#kO+~MZF4k z$bFkv+uYj`(a+@Ml<L^oI<26=)wjX1+<~npEvjt;^_PGL!b1H&XoDa~=z4B<a^Rlc z+TlAebV%#8(9gOF!c&4UdAGLW9gvOyX`L%D=e(0Rq~SpS6$E(Sb{s32CS~H>@tpHW z^?22LTU$!leqCwXt0qkIZ*vzrYCDE4p5{vXdhvuN+dOIQVrZ%{!Wp<G!$|@nCn_+t zGt<}Lo{R!KTUdtkDevdVwdf;9&^Bhw80Nw=u(!9(Ey`dPaxRCTZnU+%&-9jsIAIg& ziM?m?^%#Jn8_&mag>|uS#$mL<?!UCwF<SYuxN(1^_ZJ(E_}F%MTTk|F@7pY`jlCZ< z-qsU91LL2d3ifSZ?!de_Wfl@-Wg)h+QZCbPv0;^RseT)yrYt!R{tqtqQy3LK^WskR zZjD0D+Vt@tiICO~9gV9yz4pWyX&JMd#QP}6L7d@$Ge|zDXk;(g*>Btv>1{pMx0z)= zcD|nZFs`1>wI?o<9>8frK~1?vFV6oYMD(VsctRAF&S79E`{qgJ0M5N287F)*0I5UA zB7mh$Mw`N$-1Rr+P5yHpe=nfR3u{ULfzw*r3t89+&__T5zw=-$c@p@kLAb$lF-l`E zcWNvD4ZpHhoCUz!`oqLqB>xpK5q+GL)(uUE)PX6dF)~Fiy0F-LqK|tp{_QI*!_jOU z9XK&S-*;6L-C#_6iGM&sY*p+)C1$;7jK_nQrR^loJOX-RdxqYQLD+u`q#SvIiFY{^ z%j$_Ccq(FI+HAI07JbD_te&65vU)m{ugwFFmI;GKEp-<iNO=`hsM_;`=?#G|cw;bo zLSvvQLRT;sivFM`Hi3wwoyzo?{sw9ZX$m2YAw~ltTiQ<eDZF@rrQ+=ofx&*Xji3Z? z?}ZU?{p0xG)NTq4{wgql*_ds6abu`|U~qtFY#-rlk!?r9PHFAV88@`$fpuTKqLWdO zQNlbbVPRJZy^RtYSqZoD61E3==_PD}x%UqjhqFkwZ3!PsYj@u`0~V15U8C|Z4(>jb zX_ugR;mqvp7-rZX2U6CbhZ?IxZwEalUur+hlzIi0cAh?c`q=hMwvMdD&mF><tx(Ks zwY7*MIx)+>7DtP4kZya1fceiik#Yi#PTy(M-dckqD6$%ql_^PlcP)@|GfL2|{TF7M z&!yOK=wshtDpBk>H%Y)-Lr`S49rpM(p-N1s0eT4g8%#UC?n`!>vg0w<rv1Uo=m(b~ zScjw2TeS(~rvuTS>ob$p;ESf3ru^8=MlN}~+ZcX7sGz31&Y|wWO$5c<p%?RVY*#T2 zh<Rx{X-O7{9?hmg>6v;F-S{`6@}@b$aGn1}jDIMC`(@Ml`#jTDC-!czBoPOmi_<U- z(u&^D3N&);9Mmr`vgI61=#R?EK7AIipPP0e?uq?%#Ma2n=p%T_;CS>kAQ=q7jZ8OM z{#&%wb&4i;_u?5xRIZ0iST~L(--8vA<9(XDwMEgmrZ3zi-)f@7T;L?je3CM60|Y*j zuZE=arbiK%d+()LFW$Ut(iWmP2=9A=vZ~^h5MEY#Vf~znJ6f`}y;xl5*oZI!l3npR z*lr!bw_DpK|D%lQhk3?0%jf4PXVoB*_TdBQpN@_28bVt`*L<JkRbv-HZ`h)j6PoBa zu0|zXm9h}vqG67WG|`}{Ec|C@XPe*Hx6wK6g9R)Zlq6_AtWNZ8FV9YtIhx93DmHX3 zJxl>??}=WL?>}J3b#@u@r%`@qSN_L9)IF>3elEgW5W(BQw0Rc{0@`$sc@4IU@b7Yv zP-XOLsNzdd8V)I>pdzbrD?LEIxQ**CG@6+cjpu>%^)a;G)Am69s6i+VNkCuH(N8#9 zK&UD{7ehU7a6BDw7X>>hCiW4+5}FmU4mY74sO1N=U8}tYVYQQQpfg(LXZkk`F&Qhd zS}?6@u$9J^N-i|{DEb;0{6O_z@IjrMss9X+s52u-l!X&Kfs{YkW3OE(52DP$CMOQT z2Yii5WDR6IzW7y0QZ|QZ`Ht~lO}`LQ(suJ9Ee--=)ZQi~1C9i|L9db62lv_rNRB19 zxB<!13OXw1!dEIIW1qn@!f%TB0&Y<KN9htszZH^f#8@e4SyOa7z6G`hhwy4N8z!$p z`UaL>${1r8m1Jbw{Lwe9B$pdK7H8lcv!-E*i}xF(?(P>JwgxdR?b$cGd5Mz)nHTy4 zg>>%B@=mfjZp9m96HpMW@EVAQHQ_isu_JjnLz3#cYJ9xpdje%=dHdjaOUl2&0dL4% z1lnnlV_b^nQV!zq`6Nscub37n6a@!fEF1>%gb!T_d#7QjTYfXu?5f1pfzXWqbsG27 zST7!6AU?VzG($mIwl8erJ$S?#s~ndQeHE?_HA^07XlmGGT~pIZ+(63R1DK`;A)RT8 z$*f)ZI<<r3Uwl4h33b|u|56?Yc24{mFf+{OevPL2ocK7(kk;OiSlp=f_qNhZF16Wx zp;L_=3EgB;zg`J?|8AOX2-5W}IAL0ZEE}1v7Uk%Yh)7J^EV)`}Z-2!xP(rSi0jA^a z&=4Ov5)UFkrU{6JVEj%Du*Q27jfYVK6)b^3-8}m~RKYa6kdY2D2dYagf;axDP5fn~ zA4Dp;`8LV_?I;N0{jkJvY&h~n^H@4cp$;vA91!8vhr)&vy&s=o0r#H<n1#>^A%bae z*@9FMZR}5GgPG=k$*YFG#Z)Q0uaG_{8cj)W*=x`L1M&yOlLPcMGBlTnH0Fu5%k_|# zZ!>J7OLOn)wm<J7R?Jh-v!S_nC??YcZwIk|Q@P5bJrFw72nFC^<w6vL#68QHT2DN{ zsx!D-btptIw3IkK^jf!i9qi8v{H34K9VGuH<hi`*SCa6O?_7Gqi+iK;-R`0VuE5a$ zB8RRRMf?}#uE#5zc>m6gS2;K08C_g_p5gYYqC|Wrq0&Y11@SS46_r=#yNeR~xoE=; zs2}JCJ2RW~d=esdGsS3B@xA_Z!BEGH+C@8SvV!jgh*uDwptut0^mD23dH>H{P`L+_ z9Ox<&*`TYnex|F>p)yzZ_iv#m2PDu6R}(#z8lL5*H(+9f%HUncQ*?}s&2OQp7!t*U zvx5{R^`=5;AJFv3th8nQlJJp~=kYJ8rv}$9wHeC1ouP)(bfqZb9ENtOjZ~RU82kdn z>5P30(GRHQp?+k1m<@bPmPCppbs<gzoPHoV-WS=_RIRT=@4GKRN~|p;-&mUQ>-{4W z+@POjN>~5*=&^3!<G}a_J_xhW=M7mr{{_akBuU2E$T8^tUsKaz{NMJ9?ubgsTj5!G z8O5k#6_E$=b{u}i-t>VapydA^Ptw|KtQ8Z#?u$j_9-Dih>^;?ATJ}ABsq8&C01h;W z6#Y1&9EeT+*v4jQhp}*3fry-Dn@iP9e-T7TK8GhGGNtXq&N2iO6sET{$fx%%jF>Un z?d`nwf%G4u*hH4pXE!^f8|W*Qb__UILl;`stH=;Y`8SBs3UBm*6XrI8wGZ=_^m13? zg^*)jE*vN7d@pFJcBmG;G)Los8rz7RbQF6Dp70@#d+|tL2lPJzpQ?OUTQgGdT!;c5 zgn~AXg?cpYB@|3;{M8_Y)crquqHELdK<Ze@H|remz`^MSS75ffdFfA`weU>7=i#OB zQe)sLTt^D`2{^j|-qMPv@tiKiQ2(xurCacmeAk^vw-82J5s57lIyScA4{TwD=pSSK z!Uo&uwROzN{Hu@IXEG<#3&AGsQndW~OQ_k|LU=jIP?4p*$;mjCw$RIrVJ+%p_~lP8 zWOf$?=QS(jV{X+)$!JjORdl9Te60@##qlgH1Nf38G(zG7h@VSq_ZZ&N4?fz;Lwbwq zvhIgI9XOkqZi5&IQkol9y9YLDlJxuDOwzAJNV<#828K>DQ8NU*s*!<raHI6z6ck%~ z>v!m4pYq$F_<8tlAqb&r@>DB0h}Y^8p8;bET14P<NKh=~+?=Yo6bbaUrB6T#4CcFD zuqs8I2MTR{8k%HX^e^C3>^(j}dY}X6DpB_v;Ju`E+vS2@Ps+A-`rNLQ@}^$`URpek zNz*J~A~Us{0D<c<F^Rp^w}L6Lmh>AGH$koX-2g5rgg!1B;EC|vb0Fk(+7Jd;@!U>z z=t0Pg_ZlVtwQNS5@`#@)^CM6g&GQR_4chSo)PG{<tY)VgN9wM4{KL$m=0ZZW5sPcj zn33GT8cX}?MFckZ%lcP=0*yHyg`tUVam?0VN;2#ddbvO^cZR9law>Nz%FV(_9emrS z7x74G|B%c#gOpa2q|IkyMc=BM_7@;I%bIo?Br#13-eQc>{}D;Tz;!*TKYs;9ZlL}p ztDYn+>jgB0K8=#q1xfG-p@Uf5>f;CNmP(u6F(0N6Por{AA-{IcG~G?7olDC=#HTLB zi{f};1aC?VCeE=5C`=XaLfJv_RJcK=_6i&3czzocC-A$YlgWy|05NaKUn6yD$@e<k zEE!A!CKaI>Fc4inR&q=<3Jjz)c$w<SHqtgT#bM%yTE`%=qK#-H(W8f8<UkFch-B*P z*4G9>4<Y>ngNWzC|3&EYO#d4&KYU{3pX?bs2G6o*aRHuTCs({m9K}SssEIFA@I={; zc0_kUL}aTseIn?fp2sg@LSCc`ITJ$aZHpCAjOO1D>EOg;u)Ff*{Y=Co5ofpq`mp;O zG&P*56|SP{q<jh@RHw<toP6@O&Rz3zwbh5IZ#n1{kZ2rcL-#$3bjX9xA*HXwEj}>s zdk^zuc=Zx!o_+IG#c?VMg2Ve_X$00)_cPXSfWYV;K?Fe@@6q~M`y#~D8DPC5{Te1~ zLpOD9dcK?M8lg)%1jTpm(qdCkdfHD8$@Q%_{U<as${mAAWayLM$(JMUkUm)#)K7;j z)s!T9!V%OL=qdJyK<lzsz)=1hJrSKLU%fuMmWnBAMnlfef0D(>4FXQdXgFP?|~e z{iz~c^Rt#R&DYq@s`+G<X@39TyE^;zpoIFTqMXiMbKwMkv_V62u&L%f-j{8p&8Z}_ zrMB?7VY%LpWa;5{3~%s9bCHYrqrY81{Uxy!@h;45?)TZyjUs96M-~5uC)k7s7c~A` z?2`VKU>?_Kw+&x?nE|;>UH=`>K(seIFM(*ZH67#d{)x%dTpEehp+5sh;T{R^e&H6j zA!=*J;UJ1Sa#n<H68?keWsdjYpoP$Nke&H&ReYV1ORQI@;!6JX9H@}@7CfRAhOywR zcmZA1#5x3C&?Yc5a&N3<Mu843GZkw<m|CA&CTj)?Hnq$`e2B?tnYZs_E%SZnSnCi; zec~ya4$joFpX+Lw|9}$J|L19{K7EFTz4ydhVn5s%-s-}8H<$ykCYg&`qMv*Oa`sVy z!-H6pe2GX4Zws_c3p!?~glPiy`66hkBkjh{7uFq9s6fnTVF2`VDMRydJ5Bl4g|EqH zcf~JNF}ag!%ih2E3vTIri5fc|#Qg1z1l%si2k^yFgyCq9oKEpL47cY4kbJ$+Q&sV| z(@Dl56b-lcy{bKO1@ph2w-Ez5C?G5Km%HE^)s&;BAS<3|a}A#D9X!$s+J6F5Y&yUY zqx}aF7G@=(Jh<Mjcp9kJ8`RtnzQUfn{9qBD(dL)4|1X3%k}hiE-v+TZH~YcyphKJQ z!Hf=Ve(t@j&0P@G)aLi#lT1dN-=g=%{in{_<}YC?hBlw`Ecv07Eg(X3Z#)T6=yO2K z58^clqwjTKKtn^{SEEM%0vg))^<X;b?dVPY3>|DRD@;tp1ugx3Eh-U+o}^1q0_I(= zP48}~;(CfIefvzeUYD-RF#%=pUdPwpYIK!euCE_vN9ZYs(P-p&{SQDibWK~P@`d#9 zPk3Pc3~RyTCn=B<egCN>VH!@#`)+{Sz*%u(gK_W>n`A{lq<4%hC(R<V9e0Y0Y3bd? z`#Z>>rl(Gjc(AZ#c*e{TFM`lPK<z$E<9UbAg&<fv{tg*na_xwW1jU&UnZ{-9smqyS z*+_uzZGbd%6cpsQ(H3cUvzDy_wJ~t4K&VAO^{PGl6E#@$U|sHL2!Lr!mv-UEl&8C? zbpHt^^G|=0%-XkO;Egt6`maTdVczN=P!H4NB!D=y6550gN{d^>1Qz5kLC<^*44TA` z@GteDXNg@szED{0F3K-77PkQ%#dlas@tIlU6H)guw5kdpIIvgdBl98#RI~4sCeZhM z76735K_Gn!$rt+yA|v{TQdQ9gEo0iS2njeC%nk!W<<FiVdGUEX*q!7%25*e+O7S%C zn1s6U&fvxY-9XBrI}u7Q-Gd6L>GP2h-Rzt9XjzGVrM-PU<;9$V_5u*xN8<ZP1nDFq zP5V?@mWIBjDU2??3Uc5y3~0A#iwFwDE_sewd)=MP+ApCCi(iU)NFc}R0OXi?0}ex! z%$Su8;C(NVrr-2ucXQKrJw@j7VTQ5NgzV!$1JcWnUjmV^34#AX3<)daJae4%z!J0; ze9K&<!V`H0K~Y25{Wc6lm*TAxbdgV(s?bFWapud2)1!v4fbZbQ_@OR(ANMGnE^RX< z9;BKF#r?R@4@VZ%p?<~&FB=76s2GVumB?(&$5rv04%VT30=gI4r|md6=r03gNWR#C z=&ac5jQ$hf)u96_%NpTOojA@Z(?RpNO!#-TEIxz6MQv$_;}v^PVc+v8coi=_HSG$? zw-fyoU|)A>rn1KwxV4uf;hW6B{FBpc-(k81hV#LYzK1izg_vyMo(MG0RNQ9bJ^qu@ zx)x{J$I=6zg9iL=bmB!RuwL{u9wryzeIblJxOKP@2;;Xd&r|PXRKr_Uk<tUNVzs8G z{C?~b!J+J@W0-NucaHVbkxZc@+R#p<xq2YQUqi-~z7f@A21tVf&b-ouR84F~KtlWJ z2i9*LHOv5Jb)4C6w?9Gs7QFRU^*E4F`%~fM3&D#97^v)1hxd3NX@ws(!QFIhE@27b zs6CD|7dJv2N8|A*9H2Ok@5OwA1X$fZz0lTUW~;*~s7B`Kl1aRo-3xygq$vEYqvSL) z(+*@xuDzi|2**bI3K)VK{T&i%AgD$g!=3L(q@ruA{~eYex|@#crMydY7(CC%Qd^C_ z5%xj3-a;-_EJYgL(n@*;9Z4Pe53qpg1jJ!@#zbd}H+>QaaHy|Q^5OHjAWgYwG1K%+ zurZB${_m-elez=q`-_;0j~qSgxc3Hzrde9i<6TpoZ6HKlH~m41{sO_@&;s-qHTo0) zNb2j$mh9L{lD&d0w3TL6dN8d65g-h9ufY{NW`*9u`V!}h`-@wU54#!2rIjbJK#t^l z6uCmz(cFBk_;g2-KrgM1rZ5J+n~TS`^Ns#QFG%BDE2aN=u(NaG9M3^j>^ugY0T~FM zO_5{UzQOkaNH`2*)mUtJ(_h0=1URA;RlI>Ex%=VhIZfVydDE8z!zlF|EIahVuWa$> zgQYQzZu2mWMnDce-VD7MHPe#6V-|bay-b}i{c)zn4tuQINK*?ED00c~Fq)nIgY{&~ zc)3@PTLi=xQ49S4Tw-WSwmkbZUU5HCo2~*J>;5q`43(wvk9E6s$O*Guqc>y%*gDoz zpFH!+TpkLbtbDXv$2tBx6XVElWV@jzOwr(1Xrpo29`MM-DWIrK=-01e&bk3}K|%SR z{71w$ETZCj0vTLzP#F#!_E)y3;vZn7e8+k}>-EU$Mpo7dAKomnyWUbDRlh?gq=N@+ zh-4pScf5yIqZw{K$)$+1=~8c}$az&!H9ny|vP4hFVhQx|>B4+BK1qyRAiqi{r~h|P zrlWepB|4f2G_;vIRP0|M9?eBHbhc0hrV(oN6ecmNM3>m;bLV5tif)#H$O-Ir!;=^# z0-1k6)4g>~fAE{xL0~Fz^&{Oh`#jRoz$=fio}$(L1$BRqykV#kHpSW*9=MnG)iv0j zyzyjKz=J6D7JLV<xE>lw+amc=;W^O1Zz4wP?ep^s?Neq<aj^e=kzTbx%9VN{SD+B~ z|2V>D>G9R|8aFf*eKn=w`?qw#C*ljCt9-YisX+{NSC!89xQnVm76qU)b_Rkip#}_> za30@RF;hSPkFcpHUO};#YtZ&k!^>67)a#F&Y3k$ax|#YDAb}=U{7N>4N#@YsXs#(P zJCY=XUPT+w>Gf3YgUi4VK0BLz)#^9I639m-(U%Mq_J8Oag-;ofQ>n(JPK|vC+~`$% z*j~8V9P4cv7@M(McPGX$@_%|2X8s-?Y4kzn4g^HBd%tG&_;w+yNBgg5)}!p<ZY}yL zNKlWa_O3w&<4efi6(2g$Yf*p4(ab1#kMGe3-=_`}`T>>)Ssq@<)VURv=bj_+XM{Vn zV=d@Hf#}(flNiyjEn(8kKZ`WqujnStBwd<RNQ0g`kLGQG^veKZJN`zvQcQDco+4#6 zJCq%v5aJ!GI0D4v2tS7V#s6CfPu>o=!b^~u#kSsIVZX$m+o_@{-&Hb+&od-OZx}}s zXF_6#I&U%Cfa{u0V_yT^;IAa+Qj|?2Gy6386NgzBz{2w)+(F7p6s({6dhsE!f<!($ zdK=vRO-PwILq7<7-^hv4`e%ux718M66CIL20ACUme+C=s@u5h_JF#5y<^6~rwc-IJ zPOQTJ^#w^2mq@<7EDDzr0iORa&K6-P-L5nWIA<h&dk8uC2_x@*TkU%>2f(_YC#uQE z?%){2msypfFCnL(9PUyE`@i``BK(8*>rL&(6ygJ4jGm#DSUsrX-|<8$m;iD0VdxPY zBMx1PM?Mero`{wnsE0AVk9mL)S^?)Zv7h9(v+c;cGOwSRIpZGc>T!@I)Q<(66YYnw zSO|=~<<}(om>nO#>dT83+spG86tM={K)zO1GKKmp?X0^TIK&Km@4-v(e_IrP!Bdm? zBmRYBNJF>;4LBP~XuwEt-AFNA?Z*en7GjUIBmDY5JiOJV;OM)E9Te<J*i-vnze$mj z&`-waCOrL{eC!F*ZDQ_VGF3_yr$88eX@~#+&ps^Q)x_msf!8%KryrSx+f3{PiQ0{J zHmC16%$I9*q*@9>3ZX-|Rrc$n*u<UsDE2w#8pZ%N9!$FCuY3&it%I8iIq(nj+xo0F z^ehIyiPua1m2dz-aXK=>0EN&_Os{Z$(N~OMU+8Y6VV-|L?{`Dd;GyeTG&AMC1*~_~ zLq_HgSPTyHU&JW1pT3|43qmDOZJ&iKDA!uamQRhiP;3o>flV~CqIJ?pP@qx99JCBb z|3urEf^-9s4zfOwrE^yfK5GyDp_$a<z3EF1Vhw}2<-#(0op%#+%HpmAlp(PK7}o80 zJyyIGx3ZL}g;s%rjb0aI(CBqS#>XW6(a=Z83r7>Sw?N9%WvrGv4t06GLx@9ZHq;QJ zZ}?w~oe6vt#q#)flMDnTPEewF06~KiAz*w&iLjc*jqGZIAcCNHAP_;hgbjysB<=<> z4l8&c?>+DPJ#U480trXL;Ss<C!~;QKhHxng;mrSAJ-a#Z_dcJ0KA-H&^if@1UEN(> zU0v;<KADnEUzr~;nqc2wA>#?usNwE8%3m(*o4Iz0j0B8U-ATX&D4m^j9VJ~#NQycK zWxjn4@)=XlBm$UvZrm$aC4C-Lg!`+eDdEI!DA}4I<#!a=YTvG!L{M+-o{j(@-dndJ zDz#N<rBF|>Kz_3gF!QlW^ViQxrnZetGVE@HHdWfgKuW#oM($Ub&70If#5HO#&MBgR z)VZ1a>QYvt)Uf|c9v`+-5-2dfg;yK0T<v7}2eDOJdOhGv1aMtSSOC062F^;8!uZKy z=io>RbKS2RCL7ch`$gAZo%)l<8nIEePQ`tSKHu*7d+Q7+Z8WH{|4S06^B-FcY-;@l zeP;-}u>V1%*RW0-8+W6Buv#_+bH4*-qyxqp)=p$5)v0=0U{sdcZ%|%d%g(t7h&d#! z(hB(P)=g<gx=Y@&o358TDkhDp)NbZm2E`649N|ehp{$pGRA|@K;G|Jp3$Ubzv;g-3 zsZb0!hEGnt=yu0e<A^PA``s~N{HTjk+0yq^S{)_rZo=zQI#P@1epaRS40!j`eVgt5 z^n|GOm_6o4)m0L$pL@GpZ(+fA6=I$0J3kQ+8Tg0lI~NgX_ht7TQD7frV`kZ}sF!r< zI7P(%6xW!7*k-(rzRX%Pr%5+S7i=S*i@-5<V#C@hjhUs7Q4Q{|X*%BAEkGt$H;gyW zIHgZikEEeInv6HLN!=KV%Pcj&1V+~n4t;rLSlVVkBW)GQdSSFG@cTUtUH=f;5vv)6 zF|Lg<RV}X~7p&rSq{;h$`u8o*-%1)5png(NLGNy76tnkBVcc8kptI!OdUVQoRp^|M z@s=K$OtML$vWcX`y%RN;5M5S|^-V9j;bDI^&K6|TAd<5EZICiOBP}%MbGpNT)`uh^ z<avsX>9t;vph(Kgk4Qa|q&V3Nie%l>i8n{J6((-*%{Qaf8r0vuj8z*b%-*dCm)wBq znK4Xnz(qa)M%}9j_k!KDr52(uvDSXo&{F&8p72SfdL%94(X^$0b>#SS9B?<C2JT(~ z_h2J%FF4?)I^g^~XqUC>;n}#WyK}yZ5}L*49>tFR5&3-KCOr5$iD{x2b~;VuOf;ia zD`>^UA(os~P~T3;ysCDpr1l~QJ@GwMD4RNb(s)d%uBNLGB2T6ED8JJ0`U>>2RJqy; zx3w{yYPJ(PoJ+Yzq>fvX<Mih)Ds<F1xlyTLg43TnsIW<L^HOS1{HY)Qt)sxzRrt73 zle<qGHA!wXYNi6lOrDGj_sQJ}IJr|w9u)9(?;G%mLiSGr>QdT^k|t^yNZ<eFJM_g5 zW2OMR+z$z2>@q=uB1v0jDt5Vel#n-NWGR}THOL57e<w$FqZ}TUBjrse$L}Lax<a;Y zxwE#A+X4zwp-na@sG%ElG8BH}oa#=k(j?A1S>0%IzKR+>W~}I(3u1#{D-|mDqA=v; zF1gqt+Ns}YBBf^jafeKz*P!cABYLj!h5bHD1xJszjls%Wd{kCk?9Yi9A&OV*Pq=V7 zlJu*ppXYgCH667w4xq&FE|uxhYV~lFNn{*}X^#Ra^;=ukBCNQNvFiAoEOfCe=PH)0 zgkf^itL<qZU~QQ#OjD(G+T|!=_3&rR^!9_I;wp=+nW0l_V0)tiua+PMl{H!`r<^4r zhIVL&M4Y}>-l;-kYh|_ccIfl@cEveg5?_~cE=by^kS>8-IR5_e6Q+)*+~<f}N*f6D zh=SwHLo}a}@sb1>+DsKbUe@gt9c!EkDpW1nDS8R&gJ`Q<@05Bg@%Z)USC;UV+AX|+ z#)8A3F;%S{T#e3`7Vmu)0F6whqyE6kW#47H2!Gg`k0yzFnHYPSCNIQ{bOOR@Me@R* z9u_q*EME32G{DgFOtalk5EGM^MXcS;c2^0S5p4mFD(xD6rOB(bVZS*IMZF8RcUS3u z6Y@Bw?vgPs3g+2pa9b(QA92c-be#o~yr9mL7w7u#%&mlA+eQe3I&v{sFNGxP^K$u| z7Tvk<rA<`hzJ!gIx1P~;7CSmhzR%@ALnP(rZBhZxaw>R3Bw?RGRyNvs_}7kvSJW!d z+6TXOcUe!c^&vyoDYVQC;D7$2a+Z+OvD*H4rW)Ex_7iV4i%4Q+gnS>89|p1a&;aU4 zfOS5nzA?N%v)&kX{vaobSCWt$eSz8!Yn<c-CrK(vG7nqd|1JI=R*r~}?@=EmLS_NS z^gP2S?RE#QjB3tx>|4b5k}umclNf!@`%*ts`+yHK>1xSqoHA2vr)qIKE_dBv_Be>j zH}^}+cfZ2ATt<LYmh-{HK2-@HNGq9HJtSx5VcbfbZ;L1=dP|%MQBKx*s+>0oq@4b$ zoQ;6TV-P;qopPS1PLxyYl=I_#4dt|za?Ye2r8#x*_lFYFa2|D{?pn&3b0v$dT;qV) zJ7X8TjX9M`8M{ESSLe%TW?d+Ow13-yBGTV2-p+DF=`_UALvfngZ<Q+BvD=0QFL2t# z^UALX`}+K^SWSkG_t(R#c~M@WP0xv6)M1E|Gh{H#dXF#DWAVGhl}Z{z+snK4;zPt1 z!^N%~(RZUh&6r2H&&Z1K(8E)i4d|5jQVd_`)3&De;?HUU5k4T>|7Is2artcLhJU9e zeMavz`vqu?{b?jC{jR9cAWllnP7kAFv!1F1VkGHI#!dLS`7eK$=0jk-*ewmA);hoa z%(xWs{PdHO=22@{KTMY@dA16{<Q%J&{h$h1A^{vZFg#_7mfG7qtpAdl!vD>?Li2ji z%tr!C%!j0@`H`6%9jLQT2?*KzLe+T*EDH9c?{vHRR3>z0q&s3QjKyms0mS~3=m3lg z{I4ui0|03KlY#=MN=xF13yA9!Iht_?8D*&?XJ$b95<$rjlmME^lS|<GQ8j3<hx3G@ z2K$r;toMkLY~njkzIRQNEW52KDNMY{6u|j`)siHL>&jJbTMP$de8*Viwr3LX8Fmr4 zSrG*76294XT==tSAy7)nq~|yBIFzkDP8cd?3E&LeRyAA<1}8OKIN7aP3Ln^Wm>#}b zfl8V{w%91gzOG(!5#d01$brx%2Epp%)a9viePOvku#ci<$J#WCSq)!gJ28ybi+Hl& zJGBO+XAD4*V~t#;)*%~*3Bx2EMnY$CPQovKY&x4q5zU3(jr0s}kcz}Ff)jgj_H3uD z1x{IOsX?r)ov1#n+LfxT0?JZ_B)tin);umlNoNY5K14C?%}q*X?ejKyo#OjN67cD2 zl~dzJNOW|NI3FbB8l$8QgB6^XP2eaa-Ma*fhnwc!u~k*!#~&p3XEN;CWh{I2MKoS7 z?b{!v@op1#WF1W!`x@c2NY;OESM=QZQ$roy^>|umQd2OgLXLwxMHE4W8w*F)2{^8i z0qz|R7K1542r1_beP-`8ww(J?g8b2^M#}Ng(P|8J248NNCq^;%lf1Ae{Vo8+_A4Bg zh|J%XGCx!H>Y60sV_$Zsc_f&EbE|E+<}D?{tA)GJ^(`b6e5X2;tNtOn0>CXrSF|~K zX2J@EyvYB8x9XE>_;{V9)bNEZg7<e~I^B=$XI0Wgz?}NDDEw2cIfc-}aq1WTcMRo6 z6v|1b$P0r9XMrv%sE-FBG*j8O^(g;Df+=?^lyN^P=7xgu846`jnjm1<YM21sndmsA z{KhChHnj=6{INx$T(eoB3`u4Jf9gxhua5Ookcos*ZzyOFW6&rmgCnR`j{d@GGpji% zg<D7Ck02@JIRpso3;$r;W^gNPfv;!WtH~Gowux%3|4-^D!Qsbw`RrzX<lxS~lm}AI zC0?k`CF&&s8Hb8jiQLxc_zrBAI~4L8M^rarFZl(OS=NW;in$)STQS$gROfW&dU1-> zxPFXxIW<1|y%M%FkBL1C+PkApn<O&cCW5p=Q*Mm^YyfB|C$L^)-wl!8N*uC!NfXK) zWUIJdlp$R16bg4Gc_g2a_sO&(GWjEUYuMS6olI=k&+=!lDf}I_nz)3lhLeP2hf743 zlhL+pvT!+kEgqr61pq}Cmbp(n8Azq^MPTKVgthueea=RzV_5lSk5w|Zw`=Vd;b{w3 zq&$L_Bj3DURwCy*BuU=f-Ni_l+_=L9fR<;pNwY%KqY-U>`(AOwPv3Qf>)NDw>o%(O zPsvuV?%QHR$2z?9SL}|ndchfL3PXm_!#AP&iwvZX-?AW~it14JP<etsdqv^zc5mXM znVL0ZO2u{J|HxELrh};N{AC4W#*djiddzsVeisW&L-PrKW%qK)aREv#IN~1?z@1Yn zoF&8L>ErH^t1d5~285@n@Ude?q>ddk{{AX0mG9_Pm#ulNOSv5#jr}Sc`HU7ic{0mo zym+!a^RS`K=G*FXy#6@EMIhx7%Y1bhiGy@9>%l56`$}grdIO&U4sRM9N6Dx|?_iy^ zjG9EU%)zmd5eFH#uQ<L`f|K&@P+U9iJH@s6#?i)&WbLB4V+QXxkc4_&_pKTdqZ9XE z52%Sd+_zSsc`jkVvb<!HNxUO*!d4%$gJj=G4JoeVW>ws&Z=23$bftlU>lCs!nn}JV z8BnXgk&Z&{x&2k{^1tU!k=#9-=6=q}{kY04i=$PH;;3PVsTHujlrKM;!XoGwFcQ*i z9U2P0V<t*tbb5z;Y-#8v?dhOq#xs1%c%RId9HtC6=LMV&shQf-mBR9yDq5-3EVNkG z%aa<2s5v;D+N8SvD!P1h{bQNW0Zv3R?bmN)j=S&=*3unhaufMwFvzMt@QZz;;LX^b z=ss_2XvdP!$^mvy6^q2Ggc@z$Eu!bpLQ`erPWl0GjF_Oh<~BvX;%`tgU`yP%r4bo7 z?gm$BPXtlrOKB+Sp#II^%8r>x=!x7=6U5bk)>%MDl14s_<iPGFu=9o}*qz9u;8MUE zH3_KAxG4hrIbg?_>EtE_`|!qk*b`&0znG$6CpN&Yc3`h1&;J4Ye1Yw01p8$N_VW&G zH9y#UWpI^QfQs7aD>&+ku2T=ADq)GGQ$=RH^TZ!8mw#z*ZW3W4sV(K|VR(*@lq}Gq z<_|n2RX)murWHG>KDt%ayo;0?-5F9?_K#NIdKrF-)mw9LJGDX8d&q6}>$I>i-Jj!V z?oXtX)T`g1{dc6R(h|rtqMK4Ct=>o}Wv6T47CE6Y4IIi*8G7DUp^i!_D7PAxN`Rp~ z=cJxIVNwuH903bdfT-j|1xLVK6(G8}$=yc<37ADdUCIYLAq$R7rN^)o!9rQ^l_iMN zi>&TcqEUjv9rkwiORWzGhF$|UDyqggt$BPy(;>imZ~_!4q7N!Pz(DZbJU}vdTEoE6 z3AbGaC|Eg*DJGJ1bhsk?M*uo~!tDmE#V^auucV^+Bmq!qwaApnDmpKGkA%9;Uii~s zm|0%r89>PN+qth9(;vok8rX4HB<Bk~k8QZzH4sOL<yQCc%qT0M6CwDsI#w4<ygll- zz`AZMqeV}|<cHC=STjjU)d!OhjCbFoFm@@7n;rn0LBd8O-%r&F<L|x}jLSs6Q(kZy z?6pO|1Xu0^upG;WT6-Yxpn+=n<1gO(7Fn98oJ5uZ^#st9mDYt!-)7RIz(>Y=Us}ef zVO0}eCE;gd-IWk|Sh)h(*s(h13S>pao|r3;75>P;IPQwmeLt{WAKHp1kQ!g)ejGFX z=;dw$o%QqlF`yk7angE>BGt&oV)IhfnFcaqWL>Qat+H+=I^>xTChow9RZC`pXMu5x zM$dZ-TyoQQ=0$=U7ZvP_^M+0)=yM+?l#bZtPPglNGwm&g=->@pn`e;D^V(x9U^*-N ztd(v?9^)vcSpKRNhz)g)NQ$h|n#Sf#%H%d&sKJ_5QOw$VpITn7fh}H^#$qj7?2sxf zf}1s#c-5@`K`mmvAytZGU3HUU(1~PF3@X;TuP#)~Il~csQofGPt4&>!JgV}0j(iFE z>(BLOSzpo1@I=S@cMLa4NUO(O!q@xEK*c8{EM6rI+(<TEu1o?hxj#ngU^y)$WZqQG zIcbT+ISbA!c(K+{m*V56XrwavsVtFS%wKQXW>01~QvDC!GQO7DWjzi6heky}hj+rO z9AP8HnfWFWZ<PR23<eDCAAGX7W6~<Q7OGqSpel-RlhB-4;{?G-)~S3&xT{DT6<1bU z_kF4e7k`&pjRp*S19`st^0Yx>5cwN*lZC{S?ENpKo7n3V@?q*CwLM^!k9P3wFL?Zi z4~54b(MjwSd?Q&?z=KAMiA>h6PsEAuug+@tC>&-_C9kq~2VQ?b*zqcWy-}VB?XmI7 zZ)~sUrI(y?OFj@fk*}xZdzBCC4c;8Rg_&~xm+W0^oYm4lVg=p}KcNcv-3GUk@>y3f zM!iZvl{TCJ`Eys}9}K&YFQA*L-Abr9%rLYs3BavD4v?m`YJ9&Oe*TD(KcaomV?@&1 zPUaf`%!Ms}W8JK)>6V<G;Cfv7(E|tldSHz|K4~f`Gt1NeFtQ4HGg5v*OF?1DlG8}q z!q-ZF`kE?jC2#Ua+@I?^Hn|V2<S-s@jKhx05IsDXRA$PhKnoZrjY9<sIK*XU>3q+= zhL=<8MPJvG&n2!@IP~zn(sDAy{z**mo@o<Fw1roHvDThcl1Th05|aG`Mv;2oO}GNb z&quy{r{#voX3A&8<+(fkmxnKXyDxo*k@6Prg>!D_-UN(iy?1!;Y;-@IH~nYAV;ySc z0`#Ve&z4*u^^0WXIn18B4o*vX6HQ8EFszSEZ4Y?K$l68vr>X5ACFIo~b@8q4-Ay#L zOTd8kokaT{TE~%$K3%yvjk%&3;dq)gs<}cZ-YxBEb$P6=?uvLZvn{<2YusAvY6AS( zHHAA(?U!}J2JNbOge)eiujM<!MLLG|Ij`8|Vx!MhERE_1{hlMr^lakSA@XC~G$M{t z9wQ_;aM}!zp2906{)~r1Vr?w1)^cHFQ_B&Q<rGPHI=pWt4UyDly8w?e=?x`oBLi5X zUnw1f2CP$oHj)|gs^zZI(gduK)6iD0?darLsS>TE6Yp8m(Q)VyBl#A@)w+~k=v%C> z=5SvyYg_iM04($|wFea~^^%VW9yCx@$+36N`e3b8bPvDQyQ7>szRSm~hp5Aoyimg} zJfbyxMAFGQ17h!7>(tQHW)K?8LmtOpg}i#HL9}s-D9~k@7$`PrpXUjPw$HWXh_*n? z9)}^(X_BbC&wYn*O~ZWdkM|597moO9#RqECkBdKYVRH`AV@2anr_22;Qdg-#@puP1 zU(o7rdg6FucNkA=(#W5zk-G2a*P)1^{lUBS`beRJ{^;xEP2cQ~Z#R!nLwlNEFf-bf z@Dla2m+}Db&|;E2(yQY&`6iEhlc5zzn9=T59^B<5H9)wT&KHY;J$>9TVN$$L9-a%= zG#$C2;{#hk<VhN&k-qA$Dm8%buT*l5w6H*ByfU<7Rj`$)bX7UA{j`8{N7700*owp0 zQ#83B+3ZsiHxhT)S3=f#b{-@_-X+e|wo-(2&nJMW)^CowtJ6)8Ph^O0&Vg6iPUy*O z>s&{Ol1nc+Cd#1DDt~Nnkh`mp2enLar#mDTa#Kkl3jIr<gHAVqTE++w?M1|3xjo~a zsJeUxQmLt(7ft_f(yRK)iKZfYN{nCR9^;fcD2vAY1EIR^OWDQ~Wmv%YPA?HBMW%M! z4{FRQeH6+CBABC~$cbp%SpNkK?n*o4XI)FUbF7f{TOg7PMNq{o;0_A%;=nU6ePbZ| zTYb*$01VY8O#LG;BB3bHT^>Eh&jlH(3N&e8wTylL*@C{}J7(Ib{=L_QX;b=gs;4ip zq8AU}0HD0|Ly{4fP<fQb&H#h-VL&ufAVvd1nj(?<%CfR;9xF3a9;%FQX=;xUt90=s z$;HraB?H_fDKtQG3U%gp>>&xuH@**~AINtf2xN1cNcEJYD(yOgg^zG<FZ)Scma@g4 zz9o?T^`r@b^soIa^DfLR=RUB7h?u2q7$}|V%MRp4TAkr{e`&UxwF*W-WBUW+Hn++) z)FLna52=*Y;~LV`rM$FR>d{aGhCb+GYUPAe8((@Yjz<mcLq7GeNz@IIR=xZN2Mux< zqtVK7$DAsDed)lu!hLz}llCYj!odIH1GGw;LRQEL`>l540NAaKBEY%jkB};DFrV^g zXT<XPvoS5i{va9=yca-}vO13J98O-CdkP&?6e_MV7cu^~<`c(D%<sI|I~eQn`GIM2 zIwe<WhrZ`ZUjEcL%@|(klvt&m6MeJgW=rTP_*Rk_vMGEGt&Fdl*Bw5|%RZ#fIhT}X zO1qU17@fwWLSTnc*aZ3kvhH3XWDStb4l*DMo#;%zt`@1`7u68?>D>PZ$5>tOmd<sI z=Ad(RxJx=$RpXXO0l4Y;2!NtB9!tTri2YBVQNA@j25|F?^#ZpucnDmWkW*{c*T8dl z7T_!HlyQBfY*WIhk_K+=te1RDJ<-|SL=j5EpFk7X>nT9>=c1X|(;9YgT&8p{?vP&P z&`qCn7BvGG4jt6hTvpG|y;}x{^*%q?tW-_;(%#}+H+`Mzo6DtjA#m@c!tc2?SEhQp zO3;g&UskO%-7V1<;={LQjhR(SIcUQTfv`lHLT<%|pGYtKR`a^`%0aQXU1gtz(ulL3 zq*pCwtgJC0c93tmM=$*^YpqmVh7lq0=XVGdRu`6I&sd>G(r^F(b}vDVc0$qg+zQ!q zWCW;!2ppzMDJOsfUYtgs^9eyXqW5yG?ZVdl4;6lFQO(<c_=@d`EjD>0H**SZYxX96 zZYgQ~kr`<{)X6)!Qh{a}o7TA!V*~GUs0UW4zw*R6cfRoj*C-m_+ViMtfhUk(coi^x zY0de)C9N61d1(pUjFF6A{<eO%6nIOTMv3lqeEB_tulM$Gx_TrxA>ihEs@inR>t4-L z6Re+rG76lV(>TM@;#D6aAR(;<{_}rOfpGxy3jTvmaP3D8L+M;ZMUDd2w$f!)B-I|K z@bRTJ%Z~(cTCXn*rX`S`i;Qkb>j7q9w*%}}s<Jfc=m%w-aj&$##rzKDE1baoM-L2q z64F9-91yw*xDFqarJoRWaJ=yqk24La;^4T7U5P^A-&?G}LqUSRXhq?f1>DHo0+g>$ zP`CdX$I@4zB6oiua908oiuRcLk*^dz=pQsG3+&s<nVOg1eyd{)rsizNRx^@ytweFP zBgX3-i@~afzT0KFEDp4;5>+;7!lbU~mL^weIed>Dd54&6ou{Hk44*VoY@RArQpwUn zh4;VlR`1QZsiO#RseozRfu340Mgop37xhyn>KJ<v$QAWYi^~&#>&nho><j6WFo<4~ zuXs9#gz|@TD5Wf=zcTa9NJ~%`=&`b&|2j2fdI>iN8miPD9j2V2FPzpPv|G<9WtR_r zA9)+hZNZ7wAH3ne5`BxY#&J(wEw?oO#qGlZ9B|8hn0wnYe)fy>XvPrIiUSq2zt6m@ zKf1<GmpY?^y62Y50&;@wMffQ3s3cDujMEuB7z=yyt@^1y^0Bb8Kk}K(b5`yQX666L zE836UsX?l2I+^HaY!16jvxrFPb)`H5+54TF*7DfsuNf%olF$OenPqx~1g@bzXJnWm zN$wAYEHH3asZau(gi@TL66ldnc+by16^Qh8Pq~<V1GuX%Cm@2$7>iydq9Lm!nfjAV z$HqzOSeU_Xc`Jd*m?;-1w{0RnL7U>w*}k=6;|Ds>AyB$rV7hUrBQS;k0EB>|vaXts zWAneaXjWZI{4|rDYfxLtc9Pt*X@4Gt2NI}N1L^y$xW-Wb8ls>UzDH!9and?TDODk% zsDM`kCX2lzdC0KFFLh5$YoojDlYm^nJ<-bO-8v2gQP{2|r_T%(k&P|T;Qv2G_mG3$ z+=^YzGt9~T<-{pgNv;Mg?9LP@Mchph@NO$Q?f~<;{*-cqqlh^d9N6IOy<B7itA+ZK zds;o$f5wJUYqHgoF~O;@UNQxsq)3w#%}J42u1FYbBxVpp(ZS9qp;OEUx2i=$$#6y+ zr>Ga4kg$wDEH=Jh($VEmWhW6puOz^Fn<Arb{d4L``r3_+NqT}ZWY%a{|5Qm;=&?xu zMe^3*-#%cR7--IwCgOew>9iebssMK)3hPql&6LSxt<-x6{qfX|(B6Vc2Qcv-Ud@74 z$>mF3X(9>3My(h0en1b48CmZE__`vD!+*wfK2wdAQ+N3FS65HosV}rpJ!Viw(*DJi z5%Ju611{)9yRHheN&!z%8;G<%fdJN<D!|nTV};8PuW|=(up&-KQSY}NfWmT`^Hs7J z9Z&Ugg=mcJ3eWO}cDjSDBuu)c{KYy;j2=bD1%Nn5m)@!H-7-zYL<_~OLR0M!*UJ;M zPBwTst@GkwT4XIWZ=kn#*><2TeSjbP0-2?jy&~UgtN9GRp~uTqsUBX`f3es2g0T-z zxqFk%W-w%qS{8eL_T%oY8P^7I9f0MAjwsbIKaz7(u3%zOFZX%np>3?ynp{LsM5L># znKb-zJ(Xd`SS{jLqIEauItt_9G!eVlO3wOXx~yn(L?r*(x)u*kgq3BB0LQ^Eg1IZ& z>a2p39s?OPc=^WfDBqR{<QQ+9ON|tg2L#Wd(2o?Nw4HJb1iF!G*VmWUP6v+NnLy#x zfyQymKZOAj_va%xq#GO`I(|m5<?{Y6df-$+*lf1|4G_z(4t-(uNYeQMd3erV+;kyq zJuZnOp5u#PDRjRb6J)f{+FK^NUq{E$*#YNuz<qQ*I_>uXpXq%6SH555{&_C$85F3n z&Ku~j*ptGXK0CBsXHv?I_*;4-AAF`(t;|e&+{PBKu{C$hhH>zD#i=;|h&@e~%88-@ zsKs@;H?*U}^^qsfX(K~LB+I5CoXIAKwsi>o+9B7yRbSL&d}JDzvQ$`FXxp_u_jkB6 znRO0D#}_7JkNhyS(4SgSbj%(4x$ge*-g2kMn2pICob$Oi`=3SNinO_kkfH$qM*51^ zrYwXA#Z20n!6|q6J<xi>>_KHb5b?10VGP`RGw(23b2BHEA#b!Y;)>?D&dISvrPuqZ z3%n9pyZ2UB9EE;o(sA?&z>sva{kk75bwV0Gsh#<@QFzU=hW??-$q?LY7FY*BLZxnq zmy0(dDFtOpWy5_C$JLNYzesID+qR5IkC9uv1*G&OHH@cH>S578SQ#*$EQL#G8Z+Y` zkVB+{oA?TOX7I((g<3@zWc`)V4#333<SDu|>#7$R=_5(2QMouO>jG&q?7tSC#&hi{ zCbk9nFp;Er=u@=?Su@(9gZ1h_!6Z1F0j+u=crra*tS`zsA@BH5;K79uEM|;tR?aw1 z({RqVj2gg~ix)`}&k{*#Y(^6D%a(9xYn^o~@>AwM<kuYi->YRc-nM=pgH>?J^O8Tb zDpkh1*f?iumjSMm>!27tyaYd$pz&w>y)Eb>RP+paM)Bqjc9;I2)r2IiMd_0EZ$*;1 zLljA(;)Rd#a-aPWfExO@+0L!-Mk``7NYlPWpyOJ~Yn{5q#X8EqL4Ep|{%O!a<7DPm z+Bs2d0G^bFI@OG;SM<5htB#y9^*V;agE&Kc7#6SF24RXnMb)<7x_YEo(Be?N#G-44 zJcB-=9vGAjMm;5e`g|G>LTXz+5xr6dP5+4WVf@;W0;i_9J?X|9)|jL-lg<*gR#pPP z=rj@$Bf=puhh@KEA~wOw75{20gF4Vl*x%tIO$uq)U9MzZOu%QrBC$4>LS<w5x(VZ_ zjG9!XE#UiJXU}=4iV9-eQaFCh2xs@j&~8+r6Go0gMjty$&5D5Ws8BiPiX&dxb8aI6 zoR3i9sbeRMzc(Wz2>YG*h@Nj~?Ns=r!to>IBm@DHzAoi@sd2<}E-dBvFNA)NNL8ra zx_&%O&&8D_>E-#8MLagKpGshr){;Q^gR2soT-`#3V;>6@#elYy#72!=opKmKM$I(Z zkHq4{g*KEMV5+R%xTBDc*_*LY8J5=k2N-V%4EA4m_>3L?E}nl&Ko{*AdAO_m?gQ38 z_P{?gU?N;*ocnQir1~Pk2y2{<@PTt(AA2rX7F_=qlb5w=m+E)_MBV2iLHcT=JkPKz z6XIm$Imi{>82pFKKSjrq@Go50CN}?z;s_lQ!9lM5sc@H~d0*JyofjF6XV=0FxSY`{ z#d={U(<>Oi{s{<j7a8lihd=7>s>v!kb~av#X#7&;=R)@G(tjvEb`lNZloW;vbqM9w z4@Dod7!uR5!HU&7C5#c@vEjA=E;@EW;lfJSos~K6+d(L<rVI<UyzGp7MTuZ~hVaNY z4otm~_dMQxkwP~FNM_$re)9A_2b~5vk|z@D5oO9`-6Kt@3}M=mM-N|43*hejY=LQ1 z!3Zz!R812WT^UvTW2KN)m>IwFuYb_dv0~QeJ^+HDlZiR{Gpp&aX4X2=!BZ<~DilX* zOVnzwcq!%H54*drs|<I`;S@9?Ri94c*5m}l>D^2(c~bRjk4Zl3lKqOBSCO8>HeKIJ z4vzKd%Q{UUE;o!(_%PCPq3~Uj_IY5lU<#Pc^Yvwa$^xa&Vc$fzJ9vRN;@C@gW>dt} zR@P{Rh3sa3kXt&cE>~YRO28Ga@>b@m@~S?FmY0h3%b2Q61KaXa<T?J)<*sfxeB*<* zJ-}Ck=aQmnb*{pL_5oBT3o^IbyLr}+XEbG8(J@v~q7R3Q^spL@(>FV94?9FWL*AF> zUjp6Clv>_l0$HmbqAYc}%d^+2*(OsZdsWD5Y_`7@Oqzgct>PyWFLT==uvnZ!p$f!b z@2kmZ|9cp|ZLLe`M<V-L!MD=Y5>AT~Hn-W?s4JQt&$0Vqyj8lAL~BH>C~xCR``6jI z(%sCImjLFpUg5b#4|a7;y9~zr&xf?d_`Qg^e*w35vtUi{GlIK`cw8bzNyLvtkS{IL ze>bwrlpVc07gpAY*QRE{mI6mNPEe^vDH405YY^oCM4BvM+6x%boHmTF%CIChSe_}> zWOS9Ga{TZDBde1H7}}}#B-|M+Q^zjBb%cZ-RH4pLIjN9A^lJ$)v~4Qf87l9^<Np!D zz9CH6vw4?G7pO})1Erf9)V)h3z>ZUBCgnM8RYLM6=YbI=wp37q6G*>}HrDTuqVWIq zt`ZWU)_>oVF0I`mk1n1!)I;kl4;l94ZmFy3mNvF9LX<l{VBnVG#g4*@;$8;sm*p9q zi+V}AdP}EDtxGurca?TN#YShHt?vqHViQt~kYB3M*jyBwb(X8p*jxm`UXTF%!mIFx z*~l~JziQTbQH955qu3Pqm<nw)7nKqK|AU%s9tB_1v+!LtmFss(x6F8HIn@_2AVMq( zUxbxWwN70-`5}f^J|anvq3nSsErI4Olj&BOheg*U$WKElz?yMG6Z-%3Uq%1#{zDJk zq!6^%9TCYUBmRBR*@4L1`wTrilBX@FR?xrql^p_6@i%W#y;8p8^@X}pdrDy6IHhNF zSL+LJb;tCdjrNE2g*P?V7hXkdf@Jkq{Ms{MtRb`++S618rsCJj^V}7F_gDT%t8@I3 zHq1Y#Lq+6?-LH7dpn&lWYsKULmrU#rovK5f+o{r*25pR;dRWvugr3sF7s;C#bT46! zAab`=e!UQN&;PHJi~1Xi7LOe(K!1p5DOzB(tn3p<J3PqF#(Zf6fsR(kx`L)Mwd!TE zcI!0iosNjon`0L2j6Tm*>}l_=W{HEng=0u$Xs?o(^-LroClL93RRT&P#QY_|@sH5v zN*q?EBI-Kk<W9P<N~f1RC6$T^y$$P$GNeQ7p8CYu6B*3Zc_Mc<+J+bnK4*-xk1*p! z<q7Of{wF<_bpzJ_y0&R~=9Lan3XCf%`@~b`gKql;09!2}bN&3F_Mwl~B*)~9+;BM} z24Xi#HWbY4=vN>Hc#Z1mJ5l`?ywy=u|G_Px?XyXV<kF@!$qP3eiplj2@-zI<8S4*2 zt~2RITN|4&39-iZg}cq3k?ZJYJ=nAKX>5QXo7Y?fN<MUKGQA?4V0_8e2uS4h8k?4= zhZ%TX0e#sxq@_g(69UHG9DUizf=(`X0lCi#wvlqI<^UJp?LgL-^?u8*FKbWoR(A!A zpY>%c3yOc0<gL<z?d8JHwy46}Sl<ZGNfrXo*0s@>B|Mv5g>zqN9aP3=iG!}a!Hbxz z_j)5GMW7Lz&YyF#`pm9xk!D{(s5ko-`ohX!s#jlD87Y;t#YffLe}*;INo*!Ot1m3~ za-Qm6<#0!5K8|d@J+#IhwN#NkXJ@@iBwOzd!BKv|Ub5X=Z*q#MHVtlMKkXN**hdv2 z+6**rRoW`zK%E_*@$Wc0KHLkk#M#<oq<r@+xR&$mZ>aI{Dw>n8a_1}4`RXGN{CvG7 zBa^n*0=S|5`!kjAn!W1l8Rsj<`FhOxTCq>Xnev599vdG-pI$BcbjGx=83hInM10#N zC9<QRhn)(@neD#iSCr~rlcOfG?bFuud`OryR4U4%t|)PdZ-Z)HQjj2-&(6JurL~%Q zt*I@1v)*~`e|Xg&ox#>H)7aB|L|yZm628#IF7dOWm5JO~?r*VLvd^fHtK8doJ01vB z>`uswr)ZJGX~@2^-*T=|k-id}Bmbs-p<{?;FTly6W9{`hZA9!m)<F;NP$47q@C07u zdUb3LXAU#A)T9d>kZ9e2L^B5o#*|Il<Sxh-t9{wO&b$$yZg13AU=Ode*C++q{H@|N zs!mj6h3iY!8te7amK0)G*In#;9i7d#gg|^>cD}3Ze41SGjj_IFo3UPYF2x`^)z|Tu z+!vo0!JCTgm&pcKLYmZxo2tE`+79}h5EbE#3cLry$~IijJYy$UGb?yfA#e7Nvu>wC zUD;=#K3))v67@=6#ouwXKI(e!U-gKrH%zT#L!Hi%I;~Q5`s{~>I#o%Xrd`cuTz!T7 z@wuF2SuJ;JvkjK(YJ{qwH0Mi2WUwv4&?0I(+0<r()}*eBZcQ|5y`@h!lN;5IS_XKJ zEXH7(WW8iHGpU)<k;V`?cRK`N-oE*DPG3nHtEVXokHR<6nai;3vY(Rle6TW4L$_nJ zyF`AqWYP0bc$0pby=mr1V~eq=Cd28+wEycuuZfIvS<QHDL@(Mudy5`9NExheUV{ZD zQm~P=o7dT^6}jeZX&~1c$n}FTfkxG-V&6n@On)GK6KyHO;1zT<)jND?JwUf>_GS)A zfja1{tmzgVSFmRXdbItf@Y)C;xe*<FK9}lh_Xs}y1)r2#8}K=?xhX#Dbz?rs)g`#X z@5Xv%qhNjGq{FKrLN{g>#?w6QJmwz<52=XVlX@_e%g$a;t`(m-+}Pp+RajU1@zr`H zH}Lv*Bt?8MwWY*Gk^G3)DA8_hiX^tdLbb2KQ|G4hE9g%>)M+EUye4+EBVFm}geT&B z!Km>WtG(QMZj^h?86_@X$2xEN3HY8An2*98%jGA1g)jYUZ+3;==a|p<D*L#8{qgil zUnH%0`tj&Et?ogecaCshq)ju}&zHT;Tj~T9Zuh#6qDK`-!Bm{Kzk(c*XxIqsw4~!D z$T;asUuj>6+{gX&kRO#@dzkdyS7J>1M5$UGmz;vGa)oOdvGa+IdeOB$rk~aPtg3D| zgU&=xY!v+@(YDxWC@yV~PaF$Iq}5HLN#MHO!3e-#tM`4ui$q?TdC+f;tF^j#fQhDV zKWX2Lrfnnf4-tQRt#yWq-%5Oy79w8$crA*(qPdZN<7jOg$`|<|U>tYsNwII2JHh1i zPBl+<(YdcaFRj0ra12p<2z1d@M|5H~Xrz&4gM|#4<;AC<v1>|8bFPaeJK0k6Sd=dS zm(23Ti9GU*szd(&aH)GBk{9Ayzs*(X;*ii{@{lQNlY~(CNy+1ulXd%geWCyaA~^|* z0gme84)#By?QV9K#cwwP5S&!jqpb_~z&UZUxtZLW^m5{{v)Md*&Ey0_H`e4w{5i{| z4yq+`&DOF}T=EU*210g1=zzPhhMeL(iJa8Z=$ZYsKBt5dj5S@J3=3XHwO;y9GWa3^ z_mK_mqc=v{lm^^uZ;Z4mt!d-*w=OKPS0te6DxE|^cey`%Lt%~AIBKluW6ql=K)l9x z>LzG!`d2>VleBpR>7^+o4%NB)7*DD+Y+Ut_D)Se-G;-4^f8_JD%L!1oz*1rM&*N_? zN-%Dj%gt1d!PS0$<jFKKZdxpb$QH!+5WJqgUb9sQf%1Iw^LYZu7rDu8gg=+`K4YE= z5<uCNQ@=w(>(L8i0C3nQ2=M3Uy(o&0e?+Aj4hswd<spCiye=XLL{QR3K2f1^F(Q04 zEt5`zrj`68^N*lu97}HzIPR9j+X&B<t)(9%XtV@LQAn&s+*TdroGILd^`S_PJ@J8H zPB}qn8ehqge$F9;O}n6@Z1kx$Afry2?BCC%Zuukr6gBzXVrMilP_Zk{heU%1YMgQQ zG5^)$H}bH{osetn?iXp3nHLWNUi?S9BVF4f4s%D?+Wbh@HTlM$`Pc|XvcRjJU-6qJ z-hk4KgW_r;-QKj#o4sQ4^$ybwV`8{Ay@mm+?=Li$FTFZ@{glh(-m#u;2E1O`Rg=!H zIbX){04GBTaF=J-PH92X^xEt#llG7>HIk5?y>fDLc8#$aom*A9l@qShbJtKF=tCM@ zLT}mzDcTt8Bh%av>2l6-CRmfNmhqw-`m~V)TAby)K;~VMZTyjG$;#eQJS=9TzD(r4 zF6o?n5*_r&VC~N}FHAFRxxacwS`H=HY)Sgkx8xdU`Z})JWJPY2)hhx~Zfz;Xd|OJt zk^`~Ev_u9~NEryN;(v8wl!E%aO|r(qVkcQpn3ijt$TMkS$`o<X?_DxNz0x4*EAz5{ z*B^ccB9k)Ni@_f@2Q*wxdWCn>4x?hzK5w=?<>KhP#{JeCeeR!FSSOUSU3!!_oT}y- z-o&XpOy>ZyujII~C8(?Z?#=vqgY7N(y6`Y>UgHmZ{BGJF81aRd{k+_c$9%n>RGlE0 zlN-4ujg`u<w9)w^Hs+;o$ctQPaxe!x?w0ntu1l*Yyv9K;9SD%qORGbk+>W)^_wp@B zDE!q}6B?VA=2kj{5X{cd1oy&VCxv0N=~{Z^3T6XFT46q6>dr<pC?dlEdk#;PXKoY& z8aMlX9jlcb2x~LMvifyQXmJn$h2$_bp?_busG+51?Skwony-f*lB0}vSAL@7rc#*D z+R3!+3VX{jbsW5KfE)vlx+;Jvco*Cl1f5q5e`K8&FupQd^vX-io19yGRMw6K0Lt;| zPp^=c_l8z<5F4^-wudH{L*UYnWommx>Jgi-Zog9alliK~>;fpUI~pRb++Qd)EdjZ? z&6yIIQ;=)+@C(2kdoL7Y42_MT_F~Ys-T_e4`K*328^WM%CfO*Lm^6Rj(PYNr!d4j{ z8SF1t_2i|eykOWhE2Czx!(WI-70=g;MhkguBpUf!tR(U5F6;vk5tWOc=auzDt28U; zYe#l#l~(vABT;EJ9WY@07_zlM#a>N{=~i=Vv^^+iXhS*unwAr2u_{`Qr=grH>dV>u zRnv0Bbwa+eOO>;qa^jno^ZRr4_1VR1qxu9|RFYci^DPn4`mE#Csn5jI%8^+k7lW-x z#w92m0u}pd`<*&x?!6fO`66RZ80-g&DW*@jNSoeJ?s%tMABT~i^)gDZJfm!k1LJ02 zVroMg3eT6qS6YX^R5dL8N>0$1mcmayZr09~GUG$rn{$XQUPfPxGZTE-z0-_a!a0Q> zdP8+*2QP`yH<DGHfd^F<DI}CAGht4ZFPtMSUiho{O}gBV6=4os&{;$h*@{$lZ8Gm* zX^nxQAI&gHF6V^nlCvcVfyslH$*c9rVdVbR@NZAKEJw^~ZUIY?P5Sc006-RYC@p(q zKpXkkO_&$UIk&OGXQn*{$uhSBtgZVLz4b!luLgehWm~haRLmHr7)8g-XQlo8tZ$Mo z;g$9~jgCI%tj;qpGBurOHm6upBqi`VdxiDx7Y-r6gpkv&!wlco@t_Rj{&?!IFZ8?h zMLCIqP5Zs+UxsRReeS0eDP|5;VlM8Rm&0v?b0*R3GA7uV3fCzexeSwB54kmXc7r_n z&=t}CEs;GX@*K53ukZg2@t>qgSF9h|WDEP&1gcuRN;+_(u?=4gh1K<iomD@U=rLFd zo0@kSXF|2y4)QG6hiY3FcC$M}@E9Nd{&YS4cJcam`oV|Igb%BUjgoIQukhjc^^N&Z z6h9npg8Q1oh|RGSiR8tf!M!05e*=l+oo)M-?iiP4uQxUq9uSul3mF(G#69aDP5OTW zUj6<TUT(pwX9Hdt4qo4_YmAp%vE<+t2VQaLSivP;@Y?F&6>n^g$uHoCEELXB$o*ko z=wKE%E3;-$j9wK_)zfPsum2~#RKI<R*eJc8;uU&b(*&<-hHnS2c-3*YHIL!-7tJH@ z|ASt0$S8|ecx+#gW{)n3+FmX!#*#?-Yzyfe;-b>jHlt|Z$`vGyq}9AGk=`cuPN_1> zieQ$^zUO*kd`89>Jgg&s)YaYP9U@{+XJfTGZLu0~vQI5`nlNx%zu6;Az*AHYCS2fY z)5%JYz6{>V+=y;F(tC~!BR%?4OxHZbN5Ay~fN#TU!&p5O*j@GTHnJ8U7lib1Cw`e0 zO4{)>wfRqo^><-=wZvJHLOS+a3NCf?@LWn<U5X*)#X3_1^Pkl{+R+sA+ndO#_#Z=( zmszWtSy=-4@M(|_U!ov?`M5yt9)&D@SPw5ESAEy|q+1la{gMPnJ34+|8Yh}xpXeci zxxD_&V$^!7mL(U_NgVYUa=Q@!a%)J9jFswUh6aG%#sIIW2Y8tP+!tKhknjtHn0oY5 z>Jxq{!S(1JYMkg`Myw7$5^PN;50jEJo?>q_kY(=z8E^2Rg}$hXj8IBAG6Loe*PBT` zV$GDRMZIKZb>U$>ictbK|8kmGQr27HsPj$F)2@tR0$RqfsJ#@cvmAOMn=^ha9XJQ& z*fCVOL;#lsEdF%Fo6J+PfG${2<#HIiA^dI$?-s+q%H>Q}5|2|Be`HW9Ct(`J7fJfY zu=k;57Cn@3Gd<*0USa0f<Pk~A=dmmm#QUpW!}em8mP?ovVpSgy6$temdZ%9UlA!A- z=w)25if5<>=1TC`EO=<=kS*FFZ*qXwDjieOQMA&T8~ZOyl?+mVMY!a)CQtz2<r>8y zx6K-W&?fpOnLAh`g-IbrM)e&Rbd5GDN{%N;r6RGfiN30P=7^dW`yQf%QO{Vu?M&XS zNdR!{&!h4p=H?~n@!yE%U?y%=rM(sX0@PE{S8OyODK$K(Hrce{g!A>V^L4xP_2<R( zFGCw7U#51ZJPhr?D=?7Onh*SP@=nYNc^KMHD&{!9&U@xsSuRI1GUj)5)m*IPe=U0f zNu7J|y7AgXZd+Zlc6J75&j^o-ZD;d3d#$YJtTKF`#njqg$cQ7HiRZMC?G9|%7uw;* z@5ZbyHG|dsY-$_k*OybtYtwQ_Dg}K?M6{rHc#Z1MZ)#K!`g6TBQx&u);yo3p*cTVt z9*<|ho2g{zSe&5^;KkXN#1Q*ZOdk1Q`Jq-WsCk>%wb%2zQGw+PUStvk%CF7S*Py{e zQZXuKT~;%|p;K#xzoY*>9sjD(QGIqg`u|74-%<YV;WeiJU)ew?@Sj!~vXi+ciJgiA z$z+_>-To(R7MmB}CSz33`~t5{=%mVdz|<lQ<viR_&ZVc7lZ04$L=KIyQ596?m1=p` zNb<4L4ms+_9k8zW-1!<ruzk{AhNF_2^J`;c#OzuRr?5<6O$AE!<#Hyfu#-KTJh0sF zk$Sv$@p?Mm&82<6B_c|nb-YIDGXaMWF-B7DJ3vW5tbJFBk4p4hE??>AnkZrQ@GF$& z4efV>Mq<cL^s+Tw_;Sfs?z{27B&I^101qSSMt=2hrZY>l0=;!Fs%?T28HMN>HGG=d zYWdC5C5LA7PP%vGVQ8CF{M-D--WNk?nYtAK_=pK~*E~_wHqg`7R!23lX4WGlmu|w= z_+=#hjHJ%Cg!mU?)=m^ya?nkVl6C=4r~M<I#}rT}?Wb_Qq^;S=NboErgIPcjjA%DF zU)MQbpLbAk9{FNikcXjt|AHD9_%O7syc2Um9-QY^F~|9J-j#)d)fc-6d%p-phW4>a z@w)tG9Z=~$<QE8!$b<X(Bt|n-jPw2+4Jr$iZ89P{^r<wvH<GjMH#u7#TQ@QFbrf@h z*mrFF{pTgo@mCHkH#%Q{J{g^#45?lvkTAVQGTxv_W?9kA`5lF?ze=Pi=!0IzZ^+po z7FbNZ(XD-U3Z`LQhMzAmlSHX%87BH}kK4q(3?s11I<QQ2ittSg8%Rt2jgCA#zdjOm zI%(;bI-O<_6Rvd+`}5M2fAE2W+6pt~pmzGVk}B8=IZdB0lDpTaL>9P+1Tyg_TOV|y zs#RJN0rE%YIg(jaC06gonV)eoo7y>`AZ4u}iJ9b*FEo+c;AmMLf8L$o8kR#o=^@HL z?N6Yt&yn*g*jpu&-b{L)Ao?>iB(moUGo=sTC2PHU?ibdZZKNv3%3y_=@}>l{tF}@B z|Lrpc`}_v^hOUY4zhVXdMd?yzN*N#czvUM>r5^tFQiWyiddsiC2UlfoHMKlawb;z0 z%)Xsq#|4Vi{ePNBoNgUa>F4U199N}t<;<R7e>%ia3ep!onJjms6dmhcdP~~5_;FOI zX<0^h7pG)hg_kaqih!K8F-;h)yf8(M7@mtGoT6jHf<x=&0n;<xPz|MrUm^#l)i&Rv zNovbB4Fb+bd@cdH%i4CW*jEQ}$N;~|3f7<9d}h4gXf7X#K=yMN6RrCWISNYZ3eOgs z2<%bqxpcKC|Kp7~uu1XDcEvBR0T_O%`6e1q+fzMdStJZ_AAQWO;-?Y59RY7WiEhYm zw!!yi+^iyQgR-Zok%g}M!`x_oJ4`-QDQu#Z_tO4BuEL3M`8{(KmmepYI?ipSLm(+@ z3#h1?_(MHiW#SMMW~q$zTSVh&^`<j=$zPJVc$M_XhGCKO_fWw;O1a8IK+Rg#H|ydV zu_B&V=l&m#*xLPt63S{z|7c|6Hl37Ym;|26PiZ=eO1|$Q_%sWxMUwjm&~KExmy^4P z%B|Fqb`GQgk(V7r&i^}{3Bd6xrN1?=DYSia6fV0;1Q+{fDrP;%iljk4c7*%8{l#@f z;r6a6Jvsd0U;OovfjeIR=PDH3dti@h|B+wi8iWcP+4jgJ522br9aT`mx!77B`5nPN z2hT4@Cin8Eb7G;Ez%hp{8Im?we)mEDkt0Vo*W2qjnc2umI7ekZvN^ggQ0Gqk=?DEA z_V~we+=}e(YDsd0R%yUjhSRKbom%xT6*KN4QbyV(P(zWnt%t@zEV(YV$|~(Bub5r` zBF3jH>QefO29AwD6>|F>s#gH+!_ID3U8l>4Y$6XA@2!P9nk<Jb0y4|F4?WB^Tb`}_ z%7#O4f5h42W4sQQU@Q7)9fP|BenWauu=;tbm;SMrWa*I-l_Mc)mxvxKdA{d6>i=BE ze0GAO&drC&+cXKgyMZ1s*6*O<%m=@esh$w-r;5+Y38|j4fq18<)TKH-Wh3#{&5Y(z zpXF(M)9>FaiA@Ow^v?Pz;WidO2B&6Bk4^$-O89pNNL!^H3)fExlO?m764D!IZs%k+ zwRo_QUb>#@;nra<xG6=$dh%rMbB68K1q&E)vNOIWQlHa;H4&qA92w1|c?202wY_}~ zIH(CBlOU!Q2JB}zP6N6tecUIm;4-^^%nTWWdtL**6#U5w{$r#7{yTh_NnQC>@Q+I! z75ohk$KYQTg>Pye0iSue0iLhLLHy=3??Ik}A%{Gj8H7hd85x9!ID>EopUxnB`_;}N zm+MsNS{oubZZCH76*cF{iL20#*~KeA7qSgYOAvP?#Oz59?a+<yj1`=as@QWzXjcc$ zNrkp|5TOBn=*cD+qGQJUAaGdQ&aWGE-WGHsxqte(-AU|aTZ<}z4cReJJmS}u+*?pk z;9Z_ddl+ku>@n6<)OM&i7UwlKc+)H3h8M^#JA|oL?MU<$7;bCJ&t)V-g~637-}oav zs+EUVD*!KWEMFTZ84v<fy^)++&Z)cgIp2vu5IT`OrDuV+xOR8Ef~U`&E4>@y!0$=d z08??N8o$_@OTgx_Qa}o*1zb!qGB5I4+K-^Ahb0Yp?mnLtbU7w+RZChCu5!x3*7;;( z*QhtndWF~sfjf)wNol6^Q!2capRZG%E8lup2$MBpIZ5#Ggu%V|YPeiB_&bNTCHHpc zo>yl*fnWm>N2;_buaT21my?C_(wy`{B13e!(;6$u7<U3jIm|hW;=H$tuB~UoQ12Z; zRr~knr>p#2-v7Rgf%j$bme=2Vi)`q!A2>krOrvTSw#6W*s=WYRbvNhu7`Y-@mjV{( zsYM;B44C4*);h%AkLejokU9;?shdTf--~GhZmjar+OMLjRoy!(*oo4`kY3#GF;e;6 zW7%nP598KnwwrR)_FS^teh>W+qLWVz2d|P&cpVvV8`J*HQGk`fjcVpkp?d<56g3qM z{ek%(l$^;(y8CpP&fdmPY#xpz{fjDQmN#v=Z`;LMZvOR5QnXx`BI;~<ek+o;N=fUZ z=zjsb2iWk<enOUQIbEZT^&5K&E3EB^B`n15jJAgN7AWk8qAkyntezdS8&AK|5NYz$ znbycGr#*z-d{#bqK>3^)<=-V2nctWt_Uhl;bHFV|AMGIrwMW{xT?HE~w9J^g#g&HB zL=LfiN@U7$Ef&R2w5w(CnqEOiJKEvMo>*5~YcGI0_3|q6kCdfY+J2Gdh|&!i%hZ+= zWj`WqRId+^?s&J={(R7e+~IeKG^e#Pha{uENi?UmLBAbYG*(6vd_$NM6V03i-df3^ zVXq^x<Y$UW`uuFVq2Q`YrVCzoVYCa{(uCfn{~%5_Gi3^_m!o{LSMiPX=HgW{SvC@- z@LwrC5oh^t&+I5o7+1){Y`5|;Y0#t`%F|ygS9>q+YD`e_Oh3A7SFkyex6;f|{qk9j zn+%-Zzo6l`;n_rzrWL@EZ06Te@01R+ok2G_v%F+u098Eu$o?an{Ym1$$lq}dj^6jq zlI8Y%sZ1p4047nuSTnO}IbhiiEUg@hYb2SyOfphGKZEvJN}V0)?ndfOX!!3iwxEHs zPS7%qVBF!r7z_-s{x9srr6KlfJVTy&1Tu2HrEqKa&_hDCtcg6ZYL0l$prUG=WJPhv z$~sR?(D#}t-Kh}X-R~fY1pp@rr;yKfQsh$2(M~mgo$<G7UMVOJZHnR&k^$^v3a;CP zAff~n+A@d1y=$71t7VL_55VEFZ{J^7$Zvi8movM(MEd&Kr7V@oG@f13SIGRrnC_4K zD>|mjp;VBZM>lF16GTEQx0X`}#YN0*CaSDFO3Kk6eN`yLt1PAtw-;7PNw`KHSqm1U z6^e99<12s}Q65*9S?knF0~AU2lSd^RLo%G@TklJhsDUF%X=h1{XX!%>;J0{hWjG(0 zZ`cikIM`%@4P!%UY;1Upv}AeYK?wD&nexgElu*}2TXZ9RM$rWn2RbMYcgh}u<cGXk z%$J}@Yi_nKZNTG%iuPmydmu=h?l}A1whcX?wNrjeRsK-yOF`gHyF!{Jl5~~y=laRf zA?HLgE1qjKD3zT)D5bBXh3ui!!|Hzy?5XVI>Xbgi_-fEVF-^w*7q<5L!tUrBOZMeQ zCZM@|jy4IMyjBm(Y0%Kg%k=O@^>Vu&4$#1%liYZ5Ih`g~?l@sr$7O9iS6Sv8d$6p> zG76vUhkdtlj17GQF=}mSy7XmT7wF3vS*xS57~bRD{n5rL5*B1L3JDuway(9S@NRUZ zf|hJQ-&+U8%8Por#FtTMRp&-Sl&o8#ca66ucP<*R7QUXyb1bw3)&!<S1<QsI(Q%(d zdU%V7H4>jwBsHz%GYTh#S3vkmd!!Yn*=I<Ev%evbqG^5yde4M3&KU6GGk$m68_1c> z`A{7>c9YGS>DWB8Fy3ZPs$V}V7^S|n_QBy`(AV9&qyFTI-gi>D7M#Xefij^(p4)=C zMMOzNx5@bmUs}7u3u-deyx#kcAeZjqyDJbG<PMhyFTmFfm#kY}+&#I1NfH%DR9v{c za3`|K=>&7-;iW%O51j|<MKjXcW$57wUK{44%zY9}V~=P^F-_{JFPxFqp4O*?D#V6h z7i&X`G_#y{z_@tX*G8)}4l+(t9PpkK)rZp&Wh53^k-Fr#duK>x^za;bi-XG&TsTf& z*x73ws7X@w6OBdo$*H3$$*?G7tb)|j*bkRM6Lv)p`=(MxYwHFTqqa$5vxE<_6VeJR zK)!<u(;_IY+8%c|AUw`(w~5Z@)T5_2`@rNE>)RC^khb~FgAE@R4<rgm;c~2nKIhAk z7dVyV+`Mp)5ToZ`!8Y*DFg&~QnS1rrIK8ARZ}6@Cj)(*G^E;(aaKp=S!pq{M3aAA@ zt=Fd@zBMlYN#fLr^ca2)=|)qXayJ+{Y!MnNEVa-j)U<CT3&+@R;~@o6;vkpOzsqsl zwG@d4fL+;CXdZ{&dXK|LG;vsZxOG|Y%&E=rY*I04G)EcfGArP#!e1D2tmbFQ5nG&M zthP?HhN9`K_0l(Gd~(;&J~&-)?(8ih8N$nx<@&;Mdk6(Gt~BWvQxQ}|nCwlQGz-1C z@MpD8Vy6>S^dPJ|pTfoF)NMaV-RSY0jsc{dNCK<iY#D1(YtG6I9}eEdG1uU2&Uv4e zs(D=uE@R#9fU%!bw<m*1RyWeantb(sOJ8_4(YLs<H~CgyhUniWjWMc~N`d}L#;Ak^ z-t4O2t2E7eN>jA67l5<u$Dr4c8Ac9OR$A{JV?twLq=q6m8n-kHo6`%s`Ip299BsGW z!-8oIv|TajQt9k|l%>#ihf+5S_34DOsXJ>JPRtQm^OGvP(fPYUOJ|d6VCL2sKj1lV zb8s+hd~R-d<MbikqGQWx@pV(KD?a)QDW{AtK6-$sK1ci`6(2pK-Vdtx<LZ6CdOykU zR2?vPxfi27;2hP~X?;*X)YT~)YZqseR|rOO;w~|}dM2jM2|ueYB@H>HKHXx5NEsaN zasy%dGH=oG<x|VNj`bcrnmMxE?JYXGeCn&d?21{fuGbf~YMvWjJ8gH(<Cw3r1l))b z@+t48+T4yS@<*)5i`?qIAu>ac%QH6AG#5V77oHcW*wzdmB-hH>viugC{n<wgvC*up zyD>7OB~}8`7i=#-G9N4!!Op&)uf;6TUG{K!6S>&Fl{fSgrxL_bO|Wn1RATV5(5bj! zk|KHR{E@Z35<rW}{YHG#@I!<*33S@e`cIQ^<qr%&WmM4dzwR|oHuzpI0}XcGhfh9j zlU^i7#%h#Foq2Ov)6SIcQW!L~D*<DyDBkX(0gI2ha%k5uf(}qp{y|h|TMo0tg?=NY z9WbqlFH1f=Nran`<}<bN&d$Douix3na;D@-tTPb!1)WB-sWZ;8+ZN<pe8{ux0q)M8 zy~NDAlY)@n)}vS9MBl$AA+9oo$|-m==}r<++h;jtgrIbptnMOOH$)fYsw*Z%Zzn1d zE$m1M6u+I3l#0CwdCG<7-o(1BfdKRl=&vL-gtU3O3=v95Q<fwMh4uqVPTM|F<TNqx z5R;70^1xortPObAggl7~>+R0TSkb$3rQBjNvLOBF0qRku9pNE=2m+}4UgyhkhJee) z4@f938%t_nYO1_Oa-e_YP(Uh_pMRg!+4Byea)GGzHqC@TZb@Wj-NM84Jj$;%faOZI zX7b8OD?_`17cMn}8%^y#N}y$1p+LJ>6}C2*i}AuuB!Nb^v`~aQI`MCEem}HK)&rE+ zXeqLhWRQ9N1d;Qh{tES-bvr;7gRXNI48YG4)fMX}s>0EQ*BuD#5Jfx-$m*@DHa*`@ z1pLFTgj%qZx{z=%BoJf8k|m7y+-XTGQG1vDMr<B6J;TXPxqslej8^a2+U=^#DghET zxsng>0E)<HQWuQ2Y4~!Q`E_XIwC{*&nz)%$m%8!N#N2*y4s%(+_|seboA@}+OWzd; zoj6OMFY;JkI)*1%S*o0pQ`ZV7ua-nO@Ui?ACzDF{8C}!#M;8ErmBe4;@Rlz2%iyl& zJs9EW1Zk=r{Gy(YeBjz99Xm_Dt?!@#jX77PsNi>rw7fO@47p#2H$$62pk8tX&|#3f z_{fVaRXDOm&7SZeLTb)c<K6*xel|`?J$)oc_!Cg~7G2xFaF<%)allya+v^5k_+g`A z;S^SLN;qHAFB&8)doQmAMlusR?hJ5k*lGWGVK(i6JR)d-mYqYr(1GQpZ^LU+D#_vL z2cV+$<SWjUJC<^lpAtI-oH0Du4Mk+~9%g3z#w+G$H^U@fDu_w_S}6{kI{tJH%=iLj zl63%dQD~_q8%P=&I1d<g-=ZZLsNixEWu;8=W|j%WrPXfW6`xWMz2AQOL*gjyE~m8W zGgWCV{$ARhQd%*kHRAW}<5YoL$4Y_r-SDC5X%8TLTz4QPMOKfKhHXh09^WBEGH=$( z7F0WX8*4E`TTTMKq);J|^$H*UXY(U7n(e_~Ar18$0aGrvA4+a44+l6<<3v9wndgqA zA3N;`+dgxDbiqzr${C|%>kdkDT>mB)t`euT={s}NYvGYboa!^QD}fcz{Rd#cihW6b zIF|Eb;_$wZi15Y&;~M7lesQJ!kSpa1CvgzB41vV1Ro%}=H!wT>I#wzWh>T6x6Ug4n zS;Nf)=yRVY9Y<!5--qQ*$^w6ApWBIDqGG2Ji%WtAK4cU;V7-y(@FD1W(>YP*d5XmL z<5HNzi9hj;q?*im=omXPR3!Ie8T9De(9=#;;!+MQF*CuMyPWoj%xuOyYG{3^l2z!0 zB&v`e5;DRGX{qK~ElGm<J3+0Spg0N2cY-*Wq5S{~mdE*K6{&5M?{<8fN#9dfeNk<J z;n_)`Y*pvO_94$6!dvK%is}?Cs2(1KaDb+}iV^A)rbyT~a{uX^-flYz8AguD#Q2wb zqJP$(P$<UwLnJEV831%f-m=sO$4nFl9$W@?qw0>@O_HE2b;N{m<3^1S($_)vIw$O& zQTL7+KRK1`XOW#oJ43>aj8@JgNj<do&Q}NLk?K4;@~F}z%;RZ^)nm4(!WMb{xSx$1 z8Q-jlpGqsr{BQFOf8Lb9Tp;G%DAy0YuCNniBA%zmP`0TZnHlv7QYVA(1Csg@CpD2j z5V@oipNC#^G7TqFT{Y_4WH8SYx!9r|-~t^!r95;=$)?A=&ly*-cD3d<mrgpJkR@!% zQ%&~rv<LaLGMb4X-3Gs~eCgpoz>%kpf(WEkd4V@}g$OETU<xtK(E_{W9int<?i8 zty?Ll(MVB7GAjAuXw^Ou?Jf14wHUR);!#pRQ#*;SWywh1KLc|Rt2*>rqls}UIhh#k z?Pw*Va<}3iSDnoGYl+2T;n4?C&p3oX^069h9g7sELZ`eBr94GX?5LzXA*PZ{PA{){ zw7i!XqNC->G#6<)zXev~{y&KZPDoRtss7>$do|t8U*?IjAbj-sXvI!T)kCY4N7<+- zCldXx6TVP|2UEG*dUC3V@K05Eh6*<_7V#D3W~b>3?iF6u<`Q0|{hMEh0~bBSC{e>G zff#U|K!{|$g_y9oy+h<@iC)q!Mqk!XG|GiQ64HLEa%JTg)T=xXSg8pP8UJKKg5iTb znzlDn_Q=D%F622#TChlY4iI?jn$!!4Dy26c(ip!{jOqD`B+}78m5y#ERgo3jD}Lqd zZTKR%4BfCBwDdVW8OUX22QyUPtC;NN=57}%Nze3qn{t^|3to-bYbfy~yP2};HVwJ$ zGqF@KJx>6{x+Y#2eqI!d*?;ntb+vrq%=H1j<bJl!@cSrvr@y4KLvpiZ9Q2Cpfa+n{ zGYxtAkR?uk^vgs78*Z_`oJ<SMtUaR~cozyYCjCZk&O_cnHCi~;I7T-Hy^jl;)`E&B zK1fMjnpS2W$w*xS(5OQhy8cy^4`!X^kzU1)F_#IiFMw*LH$zz5+ew>-JU3CGtME+T zJo2WO{75XUa8V1vpxvFFd5DVC%y@J<6h>33<mRJ`g%FDJg8@qS-c3)zF2GYaN^V7J zdI8o$khBr;e<TShza1GhGO7DkE^Gnk5H*l3l#)^hxpx5VDx8JHvzWBt&=MRFeDG66 zmk)WqBD5vQZe=Bm_&PpOa8CN3FThWslm^{#o}Mo<>+filVpG5%2aSFJL3iwVdK8rP zx?$gFbM@P77ylt`?CAm?)|LN~;VxbezY7Zrk}nF95zk@rJ6r$1J?rrP92Jq3I|7`! z=ZJVEFIou#yu9!}Aa0Sue*33<<M^ONt`2AMvWXmO@p6IsPH9e7bu#!;^_>*2zPZfK zXKK4u+VVo~Mtzf4T68Ljth<X@xUAIkHrpA}J5A37N`i9LBY9M5t9i(uHQFhAWpFrk z3Uc&KdsI?Hl9to?!Mf*2Hf<wGzyEx?OQVcAQ$hW0s?w-MTaubg@gO3kyb(~=;kr|G zcFyl05%Fv!!l6<5Gg9YZD#J{tdlY>Z66et8H*!b^l8Il&_Yn%AZVp0kj!+2Q{WpZ# z{WXQs+BQXKI;kml5=GQ)!ha>8K7%~aN3eS5U_JLf>lE^KoHK5C$=AR%Fibh~MWc## zbl{$^;Ck;;Gr<r$g7oA+@{9Bgy67muXY)cOC1*R}?{n&~<DS3wjk}r_P)-sMUp!n8 zr%OzvBsIU;J17LI?7l})Wm=tLzQ;)31mEPQ;2v<m-6!C_RcHSJ@tOmo&;il!G!WF_ z)k11e38fm<{89%}Y7DX20C6VXDs2Mq^2hYzk_wxe;BRMwF*bg@BF>d$9Z>jR>J;vG zI_ZYtP4S0QFOk9n6dvoR?~(?Rym7ax!~Xr~64zbLGByPUH$A@$N4-*GmEy_U-bkFB zj_WK}45V6rev42m9`X>6Rofi-h00Z;3$d~hv!KNDWQOOvILP=Y==7nh{8SSvbaZez zUvSyvv`aS%umW2tDlA2b?0owt>IH*@N^7?Bo-D42ujAcJ`HMn}Q9>dfoxy?K>=k;+ zMue2SULz61<}N-gwQ50{%#CW|9-B7NiUSMN^XJ{n#XS|BMF{(gPwOp|-J#l^hV~|3 zddWlNrfV&`v(c0sA&GRW-Q+Yq?~^V+a_=V!y7e|>Gd=%o3iw|F_@)@(ehTnK4&YIZ z0rzkKmoy_T<QZ@mqmW2`t>h(mJ>>00R>+%Et9W(iT}|5>)A6fC<#h)*G-9-6B%`?( zQ4-g4GrGU40<!uY!=J$Y)B(V8<Xdu|qC``vuUO?m5}uiCeftqxXW5l{N$`kjjyBdx zLeS@M7Z!+lR1385W!LH@H#;fXS{qaf{Ml;Pk|cmBd@J1A(Ny?%aMGk&?~=yPF>Dc= zN!VU083o4OYkG<1B<yU3C83$L^DYt~IAyO1rYP+!0?`%;lf=6eU1whIH}GXOP-RH@ zoJi(Z$;^ST>~+Cp&f@^+UxafSj2y+D|MD()RcY_=#*BnC->Db1*TaMPD)!8eCeXtd z^X)J8+*cnUx@7`}*9R;lz$q|0=_*3?a7jbRI&lY*luEFjP0>()<ejQnKRv3N^~^h) zHY;6tgs9Nw9G7NgD0g%XyYEoVx^0;1#kN$NN^!p#z=AJSX}ft!H7M&7fzOHXb$>}B z&h%%!LWmx|ACgpQ%c2SGVTwW=ANO+tT*fjZ>2Z}#4Ed|Hr(@|v)fm8wC`mZ_aj!}O z%aLSqEXjU8z08~>Vc|SPB@v(MRa*a8k|in$KawOXQzdy?CCP{-naij3V(lro!&>G_ zr8rbNno?{%=Rb0)snq{9!(odJddb8;r1M+|S!ml4>Z7^(2#-9(m@<G6$3KfTXbG}Q z-7=(0?gc2Oz9G+J!x(tk3AwE!l&aEZ%O`(K`<AF@l;!voJj)TciGXO_7bJ7yZgb)m zHRKyjWt_NcoVbAmMDz8I#%b0?5{IAOC?L&h?F96ZQmZsQmIps%w@0&s%LUe+!wQ#k zW4KglZDOyHcKdD@c_3rg?cK!{3;Gei*-KDqWqqu&$^1>FSN4>f*mj^`PE^|*Iaqsn z2QN=ZMX7_uzamy!s}_WoyWuEh*r!bg4eK{SvP3NUC*2|Z6olWD#m@cmQoPayh)S(^ zXh&E7N^OcfxDV}3a#m^+oxlg2M}hMg!sEtDE#G<ca~?N251%|Np|9EQ^4l;Fqa&!R zr^Kg(q0J;Hb1R1UC^lIk(2t`RYH+}VSJpMCZq)_tne2De<{{mYFI3yYxmrnv^C=QQ zQaMPT7i{j!KJL}?e#zr3Jo3(MRCni8RXrvlYWx8qdiWmlpyzuN<d7>12a~l$u)hLu z18c2kRQTE;x^1nmdM^)NfsQD_=eB(AZSmk5yog05P-v;Flbp6;q)sAbUCIPhJ<)Y9 z_X{lECBm|sL)+YkLcj8I1VHVmD?8;fu2-Kh>FU(frITB-oR->x;_9J{5M?8Vj~_oF zm^!>l+rW1LH?b4-k%}5Sb^@-XaY}7uER_I5dqss8jz@cwdQV}c_9ovF{y0xHr7V%P zJE)G4gxG%%5mZ;9V1j+xHt`}Y`&4E-g9Oek?N61f`)CATsNBkJze4YJ_!4gcZe@lR ztuOJ3Zo9BP{<?^-lM7-c=p~O)JOpedq?1j@k|M!}{h5bEWq1GoW9(1hqb!oge|!RY zAROTdLKIz*0fT}PAZk>Ufea)#k)WJ{cwz{GBCupeP&|S&0UpOuTy@n|S5|iwU5|AS zKoCec5=2yP5JUosJ`WK@R1OjHdsp`}nF;dw|G&I6(@%AGb#--jb#--j_0Oj;^F3tn zLWRG&X?JSjuevUk3S_6;Oalh@2@{)HE90F5ug<dWk?!!V1Wq&~Ms=UyrQs7mzh;c^ z9=I9VKtQ%x_6R^a2_FF*PPyaC_u?q<r+%$;@jQIyjpQu#u||*PvIZu|pu0AjTcCk> z{}5*&mFz^9KS!w%bh#M6iT!c=7AzRf+x7L24$n%J*S7Oh_J*3v9dp)9ita|>il%2v z3E20h2r`h0s|ZQO#Bm9BFjgJcA3_*DSqdEOLFRp$?#+?O(@cS7qnuy(O9RazLK0Fw ze3MKuEE9tx(H?FlJ1Cz!m)#8Rbb@fHp0{p_BjkjVe$KqWs*$6h*?$-7RyA#tq?L5h zxH~G`vc-}rFT?OQvvCY`6mW$qK)sjVTNm)lO)kat1t{zT1p9=B*w>O2%2$pM$_0B` z9Q$81_O0!Ne1-k5TAO<Q%-HP-U~kb7`$UbsL}ABz(UJzqXADcnq!NC3(o7@mM@qj{ zu~=@=DYKZO_*ucZ@TUg+Xs2<u))Y6M2tQKxndLt+%?1|TFj*V3^bi!|C1dj25!7+f z#FA3)xXGbOjL9tmi1|Jnj@U;J;H%pBl)qzfO<$MUfkK_vKqsAF1dfc5(S?K62tl$l z2@c=Oxrmj@_cL~wR6Hip<-QHE&wMf^*hgffxT&MRMqc69d5k}rBFPN_K3(ZS5Kx!- zJ{Be?L=v-Hj&H>WtqfyCpBZ@vAbn#F$!P7@53m5aLqLmiyq%QsSfg&QD|>vnu52go zv@v2S&b0-=y+H*Z!~0oNONzx;{`z66_Fn*Bge-&w8wpOH`at(_@PuGpW~NZ~BBRSM zLR36xGoo9jsJ&sQC!ZpZ#I2okAs@)GVaqNND#G9A;bC`dAeyS)%m|>b%FCI3loPqd za+WmISqxZ-Co%CUR^CxY9j9;AW_pA~3`N{W%8Dv=j?r`kQeJ#Y&M{67*TF_}jGx?K z<2h82zB2Gl7(<38)Zq&OT;l@L0IU^2FBi}fo;)XjE-pZJ37!zZIW9o932qTU6BmFV z6l16W_PwD?IS-`M1hCl!oDX2U09Lwy3jo|KfPcFHuinED(5o(}6KO6Mz+YX!MU>NA z05JgOg3OkL0qq{fPt?d5*26Pra8{Y`7rr|z?x5I|?(kt=w-#^x-R1;3hxh(4XK=T$ z@6w@is5J5q(mc{6yfy>i5o0k)Q&|bT$#1X~`2R`(%jom`g!iTejk4n{?jKQhXSdyy z_834O-HS<*XzsH^dwAaB=&Ky99miFK%9^Iu1|0WhGutj0&@H?tCA{|(mlK+;ZFX$V zP1!jc=M3oPoJ9w6=c~nIm@_ynw6=7fP#RwA)s)sgr{}k_<E_ovqnWjp2ncNY_Gne+ ztVXC01AsZ#^2h%0z$uvwb^jQ)>^!PQe`6KXu)pEX*8Z$qW|{i_#`*rlK?eGp9C4w) z^*lp=qh}4_hK$?at|Msw_;=mrskGKr0;q8T($%^MV7Cj9SLqrH;4>G{3c#;J04#L@ zX93tCfOlNL*#OoEAnF3zfpm)i9t3d2SWQrR@G5?3l;`*f;>#m5bqHfS+D|&>iz=!g zP7Q`iPo65DR%WUCG2R)Ba<S22fly~p|Na!sq4|fBtMxnONO>89SfBM=N<fr<>m-km zh_y9*s`0c=PA=k0&Ev8Dsk{t{H<Pa0{VC$HfM*SvCn)g;d(G>@sE4^q!uyVd&4t_j zTwVGN+u-b<VL5L%)}@4&@}NT#sm84YJ{`<s@S=+aZ{X`YzJfsl?@8cZ0{aMPyYWol zFN9?&WR_2Z#@KbZJgPBg%Q{lt$+(3A;T&ny^D9u+!kqP@M2dCfK4L*Pi)dIhlAq;r zNS5#n!l5VfV~?g4^!jevy@D!FC!U}acjBk8nDvzr(14q7WW`%P5gOvTawS)Da_MwE zN#_(1k6e@`Lj%99aecL7r9>$ez2RY+`u1T_^Ef6M`DaGD!DH1_>VmN}7ca-in}P8* zy4d-Vg!SV?7*9*B<fMLn*P4{o>ix;jNg?O+I<U!)LkSwH%5FoLw<Fo!#DU*tbGDr0 z<<icn(3H@U{MeKe=7RpIC;^sn1e=5T)SH4LHp8%M|0e5l-zu?0;JbkzIhc^X9~&CH zT2W-3vd7C=xoeF|$yi=XMmDS2%bA{He?~G^LD)se`<BEjw^8FbToX#KVw&?Q?&Y%} zF&FYcZfP^NzKX2Fc7b!Mu76ePRr--J_=~at8<RMg#NS2Dr|HKgtBvD>dU*PHbDCEf zM+gbUpYSUWPI^c12+d@zby>zz1?3T%!DE8sy^FIH!;JS8ly_`OCrq9sGwYKAu#8vb zC*~_FlF588)zD`X?}7M0ec^hJ?y513P?+MSf+=5PDp2rvx!~*uPD;pC@Z#|$#rKwm z?gP+G0lX6?-9KjHgs}iF1fXVdghU6zb(uHU6S9X<uSwdbByp1d?7qJ?jPB!YFkSP) z6tY1MmC2%?hPgyWH(q^G)e<Z&KX})&bpQ_soDt>hB{@O|KD?0hX!PP0FWr1{1z(Hh zv=#P7Idqafj>}f9FwAf?FWA-qS`-`0!<(_}t=~{W@pd`ME9drt=No}=t$2{G;*FTa ztR}Qx$YwO6{dIbP2%Fcx<5$)(i)9}TtEK%%-hM3K`M}aZS33|J#j(xZ_BcTFGc0Gp z*2=>sHq2_fr$EK0A)d#W7p`zsl{KLu^d)b+FX{WKLQhr`ML(@o#K{v?o>1_>x2N1Q zpZH^n&vT1}337W1%_qIK+D?T`S<lsvUH#s;4BKQsvfPQIZq;B6ggLSvnF7<7^1r9H znVugxgo=-w6b{vfAKG-x6T<mNn!1K(7OgPfKPD$Gi|g$Bg()(wR&i*7><p!4W5B}d zcqdWvS~o3W^1k27G&vZaM|-hA+)WY=FPm)C$<0;0*0v7H)w-7zNh{L|dwmtWJbL+J zbvTg9PXrz3yh6)Sd7pfhOk#0US+JI**(GEnOXyQh)cn6*nrEYLgH`FNlsof9UH1lJ zqg5NeCKN~;t`0Jt^6)pOBC73)K!v`R`-tTVmo#Kcw;}D&oit?fiGTbjM6b2e(4EPn zq)wIHoEnJ8TKf%F{BvnRt>9m-i-U#1v;A^<JI=tr5TTx-%sEgSv%67l^8I9tKsg(S z<s9L4NxN*btfA|ImrE}!K7m`(#`c#&r>;f1xO$~)e`k**A$B|IarCw_xX9Jj+5^%q zO1d-s+RQ3-a{hs<qSf{S(f+O7a<IA$WQ*ui`B$p*qxGgJ9=>SIVCy1oO}%o!sGZz# z%rIvypiju?#;rx<ZNh`(rr^;~r<?=4wh;OQ_*`;ibJWip0rlt6<)nKC)*<9VH%+Ji zBbkNr@#D^GtQF9~7024U;_`th<m8CyW~42pNH{b-)D2fCP4albz?{`b=wMZtL07+w zaM_Gh+{I<JWE}uR-dp#_2I%RlCco<;e@Zo~1DeJylqlo+_Lulo6WD5dC}C!=L;l!x zzlrI6_LU@3#gF2IrXZX>SwX@ld6h`|w~8DddO5G>0d=ioE-;~{9c9bxD^p&x)z<#- zUdF~Pkf#O&(xQvd$hX>;7iBf?$ZDSdr~ri1V}Gx$X1JWNWrz2j4A+Pk<j57I3hz4+ z&*)_Ft;QWoVzOrP30qPXTOv)#?Dm8D3@m{~kKmyG?S$&*_c*s4<zE)R;o(zF%~@3> z(JO2YU=r4~3QmPr_<1<s4}aR&zU(h`b!hUQGBa|V^3-txw!LPOJSS*AUrA5tX3l<E zmSiFz$(jnI$Q`f-q}e~eSf9I$Bn6QJ`4%tMY!epjI|)^)cW|FRe5%F$I5M5co7!?5 zbR`LdW(xK=9VpAKr&QjY{Ta~kzEjQ%L}+<epEIJLkDie_^HZ_a+r<z7O>#!8&?@lQ z!}ul~=NGUvXF0>f+QtZI$x}kMKTa|>qL!@7!Ggf(Ci{a=YqH@lEtwj}VMZPSf!m^w z^$|YCdbhEUv(@f0uD{?I4h~F7S1BCQ!m8>{Kk|yd7IdWQM2;iWP~?=C?ONG7$O+=q zxQcrz@Om$CusB}4;{k)Ypwtlm#Tio9{MZetgNi@y$Eu_SC)~MZ%<VyY!UkF7s7uFY zWF3Q1()Z*Pe2d1M0{q1;RPkm+4o_<4NeME<oWH8nNKI+o06v55^Xo}1w@5*w#w(<x zYrslzx++G@Xz4b@j^|ZFw2C*xTE5+e0D(s}#Fdnjz(a3RS52iOIq$|vh*ujjG8`ig zl>)_|V?4JyRH#XblRSX}q0<qeFjuW-9;aMHpVDoXf~gLvZ2cl$e5RdWTcXx4XV8o9 zA1ETFg|3d$iR=EHtP@YW6oGNd-#@gHgKOj7I#Cx|ENrtKQU!eeq5XS?-r^;a+9oot z6S}@Q2TI6K<hjiGqb%PJ%ozde+XhNkfXTlfeu;R6XPGpRwL3gEtL0JqN`Wz;1I%uz zYIX}XMM#fg6T*J`D`ud2`7Dau;Hd9mke`k@TvvyOClsWb-LmmIT9vQM2^VFxOtaSm zuQvJshh?Xi*M#y0-?Gxamf{-v<FHP0BT!A6%i0VV3Hm*gaFXGNbr1Eihmw&KC^sk{ zmgd5?Ss%8ehP)mx(>=$P@p5;Txo~(^qYnos;BBO-)9UB+&{a@@V>Ef}MI<z(Vb5+_ zUEmR1g2JqBEZG+^7(KNs#?94%5ADb<SN~GmG^!28iw>00fYeb!>Op%sq@wUm%(|Gr zW3#Zv>`yeu`M>bG)Ws?MxyWO`LQ2{7H`UZ&?Y7!C7PHNhl$MmKDC_*@`Evx_9I)Br zB@^`;RbQ`aV-4mN;kp<c%uoxeIbJKEEA5ZJOtN=~{#a<KH9D(<&0l-a5DKkd@HoZA z%rkJ_-U%rvAzWG%4#j+{$s!eR$~jN^DJGo>ec6%WKEjKX!{=x|MIU-xefkFSX?F(+ zW23JKB(0ysbwi+kBVj?WZ-w%v54S8V-s<NWCI6iKOi%CTp>6g(WCCqt@aR{gTWiFJ z`+#^0;lkq2pzAE?!r6U#UD?$<$X5a@P+Gx$DJgiN^0a=?M)w2%t*(NSQ&GFip11Q< z9T!xOVN>3RECuPozR8Ar8aLX$Ka94=N&CcnpF;xrYW%I_3R1`4O8$*vg+Fn9U2W}Q za50`C(UH7vX(*v#-~arq%W<*aL`usnTQ1AM^an_hQ{nPyPHLm-)R{74$pyTCPeP&n znC?gR$5BiNPqoM6RdKHW%BV3EoGkh87Sz&YmNAMT@V*%5j-^?Z=95iOjHt@hK%(h= z_{&AQu-yz_DIXD0d9WD|w-}uiJhu%$X8916!)OJjj+=@&|K_8SW4UYlh|PVM|05x5 zsnY4SW95B$Jw0>U1;WPH1X7~8Tl)0$^!mkos#YozHJ0(onxDUZYoq0KJ?QVaBCyF8 zjna4xsFnM7{+i`KQ>>qhN95wxFCT@)Yx7wu#xjSUqU4z$Jte;Kgac?~si4M}JneGT zS3D((NXsX;xggTiGqaUvPQR4?(bQKv%a*p{V(<!;y4NZ5F~3mtLLhcM3x%yku@~~n z8hiTB?ER`B4lT8|=g+x^=XgjITE~FyS`=%)`J^<}4Jn0Pe;QQ0voPh8!d{<DYv;TH z!?oTacg29|cPy##X5prGKKZe5bU|w#IOS}pfOW%ypW6QyK!_KkeNh5xkSvo84bi~c z<)ewTEfQ<FT^^D-+bn-VS{PB#PToYoa%T(|gw@6be&nA#t<ct`1?)EfHp}sFgkLNS z;XYx;qXX!|u=4o?E1#gMlAzJzQzXb|4aFnbD{3?8Z$hkpX75?T8Z$DEg!oPMTdP9f zDgyz-DtWyWK6Q1q@kMWaI^vNLj`*W;`4ctX0`B_Z{wqPQlSb3u71#^a#y|L#fAa2C z3*#xiVt>Shc(s)ql@#2A;m3Tcl1VOVjF)Kbru#O6kG>9{((FcmRI4W#kQRCa&RkDa zG`C3p`Xubgv5IQrT7uNVQ(NTjFB+|ZxJ}iBp!jzz-fn$XZDjDJiTXOwqW!PeGM*~a z!pE<+(vJ{kzx_LY%%>(RqBaqBJ$$Yq_~;w<A9+DfmUHJu)2o2gz9q~`%=0Xh7?Xb| zCThGPf72!Gj6wf^zlFuC==FUTQQzD-!2Q<Cv!%fb=Def2cc6H6wC!X0)+XmUGBDJh z+z+XW|2LCdY6$=3oP0h1y8?Ile*r<o|7?N5|IYmCstW&2zT*6EAt@~5w`-)Tvq%#) zY{D-8cM){?{}`(!s$0+hwM3yzJJH-VggRC;-le}2jv9;k+x4K8`yRjS>Rpe#|EIKq z-1OTj>SEM4L%v~{8WVBbivJF0##EV86y~l66;><vZqR^x6hBys_4|C`I_|POZ~|uH zXcKmrk%{sVi)3+JPlS0BWLaVCiP>pJt0enYv}r<OJkknp`!k<VeD~zhIm6XR-Q%I1 zh~qUr<k4b}H_qRDZvR@9W&4)<XVyqsznQ<5v6E^Aehc)f4%KLp>Da$Y>n4dnEBEbQ ziujlKaXgSnvzHw2f!AxHI)6^~&3wp9kXz02bfTR}k_N}$2UGBIh!s0fX*aWS$7(Di z1WSJkVVh0Xtxw$~ig7IS7aY^;F5{FCyIf?9UABc;O>7H>>JQ};SYIq+YVtUp$wm7( zflb+s!D!_gg7+pEC&HVSv~qvCT9N$?KkDI%___>z!?h<UrKz2L9t~O)ZHFTQbHTtA zu15Dy$<zJ|2@fQ^pp=$+mST~${Yf+|)m$*c;A2=5{tRr2&zE-CLNa(Lu3aH716A(H z2&DWfPk>f_iwJE0w}G<FnVM6WvZ0U{MVV2r+e>Zne{^;7Y(6Mu1KRS-QfG8RWp>)0 z=vS;{W4S+EB~spJUx{6|Mvoh4EKSMNltu1DkoMOV5Go_XMX(;pA10NUVVIGC{+^MN zmp6wUMO6hea+S_Ss{A>_vzn?pnURY$R2UFBk1$@RwqGwSUCk6$2^Dui3~A*u>$W{& zsYI|1R_dPmd-mX=ITilFax;5%Vh`N@XtQv8IIhF7$xzADYM8ET*n}GT>-I8^g!>Mz zX5)HVlK#Rr!5NH=YQa=R*DUKJXC(;O>o=e>`VQpE<)^2X(2#U0{Mix}4e;2{c#i1Y z*)|_%Liy3@srk{2*v%=tuNgkp!klf8DD3;UWTlr*-YLfuT0Ukz)k88H{{apvb$Weq zhw|DX;(rt4*3rHGkp)(b|0Z~|1W#Z75x5w<cjH)p*ZAA0%g7Hef1t(R#?k>Zyr-LO zZL_?HR3c*%Oj;?Vmlx0;fkl1!=jH$Ef{eb`^zB<!&=!mZ82<tC-!*;tN~@jk_LHFn zh!%02<mV(u`aWu+1_JLn>epJ6C~D_Y<V>I(cif2o`?h3kOm%2iYr8sTt}+!_pNl5Y zvdH3%lrJ|5uV-EX!-}FUvt+(+X+B8<)cG4y5OyhW*fL34@7dRaz_~$SYW}0!Rp!d` z=$nhIO@pj01=iLAYa8#aoa+yN^C&*%GVw&6;jcW{!e9A=QIN9H&$15Za=cv9!H-`# zyqop)hxhhzE&-)|!+Na+C)Sto{)D;y13VRu7{;Nor6i?EzDIBAOhx2hQM6C=9C<m3 zZCQ5t<EwXmyGS&@vS5>6F$~J@`R=#6YRk8>5RID~8!hghpPY;sD~w*3HYheNt?cS- zvwST8ndHSQNKx!Tab?n1+0*Ro-h<59TbL-#1r>$GJl=^vl)9Suda>FVa5+2T6ei9p z#?9r)_DF>w2(7ku46=^aKB@VrZhCA33x03OApfYT<f&aJ<*0b^`-hLY%Q|{Klmu+B z@h~#U*xLoB62I#92bF%e!uJ+&^3TQRJOKA7RIg_xUAg$um)!DPd>d4*-ndzLhhL<~ zZ#kT<K9}6GvDWu9X`V7cR*2=Fd!?Sx5mgOm6>U;aXH!b3HU^zmF1Hry=Bn~!@y^~D zsO1=ll<Z(tuFqfos*3-Dcq*Xdlkt~7s^UK+9wK%8-;?v-q2ga8o{H)CNOF8%75@P7 zve%@_ADa}f&L0Xi-c8^f!3@%RoNHA=-5$?_$4#fYmrmDKrE8N&SKb9OC7tm11bKwN zMN|#`KGZXbzq{9+fxpgX^v?SB@^dam5&R#uHr8}pr|NS6RPrz0&QFs<_#M2r+W6yX zaq94otapeHU0!Y6M?6S0FGeZUx_`LUQ`ToEX+3Ub_aRHXsEag-;Hx&8B%?}Ks1*Fl zWVpOxujEJA$P~D$lDO>)`}Xx<_B12xc*S|ky(~Rs-QNuPb^c9i-fJ+{l3oA`#VhrA zeXnRdTihrbu$!A-&JEOy0_PsVQ*Y1WJ%VI>gW~uKV*}FI9F*M#uNm11hC$Is(gw+C zhR^t5DA1;>2+^i%x+k@1i%(=i<?5Uxu5IQf;|UIQaRmEG{vdu`eG`-Oe!e!I_W*pX zHmZq~e~x&iuQnFNKhGC=SbxwIeQaD06p=+^ylS)73*a^dC>}p%>X_nS34q}WFqIpX z#goTQ05DJiCf)5V9X~lV5kNl$7|RJZ&Z15O&`SZl!SN;D>_S1>Qvt?Iy*nh=hO3Mo zd^5!vUVioNa~{N^7j5gV^rH3IvR{2!zn;SUmNN8Z&p;H7<O#IC9{xooW95+YVsZ=G zrv=L*P4J|<$8jzFRe@MWnTja&a-8<!pf|pyK2<^QD)CM#xqD1-aVH_gGR6utmRq2H ze0>x}^RQCHDN=K4174n|@FelFwE`sZGED)Jcv+V%lqT`=hyo<>@_+(pUf$?+-lsjw zcgF5H73_<jxt8o|Ulq;m2yt=|vpKygYJA>JbeZXcLaF5k9=$GnthqT`pNYuauz{Kt z^8{qd`nnpi+V&J27RDnE!4+9blS?qzxdtIaNiz35Q*8u6D?${TKo|B){#wC)Tt-Ar zMKYoa*atv!$UsTxMuLp;jaK@#WRMiBEG31!S<U|x#pUR}#MMeT!!p_sCe+R{x)M@k zB}j4_s}5XysqW9!Mha=<U$t?L8>(GL?(;b>K^l!`524xx%i)H{-c_yc`ILX7@ciWB zaZt|HERq<{^?Q?PVPBMFXqa+1Cu)@PfqB@Z`=x2_xb{h3uWZ!lSY}5Y52-tDGckhL zKR?P4i~35s$z3JD)@pl?fMV(AaXgZN`_rXzp^CkshEDt@a<xK=NM0|fwZcl$lkKBR z)LNll{&0SyVA9y^$>Xw@UBd_=sb#z%Nf#9}#-@&$m_5$QeNzCIF-O7m@yf|l<30RA z1%1HFq07lr@q3tivjDjNOG#uZ=BvsW$6v<c8(7T(i?ZE+%3P{SyhyTeMv$My(lCTC z6i_^Ab6gj65&(W1E>YNj?y9gG0P8Yu6tq#_)t4$pZf3O@sFp24IN1Jj;_NpbQQSO7 zCCK%DPenHhOP>^YEPXbIcA$73sL#OCbJry9%RQ`1zn{|O3ZXAsDjCZh)1b%-A4OiS zi)^VA<WnTXzd=FbnDJ~K`JGfEmU&?!x7=hq{;(o;t&VK2b50Zz$@wLb{t?jJ2K$Mh zGt$2OUC&5$F+CREDqkekBq3!*7onQ_+?QaV8RfrOmJTvUQIA&uLCK34^XgfbeN0Rm zvG!k5l08-v71HTKP$OpmR@+4hI7fFEk`y#IscNp0%gu#m!57%xJIBfX$acxTJWlo( ziPa#hpLb}tIN2GR>}Ept7Krrd!hc?xL}dG65NTIEq*%7QtE$B|sL(^^J%Mw7`a2<u z`k#?gy(p3)(_o1W33%HiJ=v^_WyrXCXf*TB6p|mqr7-?gzg2k0lTNLClmUJP2B>^Y zwW?b7m#Y)?$<z3H2|npOT{O8_4eApnyM1Jas!vm$psA{laQiC_KiWmrvsSF(x}!_K zsnn4>bmT@S&V;vst1eT+DFM}G7G8WtM)XXg^;wco_t-_!L$kl2)fCAwh1~d@Z#=AQ z!+<sVW_5?1F+hRz7HMD{S=lstPfgGe^3XTlkce33H6#=FjfuX|jAYWIE5Cs}0={-} z@)~xHr&ratQ;}7pWvFT=`yxf_p3b_R(EgI-al*bc^ZQYB_GtSd)G29KERq!fj7MD@ zTYcSHIGV5h*+<)7N=gC$$pw26P1M1d47{xKv-~~kSMx))F^|GkEV=VkfOC{W7k&pW zrnLYom0beLbQuUAV@G<Wn$|cGw6aJX8naC$8XueCywD96c_fPO!Sa2GZ~5pVAL?W; zA5&o028z}fz?a{wtnQIEED7kp-YjW6-v`9&OW?aJ^(?l8c>6NFZC<_=Z)dnkdHSNb zbNoW=z!*6*IAoG<79En4Q%_AdWe)2ACJ`DxKnfRn()g4s^^uE(fv%7HOufFup2s;? z2ry?=wt$+baUQ9$83XcL-{TKS6E_j&TpzunhEobSx_|F|RW$nxv;n4#U|PTG)Olc+ zn^munLvHLxMu9M19IvdD5$#ds%~0j_(&hb|k7)W8{8i<BeW7B;Z&Wi;UY~e*oQm<{ z9#qQp#*2&^J*31ObxtY2nQg5Mje$}3bXKp2aHyiWV%)8KORK8onz%tJe}M>bJD$cJ ztzF9RWTHQE6Ko5V=(ls^fq?SMn5Po)6wnNW`lW&8lY||-1JeO%F_nJ9L00TpTuMB- zjImH{jMjY#lT-(gqM~hKk1J}lQFYB6z6LttikizO@!2mX$F_T<i}>EXFxlj&<X5As z5I~*jDKfTvPjrH9Y7%*jq)G<#qEKNJH)pGZ&6ELZ!P&wJV-PVMr4LAg#zu<z%D$2x zjDEgL1RBfFxFC>nOnhbvf~b)NR&&9q&ZM|AYf%SUa?Y(;li5S+Z7yhk?82U&vJ)N5 z{@d;0hB%j4EbDW6_H|1X^*?mvQG@)f@pYMlu7v1{mz7!4PZ)mviOk5Gs)Z!gLQ+hU zciMlsU&+=|9sN&)jvjQQ>@s5Hn8_&kGaS1X)sJ;jlCr@R)vO{R((falWaA)2teAJ= zxt^}n`vP;ec@{09-p<HebFRduuE0IuKd@baeZfwJy$89IQOl8+QTAKQ6Zq3L{w4}P zk^Z_3{zadzTel9&BBrpLK<7VN1I8?kaaYG4JlVU)wZjc3gSB3j;IFhB_m8EP@ho}Q zO6J-8q(bJCiAwy<t1Cev8^drt@<N(WX*7d;YbO=h&M`VO@|c3Am+nwim`L8_Dxh&y zUO`)YLkEq|;{lD|5B|DM@<Okw0Yv}6p1mU9*O?^R;uvi|ll*5QyPC^`)^YpsB+LiB zit_I|2xb^Ro=g6l7>M%bIL9B1_s;3)xgnY=JLdf<i%Nb(j??IEE%aWIg!KiD^=Xau zWE0+HU;>C091~GEE7ZlqBNVrFWYdZgmNAZSkFs73r}VEd8B)l|28F<q_bz7&)Smr5 z!I~InOb=a97gf*^qZv3Eo5mcCvs~l6UgK<hI?mAvoYRtU?(CpgviSmGi8vG=oWuEo zQ}!lXsX`xZRTTb@RD-Nzr*WbwDD6u$GTuJ}g&z8|Nv($d!47m^1W<Qg0J+O6UHRp# zxiTc9>6h}!TOexttI*nR58GN-H=lEbKQa!AqDEVlI{g*QBQWSn5S~_c^fJnR@1q2B z&e9cWp(?_7{<oAJ%lx%Q4cKV=(URd)cGqa!CK~PT3w}RZZ%IPAoOnuK)LwW4%DXkn zH{&Rq3d#pH%F@k>(kIS<GA#+^M2)gUp_Erb3Kh=u&6`yAK}4Tc(bsY)Wc89nMZ0Pg zo$67fX%s^=isrvZafhIIED6Q8?N!BgpRYz3R8(Ie%u0W6qoSgk=+me;Ur_W-Lh-sr z@v=e@HG&#Jwni|k0RlSouAW*6Mw0x>0nB)ZzFi|3sgOX%Wr8Kz{(Vw2NEYH>hAt7= zu1vk@Pm3KP=DVZ;ZV<kegfLwrY@!e{U2JI&LQB6GgPd&y$5*f)m5u@+uQ8aBJVvSn z&oU#eFJMwyz-&@>!klJ)IK-wn^Yt&x$9|%GYkg-A8kNs;Cy64StN1(XVl*_LXPy9l zyHbJ`5`4d#1j{729B7r+%=!v~6v{f5a&ASqW=XhW>YPXxH3D<E#@i4~S5jcPV3L%Y zfh}}^I*w*RxMCV;V7f}5;ih-NVp<gJjT(ZtD{yCd1Xe{HS&?T(a=C*Tt}((DrQo9@ zNkL+rc2lI8k(A^VNCnT474Yw~%W!b9SM1<C*eSH8hAV=gKzd5mckm-Ex~seDU#&iu z!CjO!*qKWch&`SL>70K)or7cF^G<TAit7hP-#^g*#PrSl#=Nd(`{`NM8s69`L*AuT zf-|LxNq@YxOGHYA6vEl4&ljHJ)bMXjD519*+1--ag55MAh~chhL*ns_`>&KixA70? zWa<STbGDxd&MnINY{mPWX{OTg)tP<6B6ZX(U+RFTu|RC3i34k)yUOEL=UjMX_h+Qp zeITT|b>tQ01(&L8*tgEWr}<gt>>S!1C8Q(E_Unt=z7a?{EL)QiN$at%eHN3@LSukX zguQ2&Tp53=7et84)DE?1|9QflTEve{D3HRF4@ZnvB!}X`@|Y2RrCB2=({DTHzxe48 z`at;;$w3)>H|Ge>9PQV}DqVR#Eowfs<3f1DGj)Gq*=4B+Gjb<cRpe3~>D&l__z5~= zfr|T^8&~9(6E&`3y4UKd(^LV=q+T4vMgJ$tIs9|7zM8YsX-%s7{et;ibTM|&O=#D3 z{K%~5n7^?RpK#NBr;MdHF6Qs-cm6<k`_<zW$Z`f++=;Wds|qufo8^**wqUe+rZ{i% zq5Iha<BM~p6T00cmVPeXd@(uVtt~z1wgsHOv$i_}k1|hG+RU!$=dBaseE(_pySajX zZD4P+yO1d^(Vid~smoC$WXdpxOPTb4Wl2hZ@)OlPD#Rslq>L>)zc4i-yLn7iuQ6!w zl(~tY`DLu4KU3fB*QuY(wen-;@136q{uO+%3fw>6OUGKQV|L7E9hm-a{jqU=8u7o* zPv!67`HlFycE0EzFX)W)neWq-i03FUewO^h{A{<gv+MihoF1N=a5bFXZ>`H2JMcfX zkj{(OaXv{%`M0yBj&!s+?NmpTt3Bf}2RBxY8J0vq?t}?9k^pYDoR1iZ!f<)HadLR? z(XwB0;a0}tQY0{HQ-~m1ac|sV+&w=vR1CdeE(II3LeLN~HX;8(OrIG+MN|b?>>5{A zdp!4~DTUDg;fPVBi?+W9>(5}OhsXb`sQ03pP=Q$P{<9VJUuO#SbH{~!YtQK^86cHS zebz&PCCy!fBkD;J<OZyEfhF15UU5q5t+z2|b3kf=;9BDPC6%U#3BYRqhJw4kNwXn3 zL}|ePtfGy{`e%y%vGmX5`X|aywIMKw;9lM=LYORH#<as)uLHDduQQuCtRZVX{7c9b zMmKu$69NqCeCro3-J4I25g`I+1B{h^N}$NQG(Y`I*rArMZB()gML$QndF|~)0ea+G zdDlpc9Gu5JU!AU&XN~&ikZ$IxQNR<{dM;}UDzki7Q+J$2+rM?T472uY+fe0L?sE0x zyA=i~(TV|p&iIoZ{y=OC!5%EsA0mUeK)Db`T@g>m5l;IKmBuWe&{>d|(G;pe+$U^7 zkVkjIzL9OkX8z>$EQ%A(P!265Va(?tt}gQ~%t_8AV%&}Oenn8&<3Y<ZRP+KmsMm}P z##fn~P|e4{pZb`j(XxGI=#b-6e$3pQ-5cZ#a1!f)&iVU%2Z`bQ3HLY<w-ZiLe6;=U zws1xaAb)3fKd`*H*E^ieD(U7U+OnQ0y#^@nAQKKOcdhATF{h6efaU9@;L2G6J_+c{ zman@4c}u2adH0Uf!_D$}b;6Q~W4*<bCsiBg^Bo*BVG<eA304_x`RiHSUFwN}Am-b4 zmN2Rprj>Ct=Xfp@{d^X242drJ);n2cB+R$|n-!4^;R<iSie$|pEOJ$ZraexWE7xXM z*<TW7hMmaNygDG4qT%o;fA~P^xcpuR%-J7-*WdL3w^!w6?G`r4NXbn6+kk;)B<&J# z&c23TED+-&GtvUFZqEL18-av>Yi>pkb`ik4=V?GwIzIr3!x_)DSOX-;BBI$jP`U^b z^~wEm<9}_GP4SVH+^9Z3r(#_AWSTrW5lbzn_v4fk<ASzBxw595gfM2=S)76!TF`Le zgCVmORv|k_MiTE|wWgoDvgJuhU$^-V|EO_nRz)UDRl+CRnX@lLw_N6>C~AGO+PI5! z*U<bl?i~c_xuWebS_bh2&H>=8%bbs4hxwovFu6IY`X>)Q<X@hOH2l+tuKZI{k6Uv& z6@{EL$C29~$!0&xmYtH<+TrXk8BEeRV(E2s+EQmblO7l<SE)MgXx&iRw{Iq^lffxE zEj-jqXWCtMe6X)N!8yHc{24blYU~HK82NUi(dis`#33$fw4)X>(S`ZS*-1^zn5cgf zvjVk$i0eO5<1qQ<A&fw;?dGgeB=tx0Uy-e^Z<skUg}JQ%ps~o>qvXA=FYk0?9}*)2 zBL2<y8u&v=BQ=>)RGqihz8r0T_F0k^gQ=Kp3u7ZsdkAekx3Rx&jew0*NVQ|>-#(#O zvpnNWtKQZWtlm4bdo(O}F3Bm^GG%4~OCEC_-wyyzP_ArdpJ7b0e|)zA)kAgefhxB; z<A@?@TnJf3u_v^O8%r-?Qcl)cI6I|{Kz|3BvPBKD);KGXJ)-8;W{4!NS9rRdmRZK` zMDmHk)BFciuGP*;jz|V#|IPZZ>W(+y66BEXcU9839N6zw8T$E1RZ1`o4NDRYJ+h)K zn8C;Y_!!AAqSupuWJR7zv4D?)BP+b>L&hV?GgNYVuS&i|Cr?u;;F2UyRUd3tNb*K1 zIa+{9jtcF`SN9JeZVpA!TeAjJ=6ax<JobOc+yu9VrSRH`yqsw+Xxk*RG1z2IYdJEm z>8}nsytjrbG$f@erJEV4MQQ**5&4?Teo4nuDLnXT{L>WfrT;2bNB?V;+=>YE=AAf= zThmA$_AEHJg3`k^zxl%zSKH_Ej9pw+dYD{fzCT^ML_to)5o0)5W&9Rvw6~s)_CFYP z{5TU4gcX<B>;8$5aivR7jjXFe=FFD~W?`lQKDEdbLSzB<8#ILXrm_aBq(Wc<4Ic<J zk8>q%>>&L{%23O&DsBo?rF4aypGgd%pQb0*lA%>Z`A!Ek_WY=?h=O@?!i;>1cB}^U zDW(A#(B9hf;`?33MWm`9&##lRAR2syd`IvT$NS+D8}pS=&gldCLrgyIfZqCcgQ0O1 zsmau{r3kUDwJ)Kesi||S_=s;$#Y96}<egCJoiy3YobnU<!7U`uBGK4HJ*zgF^39yu zov33iUDp5z+%E~^A>c=TDB-gfB6oX2h|JOt9!3~hUpW)_jms<iH@mK7o0H0Z7%dF$ z9np>X6j%zaisZp=x1cIu4uUz}j^jzD>`5KcQB8iv(5CEeazWhf%rdQt5$=X9#KqD# zuaL$`Kcs$qUCI7CTU_=Gj6n8Z-%517MkJ%)6V0j87Lb9`#hzjx*{twR*LYvhcsH~- z1K#!*3f=)pc;6-&cwZO1o17uvBR4P=v=pNUN+!mYObIfre%P0mSu|EUVL>H5P)4b> z9vaZxsZX^18mv8?%LuE!NCkT^yxm^BI$SZHJR69W-ks-y7i$AW+~DDL!ArvxQ%J4t z7QBM$g4cyB#sJ>zA`!1|N#>Nec_eOSajhm|+DNjR>`e*RtO-|?VBP?gm|z6O$Ki^x ze2OW>S>158I#-x5u@ir1Rio{&LZ#xIhgOh3vBCjTBamx>5I#h>{9woWHS6Wh3bNJr zH?hbDVmBg*e^qveMhq?-OZ3`+9A2g6urPM$d@Y8BVIqcw75VeE6c%n3%-2F#crkRo zmchaRNh_7gpRYx*)V^T8mcUZGq4Tu>mNt{LJ5^d;?hZ*Sw{<wm1C?q|F%TQ@TfoBW zQp={1kCD916}4*SI23XMu_?&D>r<*4b>l96MrcD-BX8hRxsf0KwT1cQKoq^Wo*(rc zZzl3Lv)3om`EyqfkbdHO7F&_s^fpGFUKC!TVttv-dWf%iW6*n&igQJYF?d6)<vavg z_zg8QIRDU8jYLq^q=~k+4N<?CqEPFu0y(-{xF*Gw>d5qiM~uG_%PRfpCNe)%aE2m% z4KpcY;8hSL3Zjq;bRl~Gi%8PUpg2@Q)|q#LhNkWWnj=PUKFWga!uyV5BVzJt2~>1% zR>3I*p{W}waB}uKmY#4;T7sZTXqX5M`I?45oKC}E{*jOYr<y7njy4e)z#GEQ!ZxxQ zd6U&z_!uYpn~KsF^$kd)ERpOo&tj`zAm6cf;<oxn`ApdAZTrn-Vynl2kh`9jqv!O2 z?4wwm=p*!KR#|^quSDZ>A1hV`p#(bvszw8b9r$~K*ddzO>lLx~g}8u)3*9LiBbFIC zfS}QatS^SdSH52W69K)3U$@`naDjxip0XYxlNeu0DDBEn;kZ;%PgR%&8|FN#h?Uf3 z&@3j*jp4nk!z;!U^CJ*zMR;$X3tk*vQ40953--F;rQsD*0RQBIGhFbx@QN{je|EuX zE_g|J#Z<t*xZqS5ydb<{8sH-?xRD0e;5=+ictwelTSOlvx?c7i<72Vj+B<f1ud+|F z-Br22G1qun#!`6>ZoS&PqpKXoJkr3fdH?Io>MtU<<dx^~erqi|%iJZl)>_qkpkK}W zt|EnYgN#^Ply-#Pk(u9?@e4a<R*50I+2LN>@NW#~*`ZT(C=!nDg$Rl)rAVcz%hCSc zP^BqSx@&w-@epo2<$!;0u0S&8T<Ls$xFQ?TDr{Epxb@nd5rlIJ9v9p0lpw5A@c5h{ z!rza&2`*^_T+DK_((RpN`IQEn&e4AQaGONTP0nL1LFjnz8cO;+^fpVl4N0$AD?RF< z!*$$976vI#fpb6F5jB4NMVKthI8|+CTjW72YUosw*yr&I2}@W8`aF3OoWV@s^Uy8L z@-Mzq*w&MGinEyy>;|I5AXM*6n43^_29g4~)g_ftZ8Z%nueV8A#`y~7>nuOZ>kU$t z(Ne=R6<j?}f>{Y2sI7(@>c?m$KivOqglM#kG`=_|&0j1~=tEwNPEPF+YN;GwKvo{t z9iDiDLH_AOYAjZobDCgiwbrPYy@l|0NB3K6a*k9U>wsL{je&>vy)70+nfI*b(eIV9 z)R!2z)+Z?yU02#yj}+8kC3+yya#F0??&Lyy0-du8u^vl*lpi?Vr6SH`ITR%Kn|+y$ z(I?fFG}o*-Ox;cyDF#4`XJ7*1RXyYCm(xg9c5jLj%ue7()qJII3GU2y_?e$7whLp= zzok&)4^k+1@@2va?`t^}0;)+Q2ajF_(_n3IOqOb>HU~19rZRNF-uPl*iY|Bp1&jK3 zE5}gnK+1M;gUo>*v6N&u6KkdU^JD_Jw6U51UISHw3Bbz)Fv|Irm720IRRo=TRJe@Z zp)4o;O3cUw=hCxgU)@MUZW@Nm`LhLbJCa|lD}{s1$m^LpTueBNi9q1~BD4Gxda=|N zj{ompisSdg3O_aXy_+KE1sd!F)4p}swd_u>CPeuxl9BpRk309BY|QF^2y?SsPd8`n z7MmIkJ_=5)l)MYLX~uE@-I-j4WKL$Mz2>h8%-uBR&R~Xz^~Y%H&!;AgfXn&_>An+n zUYNP7E_1XP-x}YVHOjSd&GySGIr>hP@GU>8&0C4=@4T+Ee?<1W%nQitT+TQawqU&4 zLMM3b1D7W+df<sRXnlGbZ}P2Ym8GmGn!6JV6ka*(6R)te>6i*~r6t@-W~dxNF)VFH zjn4U4B;s`O6*k`a8tKZ_QQOlKjo}X|vgH%??d6NPHVQtJE!hA%WDj@%#~cAekG`0% zDM*zRver}{?{IW~P6eZ{>sp9DYXwBRM?CB)kP;sho9ns@9iN_}x?3EFWt;SdNg*@x zRcq-t<K2D}nu3u8i0UgrEIrM1csQ2-XBw+fdi-6K;{QUrO4HwroIFb~$d!A647%Km z{Mp4Y+>f&zrfGp27rWQ;b<Z0{Z-L<7*pgE{?{Ww{jl1-`atu56{Ff8`qouBgK|RpA z{CCjWCsWN?_X#J(IZ4q_0>06M3x}KKV}!==N&F#JomA0jcKa$UTZ{OL>)+OfnR`S< zpLyIfk6J_)sZrD)MFPlRA<_7NF%s-z&N_=IfOIE-4+*dhpL5mcZG4*L1IZSM@<b9l zpwT?J+qoL^PNCI|iatXMKOSe)3h5iVq$jce8m>7nT+yA0j6+7OO%hwT;hGLQVwZ|Y zZ1r~4;ICY8e6GyW;N317q=P%@o}(jb-1K=a_!14?qtlo1qaxVwMFR-eNGYfY5Vn^n zSr@qle9foxE+!@PuX)0@CNwzV3JKqhs3BY?;d__`-8s3h(%A&B*1}v(=|@nB78X~x zTyR{kiYrhqSTv;5v^iI`5`9AO#Pu^599P6#jccz97UfFOLyIYT=I3$c2Q?wQ*U)O9 z*7x89Ls_Rlk=Q}i>QjhDBF7ir0@zvYkn82AyF-4Q=rgKLqnFiBZ`CalniE3V6W5#; z;DXrs0<(k+oYd<WlBOO+CgDNuP#u<UM((3*SCo%NlcAse^Bs3U?LBdZ0hN0N<|KP0 z=;M>t5|SYp{`;#8sI6*97bz(oS<Lid&TdW%y2Cdz7md=K^{6|o$l$&g@nFspbG)Px ziY|d731jdt--hXf0eF@<>r>YV(xnK2JcpVxUu=6uXkXbz*}buaHpUA}P6g9M@{LpO z`SH?oZHoOmKC%Y&IvLu^sG8hLmUHUpYx<1WR1eFbV@W-}|FwI=$>m=1IXxf~(fa5K z5yqL-m>yBHhFvYd>`oxFpSwW>MEVyh#`h*jn5!C0QWpvydCyuZHv$)H_quW|RBT2J zw@F4Ib?%eBAT8rA)=kpxpKg=f2;SezxW8c~vR6HyXp$}@qbePbOOtGt#!$NrDQE%i zSYn5@f2#DoOhj*B(S2N@8aJVMOm!qnI(86moh1B?AnKl8uc-_;UTfP%Dh=zRY1m6s zV^7zeI(6#khK_4lA@MJ0TN^5!jH4^c%4k@WqFA7jwGH*9GS9P3y<Hs$Z*Ls96a?ZN z<b|q8>LE($A+vo(pm>FUacL==Y#KVIxVQvs-Lt7Om`N!E27-79u_Be#C|IkH^iNe= zNEvKl($W6^P=>;CD~<9y0yhbPo=xo3PAwTDwHG3VMrJ=TO+aQ_O{Vp-qE{(rP$b-f zqV1X@t)@lWXS8JM6>Tlv$F}{QRJ{Lt?6kgR{+T|piRHX(OQoBU=iE`chK;MQU2scW z=`m~|y>dQ6^PzpZ2Zitvc(jEcD%azcaAv#*O*hLgCB1MWgG}d>NsiP;`jb(Ssnp0^ zzEC0UW2!?hJm`hK^nWpzLZ)-HySqk-wl8SG@>(r#u)MBN9U6^!<a5wH3w38HGla)k zxJL={JQ3IrPz7_A7qN&4A1shOAg(wsznHMw1&1l|85fS>z2}8jbY}^x#W`XV46dN> zpkv|!IxdO3YOt2G7_{BgSsJY6KX_yg(-X!yIwmgB^IY&H8Z4cw!OYNE&0%|`7&WQY zudiheb6z?m1KxKM1}^JPRy+JBlqF&GU8s#kIO|11%v;2g548qUcAfoLkt~JG^7gb8 zJP^94JGmrw8ItWh#Y%&Z^~7X5hxfzO<6;{`TWCcq@<0Sy7d{}FWr(Oz5&Pbhh&4n2 zqKlGtg#!H#5Fh{G!+DEveIY&dMozDq-!06=E>J(6$V^hrQr+2=G)q5)Y^EvyMVaNd z5_XXmIz5qDbhdK(c@h0zEK^7@y3}nf0%6mifBC)OvR=+Aqo)3$cG@$tH}$fT>v4T^ zEIG({+s`7yHu-P%kJgIXD&7$&LQxZr&I?E#)6e~@+yJSdwv!2oc=ZQS{T>$^70*Q+ z>7Rz6%Y$4f?7dLY(**1dq;ol~7oX9bpH<O&e^TO84Ry6CU&-c(6x&sbO<_I80?m0x zfE>Vn9X{7E4qVB-g>Oi^{U1_6>hT;ne=oVeYl`G<u8Zb9SSeSOe&5}?=$mh+&Ut3} zdciBo>HF6a@Qock0VO-gP?AA@XJC1EeNJH9hh8uJ?L3%D-@6cO{^iI-MA6l3bWAM` zvMIuja(YK82Y>nUv&ef{Pw$wiCD&9LE%+AruRnE{YkM)@p2M=V=?{(0pA$73pk!Hk zgdbJ2B_#iS&C;c2J)c%gjrpDjld4&6jMU27d9pEvRCCrZbVH`{oBjs-nxn74%I3m4 z-FrHyvV5Z?(;0Tz=Qp8{Pv$0Ct_KMrybHz2#CMDTR^4fyq7)ct*pmh*g`z!{MtaD2 z@}oEONB{o;QA&GFq62~8yTc8;hkto{_-NmmRMaYxkaFpdswk@P9{@!-++HGj7(STs zeVpFvFSLian$dgGvIoybHe2uqF&@coyqz9Lskh-LDRf(SA86`F&JZy?Xhq<&d5Sy} z)+nYAps?RF{RObvOP)&bqk|^0ohDK*cG{ZdWxJ6h3vM}EEwSzE3&coTS$V=R7p(GE z?nw)O-Pq5frjD|jRmwisC^QvD*O2{QMtACVDkcu%sr~XF8}bR&s;$s)6*R;L@=K&4 z>9dFEOq-mC5u2{mxXZbelYednf6*1}jxweySVFGfS8!n}$ag%Ms9+zB{3?*s;G;xF zTx`yo_myhyRQu6<0>0~u3JMrRGAZKD)gH~eZb$lGD2Ls)(LPvkYWSg2KdK+!{zJ)? zqMP_BwMZYfzn!w<6<a|%Dz@YYRkrgwa?-8LlvfqLF?4EGnHNa;`^xOcd}F8U%EWSm zf=vzndo)5d_&I5_X_qus|E3Ul=mo{~!qW+y2PS;t^lvhl-aOFAsZgET{veiMRHi1j zmBuZXHJ!s4S=^>5b>=bl+>f!&Gx}pa9eJ!Xc9V*ck5XqO9}sfgL`6u&56PTT2NyCS zWvQsr_T`kWud*vU#<Qe_Td{+x8{D)*X$)SONZK^5pGf*U->GRU_t3wRCeA`Ss7$QY z$E5Jw8$U>j%XZ`bspGCnj%)44J*DG1B**<i&k&rY#5w=k2aDbFwuNk-;ehCR+Hyro z+3{|3uCEK#ItBtnpL0lFsC~g^4{KXls5wL7S$OY`@QPusncnG`43XL1Igl98C9kM1 z(uba+x=85YnYu_dCLMc!ls*^p4LjhK4kD5{_c~J3-{lyQdY|C^op8prmpvnSX8Bb+ zy-JT}W^}4CWUzVE8!KD-rHD8l_;hn*aAX+;`j}FuIVr4^!*)cH@<nKLrm|uoeA~-} zJ(5Waq|TcDM?j|N|KEW#(ce^Pxdi&-Q|pr?qb{?*S7Szv*K~8%A$kL%lR5pUy)I8E zpP}4hPq*LWYkn%{#@N|gj9p6<YEgWVu@E)+eZ|Cc^{}`M+>7glEn4aak0%Pw)CIRv z1#gq>blfY~1=~oGH&Y1ndLV^I6@bf4D9#%HS>b+|AB?Neyy<%vz3jAUc^>s$1WjVr zsKHrKN`5SmhfsNpEUvidkwn2W<Oj_YwNmwMRI$0e{y%iSdok!zm#mjy@T*_ckHU#g zIs(NVlEsdP4^j=2R1c7fa3^V!`v|*DGL>(}W-ULeNjg#B@1;(#u7}5d-cp>2<({gI zOP!w)?sO?7b#RD%o8T2`*{v^Krv~XWBh@8Fj;Pg$V?(uSX`F9fS7V<|s(|mN!9#Dv zvdqH8oHc?b0x~pzINmeIyvw4pvpH)vQ2+-GyUC37(BXjvH<RE75}4(qB@c|j8v5xe zu_J$DzuN~j)m*p+zMl0BqC@r(v9HtO;%3U%2l}~>Rnwr|Kb(_j_x4i3nD1;=yRH6P zZgEbyR$4f?OwD5HAHr0{u|xaM#Ib&mVwWW0{Fr3mT;V8=sZNXrap`uE(*yM(V`hyO zWQ(Q7V3WuC+*+GL71DqB6W6{{tI1prj(koRN_2h-F9X>v{8mN31caUC4s3p`P{Mqz zs-Immn`PI-$5rdEVrV;)x2f<85-uj}_JrxWUV8wmdbK-az3w?ly<(t@56&MQRj>WF zs#ikg9wL}U{p{(JR@S!B0)R|8Y1q1Bf%IN$&BtEDM3W!8(<o{@HfvN-tiKp7zj{_$ z)b~7?RTb2@;o6<Kpm&yfB!H&g`x|r^Npwumblj!r*jg~Bcb544fBjz!mOhk`IEP6S z?s{GdNIyc2RaLXe`}<D+s1)(qtVC6t=pyRA(^W-Lbe>IKi9M|c<-fr0T&gwv3n{`m z#d({=nv#L<P61!gj868aGE^$reP>eGDv)2-31mmOVi=H30;vLW^b2;!rj6(8`)|~` zEl=uTJV<k43#WTJ{S&isUuSbdWh!#26CZ<}#fguB&bx_^d}m(b<1*)&#K%x)79T7X znO`ZgnmU=0$EC>iYM0AcEwy|Az<g{yH!zXsY*dHloLkTq;CF|&RD)K1*RVnDg7O4& z-y)Jmf9+ev-1<EjXXdxA=>mh-SX4iA_T@+sS+B_kQ)}34&dP8hvLW?%G&W@{8_ro6 zTE|(VPbIy?Vwg7X#9*SBYfmR-aU?;?1)7v|6e-&hq_ksJ1I2EQ;@GzhYa?fH?b0MP z+ekoB>-XvI60S2iLQD;u_s|@4f8<Ea(Ep#-C+A_RFrTv(50XdD!Dg`firbqIt;gsd zEWfn1Er|DU>^G^h|AqTY82^SW<lg}W@^e6-KQi+a5d7CmO?)@`i;4h!qd*^O&;Wlw zK%Xkm8-VyYB1ry1SlB8?rgc<8!g7{cF4gFh(&cxc=4s7hgoNbyG`;16XJppx{5DKu zE49WMP4Arx<)Rv9JH0=y*At7K9*K{;oKA_4iB2XTP;!${B4>y>T3Nz$`v`)P+ZFTy z3YyOcuws6Q9$O?=er6K|Nj$;g>mpT}wFx;WI?ohdIm%Fn7a--RFwvc-y!`&iXBRtA zc1mW_BYbpqULqg+qVO!=FLTqfH>Bippw14lyvB@cfxz+0_>qI4(e`;5d8qLkryF{d znibD}M+zUtlYHvdSNf5sr0vcDlr8(s)=2hlhUM~`5gq2UMz%8-4)c$*MxKwv>_6wa z3;4+buYHum_S)3xampP02eyJzX%F_m%6Dvlq@C=l3xMs|@{a{@8w#rcWS^}AV|H3= z`C>=6{B4Qe#xNCtpRKn~+%V?B@|Z;a6CQG%hd0WwWtV=_!!u0o-riPd{m7A?m-yzQ z+C%*0Y%H{Fd+%RlUAW3xiEh(qeoF8fakWOh3ee38a0<}<Yp<uWmepcPdEA-ON^?Pl z-2F)M-;am2oShVx1z!7eu33;dt@ghRnuxR&{zH_f@Vq1k8tUo8vOXT}d!X)JUGKu* zEdL)F0%6`eRAnf;f51Aiyp@1)o0w)VdlX%nLkN&qZNCLG@rpr-tAqcOv&{1!Ii;V; zTkgq_9Ae<bh||u#ShAH@;Pga*-r%+JZj(0<lY?hCt8Z6?Z)hAd{vZORXB~zYI~`Pl zJD9OpaH+?2cH6rj#*oEa^*+Dy($Qq_I#+Sr$j&9bqBr5sDVjSG`-6D=MV`TW-xxln zK}whQ08pE)(nr%*?C~OeMzx^^;?&~PoQ?LjiQ1I75CKibE@B6{RM#PRLD}>+-PsiW z>6ad!P-R)4?x9_^ixd7JNPb+F=q;rJ)rLb@{zZ*#gsP1#?zb2!D@FWQ!0!hBr7W%| zyiY2%$eW}IiO93C%Y<t6zLV5mxz(Kv4a_e>rFvMZ{p|n(U2C~bX|=xxB=YvsuR6J6 zzEPlZ$ZNBKVjh1+Bj*X99rmn;xVTxBdOj3h>Xt2ht_G}2>I~G3{8dWgh|)(wihZtB zQRrC7J{K{HpJg)?ceea2l)VZxnm(q+%Xq(+wZISMAN$RMb#ORzuU;RvCxv7&BeH^v zrhkAfK(#nc5qXbDIQ=xZm>vG4e%eR*vBycBihZ-iazG7uOl92+Ae^J;I6WO9&lAlY zM`Za%4jdQz?jRV5We*k%)>rZ<-Yb$^+-~Vtj{LX9-#Mb7t~!|_!~RWJAPHkeYvB6k zRnqvQy?^`(ip~e2(_INT->UZFsO(#o>QsQxc0%%xw~UvPmTN%E_;Fq#^;|?%TYQDK z>)qWfKMA00Mkbp2PlQ}OEb4oU?DjkHrdWx;5-BF?ds^Usmx@#yGvh_XeD|m#4r=n> zeGt)XjF4Ej76XZPYax8117m>F2=ho*`y3p&m^3QCJU(%cLUER$!1ri<IYuKXhjZO7 z#JODU;rnV2%gOSC_DUg)`-6Ns?IdcE`{>;@AEwa#7GJ6uVtn}(Q~x5b_~zrOYu4VM z2*5JdY4{lZ&NVdsXO~ytA1Qc=ciM!BW7$wMD)^qt%h^P|rJ|;e<@IZx$_6kG0Po-Z z2nF9zLoFW?{)NN_8a0MVu4s0*-90>I(>q^Ko!3R0%ADO8B6$(CGipq`zrnrYwoeCA z*2=}<GD#4?d9}5FCb|X=!1n++G!x5tT?&ur@R1iV3-%KqsN9cJJf6a^26w?mPIvIn z{Kj)g)IKH=&peqL-v%mAmJaS#xu;2Z@A77Ac@woZFJ4aN0bYpX$)~2)mRQRz;PzDR zYtrn~W?QWBU3fn2`v<tQU2Uzjza~I+BD=bKj&ABWiW9x3J@DxECx%Pq!Hh!dXKsAw zTX%MusZJX5%uq(?PLzTt;6ssB8O`CwMr!QOYWHz#$HVozk6Xzc-+kN~i2YG+wti-9 z>#xgumc<w94RlG-8u4rLp!0c;L0{qgH(zo9sYxTQ+AS<)oO;;t${euV`%y?@I|# z5r>LfYs)@M>GdmD&V(KNEB7^?xi*U+@3u-!oz^f{`YXoWb9Zr0Uaohg5sxnEn*%_< z!zC(+t|!9AUf+Y4FV(xBRrV^v>fO)l)U%(mZba`o)iRjDbbe}5h^um;G2s)&v_3Gg z@0Z;@&X+O<=jPNg!#cYptoo0+AkcYPH&04lVAH|yw^*<)Fb8aPde_HeNJ$|##irSV zRhboj>$)!atncKo0Xkq^Van>RJNzlz6v?xPsfy7BjgNP-W{uw2#o5kqsh_`3?=R)+ ziKVA{V575&u%?T*R2T9wH~ei=ru^`!M!YU`GAOTDSwC_7BNbiiRAVzD@>Xs{Mn0l@ z%iMUY0&o&}97&dViebL;S{|2&<^r^?^iu~#1YegD**K>)h6dUJpd&!pzU3+p54-N* zlU`g$njtBn-3aaqNq~PDl{vH1mpweoDUAv0C%fc+<=H9{lO~KBkL>VrL#2WpTGl6l znI}%71DH>ql8>nG0hK@Z-=jq+<q4>LD?oO~6(V8M`zdR%@0lIHKNDb17aOS*scfWE zNP;Ap@P*h&LF@&~5;;F&-yTAGH>M?ckI!fgxVC3}{6#ZURQdg=V`bpd^x6Yd$}+x} zA0EsSLZ3PZW(M$RWiA*Y)z1ihoU_wqBMOIpiawgY0fRvK$B%wvmr<IUH+k0+*drTb z(;LZ5Js75FHOY*;EOnR3x!V3Q2)KBqzwDvZx*iyIBqo-*X@?BdZxu)FvlYhB*}Mw^ z*!7eFtIWtBs9rSl0;();f_31FiG7Le+S(JqTWwqg1@g~HRsB6`{OL3d=Sk&axtHHe zh4DYTGtmljzNZylst~#3+f0~L=`Y5kt<`p!M8(p(>P?@++f@Ud?f~;%DxK6u>qtd0 ztGBsr^bmNLhzC-8aVc$dhZ-9BilRLb8n6!kpU*f3inDLWFtJ3ONOL6Nt+Fy0l3&UF zhejwq9G=MYRLh%=fv$%GDf`2|hbS{8a4s5I&2PNmnPJ$=h4a!<7;cTjwW88|#Rx7x z@JOp@`;C0d?#&}~uqtkaSee^_;9p^hEcD{z7jPwDNr3<V=b<?2n-3t~lk*ANBbN)K za@UU(9{QS5FC7gJd#k8)-z!pO-+SB6$is_iel@G=em;j(B%Zldc(_EA5a(iOQu2#o z*;SEg|7EIbxIYL1w@bL%XhT^35%jo0=fDZcDP;e+UzjO9rw7TM%|!5?oI6;b8b%2W zp3Nj;L84!#spg|f4xboHRR{|#nW9GZudt5yIk&1jzPT!o{ly=pKfXzv{8MbC)EPuB ztD_F~kHoVi;M^?H)yDNi$k?v6sM8=mWUQ<vjWkyZvu|bqpp#9B;+VO3lhyu4a2KWQ zE#FCVnB@y8J=Q-Zys}YMqaK0cpBNatV@ncV<)}(c_1MRRE7JVNL5H?47bc2Y+*1*H z3d4c?Q~k@SVy#_m>~~?#LOyBHQzKN1UbQ{mqS5xlKxL0xDz`pY*{7!P^4ZmPU%EC` zol6v%K7KBq+M@kQDP~8;(M$|jH0#@2*qj*7w!`TosiR<t<vvb4{XmZ??!RnyN77|r z*CS~PrQUvr(?)14&b$Vi1J)+^;v7T-C|*k~A0rj)4t;5lQdA;#pSPj?Pr?=Uzp0w) zrKA-{r_X#O;Pjt0kp@JZfy771n>5&WZ&n?3`z9d~Jes@>lcgWLicvuRITJA*B-U5T z-~Vz?YcwhKa#~>K_gyl?Q$qa%Z;`Ba0A#n!m<E2{#_|Sp0-P@vFpJ$Qlt%?7W3zlj z6F53^l_1b6v3guojgzQx4^+vN)QBE0Li}xhtBv(QrPtwC{5wrxPF<OA#MU039(m@o z)s}AwU~Pu2vnOLr@QL{0<#97Io%scyEFj>mwhWpwy93$q!Eko{((bQRogNqDlGb>h z5#Twvf*g5jkPTusy>pHf<ZK*deXr(UHQn4+7ugxSv+M-Z!hfKu?8LR$zf_=`8L<dN zjh{A3H9{8`S#7iIgR~?EV9f=18f%+%B!5UsUMSsMurgdx7C!dKw6_`0;PuZrKdVsr zkr(`-dHEcbZ;3~Vo}j{gM36T((x<2}i?m*9I?5fsMS9WyEsReSz#@Jv_f1{oZ`ns} zl#*yh?f_jh_Y$xx`!%;#FCQeUxI$jtRaLl@DhTmZqqd3AyOL?QjZ`HqbU1>y$<<PS z%zrGXdJvQsO<Hq4v%ImeBmIR9n*Dc(E5|nhp(twSjVt7WMa&o7O#3lSdh8DXI4jkJ zlSdDzHa3%&9JKvs`*ho*t}<kt<0?@ZQHtto2U&ZCf6hoET|Gi-(`}ITt%CP$2v;;_ z^zI(KjFq5w8U0MC!Xv8~h^jk#9+jIaQkAE2DM<GL=Y%R#YT6pnG#9q1URCS9D^qP; z1hw+7+VHy6I=7RjclXdA$aIz`)OPV5cc@%vaRV1G-fq9Yf4%DW<&TqB_z3px(94kT zIfOPwf7%q6Pto?}Vs?6AksA6RtGxnW^9{dO#AZ!uFz&xwuf~1N=Q8d&1jP!fu1pqE zAInT%V14csA!_|dY3DM<syw+Ack>2{kNVEz$Nt9?P$Z*sG=qw(=4tj%7uMAcDi_Dw z!Cbou<rT(m$GDhQ+f2`UiGGq1u-1ouD2(02V@sPtX_1Ohs=ulUz1Q|H62%kV2P%)H zbr#(&aCEh>As-Vd?}zX{Q|vLdB-+?<edjX%1sx`vSo)oRLdDo0S22K$Y=mPE{Qu;6 zs@&7Ef$;9e?)Hp5jWejuJk8XdH!7yK-B>S9rEh0<`<hzz#h(_~?dO!>|KRiAGd3Gc z@%^QziN}alw*}cIBSdwa@R}6=(Q4stzL|f_87ebw%=ZR7)SY}CHp~2|kwS4w0sjxx z#TVyi^Z{hvGQI-Q%pPElrcVGE?bpSsVxs}eC<7?Js_enejd@(v>enTd)*^idDMDAH zoL;$JDwW%pVzh!9x<`AmU850x^%)3_E~HY2>|21fUzhX>`Z&ZjBbQZWzkRQAP=ny{ zT?Yf~jeIxkD~N6BD_-WYh7pV)iD;@P;RkL|9R4?@#kH=__Q2ge|5Mz3X09rA7$h-c zC2ynIpHpO<yO$FWDcwGmKI?p^8qYV2{WrT8shDh<OP%t%IJxvl`yY6m3Hzp!nBj8? zOqX$rMCzb}X8~<XPz_m;?;=*5PC)8kw+ersC$>><!1^v}a#OZj`+02H$lw<~XWeV9 z7O%9CpFzOJIlW~qP`3SAd`7L$JrD@*I~1@!L9Dlp@<`>%Gj(8|=FQD%(0zyL?z=;} zZ+Isf@+a8X3VGUa)<o4txt#|op59Jbah^U{15ab(><RxJ&$veheZQ@1xc6hvpeMk` zZ$9yAErqtCr)(jaT9bVV*>+!E*gf4gosUe$rlD-pa^zZ`TxA^~>e;>^o@sB*@^VhN z7q-YfLSoc-5R}o(|4KPgUpZ)_qq<nz%f9(hUU=PZZ=wuy;ZNv{IkXj`L_NAp($PY} z(z~Vo?jkeZgZ`*wjPH-aQ7l_siHnP#sByO{p#4MGO$14V`q&qf0<~^Dh+)QyPe~Ph zhd=p!2b&}*L|4;X_?#r9T(eg7v0v$9bM0$|7s_^yM?Fav&73F6s%db#dHI1NYYJw} z@tict>k=K>#g8cO!h2`Jgp}0*oN>V31)uitNGo$&Z(>%vLXKg0?G+G7b?+t0ZbG<_ zy_R+?>qi49vJNX*Wxq0x2p%twjMeR)Jy5m#IMT%1{jsk=@Z7&uRc}WQQh}ytsA`yc zB&|`tS*xnL>tk2-vv-y#a=u(A?N6y{f@6M<`Eo#NZ-zqk(zrXH7DdO3bEKNWUaQRV zRx%o+zIl@O1bOqVy<Bdrwx1`HwA4Z7y{K;~Wue4w#9Ab>Z5=hTAEs1VYMJnYqfghX z+RXtE+PSKrz2pN-<HHBjj!!?y+`!eLtL2nTPYCl;hX(TERnWxSvawW9%nrWeYov}h z-|pNE8M1rgRohyH?5K2;rntfx2L1K+2HzK-P>tRYR!BMR`c+}P&W{>(U_n9$AE9f% zPYN~r{YDokvb;rB=a&IFYY-qV9{csNs%GE74r&%ER5g2#RJz?P-lzDNYO`ywg+b-8 zk5%_PeNnMan&M`qYm`Zc)4e2?n+3vn4=DQ*f}hdYZjCBzhQ`)_J2OEQm!|vHsOJBw zTJ`j<46u0pS^oqSt&Qqwjkdo)O3?nE($_Ma5Y%cZNyT4UOT|yXK>LGYRpZ0bk@Sk` z)h9fj!HFhw0+Osbj7h8~0^vt9QtxjOh)(Nf9SZcS3O3<+Y_;AUc?A!{;$HFxwS~rG zgV9I5_G&WI2$Su6RTvX>7=wuYi0ZsEyl}b&)GNlw`tFhUMOhtqMNzbWH+s;G(4!ps ze_P$%Gq?eB#)2Vfc&sJ?jk2r?{%jdF`j(su*^+}UuDzz)AIsJvyNpsx>+}CpF=-&u zlQj}lkwDkaQD*}7m(+tDoB&&ni$v>{H>)pa4>pgglu=H=;*iqhyGX=*t%xe6>(9tw zrnCBYvD3fiu7Ce-@olV?bKO-L?1DI$T7D#G2BO#XL>&?_f*Au>@c7uLVvNiuvl)cZ z(k_80rF;k}@b*629wQA2Z!g{fZ#%(qiHD%~2PE;f(|f>U=_f4J;hwEh-FHy3lPb=r zrIR^{t&>OvTkl>iY*ptd#Y~>G2ZVqad9`YHvwXOS{ph1<woUa#jP#e8ePEop$G?EM za$%n)?yO|u%Grma;Sm-6VORQ1kGl<jVD;$@e=iu4C|pMZC|tctC>*UwyxHMJp8D~j z3M<X9U%yimwM_c-0zRS?*7+AK4YC?Ppju2Z?ZJY2rUAz{67&qvOuK`^7)paqdy{56 znUhHBrAfLBk~qN@Z><)JDZ!HH!wALB4^yr^JyEC;FI0$`t_vM9N43=cRjSZL??>d& zQpF7mT}3MRuymy=RPn(XOjYStY${)orS_vwf3ChAc%pYmiww`=&G*aO>Zj=q8oA3# zyEROj%lI*d-i_3Zr7xN#KSl*Vuw+voMO~4UYwa66m~{UnCPAh^-T)$3+859X=#L## z;{WGGZ^G(`{<Ff1I)m{syh`q;cReiUPCs9X7SuUs8!nOJ_QNvYi=^}fo4WdrjIZUg zAwOamXGI?Q$Sc-1hMIjLwF5;nsg1R|_N=%(MJcMRNiB?C!7<byii&IP2X9xy>}**% z2f`<shQ5?B;BE=drIKAiT3ERc8-(uy%2u!YT^|j0;X+zGoihR?dR-OEJznYcIM42u zE}91?b3c~vi2JSVHTr#c=-v8(S0q@r{PIjZeg?J_b={}rSmnva_Vc$<hw=kKZ_dtm z{fn&qMb?pgFx0h$P;pbYi}%XwDNz=ixe0mx(@N?ua*-4SSvEKF+>$-|Hm|4i*yf%Q z!v|zv?U^valRes#J=Rk&J%~$&lCj=E$;2r<WH!}1ViK1>JQF6B21~|_?e6I}rgTEF zH#F(N2~)h{)M3n|vEGRjCY4;{88-R868t`nxo^tE68uI^o+8)UO5-_5KVj0i$*1Mf zc-*Adc)Z^1@#DST{0XH~CXRVPoJeY7#zRbZi4A(Wcv4at<N`_Y_zCxyC<myN0a*SC zQQ4E(?F@Ryje+2)^)X)W{UuZHnp|4qog4~I2?e`*bkX`AV#!npRv6^ZR0^0pwInHT zX^?7;VIOroJZONmn42s~3F9wIJ>Z>Ka(~Ih1Z7@tsI+9NcgoZW_u~NU?vmt~(gz^* zz6Nn4)n4w@v5-|bsd!>&Y>8JGT`*mRHLb;C5^Q+LJ5JTdBg~n=Giok>RJHyXnot5S zypyMtOjUOcyL(1Vn!qD=G@92tcEa5gV294{Ee&!X@jmUovluR16OU-v)~c}5anrq} zB@@Rbr>>9qKhoDXb$!AHEs#A)wL-S{2G|G1{Fyd&LQt_d`;Tti5UEdcZRi;HxN+Bq zCf)0uGA1}42D|^7--n}7`lw<|HeLEY7#F8QWsCpGF7<kO%WrCsPCsF~x6{N@Z}!Aa zG72P1m$4<|x_9M9Q+5uQnrOvIW9};{_1<_x(aqhwlP8sUVXqnrF1qadyx#jt#!d*` zcP4a#=Q6MNo)DcmflPX?Z17KGAoR!%_Q-yaWD~vKiIZv5GY|!q|HpsX_ty`BZr=Ms z6N3}7r;NFq0i-I|99|WT3ChSSogA84OueMPl}s-w4h6^D#ekM8TVA*@E;!|y9zFQm z{r_w4ZQ$d&szcv1Bgav!WH1oGK!Af2HFDySWydkf2gIW<OR+5rOAbyH$NCysiuDzZ z<VYb<`<h4dxFPuV(c(Vn#l5A$ZPV7brNwR2*14h7w=V@3DD~?XZuv6hqi*>!6l?B( zt-ba+XGS9@Dfjn#@BVI&Jz8`2*?aA^_g;Igwbx!}k4)z*Gp>Gedf&RK*@1PE!2P=L zjunMGn4dqV%9i?(nej0dHIw{M;&fPGybJX!ge1MX!6m<-sF}m<{S&kOF8er>G#tuv zj_eo$OJs!Rcll(zeIq!Ec90wC=0XTBh?wvb#NK3MZ2Reykc>zzIk#_S((2cvYzJqg zlwjcZA7`dVK{PX|WDU+vPm{zv;^*U-G4pFf7h}nY`83JiUod<V`8)!adfzrWGZOYs zO-)ZC7U+D>lxwZ2t_jj~&dfy;(uB$3i0}ZBqEc98x$(1q+FK8`d%|8NxW2xgui3e9 zE_o}X3w?VcJn-4@<fIhzES1$+6Ze~&8#W#2$4CgfV%9!S7s48R9+$vus2nCOipC;= zqrCimi_1%wSlQWv$hlG;fOb_fj>Iy2WyB~wt_RDzSaQ<5#K;P&s9pVw>2i3aoJ<>r z3&Ax*Yv(+*Fw5BFAdI`C+sFz!hHU_0w&_`TP8n0_M<(XihW%x&)5gaf5OIYe1P!co zVAL^J51pL7&sYjE4fFWk5$ul6k^Tu(k+O0B0j816blT}NzDTArI--8^wTtXfZT);) z=@2yKk$-EM=!0|?%6J&<ER)R=2J(z<-rwzJ9@&H4GHd&tlpN?U<cEx&DG}&0EYi<{ zZ5n9-zW##Co14O5L0iC|_rVn150B0ajz|XI4bopyjfm<2VO?HqwT=}fL%AH~dUtfM z+aOaH&C#-L+n%s%dK9rxV#B~V)ACSt6Xgae*D5DvBVOE$pxVOB5H`xX0#YPDLA^P& z(3ILVqh<=I;*lp~g~_$lZ&$Y8=?<Ew#zIqbOGmRYV?k`Oa7fhD=rF(Usv^jB5OfTK zp$)TVBtH=jsNE$b$^4p}7@L<8lVjLDN+U_gwZeXFgJ7UM8Y<jYJ~d-$;j)rXB+H`q zPK{3G!#daMHMDAnRH>3`sDGwkM$MUQ+9;Hxqgv{<%k>-`t-sXEIMayHiT>$%<`0}+ z$3Uw=H?+q0dk-bMu_0zg(cm*!tkNiB(z?PLC)&kIkgj@Iw4&4jZQY~e%#vv`XuD^@ zvug@6#qf0oMxv)6+;x?(8hz|EsvB+4x)B%SQFL>-3)|G&s7}nOW~NdE#Xf9ZD8vk4 z<`ztDP>eo)SW3z8F6tK%C1Sbo%$P-D3WbIHhs4B(*PO=H>dat6O~RuhR%3i(g+xZV za)g)KQb>-lmAtg0pM1@i6@G#plAy=ulf?r%b*Qj5Y~9hOc)%jpc>nbN{4{cqxjQ^P zIUYh7G`AXG+b=U?FffvIif3x*7@%~I9IPP|!u7M{a9ly%y*=Q}kM9ZFCb4xigP6nN z`o@N^?#AXDl~I%i`P0kmV|&8f?98MW?8aWoc%aJ;3`o1gYVtWmO#7;}ceH<+1lz98 zj@?bU=B>NB$UQzKCWRBU^nwWBp*>-DKTDhbaG-y1|Ew&trsjne^ZkP($^P-yF{Xhw zK^Pwu^iJs~fw#%!J6!8;rhehGLBwO0C0%|3V@sA%3<(l?VxN#ods@iXy&prsErpbY zgo0?kI4+5&T*A<yKXy!nbQx-8RBRq_xl3lU%9qI4VqmE&Ux1LAQTl5h<{VV3I@{7> z-4+Nv5cC4*ksb$=SZ5TbTq_m#q8`vAb;Qyp<o%jGF-J3Ik#*%VYs2VM`MrXnS>!nG z5y96c_;UP6@C0Kti{%FC^wIbvzZx$6)7jRoBQZ0NNCS!VuTH++&dG_a7DSkWOD=G^ zE7!bZXXoCwo_o7m_kv*$tlK|P7!#=?9Hz)*4qz%WPh<*+0`T1vK-VaUTs!xK9s4Fk zKT1irK!Gb3wTeONa4Y(?vM^PIu#eHDtEqS;r4w){KQ#%n#9S@hW(+_ZBU5)iN!Q&% zS5tlmZBleX6pIK(h=mS=w1{d)XkjWpD5nEa#qeYj-&Vnw!(7|Zy*3oQPT%eccOs*u z)!n-~TGn-M;ZF~9$J9uoLf7xvZQ$|phwjAQ$WP0hpr!NL7x1?T9ER8)sMJ&P-D(}G z==W_P@_3@@E&~){bosVZUzeyk$z<AWW@LJDcHanXWNkhH|HyJoRzF_DIBpe5T(@2X z67@}hr)*^$D;}Xvx>P5M9~o5m%!n-8c(_*1BF97=pHhJhzE1G<=Eg_&_3tUs%OaRW zuFI+=)aQ<$CS}l+NtAzawJ_QJ8oi7X;?ZYDXsgvI!bOG8@a&jALL<5ay>s}w!YP$c zQ~ia)!~7ICw{+%EesFqz$}A+x^t5+$hw{I(yR~`O&ek{5X7N2S%S9i?^g*3mrrF%u z9DGjci9bdgLqCXTp({Tvx(QiqUXntnj+3!@sS;~iml_YLIRWcuA9@Hofn@Wps2<0E z;O)T99!%KoY>V)|XOY5Gzvu`N)6wjNo>_F!bOEX2Iv0An1&?YSUo^3lsLS@RMb-AN z5!RUuyVYZ}cUxO5>0J+iXP4kX-!$)NX-#MsF&ZWiNNz<k=oP7s_Vv5wxI~3qzfHdJ zJ=fjb(UFi>N=v>l*gr*M9%jj&59h>88_CZh2E>~ry)cFzg8;f&Mb=nebec*e8z5+N zS3JuwG<EGv5k!jXzO|xD)`t0+LC}gXAnVNMK-xzG7q<`hq3BT+YzSp%`-ST0G}jQb z2v&A8!#O~e|BN1WANgWpSfKx)-Sw7xD9#Z4Nz7*E6JsikB&WI6+!TSnd%(C;928C= zs{Al(Eu5GgA5ab?-`mL7t9CCv@V1U^Eql9rc69B{_3Ulw*tsX%E{CPf3+*B*B4v%M zCcI09^G#UxjOdK^thGYyCt1jN)jW@#G}Vs-kfB|-R@W0ZNja4nIq^9aV$4VkFN6c= z+b#6zFv#*|Ei+A)I>O@Kkn#d}S4T5!gqF%RZ}Ym?F}Mz+5E#)1A&Be3I>fb@w6ef( z=y^bKpEk%+T6%CIKZ8uzpEWBf#$!FI-VsL`2nu+v@Ep!3F}-bcVn~|V*#j#zV+v2_ znZ4f9m3Gq5-p-y_7<TrQA?hC%PwLF{yey8GeU2D0s4=7_5#uVS@3sCCRjyX3TmKF@ zJ&O{jw31stF@afMP;+S!W9Voqz8eIepANqBW36{!a%>j)$MQWtCW|#M{Fy`MfD}Uv z9PV-k3p0dX$lh>+C?)BY;n6v`SPJxqb;txvAH3Chw;W>8py+X28Cd~^*M<4W9um6} z1y_*To!z6}BbAG{Q*kdmrd+3Hkj(0J%`&mK-@_lzM#_hte!n7vCY>rO?-K2h38{Mw zqEZX^J;Vg_PMbs@OiyC^4eJV)7WZJ4T9aK%tXD!O8^XdYlZIy0*RK<Q4r5H)4V%pJ z0nBa{{EKTU!xzoGwMfZPu=>?k%u`4Y#$jChl>U4``bp*h%MJAc4`P~5PmYBN87(tG zO=KDyljY4`QL*?($L16LBzCySXR(0$!+n#J2xKw#b)KRzXR&f+QFvfdeMgD$#X)U) z$Sss+Cm_gkI(k*yTw>u$$2+3vt{pAiSy|XHHX?;JT^bnmbBp;}AxUP?+|<}4hUE|@ z9IJM9zp9{ghSpjnY#vp8KnNBaO~s4Q7~xZflLf6*mFy}AgP2>jofyw!I%!GSAo`bi zEGS)`4G<_Mu`|V3hd75`0o8=}$a%=%Am)jbac|n`?u^lKml0Ek<f*My?YWi~iM{SC z>0aZ+t2O{(Ogg<24XkU=O@>EBx8-z-LU}vV)N7dwvK1uAAIVRvt6GZo%2J-CjV~|g z#oo{re%&-1PjhSVPb2zJ7_2hb0O;)>%nt8im2K0r_l*O?dtCqGcu?nA)D6Al8y7d2 z)Ba(vOqAYU%^u)F61j^Xo_!NFIvH9~1yOgQ#noyE>+Ziv`e^k{tJjDUbDb?z;X<FC zF1WP~^I<g7d0zM7%chy$5hi?Mbvb3%?+fU-;PUq6JapyrZXZp}u*;P1atarYL*0X6 z1an7x_HMb3$sV;#S<I2(^3gA5ci5^*#@D<iw7@p<w3u&<j1kgP7J4%%J6y-+7NDmj zl{qH9l7#&Ao>uRTsoY)}OS!h&rVrlGI`&sbXV!Rv3K+FcL*c*>h2^Z7e&m$;z%;k( ztTnP_*zC4Em?rK?R9N~+qzpKQ)C9wssDn$BbD?POeil8n#pxqvzbroSvx*>a;smE0 zMs*2Zc?c~!VX`V3e1qXG=~qGGc!=37oJVzj*N6>j*)Q^YUEzIHc1wMOu%E23*&%iY zw9KSBT#*9Ru2zIJx1_zU7BQN%oi;HTYFa!_Q7V?Df^DYGVj+qN;^e*?1*2DOVzV8! z#m=iNVjO=fHi6+(xuo0Pp<KFuB1%CQXK;k|gy1&SW=aOvCrfAs((RM5#9?*g7c221 z$9dOS%;;k_T_?c9yf@F3OkNn?>{@iA%0qkxy7SbJOAMyx7+-PSu$eIAHVW0*@3*_a zSArwfR52TQ{0tv9+ASMGC;L@vjj<qxA;pepj^v;AKHVg|;`MMON|kNZLT90)=9R8s zO!y?|G6cHpvvrSK&InphQ;gOG@$e|ql%nf5;ZU3@tc}N&4vrR04w2|Jm}TO|8L<JP zm6G6hG{x9uc=}}x<?;FL2fqtbM=5bpFvoOJ1qnWj^K-jFVG{!(w?;VEUC2>3thb4K z-V6sE?4>)_ux;n01veDd;h{#ZvN#UIEn+MPW$Z?bPR;oBGIl{3K2ZeO^=?_=1)2+% zDDbk8A#}{<eG6WYK_Ba8#pma>@rd-Y+eHwYC`7I39;G>uy%`~LQ)q+}6(#uCc~^Xt zk9W??is!%vZL;HT1dI1}Tzz_C($psCV}IiX;Tw1Ol4u}dU|!uO(1o90@i1;G#}XcT zX)D&0gs4>5pBGvvPi%~qcRlOWftW2C6(VZN1;xlP)7OJDBKZoVk8m?HIm36=mx*@a zm-_MCQqp4*0%Y_No}=_>ZO%vRRP-2Qge-!Ql+7_U94QIn#kO?4Z##FPU1CDSkF-6E zTQXIKYnbLvszZl<Vt>c&zG*MZ{)}3U&VMaEjd;bbQx%1GX>?rrMmZ>~o1Y&a9~!D3 z85tih6xL|JJ3>6a>2{A)FWzupOx6_6Lo_l=hh!rSXcjUZ1YHSt1&&(mcNO;|%pLYE zB@io;I$}j&L0TY`xFsV=;RTrQA5pk8X$diic_XHTi8moT5>e*DF);ys?wZc4#f?WE zRd`uRi2jl15oJOK0?Zgp+Pf=q&p3a3(k~;8ik&i)btAxFIs}ww-^rLe;%#9#x=oh3 zf`A%@w?y^E?J)Igt0OV+#2+rZwr(XUr7$-AbiurEyN{y1=ck-HOX_JSSQlXt^=oQc zI9v8H!N9N*Ab<b`|2~%G6V59m_+S#<$Xlxhl5;Uf-dTv!5IeE+AZOHiLCRTsdWqO^ zeo?|XMkk13(+%}U>-Rmf2NPUup0VMqwOR(x8Yq4p7RRcEwJ8#~<xDllva)JHb1SzC z9x?iLr1}S^C)we^l3?3hdfl9(;Px6C`X|gBNJI<CV93~o`|=aGQ^%OEXyuC3IpUbX zV!KacOw7s#s|tKu0ouUQ5721=hNx5VzNuS2i5ODEk0fJNkk#Pu7|U7$$%Yl9@`$+P z_Gu+<T*rwtbiO<m!Kztd2<ydAJP*2A>X`+TLPFEP6oz;D-n`kK?v-&D>H8LzVp&t% z7KS7H%Ch>10&y%shE6Z|eGtbk5scvujZqZ4*O;nK%vtApkWSEg>qR(mQEr%Wvy}6D z_%hAizBC>0<ghDZ`6Y~!VquSLZI?F@9<FO<P!qi&Qw$mG%+5r;vM(%noUrv>WK&e| z2-&Wem3S>mB*i4?T(X&|M0lvd=Il$2j_Ofs$5gY?-EZ|ZFWO_)@zDJUp(oyx5T-BP zgb2tW`=F9<yLw2SRaCwwir-&q)&3PfuH@gE&rkX7_Sk{zvIS%i|G(t(^qIq-aV+!k z8(#72Nq+A=O*-<dcHZo;I3by}q6c9yGt0Z%cJFQ7jf)sp!!S$3A=m&VtAV$y=UG`t zQ9Zhj;UO_!)Yob;ClD4nspOH?*)%WcBpMFp@tWFC2&$%#*ELaLk(}aXa&@~7fl+0* z!^<OPI3>-i44SyC^<Ts*($Ml{n{K`=QV~|N6inT|P&~)`#4qNv`FYB024DE*h2qJ# zIJ{GL#Q4vWE_JQs$eZKfIcT^>NSh)pNyiA~S5kHr&rSj7tZd(HrTH2X_knzGq;5V9 zd_q3$R_+9N1pg7E>!{Inf%``44kbO&wiA>)Po4`#m*A4}n@RJ%DC4l&%}%1RSBq+M z!ed6F*|^iO(2#6#WLUg6k*KbW1nsO3aYZ~hnTNUG{1(pvCCoIKXG2eN=sv5rhqbIk zAg-uoDj5yK{D3l!*xKx-f?%^vIaDYy;skF*fj1Npqrhxn)xZ+GGaUtzS_31IBR_X9 zTdEVKvBoh*!QrN~PE&RXwQ@Q@!ir?k?CHr*YhdtX7>6u73zyxTp7tHPdg5JBK}EfY zGFd+3DRr@eV$8&wd_viS5*_TLnTbBu9Udmeeu7>t)|5bpHHxgCHI{5Na44tMi`W-* zf(WZqJS2X{PKHqCwd?@8MW|ous=+qu;s?|^b5Y`8BoLw?s1Tga%jFdvYbJcM$ygFR z0op*e#+BB(0(-M-Z0Q;8i?3ijH*TPFWsht+-Xil3W!oK7KFIC}o7;0cyIV2qo&1=` zSct98JSzwFgi6cUa9t}-1l{NnJt*5Ho-4Es9WMf##Oml$!|fRxa~0y?WIt&VQ2L2L zH*Y~WCPMUyD%UM|V$KTe^_#L_ZK>+j<*Re+U0OmvD^C%dH;e~dLh~Y4*Sr>IEFL!^ zsDuqr>*gTx3n}05P-d18HVZGffVEN_%$$k5Y-CE<oL*vlN9zxpRNnX&vrDkCo>kgy z;W{?IPB!2p4Jq<kan)+a&q=4aml>>6G%`Wm>R}x=`J5nAh8`;KKXu7zz;gL?PV~I{ ziUWjcdEe+%hg9$8s+VW?X*566f&O>VfQyO;yX4{RCVgrPYR46NBdM`xkIpb3%PJ&W zbhZELBdh5lzh;zZN)({q@o+JKt`lqpgKvCJg(CI}lhyZztlW9RguerHQo<@0t5r5_ z#17`zziA05r<-Yxi+`^js;?d5pKdeOilbv5Y6eF8i3Qv-%`Ux!oRB7+l)bN`D-O7C zxHY^R^KU~#!<!a&4k?a3FmNp{gNCh*hTK(amG058D&NocNZC)`+ta$cXK(Y4&U<_! za94Nh-X<v85Y}~V1%?~zH{C2@O0uLGKsjuH=?3B&ZP^lGpvb0;d%Jgab?w;MlkjXi z1n|YCjjG02X2|;wD&x(unIFQY-j>_BrFCyx$F|lONiwg5-Gv*%Eu&4|A1cLEKm<`R zK}5~sFBXpxA@6;dZMUq5Ge$`OR-TBn+ZoS2vJ)$A)x=7<yuIZ$NdL98wr$Jxw9?Y3 z4~a_7vl^PoZ`xQlGtRz?x3z5<5uuUtyE?nucXo7cwc_jOwQzm?9Fw9j!nWCd8H({d ztU9z9kCbn1+q<i0Z%@beR>m`mcXU-qYIjd=dskFr>6h+%w{N3rLiP&t;{%gp#DTHz zv7ZeUPcge+!{N@JZ7P{%0BtoYZ{Xl8wg#auBz%G>ik_VvO>rH~JG$=O*|DV^#@p7K z>-0U;P=A}WkKpjx!9?@KyAoBbn9IWTf?kooei27Cwd*$(*zm5cU*E7{BQw&^7dJa~ zJ%Qg%HzZh@u!?83>O#Q=X4#fRmximw#9F<Cq#GYC46?`8KaroD^%i$QZ5iByyh*|` zJ>eg;+C?|GX9?e&2rMjdHwDn0W*LZNNBFz!%s1^}FZ#pU!E8_Mpgq+`8Wk!MYYCqk zx_&U*Oc~@=xwQa!h$t}^OLT)<k~!aq(+_GV3c-wx5cvN;o4|7zb44{zB?-KRE!c49 zByTtjn@18yg%`o$KG<LiLA;G-s=<T@kO{j^I+(SXkDFX;K3!Q1Vj1WLyqk<JOp2@n zvgXxsU19nqtaG|oSi4lktkIQyzpNi+5Y=_!0x(I?*MZFJ!C_IqVzpp(I%qWpUYQcI zEqFWy;FGFq<xMUISv4-R0(Ke|wcMLszo9TbcA$A=`%KRxi&ZL~l7v>3JHf)mD~Wz( zP+Q2}2lM<JQ2C)!c+=YOuC-w=qBdW@uYPT~y0<_3;GUbL<*UnOqZEMoh(p~kt^oE& zXGe$D0rmlAG~`rekPeC%cv+e168Y)pxSQHK{cUBU;Z=;I2Cz!}D)CSZ#IS$=tb|xs zKZbA=iXEAF7z!fZ3*O&YUe4e9?!!oxb=9M8JtsC3Vc7ceQnb6sb7g=7qd4cJ6>5gD zZMkonmqbNKtq69q*SkG>S%6A-!A1v3B!(E^8sIOHXYeSR^ZHt`j|O=IMRw6#z=bk2 z84=zqg8ak*G_#0MwlYQh?qe4k$1ShcISFNMRqqE!-*<Gj?by-P<63C<=pDXEs($gU z4}#_rA4+Wj781cHU*un82pOx!1??MdEnXO6)q}Fm5AJ7VS$NG)&awe2kwFr>Z7&&t z)o-WEtOB9ROE<~j=j6M8O&y)No%cF(ReG%yt4wv~9bP?o8yn#(j@YsJHI-DvAnQtO zvfI5tbpl=_s_vTV`Yk_1_j-j?*21W~5c|T5MObwF!(NOR>Og4ai8of)Pd>jN6+mC- z0T`evAn?puzp&O*9G-uO9^r*b+B_)RB({6yRa=2&YX8iv#TyK3P(hvc?)9}}v&gB4 zoJC(&z*E@wEN+I_mqkj_+c181ayV->Wihv5NnZoQYw;JJ5}wC3@N<Sabmf>>%(q!> zoZ%towgp%6c?q94@VSf6Px28*i=5tBBtwx5a;RF73`H^&$xxIGm$_2Gp&*qyluD%! zrBhXhs#41iElXW-=!(?xL(5ZF9=bABeW*Hh)uF3WD-Nwl)f}oxU47{4)HR2$No5XY zQZG65lGMsWD^o8$^wQMJ4!tb(@<T6AU3=)-)GH3XBK68cuS~t_(5q6b4y{VP`p~OW zuQ~LZ)N2pDHg(;h>r$^f^t#mR54}G1hC^>i1vw~q1{!iu@eFk2pyU~7$wAFC(369r zXP_wuRnI_I4$7W^wj9(w1ARFtd<GhGQ27jW=AiT$Xw5<GGtirZ;%A^a2i4C&cMi&* zf%Y8KKO^1w<6PBM!Ls0rU^!z`9bCmxlr_QC!8JjKaazeCnlB4p9$Xu|B6wx+s$f;{ z>fklOYlG{8*9EU<48!1!!Rp}p;0DfU`-$Mjpe|Sw+!Wj#tPQe3JwI^Y5UdY21h)hm zgIj}5!JC4{;I`oQ;Ev!<4l8^M<G-1nYvS~U|8FT^-4%3g4SHo>&T|SxulR}Bo(p>2 zYfXCsJC;5eD==jPc`Hj}p957cVv7gn+yD~1Hxz`u0SXK46AY-+ZYrqFZos?aF=Ydr zIl=TmfK@LzLY?OoM)I+P_)QNj6ptM){T%#BcYppJ_%QkS=Od5CzDq$@B7X+@McW`g z2pp2Pd75`NhqVojV{@!7qR2;0h-B#sFMwF=_!UP9j-=hCFXz<N&aTO33%oET;X{`Z zJ=$6p8T%(BFeQn{7E_{#T8T^$j7#B>MOZ{vXHR#Fmhg@<In(3vS9zC+be)&=gIuj` z;Q)iZpZ&mzeMJ61h>Ks4w+(p9X>=&8yECjET9UdT__yNsMgif;W;{ZS_^lE|NZX=* zLp9*&>r8}bYi`y@>ME$i(9qC}HKtgsTax8lbFPNxE0gR|Udv1J(b9~RER^_OE2hoT zJn($O=jW6vaPcTf3^BX4xQ}^@oQUYWae!Z|`>Nes&D#_WY{uq+Zd^S((yiK$*ppgR zOtAcfzN=(bn1A9h!#RG&i2byP{?f-wSsk8A*3V<Jx^%%V(<uc#@>Za@urU^r%<m}{ z*BTSY`+;NC93xG9BhpFfWnUYER4oiFGP453PD>CV5|7=;k~UQ??`iS92dQF9ChGNH z6X+|nj}6aB-caX-aKG7Kj)Yn2MGY<@m9xyv@=}#*b`(@9KdWz^ij^kDwy(J|4(v2| zFN$u}cNdUb*p;{-TWx2N?SqH==kFq%X5GY^&^KLSv$sz*a@o8OuA^zkQoR<V$ju;} zINgWMf5wW?aF!e4!|ZpI4rkPDo;f|Av(%d6Wq2Z=F;Oct(Qho(7VZjr=lA6C%Joj{ zndEP7&lr&my`6ig892R1&Ewmxc^K3>7}>W#RRz4h1^!20ut5E31YRZ9)v}*6tmm0{ zfh<DVQ?46cBk`;Fl`DDi_{CWOzq;978L1~8C=?lyvH*5rLh>U0I_IIV<rK46%xKXr zY*Qu5$Mi{fv94p|lI|=Qw;o%95^7(>|FwnW*7*_zjfO=1kj5LH@=`~ES7>-6Ov0{o zkIC&zRvgE;JTgPx$;ELiGe-o}04@OD+-0|hM~G%c=U=-rrifN4%py@G?!7YSvJ=Xa z_p%B}be(?H=_dsh5pqZ4p`5;!@=yf>I`yFXkNq`$%}KZJ<1jm+nY@}sHW#Fn{H1%v zys-E7tZbCiEs~QxT-zw>HWEdWp`7HB`||etW%1<jurP$o0U>^DDMKb|zuI;5g4lJD zxl*`{W#Y)t^0R{y7b&f}^DSZYUHFbS?{>DfDBsE+mt7M4GCDCUE-j6tS{=*#)y{i? z5}m~z!jI^PLt0j$t|>7Nj10GVI>4K3ob6#FFROjOu-wvx{YB95`t@PmYTZm&y=HBU zp_~d|4AYzF^^O818pAhV-aHGm{hk(S&}!v4cE<dAUxwf^wXU{m6D7?0RJKt3Hc4#1 zGxFU?uk}xl7EsvQjY(ejJQa;^M9<>EmGyO+kF2qm@wtM}az3)&uI6(UAHjDupA4Uu z@p(C)em(<yy1KUe<6(lg^&jYB+6Em>+rw@5y(!xC;(lEZVbJ+t+kM+}f$ls}G-%<? z#!(KrBM3ll1EjdyR?)lYKA4%@pPzuqEIIIHbcZ1yxQ&!R^{CIHP$r-)C89~yS6jHz zZ@84~Ncc`mV5n4nDXYnr9ksIwJeA7J*%~rgbo|is2Wn^QSsB#H%LW7{xLao4!#59L zUlQ~qN;x1xFTW4RjYKw1&*~OvP{{8SdF9^oIxsp(*I~W|jvXd=DJgHBo?!i^M57X4 zS8<T&InK`v_&oNjK<@Yc;X?5VK8OEkq4-+hb<f22QdIb1kk40Pn3vorDaq>%tkLfa z=7J9dza4xo_;&EpR70vWH7-oX<*lLE$jTDlOB?dIqIupb-y)mITLV(kU1DZP-+4TX zbNHMNUSlHX#e-`UK{hJ^dF%^>eQ&){ggnBZP%cE9#B{hohW&Y#3;N29NHyN6&Sryb zb~~=QY_<;3Rmtz|siY|yh~PFbSbz}PncS#b!tC|M-TE8}@8y29ei0LP7GI%=p9DWf z1?`KIFLElNV>3cyIF5)Q*|D*^<oqCl@3c|Q_+0lubD8}a>+hrjsgsrb?P0@QZNtVn z*%DD&Vsr>fb|HkU%H?NprR%!}EIWk?J%%GLlxT#vM}7MxRNS@1HQGNn@3-?H!$6T5 zsA!eM6_k}HZdY8tSdA|bM_KuyJV%iH80GO)>x(L?7JFqP_^li<I4X?upZw@+|L~=A zU;gSpe*OGEed`;a_~ZZnl}~=>d;jvUKPZ0wZ!Z4g*}pve_uu^X5C8ekf93c7=+~e6 zgQtJtSAYLWxt{rNr+)d#CvU#_zx>k8H)pdqXK()Ev-0K1?9Cs!aOO|{pVOm%_Nh<b zeDjlgpM35&KKq5wedfD=@!Jc3_g8=Y|6cmr-}u<C{nt1D;qQF(`zKEv|M>6z)^9#} z?5?|R{P61fKmODMwcU5_xQpw?8&|KsGMjy8PvI?-cinYw@z?&~L!bV`zy0nHPCohT zzjEQ1zjg7SFa7ABzVe+Pe*a%T`WsLE>bH-7{I`GSPo8++Papi;k<Wbg?>_&RXaD?{ zzIg5*zWj6l`RBj>wSWA-zj^-e|BqvbKl!eA|EHgN&wqIA|9tN+JpLcgeB@{T%m4MI z_kZt$ANa+eJ@k#Q9=$0b7DfcE_WM|N24O=`OiAiclp2qF@*7UsbXC=|WmjCWeEF4E zR##tj)ru80HCJDK%{7A}2Jzi4^*oc2^I@Hb@=E09HTXnd9lR0GW)AJ?{Jw`Mp2E+Y zTAr#-U7cE)T9pbBnVVC6se`Fgo{kh(nyZRy8P^qDfvaA#RC>OW=Zn3g*WjCdDf;_W z_+sCH|Mg~ktak*>K{qnJ5F8GEF?crkVvsg@{ckOgYS3#XfB7*bwHYKq><O_eM2Cot zAuKEQMhzdaJ;cV4vLb!OCJ}o>ND)Uh3@$ug+i=S)e>U#MAslq>ZtLdJl2^BE1Y(_Z zkKoVQAF#njL_&VO!3_p)F}N}4Fk7TY><zF=n8)qcE8MgZD9^E3f~NZjo#DA!GeBqC z@VsfenmyhQ^0v{giT$@<e?17wE_8*vDk>;@MzbqEj-4MBX1=RPO4c@Pn5`X*|7ybR za?i8DGJ?u(7n2v!%a@8&Sz-m+A*Oa?<)&DnMJ-bLvu|P<q($RKxCSMf;vCWC?V()V z>IYVbZ)QhU!X;c+x;RnU>%W|Cl&*-|@4m4KZC?cVo9Jtl;PSD)-{xGu#Ob>T9~#;% zi>0uccmrv53r<FXJ@Nt+$vc~~ytBzWgeaQ0e!AM#8&^vnxhWg4vRmFE^8}E;tS(o_ z`i6$u+JOEX0-zTI=gO%qw91}_w=B@syhOkjAvOw@rPsHJR<S^NDqf?2ce=^L?A%~) zUgE@Bv>WJ7c1`RFiV?26j;Q)p-Z8)e)MFM@%V~WQdfV?SRr8B=9ivDD%Zwa;rS2=W zTyVYc?pXYGwuM`W5uxE2Ai_!(BU9Lcdf0iU0kS2Ehs8*fRb*KUB{Yy2KVsZ;dvtOF zL{b?4gdA5}*e`FOP`MKBD_s%1d8um=es)C($zJ+$Q=D2EhDC+xq{v~dcGWPh{xN3= z-7d=j92|IqWQ&*6GbF}~%_v!}>K;ivLUcivIJaoKwqEN4yYCIYdTUMzS`lq<M_G&| zVuB>2*+B_rD6dNQ)7@*m(PniWAvtpFgLtjwz0bQOh_}wR!G(OxZY*92wH13DCu#Y7 zUZS)7MvSvE)oI|uZ0!BE=yVF%&bvJ!UEPa7_PU}w?b7+zwAaffAGfi6YZj<?(^;5A z0`=m;zTf=*Kb^tLWORnD;bFJMygMqkEn?4kt71z!H-oPLhYX6#4;2S(++E*Z-#$4u z9unTs-L<WwhsebBAh7YaHNZH7P+)Btne7p+I<B5R`h)WjDpD0qadD1$W{NmzX(yNU zpRd7}gbj7a_4&Hb@trT-xr>PY#XaVHWiOVqTo;tI-*0?Hy^japD1M>Xb1pbs9gfnt zvi5`7t+QlwxgnY&5&ePZ9_jg_DlNnB`*(1xe{@_Ou}Hi~#L3WB60S0)mz$Kt&=m@^ za-@U4D<N+ta=@7c_zZ~W4mmD6ZG@n(+lEw~WZOh^01e^TI$jTyoe&9M30G@(7glSm zs*zq`C5i0gNV!<(+m<fK?7#rG$PVYlC5n6!N(z%`|0QN^#NNS*vJOHRmBqH0%0P9< z8GF9tcz=u9VN+E~V%EsJ@fwFDT4OO2>f8}M7L~Ze=@M|r%La53N@{3S9Y6F)&cy;% z6oQFXQPOe0d<i9x-z(LKu*9Hhnkg>^O(UnMpZ_v{g>cQG$`5SrAf{w{JpaV1RM`_F z%vV>|<=~a@Ay_#Ie`I5Zk&oYh6}Km6Ek&;wuLv|O!i|yoFHE#*@DZLFT_j7CKF$*e z5@*elZj?pk7q>vzkj*i=2`VS2T}RS-jc+5n>!>6RQa2%GqmyNuoiSTQ-)e`#)m9~J zEyfdF?9323c=dVZ8|7s{p=<;lpD@fkmif!$puCN@p-31GQvIUme%2{JQ(syBsA2Y{ zq&%mAiK-Uo5(n`4v;L@M-BA9(x|x~zpibi(z0%6EFz4;0eei?V>t;tpv5u~KUSV+W zGB|N;XNySmM%T^7;;F>v7~dOiDosm1f1%$GCU7Rp1ZC-cc7KfDAWP<x?{lQJTY6pM z`HIB%@-mmZKT+1MBiv7wrTOw*q@T5CE6eg+p#G|L#o`z19h?IC&!_pG{QN%mGr3~% zI{(?scl$_s^7HhYip9xY#o`uz`D*1`i^Z#&+<g+tcmI*R{+WFD_mcMUE*IIy%QZn; zejwQ1KOGP_2%HZ%9hc8okel5Xbmymn9fLDL=i~v_@{1R{@K3;DL&1UZ0%Bz@7zFmu zOa~)V!@+p}VDQKzj|78L<H5{^hG1f5ICyA?=Yx~Mf#I28{6HZ<Jq8nn{Q<{W1(Suj z01wv-`mmR&`JT^zAv+qfyRko*&fmUX{%nvxx5%H3!RYn)CfFL8kbRTugCTKI3=NKr zvcH0NV(gLee!|SA3w&cI=HdPWQ^C~K_)st#dm`|o%<7^VZ$Q2OBGAv@S&@2}%aW!( z1N{?Cb4kt;J1#KJ!vgRYw<WY?dyj<S$^pc>H?gi?MSvY1BCozhs49NBe0kAOdboi_ zdM`$SwC>SmE3N3aJ;J1?S~t!J5qGX?^_Gj?qZn=0$Q@@#iyIw5B~6UZ6q4Fxf#jBC z>o+uJWw&vA%dPSHNmS?3#%)P?)yoojF=;Q9AtU=kcb21!fjpOk8rW0Uta`?J?QF1P z;6Y4~pp}yZ!MByYh;DYM3EvU7m+Yq?LgSR3dD$a65bdMwvfU(BhHk(plf2^g<#_k= zo^CTg-9GVj{=lfdFd?m!SLBi<-S@csTX~tZq;z3+Km-0L+=ur;|1H{0ip#s*&E(k0 zQ7>v)$<om2XYusPZcTnjPqcPDg=uPMWM7WH7mGiK-9w9XES9dp(cdOZZrZ7b@S|~s zDb|LXDlQpVQyeRV>p->+V?Z)dmYnfsB=5|-pAt%@$)lz5yMl55VS-N%$}i(stb_EP z_P;Vx9}{3~?nbrwbdv<5Dfz(2SOi`${%C|NR1rN}gg!C9UhMdA`nkMdQ5ew~Dz+g@ zibVqz(@%cq4UiGlU7qKgyFzWfx?}V_9Ia==#!%x1oYY`Q#X3$hZQVV!vuo|VGOa~| zX!~mGiK4wx&JfINtWwkwF@1_wB@&kCkBK!x|GfRXtEYLL$Y2DJ1Q#umWifp(V0=20 z(WSgWFQ=fvXVR#cqS9|K3cu+VT`F<TtGwXGtYQ`sDI)vgT(N+tyG!<EE#4rKT<j8L z&AXxzkVr)roL5R#bjL~z{o+R07)>H*ly#KTRY+ObugE9@#-%e8WG(8`2svL~RQvVq ze3;F7%wk@5Nb0bSbSdTHW;F9^mI<t;$MI?6#bgnULrvPtOWPJ9VVl<$VjIxdNr^}@ zz0}#g)lr-49#u`8q+Pyqh|W;BwV#PNEt)aNu}Yo@yKw>RXXD1{6v@}Uy?dQ#h(Lab zAaJr()BVZQEfK#+a-h_6u64kP$ALTjSkv$0eL-}vpZgk5Jndg%B}X?Rc!o@I7A+S2 zDJvhyPs?=JTiun)$WHL(p6jd?|1xKeIaj%>O4Bu>O@u&z?TJ#JF5t73X%>;g`{$h1 z=ig(ilb8buwTdGON}sRaBqm7wGzd!Qlg#UObZ=PKX>WJ2U*+2-FEVg-ZGBsAXKOr^ zcCQCXCZ0=f83La_=ifQE{F^qaEhMxGw=8`zXR=|AAh`i&QY>MQm0Dv7bd<Lxp^tBO z5%(H_5CtH(@U&T`se4r}j*3r+W}Uub%@MOGXQ9;2-ccI9FH>0^R;8|Xr3SlSi^?BK zxTSHEtZ?<!KDpmeb|04Acc7l+#Bg68JI?MLz7}-~=;KiEIg3ty=Oy`E-s*Gr+eQbb z{pk~uf2m8w*QB#96WS3&m<?7re@?;&ORmx|1NOD_cNxm<AVIL9G6KY3>A%Z4IsPs9 zWxFG*r)o%i?Te>RUP1RXai9$+yKL_^<JJARNSV!7+C#Mso5r-^ih?7=Wd@g(klxwE zZ)Xg$NmJUvrM)Zk$G;d-Ha-;*EG{n!=LJ{K*!Y$^j=`}zg|J3~IV3Kyr-UKOZb~ue zu_ycOcrWp8I-j8u<XnTLy=VC`>m42J*17#lRHqg)DOz4CCW3Wabec_BV=7F7B>sdf zSQ@=ZA~o(R(<jpWGKC@Y#nKnY7$XowkX;_V7#Ah<#TL&CDJ^cz((<=#P*E;ssz&8< zh(-mekm!FgW#y-kn*%ioD|C7y$sNPuwixVG82!1DI!<{?jEDFTL@_d1pfAB<OO}@j zi(%>B_fO8TL}BQVlM>8cat5pm9luN;mzP(rjD8>kH~!45#EUO^@sh=a{sfP{TBJXy z6CFH&8qDgNOnx5M1#>1zSDfYb$0yo%bGnI0tG0gpvJ&Wo+g;;iHPFG+R6CfQ;V3(a zMqqXocpXi46Ksn?lt+cq@W<fR1cFlfT?DMJsd5*T)6Zti=r}*?TbLZ4!MUuz+ow*2 zWT3sW!r+Wx)?nF)0?x&<@@^d5uRjaVWAYEU6T>|sM^}0M{#`%1z`yep(Nd`;<@G1) z#mFr`)Kj|Fd2|d}Y5f=-7OGFaBnP^8CZZixbJA-E#KDV|d$>|6{;QESiHYrBnUes^ z#B^Nr)w|DRVAz6jQ__nFEF6xxQm%>OHSCRlcHsC4C}JZ5{ev%cPDVN4=hQeK*u{)z zSzKA1ROEb;;3@sV3-jXC5l|%riW?L8=WjLcO3I7dpO;P|x-Bl8oLyT(0=3E;=hu6j zPcgxCfqLQ{_ODsA4)pQn9<#?ARb*dS-Vjelb?(UIaAR48<<D<<p645$=lS|I;tkeN zHl;vp6&5)xujJe$ewRRh=yl!hu&$+l`eF7>Y{iyXua&H@)UXflY0LHKO3Kz}J3G3Y zIqMC4(Yma&M+5EnC8h2xzVPO*b=!r2`?B3S<>b3u@ye@R^Xoc|X~ELJy-QYn7KPx~ zY+@bpod@#6X_QxM()}osY}`>!Xj}4%1IA>#&oMZ!HO5LWksK#7jW9v=P_NoZlvJ!^ zMf0NIAh(*6cT#R&5yxaL`sR+cQ+>+R7Ke?^VgDAF&?~MAcDG<4+qu_y1W&6}aj#*? z%Omzu87C9!(c>Vbuxx5xo_f)5E^lJ~dzS@)-5fcB0AJKX=e<Z2QO8)tjYN?TWcL)) zo+u>C@AwJ@m7)fW4yztQqAg2Y5E>$o*bK+^75QVbGU_Zzwd3?8s$g+%V860QAU`s| zkv;AR3<=ZHm!t5`IX9giha@AEh^25tX6=HwM4u#k{W9$rguDso_spde>}NNGR8RLE zLR`gBFy4@H)}dBW{DMbot?LWc5ANi830#n_*5f!VSi$v!(<v-T&=3&fLM`CP%awp6 zpTBOPUnDbQB@K?Pb-7#2T7ESAVAxo!S&ET0WWo29TLDzEfg^g#C-Hr_dYpz<%b9#S z<ir%{FUARP3j4FyE|%pABA^4E-}+ZxwdBWD(0#%B^{B3yFqkK4ViI*UHxuLs1~HZb zchEz?@;w;iBnGk%h5@`B2K>lZ$O#P`-7vzd{=qaa_XKUZreJrjiL*row6!-2XhFmQ zcD5+!+POpSwzl3Im~n!8NKZKk>Zj|o#Ji}5S3^V`n!&)#I2)HJLpC#OWgn0DXk(j@ zz|Nrd776X7ec(Y8%P~_326vneCZB8hTK4Sb0)5{$3^vuv&$?`ASpTMmjq7g>_6^dc zux=Z#x6FmD+uGKsUn<CTc6aREeM|ku?E2d_HKG$5Z*2%Vx_4w78*jZWyPkyg8*beo z>6<nMTX%FcW_LQUE6#Om`G}R?pV(V0_VIbGea`i{?*c1*lKFgINxS$!<@}X!_;Nyt zg*z}u67hS<Q>k3^AM?gvrS@G|XBc=3#vQ;U0f4&FsV~_JEx{1?LB;wj6!+nTo(j=B zA^|Gbk3&&+&X|qsP_lAHmaMpwg^h%Y^;a&w6bXt+Pj`|@Vct6THm?u#a2zNZ7v-~F zTm0fqL@W)BzWXonEBHP<)FOZu;b)@Q3t0N&B`(q_(nK#9bA&hUF!k>G781<m4wPWN zEk>%N<!Se@<kfeNKW0Sh5nCC_sSOd;+MON^Fu{^BdH%SB)%-T!YBwBWAYo5V%t$P= zY)8ialV<&4I}w2zOdM5}@JZP?!<-WB<zkrF!j3jy*SN9QY)GLgbCsax5=$_K!@aU^ zsysn&^0he8KGDnl@~*uE7ETW8fziX9i)^Kn^S9)+y3+D2mqDRrUO;`CZ+LJ-8>+gc zLK{=Bt-9kQRe|V}p#8I#iWm648@Os2@4$TiQt{XoK~M)gCFy^8sn{Ute?>a*>~}8} z>v(?jN0*AHfz_8T70&@1ffs=zz?Hl_b8>-lz_Y-1U}N!8u@87W;M{azU236t8aM|$ z2RvWJS?RodGj}D=fg{zNn-1LlnuTH?FXqev=YS`HM}g;oCxFLa$2sd)k?-{j#ofR; z;1uxu8z>Jv8iHS**K(FRy|b#0Gt`0YyB3OFywLO5FmwP{?c=N=;BjCzFZhh?2Osb( za0=Ky#yhCM#&Plik54QV>v#cZZW8){N2kCGTs2R9lFnI04ZIli7_c3<>YbDq$k|3` zfX9L7fpwgJw2BvzR&fSW7x3hN<h&!`Y2ZoVMc^4=`{U#XRzJa6@4U3M8`uau`9AUk zM~={5;Hsa6E?$B@3hV-o{5;R){+CF9Iq;+OFYqMq)ULXgegZZEkN#Ka1GfJr`GLoQ zr-3K`fc}03bo@8ozkMb6pQRjd4%h%Z{R!F+toviy4?OwToH73@`t5J%H{kg%LKkrN zSD+tw^s9{5D*Ewj<Od%8I%m`atG@{yuO|Pupaa<WPqZI60z4=1JJk0Y@_iS)z!Bgv z;91~l;A7ugC|(4%e;+)r<@rVM08avs2`tiY*FkrxSUd_mT~#cudL8(#E*1|0kG`~6 z3||kO#DDdL&;dLGJWFiXY2d|si^a`v<o<rrfhPyi*}$U@60^4&JX53tPXf;XcRz$) zm-_<cuBSY(4|sfr`he}T#JB->11|tafYmpEAJ_$yi|*Ge^~la3HMcVL+N-auK9ag} zrKHn@pzkx6iZ{C~`nPiafK$v|{;p3mHzj9gWm{&|-7l$mxcXpl*K6*$>6ROy)YaDl zY$V_Dw4}Ie3~)c65E=2Lq&H<&zBk>JS@n2TE)%|cSuRs|_=@&SLwa+jF_+ogmT7O# zbmcO;n=*Y}q<(lsrmi^?wq#aOt|?R9R<kwJxI43XXQsU=)3ucx7c-6bXEr}5r5iy1 zE<Vrk>HCXI#b+2hsqcMK-xF0$nee^Knlg2dOMUNNp35{IzH&>ZFP&eZg`tET<a9N4 z)KpDeUGYh-rt1C6Gb1}QQ@PAsd*)zjSEjG(H<o2aa+#_0Z)HXx9ls7$_oNuJ3zv$& zhl~<Bo)9|TD|9?A?SA(akbHP~OJ;LbReD9Hfh4*lK|uPQi&O8esj97zxw(ca<dX4v zj(YpfTq=f=kjt!mcRH6@b-1b{6Lw@)wPjZ3GS$i--yz@W?_Da6NWPZL%Jg8STKM2< z#wq;%rDCn5_heRfS^gVHZzTOEB)u!MvWIlxr8`OQBE1QG!S+l;RVtOKZq?z?dhX}> z!HbuQO!4TFdS*y}jPzYms^hiCNk2pSe!<rQzK+z2OtovG@Yqv44}W;6_)aNDzdkPQ zd$;h@;bmJg4LvI|Aqg}bhH0%y-<`bASw~6z-vQ5V@CZ(SZRE?<RY7os^!+?vjDK_b z=aLB99l{~9wovXgy6rGf$}QqM#yi1xQx&<ZwWjLJG`F!?86wG%TcoBt`8);w3+TkJ z@?Gk&`P354Cpsa0l9@w~&=KUIBdp;cqR2NWe+*svEoA=l(s|*k^!qCknyVShT)e73 zb8tluuqkta?-#G?<-XhQ)7vdWCoo5b^aGaQOH7nyaB}4FWwh_53nly_eD)F2FOt5V z@50xI)01$ZyJS2+!ShuwTPWUSX#(!&^Eae7kbcs}^D^VI9eMD{ip@nHtVrpspUaH2 z$rRVCg}--VyBxWe-*u4`dfVoCYc$W{;ls<fW;Wlmcs_R|`0-ufxd<LqW^`@i+lNRG zUa?S|l=%?z75Gh_f#3M*t(mU$EcBC7CeK=3MbeMo0AKjZh2pRAJ=h`rn4V#Rwbl$} zs)tCr8hLes=TFmbGS8FqD}8i@pIXf|RX+u%+C*!sNw>msh~#mV<V`jE5_f}{u<BKD z=3I^R+YI$ozjmScF&meq<l~W4)hj4lE+BP2JWZcG4W5J8a{A6_+&{6rkLO)W=2)ug zid5!!sw;CMh0-~m%1P4aWy+DQtkYU*S}f~4ut{?MMcPt^xJ&;jH}``{9xI|7Ky*B{ zgQV>>kMeCB-)4bY_8n4jj+8;4vQ4mckkYG9z`slK_>>N*aonfe?@RrePl-x3R`IMI zJRO;n)Nm@*k~s}L!{;oYbJPf?y*`)6gz9rWfz)Zeitj?)oI<j1S|*Pr2`M^kUkB`I z`h)UNs?1rHO=VS5Xnz8M)Y(S%K0^Ql2oLailu3M{eW7^A3z0`>QdQ|H8ud0B)vt{s z<sHi_4j-C&&2sXzX$MG0oRKLcm&}9jQ18imIRi!#RGy^Y?gffGzZToS?mo_ok>~9) zPwr)!Y^h1#m#LO{xlz^#Jpa8?d5@l5WM^!Hf~vo-%w#H=MSi^teAN#u6!%Mgc1ik& zNbe&(?-PL{*FHx2Nz%V5>FDn#(ybNji}VvrOLRkISZuA?;&ell(o{20n#JjvYh|so zccC~Yowhf!BfyoOlzIOwro<;R)mv-Q@61#``^kRvZ`HeHE^}?<(?j{WzJ=nml7O6v z?U3~2iSivaSd<>wTCzS)xt0A3#n(x_+VAN{>G+nKG5wp~323X?rb8v;@HF{@fra8b zMHy6@|FL}Bfw`96SCLtqeIfX+MpQODxKP|#I<B;Pk-Y87bXCceuOK@dJ{iCJ!MB;U zAHx-0ck*q9bXgPrl(ch6y^;QQ*=VW7A@cKMlz)u1<c|bvTt2ohRqt%cY(B79c$(Rw z_SuhwKGvc~1dq;xAdqpm_G<Wx^oNALEi!)a*Ws!?SQkYn_pv0~D9k0}-9rBAhZc%o zwf30aXcxO|2UhL|Ix37TGe?2+_oI|MHN8;$@KWO!%kOs39FzWDY#uoSNBa9Y@U49N zf*hG0U6TGKp^tR6U+syc|A_RE^t+?nu07XYgMCQ)$4lD-ABdf~x$5O5?b)gwA^5gY z?i_3Pjs!l@t3#x(ddEWXUc+}8JEVmr#T%uaZJCCa(uK(ubW(-pTU{czo}-?X_zZqU z(wtm7?&X@$@eQ6I<M}U$T@lZhn7`xo(N^Y5RR;@>3JjjBNl!015;uUl2Vcf{d=n4x zUFfj+FY;qJv#MDaBHMWMDET(OYoYi_^mu}v*uII!e@o`fHC4ZPMMZj)q22|G=fHRB zJqyJfpP!$$WRBES-I>lDt;uJO)$9Z|Ny;|q`o-n|`s4=5yOq2XmUjq<DNwTm*hX3E zm#arUFyP2fFBBI_`N!5NC$38OCg%eN)DxML7|^G#+5<%GUbP>%oBO?X56<`Vc?!HM z-@j0Nb?Nw3ws*R!-dnjbi0!Y^N*Jun=%JN&N|C!4Jz?=#mC7{29%V(GK5fB4aP;Ux zaSb#EtTPX%_de_SPR4nN=f`>e<T7qzzKh41b&J`totQ9HKV4OE6jZRvJo^~<s_{{M zgzx?mzI%@JW28SIi80?jkO}kA`u8~=eTRH!$+uDlEvBbZKW@pKNLSssEORowEpsaU z*34-{;Tb+>`J7`}f1V}i1>i;Q53<64tg1b8q-vLxx-CViR!Z$jlxm_>Go@HIr8_0p zn<@_yWARj)@?Dh2zDl=H>u&O6f}Bk6AaNWh#0}AePhdZ-I=)bRb17fM{Tu7SyIJRa zykhTS39hb8ON(@q^!r+Tf*0`pg?tyiu!}*K^cK=Dl75e*+qD*WKk1u)ZK2pH^FYS~ zg@3pzjXGb625G4o^k1Cbd7S)xzs`Amf&;teaC(>8U2oODo&3GKrqdYfDY86G{v+fU zA7Wx0V>>Kv_qNQ1RQi1t8;)H!nYoCqc#xicjPX1|uU|-2{eFtn4pQfUjB=`KteS6F z66uG03S;b29sx3@sj5QSQl^1zq)1!1q(8>+p-$oZye{ewl;Ytk<RU6X*Hhx5ao0A$ zhsfWDkMtUR+KKjUiR_VBKDJ<wh<~Vpg3#ep|IjzU7e2R8+$Xl0>W7X@*W29~+-(9( z=Fznb>d2??i5i`U(;b=3W%(W@-<{+;`00h>2PEIt$nSyPH+w0b*LR~fn-L++&mu!U ziDG*W!}QPaQG5y~#iy|)Gn)@z`R?V9U-8~$PgK1Rc5iH3A}3YJbw8h{ssGrSg<`j~ z=botkcpk^~(*W^KHDYeQkosXiP+rG^{McvA4z6Tp(f{Jd>#E8yb3`^G;v?hQ8AvjY zL*P06*@fcgq@OCuo0w1WOIGczJPn;)DSY%X@a_JKg`(gVd}eRqFFm~M;b>v*>?|42 zFOh$a{OcrtEEn4{VSi>7^Gvu-a9zzjI!M0aGHxo-ndG;FDLA46yE$`6{Z;paui>v2 zia#s$c1HdY_{0357;}f0rzfAK<335xJqJJh8T{}m=#h4Qi1J4$e~*+;(mj=Ki|kNm z{yG0A`A?Bw*GtOZm{YQLlNMS&!TTNZRsZ!u@u^b0J=nJoM0jmN+)17r*n@bC{2!P6 z^o#l37;N)nqyJOtvL=ZsO_s><CjB}@`D*qy!qV}N<#TLzZNrcAjf!H*=ofkWG4RP= ziQsng7+Z?3&yl|JZx@O`D7B~J`H&pHzN#-TW!^bOz~Gc=dohEAHy4`@?KLyhzl}Ya zBkbM$ZfQF!)xU*yegIU=(6UN)*QDQ<*^Q&EO&#kknYkRc=>3&kTlZwTwB4Ve-m_m? zC^nft=`!}U`2F9X8EMH(wPxlJ?)XRgu*NFde2-*C?#@hgWagU4w}*mVE0QTYRALU% z?iTi%j<Z*_VJW*aIlkD{|GlyuOZVPWdFtcC`w;a!MLh?<wNN}{dVUcfB1dS9NTG-e zamMT>37ruo-CtAnJBUJ&>6ykRnEoNXN&ie~wtIQ<yY5Msb`Zvl6vAbY#0Fh*$zH%V z_R^-l&E8!T373~2*xyxEf1Sx3t=f_~h6n$6Rcq!1_S4C#=FBN<sMDmK!Hzmom41{= zy=3YjQ#YBmO3|&AJBlv+9EN&T7x|}w81+?E`K$Q0gOqfePx_-P_|`^J6G)q^X543r z90TnrO8FRM9OrYQYCy<1Nur>o7aZR7DZXr%6qW#xOHIpDmg$iwrOHxpIT|^+WF{r> zz%rig15@7eq<_Uq%>xB<`iLdG!*cAg`-0u4KVb>J=Jd~6LWJUQSpo|gI{jGHC{W3G zyC+PFNJ@IPtOy%2Whv=jAOUY>)eKN5?I_Rige3@JiuA)}3Ccby?;pPo`|_4z@uwsS z{xQ9_RrFe#-JMm)bOftvn2lt4n*3cGi^Z>(=7;?cFGKQ=Cs$eOG$x<Osqav(`c~qu zOwU!CN9kW(G?A(%VLI`sMKh_rM&=g!EJ|T<_3LFx&H*p7dW=2e6OF~<7oJ~Eu{oIj z0&;1w5VnR0zNf*r`Ho`o^CItCqyB=z!^=?4)?MvxS!Z|5koIMnI@x1&_6kMi5`0&` zp8Yq@I5}6UKVo|>)*o9k=fZTZqTqCP&;8)LAAEi7#p1BZtEK$>Q%kt{tM;Xx^v5ut zW0O?}KzCku)Z7XFr@=q9z3BEc@=^PB{8_ItFbxknY4|K|hfl&h&qemN*hN30{5i^h znD2qw7wuw?Bi+)Edvm;nM>o6yd#jVZcpJAx{DKxsf0SXz0*g4Ir6!Hi!f*AUDoj`| z7z57~=e*n{^&zX-u<>Sz`lTP|`4OIfRGuq6!`CcN7udmfeubxa9&*mi2j%(B$PU4d zGdqMm*z{)Tz{(A=s8-S5l~`2OO*MUs69tJ|*DVXN_rZI$rno<1XIw{mUs<~J$41h3 zldg7FEa%JYnReM{-=5h#T}iv@y75u)90ZSa>%U+B-UI(T^}w;suC;vzecS)E#m$Cy zd_j!pAn^Aqzf^kf(>GiC5rgLp{!Cf<|7`blUoORS($c5O(odD$2VW^I*Hw0ZwCw)8 z-8br{KoI;%89it0{-8ZSWze@PIPdD~GU(Gi{DzgEv*-V6_b2TByupUAIXqJaPZ&IF zu<jq-^H-m9u+Q!{+Wm36zhH3l*Im9&dw#_3Jze`O{iLM_-*EXi8+^>*S%cv>-SgcB z4;nmUaOJn$^LB%ChX1JDpEua>PcGkk?D;{vKW%W8d7}CZ9yfT#;HrOi<wp!2H~105 zchT<K|Hb8-GI-Kp@NJ{h;8BC;4c1A}5!al-(*`dX-27el{I{&WBX)nzVBPoJ^H16H zIlDh^_owWB<@a5_-3E^vJYz7t=$=m*JZ12r!S)}x=Z_gYYq0KzF5Qo_hs*xnrO(;( z69z9DZ2VWlXYiy!U;ZUlzWPTlU%SD_44ySucd4}g-FAP>;CX`$y6F(hjVZf7V(^^7 z8?0VW$D8ebWzp5sXmCeaz9G9mXwT0WTopLEHDd6j!SS;4zP{>|%im>?m<r_&+_VZe zryV?E@T|dARW5zR;7Nnk%dDKiBL>eJth>TJpEG#cVD)mB?&<RIfYH6#o<C;rY+3&I zS-zE5R>t!Yd){cz4;nmea8<P{*Jsez{|8p?cv<@AEd8RTH(X`q4IVe>@qESdpR@E; zD_s5`db;fXmH*(zz0dA9*!>Z^KWXs1L63iBjl+lAM#t@-!P5qPzKdn|nz_QCZ`C_I zUp08{dEi-le%jzEgC`6gGx!06KW*?agL4L_3=SErK$=Us-O+dIHfyiJ%?6K1&?DDl z2LFS>IfLi+xaXfWc*@{0g9i=v8EiM$Xt2)UN`n_XUV~>1o;G;G;4y<o4Z6lG{(Is9 zN8c|S{3V0O4E~(KBL)u|oHE#FaJRuOgB=Dp8*DHb8ob%y%MDf=OdGsl?OjaqkC(E_ z@Ov!b-LCyB4F(1;bhz}d8T<!>zMO~6J6yg7gQ3Bd2KNlP=VJz^%kJM%c0ch2H!t61 z>F+V<@BdTT{n4^}SK9sNh|uWo|HugTYrf;Mpynb(K(8LF7nh@6rzKFGOG2yV^7~Y{ z{Pa3w&t;t}mw*0U!WZTKsB3m0t^m0%u$L{DxEkb=_etcEkRG{SY8h=?ieKAy7h4%6 zmlX?wpLg`hR+(HQ`1s}WbZq_!ckg3yJU(0idii|+%CW4HKtE{`yCHgCZTO1ub1iql z?$but5A6PS-_e@uf8L*l54v{#&%^ldnEt&7{@3e)>SHz!Hafv_&>#{85wIMwas{6% zJiKO5`X=7$^84G{8ioco-MVqOf2d)g;g*IsZ5rCJaXs%rH{{>6Y16>^!CM;p2X7sy zAIcAK_%hejpWO2HpuRA|Zx+t<4+QmkaQ9SD&zpq#`dm{-cBX%y-R+y0tsj^j9UIDy z4h8jc$AN1jLH*GD1n=%S$jQw5#J?AvyxGgMX^yv*0#XqNsn$=8xj*&$Ci$XoZPyR; zh@6vp>|}j@Wbg1ahc@jU8KS(ubLIE;Pfv56w3hJS9~>l`6qUNbqI7YB^q@-(>IVu1 zrE#zJ0q2?T_kH){K#}VrBK>GI+7}PK9`SXQi&H`w0+IE;e2;zcF!Tit!U!eT8@WrC zpRw{D-cXX;{gziUN%kMUhphMYd;R9&ZX?+1JFj0nj<@hd`oNd>`p-lC;V_<yeiT%` zyw_W8q>1i}%9}p*de!SsvglRbf1RX?F7xHR{_@Zp3ZDKbpW*8Tif;7jUO#%+XZgzM zx8&eKzQ~yP@?Kwi==HU)zr6jjk0Wgo{Bn8w#Y48jORn<qe}t#W@~6!H@sJR)lFQ$F z_>*Pj&scd6kNbuh7EixN`dC@{gLk<n9)9M-r6cC+_2r)^EAQ<!551k^^Ov{({Z`(S z*=P2ihpXP>OF9^q-s*m|Q0U9gjk<3h%DckJtGs@RQB9T)$6a|3KM^KN$NcY8KgJir zJ#`L9nzv6+A8~lf``h1pc#1MIWjvYQem(O7%Rfh1q2HH3YxeKi=P6GSz5blP$@1r{ z{5dP%<qcuW9~$)F@Ax9T@9Xz=VZ#Sq`_Bk+E<ZnfyFDKr=2^0SZ$Ae=@5-NdKyk<) zU*5y7mY4VX_?Ro$6_s>fe7!#Tn|u*mp8h^7-(}_JYE7V7fzY4_|H2n*qEAxj%Zq$Y VUgdd9+MdYxE~`IPR-o)Q_#X!!hD-ne literal 0 HcmV?d00001 diff --git a/node_modules/semver/CHANGELOG.md b/node_modules/semver/CHANGELOG.md new file mode 100644 index 0000000..91f298d --- /dev/null +++ b/node_modules/semver/CHANGELOG.md @@ -0,0 +1,47 @@ +# changes log + +## 6.0 + +* Fix `intersects` logic. + + This is technically a bug fix, but since it is also a change to behavior + that may require users updating their code, it is marked as a major + version increment. + +## 5.7 + +* Add `minVersion` method + +## 5.6 + +* Move boolean `loose` param to an options object, with + backwards-compatibility protection. +* Add ability to opt out of special prerelease version handling with + the `includePrerelease` option flag. + +## 5.5 + +* Add version coercion capabilities + +## 5.4 + +* Add intersection checking + +## 5.3 + +* Add `minSatisfying` method + +## 5.2 + +* Add `prerelease(v)` that returns prerelease components + +## 5.1 + +* Add Backus-Naur for ranges +* Remove excessively cute inspection methods + +## 5.0 + +* Remove AMD/Browserified build artifacts +* Fix ltr and gtr when using the `*` range +* Fix for range `*` with a prerelease identifier diff --git a/node_modules/semver/LICENSE b/node_modules/semver/LICENSE new file mode 100644 index 0000000..19129e3 --- /dev/null +++ b/node_modules/semver/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md new file mode 100644 index 0000000..97d0f74 --- /dev/null +++ b/node_modules/semver/README.md @@ -0,0 +1,430 @@ +semver(1) -- The semantic versioner for npm +=========================================== + +## Install + +```bash +npm install semver +```` + +## Usage + +As a node module: + +```js +const semver = require('semver') + +semver.valid('1.2.3') // '1.2.3' +semver.valid('a.b.c') // null +semver.clean(' =v1.2.3 ') // '1.2.3' +semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true +semver.gt('1.2.3', '9.8.7') // false +semver.lt('1.2.3', '9.8.7') // true +semver.minVersion('>=1.0.0') // '1.0.0' +semver.valid(semver.coerce('v2')) // '2.0.0' +semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7' +``` + +As a command-line utility: + +``` +$ semver -h + +A JavaScript implementation of the https://semver.org/ specification +Copyright Isaac Z. Schlueter + +Usage: semver [options] <version> [<version> [...]] +Prints valid versions sorted by SemVer precedence + +Options: +-r --range <range> + Print versions that match the specified range. + +-i --increment [<level>] + Increment a version by the specified level. Level can + be one of: major, minor, patch, premajor, preminor, + prepatch, or prerelease. Default level is 'patch'. + Only one version may be specified. + +--preid <identifier> + Identifier to be used to prefix premajor, preminor, + prepatch or prerelease version increments. + +-l --loose + Interpret versions and ranges loosely + +-p --include-prerelease + Always include prerelease versions in range matching + +-c --coerce + Coerce a string into SemVer if possible + (does not imply --loose) + +Program exits successfully if any valid version satisfies +all supplied ranges, and prints all satisfying versions. + +If no satisfying versions are found, then exits failure. + +Versions are printed in ascending order, so supplying +multiple versions to the utility will just sort them. +``` + +## Versions + +A "version" is described by the `v2.0.0` specification found at +<https://semver.org/>. + +A leading `"="` or `"v"` character is stripped off and ignored. + +## Ranges + +A `version range` is a set of `comparators` which specify versions +that satisfy the range. + +A `comparator` is composed of an `operator` and a `version`. The set +of primitive `operators` is: + +* `<` Less than +* `<=` Less than or equal to +* `>` Greater than +* `>=` Greater than or equal to +* `=` Equal. If no operator is specified, then equality is assumed, + so this operator is optional, but MAY be included. + +For example, the comparator `>=1.2.7` would match the versions +`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6` +or `1.1.0`. + +Comparators can be joined by whitespace to form a `comparator set`, +which is satisfied by the **intersection** of all of the comparators +it includes. + +A range is composed of one or more comparator sets, joined by `||`. A +version matches a range if and only if every comparator in at least +one of the `||`-separated comparator sets is satisfied by the version. + +For example, the range `>=1.2.7 <1.3.0` would match the versions +`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`, +or `1.1.0`. + +The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`, +`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`. + +### Prerelease Tags + +If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then +it will only be allowed to satisfy comparator sets if at least one +comparator with the same `[major, minor, patch]` tuple also has a +prerelease tag. + +For example, the range `>1.2.3-alpha.3` would be allowed to match the +version `1.2.3-alpha.7`, but it would *not* be satisfied by +`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater +than" `1.2.3-alpha.3` according to the SemVer sort rules. The version +range only accepts prerelease tags on the `1.2.3` version. The +version `3.4.5` *would* satisfy the range, because it does not have a +prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`. + +The purpose for this behavior is twofold. First, prerelease versions +frequently are updated very quickly, and contain many breaking changes +that are (by the author's design) not yet fit for public consumption. +Therefore, by default, they are excluded from range matching +semantics. + +Second, a user who has opted into using a prerelease version has +clearly indicated the intent to use *that specific* set of +alpha/beta/rc versions. By including a prerelease tag in the range, +the user is indicating that they are aware of the risk. However, it +is still not appropriate to assume that they have opted into taking a +similar risk on the *next* set of prerelease versions. + +Note that this behavior can be suppressed (treating all prerelease +versions as if they were normal versions, for the purpose of range +matching) by setting the `includePrerelease` flag on the options +object to any +[functions](https://github.com/npm/node-semver#functions) that do +range matching. + +#### Prerelease Identifiers + +The method `.inc` takes an additional `identifier` string argument that +will append the value of the string as a prerelease identifier: + +```javascript +semver.inc('1.2.3', 'prerelease', 'beta') +// '1.2.4-beta.0' +``` + +command-line example: + +```bash +$ semver 1.2.3 -i prerelease --preid beta +1.2.4-beta.0 +``` + +Which then can be used to increment further: + +```bash +$ semver 1.2.4-beta.0 -i prerelease +1.2.4-beta.1 +``` + +### Advanced Range Syntax + +Advanced range syntax desugars to primitive comparators in +deterministic ways. + +Advanced ranges may be combined in the same way as primitive +comparators using white space or `||`. + +#### Hyphen Ranges `X.Y.Z - A.B.C` + +Specifies an inclusive set. + +* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` + +If a partial version is provided as the first version in the inclusive +range, then the missing pieces are replaced with zeroes. + +* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4` + +If a partial version is provided as the second version in the +inclusive range, then all versions that start with the supplied parts +of the tuple are accepted, but nothing that would be greater than the +provided tuple parts. + +* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0` +* `1.2.3 - 2` := `>=1.2.3 <3.0.0` + +#### X-Ranges `1.2.x` `1.X` `1.2.*` `*` + +Any of `X`, `x`, or `*` may be used to "stand in" for one of the +numeric values in the `[major, minor, patch]` tuple. + +* `*` := `>=0.0.0` (Any version satisfies) +* `1.x` := `>=1.0.0 <2.0.0` (Matching major version) +* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions) + +A partial version range is treated as an X-Range, so the special +character is in fact optional. + +* `""` (empty string) := `*` := `>=0.0.0` +* `1` := `1.x.x` := `>=1.0.0 <2.0.0` +* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0` + +#### Tilde Ranges `~1.2.3` `~1.2` `~1` + +Allows patch-level changes if a minor version is specified on the +comparator. Allows minor-level changes if not. + +* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0` +* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`) +* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`) +* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0` +* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`) +* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`) +* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. + +#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4` + +Allows changes that do not modify the left-most non-zero element in the +`[major, minor, patch]` tuple. In other words, this allows patch and +minor updates for versions `1.0.0` and above, patch updates for +versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`. + +Many authors treat a `0.x` version as if the `x` were the major +"breaking-change" indicator. + +Caret ranges are ideal when an author may make breaking changes +between `0.2.4` and `0.3.0` releases, which is a common practice. +However, it presumes that there will *not* be breaking changes between +`0.2.4` and `0.2.5`. It allows for changes that are presumed to be +additive (but non-breaking), according to commonly observed practices. + +* `^1.2.3` := `>=1.2.3 <2.0.0` +* `^0.2.3` := `>=0.2.3 <0.3.0` +* `^0.0.3` := `>=0.0.3 <0.0.4` +* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in + the `1.2.3` version will be allowed, if they are greater than or + equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but + `1.2.4-beta.2` would not, because it is a prerelease of a + different `[major, minor, patch]` tuple. +* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the + `0.0.3` version *only* will be allowed, if they are greater than or + equal to `beta`. So, `0.0.3-pr.2` would be allowed. + +When parsing caret ranges, a missing `patch` value desugars to the +number `0`, but will allow flexibility within that value, even if the +major and minor versions are both `0`. + +* `^1.2.x` := `>=1.2.0 <2.0.0` +* `^0.0.x` := `>=0.0.0 <0.1.0` +* `^0.0` := `>=0.0.0 <0.1.0` + +A missing `minor` and `patch` values will desugar to zero, but also +allow flexibility within those values, even if the major version is +zero. + +* `^1.x` := `>=1.0.0 <2.0.0` +* `^0.x` := `>=0.0.0 <1.0.0` + +### Range Grammar + +Putting all this together, here is a Backus-Naur grammar for ranges, +for the benefit of parser authors: + +```bnf +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ +``` + +## Functions + +All methods and classes take a final `options` object argument. All +options in this object are `false` by default. The options supported +are: + +- `loose` Be more forgiving about not-quite-valid semver strings. + (Any resulting output will always be 100% strict compliant, of + course.) For backwards compatibility reasons, if the `options` + argument is a boolean value instead of an object, it is interpreted + to be the `loose` param. +- `includePrerelease` Set to suppress the [default + behavior](https://github.com/npm/node-semver#prerelease-tags) of + excluding prerelease tagged versions from ranges unless they are + explicitly opted into. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. +* `prerelease(v)`: Returns an array of prerelease components, or null + if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]` +* `major(v)`: Return the major version number. +* `minor(v)`: Return the minor version number. +* `patch(v)`: Return the patch version number. +* `intersects(r1, r2, loose)`: Return true if the two supplied ranges + or comparators intersect. +* `parse(v)`: Attempt to parse a string as a semantic version, returning either + a `SemVer` object or `null`. + +### Comparison + +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, + even if they're not the exact same string. You already know how to + compare strings. +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call + the corresponding function above. `"==="` and `"!=="` do simple + string comparison, but are included for completeness. Throws if an + invalid comparison string is provided. +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. +* `compareBuild(v1, v2)`: The same as `compare` but considers `build` when two versions + are equal. Sorts in ascending order if passed to `Array.sort()`. + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `diff(v1, v2)`: Returns difference between two versions by the release type + (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), + or null if the versions are the same. + +### Comparators + +* `intersects(comparator)`: Return true if the comparators intersect + +### Ranges + +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the + range. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `minSatisfying(versions, range)`: Return the lowest version in the list + that satisfies the range, or `null` if none of them do. +* `minVersion(range)`: Return the lowest version that can possibly match + the given range. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) +* `intersects(range)`: Return true if any of the ranges comparators intersect + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. + +### Coercion + +* `coerce(version)`: Coerces a string to semver if possible + +This aims to provide a very forgiving translation of a non-semver +string to semver. It looks for the first digit in a string, and +consumes all remaining characters which satisfy at least a partial semver +(e.g., `1`, `1.2`, `1.2.3`) up to the max permitted length (256 characters). +Longer versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`). +All surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes `3.4.0`). +Only text which lacks digits will fail coercion (`version one` is not valid). +The maximum length for any semver component considered for coercion is 16 characters; +longer components will be ignored (`10000000000000000.4.7.4` becomes `4.7.4`). +The maximum value for any semver component is `Integer.MAX_SAFE_INTEGER || (2**53 - 1)`; +higher value components are invalid (`9999999999999999.4.7.4` is likely invalid). + +### Clean + +* `clean(version)`: Clean a string to be a valid semver if possible + +This will return a cleaned and trimmed semver version. If the provided version is not valid a null will be returned. This does not work for ranges. + +ex. +* `s.clean(' = v 2.1.5foo')`: `null` +* `s.clean(' = v 2.1.5foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean(' = v 2.1.5-foo')`: `null` +* `s.clean(' = v 2.1.5-foo', { loose: true })`: `'2.1.5-foo'` +* `s.clean('=v2.1.5')`: `'2.1.5'` +* `s.clean(' =v2.1.5')`: `2.1.5` +* `s.clean(' 2.1.5 ')`: `'2.1.5'` +* `s.clean('~1.0.0')`: `null` diff --git a/node_modules/semver/bin/semver b/node_modules/semver/bin/semver new file mode 100755 index 0000000..801e77f --- /dev/null +++ b/node_modules/semver/bin/semver @@ -0,0 +1,160 @@ +#!/usr/bin/env node +// Standalone semver comparison program. +// Exits successfully and prints matching version(s) if +// any supplied version is valid and passes all tests. + +var argv = process.argv.slice(2) + +var versions = [] + +var range = [] + +var inc = null + +var version = require('../package.json').version + +var loose = false + +var includePrerelease = false + +var coerce = false + +var identifier + +var semver = require('../semver') + +var reverse = false + +var options = {} + +main() + +function main () { + if (!argv.length) return help() + while (argv.length) { + var a = argv.shift() + var indexOfEqualSign = a.indexOf('=') + if (indexOfEqualSign !== -1) { + a = a.slice(0, indexOfEqualSign) + argv.unshift(a.slice(indexOfEqualSign + 1)) + } + switch (a) { + case '-rv': case '-rev': case '--rev': case '--reverse': + reverse = true + break + case '-l': case '--loose': + loose = true + break + case '-p': case '--include-prerelease': + includePrerelease = true + break + case '-v': case '--version': + versions.push(argv.shift()) + break + case '-i': case '--inc': case '--increment': + switch (argv[0]) { + case 'major': case 'minor': case 'patch': case 'prerelease': + case 'premajor': case 'preminor': case 'prepatch': + inc = argv.shift() + break + default: + inc = 'patch' + break + } + break + case '--preid': + identifier = argv.shift() + break + case '-r': case '--range': + range.push(argv.shift()) + break + case '-c': case '--coerce': + coerce = true + break + case '-h': case '--help': case '-?': + return help() + default: + versions.push(a) + break + } + } + + var options = { loose: loose, includePrerelease: includePrerelease } + + versions = versions.map(function (v) { + return coerce ? (semver.coerce(v) || { version: v }).version : v + }).filter(function (v) { + return semver.valid(v) + }) + if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) { return failInc() } + + for (var i = 0, l = range.length; i < l; i++) { + versions = versions.filter(function (v) { + return semver.satisfies(v, range[i], options) + }) + if (!versions.length) return fail() + } + return success(versions) +} + +function failInc () { + console.error('--inc can only be used on a single version with no range') + fail() +} + +function fail () { process.exit(1) } + +function success () { + var compare = reverse ? 'rcompare' : 'compare' + versions.sort(function (a, b) { + return semver[compare](a, b, options) + }).map(function (v) { + return semver.clean(v, options) + }).map(function (v) { + return inc ? semver.inc(v, inc, options, identifier) : v + }).forEach(function (v, i, _) { console.log(v) }) +} + +function help () { + console.log(['SemVer ' + version, + '', + 'A JavaScript implementation of the https://semver.org/ specification', + 'Copyright Isaac Z. Schlueter', + '', + 'Usage: semver [options] <version> [<version> [...]]', + 'Prints valid versions sorted by SemVer precedence', + '', + 'Options:', + '-r --range <range>', + ' Print versions that match the specified range.', + '', + '-i --increment [<level>]', + ' Increment a version by the specified level. Level can', + ' be one of: major, minor, patch, premajor, preminor,', + " prepatch, or prerelease. Default level is 'patch'.", + ' Only one version may be specified.', + '', + '--preid <identifier>', + ' Identifier to be used to prefix premajor, preminor,', + ' prepatch or prerelease version increments.', + '', + '-l --loose', + ' Interpret versions and ranges loosely', + '', + '-p --include-prerelease', + ' Always include prerelease versions in range matching', + '', + '-c --coerce', + ' Coerce a string into SemVer if possible', + ' (does not imply --loose)', + '', + 'Program exits successfully if any valid version satisfies', + 'all supplied ranges, and prints all satisfying versions.', + '', + 'If no satisfying versions are found, then exits failure.', + '', + 'Versions are printed in ascending order, so supplying', + 'multiple versions to the utility will just sort them.' + ].join('\n')) +} diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json new file mode 100644 index 0000000..6c68916 --- /dev/null +++ b/node_modules/semver/package.json @@ -0,0 +1,62 @@ +{ + "_from": "semver@^6.1.1", + "_id": "semver@6.1.2", + "_inBundle": false, + "_integrity": "sha512-z4PqiCpomGtWj8633oeAdXm1Kn1W++3T8epkZYnwiVgIYIJ0QHszhInYSJTYxebByQH7KVCEAn8R9duzZW2PhQ==", + "_location": "/semver", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "semver@^6.1.1", + "name": "semver", + "escapedName": "semver", + "rawSpec": "^6.1.1", + "saveSpec": null, + "fetchSpec": "^6.1.1" + }, + "_requiredBy": [ + "/", + "/@actions/tool-cache", + "/istanbul-lib-instrument" + ], + "_resolved": "https://registry.npmjs.org/semver/-/semver-6.1.2.tgz", + "_shasum": "079960381376a3db62eb2edc8a3bfb10c7cfe318", + "_spec": "semver@^6.1.1", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node", + "bin": { + "semver": "./bin/semver" + }, + "bugs": { + "url": "https://github.com/npm/node-semver/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "The semantic version parser used by npm.", + "devDependencies": { + "tap": "^14.1.6" + }, + "files": [ + "bin", + "range.bnf", + "semver.js" + ], + "homepage": "https://github.com/npm/node-semver#readme", + "license": "ISC", + "main": "semver.js", + "name": "semver", + "repository": { + "type": "git", + "url": "git+https://github.com/npm/node-semver.git" + }, + "scripts": { + "postpublish": "git push origin --follow-tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap" + }, + "tap": { + "check-coverage": true + }, + "version": "6.1.2" +} diff --git a/node_modules/semver/range.bnf b/node_modules/semver/range.bnf new file mode 100644 index 0000000..d4c6ae0 --- /dev/null +++ b/node_modules/semver/range.bnf @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | [1-9] ( [0-9] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js new file mode 100644 index 0000000..57517c1 --- /dev/null +++ b/node_modules/semver/semver.js @@ -0,0 +1,1552 @@ +exports = module.exports = SemVer + +var debug +/* istanbul ignore next */ +if (typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG)) { + debug = function () { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift('SEMVER') + console.log.apply(console, args) + } +} else { + debug = function () {} +} + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0' + +var MAX_LENGTH = 256 +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16 + +// The actual regexps go on exports.re +var re = exports.re = [] +var src = exports.src = [] +var R = 0 + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++ +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*' +var NUMERICIDENTIFIERLOOSE = R++ +src[NUMERICIDENTIFIERLOOSE] = '[0-9]+' + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++ +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++ +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')' + +var MAINVERSIONLOOSE = R++ +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')' + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++ +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +var PRERELEASEIDENTIFIERLOOSE = R++ +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++ +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))' + +var PRERELEASELOOSE = R++ +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))' + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++ +src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+' + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++ +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))' + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++ +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?' + +src[FULL] = '^' + FULLPLAIN + '$' + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?' + +var LOOSE = R++ +src[LOOSE] = '^' + LOOSEPLAIN + '$' + +var GTLT = R++ +src[GTLT] = '((?:<|>)?=?)' + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++ +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' +var XRANGEIDENTIFIER = R++ +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*' + +var XRANGEPLAIN = R++ +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:' + src[PRERELEASE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGEPLAINLOOSE = R++ +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[PRERELEASELOOSE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGE = R++ +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$' +var XRANGELOOSE = R++ +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$' + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +var COERCE = R++ +src[COERCE] = '(?:^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])' + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++ +src[LONETILDE] = '(?:~>?)' + +var TILDETRIM = R++ +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+' +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g') +var tildeTrimReplace = '$1~' + +var TILDE = R++ +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$' +var TILDELOOSE = R++ +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$' + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++ +src[LONECARET] = '(?:\\^)' + +var CARETTRIM = R++ +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+' +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g') +var caretTrimReplace = '$1^' + +var CARET = R++ +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$' +var CARETLOOSE = R++ +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$' + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++ +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$' +var COMPARATOR = R++ +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$' + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++ +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')' + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g') +var comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++ +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$' + +var HYPHENRANGELOOSE = R++ +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$' + +// Star ranges basically just allow anything at all. +var STAR = R++ +src[STAR] = '(<|>)?=?\\s*\\*' + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]) + if (!re[i]) { + re[i] = new RegExp(src[i]) + } +} + +exports.parse = parse +function parse (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + var r = options.loose ? re[LOOSE] : re[FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +exports.valid = valid +function valid (version, options) { + var v = parse(version, options) + return v ? v.version : null +} + +exports.clean = clean +function clean (version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} + +exports.SemVer = SemVer + +function SemVer (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + if (version instanceof SemVer) { + if (version.loose === options.loose) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + } + + if (!(this instanceof SemVer)) { + return new SemVer(version, options) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + + var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL]) + + if (!m) { + throw new TypeError('Invalid Version: ' + version) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map(function (id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() +} + +SemVer.prototype.format = function () { + this.version = this.major + '.' + this.minor + '.' + this.patch + if (this.prerelease.length) { + this.version += '-' + this.prerelease.join('.') + } + return this.version +} + +SemVer.prototype.toString = function () { + return this.version +} + +SemVer.prototype.compare = function (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return this.compareMain(other) || this.comparePre(other) +} + +SemVer.prototype.compareMain = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) +} + +SemVer.prototype.comparePre = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + var i = 0 + do { + var a = this.prerelease[i] + var b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +SemVer.prototype.compareBuild = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + var i = 0 + do { + var a = this.build[i] + var b = other.build[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + var i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break + + default: + throw new Error('invalid increment argument: ' + release) + } + this.format() + this.raw = this.version + return this +} + +exports.inc = inc +function inc (version, release, loose, identifier) { + if (typeof (loose) === 'string') { + identifier = loose + loose = undefined + } + + try { + return new SemVer(version, loose).inc(release, identifier).version + } catch (er) { + return null + } +} + +exports.diff = diff +function diff (version1, version2) { + if (eq(version1, version2)) { + return null + } else { + var v1 = parse(version1) + var v2 = parse(version2) + var prefix = '' + if (v1.prerelease.length || v2.prerelease.length) { + prefix = 'pre' + var defaultResult = 'prerelease' + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } +} + +exports.compareIdentifiers = compareIdentifiers + +var numeric = /^[0-9]+$/ +function compareIdentifiers (a, b) { + var anum = numeric.test(a) + var bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +exports.rcompareIdentifiers = rcompareIdentifiers +function rcompareIdentifiers (a, b) { + return compareIdentifiers(b, a) +} + +exports.major = major +function major (a, loose) { + return new SemVer(a, loose).major +} + +exports.minor = minor +function minor (a, loose) { + return new SemVer(a, loose).minor +} + +exports.patch = patch +function patch (a, loose) { + return new SemVer(a, loose).patch +} + +exports.compare = compare +function compare (a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)) +} + +exports.compareLoose = compareLoose +function compareLoose (a, b) { + return compare(a, b, true) +} + +exports.compareBuild = compareBuild +function compareBuild (a, b, loose) { + var versionA = new SemVer(a, loose) + var versionB = new SemVer(b, loose) + return versionA.compare(versionB) || versionA.compareBuild(versionB) +} + +exports.rcompare = rcompare +function rcompare (a, b, loose) { + return compare(b, a, loose) +} + +exports.sort = sort +function sort (list, loose) { + return list.sort(function (a, b) { + return exports.compareBuild(a, b, loose) + }) +} + +exports.rsort = rsort +function rsort (list, loose) { + return list.sort(function (a, b) { + return exports.compareBuild(b, a, loose) + }) +} + +exports.gt = gt +function gt (a, b, loose) { + return compare(a, b, loose) > 0 +} + +exports.lt = lt +function lt (a, b, loose) { + return compare(a, b, loose) < 0 +} + +exports.eq = eq +function eq (a, b, loose) { + return compare(a, b, loose) === 0 +} + +exports.neq = neq +function neq (a, b, loose) { + return compare(a, b, loose) !== 0 +} + +exports.gte = gte +function gte (a, b, loose) { + return compare(a, b, loose) >= 0 +} + +exports.lte = lte +function lte (a, b, loose) { + return compare(a, b, loose) <= 0 +} + +exports.cmp = cmp +function cmp (a, op, b, loose) { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError('Invalid operator: ' + op) + } +} + +exports.Comparator = Comparator +function Comparator (comp, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + if (!(this instanceof Comparator)) { + return new Comparator(comp, options) + } + + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) +} + +var ANY = {} +Comparator.prototype.parse = function (comp) { + var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR] + var m = comp.match(r) + + if (!m) { + throw new TypeError('Invalid comparator: ' + comp) + } + + this.operator = m[1] !== undefined ? m[1] : '' + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } +} + +Comparator.prototype.toString = function () { + return this.value +} + +Comparator.prototype.test = function (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY || version === ANY) { + return true + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + return cmp(version, this.operator, this.semver, this.options) +} + +Comparator.prototype.intersects = function (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + var rangeTmp + + if (this.operator === '') { + if (this.value === '') { + return true + } + rangeTmp = new Range(comp.value, options) + return satisfies(this.value, rangeTmp, options) + } else if (comp.operator === '') { + if (comp.value === '') { + return true + } + rangeTmp = new Range(this.value, options) + return satisfies(comp.semver, rangeTmp, options) + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + var sameSemVer = this.semver.version === comp.semver.version + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')) + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')) + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan +} + +exports.Range = Range +function Range (range, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + return new Range(range.value, options) + } + + if (!(this instanceof Range)) { + return new Range(range, options) + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range + this.set = range.split(/\s*\|\|\s*/).map(function (range) { + return this.parseRange(range.trim()) + }, this).filter(function (c) { + // throw out any that are not relevant for whatever reason + return c.length + }) + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range) + } + + this.format() +} + +Range.prototype.format = function () { + this.range = this.set.map(function (comps) { + return comps.join(' ').trim() + }).join('||').trim() + return this.range +} + +Range.prototype.toString = function () { + return this.range +} + +Range.prototype.parseRange = function (range) { + var loose = this.options.loose + range = range.trim() + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE] + range = range.replace(hr, hyphenReplace) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, re[COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[CARETTRIM], caretTrimReplace) + + // normalize spaces + range = range.split(/\s+/).join(' ') + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR] + var set = range.split(' ').map(function (comp) { + return parseComparator(comp, this.options) + }, this).join(' ').split(/\s+/) + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function (comp) { + return !!comp.match(compRe) + }) + } + set = set.map(function (comp) { + return new Comparator(comp, this.options) + }, this) + + return set +} + +Range.prototype.intersects = function (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some(function (thisComparators) { + return ( + isSatisfiable(thisComparators, options) && + range.set.some(function (rangeComparators) { + return ( + isSatisfiable(rangeComparators, options) && + thisComparators.every(function (thisComparator) { + return rangeComparators.every(function (rangeComparator) { + return thisComparator.intersects(rangeComparator, options) + }) + }) + ) + }) + ) + }) +} + +// take a set of comparators and determine whether there +// exists a version which can satisfy it +function isSatisfiable (comparators, options) { + var result = true + var remainingComparators = comparators.slice() + var testComparator = remainingComparators.pop() + + while (result && remainingComparators.length) { + result = remainingComparators.every(function (otherComparator) { + return testComparator.intersects(otherComparator, options) + }) + + testComparator = remainingComparators.pop() + } + + return result +} + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators +function toComparators (range, options) { + return new Range(range, options).set.map(function (comp) { + return comp.map(function (c) { + return c.value + }).join(' ').trim().split(' ') + }) +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator (comp, options) { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +function isX (id) { + return !id || id.toLowerCase() === 'x' || id === '*' +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceTilde(comp, options) + }).join(' ') +} + +function replaceTilde (comp, options) { + var r = options.loose ? re[TILDELOOSE] : re[TILDE] + return comp.replace(r, function (_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else if (pr) { + debug('replaceTilde pr', pr) + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } else { + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceCaret(comp, options) + }).join(' ') +} + +function replaceCaret (comp, options) { + debug('caret', comp, options) + var r = options.loose ? re[CARETLOOSE] : re[CARET] + return comp.replace(r, function (_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + if (M === '0') { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else { + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + (+M + 1) + '.0.0' + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0' + } + } + + debug('caret return', ret) + return ret + }) +} + +function replaceXRanges (comp, options) { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map(function (comp) { + return replaceXRange(comp, options) + }).join(' ') +} + +function replaceXRange (comp, options) { + comp = comp.trim() + var r = options.loose ? re[XRANGELOOSE] : re[XRANGE] + return comp.replace(r, function (ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + var xM = isX(M) + var xm = xM || isX(m) + var xp = xm || isX(p) + var anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + ret = gtlt + M + '.' + m + '.' + p + } else if (xm) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (xp) { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars (comp, options) { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[STAR], '') +} + +// This function is passed to string.replace(re[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = '>=' + fM + '.0.0' + } else if (isX(fp)) { + from = '>=' + fM + '.' + fm + '.0' + } else { + from = '>=' + from + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = '<' + (+tM + 1) + '.0.0' + } else if (isX(tp)) { + to = '<' + tM + '.' + (+tm + 1) + '.0' + } else if (tpr) { + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr + } else { + to = '<=' + to + } + + return (from + ' ' + to).trim() +} + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + try { + version = new SemVer(version, this.options) + } catch (er) { + return false + } + } + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false +} + +function testSet (set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + +exports.satisfies = satisfies +function satisfies (version, range, options) { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} + +exports.maxSatisfying = maxSatisfying +function maxSatisfying (versions, range, options) { + var max = null + var maxSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} + +exports.minSatisfying = minSatisfying +function minSatisfying (versions, range, options) { + var min = null + var minSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} + +exports.minVersion = minVersion +function minVersion (range, loose) { + range = new Range(range, loose) + + var minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + comparators.forEach(function (comparator) { + // Clone to avoid manipulating the comparator's semver object. + var compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!minver || gt(minver, compver)) { + minver = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error('Unexpected operation: ' + comparator.operator) + } + }) + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} + +exports.validRange = validRange +function validRange (range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr +function ltr (version, range, options) { + return outside(version, range, '<', options) +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr +function gtr (version, range, options) { + return outside(version, range, '>', options) +} + +exports.outside = outside +function outside (version, range, hilo, options) { + version = new SemVer(version, options) + range = new Range(range, options) + + var gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + var high = null + var low = null + + comparators.forEach(function (comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +exports.prerelease = prerelease +function prerelease (version, options) { + var parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} + +exports.intersects = intersects +function intersects (r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} + +exports.coerce = coerce +function coerce (version, options) { + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + var match = version.match(re[COERCE]) + + if (match == null) { + return null + } + + return parse(match[1] + + '.' + (match[2] || '0') + + '.' + (match[3] || '0'), options) +} diff --git a/node_modules/shelljs/.documentup.json b/node_modules/shelljs/.documentup.json new file mode 100644 index 0000000..57fe301 --- /dev/null +++ b/node_modules/shelljs/.documentup.json @@ -0,0 +1,6 @@ +{ + "name": "ShellJS", + "twitter": [ + "r2r" + ] +} diff --git a/node_modules/shelljs/.jshintrc b/node_modules/shelljs/.jshintrc new file mode 100644 index 0000000..a80c559 --- /dev/null +++ b/node_modules/shelljs/.jshintrc @@ -0,0 +1,7 @@ +{ + "loopfunc": true, + "sub": true, + "undef": true, + "unused": true, + "node": true +} \ No newline at end of file diff --git a/node_modules/shelljs/.npmignore b/node_modules/shelljs/.npmignore new file mode 100644 index 0000000..6b20c38 --- /dev/null +++ b/node_modules/shelljs/.npmignore @@ -0,0 +1,2 @@ +test/ +tmp/ \ No newline at end of file diff --git a/node_modules/shelljs/.travis.yml b/node_modules/shelljs/.travis.yml new file mode 100644 index 0000000..99cdc74 --- /dev/null +++ b/node_modules/shelljs/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.11" diff --git a/node_modules/shelljs/LICENSE b/node_modules/shelljs/LICENSE new file mode 100644 index 0000000..1b35ee9 --- /dev/null +++ b/node_modules/shelljs/LICENSE @@ -0,0 +1,26 @@ +Copyright (c) 2012, Artur Adib <aadib@mozilla.com> +All rights reserved. + +You may use this project under the terms of the New BSD license as follows: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Artur Adib nor the + names of the contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/shelljs/README.md b/node_modules/shelljs/README.md new file mode 100644 index 0000000..51358bd --- /dev/null +++ b/node_modules/shelljs/README.md @@ -0,0 +1,569 @@ +# ShellJS - Unix shell commands for Node.js [](http://travis-ci.org/arturadib/shelljs) + +ShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts! + +The project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled-tested in projects like: + ++ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's next-gen PDF reader ++ [Firebug](http://getfirebug.com/) - Firefox's infamous debugger ++ [JSHint](http://jshint.com) - Most popular JavaScript linter ++ [Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern browsers ++ [Yeoman](http://yeoman.io/) - Web application stack and development tool ++ [Deployd.com](http://deployd.com) - Open source PaaS for quick API backend generation + +and [many more](https://npmjs.org/browse/depended/shelljs). + +## Installing + +Via npm: + +```bash +$ npm install [-g] shelljs +``` + +If the global option `-g` is specified, the binary `shjs` will be installed. This makes it possible to +run ShellJS scripts much like any shell script from the command line, i.e. without requiring a `node_modules` folder: + +```bash +$ shjs my_script +``` + +You can also just copy `shell.js` into your project's directory, and `require()` accordingly. + + +## Examples + +### JavaScript + +```javascript +require('shelljs/global'); + +if (!which('git')) { + echo('Sorry, this script requires git'); + exit(1); +} + +// Copy files to release dir +mkdir('-p', 'out/Release'); +cp('-R', 'stuff/*', 'out/Release'); + +// Replace macros in each .js file +cd('lib'); +ls('*.js').forEach(function(file) { + sed('-i', 'BUILD_VERSION', 'v0.1.2', file); + sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file); + sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file); +}); +cd('..'); + +// Run external tool synchronously +if (exec('git commit -am "Auto-commit"').code !== 0) { + echo('Error: Git commit failed'); + exit(1); +} +``` + +### CoffeeScript + +```coffeescript +require 'shelljs/global' + +if not which 'git' + echo 'Sorry, this script requires git' + exit 1 + +# Copy files to release dir +mkdir '-p', 'out/Release' +cp '-R', 'stuff/*', 'out/Release' + +# Replace macros in each .js file +cd 'lib' +for file in ls '*.js' + sed '-i', 'BUILD_VERSION', 'v0.1.2', file + sed '-i', /.*REMOVE_THIS_LINE.*\n/, '', file + sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat 'macro.js', file +cd '..' + +# Run external tool synchronously +if (exec 'git commit -am "Auto-commit"').code != 0 + echo 'Error: Git commit failed' + exit 1 +``` + +## Global vs. Local + +The example above uses the convenience script `shelljs/global` to reduce verbosity. If polluting your global namespace is not desirable, simply require `shelljs`. + +Example: + +```javascript +var shell = require('shelljs'); +shell.echo('hello world'); +``` + +## Make tool + +A convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile. In this case all shell objects are global, and command line arguments will cause the script to execute only the corresponding function in the global `target` object. To avoid redundant calls, target functions are executed only once per script. + +Example (CoffeeScript): + +```coffeescript +require 'shelljs/make' + +target.all = -> + target.bundle() + target.docs() + +target.bundle = -> + cd __dirname + mkdir 'build' + cd 'lib' + (cat '*.js').to '../build/output.js' + +target.docs = -> + cd __dirname + mkdir 'docs' + cd 'lib' + for file in ls '*.js' + text = grep '//@', file # extract special comments + text.replace '//@', '' # remove comment tags + text.to 'docs/my_docs.md' +``` + +To run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`, and so on. + + + +<!-- + + DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY GENERATED + +--> + + +## Command reference + + +All commands run synchronously, unless otherwise stated. + + +### cd('dir') +Changes to directory `dir` for the duration of the script + + +### pwd() +Returns the current directory. + + +### ls([options ,] path [,path ...]) +### ls([options ,] path_array) +Available options: + ++ `-R`: recursive ++ `-A`: all files (include files beginning with `.`, except for `.` and `..`) + +Examples: + +```javascript +ls('projs/*.js'); +ls('-R', '/users/me', '/tmp'); +ls('-R', ['/users/me', '/tmp']); // same as above +``` + +Returns array of files in the given path, or in current directory if no path provided. + + +### find(path [,path ...]) +### find(path_array) +Examples: + +```javascript +find('src', 'lib'); +find(['src', 'lib']); // same as above +find('.').filter(function(file) { return file.match(/\.js$/); }); +``` + +Returns array of all files (however deep) in the given paths. + +The main difference from `ls('-R', path)` is that the resulting file names +include the base directories, e.g. `lib/resources/file1` instead of just `file1`. + + +### cp([options ,] source [,source ...], dest) +### cp([options ,] source_array, dest) +Available options: + ++ `-f`: force ++ `-r, -R`: recursive + +Examples: + +```javascript +cp('file1', 'dir1'); +cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp'); +cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above +``` + +Copies files. The wildcard `*` is accepted. + + +### rm([options ,] file [, file ...]) +### rm([options ,] file_array) +Available options: + ++ `-f`: force ++ `-r, -R`: recursive + +Examples: + +```javascript +rm('-rf', '/tmp/*'); +rm('some_file.txt', 'another_file.txt'); +rm(['some_file.txt', 'another_file.txt']); // same as above +``` + +Removes files. The wildcard `*` is accepted. + + +### mv(source [, source ...], dest') +### mv(source_array, dest') +Available options: + ++ `f`: force + +Examples: + +```javascript +mv('-f', 'file', 'dir/'); +mv('file1', 'file2', 'dir/'); +mv(['file1', 'file2'], 'dir/'); // same as above +``` + +Moves files. The wildcard `*` is accepted. + + +### mkdir([options ,] dir [, dir ...]) +### mkdir([options ,] dir_array) +Available options: + ++ `p`: full path (will create intermediate dirs if necessary) + +Examples: + +```javascript +mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g'); +mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above +``` + +Creates directories. + + +### test(expression) +Available expression primaries: + ++ `'-b', 'path'`: true if path is a block device ++ `'-c', 'path'`: true if path is a character device ++ `'-d', 'path'`: true if path is a directory ++ `'-e', 'path'`: true if path exists ++ `'-f', 'path'`: true if path is a regular file ++ `'-L', 'path'`: true if path is a symboilc link ++ `'-p', 'path'`: true if path is a pipe (FIFO) ++ `'-S', 'path'`: true if path is a socket + +Examples: + +```javascript +if (test('-d', path)) { /* do something with dir */ }; +if (!test('-f', path)) continue; // skip if it's a regular file +``` + +Evaluates expression using the available primaries and returns corresponding value. + + +### cat(file [, file ...]) +### cat(file_array) + +Examples: + +```javascript +var str = cat('file*.txt'); +var str = cat('file1', 'file2'); +var str = cat(['file1', 'file2']); // same as above +``` + +Returns a string containing the given file, or a concatenated string +containing the files if more than one file is given (a new line character is +introduced between each file). Wildcard `*` accepted. + + +### 'string'.to(file) + +Examples: + +```javascript +cat('input.txt').to('output.txt'); +``` + +Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as +those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_ + + +### 'string'.toEnd(file) + +Examples: + +```javascript +cat('input.txt').toEnd('output.txt'); +``` + +Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as +those returned by `cat`, `grep`, etc). + + +### sed([options ,] search_regex, replacement, file) +Available options: + ++ `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_ + +Examples: + +```javascript +sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js'); +sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js'); +``` + +Reads an input string from `file` and performs a JavaScript `replace()` on the input +using the given search regex and replacement string or function. Returns the new string after replacement. + + +### grep([options ,] regex_filter, file [, file ...]) +### grep([options ,] regex_filter, file_array) +Available options: + ++ `-v`: Inverse the sense of the regex and print the lines not matching the criteria. + +Examples: + +```javascript +grep('-v', 'GLOBAL_VARIABLE', '*.js'); +grep('GLOBAL_VARIABLE', '*.js'); +``` + +Reads input string from given files and returns a string containing all lines of the +file that match the given `regex_filter`. Wildcard `*` accepted. + + +### which(command) + +Examples: + +```javascript +var nodeExec = which('node'); +``` + +Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions. +Returns string containing the absolute path to the command. + + +### echo(string [,string ...]) + +Examples: + +```javascript +echo('hello world'); +var str = echo('hello world'); +``` + +Prints string to stdout, and returns string with additional utility methods +like `.to()`. + + +### pushd([options,] [dir | '-N' | '+N']) + +Available options: + ++ `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated. + +Arguments: + ++ `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`. ++ `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack. ++ `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack. + +Examples: + +```javascript +// process.cwd() === '/usr' +pushd('/etc'); // Returns /etc /usr +pushd('+1'); // Returns /usr /etc +``` + +Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack. + +### popd([options,] ['-N' | '+N']) + +Available options: + ++ `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated. + +Arguments: + ++ `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero. ++ `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero. + +Examples: + +```javascript +echo(process.cwd()); // '/usr' +pushd('/etc'); // '/etc /usr' +echo(process.cwd()); // '/etc' +popd(); // '/usr' +echo(process.cwd()); // '/usr' +``` + +When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack. + +### dirs([options | '+N' | '-N']) + +Available options: + ++ `-c`: Clears the directory stack by deleting all of the elements. + +Arguments: + ++ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero. ++ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero. + +Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified. + +See also: pushd, popd + + +### ln(options, source, dest) +### ln(source, dest) +Available options: + ++ `s`: symlink ++ `f`: force + +Examples: + +```javascript +ln('file', 'newlink'); +ln('-sf', 'file', 'existing'); +``` + +Links source to dest. Use -f to force the link, should dest already exist. + + +### exit(code) +Exits the current process with the given exit code. + +### env['VAR_NAME'] +Object containing environment variables (both getter and setter). Shortcut to process.env. + +### exec(command [, options] [, callback]) +Available options (all `false` by default): + ++ `async`: Asynchronous execution. Defaults to true if a callback is provided. ++ `silent`: Do not echo program output to console. + +Examples: + +```javascript +var version = exec('node --version', {silent:true}).output; + +var child = exec('some_long_running_process', {async:true}); +child.stdout.on('data', function(data) { + /* ... do something with data ... */ +}); + +exec('some_long_running_process', function(code, output) { + console.log('Exit code:', code); + console.log('Program output:', output); +}); +``` + +Executes the given `command` _synchronously_, unless otherwise specified. +When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's +`output` (stdout + stderr) and its exit `code`. Otherwise returns the child process object, and +the `callback` gets the arguments `(code, output)`. + +**Note:** For long-lived processes, it's best to run `exec()` asynchronously as +the current synchronous implementation uses a lot of CPU. This should be getting +fixed soon. + + +### chmod(octal_mode || octal_string, file) +### chmod(symbolic_mode, file) + +Available options: + ++ `-v`: output a diagnostic for every file processed ++ `-c`: like verbose but report only when a change is made ++ `-R`: change files and directories recursively + +Examples: + +```javascript +chmod(755, '/Users/brandon'); +chmod('755', '/Users/brandon'); // same as above +chmod('u+x', '/Users/brandon'); +``` + +Alters the permissions of a file or directory by either specifying the +absolute permissions in octal form or expressing the changes in symbols. +This command tries to mimic the POSIX behavior as much as possible. +Notable exceptions: + ++ In symbolic modes, 'a-r' and '-r' are identical. No consideration is + given to the umask. ++ There is no "quiet" option since default behavior is to run silent. + + +## Non-Unix commands + + +### tempdir() + +Examples: + +```javascript +var tmp = tempdir(); // "/tmp" for most *nix platforms +``` + +Searches and returns string containing a writeable, platform-dependent temporary directory. +Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir). + + +### error() +Tests if error occurred in the last command. Returns `null` if no error occurred, +otherwise returns string explaining the error + + +## Configuration + + +### config.silent +Example: + +```javascript +var silentState = config.silent; // save old silent state +config.silent = true; +/* ... */ +config.silent = silentState; // restore old silent state +``` + +Suppresses all command output if `true`, except for `echo()` calls. +Default is `false`. + +### config.fatal +Example: + +```javascript +config.fatal = true; +cp('this_file_does_not_exist', '/dev/null'); // dies here +/* more commands... */ +``` + +If `true` the script will die on errors. Default is `false`. diff --git a/node_modules/shelljs/bin/shjs b/node_modules/shelljs/bin/shjs new file mode 100644 index 0000000..d239a7a --- /dev/null +++ b/node_modules/shelljs/bin/shjs @@ -0,0 +1,51 @@ +#!/usr/bin/env node +require('../global'); + +if (process.argv.length < 3) { + console.log('ShellJS: missing argument (script name)'); + console.log(); + process.exit(1); +} + +var args, + scriptName = process.argv[2]; +env['NODE_PATH'] = __dirname + '/../..'; + +if (!scriptName.match(/\.js/) && !scriptName.match(/\.coffee/)) { + if (test('-f', scriptName + '.js')) + scriptName += '.js'; + if (test('-f', scriptName + '.coffee')) + scriptName += '.coffee'; +} + +if (!test('-f', scriptName)) { + console.log('ShellJS: script not found ('+scriptName+')'); + console.log(); + process.exit(1); +} + +args = process.argv.slice(3); + +for (var i = 0, l = args.length; i < l; i++) { + if (args[i][0] !== "-"){ + args[i] = '"' + args[i] + '"'; // fixes arguments with multiple words + } +} + +if (scriptName.match(/\.coffee$/)) { + // + // CoffeeScript + // + if (which('coffee')) { + exec('coffee ' + scriptName + ' ' + args.join(' '), { async: true }); + } else { + console.log('ShellJS: CoffeeScript interpreter not found'); + console.log(); + process.exit(1); + } +} else { + // + // JavaScript + // + exec('node ' + scriptName + ' ' + args.join(' '), { async: true }); +} diff --git a/node_modules/shelljs/global.js b/node_modules/shelljs/global.js new file mode 100644 index 0000000..97f0033 --- /dev/null +++ b/node_modules/shelljs/global.js @@ -0,0 +1,3 @@ +var shell = require('./shell.js'); +for (var cmd in shell) + global[cmd] = shell[cmd]; diff --git a/node_modules/shelljs/make.js b/node_modules/shelljs/make.js new file mode 100644 index 0000000..53e5e81 --- /dev/null +++ b/node_modules/shelljs/make.js @@ -0,0 +1,47 @@ +require('./global'); + +global.config.fatal = true; +global.target = {}; + +// This ensures we only execute the script targets after the entire script has +// been evaluated +var args = process.argv.slice(2); +setTimeout(function() { + var t; + + if (args.length === 1 && args[0] === '--help') { + console.log('Available targets:'); + for (t in global.target) + console.log(' ' + t); + return; + } + + // Wrap targets to prevent duplicate execution + for (t in global.target) { + (function(t, oldTarget){ + + // Wrap it + global.target[t] = function(force) { + if (oldTarget.done && !force) + return; + oldTarget.done = true; + return oldTarget.apply(oldTarget, arguments); + }; + + })(t, global.target[t]); + } + + // Execute desired targets + if (args.length > 0) { + args.forEach(function(arg) { + if (arg in global.target) + global.target[arg](); + else { + console.log('no such target: ' + arg); + } + }); + } else if ('all' in global.target) { + global.target.all(); + } + +}, 0); diff --git a/node_modules/shelljs/package.json b/node_modules/shelljs/package.json new file mode 100644 index 0000000..0e9c35d --- /dev/null +++ b/node_modules/shelljs/package.json @@ -0,0 +1,66 @@ +{ + "_from": "shelljs@^0.3.0", + "_id": "shelljs@0.3.0", + "_inBundle": false, + "_integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "_location": "/shelljs", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "shelljs@^0.3.0", + "name": "shelljs", + "escapedName": "shelljs", + "rawSpec": "^0.3.0", + "saveSpec": null, + "fetchSpec": "^0.3.0" + }, + "_requiredBy": [ + "/@actions/tool-cache" + ], + "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "_shasum": "3596e6307a781544f591f37da618360f31db57b1", + "_spec": "shelljs@^0.3.0", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-tool-cache-0.0.0.tgz", + "author": { + "name": "Artur Adib", + "email": "aadib@mozilla.com" + }, + "bin": { + "shjs": "./bin/shjs" + }, + "bugs": { + "url": "https://github.com/arturadib/shelljs/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Portable Unix shell commands for Node.js", + "devDependencies": { + "jshint": "~2.1.11" + }, + "engines": { + "node": ">=0.8.0" + }, + "homepage": "http://github.com/arturadib/shelljs", + "keywords": [ + "unix", + "shell", + "makefile", + "make", + "jake", + "synchronous" + ], + "license": "BSD*", + "main": "./shell.js", + "name": "shelljs", + "optionalDependencies": {}, + "repository": { + "type": "git", + "url": "git://github.com/arturadib/shelljs.git" + }, + "scripts": { + "test": "node scripts/run-tests" + }, + "version": "0.3.0" +} diff --git a/node_modules/shelljs/scripts/generate-docs.js b/node_modules/shelljs/scripts/generate-docs.js new file mode 100644 index 0000000..532fed9 --- /dev/null +++ b/node_modules/shelljs/scripts/generate-docs.js @@ -0,0 +1,21 @@ +#!/usr/bin/env node +require('../global'); + +echo('Appending docs to README.md'); + +cd(__dirname + '/..'); + +// Extract docs from shell.js +var docs = grep('//@', 'shell.js'); + +docs = docs.replace(/\/\/\@include (.+)/g, function(match, path) { + var file = path.match('.js$') ? path : path+'.js'; + return grep('//@', file); +}); + +// Remove '//@' +docs = docs.replace(/\/\/\@ ?/g, ''); +// Append docs to README +sed('-i', /## Command reference(.|\n)*/, '## Command reference\n\n' + docs, 'README.md'); + +echo('All done.'); diff --git a/node_modules/shelljs/scripts/run-tests.js b/node_modules/shelljs/scripts/run-tests.js new file mode 100644 index 0000000..f9d31e0 --- /dev/null +++ b/node_modules/shelljs/scripts/run-tests.js @@ -0,0 +1,50 @@ +#!/usr/bin/env node +require('../global'); + +var path = require('path'); + +var failed = false; + +// +// Lint +// +JSHINT_BIN = './node_modules/jshint/bin/jshint'; +cd(__dirname + '/..'); + +if (!test('-f', JSHINT_BIN)) { + echo('JSHint not found. Run `npm install` in the root dir first.'); + exit(1); +} + +if (exec(JSHINT_BIN + ' *.js test/*.js').code !== 0) { + failed = true; + echo('*** JSHINT FAILED! (return code != 0)'); + echo(); +} else { + echo('All JSHint tests passed'); + echo(); +} + +// +// Unit tests +// +cd(__dirname + '/../test'); +ls('*.js').forEach(function(file) { + echo('Running test:', file); + if (exec('node ' + file).code !== 123) { // 123 avoids false positives (e.g. premature exit) + failed = true; + echo('*** TEST FAILED! (missing exit code "123")'); + echo(); + } +}); + +if (failed) { + echo(); + echo('*******************************************************'); + echo('WARNING: Some tests did not pass!'); + echo('*******************************************************'); + exit(1); +} else { + echo(); + echo('All tests passed.'); +} diff --git a/node_modules/shelljs/shell.js b/node_modules/shelljs/shell.js new file mode 100644 index 0000000..54402c7 --- /dev/null +++ b/node_modules/shelljs/shell.js @@ -0,0 +1,157 @@ +// +// ShellJS +// Unix shell commands on top of Node's API +// +// Copyright (c) 2012 Artur Adib +// http://github.com/arturadib/shelljs +// + +var common = require('./src/common'); + + +//@ +//@ All commands run synchronously, unless otherwise stated. +//@ + +//@include ./src/cd +var _cd = require('./src/cd'); +exports.cd = common.wrap('cd', _cd); + +//@include ./src/pwd +var _pwd = require('./src/pwd'); +exports.pwd = common.wrap('pwd', _pwd); + +//@include ./src/ls +var _ls = require('./src/ls'); +exports.ls = common.wrap('ls', _ls); + +//@include ./src/find +var _find = require('./src/find'); +exports.find = common.wrap('find', _find); + +//@include ./src/cp +var _cp = require('./src/cp'); +exports.cp = common.wrap('cp', _cp); + +//@include ./src/rm +var _rm = require('./src/rm'); +exports.rm = common.wrap('rm', _rm); + +//@include ./src/mv +var _mv = require('./src/mv'); +exports.mv = common.wrap('mv', _mv); + +//@include ./src/mkdir +var _mkdir = require('./src/mkdir'); +exports.mkdir = common.wrap('mkdir', _mkdir); + +//@include ./src/test +var _test = require('./src/test'); +exports.test = common.wrap('test', _test); + +//@include ./src/cat +var _cat = require('./src/cat'); +exports.cat = common.wrap('cat', _cat); + +//@include ./src/to +var _to = require('./src/to'); +String.prototype.to = common.wrap('to', _to); + +//@include ./src/toEnd +var _toEnd = require('./src/toEnd'); +String.prototype.toEnd = common.wrap('toEnd', _toEnd); + +//@include ./src/sed +var _sed = require('./src/sed'); +exports.sed = common.wrap('sed', _sed); + +//@include ./src/grep +var _grep = require('./src/grep'); +exports.grep = common.wrap('grep', _grep); + +//@include ./src/which +var _which = require('./src/which'); +exports.which = common.wrap('which', _which); + +//@include ./src/echo +var _echo = require('./src/echo'); +exports.echo = _echo; // don't common.wrap() as it could parse '-options' + +//@include ./src/dirs +var _dirs = require('./src/dirs').dirs; +exports.dirs = common.wrap("dirs", _dirs); +var _pushd = require('./src/dirs').pushd; +exports.pushd = common.wrap('pushd', _pushd); +var _popd = require('./src/dirs').popd; +exports.popd = common.wrap("popd", _popd); + +//@include ./src/ln +var _ln = require('./src/ln'); +exports.ln = common.wrap('ln', _ln); + +//@ +//@ ### exit(code) +//@ Exits the current process with the given exit code. +exports.exit = process.exit; + +//@ +//@ ### env['VAR_NAME'] +//@ Object containing environment variables (both getter and setter). Shortcut to process.env. +exports.env = process.env; + +//@include ./src/exec +var _exec = require('./src/exec'); +exports.exec = common.wrap('exec', _exec, {notUnix:true}); + +//@include ./src/chmod +var _chmod = require('./src/chmod'); +exports.chmod = common.wrap('chmod', _chmod); + + + +//@ +//@ ## Non-Unix commands +//@ + +//@include ./src/tempdir +var _tempDir = require('./src/tempdir'); +exports.tempdir = common.wrap('tempdir', _tempDir); + + +//@include ./src/error +var _error = require('./src/error'); +exports.error = _error; + + + +//@ +//@ ## Configuration +//@ + +exports.config = common.config; + +//@ +//@ ### config.silent +//@ Example: +//@ +//@ ```javascript +//@ var silentState = config.silent; // save old silent state +//@ config.silent = true; +//@ /* ... */ +//@ config.silent = silentState; // restore old silent state +//@ ``` +//@ +//@ Suppresses all command output if `true`, except for `echo()` calls. +//@ Default is `false`. + +//@ +//@ ### config.fatal +//@ Example: +//@ +//@ ```javascript +//@ config.fatal = true; +//@ cp('this_file_does_not_exist', '/dev/null'); // dies here +//@ /* more commands... */ +//@ ``` +//@ +//@ If `true` the script will die on errors. Default is `false`. diff --git a/node_modules/shelljs/src/cat.js b/node_modules/shelljs/src/cat.js new file mode 100644 index 0000000..f6f4d25 --- /dev/null +++ b/node_modules/shelljs/src/cat.js @@ -0,0 +1,43 @@ +var common = require('./common'); +var fs = require('fs'); + +//@ +//@ ### cat(file [, file ...]) +//@ ### cat(file_array) +//@ +//@ Examples: +//@ +//@ ```javascript +//@ var str = cat('file*.txt'); +//@ var str = cat('file1', 'file2'); +//@ var str = cat(['file1', 'file2']); // same as above +//@ ``` +//@ +//@ Returns a string containing the given file, or a concatenated string +//@ containing the files if more than one file is given (a new line character is +//@ introduced between each file). Wildcard `*` accepted. +function _cat(options, files) { + var cat = ''; + + if (!files) + common.error('no paths given'); + + if (typeof files === 'string') + files = [].slice.call(arguments, 1); + // if it's array leave it as it is + + files = common.expand(files); + + files.forEach(function(file) { + if (!fs.existsSync(file)) + common.error('no such file or directory: ' + file); + + cat += fs.readFileSync(file, 'utf8') + '\n'; + }); + + if (cat[cat.length-1] === '\n') + cat = cat.substring(0, cat.length-1); + + return common.ShellString(cat); +} +module.exports = _cat; diff --git a/node_modules/shelljs/src/cd.js b/node_modules/shelljs/src/cd.js new file mode 100644 index 0000000..230f432 --- /dev/null +++ b/node_modules/shelljs/src/cd.js @@ -0,0 +1,19 @@ +var fs = require('fs'); +var common = require('./common'); + +//@ +//@ ### cd('dir') +//@ Changes to directory `dir` for the duration of the script +function _cd(options, dir) { + if (!dir) + common.error('directory not specified'); + + if (!fs.existsSync(dir)) + common.error('no such file or directory: ' + dir); + + if (!fs.statSync(dir).isDirectory()) + common.error('not a directory: ' + dir); + + process.chdir(dir); +} +module.exports = _cd; diff --git a/node_modules/shelljs/src/chmod.js b/node_modules/shelljs/src/chmod.js new file mode 100644 index 0000000..f288893 --- /dev/null +++ b/node_modules/shelljs/src/chmod.js @@ -0,0 +1,208 @@ +var common = require('./common'); +var fs = require('fs'); +var path = require('path'); + +var PERMS = (function (base) { + return { + OTHER_EXEC : base.EXEC, + OTHER_WRITE : base.WRITE, + OTHER_READ : base.READ, + + GROUP_EXEC : base.EXEC << 3, + GROUP_WRITE : base.WRITE << 3, + GROUP_READ : base.READ << 3, + + OWNER_EXEC : base.EXEC << 6, + OWNER_WRITE : base.WRITE << 6, + OWNER_READ : base.READ << 6, + + // Literal octal numbers are apparently not allowed in "strict" javascript. Using parseInt is + // the preferred way, else a jshint warning is thrown. + STICKY : parseInt('01000', 8), + SETGID : parseInt('02000', 8), + SETUID : parseInt('04000', 8), + + TYPE_MASK : parseInt('0770000', 8) + }; +})({ + EXEC : 1, + WRITE : 2, + READ : 4 +}); + +//@ +//@ ### chmod(octal_mode || octal_string, file) +//@ ### chmod(symbolic_mode, file) +//@ +//@ Available options: +//@ +//@ + `-v`: output a diagnostic for every file processed//@ +//@ + `-c`: like verbose but report only when a change is made//@ +//@ + `-R`: change files and directories recursively//@ +//@ +//@ Examples: +//@ +//@ ```javascript +//@ chmod(755, '/Users/brandon'); +//@ chmod('755', '/Users/brandon'); // same as above +//@ chmod('u+x', '/Users/brandon'); +//@ ``` +//@ +//@ Alters the permissions of a file or directory by either specifying the +//@ absolute permissions in octal form or expressing the changes in symbols. +//@ This command tries to mimic the POSIX behavior as much as possible. +//@ Notable exceptions: +//@ +//@ + In symbolic modes, 'a-r' and '-r' are identical. No consideration is +//@ given to the umask. +//@ + There is no "quiet" option since default behavior is to run silent. +function _chmod(options, mode, filePattern) { + if (!filePattern) { + if (options.length > 0 && options.charAt(0) === '-') { + // Special case where the specified file permissions started with - to subtract perms, which + // get picked up by the option parser as command flags. + // If we are down by one argument and options starts with -, shift everything over. + filePattern = mode; + mode = options; + options = ''; + } + else { + common.error('You must specify a file.'); + } + } + + options = common.parseOptions(options, { + 'R': 'recursive', + 'c': 'changes', + 'v': 'verbose' + }); + + if (typeof filePattern === 'string') { + filePattern = [ filePattern ]; + } + + var files; + + if (options.recursive) { + files = []; + common.expand(filePattern).forEach(function addFile(expandedFile) { + var stat = fs.lstatSync(expandedFile); + + if (!stat.isSymbolicLink()) { + files.push(expandedFile); + + if (stat.isDirectory()) { // intentionally does not follow symlinks. + fs.readdirSync(expandedFile).forEach(function (child) { + addFile(expandedFile + '/' + child); + }); + } + } + }); + } + else { + files = common.expand(filePattern); + } + + files.forEach(function innerChmod(file) { + file = path.resolve(file); + if (!fs.existsSync(file)) { + common.error('File not found: ' + file); + } + + // When recursing, don't follow symlinks. + if (options.recursive && fs.lstatSync(file).isSymbolicLink()) { + return; + } + + var perms = fs.statSync(file).mode; + var type = perms & PERMS.TYPE_MASK; + + var newPerms = perms; + + if (isNaN(parseInt(mode, 8))) { + // parse options + mode.split(',').forEach(function (symbolicMode) { + /*jshint regexdash:true */ + var pattern = /([ugoa]*)([=\+-])([rwxXst]*)/i; + var matches = pattern.exec(symbolicMode); + + if (matches) { + var applyTo = matches[1]; + var operator = matches[2]; + var change = matches[3]; + + var changeOwner = applyTo.indexOf('u') != -1 || applyTo === 'a' || applyTo === ''; + var changeGroup = applyTo.indexOf('g') != -1 || applyTo === 'a' || applyTo === ''; + var changeOther = applyTo.indexOf('o') != -1 || applyTo === 'a' || applyTo === ''; + + var changeRead = change.indexOf('r') != -1; + var changeWrite = change.indexOf('w') != -1; + var changeExec = change.indexOf('x') != -1; + var changeSticky = change.indexOf('t') != -1; + var changeSetuid = change.indexOf('s') != -1; + + var mask = 0; + if (changeOwner) { + mask |= (changeRead ? PERMS.OWNER_READ : 0) + (changeWrite ? PERMS.OWNER_WRITE : 0) + (changeExec ? PERMS.OWNER_EXEC : 0) + (changeSetuid ? PERMS.SETUID : 0); + } + if (changeGroup) { + mask |= (changeRead ? PERMS.GROUP_READ : 0) + (changeWrite ? PERMS.GROUP_WRITE : 0) + (changeExec ? PERMS.GROUP_EXEC : 0) + (changeSetuid ? PERMS.SETGID : 0); + } + if (changeOther) { + mask |= (changeRead ? PERMS.OTHER_READ : 0) + (changeWrite ? PERMS.OTHER_WRITE : 0) + (changeExec ? PERMS.OTHER_EXEC : 0); + } + + // Sticky bit is special - it's not tied to user, group or other. + if (changeSticky) { + mask |= PERMS.STICKY; + } + + switch (operator) { + case '+': + newPerms |= mask; + break; + + case '-': + newPerms &= ~mask; + break; + + case '=': + newPerms = type + mask; + + // According to POSIX, when using = to explicitly set the permissions, setuid and setgid can never be cleared. + if (fs.statSync(file).isDirectory()) { + newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms; + } + break; + } + + if (options.verbose) { + log(file + ' -> ' + newPerms.toString(8)); + } + + if (perms != newPerms) { + if (!options.verbose && options.changes) { + log(file + ' -> ' + newPerms.toString(8)); + } + fs.chmodSync(file, newPerms); + } + } + else { + common.error('Invalid symbolic mode change: ' + symbolicMode); + } + }); + } + else { + // they gave us a full number + newPerms = type + parseInt(mode, 8); + + // POSIX rules are that setuid and setgid can only be added using numeric form, but not cleared. + if (fs.statSync(file).isDirectory()) { + newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms; + } + + fs.chmodSync(file, newPerms); + } + }); +} +module.exports = _chmod; diff --git a/node_modules/shelljs/src/common.js b/node_modules/shelljs/src/common.js new file mode 100644 index 0000000..d8c2312 --- /dev/null +++ b/node_modules/shelljs/src/common.js @@ -0,0 +1,203 @@ +var os = require('os'); +var fs = require('fs'); +var _ls = require('./ls'); + +// Module globals +var config = { + silent: false, + fatal: false +}; +exports.config = config; + +var state = { + error: null, + currentCmd: 'shell.js', + tempDir: null +}; +exports.state = state; + +var platform = os.type().match(/^Win/) ? 'win' : 'unix'; +exports.platform = platform; + +function log() { + if (!config.silent) + console.log.apply(this, arguments); +} +exports.log = log; + +// Shows error message. Throws unless _continue or config.fatal are true +function error(msg, _continue) { + if (state.error === null) + state.error = ''; + state.error += state.currentCmd + ': ' + msg + '\n'; + + if (msg.length > 0) + log(state.error); + + if (config.fatal) + process.exit(1); + + if (!_continue) + throw ''; +} +exports.error = error; + +// In the future, when Proxies are default, we can add methods like `.to()` to primitive strings. +// For now, this is a dummy function to bookmark places we need such strings +function ShellString(str) { + return str; +} +exports.ShellString = ShellString; + +// Returns {'alice': true, 'bob': false} when passed a dictionary, e.g.: +// parseOptions('-a', {'a':'alice', 'b':'bob'}); +function parseOptions(str, map) { + if (!map) + error('parseOptions() internal error: no map given'); + + // All options are false by default + var options = {}; + for (var letter in map) + options[map[letter]] = false; + + if (!str) + return options; // defaults + + if (typeof str !== 'string') + error('parseOptions() internal error: wrong str'); + + // e.g. match[1] = 'Rf' for str = '-Rf' + var match = str.match(/^\-(.+)/); + if (!match) + return options; + + // e.g. chars = ['R', 'f'] + var chars = match[1].split(''); + + chars.forEach(function(c) { + if (c in map) + options[map[c]] = true; + else + error('option not recognized: '+c); + }); + + return options; +} +exports.parseOptions = parseOptions; + +// Expands wildcards with matching (ie. existing) file names. +// For example: +// expand(['file*.js']) = ['file1.js', 'file2.js', ...] +// (if the files 'file1.js', 'file2.js', etc, exist in the current dir) +function expand(list) { + var expanded = []; + list.forEach(function(listEl) { + // Wildcard present on directory names ? + if(listEl.search(/\*[^\/]*\//) > -1 || listEl.search(/\*\*[^\/]*\//) > -1) { + var match = listEl.match(/^([^*]+\/|)(.*)/); + var root = match[1]; + var rest = match[2]; + var restRegex = rest.replace(/\*\*/g, ".*").replace(/\*/g, "[^\\/]*"); + restRegex = new RegExp(restRegex); + + _ls('-R', root).filter(function (e) { + return restRegex.test(e); + }).forEach(function(file) { + expanded.push(file); + }); + } + // Wildcard present on file names ? + else if (listEl.search(/\*/) > -1) { + _ls('', listEl).forEach(function(file) { + expanded.push(file); + }); + } else { + expanded.push(listEl); + } + }); + return expanded; +} +exports.expand = expand; + +// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e. +// file can be unlinked even if it's read-only, see https://github.com/joyent/node/issues/3006 +function unlinkSync(file) { + try { + fs.unlinkSync(file); + } catch(e) { + // Try to override file permission + if (e.code === 'EPERM') { + fs.chmodSync(file, '0666'); + fs.unlinkSync(file); + } else { + throw e; + } + } +} +exports.unlinkSync = unlinkSync; + +// e.g. 'shelljs_a5f185d0443ca...' +function randomFileName() { + function randomHash(count) { + if (count === 1) + return parseInt(16*Math.random(), 10).toString(16); + else { + var hash = ''; + for (var i=0; i<count; i++) + hash += randomHash(1); + return hash; + } + } + + return 'shelljs_'+randomHash(20); +} +exports.randomFileName = randomFileName; + +// extend(target_obj, source_obj1 [, source_obj2 ...]) +// Shallow extend, e.g.: +// extend({A:1}, {b:2}, {c:3}) returns {A:1, b:2, c:3} +function extend(target) { + var sources = [].slice.call(arguments, 1); + sources.forEach(function(source) { + for (var key in source) + target[key] = source[key]; + }); + + return target; +} +exports.extend = extend; + +// Common wrapper for all Unix-like commands +function wrap(cmd, fn, options) { + return function() { + var retValue = null; + + state.currentCmd = cmd; + state.error = null; + + try { + var args = [].slice.call(arguments, 0); + + if (options && options.notUnix) { + retValue = fn.apply(this, args); + } else { + if (args.length === 0 || typeof args[0] !== 'string' || args[0][0] !== '-') + args.unshift(''); // only add dummy option if '-option' not already present + retValue = fn.apply(this, args); + } + } catch (e) { + if (!state.error) { + // If state.error hasn't been set it's an error thrown by Node, not us - probably a bug... + console.log('shell.js: internal error'); + console.log(e.stack || e); + process.exit(1); + } + if (config.fatal) + throw e; + } + + state.currentCmd = 'shell.js'; + return retValue; + }; +} // wrap +exports.wrap = wrap; diff --git a/node_modules/shelljs/src/cp.js b/node_modules/shelljs/src/cp.js new file mode 100644 index 0000000..141d8e3 --- /dev/null +++ b/node_modules/shelljs/src/cp.js @@ -0,0 +1,201 @@ +var fs = require('fs'); +var path = require('path'); +var common = require('./common'); +var os = require('os'); + +// Buffered file copy, synchronous +// (Using readFileSync() + writeFileSync() could easily cause a memory overflow +// with large files) +function copyFileSync(srcFile, destFile) { + if (!fs.existsSync(srcFile)) + common.error('copyFileSync: no such file or directory: ' + srcFile); + + var BUF_LENGTH = 64*1024, + buf = new Buffer(BUF_LENGTH), + bytesRead = BUF_LENGTH, + pos = 0, + fdr = null, + fdw = null; + + try { + fdr = fs.openSync(srcFile, 'r'); + } catch(e) { + common.error('copyFileSync: could not read src file ('+srcFile+')'); + } + + try { + fdw = fs.openSync(destFile, 'w'); + } catch(e) { + common.error('copyFileSync: could not write to dest file (code='+e.code+'):'+destFile); + } + + while (bytesRead === BUF_LENGTH) { + bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos); + fs.writeSync(fdw, buf, 0, bytesRead); + pos += bytesRead; + } + + fs.closeSync(fdr); + fs.closeSync(fdw); + + fs.chmodSync(destFile, fs.statSync(srcFile).mode); +} + +// Recursively copies 'sourceDir' into 'destDir' +// Adapted from https://github.com/ryanmcgrath/wrench-js +// +// Copyright (c) 2010 Ryan McGrath +// Copyright (c) 2012 Artur Adib +// +// Licensed under the MIT License +// http://www.opensource.org/licenses/mit-license.php +function cpdirSyncRecursive(sourceDir, destDir, opts) { + if (!opts) opts = {}; + + /* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */ + var checkDir = fs.statSync(sourceDir); + try { + fs.mkdirSync(destDir, checkDir.mode); + } catch (e) { + //if the directory already exists, that's okay + if (e.code !== 'EEXIST') throw e; + } + + var files = fs.readdirSync(sourceDir); + + for (var i = 0; i < files.length; i++) { + var srcFile = sourceDir + "/" + files[i]; + var destFile = destDir + "/" + files[i]; + var srcFileStat = fs.lstatSync(srcFile); + + if (srcFileStat.isDirectory()) { + /* recursion this thing right on back. */ + cpdirSyncRecursive(srcFile, destFile, opts); + } else if (srcFileStat.isSymbolicLink()) { + var symlinkFull = fs.readlinkSync(srcFile); + fs.symlinkSync(symlinkFull, destFile, os.platform() === "win32" ? "junction" : null); + } else { + /* At this point, we've hit a file actually worth copying... so copy it on over. */ + if (fs.existsSync(destFile) && !opts.force) { + common.log('skipping existing file: ' + files[i]); + } else { + copyFileSync(srcFile, destFile); + } + } + + } // for files +} // cpdirSyncRecursive + + +//@ +//@ ### cp([options ,] source [,source ...], dest) +//@ ### cp([options ,] source_array, dest) +//@ Available options: +//@ +//@ + `-f`: force +//@ + `-r, -R`: recursive +//@ +//@ Examples: +//@ +//@ ```javascript +//@ cp('file1', 'dir1'); +//@ cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp'); +//@ cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above +//@ ``` +//@ +//@ Copies files. The wildcard `*` is accepted. +function _cp(options, sources, dest) { + options = common.parseOptions(options, { + 'f': 'force', + 'R': 'recursive', + 'r': 'recursive' + }); + + // Get sources, dest + if (arguments.length < 3) { + common.error('missing <source> and/or <dest>'); + } else if (arguments.length > 3) { + sources = [].slice.call(arguments, 1, arguments.length - 1); + dest = arguments[arguments.length - 1]; + } else if (typeof sources === 'string') { + sources = [sources]; + } else if ('length' in sources) { + sources = sources; // no-op for array + } else { + common.error('invalid arguments'); + } + + var exists = fs.existsSync(dest), + stats = exists && fs.statSync(dest); + + // Dest is not existing dir, but multiple sources given + if ((!exists || !stats.isDirectory()) && sources.length > 1) + common.error('dest is not a directory (too many sources)'); + + // Dest is an existing file, but no -f given + if (exists && stats.isFile() && !options.force) + common.error('dest file already exists: ' + dest); + + if (options.recursive) { + // Recursive allows the shortcut syntax "sourcedir/" for "sourcedir/*" + // (see Github issue #15) + sources.forEach(function(src, i) { + if (src[src.length - 1] === '/') + sources[i] += '*'; + }); + + // Create dest + try { + fs.mkdirSync(dest, parseInt('0777', 8)); + } catch (e) { + // like Unix's cp, keep going even if we can't create dest dir + } + } + + sources = common.expand(sources); + + sources.forEach(function(src) { + if (!fs.existsSync(src)) { + common.error('no such file or directory: '+src, true); + return; // skip file + } + + // If here, src exists + if (fs.statSync(src).isDirectory()) { + if (!options.recursive) { + // Non-Recursive + common.log(src + ' is a directory (not copied)'); + } else { + // Recursive + // 'cp /a/source dest' should create 'source' in 'dest' + var newDest = path.join(dest, path.basename(src)), + checkDir = fs.statSync(src); + try { + fs.mkdirSync(newDest, checkDir.mode); + } catch (e) { + //if the directory already exists, that's okay + if (e.code !== 'EEXIST') throw e; + } + + cpdirSyncRecursive(src, newDest, {force: options.force}); + } + return; // done with dir + } + + // If here, src is a file + + // When copying to '/path/dir': + // thisDest = '/path/dir/file1' + var thisDest = dest; + if (fs.existsSync(dest) && fs.statSync(dest).isDirectory()) + thisDest = path.normalize(dest + '/' + path.basename(src)); + + if (fs.existsSync(thisDest) && !options.force) { + common.error('dest file already exists: ' + thisDest, true); + return; // skip file + } + + copyFileSync(src, thisDest); + }); // forEach(src) +} +module.exports = _cp; diff --git a/node_modules/shelljs/src/dirs.js b/node_modules/shelljs/src/dirs.js new file mode 100644 index 0000000..58fae8b --- /dev/null +++ b/node_modules/shelljs/src/dirs.js @@ -0,0 +1,191 @@ +var common = require('./common'); +var _cd = require('./cd'); +var path = require('path'); + +// Pushd/popd/dirs internals +var _dirStack = []; + +function _isStackIndex(index) { + return (/^[\-+]\d+$/).test(index); +} + +function _parseStackIndex(index) { + if (_isStackIndex(index)) { + if (Math.abs(index) < _dirStack.length + 1) { // +1 for pwd + return (/^-/).test(index) ? Number(index) - 1 : Number(index); + } else { + common.error(index + ': directory stack index out of range'); + } + } else { + common.error(index + ': invalid number'); + } +} + +function _actualDirStack() { + return [process.cwd()].concat(_dirStack); +} + +//@ +//@ ### pushd([options,] [dir | '-N' | '+N']) +//@ +//@ Available options: +//@ +//@ + `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated. +//@ +//@ Arguments: +//@ +//@ + `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`. +//@ + `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack. +//@ + `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack. +//@ +//@ Examples: +//@ +//@ ```javascript +//@ // process.cwd() === '/usr' +//@ pushd('/etc'); // Returns /etc /usr +//@ pushd('+1'); // Returns /usr /etc +//@ ``` +//@ +//@ Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack. +function _pushd(options, dir) { + if (_isStackIndex(options)) { + dir = options; + options = ''; + } + + options = common.parseOptions(options, { + 'n' : 'no-cd' + }); + + var dirs = _actualDirStack(); + + if (dir === '+0') { + return dirs; // +0 is a noop + } else if (!dir) { + if (dirs.length > 1) { + dirs = dirs.splice(1, 1).concat(dirs); + } else { + return common.error('no other directory'); + } + } else if (_isStackIndex(dir)) { + var n = _parseStackIndex(dir); + dirs = dirs.slice(n).concat(dirs.slice(0, n)); + } else { + if (options['no-cd']) { + dirs.splice(1, 0, dir); + } else { + dirs.unshift(dir); + } + } + + if (options['no-cd']) { + dirs = dirs.slice(1); + } else { + dir = path.resolve(dirs.shift()); + _cd('', dir); + } + + _dirStack = dirs; + return _dirs(''); +} +exports.pushd = _pushd; + +//@ +//@ ### popd([options,] ['-N' | '+N']) +//@ +//@ Available options: +//@ +//@ + `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated. +//@ +//@ Arguments: +//@ +//@ + `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero. +//@ + `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero. +//@ +//@ Examples: +//@ +//@ ```javascript +//@ echo(process.cwd()); // '/usr' +//@ pushd('/etc'); // '/etc /usr' +//@ echo(process.cwd()); // '/etc' +//@ popd(); // '/usr' +//@ echo(process.cwd()); // '/usr' +//@ ``` +//@ +//@ When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack. +function _popd(options, index) { + if (_isStackIndex(options)) { + index = options; + options = ''; + } + + options = common.parseOptions(options, { + 'n' : 'no-cd' + }); + + if (!_dirStack.length) { + return common.error('directory stack empty'); + } + + index = _parseStackIndex(index || '+0'); + + if (options['no-cd'] || index > 0 || _dirStack.length + index === 0) { + index = index > 0 ? index - 1 : index; + _dirStack.splice(index, 1); + } else { + var dir = path.resolve(_dirStack.shift()); + _cd('', dir); + } + + return _dirs(''); +} +exports.popd = _popd; + +//@ +//@ ### dirs([options | '+N' | '-N']) +//@ +//@ Available options: +//@ +//@ + `-c`: Clears the directory stack by deleting all of the elements. +//@ +//@ Arguments: +//@ +//@ + `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero. +//@ + `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero. +//@ +//@ Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified. +//@ +//@ See also: pushd, popd +function _dirs(options, index) { + if (_isStackIndex(options)) { + index = options; + options = ''; + } + + options = common.parseOptions(options, { + 'c' : 'clear' + }); + + if (options['clear']) { + _dirStack = []; + return _dirStack; + } + + var stack = _actualDirStack(); + + if (index) { + index = _parseStackIndex(index); + + if (index < 0) { + index = stack.length + index; + } + + common.log(stack[index]); + return stack[index]; + } + + common.log(stack.join(' ')); + + return stack; +} +exports.dirs = _dirs; diff --git a/node_modules/shelljs/src/echo.js b/node_modules/shelljs/src/echo.js new file mode 100644 index 0000000..760ea84 --- /dev/null +++ b/node_modules/shelljs/src/echo.js @@ -0,0 +1,20 @@ +var common = require('./common'); + +//@ +//@ ### echo(string [,string ...]) +//@ +//@ Examples: +//@ +//@ ```javascript +//@ echo('hello world'); +//@ var str = echo('hello world'); +//@ ``` +//@ +//@ Prints string to stdout, and returns string with additional utility methods +//@ like `.to()`. +function _echo() { + var messages = [].slice.call(arguments, 0); + console.log.apply(this, messages); + return common.ShellString(messages.join(' ')); +} +module.exports = _echo; diff --git a/node_modules/shelljs/src/error.js b/node_modules/shelljs/src/error.js new file mode 100644 index 0000000..cca3efb --- /dev/null +++ b/node_modules/shelljs/src/error.js @@ -0,0 +1,10 @@ +var common = require('./common'); + +//@ +//@ ### error() +//@ Tests if error occurred in the last command. Returns `null` if no error occurred, +//@ otherwise returns string explaining the error +function error() { + return common.state.error; +}; +module.exports = error; diff --git a/node_modules/shelljs/src/exec.js b/node_modules/shelljs/src/exec.js new file mode 100644 index 0000000..7ccdbc0 --- /dev/null +++ b/node_modules/shelljs/src/exec.js @@ -0,0 +1,181 @@ +var common = require('./common'); +var _tempDir = require('./tempdir'); +var _pwd = require('./pwd'); +var path = require('path'); +var fs = require('fs'); +var child = require('child_process'); + +// Hack to run child_process.exec() synchronously (sync avoids callback hell) +// Uses a custom wait loop that checks for a flag file, created when the child process is done. +// (Can't do a wait loop that checks for internal Node variables/messages as +// Node is single-threaded; callbacks and other internal state changes are done in the +// event loop). +function execSync(cmd, opts) { + var tempDir = _tempDir(); + var stdoutFile = path.resolve(tempDir+'/'+common.randomFileName()), + codeFile = path.resolve(tempDir+'/'+common.randomFileName()), + scriptFile = path.resolve(tempDir+'/'+common.randomFileName()), + sleepFile = path.resolve(tempDir+'/'+common.randomFileName()); + + var options = common.extend({ + silent: common.config.silent + }, opts); + + var previousStdoutContent = ''; + // Echoes stdout changes from running process, if not silent + function updateStdout() { + if (options.silent || !fs.existsSync(stdoutFile)) + return; + + var stdoutContent = fs.readFileSync(stdoutFile, 'utf8'); + // No changes since last time? + if (stdoutContent.length <= previousStdoutContent.length) + return; + + process.stdout.write(stdoutContent.substr(previousStdoutContent.length)); + previousStdoutContent = stdoutContent; + } + + function escape(str) { + return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0"); + } + + cmd += ' > '+stdoutFile+' 2>&1'; // works on both win/unix + + var script = + "var child = require('child_process')," + + " fs = require('fs');" + + "child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {" + + " fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');" + + "});"; + + if (fs.existsSync(scriptFile)) common.unlinkSync(scriptFile); + if (fs.existsSync(stdoutFile)) common.unlinkSync(stdoutFile); + if (fs.existsSync(codeFile)) common.unlinkSync(codeFile); + + fs.writeFileSync(scriptFile, script); + child.exec('"'+process.execPath+'" '+scriptFile, { + env: process.env, + cwd: _pwd(), + maxBuffer: 20*1024*1024 + }); + + // The wait loop + // sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage + // (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing + // CPU usage, though apparently not so much on Windows) + while (!fs.existsSync(codeFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); } + while (!fs.existsSync(stdoutFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); } + + // At this point codeFile exists, but it's not necessarily flushed yet. + // Keep reading it until it is. + var code = parseInt('', 10); + while (isNaN(code)) { + code = parseInt(fs.readFileSync(codeFile, 'utf8'), 10); + } + + var stdout = fs.readFileSync(stdoutFile, 'utf8'); + + // No biggie if we can't erase the files now -- they're in a temp dir anyway + try { common.unlinkSync(scriptFile); } catch(e) {} + try { common.unlinkSync(stdoutFile); } catch(e) {} + try { common.unlinkSync(codeFile); } catch(e) {} + try { common.unlinkSync(sleepFile); } catch(e) {} + + // some shell return codes are defined as errors, per http://tldp.org/LDP/abs/html/exitcodes.html + if (code === 1 || code === 2 || code >= 126) { + common.error('', true); // unix/shell doesn't really give an error message after non-zero exit codes + } + // True if successful, false if not + var obj = { + code: code, + output: stdout + }; + return obj; +} // execSync() + +// Wrapper around exec() to enable echoing output to console in real time +function execAsync(cmd, opts, callback) { + var output = ''; + + var options = common.extend({ + silent: common.config.silent + }, opts); + + var c = child.exec(cmd, {env: process.env, maxBuffer: 20*1024*1024}, function(err) { + if (callback) + callback(err ? err.code : 0, output); + }); + + c.stdout.on('data', function(data) { + output += data; + if (!options.silent) + process.stdout.write(data); + }); + + c.stderr.on('data', function(data) { + output += data; + if (!options.silent) + process.stdout.write(data); + }); + + return c; +} + +//@ +//@ ### exec(command [, options] [, callback]) +//@ Available options (all `false` by default): +//@ +//@ + `async`: Asynchronous execution. Defaults to true if a callback is provided. +//@ + `silent`: Do not echo program output to console. +//@ +//@ Examples: +//@ +//@ ```javascript +//@ var version = exec('node --version', {silent:true}).output; +//@ +//@ var child = exec('some_long_running_process', {async:true}); +//@ child.stdout.on('data', function(data) { +//@ /* ... do something with data ... */ +//@ }); +//@ +//@ exec('some_long_running_process', function(code, output) { +//@ console.log('Exit code:', code); +//@ console.log('Program output:', output); +//@ }); +//@ ``` +//@ +//@ Executes the given `command` _synchronously_, unless otherwise specified. +//@ When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's +//@ `output` (stdout + stderr) and its exit `code`. Otherwise returns the child process object, and +//@ the `callback` gets the arguments `(code, output)`. +//@ +//@ **Note:** For long-lived processes, it's best to run `exec()` asynchronously as +//@ the current synchronous implementation uses a lot of CPU. This should be getting +//@ fixed soon. +function _exec(command, options, callback) { + if (!command) + common.error('must specify command'); + + // Callback is defined instead of options. + if (typeof options === 'function') { + callback = options; + options = { async: true }; + } + + // Callback is defined with options. + if (typeof options === 'object' && typeof callback === 'function') { + options.async = true; + } + + options = common.extend({ + silent: common.config.silent, + async: false + }, options); + + if (options.async) + return execAsync(command, options, callback); + else + return execSync(command, options); +} +module.exports = _exec; diff --git a/node_modules/shelljs/src/find.js b/node_modules/shelljs/src/find.js new file mode 100644 index 0000000..d9eeec2 --- /dev/null +++ b/node_modules/shelljs/src/find.js @@ -0,0 +1,51 @@ +var fs = require('fs'); +var common = require('./common'); +var _ls = require('./ls'); + +//@ +//@ ### find(path [,path ...]) +//@ ### find(path_array) +//@ Examples: +//@ +//@ ```javascript +//@ find('src', 'lib'); +//@ find(['src', 'lib']); // same as above +//@ find('.').filter(function(file) { return file.match(/\.js$/); }); +//@ ``` +//@ +//@ Returns array of all files (however deep) in the given paths. +//@ +//@ The main difference from `ls('-R', path)` is that the resulting file names +//@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`. +function _find(options, paths) { + if (!paths) + common.error('no path specified'); + else if (typeof paths === 'object') + paths = paths; // assume array + else if (typeof paths === 'string') + paths = [].slice.call(arguments, 1); + + var list = []; + + function pushFile(file) { + if (common.platform === 'win') + file = file.replace(/\\/g, '/'); + list.push(file); + } + + // why not simply do ls('-R', paths)? because the output wouldn't give the base dirs + // to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory + + paths.forEach(function(file) { + pushFile(file); + + if (fs.statSync(file).isDirectory()) { + _ls('-RA', file+'/*').forEach(function(subfile) { + pushFile(subfile); + }); + } + }); + + return list; +} +module.exports = _find; diff --git a/node_modules/shelljs/src/grep.js b/node_modules/shelljs/src/grep.js new file mode 100644 index 0000000..00c7d6a --- /dev/null +++ b/node_modules/shelljs/src/grep.js @@ -0,0 +1,52 @@ +var common = require('./common'); +var fs = require('fs'); + +//@ +//@ ### grep([options ,] regex_filter, file [, file ...]) +//@ ### grep([options ,] regex_filter, file_array) +//@ Available options: +//@ +//@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria. +//@ +//@ Examples: +//@ +//@ ```javascript +//@ grep('-v', 'GLOBAL_VARIABLE', '*.js'); +//@ grep('GLOBAL_VARIABLE', '*.js'); +//@ ``` +//@ +//@ Reads input string from given files and returns a string containing all lines of the +//@ file that match the given `regex_filter`. Wildcard `*` accepted. +function _grep(options, regex, files) { + options = common.parseOptions(options, { + 'v': 'inverse' + }); + + if (!files) + common.error('no paths given'); + + if (typeof files === 'string') + files = [].slice.call(arguments, 2); + // if it's array leave it as it is + + files = common.expand(files); + + var grep = ''; + files.forEach(function(file) { + if (!fs.existsSync(file)) { + common.error('no such file or directory: ' + file, true); + return; + } + + var contents = fs.readFileSync(file, 'utf8'), + lines = contents.split(/\r*\n/); + lines.forEach(function(line) { + var matched = line.match(regex); + if ((options.inverse && !matched) || (!options.inverse && matched)) + grep += line + '\n'; + }); + }); + + return common.ShellString(grep); +} +module.exports = _grep; diff --git a/node_modules/shelljs/src/ln.js b/node_modules/shelljs/src/ln.js new file mode 100644 index 0000000..a7b9701 --- /dev/null +++ b/node_modules/shelljs/src/ln.js @@ -0,0 +1,53 @@ +var fs = require('fs'); +var path = require('path'); +var common = require('./common'); +var os = require('os'); + +//@ +//@ ### ln(options, source, dest) +//@ ### ln(source, dest) +//@ Available options: +//@ +//@ + `s`: symlink +//@ + `f`: force +//@ +//@ Examples: +//@ +//@ ```javascript +//@ ln('file', 'newlink'); +//@ ln('-sf', 'file', 'existing'); +//@ ``` +//@ +//@ Links source to dest. Use -f to force the link, should dest already exist. +function _ln(options, source, dest) { + options = common.parseOptions(options, { + 's': 'symlink', + 'f': 'force' + }); + + if (!source || !dest) { + common.error('Missing <source> and/or <dest>'); + } + + source = path.resolve(process.cwd(), String(source)); + dest = path.resolve(process.cwd(), String(dest)); + + if (!fs.existsSync(source)) { + common.error('Source file does not exist', true); + } + + if (fs.existsSync(dest)) { + if (!options.force) { + common.error('Destination file exists', true); + } + + fs.unlinkSync(dest); + } + + if (options.symlink) { + fs.symlinkSync(source, dest, os.platform() === "win32" ? "junction" : null); + } else { + fs.linkSync(source, dest, os.platform() === "win32" ? "junction" : null); + } +} +module.exports = _ln; diff --git a/node_modules/shelljs/src/ls.js b/node_modules/shelljs/src/ls.js new file mode 100644 index 0000000..3345db4 --- /dev/null +++ b/node_modules/shelljs/src/ls.js @@ -0,0 +1,126 @@ +var path = require('path'); +var fs = require('fs'); +var common = require('./common'); +var _cd = require('./cd'); +var _pwd = require('./pwd'); + +//@ +//@ ### ls([options ,] path [,path ...]) +//@ ### ls([options ,] path_array) +//@ Available options: +//@ +//@ + `-R`: recursive +//@ + `-A`: all files (include files beginning with `.`, except for `.` and `..`) +//@ +//@ Examples: +//@ +//@ ```javascript +//@ ls('projs/*.js'); +//@ ls('-R', '/users/me', '/tmp'); +//@ ls('-R', ['/users/me', '/tmp']); // same as above +//@ ``` +//@ +//@ Returns array of files in the given path, or in current directory if no path provided. +function _ls(options, paths) { + options = common.parseOptions(options, { + 'R': 'recursive', + 'A': 'all', + 'a': 'all_deprecated' + }); + + if (options.all_deprecated) { + // We won't support the -a option as it's hard to image why it's useful + // (it includes '.' and '..' in addition to '.*' files) + // For backwards compatibility we'll dump a deprecated message and proceed as before + common.log('ls: Option -a is deprecated. Use -A instead'); + options.all = true; + } + + if (!paths) + paths = ['.']; + else if (typeof paths === 'object') + paths = paths; // assume array + else if (typeof paths === 'string') + paths = [].slice.call(arguments, 1); + + var list = []; + + // Conditionally pushes file to list - returns true if pushed, false otherwise + // (e.g. prevents hidden files to be included unless explicitly told so) + function pushFile(file, query) { + // hidden file? + if (path.basename(file)[0] === '.') { + // not explicitly asking for hidden files? + if (!options.all && !(path.basename(query)[0] === '.' && path.basename(query).length > 1)) + return false; + } + + if (common.platform === 'win') + file = file.replace(/\\/g, '/'); + + list.push(file); + return true; + } + + paths.forEach(function(p) { + if (fs.existsSync(p)) { + var stats = fs.statSync(p); + // Simple file? + if (stats.isFile()) { + pushFile(p, p); + return; // continue + } + + // Simple dir? + if (stats.isDirectory()) { + // Iterate over p contents + fs.readdirSync(p).forEach(function(file) { + if (!pushFile(file, p)) + return; + + // Recursive? + if (options.recursive) { + var oldDir = _pwd(); + _cd('', p); + if (fs.statSync(file).isDirectory()) + list = list.concat(_ls('-R'+(options.all?'A':''), file+'/*')); + _cd('', oldDir); + } + }); + return; // continue + } + } + + // p does not exist - possible wildcard present + + var basename = path.basename(p); + var dirname = path.dirname(p); + // Wildcard present on an existing dir? (e.g. '/tmp/*.js') + if (basename.search(/\*/) > -1 && fs.existsSync(dirname) && fs.statSync(dirname).isDirectory) { + // Escape special regular expression chars + var regexp = basename.replace(/(\^|\$|\(|\)|<|>|\[|\]|\{|\}|\.|\+|\?)/g, '\\$1'); + // Translates wildcard into regex + regexp = '^' + regexp.replace(/\*/g, '.*') + '$'; + // Iterate over directory contents + fs.readdirSync(dirname).forEach(function(file) { + if (file.match(new RegExp(regexp))) { + if (!pushFile(path.normalize(dirname+'/'+file), basename)) + return; + + // Recursive? + if (options.recursive) { + var pp = dirname + '/' + file; + if (fs.lstatSync(pp).isDirectory()) + list = list.concat(_ls('-R'+(options.all?'A':''), pp+'/*')); + } // recursive + } // if file matches + }); // forEach + return; + } + + common.error('no such file or directory: ' + p, true); + }); + + return list; +} +module.exports = _ls; diff --git a/node_modules/shelljs/src/mkdir.js b/node_modules/shelljs/src/mkdir.js new file mode 100644 index 0000000..5a7088f --- /dev/null +++ b/node_modules/shelljs/src/mkdir.js @@ -0,0 +1,68 @@ +var common = require('./common'); +var fs = require('fs'); +var path = require('path'); + +// Recursively creates 'dir' +function mkdirSyncRecursive(dir) { + var baseDir = path.dirname(dir); + + // Base dir exists, no recursion necessary + if (fs.existsSync(baseDir)) { + fs.mkdirSync(dir, parseInt('0777', 8)); + return; + } + + // Base dir does not exist, go recursive + mkdirSyncRecursive(baseDir); + + // Base dir created, can create dir + fs.mkdirSync(dir, parseInt('0777', 8)); +} + +//@ +//@ ### mkdir([options ,] dir [, dir ...]) +//@ ### mkdir([options ,] dir_array) +//@ Available options: +//@ +//@ + `p`: full path (will create intermediate dirs if necessary) +//@ +//@ Examples: +//@ +//@ ```javascript +//@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g'); +//@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above +//@ ``` +//@ +//@ Creates directories. +function _mkdir(options, dirs) { + options = common.parseOptions(options, { + 'p': 'fullpath' + }); + if (!dirs) + common.error('no paths given'); + + if (typeof dirs === 'string') + dirs = [].slice.call(arguments, 1); + // if it's array leave it as it is + + dirs.forEach(function(dir) { + if (fs.existsSync(dir)) { + if (!options.fullpath) + common.error('path already exists: ' + dir, true); + return; // skip dir + } + + // Base dir does not exist, and no -p option given + var baseDir = path.dirname(dir); + if (!fs.existsSync(baseDir) && !options.fullpath) { + common.error('no such file or directory: ' + baseDir, true); + return; // skip dir + } + + if (options.fullpath) + mkdirSyncRecursive(dir); + else + fs.mkdirSync(dir, parseInt('0777', 8)); + }); +} // mkdir +module.exports = _mkdir; diff --git a/node_modules/shelljs/src/mv.js b/node_modules/shelljs/src/mv.js new file mode 100644 index 0000000..11f9607 --- /dev/null +++ b/node_modules/shelljs/src/mv.js @@ -0,0 +1,80 @@ +var fs = require('fs'); +var path = require('path'); +var common = require('./common'); + +//@ +//@ ### mv(source [, source ...], dest') +//@ ### mv(source_array, dest') +//@ Available options: +//@ +//@ + `f`: force +//@ +//@ Examples: +//@ +//@ ```javascript +//@ mv('-f', 'file', 'dir/'); +//@ mv('file1', 'file2', 'dir/'); +//@ mv(['file1', 'file2'], 'dir/'); // same as above +//@ ``` +//@ +//@ Moves files. The wildcard `*` is accepted. +function _mv(options, sources, dest) { + options = common.parseOptions(options, { + 'f': 'force' + }); + + // Get sources, dest + if (arguments.length < 3) { + common.error('missing <source> and/or <dest>'); + } else if (arguments.length > 3) { + sources = [].slice.call(arguments, 1, arguments.length - 1); + dest = arguments[arguments.length - 1]; + } else if (typeof sources === 'string') { + sources = [sources]; + } else if ('length' in sources) { + sources = sources; // no-op for array + } else { + common.error('invalid arguments'); + } + + sources = common.expand(sources); + + var exists = fs.existsSync(dest), + stats = exists && fs.statSync(dest); + + // Dest is not existing dir, but multiple sources given + if ((!exists || !stats.isDirectory()) && sources.length > 1) + common.error('dest is not a directory (too many sources)'); + + // Dest is an existing file, but no -f given + if (exists && stats.isFile() && !options.force) + common.error('dest file already exists: ' + dest); + + sources.forEach(function(src) { + if (!fs.existsSync(src)) { + common.error('no such file or directory: '+src, true); + return; // skip file + } + + // If here, src exists + + // When copying to '/path/dir': + // thisDest = '/path/dir/file1' + var thisDest = dest; + if (fs.existsSync(dest) && fs.statSync(dest).isDirectory()) + thisDest = path.normalize(dest + '/' + path.basename(src)); + + if (fs.existsSync(thisDest) && !options.force) { + common.error('dest file already exists: ' + thisDest, true); + return; // skip file + } + + if (path.resolve(src) === path.dirname(path.resolve(thisDest))) { + common.error('cannot move to self: '+src, true); + return; // skip file + } + + fs.renameSync(src, thisDest); + }); // forEach(src) +} // mv +module.exports = _mv; diff --git a/node_modules/shelljs/src/popd.js b/node_modules/shelljs/src/popd.js new file mode 100644 index 0000000..11ea24f --- /dev/null +++ b/node_modules/shelljs/src/popd.js @@ -0,0 +1 @@ +// see dirs.js \ No newline at end of file diff --git a/node_modules/shelljs/src/pushd.js b/node_modules/shelljs/src/pushd.js new file mode 100644 index 0000000..11ea24f --- /dev/null +++ b/node_modules/shelljs/src/pushd.js @@ -0,0 +1 @@ +// see dirs.js \ No newline at end of file diff --git a/node_modules/shelljs/src/pwd.js b/node_modules/shelljs/src/pwd.js new file mode 100644 index 0000000..41727bb --- /dev/null +++ b/node_modules/shelljs/src/pwd.js @@ -0,0 +1,11 @@ +var path = require('path'); +var common = require('./common'); + +//@ +//@ ### pwd() +//@ Returns the current directory. +function _pwd(options) { + var pwd = path.resolve(process.cwd()); + return common.ShellString(pwd); +} +module.exports = _pwd; diff --git a/node_modules/shelljs/src/rm.js b/node_modules/shelljs/src/rm.js new file mode 100644 index 0000000..3abe6e1 --- /dev/null +++ b/node_modules/shelljs/src/rm.js @@ -0,0 +1,145 @@ +var common = require('./common'); +var fs = require('fs'); + +// Recursively removes 'dir' +// Adapted from https://github.com/ryanmcgrath/wrench-js +// +// Copyright (c) 2010 Ryan McGrath +// Copyright (c) 2012 Artur Adib +// +// Licensed under the MIT License +// http://www.opensource.org/licenses/mit-license.php +function rmdirSyncRecursive(dir, force) { + var files; + + files = fs.readdirSync(dir); + + // Loop through and delete everything in the sub-tree after checking it + for(var i = 0; i < files.length; i++) { + var file = dir + "/" + files[i], + currFile = fs.lstatSync(file); + + if(currFile.isDirectory()) { // Recursive function back to the beginning + rmdirSyncRecursive(file, force); + } + + else if(currFile.isSymbolicLink()) { // Unlink symlinks + if (force || isWriteable(file)) { + try { + common.unlinkSync(file); + } catch (e) { + common.error('could not remove file (code '+e.code+'): ' + file, true); + } + } + } + + else // Assume it's a file - perhaps a try/catch belongs here? + if (force || isWriteable(file)) { + try { + common.unlinkSync(file); + } catch (e) { + common.error('could not remove file (code '+e.code+'): ' + file, true); + } + } + } + + // Now that we know everything in the sub-tree has been deleted, we can delete the main directory. + // Huzzah for the shopkeep. + + var result; + try { + result = fs.rmdirSync(dir); + } catch(e) { + common.error('could not remove directory (code '+e.code+'): ' + dir, true); + } + + return result; +} // rmdirSyncRecursive + +// Hack to determine if file has write permissions for current user +// Avoids having to check user, group, etc, but it's probably slow +function isWriteable(file) { + var writePermission = true; + try { + var __fd = fs.openSync(file, 'a'); + fs.closeSync(__fd); + } catch(e) { + writePermission = false; + } + + return writePermission; +} + +//@ +//@ ### rm([options ,] file [, file ...]) +//@ ### rm([options ,] file_array) +//@ Available options: +//@ +//@ + `-f`: force +//@ + `-r, -R`: recursive +//@ +//@ Examples: +//@ +//@ ```javascript +//@ rm('-rf', '/tmp/*'); +//@ rm('some_file.txt', 'another_file.txt'); +//@ rm(['some_file.txt', 'another_file.txt']); // same as above +//@ ``` +//@ +//@ Removes files. The wildcard `*` is accepted. +function _rm(options, files) { + options = common.parseOptions(options, { + 'f': 'force', + 'r': 'recursive', + 'R': 'recursive' + }); + if (!files) + common.error('no paths given'); + + if (typeof files === 'string') + files = [].slice.call(arguments, 1); + // if it's array leave it as it is + + files = common.expand(files); + + files.forEach(function(file) { + if (!fs.existsSync(file)) { + // Path does not exist, no force flag given + if (!options.force) + common.error('no such file or directory: '+file, true); + + return; // skip file + } + + // If here, path exists + + var stats = fs.lstatSync(file); + if (stats.isFile() || stats.isSymbolicLink()) { + + // Do not check for file writing permissions + if (options.force) { + common.unlinkSync(file); + return; + } + + if (isWriteable(file)) + common.unlinkSync(file); + else + common.error('permission denied: '+file, true); + + return; + } // simple file + + // Path is an existing directory, but no -r flag given + if (stats.isDirectory() && !options.recursive) { + common.error('path is a directory', true); + return; // skip path + } + + // Recursively remove existing directory + if (stats.isDirectory() && options.recursive) { + rmdirSyncRecursive(file, options.force); + } + }); // forEach(file) +} // rm +module.exports = _rm; diff --git a/node_modules/shelljs/src/sed.js b/node_modules/shelljs/src/sed.js new file mode 100644 index 0000000..65f7cb4 --- /dev/null +++ b/node_modules/shelljs/src/sed.js @@ -0,0 +1,43 @@ +var common = require('./common'); +var fs = require('fs'); + +//@ +//@ ### sed([options ,] search_regex, replacement, file) +//@ Available options: +//@ +//@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_ +//@ +//@ Examples: +//@ +//@ ```javascript +//@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js'); +//@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js'); +//@ ``` +//@ +//@ Reads an input string from `file` and performs a JavaScript `replace()` on the input +//@ using the given search regex and replacement string or function. Returns the new string after replacement. +function _sed(options, regex, replacement, file) { + options = common.parseOptions(options, { + 'i': 'inplace' + }); + + if (typeof replacement === 'string' || typeof replacement === 'function') + replacement = replacement; // no-op + else if (typeof replacement === 'number') + replacement = replacement.toString(); // fallback + else + common.error('invalid replacement string'); + + if (!file) + common.error('no file given'); + + if (!fs.existsSync(file)) + common.error('no such file or directory: ' + file); + + var result = fs.readFileSync(file, 'utf8').replace(regex, replacement); + if (options.inplace) + fs.writeFileSync(file, result, 'utf8'); + + return common.ShellString(result); +} +module.exports = _sed; diff --git a/node_modules/shelljs/src/tempdir.js b/node_modules/shelljs/src/tempdir.js new file mode 100644 index 0000000..45953c2 --- /dev/null +++ b/node_modules/shelljs/src/tempdir.js @@ -0,0 +1,56 @@ +var common = require('./common'); +var os = require('os'); +var fs = require('fs'); + +// Returns false if 'dir' is not a writeable directory, 'dir' otherwise +function writeableDir(dir) { + if (!dir || !fs.existsSync(dir)) + return false; + + if (!fs.statSync(dir).isDirectory()) + return false; + + var testFile = dir+'/'+common.randomFileName(); + try { + fs.writeFileSync(testFile, ' '); + common.unlinkSync(testFile); + return dir; + } catch (e) { + return false; + } +} + + +//@ +//@ ### tempdir() +//@ +//@ Examples: +//@ +//@ ```javascript +//@ var tmp = tempdir(); // "/tmp" for most *nix platforms +//@ ``` +//@ +//@ Searches and returns string containing a writeable, platform-dependent temporary directory. +//@ Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir). +function _tempDir() { + var state = common.state; + if (state.tempDir) + return state.tempDir; // from cache + + state.tempDir = writeableDir(os.tempDir && os.tempDir()) || // node 0.8+ + writeableDir(process.env['TMPDIR']) || + writeableDir(process.env['TEMP']) || + writeableDir(process.env['TMP']) || + writeableDir(process.env['Wimp$ScrapDir']) || // RiscOS + writeableDir('C:\\TEMP') || // Windows + writeableDir('C:\\TMP') || // Windows + writeableDir('\\TEMP') || // Windows + writeableDir('\\TMP') || // Windows + writeableDir('/tmp') || + writeableDir('/var/tmp') || + writeableDir('/usr/tmp') || + writeableDir('.'); // last resort + + return state.tempDir; +} +module.exports = _tempDir; diff --git a/node_modules/shelljs/src/test.js b/node_modules/shelljs/src/test.js new file mode 100644 index 0000000..8a4ac7d --- /dev/null +++ b/node_modules/shelljs/src/test.js @@ -0,0 +1,85 @@ +var common = require('./common'); +var fs = require('fs'); + +//@ +//@ ### test(expression) +//@ Available expression primaries: +//@ +//@ + `'-b', 'path'`: true if path is a block device +//@ + `'-c', 'path'`: true if path is a character device +//@ + `'-d', 'path'`: true if path is a directory +//@ + `'-e', 'path'`: true if path exists +//@ + `'-f', 'path'`: true if path is a regular file +//@ + `'-L', 'path'`: true if path is a symboilc link +//@ + `'-p', 'path'`: true if path is a pipe (FIFO) +//@ + `'-S', 'path'`: true if path is a socket +//@ +//@ Examples: +//@ +//@ ```javascript +//@ if (test('-d', path)) { /* do something with dir */ }; +//@ if (!test('-f', path)) continue; // skip if it's a regular file +//@ ``` +//@ +//@ Evaluates expression using the available primaries and returns corresponding value. +function _test(options, path) { + if (!path) + common.error('no path given'); + + // hack - only works with unary primaries + options = common.parseOptions(options, { + 'b': 'block', + 'c': 'character', + 'd': 'directory', + 'e': 'exists', + 'f': 'file', + 'L': 'link', + 'p': 'pipe', + 'S': 'socket' + }); + + var canInterpret = false; + for (var key in options) + if (options[key] === true) { + canInterpret = true; + break; + } + + if (!canInterpret) + common.error('could not interpret expression'); + + if (options.link) { + try { + return fs.lstatSync(path).isSymbolicLink(); + } catch(e) { + return false; + } + } + + if (!fs.existsSync(path)) + return false; + + if (options.exists) + return true; + + var stats = fs.statSync(path); + + if (options.block) + return stats.isBlockDevice(); + + if (options.character) + return stats.isCharacterDevice(); + + if (options.directory) + return stats.isDirectory(); + + if (options.file) + return stats.isFile(); + + if (options.pipe) + return stats.isFIFO(); + + if (options.socket) + return stats.isSocket(); +} // test +module.exports = _test; diff --git a/node_modules/shelljs/src/to.js b/node_modules/shelljs/src/to.js new file mode 100644 index 0000000..f029999 --- /dev/null +++ b/node_modules/shelljs/src/to.js @@ -0,0 +1,29 @@ +var common = require('./common'); +var fs = require('fs'); +var path = require('path'); + +//@ +//@ ### 'string'.to(file) +//@ +//@ Examples: +//@ +//@ ```javascript +//@ cat('input.txt').to('output.txt'); +//@ ``` +//@ +//@ Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as +//@ those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_ +function _to(options, file) { + if (!file) + common.error('wrong arguments'); + + if (!fs.existsSync( path.dirname(file) )) + common.error('no such file or directory: ' + path.dirname(file)); + + try { + fs.writeFileSync(file, this.toString(), 'utf8'); + } catch(e) { + common.error('could not write to file (code '+e.code+'): '+file, true); + } +} +module.exports = _to; diff --git a/node_modules/shelljs/src/toEnd.js b/node_modules/shelljs/src/toEnd.js new file mode 100644 index 0000000..f6d099d --- /dev/null +++ b/node_modules/shelljs/src/toEnd.js @@ -0,0 +1,29 @@ +var common = require('./common'); +var fs = require('fs'); +var path = require('path'); + +//@ +//@ ### 'string'.toEnd(file) +//@ +//@ Examples: +//@ +//@ ```javascript +//@ cat('input.txt').toEnd('output.txt'); +//@ ``` +//@ +//@ Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as +//@ those returned by `cat`, `grep`, etc). +function _toEnd(options, file) { + if (!file) + common.error('wrong arguments'); + + if (!fs.existsSync( path.dirname(file) )) + common.error('no such file or directory: ' + path.dirname(file)); + + try { + fs.appendFileSync(file, this.toString(), 'utf8'); + } catch(e) { + common.error('could not append to file (code '+e.code+'): '+file, true); + } +} +module.exports = _toEnd; diff --git a/node_modules/shelljs/src/which.js b/node_modules/shelljs/src/which.js new file mode 100644 index 0000000..2822ecf --- /dev/null +++ b/node_modules/shelljs/src/which.js @@ -0,0 +1,83 @@ +var common = require('./common'); +var fs = require('fs'); +var path = require('path'); + +// Cross-platform method for splitting environment PATH variables +function splitPath(p) { + for (i=1;i<2;i++) {} + + if (!p) + return []; + + if (common.platform === 'win') + return p.split(';'); + else + return p.split(':'); +} + +function checkPath(path) { + return fs.existsSync(path) && fs.statSync(path).isDirectory() == false; +} + +//@ +//@ ### which(command) +//@ +//@ Examples: +//@ +//@ ```javascript +//@ var nodeExec = which('node'); +//@ ``` +//@ +//@ Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions. +//@ Returns string containing the absolute path to the command. +function _which(options, cmd) { + if (!cmd) + common.error('must specify command'); + + var pathEnv = process.env.path || process.env.Path || process.env.PATH, + pathArray = splitPath(pathEnv), + where = null; + + // No relative/absolute paths provided? + if (cmd.search(/\//) === -1) { + // Search for command in PATH + pathArray.forEach(function(dir) { + if (where) + return; // already found it + + var attempt = path.resolve(dir + '/' + cmd); + if (checkPath(attempt)) { + where = attempt; + return; + } + + if (common.platform === 'win') { + var baseAttempt = attempt; + attempt = baseAttempt + '.exe'; + if (checkPath(attempt)) { + where = attempt; + return; + } + attempt = baseAttempt + '.cmd'; + if (checkPath(attempt)) { + where = attempt; + return; + } + attempt = baseAttempt + '.bat'; + if (checkPath(attempt)) { + where = attempt; + return; + } + } // if 'win' + }); + } + + // Command not found anywhere? + if (!checkPath(cmd) && !where) + return null; + + where = where || path.resolve(cmd); + + return common.ShellString(where); +} +module.exports = _which; diff --git a/node_modules/tunnel/.npmignore b/node_modules/tunnel/.npmignore new file mode 100644 index 0000000..6684c76 --- /dev/null +++ b/node_modules/tunnel/.npmignore @@ -0,0 +1,2 @@ +/.idea +/node_modules diff --git a/node_modules/tunnel/CHANGELOG.md b/node_modules/tunnel/CHANGELOG.md new file mode 100644 index 0000000..70bdbd7 --- /dev/null +++ b/node_modules/tunnel/CHANGELOG.md @@ -0,0 +1,13 @@ +# Changelog + + - 0.0.4 (2016/01/23) + - supported Node v0.12 or later. + + - 0.0.3 (2014/01/20) + - fixed package.json + + - 0.0.1 (2012/02/18) + - supported Node v0.6.x (0.6.11 or later). + + - 0.0.0 (2012/02/11) + - first release. diff --git a/node_modules/tunnel/LICENSE b/node_modules/tunnel/LICENSE new file mode 100644 index 0000000..8b8a895 --- /dev/null +++ b/node_modules/tunnel/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012 Koichi Kobayashi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/tunnel/README.md b/node_modules/tunnel/README.md new file mode 100644 index 0000000..b196162 --- /dev/null +++ b/node_modules/tunnel/README.md @@ -0,0 +1,179 @@ +# node-tunnel - HTTP/HTTPS Agents for tunneling proxies + +## Example + +```javascript +var tunnel = require('tunnel'); + +var tunnelingAgent = tunnel.httpsOverHttp({ + proxy: { + host: 'localhost', + port: 3128 + } +}); + +var req = https.request({ + host: 'example.com', + port: 443, + agent: tunnelingAgent +}); +``` + +## Installation + + $ npm install tunnel + +## Usages + +### HTTP over HTTP tunneling + +```javascript +var tunnelingAgent = tunnel.httpOverHttp({ + maxSockets: poolSize, // Defaults to 5 + + proxy: { // Proxy settings + host: proxyHost, // Defaults to 'localhost' + port: proxyPort, // Defaults to 80 + localAddress: localAddress, // Local interface if necessary + + // Basic authorization for proxy server if necessary + proxyAuth: 'user:password', + + // Header fields for proxy server if necessary + headers: { + 'User-Agent': 'Node' + } + } +}); + +var req = http.request({ + host: 'example.com', + port: 80, + agent: tunnelingAgent +}); +``` + +### HTTPS over HTTP tunneling + +```javascript +var tunnelingAgent = tunnel.httpsOverHttp({ + maxSockets: poolSize, // Defaults to 5 + + // CA for origin server if necessary + ca: [ fs.readFileSync('origin-server-ca.pem')], + + // Client certification for origin server if necessary + key: fs.readFileSync('origin-server-key.pem'), + cert: fs.readFileSync('origin-server-cert.pem'), + + proxy: { // Proxy settings + host: proxyHost, // Defaults to 'localhost' + port: proxyPort, // Defaults to 80 + localAddress: localAddress, // Local interface if necessary + + // Basic authorization for proxy server if necessary + proxyAuth: 'user:password', + + // Header fields for proxy server if necessary + headers: { + 'User-Agent': 'Node' + }, + } +}); + +var req = https.request({ + host: 'example.com', + port: 443, + agent: tunnelingAgent +}); +``` + +### HTTP over HTTPS tunneling + +```javascript +var tunnelingAgent = tunnel.httpOverHttps({ + maxSockets: poolSize, // Defaults to 5 + + proxy: { // Proxy settings + host: proxyHost, // Defaults to 'localhost' + port: proxyPort, // Defaults to 443 + localAddress: localAddress, // Local interface if necessary + + // Basic authorization for proxy server if necessary + proxyAuth: 'user:password', + + // Header fields for proxy server if necessary + headers: { + 'User-Agent': 'Node' + }, + + // CA for proxy server if necessary + ca: [ fs.readFileSync('origin-server-ca.pem')], + + // Server name for verification if necessary + servername: 'example.com', + + // Client certification for proxy server if necessary + key: fs.readFileSync('origin-server-key.pem'), + cert: fs.readFileSync('origin-server-cert.pem'), + } +}); + +var req = http.request({ + host: 'example.com', + port: 80, + agent: tunnelingAgent +}); +``` + +### HTTPS over HTTPS tunneling + +```javascript +var tunnelingAgent = tunnel.httpsOverHttps({ + maxSockets: poolSize, // Defaults to 5 + + // CA for origin server if necessary + ca: [ fs.readFileSync('origin-server-ca.pem')], + + // Client certification for origin server if necessary + key: fs.readFileSync('origin-server-key.pem'), + cert: fs.readFileSync('origin-server-cert.pem'), + + proxy: { // Proxy settings + host: proxyHost, // Defaults to 'localhost' + port: proxyPort, // Defaults to 443 + localAddress: localAddress, // Local interface if necessary + + // Basic authorization for proxy server if necessary + proxyAuth: 'user:password', + + // Header fields for proxy server if necessary + headers: { + 'User-Agent': 'Node' + } + + // CA for proxy server if necessary + ca: [ fs.readFileSync('origin-server-ca.pem')], + + // Server name for verification if necessary + servername: 'example.com', + + // Client certification for proxy server if necessary + key: fs.readFileSync('origin-server-key.pem'), + cert: fs.readFileSync('origin-server-cert.pem'), + } +}); + +var req = https.request({ + host: 'example.com', + port: 443, + agent: tunnelingAgent +}); +``` + +## CONTRIBUTORS +* [Aleksis Brezas (abresas)](https://github.com/abresas) + +## License + +Licensed under the [MIT](https://github.com/koichik/node-tunnel/blob/master/LICENSE) license. diff --git a/node_modules/tunnel/index.js b/node_modules/tunnel/index.js new file mode 100644 index 0000000..2947757 --- /dev/null +++ b/node_modules/tunnel/index.js @@ -0,0 +1 @@ +module.exports = require('./lib/tunnel'); diff --git a/node_modules/tunnel/lib/tunnel.js b/node_modules/tunnel/lib/tunnel.js new file mode 100644 index 0000000..c42b039 --- /dev/null +++ b/node_modules/tunnel/lib/tunnel.js @@ -0,0 +1,247 @@ +'use strict'; + +var net = require('net'); +var tls = require('tls'); +var http = require('http'); +var https = require('https'); +var events = require('events'); +var assert = require('assert'); +var util = require('util'); + + +exports.httpOverHttp = httpOverHttp; +exports.httpsOverHttp = httpsOverHttp; +exports.httpOverHttps = httpOverHttps; +exports.httpsOverHttps = httpsOverHttps; + + +function httpOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + return agent; +} + +function httpsOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + agent.createSocket = createSecureSocket; + return agent; +} + +function httpOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + return agent; +} + +function httpsOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + agent.createSocket = createSecureSocket; + return agent; +} + + +function TunnelingAgent(options) { + var self = this; + self.options = options || {}; + self.proxyOptions = self.options.proxy || {}; + self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; + self.requests = []; + self.sockets = []; + + self.on('free', function onFree(socket, host, port, localAddress) { + var options = toOptions(host, port, localAddress); + for (var i = 0, len = self.requests.length; i < len; ++i) { + var pending = self.requests[i]; + if (pending.host === options.host && pending.port === options.port) { + // Detect the request to connect same origin server, + // reuse the connection. + self.requests.splice(i, 1); + pending.request.onSocket(socket); + return; + } + } + socket.destroy(); + self.removeSocket(socket); + }); +} +util.inherits(TunnelingAgent, events.EventEmitter); + +TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { + var self = this; + var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress)); + + if (self.sockets.length >= this.maxSockets) { + // We are over limit so we'll add it to the queue. + self.requests.push(options); + return; + } + + // If we are under maxSockets create a new one. + self.createSocket(options, function(socket) { + socket.on('free', onFree); + socket.on('close', onCloseOrRemove); + socket.on('agentRemove', onCloseOrRemove); + req.onSocket(socket); + + function onFree() { + self.emit('free', socket, options); + } + + function onCloseOrRemove(err) { + self.removeSocket(socket); + socket.removeListener('free', onFree); + socket.removeListener('close', onCloseOrRemove); + socket.removeListener('agentRemove', onCloseOrRemove); + } + }); +}; + +TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { + var self = this; + var placeholder = {}; + self.sockets.push(placeholder); + + var connectOptions = mergeOptions({}, self.proxyOptions, { + method: 'CONNECT', + path: options.host + ':' + options.port, + agent: false + }); + if (connectOptions.proxyAuth) { + connectOptions.headers = connectOptions.headers || {}; + connectOptions.headers['Proxy-Authorization'] = 'Basic ' + + new Buffer(connectOptions.proxyAuth).toString('base64'); + } + + debug('making CONNECT request'); + var connectReq = self.request(connectOptions); + connectReq.useChunkedEncodingByDefault = false; // for v0.6 + connectReq.once('response', onResponse); // for v0.6 + connectReq.once('upgrade', onUpgrade); // for v0.6 + connectReq.once('connect', onConnect); // for v0.7 or later + connectReq.once('error', onError); + connectReq.end(); + + function onResponse(res) { + // Very hacky. This is necessary to avoid http-parser leaks. + res.upgrade = true; + } + + function onUpgrade(res, socket, head) { + // Hacky. + process.nextTick(function() { + onConnect(res, socket, head); + }); + } + + function onConnect(res, socket, head) { + connectReq.removeAllListeners(); + socket.removeAllListeners(); + + if (res.statusCode === 200) { + assert.equal(head.length, 0); + debug('tunneling connection has established'); + self.sockets[self.sockets.indexOf(placeholder)] = socket; + cb(socket); + } else { + debug('tunneling socket could not be established, statusCode=%d', + res.statusCode); + var error = new Error('tunneling socket could not be established, ' + + 'statusCode=' + res.statusCode); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + } + } + + function onError(cause) { + connectReq.removeAllListeners(); + + debug('tunneling socket could not be established, cause=%s\n', + cause.message, cause.stack); + var error = new Error('tunneling socket could not be established, ' + + 'cause=' + cause.message); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + } +}; + +TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { + var pos = this.sockets.indexOf(socket) + if (pos === -1) { + return; + } + this.sockets.splice(pos, 1); + + var pending = this.requests.shift(); + if (pending) { + // If we have pending requests and a socket gets closed a new one + // needs to be created to take over in the pool for the one that closed. + this.createSocket(pending, function(socket) { + pending.request.onSocket(socket); + }); + } +}; + +function createSecureSocket(options, cb) { + var self = this; + TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { + var hostHeader = options.request.getHeader('host'); + var tlsOptions = mergeOptions({}, self.options, { + socket: socket, + servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host + }); + + // 0 is dummy port for v0.6 + var secureSocket = tls.connect(0, tlsOptions); + self.sockets[self.sockets.indexOf(socket)] = secureSocket; + cb(secureSocket); + }); +} + + +function toOptions(host, port, localAddress) { + if (typeof host === 'string') { // since v0.10 + return { + host: host, + port: port, + localAddress: localAddress + }; + } + return host; // for v0.11 or later +} + +function mergeOptions(target) { + for (var i = 1, len = arguments.length; i < len; ++i) { + var overrides = arguments[i]; + if (typeof overrides === 'object') { + var keys = Object.keys(overrides); + for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { + var k = keys[j]; + if (overrides[k] !== undefined) { + target[k] = overrides[k]; + } + } + } + } + return target; +} + + +var debug; +if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { + debug = function() { + var args = Array.prototype.slice.call(arguments); + if (typeof args[0] === 'string') { + args[0] = 'TUNNEL: ' + args[0]; + } else { + args.unshift('TUNNEL:'); + } + console.error.apply(console, args); + } +} else { + debug = function() {}; +} +exports.debug = debug; // for test diff --git a/node_modules/tunnel/package.json b/node_modules/tunnel/package.json new file mode 100644 index 0000000..0db39c9 --- /dev/null +++ b/node_modules/tunnel/package.json @@ -0,0 +1,64 @@ +{ + "_from": "tunnel@0.0.4", + "_id": "tunnel@0.0.4", + "_inBundle": false, + "_integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=", + "_location": "/tunnel", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "tunnel@0.0.4", + "name": "tunnel", + "escapedName": "tunnel", + "rawSpec": "0.0.4", + "saveSpec": null, + "fetchSpec": "0.0.4" + }, + "_requiredBy": [ + "/typed-rest-client" + ], + "_resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", + "_shasum": "2d3785a158c174c9a16dc2c046ec5fc5f1742213", + "_spec": "tunnel@0.0.4", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node\\node_modules\\typed-rest-client", + "author": { + "name": "Koichi Kobayashi", + "email": "koichik@improvement.jp" + }, + "bugs": { + "url": "https://github.com/koichik/node-tunnel/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Node HTTP/HTTPS Agents for tunneling proxies", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "directories": { + "lib": "./lib" + }, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + }, + "homepage": "https://github.com/koichik/node-tunnel/", + "keywords": [ + "http", + "https", + "agent", + "proxy", + "tunnel" + ], + "license": "MIT", + "main": "./index.js", + "name": "tunnel", + "repository": { + "type": "git", + "url": "git+https://github.com/koichik/node-tunnel.git" + }, + "scripts": { + "test": "./node_modules/mocha/bin/mocha" + }, + "version": "0.0.4" +} diff --git a/node_modules/tunnel/test/http-over-http.js b/node_modules/tunnel/test/http-over-http.js new file mode 100644 index 0000000..73d17a2 --- /dev/null +++ b/node_modules/tunnel/test/http-over-http.js @@ -0,0 +1,108 @@ +var http = require('http'); +var net = require('net'); +var should = require('should'); +var tunnel = require('../index'); + +describe('HTTP over HTTP', function() { + it('should finish without error', function(done) { + var serverPort = 3000; + var proxyPort = 3001; + var poolSize = 3; + var N = 10; + var serverConnect = 0; + var proxyConnect = 0; + var clientConnect = 0; + var server; + var proxy; + var agent; + + server = http.createServer(function(req, res) { + tunnel.debug('SERVER: got request'); + ++serverConnect; + res.writeHead(200); + res.end('Hello' + req.url); + tunnel.debug('SERVER: sending response'); + }); + server.listen(serverPort, setupProxy); + + function setupProxy() { + proxy = http.createServer(function(req, res) { + should.fail(); + }); + proxy.on('upgrade', onConnect); // for v0.6 + proxy.on('connect', onConnect); // for v0.7 or later + + function onConnect(req, clientSocket, head) { + tunnel.debug('PROXY: got CONNECT request'); + + req.method.should.equal('CONNECT'); + req.url.should.equal('localhost:' + serverPort); + req.headers.should.not.have.property('transfer-encoding'); + req.headers.should.have.property('proxy-authorization', + 'Basic ' + new Buffer('user:password').toString('base64')); + ++proxyConnect; + + tunnel.debug('PROXY: creating a tunnel'); + var serverSocket = net.connect(serverPort, function() { + tunnel.debug('PROXY: replying to client CONNECT request'); + clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n'); + clientSocket.pipe(serverSocket); + serverSocket.write(head); + serverSocket.pipe(clientSocket); + // workaround, see joyent/node#2524 + serverSocket.on('end', function() { + clientSocket.end(); + }); + }); + } + proxy.listen(proxyPort, setupClient); + } + + function setupClient() { + agent = tunnel.httpOverHttp({ + maxSockets: poolSize, + proxy: { + port: proxyPort, + proxyAuth: 'user:password' + } + }); + + for (var i = 0; i < N; ++i) { + doClientRequest(i); + } + + function doClientRequest(i) { + tunnel.debug('CLIENT: Making HTTP request (%d)', i); + var req = http.get({ + port: serverPort, + path: '/' + i, + agent: agent + }, function(res) { + tunnel.debug('CLIENT: got HTTP response (%d)', i); + res.setEncoding('utf8'); + res.on('data', function(data) { + data.should.equal('Hello/' + i); + }); + res.on('end', function() { + ++clientConnect; + if (clientConnect === N) { + proxy.close(); + server.close(); + } + }); + }); + } + } + + server.on('close', function() { + serverConnect.should.equal(N); + proxyConnect.should.equal(poolSize); + clientConnect.should.equal(N); + + agent.sockets.should.be.empty; + agent.requests.should.be.empty; + + done(); + }); + }); +}); diff --git a/node_modules/tunnel/test/http-over-https.js b/node_modules/tunnel/test/http-over-https.js new file mode 100644 index 0000000..c3a92fd --- /dev/null +++ b/node_modules/tunnel/test/http-over-https.js @@ -0,0 +1,130 @@ +var http = require('http'); +var https = require('https'); +var net = require('net'); +var fs = require('fs'); +var path = require('path'); +var should = require('should'); +var tunnel = require('../index'); + +function readPem(file) { + return fs.readFileSync(path.join('test/keys', file + '.pem')); +} + +var proxyKey = readPem('proxy1-key'); +var proxyCert = readPem('proxy1-cert'); +var proxyCA = readPem('ca2-cert'); +var clientKey = readPem('client1-key'); +var clientCert = readPem('client1-cert'); +var clientCA = readPem('ca3-cert'); + +describe('HTTP over HTTPS', function() { + it('should finish without error', function(done) { + var serverPort = 3004; + var proxyPort = 3005; + var poolSize = 3; + var N = 10; + var serverConnect = 0; + var proxyConnect = 0; + var clientConnect = 0; + var server; + var proxy; + var agent; + + server = http.createServer(function(req, res) { + tunnel.debug('SERVER: got request'); + ++serverConnect; + res.writeHead(200); + res.end('Hello' + req.url); + tunnel.debug('SERVER: sending response'); + }); + server.listen(serverPort, setupProxy); + + function setupProxy() { + proxy = https.createServer({ + key: proxyKey, + cert: proxyCert, + ca: [clientCA], + requestCert: true, + rejectUnauthorized: true + }, function(req, res) { + should.fail(); + }); + proxy.on('upgrade', onConnect); // for v0.6 + proxy.on('connect', onConnect); // for v0.7 or later + + function onConnect(req, clientSocket, head) { + tunnel.debug('PROXY: got CONNECT request'); + + req.method.should.equal('CONNECT'); + req.url.should.equal('localhost:' + serverPort); + req.headers.should.not.have.property('transfer-encoding'); + ++proxyConnect; + + tunnel.debug('PROXY: creating a tunnel'); + var serverSocket = net.connect(serverPort, function() { + tunnel.debug('PROXY: replying to client CONNECT request'); + clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n'); + clientSocket.pipe(serverSocket); + serverSocket.write(head); + serverSocket.pipe(clientSocket); + // workaround, see joyent/node#2524 + serverSocket.on('end', function() { + clientSocket.end(); + }); + }); + } + proxy.listen(proxyPort, setupClient); + } + + function setupClient() { + agent = tunnel.httpOverHttps({ + maxSockets: poolSize, + proxy: { + port: proxyPort, + key: clientKey, + cert: clientCert, + ca: [proxyCA], + rejectUnauthorized: true + } + }); + + for (var i = 0; i < N; ++i) { + doClientRequest(i); + } + + function doClientRequest(i) { + tunnel.debug('CLIENT: Making HTTP request (%d)', i); + var req = http.get({ + port: serverPort, + path: '/' + i, + agent: agent + }, function(res) { + tunnel.debug('CLIENT: got HTTP response (%d)', i); + res.setEncoding('utf8'); + res.on('data', function(data) { + data.should.equal('Hello/' + i); + }); + res.on('end', function() { + ++clientConnect; + if (clientConnect === N) { + proxy.close(); + server.close(); + } + }); + }); + } + } + + server.on('close', function() { + serverConnect.should.equal(N); + proxyConnect.should.equal(poolSize); + clientConnect.should.equal(N); + + var name = 'localhost:' + serverPort; + agent.sockets.should.be.empty; + agent.requests.should.be.empty; + + done(); + }); + }); +}); diff --git a/node_modules/tunnel/test/https-over-http.js b/node_modules/tunnel/test/https-over-http.js new file mode 100644 index 0000000..82c4772 --- /dev/null +++ b/node_modules/tunnel/test/https-over-http.js @@ -0,0 +1,130 @@ +var http = require('http'); +var https = require('https'); +var net = require('net'); +var fs = require('fs'); +var path = require('path'); +var should = require('should'); +var tunnel = require('../index'); + +function readPem(file) { + return fs.readFileSync(path.join('test/keys', file + '.pem')); +} + +var serverKey = readPem('server1-key'); +var serverCert = readPem('server1-cert'); +var serverCA = readPem('ca1-cert'); +var clientKey = readPem('client1-key'); +var clientCert = readPem('client1-cert'); +var clientCA = readPem('ca3-cert'); + + +describe('HTTPS over HTTP', function() { + it('should finish without error', function(done) { + var serverPort = 3002; + var proxyPort = 3003; + var poolSize = 3; + var N = 10; + var serverConnect = 0; + var proxyConnect = 0; + var clientConnect = 0; + var server; + var proxy; + var agent; + + server = https.createServer({ + key: serverKey, + cert: serverCert, + ca: [clientCA], + requestCert: true, + rejectUnauthorized: true + }, function(req, res) { + tunnel.debug('SERVER: got request'); + ++serverConnect; + res.writeHead(200); + res.end('Hello' + req.url); + tunnel.debug('SERVER: sending response'); + }); + server.listen(serverPort, setupProxy); + + function setupProxy() { + proxy = http.createServer(function(req, res) { + should.fail(); + }); + proxy.on('upgrade', onConnect); // for v0.6 + proxy.on('connect', onConnect); // for v0.7 or later + + function onConnect(req, clientSocket, head) { + tunnel.debug('PROXY: got CONNECT request'); + + req.method.should.equal('CONNECT'); + req.url.should.equal('localhost:' + serverPort); + req.headers.should.not.have.property('transfer-encoding'); + ++proxyConnect; + + var serverSocket = net.connect(serverPort, function() { + tunnel.debug('PROXY: replying to client CONNECT request'); + clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n'); + clientSocket.pipe(serverSocket); + serverSocket.write(head); + serverSocket.pipe(clientSocket); + // workaround, see joyent/node#2524 + serverSocket.on('end', function() { + clientSocket.end(); + }); + }); + } + proxy.listen(proxyPort, setupClient); + } + + function setupClient() { + agent = tunnel.httpsOverHttp({ + maxSockets: poolSize, + key: clientKey, + cert: clientCert, + ca: [serverCA], + rejectUnauthorized: true, + proxy: { + port: proxyPort + } + }); + + for (var i = 0; i < N; ++i) { + doClientRequest(i); + } + + function doClientRequest(i) { + tunnel.debug('CLIENT: Making HTTPS request (%d)', i); + var req = https.get({ + port: serverPort, + path: '/' + i, + agent: agent + }, function(res) { + tunnel.debug('CLIENT: got HTTPS response (%d)', i); + res.setEncoding('utf8'); + res.on('data', function(data) { + data.should.equal('Hello/' + i); + }); + res.on('end', function() { + ++clientConnect; + if (clientConnect === N) { + proxy.close(); + server.close(); + } + }); + }); + } + } + + server.on('close', function() { + serverConnect.should.equal(N); + proxyConnect.should.equal(poolSize); + clientConnect.should.equal(N); + + var name = 'localhost:' + serverPort; + agent.sockets.should.be.empty; + agent.requests.should.be.empty; + + done(); + }); + }); +}); diff --git a/node_modules/tunnel/test/https-over-https-error.js b/node_modules/tunnel/test/https-over-https-error.js new file mode 100644 index 0000000..c74094d --- /dev/null +++ b/node_modules/tunnel/test/https-over-https-error.js @@ -0,0 +1,261 @@ +var http = require('http'); +var https = require('https'); +var net = require('net'); +var fs = require('fs'); +var path = require('path'); +var should = require('should'); +var tunnel = require('../index'); + +function readPem(file) { + return fs.readFileSync(path.join('test/keys', file + '.pem')); +} + +var serverKey = readPem('server2-key'); +var serverCert = readPem('server2-cert'); +var serverCA = readPem('ca1-cert'); +var proxyKey = readPem('proxy2-key'); +var proxyCert = readPem('proxy2-cert'); +var proxyCA = readPem('ca2-cert'); +var client1Key = readPem('client1-key'); +var client1Cert = readPem('client1-cert'); +var client1CA = readPem('ca3-cert'); +var client2Key = readPem('client2-key'); +var client2Cert = readPem('client2-cert'); +var client2CA = readPem('ca4-cert'); + +describe('HTTPS over HTTPS authentication failed', function() { + it('should finish without error', function(done) { + var serverPort = 3008; + var proxyPort = 3009; + var serverConnect = 0; + var proxyConnect = 0; + var clientRequest = 0; + var clientConnect = 0; + var clientError = 0; + var server; + var proxy; + + server = https.createServer({ + key: serverKey, + cert: serverCert, + ca: [client1CA], + requestCert: true, + rejectUnauthorized: true + }, function(req, res) { + tunnel.debug('SERVER: got request', req.url); + ++serverConnect; + req.on('data', function(data) { + }); + req.on('end', function() { + res.writeHead(200); + res.end('Hello, ' + serverConnect); + tunnel.debug('SERVER: sending response'); + }); + req.resume(); + }); + //server.addContext('server2', { + // key: serverKey, + // cert: serverCert, + // ca: [client1CA], + //}); + server.listen(serverPort, setupProxy); + + function setupProxy() { + proxy = https.createServer({ + key: proxyKey, + cert: proxyCert, + ca: [client2CA], + requestCert: true, + rejectUnauthorized: true + }, function(req, res) { + should.fail(); + }); + //proxy.addContext('proxy2', { + // key: proxyKey, + // cert: proxyCert, + // ca: [client2CA], + //}); + proxy.on('upgrade', onConnect); // for v0.6 + proxy.on('connect', onConnect); // for v0.7 or later + + function onConnect(req, clientSocket, head) { + req.method.should.equal('CONNECT'); + req.url.should.equal('localhost:' + serverPort); + req.headers.should.not.have.property('transfer-encoding'); + ++proxyConnect; + + var serverSocket = net.connect(serverPort, function() { + tunnel.debug('PROXY: replying to client CONNECT request'); + clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n'); + clientSocket.pipe(serverSocket); + serverSocket.write(head); + serverSocket.pipe(clientSocket); + // workaround, see #2524 + serverSocket.on('end', function() { + clientSocket.end(); + }); + }); + } + proxy.listen(proxyPort, setupClient); + } + + function setupClient() { + function doRequest(name, options, host) { + tunnel.debug('CLIENT: Making HTTPS request (%s)', name); + ++clientRequest; + var agent = tunnel.httpsOverHttps(options); + var req = https.get({ + host: 'localhost', + port: serverPort, + path: '/' + encodeURIComponent(name), + headers: { + host: host ? host : 'localhost', + }, + rejectUnauthorized: true, + agent: agent + }, function(res) { + tunnel.debug('CLIENT: got HTTPS response (%s)', name); + ++clientConnect; + res.on('data', function(data) { + }); + res.on('end', function() { + req.emit('finish'); + }); + res.resume(); + }); + req.on('error', function(err) { + tunnel.debug('CLIENT: failed HTTP response (%s)', name, err); + ++clientError; + req.emit('finish'); + }); + req.on('finish', function() { + if (clientConnect + clientError === clientRequest) { + proxy.close(); + server.close(); + } + }); + } + + doRequest('no cert origin nor proxy', { // invalid + maxSockets: 1, + ca: [serverCA], + rejectUnauthorized: true, + // no certificate for origin server + proxy: { + port: proxyPort, + ca: [proxyCA], + rejectUnauthorized: true, + headers: { + host: 'proxy2' + } + // no certificate for proxy + } + }, 'server2'); + + doRequest('no cert proxy', { // invalid + maxSockets: 1, + ca: [serverCA], + rejectUnauthorized: true, + // client certification for origin server + key: client1Key, + cert: client1Cert, + proxy: { + port: proxyPort, + ca: [proxyCA], + rejectUnauthorized: true, + headers: { + host: 'proxy2' + } + // no certificate for proxy + } + }, 'server2'); + + doRequest('no cert origin', { // invalid + maxSockets: 1, + ca: [serverCA], + rejectUnauthorized: true, + // no certificate for origin server + proxy: { + port: proxyPort, + servername: 'proxy2', + ca: [proxyCA], + rejectUnauthorized: true, + headers: { + host: 'proxy2' + }, + // client certification for proxy + key: client2Key, + cert: client2Cert + } + }, 'server2'); + + doRequest('invalid proxy server name', { // invalid + maxSockets: 1, + ca: [serverCA], + rejectUnauthorized: true, + // client certification for origin server + key: client1Key, + cert: client1Cert, + proxy: { + port: proxyPort, + ca: [proxyCA], + rejectUnauthorized: true, + // client certification for proxy + key: client2Key, + cert: client2Cert, + } + }, 'server2'); + + doRequest('invalid origin server name', { // invalid + maxSockets: 1, + ca: [serverCA], + rejectUnauthorized: true, + // client certification for origin server + key: client1Key, + cert: client1Cert, + proxy: { + port: proxyPort, + servername: 'proxy2', + ca: [proxyCA], + rejectUnauthorized: true, + headers: { + host: 'proxy2' + }, + // client certification for proxy + key: client2Key, + cert: client2Cert + } + }); + + doRequest('valid', { // valid + maxSockets: 1, + ca: [serverCA], + rejectUnauthorized: true, + // client certification for origin server + key: client1Key, + cert: client1Cert, + proxy: { + port: proxyPort, + servername: 'proxy2', + ca: [proxyCA], + rejectUnauthorized: true, + headers: { + host: 'proxy2' + }, + // client certification for proxy + key: client2Key, + cert: client2Cert + } + }, 'server2'); + } + + server.on('close', function() { + serverConnect.should.equal(1); + proxyConnect.should.equal(3); + clientConnect.should.equal(1); + clientError.should.equal(5); + + done(); + }); + }); +}); diff --git a/node_modules/tunnel/test/https-over-https.js b/node_modules/tunnel/test/https-over-https.js new file mode 100644 index 0000000..a9f81c8 --- /dev/null +++ b/node_modules/tunnel/test/https-over-https.js @@ -0,0 +1,146 @@ +var http = require('http'); +var https = require('https'); +var net = require('net'); +var fs = require('fs'); +var path = require('path'); +var should = require('should'); +var tunnel = require('../index.js'); + +function readPem(file) { + return fs.readFileSync(path.join('test/keys', file + '.pem')); +} + +var serverKey = readPem('server1-key'); +var serverCert = readPem('server1-cert'); +var serverCA = readPem('ca1-cert'); +var proxyKey = readPem('proxy1-key'); +var proxyCert = readPem('proxy1-cert'); +var proxyCA = readPem('ca2-cert'); +var client1Key = readPem('client1-key'); +var client1Cert = readPem('client1-cert'); +var client1CA = readPem('ca3-cert'); +var client2Key = readPem('client2-key'); +var client2Cert = readPem('client2-cert'); +var client2CA = readPem('ca4-cert'); + +describe('HTTPS over HTTPS', function() { + it('should finish without error', function(done) { + var serverPort = 3006; + var proxyPort = 3007; + var poolSize = 3; + var N = 5; + var serverConnect = 0; + var proxyConnect = 0; + var clientConnect = 0; + var server; + var proxy; + var agent; + + server = https.createServer({ + key: serverKey, + cert: serverCert, + ca: [client1CA], + requestCert: true, + rejectUnauthorized: true + }, function(req, res) { + tunnel.debug('SERVER: got request'); + ++serverConnect; + res.writeHead(200); + res.end('Hello' + req.url); + tunnel.debug('SERVER: sending response'); + }); + server.listen(serverPort, setupProxy); + + function setupProxy() { + proxy = https.createServer({ + key: proxyKey, + cert: proxyCert, + ca: [client2CA], + requestCert: true, + rejectUnauthorized: true + }, function(req, res) { + should.fail(); + }); + proxy.on('upgrade', onConnect); // for v0.6 + proxy.on('connect', onConnect); // for v0.7 or later + + function onConnect(req, clientSocket, head) { + tunnel.debug('PROXY: got CONNECT request'); + req.method.should.equal('CONNECT'); + req.url.should.equal('localhost:' + serverPort); + req.headers.should.not.have.property('transfer-encoding'); + ++proxyConnect; + + var serverSocket = net.connect(serverPort, function() { + tunnel.debug('PROXY: replying to client CONNECT request'); + clientSocket.write('HTTP/1.1 200 Connection established\r\n\r\n'); + clientSocket.pipe(serverSocket); + serverSocket.write(head); + serverSocket.pipe(clientSocket); + // workaround, see joyent/node#2524 + serverSocket.on('end', function() { + clientSocket.end(); + }); + }); + } + proxy.listen(proxyPort, setupClient); + } + + function setupClient() { + agent = tunnel.httpsOverHttps({ + maxSockets: poolSize, + // client certification for origin server + key: client1Key, + cert: client1Cert, + ca: [serverCA], + rejectUnauthroized: true, + proxy: { + port: proxyPort, + // client certification for proxy + key: client2Key, + cert: client2Cert, + ca: [proxyCA], + rejectUnauthroized: true + } + }); + + for (var i = 0; i < N; ++i) { + doClientRequest(i); + } + + function doClientRequest(i) { + tunnel.debug('CLIENT: Making HTTPS request (%d)', i); + var req = https.get({ + port: serverPort, + path: '/' + i, + agent: agent + }, function(res) { + tunnel.debug('CLIENT: got HTTPS response (%d)', i); + res.setEncoding('utf8'); + res.on('data', function(data) { + data.should.equal('Hello/' + i); + }); + res.on('end', function() { + ++clientConnect; + if (clientConnect === N) { + proxy.close(); + server.close(); + } + }); + }); + } + } + + server.on('close', function() { + serverConnect.should.equal(N); + proxyConnect.should.equal(poolSize); + clientConnect.should.equal(N); + + var name = 'localhost:' + serverPort; + agent.sockets.should.be.empty; + agent.requests.should.be.empty; + + done(); + }); + }); +}); diff --git a/node_modules/tunnel/test/keys/Makefile b/node_modules/tunnel/test/keys/Makefile new file mode 100644 index 0000000..6b4745b --- /dev/null +++ b/node_modules/tunnel/test/keys/Makefile @@ -0,0 +1,157 @@ +all: server1-cert.pem server2-cert.pem proxy1-cert.pem proxy2-cert.pem client1-cert.pem client2-cert.pem + + +# +# Create Certificate Authority: ca1 +# ('password' is used for the CA password.) +# +ca1-cert.pem: ca1.cnf + openssl req -new -x509 -days 9999 -config ca1.cnf -keyout ca1-key.pem -out ca1-cert.pem + +# +# Create Certificate Authority: ca2 +# ('password' is used for the CA password.) +# +ca2-cert.pem: ca2.cnf + openssl req -new -x509 -days 9999 -config ca2.cnf -keyout ca2-key.pem -out ca2-cert.pem + +# +# Create Certificate Authority: ca3 +# ('password' is used for the CA password.) +# +ca3-cert.pem: ca3.cnf + openssl req -new -x509 -days 9999 -config ca3.cnf -keyout ca3-key.pem -out ca3-cert.pem + +# +# Create Certificate Authority: ca4 +# ('password' is used for the CA password.) +# +ca4-cert.pem: ca4.cnf + openssl req -new -x509 -days 9999 -config ca4.cnf -keyout ca4-key.pem -out ca4-cert.pem + + +# +# server1 is signed by ca1. +# +server1-key.pem: + openssl genrsa -out server1-key.pem 1024 + +server1-csr.pem: server1.cnf server1-key.pem + openssl req -new -config server1.cnf -key server1-key.pem -out server1-csr.pem + +server1-cert.pem: server1-csr.pem ca1-cert.pem ca1-key.pem + openssl x509 -req \ + -days 9999 \ + -passin "pass:password" \ + -in server1-csr.pem \ + -CA ca1-cert.pem \ + -CAkey ca1-key.pem \ + -CAcreateserial \ + -out server1-cert.pem + +# +# server2 is signed by ca1. +# +server2-key.pem: + openssl genrsa -out server2-key.pem 1024 + +server2-csr.pem: server2.cnf server2-key.pem + openssl req -new -config server2.cnf -key server2-key.pem -out server2-csr.pem + +server2-cert.pem: server2-csr.pem ca1-cert.pem ca1-key.pem + openssl x509 -req \ + -days 9999 \ + -passin "pass:password" \ + -in server2-csr.pem \ + -CA ca1-cert.pem \ + -CAkey ca1-key.pem \ + -CAcreateserial \ + -out server2-cert.pem + +server2-verify: server2-cert.pem ca1-cert.pem + openssl verify -CAfile ca1-cert.pem server2-cert.pem + +# +# proxy1 is signed by ca2. +# +proxy1-key.pem: + openssl genrsa -out proxy1-key.pem 1024 + +proxy1-csr.pem: proxy1.cnf proxy1-key.pem + openssl req -new -config proxy1.cnf -key proxy1-key.pem -out proxy1-csr.pem + +proxy1-cert.pem: proxy1-csr.pem ca2-cert.pem ca2-key.pem + openssl x509 -req \ + -days 9999 \ + -passin "pass:password" \ + -in proxy1-csr.pem \ + -CA ca2-cert.pem \ + -CAkey ca2-key.pem \ + -CAcreateserial \ + -out proxy1-cert.pem + +# +# proxy2 is signed by ca2. +# +proxy2-key.pem: + openssl genrsa -out proxy2-key.pem 1024 + +proxy2-csr.pem: proxy2.cnf proxy2-key.pem + openssl req -new -config proxy2.cnf -key proxy2-key.pem -out proxy2-csr.pem + +proxy2-cert.pem: proxy2-csr.pem ca2-cert.pem ca2-key.pem + openssl x509 -req \ + -days 9999 \ + -passin "pass:password" \ + -in proxy2-csr.pem \ + -CA ca2-cert.pem \ + -CAkey ca2-key.pem \ + -CAcreateserial \ + -out proxy2-cert.pem + +proxy2-verify: proxy2-cert.pem ca2-cert.pem + openssl verify -CAfile ca2-cert.pem proxy2-cert.pem + +# +# client1 is signed by ca3. +# +client1-key.pem: + openssl genrsa -out client1-key.pem 1024 + +client1-csr.pem: client1.cnf client1-key.pem + openssl req -new -config client1.cnf -key client1-key.pem -out client1-csr.pem + +client1-cert.pem: client1-csr.pem ca3-cert.pem ca3-key.pem + openssl x509 -req \ + -days 9999 \ + -passin "pass:password" \ + -in client1-csr.pem \ + -CA ca3-cert.pem \ + -CAkey ca3-key.pem \ + -CAcreateserial \ + -out client1-cert.pem + +# +# client2 is signed by ca4. +# +client2-key.pem: + openssl genrsa -out client2-key.pem 1024 + +client2-csr.pem: client2.cnf client2-key.pem + openssl req -new -config client2.cnf -key client2-key.pem -out client2-csr.pem + +client2-cert.pem: client2-csr.pem ca4-cert.pem ca4-key.pem + openssl x509 -req \ + -days 9999 \ + -passin "pass:password" \ + -in client2-csr.pem \ + -CA ca4-cert.pem \ + -CAkey ca4-key.pem \ + -CAcreateserial \ + -out client2-cert.pem + + +clean: + rm -f *.pem *.srl + +test: client-verify server2-verify proxy1-verify proxy2-verify client-verify diff --git a/node_modules/tunnel/test/keys/agent1-cert.pem b/node_modules/tunnel/test/keys/agent1-cert.pem new file mode 100644 index 0000000..816f6fb --- /dev/null +++ b/node_modules/tunnel/test/keys/agent1-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICKjCCAZMCCQDQ8o4kHKdCPDANBgkqhkiG9w0BAQUFADB6MQswCQYDVQQGEwJV +UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO +BgNVBAsTB05vZGUuanMxDDAKBgNVBAMTA2NhMTEgMB4GCSqGSIb3DQEJARYRcnlA +dGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEyWjB9 +MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQK +EwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MTEgMB4G +CSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEFAANL +ADBIAkEAnzpAqcoXZxWJz/WFK7BXwD23jlREyG11x7gkydteHvn6PrVBbB5yfu6c +bk8w3/Ar608AcyMQ9vHjkLQKH7cjEQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAKha +HqjCfTIut+m/idKy3AoFh48tBHo3p9Nl5uBjQJmahKdZAaiksL24Pl+NzPQ8LIU+ +FyDHFp6OeJKN6HzZ72Bh9wpBVu6Uj1hwhZhincyTXT80wtSI/BoUAW8Ls2kwPdus +64LsJhhxqj2m4vPKNRbHB2QxnNrGi30CUf3kt3Ia +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/agent1-csr.pem b/node_modules/tunnel/test/keys/agent1-csr.pem new file mode 100644 index 0000000..748fd00 --- /dev/null +++ b/node_modules/tunnel/test/keys/agent1-csr.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH +EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD +EwZhZ2VudDExIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ +KoZIhvcNAQEBBQADSwAwSAJBAJ86QKnKF2cVic/1hSuwV8A9t45URMhtdce4JMnb +Xh75+j61QWwecn7unG5PMN/wK+tPAHMjEPbx45C0Ch+3IxECAwEAAaAlMCMGCSqG +SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB +AF+AfG64hNyYHum46m6i7RgnUBrJSOynGjs23TekV4he3QdMSAAPPqbll8W14+y3 +vOo7/yQ2v2uTqxCjakUNPPs= +-----END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/agent1-key.pem b/node_modules/tunnel/test/keys/agent1-key.pem new file mode 100644 index 0000000..5dae7eb --- /dev/null +++ b/node_modules/tunnel/test/keys/agent1-key.pem @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBOwIBAAJBAJ86QKnKF2cVic/1hSuwV8A9t45URMhtdce4JMnbXh75+j61QWwe +cn7unG5PMN/wK+tPAHMjEPbx45C0Ch+3IxECAwEAAQJBAI2cU1IuR+4IO87WPyAB +76kruoo87AeNQkjjvuQ/00+b/6IS45mcEP5Kw0NukbqBhIw2di9uQ9J51DJ/ZfQr ++YECIQDUHaN3ZjIdJ7/w8Yq9Zzz+3kY2F/xEz6e4ftOFW8bY2QIhAMAref+WYckC +oECgOLAvAxB1lI4j7oCbAaawfxKdnPj5AiEAi95rXx09aGpAsBGmSdScrPdG1v6j +83/2ebrvoZ1uFqkCIB0AssnrRVjUB6GZTNTyU3ERfdkx/RX1zvr8WkFR/lXpAiB7 +cUZ1i8ZkZrPrdVgw2cb28UJM7qZHQnXcMHTXFFvxeQ== +-----END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/agent1.cnf b/node_modules/tunnel/test/keys/agent1.cnf new file mode 100644 index 0000000..81d2f09 --- /dev/null +++ b/node_modules/tunnel/test/keys/agent1.cnf @@ -0,0 +1,19 @@ +[ req ] +default_bits = 1024 +days = 999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = US +ST = CA +L = SF +O = Joyent +OU = Node.js +CN = agent1 +emailAddress = ry@tinyclouds.org + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/agent2-cert.pem b/node_modules/tunnel/test/keys/agent2-cert.pem new file mode 100644 index 0000000..8e4354d --- /dev/null +++ b/node_modules/tunnel/test/keys/agent2-cert.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB7DCCAZYCCQC7gs0MDNn6MTANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJV +UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO +BgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MjEgMB4GCSqGSIb3DQEJARYR +cnlAdGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEy +WjB9MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYD +VQQKEwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MjEg +MB4GCSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEF +AANLADBIAkEAyXb8FrRdKbhrKLgLSsn61i1C7w7fVVVd7OQsmV/7p9WB2lWFiDlC +WKGU9SiIz/A6wNZDUAuc2E+VwtpCT561AQIDAQABMA0GCSqGSIb3DQEBBQUAA0EA +C8HzpuNhFLCI3A5KkBS5zHAQax6TFUOhbpBCR0aTDbJ6F1liDTK1lmU/BjvPoj+9 +1LHwrmh29rK8kBPEjmymCQ== +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/agent2-csr.pem b/node_modules/tunnel/test/keys/agent2-csr.pem new file mode 100644 index 0000000..a670c4c --- /dev/null +++ b/node_modules/tunnel/test/keys/agent2-csr.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH +EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD +EwZhZ2VudDIxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ +KoZIhvcNAQEBBQADSwAwSAJBAMl2/Ba0XSm4ayi4C0rJ+tYtQu8O31VVXezkLJlf ++6fVgdpVhYg5QlihlPUoiM/wOsDWQ1ALnNhPlcLaQk+etQECAwEAAaAlMCMGCSqG +SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB +AJnll2pt5l0pzskQSpjjLVTlFDFmJr/AZ3UK8v0WxBjYjCe5Jx4YehkChpxIyDUm +U3J9q9MDUf0+Y2+EGkssFfk= +-----END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/agent2-key.pem b/node_modules/tunnel/test/keys/agent2-key.pem new file mode 100644 index 0000000..522903c --- /dev/null +++ b/node_modules/tunnel/test/keys/agent2-key.pem @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBOgIBAAJBAMl2/Ba0XSm4ayi4C0rJ+tYtQu8O31VVXezkLJlf+6fVgdpVhYg5 +QlihlPUoiM/wOsDWQ1ALnNhPlcLaQk+etQECAwEAAQJBAMT6Bf34+UHKY1ObpsbH +9u2jsVblFq1rWvs8GPMY6oertzvwm3DpuSUp7PTgOB1nLTLYtCERbQ4ovtN8tn3p +OHUCIQDzIEGsoCr5vlxXvy2zJwu+fxYuhTZWMVuo1397L0VyhwIhANQh+yzqUgaf +WRtSB4T2W7ADtJI35ET61jKBty3CqJY3AiAIwju7dVW3A5WeD6Qc1SZGKZvp9yCb +AFI2BfVwwaY11wIgXF3PeGcvACMyMWsuSv7aPXHfliswAbkWuzcwA4TW01ECIGWa +cgsDvVFxmfM5NPSuT/UDTa6R5BFISB5ea0N0AR3I +-----END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/agent2.cnf b/node_modules/tunnel/test/keys/agent2.cnf new file mode 100644 index 0000000..0a9f2c7 --- /dev/null +++ b/node_modules/tunnel/test/keys/agent2.cnf @@ -0,0 +1,19 @@ +[ req ] +default_bits = 1024 +days = 999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = US +ST = CA +L = SF +O = Joyent +OU = Node.js +CN = agent2 +emailAddress = ry@tinyclouds.org + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/agent3-cert.pem b/node_modules/tunnel/test/keys/agent3-cert.pem new file mode 100644 index 0000000..e4a2350 --- /dev/null +++ b/node_modules/tunnel/test/keys/agent3-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICKjCCAZMCCQCDBr594bsJmTANBgkqhkiG9w0BAQUFADB6MQswCQYDVQQGEwJV +UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAO +BgNVBAsTB05vZGUuanMxDDAKBgNVBAMTA2NhMjEgMB4GCSqGSIb3DQEJARYRcnlA +dGlueWNsb3Vkcy5vcmcwHhcNMTEwMzE0MTgyOTEyWhcNMzgwNzI5MTgyOTEyWjB9 +MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQK +EwZKb3llbnQxEDAOBgNVBAsTB05vZGUuanMxDzANBgNVBAMTBmFnZW50MzEgMB4G +CSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5vcmcwXDANBgkqhkiG9w0BAQEFAANL +ADBIAkEAtlNDZ+bHeBI0B2gD/IWqA7Aq1hwsnS4+XpnLesjTQcL2JwFFpkR0oWrw +yjrYhCogi7c5gjKrLZF1d2JD5JgHgQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAJoK +bXwsImk7vJz9649yrmsXwnuGbEKVYMvqcGyjaZNP9lYEG41y5CeRzxhWy2rlYdhE +f2nqE2lg75oJP7LQqfQY7aCqwahM3q/GQbsfKVCGjF7TVyq9TQzd8iW+FEJIQzSE +3aN85hR67+3VAXeSzmkGSVBO2m1SJIug4qftIkc2 +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/agent3-csr.pem b/node_modules/tunnel/test/keys/agent3-csr.pem new file mode 100644 index 0000000..e6c0c74 --- /dev/null +++ b/node_modules/tunnel/test/keys/agent3-csr.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH +EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD +EwZhZ2VudDMxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ +KoZIhvcNAQEBBQADSwAwSAJBALZTQ2fmx3gSNAdoA/yFqgOwKtYcLJ0uPl6Zy3rI +00HC9icBRaZEdKFq8Mo62IQqIIu3OYIyqy2RdXdiQ+SYB4ECAwEAAaAlMCMGCSqG +SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB +AEGo76iH+a8pnE+RWQT+wg9/BL+iIuqrcFXLs0rbGonqderrwXAe15ODwql/Bfu3 +zgMt8ooTsgMPcMX9EgmubEM= +-----END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/agent3-key.pem b/node_modules/tunnel/test/keys/agent3-key.pem new file mode 100644 index 0000000..d72f071 --- /dev/null +++ b/node_modules/tunnel/test/keys/agent3-key.pem @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBOwIBAAJBALZTQ2fmx3gSNAdoA/yFqgOwKtYcLJ0uPl6Zy3rI00HC9icBRaZE +dKFq8Mo62IQqIIu3OYIyqy2RdXdiQ+SYB4ECAwEAAQJAIk+G9s2SKgFa8y3a2jGZ +LfqABSzmJGooaIsOpLuYLd6eCC31XUDlT4rPVGRhysKQCQ4+NMjgdnj9ZqNnvXY/ +RQIhAOgbdltr3Ey2hy7RuDW5rmOeJTuVqCrZ7QI8ifyCEbYTAiEAyRfvWSvvASeP +kZTMUhATRUpuyDQW+058NE0oJSinTpsCIQCR/FPhBGI3TcaQyA9Ym0T4GwvIAkUX +TqInefRAAX8qSQIgZVJPAdIWGbHSL9sWW97HpukLCorcbYEtKbkamiZyrjMCIQCX +lX76ttkeId5OsJGQcF67eFMMr2UGZ1WMf6M39lCYHQ== +-----END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/agent3.cnf b/node_modules/tunnel/test/keys/agent3.cnf new file mode 100644 index 0000000..26db5ba --- /dev/null +++ b/node_modules/tunnel/test/keys/agent3.cnf @@ -0,0 +1,19 @@ +[ req ] +default_bits = 1024 +days = 999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = US +ST = CA +L = SF +O = Joyent +OU = Node.js +CN = agent3 +emailAddress = ry@tinyclouds.org + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/agent4-cert.pem b/node_modules/tunnel/test/keys/agent4-cert.pem new file mode 100644 index 0000000..07157b9 --- /dev/null +++ b/node_modules/tunnel/test/keys/agent4-cert.pem @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICSDCCAbGgAwIBAgIJAIMGvn3huwmaMA0GCSqGSIb3DQEBBQUAMHoxCzAJBgNV +BAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UEBxMCU0YxDzANBgNVBAoTBkpveWVu +dDEQMA4GA1UECxMHTm9kZS5qczEMMAoGA1UEAxMDY2EyMSAwHgYJKoZIhvcNAQkB +FhFyeUB0aW55Y2xvdWRzLm9yZzAeFw0xMTAzMTQxODI5MTJaFw0zODA3MjkxODI5 +MTJaMH0xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTELMAkGA1UEBxMCU0YxDzAN +BgNVBAoTBkpveWVudDEQMA4GA1UECxMHTm9kZS5qczEPMA0GA1UEAxMGYWdlbnQ0 +MSAwHgYJKoZIhvcNAQkBFhFyeUB0aW55Y2xvdWRzLm9yZzBcMA0GCSqGSIb3DQEB +AQUAA0sAMEgCQQDN/yMfmQ8zdvmjlGk7b3Mn6wY2FjaMb4c5ENJX15vyYhKS1zhx +6n0kQIn2vf6yqG7tO5Okz2IJiD9Sa06mK6GrAgMBAAGjFzAVMBMGA1UdJQQMMAoG +CCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4GBAA8FXpRmdrHBdlofNvxa14zLvv0N +WnUGUmxVklFLKXvpVWTanOhVgI2TDCMrT5WvCRTD25iT1EUKWxjDhFJrklQJ+IfC +KC6fsgO7AynuxWSfSkc8/acGiAH+20vW9QxR53HYiIDMXEV/wnE0KVcr3t/d70lr +ImanTrunagV+3O4O +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/agent4-csr.pem b/node_modules/tunnel/test/keys/agent4-csr.pem new file mode 100644 index 0000000..97e115d --- /dev/null +++ b/node_modules/tunnel/test/keys/agent4-csr.pem @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBXTCCAQcCAQAwfTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMQswCQYDVQQH +EwJTRjEPMA0GA1UEChMGSm95ZW50MRAwDgYDVQQLEwdOb2RlLmpzMQ8wDQYDVQQD +EwZhZ2VudDQxIDAeBgkqhkiG9w0BCQEWEXJ5QHRpbnljbG91ZHMub3JnMFwwDQYJ +KoZIhvcNAQEBBQADSwAwSAJBAM3/Ix+ZDzN2+aOUaTtvcyfrBjYWNoxvhzkQ0lfX +m/JiEpLXOHHqfSRAifa9/rKobu07k6TPYgmIP1JrTqYroasCAwEAAaAlMCMGCSqG +SIb3DQEJBzEWExRBIGNoYWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAANB +AMzo7GUOBtGm5MSck1rrEE2C1bU3qoVvXVuiN3A/57zXeNeq24FZMLnkDeL9U+/b +Kj646XFou04gla982Xp74p0= +-----END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/agent4-key.pem b/node_modules/tunnel/test/keys/agent4-key.pem new file mode 100644 index 0000000..b770b01 --- /dev/null +++ b/node_modules/tunnel/test/keys/agent4-key.pem @@ -0,0 +1,9 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIBOQIBAAJBAM3/Ix+ZDzN2+aOUaTtvcyfrBjYWNoxvhzkQ0lfXm/JiEpLXOHHq +fSRAifa9/rKobu07k6TPYgmIP1JrTqYroasCAwEAAQJAN8RQb+dx1A7rejtdWbfM +Rww7PD07Oz2eL/a72wgFsdIabRuVypIoHunqV0sAegYtNJt9yu+VhREw0R5tx/qz +EQIhAPY+nmzp0b4iFRk7mtGUmCTr9iwwzoqzITwphE7FpQnFAiEA1ihUHFT9YPHO +f85skM6qZv77NEgXHO8NJmQZ5GX1ZK8CICzle+Mluo0tD6W7HV4q9pZ8wzSJbY8S +W/PpKetm09F1AiAWTw8sAGKAtc/IGo3Oq+iuYAN1F8lolzJsfGMCGujsOwIgAJKP +t3eXilwX3ZlsDWSklWNZ7iYcfYrvAc3JqU6gFCE= +-----END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/agent4.cnf b/node_modules/tunnel/test/keys/agent4.cnf new file mode 100644 index 0000000..5e583eb --- /dev/null +++ b/node_modules/tunnel/test/keys/agent4.cnf @@ -0,0 +1,21 @@ +[ req ] +default_bits = 1024 +days = 999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = US +ST = CA +L = SF +O = Joyent +OU = Node.js +CN = agent4 +emailAddress = ry@tinyclouds.org + +[ req_attributes ] +challengePassword = A challenge password + +[ ext_key_usage ] +extendedKeyUsage = clientAuth diff --git a/node_modules/tunnel/test/keys/ca1-cert.pem b/node_modules/tunnel/test/keys/ca1-cert.pem new file mode 100644 index 0000000..640c084 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca1-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICIzCCAYwCCQC4ONZJx5BOwjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK +UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTExJTAjBgkqhkiG9w0B +CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw +NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww +CgYDVQQDEwNjYTExJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu +anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJMS1ug8jUu0wwEfD4h9/Mg +w0fvs7JbpMxtwpdcFpg/6ECd8YzGUvljLzeHPe2AhF26MiWIUN3YTxZRiQQ2tv93 +afRVWchdPypytmuxv2aYGjhZ66Tv4vNRizM71OE+66+KS30gEQW2k4MTr0ZVlRPR +OVey+zRSLdVaKciB/XaBAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEApfbly4b+Ry1q +bGIgGrlTvNFvF+j2RuHqSpuTB4nKyw1tbNreKmEEb6SBEfkjcTONx5rKECZ5RRPX +z4R/o1G6Dn21ouf1pWQO0BC/HnLN30KvvsoZRoxBn/fqBlJA+j/Kpj3RQgFj6l2I +AKI5fD+ucPqRGhjmmTsNyc+Ln4UfAq8= +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/ca1-cert.srl b/node_modules/tunnel/test/keys/ca1-cert.srl new file mode 100644 index 0000000..d7f4b79 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca1-cert.srl @@ -0,0 +1 @@ +B111C9CEF0257692 diff --git a/node_modules/tunnel/test/keys/ca1-key.pem b/node_modules/tunnel/test/keys/ca1-key.pem new file mode 100644 index 0000000..aaa58ae --- /dev/null +++ b/node_modules/tunnel/test/keys/ca1-key.pem @@ -0,0 +1,17 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIbo5wvG42IY0CAggA +MBQGCCqGSIb3DQMHBAgf8SPuz4biYASCAoAR4r8MVikusOAEt4Xp6nB7whrMX4iG +G792Qpf21nHZPMV73w3cdkfimbAfUn8F50tSJwdrAa8U9BjjpL9Kt0loIyXt/r8c +6PWAQ4WZuLPgTFUTJUNAXrunBHI0iFWYEN4YzJYmT1qN3J4u0diy0MkKz6eJPfZ3 +3v97+nF7dR2H86ZgLKsuE4pO5IRb60XW85d7CYaY6rU6l6mXMF0g9sIccHTlFoet +Xm6cA7NAm1XSI1ciYcoc8oaVE9dXoOALaTnBEZ2MJGpsYQ0Hr7kB4VKAO9wsOta5 +L9nXPv79Nzo1MZMChkrORFnwOzH4ffsUwVQ70jUzkt5DEyzCM1oSxFNRQESxnFrr +7c1jLg2gxAVwnqYo8njsKJ23BZqZUxHsBgB2Mg1L/iPT6zhclD0u3RZx9MR4ezB2 +IqoCF19Z5bblkReAeVRAE9Ol4hKVaCEIIPUspcw7eGVGONalHDCSXpIFnJoZLeXJ +OZjLmYlA6KkJw52eNE5IwIb8l/tha2fwNpRvlMoXp65yH9wKyJk8zPSM6WAk4dKD +nLrTCK4KtM6aIbG14Mff6WEf3uaLPM0cLwxmuypfieCZfkIzgytNdFZoBgaYUpon +zazvUMoy3gqDBorcU08SaosdRoL+s+QVkRhA29shf42lqOM4zbh0dTul4QDlLG0U +VBNeMJ3HnrqATfBU28j3bUqtuF2RffgcN/3ivlBjcyzF/iPt0TWmm6Zz5v4K8+b6 +lOm6gofIz+ffg2cXfPzrqZ2/xhFkcerRuN0Xp5eAhlI2vGJVGuEc4X+tT7VtQgLV +iovqzlLhp+ph/gsfCcsYZ9iso3ozw+Cx1HfJ8XT7yWUgXxblkt4uszEo +-----END ENCRYPTED PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/ca1.cnf b/node_modules/tunnel/test/keys/ca1.cnf new file mode 100644 index 0000000..dcb0637 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca1.cnf @@ -0,0 +1,17 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no +output_password = password + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = ca1 +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/ca2-cert.pem b/node_modules/tunnel/test/keys/ca2-cert.pem new file mode 100644 index 0000000..4c29c87 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca2-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICIzCCAYwCCQCxIhZSDET+8DANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK +UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0B +CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw +NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww +CgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu +anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaaLMMe7K5eYABH3NnJoimG +LvY4S5tdGF6YRwfkn1bgGa+kEw1zNqa/Y0jSzs4h7bApt3+bKTalR4+Zk+0UmWgZ +Gvlq8+mdqDXtBKoWE3vYDPBmeNyKsgxf9UIhFOpsxVUeYP8t66qJyUk/FlFJcDqc +WPawikl1bUFSZXBKu4PxAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAwh3sXPIkA5kn +fpg7fV5haS4EpFr9ia61dzWbhXDZtasAx+nWdWqgG4T+HIYSLlMNZbGJ998uhFZf +DEHlbY/WuSBukZ0w+xqKBtPyjLIQKVvNiaTx5YMzQes62R1iklOXzBzyHbYIxFOG +dqLfIjEe/mVVoR23LN2tr8Wa6+rmd+w= +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/ca2-cert.srl b/node_modules/tunnel/test/keys/ca2-cert.srl new file mode 100644 index 0000000..2749952 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca2-cert.srl @@ -0,0 +1 @@ +9BF2D4B2E00EDF16 diff --git a/node_modules/tunnel/test/keys/ca2-crl.pem b/node_modules/tunnel/test/keys/ca2-crl.pem new file mode 100644 index 0000000..166df74 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca2-crl.pem @@ -0,0 +1,10 @@ +-----BEGIN X509 CRL----- +MIIBXTCBxzANBgkqhkiG9w0BAQQFADB6MQswCQYDVQQGEwJVUzELMAkGA1UECBMC +Q0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZKb3llbnQxEDAOBgNVBAsTB05vZGUu +anMxDDAKBgNVBAMTA2NhMjEgMB4GCSqGSIb3DQEJARYRcnlAdGlueWNsb3Vkcy5v +cmcXDTExMDMxNDE4MjkxNloXDTEzMTIwNzE4MjkxNlowHDAaAgkAgwa+feG7CZoX +DTExMDMxNDE4MjkxNFowDQYJKoZIhvcNAQEEBQADgYEArRKuEkOla61fm4zlZtHe +LTXFV0Hgo21PScHAp6JqPol4rN5R9+EmUkv7gPCVVBJ9VjIgxSosHiLsDiz3zR+u +txHemhzbdIVANAIiChnFct8sEqH2eL4N6XNUIlMIR06NjNl7NbN8w8haqiearnuT +wmnaL4TThPmpbpKAF7N7JqQ= +-----END X509 CRL----- diff --git a/node_modules/tunnel/test/keys/ca2-database.txt b/node_modules/tunnel/test/keys/ca2-database.txt new file mode 100644 index 0000000..a0966d2 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca2-database.txt @@ -0,0 +1 @@ +R 380729182912Z 110314182914Z 8306BE7DE1BB099A unknown /C=US/ST=CA/L=SF/O=Joyent/OU=Node.js/CN=agent4/emailAddress=ry@tinyclouds.org diff --git a/node_modules/tunnel/test/keys/ca2-key.pem b/node_modules/tunnel/test/keys/ca2-key.pem new file mode 100644 index 0000000..9cea659 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca2-key.pem @@ -0,0 +1,17 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQI3aq9fKZIOF0CAggA +MBQGCCqGSIb3DQMHBAjyunMfVve0OwSCAoAdMsrRFlQUSILw+bq3cSVIIbFjwcs0 +B1Uz2rc9SB+1qjsazjv4zvPQSXTrsx2EOSJf9PSPz7r+c0NzO9vfWLorpXof/lwL +C1tRN7/1OqEW/mTK+1wlv0M5C4cmf44BBXmI+y+RWrQ/qc+CWEMvfHwv9zWr2K+i +cLlZv55727GvZYCMMVLiqYd/Ejj98loBsE5dhN4JJ5MPaN3UHhFTCpD453GIIzCi +FRuYhOOtX4qYoEuP2db4S2qu26723ZJnYBEHkK2YZiRrgvoZHugyGIr4f/RRoSUI +fPgycgQfL3Ow+Y1G533PiZ+CYgh9cViUzhZImEPiZpSuUntAD1loOYkJuV9Ai9XZ ++t6+7tfkM3aAo1bkaU8KcfINxxNWfAhCbUQw+tGJl2A+73OM5AGjGSfzjQQL/FOa +5omfEvdfEX2XyRRlqnQ2VucvSTL9ZdzbIJGg/euJTpM44Fwc7yAZv2aprbPoPixu +yyf0LoTjlGGSBZvHkunpWx82lYEXvHhcnCxV5MDFw8wehvDrvcSuzb8//HzLOiOB +gzUr3DOQk4U1UD6xixZjAKC+NUwTVZoHg68KtmQfkq+eGUWf5oJP4xUigi3ui/Wy +OCBDdlRBkFtgLGL51KJqtq1ixx3Q9HMl0y6edr5Ls0unDIo0LtUWUUcAtr6wl+kK +zSztxFMi2zTtbhbkwoVpucNstFQNfV1k22vtnlcux2FV2DdZiJQwYpIbr8Gj6gpK +gtV5l9RFe21oZBcKPt/chrF8ayiClfGMpF3D2p2GqGCe0HuH5uM/JAFf60rbnriA +Nu1bWiXsXLRUXcLIQ/uEPR3Mvvo9k1h4Q6it1Rp67eQiXCX6h2uFq+sB +-----END ENCRYPTED PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/ca2-serial b/node_modules/tunnel/test/keys/ca2-serial new file mode 100644 index 0000000..8a0f05e --- /dev/null +++ b/node_modules/tunnel/test/keys/ca2-serial @@ -0,0 +1 @@ +01 diff --git a/node_modules/tunnel/test/keys/ca2.cnf b/node_modules/tunnel/test/keys/ca2.cnf new file mode 100644 index 0000000..46e8274 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca2.cnf @@ -0,0 +1,17 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no +output_password = password + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = ca2 +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/ca3-cert.pem b/node_modules/tunnel/test/keys/ca3-cert.pem new file mode 100644 index 0000000..02b3f7a --- /dev/null +++ b/node_modules/tunnel/test/keys/ca3-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICIzCCAYwCCQCudHFhEWiUHDANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK +UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0B +CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw +NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww +CgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu +anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJPRJMhCNtxX6dQ3rLdrzVCl +XJMSRIICpbsc7arOzSJcrsIYeYC4d29dGwxYNLnAkKSmHujFT9SmFgh88CoYETLp +gE9zCk9hVCwUlWelM/UaIrzeLT4SC3VBptnLmMtk2mqFniLcaFdMycAcX8OIhAgG +fbqyT5Wxwz7UMegip2ZjAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEADpu8a/W+NPnS +mhyIOxXn8O//2oH9ELlBYFLIgTid0xmS05x/MgkXtWqiBEEZFoOfoJBJxM3vTFs0 +PiZvcVjv0IIjDF4s54yRVH+4WI2p7cil1fgzAVRTuOIuR+VyN7ct8s26a/7GFDq6 +NJMByyjsJHyxwwri5hVv+jbLCxmnDjI= +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/ca3-cert.srl b/node_modules/tunnel/test/keys/ca3-cert.srl new file mode 100644 index 0000000..cfd39e1 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca3-cert.srl @@ -0,0 +1 @@ +EF7B2CF0FA61DF41 diff --git a/node_modules/tunnel/test/keys/ca3-key.pem b/node_modules/tunnel/test/keys/ca3-key.pem new file mode 100644 index 0000000..8931132 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca3-key.pem @@ -0,0 +1,17 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIwAta+L4c9soCAggA +MBQGCCqGSIb3DQMHBAgqRud2p3SvogSCAoDXoDJOJDkvgFpQ6rxeV5r0fLX4SrGJ +quv4yt02QxSDUPN2ZLtBt6bLzg4Zv2pIggufYJcZ2IOUnX82T7FlvBP8hbW1q3Bs +jAso7z8kJlFrZjNudjuP2l/X8tjrVyr3I0PoRoomtcHnCcSDdyne8Dqqj1enuikF +8b7FZUqocNLfu8LmNGxMmMwjw3UqhtpP5DjqV60B8ytQFPoz/gFh6aNGvsrD/avU +Dj8EJkQZP6Q32vmCzAvSiLjk7FA7RFmBtaurE9hJYNlc5v1eo69EUwPkeVlTpglJ +5sZAHxlhQCgc72ST6uFQKiMO3ng/JJA5N9EvacYSHQvI1TQIo43V2A//zUh/5hGL +sDv4pRuFq9miX8iiQpwo1LDfRzdwg7+tiLm8/mDyeLUSzDNc6GIX/tC9R4Ukq4ge +1Cfq0gtKSRxZhM8HqpGBC9rDs5mpdUqTRsoHLFn5T6/gMiAtrLCJxgD8JsZBa8rM +KZ09QEdZXTvpyvZ8bSakP5PF6Yz3QYO32CakL7LDPpCng0QDNHG10YaZbTOgJIzQ +NJ5o87DkgDx0Bb3L8FoREIBkjpYFbQi2fvPthoepZ3D5VamVsOwOiZ2sR1WF2J8l +X9c8GdG38byO+SQIPNZ8eT5JvUcNeSlIZiVSwvaEk496d2KzhmMMfoBLFVeHXG90 +CIZPleVfkTmgNQgXPWcFngqTZdDEGsHjEDDhbEAijB3EeOxyiiEDJPMy5zqkdy5D +cZ/Y77EDbln7omcyL+cGvCgBhhYpTbtbuBtzW4CiCvcfEB5N4EtJKOTRJXIpL/d3 +oVnZruqRRKidKwFMEZU2NZJX5FneAWFSeCv0IrY2vAUIc3El+n84CFFK +-----END ENCRYPTED PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/ca3.cnf b/node_modules/tunnel/test/keys/ca3.cnf new file mode 100644 index 0000000..7b2378a --- /dev/null +++ b/node_modules/tunnel/test/keys/ca3.cnf @@ -0,0 +1,17 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no +output_password = password + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = ca3 +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/ca4-cert.pem b/node_modules/tunnel/test/keys/ca4-cert.pem new file mode 100644 index 0000000..ed0686a --- /dev/null +++ b/node_modules/tunnel/test/keys/ca4-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICIzCCAYwCCQDUGh2r7lOpITANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK +UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0B +CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw +NTEwMTEyMzIxWjBWMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQww +CgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQu +anAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOOC+SPC8XzkjIHfKPMzzNV6 +O/LpqQWdzJtEvFNW0oQ9g8gSV4iKqwUFrLNnSlwSGigvqKqGmYtG8S17ANWInoxI +c3sQlrS2cGbgLUBNKu4hZ7s+11EPOjbnn0QUE5w9GN8fy8CDx7ID/8URYKoxcoRv +0w7EJ2agfd68KS1ayxUXAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAumPFeR63Dyki +SWQtRAe2QWkIFlSRAR2PvSDdsDMLwMeXF5wD3Hv51yfTu9Gkg0QJB86deYfQ5vfV +4QsOQ35icesa12boyYpTE0/OoEX1f/s1sLlszpRvtAki3J4bkcGWAzM5yO1fKqpQ +MbtPzLn+DA7ymxuJa6EQAEb+kaJEBuU= +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/ca4-cert.srl b/node_modules/tunnel/test/keys/ca4-cert.srl new file mode 100644 index 0000000..5c11314 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca4-cert.srl @@ -0,0 +1 @@ +B01FE0416A2EDCF5 diff --git a/node_modules/tunnel/test/keys/ca4-key.pem b/node_modules/tunnel/test/keys/ca4-key.pem new file mode 100644 index 0000000..fa7aca1 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca4-key.pem @@ -0,0 +1,17 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIWE/ri/feeikCAggA +MBQGCCqGSIb3DQMHBAiu6hUzoFnsVASCAoC53ZQ4gxLcFnb5yAcdCl4DdKOJ5m4G +CHosR87pJpZlO68DsCKwORUp9tTmb1/Q4Wm9n2kRf6VQNyVVm6REwzEPAgIJEgy2 +FqLmfqpTElbRsQako8UDXjDjaMO30e+Qhy8HOTrHMJZ6LgrU90xnOCPPeN9fYmIu +YBkX4qewUfu+wFzk/unUbFLChvJsEN4fdrlDwTJMHRzKwbdvg3mHlCnspWwjA2Mc +q27QPeb3mwRUajmqL0dT9y7wVYeAN2zV59VoWm6zV+dWFgyMlVrVCRYkqQC3xOsy +ZlKrGldrY8nNdv5s6+Sc7YavTJiJxHgIB7sm6QFIsdqjxTBEGD4/YhEI52SUw/xO +VJmOTWdWUz4FdWNi7286nfhZ0+mdv6fUoG54Qv6ahnUMJvEsp60LkR1gHXLzQu/m ++yDZFqY/IIg2QA7M3gL0Md5GrWydDlD2uBPoXcC4A5gfOHswzHWDKurDCpoMqdpn +CUQ/ZVl2rwF8Pnty61MjY1xCN1r8xQjFBCgcfBWw5v6sNRbr/vef3TfQIBzVm+hx +akDb1nckBsIjMT9EfeT6hXub2n0oehEHewF1COifbcOjnxToLSswPLrtb0behB+o +zTgftn+4XrkY0sFY69TzYtQVMLAsiWTpZFvAi+D++2pXlQ/bnxKJiBBc6kZuAGpN +z+cJ4kUuFE4S9v5C5vK89nIgcuJT06u8wYTy0N0j/DnIjSaVgGr0Y0841mXtU1VV +wUZjuyYrVwVT/g5r6uzEFldTcjmYkbMaxo+MYnEZZgqYJvu2QlK87YxJOwo+D1NX +4gl1s/bmlPlGw/t9TxutI3S9PEr3JM3013e9UPE+evlTG9IIrZaUPzyj +-----END ENCRYPTED PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/ca4.cnf b/node_modules/tunnel/test/keys/ca4.cnf new file mode 100644 index 0000000..ceac8f3 --- /dev/null +++ b/node_modules/tunnel/test/keys/ca4.cnf @@ -0,0 +1,17 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no +output_password = password + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = ca4 +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/client.cnf b/node_modules/tunnel/test/keys/client.cnf new file mode 100644 index 0000000..e3db741 --- /dev/null +++ b/node_modules/tunnel/test/keys/client.cnf @@ -0,0 +1,16 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = localhost +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/client1-cert.pem b/node_modules/tunnel/test/keys/client1-cert.pem new file mode 100644 index 0000000..24ea1db --- /dev/null +++ b/node_modules/tunnel/test/keys/client1-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICKTCCAZICCQDveyzw+mHfQTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK +UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTMxJTAjBgkqhkiG9w0B +CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw +NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw +EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92 +ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMYUuKyuxT93zvrS +mL8IMI8xu8dP3iRZDUYu6dmq6Dntgb7intfzxtEFVmfNCDGwJwg7UKx/FzftGxFb +9LksuvAQuW2FLhCrOmXUVU938OZkQRSflISD80kd4i9JEoKKYPX1imjaMugIQ0ta +Bq2orY6sna8JAUVDW6WO3wVEJ4mBAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAAbaH +bc/6dIFC9TPIDrgsLtsOtycdBJqKbFT1wThhyKncXF/iyaI+8N4UA+hXMjk8ODUl +BVmmgaN6ufMLwnx/Gdl9FLmmDq4FQ4zspClTJo42QPzg5zKoPSw5liy73LM7z+nG +g6IeM8RFlEbs109YxqvQnbHfTgeLdIsdvtNXU80= +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/client1-csr.pem b/node_modules/tunnel/test/keys/client1-csr.pem new file mode 100644 index 0000000..c33a135 --- /dev/null +++ b/node_modules/tunnel/test/keys/client1-csr.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES +MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv +dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDGFLisrsU/d876 +0pi/CDCPMbvHT94kWQ1GLunZqug57YG+4p7X88bRBVZnzQgxsCcIO1Csfxc37RsR +W/S5LLrwELlthS4Qqzpl1FVPd/DmZEEUn5SEg/NJHeIvSRKCimD19Ypo2jLoCENL +WgatqK2OrJ2vCQFFQ1uljt8FRCeJgQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg +Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAB5NvNSHX+WDlF5R +LNr7SI2NzIy5OWEAgTxLkvS0NS75zlDLScaqwgs1uNfB2AnH0Fpw9+pePEijlb+L +3VRLNpV8hRn5TKztlS3O0Z4PPb7hlDHitXukTOQYrq0juQacodVSgWqNbac+O2yK +qf4Y3A7kQO1qmDOfN6QJFYVIpPiP +-----END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/client1-key.pem b/node_modules/tunnel/test/keys/client1-key.pem new file mode 100644 index 0000000..52aff97 --- /dev/null +++ b/node_modules/tunnel/test/keys/client1-key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQDGFLisrsU/d8760pi/CDCPMbvHT94kWQ1GLunZqug57YG+4p7X +88bRBVZnzQgxsCcIO1Csfxc37RsRW/S5LLrwELlthS4Qqzpl1FVPd/DmZEEUn5SE +g/NJHeIvSRKCimD19Ypo2jLoCENLWgatqK2OrJ2vCQFFQ1uljt8FRCeJgQIDAQAB +AoGAbfcM+xjfejeqGYcWs175jlVe2OyW93jUrLTYsDV4TMh08iLfaiX0pw+eg2vI +88TGNoSvacP4gNzJ3R4+wxp5AFlRKZ876yL7D0VKavMFwbyRk21+D/tLGvW6gqOC +4qi4IWSkfgBh5RK+o4jZcl5tzRPQyuxR3pJGBS33q5K2dEECQQDhV4NuKZcGDnKt +1AhmtzqsJ4wrp2a3ysZYDTWyA692NGXi2Vnpnc6Aw9JchJhT3cueFLcOTFrb/ttu +ZC/iA67pAkEA4Qe7LvcPvHlwNAmzqzOg2lYAqq+aJY2ghfJMqr3dPCJqbHJnLN6p +GXsqGngwVlnvso0O/n5g30UmzvkRMFZW2QJAbOMQy0alh3OrzntKo/eeDln9zYpS +hDUjqqCXdbF6M7AWG4vTeqOaiXYWTEZ2JPBj17tCyVH0BaIc/jbDPH9zIQJBALei +YH0l/oB2tTqyBB2cpxIlhqvDW05z8d/859WZ1PVivGg9P7cdCO+TU7uAAyokgHe7 +ptXFefYZb18NX5qLipkCQHjIo4BknrO1oisfsusWcCC700aRIYIDk0QyEEIAY3+9 +7ar/Oo1EbqWA/qN7zByPuTKrjrb91/D+IMFUFgb4RWc= +-----END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/client1.cnf b/node_modules/tunnel/test/keys/client1.cnf new file mode 100644 index 0000000..e3db741 --- /dev/null +++ b/node_modules/tunnel/test/keys/client1.cnf @@ -0,0 +1,16 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = localhost +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/client2-cert.pem b/node_modules/tunnel/test/keys/client2-cert.pem new file mode 100644 index 0000000..f0de53c --- /dev/null +++ b/node_modules/tunnel/test/keys/client2-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICKTCCAZICCQCwH+BBai7c9TANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK +UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTQxJTAjBgkqhkiG9w0B +CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw +NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw +EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92 +ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMJQGt34PZX5pQmi +3bNp3dryr7qPO3oGhTeShLCeZ6PPCdnmVl0PnT0n8/DFBlaijbvXGU9AjcFZ7gg7 +hcSAFLGmPEb2pug021yzl7u0qUD2fnVaEzfJ04ZU4lUCFqGKsfFVQuIkDHFwadbE +AO+8EqOmDynUMkKfHPWQK6O9jt5ZAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEA143M +QIygJGDv2GFKlVgV05/CYZo6ouX9I6vPRekJnGeL98lmVH83Ogb7Xmc2SbJ18qFq +naBYnUEmHPUAZ2Ms2KuV3OOvscUSCsEJ4utJYznOT8PsemxVWrgG1Ba+zpnPkdII +p+PanKCsclNUKwBlSkJ8XfGi9CAZJBykwws3O1c= +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/client2-csr.pem b/node_modules/tunnel/test/keys/client2-csr.pem new file mode 100644 index 0000000..b7507f4 --- /dev/null +++ b/node_modules/tunnel/test/keys/client2-csr.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES +MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv +dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCUBrd+D2V+aUJ +ot2zad3a8q+6jzt6BoU3koSwnmejzwnZ5lZdD509J/PwxQZWoo271xlPQI3BWe4I +O4XEgBSxpjxG9qboNNtcs5e7tKlA9n51WhM3ydOGVOJVAhahirHxVULiJAxxcGnW +xADvvBKjpg8p1DJCnxz1kCujvY7eWQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg +Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAA//UPKPpVEpflDj +DBboWewa6yw8FEOnMvh6eeg/a8KbXfIYnkZRtxbmH06ygywBy/RUBCbM5EzyElkJ +bTVKorzCHnxuTfSnKQ68ZD+vI2SNjiWqQFXW6oOCPzLbtaTJVKw5D6ylBp8Zsu6n +BzQ/4Y42aX/HW4nfJeDydxNFYVJJ +-----END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/client2-key.pem b/node_modules/tunnel/test/keys/client2-key.pem new file mode 100644 index 0000000..ecb616e --- /dev/null +++ b/node_modules/tunnel/test/keys/client2-key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICWwIBAAKBgQDCUBrd+D2V+aUJot2zad3a8q+6jzt6BoU3koSwnmejzwnZ5lZd +D509J/PwxQZWoo271xlPQI3BWe4IO4XEgBSxpjxG9qboNNtcs5e7tKlA9n51WhM3 +ydOGVOJVAhahirHxVULiJAxxcGnWxADvvBKjpg8p1DJCnxz1kCujvY7eWQIDAQAB +AoGAbiT0JdCaMFIzb/PnEdU30e1xGSIpx7C8gNTH7EnOW7d3URHU8KlyKwFjsJ4u +SpuYFdsG2Lqx3+D3IamD2O/1SgODmtdFas1C/hQ2zx42SgyBQolVJU1MHJxHqmCb +nm2Wo8aHmvFXpQ8OF4YJLPxLOSdvmq0PC17evDyjz5PciWUCQQD5yzaBpJ7yzGwd +b6nreWj6pt+jfi11YsA3gAdvTJcFzMGyNNC+U9OExjQqHsyaHyxGhHKQ6y+ybZkR +BggkudPfAkEAxyQC/hmcvWegdGI4xOJNbm0kv8UyxyeqhtgzEW2hWgEQs4k3fflZ +iNpvxyIBIp/7zZo02YqeQfZlDYuxKypUxwJAa6jQBzRCZXcBqfY0kA611kIR5U8+ +nHdBTSpbCfdCp/dGDF6DEWTjpzgdx4GawVpqJMJ09kzHM+nUrOeinuGQlQJAMAsV +Gb6OHPfaMxnbPkymh6SXQBjQNlHwhxWzxFmhmrg1EkthcufsXOLuIqmmgnb8Zc71 +PyJ9KcbK/GieNp7A0wJAIz3Mm3Up9Rlk25TH9k5e3ELjC6fkd93u94Uo145oTgDm +HSbCbjifP5eVl66PztxZppG2GBXiXT0hA/RMruTQMg== +-----END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/client2.cnf b/node_modules/tunnel/test/keys/client2.cnf new file mode 100644 index 0000000..e3db741 --- /dev/null +++ b/node_modules/tunnel/test/keys/client2.cnf @@ -0,0 +1,16 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = localhost +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/proxy1-cert.pem b/node_modules/tunnel/test/keys/proxy1-cert.pem new file mode 100644 index 0000000..30851fe --- /dev/null +++ b/node_modules/tunnel/test/keys/proxy1-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICKTCCAZICCQCb8tSy4A7fFTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK +UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0B +CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw +NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw +EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92 +ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALiUyeosVxtJK8G4 +sAqU2DBLx5sMuZpV/YcW/YxUuJv3t/9TpVxcWAs6VRPzi5fqKe8TER8qxi1/I8zV +Qks1gWyZ01reU6Wpdt1MZguF036W2qKOxlJXvnqnRDWu9IFf6KMjSJjFZb6nqhQv +aiL/80hqc2qXVfuJbSYlGrKWFFINAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEABPIn ++vQoDpJx7lVNJNOe7DE+ShCXCK6jkQY8+GQXB1sz5K0OWdZxUWOOp/fcjNJua0NM +hgnylWu/pmjPh7c9xHdZhuh6LPD3F0k4QqK+I2rg45gdBPZT2IxEvxNYpGIfayvY +ofOgbienn69tMzGCMF/lUmEJu7Bn08EbL+OyNBg= +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/proxy1-csr.pem b/node_modules/tunnel/test/keys/proxy1-csr.pem new file mode 100644 index 0000000..78ad220 --- /dev/null +++ b/node_modules/tunnel/test/keys/proxy1-csr.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES +MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv +dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4lMnqLFcbSSvB +uLAKlNgwS8ebDLmaVf2HFv2MVLib97f/U6VcXFgLOlUT84uX6invExEfKsYtfyPM +1UJLNYFsmdNa3lOlqXbdTGYLhdN+ltqijsZSV756p0Q1rvSBX+ijI0iYxWW+p6oU +L2oi//NIanNql1X7iW0mJRqylhRSDQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg +Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAFhZc2cvYGf8mCg/ +5nPWmnjNIqgy7uJnOGfE3AP4rW48yiVHCJK9ZmPogbH7gBMOBrrX8fLX3ThK9Sbj +uJlBlZD/19zjM+kvJ14DcievJ15S3KehVQ6Ipmgbz/vnAaL1D+ZiOnjQad2/Fzg4 +0MFXQaZFEUcI8fKnv/zmYi1aivej +-----END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/proxy1-key.pem b/node_modules/tunnel/test/keys/proxy1-key.pem new file mode 100644 index 0000000..d06fddd --- /dev/null +++ b/node_modules/tunnel/test/keys/proxy1-key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQC4lMnqLFcbSSvBuLAKlNgwS8ebDLmaVf2HFv2MVLib97f/U6Vc +XFgLOlUT84uX6invExEfKsYtfyPM1UJLNYFsmdNa3lOlqXbdTGYLhdN+ltqijsZS +V756p0Q1rvSBX+ijI0iYxWW+p6oUL2oi//NIanNql1X7iW0mJRqylhRSDQIDAQAB +AoGADPSkl4M1Of0QzTAhaxy3b+xhvkhOXr7aZLkAYvEvZAMnLwy39puksmUNw7C8 +g5U0DEvST9W4w0jBQodVd+Hxi4dUS4BLDVVStaLMa1Fjai/4uBPxbsrvdHzDu7if +BI6t12vWNNRtTxbfCJ1Fs3nHvDG0ueBZX3fYWBIPPM4bRQECQQDjmCrxbkfFrN5z +JXHfmzoNovV7KzgwRLKOLF17dYnhaG3G77JYjhEjIg5VXmQ8XJrwS45C/io5feFA +qrsy/0v1AkEAz55QK8CLue+sn0J8Yw//yLjJT6BK4pCFFKDxyAvP/3r4t7+1TgDj +KAfUMWb5Hcn9iT3sEykUeOe0ghU0h5X2uQJBAKES2qGPuP/vvmejwpnMVCO+hxmq +ltOiavQv9eEgaHq826SFk6UUtpA01AwbB7momIckEgTbuKqDql2H94C6KdkCQQC7 +PfrtyoP5V8dmBk8qBEbZ3pVn45dFx7LNzOzhTo3yyhO/m/zGcZRsCMt9FnI7RG0M +tjTPfvAArm8kFj2+vie5AkASvVx478N8so+02QWKme4T3ZDX+HDBXgFH1+SMD91m +9tS6x2dtTNvvwBA2KFI1fUg3B/wDoKJQRrqwdl8jpoGP +-----END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/proxy1.cnf b/node_modules/tunnel/test/keys/proxy1.cnf new file mode 100644 index 0000000..e3db741 --- /dev/null +++ b/node_modules/tunnel/test/keys/proxy1.cnf @@ -0,0 +1,16 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = localhost +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/proxy2-cert.pem b/node_modules/tunnel/test/keys/proxy2-cert.pem new file mode 100644 index 0000000..dfe9d8e --- /dev/null +++ b/node_modules/tunnel/test/keys/proxy2-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICJjCCAY8CCQCb8tSy4A7fFjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK +UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTIxJTAjBgkqhkiG9w0B +CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw +NTEwMTEyMzIxWjBZMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMQ8w +DQYDVQQDEwZwcm94eTIxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92ZW1l +bnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALZ3oNCmB2P4Q9DoUVFq +Z1ByASLm63jTPEumv2kX81GF5QMLRl59HBM6Te1rRR7wFHL0iBQUYuEzNPmedXpU +cds0uWl5teoO63ZSKFL1QLU3PMFo56AeWeznxOhy6vwWv3M8C391X6lYsiBow3K9 +d37p//GLIR+jl6Q4xYD41zaxAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEADUQgtmot +8zqsRQInjWAypcntkxX8hdUOEudN2/zjX/YtMZbr8rRvsZzBsUDdgK+E2EmEb/N3 +9ARZ0T2zWFFphJapkZOM1o1+LawN5ON5HfTPqr6d9qlHuRdGCBpXMUERO2V43Z+S +Zwm+iw1yZEs4buTmiw6zu6Nq0fhBlTiAweE= +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/proxy2-csr.pem b/node_modules/tunnel/test/keys/proxy2-csr.pem new file mode 100644 index 0000000..5510e7f --- /dev/null +++ b/node_modules/tunnel/test/keys/proxy2-csr.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBvjCCAScCAQAwWTELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDEP +MA0GA1UEAxMGcHJveHkyMSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJvdmVt +ZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2d6DQpgdj+EPQ6FFR +amdQcgEi5ut40zxLpr9pF/NRheUDC0ZefRwTOk3ta0Ue8BRy9IgUFGLhMzT5nnV6 +VHHbNLlpebXqDut2UihS9UC1NzzBaOegHlns58Tocur8Fr9zPAt/dV+pWLIgaMNy +vXd+6f/xiyEfo5ekOMWA+Nc2sQIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEgY2hh +bGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBADC4dh/+gQnJcPMQ0riJ +CBVLygcCWxkNvwM3ARboyihuNbzFX1f2g23Zr5iLphiuEFCPDOyd26hHieQ8Xo1y +FPuDXpWMx9X9MLjCWg8kdtada7HsYffbUvpjjL9TxFh+rX0cmr6Ixc5kV7AV4I6V +3h8BYJebX+XfuYrI1UwEqjqI +-----END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/proxy2-key.pem b/node_modules/tunnel/test/keys/proxy2-key.pem new file mode 100644 index 0000000..29eed2c --- /dev/null +++ b/node_modules/tunnel/test/keys/proxy2-key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQC2d6DQpgdj+EPQ6FFRamdQcgEi5ut40zxLpr9pF/NRheUDC0Ze +fRwTOk3ta0Ue8BRy9IgUFGLhMzT5nnV6VHHbNLlpebXqDut2UihS9UC1NzzBaOeg +Hlns58Tocur8Fr9zPAt/dV+pWLIgaMNyvXd+6f/xiyEfo5ekOMWA+Nc2sQIDAQAB +AoGBALPH0o9Bxu5c4pSnEdgh+oFskmoNE90MY9A2D0pA6uBcCHSjW0YmBs97FuTi +WExPSBarkJgYLgStK3j3A9Dv+uzRRT0gSr34vKFh5ozI+nJZOMNJyHDOCFiT9sm7 +urDW0gSq9OW/H8NbAkxkBZw0PaB9oW5nljuieVIFDYXNAeMBAkEA6NfBHjzp3GS0 +RbtaBkxn3CRlEoUUPVd3sJ6lW2XBu5AWrgNHRSlh0oBupXgd3cxWIB69xPOg6QjU +XmvcLjBlCQJBAMidTIw4s89m4+14eY/KuXaEgxW/awLEbQP2JDCjY1wT3Ya3Ggac +HIFuGdTbd2faJPxNJjoljZnatSdwY5aXFmkCQBQZM5FBnsooYys1vdKXW8uz1Imh +tRqKZ0l2mD1obi2bhWml3MwKg2ghL+vWj3VqwvBo1uaeRQB4g6RW2R2fjckCQQCf +FnZ0oCafa2WGlMo5qDbI8K6PGXv/9srIoHH0jC0oAKzkvuEJqtTEIw6jCOM43PoF +hhyxccRH5PNRckPXULs5AkACxKEL1dN+Bx72zE8jSU4DB5arpQdGOvuVsqXgVM/5 +QLneJEHGPCqNFS1OkWUYLtX0S28X5GmHMEpLRLpgE9JY +-----END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/proxy2.cnf b/node_modules/tunnel/test/keys/proxy2.cnf new file mode 100644 index 0000000..e62c90a --- /dev/null +++ b/node_modules/tunnel/test/keys/proxy2.cnf @@ -0,0 +1,16 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = proxy2 +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/server1-cert.pem b/node_modules/tunnel/test/keys/server1-cert.pem new file mode 100644 index 0000000..d0b6430 --- /dev/null +++ b/node_modules/tunnel/test/keys/server1-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICKTCCAZICCQCxEcnO8CV2kTANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK +UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTExJTAjBgkqhkiG9w0B +CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw +NTEwMTEyMzIxWjBcMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRIw +EAYDVQQDEwlsb2NhbGhvc3QxJTAjBgkqhkiG9w0BCQEWFmtvaWNoaWtAaW1wcm92 +ZW1lbnQuanAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALYb3z6TVgD8VmV2 +i0IHoes/HNVz+/UgXxRoA7gTUXp4Q69HBymWwm4fG61YMn7XAjy0gyC2CX/C0S74 +ZzHkhq1DCXCtlXCDx5oZhSRPpa902MVdDSRR+naLA4PPFkV2pI53hsFW37M5Dhge ++taFbih/dbjpOnhLD+SbkSKNTw/dAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAjDNi +mdmMM8Of/8iCYISqkqCG+7fz747Ntkg5fVMPufkwrBfkD9UjYVbfIpEOkZ3L0If9 +0/wNi0uZobIJnd/9B/e0cHKYnx0gkhUpMylaRvIV4odKe2vq3+mjwMb9syYXYDx3 +hw2qDMIIPr0S5ICeoIKXhbsYtODVxKSdJq+FjAI= +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/server1-csr.pem b/node_modules/tunnel/test/keys/server1-csr.pem new file mode 100644 index 0000000..9d9ff1b --- /dev/null +++ b/node_modules/tunnel/test/keys/server1-csr.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBwTCCASoCAQAwXDELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDES +MBAGA1UEAxMJbG9jYWxob3N0MSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJv +dmVtZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2G98+k1YA/FZl +dotCB6HrPxzVc/v1IF8UaAO4E1F6eEOvRwcplsJuHxutWDJ+1wI8tIMgtgl/wtEu ++Gcx5IatQwlwrZVwg8eaGYUkT6WvdNjFXQ0kUfp2iwODzxZFdqSOd4bBVt+zOQ4Y +HvrWhW4of3W46Tp4Sw/km5EijU8P3QIDAQABoCUwIwYJKoZIhvcNAQkHMRYTFEEg +Y2hhbGxlbmdlIHBhc3N3b3JkMA0GCSqGSIb3DQEBBQUAA4GBAJLLYClTc1BZbQi4 +2GrGEimzJoheXXD1vepECS6TaeYJFSQldMGdkn5D8TMXWW115V4hw7a1pCwvRBPH +dVEeh3u3ktI1e4pS5ozvpbpYanILrHCNOQ4PvKi9rzG9Km8CprPcrJCZlWf2QUBK +gVNgqZJeqyEcBu80/ajjc6xrZsSP +-----END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/server1-key.pem b/node_modules/tunnel/test/keys/server1-key.pem new file mode 100644 index 0000000..d24acc8 --- /dev/null +++ b/node_modules/tunnel/test/keys/server1-key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQC2G98+k1YA/FZldotCB6HrPxzVc/v1IF8UaAO4E1F6eEOvRwcp +lsJuHxutWDJ+1wI8tIMgtgl/wtEu+Gcx5IatQwlwrZVwg8eaGYUkT6WvdNjFXQ0k +Ufp2iwODzxZFdqSOd4bBVt+zOQ4YHvrWhW4of3W46Tp4Sw/km5EijU8P3QIDAQAB +AoGAcDioz+T3gM//ZbMxidUuQMu5twgsYhg6v1aBxDOTaEcoXqEElupikn31DlNl +eqiApmwOyl+jZunlAm7tGN/c5WjmZtW6watv1D7HjDIFJQBdiOv2jLeV5gsoArMP +f8Y13MS68nJ7/ZkqisovjBlD7ZInbyUiJj0FH/cazauflIECQQDwHgQ0J46eL5EG +3smQQG9/8b/Wsnf8s9Vz6X/KptsbL3c7mCBY9/+cGw0xVxoUOyO7KGPzpRhtz4Y0 +oP+JwISxAkEAwieUtl+SuUAn6er1tZzPPiAM2w6XGOAod+HuPjTAKVhLKHYIEJbU +jhPdjOGtZr10ED9g0m7M4n3JKMMM00W47QJBAOVkp7tztwpkgva/TG0lQeBHgnCI +G50t6NRN1Koz8crs88nZMb4NXwMxzM7AWcfOH/qjQan4pXfy9FG/JaHibGECQH8i +L+zj1E3dxsUTh+VuUv5ZOlHO0f4F+jnWBY1SOWpZWI2cDFfgjDqko3R26nbWI8Pn +3FyvFRZSS4CXiDRn+VkCQQCKPBl60QAifkZITqL0dCs+wB2hhmlWwqlpq1ZgeCby +zwmZY1auUK1BYBX1aPB85+Bm2Zhp5jnkwRcO7iSYy8+C +-----END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/server1.cnf b/node_modules/tunnel/test/keys/server1.cnf new file mode 100644 index 0000000..e3db741 --- /dev/null +++ b/node_modules/tunnel/test/keys/server1.cnf @@ -0,0 +1,16 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = localhost +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/server2-cert.pem b/node_modules/tunnel/test/keys/server2-cert.pem new file mode 100644 index 0000000..ba92620 --- /dev/null +++ b/node_modules/tunnel/test/keys/server2-cert.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICJzCCAZACCQCxEcnO8CV2kjANBgkqhkiG9w0BAQUFADBWMQswCQYDVQQGEwJK +UDESMBAGA1UECxQJbm9kZWpzX2pwMQwwCgYDVQQDEwNjYTExJTAjBgkqhkiG9w0B +CQEWFmtvaWNoaWtAaW1wcm92ZW1lbnQuanAwHhcNMTMxMjI0MTEyMzIxWhcNNDEw +NTEwMTEyMzIxWjBaMQswCQYDVQQGEwJKUDESMBAGA1UECxQJbm9kZWpzX2pwMRAw +DgYDVQQDEwdzZXJ2ZXIyMSUwIwYJKoZIhvcNAQkBFhZrb2ljaGlrQGltcHJvdmVt +ZW50LmpwMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEkKr9SHG6jtf5UNfL +u66wNi8jrbAW5keYy7ECWRGRFDE7ay4N8LDMmOO3/1eH2WpY0QM5JFxq78hoVQED +ogvoeVTw+Ni33yqY6VL2WRv84FN2BmCrDGJQ83EYdsJqPUnxuXvbmq7Viw3l/BEu +hvsp722KcToIrqt8mHKMc/nPRwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBALbdQz32 +CN0hJfJ6BtGyqee3zRSpufPY1KFV8OHSDG4qL55OfpjB5e5wsldp3VChTWzm2KM+ +xg9WSWurMINM5KLgUqCZ69ttg1gJ/SnZNolXhH0I3SG/DY4DGTHo9oJPoSrgrWbX +3ZmCoO6rrDoSuVRJ8dKMWJmt8O1pZ6ZRW2iM +-----END CERTIFICATE----- diff --git a/node_modules/tunnel/test/keys/server2-csr.pem b/node_modules/tunnel/test/keys/server2-csr.pem new file mode 100644 index 0000000..f89c510 --- /dev/null +++ b/node_modules/tunnel/test/keys/server2-csr.pem @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIIBvzCCASgCAQAwWjELMAkGA1UEBhMCSlAxEjAQBgNVBAsUCW5vZGVqc19qcDEQ +MA4GA1UEAxMHc2VydmVyMjElMCMGCSqGSIb3DQEJARYWa29pY2hpa0BpbXByb3Zl +bWVudC5qcDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxJCq/Uhxuo7X+VDX +y7uusDYvI62wFuZHmMuxAlkRkRQxO2suDfCwzJjjt/9Xh9lqWNEDOSRcau/IaFUB +A6IL6HlU8PjYt98qmOlS9lkb/OBTdgZgqwxiUPNxGHbCaj1J8bl725qu1YsN5fwR +Lob7Ke9tinE6CK6rfJhyjHP5z0cCAwEAAaAlMCMGCSqGSIb3DQEJBzEWExRBIGNo +YWxsZW5nZSBwYXNzd29yZDANBgkqhkiG9w0BAQUFAAOBgQB3rCGCErgshGKEI5j9 +togUBwD3ul91yRFSBoV2hVGXsTOalWa0XCI+9+5QQEOBlj1pUT8eDU8ve55mX1UX +AZEx+cbUQa9DNeiDAMX83GqHMD8fF2zqsY1mkg5zFKG3nhoIYSG15qXcpqAhxRpX +NUQnZ4yzt2pE0aiFfkXa3PM42Q== +-----END CERTIFICATE REQUEST----- diff --git a/node_modules/tunnel/test/keys/server2-key.pem b/node_modules/tunnel/test/keys/server2-key.pem new file mode 100644 index 0000000..9f72b5c --- /dev/null +++ b/node_modules/tunnel/test/keys/server2-key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQDEkKr9SHG6jtf5UNfLu66wNi8jrbAW5keYy7ECWRGRFDE7ay4N +8LDMmOO3/1eH2WpY0QM5JFxq78hoVQEDogvoeVTw+Ni33yqY6VL2WRv84FN2BmCr +DGJQ83EYdsJqPUnxuXvbmq7Viw3l/BEuhvsp722KcToIrqt8mHKMc/nPRwIDAQAB +AoGAQ/bRaGoYCK1DN80gEC2ApSTW/7saW5CbyNUFCw7I6CTXMPhKID/MobFraz86 +gJpIDxWVy7gqzD7ESG67vwnUm52ITojQiY3JH7NCNhq/39/aYZOz2d7rBv2mvhk3 +w7gxUsmtPVUz3s2/h1KYaGpM3b68TwMS9nIiwwHDJS1aR8ECQQDu/kOy+Z/0EVKC +APgiEzbxewAiy7BVzNppd8CR/5m1KxlsIoMr8OdLqVwiJ/13m3eZGkPNx5pLJ9Xv +sXER0ZcPAkEA0o19xA1AJ/v5qsRaWJaA+ftgQ8ZanqsWXhM9abAvkPdFLPKYWTfO +r9f8eUDH0+O9mA2eZ2mlsEcsmIHDTY6ESQJAO2lyIvfzT5VO0Yq0JKRqMDXHnt7M +A0hds4JVmPXVnDgOpdcejLniheigQs12MVmwrZrd6DYKoUxR3rhZx3g2+QJBAK/2 +5fuaI1sHP+HSlbrhlUrWJd6egA+I5nma1MFmKGqb7Kki2eX+OPNGq87eL+LKuyG/ +h/nfFkTbRs7x67n+eFkCQQCPgy381Vpa7lmoNUfEVeMSNe74FNL05IlPDs/BHcci +1GX9XzsFEqHLtJ5t1aWbGv39gb2WmPP3LJBsRPzLa2iQ +-----END RSA PRIVATE KEY----- diff --git a/node_modules/tunnel/test/keys/server2.cnf b/node_modules/tunnel/test/keys/server2.cnf new file mode 100644 index 0000000..bfaa48b --- /dev/null +++ b/node_modules/tunnel/test/keys/server2.cnf @@ -0,0 +1,16 @@ +[ req ] +default_bits = 1024 +days = 9999 +distinguished_name = req_distinguished_name +attributes = req_attributes +prompt = no + +[ req_distinguished_name ] +C = JP +OU = nodejs_jp +CN = server2 +emailAddress = koichik@improvement.jp + +[ req_attributes ] +challengePassword = A challenge password + diff --git a/node_modules/tunnel/test/keys/test.js b/node_modules/tunnel/test/keys/test.js new file mode 100644 index 0000000..d828422 --- /dev/null +++ b/node_modules/tunnel/test/keys/test.js @@ -0,0 +1,43 @@ +var fs = require('fs'); +var tls = require('tls'); + +var server1Key = fs.readFileSync(__dirname + '/server1-key.pem'); +var server1Cert = fs.readFileSync(__dirname + '/server1-cert.pem'); +var clientKey = fs.readFileSync(__dirname + '/client-key.pem'); +var clientCert = fs.readFileSync(__dirname + '/client-cert.pem'); +var ca1Cert = fs.readFileSync(__dirname + '/ca1-cert.pem'); +var ca3Cert = fs.readFileSync(__dirname + '/ca3-cert.pem'); + +var server = tls.createServer({ + key: server1Key, + cert: server1Cert, + ca: [ca3Cert], + requestCert: true, + rejectUnauthorized: true, +}, function(s) { + console.log('connected on server'); + s.on('data', function(chunk) { + console.log('S:' + chunk); + s.write(chunk); + }); + s.setEncoding('utf8'); +}).listen(3000, function() { + var c = tls.connect({ + host: 'localhost', + port: 3000, + key: clientKey, + cert: clientCert, + ca: [ca1Cert], + rejectUnauthorized: true + }, function() { + console.log('connected on client'); + c.on('data', function(chunk) { + console.log('C:' + chunk); + }); + c.setEncoding('utf8'); + c.write('Hello'); + }); + c.on('error', function(err) { + console.log(err); + }); +}); diff --git a/node_modules/typed-rest-client/Handlers.d.ts b/node_modules/typed-rest-client/Handlers.d.ts new file mode 100644 index 0000000..780935d --- /dev/null +++ b/node_modules/typed-rest-client/Handlers.d.ts @@ -0,0 +1,4 @@ +export { BasicCredentialHandler } from "./handlers/basiccreds"; +export { BearerCredentialHandler } from "./handlers/bearertoken"; +export { NtlmCredentialHandler } from "./handlers/ntlm"; +export { PersonalAccessTokenCredentialHandler } from "./handlers/personalaccesstoken"; diff --git a/node_modules/typed-rest-client/Handlers.js b/node_modules/typed-rest-client/Handlers.js new file mode 100644 index 0000000..0b9e040 --- /dev/null +++ b/node_modules/typed-rest-client/Handlers.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var basiccreds_1 = require("./handlers/basiccreds"); +exports.BasicCredentialHandler = basiccreds_1.BasicCredentialHandler; +var bearertoken_1 = require("./handlers/bearertoken"); +exports.BearerCredentialHandler = bearertoken_1.BearerCredentialHandler; +var ntlm_1 = require("./handlers/ntlm"); +exports.NtlmCredentialHandler = ntlm_1.NtlmCredentialHandler; +var personalaccesstoken_1 = require("./handlers/personalaccesstoken"); +exports.PersonalAccessTokenCredentialHandler = personalaccesstoken_1.PersonalAccessTokenCredentialHandler; diff --git a/node_modules/typed-rest-client/HttpClient.d.ts b/node_modules/typed-rest-client/HttpClient.d.ts new file mode 100644 index 0000000..f5cd014 --- /dev/null +++ b/node_modules/typed-rest-client/HttpClient.d.ts @@ -0,0 +1,103 @@ +/// <reference types="node" /> +import url = require("url"); +import http = require("http"); +import ifm = require('./Interfaces'); +export declare enum HttpCodes { + OK = 200, + MultipleChoices = 300, + MovedPermanently = 301, + ResourceMoved = 302, + SeeOther = 303, + NotModified = 304, + UseProxy = 305, + SwitchProxy = 306, + TemporaryRedirect = 307, + PermanentRedirect = 308, + BadRequest = 400, + Unauthorized = 401, + PaymentRequired = 402, + Forbidden = 403, + NotFound = 404, + MethodNotAllowed = 405, + NotAcceptable = 406, + ProxyAuthenticationRequired = 407, + RequestTimeout = 408, + Conflict = 409, + Gone = 410, + InternalServerError = 500, + NotImplemented = 501, + BadGateway = 502, + ServiceUnavailable = 503, + GatewayTimeout = 504, +} +export declare class HttpClientResponse implements ifm.IHttpClientResponse { + constructor(message: http.IncomingMessage); + message: http.IncomingMessage; + readBody(): Promise<string>; +} +export interface RequestInfo { + options: http.RequestOptions; + parsedUrl: url.Url; + httpModule: any; +} +export declare function isHttps(requestUrl: string): boolean; +export declare class HttpClient implements ifm.IHttpClient { + userAgent: string; + handlers: ifm.IRequestHandler[]; + requestOptions: ifm.IRequestOptions; + private _ignoreSslError; + private _socketTimeout; + private _httpProxy; + private _httpProxyBypassHosts; + private _allowRedirects; + private _maxRedirects; + private _allowRetries; + private _maxRetries; + private _agent; + private _proxyAgent; + private _keepAlive; + private _disposed; + private _certConfig; + private _ca; + private _cert; + private _key; + constructor(userAgent: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions); + options(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>; + get(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>; + del(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>; + post(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>; + patch(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>; + put(requestUrl: string, data: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>; + head(requestUrl: string, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>; + sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: ifm.IHeaders): Promise<ifm.IHttpClientResponse>; + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: ifm.IHeaders): Promise<ifm.IHttpClientResponse>; + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose(): void; + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream): Promise<ifm.IHttpClientResponse>; + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info: ifm.IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: ifm.IHttpClientResponse) => void): void; + private _prepareRequest(method, requestUrl, headers); + private _isPresigned(requestUrl); + private _mergeHeaders(headers); + private _getAgent(requestUrl); + private _getProxy(requestUrl); + private _isBypassProxy(requestUrl); + private _performExponentialBackoff(retryNumber); +} diff --git a/node_modules/typed-rest-client/HttpClient.js b/node_modules/typed-rest-client/HttpClient.js new file mode 100644 index 0000000..169b8f7 --- /dev/null +++ b/node_modules/typed-rest-client/HttpClient.js @@ -0,0 +1,455 @@ +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const url = require("url"); +const http = require("http"); +const https = require("https"); +let fs; +let tunnel; +var HttpCodes; +(function (HttpCodes) { + HttpCodes[HttpCodes["OK"] = 200] = "OK"; + HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; + HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; + HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; + HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; + HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; + HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; + HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; + HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; + HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; + HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); +const HttpRedirectCodes = [HttpCodes.MovedPermanently, HttpCodes.ResourceMoved, HttpCodes.SeeOther, HttpCodes.TemporaryRedirect, HttpCodes.PermanentRedirect]; +const HttpResponseRetryCodes = [HttpCodes.BadGateway, HttpCodes.ServiceUnavailable, HttpCodes.GatewayTimeout]; +const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; +const ExponentialBackoffCeiling = 10; +const ExponentialBackoffTimeSlice = 5; +class HttpClientResponse { + constructor(message) { + this.message = message; + } + readBody() { + return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + let output = ''; + this.message.on('data', (chunk) => { + output += chunk; + }); + this.message.on('end', () => { + resolve(output); + }); + })); + } +} +exports.HttpClientResponse = HttpClientResponse; +function isHttps(requestUrl) { + let parsedUrl = url.parse(requestUrl); + return parsedUrl.protocol === 'https:'; +} +exports.isHttps = isHttps; +var EnvironmentVariables; +(function (EnvironmentVariables) { + EnvironmentVariables["HTTP_PROXY"] = "HTTP_PROXY"; + EnvironmentVariables["HTTPS_PROXY"] = "HTTPS_PROXY"; +})(EnvironmentVariables || (EnvironmentVariables = {})); +class HttpClient { + constructor(userAgent, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = userAgent; + this.handlers = handlers || []; + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; + } + this._socketTimeout = requestOptions.socketTimeout; + this._httpProxy = requestOptions.proxy; + if (requestOptions.proxy && requestOptions.proxy.proxyBypassHosts) { + this._httpProxyBypassHosts = []; + requestOptions.proxy.proxyBypassHosts.forEach(bypass => { + this._httpProxyBypassHosts.push(new RegExp(bypass, 'i')); + }); + } + this._certConfig = requestOptions.cert; + if (this._certConfig) { + // If using cert, need fs + fs = require('fs'); + // cache the cert content into memory, so we don't have to read it from disk every time + if (this._certConfig.caFile && fs.existsSync(this._certConfig.caFile)) { + this._ca = fs.readFileSync(this._certConfig.caFile, 'utf8'); + } + if (this._certConfig.certFile && fs.existsSync(this._certConfig.certFile)) { + this._cert = fs.readFileSync(this._certConfig.certFile, 'utf8'); + } + if (this._certConfig.keyFile && fs.existsSync(this._certConfig.keyFile)) { + this._key = fs.readFileSync(this._certConfig.keyFile, 'utf8'); + } + } + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; + } + } + } + options(requestUrl, additionalHeaders) { + return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); + } + get(requestUrl, additionalHeaders) { + return this.request('GET', requestUrl, null, additionalHeaders || {}); + } + del(requestUrl, additionalHeaders) { + return this.request('DELETE', requestUrl, null, additionalHeaders || {}); + } + post(requestUrl, data, additionalHeaders) { + return this.request('POST', requestUrl, data, additionalHeaders || {}); + } + patch(requestUrl, data, additionalHeaders) { + return this.request('PATCH', requestUrl, data, additionalHeaders || {}); + } + put(requestUrl, data, additionalHeaders) { + return this.request('PUT', requestUrl, data, additionalHeaders || {}); + } + head(requestUrl, additionalHeaders) { + return this.request('HEAD', requestUrl, null, additionalHeaders || {}); + } + sendStream(verb, requestUrl, stream, additionalHeaders) { + return this.request(verb, requestUrl, stream, additionalHeaders); + } + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + request(verb, requestUrl, data, headers) { + return __awaiter(this, void 0, void 0, function* () { + if (this._disposed) { + throw new Error("Client has already been disposed."); + } + let info = this._prepareRequest(verb, requestUrl, headers); + // Only perform retries on reads since writes may not be idempotent. + let maxTries = (this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1) ? this._maxRetries + 1 : 1; + let numTries = 0; + let response; + while (numTries < maxTries) { + response = yield this.requestRaw(info, data); + // Check if it's an authentication challenge + if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (let i = 0; i < this.handlers.length; i++) { + if (this.handlers[i].canHandleAuthentication(response)) { + authenticationHandler = this.handlers[i]; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info, data); + } + else { + // We have received an unauthorized response but have no handlers to handle it. + // Let the response return to the caller. + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 + && this._allowRedirects + && redirectsRemaining > 0) { + const redirectUrl = response.message.headers["location"]; + if (!redirectUrl) { + // if there's no location to redirect to, we won't + break; + } + // we need to finish reading the response before reassigning response + // which will leak the open socket. + yield response.readBody(); + // let's make the request with the new redirectUrl + info = this._prepareRequest(verb, redirectUrl, headers); + response = yield this.requestRaw(info, data); + redirectsRemaining--; + } + if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { + // If not a retry code, return immediately instead of retrying + return response; + } + numTries += 1; + if (numTries < maxTries) { + yield response.readBody(); + yield this._performExponentialBackoff(numTries); + } + } + return response; + }); + } + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); + } + this._disposed = true; + } + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info, data) { + return new Promise((resolve, reject) => { + let callbackForResult = function (err, res) { + if (err) { + reject(err); + } + resolve(res); + }; + this.requestRawWithCallback(info, data, callbackForResult); + }); + } + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info, data, onResult) { + let socket; + let isDataString = typeof (data) === 'string'; + if (typeof (data) === 'string') { + info.options.headers["Content-Length"] = Buffer.byteLength(data, 'utf8'); + } + let callbackCalled = false; + let handleResult = (err, res) => { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + }; + let req = info.httpModule.request(info.options, (msg) => { + let res = new HttpClientResponse(msg); + handleResult(null, res); + }); + req.on('socket', (sock) => { + socket = sock; + }); + // If we ever get disconnected, we want the socket to timeout eventually + req.setTimeout(this._socketTimeout || 3 * 60000, () => { + if (socket) { + socket.end(); + } + handleResult(new Error('Request timeout: ' + info.options.path), null); + }); + req.on('error', function (err) { + // err has statusCode property + // res should have headers + handleResult(err, null); + }); + if (data && typeof (data) === 'string') { + req.write(data, 'utf8'); + } + if (data && typeof (data) !== 'string') { + data.on('close', function () { + req.end(); + }); + data.pipe(req); + } + else { + req.end(); + } + } + _prepareRequest(method, requestUrl, headers) { + const info = {}; + info.parsedUrl = url.parse(requestUrl); + const usingSsl = info.parsedUrl.protocol === 'https:'; + info.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info.options = {}; + info.options.host = info.parsedUrl.hostname; + info.options.port = info.parsedUrl.port ? parseInt(info.parsedUrl.port) : defaultPort; + info.options.path = (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); + info.options.method = method; + info.options.headers = this._mergeHeaders(headers); + info.options.headers["user-agent"] = this.userAgent; + info.options.agent = this._getAgent(requestUrl); + // gives handlers an opportunity to participate + if (this.handlers && !this._isPresigned(requestUrl)) { + this.handlers.forEach((handler) => { + handler.prepareRequest(info.options); + }); + } + return info; + } + _isPresigned(requestUrl) { + if (this.requestOptions && this.requestOptions.presignedUrlPatterns) { + const patterns = this.requestOptions.presignedUrlPatterns; + for (let i = 0; i < patterns.length; i++) { + if (requestUrl.match(patterns[i])) { + return true; + } + } + } + return false; + } + _mergeHeaders(headers) { + const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); + } + return lowercaseKeys(headers || {}); + } + _getAgent(requestUrl) { + let agent; + let proxy = this._getProxy(requestUrl); + let useProxy = proxy.proxyUrl && proxy.proxyUrl.hostname && !this._isBypassProxy(requestUrl); + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (this._keepAlive && !useProxy) { + agent = this._agent; + } + // if agent is already assigned use that agent. + if (!!agent) { + return agent; + } + let parsedUrl = url.parse(requestUrl); + const usingSsl = parsedUrl.protocol === 'https:'; + let maxSockets = 100; + if (!!this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; + } + if (useProxy) { + // If using proxy, need tunnel + if (!tunnel) { + tunnel = require('tunnel'); + } + const agentOptions = { + maxSockets: maxSockets, + keepAlive: this._keepAlive, + proxy: { + proxyAuth: proxy.proxyAuth, + host: proxy.proxyUrl.hostname, + port: proxy.proxyUrl.port + }, + }; + let tunnelAgent; + const overHttps = proxy.proxyUrl.protocol === 'https:'; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; + } + else { + tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; + } + // if reusing agent across request and tunneling agent isn't assigned create a new agent + if (this._keepAlive && !agent) { + const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; + } + // if not using private agent and tunnel agent isn't setup then use global agent + if (!agent) { + agent = usingSsl ? https.globalAgent : http.globalAgent; + } + if (usingSsl && this._ignoreSslError) { + // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process + // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options + // we have to cast it to any and change it directly + agent.options = Object.assign(agent.options || {}, { rejectUnauthorized: false }); + } + if (usingSsl && this._certConfig) { + agent.options = Object.assign(agent.options || {}, { ca: this._ca, cert: this._cert, key: this._key, passphrase: this._certConfig.passphrase }); + } + return agent; + } + _getProxy(requestUrl) { + const parsedUrl = url.parse(requestUrl); + let usingSsl = parsedUrl.protocol === 'https:'; + let proxyConfig = this._httpProxy; + // fallback to http_proxy and https_proxy env + let https_proxy = process.env[EnvironmentVariables.HTTPS_PROXY]; + let http_proxy = process.env[EnvironmentVariables.HTTP_PROXY]; + if (!proxyConfig) { + if (https_proxy && usingSsl) { + proxyConfig = { + proxyUrl: https_proxy + }; + } + else if (http_proxy) { + proxyConfig = { + proxyUrl: http_proxy + }; + } + } + let proxyUrl; + let proxyAuth; + if (proxyConfig) { + if (proxyConfig.proxyUrl.length > 0) { + proxyUrl = url.parse(proxyConfig.proxyUrl); + } + if (proxyConfig.proxyUsername || proxyConfig.proxyPassword) { + proxyAuth = proxyConfig.proxyUsername + ":" + proxyConfig.proxyPassword; + } + } + return { proxyUrl: proxyUrl, proxyAuth: proxyAuth }; + } + _isBypassProxy(requestUrl) { + if (!this._httpProxyBypassHosts) { + return false; + } + let bypass = false; + this._httpProxyBypassHosts.forEach(bypassHost => { + if (bypassHost.test(requestUrl)) { + bypass = true; + } + }); + return bypass; + } + _performExponentialBackoff(retryNumber) { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise(resolve => setTimeout(() => resolve(), ms)); + } +} +exports.HttpClient = HttpClient; diff --git a/node_modules/typed-rest-client/Index.d.ts b/node_modules/typed-rest-client/Index.d.ts new file mode 100644 index 0000000..e69de29 diff --git a/node_modules/typed-rest-client/Index.js b/node_modules/typed-rest-client/Index.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/node_modules/typed-rest-client/Index.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/node_modules/typed-rest-client/Interfaces.d.ts b/node_modules/typed-rest-client/Interfaces.d.ts new file mode 100644 index 0000000..5900e26 --- /dev/null +++ b/node_modules/typed-rest-client/Interfaces.d.ts @@ -0,0 +1,62 @@ +/// <reference types="node" /> +import http = require("http"); +import url = require("url"); +export interface IHeaders { + [key: string]: any; +} +export interface IBasicCredentials { + username: string; + password: string; +} +export interface IHttpClient { + options(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>; + get(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>; + del(requestUrl: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>; + post(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>; + patch(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>; + put(requestUrl: string, data: string, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>; + sendStream(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, additionalHeaders?: IHeaders): Promise<IHttpClientResponse>; + request(verb: string, requestUrl: string, data: string | NodeJS.ReadableStream, headers: IHeaders): Promise<IHttpClientResponse>; + requestRaw(info: IRequestInfo, data: string | NodeJS.ReadableStream): Promise<IHttpClientResponse>; + requestRawWithCallback(info: IRequestInfo, data: string | NodeJS.ReadableStream, onResult: (err: any, res: IHttpClientResponse) => void): void; +} +export interface IRequestHandler { + prepareRequest(options: http.RequestOptions): void; + canHandleAuthentication(response: IHttpClientResponse): boolean; + handleAuthentication(httpClient: IHttpClient, requestInfo: IRequestInfo, objs: any): Promise<IHttpClientResponse>; +} +export interface IHttpClientResponse { + message: http.IncomingMessage; + readBody(): Promise<string>; +} +export interface IRequestInfo { + options: http.RequestOptions; + parsedUrl: url.Url; + httpModule: any; +} +export interface IRequestOptions { + headers?: IHeaders; + socketTimeout?: number; + ignoreSslError?: boolean; + proxy?: IProxyConfiguration; + cert?: ICertConfiguration; + allowRedirects?: boolean; + maxRedirects?: number; + maxSockets?: number; + keepAlive?: boolean; + presignedUrlPatterns?: RegExp[]; + allowRetries?: boolean; + maxRetries?: number; +} +export interface IProxyConfiguration { + proxyUrl: string; + proxyUsername?: string; + proxyPassword?: string; + proxyBypassHosts?: string[]; +} +export interface ICertConfiguration { + caFile?: string; + certFile?: string; + keyFile?: string; + passphrase?: string; +} diff --git a/node_modules/typed-rest-client/Interfaces.js b/node_modules/typed-rest-client/Interfaces.js new file mode 100644 index 0000000..2bc6be2 --- /dev/null +++ b/node_modules/typed-rest-client/Interfaces.js @@ -0,0 +1,5 @@ +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +; diff --git a/node_modules/typed-rest-client/LICENSE b/node_modules/typed-rest-client/LICENSE new file mode 100644 index 0000000..8cddf7e --- /dev/null +++ b/node_modules/typed-rest-client/LICENSE @@ -0,0 +1,21 @@ +Typed Rest Client for Node.js + +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/typed-rest-client/README.md b/node_modules/typed-rest-client/README.md new file mode 100644 index 0000000..0c2b768 --- /dev/null +++ b/node_modules/typed-rest-client/README.md @@ -0,0 +1,100 @@ +[](https://dev.azure.com/ms/typed-rest-client/_build/latest?definitionId=42&branchName=master) + +# Typed REST and HTTP Client with TypeScript Typings + +A lightweight REST and HTTP client optimized for use with TypeScript with generics and async await. + +## Features + + - REST and HTTP client with TypeScript generics and async/await/Promises + - Typings included so no need to acquire separately (great for intellisense and no versioning drift) + - Basic, Bearer and NTLM Support out of the box. Extensible handlers for others. + - Proxy support + - Certificate support (Self-signed server and client cert) + - Redirects supported + +Intellisense and compile support: + + + +## Install + +``` +npm install typed-rest-client --save +``` + +Or to install the latest preview: +``` +npm install typed-rest-client@preview --save +``` + +## Samples + +See the [samples](./samples) for complete coding examples. Also see the [REST](./test/tests/resttests.ts) and [HTTP](./test/tests/httptests.ts) tests for detailed examples. + +## Errors + +### HTTP + +The HTTP client does not throw unless truly exceptional. + +* A request that successfully executes resulting in a 404, 500 etc... will return a response object with a status code and a body. +* Redirects (3xx) will be followed by default. + + +See [HTTP tests](./test/tests/httptests.ts) for detailed examples. + +### REST + +The REST client is a high-level client which uses the HTTP client. Its responsibility is to turn a body into a typed resource object. + +* A 200 will be success. +* Redirects (3xx) will be followed. +* A 404 will not throw but the result object will be null and the result statusCode will be set. +* Other 4xx and 5xx errors will throw. The status code will be attached to the error object. If a RESTful error object is returned (`{ message: xxx}`), then the error message will be that. Otherwise, it will be a generic, `Failed Request: (xxx)`. + +See [REST tests](./test/tests/resttests.ts) for detailed examples. + +## Debugging + +To enable detailed console logging of all HTTP requests and responses, set the NODE_DEBUG environment varible: + +``` +export NODE_DEBUG=http +``` + +or + +``` +set NODE_DEBUG=http +``` + + + +## Node support + +The typed-rest-client is built using the latest LTS version of Node 8. We also support the latest LTS for Node 4 and Node 6. + +## Contributing + +To contribute to this repository, see the [contribution guide](./CONTRIBUTING.md) + +To build: + +```bash +$ npm run build +``` + +To run all tests: +```bash +$ npm test +``` + +To just run unit tests: +```bash +$ npm run units +``` + +## Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/node_modules/typed-rest-client/RestClient.d.ts b/node_modules/typed-rest-client/RestClient.d.ts new file mode 100644 index 0000000..74b33cb --- /dev/null +++ b/node_modules/typed-rest-client/RestClient.d.ts @@ -0,0 +1,77 @@ +/// <reference types="node" /> +import httpm = require('./HttpClient'); +import ifm = require("./Interfaces"); +export interface IRestResponse<T> { + statusCode: number; + result: T | null; + headers: Object; +} +export interface IRequestOptions { + acceptHeader?: string; + additionalHeaders?: ifm.IHeaders; + responseProcessor?: Function; + deserializeDates?: boolean; +} +export declare class RestClient { + client: httpm.HttpClient; + versionParam: string; + /** + * Creates an instance of the RestClient + * @constructor + * @param {string} userAgent - userAgent for requests + * @param {string} baseUrl - (Optional) If not specified, use full urls per request. If supplied and a function passes a relative url, it will be appended to this + * @param {ifm.IRequestHandler[]} handlers - handlers are typically auth handlers (basic, bearer, ntlm supplied) + * @param {ifm.IRequestOptions} requestOptions - options for each http requests (http proxy setting, socket timeout) + */ + constructor(userAgent: string, baseUrl?: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions); + private _baseUrl; + /** + * Gets a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} requestUrl - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + options<T>(requestUrl: string, options?: IRequestOptions): Promise<IRestResponse<T>>; + /** + * Gets a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified url or relative path + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + get<T>(resource: string, options?: IRequestOptions): Promise<IRestResponse<T>>; + /** + * Deletes a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + del<T>(resource: string, options?: IRequestOptions): Promise<IRestResponse<T>>; + /** + * Creates resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + create<T>(resource: string, resources: any, options?: IRequestOptions): Promise<IRestResponse<T>>; + /** + * Updates resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + update<T>(resource: string, resources: any, options?: IRequestOptions): Promise<IRestResponse<T>>; + /** + * Replaces resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + replace<T>(resource: string, resources: any, options?: IRequestOptions): Promise<IRestResponse<T>>; + uploadStream<T>(verb: string, requestUrl: string, stream: NodeJS.ReadableStream, options?: IRequestOptions): Promise<IRestResponse<T>>; + private _headersFromOptions(options, contentType?); + private static dateTimeDeserializer(key, value); + private _processResponse<T>(res, options); +} diff --git a/node_modules/typed-rest-client/RestClient.js b/node_modules/typed-rest-client/RestClient.js new file mode 100644 index 0000000..1548b8f --- /dev/null +++ b/node_modules/typed-rest-client/RestClient.js @@ -0,0 +1,217 @@ +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const httpm = require("./HttpClient"); +const util = require("./Util"); +class RestClient { + /** + * Creates an instance of the RestClient + * @constructor + * @param {string} userAgent - userAgent for requests + * @param {string} baseUrl - (Optional) If not specified, use full urls per request. If supplied and a function passes a relative url, it will be appended to this + * @param {ifm.IRequestHandler[]} handlers - handlers are typically auth handlers (basic, bearer, ntlm supplied) + * @param {ifm.IRequestOptions} requestOptions - options for each http requests (http proxy setting, socket timeout) + */ + constructor(userAgent, baseUrl, handlers, requestOptions) { + this.client = new httpm.HttpClient(userAgent, handlers, requestOptions); + if (baseUrl) { + this._baseUrl = baseUrl; + } + } + /** + * Gets a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} requestUrl - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + options(requestUrl, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(requestUrl, this._baseUrl); + let res = yield this.client.options(url, this._headersFromOptions(options)); + return this._processResponse(res, options); + }); + } + /** + * Gets a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified url or relative path + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + get(resource, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(resource, this._baseUrl); + let res = yield this.client.get(url, this._headersFromOptions(options)); + return this._processResponse(res, options); + }); + } + /** + * Deletes a resource from an endpoint + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + del(resource, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(resource, this._baseUrl); + let res = yield this.client.del(url, this._headersFromOptions(options)); + return this._processResponse(res, options); + }); + } + /** + * Creates resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + create(resource, resources, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(resource, this._baseUrl); + let headers = this._headersFromOptions(options, true); + let data = JSON.stringify(resources, null, 2); + let res = yield this.client.post(url, data, headers); + return this._processResponse(res, options); + }); + } + /** + * Updates resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + update(resource, resources, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(resource, this._baseUrl); + let headers = this._headersFromOptions(options, true); + let data = JSON.stringify(resources, null, 2); + let res = yield this.client.patch(url, data, headers); + return this._processResponse(res, options); + }); + } + /** + * Replaces resource(s) from an endpoint + * T type of object returned. + * Be aware that not found returns a null. Other error conditions reject the promise + * @param {string} resource - fully qualified or relative url + * @param {IRequestOptions} requestOptions - (optional) requestOptions object + */ + replace(resource, resources, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(resource, this._baseUrl); + let headers = this._headersFromOptions(options, true); + let data = JSON.stringify(resources, null, 2); + let res = yield this.client.put(url, data, headers); + return this._processResponse(res, options); + }); + } + uploadStream(verb, requestUrl, stream, options) { + return __awaiter(this, void 0, void 0, function* () { + let url = util.getUrl(requestUrl, this._baseUrl); + let headers = this._headersFromOptions(options, true); + let res = yield this.client.sendStream(verb, url, stream, headers); + return this._processResponse(res, options); + }); + } + _headersFromOptions(options, contentType) { + options = options || {}; + let headers = options.additionalHeaders || {}; + headers["Accept"] = options.acceptHeader || "application/json"; + if (contentType) { + let found = false; + for (let header in headers) { + if (header.toLowerCase() == "content-type") { + found = true; + } + } + if (!found) { + headers["Content-Type"] = 'application/json; charset=utf-8'; + } + } + return headers; + } + static dateTimeDeserializer(key, value) { + if (typeof value === 'string') { + let a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + _processResponse(res, options) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { + const statusCode = res.message.statusCode; + const response = { + statusCode: statusCode, + result: null, + headers: {} + }; + // not found leads to null obj returned + if (statusCode == httpm.HttpCodes.NotFound) { + resolve(response); + } + let obj; + let contents; + // get the result from the body + try { + contents = yield res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, RestClient.dateTimeDeserializer); + } + else { + obj = JSON.parse(contents); + } + if (options && options.responseProcessor) { + response.result = options.responseProcessor(obj); + } + else { + response.result = obj; + } + } + response.headers = res.message.headers; + } + catch (err) { + // Invalid resource (contents not json); leaving result obj null + } + // note that 3xx redirects are handled by the http layer. + if (statusCode > 299) { + let msg; + // if exception/error in body, attempt to get better error + if (obj && obj.message) { + msg = obj.message; + } + else if (contents && contents.length > 0) { + // it may be the case that the exception is in the body message as string + msg = contents; + } + else { + msg = "Failed request: (" + statusCode + ")"; + } + let err = new Error(msg); + // attach statusCode and body obj (if available) to the error object + err['statusCode'] = statusCode; + if (response.result) { + err['result'] = response.result; + } + reject(err); + } + else { + resolve(response); + } + })); + }); + } +} +exports.RestClient = RestClient; diff --git a/node_modules/typed-rest-client/ThirdPartyNotice.txt b/node_modules/typed-rest-client/ThirdPartyNotice.txt new file mode 100644 index 0000000..7bd6774 --- /dev/null +++ b/node_modules/typed-rest-client/ThirdPartyNotice.txt @@ -0,0 +1,1318 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +This Visual Studio Team Services extension (vsts-task-lib) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Visual Studio Team Services extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise. + +1. @types/glob (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +2. @types/minimatch (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +3. @types/mocha (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +4. @types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +5. @types/shelljs (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +6. balanced-match (git://github.com/juliangruber/balanced-match.git) +7. brace-expansion (git://github.com/juliangruber/brace-expansion.git) +8. browser-stdout (git+ssh://git@github.com/kumavis/browser-stdout.git) +9. commander (git+https://github.com/tj/commander.js.git) +10. concat-map (git://github.com/substack/node-concat-map.git) +11. debug (git://github.com/visionmedia/debug.git) +12. diff (git://github.com/kpdecker/jsdiff.git) +13. escape-string-regexp (git+https://github.com/sindresorhus/escape-string-regexp.git) +14. fs.realpath (git+https://github.com/isaacs/fs.realpath.git) +15. glob (git://github.com/isaacs/node-glob.git) +16. graceful-readlink (git://github.com/zhiyelee/graceful-readlink.git) +17. growl (git://github.com/tj/node-growl.git) +18. has-flag (git+https://github.com/sindresorhus/has-flag.git) +19. he (git+https://github.com/mathiasbynens/he.git) +20. inflight (git+https://github.com/npm/inflight.git) +21. inherits (git://github.com/isaacs/inherits.git) +22. interpret (git://github.com/tkellen/node-interpret.git) +23. json3 (git://github.com/bestiejs/json3.git) +24. lodash.create (git+https://github.com/lodash/lodash.git) +25. lodash.isarguments (git+https://github.com/lodash/lodash.git) +26. lodash.isarray (git+https://github.com/lodash/lodash.git) +27. lodash.keys (git+https://github.com/lodash/lodash.git) +28. lodash._baseassign (git+https://github.com/lodash/lodash.git) +29. lodash._basecopy (git+https://github.com/lodash/lodash.git) +30. lodash._basecreate (git+https://github.com/lodash/lodash.git) +31. lodash._getnative (git+https://github.com/lodash/lodash.git) +32. lodash._isiterateecall (git+https://github.com/lodash/lodash.git) +33. minimatch (git://github.com/isaacs/minimatch.git) +34. minimist (git://github.com/substack/minimist.git) +35. mkdirp (git+https://github.com/substack/node-mkdirp.git) +36. mocha (git+https://github.com/mochajs/mocha.git) +37. ms (git+https://github.com/zeit/ms.git) +38. once (git://github.com/isaacs/once.git) +39. path-is-absolute (git+https://github.com/sindresorhus/path-is-absolute.git) +40. path-parse (git+https://github.com/jbgutierrez/path-parse.git) +41. rechoir (git://github.com/tkellen/node-rechoir.git) +42. resolve (git://github.com/substack/node-resolve.git) +43. semver (git://github.com/npm/node-semver.git) +44. shelljs (git://github.com/shelljs/shelljs.git) +45. supports-color (git+https://github.com/chalk/supports-color.git) +46. tunnel (git+https://github.com/koichik/node-tunnel.git) +47. typescript (git+https://github.com/Microsoft/TypeScript.git) +48. underscore (git://github.com/jashkenas/underscore.git) +49. wrappy (git+https://github.com/npm/wrappy.git) + + +%% @types/glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/glob NOTICES, INFORMATION, AND LICENSE + +%% @types/minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/minimatch NOTICES, INFORMATION, AND LICENSE + +%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/mocha NOTICES, INFORMATION, AND LICENSE + +%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/node NOTICES, INFORMATION, AND LICENSE + +%% @types/shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +MIT License + + Copyright (c) Microsoft Corporation. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE +========================================= +END OF @types/shelljs NOTICES, INFORMATION, AND LICENSE + +%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF balanced-match NOTICES, INFORMATION, AND LICENSE + +%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +No license text available. +========================================= +END OF brace-expansion NOTICES, INFORMATION, AND LICENSE + +%% browser-stdout NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +No license text available. +========================================= +END OF browser-stdout NOTICES, INFORMATION, AND LICENSE + +%% commander NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF commander NOTICES, INFORMATION, AND LICENSE + +%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF concat-map NOTICES, INFORMATION, AND LICENSE + +%% debug NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca> + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF debug NOTICES, INFORMATION, AND LICENSE + +%% diff NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Software License Agreement (BSD License) + +Copyright (c) 2009-2015, Kevin Decker <kpdecker@gmail.com> + +All rights reserved. + +Redistribution and use of this software in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of Kevin Decker nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF diff NOTICES, INFORMATION, AND LICENSE + +%% escape-string-regexp NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF escape-string-regexp NOTICES, INFORMATION, AND LICENSE + +%% fs.realpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---- + +This library bundles a version of the `fs.realpath` and `fs.realpathSync` +methods from Node.js v0.10 under the terms of the Node.js MIT license. + +Node's license follows, also included at the header of `old.js` which contains +the licensed code: + + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +========================================= +END OF fs.realpath NOTICES, INFORMATION, AND LICENSE + +%% glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF glob NOTICES, INFORMATION, AND LICENSE + +%% graceful-readlink NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2015 Zhiye Li + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF graceful-readlink NOTICES, INFORMATION, AND LICENSE + +%% growl NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +No license text available. +========================================= +END OF growl NOTICES, INFORMATION, AND LICENSE + +%% has-flag NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF has-flag NOTICES, INFORMATION, AND LICENSE + +%% he NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright Mathias Bynens <https://mathiasbynens.be/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF he NOTICES, INFORMATION, AND LICENSE + +%% inflight NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF inflight NOTICES, INFORMATION, AND LICENSE + +%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF inherits NOTICES, INFORMATION, AND LICENSE + +%% interpret NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Tyler Kellen + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF interpret NOTICES, INFORMATION, AND LICENSE + +%% json3 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012-2014 Kit Cambridge. +http://kitcambridge.be/ + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF json3 NOTICES, INFORMATION, AND LICENSE + +%% lodash.create NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash.create NOTICES, INFORMATION, AND LICENSE + +%% lodash.isarguments NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright jQuery Foundation and other contributors <https://jquery.org/> + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. +========================================= +END OF lodash.isarguments NOTICES, INFORMATION, AND LICENSE + +%% lodash.isarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash.isarray NOTICES, INFORMATION, AND LICENSE + +%% lodash.keys NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash.keys NOTICES, INFORMATION, AND LICENSE + +%% lodash._baseassign NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash._baseassign NOTICES, INFORMATION, AND LICENSE + +%% lodash._basecopy NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash._basecopy NOTICES, INFORMATION, AND LICENSE + +%% lodash._basecreate NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash._basecreate NOTICES, INFORMATION, AND LICENSE + +%% lodash._getnative NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash._getnative NOTICES, INFORMATION, AND LICENSE + +%% lodash._isiterateecall NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/> +Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF lodash._isiterateecall NOTICES, INFORMATION, AND LICENSE + +%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF minimatch NOTICES, INFORMATION, AND LICENSE + +%% minimist NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF minimist NOTICES, INFORMATION, AND LICENSE + +%% mkdirp NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF mkdirp NOTICES, INFORMATION, AND LICENSE + +%% mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (c) 2011-2017 JS Foundation and contributors, https://js.foundation + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF mocha NOTICES, INFORMATION, AND LICENSE + +%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2016 Zeit, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF ms NOTICES, INFORMATION, AND LICENSE + +%% once NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF once NOTICES, INFORMATION, AND LICENSE + +%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF path-is-absolute NOTICES, INFORMATION, AND LICENSE + +%% path-parse NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +No license text available. +========================================= +END OF path-parse NOTICES, INFORMATION, AND LICENSE + +%% rechoir NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2015 Tyler Kellen + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF rechoir NOTICES, INFORMATION, AND LICENSE + +%% resolve NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF resolve NOTICES, INFORMATION, AND LICENSE + +%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) Isaac Z. Schlueter ("Author") +All rights reserved. + +The BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF semver NOTICES, INFORMATION, AND LICENSE + +%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012, Artur Adib <arturadib@gmail.com> +All rights reserved. + +You may use this project under the terms of the New BSD license as follows: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Artur Adib nor the + names of the contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF shelljs NOTICES, INFORMATION, AND LICENSE + +%% supports-color NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF supports-color NOTICES, INFORMATION, AND LICENSE + +%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2012 Koichi Kobayashi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF tunnel NOTICES, INFORMATION, AND LICENSE + +%% typescript NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and + +You must cause any modified files to carry prominent notices stating that You changed the files; and + +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS +========================================= +END OF typescript NOTICES, INFORMATION, AND LICENSE + +%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative +Reporters & Editors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF underscore NOTICES, INFORMATION, AND LICENSE + +%% wrappy NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +========================================= +END OF wrappy NOTICES, INFORMATION, AND LICENSE + diff --git a/node_modules/typed-rest-client/Util.d.ts b/node_modules/typed-rest-client/Util.d.ts new file mode 100644 index 0000000..32757e8 --- /dev/null +++ b/node_modules/typed-rest-client/Util.d.ts @@ -0,0 +1,7 @@ +/** + * creates an url from a request url and optional base url (http://server:8080) + * @param {string} resource - a fully qualified url or relative path + * @param {string} baseUrl - an optional baseUrl (http://server:8080) + * @return {string} - resultant url + */ +export declare function getUrl(resource: string, baseUrl?: string): string; diff --git a/node_modules/typed-rest-client/Util.js b/node_modules/typed-rest-client/Util.js new file mode 100644 index 0000000..32981d1 --- /dev/null +++ b/node_modules/typed-rest-client/Util.js @@ -0,0 +1,35 @@ +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +const url = require("url"); +const path = require("path"); +/** + * creates an url from a request url and optional base url (http://server:8080) + * @param {string} resource - a fully qualified url or relative path + * @param {string} baseUrl - an optional baseUrl (http://server:8080) + * @return {string} - resultant url + */ +function getUrl(resource, baseUrl) { + const pathApi = path.posix || path; + if (!baseUrl) { + return resource; + } + else if (!resource) { + return baseUrl; + } + else { + const base = url.parse(baseUrl); + const resultantUrl = url.parse(resource); + // resource (specific per request) elements take priority + resultantUrl.protocol = resultantUrl.protocol || base.protocol; + resultantUrl.auth = resultantUrl.auth || base.auth; + resultantUrl.host = resultantUrl.host || base.host; + resultantUrl.pathname = pathApi.resolve(base.pathname, resultantUrl.pathname); + if (!resultantUrl.pathname.endsWith('/') && resource.endsWith('/')) { + resultantUrl.pathname += '/'; + } + return url.format(resultantUrl); + } +} +exports.getUrl = getUrl; diff --git a/node_modules/typed-rest-client/handlers/basiccreds.d.ts b/node_modules/typed-rest-client/handlers/basiccreds.d.ts new file mode 100644 index 0000000..17ade55 --- /dev/null +++ b/node_modules/typed-rest-client/handlers/basiccreds.d.ts @@ -0,0 +1,9 @@ +import ifm = require('../Interfaces'); +export declare class BasicCredentialHandler implements ifm.IRequestHandler { + username: string; + password: string; + constructor(username: string, password: string); + prepareRequest(options: any): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>; +} diff --git a/node_modules/typed-rest-client/handlers/basiccreds.js b/node_modules/typed-rest-client/handlers/basiccreds.js new file mode 100644 index 0000000..384a39c --- /dev/null +++ b/node_modules/typed-rest-client/handlers/basiccreds.js @@ -0,0 +1,24 @@ +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +class BasicCredentialHandler { + constructor(username, password) { + this.username = username; + this.password = password; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + options.headers['Authorization'] = 'Basic ' + new Buffer(this.username + ':' + this.password).toString('base64'); + options.headers['X-TFS-FedAuthRedirect'] = 'Suppress'; + } + // This handler cannot handle 401 + canHandleAuthentication(response) { + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return null; + } +} +exports.BasicCredentialHandler = BasicCredentialHandler; diff --git a/node_modules/typed-rest-client/handlers/bearertoken.d.ts b/node_modules/typed-rest-client/handlers/bearertoken.d.ts new file mode 100644 index 0000000..c08496f --- /dev/null +++ b/node_modules/typed-rest-client/handlers/bearertoken.d.ts @@ -0,0 +1,8 @@ +import ifm = require('../Interfaces'); +export declare class BearerCredentialHandler implements ifm.IRequestHandler { + token: string; + constructor(token: string); + prepareRequest(options: any): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>; +} diff --git a/node_modules/typed-rest-client/handlers/bearertoken.js b/node_modules/typed-rest-client/handlers/bearertoken.js new file mode 100644 index 0000000..dad27a7 --- /dev/null +++ b/node_modules/typed-rest-client/handlers/bearertoken.js @@ -0,0 +1,23 @@ +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +class BearerCredentialHandler { + constructor(token) { + this.token = token; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + options.headers['Authorization'] = 'Bearer ' + this.token; + options.headers['X-TFS-FedAuthRedirect'] = 'Suppress'; + } + // This handler cannot handle 401 + canHandleAuthentication(response) { + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return null; + } +} +exports.BearerCredentialHandler = BearerCredentialHandler; diff --git a/node_modules/typed-rest-client/handlers/ntlm.d.ts b/node_modules/typed-rest-client/handlers/ntlm.d.ts new file mode 100644 index 0000000..2f509b0 --- /dev/null +++ b/node_modules/typed-rest-client/handlers/ntlm.d.ts @@ -0,0 +1,13 @@ +/// <reference types="node" /> +import ifm = require('../Interfaces'); +import http = require("http"); +export declare class NtlmCredentialHandler implements ifm.IRequestHandler { + private _ntlmOptions; + constructor(username: string, password: string, workstation?: string, domain?: string); + prepareRequest(options: http.RequestOptions): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>; + private handleAuthenticationPrivate(httpClient, requestInfo, objs, finalCallback); + private sendType1Message(httpClient, requestInfo, objs, finalCallback); + private sendType3Message(httpClient, requestInfo, objs, res, callback); +} diff --git a/node_modules/typed-rest-client/handlers/ntlm.js b/node_modules/typed-rest-client/handlers/ntlm.js new file mode 100644 index 0000000..5fbca82 --- /dev/null +++ b/node_modules/typed-rest-client/handlers/ntlm.js @@ -0,0 +1,137 @@ +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +const http = require("http"); +const https = require("https"); +const _ = require("underscore"); +const ntlm = require("../opensource/node-http-ntlm/ntlm"); +class NtlmCredentialHandler { + constructor(username, password, workstation, domain) { + this._ntlmOptions = {}; + this._ntlmOptions.username = username; + this._ntlmOptions.password = password; + if (domain !== undefined) { + this._ntlmOptions.domain = domain; + } + else { + this._ntlmOptions.domain = ''; + } + if (workstation !== undefined) { + this._ntlmOptions.workstation = workstation; + } + else { + this._ntlmOptions.workstation = ''; + } + } + prepareRequest(options) { + // No headers or options need to be set. We keep the credentials on the handler itself. + // If a (proxy) agent is set, remove it as we don't support proxy for NTLM at this time + if (options.agent) { + delete options.agent; + } + } + canHandleAuthentication(response) { + if (response && response.message && response.message.statusCode === 401) { + // Ensure that we're talking NTLM here + // Once we have the www-authenticate header, split it so we can ensure we can talk NTLM + const wwwAuthenticate = response.message.headers['www-authenticate']; + if (wwwAuthenticate) { + const mechanisms = wwwAuthenticate.split(', '); + const index = mechanisms.indexOf("NTLM"); + if (index >= 0) { + return true; + } + } + } + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return new Promise((resolve, reject) => { + const callbackForResult = function (err, res) { + if (err) { + reject(err); + } + // We have to readbody on the response before continuing otherwise there is a hang. + res.readBody().then(() => { + resolve(res); + }); + }; + this.handleAuthenticationPrivate(httpClient, requestInfo, objs, callbackForResult); + }); + } + handleAuthenticationPrivate(httpClient, requestInfo, objs, finalCallback) { + // Set up the headers for NTLM authentication + requestInfo.options = _.extend(requestInfo.options, { + username: this._ntlmOptions.username, + password: this._ntlmOptions.password, + domain: this._ntlmOptions.domain, + workstation: this._ntlmOptions.workstation + }); + if (httpClient.isSsl === true) { + requestInfo.options.agent = new https.Agent({ keepAlive: true }); + } + else { + requestInfo.options.agent = new http.Agent({ keepAlive: true }); + } + let self = this; + // The following pattern of sending the type1 message following immediately (in a setImmediate) is + // critical for the NTLM exchange to happen. If we removed setImmediate (or call in a different manner) + // the NTLM exchange will always fail with a 401. + this.sendType1Message(httpClient, requestInfo, objs, function (err, res) { + if (err) { + return finalCallback(err, null, null); + } + /// We have to readbody on the response before continuing otherwise there is a hang. + res.readBody().then(() => { + // It is critical that we have setImmediate here due to how connection requests are queued. + // If setImmediate is removed then the NTLM handshake will not work. + // setImmediate allows us to queue a second request on the same connection. If this second + // request is not queued on the connection when the first request finishes then node closes + // the connection. NTLM requires both requests to be on the same connection so we need this. + setImmediate(function () { + self.sendType3Message(httpClient, requestInfo, objs, res, finalCallback); + }); + }); + }); + } + // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js + sendType1Message(httpClient, requestInfo, objs, finalCallback) { + const type1msg = ntlm.createType1Message(this._ntlmOptions); + const type1options = { + headers: { + 'Connection': 'keep-alive', + 'Authorization': type1msg + }, + timeout: requestInfo.options.timeout || 0, + agent: requestInfo.httpModule, + }; + const type1info = {}; + type1info.httpModule = requestInfo.httpModule; + type1info.parsedUrl = requestInfo.parsedUrl; + type1info.options = _.extend(type1options, _.omit(requestInfo.options, 'headers')); + return httpClient.requestRawWithCallback(type1info, objs, finalCallback); + } + // The following method is an adaptation of code found at https://github.com/SamDecrock/node-http-ntlm/blob/master/httpntlm.js + sendType3Message(httpClient, requestInfo, objs, res, callback) { + if (!res.message.headers && !res.message.headers['www-authenticate']) { + throw new Error('www-authenticate not found on response of second request'); + } + const type2msg = ntlm.parseType2Message(res.message.headers['www-authenticate']); + const type3msg = ntlm.createType3Message(type2msg, this._ntlmOptions); + const type3options = { + headers: { + 'Authorization': type3msg, + 'Connection': 'Close' + }, + agent: requestInfo.httpModule, + }; + const type3info = {}; + type3info.httpModule = requestInfo.httpModule; + type3info.parsedUrl = requestInfo.parsedUrl; + type3options.headers = _.extend(type3options.headers, requestInfo.options.headers); + type3info.options = _.extend(type3options, _.omit(requestInfo.options, 'headers')); + return httpClient.requestRawWithCallback(type3info, objs, callback); + } +} +exports.NtlmCredentialHandler = NtlmCredentialHandler; diff --git a/node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts b/node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts new file mode 100644 index 0000000..4bb77fd --- /dev/null +++ b/node_modules/typed-rest-client/handlers/personalaccesstoken.d.ts @@ -0,0 +1,8 @@ +import ifm = require('../Interfaces'); +export declare class PersonalAccessTokenCredentialHandler implements ifm.IRequestHandler { + token: string; + constructor(token: string); + prepareRequest(options: any): void; + canHandleAuthentication(response: ifm.IHttpClientResponse): boolean; + handleAuthentication(httpClient: ifm.IHttpClient, requestInfo: ifm.IRequestInfo, objs: any): Promise<ifm.IHttpClientResponse>; +} diff --git a/node_modules/typed-rest-client/handlers/personalaccesstoken.js b/node_modules/typed-rest-client/handlers/personalaccesstoken.js new file mode 100644 index 0000000..4bb88f8 --- /dev/null +++ b/node_modules/typed-rest-client/handlers/personalaccesstoken.js @@ -0,0 +1,23 @@ +"use strict"; +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +Object.defineProperty(exports, "__esModule", { value: true }); +class PersonalAccessTokenCredentialHandler { + constructor(token) { + this.token = token; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + options.headers['Authorization'] = 'Basic ' + new Buffer('PAT:' + this.token).toString('base64'); + options.headers['X-TFS-FedAuthRedirect'] = 'Suppress'; + } + // This handler cannot handle 401 + canHandleAuthentication(response) { + return false; + } + handleAuthentication(httpClient, requestInfo, objs) { + return null; + } +} +exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; diff --git a/node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js b/node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js new file mode 100644 index 0000000..adf7602 --- /dev/null +++ b/node_modules/typed-rest-client/opensource/node-http-ntlm/ntlm.js @@ -0,0 +1,389 @@ +var crypto = require('crypto'); + +var flags = { + NTLM_NegotiateUnicode : 0x00000001, + NTLM_NegotiateOEM : 0x00000002, + NTLM_RequestTarget : 0x00000004, + NTLM_Unknown9 : 0x00000008, + NTLM_NegotiateSign : 0x00000010, + NTLM_NegotiateSeal : 0x00000020, + NTLM_NegotiateDatagram : 0x00000040, + NTLM_NegotiateLanManagerKey : 0x00000080, + NTLM_Unknown8 : 0x00000100, + NTLM_NegotiateNTLM : 0x00000200, + NTLM_NegotiateNTOnly : 0x00000400, + NTLM_Anonymous : 0x00000800, + NTLM_NegotiateOemDomainSupplied : 0x00001000, + NTLM_NegotiateOemWorkstationSupplied : 0x00002000, + NTLM_Unknown6 : 0x00004000, + NTLM_NegotiateAlwaysSign : 0x00008000, + NTLM_TargetTypeDomain : 0x00010000, + NTLM_TargetTypeServer : 0x00020000, + NTLM_TargetTypeShare : 0x00040000, + NTLM_NegotiateExtendedSecurity : 0x00080000, + NTLM_NegotiateIdentify : 0x00100000, + NTLM_Unknown5 : 0x00200000, + NTLM_RequestNonNTSessionKey : 0x00400000, + NTLM_NegotiateTargetInfo : 0x00800000, + NTLM_Unknown4 : 0x01000000, + NTLM_NegotiateVersion : 0x02000000, + NTLM_Unknown3 : 0x04000000, + NTLM_Unknown2 : 0x08000000, + NTLM_Unknown1 : 0x10000000, + NTLM_Negotiate128 : 0x20000000, + NTLM_NegotiateKeyExchange : 0x40000000, + NTLM_Negotiate56 : 0x80000000 +}; +var typeflags = { + NTLM_TYPE1_FLAGS : flags.NTLM_NegotiateUnicode + + flags.NTLM_NegotiateOEM + + flags.NTLM_RequestTarget + + flags.NTLM_NegotiateNTLM + + flags.NTLM_NegotiateOemDomainSupplied + + flags.NTLM_NegotiateOemWorkstationSupplied + + flags.NTLM_NegotiateAlwaysSign + + flags.NTLM_NegotiateExtendedSecurity + + flags.NTLM_NegotiateVersion + + flags.NTLM_Negotiate128 + + flags.NTLM_Negotiate56, + + NTLM_TYPE2_FLAGS : flags.NTLM_NegotiateUnicode + + flags.NTLM_RequestTarget + + flags.NTLM_NegotiateNTLM + + flags.NTLM_NegotiateAlwaysSign + + flags.NTLM_NegotiateExtendedSecurity + + flags.NTLM_NegotiateTargetInfo + + flags.NTLM_NegotiateVersion + + flags.NTLM_Negotiate128 + + flags.NTLM_Negotiate56 +}; + +function createType1Message(options){ + var domain = escape(options.domain.toUpperCase()); + var workstation = escape(options.workstation.toUpperCase()); + var protocol = 'NTLMSSP\0'; + + var BODY_LENGTH = 40; + + var type1flags = typeflags.NTLM_TYPE1_FLAGS; + if(!domain || domain === '') + type1flags = type1flags - flags.NTLM_NegotiateOemDomainSupplied; + + var pos = 0; + var buf = new Buffer(BODY_LENGTH + domain.length + workstation.length); + + + buf.write(protocol, pos, protocol.length); pos += protocol.length; // protocol + buf.writeUInt32LE(1, pos); pos += 4; // type 1 + buf.writeUInt32LE(type1flags, pos); pos += 4; // TYPE1 flag + + buf.writeUInt16LE(domain.length, pos); pos += 2; // domain length + buf.writeUInt16LE(domain.length, pos); pos += 2; // domain max length + buf.writeUInt32LE(BODY_LENGTH + workstation.length, pos); pos += 4; // domain buffer offset + + buf.writeUInt16LE(workstation.length, pos); pos += 2; // workstation length + buf.writeUInt16LE(workstation.length, pos); pos += 2; // workstation max length + buf.writeUInt32LE(BODY_LENGTH, pos); pos += 4; // workstation buffer offset + + buf.writeUInt8(5, pos); pos += 1; //ProductMajorVersion + buf.writeUInt8(1, pos); pos += 1; //ProductMinorVersion + buf.writeUInt16LE(2600, pos); pos += 2; //ProductBuild + + buf.writeUInt8(0 , pos); pos += 1; //VersionReserved1 + buf.writeUInt8(0 , pos); pos += 1; //VersionReserved2 + buf.writeUInt8(0 , pos); pos += 1; //VersionReserved3 + buf.writeUInt8(15, pos); pos += 1; //NTLMRevisionCurrent + + buf.write(workstation, pos, workstation.length, 'ascii'); pos += workstation.length; // workstation string + buf.write(domain , pos, domain.length , 'ascii'); pos += domain.length; + + return 'NTLM ' + buf.toString('base64'); +} + +function parseType2Message(rawmsg, callback){ + var match = rawmsg.match(/NTLM (.+)?/); + if(!match || !match[1]) + return callback(new Error("Couldn't find NTLM in the message type2 comming from the server")); + + var buf = new Buffer(match[1], 'base64'); + + var msg = {}; + + msg.signature = buf.slice(0, 8); + msg.type = buf.readInt16LE(8); + + if(msg.type != 2) + return callback(new Error("Server didn't return a type 2 message")); + + msg.targetNameLen = buf.readInt16LE(12); + msg.targetNameMaxLen = buf.readInt16LE(14); + msg.targetNameOffset = buf.readInt32LE(16); + msg.targetName = buf.slice(msg.targetNameOffset, msg.targetNameOffset + msg.targetNameMaxLen); + + msg.negotiateFlags = buf.readInt32LE(20); + msg.serverChallenge = buf.slice(24, 32); + msg.reserved = buf.slice(32, 40); + + if(msg.negotiateFlags & flags.NTLM_NegotiateTargetInfo){ + msg.targetInfoLen = buf.readInt16LE(40); + msg.targetInfoMaxLen = buf.readInt16LE(42); + msg.targetInfoOffset = buf.readInt32LE(44); + msg.targetInfo = buf.slice(msg.targetInfoOffset, msg.targetInfoOffset + msg.targetInfoLen); + } + return msg; +} + +function createType3Message(msg2, options){ + var nonce = msg2.serverChallenge; + var username = options.username; + var password = options.password; + var negotiateFlags = msg2.negotiateFlags; + + var isUnicode = negotiateFlags & flags.NTLM_NegotiateUnicode; + var isNegotiateExtendedSecurity = negotiateFlags & flags.NTLM_NegotiateExtendedSecurity; + + var BODY_LENGTH = 72; + + var domainName = escape(options.domain.toUpperCase()); + var workstation = escape(options.workstation.toUpperCase()); + + var workstationBytes, domainNameBytes, usernameBytes, encryptedRandomSessionKeyBytes; + + var encryptedRandomSessionKey = ""; + if(isUnicode){ + workstationBytes = new Buffer(workstation, 'utf16le'); + domainNameBytes = new Buffer(domainName, 'utf16le'); + usernameBytes = new Buffer(username, 'utf16le'); + encryptedRandomSessionKeyBytes = new Buffer(encryptedRandomSessionKey, 'utf16le'); + }else{ + workstationBytes = new Buffer(workstation, 'ascii'); + domainNameBytes = new Buffer(domainName, 'ascii'); + usernameBytes = new Buffer(username, 'ascii'); + encryptedRandomSessionKeyBytes = new Buffer(encryptedRandomSessionKey, 'ascii'); + } + + var lmChallengeResponse = calc_resp(create_LM_hashed_password_v1(password), nonce); + var ntChallengeResponse = calc_resp(create_NT_hashed_password_v1(password), nonce); + + if(isNegotiateExtendedSecurity){ + var pwhash = create_NT_hashed_password_v1(password); + var clientChallenge = ""; + for(var i=0; i < 8; i++){ + clientChallenge += String.fromCharCode( Math.floor(Math.random()*256) ); + } + var clientChallengeBytes = new Buffer(clientChallenge, 'ascii'); + var challenges = ntlm2sr_calc_resp(pwhash, nonce, clientChallengeBytes); + lmChallengeResponse = challenges.lmChallengeResponse; + ntChallengeResponse = challenges.ntChallengeResponse; + } + + var signature = 'NTLMSSP\0'; + + var pos = 0; + var buf = new Buffer(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length + ntChallengeResponse.length + encryptedRandomSessionKeyBytes.length); + + buf.write(signature, pos, signature.length); pos += signature.length; + buf.writeUInt32LE(3, pos); pos += 4; // type 1 + + buf.writeUInt16LE(lmChallengeResponse.length, pos); pos += 2; // LmChallengeResponseLen + buf.writeUInt16LE(lmChallengeResponse.length, pos); pos += 2; // LmChallengeResponseMaxLen + buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length, pos); pos += 4; // LmChallengeResponseOffset + + buf.writeUInt16LE(ntChallengeResponse.length, pos); pos += 2; // NtChallengeResponseLen + buf.writeUInt16LE(ntChallengeResponse.length, pos); pos += 2; // NtChallengeResponseMaxLen + buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length, pos); pos += 4; // NtChallengeResponseOffset + + buf.writeUInt16LE(domainNameBytes.length, pos); pos += 2; // DomainNameLen + buf.writeUInt16LE(domainNameBytes.length, pos); pos += 2; // DomainNameMaxLen + buf.writeUInt32LE(BODY_LENGTH, pos); pos += 4; // DomainNameOffset + + buf.writeUInt16LE(usernameBytes.length, pos); pos += 2; // UserNameLen + buf.writeUInt16LE(usernameBytes.length, pos); pos += 2; // UserNameMaxLen + buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length, pos); pos += 4; // UserNameOffset + + buf.writeUInt16LE(workstationBytes.length, pos); pos += 2; // WorkstationLen + buf.writeUInt16LE(workstationBytes.length, pos); pos += 2; // WorkstationMaxLen + buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length, pos); pos += 4; // WorkstationOffset + + buf.writeUInt16LE(encryptedRandomSessionKeyBytes.length, pos); pos += 2; // EncryptedRandomSessionKeyLen + buf.writeUInt16LE(encryptedRandomSessionKeyBytes.length, pos); pos += 2; // EncryptedRandomSessionKeyMaxLen + buf.writeUInt32LE(BODY_LENGTH + domainNameBytes.length + usernameBytes.length + workstationBytes.length + lmChallengeResponse.length + ntChallengeResponse.length, pos); pos += 4; // EncryptedRandomSessionKeyOffset + + buf.writeUInt32LE(typeflags.NTLM_TYPE2_FLAGS, pos); pos += 4; // NegotiateFlags + + buf.writeUInt8(5, pos); pos++; // ProductMajorVersion + buf.writeUInt8(1, pos); pos++; // ProductMinorVersion + buf.writeUInt16LE(2600, pos); pos += 2; // ProductBuild + buf.writeUInt8(0, pos); pos++; // VersionReserved1 + buf.writeUInt8(0, pos); pos++; // VersionReserved2 + buf.writeUInt8(0, pos); pos++; // VersionReserved3 + buf.writeUInt8(15, pos); pos++; // NTLMRevisionCurrent + + domainNameBytes.copy(buf, pos); pos += domainNameBytes.length; + usernameBytes.copy(buf, pos); pos += usernameBytes.length; + workstationBytes.copy(buf, pos); pos += workstationBytes.length; + lmChallengeResponse.copy(buf, pos); pos += lmChallengeResponse.length; + ntChallengeResponse.copy(buf, pos); pos += ntChallengeResponse.length; + encryptedRandomSessionKeyBytes.copy(buf, pos); pos += encryptedRandomSessionKeyBytes.length; + + return 'NTLM ' + buf.toString('base64'); +} + +function create_LM_hashed_password_v1(password){ + // fix the password length to 14 bytes + password = password.toUpperCase(); + var passwordBytes = new Buffer(password, 'ascii'); + + var passwordBytesPadded = new Buffer(14); + passwordBytesPadded.fill("\0"); + var sourceEnd = 14; + if(passwordBytes.length < 14) sourceEnd = passwordBytes.length; + passwordBytes.copy(passwordBytesPadded, 0, 0, sourceEnd); + + // split into 2 parts of 7 bytes: + var firstPart = passwordBytesPadded.slice(0,7); + var secondPart = passwordBytesPadded.slice(7); + + function encrypt(buf){ + var key = insertZerosEvery7Bits(buf); + var des = crypto.createCipheriv('DES-ECB', key, ''); + return des.update("KGS!@#$%"); // page 57 in [MS-NLMP]); + } + + var firstPartEncrypted = encrypt(firstPart); + var secondPartEncrypted = encrypt(secondPart); + + return Buffer.concat([firstPartEncrypted, secondPartEncrypted]); +} + +function insertZerosEvery7Bits(buf){ + var binaryArray = bytes2binaryArray(buf); + var newBinaryArray = []; + for(var i=0; i<binaryArray.length; i++){ + newBinaryArray.push(binaryArray[i]); + + if((i+1)%7 === 0){ + newBinaryArray.push(0); + } + } + return binaryArray2bytes(newBinaryArray); +} + +function bytes2binaryArray(buf){ + var hex2binary = { + 0: [0,0,0,0], + 1: [0,0,0,1], + 2: [0,0,1,0], + 3: [0,0,1,1], + 4: [0,1,0,0], + 5: [0,1,0,1], + 6: [0,1,1,0], + 7: [0,1,1,1], + 8: [1,0,0,0], + 9: [1,0,0,1], + A: [1,0,1,0], + B: [1,0,1,1], + C: [1,1,0,0], + D: [1,1,0,1], + E: [1,1,1,0], + F: [1,1,1,1] + }; + + var hexString = buf.toString('hex').toUpperCase(); + var array = []; + for(var i=0; i<hexString.length; i++){ + var hexchar = hexString.charAt(i); + array = array.concat(hex2binary[hexchar]); + } + return array; +} + +function binaryArray2bytes(array){ + var binary2hex = { + '0000': 0, + '0001': 1, + '0010': 2, + '0011': 3, + '0100': 4, + '0101': 5, + '0110': 6, + '0111': 7, + '1000': 8, + '1001': 9, + '1010': 'A', + '1011': 'B', + '1100': 'C', + '1101': 'D', + '1110': 'E', + '1111': 'F' + }; + + var bufArray = []; + + for(var i=0; i<array.length; i +=8 ){ + if((i+7) > array.length) + break; + + var binString1 = '' + array[i] + '' + array[i+1] + '' + array[i+2] + '' + array[i+3]; + var binString2 = '' + array[i+4] + '' + array[i+5] + '' + array[i+6] + '' + array[i+7]; + var hexchar1 = binary2hex[binString1]; + var hexchar2 = binary2hex[binString2]; + + var buf = new Buffer(hexchar1 + '' + hexchar2, 'hex'); + bufArray.push(buf); + } + + return Buffer.concat(bufArray); +} + +function create_NT_hashed_password_v1(password){ + var buf = new Buffer(password, 'utf16le'); + var md4 = crypto.createHash('md4'); + md4.update(buf); + return new Buffer(md4.digest()); +} + +function calc_resp(password_hash, server_challenge){ + // padding with zeros to make the hash 21 bytes long + var passHashPadded = new Buffer(21); + passHashPadded.fill("\0"); + password_hash.copy(passHashPadded, 0, 0, password_hash.length); + + var resArray = []; + + var des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(0,7)), ''); + resArray.push( des.update(server_challenge.slice(0,8)) ); + + des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(7,14)), ''); + resArray.push( des.update(server_challenge.slice(0,8)) ); + + des = crypto.createCipheriv('DES-ECB', insertZerosEvery7Bits(passHashPadded.slice(14,21)), ''); + resArray.push( des.update(server_challenge.slice(0,8)) ); + + return Buffer.concat(resArray); +} + +function ntlm2sr_calc_resp(responseKeyNT, serverChallenge, clientChallenge){ + // padding with zeros to make the hash 16 bytes longer + var lmChallengeResponse = new Buffer(clientChallenge.length + 16); + lmChallengeResponse.fill("\0"); + clientChallenge.copy(lmChallengeResponse, 0, 0, clientChallenge.length); + + var buf = Buffer.concat([serverChallenge, clientChallenge]); + var md5 = crypto.createHash('md5'); + md5.update(buf); + var sess = md5.digest(); + var ntChallengeResponse = calc_resp(responseKeyNT, sess.slice(0,8)); + + return { + lmChallengeResponse: lmChallengeResponse, + ntChallengeResponse: ntChallengeResponse + }; +} + +exports.createType1Message = createType1Message; +exports.parseType2Message = parseType2Message; +exports.createType3Message = createType3Message; + + + diff --git a/node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt b/node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt new file mode 100644 index 0000000..b341600 --- /dev/null +++ b/node_modules/typed-rest-client/opensource/node-http-ntlm/readme.txt @@ -0,0 +1,6 @@ +// This software (ntlm.js) was copied from a file of the same name at https://github.com/SamDecrock/node-http-ntlm/blob/master/ntlm.js. +// +// As of this writing, it is a part of the node-http-ntlm module produced by SamDecrock. +// +// It is used as a part of the NTLM support provided by the vso-node-api library. +// diff --git a/node_modules/typed-rest-client/package.json b/node_modules/typed-rest-client/package.json new file mode 100644 index 0000000..27068e8 --- /dev/null +++ b/node_modules/typed-rest-client/package.json @@ -0,0 +1,73 @@ +{ + "_from": "typed-rest-client@^1.4.0", + "_id": "typed-rest-client@1.5.0", + "_inBundle": false, + "_integrity": "sha512-DVZRlmsfnTjp6ZJaatcdyvvwYwbWvR4YDNFDqb+qdTxpvaVP99YCpBkA8rxsLtAPjBVoDe4fNsnMIdZTiPuKWg==", + "_location": "/typed-rest-client", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "typed-rest-client@^1.4.0", + "name": "typed-rest-client", + "escapedName": "typed-rest-client", + "rawSpec": "^1.4.0", + "saveSpec": null, + "fetchSpec": "^1.4.0" + }, + "_requiredBy": [ + "/@actions/tool-cache" + ], + "_resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.5.0.tgz", + "_shasum": "c0dda6e775b942fd46a2d99f2160a94953206fc2", + "_spec": "typed-rest-client@^1.4.0", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-tool-cache-0.0.0.tgz", + "author": { + "name": "Microsoft Corporation" + }, + "bugs": { + "url": "https://github.com/Microsoft/typed-rest-client/issues" + }, + "bundleDependencies": false, + "dependencies": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + }, + "deprecated": false, + "description": "Node Rest and Http Clients for use with TypeScript", + "devDependencies": { + "@types/mocha": "^2.2.44", + "@types/node": "^6.0.92", + "@types/shelljs": "0.7.4", + "mocha": "^3.5.3", + "nock": "9.6.1", + "react-scripts": "1.1.5", + "semver": "4.3.3", + "shelljs": "0.7.6", + "typescript": "3.1.5" + }, + "homepage": "https://github.com/Microsoft/typed-rest-client#readme", + "keywords": [ + "rest", + "http", + "client", + "typescript", + "node" + ], + "license": "MIT", + "main": "./RestClient.js", + "name": "typed-rest-client", + "repository": { + "type": "git", + "url": "git+https://github.com/Microsoft/typed-rest-client.git" + }, + "scripts": { + "bt": "node make.js buildtest", + "build": "node make.js build", + "samples": "node make.js samples", + "test": "node make.js test", + "units": "node make.js units", + "validate": "node make.js validate" + }, + "version": "1.5.0" +} diff --git a/node_modules/underscore/LICENSE b/node_modules/underscore/LICENSE new file mode 100644 index 0000000..ad0e71b --- /dev/null +++ b/node_modules/underscore/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative +Reporters & Editors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/underscore/README.md b/node_modules/underscore/README.md new file mode 100644 index 0000000..c2ba259 --- /dev/null +++ b/node_modules/underscore/README.md @@ -0,0 +1,22 @@ + __ + /\ \ __ + __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____ + /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\ + \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\ + \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/ + \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/ + \ \____/ + \/___/ + +Underscore.js is a utility-belt library for JavaScript that provides +support for the usual functional suspects (each, map, reduce, filter...) +without extending any core JavaScript objects. + +For Docs, License, Tests, and pre-packed downloads, see: +http://underscorejs.org + +Underscore is an open-sourced component of DocumentCloud: +https://github.com/documentcloud + +Many thanks to our contributors: +https://github.com/jashkenas/underscore/contributors diff --git a/node_modules/underscore/package.json b/node_modules/underscore/package.json new file mode 100644 index 0000000..162795a --- /dev/null +++ b/node_modules/underscore/package.json @@ -0,0 +1,73 @@ +{ + "_from": "underscore@1.8.3", + "_id": "underscore@1.8.3", + "_inBundle": false, + "_integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "_location": "/underscore", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "underscore@1.8.3", + "name": "underscore", + "escapedName": "underscore", + "rawSpec": "1.8.3", + "saveSpec": null, + "fetchSpec": "1.8.3" + }, + "_requiredBy": [ + "/typed-rest-client" + ], + "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "_shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022", + "_spec": "underscore@1.8.3", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node\\node_modules\\typed-rest-client", + "author": { + "name": "Jeremy Ashkenas", + "email": "jeremy@documentcloud.org" + }, + "bugs": { + "url": "https://github.com/jashkenas/underscore/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "JavaScript's functional programming helper library.", + "devDependencies": { + "docco": "*", + "eslint": "0.6.x", + "karma": "~0.12.31", + "karma-qunit": "~0.1.4", + "qunit-cli": "~0.2.0", + "uglify-js": "2.4.x" + }, + "files": [ + "underscore.js", + "underscore-min.js", + "underscore-min.map", + "LICENSE" + ], + "homepage": "http://underscorejs.org", + "keywords": [ + "util", + "functional", + "server", + "client", + "browser" + ], + "license": "MIT", + "main": "underscore.js", + "name": "underscore", + "repository": { + "type": "git", + "url": "git://github.com/jashkenas/underscore.git" + }, + "scripts": { + "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m --source-map underscore-min.map -o underscore-min.js", + "doc": "docco underscore.js", + "lint": "eslint underscore.js test/*.js", + "test": "npm run test-node && npm run lint", + "test-browser": "npm i karma-phantomjs-launcher && ./node_modules/karma/bin/karma start", + "test-node": "qunit-cli test/*.js" + }, + "version": "1.8.3" +} diff --git a/node_modules/underscore/underscore-min.js b/node_modules/underscore/underscore-min.js new file mode 100644 index 0000000..f01025b --- /dev/null +++ b/node_modules/underscore/underscore-min.js @@ -0,0 +1,6 @@ +// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. +(function(){function n(n){function t(t,r,e,u,i,o){for(;i>=0&&o>i;i+=n){var a=u?u[i]:i;e=r(e,t[a],a,t)}return e}return function(r,e,u,i){e=b(e,i,4);var o=!k(r)&&m.keys(r),a=(o||r).length,c=n>0?0:a-1;return arguments.length<3&&(u=r[o?o[c]:c],c+=n),t(r,e,u,o,c,a)}}function t(n){return function(t,r,e){r=x(r,e);for(var u=O(t),i=n>0?0:u-1;i>=0&&u>i;i+=n)if(r(t[i],i,t))return i;return-1}}function r(n,t,r){return function(e,u,i){var o=0,a=O(e);if("number"==typeof i)n>0?o=i>=0?i:Math.max(i+a,o):a=i>=0?Math.min(i+1,a):i+a+1;else if(r&&i&&a)return i=r(e,u),e[i]===u?i:-1;if(u!==u)return i=t(l.call(e,o,a),m.isNaN),i>=0?i+o:-1;for(i=n>0?o:a-1;i>=0&&a>i;i+=n)if(e[i]===u)return i;return-1}}function e(n,t){var r=I.length,e=n.constructor,u=m.isFunction(e)&&e.prototype||a,i="constructor";for(m.has(n,i)&&!m.contains(t,i)&&t.push(i);r--;)i=I[r],i in n&&n[i]!==u[i]&&!m.contains(t,i)&&t.push(i)}var u=this,i=u._,o=Array.prototype,a=Object.prototype,c=Function.prototype,f=o.push,l=o.slice,s=a.toString,p=a.hasOwnProperty,h=Array.isArray,v=Object.keys,g=c.bind,y=Object.create,d=function(){},m=function(n){return n instanceof m?n:this instanceof m?void(this._wrapped=n):new m(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=m),exports._=m):u._=m,m.VERSION="1.8.3";var b=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}},x=function(n,t,r){return null==n?m.identity:m.isFunction(n)?b(n,t,r):m.isObject(n)?m.matcher(n):m.property(n)};m.iteratee=function(n,t){return x(n,t,1/0)};var _=function(n,t){return function(r){var e=arguments.length;if(2>e||null==r)return r;for(var u=1;e>u;u++)for(var i=arguments[u],o=n(i),a=o.length,c=0;a>c;c++){var f=o[c];t&&r[f]!==void 0||(r[f]=i[f])}return r}},j=function(n){if(!m.isObject(n))return{};if(y)return y(n);d.prototype=n;var t=new d;return d.prototype=null,t},w=function(n){return function(t){return null==t?void 0:t[n]}},A=Math.pow(2,53)-1,O=w("length"),k=function(n){var t=O(n);return"number"==typeof t&&t>=0&&A>=t};m.each=m.forEach=function(n,t,r){t=b(t,r);var e,u;if(k(n))for(e=0,u=n.length;u>e;e++)t(n[e],e,n);else{var i=m.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},m.map=m.collect=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=Array(u),o=0;u>o;o++){var a=e?e[o]:o;i[o]=t(n[a],a,n)}return i},m.reduce=m.foldl=m.inject=n(1),m.reduceRight=m.foldr=n(-1),m.find=m.detect=function(n,t,r){var e;return e=k(n)?m.findIndex(n,t,r):m.findKey(n,t,r),e!==void 0&&e!==-1?n[e]:void 0},m.filter=m.select=function(n,t,r){var e=[];return t=x(t,r),m.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e},m.reject=function(n,t,r){return m.filter(n,m.negate(x(t)),r)},m.every=m.all=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(!t(n[o],o,n))return!1}return!0},m.some=m.any=function(n,t,r){t=x(t,r);for(var e=!k(n)&&m.keys(n),u=(e||n).length,i=0;u>i;i++){var o=e?e[i]:i;if(t(n[o],o,n))return!0}return!1},m.contains=m.includes=m.include=function(n,t,r,e){return k(n)||(n=m.values(n)),("number"!=typeof r||e)&&(r=0),m.indexOf(n,t,r)>=0},m.invoke=function(n,t){var r=l.call(arguments,2),e=m.isFunction(t);return m.map(n,function(n){var u=e?t:n[t];return null==u?u:u.apply(n,r)})},m.pluck=function(n,t){return m.map(n,m.property(t))},m.where=function(n,t){return m.filter(n,m.matcher(t))},m.findWhere=function(n,t){return m.find(n,m.matcher(t))},m.max=function(n,t,r){var e,u,i=-1/0,o=-1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],e>i&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(u>o||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},m.min=function(n,t,r){var e,u,i=1/0,o=1/0;if(null==t&&null!=n){n=k(n)?n:m.values(n);for(var a=0,c=n.length;c>a;a++)e=n[a],i>e&&(i=e)}else t=x(t,r),m.each(n,function(n,r,e){u=t(n,r,e),(o>u||1/0===u&&1/0===i)&&(i=n,o=u)});return i},m.shuffle=function(n){for(var t,r=k(n)?n:m.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=m.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},m.sample=function(n,t,r){return null==t||r?(k(n)||(n=m.values(n)),n[m.random(n.length-1)]):m.shuffle(n).slice(0,Math.max(0,t))},m.sortBy=function(n,t,r){return t=x(t,r),m.pluck(m.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={};return r=x(r,e),m.each(t,function(e,i){var o=r(e,i,t);n(u,e,o)}),u}};m.groupBy=F(function(n,t,r){m.has(n,r)?n[r].push(t):n[r]=[t]}),m.indexBy=F(function(n,t,r){n[r]=t}),m.countBy=F(function(n,t,r){m.has(n,r)?n[r]++:n[r]=1}),m.toArray=function(n){return n?m.isArray(n)?l.call(n):k(n)?m.map(n,m.identity):m.values(n):[]},m.size=function(n){return null==n?0:k(n)?n.length:m.keys(n).length},m.partition=function(n,t,r){t=x(t,r);var e=[],u=[];return m.each(n,function(n,r,i){(t(n,r,i)?e:u).push(n)}),[e,u]},m.first=m.head=m.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:m.initial(n,n.length-t)},m.initial=function(n,t,r){return l.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},m.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:m.rest(n,Math.max(0,n.length-t))},m.rest=m.tail=m.drop=function(n,t,r){return l.call(n,null==t||r?1:t)},m.compact=function(n){return m.filter(n,m.identity)};var S=function(n,t,r,e){for(var u=[],i=0,o=e||0,a=O(n);a>o;o++){var c=n[o];if(k(c)&&(m.isArray(c)||m.isArguments(c))){t||(c=S(c,t,r));var f=0,l=c.length;for(u.length+=l;l>f;)u[i++]=c[f++]}else r||(u[i++]=c)}return u};m.flatten=function(n,t){return S(n,t,!1)},m.without=function(n){return m.difference(n,l.call(arguments,1))},m.uniq=m.unique=function(n,t,r,e){m.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=x(r,e));for(var u=[],i=[],o=0,a=O(n);a>o;o++){var c=n[o],f=r?r(c,o,n):c;t?(o&&i===f||u.push(c),i=f):r?m.contains(i,f)||(i.push(f),u.push(c)):m.contains(u,c)||u.push(c)}return u},m.union=function(){return m.uniq(S(arguments,!0,!0))},m.intersection=function(n){for(var t=[],r=arguments.length,e=0,u=O(n);u>e;e++){var i=n[e];if(!m.contains(t,i)){for(var o=1;r>o&&m.contains(arguments[o],i);o++);o===r&&t.push(i)}}return t},m.difference=function(n){var t=S(arguments,!0,!0,1);return m.filter(n,function(n){return!m.contains(t,n)})},m.zip=function(){return m.unzip(arguments)},m.unzip=function(n){for(var t=n&&m.max(n,O).length||0,r=Array(t),e=0;t>e;e++)r[e]=m.pluck(n,e);return r},m.object=function(n,t){for(var r={},e=0,u=O(n);u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},m.findIndex=t(1),m.findLastIndex=t(-1),m.sortedIndex=function(n,t,r,e){r=x(r,e,1);for(var u=r(t),i=0,o=O(n);o>i;){var a=Math.floor((i+o)/2);r(n[a])<u?i=a+1:o=a}return i},m.indexOf=r(1,m.findIndex,m.sortedIndex),m.lastIndexOf=r(-1,m.findLastIndex),m.range=function(n,t,r){null==t&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var E=function(n,t,r,e,u){if(!(e instanceof t))return n.apply(r,u);var i=j(n.prototype),o=n.apply(i,u);return m.isObject(o)?o:i};m.bind=function(n,t){if(g&&n.bind===g)return g.apply(n,l.call(arguments,1));if(!m.isFunction(n))throw new TypeError("Bind must be called on a function");var r=l.call(arguments,2),e=function(){return E(n,e,t,this,r.concat(l.call(arguments)))};return e},m.partial=function(n){var t=l.call(arguments,1),r=function(){for(var e=0,u=t.length,i=Array(u),o=0;u>o;o++)i[o]=t[o]===m?arguments[e++]:t[o];for(;e<arguments.length;)i.push(arguments[e++]);return E(n,r,this,this,i)};return r},m.bindAll=function(n){var t,r,e=arguments.length;if(1>=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=m.bind(n[r],n);return n},m.memoize=function(n,t){var r=function(e){var u=r.cache,i=""+(t?t.apply(this,arguments):e);return m.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},m.delay=function(n,t){var r=l.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(n,t,r){var e,u,i,o=null,a=0;r||(r={});var c=function(){a=r.leading===!1?0:m.now(),o=null,i=n.apply(e,u),o||(e=u=null)};return function(){var f=m.now();a||r.leading!==!1||(a=f);var l=t-(f-a);return e=this,u=arguments,0>=l||l>t?(o&&(clearTimeout(o),o=null),a=f,i=n.apply(e,u),o||(e=u=null)):o||r.trailing===!1||(o=setTimeout(c,l)),i}},m.debounce=function(n,t,r){var e,u,i,o,a,c=function(){var f=m.now()-o;t>f&&f>=0?e=setTimeout(c,t-f):(e=null,r||(a=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,o=m.now();var f=r&&!e;return e||(e=setTimeout(c,t)),f&&(a=n.apply(i,u),i=u=null),a}},m.wrap=function(n,t){return m.partial(t,n)},m.negate=function(n){return function(){return!n.apply(this,arguments)}},m.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},m.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},m.before=function(n,t){var r;return function(){return--n>0&&(r=t.apply(this,arguments)),1>=n&&(t=null),r}},m.once=m.partial(m.before,2);var M=!{toString:null}.propertyIsEnumerable("toString"),I=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];m.keys=function(n){if(!m.isObject(n))return[];if(v)return v(n);var t=[];for(var r in n)m.has(n,r)&&t.push(r);return M&&e(n,t),t},m.allKeys=function(n){if(!m.isObject(n))return[];var t=[];for(var r in n)t.push(r);return M&&e(n,t),t},m.values=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},m.mapObject=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=u.length,o={},a=0;i>a;a++)e=u[a],o[e]=t(n[e],e,n);return o},m.pairs=function(n){for(var t=m.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},m.invert=function(n){for(var t={},r=m.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},m.functions=m.methods=function(n){var t=[];for(var r in n)m.isFunction(n[r])&&t.push(r);return t.sort()},m.extend=_(m.allKeys),m.extendOwn=m.assign=_(m.keys),m.findKey=function(n,t,r){t=x(t,r);for(var e,u=m.keys(n),i=0,o=u.length;o>i;i++)if(e=u[i],t(n[e],e,n))return e},m.pick=function(n,t,r){var e,u,i={},o=n;if(null==o)return i;m.isFunction(t)?(u=m.allKeys(o),e=b(t,r)):(u=S(arguments,!1,!1,1),e=function(n,t,r){return t in r},o=Object(o));for(var a=0,c=u.length;c>a;a++){var f=u[a],l=o[f];e(l,f,o)&&(i[f]=l)}return i},m.omit=function(n,t,r){if(m.isFunction(t))t=m.negate(t);else{var e=m.map(S(arguments,!1,!1,1),String);t=function(n,t){return!m.contains(e,t)}}return m.pick(n,t,r)},m.defaults=_(m.allKeys,!0),m.create=function(n,t){var r=j(n);return t&&m.extendOwn(r,t),r},m.clone=function(n){return m.isObject(n)?m.isArray(n)?n.slice():m.extend({},n):n},m.tap=function(n,t){return t(n),n},m.isMatch=function(n,t){var r=m.keys(t),e=r.length;if(null==n)return!e;for(var u=Object(n),i=0;e>i;i++){var o=r[i];if(t[o]!==u[o]||!(o in u))return!1}return!0};var N=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof m&&(n=n._wrapped),t instanceof m&&(t=t._wrapped);var u=s.call(n);if(u!==s.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof t)return!1;var o=n.constructor,a=t.constructor;if(o!==a&&!(m.isFunction(o)&&o instanceof o&&m.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[],e=e||[];for(var c=r.length;c--;)if(r[c]===n)return e[c]===t;if(r.push(n),e.push(t),i){if(c=n.length,c!==t.length)return!1;for(;c--;)if(!N(n[c],t[c],r,e))return!1}else{var f,l=m.keys(n);if(c=l.length,m.keys(t).length!==c)return!1;for(;c--;)if(f=l[c],!m.has(t,f)||!N(n[f],t[f],r,e))return!1}return r.pop(),e.pop(),!0};m.isEqual=function(n,t){return N(n,t)},m.isEmpty=function(n){return null==n?!0:k(n)&&(m.isArray(n)||m.isString(n)||m.isArguments(n))?0===n.length:0===m.keys(n).length},m.isElement=function(n){return!(!n||1!==n.nodeType)},m.isArray=h||function(n){return"[object Array]"===s.call(n)},m.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},m.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(n){m["is"+n]=function(t){return s.call(t)==="[object "+n+"]"}}),m.isArguments(arguments)||(m.isArguments=function(n){return m.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(m.isFunction=function(n){return"function"==typeof n||!1}),m.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},m.isNaN=function(n){return m.isNumber(n)&&n!==+n},m.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===s.call(n)},m.isNull=function(n){return null===n},m.isUndefined=function(n){return n===void 0},m.has=function(n,t){return null!=n&&p.call(n,t)},m.noConflict=function(){return u._=i,this},m.identity=function(n){return n},m.constant=function(n){return function(){return n}},m.noop=function(){},m.property=w,m.propertyOf=function(n){return null==n?function(){}:function(t){return n[t]}},m.matcher=m.matches=function(n){return n=m.extendOwn({},n),function(t){return m.isMatch(t,n)}},m.times=function(n,t,r){var e=Array(Math.max(0,n));t=b(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},m.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},m.now=Date.now||function(){return(new Date).getTime()};var B={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},T=m.invert(B),R=function(n){var t=function(t){return n[t]},r="(?:"+m.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};m.escape=R(B),m.unescape=R(T),m.result=function(n,t,r){var e=null==n?void 0:n[t];return e===void 0&&(e=r),m.isFunction(e)?e.call(n):e};var q=0;m.uniqueId=function(n){var t=++q+"";return n?n+t:t},m.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var K=/(.)^/,z={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\u2028|\u2029/g,L=function(n){return"\\"+z[n]};m.template=function(n,t,r){!t&&r&&(t=r),t=m.defaults({},t,m.templateSettings);var e=RegExp([(t.escape||K).source,(t.interpolate||K).source,(t.evaluate||K).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,o,a){return i+=n.slice(u,a).replace(D,L),u=a+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":o&&(i+="';\n"+o+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var o=new Function(t.variable||"obj","_",i)}catch(a){throw a.source=i,a}var c=function(n){return o.call(this,n,m)},f=t.variable||"obj";return c.source="function("+f+"){\n"+i+"}",c},m.chain=function(n){var t=m(n);return t._chain=!0,t};var P=function(n,t){return n._chain?m(t).chain():t};m.mixin=function(n){m.each(m.functions(n),function(t){var r=m[t]=n[t];m.prototype[t]=function(){var n=[this._wrapped];return f.apply(n,arguments),P(this,r.apply(m,n))}})},m.mixin(m),m.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=o[n];m.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],P(this,r)}}),m.each(["concat","join","slice"],function(n){var t=o[n];m.prototype[n]=function(){return P(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return""+this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return m})}).call(this); +//# sourceMappingURL=underscore-min.map \ No newline at end of file diff --git a/node_modules/underscore/underscore-min.map b/node_modules/underscore/underscore-min.map new file mode 100644 index 0000000..cf356bf --- /dev/null +++ b/node_modules/underscore/underscore-min.map @@ -0,0 +1 @@ +{"version":3,"file":"underscore-min.js","sources":["underscore.js"],"names":["createReduce","dir","iterator","obj","iteratee","memo","keys","index","length","currentKey","context","optimizeCb","isArrayLike","_","arguments","createPredicateIndexFinder","array","predicate","cb","getLength","createIndexFinder","predicateFind","sortedIndex","item","idx","i","Math","max","min","slice","call","isNaN","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","constructor","proto","isFunction","prototype","ObjProto","prop","has","contains","push","root","this","previousUnderscore","ArrayProto","Array","Object","FuncProto","Function","toString","hasOwnProperty","nativeIsArray","isArray","nativeKeys","nativeBind","bind","nativeCreate","create","Ctor","_wrapped","exports","module","VERSION","func","argCount","value","other","collection","accumulator","apply","identity","isObject","matcher","property","Infinity","createAssigner","keysFunc","undefinedOnly","source","l","key","baseCreate","result","MAX_ARRAY_INDEX","pow","each","forEach","map","collect","results","reduce","foldl","inject","reduceRight","foldr","find","detect","findIndex","findKey","filter","select","list","reject","negate","every","all","some","any","includes","include","fromIndex","guard","values","indexOf","invoke","method","args","isFunc","pluck","where","attrs","findWhere","computed","lastComputed","shuffle","rand","set","shuffled","random","sample","n","sortBy","criteria","sort","left","right","a","b","group","behavior","groupBy","indexBy","countBy","toArray","size","partition","pass","fail","first","head","take","initial","last","rest","tail","drop","compact","flatten","input","shallow","strict","startIndex","output","isArguments","j","len","without","difference","uniq","unique","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","object","findLastIndex","low","high","mid","floor","lastIndexOf","range","start","stop","step","ceil","executeBound","sourceFunc","boundFunc","callingContext","self","TypeError","bound","concat","partial","boundArgs","position","bindAll","Error","memoize","hasher","cache","address","delay","wait","setTimeout","defer","throttle","options","timeout","previous","later","leading","now","remaining","clearTimeout","trailing","debounce","immediate","timestamp","callNow","wrap","wrapper","compose","after","times","before","once","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","invert","functions","methods","names","extend","extendOwn","assign","pick","oiteratee","omit","String","defaults","props","clone","tap","interceptor","isMatch","eq","aStack","bStack","className","areArrays","aCtor","bCtor","pop","isEqual","isEmpty","isString","isElement","nodeType","type","name","Int8Array","isFinite","parseFloat","isNumber","isNull","isUndefined","noConflict","constant","noop","propertyOf","matches","accum","Date","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","test","replace","escape","unescape","fallback","idCounter","uniqueId","prefix","id","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","template","text","settings","oldSettings","offset","variable","render","e","data","argument","chain","instance","_chain","mixin","valueOf","toJSON","define","amd"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/underscore/underscore.js b/node_modules/underscore/underscore.js new file mode 100644 index 0000000..b29332f --- /dev/null +++ b/node_modules/underscore/underscore.js @@ -0,0 +1,1548 @@ +// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `exports` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var + push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object. + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.8.3'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + case 2: return function(value, other) { + return func.call(context, value, other); + }; + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + // A mostly-internal function to generate callbacks that can be applied + // to each element in a collection, returning the desired result — either + // identity, an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value)) return _.matcher(value); + return _.property(value); + }; + _.iteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, undefinedOnly) { + return function(obj) { + var length = arguments.length; + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var property = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = property('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + function createReduce(dir) { + // Optimized iterator function as using arguments.length + // in the main function will deoptimize the, see #1991. + function iterator(obj, iteratee, memo, keys, index, length) { + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + } + + return function(obj, iteratee, memo, context) { + iteratee = optimizeCb(iteratee, context, 4); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + // Determine the initial value if none is provided. + if (arguments.length < 3) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + return iterator(obj, iteratee, memo, keys, index, length); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var key; + if (isArrayLike(obj)) { + key = _.findIndex(obj, predicate, context); + } else { + key = _.findKey(obj, predicate, context); + } + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + var func = isFunc ? method : value[method]; + return func == null ? func : func.apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = value; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + _.shuffle = function(obj) { + var set = isArrayLike(obj) ? obj : _.values(obj); + var length = set.length; + var shuffled = Array(length); + for (var index = 0, rand; index < length; index++) { + rand = _.random(0, index); + if (rand !== index) shuffled[index] = shuffled[rand]; + shuffled[rand] = set[index]; + } + return shuffled; + }; + + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value: value, + index: index, + criteria: iteratee(value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior) { + return function(obj, iteratee, context) { + var result = {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); + + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(obj, predicate, context) { + predicate = cb(predicate, context); + var pass = [], fail = []; + _.each(obj, function(value, key, obj) { + (predicate(value, key, obj) ? pass : fail).push(value); + }); + return [pass, fail]; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, startIndex) { + var output = [], idx = 0; + for (var i = startIndex || 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + //flatten current level of array or arguments object + if (!shallow) value = flatten(value, shallow, strict); + var j = 0, len = value.length; + output.length += len; + while (j < len) { + output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(flatten(arguments, true, true)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + for (var j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = flatten(arguments, true, true, 1); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + return _.unzip(arguments); + }; + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a predicate test + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + step = step || 1; + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var args = slice.call(arguments, 2); + var bound = function() { + return executeBound(func, bound, context, this, args.concat(slice.call(arguments))); + }; + return bound; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. + _.partial = function(func) { + var boundArgs = slice.call(arguments, 1); + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = function(obj) { + var i, length = arguments.length, key; + if (length <= 1) throw new Error('bindAll must be passed function names'); + for (i = 1; i < length; i++) { + key = arguments[i]; + obj[key] = _.bind(obj[key], obj); + } + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ + return func.apply(null, args); + }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + + if (last < wait && last >= 0) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } + }; + + return function() { + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + function collectNonEnumProps(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object + // In contrast to _.map it returns an object + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}, + currentKey; + for (var index = 0; index < length; index++) { + currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s) + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(object, oiteratee, context) { + var result = {}, obj = object, iteratee, keys; + if (obj == null) return result; + if (_.isFunction(oiteratee)) { + keys = _.allKeys(obj); + iteratee = optimizeCb(oiteratee, context); + } else { + keys = flatten(arguments, false, false, 1); + iteratee = function(value, key, obj) { return key in obj; }; + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj, iteratee, context) { + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + } else { + var keys = _.map(flatten(arguments, false, false, 1), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }; + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return _.has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), and in Safari 8 (#1929). + if (typeof /./ != 'function' && typeof Int8Array != 'object') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj !== +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + _.property = property; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + return obj == null ? function(){} : function(key) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. + _.result = function(object, property, fallback) { + var value = object == null ? void 0 : object[property]; + if (value === void 0) { + value = fallback; + } + return _.isFunction(value) ? value.call(object) : value; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escaper, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offest. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + try { + var render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result(this, func.apply(_, args)); + }; + }); + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return result(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return '' + this._wrapped; + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (typeof define === 'function' && define.amd) { + define('underscore', [], function() { + return _; + }); + } +}.call(this)); diff --git a/node_modules/uuid/.eslintrc.json b/node_modules/uuid/.eslintrc.json new file mode 100644 index 0000000..734a8e1 --- /dev/null +++ b/node_modules/uuid/.eslintrc.json @@ -0,0 +1,47 @@ +{ + "root": true, + "env": { + "browser": true, + "commonjs": true, + "node": true, + "mocha": true + }, + "extends": ["eslint:recommended"], + "rules": { + "array-bracket-spacing": ["warn", "never"], + "arrow-body-style": ["warn", "as-needed"], + "arrow-parens": ["warn", "as-needed"], + "arrow-spacing": "warn", + "brace-style": ["warn", "1tbs"], + "camelcase": "warn", + "comma-spacing": ["warn", {"after": true}], + "dot-notation": "warn", + "eqeqeq": ["warn", "smart"], + "indent": ["warn", 2, { + "SwitchCase": 1, + "FunctionDeclaration": {"parameters": 1}, + "MemberExpression": 1, + "CallExpression": {"arguments": 1} + }], + "key-spacing": ["warn", {"beforeColon": false, "afterColon": true, "mode": "minimum"}], + "keyword-spacing": "warn", + "no-console": "off", + "no-empty": "off", + "no-multi-spaces": "warn", + "no-redeclare": "off", + "no-restricted-globals": ["warn", "Promise"], + "no-trailing-spaces": "warn", + "no-undef": "error", + "no-unused-vars": ["warn", {"args": "none"}], + "one-var": ["warn", "never"], + "padded-blocks": ["warn", "never"], + "object-curly-spacing": ["warn", "never"], + "quotes": ["warn", "single"], + "react/prop-types": "off", + "react/jsx-no-bind": "off", + "semi": ["warn", "always"], + "space-before-blocks": ["warn", "always"], + "space-before-function-paren": ["warn", "never"], + "space-in-parens": ["warn", "never"] + } +} diff --git a/node_modules/uuid/AUTHORS b/node_modules/uuid/AUTHORS new file mode 100644 index 0000000..5a10523 --- /dev/null +++ b/node_modules/uuid/AUTHORS @@ -0,0 +1,5 @@ +Robert Kieffer <robert@broofa.com> +Christoph Tavan <dev@tavan.de> +AJ ONeal <coolaj86@gmail.com> +Vincent Voyer <vincent@zeroload.net> +Roman Shtylman <shtylman@gmail.com> diff --git a/node_modules/uuid/CHANGELOG.md b/node_modules/uuid/CHANGELOG.md new file mode 100644 index 0000000..f29d399 --- /dev/null +++ b/node_modules/uuid/CHANGELOG.md @@ -0,0 +1,110 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +<a name="3.3.2"></a> +## [3.3.2](https://github.com/kelektiv/node-uuid/compare/v3.3.1...v3.3.2) (2018-06-28) + + +### Bug Fixes + +* typo ([305d877](https://github.com/kelektiv/node-uuid/commit/305d877)) + + + +<a name="3.3.1"></a> +## [3.3.1](https://github.com/kelektiv/node-uuid/compare/v3.3.0...v3.3.1) (2018-06-28) + + +### Bug Fixes + +* fix [#284](https://github.com/kelektiv/node-uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/kelektiv/node-uuid/commit/f2a60f2)) + + + +<a name="3.3.0"></a> +# [3.3.0](https://github.com/kelektiv/node-uuid/compare/v3.2.1...v3.3.0) (2018-06-22) + + +### Bug Fixes + +* assignment to readonly property to allow running in strict mode ([#270](https://github.com/kelektiv/node-uuid/issues/270)) ([d062fdc](https://github.com/kelektiv/node-uuid/commit/d062fdc)) +* fix [#229](https://github.com/kelektiv/node-uuid/issues/229) ([c9684d4](https://github.com/kelektiv/node-uuid/commit/c9684d4)) +* Get correct version of IE11 crypto ([#274](https://github.com/kelektiv/node-uuid/issues/274)) ([153d331](https://github.com/kelektiv/node-uuid/commit/153d331)) +* mem issue when generating uuid ([#267](https://github.com/kelektiv/node-uuid/issues/267)) ([c47702c](https://github.com/kelektiv/node-uuid/commit/c47702c)) + +### Features + +* enforce Conventional Commit style commit messages ([#282](https://github.com/kelektiv/node-uuid/issues/282)) ([cc9a182](https://github.com/kelektiv/node-uuid/commit/cc9a182)) + + +<a name="3.2.1"></a> +## [3.2.1](https://github.com/kelektiv/node-uuid/compare/v3.2.0...v3.2.1) (2018-01-16) + + +### Bug Fixes + +* use msCrypto if available. Fixes [#241](https://github.com/kelektiv/node-uuid/issues/241) ([#247](https://github.com/kelektiv/node-uuid/issues/247)) ([1fef18b](https://github.com/kelektiv/node-uuid/commit/1fef18b)) + + + +<a name="3.2.0"></a> +# [3.2.0](https://github.com/kelektiv/node-uuid/compare/v3.1.0...v3.2.0) (2018-01-16) + + +### Bug Fixes + +* remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/kelektiv/node-uuid/commit/09fa824)) +* use msCrypto if available. Fixes [#241](https://github.com/kelektiv/node-uuid/issues/241) ([#247](https://github.com/kelektiv/node-uuid/issues/247)) ([1fef18b](https://github.com/kelektiv/node-uuid/commit/1fef18b)) + + +### Features + +* Add v3 Support ([#217](https://github.com/kelektiv/node-uuid/issues/217)) ([d94f726](https://github.com/kelektiv/node-uuid/commit/d94f726)) + + +# [3.1.0](https://github.com/kelektiv/node-uuid/compare/v3.1.0...v3.0.1) (2017-06-17) + +### Bug Fixes + +* (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183) +* Fix typo (#178) +* Simple typo fix (#165) + +### Features +* v5 support in CLI (#197) +* V5 support (#188) + + +# 3.0.1 (2016-11-28) + +* split uuid versions into separate files + + +# 3.0.0 (2016-11-17) + +* remove .parse and .unparse + + +# 2.0.0 + +* Removed uuid.BufferClass + + +# 1.4.0 + +* Improved module context detection +* Removed public RNG functions + + +# 1.3.2 + +* Improve tests and handling of v1() options (Issue #24) +* Expose RNG option to allow for perf testing with different generators + + +# 1.3.0 + +* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! +* Support for node.js crypto API +* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/uuid/LICENSE.md b/node_modules/uuid/LICENSE.md new file mode 100644 index 0000000..8c84e39 --- /dev/null +++ b/node_modules/uuid/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2010-2016 Robert Kieffer and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/uuid/README.md b/node_modules/uuid/README.md new file mode 100644 index 0000000..9cbe1ac --- /dev/null +++ b/node_modules/uuid/README.md @@ -0,0 +1,293 @@ +<!-- + -- This file is auto-generated from README_js.md. Changes should be made there. + --> + +# uuid [](http://travis-ci.org/kelektiv/node-uuid) # + +Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. + +Features: + +* Support for version 1, 3, 4 and 5 UUIDs +* Cross-platform +* Uses cryptographically-strong random number APIs (when available) +* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) + +[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be +supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] + +## Quickstart - CommonJS (Recommended) + +```shell +npm install uuid +``` + +Then generate your uuid version of choice ... + +Version 1 (timestamp): + +```javascript +const uuidv1 = require('uuid/v1'); +uuidv1(); // ⇨ '45745c60-7b1a-11e8-9c9c-2d42b21b1a3e' + +``` + +Version 3 (namespace): + +```javascript +const uuidv3 = require('uuid/v3'); + +// ... using predefined DNS namespace (for domain names) +uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6' + +// ... using predefined URL namespace (for, well, URLs) +uuidv3('http://example.com/hello', uuidv3.URL); // ⇨ 'c6235813-3ba4-3801-ae84-e0a6ebb7d138' + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686' + +``` + +Version 4 (random): + +```javascript +const uuidv4 = require('uuid/v4'); +uuidv4(); // ⇨ '10ba038e-48da-487b-96e8-8d3b99b6d18a' + +``` + +Version 5 (namespace): + +```javascript +const uuidv5 = require('uuid/v5'); + +// ... using predefined DNS namespace (for domain names) +uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec' + +// ... using predefined URL namespace (for, well, URLs) +uuidv5('http://example.com/hello', uuidv5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1' + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681' + +``` + +## Quickstart - Browser-ready Versions + +Browser-ready versions of this module are available via [wzrd.in](https://github.com/jfhbrook/wzrd.in). + +For version 1 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv1@latest"></script> +<script> +uuidv1(); // -> v1 UUID +</script> +``` + +For version 3 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv3@latest"></script> +<script> +uuidv3('http://example.com/hello', uuidv3.URL); // -> v3 UUID +</script> +``` + +For version 4 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv4@latest"></script> +<script> +uuidv4(); // -> v4 UUID +</script> +``` + +For version 5 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv5@latest"></script> +<script> +uuidv5('http://example.com/hello', uuidv5.URL); // -> v5 UUID +</script> +``` + +## API + +### Version 1 + +```javascript +const uuidv1 = require('uuid/v1'); + +// Incantations +uuidv1(); +uuidv1(options); +uuidv1(options, buffer, offset); +``` + +Generate and return a RFC4122 v1 (timestamp-based) UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + + * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. + * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. + * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. + * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. + +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Note: The <node> id is generated guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) + +Example: Generate string UUID with fully-specified options + +```javascript +const v1options = { + node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + clockseq: 0x1234, + msecs: new Date('2011-11-01').getTime(), + nsecs: 5678 +}; +uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' + +``` + +Example: In-place generation of two binary IDs + +```javascript +// Generate two ids in an array +const arr = new Array(); +uuidv1(null, arr, 0); // ⇨ [ 69, 117, 109, 208, 123, 26, 17, 232, 146, 52, 45, 66, 178, 27, 26, 62 ] +uuidv1(null, arr, 16); // ⇨ [ 69, 117, 109, 208, 123, 26, 17, 232, 146, 52, 45, 66, 178, 27, 26, 62, 69, 117, 109, 209, 123, 26, 17, 232, 146, 52, 45, 66, 178, 27, 26, 62 ] + +``` + +### Version 3 + +```javascript +const uuidv3 = require('uuid/v3'); + +// Incantations +uuidv3(name, namespace); +uuidv3(name, namespace, buffer); +uuidv3(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v3 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424' + +``` + +### Version 4 + +```javascript +const uuidv4 = require('uuid/v4') + +// Incantations +uuidv4(); +uuidv4(options); +uuidv4(options, buffer, offset); +``` + +Generate and return a RFC4122 v4 UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values + * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: Generate string UUID with predefined `random` values + +```javascript +const v4options = { + random: [ + 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, + 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 + ] +}; +uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' + +``` + +Example: Generate two IDs in a single buffer + +```javascript +const buffer = new Array(); +uuidv4(null, buffer, 0); // ⇨ [ 54, 122, 218, 70, 45, 70, 65, 24, 171, 53, 95, 130, 83, 195, 242, 45 ] +uuidv4(null, buffer, 16); // ⇨ [ 54, 122, 218, 70, 45, 70, 65, 24, 171, 53, 95, 130, 83, 195, 242, 45, 108, 204, 255, 103, 171, 86, 76, 94, 178, 225, 188, 236, 150, 20, 151, 87 ] + +``` + +### Version 5 + +```javascript +const uuidv5 = require('uuid/v5'); + +// Incantations +uuidv5(name, namespace); +uuidv5(name, namespace, buffer); +uuidv5(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v5 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b' + +``` + +## Command Line + +UUIDs can be generated from the command line with the `uuid` command. + +```shell +$ uuid +ddeb27fb-d9a0-4624-be4d-4615062daed4 + +$ uuid v1 +02d37060-d446-11e7-a9fa-7bdae751ebe1 +``` + +Type `uuid --help` for usage details + +## Testing + +```shell +npm test +``` + +---- +Markdown generated from [README_js.md](README_js.md) by [](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/node_modules/uuid/README_js.md b/node_modules/uuid/README_js.md new file mode 100644 index 0000000..f34453b --- /dev/null +++ b/node_modules/uuid/README_js.md @@ -0,0 +1,280 @@ +```javascript --hide +runmd.onRequire = path => path.replace(/^uuid/, './'); +``` + +# uuid [](http://travis-ci.org/kelektiv/node-uuid) # + +Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. + +Features: + +* Support for version 1, 3, 4 and 5 UUIDs +* Cross-platform +* Uses cryptographically-strong random number APIs (when available) +* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) + +[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be +supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] + +## Quickstart - CommonJS (Recommended) + +```shell +npm install uuid +``` + +Then generate your uuid version of choice ... + +Version 1 (timestamp): + +```javascript --run v1 +const uuidv1 = require('uuid/v1'); +uuidv1(); // RESULT +``` + +Version 3 (namespace): + +```javascript --run v3 +const uuidv3 = require('uuid/v3'); + +// ... using predefined DNS namespace (for domain names) +uuidv3('hello.example.com', uuidv3.DNS); // RESULT + +// ... using predefined URL namespace (for, well, URLs) +uuidv3('http://example.com/hello', uuidv3.URL); // RESULT + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv3('Hello, World!', MY_NAMESPACE); // RESULT +``` + +Version 4 (random): + +```javascript --run v4 +const uuidv4 = require('uuid/v4'); +uuidv4(); // RESULT +``` + +Version 5 (namespace): + +```javascript --run v5 +const uuidv5 = require('uuid/v5'); + +// ... using predefined DNS namespace (for domain names) +uuidv5('hello.example.com', uuidv5.DNS); // RESULT + +// ... using predefined URL namespace (for, well, URLs) +uuidv5('http://example.com/hello', uuidv5.URL); // RESULT + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv5('Hello, World!', MY_NAMESPACE); // RESULT +``` + +## Quickstart - Browser-ready Versions + +Browser-ready versions of this module are available via [wzrd.in](https://github.com/jfhbrook/wzrd.in). + +For version 1 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv1@latest"></script> +<script> +uuidv1(); // -> v1 UUID +</script> +``` + +For version 3 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv3@latest"></script> +<script> +uuidv3('http://example.com/hello', uuidv3.URL); // -> v3 UUID +</script> +``` + +For version 4 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv4@latest"></script> +<script> +uuidv4(); // -> v4 UUID +</script> +``` + +For version 5 uuids: + +```html +<script src="http://wzrd.in/standalone/uuid%2Fv5@latest"></script> +<script> +uuidv5('http://example.com/hello', uuidv5.URL); // -> v5 UUID +</script> +``` + +## API + +### Version 1 + +```javascript +const uuidv1 = require('uuid/v1'); + +// Incantations +uuidv1(); +uuidv1(options); +uuidv1(options, buffer, offset); +``` + +Generate and return a RFC4122 v1 (timestamp-based) UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + + * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. + * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. + * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. + * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. + +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Note: The <node> id is generated guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.) + +Example: Generate string UUID with fully-specified options + +```javascript --run v1 +const v1options = { + node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + clockseq: 0x1234, + msecs: new Date('2011-11-01').getTime(), + nsecs: 5678 +}; +uuidv1(v1options); // RESULT +``` + +Example: In-place generation of two binary IDs + +```javascript --run v1 +// Generate two ids in an array +const arr = new Array(); +uuidv1(null, arr, 0); // RESULT +uuidv1(null, arr, 16); // RESULT +``` + +### Version 3 + +```javascript +const uuidv3 = require('uuid/v3'); + +// Incantations +uuidv3(name, namespace); +uuidv3(name, namespace, buffer); +uuidv3(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v3 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript --run v3 +uuidv3('hello world', MY_NAMESPACE); // RESULT +``` + +### Version 4 + +```javascript +const uuidv4 = require('uuid/v4') + +// Incantations +uuidv4(); +uuidv4(options); +uuidv4(options, buffer, offset); +``` + +Generate and return a RFC4122 v4 UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values + * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: Generate string UUID with predefined `random` values + +```javascript --run v4 +const v4options = { + random: [ + 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, + 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 + ] +}; +uuidv4(v4options); // RESULT +``` + +Example: Generate two IDs in a single buffer + +```javascript --run v4 +const buffer = new Array(); +uuidv4(null, buffer, 0); // RESULT +uuidv4(null, buffer, 16); // RESULT +``` + +### Version 5 + +```javascript +const uuidv5 = require('uuid/v5'); + +// Incantations +uuidv5(name, namespace); +uuidv5(name, namespace, buffer); +uuidv5(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v5 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript --run v5 +uuidv5('hello world', MY_NAMESPACE); // RESULT +``` + +## Command Line + +UUIDs can be generated from the command line with the `uuid` command. + +```shell +$ uuid +ddeb27fb-d9a0-4624-be4d-4615062daed4 + +$ uuid v1 +02d37060-d446-11e7-a9fa-7bdae751ebe1 +``` + +Type `uuid --help` for usage details + +## Testing + +```shell +npm test +``` diff --git a/node_modules/uuid/bin/uuid b/node_modules/uuid/bin/uuid new file mode 100755 index 0000000..502626e --- /dev/null +++ b/node_modules/uuid/bin/uuid @@ -0,0 +1,65 @@ +#!/usr/bin/env node +var assert = require('assert'); + +function usage() { + console.log('Usage:'); + console.log(' uuid'); + console.log(' uuid v1'); + console.log(' uuid v3 <name> <namespace uuid>'); + console.log(' uuid v4'); + console.log(' uuid v5 <name> <namespace uuid>'); + console.log(' uuid --help'); + console.log('\nNote: <namespace uuid> may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122'); +} + +var args = process.argv.slice(2); + +if (args.indexOf('--help') >= 0) { + usage(); + process.exit(0); +} +var version = args.shift() || 'v4'; + +switch (version) { + case 'v1': + var uuidV1 = require('../v1'); + console.log(uuidV1()); + break; + + case 'v3': + var uuidV3 = require('../v3'); + + var name = args.shift(); + var namespace = args.shift(); + assert(name != null, 'v3 name not specified'); + assert(namespace != null, 'v3 namespace not specified'); + + if (namespace == 'URL') namespace = uuidV3.URL; + if (namespace == 'DNS') namespace = uuidV3.DNS; + + console.log(uuidV3(name, namespace)); + break; + + case 'v4': + var uuidV4 = require('../v4'); + console.log(uuidV4()); + break; + + case 'v5': + var uuidV5 = require('../v5'); + + var name = args.shift(); + var namespace = args.shift(); + assert(name != null, 'v5 name not specified'); + assert(namespace != null, 'v5 namespace not specified'); + + if (namespace == 'URL') namespace = uuidV5.URL; + if (namespace == 'DNS') namespace = uuidV5.DNS; + + console.log(uuidV5(name, namespace)); + break; + + default: + usage(); + process.exit(1); +} diff --git a/node_modules/uuid/index.js b/node_modules/uuid/index.js new file mode 100644 index 0000000..e96791a --- /dev/null +++ b/node_modules/uuid/index.js @@ -0,0 +1,8 @@ +var v1 = require('./v1'); +var v4 = require('./v4'); + +var uuid = v4; +uuid.v1 = v1; +uuid.v4 = v4; + +module.exports = uuid; diff --git a/node_modules/uuid/lib/bytesToUuid.js b/node_modules/uuid/lib/bytesToUuid.js new file mode 100644 index 0000000..847c482 --- /dev/null +++ b/node_modules/uuid/lib/bytesToUuid.js @@ -0,0 +1,24 @@ +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ +var byteToHex = []; +for (var i = 0; i < 256; ++i) { + byteToHex[i] = (i + 0x100).toString(16).substr(1); +} + +function bytesToUuid(buf, offset) { + var i = offset || 0; + var bth = byteToHex; + // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 + return ([bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], '-', + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]], + bth[buf[i++]], bth[buf[i++]]]).join(''); +} + +module.exports = bytesToUuid; diff --git a/node_modules/uuid/lib/md5-browser.js b/node_modules/uuid/lib/md5-browser.js new file mode 100644 index 0000000..9b3b6c7 --- /dev/null +++ b/node_modules/uuid/lib/md5-browser.js @@ -0,0 +1,216 @@ +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +'use strict'; + +function md5(bytes) { + if (typeof(bytes) == 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + bytes = new Array(msg.length); + for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); + } + + return md5ToHexEncodedArray( + wordsToMd5( + bytesToWords(bytes) + , bytes.length * 8) + ); +} + + +/* +* Convert an array of little-endian words to an array of bytes +*/ +function md5ToHexEncodedArray(input) { + var i; + var x; + var output = []; + var length32 = input.length * 32; + var hexTab = '0123456789abcdef'; + var hex; + + for (i = 0; i < length32; i += 8) { + x = (input[i >> 5] >>> (i % 32)) & 0xFF; + + hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16); + + output.push(hex); + } + return output; +} + +/* +* Calculate the MD5 of an array of little-endian words, and a bit length. +*/ +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << (len % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var i; + var olda; + var oldb; + var oldc; + var oldd; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + + var d = 271733878; + + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + return [a, b, c, d]; +} + +/* +* Convert an array bytes to an array of little-endian words +* Characters >255 have their high-byte silently ignored. +*/ +function bytesToWords(input) { + var i; + var output = []; + output[(input.length >> 2) - 1] = undefined; + for (i = 0; i < output.length; i += 1) { + output[i] = 0; + } + var length8 = input.length * 8; + for (i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32); + } + + return output; +} + +/* +* Add integers, wrapping at 2^32. This uses 16-bit operations internally +* to work around bugs in some JS interpreters. +*/ +function safeAdd(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* +* Bitwise rotate a 32-bit number to the left. +*/ +function bitRotateLeft(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* +* These functions implement the four basic operations the algorithm uses. +*/ +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} +function md5ff(a, b, c, d, x, s, t) { + return md5cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5gg(a, b, c, d, x, s, t) { + return md5cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +module.exports = md5; diff --git a/node_modules/uuid/lib/md5.js b/node_modules/uuid/lib/md5.js new file mode 100644 index 0000000..7044b87 --- /dev/null +++ b/node_modules/uuid/lib/md5.js @@ -0,0 +1,25 @@ +'use strict'; + +var crypto = require('crypto'); + +function md5(bytes) { + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } + + return crypto.createHash('md5').update(bytes).digest(); +} + +module.exports = md5; diff --git a/node_modules/uuid/lib/rng-browser.js b/node_modules/uuid/lib/rng-browser.js new file mode 100644 index 0000000..6361fb8 --- /dev/null +++ b/node_modules/uuid/lib/rng-browser.js @@ -0,0 +1,34 @@ +// Unique ID creation requires a high quality random # generator. In the +// browser this is a little complicated due to unknown quality of Math.random() +// and inconsistent support for the `crypto` API. We do the best we can via +// feature-detection + +// getRandomValues needs to be invoked in a context where "this" is a Crypto +// implementation. Also, find the complete implementation of crypto on IE11. +var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) || + (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto)); + +if (getRandomValues) { + // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto + var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef + + module.exports = function whatwgRNG() { + getRandomValues(rnds8); + return rnds8; + }; +} else { + // Math.random()-based (RNG) + // + // If all else fails, use Math.random(). It's fast, but is of unspecified + // quality. + var rnds = new Array(16); + + module.exports = function mathRNG() { + for (var i = 0, r; i < 16; i++) { + if ((i & 0x03) === 0) r = Math.random() * 0x100000000; + rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; + } + + return rnds; + }; +} diff --git a/node_modules/uuid/lib/rng.js b/node_modules/uuid/lib/rng.js new file mode 100644 index 0000000..58f0dc9 --- /dev/null +++ b/node_modules/uuid/lib/rng.js @@ -0,0 +1,8 @@ +// Unique ID creation requires a high quality random # generator. In node.js +// this is pretty straight-forward - we use the crypto API. + +var crypto = require('crypto'); + +module.exports = function nodeRNG() { + return crypto.randomBytes(16); +}; diff --git a/node_modules/uuid/lib/sha1-browser.js b/node_modules/uuid/lib/sha1-browser.js new file mode 100644 index 0000000..5758ed7 --- /dev/null +++ b/node_modules/uuid/lib/sha1-browser.js @@ -0,0 +1,89 @@ +// Adapted from Chris Veness' SHA1 code at +// http://www.movable-type.co.uk/scripts/sha1.html +'use strict'; + +function f(s, x, y, z) { + switch (s) { + case 0: return (x & y) ^ (~x & z); + case 1: return x ^ y ^ z; + case 2: return (x & y) ^ (x & z) ^ (y & z); + case 3: return x ^ y ^ z; + } +} + +function ROTL(x, n) { + return (x << n) | (x>>> (32 - n)); +} + +function sha1(bytes) { + var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; + var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; + + if (typeof(bytes) == 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + bytes = new Array(msg.length); + for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); + } + + bytes.push(0x80); + + var l = bytes.length/4 + 2; + var N = Math.ceil(l/16); + var M = new Array(N); + + for (var i=0; i<N; i++) { + M[i] = new Array(16); + for (var j=0; j<16; j++) { + M[i][j] = + bytes[i * 64 + j * 4] << 24 | + bytes[i * 64 + j * 4 + 1] << 16 | + bytes[i * 64 + j * 4 + 2] << 8 | + bytes[i * 64 + j * 4 + 3]; + } + } + + M[N - 1][14] = ((bytes.length - 1) * 8) / + Math.pow(2, 32); M[N - 1][14] = Math.floor(M[N - 1][14]); + M[N - 1][15] = ((bytes.length - 1) * 8) & 0xffffffff; + + for (var i=0; i<N; i++) { + var W = new Array(80); + + for (var t=0; t<16; t++) W[t] = M[i][t]; + for (var t=16; t<80; t++) { + W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1); + } + + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + + for (var t=0; t<80; t++) { + var s = Math.floor(t/20); + var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0; + e = d; + d = c; + c = ROTL(b, 30) >>> 0; + b = a; + a = T; + } + + H[0] = (H[0] + a) >>> 0; + H[1] = (H[1] + b) >>> 0; + H[2] = (H[2] + c) >>> 0; + H[3] = (H[3] + d) >>> 0; + H[4] = (H[4] + e) >>> 0; + } + + return [ + H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, + H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, + H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, + H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, + H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff + ]; +} + +module.exports = sha1; diff --git a/node_modules/uuid/lib/sha1.js b/node_modules/uuid/lib/sha1.js new file mode 100644 index 0000000..0b54b25 --- /dev/null +++ b/node_modules/uuid/lib/sha1.js @@ -0,0 +1,25 @@ +'use strict'; + +var crypto = require('crypto'); + +function sha1(bytes) { + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } + + return crypto.createHash('sha1').update(bytes).digest(); +} + +module.exports = sha1; diff --git a/node_modules/uuid/lib/v35.js b/node_modules/uuid/lib/v35.js new file mode 100644 index 0000000..8b066cc --- /dev/null +++ b/node_modules/uuid/lib/v35.js @@ -0,0 +1,57 @@ +var bytesToUuid = require('./bytesToUuid'); + +function uuidToBytes(uuid) { + // Note: We assume we're being passed a valid uuid string + var bytes = []; + uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) { + bytes.push(parseInt(hex, 16)); + }); + + return bytes; +} + +function stringToBytes(str) { + str = unescape(encodeURIComponent(str)); // UTF8 escape + var bytes = new Array(str.length); + for (var i = 0; i < str.length; i++) { + bytes[i] = str.charCodeAt(i); + } + return bytes; +} + +module.exports = function(name, version, hashfunc) { + var generateUUID = function(value, namespace, buf, offset) { + var off = buf && offset || 0; + + if (typeof(value) == 'string') value = stringToBytes(value); + if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace); + + if (!Array.isArray(value)) throw TypeError('value must be an array of bytes'); + if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); + + // Per 4.3 + var bytes = hashfunc(namespace.concat(value)); + bytes[6] = (bytes[6] & 0x0f) | version; + bytes[8] = (bytes[8] & 0x3f) | 0x80; + + if (buf) { + for (var idx = 0; idx < 16; ++idx) { + buf[off+idx] = bytes[idx]; + } + } + + return buf || bytesToUuid(bytes); + }; + + // Function#name is not settable on some platforms (#270) + try { + generateUUID.name = name; + } catch (err) { + } + + // Pre-defined namespaces, per Appendix C + generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; + generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; + + return generateUUID; +}; diff --git a/node_modules/uuid/package.json b/node_modules/uuid/package.json new file mode 100644 index 0000000..9063477 --- /dev/null +++ b/node_modules/uuid/package.json @@ -0,0 +1,96 @@ +{ + "_from": "uuid@^3.3.2", + "_id": "uuid@3.3.2", + "_inBundle": false, + "_integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "_location": "/uuid", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "uuid@^3.3.2", + "name": "uuid", + "escapedName": "uuid", + "rawSpec": "^3.3.2", + "saveSpec": null, + "fetchSpec": "^3.3.2" + }, + "_requiredBy": [ + "/@actions/tool-cache", + "/request" + ], + "_resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "_shasum": "1b4af4955eb3077c501c23872fc6513811587131", + "_spec": "uuid@^3.3.2", + "_where": "C:\\Users\\Administrator\\Documents\\setup-node\\toolkit\\actions-tool-cache-0.0.0.tgz", + "bin": { + "uuid": "./bin/uuid" + }, + "browser": { + "./lib/rng.js": "./lib/rng-browser.js", + "./lib/sha1.js": "./lib/sha1-browser.js", + "./lib/md5.js": "./lib/md5-browser.js" + }, + "bugs": { + "url": "https://github.com/kelektiv/node-uuid/issues" + }, + "bundleDependencies": false, + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "contributors": [ + { + "name": "Robert Kieffer", + "email": "robert@broofa.com" + }, + { + "name": "Christoph Tavan", + "email": "dev@tavan.de" + }, + { + "name": "AJ ONeal", + "email": "coolaj86@gmail.com" + }, + { + "name": "Vincent Voyer", + "email": "vincent@zeroload.net" + }, + { + "name": "Roman Shtylman", + "email": "shtylman@gmail.com" + } + ], + "deprecated": false, + "description": "RFC4122 (v1, v4, and v5) UUIDs", + "devDependencies": { + "@commitlint/cli": "7.0.0", + "@commitlint/config-conventional": "7.0.1", + "eslint": "4.19.1", + "husky": "0.14.3", + "mocha": "5.2.0", + "runmd": "1.0.1", + "standard-version": "4.4.0" + }, + "homepage": "https://github.com/kelektiv/node-uuid#readme", + "keywords": [ + "uuid", + "guid", + "rfc4122" + ], + "license": "MIT", + "name": "uuid", + "repository": { + "type": "git", + "url": "git+https://github.com/kelektiv/node-uuid.git" + }, + "scripts": { + "commitmsg": "commitlint -E GIT_PARAMS", + "md": "runmd --watch --output=README.md README_js.md", + "prepare": "runmd --output=README.md README_js.md", + "release": "standard-version", + "test": "mocha test/test.js" + }, + "version": "3.3.2" +} diff --git a/node_modules/uuid/v1.js b/node_modules/uuid/v1.js new file mode 100644 index 0000000..d84c0f4 --- /dev/null +++ b/node_modules/uuid/v1.js @@ -0,0 +1,109 @@ +var rng = require('./lib/rng'); +var bytesToUuid = require('./lib/bytesToUuid'); + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +var _nodeId; +var _clockseq; + +// Previous uuid creation time +var _lastMSecs = 0; +var _lastNSecs = 0; + +// See https://github.com/broofa/node-uuid for API details +function v1(options, buf, offset) { + var i = buf && offset || 0; + var b = buf || []; + + options = options || {}; + var node = options.node || _nodeId; + var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; + + // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + if (node == null || clockseq == null) { + var seedBytes = rng(); + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [ + seedBytes[0] | 0x01, + seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5] + ]; + } + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } + + // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); + + // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; + + // Time since last uuid creation (in msecs) + var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; + + // Per 4.2.1.2, Bump clockseq on clock regression + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } + + // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } + + // Per 4.2.1.2 Throw error if too many uuids are requested + if (nsecs >= 10000) { + throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; + + // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + msecs += 12219292800000; + + // `time_low` + var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; + + // `time_mid` + var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; + + // `time_high_and_version` + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + b[i++] = tmh >>> 16 & 0xff; + + // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + b[i++] = clockseq >>> 8 | 0x80; + + // `clock_seq_low` + b[i++] = clockseq & 0xff; + + // `node` + for (var n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf ? buf : bytesToUuid(b); +} + +module.exports = v1; diff --git a/node_modules/uuid/v3.js b/node_modules/uuid/v3.js new file mode 100644 index 0000000..ee7e14c --- /dev/null +++ b/node_modules/uuid/v3.js @@ -0,0 +1,4 @@ +var v35 = require('./lib/v35.js'); +var md5 = require('./lib/md5'); + +module.exports = v35('v3', 0x30, md5); \ No newline at end of file diff --git a/node_modules/uuid/v4.js b/node_modules/uuid/v4.js new file mode 100644 index 0000000..1f07be1 --- /dev/null +++ b/node_modules/uuid/v4.js @@ -0,0 +1,29 @@ +var rng = require('./lib/rng'); +var bytesToUuid = require('./lib/bytesToUuid'); + +function v4(options, buf, offset) { + var i = buf && offset || 0; + + if (typeof(options) == 'string') { + buf = options === 'binary' ? new Array(16) : null; + options = null; + } + options = options || {}; + + var rnds = options.random || (options.rng || rng)(); + + // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + rnds[6] = (rnds[6] & 0x0f) | 0x40; + rnds[8] = (rnds[8] & 0x3f) | 0x80; + + // Copy bytes to buffer, if provided + if (buf) { + for (var ii = 0; ii < 16; ++ii) { + buf[i + ii] = rnds[ii]; + } + } + + return buf || bytesToUuid(rnds); +} + +module.exports = v4; diff --git a/node_modules/uuid/v5.js b/node_modules/uuid/v5.js new file mode 100644 index 0000000..4945baf --- /dev/null +++ b/node_modules/uuid/v5.js @@ -0,0 +1,3 @@ +var v35 = require('./lib/v35.js'); +var sha1 = require('./lib/sha1'); +module.exports = v35('v5', 0x50, sha1); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e091e54 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5412 @@ +{ + "name": "setup-node", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@actions/core": { + "version": "file:toolkit/actions-core-0.0.0.tgz", + "integrity": "sha512-58ituSV1rzBMmmsWoFDnrnsT+Wm4kD/u9NgAGbPvZ7rQHWluYtD5bDbIsjDC6rKFuhqytkxDJPsF/TWBdgc/nA==", + "requires": { + "@actions/exit": "^0.0.0" + } + }, + "@actions/exec": { + "version": "file:toolkit/actions-exec-0.0.0.tgz", + "integrity": "sha512-HHObusC4p1RElxIlrrN0sY/cweBYl+jKm3J/XWHPQZMipgJXB/dkVhUfl4KqH3Vim7oM2KjCGSfn+vTYrqVH3A==" + }, + "@actions/exit": { + "version": "file:toolkit/actions-exit-0.0.0.tgz", + "integrity": "sha512-vQdxFWM0/AERkC79mQ886SqPmV4joWhrSF7hiSTiJoKkE9eTjrKV5WQtp7SXv6OntrQkKX+ZjgdGpv+0rvJRCw==" + }, + "@actions/io": { + "version": "file:toolkit/actions-io-0.0.0.tgz", + "integrity": "sha512-BArfobXB/b6RjR4i/+P4UcdaqR2tPjEb2WzZf9GdKiSARQn7d301pKOZAqxA+0N11X07Lk46t/txeUBcrCNbeg==" + }, + "@actions/tool-cache": { + "version": "file:toolkit/actions-tool-cache-0.0.0.tgz", + "integrity": "sha512-R08MGFekNLkf1ofh5wi8QVgmFyPgkKC+Cp8FRE1n6zOpHbUWv3QGa6eR6z+2ESuGCstOPtbq/tRgZsSusItm9Q==", + "requires": { + "@actions/core": "^0.0.0", + "@actions/exec": "^0.0.0", + "@actions/io": "^0.0.0", + "semver": "^6.1.0", + "shelljs": "^0.3.0", + "typed-rest-client": "^1.4.0", + "uuid": "^3.3.2" + } + }, + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz", + "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.4", + "@babel/helpers": "^7.4.4", + "@babel/parser": "^7.4.5", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.5", + "@babel/types": "^7.4.4", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.11", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", + "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.11", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helpers": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", + "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "dev": true, + "requires": { + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", + "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "dev": true + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", + "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/traverse": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", + "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.4.4", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.4.5", + "@babel/types": "^7.4.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.11" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", + "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.11", + "to-fast-properties": "^2.0.0" + } + }, + "@cnakazawa/watch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", + "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@jest/console": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", + "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "dev": true, + "requires": { + "@jest/source-map": "^24.3.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "@jest/core": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", + "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/reporters": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-changed-files": "^24.8.0", + "jest-config": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve-dependencies": "^24.8.0", + "jest-runner": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "jest-watcher": "^24.8.0", + "micromatch": "^3.1.10", + "p-each-series": "^1.0.0", + "pirates": "^4.0.1", + "realpath-native": "^1.1.0", + "rimraf": "^2.5.4", + "strip-ansi": "^5.0.0" + } + }, + "@jest/environment": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", + "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "dev": true, + "requires": { + "@jest/fake-timers": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0" + } + }, + "@jest/fake-timers": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", + "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-mock": "^24.8.0" + } + }, + "@jest/reporters": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", + "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "dev": true, + "requires": { + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "istanbul-lib-coverage": "^2.0.2", + "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.1", + "istanbul-reports": "^2.1.1", + "jest-haste-map": "^24.8.0", + "jest-resolve": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", + "node-notifier": "^5.2.1", + "slash": "^2.0.0", + "source-map": "^0.6.0", + "string-length": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "@jest/source-map": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", + "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", + "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/types": "^24.8.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/test-sequencer": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", + "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "dev": true, + "requires": { + "@jest/test-result": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-runner": "^24.8.0", + "jest-runtime": "^24.8.0" + } + }, + "@jest/transform": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", + "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^24.8.0", + "babel-plugin-istanbul": "^5.1.0", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.15", + "jest-haste-map": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-util": "^24.8.0", + "micromatch": "^3.1.10", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "2.4.1" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "@jest/types": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", + "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^12.0.9" + } + }, + "@types/babel__core": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", + "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", + "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", + "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", + "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", + "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", + "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "24.0.15", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.15.tgz", + "integrity": "sha512-MU1HIvWUme74stAoc3mgAi+aMlgKOudgEvQDIm1v4RkrDudBh1T+NFp5sftpBAdXdx1J0PbdpJ+M2EsSOi1djA==", + "dev": true, + "requires": { + "@types/jest-diff": "*" + } + }, + "@types/jest-diff": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", + "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", + "dev": true + }, + "@types/node": { + "version": "12.0.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz", + "integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/semver": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.1.tgz", + "integrity": "sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg==", + "dev": true + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "12.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", + "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", + "dev": true + }, + "abab": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "dev": true + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", + "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "dev": true + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "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" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "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-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-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-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "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 + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "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 + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "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 + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "babel-jest": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", + "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", + "dev": true, + "requires": { + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/babel__core": "^7.1.0", + "babel-plugin-istanbul": "^5.1.0", + "babel-preset-jest": "^24.6.0", + "chalk": "^2.4.2", + "slash": "^2.0.0" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "babel-plugin-istanbul": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.4.tgz", + "integrity": "sha512-dySz4VJMH+dpndj0wjJ8JPs/7i1TdSPb1nRrn56/92pKOF9VKC1FMFJmMXjzlGGusnCAqujP6PBCiKq0sVA+YQ==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "istanbul-lib-instrument": "^3.3.0", + "test-exclude": "^5.2.3" + } + }, + "babel-plugin-jest-hoist": { + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", + "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "dev": true, + "requires": { + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-jest": { + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", + "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", + "dev": true, + "requires": { + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "babel-plugin-jest-hoist": "^24.6.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "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": "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" + } + } + } + }, + "browser-process-hrtime": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", + "dev": true + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", + "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "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" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "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" + } + } + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "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-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-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true, + "optional": 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 + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "cssom": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.6.tgz", + "integrity": "sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A==", + "dev": true + }, + "cssstyle": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", + "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } + }, + "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 + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "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" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "diff-sequences": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", + "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "^4.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "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" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "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 + }, + "escodegen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", + "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "dev": true, + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "exec-sh": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", + "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "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" + } + } + } + }, + "expect": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", + "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "ansi-styles": "^3.2.0", + "jest-get-type": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-regex-util": "^24.3.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" + }, + "dependencies": { + "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" + } + } + } + }, + "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-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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", + "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, + "requires": { + "bser": "^2.0.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" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "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" + } + }, + "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": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": 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" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": 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" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": 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-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "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" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "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" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.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-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "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" + } + } + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.1" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "husky": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-2.4.1.tgz", + "integrity": "sha512-ZRwMWHr7QruR22dQ5l3rEGXQ7rAQYsJYqaeCd+NyOsIFczAtqaApZQP3P4HwLZjCtFbm3SUNYoKuoBXX3AYYfw==", + "dev": true, + "requires": { + "cosmiconfig": "^5.2.0", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^7.0.0", + "is-ci": "^2.0.0", + "pkg-dir": "^4.1.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^5.1.1", + "run-node": "^1.0.0", + "slash": "^3.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "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 + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "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-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "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-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "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 + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "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-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "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-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-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "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-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-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 + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "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 + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "jest": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", + "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", + "dev": true, + "requires": { + "import-local": "^2.0.0", + "jest-cli": "^24.8.0" + }, + "dependencies": { + "jest-cli": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", + "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "dev": true, + "requires": { + "@jest/core": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "import-local": "^2.0.0", + "is-ci": "^2.0.0", + "jest-config": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "prompts": "^2.0.1", + "realpath-native": "^1.1.0", + "yargs": "^12.0.2" + } + } + } + }, + "jest-changed-files": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", + "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + } + }, + "jest-circus": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-24.8.0.tgz", + "integrity": "sha512-2QASG3QuDdk0SMP2O73D8u3/lc/A/E2G7q23v5WhbUR+hCGzWZXwRMKif18f11dSLfL1wcrMbwE4IorvV0DRVw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.8.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0", + "stack-utils": "^1.0.1", + "throat": "^4.0.0" + } + }, + "jest-config": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", + "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^24.8.0", + "@jest/types": "^24.8.0", + "babel-jest": "^24.8.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^24.8.0", + "jest-environment-node": "^24.8.0", + "jest-get-type": "^24.8.0", + "jest-jasmine2": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "micromatch": "^3.1.10", + "pretty-format": "^24.8.0", + "realpath-native": "^1.1.0" + } + }, + "jest-diff": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", + "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "diff-sequences": "^24.3.0", + "jest-get-type": "^24.8.0", + "pretty-format": "^24.8.0" + } + }, + "jest-docblock": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", + "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "dev": true, + "requires": { + "detect-newline": "^2.1.0" + } + }, + "jest-each": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", + "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0" + } + }, + "jest-environment-jsdom": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", + "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", + "dev": true, + "requires": { + "@jest/environment": "^24.8.0", + "@jest/fake-timers": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-util": "^24.8.0", + "jsdom": "^11.5.1" + } + }, + "jest-environment-node": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", + "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", + "dev": true, + "requires": { + "@jest/environment": "^24.8.0", + "@jest/fake-timers": "^24.8.0", + "@jest/types": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-util": "^24.8.0" + } + }, + "jest-get-type": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", + "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "dev": true + }, + "jest-haste-map": { + "version": "24.8.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.1.tgz", + "integrity": "sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.4.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", + "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^24.8.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "pretty-format": "^24.8.0", + "throat": "^4.0.0" + } + }, + "jest-leak-detector": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", + "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", + "dev": true, + "requires": { + "pretty-format": "^24.8.0" + } + }, + "jest-matcher-utils": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", + "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-diff": "^24.8.0", + "jest-get-type": "^24.8.0", + "pretty-format": "^24.8.0" + } + }, + "jest-message-util": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", + "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "jest-mock": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", + "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", + "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", + "dev": true + }, + "jest-regex-util": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", + "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", + "dev": true + }, + "jest-resolve": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", + "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "jest-pnp-resolver": "^1.2.1", + "realpath-native": "^1.1.0" + } + }, + "jest-resolve-dependencies": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", + "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-snapshot": "^24.8.0" + } + }, + "jest-runner": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", + "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.8.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "chalk": "^2.4.2", + "exit": "^0.1.2", + "graceful-fs": "^4.1.15", + "jest-config": "^24.8.0", + "jest-docblock": "^24.3.0", + "jest-haste-map": "^24.8.0", + "jest-jasmine2": "^24.8.0", + "jest-leak-detector": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-resolve": "^24.8.0", + "jest-runtime": "^24.8.0", + "jest-util": "^24.8.0", + "jest-worker": "^24.6.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" + } + }, + "jest-runtime": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", + "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/environment": "^24.8.0", + "@jest/source-map": "^24.3.0", + "@jest/transform": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/yargs": "^12.0.2", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "jest-config": "^24.8.0", + "jest-haste-map": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-mock": "^24.8.0", + "jest-regex-util": "^24.3.0", + "jest-resolve": "^24.8.0", + "jest-snapshot": "^24.8.0", + "jest-util": "^24.8.0", + "jest-validate": "^24.8.0", + "realpath-native": "^1.1.0", + "slash": "^2.0.0", + "strip-bom": "^3.0.0", + "yargs": "^12.0.2" + }, + "dependencies": { + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "jest-serializer": { + "version": "24.4.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", + "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", + "dev": true + }, + "jest-snapshot": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", + "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^24.8.0", + "chalk": "^2.0.1", + "expect": "^24.8.0", + "jest-diff": "^24.8.0", + "jest-matcher-utils": "^24.8.0", + "jest-message-util": "^24.8.0", + "jest-resolve": "^24.8.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^24.8.0", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "jest-util": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", + "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", + "dev": true, + "requires": { + "@jest/console": "^24.7.1", + "@jest/fake-timers": "^24.8.0", + "@jest/source-map": "^24.3.0", + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "jest-validate": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", + "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "camelcase": "^5.0.0", + "chalk": "^2.0.1", + "jest-get-type": "^24.8.0", + "leven": "^2.1.0", + "pretty-format": "^24.8.0" + } + }, + "jest-watcher": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", + "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "dev": true, + "requires": { + "@jest/test-result": "^24.8.0", + "@jest/types": "^24.8.0", + "@types/yargs": "^12.0.9", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "jest-util": "^24.8.0", + "string-length": "^2.0.0" + } + }, + "jest-worker": { + "version": "24.6.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", + "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "dev": true, + "requires": { + "merge-stream": "^1.0.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", + "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "dev": true + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.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" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "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" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "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" + } + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "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" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", + "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "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" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + } + } + }, + "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" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwsapi": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", + "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "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" + } + }, + "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.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "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" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, + "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": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "dev": true + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "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-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "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-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "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 + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, + "please-upgrade-node": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", + "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "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 + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prettier": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", + "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "dev": true + }, + "pretty-format": { + "version": "24.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", + "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "dev": true, + "requires": { + "@jest/types": "^24.8.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + } + }, + "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 + }, + "prompts": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz", + "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==", + "dev": true, + "requires": { + "kleur": "^3.0.2", + "sisteransi": "^1.0.0" + } + }, + "psl": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", + "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==", + "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" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "react-is": { + "version": "16.8.6", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", + "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "dev": true + }, + "read-pkg": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz", + "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^4.0.0", + "type-fest": "^0.4.1" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "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" + } + }, + "realpath-native": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", + "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", + "dev": true, + "requires": { + "util.promisify": "^1.0.0" + } + }, + "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-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.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "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 + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "dev": true, + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "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 + }, + "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 + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", + "dev": true + }, + "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 + }, + "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" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "semver": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.2.tgz", + "integrity": "sha512-z4PqiCpomGtWj8633oeAdXm1Kn1W++3T8epkZYnwiVgIYIJ0QHszhInYSJTYxebByQH7KVCEAn8R9duzZW2PhQ==" + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "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" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "sisteransi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.0.tgz", + "integrity": "sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "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" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + } + } + }, + "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" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "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" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", + "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", + "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" + } + } + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "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" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "test-exclude": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", + "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^2.0.0" + } + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "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": "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" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "ts-jest": { + "version": "24.0.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz", + "integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "json5": "2.x", + "make-error": "1.x", + "mkdirp": "0.x", + "resolve": "1.x", + "semver": "^5.5", + "yargs-parser": "10.x" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "tunnel": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", + "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true + }, + "typed-rest-client": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.5.0.tgz", + "integrity": "sha512-DVZRlmsfnTjp6ZJaatcdyvvwYwbWvR4YDNFDqb+qdTxpvaVP99YCpBkA8rxsLtAPjBVoDe4fNsnMIdZTiPuKWg==", + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "typescript": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz", + "integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==", + "dev": true + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + } + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "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" + } + }, + "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 + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "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 + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "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" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "^0.1.2" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", + "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + }, + "dependencies": { + "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 + } + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..57ec95c --- /dev/null +++ b/package.json @@ -0,0 +1,50 @@ +{ + "name": "setup-node", + "version": "1.0.0", + "private": true, + "description": "setup node action", + "main": "lib/setup-node.js", + "scripts": { + "build": "tsc", + "format": "prettier --write **/*.ts", + "format-check": "prettier --check **/*.ts", + "test": "jest" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/actions/setup-node.git" + }, + "keywords": [ + "actions", + "node", + "setup" + ], + "author": "GitHub", + "license": "MIT", + "dependencies": { + "@actions/exit": "file:toolkit/actions-exit-0.0.0.tgz", + "@actions/core": "file:toolkit/actions-core-0.0.0.tgz", + "@actions/io": "file:toolkit/actions-io-0.0.0.tgz", + "@actions/exec": "file:toolkit/actions-exec-0.0.0.tgz", + "@actions/tool-cache": "file:toolkit/actions-tool-cache-0.0.0.tgz", + "semver": "^6.1.1" + }, + "devDependencies": { + "@types/jest": "^24.0.13", + "@types/node": "^12.0.4", + "@types/semver": "^6.0.0", + "husky": "^2.3.0", + "jest": "^24.8.0", + "jest-circus": "^24.7.1", + "prettier": "^1.17.1", + "ts-jest": "^24.0.2", + "typescript": "^3.5.1" + }, + "husky": { + "skipCI": true, + "hooks": { + "pre-commit": "npm run build && npm run format", + "post-commit": "npm prune --production && git add node_modules/* && git commit -m \"Husky commit correct node modules\"" + } + } +} diff --git a/src/installer.ts b/src/installer.ts new file mode 100644 index 0000000..1697cd4 --- /dev/null +++ b/src/installer.ts @@ -0,0 +1,234 @@ +// Load tempDirectory before it gets wiped by tool-cache +let tempDirectory = process.env['RUNNER_TEMPDIRECTORY'] || ''; +import * as core from '@actions/core'; +import * as io from '@actions/io'; +import * as tc from '@actions/tool-cache'; +import * as restm from 'typed-rest-client/RestClient'; +import * as os from 'os'; +import * as path from 'path'; +import * as semver from 'semver'; + +let osPlat: string = os.platform(); +let osArch: string = os.arch(); + +if (!tempDirectory) { + let baseLocation; + if (process.platform === 'win32') { + // On windows use the USERPROFILE env variable + baseLocation = process.env['USERPROFILE'] || 'C:\\'; + } else { + if (process.platform === 'darwin') { + baseLocation = '/Users'; + } else { + baseLocation = '/home'; + } + } + tempDirectory = path.join(baseLocation, 'actions', 'temp'); +} + +// +// Node versions interface +// see https://nodejs.org/dist/index.json +// +interface INodeVersion { + version: string; + files: string[]; +} + +export async function getNode(versionSpec: string) { + // check cache + let toolPath: string; + toolPath = tc.find('node', versionSpec); + + // If not found in cache, download + if (!toolPath) { + let version: string; + const c = semver.clean(versionSpec) || ''; + // If explicit version + if (semver.valid(c) != null) { + // version to download + version = versionSpec; + } else { + // query nodejs.org for a matching version + version = await queryLatestMatch(versionSpec); + if (!version) { + throw new Error( + `Unable to find Node version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.` + ); + } + + // check cache + toolPath = tc.find('node', version); + } + + if (!toolPath) { + // download, extract, cache + toolPath = await acquireNode(version); + } + } + + // + // a tool installer initimately knows details about the layout of that tool + // for example, node binary is in the bin folder after the extract on Mac/Linux. + // layouts could change by version, by platform etc... but that's the tool installers job + // + if (osPlat != 'win32') { + toolPath = path.join(toolPath, 'bin'); + } + + // + // prepend the tools path. instructs the agent to prepend for future tasks + core.addPath(toolPath); +} + +async function queryLatestMatch(versionSpec: string): Promise<string> { + // node offers a json list of versions + let dataFileName: string; + switch (osPlat) { + case 'linux': + dataFileName = 'linux-' + osArch; + break; + case 'darwin': + dataFileName = 'osx-' + osArch + '-tar'; + break; + case 'win32': + dataFileName = 'win-' + osArch + '-exe'; + break; + default: + throw new Error(`Unexpected OS '${osPlat}'`); + } + + let versions: string[] = []; + let dataUrl = 'https://nodejs.org/dist/index.json'; + let rest: restm.RestClient = new restm.RestClient('vsts-node-tool'); + let nodeVersions: INodeVersion[] = + (await rest.get<INodeVersion[]>(dataUrl)).result || []; + nodeVersions.forEach((nodeVersion: INodeVersion) => { + // ensure this version supports your os and platform + if (nodeVersion.files.indexOf(dataFileName) >= 0) { + versions.push(nodeVersion.version); + } + }); + + // get the latest version that matches the version spec + let version: string = evaluateVersions(versions, versionSpec); + return version; +} + +// TODO - should we just export this from @actions/tool-cache? Lifted directly from there +function evaluateVersions(versions: string[], versionSpec: string): string { + let version = ''; + core.debug(`evaluating ${versions.length} versions`); + versions = versions.sort((a, b) => { + if (semver.gt(a, b)) { + return 1; + } + return -1; + }); + for (let i = versions.length - 1; i >= 0; i--) { + const potential: string = versions[i]; + const satisfied: boolean = semver.satisfies(potential, versionSpec); + if (satisfied) { + version = potential; + break; + } + } + + if (version) { + core.debug(`matched: ${version}`); + } else { + core.debug('match not found'); + } + + return version; +} + +async function acquireNode(version: string): Promise<string> { + // + // Download - a tool installer intimately knows how to get the tool (and construct urls) + // + version = semver.clean(version) || ''; + let fileName: string = + osPlat == 'win32' + ? 'node-v' + version + '-win-' + os.arch() + : 'node-v' + version + '-' + osPlat + '-' + os.arch(); + let urlFileName: string = + osPlat == 'win32' ? fileName + '.7z' : fileName + '.tar.gz'; + + let downloadUrl = 'https://nodejs.org/dist/v' + version + '/' + urlFileName; + + let downloadPath: string; + + try { + downloadPath = await tc.downloadTool(downloadUrl); + } catch (err) { + if (err instanceof tc.HTTPError && err.httpStatusCode == 404) { + return await acquireNodeFromFallbackLocation(version); + } + + throw err; + } + + // + // Extract + // + let extPath: string; + if (osPlat == 'win32') { + let _7zPath = path.join(__dirname, '..', 'externals', '7zr.exe'); + extPath = await tc.extract7z(downloadPath, undefined, _7zPath); + } else { + extPath = await tc.extractTar(downloadPath); + } + + // + // Install into the local tool cache - node extracts with a root folder that matches the fileName downloaded + // + let toolRoot = path.join(extPath, fileName); + return await tc.cacheDir(toolRoot, 'node', version); +} + +// For non LTS versions of Node, the files we need (for Windows) are sometimes located +// in a different folder than they normally are for other versions. +// Normally the format is similar to: https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-x64.7z +// In this case, there will be two files located at: +// /dist/v5.10.1/win-x64/node.exe +// /dist/v5.10.1/win-x64/node.lib +// If this is not the structure, there may also be two files located at: +// /dist/v0.12.18/node.exe +// /dist/v0.12.18/node.lib +// This method attempts to download and cache the resources from these alternative locations. +// Note also that the files are normally zipped but in this case they are just an exe +// and lib file in a folder, not zipped. +async function acquireNodeFromFallbackLocation( + version: string +): Promise<string> { + // Create temporary folder to download in to + let tempDownloadFolder: string = + 'temp_' + Math.floor(Math.random() * 2000000000); + let tempDir: string = path.join(tempDirectory, tempDownloadFolder); + await io.mkdirP(tempDir); + let exeUrl: string; + let libUrl: string; + try { + exeUrl = `https://nodejs.org/dist/v${version}/win-${os.arch()}/node.exe`; + libUrl = `https://nodejs.org/dist/v${version}/win-${os.arch()}/node.lib`; + + const exePath = await tc.downloadTool(exeUrl); + await io.mv(exePath, path.join(tempDir, 'node.exe')); + const libPath = await tc.downloadTool(libUrl); + await io.mv(libPath, path.join(tempDir, 'node.lib')); + } catch (err) { + if (err instanceof tc.HTTPError && err.httpStatusCode == 404) { + exeUrl = `https://nodejs.org/dist/v${version}/node.exe`; + libUrl = `https://nodejs.org/dist/v${version}/node.lib`; + + const exePath = await tc.downloadTool(exeUrl); + await io.mv(exePath, path.join(tempDir, 'node.exe')); + const libPath = await tc.downloadTool(libUrl); + await io.mv(libPath, path.join(tempDir, 'node.lib')); + } else { + throw err; + } + } + return await tc.cacheDir(tempDir, 'node', version); +} diff --git a/src/setup-node.ts b/src/setup-node.ts new file mode 100644 index 0000000..c3dcd37 --- /dev/null +++ b/src/setup-node.ts @@ -0,0 +1,31 @@ +import * as core from '@actions/core'; +import * as installer from './installer'; +import * as path from 'path'; + +async function run() { + try { + // + // Version is optional. If supplied, install / use from the tool cache + // If not supplied then task is still used to setup proxy, auth, etc... + // + const version = core.getInput('version'); + if (version) { + // TODO: installer doesn't support proxy + await installer.getNode(version); + } + + // TODO: setup proxy from runner proxy config + const matchersPath = path.join(__dirname, '..', '.github'); + console.log(`##[add-matcher]${path.join(matchersPath, 'tsc.json')}`); + console.log( + `##[add-matcher]${path.join(matchersPath, 'eslint-stylish.json')}` + ); + console.log( + `##[add-matcher]${path.join(matchersPath, 'eslint-compact.json')}` + ); + } catch (error) { + core.setFailed(error.message); + } +} + +run(); diff --git a/toolkit/actions-core-0.0.0.tgz b/toolkit/actions-core-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..96e8b4c5bf25a1cd4b67aa38558df428a646aff2 GIT binary patch literal 3556 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 literal 0 HcmV?d00001 diff --git a/toolkit/actions-exec-0.0.0.tgz b/toolkit/actions-exec-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..21d71442ee585f63604c19d99cf289f6704893b7 GIT binary patch literal 11281 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 H0M-BiBsl+d literal 0 HcmV?d00001 diff --git a/toolkit/actions-exit-0.0.0.tgz b/toolkit/actions-exit-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d0f1d0845ead2eb10e47db7db63659badfd60052 GIT binary patch literal 1983 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 RfCbzIe*+ojI4=My003LA?-2k1 literal 0 HcmV?d00001 diff --git a/toolkit/actions-io-0.0.0.tgz b/toolkit/actions-io-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..cc33dadd4f40b8556781243ca0e3ac568ab69fd0 GIT binary patch literal 7727 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 literal 0 HcmV?d00001 diff --git a/toolkit/actions-tool-cache-0.0.0.tgz b/toolkit/actions-tool-cache-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4b0e65efec4ced709b4fb69de905d0bd02b4571e GIT binary patch literal 118504 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ⅇ%Y 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:i1 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 VTzjrP*Pi$6`CkAJVU7U$0|3d16y^W` literal 0 HcmV?d00001 diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..25dc099 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,66 @@ +{ + "compilerOptions": { + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + "lib": [ + "es6" + ], + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./lib", /* Redirect output structure to the directory. */ + "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + }, + "exclude": ["node_modules", "**/*.test.ts"] +}