├── .github
└── main.workflow
├── .gitignore
├── .prettierrc
├── constants.js
├── index.js
├── logo.png
├── package.json
├── readme.md
├── scripts
├── build.sh
└── compress.js
├── tfjs-node
├── index.js
├── package.json
└── yarn.lock
└── yarn.lock
/.github/main.workflow:
--------------------------------------------------------------------------------
1 | workflow "build and publish" {
2 | on = "push"
3 | resolves = ["publish"]
4 | }
5 |
6 | action "tag" {
7 | uses = "actions/bin/filter@master"
8 | args = "tag"
9 | }
10 |
11 | action "build" {
12 | needs = "tag"
13 | uses = "docker://lambci/lambda:build-nodejs8.10"
14 | runs = ["./scripts/build.sh"]
15 | }
16 |
17 | action "publish" {
18 | needs = "build"
19 | uses = "actions/npm@master"
20 | args = "publish --access public"
21 | secrets = ["NPM_AUTH_TOKEN"]
22 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | tfjs-node.br
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true
4 | }
5 |
--------------------------------------------------------------------------------
/constants.js:
--------------------------------------------------------------------------------
1 | const { resolve: pathResolve } = require('path')
2 |
3 | const TFJS_PATH = '/tmp/tfjs-node'
4 | const TAR_PATH = pathResolve(__dirname, 'tfjs-node.br')
5 |
6 | module.exports = { TFJS_PATH, TAR_PATH }
7 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | const tar = require('tar')
2 | const iltorb = require('iltorb')
3 | const fs = require('fs')
4 | const { TFJS_PATH, TAR_PATH } = require('./constants')
5 |
6 | // this hack is required to avoid webpack/rollup/... bundling the required path
7 | const requireFunc =
8 | typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require
9 |
10 | function isLambda() {
11 | // check for `now dev` environment first
12 | // because `now dev` sets AWS_LAMBDA_FUNCTION_NAME
13 | if (process.env.NOW_REGION === 'dev1') return false
14 |
15 | return Boolean(process.env.AWS_LAMBDA_FUNCTION_NAME)
16 | }
17 |
18 | async function requireTf() {
19 | const tf = requireFunc(TFJS_PATH)
20 | tf.disableDeprecationWarnings()
21 | return tf
22 | }
23 |
24 | async function createTfPromise() {
25 | // if not in lambda environment, just require the actual package
26 | // this is useful as a way to bypass tensorflow-lambda in development
27 | if (!isLambda()) {
28 | return requireFunc('@tensorflow/tfjs-node')
29 | }
30 |
31 | // if tfjs-node already exists, just require it
32 | if (fs.existsSync(TFJS_PATH)) {
33 | return requireTf()
34 | }
35 |
36 | // else, create the folder and deflate tfjs-node
37 | fs.mkdirSync(TFJS_PATH)
38 |
39 | // unzip tfjs-node
40 | await new Promise((resolve, reject) => {
41 | const x = tar.x({ cwd: TFJS_PATH })
42 |
43 | x.on('finish', resolve)
44 | x.on('error', reject)
45 |
46 | fs.createReadStream(TAR_PATH)
47 | .pipe(iltorb.decompressStream())
48 | .pipe(x)
49 | })
50 |
51 | return requireTf()
52 | }
53 |
54 | let tfPromise
55 |
56 | module.exports = function loadTf() {
57 | if (!tfPromise) {
58 | tfPromise = createTfPromise()
59 | }
60 |
61 | return tfPromise
62 | }
63 |
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucleray/tensorflow-lambda/6f371e19740997ddedd00df991450963b897952e/logo.png
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tensorflow-lambda",
3 | "description": "Run tensorflow on lambda",
4 | "version": "1.0.2",
5 | "main": "index.js",
6 | "author": "lucleray",
7 | "homepage": "https://github.com/lucleray/tensorflow-lambda#readme",
8 | "bugs": {
9 | "url": "https://github.com/lucleray/tensorflow-lambda/issues"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "https://github.com/lucleray/tensorflow-lambda.git"
14 | },
15 | "license": "MIT",
16 | "keywords": [
17 | "tensorflow",
18 | "nodejs",
19 | "lambda"
20 | ],
21 | "files": [
22 | "index.js",
23 | "constants.js",
24 | "tfjs-node.br"
25 | ],
26 | "scripts": {
27 | "build": "node build.js"
28 | },
29 | "dependencies": {
30 | "iltorb": "^2.4.2",
31 | "tar": "^4.4.8"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # tensorflow-lambda
2 |
3 |
4 |

5 |
6 |
7 | ## Usage
8 |
9 | First, install the package:
10 |
11 | ```
12 | yarn add tensorflow-lambda
13 | ```
14 |
15 | You can then use it like this:
16 |
17 | ```js
18 | const loadTf = require('tensorflow-lambda')
19 |
20 | const tf = await loadTf()
21 |
22 | // you get the same `tf` object that would get if you were doing:
23 | // const tf = require('@tensorflow/tfjs')
24 |
25 | tf.tensor([1, 2, 3, 4]).print()
26 | ```
27 |
28 | Have a look at these examples :
29 |
30 | - [object-detection](https://github.com/lucleray/object-detection) (deployed with Vercel)
31 |
32 | ## Local usage
33 |
34 | When not used in a lambda environment (for example, locally on your computer when you're developing), `tensorflow-lambda` will require `@tensorflow/tfjs-node` instead of deflating a pre-compiled version in `/tmp`.
35 |
36 | Therefore, you need to install `@tensorflow/tfjs-node` to use this package locally:
37 |
38 | ```
39 | yarn add @tensorflow/tfjs-node --dev
40 | ```
41 |
42 | You can then use the package the same way you would use it in a lambda environment locally.
43 |
44 | Have a look at [these lines](https://github.com/lucleray/tensorflow-lambda/blob/c056a3959c117d40cc69a1e76572c856b5d23cd6/index.js#L10-L16) to understand how it detects if it runs in a lambda environement.
45 |
46 | ## How it works ?
47 |
48 | The package contains a zipped and compressed version of all the dependencies and binaries needed to run `@tensorflow/tfjs-node` on AWS Lambda (these dependencies are built with Github Actions).
49 |
50 | During cold start, the files are deflated in `/tmp` and required in your node program.
51 |
52 | ## Motivation
53 |
54 | `@tensorflow/tfjs` works with AWS Lambda but the main problem is that it is slow very slow when used in node. On the other hand, `@tensorflow/tfjs-node` is fast when used with node but it is >140mo and it does not fit under AWS Lambda's size limit (50mo) and it needs to be pre-compiled for lambda for it to work in a lambda environment.
55 |
56 | I was looking for an easy way to use tensorflowjs with lambda and I couldn't find any, so I made this package.
57 |
--------------------------------------------------------------------------------
/scripts/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # install packages in the root repository
4 | # this is necessary for scripts/compress.js to work
5 | cd $GITHUB_WORKSPACE
6 | npm install
7 |
8 | # copy tfjs-node folder to /tmp and npm install tfjs-node there
9 | # npm install will download/build binaries for tf to run on lambda
10 | cp -R $GITHUB_WORKSPACE/tfjs-node /tmp/tfjs-node
11 | cd /tmp/tfjs-node
12 | npm install
13 |
14 | # inflate all the files built in /tmp/tfjs-node
15 | # and compress it with brotli
16 | cd $GITHUB_WORKSPACE
17 | node scripts/compress.js
18 |
--------------------------------------------------------------------------------
/scripts/compress.js:
--------------------------------------------------------------------------------
1 | const tar = require('tar')
2 | const iltorb = require('iltorb')
3 | const fs = require('fs')
4 | const { TFJS_PATH, TAR_PATH } = require('../constants')
5 |
6 | tar
7 | .c({ cwd: TFJS_PATH }, ['index.js', 'node_modules'])
8 | .pipe(iltorb.compressStream())
9 | .pipe(fs.createWriteStream(TAR_PATH))
10 |
--------------------------------------------------------------------------------
/tfjs-node/index.js:
--------------------------------------------------------------------------------
1 | module.exports = require('@tensorflow/tfjs-node')
2 |
--------------------------------------------------------------------------------
/tfjs-node/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "build",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "license": "MIT",
6 | "dependencies": {
7 | "@tensorflow/tfjs-node": "0.3.2"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/tfjs-node/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
6 | version "1.1.2"
7 | resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
8 | integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78=
9 |
10 | "@protobufjs/base64@^1.1.2":
11 | version "1.1.2"
12 | resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
13 | integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
14 |
15 | "@protobufjs/codegen@^2.0.4":
16 | version "2.0.4"
17 | resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
18 | integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
19 |
20 | "@protobufjs/eventemitter@^1.1.0":
21 | version "1.1.0"
22 | resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
23 | integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A=
24 |
25 | "@protobufjs/fetch@^1.1.0":
26 | version "1.1.0"
27 | resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
28 | integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=
29 | dependencies:
30 | "@protobufjs/aspromise" "^1.1.1"
31 | "@protobufjs/inquire" "^1.1.0"
32 |
33 | "@protobufjs/float@^1.0.2":
34 | version "1.0.2"
35 | resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
36 | integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=
37 |
38 | "@protobufjs/inquire@^1.1.0":
39 | version "1.1.0"
40 | resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
41 | integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=
42 |
43 | "@protobufjs/path@^1.1.2":
44 | version "1.1.2"
45 | resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
46 | integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=
47 |
48 | "@protobufjs/pool@^1.1.0":
49 | version "1.1.0"
50 | resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
51 | integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=
52 |
53 | "@protobufjs/utf8@^1.1.0":
54 | version "1.1.0"
55 | resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
56 | integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
57 |
58 | "@tensorflow/tfjs-converter@0.8.4":
59 | version "0.8.4"
60 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-0.8.4.tgz#7c1326e9858c6c3a6d23947e31a73e9458450a9b"
61 | integrity sha512-hHTyQiQOeYvFB/zL/jDT51hx+voOoKOVHSAWzPG10G8+H7ljQsRzxj19X/PIk8EUo9TXJT2Aj+/WW0guK+0wJg==
62 | dependencies:
63 | "@types/long" "~3.0.32"
64 | protobufjs "~6.8.6"
65 |
66 | "@tensorflow/tfjs-core@0.15.4":
67 | version "0.15.4"
68 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-0.15.4.tgz#aaf52acd209476ebde7bd9a37a7c60ec9d067b65"
69 | integrity sha512-CWi6PuWOBfFRRzn4gl4rcCtwHkimYexGaQi5rwF2jPntknT8TIhonkacvuBROEfeq2PEvqKzCWJTU5+AmCj2HQ==
70 | dependencies:
71 | "@types/seedrandom" "2.4.27"
72 | "@types/webgl-ext" "0.0.30"
73 | "@types/webgl2" "0.0.4"
74 | seedrandom "2.4.3"
75 |
76 | "@tensorflow/tfjs-data@0.2.3":
77 | version "0.2.3"
78 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-0.2.3.tgz#67c0cd505485c9b0b6a83cb1c8a24559c5adfa68"
79 | integrity sha512-U9eDD35i0jFQtbm90XMP+dVEwaE0hCrhbt6OEpDCTYxdCLOMDnKVmx+q2TOoCPvTxToC6jHOMPKXO23bLAJsxw==
80 | dependencies:
81 | "@types/node-fetch" "^2.1.2"
82 | node-fetch "~2.1.2"
83 | seedrandom "~2.4.3"
84 |
85 | "@tensorflow/tfjs-layers@0.10.3":
86 | version "0.10.3"
87 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-0.10.3.tgz#cf4001b5b7566b1526e65e615439e85070a1012c"
88 | integrity sha512-Xhaz4+ZuL2SEm3S0u4x04dMYMrcG4w4dhMOjoQW8GhAJU4p7LkmP9TmwMEHp7CIVJiJzzQy7Hg8E5fESEnJinA==
89 |
90 | "@tensorflow/tfjs-node@0.3.2":
91 | version "0.3.2"
92 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-node/-/tfjs-node-0.3.2.tgz#b1108bf2ea908a12acd5731a18de8cb07f38b3e4"
93 | integrity sha512-N1v+DtCM3A0awDKf8lmRkHzq4LrqcWt969Ci77sXMdxC2eWqkO6t+eG4c+nlCy9RoclZo4JFwqq1MPf1dO6t+A==
94 | dependencies:
95 | "@tensorflow/tfjs" "~0.15.3"
96 | adm-zip "^0.4.11"
97 | bindings "~1.3.0"
98 | https-proxy-agent "^2.2.1"
99 | node-fetch "^2.3.0"
100 | progress "^2.0.0"
101 | rimraf "^2.6.2"
102 | tar "^4.4.6"
103 |
104 | "@tensorflow/tfjs@~0.15.3":
105 | version "0.15.3"
106 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-0.15.3.tgz#6608833952858c8984f20962eb86624f99196f06"
107 | integrity sha512-NBAs+iGBNBxprm98mk488EfTDl2kA/lzNguoQGEMeIPWVHTbadSn2QV5xXKAf/fcOat+JwVfqe2vxHBbTjHMOw==
108 | dependencies:
109 | "@tensorflow/tfjs-converter" "0.8.4"
110 | "@tensorflow/tfjs-core" "0.15.4"
111 | "@tensorflow/tfjs-data" "0.2.3"
112 | "@tensorflow/tfjs-layers" "0.10.3"
113 |
114 | "@types/long@^4.0.0":
115 | version "4.0.0"
116 | resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef"
117 | integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==
118 |
119 | "@types/long@~3.0.32":
120 | version "3.0.32"
121 | resolved "https://registry.yarnpkg.com/@types/long/-/long-3.0.32.tgz#f4e5af31e9e9b196d8e5fca8a5e2e20aa3d60b69"
122 | integrity sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA==
123 |
124 | "@types/node-fetch@^2.1.2":
125 | version "2.1.6"
126 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.1.6.tgz#4326288b49f352a142f03c63526ebce0f4c50877"
127 | integrity sha512-Hv1jgh3pfpUEl2F2mqUd1AfLSk1YbUCeBJFaP36t7esAO617dErqdxWb5cdG2NfJGOofkmBW36fdx0dVewxDRg==
128 | dependencies:
129 | "@types/node" "*"
130 |
131 | "@types/node@*":
132 | version "11.11.2"
133 | resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.2.tgz#873d2c3f3824212cc16130074699e1bcb38c0231"
134 | integrity sha512-iEaHiDNkHv4Jrm9O5T37OYEUwjJesiyt6ZlhLFK0sbo4CLD0jyCOB4Pc2F9iD3MbW2397SLNxZKdDGntGaBjQQ==
135 |
136 | "@types/node@^10.1.0":
137 | version "10.14.0"
138 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.0.tgz#1c297530428c6f4e0a0a3222f5b44745669aa9f7"
139 | integrity sha512-1UhSMMDix7bVdUeqtZERQQyJr3QuFoN5X5APtpIooGkumE3crPaeq7UgFeJNjGD8yCQ8od8PzRkgptR5+x327Q==
140 |
141 | "@types/seedrandom@2.4.27":
142 | version "2.4.27"
143 | resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.27.tgz#9db563937dd86915f69092bc43259d2f48578e41"
144 | integrity sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE=
145 |
146 | "@types/webgl-ext@0.0.30":
147 | version "0.0.30"
148 | resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d"
149 | integrity sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==
150 |
151 | "@types/webgl2@0.0.4":
152 | version "0.0.4"
153 | resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.4.tgz#c3b0f9d6b465c66138e84e64cb3bdf8373c2c279"
154 | integrity sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw==
155 |
156 | adm-zip@^0.4.11:
157 | version "0.4.13"
158 | resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a"
159 | integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==
160 |
161 | agent-base@^4.1.0:
162 | version "4.2.1"
163 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
164 | integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
165 | dependencies:
166 | es6-promisify "^5.0.0"
167 |
168 | balanced-match@^1.0.0:
169 | version "1.0.0"
170 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
171 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
172 |
173 | bindings@~1.3.0:
174 | version "1.3.1"
175 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.1.tgz#21fc7c6d67c18516ec5aaa2815b145ff77b26ea5"
176 | integrity sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==
177 |
178 | brace-expansion@^1.1.7:
179 | version "1.1.11"
180 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
181 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
182 | dependencies:
183 | balanced-match "^1.0.0"
184 | concat-map "0.0.1"
185 |
186 | chownr@^1.1.1:
187 | version "1.1.1"
188 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
189 | integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
190 |
191 | concat-map@0.0.1:
192 | version "0.0.1"
193 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
194 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
195 |
196 | debug@^3.1.0:
197 | version "3.2.6"
198 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
199 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
200 | dependencies:
201 | ms "^2.1.1"
202 |
203 | es6-promise@^4.0.3:
204 | version "4.2.6"
205 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f"
206 | integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==
207 |
208 | es6-promisify@^5.0.0:
209 | version "5.0.0"
210 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
211 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
212 | dependencies:
213 | es6-promise "^4.0.3"
214 |
215 | fs-minipass@^1.2.5:
216 | version "1.2.5"
217 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
218 | integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
219 | dependencies:
220 | minipass "^2.2.1"
221 |
222 | fs.realpath@^1.0.0:
223 | version "1.0.0"
224 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
225 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
226 |
227 | glob@^7.1.3:
228 | version "7.1.3"
229 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
230 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
231 | dependencies:
232 | fs.realpath "^1.0.0"
233 | inflight "^1.0.4"
234 | inherits "2"
235 | minimatch "^3.0.4"
236 | once "^1.3.0"
237 | path-is-absolute "^1.0.0"
238 |
239 | https-proxy-agent@^2.2.1:
240 | version "2.2.1"
241 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
242 | integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
243 | dependencies:
244 | agent-base "^4.1.0"
245 | debug "^3.1.0"
246 |
247 | inflight@^1.0.4:
248 | version "1.0.6"
249 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
250 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
251 | dependencies:
252 | once "^1.3.0"
253 | wrappy "1"
254 |
255 | inherits@2:
256 | version "2.0.3"
257 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
258 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
259 |
260 | long@^4.0.0:
261 | version "4.0.0"
262 | resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
263 | integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
264 |
265 | minimatch@^3.0.4:
266 | version "3.0.4"
267 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
268 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
269 | dependencies:
270 | brace-expansion "^1.1.7"
271 |
272 | minimist@0.0.8:
273 | version "0.0.8"
274 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
275 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
276 |
277 | minipass@^2.2.1, minipass@^2.3.4:
278 | version "2.3.5"
279 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
280 | integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
281 | dependencies:
282 | safe-buffer "^5.1.2"
283 | yallist "^3.0.0"
284 |
285 | minizlib@^1.1.1:
286 | version "1.2.1"
287 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
288 | integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
289 | dependencies:
290 | minipass "^2.2.1"
291 |
292 | mkdirp@^0.5.0:
293 | version "0.5.1"
294 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
295 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
296 | dependencies:
297 | minimist "0.0.8"
298 |
299 | ms@^2.1.1:
300 | version "2.1.1"
301 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
302 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
303 |
304 | node-fetch@^2.3.0:
305 | version "2.3.0"
306 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5"
307 | integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==
308 |
309 | node-fetch@~2.1.2:
310 | version "2.1.2"
311 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5"
312 | integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=
313 |
314 | once@^1.3.0:
315 | version "1.4.0"
316 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
317 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
318 | dependencies:
319 | wrappy "1"
320 |
321 | path-is-absolute@^1.0.0:
322 | version "1.0.1"
323 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
324 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
325 |
326 | progress@^2.0.0:
327 | version "2.0.3"
328 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
329 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
330 |
331 | protobufjs@~6.8.6:
332 | version "6.8.8"
333 | resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c"
334 | integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==
335 | dependencies:
336 | "@protobufjs/aspromise" "^1.1.2"
337 | "@protobufjs/base64" "^1.1.2"
338 | "@protobufjs/codegen" "^2.0.4"
339 | "@protobufjs/eventemitter" "^1.1.0"
340 | "@protobufjs/fetch" "^1.1.0"
341 | "@protobufjs/float" "^1.0.2"
342 | "@protobufjs/inquire" "^1.1.0"
343 | "@protobufjs/path" "^1.1.2"
344 | "@protobufjs/pool" "^1.1.0"
345 | "@protobufjs/utf8" "^1.1.0"
346 | "@types/long" "^4.0.0"
347 | "@types/node" "^10.1.0"
348 | long "^4.0.0"
349 |
350 | rimraf@^2.6.2:
351 | version "2.6.3"
352 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
353 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
354 | dependencies:
355 | glob "^7.1.3"
356 |
357 | safe-buffer@^5.1.2:
358 | version "5.1.2"
359 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
360 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
361 |
362 | seedrandom@2.4.3:
363 | version "2.4.3"
364 | resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc"
365 | integrity sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=
366 |
367 | seedrandom@~2.4.3:
368 | version "2.4.4"
369 | resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.4.tgz#b25ea98632c73e45f58b77cfaa931678df01f9ba"
370 | integrity sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==
371 |
372 | tar@^4.4.6:
373 | version "4.4.8"
374 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
375 | integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
376 | dependencies:
377 | chownr "^1.1.1"
378 | fs-minipass "^1.2.5"
379 | minipass "^2.3.4"
380 | minizlib "^1.1.1"
381 | mkdirp "^0.5.0"
382 | safe-buffer "^5.1.2"
383 | yallist "^3.0.2"
384 |
385 | wrappy@1:
386 | version "1.0.2"
387 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
388 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
389 |
390 | yallist@^3.0.0, yallist@^3.0.2:
391 | version "3.0.3"
392 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
393 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
394 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
6 | version "1.1.2"
7 | resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
8 | integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78=
9 |
10 | "@protobufjs/base64@^1.1.2":
11 | version "1.1.2"
12 | resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
13 | integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
14 |
15 | "@protobufjs/codegen@^2.0.4":
16 | version "2.0.4"
17 | resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
18 | integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
19 |
20 | "@protobufjs/eventemitter@^1.1.0":
21 | version "1.1.0"
22 | resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
23 | integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A=
24 |
25 | "@protobufjs/fetch@^1.1.0":
26 | version "1.1.0"
27 | resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
28 | integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=
29 | dependencies:
30 | "@protobufjs/aspromise" "^1.1.1"
31 | "@protobufjs/inquire" "^1.1.0"
32 |
33 | "@protobufjs/float@^1.0.2":
34 | version "1.0.2"
35 | resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
36 | integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=
37 |
38 | "@protobufjs/inquire@^1.1.0":
39 | version "1.1.0"
40 | resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
41 | integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=
42 |
43 | "@protobufjs/path@^1.1.2":
44 | version "1.1.2"
45 | resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
46 | integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=
47 |
48 | "@protobufjs/pool@^1.1.0":
49 | version "1.1.0"
50 | resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
51 | integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=
52 |
53 | "@protobufjs/utf8@^1.1.0":
54 | version "1.1.0"
55 | resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
56 | integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
57 |
58 | "@tensorflow/tfjs-converter@0.8.4":
59 | version "0.8.4"
60 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-0.8.4.tgz#7c1326e9858c6c3a6d23947e31a73e9458450a9b"
61 | integrity sha512-hHTyQiQOeYvFB/zL/jDT51hx+voOoKOVHSAWzPG10G8+H7ljQsRzxj19X/PIk8EUo9TXJT2Aj+/WW0guK+0wJg==
62 | dependencies:
63 | "@types/long" "~3.0.32"
64 | protobufjs "~6.8.6"
65 |
66 | "@tensorflow/tfjs-core@0.15.4":
67 | version "0.15.4"
68 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-0.15.4.tgz#aaf52acd209476ebde7bd9a37a7c60ec9d067b65"
69 | integrity sha512-CWi6PuWOBfFRRzn4gl4rcCtwHkimYexGaQi5rwF2jPntknT8TIhonkacvuBROEfeq2PEvqKzCWJTU5+AmCj2HQ==
70 | dependencies:
71 | "@types/seedrandom" "2.4.27"
72 | "@types/webgl-ext" "0.0.30"
73 | "@types/webgl2" "0.0.4"
74 | seedrandom "2.4.3"
75 |
76 | "@tensorflow/tfjs-data@0.2.3":
77 | version "0.2.3"
78 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-0.2.3.tgz#67c0cd505485c9b0b6a83cb1c8a24559c5adfa68"
79 | integrity sha512-U9eDD35i0jFQtbm90XMP+dVEwaE0hCrhbt6OEpDCTYxdCLOMDnKVmx+q2TOoCPvTxToC6jHOMPKXO23bLAJsxw==
80 | dependencies:
81 | "@types/node-fetch" "^2.1.2"
82 | node-fetch "~2.1.2"
83 | seedrandom "~2.4.3"
84 |
85 | "@tensorflow/tfjs-layers@0.10.3":
86 | version "0.10.3"
87 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-0.10.3.tgz#cf4001b5b7566b1526e65e615439e85070a1012c"
88 | integrity sha512-Xhaz4+ZuL2SEm3S0u4x04dMYMrcG4w4dhMOjoQW8GhAJU4p7LkmP9TmwMEHp7CIVJiJzzQy7Hg8E5fESEnJinA==
89 |
90 | "@tensorflow/tfjs-node@^0.3.2":
91 | version "0.3.2"
92 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-node/-/tfjs-node-0.3.2.tgz#b1108bf2ea908a12acd5731a18de8cb07f38b3e4"
93 | integrity sha512-N1v+DtCM3A0awDKf8lmRkHzq4LrqcWt969Ci77sXMdxC2eWqkO6t+eG4c+nlCy9RoclZo4JFwqq1MPf1dO6t+A==
94 | dependencies:
95 | "@tensorflow/tfjs" "~0.15.3"
96 | adm-zip "^0.4.11"
97 | bindings "~1.3.0"
98 | https-proxy-agent "^2.2.1"
99 | node-fetch "^2.3.0"
100 | progress "^2.0.0"
101 | rimraf "^2.6.2"
102 | tar "^4.4.6"
103 |
104 | "@tensorflow/tfjs@~0.15.3":
105 | version "0.15.3"
106 | resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-0.15.3.tgz#6608833952858c8984f20962eb86624f99196f06"
107 | integrity sha512-NBAs+iGBNBxprm98mk488EfTDl2kA/lzNguoQGEMeIPWVHTbadSn2QV5xXKAf/fcOat+JwVfqe2vxHBbTjHMOw==
108 | dependencies:
109 | "@tensorflow/tfjs-converter" "0.8.4"
110 | "@tensorflow/tfjs-core" "0.15.4"
111 | "@tensorflow/tfjs-data" "0.2.3"
112 | "@tensorflow/tfjs-layers" "0.10.3"
113 |
114 | "@types/long@^4.0.0":
115 | version "4.0.0"
116 | resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef"
117 | integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==
118 |
119 | "@types/long@~3.0.32":
120 | version "3.0.32"
121 | resolved "https://registry.yarnpkg.com/@types/long/-/long-3.0.32.tgz#f4e5af31e9e9b196d8e5fca8a5e2e20aa3d60b69"
122 | integrity sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA==
123 |
124 | "@types/node-fetch@^2.1.2":
125 | version "2.1.6"
126 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.1.6.tgz#4326288b49f352a142f03c63526ebce0f4c50877"
127 | integrity sha512-Hv1jgh3pfpUEl2F2mqUd1AfLSk1YbUCeBJFaP36t7esAO617dErqdxWb5cdG2NfJGOofkmBW36fdx0dVewxDRg==
128 | dependencies:
129 | "@types/node" "*"
130 |
131 | "@types/node@*":
132 | version "11.11.2"
133 | resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.2.tgz#873d2c3f3824212cc16130074699e1bcb38c0231"
134 | integrity sha512-iEaHiDNkHv4Jrm9O5T37OYEUwjJesiyt6ZlhLFK0sbo4CLD0jyCOB4Pc2F9iD3MbW2397SLNxZKdDGntGaBjQQ==
135 |
136 | "@types/node@^10.1.0":
137 | version "10.14.0"
138 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.0.tgz#1c297530428c6f4e0a0a3222f5b44745669aa9f7"
139 | integrity sha512-1UhSMMDix7bVdUeqtZERQQyJr3QuFoN5X5APtpIooGkumE3crPaeq7UgFeJNjGD8yCQ8od8PzRkgptR5+x327Q==
140 |
141 | "@types/seedrandom@2.4.27":
142 | version "2.4.27"
143 | resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.27.tgz#9db563937dd86915f69092bc43259d2f48578e41"
144 | integrity sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE=
145 |
146 | "@types/webgl-ext@0.0.30":
147 | version "0.0.30"
148 | resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d"
149 | integrity sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==
150 |
151 | "@types/webgl2@0.0.4":
152 | version "0.0.4"
153 | resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.4.tgz#c3b0f9d6b465c66138e84e64cb3bdf8373c2c279"
154 | integrity sha512-PACt1xdErJbMUOUweSrbVM7gSIYm1vTncW2hF6Os/EeWi6TXYAYMPp+8v6rzHmypE5gHrxaxZNXgMkJVIdZpHw==
155 |
156 | adm-zip@^0.4.11:
157 | version "0.4.13"
158 | resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a"
159 | integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==
160 |
161 | agent-base@^4.1.0:
162 | version "4.2.1"
163 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
164 | integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
165 | dependencies:
166 | es6-promisify "^5.0.0"
167 |
168 | ansi-regex@^2.0.0:
169 | version "2.1.1"
170 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
171 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
172 |
173 | ansi-regex@^3.0.0:
174 | version "3.0.0"
175 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
176 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
177 |
178 | aproba@^1.0.3:
179 | version "1.2.0"
180 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
181 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
182 |
183 | are-we-there-yet@~1.1.2:
184 | version "1.1.5"
185 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
186 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
187 | dependencies:
188 | delegates "^1.0.0"
189 | readable-stream "^2.0.6"
190 |
191 | balanced-match@^1.0.0:
192 | version "1.0.0"
193 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
194 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
195 |
196 | bindings@~1.3.0:
197 | version "1.3.1"
198 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.1.tgz#21fc7c6d67c18516ec5aaa2815b145ff77b26ea5"
199 | integrity sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==
200 |
201 | bl@^1.0.0:
202 | version "1.2.2"
203 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
204 | integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
205 | dependencies:
206 | readable-stream "^2.3.5"
207 | safe-buffer "^5.1.1"
208 |
209 | brace-expansion@^1.1.7:
210 | version "1.1.11"
211 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
212 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
213 | dependencies:
214 | balanced-match "^1.0.0"
215 | concat-map "0.0.1"
216 |
217 | buffer-alloc-unsafe@^1.1.0:
218 | version "1.1.0"
219 | resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
220 | integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
221 |
222 | buffer-alloc@^1.2.0:
223 | version "1.2.0"
224 | resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
225 | integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
226 | dependencies:
227 | buffer-alloc-unsafe "^1.1.0"
228 | buffer-fill "^1.0.0"
229 |
230 | buffer-fill@^1.0.0:
231 | version "1.0.0"
232 | resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
233 | integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
234 |
235 | chownr@^1.0.1, chownr@^1.1.1:
236 | version "1.1.1"
237 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
238 | integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
239 |
240 | code-point-at@^1.0.0:
241 | version "1.1.0"
242 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
243 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
244 |
245 | concat-map@0.0.1:
246 | version "0.0.1"
247 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
248 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
249 |
250 | console-control-strings@^1.0.0, console-control-strings@~1.1.0:
251 | version "1.1.0"
252 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
253 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
254 |
255 | core-util-is@~1.0.0:
256 | version "1.0.2"
257 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
258 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
259 |
260 | debug@^3.1.0:
261 | version "3.2.6"
262 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
263 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
264 | dependencies:
265 | ms "^2.1.1"
266 |
267 | decompress-response@^3.3.0:
268 | version "3.3.0"
269 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3"
270 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=
271 | dependencies:
272 | mimic-response "^1.0.0"
273 |
274 | deep-extend@^0.6.0:
275 | version "0.6.0"
276 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
277 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
278 |
279 | delegates@^1.0.0:
280 | version "1.0.0"
281 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
282 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
283 |
284 | detect-libc@^1.0.3:
285 | version "1.0.3"
286 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
287 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
288 |
289 | end-of-stream@^1.0.0, end-of-stream@^1.1.0:
290 | version "1.4.1"
291 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
292 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
293 | dependencies:
294 | once "^1.4.0"
295 |
296 | es6-promise@^4.0.3:
297 | version "4.2.6"
298 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f"
299 | integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==
300 |
301 | es6-promisify@^5.0.0:
302 | version "5.0.0"
303 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
304 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
305 | dependencies:
306 | es6-promise "^4.0.3"
307 |
308 | expand-template@^2.0.3:
309 | version "2.0.3"
310 | resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
311 | integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
312 |
313 | fs-constants@^1.0.0:
314 | version "1.0.0"
315 | resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
316 | integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
317 |
318 | fs-minipass@^1.2.5:
319 | version "1.2.5"
320 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
321 | integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
322 | dependencies:
323 | minipass "^2.2.1"
324 |
325 | fs.realpath@^1.0.0:
326 | version "1.0.0"
327 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
328 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
329 |
330 | gauge@~2.7.3:
331 | version "2.7.4"
332 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
333 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
334 | dependencies:
335 | aproba "^1.0.3"
336 | console-control-strings "^1.0.0"
337 | has-unicode "^2.0.0"
338 | object-assign "^4.1.0"
339 | signal-exit "^3.0.0"
340 | string-width "^1.0.1"
341 | strip-ansi "^3.0.1"
342 | wide-align "^1.1.0"
343 |
344 | github-from-package@0.0.0:
345 | version "0.0.0"
346 | resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
347 | integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
348 |
349 | glob@^7.1.3:
350 | version "7.1.3"
351 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
352 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
353 | dependencies:
354 | fs.realpath "^1.0.0"
355 | inflight "^1.0.4"
356 | inherits "2"
357 | minimatch "^3.0.4"
358 | once "^1.3.0"
359 | path-is-absolute "^1.0.0"
360 |
361 | has-unicode@^2.0.0:
362 | version "2.0.1"
363 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
364 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
365 |
366 | https-proxy-agent@^2.2.1:
367 | version "2.2.1"
368 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
369 | integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
370 | dependencies:
371 | agent-base "^4.1.0"
372 | debug "^3.1.0"
373 |
374 | iltorb@^2.4.2:
375 | version "2.4.2"
376 | resolved "https://registry.yarnpkg.com/iltorb/-/iltorb-2.4.2.tgz#51e341045ad5181bf64832a569ec576e7df0faf2"
377 | integrity sha512-RvsVTHt1Pw1/Zcepfd+3jinu38rO8IBFVONcroT9Dwrb5RSNE/CEX7uy1yZKN/kYCQB7FWx/oQgXhN9qAwZY9Q==
378 | dependencies:
379 | detect-libc "^1.0.3"
380 | nan "^2.12.1"
381 | npmlog "^4.1.2"
382 | prebuild-install "^5.2.4"
383 | which-pm-runs "^1.0.0"
384 |
385 | inflight@^1.0.4:
386 | version "1.0.6"
387 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
388 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
389 | dependencies:
390 | once "^1.3.0"
391 | wrappy "1"
392 |
393 | inherits@2, inherits@~2.0.3:
394 | version "2.0.3"
395 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
396 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
397 |
398 | ini@~1.3.0:
399 | version "1.3.5"
400 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
401 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
402 |
403 | is-fullwidth-code-point@^1.0.0:
404 | version "1.0.0"
405 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
406 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
407 | dependencies:
408 | number-is-nan "^1.0.0"
409 |
410 | is-fullwidth-code-point@^2.0.0:
411 | version "2.0.0"
412 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
413 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
414 |
415 | isarray@~1.0.0:
416 | version "1.0.0"
417 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
418 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
419 |
420 | long@^4.0.0:
421 | version "4.0.0"
422 | resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
423 | integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
424 |
425 | mimic-response@^1.0.0:
426 | version "1.0.1"
427 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
428 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
429 |
430 | minimatch@^3.0.4:
431 | version "3.0.4"
432 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
433 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
434 | dependencies:
435 | brace-expansion "^1.1.7"
436 |
437 | minimist@0.0.8:
438 | version "0.0.8"
439 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
440 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
441 |
442 | minimist@^1.2.0:
443 | version "1.2.0"
444 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
445 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
446 |
447 | minipass@^2.2.1, minipass@^2.3.4:
448 | version "2.3.5"
449 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
450 | integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
451 | dependencies:
452 | safe-buffer "^5.1.2"
453 | yallist "^3.0.0"
454 |
455 | minizlib@^1.1.1:
456 | version "1.2.1"
457 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614"
458 | integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==
459 | dependencies:
460 | minipass "^2.2.1"
461 |
462 | mkdirp@^0.5.0, mkdirp@^0.5.1:
463 | version "0.5.1"
464 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
465 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
466 | dependencies:
467 | minimist "0.0.8"
468 |
469 | ms@^2.1.1:
470 | version "2.1.1"
471 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
472 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
473 |
474 | nan@^2.12.1:
475 | version "2.12.1"
476 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
477 | integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
478 |
479 | napi-build-utils@^1.0.1:
480 | version "1.0.1"
481 | resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508"
482 | integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==
483 |
484 | node-abi@^2.7.0:
485 | version "2.7.1"
486 | resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.7.1.tgz#a8997ae91176a5fbaa455b194976e32683cda643"
487 | integrity sha512-OV8Bq1OrPh6z+Y4dqwo05HqrRL9YNF7QVMRfq1/pguwKLG+q9UB/Lk0x5qXjO23JjJg+/jqCHSTaG1P3tfKfuw==
488 | dependencies:
489 | semver "^5.4.1"
490 |
491 | node-fetch@^2.3.0:
492 | version "2.3.0"
493 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5"
494 | integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==
495 |
496 | node-fetch@~2.1.2:
497 | version "2.1.2"
498 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5"
499 | integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=
500 |
501 | noop-logger@^0.1.1:
502 | version "0.1.1"
503 | resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
504 | integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=
505 |
506 | npmlog@^4.0.1, npmlog@^4.1.2:
507 | version "4.1.2"
508 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
509 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
510 | dependencies:
511 | are-we-there-yet "~1.1.2"
512 | console-control-strings "~1.1.0"
513 | gauge "~2.7.3"
514 | set-blocking "~2.0.0"
515 |
516 | number-is-nan@^1.0.0:
517 | version "1.0.1"
518 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
519 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
520 |
521 | object-assign@^4.1.0:
522 | version "4.1.1"
523 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
524 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
525 |
526 | once@^1.3.0, once@^1.3.1, once@^1.4.0:
527 | version "1.4.0"
528 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
529 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
530 | dependencies:
531 | wrappy "1"
532 |
533 | os-homedir@^1.0.1:
534 | version "1.0.2"
535 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
536 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
537 |
538 | path-is-absolute@^1.0.0:
539 | version "1.0.1"
540 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
541 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
542 |
543 | prebuild-install@^5.2.4:
544 | version "5.2.5"
545 | resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.5.tgz#c7485911fe98950b7f7cd15bb9daee11b875cc44"
546 | integrity sha512-6uZgMVg7yDfqlP5CPurVhtq3hUKBFNufiar4J5hZrlHTo59DDBEtyxw01xCdFss9j0Zb9+qzFVf/s4niayba3w==
547 | dependencies:
548 | detect-libc "^1.0.3"
549 | expand-template "^2.0.3"
550 | github-from-package "0.0.0"
551 | minimist "^1.2.0"
552 | mkdirp "^0.5.1"
553 | napi-build-utils "^1.0.1"
554 | node-abi "^2.7.0"
555 | noop-logger "^0.1.1"
556 | npmlog "^4.0.1"
557 | os-homedir "^1.0.1"
558 | pump "^2.0.1"
559 | rc "^1.2.7"
560 | simple-get "^2.7.0"
561 | tar-fs "^1.13.0"
562 | tunnel-agent "^0.6.0"
563 | which-pm-runs "^1.0.0"
564 |
565 | process-nextick-args@~2.0.0:
566 | version "2.0.0"
567 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
568 | integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
569 |
570 | progress@^2.0.0:
571 | version "2.0.3"
572 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
573 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
574 |
575 | protobufjs@~6.8.6:
576 | version "6.8.8"
577 | resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c"
578 | integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==
579 | dependencies:
580 | "@protobufjs/aspromise" "^1.1.2"
581 | "@protobufjs/base64" "^1.1.2"
582 | "@protobufjs/codegen" "^2.0.4"
583 | "@protobufjs/eventemitter" "^1.1.0"
584 | "@protobufjs/fetch" "^1.1.0"
585 | "@protobufjs/float" "^1.0.2"
586 | "@protobufjs/inquire" "^1.1.0"
587 | "@protobufjs/path" "^1.1.2"
588 | "@protobufjs/pool" "^1.1.0"
589 | "@protobufjs/utf8" "^1.1.0"
590 | "@types/long" "^4.0.0"
591 | "@types/node" "^10.1.0"
592 | long "^4.0.0"
593 |
594 | pump@^1.0.0:
595 | version "1.0.3"
596 | resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954"
597 | integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==
598 | dependencies:
599 | end-of-stream "^1.1.0"
600 | once "^1.3.1"
601 |
602 | pump@^2.0.1:
603 | version "2.0.1"
604 | resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
605 | integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
606 | dependencies:
607 | end-of-stream "^1.1.0"
608 | once "^1.3.1"
609 |
610 | rc@^1.2.7:
611 | version "1.2.8"
612 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
613 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
614 | dependencies:
615 | deep-extend "^0.6.0"
616 | ini "~1.3.0"
617 | minimist "^1.2.0"
618 | strip-json-comments "~2.0.1"
619 |
620 | readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5:
621 | version "2.3.6"
622 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
623 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
624 | dependencies:
625 | core-util-is "~1.0.0"
626 | inherits "~2.0.3"
627 | isarray "~1.0.0"
628 | process-nextick-args "~2.0.0"
629 | safe-buffer "~5.1.1"
630 | string_decoder "~1.1.1"
631 | util-deprecate "~1.0.1"
632 |
633 | rimraf@^2.6.2:
634 | version "2.6.3"
635 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
636 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
637 | dependencies:
638 | glob "^7.1.3"
639 |
640 | safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
641 | version "5.1.2"
642 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
643 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
644 |
645 | seedrandom@2.4.3:
646 | version "2.4.3"
647 | resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc"
648 | integrity sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=
649 |
650 | seedrandom@~2.4.3:
651 | version "2.4.4"
652 | resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.4.tgz#b25ea98632c73e45f58b77cfaa931678df01f9ba"
653 | integrity sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==
654 |
655 | semver@^5.4.1:
656 | version "5.6.0"
657 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
658 | integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
659 |
660 | set-blocking@~2.0.0:
661 | version "2.0.0"
662 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
663 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
664 |
665 | signal-exit@^3.0.0:
666 | version "3.0.2"
667 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
668 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
669 |
670 | simple-concat@^1.0.0:
671 | version "1.0.0"
672 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6"
673 | integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=
674 |
675 | simple-get@^2.7.0:
676 | version "2.8.1"
677 | resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d"
678 | integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==
679 | dependencies:
680 | decompress-response "^3.3.0"
681 | once "^1.3.1"
682 | simple-concat "^1.0.0"
683 |
684 | string-width@^1.0.1:
685 | version "1.0.2"
686 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
687 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
688 | dependencies:
689 | code-point-at "^1.0.0"
690 | is-fullwidth-code-point "^1.0.0"
691 | strip-ansi "^3.0.0"
692 |
693 | "string-width@^1.0.2 || 2":
694 | version "2.1.1"
695 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
696 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
697 | dependencies:
698 | is-fullwidth-code-point "^2.0.0"
699 | strip-ansi "^4.0.0"
700 |
701 | string_decoder@~1.1.1:
702 | version "1.1.1"
703 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
704 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
705 | dependencies:
706 | safe-buffer "~5.1.0"
707 |
708 | strip-ansi@^3.0.0, strip-ansi@^3.0.1:
709 | version "3.0.1"
710 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
711 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
712 | dependencies:
713 | ansi-regex "^2.0.0"
714 |
715 | strip-ansi@^4.0.0:
716 | version "4.0.0"
717 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
718 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
719 | dependencies:
720 | ansi-regex "^3.0.0"
721 |
722 | strip-json-comments@~2.0.1:
723 | version "2.0.1"
724 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
725 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
726 |
727 | tar-fs@^1.13.0:
728 | version "1.16.3"
729 | resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509"
730 | integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==
731 | dependencies:
732 | chownr "^1.0.1"
733 | mkdirp "^0.5.1"
734 | pump "^1.0.0"
735 | tar-stream "^1.1.2"
736 |
737 | tar-stream@^1.1.2:
738 | version "1.6.2"
739 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
740 | integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
741 | dependencies:
742 | bl "^1.0.0"
743 | buffer-alloc "^1.2.0"
744 | end-of-stream "^1.0.0"
745 | fs-constants "^1.0.0"
746 | readable-stream "^2.3.0"
747 | to-buffer "^1.1.1"
748 | xtend "^4.0.0"
749 |
750 | tar@^4.4.6, tar@^4.4.8:
751 | version "4.4.8"
752 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
753 | integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
754 | dependencies:
755 | chownr "^1.1.1"
756 | fs-minipass "^1.2.5"
757 | minipass "^2.3.4"
758 | minizlib "^1.1.1"
759 | mkdirp "^0.5.0"
760 | safe-buffer "^5.1.2"
761 | yallist "^3.0.2"
762 |
763 | to-buffer@^1.1.1:
764 | version "1.1.1"
765 | resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
766 | integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
767 |
768 | tunnel-agent@^0.6.0:
769 | version "0.6.0"
770 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
771 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
772 | dependencies:
773 | safe-buffer "^5.0.1"
774 |
775 | util-deprecate@~1.0.1:
776 | version "1.0.2"
777 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
778 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
779 |
780 | which-pm-runs@^1.0.0:
781 | version "1.0.0"
782 | resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb"
783 | integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=
784 |
785 | wide-align@^1.1.0:
786 | version "1.1.3"
787 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
788 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
789 | dependencies:
790 | string-width "^1.0.2 || 2"
791 |
792 | wrappy@1:
793 | version "1.0.2"
794 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
795 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
796 |
797 | xtend@^4.0.0:
798 | version "4.0.1"
799 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
800 | integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
801 |
802 | yallist@^3.0.0, yallist@^3.0.2:
803 | version "3.0.3"
804 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
805 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
806 |
--------------------------------------------------------------------------------