arshjaved commited on
Commit
f9f1a35
·
verified ·
1 Parent(s): 99ba3bb

normal Model Upload (teja)

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +2 -0
  2. datalab/run.sh +75 -0
  3. datalab/web/app.js +78 -0
  4. datalab/web/appSettings.js +144 -0
  5. datalab/web/config/basePath.json +1 -0
  6. datalab/web/config/settings.json +8 -0
  7. datalab/web/json_rpc.js +137 -0
  8. datalab/web/jupyter.js +213 -0
  9. datalab/web/logging.js +129 -0
  10. datalab/web/lsp/capabilities_node.js +3 -0
  11. datalab/web/lsp/extensions_node.js +14 -0
  12. datalab/web/lsp/protocol_node.js +191 -0
  13. datalab/web/lsp/settings_node.js +44 -0
  14. datalab/web/lsp/text_document_node.js +0 -0
  15. datalab/web/lsp/window_node.js +24 -0
  16. datalab/web/lsp/workspace_node.js +41 -0
  17. datalab/web/node_modules/.bin/bunyan +3 -0
  18. datalab/web/node_modules/.bin/mkdirp +3 -0
  19. datalab/web/node_modules/.bin/ncp +3 -0
  20. datalab/web/node_modules/.bin/rimraf +3 -0
  21. datalab/web/node_modules/.bin/semver +3 -0
  22. datalab/web/node_modules/.package-lock.json +634 -0
  23. datalab/web/node_modules/accepts/HISTORY.md +224 -0
  24. datalab/web/node_modules/accepts/LICENSE +23 -0
  25. datalab/web/node_modules/accepts/README.md +143 -0
  26. datalab/web/node_modules/accepts/index.js +238 -0
  27. datalab/web/node_modules/accepts/package.json +46 -0
  28. datalab/web/node_modules/after/.npmignore +2 -0
  29. datalab/web/node_modules/after/.travis.yml +12 -0
  30. datalab/web/node_modules/after/LICENCE +19 -0
  31. datalab/web/node_modules/after/README.md +115 -0
  32. datalab/web/node_modules/after/index.js +28 -0
  33. datalab/web/node_modules/after/package.json +28 -0
  34. datalab/web/node_modules/after/test/after-test.js +120 -0
  35. datalab/web/node_modules/arraybuffer.slice/.npmignore +17 -0
  36. datalab/web/node_modules/arraybuffer.slice/LICENCE +18 -0
  37. datalab/web/node_modules/arraybuffer.slice/Makefile +8 -0
  38. datalab/web/node_modules/arraybuffer.slice/README.md +17 -0
  39. datalab/web/node_modules/arraybuffer.slice/index.js +29 -0
  40. datalab/web/node_modules/arraybuffer.slice/package.json +16 -0
  41. datalab/web/node_modules/arraybuffer.slice/test/slice-buffer.js +227 -0
  42. datalab/web/node_modules/async-limiter/.travis.yml +7 -0
  43. datalab/web/node_modules/async-limiter/LICENSE +8 -0
  44. datalab/web/node_modules/async-limiter/coverage/coverage.json +1 -0
  45. datalab/web/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html +73 -0
  46. datalab/web/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html +246 -0
  47. datalab/web/node_modules/async-limiter/coverage/lcov-report/base.css +182 -0
  48. datalab/web/node_modules/async-limiter/coverage/lcov-report/index.html +73 -0
  49. datalab/web/node_modules/async-limiter/coverage/lcov-report/prettify.css +1 -0
  50. datalab/web/node_modules/async-limiter/coverage/lcov-report/prettify.js +1 -0
.gitattributes CHANGED
@@ -37,3 +37,5 @@ sample_data/mnist_test.csv filter=lfs diff=lfs merge=lfs -text
37
  sample_data/mnist_train_small.csv filter=lfs diff=lfs merge=lfs -text
38
  updated_data.csv filter=lfs diff=lfs merge=lfs -text
39
  updated_data_train.csv filter=lfs diff=lfs merge=lfs -text
 
 
 
37
  sample_data/mnist_train_small.csv filter=lfs diff=lfs merge=lfs -text
38
  updated_data.csv filter=lfs diff=lfs merge=lfs -text
39
  updated_data_train.csv filter=lfs diff=lfs merge=lfs -text
40
+ datalab/web/node_modules/dtrace-provider/build/node_gyp_bins/python3 filter=lfs diff=lfs merge=lfs -text
41
+ datalab/web/node_modules/node-pty/build/node_gyp_bins/python3 filter=lfs diff=lfs merge=lfs -text
datalab/run.sh ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash -e
2
+
3
+ # Copyright 2017 Google Inc. All rights reserved.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # At least one GPU is considered available iff COLAB_GPU=1.
18
+ export COLAB_GPU="$([[ -c /dev/nvidiactl ]] && echo 1)"
19
+
20
+ /usr/local/colab/bin/oom_monitor.sh &
21
+
22
+ # Start the Colab proxy to the Jupyter kernel manager.
23
+ # TODO(b/267667580): Evaluate use of tcmalloc here and possibly other places.
24
+ ( while true; do
25
+ GCE_METADATA_HOST="${VM_GCE_METADATA_HOST}" \
26
+ LD_PRELOAD='/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4' \
27
+ /usr/colab/bin/kernel_manager_proxy \
28
+ --listen_port="${KMP_LISTEN_PORT}" \
29
+ --target_port="${KMP_TARGET_PORT}" \
30
+ ${KMP_EXTRA_ARGS} || true
31
+ sleep 1
32
+ done & )
33
+
34
+ # Start fresh to isolate user-initiated actions from VM build & startup events.
35
+ for f in /var/log/apt/history.log /var/log/pip.log; do
36
+ mv "$f" "${f}.bak-run.sh" 2>/dev/null || true # Ignore missing files.
37
+ done
38
+
39
+ # Warm disk buffers for modules we need for kernel startup. (cf: b/116536906)
40
+ if [[ "${COLAB_WARMUP_DEFAULTS}" == "1" ]]; then
41
+ python3 -c "import google.colab._kernel"
42
+ python3 -c "import matplotlib"
43
+ # importing tensorflow on a TPU VM causes the process to acquire the TPU for
44
+ # the duration of the import. This makes the TPU effectively unacquirable for
45
+ # the duration of the warmup, which can break things like probers.
46
+ if [[ "${COLAB_TPU_1VM}" == "1" ]]; then
47
+ python3 -c "import tensorflow"
48
+ else
49
+ python3 -c "import tensorflow" &
50
+ fi
51
+ fi
52
+
53
+ # Start the server to handle /files and /api/contents requests.
54
+ /usr/local/bin/colab-fileshim.py ${COLAB_FILESHIM_EXTRA_ARGS} &
55
+
56
+ # Link NVidia tools from a read-only volume mount.
57
+ for f in $(ls /opt/bin/.nvidia 2>/dev/null); do
58
+ ln -st /opt/bin "/opt/bin/.nvidia/${f}"
59
+ ln -st /usr/bin "/opt/bin/.nvidia/${f}"
60
+ done
61
+
62
+ cd /
63
+
64
+ # Start the node server.
65
+ if [[ "${COLAB_HUMAN_READABLE_NODE_LOGS}" == "1" ]]; then
66
+ PIPE=/tmp/.node.out
67
+ if ! [[ -p "${PIPE}" ]]; then
68
+ mkfifo "${PIPE}"
69
+ fi
70
+ /datalab/web/node_modules/bunyan/bin/bunyan \
71
+ -l "${COLAB_NODE_LOG_LEVEL:-info}" < "${PIPE}" &
72
+ exec >& "${PIPE}"
73
+ fi
74
+ exec /tools/node/bin/node /datalab/web/app.js
75
+
datalab/web/app.js ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /*
3
+ * Copyright 2015 Google Inc. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ var fs = require("fs");
19
+ var path = require("path");
20
+ var appSettings_1 = require("./appSettings");
21
+ var logging = require("./logging");
22
+ var server = require("./server");
23
+ /**
24
+ * Loads the configuration settings for the application to use.
25
+ * On first run, this generates any dynamic settings and merges them into the
26
+ * settings result.
27
+ * @return the settings object for the application to use.
28
+ */
29
+ function loadAppSettings() {
30
+ var settingsPath = path.join(__dirname, 'config', 'settings.json');
31
+ if (!fs.existsSync(settingsPath)) {
32
+ var msg = "App settings file \"".concat(settingsPath, "\" not found.");
33
+ console.error(msg);
34
+ throw new Error(msg);
35
+ }
36
+ try {
37
+ var settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8') || '{}');
38
+ (0, appSettings_1.applyEnvironmentVariables)(settings);
39
+ return settings;
40
+ }
41
+ catch (e) {
42
+ console.error(e);
43
+ throw new Error("Error parsing settings overrides: ".concat(e));
44
+ }
45
+ }
46
+ /**
47
+ * Load the configuration settings, and then start the server, which
48
+ * runs indefinitely, listening to and processing incoming HTTP requests.
49
+ */
50
+ var appSettings = loadAppSettings();
51
+ if (appSettings != null) {
52
+ logging.initializeLoggers(appSettings);
53
+ logging.getLogger().info('app: starting with settings: %s', JSON.stringify(appSettings));
54
+ server.run(appSettings);
55
+ }
56
+ /**
57
+ * Handle shutdown of this process, to also stop the server, which will in turn
58
+ * stop the associated Jupyter server process.
59
+ */
60
+ function exit() {
61
+ logging.getLogger().info('app: exit');
62
+ server.stop();
63
+ logging.getLogger().info('app: exit: stopped');
64
+ process.exit(0);
65
+ }
66
+ /**
67
+ * Handle uncaught exceptions to log them.
68
+ */
69
+ function errorHandler(e) {
70
+ console.error(e.stack);
71
+ logging.getLogger().error(e, 'Unhandled exception');
72
+ process.exit(1);
73
+ }
74
+ process.on('uncaughtException', errorHandler);
75
+ process.on('exit', exit);
76
+ process.on('SIGINT', exit);
77
+ process.on('SIGTERM', exit);
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGhpcmRfcGFydHkvY29sYWIvc291cmNlcy9hcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOztBQUVILHVCQUF5QjtBQUN6QiwyQkFBNkI7QUFFN0IsNkNBQXFFO0FBQ3JFLG1DQUFxQztBQUNyQyxpQ0FBbUM7QUFFbkM7Ozs7O0dBS0c7QUFDSCxTQUFTLGVBQWU7SUFDdEIsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXJFLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDakMsSUFBTSxHQUFHLEdBQUcsOEJBQXNCLFlBQVksa0JBQWMsQ0FBQztRQUM3RCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILElBQU0sUUFBUSxHQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUM3QyxDQUFDO1FBQ2hCLElBQUEsdUNBQXlCLEVBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQXFDLENBQUMsQ0FBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxJQUFNLFdBQVcsR0FBRyxlQUFlLEVBQUUsQ0FBQztBQUN0QyxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUN4QixPQUFPLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDcEIsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUdEOzs7R0FHRztBQUNILFNBQVMsSUFBSTtJQUNYLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxZQUFZLENBQUMsQ0FBUTtJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV2QixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUVELE9BQU8sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDOUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdFxuICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2ZcbiAqIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUXG4gKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGVcbiAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyXG4gKiB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge2FwcGx5RW52aXJvbm1lbnRWYXJpYWJsZXMsIEFwcFNldHRpbmdzfSBmcm9tICcuL2FwcFNldHRpbmdzJztcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSAnLi9sb2dnaW5nJztcbmltcG9ydCAqIGFzIHNlcnZlciBmcm9tICcuL3NlcnZlcic7XG5cbi8qKlxuICogTG9hZHMgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byB1c2UuXG4gKiBPbiBmaXJzdCBydW4sIHRoaXMgZ2VuZXJhdGVzIGFueSBkeW5hbWljIHNldHRpbmdzIGFuZCBtZXJnZXMgdGhlbSBpbnRvIHRoZVxuICogc2V0dGluZ3MgcmVzdWx0LlxuICogQHJldHVybiB0aGUgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYXBwbGljYXRpb24gdG8gdXNlLlxuICovXG5mdW5jdGlvbiBsb2FkQXBwU2V0dGluZ3MoKTogQXBwU2V0dGluZ3Mge1xuICBjb25zdCBzZXR0aW5nc1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnY29uZmlnJywgJ3NldHRpbmdzLmpzb24nKTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmMoc2V0dGluZ3NQYXRoKSkge1xuICAgIGNvbnN0IG1zZyA9IGBBcHAgc2V0dGluZ3MgZmlsZSBcIiR7c2V0dGluZ3NQYXRofVwiIG5vdCBmb3VuZC5gO1xuICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPVxuICAgICAgICBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhzZXR0aW5nc1BhdGgsICd1dGY4JykgfHwgJ3t9JykgYXNcbiAgICAgICAgQXBwU2V0dGluZ3M7XG4gICAgYXBwbHlFbnZpcm9ubWVudFZhcmlhYmxlcyhzZXR0aW5ncyk7XG4gICAgcmV0dXJuIHNldHRpbmdzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhcnNpbmcgc2V0dGluZ3Mgb3ZlcnJpZGVzOiAke2V9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLCBhbmQgdGhlbiBzdGFydCB0aGUgc2VydmVyLCB3aGljaFxuICogcnVucyBpbmRlZmluaXRlbHksIGxpc3RlbmluZyB0byBhbmQgcHJvY2Vzc2luZyBpbmNvbWluZyBIVFRQIHJlcXVlc3RzLlxuICovXG5jb25zdCBhcHBTZXR0aW5ncyA9IGxvYWRBcHBTZXR0aW5ncygpO1xuaWYgKGFwcFNldHRpbmdzICE9IG51bGwpIHtcbiAgbG9nZ2luZy5pbml0aWFsaXplTG9nZ2VycyhhcHBTZXR0aW5ncyk7XG4gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuaW5mbyhcbiAgICAgICdhcHA6IHN0YXJ0aW5nIHdpdGggc2V0dGluZ3M6ICVzJywgSlNPTi5zdHJpbmdpZnkoYXBwU2V0dGluZ3MpKTtcbiAgc2VydmVyLnJ1bihhcHBTZXR0aW5ncyk7XG59XG5cblxuLyoqXG4gKiBIYW5kbGUgc2h1dGRvd24gb2YgdGhpcyBwcm9jZXNzLCB0byBhbHNvIHN0b3AgdGhlIHNlcnZlciwgd2hpY2ggd2lsbCBpbiB0dXJuXG4gKiBzdG9wIHRoZSBhc3NvY2lhdGVkIEp1cHl0ZXIgc2VydmVyIHByb2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIGV4aXQoKSB7XG4gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuaW5mbygnYXBwOiBleGl0Jyk7XG4gIHNlcnZlci5zdG9wKCk7XG4gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuaW5mbygnYXBwOiBleGl0OiBzdG9wcGVkJyk7XG4gIHByb2Nlc3MuZXhpdCgwKTtcbn1cblxuLyoqXG4gKiBIYW5kbGUgdW5jYXVnaHQgZXhjZXB0aW9ucyB0byBsb2cgdGhlbS5cbiAqL1xuZnVuY3Rpb24gZXJyb3JIYW5kbGVyKGU6IEVycm9yKTogdm9pZCB7XG4gIGNvbnNvbGUuZXJyb3IoZS5zdGFjayk7XG5cbiAgbG9nZ2luZy5nZXRMb2dnZXIoKS5lcnJvcihlLCAnVW5oYW5kbGVkIGV4Y2VwdGlvbicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5cbnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZXJyb3JIYW5kbGVyKTtcbnByb2Nlc3Mub24oJ2V4aXQnLCBleGl0KTtcbnByb2Nlc3Mub24oJ1NJR0lOVCcsIGV4aXQpO1xucHJvY2Vzcy5vbignU0lHVEVSTScsIGV4aXQpO1xuIl19
datalab/web/appSettings.js ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /*
3
+ * Copyright 2018 Google Inc. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+ var __values = (this && this.__values) || function(o) {
18
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
19
+ if (m) return m.call(o);
20
+ if (o && typeof o.length === "number") return {
21
+ next: function () {
22
+ if (o && i >= o.length) o = void 0;
23
+ return { value: o && o[i++], done: !o };
24
+ }
25
+ };
26
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
+ };
28
+ var __read = (this && this.__read) || function (o, n) {
29
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
30
+ if (!m) return o;
31
+ var i = m.call(o), r, ar = [], e;
32
+ try {
33
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
34
+ }
35
+ catch (error) { e = { error: error }; }
36
+ finally {
37
+ try {
38
+ if (r && !r.done && (m = i["return"])) m.call(i);
39
+ }
40
+ finally { if (e) throw e.error; }
41
+ }
42
+ return ar;
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.applyEnvironmentVariables = applyEnvironmentVariables;
46
+ var environmentVariables = {
47
+ 'COLAB_ROOT_REDIRECT': function (settings, value) {
48
+ settings.colabRedirect = value;
49
+ },
50
+ 'COLAB_SERVER_PORT': function (settings, value) {
51
+ settings.serverPort = Number(value);
52
+ },
53
+ 'COLAB_LANGUAGE_SERVER_PROXY': function (settings, value) {
54
+ settings.languageServerProxy = value;
55
+ },
56
+ 'COLAB_SERVER_HOST': function (settings, value) {
57
+ settings.serverHost = value;
58
+ },
59
+ 'COLAB_NEXT_JUPYTER_PORT': function (settings, value) {
60
+ settings.nextJupyterPort = Number(value);
61
+ },
62
+ 'COLAB_DEBUG_ADAPTER_MUX_PATH': function (settings, value) {
63
+ settings.debugAdapterMultiplexerPath = value;
64
+ },
65
+ 'COLAB_DATALAB_ROOT': function (settings, value) {
66
+ settings.datalabRoot = value;
67
+ },
68
+ 'COLAB_KERNEL_MANAGER_PROXY_PORT': function (settings, value) {
69
+ settings.kernelManagerProxyPort = Number(value);
70
+ },
71
+ 'COLAB_KERNEL_MANAGER_PROXY_HOST': function (settings, value) {
72
+ settings.kernelManagerProxyHost = value;
73
+ },
74
+ 'COLAB_LANGUAGE_SERVER_PROXY_LSP_DIRS': function (settings, value) {
75
+ settings.languageServerProxyArgs = settings.languageServerProxyArgs || [];
76
+ settings.languageServerProxyArgs.push("--lsp_search_dirs=".concat(value));
77
+ },
78
+ 'COLAB_LANGUAGE_SERVER_PROXY_ROOT_URL': function (settings, value) {
79
+ settings.languageServerProxyArgs = settings.languageServerProxyArgs || [];
80
+ settings.languageServerProxyArgs.push("--language_services_request_root_url=".concat(value));
81
+ },
82
+ 'COLAB_LANGUAGE_SERVER_PROXY_REQUEST_TIMEOUT': function (settings, value) {
83
+ settings.languageServerProxyArgs = settings.languageServerProxyArgs || [];
84
+ settings.languageServerProxyArgs.push("--language_services_request_timeout=".concat(value));
85
+ },
86
+ 'COLAB_JUPYTER_ALLOW_ORIGIN_PAT': function (settings, value) {
87
+ settings.jupyterArgs = settings.jupyterArgs || [];
88
+ settings.jupyterArgs.push("--NotebookApp.allow_origin_pat=\"".concat(value, "\""));
89
+ settings.jupyterArgs.push("--NotebookApp.allow_origin=");
90
+ settings.jupyterArgs.push("--NotebookApp.allow_credentials=True");
91
+ },
92
+ 'COLAB_JUPYTER_DEBUG': function (settings) {
93
+ settings.jupyterArgs = settings.jupyterArgs || [];
94
+ settings.jupyterArgs.push("--debug");
95
+ },
96
+ 'COLAB_JUPYTER_TRANSPORT': function (settings, value) {
97
+ settings.jupyterArgs = settings.jupyterArgs || [];
98
+ settings.jupyterArgs.push("--transport=\"".concat(value, "\""));
99
+ },
100
+ 'COLAB_JUPYTER_IP': function (settings, value) {
101
+ settings.jupyterArgs = settings.jupyterArgs || [];
102
+ settings.jupyterArgs.push("--ip=".concat(value));
103
+ },
104
+ 'COLAB_GATEWAY_CLIENT_URL': function (settings, value) {
105
+ settings.jupyterArgs = settings.jupyterArgs || [];
106
+ settings.jupyterArgs.push("--GatewayClient.url=".concat(value));
107
+ },
108
+ 'COLAB_JUPYTER_ALLOW_REMOTE_ACCESS': function (settings, value) {
109
+ settings.jupyterArgs = settings.jupyterArgs || [];
110
+ settings.jupyterArgs.push("--NotebookApp.allow_remote_access=".concat(value));
111
+ },
112
+ 'COLAB_JUPYTER_TOKEN': function (settings, value) {
113
+ settings.jupyterArgs = settings.jupyterArgs || [];
114
+ settings.jupyterArgs.push("--NotebookApp.token=".concat(value));
115
+ },
116
+ 'COLAB_JUPYTER_DISABLE_CHECK_XSRF': function (settings, value) {
117
+ settings.jupyterArgs = settings.jupyterArgs || [];
118
+ settings.jupyterArgs.push("--NotebookApp.disable_check_xsrf=".concat(value));
119
+ },
120
+ 'COLAB_FILE_HANDLER_ADDR': function (settings, value) {
121
+ settings.fileHandlerAddr = value;
122
+ },
123
+ };
124
+ /** Applies any environment variable overrides. */
125
+ function applyEnvironmentVariables(settings) {
126
+ var e_1, _a;
127
+ try {
128
+ for (var _b = __values(Object.entries(environmentVariables)), _c = _b.next(); !_c.done; _c = _b.next()) {
129
+ var _d = __read(_c.value, 2), key = _d[0], apply = _d[1];
130
+ var override = process.env[key];
131
+ if (override !== undefined) {
132
+ apply(settings, override);
133
+ }
134
+ }
135
+ }
136
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
137
+ finally {
138
+ try {
139
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
140
+ }
141
+ finally { if (e_1) throw e_1.error; }
142
+ }
143
+ }
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwU2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2FwcFNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzS0gsOERBT0M7QUE5RkQsSUFBTSxvQkFBb0IsR0FBRztJQUMzQixxQkFBcUIsRUFBRSxVQUFDLFFBQXFCLEVBQUUsS0FBYTtRQUMxRCxRQUFRLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBQ0QsbUJBQW1CLEVBQUUsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDeEQsUUFBUSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELDZCQUE2QixFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQ2xFLFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQUNELG1CQUFtQixFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQ3hELFFBQVEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFDRCx5QkFBeUIsRUFBRSxVQUFDLFFBQXFCLEVBQUUsS0FBYTtRQUM5RCxRQUFRLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsOEJBQThCLEVBQUUsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDbkUsUUFBUSxDQUFDLDJCQUEyQixHQUFHLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBQ0Qsb0JBQW9CLEVBQUUsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDekQsUUFBUSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUNELGlDQUFpQyxFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQ3RFLFFBQVEsQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELGlDQUFpQyxFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQ3RFLFFBQVEsQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7SUFDMUMsQ0FBQztJQUNELHNDQUFzQyxFQUFFLFVBQ3BDLFFBQXFCLEVBQUUsS0FBYTtRQUN0QyxRQUFRLENBQUMsdUJBQXVCLEdBQUcsUUFBUSxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQztRQUMxRSxRQUFRLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLDRCQUFxQixLQUFLLENBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxzQ0FBc0MsRUFBRSxVQUNwQyxRQUFxQixFQUFFLEtBQWE7UUFDdEMsUUFBUSxDQUFDLHVCQUF1QixHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUM7UUFDMUUsUUFBUSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FDakMsK0NBQXdDLEtBQUssQ0FBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELDZDQUE2QyxFQUFFLFVBQzNDLFFBQXFCLEVBQUUsS0FBYTtRQUN0QyxRQUFRLENBQUMsdUJBQXVCLEdBQUcsUUFBUSxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQztRQUMxRSxRQUFRLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUNqQyw4Q0FBdUMsS0FBSyxDQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsZ0NBQWdDLEVBQUUsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDckUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQywyQ0FBbUMsS0FBSyxPQUFHLENBQUMsQ0FBQztRQUN2RSxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3pELFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELHFCQUFxQixFQUFFLFVBQUMsUUFBcUI7UUFDM0MsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QseUJBQXlCLEVBQUUsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDOUQsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx3QkFBZ0IsS0FBSyxPQUFHLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0Qsa0JBQWtCLEVBQUUsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDdkQsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFRLEtBQUssQ0FBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELDBCQUEwQixFQUFFLFVBQUMsUUFBcUIsRUFBRSxLQUFhO1FBQy9ELFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsOEJBQXVCLEtBQUssQ0FBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELG1DQUFtQyxFQUMvQixVQUFDLFFBQXFCLEVBQUUsS0FBYTtRQUNuQyxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ2xELFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLDRDQUFxQyxLQUFLLENBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDTCxxQkFBcUIsRUFBRSxVQUFDLFFBQXFCLEVBQUUsS0FBYTtRQUMxRCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ2xELFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLDhCQUF1QixLQUFLLENBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCxrQ0FBa0MsRUFDOUIsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDbkMsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNsRCxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQywyQ0FBb0MsS0FBSyxDQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQ0wseUJBQXlCLEVBQUUsVUFBQyxRQUFxQixFQUFFLEtBQWE7UUFDOUQsUUFBUSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztDQUNGLENBQUM7QUFFRixrREFBa0Q7QUFDbEQsU0FBZ0IseUJBQXlCLENBQUMsUUFBcUI7OztRQUM3RCxLQUEyQixJQUFBLEtBQUEsU0FBQSxNQUFNLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUEsZ0JBQUEsNEJBQUUsQ0FBQztZQUF2RCxJQUFBLEtBQUEsbUJBQVksRUFBWCxHQUFHLFFBQUEsRUFBRSxLQUFLLFFBQUE7WUFDcEIsSUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDM0IsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQzs7Ozs7Ozs7O0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90XG4gKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZlxuICogdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVRcbiAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZVxuICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXJcbiAqIHRoZSBMaWNlbnNlLlxuICovXG5cblxuLyoqIENvbmZpZ3VyYXRpb24gdmFsdWVzIHNoYXJlZCBhY3Jvc3MgdGhlIHdob2xlIGFwcC4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBBcHBTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgcG9ydCB0aGF0IHRoZSBzZXJ2ZXIgc2hvdWxkIGxpc3RlbiB0by5cbiAgICovXG4gIHNlcnZlclBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogSWYgc2V0LCBsaXN0ZW4gb24gdGhpcyBob3N0bmFtZS5cbiAgICovXG4gIHNlcnZlckhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHN0YXRpYyBhcmd1bWVudHMgdG8gYmUgdXNlZCB3aGVuIGxhdW5jaGluZyBganVweXRlciBub3RlYm9va2AuXG4gICAqL1xuICBqdXB5dGVyQXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgdXNlIHRoaXMgYXMgYSBwcmVmaXggdG8gYWxsIGZpbGUgcGF0aHMgb3BlbmVkIG9uIHRoZVxuICAgKiBzZXJ2ZXIgc2lkZS4gVXNlZnVsIGZvciB0ZXN0aW5nIG91dHNpZGUgYSBEb2NrZXIgY29udGFpbmVyLlxuICAgKi9cbiAgZGF0YWxhYlJvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogSW5pdGlhbCBwb3J0IHRvIHVzZSB3aGVuIHNlYXJjaGluZyBmb3IgYSBmcmVlIEp1cHl0ZXIgcG9ydC5cbiAgICovXG4gIG5leHRKdXB5dGVyUG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBMb2NhbCBkaXJlY3Rvcnkgd2hlcmUga2VybmVscyBhcmUgc3RhcnRlZC5cbiAgICovXG4gIGNvbnRlbnREaXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvcnQgdG8gdXNlIHRvIHByb3h5IGtlcm5lbCBtYW5hZ2VyIHdlYnNvY2tldCByZXF1ZXN0cy4gQSB2YWx1ZSBvZiAwXG4gICAqIGRpc2FibGVzIHByb3h5aW5nLlxuICAgKi9cbiAga2VybmVsTWFuYWdlclByb3h5UG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdG5hbWUgKG9yIElQKSB0byB1c2UgdG8gcHJveHkga2VybmVsIG1hbmFnZXIgd2Vic29ja2V0IHJlcXVlc3RzLlxuICAgKiBBbiBlbXB0eSB2YWx1ZSB1c2VzIGxvY2FsaG9zdC5cbiAgICovXG4gIGtlcm5lbE1hbmFnZXJQcm94eUhvc3Q6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgc2V0LCB0aGUgcGF0aCB0byB0aGUgREFQIG11bHRpcGxleGVyLlxuICAgKi9cbiAgZGVidWdBZGFwdGVyTXVsdGlwbGV4ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgcmVkaXJlY3QgLyByZXF1ZXN0cyB0byBDb2xhYiwgd2l0aCB7anVweXRlcl9ob3N0fSByZXBsYWNlZCB3aXRoIHRoZVxuICAgKiBzZXJ2ZXIgaG9zdC5cbiAgICovXG4gIGNvbGFiUmVkaXJlY3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgdGhlIHBhdGggYSBsYW5ndWFnZSBzZXJ2ZXIgcHJveHkgd2hpY2ggY2FuIGV4dGVuZCB0aGUgY2FwYWJpbGl0aWVzXG4gICAqIG9mIHRoZSBkZWZhdWx0IGxhbmd1YWdlIHNlcnZlci5cbiAgICovXG4gIGxhbmd1YWdlU2VydmVyUHJveHk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgdGhlIGFyZ3MgdG8gcGFzcyB0byB0aGUgbGFuZ3VhZ2Ugc2VydmVyIHByb3h5LlxuICAgKiBUaGlzIGlzIG9ubHkgY29uc3VtZWQgaWYgYSBub24tZW1wdHkgcGF0aCBpcyBzZXQgZm9yIHRoZVxuICAgKiBsYW5ndWFnZVNlcnZlclByb3h5IHNldHRpbmcuXG4gICAqL1xuICBsYW5ndWFnZVNlcnZlclByb3h5QXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgaG9zdDpwb3J0IGFkZHJlc3MgdG8gdXNlIGZvciBzZXJ2aW5nIGZpbGUgcmVxdWVzdHMuIEFuIGVtcHR5IHZhbHVlIHVzZXNcbiAgICogSnVweXRlcidzIGZpbGUgc2VydmVyLlxuICAgKi9cbiAgZmlsZUhhbmRsZXJBZGRyOiBzdHJpbmc7XG59XG5cbmNvbnN0IGVudmlyb25tZW50VmFyaWFibGVzID0ge1xuICAnQ09MQUJfUk9PVF9SRURJUkVDVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5jb2xhYlJlZGlyZWN0ID0gdmFsdWU7XG4gIH0sXG4gICdDT0xBQl9TRVJWRVJfUE9SVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5zZXJ2ZXJQb3J0ID0gTnVtYmVyKHZhbHVlKTtcbiAgfSxcbiAgJ0NPTEFCX0xBTkdVQUdFX1NFUlZFUl9QUk9YWSc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5ID0gdmFsdWU7XG4gIH0sXG4gICdDT0xBQl9TRVJWRVJfSE9TVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5zZXJ2ZXJIb3N0ID0gdmFsdWU7XG4gIH0sXG4gICdDT0xBQl9ORVhUX0pVUFlURVJfUE9SVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5uZXh0SnVweXRlclBvcnQgPSBOdW1iZXIodmFsdWUpO1xuICB9LFxuICAnQ09MQUJfREVCVUdfQURBUFRFUl9NVVhfUEFUSCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5kZWJ1Z0FkYXB0ZXJNdWx0aXBsZXhlclBhdGggPSB2YWx1ZTtcbiAgfSxcbiAgJ0NPTEFCX0RBVEFMQUJfUk9PVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5kYXRhbGFiUm9vdCA9IHZhbHVlO1xuICB9LFxuICAnQ09MQUJfS0VSTkVMX01BTkFHRVJfUFJPWFlfUE9SVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5rZXJuZWxNYW5hZ2VyUHJveHlQb3J0ID0gTnVtYmVyKHZhbHVlKTtcbiAgfSxcbiAgJ0NPTEFCX0tFUk5FTF9NQU5BR0VSX1BST1hZX0hPU1QnOiAoc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3Mua2VybmVsTWFuYWdlclByb3h5SG9zdCA9IHZhbHVlO1xuICB9LFxuICAnQ09MQUJfTEFOR1VBR0VfU0VSVkVSX1BST1hZX0xTUF9ESVJTJzogKFxuICAgICAgc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3MubGFuZ3VhZ2VTZXJ2ZXJQcm94eUFyZ3MgPSBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncyB8fCBbXTtcbiAgICBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncy5wdXNoKGAtLWxzcF9zZWFyY2hfZGlycz0ke3ZhbHVlfWApO1xuICB9LFxuICAnQ09MQUJfTEFOR1VBR0VfU0VSVkVSX1BST1hZX1JPT1RfVVJMJzogKFxuICAgICAgc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3MubGFuZ3VhZ2VTZXJ2ZXJQcm94eUFyZ3MgPSBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncyB8fCBbXTtcbiAgICBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncy5wdXNoKFxuICAgICAgICBgLS1sYW5ndWFnZV9zZXJ2aWNlc19yZXF1ZXN0X3Jvb3RfdXJsPSR7dmFsdWV9YCk7XG4gIH0sXG4gICdDT0xBQl9MQU5HVUFHRV9TRVJWRVJfUFJPWFlfUkVRVUVTVF9USU1FT1VUJzogKFxuICAgICAgc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3MubGFuZ3VhZ2VTZXJ2ZXJQcm94eUFyZ3MgPSBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncyB8fCBbXTtcbiAgICBzZXR0aW5ncy5sYW5ndWFnZVNlcnZlclByb3h5QXJncy5wdXNoKFxuICAgICAgICBgLS1sYW5ndWFnZV9zZXJ2aWNlc19yZXF1ZXN0X3RpbWVvdXQ9JHt2YWx1ZX1gKTtcbiAgfSxcbiAgJ0NPTEFCX0pVUFlURVJfQUxMT1dfT1JJR0lOX1BBVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncyA9IHNldHRpbmdzLmp1cHl0ZXJBcmdzIHx8IFtdO1xuICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0tTm90ZWJvb2tBcHAuYWxsb3dfb3JpZ2luX3BhdD1cIiR7dmFsdWV9XCJgKTtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncy5wdXNoKGAtLU5vdGVib29rQXBwLmFsbG93X29yaWdpbj1gKTtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncy5wdXNoKGAtLU5vdGVib29rQXBwLmFsbG93X2NyZWRlbnRpYWxzPVRydWVgKTtcbiAgfSxcbiAgJ0NPTEFCX0pVUFlURVJfREVCVUcnOiAoc2V0dGluZ3M6IEFwcFNldHRpbmdzKSA9PiB7XG4gICAgc2V0dGluZ3MuanVweXRlckFyZ3MgPSBzZXR0aW5ncy5qdXB5dGVyQXJncyB8fCBbXTtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncy5wdXNoKGAtLWRlYnVnYCk7XG4gIH0sXG4gICdDT0xBQl9KVVBZVEVSX1RSQU5TUE9SVCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncyA9IHNldHRpbmdzLmp1cHl0ZXJBcmdzIHx8IFtdO1xuICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0tdHJhbnNwb3J0PVwiJHt2YWx1ZX1cImApO1xuICB9LFxuICAnQ09MQUJfSlVQWVRFUl9JUCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncyA9IHNldHRpbmdzLmp1cHl0ZXJBcmdzIHx8IFtdO1xuICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0taXA9JHt2YWx1ZX1gKTtcbiAgfSxcbiAgJ0NPTEFCX0dBVEVXQVlfQ0xJRU5UX1VSTCc6IChzZXR0aW5nczogQXBwU2V0dGluZ3MsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncyA9IHNldHRpbmdzLmp1cHl0ZXJBcmdzIHx8IFtdO1xuICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0tR2F0ZXdheUNsaWVudC51cmw9JHt2YWx1ZX1gKTtcbiAgfSxcbiAgJ0NPTEFCX0pVUFlURVJfQUxMT1dfUkVNT1RFX0FDQ0VTUyc6XG4gICAgICAoc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzID0gc2V0dGluZ3MuanVweXRlckFyZ3MgfHwgW107XG4gICAgICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0tTm90ZWJvb2tBcHAuYWxsb3dfcmVtb3RlX2FjY2Vzcz0ke3ZhbHVlfWApO1xuICAgICAgfSxcbiAgJ0NPTEFCX0pVUFlURVJfVE9LRU4nOiAoc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3MuanVweXRlckFyZ3MgPSBzZXR0aW5ncy5qdXB5dGVyQXJncyB8fCBbXTtcbiAgICBzZXR0aW5ncy5qdXB5dGVyQXJncy5wdXNoKGAtLU5vdGVib29rQXBwLnRva2VuPSR7dmFsdWV9YCk7XG4gIH0sXG4gICdDT0xBQl9KVVBZVEVSX0RJU0FCTEVfQ0hFQ0tfWFNSRic6XG4gICAgICAoc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzID0gc2V0dGluZ3MuanVweXRlckFyZ3MgfHwgW107XG4gICAgICAgIHNldHRpbmdzLmp1cHl0ZXJBcmdzLnB1c2goYC0tTm90ZWJvb2tBcHAuZGlzYWJsZV9jaGVja194c3JmPSR7dmFsdWV9YCk7XG4gICAgICB9LFxuICAnQ09MQUJfRklMRV9IQU5ETEVSX0FERFInOiAoc2V0dGluZ3M6IEFwcFNldHRpbmdzLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0dGluZ3MuZmlsZUhhbmRsZXJBZGRyID0gdmFsdWU7XG4gIH0sXG59O1xuXG4vKiogQXBwbGllcyBhbnkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5RW52aXJvbm1lbnRWYXJpYWJsZXMoc2V0dGluZ3M6IEFwcFNldHRpbmdzKSB7XG4gIGZvciAoY29uc3QgW2tleSwgYXBwbHldIG9mIE9iamVjdC5lbnRyaWVzKGVudmlyb25tZW50VmFyaWFibGVzKSkge1xuICAgIGNvbnN0IG92ZXJyaWRlID0gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICBpZiAob3ZlcnJpZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXBwbHkoc2V0dGluZ3MsIG92ZXJyaWRlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
datalab/web/config/basePath.json ADDED
@@ -0,0 +1 @@
 
 
1
+ ""
datalab/web/config/settings.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "contentDir": "/content",
3
+ "datalabRoot": "",
4
+ "jupyterArgs": ["--debug"],
5
+ "nextJupyterPort": 9000,
6
+ "serverHost": "",
7
+ "serverPort": 8080
8
+ }
datalab/web/json_rpc.js ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ var __values = (this && this.__values) || function(o) {
3
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
+ if (m) return m.call(o);
5
+ if (o && typeof o.length === "number") return {
6
+ next: function () {
7
+ if (o && i >= o.length) o = void 0;
8
+ return { value: o && o[i++], done: !o };
9
+ }
10
+ };
11
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.JsonRpcReader = void 0;
15
+ exports.encodeJsonRpc = encodeJsonRpc;
16
+ var CR = 13;
17
+ var LF = 10;
18
+ /**
19
+ * JSON RPC reader following the Debug Adapter Protocol message
20
+ * format which itself follows Chrome's V8 debugger protocol, originally
21
+ * documented at
22
+ * https://github.com/buggerjs/bugger-v8-client/blob/master/PROTOCOL.md#v8-debugger-protocol
23
+ */
24
+ var JsonRpcReader = /** @class */ (function () {
25
+ function JsonRpcReader(callback) {
26
+ this.callback = callback;
27
+ this.position = 0;
28
+ this.allocationSize = 4096;
29
+ this.decoder = new TextDecoder();
30
+ this.buffer = new Uint8Array(this.allocationSize);
31
+ }
32
+ JsonRpcReader.prototype.append = function (data) {
33
+ // Grow the buffer if necessary to hold the data.
34
+ if (data.byteLength > (this.buffer.byteLength - this.position)) {
35
+ var requiredSize = this.position + data.byteLength;
36
+ var newSize = Math.ceil(requiredSize / this.allocationSize) * this.allocationSize;
37
+ var newBuffer = new Uint8Array(newSize);
38
+ newBuffer.set(this.buffer, 0);
39
+ this.buffer = newBuffer;
40
+ }
41
+ // Push new data onto end of the buffer.
42
+ this.buffer.set(data, this.position);
43
+ this.position += data.byteLength;
44
+ var parsedMessages = [];
45
+ while (true) {
46
+ // Parse all messages out of the buffer.
47
+ var message = this.tryReadMessage();
48
+ if (!message) {
49
+ break;
50
+ }
51
+ parsedMessages.push(message);
52
+ this.callback(message);
53
+ }
54
+ return parsedMessages;
55
+ };
56
+ JsonRpcReader.prototype.tryReadMessage = function () {
57
+ var e_1, _a;
58
+ // Loop through looking for \r\n\r\n in the buffer.
59
+ for (var i = 0; i < this.position - 4; ++i) {
60
+ // First \r\n indicates the end of the headers.
61
+ if (this.buffer[i] === CR && this.buffer[i + 1] === LF &&
62
+ this.buffer[i + 2] === CR && this.buffer[i + 3] === LF) {
63
+ // Parse each of the header lines out of the header block.
64
+ var headerLength = i + 4;
65
+ var headerBytes = this.buffer.subarray(0, headerLength);
66
+ var headerString = this.decoder.decode(headerBytes);
67
+ var headerLines = headerString.split('\r\n');
68
+ var headers = {};
69
+ try {
70
+ for (var headerLines_1 = (e_1 = void 0, __values(headerLines)), headerLines_1_1 = headerLines_1.next(); !headerLines_1_1.done; headerLines_1_1 = headerLines_1.next()) {
71
+ var line = headerLines_1_1.value;
72
+ if (!line.trim()) {
73
+ continue;
74
+ }
75
+ var pair = line.split(':');
76
+ if (pair.length !== 2) {
77
+ throw new Error("Illegal header value: ".concat(line));
78
+ }
79
+ headers[pair[0]] = pair[1].trim();
80
+ }
81
+ }
82
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
83
+ finally {
84
+ try {
85
+ if (headerLines_1_1 && !headerLines_1_1.done && (_a = headerLines_1.return)) _a.call(headerLines_1);
86
+ }
87
+ finally { if (e_1) throw e_1.error; }
88
+ }
89
+ var contentLengthString = headers['Content-Length'];
90
+ if (!contentLengthString) {
91
+ throw new Error('Missing Content-Length header.');
92
+ }
93
+ var contentLength = Number(contentLengthString);
94
+ if (isNaN(contentLength)) {
95
+ throw new Error("Header Content-Length not a number: ".concat(contentLengthString, "."));
96
+ }
97
+ var requiredLength = headerLength + contentLength;
98
+ if (requiredLength <= this.position) {
99
+ // This is just a view onto the current buffer.
100
+ var contentBytes = this.buffer.subarray(headerLength, headerLength + contentLength);
101
+ var content = this.decoder.decode(contentBytes);
102
+ this.buffer.copyWithin(0, headerLength + contentLength, this.position);
103
+ this.position = this.position - (headerLength + contentLength);
104
+ return { headers: headers, content: content };
105
+ }
106
+ }
107
+ }
108
+ return null;
109
+ };
110
+ return JsonRpcReader;
111
+ }());
112
+ exports.JsonRpcReader = JsonRpcReader;
113
+ /** Encodes the string content to a JSON RPC message. */
114
+ function encodeJsonRpc(content) {
115
+ var e_2, _a;
116
+ var headers = {
117
+ 'Content-Length': String(new TextEncoder().encode(content).byteLength),
118
+ };
119
+ var requestString = '';
120
+ try {
121
+ for (var _b = __values(Object.keys(headers)), _c = _b.next(); !_c.done; _c = _b.next()) {
122
+ var key = _c.value;
123
+ requestString += "".concat(key, ": ").concat(headers[key], "\r\n");
124
+ }
125
+ }
126
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
127
+ finally {
128
+ try {
129
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
130
+ }
131
+ finally { if (e_2) throw e_2.error; }
132
+ }
133
+ requestString += '\r\n';
134
+ requestString += content;
135
+ return requestString;
136
+ }
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbl9ycGMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2pzb25fcnBjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBcUdBLHNDQVdDO0FBaEhELElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNkLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQVFkOzs7OztHQUtHO0FBQ0g7SUFNRSx1QkFBcUIsUUFBMkM7UUFBM0MsYUFBUSxHQUFSLFFBQVEsQ0FBbUM7UUFKeEQsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNaLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRzNDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCw4QkFBTSxHQUFOLFVBQU8sSUFBZ0I7UUFDckIsaURBQWlEO1FBQ2pELElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQy9ELElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNyRCxJQUFNLE9BQU8sR0FDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN4RSxJQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDMUIsQ0FBQztRQUNELHdDQUF3QztRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUVqQyxJQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNaLHdDQUF3QztZQUN4QyxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE1BQU07WUFDUixDQUFDO1lBQ0QsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsc0NBQWMsR0FBZDs7UUFDRSxtREFBbUQ7UUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0MsK0NBQStDO1lBQy9DLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUMzRCwwREFBMEQ7Z0JBQzFELElBQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNCLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDMUQsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3RELElBQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9DLElBQU0sT0FBTyxHQUE0QixFQUFFLENBQUM7O29CQUM1QyxLQUFtQixJQUFBLCtCQUFBLFNBQUEsV0FBVyxDQUFBLENBQUEsd0NBQUEsaUVBQUUsQ0FBQzt3QkFBNUIsSUFBTSxJQUFJLHdCQUFBO3dCQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQzs0QkFDakIsU0FBUzt3QkFDWCxDQUFDO3dCQUNELElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBeUIsSUFBSSxDQUFFLENBQUMsQ0FBQzt3QkFDbkQsQ0FBQzt3QkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNwQyxDQUFDOzs7Ozs7Ozs7Z0JBQ0QsSUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztnQkFDRCxJQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FDWCw4Q0FBdUMsbUJBQW1CLE1BQUcsQ0FBQyxDQUFDO2dCQUNyRSxDQUFDO2dCQUNELElBQU0sY0FBYyxHQUFHLFlBQVksR0FBRyxhQUFhLENBQUM7Z0JBQ3BELElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsK0NBQStDO29CQUMvQyxJQUFNLFlBQVksR0FDZCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDO29CQUNyRSxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ2xCLENBQUMsRUFBRSxZQUFZLEdBQUcsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDO29CQUMvRCxPQUFPLEVBQUMsT0FBTyxTQUFBLEVBQUUsT0FBTyxTQUFBLEVBQUMsQ0FBQztnQkFDNUIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0gsb0JBQUM7QUFBRCxDQUFDLEFBbkZELElBbUZDO0FBbkZZLHNDQUFhO0FBcUYxQix3REFBd0Q7QUFDeEQsU0FBZ0IsYUFBYSxDQUFDLE9BQWU7O0lBQzNDLElBQU0sT0FBTyxHQUE0QjtRQUN2QyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO0tBQ3ZFLENBQUM7SUFDRixJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7O1FBQ3ZCLEtBQWtCLElBQUEsS0FBQSxTQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUEsZ0JBQUEsNEJBQUUsQ0FBQztZQUFwQyxJQUFNLEdBQUcsV0FBQTtZQUNaLGFBQWEsSUFBSSxVQUFHLEdBQUcsZUFBSyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQU0sQ0FBQztRQUNqRCxDQUFDOzs7Ozs7Ozs7SUFDRCxhQUFhLElBQUksTUFBTSxDQUFDO0lBQ3hCLGFBQWEsSUFBSSxPQUFPLENBQUM7SUFDekIsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IENSID0gMTM7XG5jb25zdCBMRiA9IDEwO1xuXG4vKiogTWVzc2FnZXMgcmVjZWl2ZWQgdmlhIHRoZSByZWFkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25ScGNNZXNzYWdlIHtcbiAgcmVhZG9ubHkgaGVhZGVyczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBKU09OIFJQQyByZWFkZXIgZm9sbG93aW5nIHRoZSBEZWJ1ZyBBZGFwdGVyIFByb3RvY29sIG1lc3NhZ2VcbiAqIGZvcm1hdCB3aGljaCBpdHNlbGYgZm9sbG93cyBDaHJvbWUncyBWOCBkZWJ1Z2dlciBwcm90b2NvbCwgb3JpZ2luYWxseVxuICogZG9jdW1lbnRlZCBhdFxuICogaHR0cHM6Ly9naXRodWIuY29tL2J1Z2dlcmpzL2J1Z2dlci12OC1jbGllbnQvYmxvYi9tYXN0ZXIvUFJPVE9DT0wubWQjdjgtZGVidWdnZXItcHJvdG9jb2xcbiAqL1xuZXhwb3J0IGNsYXNzIEpzb25ScGNSZWFkZXIge1xuICBwcml2YXRlIGJ1ZmZlcjogVWludDhBcnJheTtcbiAgcHJpdmF0ZSBwb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvY2F0aW9uU2l6ZSA9IDQwOTY7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNhbGxiYWNrOiAobWVzc2FnZTogSnNvblJwY01lc3NhZ2UpID0+IHZvaWQpIHtcbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHRoaXMuYWxsb2NhdGlvblNpemUpO1xuICB9XG5cbiAgYXBwZW5kKGRhdGE6IFVpbnQ4QXJyYXkpOiBKc29uUnBjTWVzc2FnZVtdIHtcbiAgICAvLyBHcm93IHRoZSBidWZmZXIgaWYgbmVjZXNzYXJ5IHRvIGhvbGQgdGhlIGRhdGEuXG4gICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA+ICh0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoIC0gdGhpcy5wb3NpdGlvbikpIHtcbiAgICAgIGNvbnN0IHJlcXVpcmVkU2l6ZSA9IHRoaXMucG9zaXRpb24gKyBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICBjb25zdCBuZXdTaXplID1cbiAgICAgICAgICBNYXRoLmNlaWwocmVxdWlyZWRTaXplIC8gdGhpcy5hbGxvY2F0aW9uU2l6ZSkgKiB0aGlzLmFsbG9jYXRpb25TaXplO1xuICAgICAgY29uc3QgbmV3QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkobmV3U2l6ZSk7XG4gICAgICBuZXdCdWZmZXIuc2V0KHRoaXMuYnVmZmVyLCAwKTtcbiAgICAgIHRoaXMuYnVmZmVyID0gbmV3QnVmZmVyO1xuICAgIH1cbiAgICAvLyBQdXNoIG5ldyBkYXRhIG9udG8gZW5kIG9mIHRoZSBidWZmZXIuXG4gICAgdGhpcy5idWZmZXIuc2V0KGRhdGEsIHRoaXMucG9zaXRpb24pO1xuICAgIHRoaXMucG9zaXRpb24gKz0gZGF0YS5ieXRlTGVuZ3RoO1xuXG4gICAgY29uc3QgcGFyc2VkTWVzc2FnZXMgPSBbXTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gUGFyc2UgYWxsIG1lc3NhZ2VzIG91dCBvZiB0aGUgYnVmZmVyLlxuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJ5UmVhZE1lc3NhZ2UoKTtcbiAgICAgIGlmICghbWVzc2FnZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHBhcnNlZE1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgICB0aGlzLmNhbGxiYWNrKG1lc3NhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkTWVzc2FnZXM7XG4gIH1cblxuICB0cnlSZWFkTWVzc2FnZSgpOiBKc29uUnBjTWVzc2FnZXxudWxsIHtcbiAgICAvLyBMb29wIHRocm91Z2ggbG9va2luZyBmb3IgXFxyXFxuXFxyXFxuIGluIHRoZSBidWZmZXIuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvc2l0aW9uIC0gNDsgKytpKSB7XG4gICAgICAvLyBGaXJzdCBcXHJcXG4gaW5kaWNhdGVzIHRoZSBlbmQgb2YgdGhlIGhlYWRlcnMuXG4gICAgICBpZiAodGhpcy5idWZmZXJbaV0gPT09IENSICYmIHRoaXMuYnVmZmVyW2kgKyAxXSA9PT0gTEYgJiZcbiAgICAgICAgICB0aGlzLmJ1ZmZlcltpICsgMl0gPT09IENSICYmIHRoaXMuYnVmZmVyW2kgKyAzXSA9PT0gTEYpIHtcbiAgICAgICAgLy8gUGFyc2UgZWFjaCBvZiB0aGUgaGVhZGVyIGxpbmVzIG91dCBvZiB0aGUgaGVhZGVyIGJsb2NrLlxuICAgICAgICBjb25zdCBoZWFkZXJMZW5ndGggPSBpICsgNDtcbiAgICAgICAgY29uc3QgaGVhZGVyQnl0ZXMgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheSgwLCBoZWFkZXJMZW5ndGgpO1xuICAgICAgICBjb25zdCBoZWFkZXJTdHJpbmcgPSB0aGlzLmRlY29kZXIuZGVjb2RlKGhlYWRlckJ5dGVzKTtcbiAgICAgICAgY29uc3QgaGVhZGVyTGluZXMgPSBoZWFkZXJTdHJpbmcuc3BsaXQoJ1xcclxcbicpO1xuICAgICAgICBjb25zdCBoZWFkZXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgaGVhZGVyTGluZXMpIHtcbiAgICAgICAgICBpZiAoIWxpbmUudHJpbSgpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcGFpciA9IGxpbmUuc3BsaXQoJzonKTtcbiAgICAgICAgICBpZiAocGFpci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSWxsZWdhbCBoZWFkZXIgdmFsdWU6ICR7bGluZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaGVhZGVyc1twYWlyWzBdXSA9IHBhaXJbMV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhTdHJpbmcgPSBoZWFkZXJzWydDb250ZW50LUxlbmd0aCddO1xuICAgICAgICBpZiAoIWNvbnRlbnRMZW5ndGhTdHJpbmcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgQ29udGVudC1MZW5ndGggaGVhZGVyLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBOdW1iZXIoY29udGVudExlbmd0aFN0cmluZyk7XG4gICAgICAgIGlmIChpc05hTihjb250ZW50TGVuZ3RoKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYEhlYWRlciBDb250ZW50LUxlbmd0aCBub3QgYSBudW1iZXI6ICR7Y29udGVudExlbmd0aFN0cmluZ30uYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWlyZWRMZW5ndGggPSBoZWFkZXJMZW5ndGggKyBjb250ZW50TGVuZ3RoO1xuICAgICAgICBpZiAocmVxdWlyZWRMZW5ndGggPD0gdGhpcy5wb3NpdGlvbikge1xuICAgICAgICAgIC8vIFRoaXMgaXMganVzdCBhIHZpZXcgb250byB0aGUgY3VycmVudCBidWZmZXIuXG4gICAgICAgICAgY29uc3QgY29udGVudEJ5dGVzID1cbiAgICAgICAgICAgICAgdGhpcy5idWZmZXIuc3ViYXJyYXkoaGVhZGVyTGVuZ3RoLCBoZWFkZXJMZW5ndGggKyBjb250ZW50TGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5kZWNvZGVyLmRlY29kZShjb250ZW50Qnl0ZXMpO1xuICAgICAgICAgIHRoaXMuYnVmZmVyLmNvcHlXaXRoaW4oXG4gICAgICAgICAgICAgIDAsIGhlYWRlckxlbmd0aCArIGNvbnRlbnRMZW5ndGgsIHRoaXMucG9zaXRpb24pO1xuICAgICAgICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uIC0gKGhlYWRlckxlbmd0aCArIGNvbnRlbnRMZW5ndGgpO1xuICAgICAgICAgIHJldHVybiB7aGVhZGVycywgY29udGVudH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqIEVuY29kZXMgdGhlIHN0cmluZyBjb250ZW50IHRvIGEgSlNPTiBSUEMgbWVzc2FnZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVKc29uUnBjKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGhlYWRlcnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICAgICdDb250ZW50LUxlbmd0aCc6IFN0cmluZyhuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoY29udGVudCkuYnl0ZUxlbmd0aCksXG4gIH07XG4gIGxldCByZXF1ZXN0U3RyaW5nID0gJyc7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgcmVxdWVzdFN0cmluZyArPSBgJHtrZXl9OiAke2hlYWRlcnNba2V5XX1cXHJcXG5gO1xuICB9XG4gIHJlcXVlc3RTdHJpbmcgKz0gJ1xcclxcbic7XG4gIHJlcXVlc3RTdHJpbmcgKz0gY29udGVudDtcbiAgcmV0dXJuIHJlcXVlc3RTdHJpbmc7XG59XG4iXX0=
datalab/web/jupyter.js ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /*
3
+ * Copyright 2015 Google Inc. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+ var __values = (this && this.__values) || function(o) {
18
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
19
+ if (m) return m.call(o);
20
+ if (o && typeof o.length === "number") return {
21
+ next: function () {
22
+ if (o && i >= o.length) o = void 0;
23
+ return { value: o && o[i++], done: !o };
24
+ }
25
+ };
26
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.init = init;
30
+ exports.close = close;
31
+ exports.handleSocket = handleSocket;
32
+ exports.handleRequest = handleRequest;
33
+ var childProcess = require("child_process");
34
+ var httpProxy = require("http-proxy");
35
+ var path = require("path");
36
+ var logging = require("./logging");
37
+ /**
38
+ * Singleton tracking the jupyter server instance we manage.
39
+ */
40
+ var jupyterServer = null;
41
+ /**
42
+ * The maximum number of times we'll restart jupyter; we set a limit to avoid
43
+ * users being stuck with a slow-crash-looping server.
44
+ */
45
+ var remainingJupyterServerRestarts = 20;
46
+ /**
47
+ * The application settings instance.
48
+ */
49
+ var appSettings;
50
+ /*
51
+ * This list of levels should match the ones used by Python:
52
+ * https://docs.python.org/3/library/logging.html#logging-levels
53
+ */
54
+ var LogLevels;
55
+ (function (LogLevels) {
56
+ LogLevels["CRITICAL"] = "CRITICAL";
57
+ LogLevels["ERROR"] = "ERROR";
58
+ LogLevels["WARNING"] = "WARNING";
59
+ LogLevels["INFO"] = "INFO";
60
+ LogLevels["DEBUG"] = "DEBUG";
61
+ LogLevels["NOTSET"] = "NOTSET";
62
+ })(LogLevels || (LogLevels = {}));
63
+ function pipeOutput(stream) {
64
+ stream.setEncoding('utf8');
65
+ // The format we parse here corresponds to the log format we set in our
66
+ // jupyter configuration.
67
+ var logger = logging.getJupyterLogger();
68
+ stream.on('data', function (data) {
69
+ var e_1, _a;
70
+ try {
71
+ for (var _b = __values(data.split('\n')), _c = _b.next(); !_c.done; _c = _b.next()) {
72
+ var line = _c.value;
73
+ if (line.trim().length === 0) {
74
+ continue;
75
+ }
76
+ var parts = line.split('|', 3);
77
+ if (parts.length !== 3) {
78
+ // Non-logging messages (eg tracebacks) get logged as warnings.
79
+ logger.warn(line);
80
+ continue;
81
+ }
82
+ var level = parts[1];
83
+ var message = parts[2];
84
+ // We need to map Python's log levels to those used by bunyan.
85
+ if (level === LogLevels.CRITICAL || level === LogLevels.ERROR) {
86
+ logger.error(message);
87
+ }
88
+ else if (level === LogLevels.WARNING) {
89
+ logger.warn(message);
90
+ }
91
+ else if (level === LogLevels.INFO) {
92
+ logger.info(message);
93
+ }
94
+ else {
95
+ // We map DEBUG, NOTSET, and any unknown log levels to debug.
96
+ logger.debug(message);
97
+ }
98
+ }
99
+ }
100
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
101
+ finally {
102
+ try {
103
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
104
+ }
105
+ finally { if (e_1) throw e_1.error; }
106
+ }
107
+ });
108
+ }
109
+ function createJupyterServer() {
110
+ var e_2, _a;
111
+ if (!remainingJupyterServerRestarts) {
112
+ logging.getLogger().error('No jupyter restart attempts remaining.');
113
+ return;
114
+ }
115
+ remainingJupyterServerRestarts -= 1;
116
+ var port = appSettings.nextJupyterPort;
117
+ logging.getLogger().info('Launching Jupyter server at %d', port);
118
+ var jupyterArgs = appSettings.jupyterArgs || [];
119
+ function exitHandler(code, signal) {
120
+ if (jupyterServer) {
121
+ logging.getLogger().error('Jupyter process %d exited due to signal: %s', jupyterServer.childProcess.pid, signal);
122
+ }
123
+ else {
124
+ logging.getLogger().error('Jupyter process exit before server creation finished due to signal: %s', signal);
125
+ }
126
+ // We want to restart jupyter whenever it terminates.
127
+ createJupyterServer();
128
+ }
129
+ var contentDir = path.join(appSettings.datalabRoot, appSettings.contentDir);
130
+ var processArgs = ['notebook'].concat(jupyterArgs || []).concat([
131
+ "--port=".concat(port),
132
+ "--FileContentsManager.root_dir=".concat(appSettings.datalabRoot, "/"),
133
+ // TODO: b/136659627 - Delete this line.
134
+ "--MappingKernelManager.root_dir=".concat(contentDir),
135
+ ]);
136
+ var jupyterServerAddr = 'localhost';
137
+ try {
138
+ for (var jupyterArgs_1 = __values(jupyterArgs), jupyterArgs_1_1 = jupyterArgs_1.next(); !jupyterArgs_1_1.done; jupyterArgs_1_1 = jupyterArgs_1.next()) {
139
+ var flag = jupyterArgs_1_1.value;
140
+ // Extracts a string like '1.2.3.4' from the string '--ip=1.2.3.4'
141
+ var match = flag.match(/--ip=([^ ]+)/);
142
+ if (match) {
143
+ jupyterServerAddr = match[1];
144
+ break;
145
+ }
146
+ }
147
+ }
148
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
149
+ finally {
150
+ try {
151
+ if (jupyterArgs_1_1 && !jupyterArgs_1_1.done && (_a = jupyterArgs_1.return)) _a.call(jupyterArgs_1);
152
+ }
153
+ finally { if (e_2) throw e_2.error; }
154
+ }
155
+ logging.getLogger().info('Using jupyter server address %s', jupyterServerAddr);
156
+ var processOptions = {
157
+ detached: false,
158
+ env: process.env,
159
+ };
160
+ var serverProcess = childProcess.spawn('jupyter', processArgs, processOptions);
161
+ serverProcess.on('exit', exitHandler);
162
+ logging.getLogger().info('Jupyter process started with pid %d and args %j', serverProcess.pid, processArgs);
163
+ // Capture the output, so it can be piped for logging.
164
+ pipeOutput(serverProcess.stdout);
165
+ pipeOutput(serverProcess.stderr);
166
+ // Create the proxy.
167
+ var proxyTargetHost = appSettings.kernelManagerProxyHost || jupyterServerAddr;
168
+ var proxyTargetPort = appSettings.kernelManagerProxyPort || port;
169
+ var proxy = httpProxy.createProxyServer({ target: "http://".concat(proxyTargetHost, ":").concat(proxyTargetPort) });
170
+ proxy.on('error', errorHandler);
171
+ jupyterServer = { port: port, proxy: proxy, childProcess: serverProcess };
172
+ }
173
+ /**
174
+ * Initializes the Jupyter server manager.
175
+ */
176
+ function init(settings) {
177
+ appSettings = settings;
178
+ createJupyterServer();
179
+ }
180
+ /**
181
+ * Closes the Jupyter server manager.
182
+ */
183
+ function close() {
184
+ if (!jupyterServer) {
185
+ return;
186
+ }
187
+ var pid = jupyterServer.childProcess.pid;
188
+ logging.getLogger().info("jupyter close: PID: ".concat(pid));
189
+ jupyterServer.childProcess.kill('SIGHUP');
190
+ }
191
+ /** Proxy this socket request to jupyter. */
192
+ function handleSocket(request, socket, head) {
193
+ if (!jupyterServer) {
194
+ logging.getLogger().error('Jupyter server is not running.');
195
+ return;
196
+ }
197
+ jupyterServer.proxy.ws(request, socket, head);
198
+ }
199
+ /** Proxy this HTTP request to jupyter. */
200
+ function handleRequest(request, response) {
201
+ if (!jupyterServer) {
202
+ response.statusCode = 500;
203
+ response.end();
204
+ return;
205
+ }
206
+ jupyterServer.proxy.web(request, response, null);
207
+ }
208
+ function errorHandler(error, request, response) {
209
+ logging.getLogger().error(error, 'Jupyter server returned error.');
210
+ response.writeHead(500, 'Internal Server Error');
211
+ response.end();
212
+ }
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianVweXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RoaXJkX3BhcnR5L2NvbGFiL3NvdXJjZXMvanVweXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7Ozs7Ozs7Ozs7QUEySkgsb0JBR0M7QUFLRCxzQkFRQztBQUdELG9DQU9DO0FBR0Qsc0NBU0M7QUEvTEQsNENBQThDO0FBRTlDLHNDQUF3QztBQUV4QywyQkFBNkI7QUFHN0IsbUNBQXFDO0FBUXJDOztHQUVHO0FBQ0gsSUFBSSxhQUFhLEdBQXVCLElBQUksQ0FBQztBQUU3Qzs7O0dBR0c7QUFDSCxJQUFJLDhCQUE4QixHQUFXLEVBQUUsQ0FBQztBQUVoRDs7R0FFRztBQUNILElBQUksV0FBd0IsQ0FBQztBQUU3Qjs7O0dBR0c7QUFDSCxJQUFLLFNBT0o7QUFQRCxXQUFLLFNBQVM7SUFDWixrQ0FBcUIsQ0FBQTtJQUNyQiw0QkFBZSxDQUFBO0lBQ2YsZ0NBQW1CLENBQUE7SUFDbkIsMEJBQWEsQ0FBQTtJQUNiLDRCQUFlLENBQUE7SUFDZiw4QkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBUEksU0FBUyxLQUFULFNBQVMsUUFPYjtBQUVELFNBQVMsVUFBVSxDQUFDLE1BQTZCO0lBQy9DLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0IsdUVBQXVFO0lBQ3ZFLHlCQUF5QjtJQUN6QixJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFDLElBQVk7OztZQUM3QixLQUFtQixJQUFBLEtBQUEsU0FBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBLGdCQUFBLDRCQUFFLENBQUM7Z0JBQWpDLElBQU0sSUFBSSxXQUFBO2dCQUNiLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3ZCLCtEQUErRDtvQkFDL0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEIsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6Qiw4REFBOEQ7Z0JBQzlELElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQyxRQUFRLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDOUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsQ0FBQztxQkFBTSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZCLENBQUM7cUJBQU0sSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QixDQUFDO3FCQUFNLENBQUM7b0JBQ04sNkRBQTZEO29CQUM3RCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQzs7Ozs7Ozs7O0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxtQkFBbUI7O0lBQzFCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUNwRSxPQUFPO0lBQ1QsQ0FBQztJQUNELDhCQUE4QixJQUFJLENBQUMsQ0FBQztJQUNwQyxJQUFNLElBQUksR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDO0lBQ3pDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsSUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFFbEQsU0FBUyxXQUFXLENBQUMsSUFBWSxFQUFFLE1BQWM7UUFDL0MsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUNyQiw2Q0FBNkMsRUFDN0MsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0MsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUNyQix3RUFBd0UsRUFDeEUsTUFBTSxDQUFDLENBQUM7UUFDZCxDQUFDO1FBQ0QscURBQXFEO1FBQ3JELG1CQUFtQixFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUUsSUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNoRSxpQkFBVSxJQUFJLENBQUU7UUFDaEIseUNBQWtDLFdBQVcsQ0FBQyxXQUFXLE1BQUc7UUFDNUQsd0NBQXdDO1FBQ3hDLDBDQUFtQyxVQUFVLENBQUU7S0FDaEQsQ0FBQyxDQUFDO0lBRUgsSUFBSSxpQkFBaUIsR0FBRyxXQUFXLENBQUM7O1FBQ3BDLEtBQW1CLElBQUEsZ0JBQUEsU0FBQSxXQUFXLENBQUEsd0NBQUEsaUVBQUUsQ0FBQztZQUE1QixJQUFNLElBQUksd0JBQUE7WUFDYixrRUFBa0U7WUFDbEUsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN6QyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDOzs7Ozs7Ozs7SUFDRCxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUNwQixpQ0FBaUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBRTFELElBQU0sY0FBYyxHQUFHO1FBQ3JCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0tBQ2pCLENBQUM7SUFFRixJQUFNLGFBQWEsR0FDZixZQUFZLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDL0QsYUFBYSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FDcEIsaURBQWlELEVBQUUsYUFBYSxDQUFDLEdBQUksRUFDckUsV0FBVyxDQUFDLENBQUM7SUFFakIsc0RBQXNEO0lBQ3RELFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVqQyxvQkFBb0I7SUFDcEIsSUFBTSxlQUFlLEdBQ2pCLFdBQVcsQ0FBQyxzQkFBc0IsSUFBSSxpQkFBaUIsQ0FBQztJQUM1RCxJQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDO0lBRW5FLElBQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FDckMsRUFBQyxNQUFNLEVBQUUsaUJBQVUsZUFBZSxjQUFJLGVBQWUsQ0FBRSxFQUFDLENBQUMsQ0FBQztJQUM5RCxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVoQyxhQUFhLEdBQUcsRUFBQyxJQUFJLE1BQUEsRUFBRSxLQUFLLE9BQUEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsSUFBSSxDQUFDLFFBQXFCO0lBQ3hDLFdBQVcsR0FBRyxRQUFRLENBQUM7SUFDdkIsbUJBQW1CLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixLQUFLO0lBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixPQUFPO0lBQ1QsQ0FBQztJQUVELElBQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO0lBQzNDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsOEJBQXVCLEdBQUcsQ0FBRSxDQUFDLENBQUM7SUFDdkQsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVELDRDQUE0QztBQUM1QyxTQUFnQixZQUFZLENBQ3hCLE9BQTZCLEVBQUUsTUFBa0IsRUFBRSxJQUFZO0lBQ2pFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDNUQsT0FBTztJQUNULENBQUM7SUFDRCxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCwwQ0FBMEM7QUFDMUMsU0FBZ0IsYUFBYSxDQUN6QixPQUE2QixFQUFFLFFBQTZCO0lBQzlELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixRQUFRLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUMxQixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZixPQUFPO0lBQ1QsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUNqQixLQUFZLEVBQUUsT0FBNkIsRUFDM0MsUUFBNkI7SUFDL0IsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztJQUVuRSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2pELFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3RcbiAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mXG4gKiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVFxuICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlXG4gKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlclxuICogdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgY2hpbGRQcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCAqIGFzIGh0dHBQcm94eSBmcm9tICdodHRwLXByb3h5JztcbmltcG9ydCAqIGFzIG5ldCBmcm9tICduZXQnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtBcHBTZXR0aW5nc30gZnJvbSAnLi9hcHBTZXR0aW5ncyc7XG5pbXBvcnQgKiBhcyBsb2dnaW5nIGZyb20gJy4vbG9nZ2luZyc7XG5cbmludGVyZmFjZSBKdXB5dGVyU2VydmVyIHtcbiAgcG9ydDogbnVtYmVyO1xuICBjaGlsZFByb2Nlc3M6IGNoaWxkUHJvY2Vzcy5DaGlsZFByb2Nlc3M7XG4gIHByb3h5OiBodHRwUHJveHkuUHJveHlTZXJ2ZXI7XG59XG5cbi8qKlxuICogU2luZ2xldG9uIHRyYWNraW5nIHRoZSBqdXB5dGVyIHNlcnZlciBpbnN0YW5jZSB3ZSBtYW5hZ2UuXG4gKi9cbmxldCBqdXB5dGVyU2VydmVyOiBKdXB5dGVyU2VydmVyfG51bGwgPSBudWxsO1xuXG4vKipcbiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB3ZSdsbCByZXN0YXJ0IGp1cHl0ZXI7IHdlIHNldCBhIGxpbWl0IHRvIGF2b2lkXG4gKiB1c2VycyBiZWluZyBzdHVjayB3aXRoIGEgc2xvdy1jcmFzaC1sb29waW5nIHNlcnZlci5cbiAqL1xubGV0IHJlbWFpbmluZ0p1cHl0ZXJTZXJ2ZXJSZXN0YXJ0czogbnVtYmVyID0gMjA7XG5cbi8qKlxuICogVGhlIGFwcGxpY2F0aW9uIHNldHRpbmdzIGluc3RhbmNlLlxuICovXG5sZXQgYXBwU2V0dGluZ3M6IEFwcFNldHRpbmdzO1xuXG4vKlxuICogVGhpcyBsaXN0IG9mIGxldmVscyBzaG91bGQgbWF0Y2ggdGhlIG9uZXMgdXNlZCBieSBQeXRob246XG4gKiAgIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9sb2dnaW5nLmh0bWwjbG9nZ2luZy1sZXZlbHNcbiAqL1xuZW51bSBMb2dMZXZlbHMge1xuICBDUklUSUNBTCA9ICdDUklUSUNBTCcsXG4gIEVSUk9SID0gJ0VSUk9SJyxcbiAgV0FSTklORyA9ICdXQVJOSU5HJyxcbiAgSU5GTyA9ICdJTkZPJyxcbiAgREVCVUcgPSAnREVCVUcnLFxuICBOT1RTRVQgPSAnTk9UU0VUJyxcbn1cblxuZnVuY3Rpb24gcGlwZU91dHB1dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSkge1xuICBzdHJlYW0uc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcblxuICAvLyBUaGUgZm9ybWF0IHdlIHBhcnNlIGhlcmUgY29ycmVzcG9uZHMgdG8gdGhlIGxvZyBmb3JtYXQgd2Ugc2V0IGluIG91clxuICAvLyBqdXB5dGVyIGNvbmZpZ3VyYXRpb24uXG4gIGNvbnN0IGxvZ2dlciA9IGxvZ2dpbmcuZ2V0SnVweXRlckxvZ2dlcigpO1xuICBzdHJlYW0ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGRhdGEuc3BsaXQoJ1xcbicpKSB7XG4gICAgICBpZiAobGluZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnNwbGl0KCd8JywgMyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIC8vIE5vbi1sb2dnaW5nIG1lc3NhZ2VzIChlZyB0cmFjZWJhY2tzKSBnZXQgbG9nZ2VkIGFzIHdhcm5pbmdzLlxuICAgICAgICBsb2dnZXIud2FybihsaW5lKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBsZXZlbCA9IHBhcnRzWzFdO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHBhcnRzWzJdO1xuICAgICAgLy8gV2UgbmVlZCB0byBtYXAgUHl0aG9uJ3MgbG9nIGxldmVscyB0byB0aG9zZSB1c2VkIGJ5IGJ1bnlhbi5cbiAgICAgIGlmIChsZXZlbCA9PT0gTG9nTGV2ZWxzLkNSSVRJQ0FMIHx8IGxldmVsID09PSBMb2dMZXZlbHMuRVJST1IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIGlmIChsZXZlbCA9PT0gTG9nTGV2ZWxzLldBUk5JTkcpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4obWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKGxldmVsID09PSBMb2dMZXZlbHMuSU5GTykge1xuICAgICAgICBsb2dnZXIuaW5mbyhtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlIG1hcCBERUJVRywgTk9UU0VULCBhbmQgYW55IHVua25vd24gbG9nIGxldmVscyB0byBkZWJ1Zy5cbiAgICAgICAgbG9nZ2VyLmRlYnVnKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUp1cHl0ZXJTZXJ2ZXIoKSB7XG4gIGlmICghcmVtYWluaW5nSnVweXRlclNlcnZlclJlc3RhcnRzKSB7XG4gICAgbG9nZ2luZy5nZXRMb2dnZXIoKS5lcnJvcignTm8ganVweXRlciByZXN0YXJ0IGF0dGVtcHRzIHJlbWFpbmluZy4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVtYWluaW5nSnVweXRlclNlcnZlclJlc3RhcnRzIC09IDE7XG4gIGNvbnN0IHBvcnQgPSBhcHBTZXR0aW5ncy5uZXh0SnVweXRlclBvcnQ7XG4gIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuaW5mbygnTGF1bmNoaW5nIEp1cHl0ZXIgc2VydmVyIGF0ICVkJywgcG9ydCk7XG4gIGNvbnN0IGp1cHl0ZXJBcmdzID0gYXBwU2V0dGluZ3MuanVweXRlckFyZ3MgfHwgW107XG5cbiAgZnVuY3Rpb24gZXhpdEhhbmRsZXIoY29kZTogbnVtYmVyLCBzaWduYWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChqdXB5dGVyU2VydmVyKSB7XG4gICAgICBsb2dnaW5nLmdldExvZ2dlcigpLmVycm9yKFxuICAgICAgICAgICdKdXB5dGVyIHByb2Nlc3MgJWQgZXhpdGVkIGR1ZSB0byBzaWduYWw6ICVzJyxcbiAgICAgICAgICBqdXB5dGVyU2VydmVyLmNoaWxkUHJvY2Vzcy5waWQhLCBzaWduYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnaW5nLmdldExvZ2dlcigpLmVycm9yKFxuICAgICAgICAgICdKdXB5dGVyIHByb2Nlc3MgZXhpdCBiZWZvcmUgc2VydmVyIGNyZWF0aW9uIGZpbmlzaGVkIGR1ZSB0byBzaWduYWw6ICVzJyxcbiAgICAgICAgICBzaWduYWwpO1xuICAgIH1cbiAgICAvLyBXZSB3YW50IHRvIHJlc3RhcnQganVweXRlciB3aGVuZXZlciBpdCB0ZXJtaW5hdGVzLlxuICAgIGNyZWF0ZUp1cHl0ZXJTZXJ2ZXIoKTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRlbnREaXIgPSBwYXRoLmpvaW4oYXBwU2V0dGluZ3MuZGF0YWxhYlJvb3QsIGFwcFNldHRpbmdzLmNvbnRlbnREaXIpO1xuICBjb25zdCBwcm9jZXNzQXJncyA9IFsnbm90ZWJvb2snXS5jb25jYXQoanVweXRlckFyZ3MgfHwgW10pLmNvbmNhdChbXG4gICAgYC0tcG9ydD0ke3BvcnR9YCxcbiAgICBgLS1GaWxlQ29udGVudHNNYW5hZ2VyLnJvb3RfZGlyPSR7YXBwU2V0dGluZ3MuZGF0YWxhYlJvb3R9L2AsXG4gICAgLy8gVE9ETzogYi8xMzY2NTk2MjcgLSBEZWxldGUgdGhpcyBsaW5lLlxuICAgIGAtLU1hcHBpbmdLZXJuZWxNYW5hZ2VyLnJvb3RfZGlyPSR7Y29udGVudERpcn1gLFxuICBdKTtcblxuICBsZXQganVweXRlclNlcnZlckFkZHIgPSAnbG9jYWxob3N0JztcbiAgZm9yIChjb25zdCBmbGFnIG9mIGp1cHl0ZXJBcmdzKSB7XG4gICAgLy8gRXh0cmFjdHMgYSBzdHJpbmcgbGlrZSAnMS4yLjMuNCcgZnJvbSB0aGUgc3RyaW5nICctLWlwPTEuMi4zLjQnXG4gICAgY29uc3QgbWF0Y2ggPSBmbGFnLm1hdGNoKC8tLWlwPShbXiBdKykvKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGp1cHl0ZXJTZXJ2ZXJBZGRyID0gbWF0Y2hbMV07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgbG9nZ2luZy5nZXRMb2dnZXIoKS5pbmZvKFxuICAgICAgJ1VzaW5nIGp1cHl0ZXIgc2VydmVyIGFkZHJlc3MgJXMnLCBqdXB5dGVyU2VydmVyQWRkcik7XG5cbiAgY29uc3QgcHJvY2Vzc09wdGlvbnMgPSB7XG4gICAgZGV0YWNoZWQ6IGZhbHNlLFxuICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gIH07XG5cbiAgY29uc3Qgc2VydmVyUHJvY2VzcyA9XG4gICAgICBjaGlsZFByb2Nlc3Muc3Bhd24oJ2p1cHl0ZXInLCBwcm9jZXNzQXJncywgcHJvY2Vzc09wdGlvbnMpO1xuICBzZXJ2ZXJQcm9jZXNzLm9uKCdleGl0JywgZXhpdEhhbmRsZXIpO1xuICBsb2dnaW5nLmdldExvZ2dlcigpLmluZm8oXG4gICAgICAnSnVweXRlciBwcm9jZXNzIHN0YXJ0ZWQgd2l0aCBwaWQgJWQgYW5kIGFyZ3MgJWonLCBzZXJ2ZXJQcm9jZXNzLnBpZCEsXG4gICAgICBwcm9jZXNzQXJncyk7XG5cbiAgLy8gQ2FwdHVyZSB0aGUgb3V0cHV0LCBzbyBpdCBjYW4gYmUgcGlwZWQgZm9yIGxvZ2dpbmcuXG4gIHBpcGVPdXRwdXQoc2VydmVyUHJvY2Vzcy5zdGRvdXQpO1xuICBwaXBlT3V0cHV0KHNlcnZlclByb2Nlc3Muc3RkZXJyKTtcblxuICAvLyBDcmVhdGUgdGhlIHByb3h5LlxuICBjb25zdCBwcm94eVRhcmdldEhvc3QgPVxuICAgICAgYXBwU2V0dGluZ3Mua2VybmVsTWFuYWdlclByb3h5SG9zdCB8fCBqdXB5dGVyU2VydmVyQWRkcjtcbiAgY29uc3QgcHJveHlUYXJnZXRQb3J0ID0gYXBwU2V0dGluZ3Mua2VybmVsTWFuYWdlclByb3h5UG9ydCB8fCBwb3J0O1xuXG4gIGNvbnN0IHByb3h5ID0gaHR0cFByb3h5LmNyZWF0ZVByb3h5U2VydmVyKFxuICAgICAge3RhcmdldDogYGh0dHA6Ly8ke3Byb3h5VGFyZ2V0SG9zdH06JHtwcm94eVRhcmdldFBvcnR9YH0pO1xuICBwcm94eS5vbignZXJyb3InLCBlcnJvckhhbmRsZXIpO1xuXG4gIGp1cHl0ZXJTZXJ2ZXIgPSB7cG9ydCwgcHJveHksIGNoaWxkUHJvY2Vzczogc2VydmVyUHJvY2Vzc307XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIEp1cHl0ZXIgc2VydmVyIG1hbmFnZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KHNldHRpbmdzOiBBcHBTZXR0aW5ncyk6IHZvaWQge1xuICBhcHBTZXR0aW5ncyA9IHNldHRpbmdzO1xuICBjcmVhdGVKdXB5dGVyU2VydmVyKCk7XG59XG5cbi8qKlxuICogQ2xvc2VzIHRoZSBKdXB5dGVyIHNlcnZlciBtYW5hZ2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2UoKTogdm9pZCB7XG4gIGlmICghanVweXRlclNlcnZlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBpZCA9IGp1cHl0ZXJTZXJ2ZXIuY2hpbGRQcm9jZXNzLnBpZDtcbiAgbG9nZ2luZy5nZXRMb2dnZXIoKS5pbmZvKGBqdXB5dGVyIGNsb3NlOiBQSUQ6ICR7cGlkfWApO1xuICBqdXB5dGVyU2VydmVyLmNoaWxkUHJvY2Vzcy5raWxsKCdTSUdIVVAnKTtcbn1cblxuLyoqIFByb3h5IHRoaXMgc29ja2V0IHJlcXVlc3QgdG8ganVweXRlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVTb2NrZXQoXG4gICAgcmVxdWVzdDogaHR0cC5JbmNvbWluZ01lc3NhZ2UsIHNvY2tldDogbmV0LlNvY2tldCwgaGVhZDogQnVmZmVyKSB7XG4gIGlmICghanVweXRlclNlcnZlcikge1xuICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuZXJyb3IoJ0p1cHl0ZXIgc2VydmVyIGlzIG5vdCBydW5uaW5nLicpO1xuICAgIHJldHVybjtcbiAgfVxuICBqdXB5dGVyU2VydmVyLnByb3h5LndzKHJlcXVlc3QsIHNvY2tldCwgaGVhZCk7XG59XG5cbi8qKiBQcm94eSB0aGlzIEhUVFAgcmVxdWVzdCB0byBqdXB5dGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QoXG4gICAgcmVxdWVzdDogaHR0cC5JbmNvbWluZ01lc3NhZ2UsIHJlc3BvbnNlOiBodHRwLlNlcnZlclJlc3BvbnNlKSB7XG4gIGlmICghanVweXRlclNlcnZlcikge1xuICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgcmVzcG9uc2UuZW5kKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAganVweXRlclNlcnZlci5wcm94eS53ZWIocmVxdWVzdCwgcmVzcG9uc2UsIG51bGwpO1xufVxuXG5mdW5jdGlvbiBlcnJvckhhbmRsZXIoXG4gICAgZXJyb3I6IEVycm9yLCByZXF1ZXN0OiBodHRwLkluY29taW5nTWVzc2FnZSxcbiAgICByZXNwb25zZTogaHR0cC5TZXJ2ZXJSZXNwb25zZSkge1xuICBsb2dnaW5nLmdldExvZ2dlcigpLmVycm9yKGVycm9yLCAnSnVweXRlciBzZXJ2ZXIgcmV0dXJuZWQgZXJyb3IuJyk7XG5cbiAgcmVzcG9uc2Uud3JpdGVIZWFkKDUwMCwgJ0ludGVybmFsIFNlcnZlciBFcnJvcicpO1xuICByZXNwb25zZS5lbmQoKTtcbn1cbiJdfQ==
datalab/web/logging.js ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /*
3
+ * Copyright 2015 Google Inc. All rights reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
6
+ * use this file except in compliance with the License. You may obtain a copy of
7
+ * the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14
+ * License for the specific language governing permissions and limitations under
15
+ * the License.
16
+ */
17
+ var __values = (this && this.__values) || function(o) {
18
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
19
+ if (m) return m.call(o);
20
+ if (o && typeof o.length === "number") return {
21
+ next: function () {
22
+ if (o && i >= o.length) o = void 0;
23
+ return { value: o && o[i++], done: !o };
24
+ }
25
+ };
26
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.getLogger = getLogger;
30
+ exports.getJupyterLogger = getJupyterLogger;
31
+ exports.logRequest = logRequest;
32
+ exports.initializeLoggers = initializeLoggers;
33
+ var bunyan = require("bunyan");
34
+ var path = require("path");
35
+ // We import the bunyan-rotating-file-stream package, which exports a
36
+ // constructor as a single object; we use lint disables here to make the usage
37
+ // below look reasonable.
38
+ //
39
+ // tslint:disable-next-line:no-require-imports variable-name enforce-name-casing
40
+ var RotatingFileStream = require('bunyan-rotating-file-stream');
41
+ var logger = null;
42
+ var requestLogger = null;
43
+ var jupyterLogger = null;
44
+ /**
45
+ * Gets the logger for generating debug logs.
46
+ * @returns the logger configured for debugging logging.
47
+ */
48
+ function getLogger() {
49
+ return logger;
50
+ }
51
+ /**
52
+ * Gets the logger for generating Jupyter logs.
53
+ * @returns the logger configured for Jupyter logging.
54
+ */
55
+ function getJupyterLogger() {
56
+ return jupyterLogger;
57
+ }
58
+ /**
59
+ * Logs a request and the corresponding response.
60
+ * @param request the request to be logged.
61
+ * @param response the response to be logged.
62
+ */
63
+ function logRequest(request, response) {
64
+ requestLogger.debug({ url: request.url, method: request.method }, 'Received a new request');
65
+ response.on('finish', function () {
66
+ requestLogger.debug({
67
+ url: request.url,
68
+ method: request.method,
69
+ status: response.statusCode
70
+ });
71
+ });
72
+ }
73
+ /**
74
+ * Initializes loggers used within the application.
75
+ */
76
+ function initializeLoggers(settings) {
77
+ var e_1, _a;
78
+ // We configure our loggers as follows:
79
+ // * our base logger tags all log records with `"name":"app"`, and sends logs
80
+ // to stderr (including logs of all children)
81
+ // * one child logger adds `"type":"request"`, and records method/URL for all
82
+ // HTTP requests to the app, and method/URL/response code for all responses
83
+ // * one child logger adds `"type":"jupyter"`, and records all messages from
84
+ // the jupyter notebook server. These logs are also sent to a file on disk
85
+ // (to assist user debugging).
86
+ //
87
+ // For more about bunyan, see:
88
+ // https://github.com/trentm/node-bunyan/tree/f21007d46c0e64072617380b70d3f542368318a8
89
+ var jupyterLogPath = path.join(settings.datalabRoot, '/var/colab/app.log');
90
+ logger = bunyan.createLogger({
91
+ name: 'app',
92
+ streams: [
93
+ { level: 'debug', type: 'stream', stream: process.stderr },
94
+ ]
95
+ });
96
+ requestLogger = logger.child({ type: 'request' });
97
+ jupyterLogger = logger.child({
98
+ type: 'jupyter',
99
+ streams: [{
100
+ level: 'info',
101
+ type: 'stream',
102
+ stream: new RotatingFileStream({
103
+ path: jupyterLogPath,
104
+ rotateExisting: false,
105
+ threshold: '2m',
106
+ totalSize: '20m'
107
+ }),
108
+ }]
109
+ });
110
+ // Omit superfluous fields, unless using the bunyan CLI to make logs human
111
+ // readable, because the CLI requires them.
112
+ if (process.env['COLAB_HUMAN_READABLE_NODE_LOGS'] !== '1') {
113
+ try {
114
+ for (var _b = __values([logger, jupyterLogger, requestLogger]), _c = _b.next(); !_c.done; _c = _b.next()) {
115
+ var logs = _c.value;
116
+ delete logs.fields['hostname'];
117
+ delete logs.fields['name'];
118
+ }
119
+ }
120
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
121
+ finally {
122
+ try {
123
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
124
+ }
125
+ finally { if (e_1) throw e_1.error; }
126
+ }
127
+ }
128
+ }
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RoaXJkX3BhcnR5L2NvbGFiL3NvdXJjZXMvbG9nZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7Ozs7Ozs7Ozs7QUF1QkgsOEJBRUM7QUFNRCw0Q0FFQztBQU9ELGdDQVdDO0FBS0QsOENBeUNDO0FBL0ZELCtCQUFpQztBQUVqQywyQkFBNkI7QUFJN0IscUVBQXFFO0FBQ3JFLDhFQUE4RTtBQUM5RSx5QkFBeUI7QUFDekIsRUFBRTtBQUNGLGdGQUFnRjtBQUNoRixJQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0FBRWxFLElBQUksTUFBTSxHQUF3QixJQUFJLENBQUM7QUFDdkMsSUFBSSxhQUFhLEdBQXdCLElBQUksQ0FBQztBQUM5QyxJQUFJLGFBQWEsR0FBd0IsSUFBSSxDQUFDO0FBRTlDOzs7R0FHRztBQUNILFNBQWdCLFNBQVM7SUFDdkIsT0FBTyxNQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGdCQUFnQjtJQUM5QixPQUFPLGFBQWMsQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFVBQVUsQ0FDdEIsT0FBNkIsRUFBRSxRQUE2QjtJQUM5RCxhQUFjLENBQUMsS0FBSyxDQUNoQixFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFDLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUMxRSxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNwQixhQUFjLENBQUMsS0FBSyxDQUFDO1lBQ25CLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztZQUNoQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsUUFBcUI7O0lBQ3JELHVDQUF1QztJQUN2Qyw4RUFBOEU7SUFDOUUsZ0RBQWdEO0lBQ2hELDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSxpQ0FBaUM7SUFDakMsRUFBRTtJQUNGLDhCQUE4QjtJQUM5Qix3RkFBd0Y7SUFDeEYsSUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDN0UsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDM0IsSUFBSSxFQUFFLEtBQUs7UUFDWCxPQUFPLEVBQUU7WUFDUCxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBQztTQUN6RDtLQUNGLENBQUMsQ0FBQztJQUNILGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7SUFDaEQsYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDM0IsSUFBSSxFQUFFLFNBQVM7UUFDZixPQUFPLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsTUFBTTtnQkFDYixJQUFJLEVBQUUsUUFBUTtnQkFDZCxNQUFNLEVBQUUsSUFBSSxrQkFBa0IsQ0FBQztvQkFDN0IsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLGNBQWMsRUFBRSxLQUFLO29CQUNyQixTQUFTLEVBQUUsSUFBSTtvQkFDZixTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQzthQUNILENBQUM7S0FDSCxDQUFDLENBQUM7SUFDSCwwRUFBMEU7SUFDMUUsMkNBQTJDO0lBQzNDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDOztZQUMxRCxLQUFtQixJQUFBLEtBQUEsU0FBQSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUEsZ0JBQUEsNEJBQUUsQ0FBQztnQkFBdkQsSUFBTSxJQUFJLFdBQUE7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsQ0FBQzs7Ozs7Ozs7O0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdFxuICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2ZcbiAqIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUXG4gKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGVcbiAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyXG4gKiB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBidW55YW4gZnJvbSAnYnVueWFuJztcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0FwcFNldHRpbmdzfSBmcm9tICcuL2FwcFNldHRpbmdzJztcblxuLy8gV2UgaW1wb3J0IHRoZSBidW55YW4tcm90YXRpbmctZmlsZS1zdHJlYW0gcGFja2FnZSwgd2hpY2ggZXhwb3J0cyBhXG4vLyBjb25zdHJ1Y3RvciBhcyBhIHNpbmdsZSBvYmplY3Q7IHdlIHVzZSBsaW50IGRpc2FibGVzIGhlcmUgdG8gbWFrZSB0aGUgdXNhZ2Vcbi8vIGJlbG93IGxvb2sgcmVhc29uYWJsZS5cbi8vXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tcmVxdWlyZS1pbXBvcnRzIHZhcmlhYmxlLW5hbWUgZW5mb3JjZS1uYW1lLWNhc2luZ1xuY29uc3QgUm90YXRpbmdGaWxlU3RyZWFtID0gcmVxdWlyZSgnYnVueWFuLXJvdGF0aW5nLWZpbGUtc3RyZWFtJyk7XG5cbmxldCBsb2dnZXI6IGJ1bnlhbi5JTG9nZ2VyfG51bGwgPSBudWxsO1xubGV0IHJlcXVlc3RMb2dnZXI6IGJ1bnlhbi5JTG9nZ2VyfG51bGwgPSBudWxsO1xubGV0IGp1cHl0ZXJMb2dnZXI6IGJ1bnlhbi5JTG9nZ2VyfG51bGwgPSBudWxsO1xuXG4vKipcbiAqIEdldHMgdGhlIGxvZ2dlciBmb3IgZ2VuZXJhdGluZyBkZWJ1ZyBsb2dzLlxuICogQHJldHVybnMgdGhlIGxvZ2dlciBjb25maWd1cmVkIGZvciBkZWJ1Z2dpbmcgbG9nZ2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvZ2dlcigpOiBidW55YW4uSUxvZ2dlciB7XG4gIHJldHVybiBsb2dnZXIhO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGxvZ2dlciBmb3IgZ2VuZXJhdGluZyBKdXB5dGVyIGxvZ3MuXG4gKiBAcmV0dXJucyB0aGUgbG9nZ2VyIGNvbmZpZ3VyZWQgZm9yIEp1cHl0ZXIgbG9nZ2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEp1cHl0ZXJMb2dnZXIoKTogYnVueWFuLklMb2dnZXIge1xuICByZXR1cm4ganVweXRlckxvZ2dlciE7XG59XG5cbi8qKlxuICogTG9ncyBhIHJlcXVlc3QgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlLlxuICogQHBhcmFtIHJlcXVlc3QgdGhlIHJlcXVlc3QgdG8gYmUgbG9nZ2VkLlxuICogQHBhcmFtIHJlc3BvbnNlIHRoZSByZXNwb25zZSB0byBiZSBsb2dnZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dSZXF1ZXN0KFxuICAgIHJlcXVlc3Q6IGh0dHAuSW5jb21pbmdNZXNzYWdlLCByZXNwb25zZTogaHR0cC5TZXJ2ZXJSZXNwb25zZSk6IHZvaWQge1xuICByZXF1ZXN0TG9nZ2VyIS5kZWJ1ZyhcbiAgICAgIHt1cmw6IHJlcXVlc3QudXJsLCBtZXRob2Q6IHJlcXVlc3QubWV0aG9kfSwgJ1JlY2VpdmVkIGEgbmV3IHJlcXVlc3QnKTtcbiAgcmVzcG9uc2Uub24oJ2ZpbmlzaCcsICgpID0+IHtcbiAgICByZXF1ZXN0TG9nZ2VyIS5kZWJ1Zyh7XG4gICAgICB1cmw6IHJlcXVlc3QudXJsLFxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyBsb2dnZXJzIHVzZWQgd2l0aGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVMb2dnZXJzKHNldHRpbmdzOiBBcHBTZXR0aW5ncyk6IHZvaWQge1xuICAvLyBXZSBjb25maWd1cmUgb3VyIGxvZ2dlcnMgYXMgZm9sbG93czpcbiAgLy8gICogb3VyIGJhc2UgbG9nZ2VyIHRhZ3MgYWxsIGxvZyByZWNvcmRzIHdpdGggYFwibmFtZVwiOlwiYXBwXCJgLCBhbmQgc2VuZHMgbG9nc1xuICAvLyAgICB0byBzdGRlcnIgKGluY2x1ZGluZyBsb2dzIG9mIGFsbCBjaGlsZHJlbilcbiAgLy8gICogb25lIGNoaWxkIGxvZ2dlciBhZGRzIGBcInR5cGVcIjpcInJlcXVlc3RcImAsIGFuZCByZWNvcmRzIG1ldGhvZC9VUkwgZm9yIGFsbFxuICAvLyAgICBIVFRQIHJlcXVlc3RzIHRvIHRoZSBhcHAsIGFuZCBtZXRob2QvVVJML3Jlc3BvbnNlIGNvZGUgZm9yIGFsbCByZXNwb25zZXNcbiAgLy8gICogb25lIGNoaWxkIGxvZ2dlciBhZGRzIGBcInR5cGVcIjpcImp1cHl0ZXJcImAsIGFuZCByZWNvcmRzIGFsbCBtZXNzYWdlcyBmcm9tXG4gIC8vICAgIHRoZSBqdXB5dGVyIG5vdGVib29rIHNlcnZlci4gVGhlc2UgbG9ncyBhcmUgYWxzbyBzZW50IHRvIGEgZmlsZSBvbiBkaXNrXG4gIC8vICAgICh0byBhc3Npc3QgdXNlciBkZWJ1Z2dpbmcpLlxuICAvL1xuICAvLyBGb3IgbW9yZSBhYm91dCBidW55YW4sIHNlZTpcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vdHJlbnRtL25vZGUtYnVueWFuL3RyZWUvZjIxMDA3ZDQ2YzBlNjQwNzI2MTczODBiNzBkM2Y1NDIzNjgzMThhOFxuICBjb25zdCBqdXB5dGVyTG9nUGF0aCA9IHBhdGguam9pbihzZXR0aW5ncy5kYXRhbGFiUm9vdCwgJy92YXIvY29sYWIvYXBwLmxvZycpO1xuICBsb2dnZXIgPSBidW55YW4uY3JlYXRlTG9nZ2VyKHtcbiAgICBuYW1lOiAnYXBwJyxcbiAgICBzdHJlYW1zOiBbXG4gICAgICB7bGV2ZWw6ICdkZWJ1ZycsIHR5cGU6ICdzdHJlYW0nLCBzdHJlYW06IHByb2Nlc3Muc3RkZXJyfSxcbiAgICBdXG4gIH0pO1xuICByZXF1ZXN0TG9nZ2VyID0gbG9nZ2VyLmNoaWxkKHt0eXBlOiAncmVxdWVzdCd9KTtcbiAganVweXRlckxvZ2dlciA9IGxvZ2dlci5jaGlsZCh7XG4gICAgdHlwZTogJ2p1cHl0ZXInLFxuICAgIHN0cmVhbXM6IFt7XG4gICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgdHlwZTogJ3N0cmVhbScsXG4gICAgICBzdHJlYW06IG5ldyBSb3RhdGluZ0ZpbGVTdHJlYW0oe1xuICAgICAgICBwYXRoOiBqdXB5dGVyTG9nUGF0aCxcbiAgICAgICAgcm90YXRlRXhpc3Rpbmc6IGZhbHNlLFxuICAgICAgICB0aHJlc2hvbGQ6ICcybScsXG4gICAgICAgIHRvdGFsU2l6ZTogJzIwbSdcbiAgICAgIH0pLFxuICAgIH1dXG4gIH0pO1xuICAvLyBPbWl0IHN1cGVyZmx1b3VzIGZpZWxkcywgdW5sZXNzIHVzaW5nIHRoZSBidW55YW4gQ0xJIHRvIG1ha2UgbG9ncyBodW1hblxuICAvLyByZWFkYWJsZSwgYmVjYXVzZSB0aGUgQ0xJIHJlcXVpcmVzIHRoZW0uXG4gIGlmIChwcm9jZXNzLmVudlsnQ09MQUJfSFVNQU5fUkVBREFCTEVfTk9ERV9MT0dTJ10gIT09ICcxJykge1xuICAgIGZvciAoY29uc3QgbG9ncyBvZiBbbG9nZ2VyLCBqdXB5dGVyTG9nZ2VyLCByZXF1ZXN0TG9nZ2VyXSkge1xuICAgICAgZGVsZXRlIGxvZ3MuZmllbGRzWydob3N0bmFtZSddO1xuICAgICAgZGVsZXRlIGxvZ3MuZmllbGRzWyduYW1lJ107XG4gICAgfVxuICB9XG59XG4iXX0=
datalab/web/lsp/capabilities_node.js ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzX25vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9nZW5maWxlcy90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2xzcC9jYXBhYmlsaXRpZXNfbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcHJvdG9jb2wgZnJvbSAnLi9wcm90b2NvbF9ub2RlJztcbmltcG9ydCAqIGFzIHRleHREb2N1bWVudCBmcm9tICcuL3RleHRfZG9jdW1lbnRfbm9kZSc7XG5pbXBvcnQgKiBhcyB3b3Jrc3BhY2UgZnJvbSAnLi93b3Jrc3BhY2Vfbm9kZSc7XG5cbmRlY2xhcmUgaW50ZXJmYWNlIENsaWVudENhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBXb3Jrc3BhY2Ugc3BlY2lmaWMgY2xpZW50IGNhcGFiaWxpdGllcy5cbiAgICovXG4gIHdvcmtzcGFjZT86IHtcbiAgICAvKipcbiAgICAgKiBUaGUgY2xpZW50IHN1cHBvcnRzIGFwcGx5aW5nIGJhdGNoIGVkaXRzXG4gICAgICogdG8gdGhlIHdvcmtzcGFjZSBieSBzdXBwb3J0aW5nIHRoZSByZXF1ZXN0XG4gICAgICogJ3dvcmtzcGFjZS9hcHBseUVkaXQnXG4gICAgICovXG4gICAgYXBwbHlFZGl0PzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byBgV29ya3NwYWNlRWRpdGBzXG4gICAgICovXG4gICAgd29ya3NwYWNlRWRpdD86IHByb3RvY29sLldvcmtzcGFjZUVkaXRDbGllbnRDYXBhYmlsaXRpZXM7XG5cbiAgICAvKipcbiAgICAgKiBDYXBhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhlIGB3b3Jrc3BhY2UvZGlkQ2hhbmdlQ29uZmlndXJhdGlvbmBcbiAgICAgKiBub3RpZmljYXRpb24uXG4gICAgICovXG4gICAgZGlkQ2hhbmdlQ29uZmlndXJhdGlvbj86IHdvcmtzcGFjZS5EaWRDaGFuZ2VDb25maWd1cmF0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gICAgLyoqXG4gICAgICogQ2FwYWJpbGl0aWVzIHNwZWNpZmljIHRvIHRoZSBgd29ya3NwYWNlL2RpZENoYW5nZVdhdGNoZWRGaWxlc2BcbiAgICAgKiBub3RpZmljYXRpb24uXG4gICAgICovXG4gICAgZGlkQ2hhbmdlV2F0Y2hlZEZpbGVzPzogd29ya3NwYWNlLkRpZENoYW5nZVdhdGNoZWRGaWxlc0NsaWVudENhcGFiaWxpdGllcztcblxuICAgIC8qKlxuICAgICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHdvcmtzcGFjZS9zeW1ib2xgIHJlcXVlc3QuXG4gICAgICovXG4gICAgc3ltYm9sPzogd29ya3NwYWNlLldvcmtzcGFjZVN5bWJvbENsaWVudENhcGFiaWxpdGllcztcblxuICAgIC8qKlxuICAgICAqIENhcGFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGUgYHdvcmtzcGFjZS9leGVjdXRlQ29tbWFuZGAgcmVxdWVzdC5cbiAgICAgKi9cbiAgICBleGVjdXRlQ29tbWFuZD86IHByb3RvY29sLkV4ZWN1dGVDb21tYW5kQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBoYXMgc3VwcG9ydCBmb3Igd29ya3NwYWNlIGZvbGRlcnMuXG4gICAgICpcbiAgICAgKiBTaW5jZSAzLjYuMFxuICAgICAqL1xuICAgIHdvcmtzcGFjZUZvbGRlcnM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGNsaWVudCBzdXBwb3J0cyBgd29ya3NwYWNlL2NvbmZpZ3VyYXRpb25gIHJlcXVlc3RzLlxuICAgICAqXG4gICAgICogU2luY2UgMy42LjBcbiAgICAgKi9cbiAgICBjb25maWd1cmF0aW9uPzogYm9vbGVhbjtcbiAgfTtcblxuICAvKipcbiAgICogVGV4dCBkb2N1bWVudCBzcGVjaWZpYyBjbGllbnQgY2FwYWJpbGl0aWVzLlxuICAgKi9cbiAgdGV4dERvY3VtZW50PzogdGV4dERvY3VtZW50LlRleHREb2N1bWVudENsaWVudENhcGFiaWxpdGllcztcblxuICAvKipcbiAgICogV2luZG93IHNwZWNpZmljIGNsaWVudCBjYXBhYmlsaXRpZXMuXG4gICAqL1xuICB3aW5kb3c/OiB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBjbGllbnQgc3VwcG9ydHMgaGFuZGxpbmcgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9ucy5cbiAgICAgKiBJZiBzZXQsIHNlcnZlcnMgYXJlIGFsbG93ZWQgdG8gcmVwb3J0IGluIGB3b3JrRG9uZVByb2dyZXNzYCBwcm9wZXJ0eVxuICAgICAqIGluIHRoZSByZXF1ZXN0IHNwZWNpZmljIHNlcnZlciBjYXBhYmlsaXRpZXMuXG4gICAgICpcbiAgICAgKiBTaW5jZSAzLjE1LjBcbiAgICAgKi9cbiAgICB3b3JrRG9uZVByb2dyZXNzPzogYm9vbGVhbjtcbiAgfTtcblxuICAvKipcbiAgICogRXhwZXJpbWVudGFsIGNsaWVudCBjYXBhYmlsaXRpZXMuXG4gICAqL1xuICBleHBlcmltZW50YWw/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNpbml0aWFsaXplXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJbml0aWFsaXplIGV4dGVuZHNcbiAgICBwcm90b2NvbC5SZXF1ZXN0TWVzc2FnZTxJbml0aWFsaXplUGFyYW1zPiB7XG4gIG1ldGhvZDogcHJvdG9jb2wuTWV0aG9kLkluaXRpYWxpemU7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI2luaXRpYWxpemVcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEluaXRpYWxpemVQYXJhbXMgZXh0ZW5kc1xuICAgIHByb3RvY29sLldvcmtEb25lUHJvZ3Jlc3NQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHByb2Nlc3MgSUQgb2YgdGhlIHBhcmVudCBwcm9jZXNzIHRoYXQgc3RhcnRlZCB0aGUgc2VydmVyLlxuICAgKiBJcyBudWxsIGlmIHRoZSBwcm9jZXNzIGhhcyBub3QgYmVlbiBzdGFydGVkIGJ5IGFub3RoZXIgcHJvY2Vzcy5cbiAgICogSWYgdGhlIHBhcmVudCBwcm9jZXNzIGlzIG5vdCBhbGl2ZSwgdGhlbiB0aGUgc2VydmVyIHNob3VsZCBleGl0XG4gICAqIChzZWUgZXhpdCBub3RpZmljYXRpb24pIGl0cyBwcm9jZXNzLlxuICAgKi9cbiAgcHJvY2Vzc0lkOiBudW1iZXJ8bnVsbDtcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNsaWVudFxuICAgKlxuICAgKiBAc2luY2UgMy4xNS4wXG4gICAqL1xuICBjbGllbnRJbmZvPzoge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBjbGllbnQgYXMgZGVmaW5lZCBieSB0aGUgY2xpZW50LlxuICAgICAqL1xuICAgIG5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBjbGllbnQncyB2ZXJzaW9uIGFzIGRlZmluZWQgYnkgdGhlIGNsaWVudC5cbiAgICAgKi9cbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdFBhdGggb2YgdGhlIHdvcmtzcGFjZS4gSXMgbnVsbFxuICAgKiBpZiBubyBmb2xkZXIgaXMgb3Blbi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIHJvb3RVcmkuXG4gICAqL1xuICByb290UGF0aD86IHN0cmluZ3xudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdFVyaSBvZiB0aGUgd29ya3NwYWNlLiBJcyBudWxsIGlmIG5vXG4gICAqIGZvbGRlciBpcyBvcGVuLiBJZiBib3RoIGByb290UGF0aGAgYW5kIGByb290VXJpYCBhcmUgc2V0XG4gICAqIGByb290VXJpYCB3aW5zLlxuICAgKi9cbiAgcm9vdFVyaTogcHJvdG9jb2wuRG9jdW1lbnRVcml8bnVsbDtcblxuICAvKipcbiAgICogVXNlciBwcm92aWRlZCBpbml0aWFsaXphdGlvbiBvcHRpb25zLlxuICAgKi9cbiAgaW5pdGlhbGl6YXRpb25PcHRpb25zPzogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgY2xpZW50IChlZGl0b3Igb3IgdG9vbClcbiAgICovXG4gIGNhcGFiaWxpdGllczogQ2xpZW50Q2FwYWJpbGl0aWVzO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCB0cmFjZSBzZXR0aW5nLiBJZiBvbWl0dGVkIHRyYWNlIGlzIGRpc2FibGVkICgnb2ZmJykuXG4gICAqL1xuICB0cmFjZT86ICdvZmYnfCdtZXNzYWdlcyd8J3ZlcmJvc2UnO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGZvbGRlcnMgY29uZmlndXJlZCBpbiB0aGUgY2xpZW50IHdoZW4gdGhlIHNlcnZlciBzdGFydHMuXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIGNsaWVudCBzdXBwb3J0cyB3b3Jrc3BhY2UgZm9sZGVycy5cbiAgICogSXQgY2FuIGJlIGBudWxsYCBpZiB0aGUgY2xpZW50IHN1cHBvcnRzIHdvcmtzcGFjZSBmb2xkZXJzIGJ1dCBub25lIGFyZVxuICAgKiBjb25maWd1cmVkLlxuICAgKlxuICAgKiBAc2luY2UgMy42LjBcbiAgICovXG4gIHdvcmtzcGFjZUZvbGRlcnM/OiB3b3Jrc3BhY2UuV29ya3NwYWNlRm9sZGVyW118bnVsbDtcbn1cbiJdfQ==
datalab/web/lsp/extensions_node.js ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExecutionStatus = void 0;
4
+ /** The status of a cell's execution. */
5
+ var ExecutionStatus;
6
+ (function (ExecutionStatus) {
7
+ /** The default value for an execution status. */
8
+ ExecutionStatus[ExecutionStatus["UNKNOWN"] = 0] = "UNKNOWN";
9
+ /** Execution is up to date. */
10
+ ExecutionStatus[ExecutionStatus["FRESH"] = 1] = "FRESH";
11
+ /** Execution is out of date. */
12
+ ExecutionStatus[ExecutionStatus["STALE"] = 2] = "STALE";
13
+ })(ExecutionStatus || (exports.ExecutionStatus = ExecutionStatus = {}));
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9uc19ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vZ2VuZmlsZXMvdGhpcmRfcGFydHkvY29sYWIvc291cmNlcy9sc3AvZXh0ZW5zaW9uc19ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1DQSx3Q0FBd0M7QUFDeEMsSUFBWSxlQU9YO0FBUEQsV0FBWSxlQUFlO0lBQ3pCLGlEQUFpRDtJQUNqRCwyREFBVyxDQUFBO0lBQ1gsK0JBQStCO0lBQy9CLHVEQUFLLENBQUE7SUFDTCxnQ0FBZ0M7SUFDaEMsdURBQUssQ0FBQTtBQUNQLENBQUMsRUFQVyxlQUFlLCtCQUFmLGVBQWUsUUFPMUIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCAqIGFzIGNhcGFiaWxpdGllcyBmcm9tICcuL2NhcGFiaWxpdGllc19ub2RlJztcbmltcG9ydCAqIGFzIHByb3RvY29sIGZyb20gJy4vcHJvdG9jb2xfbm9kZSc7XG5pbXBvcnQgKiBhcyB0ZXh0RG9jdW1lbnQgZnJvbSAnLi90ZXh0X2RvY3VtZW50X25vZGUnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTplbmZvcmNlLW5hbWUtY2FzaW5nXG5cbi8qKlxuICogUGFyYW1ldGVyIGZvciBgaW5pdGlhbGl6ZWAgbWVzc2FnZXMuXG4gKiBBZGRzIGEgZmxhZyBjb250cm9sbGluZyB3aGV0aGVyIHdlIHJ1biBBdXRvRml4LlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSW5pdGlhbGl6ZVBhcmFtcyBleHRlbmRzXG4gICAgY2FwYWJpbGl0aWVzLkluaXRpYWxpemVQYXJhbXMge1xuICBhdXRvRml4OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlciBmb3IgYHRleHREb2N1bWVudC9kaWRPcGVuYCBtZXNzYWdlcy5cbiAqIEFkZHMgYSBwcmVhbWJsZSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWRPcGVuVGV4dERvY3VtZW50UGFyYW1zIGV4dGVuZHNcbiAgICB0ZXh0RG9jdW1lbnQuRGlkT3BlblRleHREb2N1bWVudFBhcmFtcyB7XG4gIHJlYWRvbmx5IHByZWFtYmxlOiBzdHJpbmc7XG59XG5cbi8qKiBQYXJhbWV0ZXJzIGZvciBgdGV4dERvY3VtZW50L3JlcGFpcmAgbWVzc2FnZXMuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUmVwYWlyUGFyYW1zIHtcbiAgY29kZTogc3RyaW5nO1xufVxuXG4vKiogUmVzdWx0IGZvciBgdGV4dERvY3VtZW50L3JlcGFpcmAgbWVzc2FnZXMuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUmVwYWlyUmVzdWx0IHtcbiAgcmVwYWlyZWRDb2RlOiBzdHJpbmc7XG59XG5cbi8qKiBUaGUgc3RhdHVzIG9mIGEgY2VsbCdzIGV4ZWN1dGlvbi4gKi9cbmV4cG9ydCBlbnVtIEV4ZWN1dGlvblN0YXR1cyB7XG4gIC8qKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYW4gZXhlY3V0aW9uIHN0YXR1cy4gKi9cbiAgVU5LTk9XTiA9IDAsXG4gIC8qKiBFeGVjdXRpb24gaXMgdXAgdG8gZGF0ZS4gKi9cbiAgRlJFU0gsXG4gIC8qKiBFeGVjdXRpb24gaXMgb3V0IG9mIGRhdGUuICovXG4gIFNUQUxFLFxufVxuXG4vKipcbiAqIE1hcCBmcm9tIGNlbGwgaW5kZXggdG8gdGhlIGV4ZWN1dGlvbiBzdGF0dXMgb2YgdGhhdCBjZWxsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvblN0YXR1c2VzIHtcbiAgW2luZGV4OiBudW1iZXJdOiBFeGVjdXRpb25TdGF0dXM7XG59XG5cbi8qKlxuICogRXhwYW5zaW9uRmVhdHVyZXMgZGVmaW5lcyB0aGUgb3B0aW9ucyB0aGF0IGNhbiBiZSBjb25maWd1cmVkIGhvd1xuICogcHJlcmVxdWlzaXRlcyBvciBkZXBlbmRlbnRzIGFyZSBleHBhbmRlZC5cbiAqXG4gKiBTZWUgZWFjaCBmaWVsZCBmb3IgaXRzIHJlc3BlY3RpdmUgZGVmYXVsdC4gTGVmdCB1bnNwZWNpZmllZCwgdGhleSBhcmUgdXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBhbnNpb25GZWF0dXJlcyB7XG4gIC8qKlxuICAgKiBFeGVjdXRpb25TdGF0dXNQcm9wYWdhdGlvbiB0b2dnbGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGV4ZWN1dGlvbiBzdGF0dXNlc1xuICAgKiBhcmUgcHJvcGFnYXRlZCBhbG9uZyB0aGUgZWRnZXMgb2YgY29ubmVjdGVkIGNlbGxzLlxuICAgKlxuICAgKiBVbnNwZWNpZmllZCBzZXJ2ZXItc2lkZSBkZWZhdWx0IGlzIHRydWUuXG4gICAqL1xuICBleGVjdXRpb25TdGF0dXNQcm9wYWdhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpbmtJbXBvcnRzVG9JbnN0YWxscyB0b2dnbGVzIHdoZXRoZXIgaW1wb3J0cyBhcmUgbGlua2VkIHRvIGluc3RhbGxzLlxuICAgKlxuICAgKiBVbnNwZWNpZmllZCBzZXJ2ZXItc2lkZSBkZWZhdWx0IGlzIHRydWUuXG4gICAqL1xuICBsaW5rSW1wb3J0c1RvSW5zdGFsbHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaW5rSURBc3NpZ25tZW50cyB0b2dnbGVzIHdoZXRoZXIgSURzIG9uIHRoZSBMSFMgb2YgYW4gYXNzaWdubWVudCBhcmVcbiAgICogbGlua2VkIHRvIHRob3NlIG9uIHRoZSBSSFMuXG4gICAqXG4gICAqIFVuc3BlY2lmaWVkIHNlcnZlci1zaWRlIGRlZmF1bHQgaXMgdHJ1ZS5cbiAgICovXG4gIGxpbmtJZEFzc2lnbm1lbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQmFja3RyYWNraW5nU3RyYXRlZ3kgZGVmaW5lcyB0aGUgc3RyYXRlZ3kgdG8gdXNlIHdoZW4gd29ya2luZy1iYWNrXG4gICAqIHJlZmVyZW5jZXMuXG4gICAqXG4gICAqIFVuc3BlY2lmaWVkIHNlcnZlci1zaWRlIGRlZmF1bHQgaXMgJ25vbi1saXRlcmFscycuXG4gICAqXG4gICAqIE9wdGlvbnMgYXJlOlxuICAgKlxuICAgKiAgIC0gJ25vbmUnXG4gICAqICAgLSAnYWxsJ1xuICAgKiAgIC0gJ25vbi1saXRlcmFscydcbiAgICovXG4gIGJhY2t0cmFja2luZ1N0cmF0ZWd5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3IgdGhlIGRlcGVuZGVudCBjZWxscyByZXF1ZXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxEZXBlbmRlbnRzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb2xsZWN0aW9uIG9mIGNlbGwgaW5kaWNlcyB3aG9zZSBkZXBlbmRlbnRzIGFyZSByZXF1ZXN0ZWQuXG4gICAqL1xuICBjZWxsczogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgZGVmaW5lcyB0aGUgZmVhdHVyZSBjb250cm9scyB0aGF0IGFyZSB1c2VkIHdoZW4gZXhwYW5kaW5nIHRoZVxuICAgKiBwcmVyZXF1aXNpdGVzLlxuICAgKi9cbiAgZXhwYW5zaW9uRmVhdHVyZXM/OiBFeHBhbnNpb25GZWF0dXJlcztcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHRoZSBjZWxsIHByZXJlcXVpc2l0ZXMgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZWxsUHJlcmVxdWlzaXRlc1BhcmFtcyB7XG4gIC8qKiBUaGUgZG9jdW1lbnQgVVJJLiAqL1xuICB1cmk6IHByb3RvY29sLkRvY3VtZW50VXJpO1xuXG4gIC8qKlxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBjZWxsIGluZGljZXMgd2hvc2UgcHJlcmVxdWlzaXRlcyBhcmUgcmVxdWVzdGVkLlxuICAgKi9cbiAgY2VsbHM6IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBNYXAgZnJvbSBjZWxsIGluZGV4IHRvIHRoZSBleGVjdXRpb24gc3RhdHVzIG9mIHRoYXQgY2VsbC5cbiAgICovXG4gIGV4ZWN1dGlvblN0YXR1c2VzPzogRXhlY3V0aW9uU3RhdHVzZXM7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgZGVmaW5lcyB0aGUgZmVhdHVyZSBjb250cm9scyB0aGF0IGFyZSB1c2VkIHdoZW4gZXhwYW5kaW5nIHRoZVxuICAgKiBwcmVyZXF1aXNpdGVzLlxuICAgKi9cbiAgZXhwYW5zaW9uRmVhdHVyZXM/OiBFeHBhbnNpb25GZWF0dXJlcztcbn1cblxuLyoqIEEgcG9pbnRlciB0byBhIGNlbGwgaW4gdGhlIG5vdGVib29rIHdpdGggc3RhdGVmdWwgaW5mb3JtYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGwge1xuICAvKiogVGhlIGluZGV4IG9mIHRoZSBjZWxsIGluIHRoZSBub3RlYm9vay4gKi9cbiAgaW5kZXg6IG51bWJlcjtcbiAgLyoqIFRoZSBzdGF0dXMgb2YgdGhlIGNlbGwncyBleGVjdXRpb24uICovXG4gIGV4ZWN1dGlvblN0YXR1czogRXhlY3V0aW9uU3RhdHVzO1xufVxuXG4vKipcbiAqIEEgY29ubmVjdGlvbiBiZXR3ZWVuIHR3byBzeW1ib2xzIHdoZXJlIG9uZSByZWZlcmVuY2VzIGFub3RoZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ltYm9sUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBzeW1ib2wgdGhhdCBlc3RhYmxpc2hlcyB0aGUgcmVmZXJlbmNlLlxuICAgKi9cbiAgc291cmNlOiBwcm90b2NvbC5SYW5nZTtcblxuICAvKipcbiAgICogVGhlIHN5bWJvbCB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgdGhlIHNvdXJjZSBzeW1ib2wuXG4gICAqL1xuICB0YXJnZXQ6IHByb3RvY29sLlJhbmdlO1xufVxuXG4vKipcbiAqIEEgY29ubmVjdGlvbiBiZXR3ZWVuIHR3byBjZWxscyB3aGVyZSBvbmUgcmVmZXJlbmNlcyBhbm90aGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxSZWYge1xuICAvKipcbiAgICogVGhlIGNlbGwgdGhhdCBlc3RhYmxpc2hlcyB0aGUgcmVmZXJlbmNlLlxuICAgKi9cbiAgc291cmNlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjZWxsIHRoYXQgaXMgcmVmZXJlbmNlZCBieSB0aGUgc291cmNlIGNlbGwuXG4gICAqL1xuICB0YXJnZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGNvbGxlY3Rpb24gb2Ygc3ltYm9sIHJlZmVyZW5jZXMgdGhhdCBlc3RhYmxpc2ggdGhlIHJlZmVyZW5jZS5cbiAgICovXG4gIG9uOiBTeW1ib2xSZWZbXTtcbn1cblxuLyoqXG4gKiBBIGdyYXBoIG9mIGNlbGxzIGFuZCB0aGVpciByZWZlcmVuY2VzIHRoYXQgZXN0YWJsaXNoIGRlcGVuZGVuY2llcyBiZXR3ZWVuXG4gKiB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxHcmFwaCB7XG4gIC8qKlxuICAgKiBUaGUgaW5kaWNlcyBvZiBjZWxscyBpbiBhIFB5dGhvbiBub3RlYm9vay5cbiAgICovXG4gIGNlbGxzPzogQ2VsbFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVmZXJlbmNlIGdyYXBoIHdoaWNoIGVzdGFibGlzaGVzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBjZWxscy5cbiAgICovXG4gIHJlZnM/OiBDZWxsUmVmW107XG59XG5cbi8qKlxuICogRGVwZW5kZW50Q2VsbHNSZXNwb25zZSByZXByZXNlbnRzIGEgcmVzcG9uc2UgZnJvbSBlaXRoZXIgcHJlcmVxdWlzaXRlIG9yXG4gKiBkZXBlbmRlbnQgY2VsbHMuIEl0IGNvbnRhaW5zIGEgZ3JhcGggdGhhdCByZXByZXNlbnRzIGNlbGxzIGFuZCB0aGVpclxuICogcmVmZXJlbmNlcyB0aGF0IGVzdGFibGlzaGVzIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGVuZGVudENlbGxzUmVzcG9uc2UgZXh0ZW5kcyBDZWxsR3JhcGgge1xuICAvKipcbiAgICogTWFnaWNzIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgcHJlcmVxIGNlbGxzLCBhbmQgbWF5IGxlYWQgdG8gaW5jb3JyZWN0XG4gICAqIHJlc3VsdHMuXG4gICAqL1xuICB1bnN1cHBvcnRlZE1hZ2ljcz86IHN0cmluZ1tdO1xufVxuIl19
datalab/web/lsp/protocol_node.js ADDED
@@ -0,0 +1,191 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ // tslint:disable:enforce-name-casing
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.SymbolTag = exports.SymbolKind = exports.DiagnosticSeverity = exports.DiagnosticTag = exports.FailureHandlingKind = exports.ResourceOperationKind = exports.ErrorCode = exports.Method = void 0;
5
+ /**
6
+ * JSON-RPC Methods.
7
+ */
8
+ var Method;
9
+ (function (Method) {
10
+ Method["CancelRequest"] = "$/cancelRequest";
11
+ Method["ClientRegisterCapability"] = "client/registerCapability";
12
+ Method["ColabPipLogChanged"] = "colab/pipLogChanged";
13
+ Method["CompletionItemResolve"] = "completionItem/resolve";
14
+ Method["Initialize"] = "initialize";
15
+ Method["Initialized"] = "initialized";
16
+ Method["TextDocumentAutoExecuteCheck"] = "textDocument/autoExecuteCheck";
17
+ Method["TextDocumentCodeAction"] = "textDocument/codeAction";
18
+ Method["TextDocumentCompletion"] = "textDocument/completion";
19
+ Method["TextDocumentDefinition"] = "textDocument/definition";
20
+ Method["TextDocumentDidChange"] = "textDocument/didChange";
21
+ Method["TextDocumentDidClose"] = "textDocument/didClose";
22
+ Method["TextDocumentDidOpen"] = "textDocument/didOpen";
23
+ Method["TextDocumentEchoDocument"] = "textDocument/echoDocument";
24
+ Method["TextDocumentHover"] = "textDocument/hover";
25
+ Method["TextDocumentCellDependents"] = "textDocument/cellDependents";
26
+ Method["TextDocumentCellPrerequisites"] = "textDocument/cellPrerequisites";
27
+ Method["TextDocumentInlayHint"] = "textDocument/inlayHint";
28
+ Method["TextDocumentPublishDiagnostics"] = "textDocument/publishDiagnostics";
29
+ Method["TextDocumentPrepareRename"] = "textDocument/prepareRename";
30
+ Method["TextDocumentRename"] = "textDocument/rename";
31
+ Method["TextDocumentRepair"] = "textDocument/repair";
32
+ Method["TextDocumentSignatureHelp"] = "textDocument/signatureHelp";
33
+ Method["WindowLogMessage"] = "window/logMessage";
34
+ Method["WorkspaceConfiguration"] = "workspace/configuration";
35
+ Method["WorkspaceDidChangeConfiguration"] = "workspace/didChangeConfiguration";
36
+ Method["WorkspaceDidChangeWatchedFiles"] = "workspace/didChangeWatchedFiles";
37
+ })(Method || (exports.Method = Method = {}));
38
+ /**
39
+ * https://microsoft.github.io/language-server-protocol/specifications/specification-current/#responseMessage
40
+ */
41
+ var ErrorCode;
42
+ (function (ErrorCode) {
43
+ // Defined by JSON RPC
44
+ ErrorCode[ErrorCode["ParseError"] = -32700] = "ParseError";
45
+ ErrorCode[ErrorCode["InvalidRequest"] = -32600] = "InvalidRequest";
46
+ ErrorCode[ErrorCode["MethodNotFound"] = -32601] = "MethodNotFound";
47
+ ErrorCode[ErrorCode["InvalidParams"] = -32602] = "InvalidParams";
48
+ ErrorCode[ErrorCode["InternalError"] = -32603] = "InternalError";
49
+ ErrorCode[ErrorCode["ServerErrorStart"] = -32099] = "ServerErrorStart";
50
+ ErrorCode[ErrorCode["ServerErrorEnd"] = -32000] = "ServerErrorEnd";
51
+ ErrorCode[ErrorCode["ServerNotInitialized"] = -32002] = "ServerNotInitialized";
52
+ ErrorCode[ErrorCode["UnknownErrorCode"] = -32001] = "UnknownErrorCode";
53
+ // Defined by the protocol.
54
+ ErrorCode[ErrorCode["RequestCancelled"] = -32800] = "RequestCancelled";
55
+ ErrorCode[ErrorCode["ContentModified"] = -32801] = "ContentModified";
56
+ })(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
57
+ /**
58
+ * The kind of resource operations supported by the client.
59
+ */
60
+ var ResourceOperationKind;
61
+ (function (ResourceOperationKind) {
62
+ /**
63
+ * Supports creating new files and folders.
64
+ */
65
+ ResourceOperationKind["CREATE"] = "create";
66
+ /**
67
+ * Supports renaming existing files and folders.
68
+ */
69
+ ResourceOperationKind["RENAME"] = "rename";
70
+ /**
71
+ * Supports deleting existing files and folders.
72
+ */
73
+ ResourceOperationKind["DELETE"] = "delete";
74
+ })(ResourceOperationKind || (exports.ResourceOperationKind = ResourceOperationKind = {}));
75
+ /**
76
+ * https://microsoft.github.io/language-server-protocol/specifications/specification-current/#workspaceEditClientCapabilities
77
+ */
78
+ var FailureHandlingKind;
79
+ (function (FailureHandlingKind) {
80
+ /**
81
+ * Applying the workspace change is simply aborted if one of the changes
82
+ * provided fails.
83
+ * All operations executed before the failing operation stay executed.
84
+ */
85
+ FailureHandlingKind["Abort"] = "abort";
86
+ /**
87
+ * All operations are executed transactional. That means they either all
88
+ * succeed or no changes at all are applied to the workspace.
89
+ */
90
+ FailureHandlingKind["Transactional"] = "transactional";
91
+ /**
92
+ * If the workspace edit contains only textual file changes, they are
93
+ * executed transactionally.
94
+ * If resource changes (create, rename or delete file) are part of the
95
+ * change, the failure handling strategy is abort.
96
+ */
97
+ FailureHandlingKind["TextOnlyTransactional"] = "textOnlyTransactional";
98
+ /**
99
+ * The client tries to undo the operations already executed. But there is no
100
+ * guarantee that this is succeeding.
101
+ */
102
+ FailureHandlingKind["Undo"] = "undo";
103
+ })(FailureHandlingKind || (exports.FailureHandlingKind = FailureHandlingKind = {}));
104
+ /**
105
+ * The diagnostic tags.
106
+ *
107
+ * @since 3.15.0
108
+ */
109
+ var DiagnosticTag;
110
+ (function (DiagnosticTag) {
111
+ /**
112
+ * Unused or unnecessary code.
113
+ *
114
+ * Clients are allowed to render diagnostics with this tag faded out
115
+ * instead of having an error squiggle.
116
+ */
117
+ DiagnosticTag[DiagnosticTag["Unnecessary"] = 1] = "Unnecessary";
118
+ /**
119
+ * Deprecated or obsolete code.
120
+ *
121
+ * Clients are allowed to rendered diagnostics with this tag strike through.
122
+ */
123
+ DiagnosticTag[DiagnosticTag["Deprecated"] = 2] = "Deprecated";
124
+ })(DiagnosticTag || (exports.DiagnosticTag = DiagnosticTag = {}));
125
+ /**
126
+ * https://microsoft.github.io/language-server-protocol/specifications/specification-current/#diagnostic
127
+ */
128
+ var DiagnosticSeverity;
129
+ (function (DiagnosticSeverity) {
130
+ /**
131
+ * Reports an error.
132
+ */
133
+ DiagnosticSeverity[DiagnosticSeverity["Error"] = 1] = "Error";
134
+ /**
135
+ * Reports a warning.
136
+ */
137
+ DiagnosticSeverity[DiagnosticSeverity["Warning"] = 2] = "Warning";
138
+ /**
139
+ * Reports an information.
140
+ */
141
+ DiagnosticSeverity[DiagnosticSeverity["Information"] = 3] = "Information";
142
+ /**
143
+ * Reports a hint.
144
+ */
145
+ DiagnosticSeverity[DiagnosticSeverity["Hint"] = 4] = "Hint";
146
+ })(DiagnosticSeverity || (exports.DiagnosticSeverity = DiagnosticSeverity = {}));
147
+ /**
148
+ * A symbol kind.
149
+ */
150
+ var SymbolKind;
151
+ (function (SymbolKind) {
152
+ SymbolKind[SymbolKind["File"] = 1] = "File";
153
+ SymbolKind[SymbolKind["Module"] = 2] = "Module";
154
+ SymbolKind[SymbolKind["Namespace"] = 3] = "Namespace";
155
+ SymbolKind[SymbolKind["Package"] = 4] = "Package";
156
+ SymbolKind[SymbolKind["Class"] = 5] = "Class";
157
+ SymbolKind[SymbolKind["Method"] = 6] = "Method";
158
+ SymbolKind[SymbolKind["Property"] = 7] = "Property";
159
+ SymbolKind[SymbolKind["Field"] = 8] = "Field";
160
+ SymbolKind[SymbolKind["Constructor"] = 9] = "Constructor";
161
+ SymbolKind[SymbolKind["Enum"] = 10] = "Enum";
162
+ SymbolKind[SymbolKind["Interface"] = 11] = "Interface";
163
+ SymbolKind[SymbolKind["Function"] = 12] = "Function";
164
+ SymbolKind[SymbolKind["Variable"] = 13] = "Variable";
165
+ SymbolKind[SymbolKind["Constant"] = 14] = "Constant";
166
+ SymbolKind[SymbolKind["String"] = 15] = "String";
167
+ SymbolKind[SymbolKind["Number"] = 16] = "Number";
168
+ SymbolKind[SymbolKind["Boolean"] = 17] = "Boolean";
169
+ SymbolKind[SymbolKind["Array"] = 18] = "Array";
170
+ SymbolKind[SymbolKind["Object"] = 19] = "Object";
171
+ SymbolKind[SymbolKind["Key"] = 20] = "Key";
172
+ SymbolKind[SymbolKind["Null"] = 21] = "Null";
173
+ SymbolKind[SymbolKind["EnumMember"] = 22] = "EnumMember";
174
+ SymbolKind[SymbolKind["Struct"] = 23] = "Struct";
175
+ SymbolKind[SymbolKind["Event"] = 24] = "Event";
176
+ SymbolKind[SymbolKind["Operator"] = 25] = "Operator";
177
+ SymbolKind[SymbolKind["TypeParameter"] = 26] = "TypeParameter";
178
+ })(SymbolKind || (exports.SymbolKind = SymbolKind = {}));
179
+ /**
180
+ * Symbol tags are extra annotations that tweak the rendering of a symbol.
181
+ *
182
+ * @since 3.16
183
+ */
184
+ var SymbolTag;
185
+ (function (SymbolTag) {
186
+ /**
187
+ * Render a symbol as obsolete, usually using a strike-out.
188
+ */
189
+ SymbolTag[SymbolTag["Deprecated"] = 1] = "Deprecated";
190
+ })(SymbolTag || (exports.SymbolTag = SymbolTag = {}));
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2xfbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2dlbmZpbGVzL3RoaXJkX3BhcnR5L2NvbGFiL3NvdXJjZXMvbHNwL3Byb3RvY29sX25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFDQUFxQzs7O0FBRXJDOztHQUVHO0FBQ0gsSUFBWSxNQTRCWDtBQTVCRCxXQUFZLE1BQU07SUFDaEIsMkNBQWlDLENBQUE7SUFDakMsZ0VBQXNELENBQUE7SUFDdEQsb0RBQTBDLENBQUE7SUFDMUMsMERBQWdELENBQUE7SUFDaEQsbUNBQXlCLENBQUE7SUFDekIscUNBQTJCLENBQUE7SUFDM0Isd0VBQThELENBQUE7SUFDOUQsNERBQWtELENBQUE7SUFDbEQsNERBQWtELENBQUE7SUFDbEQsNERBQWtELENBQUE7SUFDbEQsMERBQWdELENBQUE7SUFDaEQsd0RBQThDLENBQUE7SUFDOUMsc0RBQTRDLENBQUE7SUFDNUMsZ0VBQXNELENBQUE7SUFDdEQsa0RBQXdDLENBQUE7SUFDeEMsb0VBQTBELENBQUE7SUFDMUQsMEVBQWdFLENBQUE7SUFDaEUsMERBQWdELENBQUE7SUFDaEQsNEVBQWtFLENBQUE7SUFDbEUsa0VBQXdELENBQUE7SUFDeEQsb0RBQTBDLENBQUE7SUFDMUMsb0RBQTBDLENBQUE7SUFDMUMsa0VBQXdELENBQUE7SUFDeEQsZ0RBQXNDLENBQUE7SUFDdEMsNERBQWtELENBQUE7SUFDbEQsOEVBQW9FLENBQUE7SUFDcEUsNEVBQWtFLENBQUE7QUFDcEUsQ0FBQyxFQTVCVyxNQUFNLHNCQUFOLE1BQU0sUUE0QmpCO0FBcUVEOztHQUVHO0FBQ0gsSUFBWSxTQWVYO0FBZkQsV0FBWSxTQUFTO0lBQ25CLHNCQUFzQjtJQUN0QiwwREFBbUIsQ0FBQTtJQUNuQixrRUFBdUIsQ0FBQTtJQUN2QixrRUFBdUIsQ0FBQTtJQUN2QixnRUFBc0IsQ0FBQTtJQUN0QixnRUFBc0IsQ0FBQTtJQUN0QixzRUFBeUIsQ0FBQTtJQUN6QixrRUFBdUIsQ0FBQTtJQUN2Qiw4RUFBNkIsQ0FBQTtJQUM3QixzRUFBeUIsQ0FBQTtJQUV6QiwyQkFBMkI7SUFDM0Isc0VBQXlCLENBQUE7SUFDekIsb0VBQXdCLENBQUE7QUFDMUIsQ0FBQyxFQWZXLFNBQVMseUJBQVQsU0FBUyxRQWVwQjtBQStLRDs7R0FFRztBQUNILElBQVkscUJBYVg7QUFiRCxXQUFZLHFCQUFxQjtJQUMvQjs7T0FFRztJQUNILDBDQUFpQixDQUFBO0lBQ2pCOztPQUVHO0lBQ0gsMENBQWlCLENBQUE7SUFDakI7O09BRUc7SUFDSCwwQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBYlcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFhaEM7QUFFRDs7R0FFRztBQUNILElBQVksbUJBMkJYO0FBM0JELFdBQVksbUJBQW1CO0lBQzdCOzs7O09BSUc7SUFDSCxzQ0FBZSxDQUFBO0lBRWY7OztPQUdHO0lBQ0gsc0RBQStCLENBQUE7SUFFL0I7Ozs7O09BS0c7SUFDSCxzRUFBK0MsQ0FBQTtJQUUvQzs7O09BR0c7SUFDSCxvQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQTNCVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQTJCOUI7QUF3RUQ7Ozs7R0FJRztBQUNILElBQVksYUFjWDtBQWRELFdBQVksYUFBYTtJQUN2Qjs7Ozs7T0FLRztJQUNILCtEQUFlLENBQUE7SUFDZjs7OztPQUlHO0lBQ0gsNkRBQWMsQ0FBQTtBQUNoQixDQUFDLEVBZFcsYUFBYSw2QkFBYixhQUFhLFFBY3hCO0FBK0NEOztHQUVHO0FBQ0gsSUFBWSxrQkFpQlg7QUFqQkQsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCw2REFBUyxDQUFBO0lBQ1Q7O09BRUc7SUFDSCxpRUFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCx5RUFBZSxDQUFBO0lBQ2Y7O09BRUc7SUFDSCwyREFBUSxDQUFBO0FBQ1YsQ0FBQyxFQWpCVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQWlCN0I7QUFtQkQ7O0dBRUc7QUFDSCxJQUFZLFVBMkJYO0FBM0JELFdBQVksVUFBVTtJQUNwQiwyQ0FBUSxDQUFBO0lBQ1IsK0NBQVUsQ0FBQTtJQUNWLHFEQUFhLENBQUE7SUFDYixpREFBVyxDQUFBO0lBQ1gsNkNBQVMsQ0FBQTtJQUNULCtDQUFVLENBQUE7SUFDVixtREFBWSxDQUFBO0lBQ1osNkNBQVMsQ0FBQTtJQUNULHlEQUFlLENBQUE7SUFDZiw0Q0FBUyxDQUFBO0lBQ1Qsc0RBQWMsQ0FBQTtJQUNkLG9EQUFhLENBQUE7SUFDYixvREFBYSxDQUFBO0lBQ2Isb0RBQWEsQ0FBQTtJQUNiLGdEQUFXLENBQUE7SUFDWCxnREFBVyxDQUFBO0lBQ1gsa0RBQVksQ0FBQTtJQUNaLDhDQUFVLENBQUE7SUFDVixnREFBVyxDQUFBO0lBQ1gsMENBQVEsQ0FBQTtJQUNSLDRDQUFTLENBQUE7SUFDVCx3REFBZSxDQUFBO0lBQ2YsZ0RBQVcsQ0FBQTtJQUNYLDhDQUFVLENBQUE7SUFDVixvREFBYSxDQUFBO0lBQ2IsOERBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQTNCVyxVQUFVLDBCQUFWLFVBQVUsUUEyQnJCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksU0FNWDtBQU5ELFdBQVksU0FBUztJQUVuQjs7T0FFRztJQUNILHFEQUFjLENBQUE7QUFDaEIsQ0FBQyxFQU5XLFNBQVMseUJBQVQsU0FBUyxRQU1wQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOmVuZm9yY2UtbmFtZS1jYXNpbmdcblxuLyoqXG4gKiBKU09OLVJQQyBNZXRob2RzLlxuICovXG5leHBvcnQgZW51bSBNZXRob2Qge1xuICBDYW5jZWxSZXF1ZXN0ID0gJyQvY2FuY2VsUmVxdWVzdCcsXG4gIENsaWVudFJlZ2lzdGVyQ2FwYWJpbGl0eSA9ICdjbGllbnQvcmVnaXN0ZXJDYXBhYmlsaXR5JyxcbiAgQ29sYWJQaXBMb2dDaGFuZ2VkID0gJ2NvbGFiL3BpcExvZ0NoYW5nZWQnLFxuICBDb21wbGV0aW9uSXRlbVJlc29sdmUgPSAnY29tcGxldGlvbkl0ZW0vcmVzb2x2ZScsXG4gIEluaXRpYWxpemUgPSAnaW5pdGlhbGl6ZScsXG4gIEluaXRpYWxpemVkID0gJ2luaXRpYWxpemVkJyxcbiAgVGV4dERvY3VtZW50QXV0b0V4ZWN1dGVDaGVjayA9ICd0ZXh0RG9jdW1lbnQvYXV0b0V4ZWN1dGVDaGVjaycsXG4gIFRleHREb2N1bWVudENvZGVBY3Rpb24gPSAndGV4dERvY3VtZW50L2NvZGVBY3Rpb24nLFxuICBUZXh0RG9jdW1lbnRDb21wbGV0aW9uID0gJ3RleHREb2N1bWVudC9jb21wbGV0aW9uJyxcbiAgVGV4dERvY3VtZW50RGVmaW5pdGlvbiA9ICd0ZXh0RG9jdW1lbnQvZGVmaW5pdGlvbicsXG4gIFRleHREb2N1bWVudERpZENoYW5nZSA9ICd0ZXh0RG9jdW1lbnQvZGlkQ2hhbmdlJyxcbiAgVGV4dERvY3VtZW50RGlkQ2xvc2UgPSAndGV4dERvY3VtZW50L2RpZENsb3NlJyxcbiAgVGV4dERvY3VtZW50RGlkT3BlbiA9ICd0ZXh0RG9jdW1lbnQvZGlkT3BlbicsXG4gIFRleHREb2N1bWVudEVjaG9Eb2N1bWVudCA9ICd0ZXh0RG9jdW1lbnQvZWNob0RvY3VtZW50JyxcbiAgVGV4dERvY3VtZW50SG92ZXIgPSAndGV4dERvY3VtZW50L2hvdmVyJyxcbiAgVGV4dERvY3VtZW50Q2VsbERlcGVuZGVudHMgPSAndGV4dERvY3VtZW50L2NlbGxEZXBlbmRlbnRzJyxcbiAgVGV4dERvY3VtZW50Q2VsbFByZXJlcXVpc2l0ZXMgPSAndGV4dERvY3VtZW50L2NlbGxQcmVyZXF1aXNpdGVzJyxcbiAgVGV4dERvY3VtZW50SW5sYXlIaW50ID0gJ3RleHREb2N1bWVudC9pbmxheUhpbnQnLFxuICBUZXh0RG9jdW1lbnRQdWJsaXNoRGlhZ25vc3RpY3MgPSAndGV4dERvY3VtZW50L3B1Ymxpc2hEaWFnbm9zdGljcycsXG4gIFRleHREb2N1bWVudFByZXBhcmVSZW5hbWUgPSAndGV4dERvY3VtZW50L3ByZXBhcmVSZW5hbWUnLFxuICBUZXh0RG9jdW1lbnRSZW5hbWUgPSAndGV4dERvY3VtZW50L3JlbmFtZScsXG4gIFRleHREb2N1bWVudFJlcGFpciA9ICd0ZXh0RG9jdW1lbnQvcmVwYWlyJyxcbiAgVGV4dERvY3VtZW50U2lnbmF0dXJlSGVscCA9ICd0ZXh0RG9jdW1lbnQvc2lnbmF0dXJlSGVscCcsXG4gIFdpbmRvd0xvZ01lc3NhZ2UgPSAnd2luZG93L2xvZ01lc3NhZ2UnLFxuICBXb3Jrc3BhY2VDb25maWd1cmF0aW9uID0gJ3dvcmtzcGFjZS9jb25maWd1cmF0aW9uJyxcbiAgV29ya3NwYWNlRGlkQ2hhbmdlQ29uZmlndXJhdGlvbiA9ICd3b3Jrc3BhY2UvZGlkQ2hhbmdlQ29uZmlndXJhdGlvbicsXG4gIFdvcmtzcGFjZURpZENoYW5nZVdhdGNoZWRGaWxlcyA9ICd3b3Jrc3BhY2UvZGlkQ2hhbmdlV2F0Y2hlZEZpbGVzJyxcbn1cblxuLyoqIEJhc2UgSlNPTi1SUEMgMi4wIHR5cGUuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTWVzc2FnZSB7XG4gIGpzb25ycGM6ICcyLjAnO1xufVxuXG4vKipcbiAqIEpTT04tUlBDIDIuMCByZXF1ZXN0LlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3JlcXVlc3RNZXNzYWdlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBSZXF1ZXN0TWVzc2FnZTxUPiBleHRlbmRzIE1lc3NhZ2Uge1xuICAvKipcbiAgICogVGhlIHJlcXVlc3QgaWQuXG4gICAqL1xuICBpZDogbnVtYmVyfHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdG8gYmUgaW52b2tlZC5cbiAgICovXG4gIG1ldGhvZDogTWV0aG9kO1xuICAvKipcbiAgICogVGhlIG1ldGhvZCdzIHBhcmFtcy5cbiAgICovXG4gIHBhcmFtczogVDtcbn1cblxuLyoqXG4gKiBKU09OLVJQQyAyLjAgcmVzcG9uc2UuXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jcmVzcG9uc2VNZXNzYWdlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBSZXNwb25zZU1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0IGlkLlxuICAgKi9cbiAgaWQ6IG51bWJlcnxzdHJpbmd8bnVsbDtcblxuICAvKipcbiAgICogVGhlIHJlc3VsdCBvZiBhIHJlcXVlc3QuIFRoaXMgbWVtYmVyIGlzIFJFUVVJUkVEIG9uIHN1Y2Nlc3MuXG4gICAqIFRoaXMgbWVtYmVyIE1VU1QgTk9UIGV4aXN0IGlmIHRoZXJlIHdhcyBhbiBlcnJvciBpbnZva2luZyB0aGUgbWV0aG9kLlxuICAgKi9cbiAgcmVzdWx0Pzogc3RyaW5nfG51bWJlcnxib29sZWFufG9iamVjdHxudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgZXJyb3Igb2JqZWN0IGluIGNhc2UgYSByZXF1ZXN0IGZhaWxzLlxuICAgKi9cbiAgZXJyb3I/OiBSZXNwb25zZUVycm9yO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNyZXNwb25zZU1lc3NhZ2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFJlc3BvbnNlRXJyb3Ige1xuICAvKipcbiAgICogQSBudW1iZXIgaW5kaWNhdGluZyB0aGUgZXJyb3IgdHlwZSB0aGF0IG9jY3VycmVkLlxuICAgKi9cbiAgY29kZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHN0cmluZyBwcm92aWRpbmcgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcHJpbWl0aXZlIG9yIHN0cnVjdHVyZWQgdmFsdWUgdGhhdCBjb250YWlucyBhZGRpdGlvbmFsXG4gICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvci4gQ2FuIGJlIG9taXR0ZWQuXG4gICAqL1xuICBkYXRhPzogc3RyaW5nfG51bWJlcnxib29sZWFufHVua25vd25bXXxvYmplY3R8bnVsbDtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jcmVzcG9uc2VNZXNzYWdlXG4gKi9cbmV4cG9ydCBlbnVtIEVycm9yQ29kZSB7XG4gIC8vIERlZmluZWQgYnkgSlNPTiBSUENcbiAgUGFyc2VFcnJvciA9IC0zMjcwMCxcbiAgSW52YWxpZFJlcXVlc3QgPSAtMzI2MDAsXG4gIE1ldGhvZE5vdEZvdW5kID0gLTMyNjAxLFxuICBJbnZhbGlkUGFyYW1zID0gLTMyNjAyLFxuICBJbnRlcm5hbEVycm9yID0gLTMyNjAzLFxuICBTZXJ2ZXJFcnJvclN0YXJ0ID0gLTMyMDk5LFxuICBTZXJ2ZXJFcnJvckVuZCA9IC0zMjAwMCxcbiAgU2VydmVyTm90SW5pdGlhbGl6ZWQgPSAtMzIwMDIsXG4gIFVua25vd25FcnJvckNvZGUgPSAtMzIwMDEsXG5cbiAgLy8gRGVmaW5lZCBieSB0aGUgcHJvdG9jb2wuXG4gIFJlcXVlc3RDYW5jZWxsZWQgPSAtMzI4MDAsXG4gIENvbnRlbnRNb2RpZmllZCA9IC0zMjgwMSxcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jbm90aWZpY2F0aW9uTWVzc2FnZVxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTm90aWZpY2F0aW9uTWVzc2FnZTxUPiBleHRlbmRzIE1lc3NhZ2Uge1xuICAvKipcbiAgICogVGhlIG1ldGhvZCB0byBiZSBpbnZva2VkLlxuICAgKi9cbiAgbWV0aG9kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpZmljYXRpb24ncyBwYXJhbXMuXG4gICAqL1xuICBwYXJhbXM6IFQ7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI2NhbmNlbFJlcXVlc3RcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENhbmNlbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBpZCB0byBjYW5jZWwuXG4gICAqL1xuICBpZDogbnVtYmVyfHN0cmluZztcbn1cblxudHlwZSBQcm9ncmVzc1Rva2VuID0gbnVtYmVyfHN0cmluZztcbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3Byb2dyZXNzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBQcm9ncmVzc1BhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBUaGUgcHJvZ3Jlc3MgdG9rZW4gcHJvdmlkZWQgYnkgdGhlIGNsaWVudCBvciBzZXJ2ZXIuXG4gICAqL1xuICB0b2tlbjogUHJvZ3Jlc3NUb2tlbjtcblxuICAvKipcbiAgICogVGhlIHByb2dyZXNzIGRhdGEuXG4gICAqL1xuICB2YWx1ZTogVDtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jdXJpXG4gKi9cbmV4cG9ydCB0eXBlIERvY3VtZW50VXJpID0gc3RyaW5nO1xuXG4vKipcbiAqIFBvc2l0aW9uIGluIGEgdGV4dCBkb2N1bWVudCBleHByZXNzZWQgYXMgemVyby1iYXNlZCBsaW5lIGFuZCB6ZXJvLWJhc2VkXG4gKiBjaGFyYWN0ZXIgb2Zmc2V0LiBBIHBvc2l0aW9uIGlzIGJldHdlZW4gdHdvIGNoYXJhY3RlcnMgbGlrZSBhbiDigJhpbnNlcnTigJlcbiAqIGN1cnNvciBpbiBhIGVkaXRvci4gU3BlY2lhbCB2YWx1ZXMgbGlrZSBmb3IgZXhhbXBsZSAtMSB0byBkZW5vdGUgdGhlIGVuZCBvZlxuICogYSBsaW5lIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3Bvc2l0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBQb3NpdGlvbiB7XG4gIC8qKlxuICAgKiBMaW5lIHBvc2l0aW9uIGluIGEgZG9jdW1lbnQgKHplcm8tYmFzZWQpLlxuICAgKi9cbiAgbGluZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGFyYWN0ZXIgb2Zmc2V0IG9uIGEgbGluZSBpbiBhIGRvY3VtZW50ICh6ZXJvLWJhc2VkKS4gQXNzdW1pbmcgdGhhdCB0aGVcbiAgICogbGluZSBpcyByZXByZXNlbnRlZCBhcyBhIHN0cmluZywgdGhlIGBjaGFyYWN0ZXJgIHZhbHVlIHJlcHJlc2VudHMgdGhlIGdhcFxuICAgKiBiZXR3ZWVuIHRoZSBgY2hhcmFjdGVyYCBhbmQgYGNoYXJhY3RlciArIDFgLlxuICAgKlxuICAgKiBJZiB0aGUgY2hhcmFjdGVyIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGluZSBsZW5ndGggaXQgZGVmYXVsdHMgYmFja1xuICAgKiB0byB0aGUgbGluZSBsZW5ndGguXG4gICAqL1xuICBjaGFyYWN0ZXI6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jcmFuZ2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFJhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSByYW5nZSdzIHN0YXJ0IHBvc2l0aW9uLlxuICAgKi9cbiAgc3RhcnQ6IFBvc2l0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcmFuZ2UncyBlbmQgcG9zaXRpb24uXG4gICAqL1xuICBlbmQ6IFBvc2l0aW9uO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNsb2NhdGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTG9jYXRpb24ge1xuICB1cmk6IERvY3VtZW50VXJpO1xuICByYW5nZTogUmFuZ2U7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI2xvY2F0aW9uTGlua1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTG9jYXRpb25MaW5rIHtcbiAgLyoqXG4gICAqIFNwYW4gb2YgdGhlIG9yaWdpbiBvZiB0aGlzIGxpbmsuXG4gICAqXG4gICAqIFVzZWQgYXMgdGhlIHVuZGVybGluZWQgc3BhbiBmb3IgbW91c2UgaW50ZXJhY3Rpb24uXG4gICAqIERlZmF1bHRzIHRvIHRoZSB3b3JkIHJhbmdlIGF0IHRoZSBtb3VzZSBwb3NpdGlvbi5cbiAgICovXG4gIG9yaWdpblNlbGVjdGlvblJhbmdlPzogUmFuZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgcmVzb3VyY2UgaWRlbnRpZmllciBvZiB0aGlzIGxpbmsuXG4gICAqL1xuICB0YXJnZXRVcmk6IERvY3VtZW50VXJpO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCB0YXJnZXQgcmFuZ2Ugb2YgdGhpcyBsaW5rLlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHRhcmdldCBpcyBhIHN5bWJvbCwgdGhlbiB0YXJnZXQgcmFuZ2UgaXMgdGhlIHJhbmdlXG4gICAqIGVuY2xvc2luZyB0aGlzIHN5bWJvbCBub3QgaW5jbHVkaW5nIGxlYWRpbmcvdHJhaWxpbmcgd2hpdGVzcGFjZSBidXRcbiAgICogZXZlcnl0aGluZyBlbHNlIGxpa2UgY29tbWVudHMuXG4gICAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdHlwaWNhbGx5IHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSByYW5nZSBpbiB0aGUgZWRpdG9yLlxuICAgKi9cbiAgdGFyZ2V0UmFuZ2U6IFJhbmdlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmFuZ2UgdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWQgYW5kIHJldmVhbGVkIHdoZW4gdGhpcyBsaW5rIGlzIGJlaW5nXG4gICAqIGZvbGxvd2VkLCBmb3IgZXhhbXBsZSwgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbi5cbiAgICogTXVzdCBiZSBjb250YWluZWQgYnkgdGhlIGB0YXJnZXRSYW5nZWAuXG4gICAqIFNlZSBhbHNvIGBEb2N1bWVudFN5bWJvbCNyYW5nZWBcbiAgICovXG4gIHRhcmdldFNlbGVjdGlvblJhbmdlOiBSYW5nZTtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jY29tbWFuZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmQge1xuICAvKipcbiAgICogVGl0bGUgb2YgdGhlIGNvbW1hbmQsIGxpa2UgYHNhdmVgLlxuICAgKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBhY3R1YWwgY29tbWFuZCBoYW5kbGVyLlxuICAgKi9cbiAgY29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQXJndW1lbnRzIHRoYXQgdGhlIGNvbW1hbmQgaGFuZGxlciBzaG91bGQgYmVcbiAgICogaW52b2tlZCB3aXRoLlxuICAgKi9cbiAgYXJndW1lbnRzPzogdW5rbm93bltdO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN3b3Jrc3BhY2VFZGl0Q2xpZW50Q2FwYWJpbGl0aWVzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBXb3Jrc3BhY2VFZGl0Q2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdmVyc2lvbmVkIGRvY3VtZW50IGNoYW5nZXMgaW4gYFdvcmtzcGFjZUVkaXRgc1xuICAgKi9cbiAgZG9jdW1lbnRDaGFuZ2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG9wZXJhdGlvbnMgdGhlIGNsaWVudCBzdXBwb3J0cy4gQ2xpZW50cyBzaG91bGQgYXQgbGVhc3RcbiAgICogc3VwcG9ydCAnY3JlYXRlJywgJ3JlbmFtZScgYW5kICdkZWxldGUnIGZpbGVzIGFuZCBmb2xkZXJzLlxuICAgKlxuICAgKiBAc2luY2UgMy4xMy4wXG4gICAqL1xuICByZXNvdXJjZU9wZXJhdGlvbnM/OiBSZXNvdXJjZU9wZXJhdGlvbktpbmRbXTtcblxuICAvKipcbiAgICogVGhlIGZhaWx1cmUgaGFuZGxpbmcgc3RyYXRlZ3kgb2YgYSBjbGllbnQgaWYgYXBwbHlpbmcgdGhlIHdvcmtzcGFjZSBlZGl0XG4gICAqIGZhaWxzLlxuICAgKlxuICAgKiBAc2luY2UgMy4xMy4wXG4gICAqL1xuICBmYWlsdXJlSGFuZGxpbmc/OiBGYWlsdXJlSGFuZGxpbmdLaW5kO1xufVxuXG4vKipcbiAqIFRoZSBraW5kIG9mIHJlc291cmNlIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBlbnVtIFJlc291cmNlT3BlcmF0aW9uS2luZCB7XG4gIC8qKlxuICAgKiBTdXBwb3J0cyBjcmVhdGluZyBuZXcgZmlsZXMgYW5kIGZvbGRlcnMuXG4gICAqL1xuICBDUkVBVEUgPSAnY3JlYXRlJyxcbiAgLyoqXG4gICAqIFN1cHBvcnRzIHJlbmFtaW5nIGV4aXN0aW5nIGZpbGVzIGFuZCBmb2xkZXJzLlxuICAgKi9cbiAgUkVOQU1FID0gJ3JlbmFtZScsXG4gIC8qKlxuICAgKiBTdXBwb3J0cyBkZWxldGluZyBleGlzdGluZyBmaWxlcyBhbmQgZm9sZGVycy5cbiAgICovXG4gIERFTEVURSA9ICdkZWxldGUnLFxufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN3b3Jrc3BhY2VFZGl0Q2xpZW50Q2FwYWJpbGl0aWVzXG4gKi9cbmV4cG9ydCBlbnVtIEZhaWx1cmVIYW5kbGluZ0tpbmQge1xuICAvKipcbiAgICogQXBwbHlpbmcgdGhlIHdvcmtzcGFjZSBjaGFuZ2UgaXMgc2ltcGx5IGFib3J0ZWQgaWYgb25lIG9mIHRoZSBjaGFuZ2VzXG4gICAqIHByb3ZpZGVkIGZhaWxzLlxuICAgKiBBbGwgb3BlcmF0aW9ucyBleGVjdXRlZCBiZWZvcmUgdGhlIGZhaWxpbmcgb3BlcmF0aW9uIHN0YXkgZXhlY3V0ZWQuXG4gICAqL1xuICBBYm9ydCA9ICdhYm9ydCcsXG5cbiAgLyoqXG4gICAqIEFsbCBvcGVyYXRpb25zIGFyZSBleGVjdXRlZCB0cmFuc2FjdGlvbmFsLiBUaGF0IG1lYW5zIHRoZXkgZWl0aGVyIGFsbFxuICAgKiBzdWNjZWVkIG9yIG5vIGNoYW5nZXMgYXQgYWxsIGFyZSBhcHBsaWVkIHRvIHRoZSB3b3Jrc3BhY2UuXG4gICAqL1xuICBUcmFuc2FjdGlvbmFsID0gJ3RyYW5zYWN0aW9uYWwnLFxuXG4gIC8qKlxuICAgKiBJZiB0aGUgd29ya3NwYWNlIGVkaXQgY29udGFpbnMgb25seSB0ZXh0dWFsIGZpbGUgY2hhbmdlcywgdGhleSBhcmVcbiAgICogZXhlY3V0ZWQgdHJhbnNhY3Rpb25hbGx5LlxuICAgKiBJZiByZXNvdXJjZSBjaGFuZ2VzIChjcmVhdGUsIHJlbmFtZSBvciBkZWxldGUgZmlsZSkgYXJlIHBhcnQgb2YgdGhlXG4gICAqIGNoYW5nZSwgdGhlIGZhaWx1cmUgaGFuZGxpbmcgc3RyYXRlZ3kgaXMgYWJvcnQuXG4gICAqL1xuICBUZXh0T25seVRyYW5zYWN0aW9uYWwgPSAndGV4dE9ubHlUcmFuc2FjdGlvbmFsJyxcblxuICAvKipcbiAgICogVGhlIGNsaWVudCB0cmllcyB0byB1bmRvIHRoZSBvcGVyYXRpb25zIGFscmVhZHkgZXhlY3V0ZWQuIEJ1dCB0aGVyZSBpcyBub1xuICAgKiBndWFyYW50ZWUgdGhhdCB0aGlzIGlzIHN1Y2NlZWRpbmcuXG4gICAqL1xuICBVbmRvID0gJ3VuZG8nLFxufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNkb2N1bWVudEZpbHRlclxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRG9jdW1lbnRGaWx0ZXIge1xuICAvKipcbiAgICogQSBsYW5ndWFnZSBpZCwgbGlrZSBgdHlwZXNjcmlwdGAuXG4gICAqL1xuICBsYW5ndWFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBVcmkgW3NjaGVtZV0oI1VyaS5zY2hlbWUpLCBsaWtlIGBmaWxlYCBvciBgdW50aXRsZWRgLlxuICAgKi9cbiAgc2NoZW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGdsb2IgcGF0dGVybiwgbGlrZSBgKi57dHMsanN9YC5cbiAgICpcbiAgICogR2xvYiBwYXR0ZXJucyBjYW4gaGF2ZSB0aGUgZm9sbG93aW5nIHN5bnRheDpcbiAgICogLSBgKmAgdG8gbWF0Y2ggb25lIG9yIG1vcmUgY2hhcmFjdGVycyBpbiBhIHBhdGggc2VnbWVudFxuICAgKiAtIGA/YCB0byBtYXRjaCBvbiBvbmUgY2hhcmFjdGVyIGluIGEgcGF0aCBzZWdtZW50XG4gICAqIC0gYCoqYCB0byBtYXRjaCBhbnkgbnVtYmVyIG9mIHBhdGggc2VnbWVudHMsIGluY2x1ZGluZyBub25lXG4gICAqIC0gYHt9YCB0byBncm91cCBjb25kaXRpb25zXG4gICAqICAgKGUuZy4gYCoq4oCLLyoue3RzLGpzfWAgbWF0Y2hlcyBhbGwgVHlwZVNjcmlwdCBhbmQgSmF2YVNjcmlwdCBmaWxlcylcbiAgICogLSBgW11gIHRvIGRlY2xhcmUgYSByYW5nZSBvZiBjaGFyYWN0ZXJzIHRvIG1hdGNoIGluIGEgcGF0aCBzZWdtZW50XG4gICAqICAgKGUuZy4sIGBleGFtcGxlLlswLTldYCB0byBtYXRjaCBvbiBgZXhhbXBsZS4wYCwgYGV4YW1wbGUuMWAsIOKApilcbiAgICogLSBgWyEuLi5dYCB0byBuZWdhdGUgYSByYW5nZSBvZiBjaGFyYWN0ZXJzIHRvIG1hdGNoIGluIGEgcGF0aCBzZWdtZW50XG4gICAqICAgKGUuZy4sIGBleGFtcGxlLlshMC05XWAgdG8gbWF0Y2ggb24gYGV4YW1wbGUuYWAsIGBleGFtcGxlLmJgLFxuICAgKiAgICBidXQgbm90IGBleGFtcGxlLjBgKVxuICAgKi9cbiAgcGF0dGVybj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jZG9jdW1lbnRGaWx0ZXJcbiAqL1xuZXhwb3J0IHR5cGUgRG9jdW1lbnRTZWxlY3RvciA9IERvY3VtZW50RmlsdGVyW107XG5cbi8qKlxuICogU3RhdGljIHJlZ2lzdHJhdGlvbiBvcHRpb25zIHRvIGJlIHJldHVybmVkIGluIHRoZSBpbml0aWFsaXplIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBTdGF0aWNSZWdpc3RyYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpZCB1c2VkIHRvIHJlZ2lzdGVyIHRoZSByZXF1ZXN0LiBUaGUgaWQgY2FuIGJlIHVzZWQgdG8gZGVyZWdpc3RlclxuICAgKiB0aGUgcmVxdWVzdCBhZ2Fpbi4gU2VlIGFsc28gUmVnaXN0cmF0aW9uI2lkLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR2VuZXJhbCB0ZXh0IGRvY3VtZW50IHJlZ2lzdHJhdGlvbiBvcHRpb25zLlxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgVGV4dERvY3VtZW50UmVnaXN0cmF0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGRvY3VtZW50IHNlbGVjdG9yIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGUgcmVnaXN0cmF0aW9uLlxuICAgKiBJZiBzZXQgdG8gbnVsbCwgdGhlIGRvY3VtZW50IHNlbGVjdG9yIHByb3ZpZGVkIG9uIHRoZSBjbGllbnQgc2lkZVxuICAgKiB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBkb2N1bWVudFNlbGVjdG9yOiBEb2N1bWVudFNlbGVjdG9yfG51bGw7XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI2luaXRpYXRpbmdXb3JrRG9uZVByb2dyZXNzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBXb3JrRG9uZVByb2dyZXNzUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHRva2VuIHRoYXQgYSBzZXJ2ZXIgY2FuIHVzZSB0byByZXBvcnQgd29yayBkb25lIHByb2dyZXNzLlxuICAgKi9cbiAgd29ya0RvbmVUb2tlbj86IFByb2dyZXNzVG9rZW47XG59XG5cbi8qKlxuICogVGhlIGRpYWdub3N0aWMgdGFncy5cbiAqXG4gKiBAc2luY2UgMy4xNS4wXG4gKi9cbmV4cG9ydCBlbnVtIERpYWdub3N0aWNUYWcge1xuICAvKipcbiAgICogVW51c2VkIG9yIHVubmVjZXNzYXJ5IGNvZGUuXG4gICAqXG4gICAqIENsaWVudHMgYXJlIGFsbG93ZWQgdG8gcmVuZGVyIGRpYWdub3N0aWNzIHdpdGggdGhpcyB0YWcgZmFkZWQgb3V0XG4gICAqIGluc3RlYWQgb2YgaGF2aW5nIGFuIGVycm9yIHNxdWlnZ2xlLlxuICAgKi9cbiAgVW5uZWNlc3NhcnkgPSAxLFxuICAvKipcbiAgICogRGVwcmVjYXRlZCBvciBvYnNvbGV0ZSBjb2RlLlxuICAgKlxuICAgKiBDbGllbnRzIGFyZSBhbGxvd2VkIHRvIHJlbmRlcmVkIGRpYWdub3N0aWNzIHdpdGggdGhpcyB0YWcgc3RyaWtlIHRocm91Z2guXG4gICAqL1xuICBEZXByZWNhdGVkID0gMixcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jZGlhZ25vc3RpY1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGlhZ25vc3RpYyB7XG4gIC8qKlxuICAgKiBUaGUgcmFuZ2UgYXQgd2hpY2ggdGhlIG1lc3NhZ2UgYXBwbGllcy5cbiAgICovXG4gIHJhbmdlOiBSYW5nZTtcblxuICAvKipcbiAgICogVGhlIGRpYWdub3N0aWMncyBzZXZlcml0eS4gQ2FuIGJlIG9taXR0ZWQuIElmIG9taXR0ZWQgaXQgaXMgdXAgdG8gdGhlXG4gICAqIGNsaWVudCB0byBpbnRlcnByZXQgZGlhZ25vc3RpY3MgYXMgZXJyb3IsIHdhcm5pbmcsIGluZm8gb3IgaGludC5cbiAgICovXG4gIHNldmVyaXR5PzogRGlhZ25vc3RpY1NldmVyaXR5O1xuXG4gIC8qKlxuICAgKiBUaGUgZGlhZ25vc3RpYydzIGNvZGUsIHdoaWNoIG1pZ2h0IGFwcGVhciBpbiB0aGUgdXNlciBpbnRlcmZhY2UuXG4gICAqL1xuICBjb2RlPzogbnVtYmVyfHN0cmluZztcblxuICAvKipcbiAgICogQSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgc291cmNlIG9mIHRoaXNcbiAgICogZGlhZ25vc3RpYywgZS5nLiAndHlwZXNjcmlwdCcgb3IgJ3N1cGVyIGxpbnQnLlxuICAgKi9cbiAgc291cmNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlhZ25vc3RpYydzIG1lc3NhZ2UuXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgbWV0YWRhdGEgYWJvdXQgdGhlIGRpYWdub3N0aWMuXG4gICAqXG4gICAqIEBzaW5jZSAzLjE1LjBcbiAgICovXG4gIHRhZ3M/OiBEaWFnbm9zdGljVGFnW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHJlbGF0ZWQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiwgZS5nLiB3aGVuIHN5bWJvbC1uYW1lcyB3aXRoaW5cbiAgICogYSBzY29wZSBjb2xsaWRlIGFsbCBkZWZpbml0aW9ucyBjYW4gYmUgbWFya2VkIHZpYSB0aGlzIHByb3BlcnR5LlxuICAgKi9cbiAgcmVsYXRlZEluZm9ybWF0aW9uPzogRGlhZ25vc3RpY1JlbGF0ZWRJbmZvcm1hdGlvbltdO1xufVxuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNkaWFnbm9zdGljXG4gKi9cbmV4cG9ydCBlbnVtIERpYWdub3N0aWNTZXZlcml0eSB7XG4gIC8qKlxuICAgKiBSZXBvcnRzIGFuIGVycm9yLlxuICAgKi9cbiAgRXJyb3IgPSAxLFxuICAvKipcbiAgICogUmVwb3J0cyBhIHdhcm5pbmcuXG4gICAqL1xuICBXYXJuaW5nID0gMixcbiAgLyoqXG4gICAqIFJlcG9ydHMgYW4gaW5mb3JtYXRpb24uXG4gICAqL1xuICBJbmZvcm1hdGlvbiA9IDMsXG4gIC8qKlxuICAgKiBSZXBvcnRzIGEgaGludC5cbiAgICovXG4gIEhpbnQgPSA0LFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWxhdGVkIG1lc3NhZ2UgYW5kIHNvdXJjZSBjb2RlIGxvY2F0aW9uIGZvciBhIGRpYWdub3N0aWMuXG4gKiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIHBvaW50IHRvIGNvZGUgbG9jYXRpb25zIHRoYXQgY2F1c2Ugb3IgYXJlIHJlbGF0ZWRcbiAqIHRvIGEgZGlhZ25vc3RpY3MsIGZvciBleGFtcGxlLCB3aGVuIGR1cGxpY2F0aW5nIGEgc3ltYm9sIGluIGEgc2NvcGUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGlzIHJlbGF0ZWQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi5cbiAgICovXG4gIGxvY2F0aW9uOiBMb2NhdGlvbjtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2Ugb2YgdGhpcyByZWxhdGVkIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uXG4gICAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzeW1ib2wga2luZC5cbiAqL1xuZXhwb3J0IGVudW0gU3ltYm9sS2luZCB7XG4gIEZpbGUgPSAxLFxuICBNb2R1bGUgPSAyLFxuICBOYW1lc3BhY2UgPSAzLFxuICBQYWNrYWdlID0gNCxcbiAgQ2xhc3MgPSA1LFxuICBNZXRob2QgPSA2LFxuICBQcm9wZXJ0eSA9IDcsXG4gIEZpZWxkID0gOCxcbiAgQ29uc3RydWN0b3IgPSA5LFxuICBFbnVtID0gMTAsXG4gIEludGVyZmFjZSA9IDExLFxuICBGdW5jdGlvbiA9IDEyLFxuICBWYXJpYWJsZSA9IDEzLFxuICBDb25zdGFudCA9IDE0LFxuICBTdHJpbmcgPSAxNSxcbiAgTnVtYmVyID0gMTYsXG4gIEJvb2xlYW4gPSAxNyxcbiAgQXJyYXkgPSAxOCxcbiAgT2JqZWN0ID0gMTksXG4gIEtleSA9IDIwLFxuICBOdWxsID0gMjEsXG4gIEVudW1NZW1iZXIgPSAyMixcbiAgU3RydWN0ID0gMjMsXG4gIEV2ZW50ID0gMjQsXG4gIE9wZXJhdG9yID0gMjUsXG4gIFR5cGVQYXJhbWV0ZXIgPSAyNixcbn1cblxuLyoqXG4gKiBTeW1ib2wgdGFncyBhcmUgZXh0cmEgYW5ub3RhdGlvbnMgdGhhdCB0d2VhayB0aGUgcmVuZGVyaW5nIG9mIGEgc3ltYm9sLlxuICpcbiAqIEBzaW5jZSAzLjE2XG4gKi9cbmV4cG9ydCBlbnVtIFN5bWJvbFRhZyB7XG5cbiAgLyoqXG4gICAqIFJlbmRlciBhIHN5bWJvbCBhcyBvYnNvbGV0ZSwgdXN1YWxseSB1c2luZyBhIHN0cmlrZS1vdXQuXG4gICAqL1xuICBEZXByZWNhdGVkID0gMSxcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlX2V4ZWN1dGVDb21tYW5kXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFeGVjdXRlQ29tbWFuZENsaWVudENhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBFeGVjdXRlIGNvbW1hbmQgc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jcGFydGlhbFJlc3VsdFBhcmFtc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgUGFydGlhbFJlc3VsdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB0b2tlbiB0aGF0IGEgc2VydmVyIGNhbiB1c2UgdG8gcmVwb3J0IHBhcnRpYWwgcmVzdWx0cyAoZS5nLlxuICAgKiBzdHJlYW1pbmcpIHRvIHRoZSBjbGllbnQuXG4gICAqL1xuICBwYXJ0aWFsUmVzdWx0VG9rZW4/OiBQcm9ncmVzc1Rva2VuO1xufVxuXG4vKipcbiAqIERlZmluZXMgYW4gaW50ZWdlciBudW1iZXIgaW4gdGhlIHJhbmdlIG9mIC0yXjMxIHRvIDJeMzEgLSAxLlxuICovXG5leHBvcnQgdHlwZSBpbnRlZ2VyID0gbnVtYmVyO1xuLyoqXG4gKiBEZWZpbmVzIGFuIHVuc2lnbmVkIGludGVnZXIgbnVtYmVyIGluIHRoZSByYW5nZSBvZiAwIHRvIDJeMzEgLSAxLlxuICovXG5leHBvcnQgdHlwZSB1aW50ZWdlciA9IG51bWJlcjtcbi8qKlxuICogRGVmaW5lcyBhIGRlY2ltYWwgbnVtYmVyLiBTaW5jZSBkZWNpbWFsIG51bWJlcnMgYXJlIHZlcnlcbiAqIHJhcmUgaW4gdGhlIGxhbmd1YWdlIHNlcnZlciBzcGVjaWZpY2F0aW9uIHdlIGRlbm90ZSB0aGVcbiAqIGV4YWN0IHJhbmdlIHdpdGggZXZlcnkgZGVjaW1hbCB1c2luZyB0aGUgbWF0aGVtYXRpY3NcbiAqIGludGVydmFsIG5vdGF0aW9uIChlLmcuIFswLCAxXSBkZW5vdGVzIGFsbCBkZWNpbWFscyBkIHdpdGhcbiAqIDAgPD0gZCA8PSAxLlxuICovXG5leHBvcnQgdHlwZSBkZWNpbWFsID0gbnVtYmVyO1xuXG4vKipcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyNpbml0aWFsaXplZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYWxpemVkIGV4dGVuZHMgTm90aWZpY2F0aW9uTWVzc2FnZTxJbml0aWFsaXplZFBhcmFtcz4ge1xuICBtZXRob2Q6IE1ldGhvZC5Jbml0aWFsaXplZDtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jaW5pdGlhbGl6ZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplZFBhcmFtcyB7fVxuXG4vKipcbiAqIEdlbmVyYWwgcGFyYW1ldGVycyB0byByZWdpc3RlciBmb3IgYSBjYXBhYmlsaXR5LlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI2NsaWVudF9yZWdpc3RlckNhcGFiaWxpdHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGlkIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIHJlcXVlc3QuIFRoZSBpZCBjYW4gYmUgdXNlZCB0byBkZXJlZ2lzdGVyXG4gICAqIHRoZSByZXF1ZXN0IGFnYWluLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1ldGhvZCAvIGNhcGFiaWxpdHkgdG8gcmVnaXN0ZXIgZm9yLlxuICAgKi9cbiAgbWV0aG9kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgbmVjZXNzYXJ5IGZvciB0aGUgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgcmVnaXN0ZXJPcHRpb25zPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jY2xpZW50X3JlZ2lzdGVyQ2FwYWJpbGl0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvblBhcmFtcyB7XG4gIHJlZ2lzdHJhdGlvbnM6IFJlZ2lzdHJhdGlvbltdO1xufVxuIl19
datalab/web/lsp/settings_node.js ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.all = void 0;
4
+ /**
5
+ * Settings which may be used by the Python language server.
6
+ * These are from the default preferences from a VSCode client, culled
7
+ * to the LSP-related values.
8
+ *
9
+ * The difficulty here is that LSP only defines a mechanism to provide
10
+ * generic settings and the server expects the client to send all necessary
11
+ * settings. VSCode sends all Python settings to every Python language server.
12
+ * Furthermore the language server may request specific settings later.
13
+ *
14
+ * See:
15
+ * https://github.com/microsoft/pyright/blob/9d4e58d06643dccbfe0f450070334675b6b64724/docs/settings.md
16
+ */
17
+ exports.all = {
18
+ 'python': {
19
+ 'analysis': {
20
+ 'diagnosticPublishDelay': 1000,
21
+ 'errors': [],
22
+ 'warnings': [],
23
+ 'information': [],
24
+ 'disabled': [],
25
+ 'typeshedPaths': [],
26
+ 'cacheFolderPath': '',
27
+ 'memory': { 'keepLibraryAst': false },
28
+ 'logLevel': 'Warning',
29
+ 'symbolsHierarchyDepthLimit': 10,
30
+ 'completeFunctionParens': false,
31
+ 'autoImportCompletions': true,
32
+ 'autoSearchPaths': true,
33
+ 'stubPath': 'typings',
34
+ 'diagnosticMode': 'openFilesOnly',
35
+ 'extraPaths': [],
36
+ 'useLibraryCodeForTypes': true,
37
+ 'typeCheckingMode': 'basic',
38
+ // See diagnostics explanation at:
39
+ // https://github.com/microsoft/pyright/blob/main/docs/configuration.md
40
+ 'diagnosticSeverityOverrides': {},
41
+ },
42
+ },
43
+ };
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Nfbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2dlbmZpbGVzL3RoaXJkX3BhcnR5L2NvbGFiL3NvdXJjZXMvbHNwL3NldHRpbmdzX25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7OztHQVlHO0FBQ1UsUUFBQSxHQUFHLEdBQTZCO0lBQzNDLFFBQVEsRUFBRTtRQUNSLFVBQVUsRUFBRTtZQUNWLHdCQUF3QixFQUFFLElBQUk7WUFDOUIsUUFBUSxFQUFFLEVBQUU7WUFDWixVQUFVLEVBQUUsRUFBRTtZQUNkLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsZUFBZSxFQUFFLEVBQUU7WUFDbkIsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixRQUFRLEVBQUUsRUFBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUM7WUFDbkMsVUFBVSxFQUFFLFNBQVM7WUFDckIsNEJBQTRCLEVBQUUsRUFBRTtZQUNoQyx3QkFBd0IsRUFBRSxLQUFLO1lBQy9CLHVCQUF1QixFQUFFLElBQUk7WUFDN0IsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixVQUFVLEVBQUUsU0FBUztZQUNyQixnQkFBZ0IsRUFBRSxlQUFlO1lBQ2pDLFlBQVksRUFBRSxFQUFFO1lBQ2hCLHdCQUF3QixFQUFFLElBQUk7WUFDOUIsa0JBQWtCLEVBQUUsT0FBTztZQUMzQixrQ0FBa0M7WUFDbEMsdUVBQXVFO1lBQ3ZFLDZCQUE2QixFQUFFLEVBQUU7U0FDbEM7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNldHRpbmdzIHdoaWNoIG1heSBiZSB1c2VkIGJ5IHRoZSBQeXRob24gbGFuZ3VhZ2Ugc2VydmVyLlxuICogVGhlc2UgYXJlIGZyb20gdGhlIGRlZmF1bHQgcHJlZmVyZW5jZXMgZnJvbSBhIFZTQ29kZSBjbGllbnQsIGN1bGxlZFxuICogdG8gdGhlIExTUC1yZWxhdGVkIHZhbHVlcy5cbiAqXG4gKiBUaGUgZGlmZmljdWx0eSBoZXJlIGlzIHRoYXQgTFNQIG9ubHkgZGVmaW5lcyBhIG1lY2hhbmlzbSB0byBwcm92aWRlXG4gKiBnZW5lcmljIHNldHRpbmdzIGFuZCB0aGUgc2VydmVyIGV4cGVjdHMgdGhlIGNsaWVudCB0byBzZW5kIGFsbCBuZWNlc3NhcnlcbiAqIHNldHRpbmdzLiBWU0NvZGUgc2VuZHMgYWxsIFB5dGhvbiBzZXR0aW5ncyB0byBldmVyeSBQeXRob24gbGFuZ3VhZ2Ugc2VydmVyLlxuICogRnVydGhlcm1vcmUgdGhlIGxhbmd1YWdlIHNlcnZlciBtYXkgcmVxdWVzdCBzcGVjaWZpYyBzZXR0aW5ncyBsYXRlci5cbiAqXG4gKiBTZWU6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L3B5cmlnaHQvYmxvYi85ZDRlNThkMDY2NDNkY2NiZmUwZjQ1MDA3MDMzNDY3NWI2YjY0NzI0L2RvY3Mvc2V0dGluZ3MubWRcbiAqL1xuZXhwb3J0IGNvbnN0IGFsbDoge1trZXk6IHN0cmluZ106IHVua25vd259ID0ge1xuICAncHl0aG9uJzoge1xuICAgICdhbmFseXNpcyc6IHtcbiAgICAgICdkaWFnbm9zdGljUHVibGlzaERlbGF5JzogMTAwMCxcbiAgICAgICdlcnJvcnMnOiBbXSxcbiAgICAgICd3YXJuaW5ncyc6IFtdLFxuICAgICAgJ2luZm9ybWF0aW9uJzogW10sXG4gICAgICAnZGlzYWJsZWQnOiBbXSxcbiAgICAgICd0eXBlc2hlZFBhdGhzJzogW10sXG4gICAgICAnY2FjaGVGb2xkZXJQYXRoJzogJycsXG4gICAgICAnbWVtb3J5JzogeydrZWVwTGlicmFyeUFzdCc6IGZhbHNlfSxcbiAgICAgICdsb2dMZXZlbCc6ICdXYXJuaW5nJyxcbiAgICAgICdzeW1ib2xzSGllcmFyY2h5RGVwdGhMaW1pdCc6IDEwLFxuICAgICAgJ2NvbXBsZXRlRnVuY3Rpb25QYXJlbnMnOiBmYWxzZSxcbiAgICAgICdhdXRvSW1wb3J0Q29tcGxldGlvbnMnOiB0cnVlLFxuICAgICAgJ2F1dG9TZWFyY2hQYXRocyc6IHRydWUsXG4gICAgICAnc3R1YlBhdGgnOiAndHlwaW5ncycsXG4gICAgICAnZGlhZ25vc3RpY01vZGUnOiAnb3BlbkZpbGVzT25seScsXG4gICAgICAnZXh0cmFQYXRocyc6IFtdLFxuICAgICAgJ3VzZUxpYnJhcnlDb2RlRm9yVHlwZXMnOiB0cnVlLFxuICAgICAgJ3R5cGVDaGVja2luZ01vZGUnOiAnYmFzaWMnLFxuICAgICAgLy8gU2VlIGRpYWdub3N0aWNzIGV4cGxhbmF0aW9uIGF0OlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9weXJpZ2h0L2Jsb2IvbWFpbi9kb2NzL2NvbmZpZ3VyYXRpb24ubWRcbiAgICAgICdkaWFnbm9zdGljU2V2ZXJpdHlPdmVycmlkZXMnOiB7fSxcbiAgICB9LFxuICB9LFxufTtcbiJdfQ==
datalab/web/lsp/text_document_node.js ADDED
The diff for this file is too large to render. See raw diff
 
datalab/web/lsp/window_node.js ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageType = void 0;
4
+ /** Log message type. */
5
+ var MessageType;
6
+ (function (MessageType) {
7
+ /**
8
+ * An error message.
9
+ */
10
+ MessageType[MessageType["Error"] = 1] = "Error";
11
+ /**
12
+ * A warning message.
13
+ */
14
+ MessageType[MessageType["Warning"] = 2] = "Warning";
15
+ /**
16
+ * An information message.
17
+ */
18
+ MessageType[MessageType["Info"] = 3] = "Info";
19
+ /**
20
+ * A log message.
21
+ */
22
+ MessageType[MessageType["Log"] = 4] = "Log";
23
+ })(MessageType || (exports.MessageType = MessageType = {}));
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93X25vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9nZW5maWxlcy90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2xzcC93aW5kb3dfbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErQkEsd0JBQXdCO0FBQ3hCLElBQVksV0FpQlg7QUFqQkQsV0FBWSxXQUFXO0lBQ3JCOztPQUVHO0lBQ0gsK0NBQVMsQ0FBQTtJQUNUOztPQUVHO0lBQ0gsbURBQVcsQ0FBQTtJQUNYOztPQUVHO0lBQ0gsNkNBQVEsQ0FBQTtJQUNSOztPQUVHO0lBQ0gsMkNBQU8sQ0FBQTtBQUNULENBQUMsRUFqQlcsV0FBVywyQkFBWCxXQUFXLFFBaUJ0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHByb3RvY29sIGZyb20gJy4vcHJvdG9jb2xfbm9kZSc7XG5cbi8vIHRzbGludDpkaXNhYmxlOmVuZm9yY2UtbmFtZS1jYXNpbmdcblxuLyoqXG4gKiBUaGUgbG9nIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGlzIHNlbnQgZnJvbSB0aGUgc2VydmVyIHRvIHRoZSBjbGllbnQgdG8gYXNrIHRoZVxuICogY2xpZW50IHRvIGxvZyBhIHBhcnRpY3VsYXIgbWVzc2FnZS5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN3aW5kb3dfbG9nTWVzc2FnZVxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTG9nTWVzc2FnZSBleHRlbmRzXG4gICAgcHJvdG9jb2wuTm90aWZpY2F0aW9uTWVzc2FnZTxMb2dNZXNzYWdlUGFyYW1zPiB7XG4gIG1ldGhvZDogcHJvdG9jb2wuTWV0aG9kLldpbmRvd0xvZ01lc3NhZ2U7XG59XG5cbi8qKlxuICogVGhlIGxvZyBtZXNzYWdlIG5vdGlmaWNhdGlvbiBpcyBzZW50IGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50IHRvIGFzayB0aGVcbiAqIGNsaWVudCB0byBsb2cgYSBwYXJ0aWN1bGFyIG1lc3NhZ2UuXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd2luZG93X2xvZ01lc3NhZ2VcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIExvZ01lc3NhZ2VQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdHlwZS4gU2VlIHtAbGluayBNZXNzYWdlVHlwZX1cbiAgICovXG4gIHR5cGU6IE1lc3NhZ2VUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0dWFsIG1lc3NhZ2VcbiAgICovXG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqIExvZyBtZXNzYWdlIHR5cGUuICovXG5leHBvcnQgZW51bSBNZXNzYWdlVHlwZSB7XG4gIC8qKlxuICAgKiBBbiBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgRXJyb3IgPSAxLFxuICAvKipcbiAgICogQSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAqL1xuICBXYXJuaW5nID0gMixcbiAgLyoqXG4gICAqIEFuIGluZm9ybWF0aW9uIG1lc3NhZ2UuXG4gICAqL1xuICBJbmZvID0gMyxcbiAgLyoqXG4gICAqIEEgbG9nIG1lc3NhZ2UuXG4gICAqL1xuICBMb2cgPSA0LFxufVxuIl19
datalab/web/lsp/workspace_node.js ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileChangeType = exports.WatchKind = void 0;
4
+ /**
5
+ * See:
6
+ * https://microsoft.github.io/language-server-protocol/specification#workspace_didChangeWatchedFiles
7
+ */
8
+ var WatchKind;
9
+ (function (WatchKind) {
10
+ /**
11
+ * Interested in create events.
12
+ */
13
+ WatchKind[WatchKind["Create"] = 1] = "Create";
14
+ /**
15
+ * Interested in change events
16
+ */
17
+ WatchKind[WatchKind["Change"] = 2] = "Change";
18
+ /**
19
+ * Interested in delete events
20
+ */
21
+ WatchKind[WatchKind["Delete"] = 4] = "Delete";
22
+ })(WatchKind || (exports.WatchKind = WatchKind = {}));
23
+ /**
24
+ * The file event type.
25
+ */
26
+ var FileChangeType;
27
+ (function (FileChangeType) {
28
+ /**
29
+ * The file got created.
30
+ */
31
+ FileChangeType[FileChangeType["Created"] = 1] = "Created";
32
+ /**
33
+ * The file got changed.
34
+ */
35
+ FileChangeType[FileChangeType["Changed"] = 2] = "Changed";
36
+ /**
37
+ * The file got deleted.
38
+ */
39
+ FileChangeType[FileChangeType["Deleted"] = 3] = "Deleted";
40
+ })(FileChangeType || (exports.FileChangeType = FileChangeType = {}));
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlX25vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9nZW5maWxlcy90aGlyZF9wYXJ0eS9jb2xhYi9zb3VyY2VzL2xzcC93b3Jrc3BhY2Vfbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpVEE7OztHQUdHO0FBQ0gsSUFBWSxTQWVYO0FBZkQsV0FBWSxTQUFTO0lBQ25COztPQUVHO0lBQ0gsNkNBQVUsQ0FBQTtJQUVWOztPQUVHO0lBQ0gsNkNBQVUsQ0FBQTtJQUVWOztPQUVHO0lBQ0gsNkNBQVUsQ0FBQTtBQUNaLENBQUMsRUFmVyxTQUFTLHlCQUFULFNBQVMsUUFlcEI7QUEyQkQ7O0dBRUc7QUFDSCxJQUFZLGNBYVg7QUFiRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCx5REFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCx5REFBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCx5REFBVyxDQUFBO0FBQ2IsQ0FBQyxFQWJXLGNBQWMsOEJBQWQsY0FBYyxRQWF6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHByb3RvY29sIGZyb20gJy4vcHJvdG9jb2xfbm9kZSc7XG5pbXBvcnQgKiBhcyB0ZXh0RG9jdW1lbnQgZnJvbSAnLi90ZXh0X2RvY3VtZW50X25vZGUnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTplbmZvcmNlLW5hbWUtY2FzaW5nXG5cbi8qKlxuICogVGhlIHdvcmtzcGFjZS9jb25maWd1cmF0aW9uIHJlcXVlc3QgaXMgc2VudCBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCB0b1xuICogZmV0Y2ggY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmcm9tIHRoZSBjbGllbnQuIFRoZSByZXF1ZXN0IGNhbiBmZXRjaCBzZXZlcmFsXG4gKiBjb25maWd1cmF0aW9uIHNldHRpbmdzIGluIG9uZSByb3VuZHRyaXAuIFRoZSBvcmRlciBvZiB0aGUgcmV0dXJuZWRcbiAqIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgY29ycmVzcG9uZCB0byB0aGUgb3JkZXIgb2YgdGhlIHBhc3NlZFxuICogQ29uZmlndXJhdGlvbkl0ZW1zIChlLmcuIHRoZSBmaXJzdCBpdGVtIGluIHRoZSByZXNwb25zZSBpcyB0aGUgcmVzdWx0IGZvclxuICogdGhlIGZpcnN0IGNvbmZpZ3VyYXRpb24gaXRlbSBpbiB0aGUgcGFyYW1zKS5cbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbnMvc3BlY2lmaWNhdGlvbi1jdXJyZW50LyN3b3Jrc3BhY2VfY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ29uZmlndXJhdGlvblBhcmFtcyB7XG4gIGl0ZW1zOiBDb25maWd1cmF0aW9uSXRlbVtdO1xufVxuXG4vKipcbiAqIFNwZWNpZmljIHBhcnQgb2YgdGhlIENvbmZpZ3VyYXRpb24gd2hpY2ggaXMgYmVpbmcgcmVxdWVzdGVkLlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3dvcmtzcGFjZV9jb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDb25maWd1cmF0aW9uSXRlbSB7XG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yLlxuICAgKi9cbiAgc2NvcGVVcmk/OiBwcm90b2NvbC5Eb2N1bWVudFVyaTtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBhc2tlZCBmb3IuXG4gICAqL1xuICBzZWN0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbm90aWZpY2F0aW9uIHNlbnQgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgdG8gc2lnbmFsIHRoZSBjaGFuZ2Ugb2ZcbiAqIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlX2RpZENoYW5nZUNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpZENoYW5nZUNvbmZpZ3VyYXRpb24gZXh0ZW5kc1xuICAgIHByb3RvY29sLk5vdGlmaWNhdGlvbk1lc3NhZ2U8RGlkQ2hhbmdlQ29uZmlndXJhdGlvblBhcmFtcz4ge1xuICBtZXRob2Q6IHByb3RvY29sLk1ldGhvZC5Xb3Jrc3BhY2VEaWRDaGFuZ2VDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIERpZENoYW5nZUNvbmZpZ3VyYXRpb24uXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlX2RpZENoYW5nZUNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpZENoYW5nZUNvbmZpZ3VyYXRpb25QYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFjdHVhbCBjaGFuZ2VkIHNldHRpbmdzXG4gICAqL1xuICBzZXR0aW5nczogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlRWRpdFxuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgV29ya3NwYWNlRWRpdCB7XG4gIC8qKlxuICAgKiBIb2xkcyBjaGFuZ2VzIHRvIGV4aXN0aW5nIHJlc291cmNlcy5cbiAgICovXG4gIGNoYW5nZXM/OiB7W3VyaTogc3RyaW5nXTogdGV4dERvY3VtZW50LlRleHRFZGl0W107fTtcblxuICAvKipcbiAgICogVGhlIGNsaWVudCBjYXBhYmlsaXR5IGB3b3Jrc3BhY2Uud29ya3NwYWNlRWRpdC5yZXNvdXJjZU9wZXJhdGlvbnNgXG4gICAqIGRldGVybWluZXMgd2hldGhlciBkb2N1bWVudCBjaGFuZ2VzIGFyZSBlaXRoZXIgYW4gYXJyYXkgb2ZcbiAgICogYFRleHREb2N1bWVudEVkaXRgcyB0byBleHByZXNzIGNoYW5nZXMgdG8gZGlmZmVyZW50IHRleHQgZG9jdW1lbnRzLFxuICAgKiB3aGVyZSBlYWNoIHRleHQgZG9jdW1lbnQgZWRpdCBhZGRyZXNzZXMgYSBzcGVjaWZpYyB2ZXJzaW9uXG4gICAqIG9mIGEgdGV4dCBkb2N1bWVudCwgb3IgaXQgY2FuIGNvbnRhaW5zIHRoZSBhYm92ZSBgVGV4dERvY3VtZW50RWRpdGBzXG4gICAqIG1peGVkIHdpdGggY3JlYXRlLCByZW5hbWUsIGFuZCBkZWxldGUgZmlsZSAvIGZvbGRlciBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBXaGV0aGVyIGEgY2xpZW50IHN1cHBvcnRzIHZlcnNpb25lZCBkb2N1bWVudCBlZGl0cyBpcyBleHByZXNzZWQgdmlhXG4gICAqIGB3b3Jrc3BhY2Uud29ya3NwYWNlRWRpdC5kb2N1bWVudENoYW5nZXNgIGNsaWVudCBjYXBhYmlsaXR5LlxuICAgKlxuICAgKiBJZiBhIGNsaWVudCBkb2Vzbid0IHN1cHBvcnQgYGRvY3VtZW50Q2hhbmdlc2Agb3JcbiAgICogYHdvcmtzcGFjZS53b3Jrc3BhY2VFZGl0LnJlc291cmNlT3BlcmF0aW9uc2AsIHRoZW4gb25seSBwbGFpblxuICAgKiBgVGV4dEVkaXRgcyB1c2luZyB0aGUgYGNoYW5nZXNgIHByb3BlcnR5IGFyZSBzdXBwb3J0ZWQuXG4gICAqL1xuICBkb2N1bWVudENoYW5nZXM/OlxuICAgICAgKHRleHREb2N1bWVudC5UZXh0RG9jdW1lbnRFZGl0W118XG4gICAgICAgQXJyYXk8dGV4dERvY3VtZW50LlRleHREb2N1bWVudEVkaXR8Q3JlYXRlRmlsZXxSZW5hbWVGaWxlfERlbGV0ZUZpbGU+KTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGNyZWF0ZSBhIGZpbGUuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBDcmVhdGVGaWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPdmVyd3JpdGUgZXhpc3RpbmcgZmlsZS4gT3ZlcndyaXRlIHdpbnMgb3ZlciBgaWdub3JlSWZFeGlzdHNgXG4gICAqL1xuICBvdmVyd3JpdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogSWdub3JlIGlmIGV4aXN0cy5cbiAgICovXG4gIGlnbm9yZUlmRXhpc3RzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgZmlsZSBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIENyZWF0ZUZpbGUge1xuICAvKipcbiAgICogQSBjcmVhdGVcbiAgICovXG4gIGtpbmQ6ICdjcmVhdGUnO1xuICAvKipcbiAgICogVGhlIHJlc291cmNlIHRvIGNyZWF0ZS5cbiAgICovXG4gIHVyaTogcHJvdG9jb2wuRG9jdW1lbnRVcmk7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG9wdGlvbnNcbiAgICovXG4gIG9wdGlvbnM/OiBDcmVhdGVGaWxlT3B0aW9ucztcbn1cblxuXG4vKipcbiAqIFJlbmFtZSBmaWxlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFJlbmFtZUZpbGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIE92ZXJ3cml0ZSB0YXJnZXQgaWYgZXhpc3RpbmcuIE92ZXJ3cml0ZSB3aW5zIG92ZXIgYGlnbm9yZUlmRXhpc3RzYFxuICAgKi9cbiAgb3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElnbm9yZXMgaWYgdGFyZ2V0IGV4aXN0cy5cbiAgICovXG4gIGlnbm9yZUlmRXhpc3RzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZW5hbWUgZmlsZSBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFJlbmFtZUZpbGUge1xuICAvKipcbiAgICogQSByZW5hbWVcbiAgICovXG4gIGtpbmQ6ICdyZW5hbWUnO1xuICAvKipcbiAgICogVGhlIG9sZCAoZXhpc3RpbmcpIGxvY2F0aW9uLlxuICAgKi9cbiAgb2xkVXJpOiBwcm90b2NvbC5Eb2N1bWVudFVyaTtcbiAgLyoqXG4gICAqIFRoZSBuZXcgbG9jYXRpb24uXG4gICAqL1xuICBuZXdVcmk6IHByb3RvY29sLkRvY3VtZW50VXJpO1xuICAvKipcbiAgICogUmVuYW1lIG9wdGlvbnMuXG4gICAqL1xuICBvcHRpb25zPzogUmVuYW1lRmlsZU9wdGlvbnM7XG59XG5cbi8qKlxuICogRGVsZXRlIGZpbGUgb3B0aW9uc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGVsZXRlRmlsZU9wdGlvbnMge1xuICAvKipcbiAgICogRGVsZXRlIHRoZSBjb250ZW50IHJlY3Vyc2l2ZWx5IGlmIGEgZm9sZGVyIGlzIGRlbm90ZWQuXG4gICAqL1xuICByZWN1cnNpdmU/OiBib29sZWFuO1xuICAvKipcbiAgICogSWdub3JlIHRoZSBvcGVyYXRpb24gaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdC5cbiAgICovXG4gIGlnbm9yZUlmTm90RXhpc3RzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZWxldGUgZmlsZSBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERlbGV0ZUZpbGUge1xuICAvKipcbiAgICogQSBkZWxldGVcbiAgICovXG4gIGtpbmQ6ICdkZWxldGUnO1xuICAvKipcbiAgICogVGhlIGZpbGUgdG8gZGVsZXRlLlxuICAgKi9cbiAgdXJpOiBwcm90b2NvbC5Eb2N1bWVudFVyaTtcbiAgLyoqXG4gICAqIERlbGV0ZSBvcHRpb25zLlxuICAgKi9cbiAgb3B0aW9ucz86IERlbGV0ZUZpbGVPcHRpb25zO1xufVxuXG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3dvcmtzcGFjZV9zeW1ib2xcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VTeW1ib2xDbGllbnRDYXBhYmlsaXRpZXMge1xuICAvKipcbiAgICogU3ltYm9sIHJlcXVlc3Qgc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY2FwYWJpbGl0aWVzIGZvciB0aGUgYFN5bWJvbEtpbmRgIGluIHRoZVxuICAgKiBgd29ya3NwYWNlL3N5bWJvbGAgcmVxdWVzdC5cbiAgICovXG4gIHN5bWJvbEtpbmQ/OiB7XG4gICAgLyoqXG4gICAgICogVGhlIHN5bWJvbCBraW5kIHZhbHVlcyB0aGUgY2xpZW50IHN1cHBvcnRzLiBXaGVuIHRoaXNcbiAgICAgKiBwcm9wZXJ0eSBleGlzdHMgdGhlIGNsaWVudCBhbHNvIGd1YXJhbnRlZXMgdGhhdCBpdCB3aWxsXG4gICAgICogaGFuZGxlIHZhbHVlcyBvdXRzaWRlIGl0cyBzZXQgZ3JhY2VmdWxseSBhbmQgZmFsbHMgYmFja1xuICAgICAqIHRvIGEgZGVmYXVsdCB2YWx1ZSB3aGVuIHVua25vd24uXG4gICAgICpcbiAgICAgKiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBwcmVzZW50IHRoZSBjbGllbnQgb25seSBzdXBwb3J0c1xuICAgICAqIHRoZSBzeW1ib2wga2luZHMgZnJvbSBgRmlsZWAgdG8gYEFycmF5YCBhcyBkZWZpbmVkIGluXG4gICAgICogdGhlIGluaXRpYWwgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wuXG4gICAgICovXG4gICAgdmFsdWVTZXQ/OiBwcm90b2NvbC5TeW1ib2xLaW5kW107XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgc3VwcG9ydHMgdGFncyBvbiBgU3ltYm9sSW5mb3JtYXRpb25gLlxuICAgKiBDbGllbnRzIHN1cHBvcnRpbmcgdGFncyBoYXZlIHRvIGhhbmRsZSB1bmtub3duIHRhZ3MgZ3JhY2VmdWxseS5cbiAgICpcbiAgICogQHNpbmNlIDMuMTYuMFxuICAgKi9cbiAgdGFnU3VwcG9ydD86IHtcbiAgICAvKipcbiAgICAgKiBUaGUgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIGNsaWVudC5cbiAgICAgKi9cbiAgICB2YWx1ZVNldDogcHJvdG9jb2wuU3ltYm9sVGFnW10sXG4gIH07XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3dvcmtzcGFjZV9kaWRDaGFuZ2VXYXRjaGVkRmlsZXNcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIERpZENoYW5nZVdhdGNoZWRGaWxlc0NsaWVudENhcGFiaWxpdGllcyB7XG4gIC8qKlxuICAgKiBEaWQgY2hhbmdlIHdhdGNoZWQgZmlsZXMgbm90aWZpY2F0aW9uIHN1cHBvcnRzIGR5bmFtaWMgcmVnaXN0cmF0aW9uLlxuICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBjdXJyZW50IHByb3RvY29sIGRvZXNuJ3Qgc3VwcG9ydCBzdGF0aWNcbiAgICogY29uZmlndXJhdGlvbiBmb3IgZmlsZSBjaGFuZ2VzIGZyb20gdGhlIHNlcnZlciBzaWRlLlxuICAgKi9cbiAgZHluYW1pY1JlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL2xhbmd1YWdlLXNlcnZlci1wcm90b2NvbC9zcGVjaWZpY2F0aW9ucy9zcGVjaWZpY2F0aW9uLWN1cnJlbnQvI3dvcmtzcGFjZV9kaWRDaGFuZ2VDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWRDaGFuZ2VDb25maWd1cmF0aW9uQ2xpZW50Q2FwYWJpbGl0aWVzIHtcbiAgLyoqXG4gICAqIERpZCBjaGFuZ2UgY29uZmlndXJhdGlvbiBub3RpZmljYXRpb24gc3VwcG9ydHMgZHluYW1pYyByZWdpc3RyYXRpb24uXG4gICAqL1xuICBkeW5hbWljUmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb25zL3NwZWNpZmljYXRpb24tY3VycmVudC8jd29ya3NwYWNlX3dvcmtzcGFjZUZvbGRlcnNcbiAqL1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFdvcmtzcGFjZUZvbGRlciB7XG4gIC8qKlxuICAgKiBUaGUgYXNzb2NpYXRlZCBVUkkgZm9yIHRoaXMgd29ya3NwYWNlIGZvbGRlci5cbiAgICovXG4gIHVyaTogcHJvdG9jb2wuRG9jdW1lbnRVcmk7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3Jrc3BhY2UgZm9sZGVyLiBVc2VkIHRvIHJlZmVyIHRvIHRoaXNcbiAgICogd29ya3NwYWNlIGZvbGRlciBpbiB0aGUgdXNlciBpbnRlcmZhY2UuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVzY3JpYmUgb3B0aW9ucyB0byBiZSB1c2VkIHdoZW4gcmVnaXN0ZXJpbmcgZm9yIGZpbGUgc3lzdGVtIGNoYW5nZSBldmVudHMuXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBEaWRDaGFuZ2VXYXRjaGVkRmlsZXNSZWdpc3RyYXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB3YXRjaGVycyB0byByZWdpc3Rlci5cbiAgICovXG4gIHdhdGNoZXJzOiBGaWxlU3lzdGVtV2F0Y2hlcltdO1xufVxuXG4vKipcbiAqIFNlZTpcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbiN3b3Jrc3BhY2VfZGlkQ2hhbmdlV2F0Y2hlZEZpbGVzXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBGaWxlU3lzdGVtV2F0Y2hlciB7XG4gIC8qKlxuICAgKiBUaGUgZ2xvYiBwYXR0ZXJuIHRvIHdhdGNoLlxuICAgKlxuICAgKiBHbG9iIHBhdHRlcm5zIGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgc3ludGF4OlxuICAgKiAtIGAqYCB0byBtYXRjaCBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGluIGEgcGF0aCBzZWdtZW50XG4gICAqIC0gYD9gIHRvIG1hdGNoIG9uIG9uZSBjaGFyYWN0ZXIgaW4gYSBwYXRoIHNlZ21lbnRcbiAgICogLSBgKipgIHRvIG1hdGNoIGFueSBudW1iZXIgb2YgcGF0aCBzZWdtZW50cywgaW5jbHVkaW5nIG5vbmVcbiAgICogLSBge31gIHRvIGdyb3VwIHN1YiBwYXR0ZXJucyBpbnRvIGFuIE9SIGV4cHJlc3Npb24uIChlLmcuIGAqKuKAiy8qLnt0cyxqc31gXG4gICAqICAgbWF0Y2hlcyBhbGwgVHlwZVNjcmlwdCBhbmQgSmF2YVNjcmlwdCBmaWxlcylcbiAgICogLSBgW11gIHRvIGRlY2xhcmUgYSByYW5nZSBvZiBjaGFyYWN0ZXJzIHRvIG1hdGNoIGluIGEgcGF0aCBzZWdtZW50XG4gICAqICAgKGUuZy4sIGBleGFtcGxlLlswLTldYCB0byBtYXRjaCBvbiBgZXhhbXBsZS4wYCwgYGV4YW1wbGUuMWAsIOKApilcbiAgICogLSBgWyEuLi5dYCB0byBuZWdhdGUgYSByYW5nZSBvZiBjaGFyYWN0ZXJzIHRvIG1hdGNoIGluIGEgcGF0aCBzZWdtZW50XG4gICAqICAgKGUuZy4sIGBleGFtcGxlLlshMC05XWAgdG8gbWF0Y2ggb24gYGV4YW1wbGUuYWAsIGBleGFtcGxlLmJgLCBidXQgbm90XG4gICAqICAgYGV4YW1wbGUuMGApXG4gICAqL1xuICBnbG9iUGF0dGVybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUga2luZCBvZiBldmVudHMgb2YgaW50ZXJlc3QuIElmIG9taXR0ZWQgaXQgZGVmYXVsdHNcbiAgICogdG8gV2F0Y2hLaW5kLkNyZWF0ZSB8IFdhdGNoS2luZC5DaGFuZ2UgfCBXYXRjaEtpbmQuRGVsZXRlXG4gICAqIHdoaWNoIGlzIDcuXG4gICAqL1xuICBraW5kPzogV2F0Y2hLaW5kO1xufVxuXG4vKipcbiAqIFNlZTpcbiAqIGh0dHBzOi8vbWljcm9zb2Z0LmdpdGh1Yi5pby9sYW5ndWFnZS1zZXJ2ZXItcHJvdG9jb2wvc3BlY2lmaWNhdGlvbiN3b3Jrc3BhY2VfZGlkQ2hhbmdlV2F0Y2hlZEZpbGVzXG4gKi9cbmV4cG9ydCBlbnVtIFdhdGNoS2luZCB7XG4gIC8qKlxuICAgKiBJbnRlcmVzdGVkIGluIGNyZWF0ZSBldmVudHMuXG4gICAqL1xuICBDcmVhdGUgPSAxLFxuXG4gIC8qKlxuICAgKiBJbnRlcmVzdGVkIGluIGNoYW5nZSBldmVudHNcbiAgICovXG4gIENoYW5nZSA9IDIsXG5cbiAgLyoqXG4gICAqIEludGVyZXN0ZWQgaW4gZGVsZXRlIGV2ZW50c1xuICAgKi9cbiAgRGVsZXRlID0gNCxcbn1cblxuLyoqXG4gKiBTZWU6XG4gKiBodHRwczovL21pY3Jvc29mdC5naXRodWIuaW8vbGFuZ3VhZ2Utc2VydmVyLXByb3RvY29sL3NwZWNpZmljYXRpb24jd29ya3NwYWNlX2RpZENoYW5nZVdhdGNoZWRGaWxlc1xuICovXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRGlkQ2hhbmdlV2F0Y2hlZEZpbGVzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhY3R1YWwgZmlsZSBldmVudHMuXG4gICAqL1xuICBjaGFuZ2VzOiBGaWxlRXZlbnRbXTtcbn1cblxuLyoqXG4gKiBBbiBldmVudCBkZXNjcmliaW5nIGEgZmlsZSBjaGFuZ2UuXG4gKi9cbmRlY2xhcmUgaW50ZXJmYWNlIEZpbGVFdmVudCB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSdzIFVSSS5cbiAgICovXG4gIHVyaTogcHJvdG9jb2wuRG9jdW1lbnRVcmk7XG4gIC8qKlxuICAgKiBUaGUgY2hhbmdlIHR5cGUuXG4gICAqL1xuICB0eXBlOiBGaWxlQ2hhbmdlVHlwZTtcbn1cblxuLyoqXG4gKiBUaGUgZmlsZSBldmVudCB0eXBlLlxuICovXG5leHBvcnQgZW51bSBGaWxlQ2hhbmdlVHlwZSB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBnb3QgY3JlYXRlZC5cbiAgICovXG4gIENyZWF0ZWQgPSAxLFxuICAvKipcbiAgICogVGhlIGZpbGUgZ290IGNoYW5nZWQuXG4gICAqL1xuICBDaGFuZ2VkID0gMixcbiAgLyoqXG4gICAqIFRoZSBmaWxlIGdvdCBkZWxldGVkLlxuICAgKi9cbiAgRGVsZXRlZCA9IDMsXG59XG4iXX0=
datalab/web/node_modules/.bin/bunyan ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cb97ac3eee1e35dfbaa2025aa5bb391bbe5adcbe7305a32d6f6e6cdbe1879ac9
3
+ size 56829
datalab/web/node_modules/.bin/mkdirp ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:24b028bccb1773f02cf0d0fb3dca5468f1b5d22a06cbc5cbf351e1eb3accefb1
3
+ size 731
datalab/web/node_modules/.bin/ncp ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c7ca0417a675931d7d4f549009af66f25b47ea5a07e6ddcd85efb712afba3178
3
+ size 1084
datalab/web/node_modules/.bin/rimraf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3a1557fb195dd6ba967235a93927f74e0452b913425c713bcabdeaee9f62d189
3
+ size 838
datalab/web/node_modules/.bin/semver ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e5c53c713df57d8bdfd03f00e758b5b6a3f51e91a44eb888065394c0deb0da51
3
+ size 4784
datalab/web/node_modules/.package-lock.json ADDED
@@ -0,0 +1,634 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "ipy-rev-proxy",
3
+ "lockfileVersion": 2,
4
+ "requires": true,
5
+ "packages": {
6
+ "node_modules/accepts": {
7
+ "version": "1.3.5",
8
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
9
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
10
+ "dependencies": {
11
+ "mime-types": "~2.1.18",
12
+ "negotiator": "0.6.1"
13
+ },
14
+ "engines": {
15
+ "node": ">= 0.6"
16
+ }
17
+ },
18
+ "node_modules/after": {
19
+ "version": "0.8.2",
20
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
21
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
22
+ },
23
+ "node_modules/arraybuffer.slice": {
24
+ "version": "0.0.7",
25
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
26
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
27
+ },
28
+ "node_modules/async": {
29
+ "version": "1.5.2",
30
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
31
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
32
+ },
33
+ "node_modules/async-limiter": {
34
+ "version": "1.0.0",
35
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
36
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
37
+ },
38
+ "node_modules/backo2": {
39
+ "version": "1.0.2",
40
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
41
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
42
+ },
43
+ "node_modules/balanced-match": {
44
+ "version": "1.0.0",
45
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
46
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
47
+ "optional": true
48
+ },
49
+ "node_modules/base64-arraybuffer": {
50
+ "version": "0.1.5",
51
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
52
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
53
+ "engines": {
54
+ "node": ">= 0.6.0"
55
+ }
56
+ },
57
+ "node_modules/base64id": {
58
+ "version": "1.0.0",
59
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
60
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
61
+ "engines": {
62
+ "node": ">= 0.4.0"
63
+ }
64
+ },
65
+ "node_modules/better-assert": {
66
+ "version": "1.0.2",
67
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
68
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
69
+ "dependencies": {
70
+ "callsite": "1.0.0"
71
+ },
72
+ "engines": {
73
+ "node": "*"
74
+ }
75
+ },
76
+ "node_modules/blob": {
77
+ "version": "0.0.4",
78
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
79
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE="
80
+ },
81
+ "node_modules/brace-expansion": {
82
+ "version": "1.1.11",
83
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
84
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
85
+ "optional": true,
86
+ "dependencies": {
87
+ "balanced-match": "^1.0.0",
88
+ "concat-map": "0.0.1"
89
+ }
90
+ },
91
+ "node_modules/bunyan": {
92
+ "version": "1.8.12",
93
+ "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz",
94
+ "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=",
95
+ "engines": [
96
+ "node >=0.10.0"
97
+ ],
98
+ "bin": {
99
+ "bunyan": "bin/bunyan"
100
+ },
101
+ "optionalDependencies": {
102
+ "dtrace-provider": "~0.8",
103
+ "moment": "^2.10.6",
104
+ "mv": "~2",
105
+ "safe-json-stringify": "~1"
106
+ }
107
+ },
108
+ "node_modules/bunyan-rotating-file-stream": {
109
+ "version": "1.6.3",
110
+ "resolved": "https://registry.npmjs.org/bunyan-rotating-file-stream/-/bunyan-rotating-file-stream-1.6.3.tgz",
111
+ "integrity": "sha512-pJFBvosqXjYXsOtDr72SDhZr3d+1ADDBO8TiU0ju0DbNBS4+vjI3GatczzB7LCcBWqWevQ91j1HYsl8cgnI+HQ==",
112
+ "engines": [
113
+ "node >=0.10.0"
114
+ ],
115
+ "dependencies": {
116
+ "async": "^1.5.2",
117
+ "lodash": "^4.2.1",
118
+ "semver": "^5.1.0",
119
+ "strftime": "^0.9.2"
120
+ }
121
+ },
122
+ "node_modules/callsite": {
123
+ "version": "1.0.0",
124
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
125
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
126
+ "engines": {
127
+ "node": "*"
128
+ }
129
+ },
130
+ "node_modules/component-bind": {
131
+ "version": "1.0.0",
132
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
133
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
134
+ },
135
+ "node_modules/component-emitter": {
136
+ "version": "1.2.1",
137
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
138
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
139
+ },
140
+ "node_modules/component-inherit": {
141
+ "version": "0.0.3",
142
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
143
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
144
+ },
145
+ "node_modules/concat-map": {
146
+ "version": "0.0.1",
147
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
148
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
149
+ "optional": true
150
+ },
151
+ "node_modules/cookie": {
152
+ "version": "0.3.1",
153
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
154
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
155
+ "engines": {
156
+ "node": ">= 0.6"
157
+ }
158
+ },
159
+ "node_modules/debug": {
160
+ "version": "3.1.0",
161
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
162
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
163
+ "dependencies": {
164
+ "ms": "2.0.0"
165
+ }
166
+ },
167
+ "node_modules/dtrace-provider": {
168
+ "version": "0.8.7",
169
+ "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz",
170
+ "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=",
171
+ "hasInstallScript": true,
172
+ "optional": true,
173
+ "dependencies": {
174
+ "nan": "^2.10.0"
175
+ },
176
+ "engines": {
177
+ "node": ">=0.10"
178
+ }
179
+ },
180
+ "node_modules/engine.io": {
181
+ "version": "3.2.0",
182
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz",
183
+ "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==",
184
+ "dependencies": {
185
+ "accepts": "~1.3.4",
186
+ "base64id": "1.0.0",
187
+ "cookie": "0.3.1",
188
+ "debug": "~3.1.0",
189
+ "engine.io-parser": "~2.1.0",
190
+ "ws": "~3.3.1"
191
+ }
192
+ },
193
+ "node_modules/engine.io-client": {
194
+ "version": "3.2.1",
195
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
196
+ "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==",
197
+ "dependencies": {
198
+ "component-emitter": "1.2.1",
199
+ "component-inherit": "0.0.3",
200
+ "debug": "~3.1.0",
201
+ "engine.io-parser": "~2.1.1",
202
+ "has-cors": "1.1.0",
203
+ "indexof": "0.0.1",
204
+ "parseqs": "0.0.5",
205
+ "parseuri": "0.0.5",
206
+ "ws": "~3.3.1",
207
+ "xmlhttprequest-ssl": "~1.5.4",
208
+ "yeast": "0.1.2"
209
+ }
210
+ },
211
+ "node_modules/engine.io-client/node_modules/ws": {
212
+ "version": "3.3.3",
213
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
214
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
215
+ "dependencies": {
216
+ "async-limiter": "~1.0.0",
217
+ "safe-buffer": "~5.1.0",
218
+ "ultron": "~1.1.0"
219
+ }
220
+ },
221
+ "node_modules/engine.io-parser": {
222
+ "version": "2.1.2",
223
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
224
+ "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
225
+ "dependencies": {
226
+ "after": "0.8.2",
227
+ "arraybuffer.slice": "~0.0.7",
228
+ "base64-arraybuffer": "0.1.5",
229
+ "blob": "0.0.4",
230
+ "has-binary2": "~1.0.2"
231
+ }
232
+ },
233
+ "node_modules/engine.io/node_modules/ws": {
234
+ "version": "3.3.3",
235
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
236
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
237
+ "dependencies": {
238
+ "async-limiter": "~1.0.0",
239
+ "safe-buffer": "~5.1.0",
240
+ "ultron": "~1.1.0"
241
+ }
242
+ },
243
+ "node_modules/eventemitter3": {
244
+ "version": "3.1.0",
245
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
246
+ "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA=="
247
+ },
248
+ "node_modules/follow-redirects": {
249
+ "version": "1.5.1",
250
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz",
251
+ "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==",
252
+ "dependencies": {
253
+ "debug": "^3.1.0"
254
+ },
255
+ "engines": {
256
+ "node": ">=4.0"
257
+ }
258
+ },
259
+ "node_modules/glob": {
260
+ "version": "6.0.4",
261
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
262
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
263
+ "deprecated": "Glob versions prior to v9 are no longer supported",
264
+ "optional": true,
265
+ "dependencies": {
266
+ "inflight": "^1.0.4",
267
+ "inherits": "2",
268
+ "minimatch": "2 || 3",
269
+ "once": "^1.3.0",
270
+ "path-is-absolute": "^1.0.0"
271
+ },
272
+ "engines": {
273
+ "node": "*"
274
+ }
275
+ },
276
+ "node_modules/has-binary2": {
277
+ "version": "1.0.3",
278
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
279
+ "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
280
+ "dependencies": {
281
+ "isarray": "2.0.1"
282
+ }
283
+ },
284
+ "node_modules/has-cors": {
285
+ "version": "1.1.0",
286
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
287
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
288
+ },
289
+ "node_modules/http-proxy": {
290
+ "version": "1.17.0",
291
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
292
+ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
293
+ "dependencies": {
294
+ "eventemitter3": "^3.0.0",
295
+ "follow-redirects": "^1.0.0",
296
+ "requires-port": "^1.0.0"
297
+ },
298
+ "engines": {
299
+ "node": ">=4.0.0"
300
+ }
301
+ },
302
+ "node_modules/indexof": {
303
+ "version": "0.0.1",
304
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
305
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
306
+ },
307
+ "node_modules/inflight": {
308
+ "version": "1.0.6",
309
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
310
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
311
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
312
+ "optional": true,
313
+ "dependencies": {
314
+ "once": "^1.3.0",
315
+ "wrappy": "1"
316
+ }
317
+ },
318
+ "node_modules/inherits": {
319
+ "version": "2.0.3",
320
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
321
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
322
+ "optional": true
323
+ },
324
+ "node_modules/isarray": {
325
+ "version": "2.0.1",
326
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
327
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
328
+ },
329
+ "node_modules/lodash": {
330
+ "version": "4.17.11",
331
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
332
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
333
+ },
334
+ "node_modules/mime-db": {
335
+ "version": "1.35.0",
336
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
337
+ "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
338
+ "engines": {
339
+ "node": ">= 0.6"
340
+ }
341
+ },
342
+ "node_modules/mime-types": {
343
+ "version": "2.1.19",
344
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
345
+ "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
346
+ "dependencies": {
347
+ "mime-db": "~1.35.0"
348
+ },
349
+ "engines": {
350
+ "node": ">= 0.6"
351
+ }
352
+ },
353
+ "node_modules/minimatch": {
354
+ "version": "3.0.4",
355
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
356
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
357
+ "optional": true,
358
+ "dependencies": {
359
+ "brace-expansion": "^1.1.7"
360
+ },
361
+ "engines": {
362
+ "node": "*"
363
+ }
364
+ },
365
+ "node_modules/minimist": {
366
+ "version": "0.0.8",
367
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
368
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
369
+ "optional": true
370
+ },
371
+ "node_modules/mkdirp": {
372
+ "version": "0.5.1",
373
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
374
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
375
+ "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)",
376
+ "optional": true,
377
+ "dependencies": {
378
+ "minimist": "0.0.8"
379
+ },
380
+ "bin": {
381
+ "mkdirp": "bin/cmd.js"
382
+ }
383
+ },
384
+ "node_modules/moment": {
385
+ "version": "2.22.2",
386
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
387
+ "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=",
388
+ "optional": true,
389
+ "engines": {
390
+ "node": "*"
391
+ }
392
+ },
393
+ "node_modules/ms": {
394
+ "version": "2.0.0",
395
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
396
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
397
+ },
398
+ "node_modules/mv": {
399
+ "version": "2.1.1",
400
+ "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz",
401
+ "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
402
+ "optional": true,
403
+ "dependencies": {
404
+ "mkdirp": "~0.5.1",
405
+ "ncp": "~2.0.0",
406
+ "rimraf": "~2.4.0"
407
+ },
408
+ "engines": {
409
+ "node": ">=0.8.0"
410
+ }
411
+ },
412
+ "node_modules/nan": {
413
+ "version": "2.10.0",
414
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
415
+ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
416
+ "optional": true
417
+ },
418
+ "node_modules/ncp": {
419
+ "version": "2.0.0",
420
+ "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
421
+ "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
422
+ "optional": true,
423
+ "bin": {
424
+ "ncp": "bin/ncp"
425
+ }
426
+ },
427
+ "node_modules/negotiator": {
428
+ "version": "0.6.1",
429
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
430
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
431
+ "engines": {
432
+ "node": ">= 0.6"
433
+ }
434
+ },
435
+ "node_modules/node-pty": {
436
+ "version": "0.9.0",
437
+ "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-0.9.0.tgz",
438
+ "integrity": "sha512-MBnCQl83FTYOu7B4xWw10AW77AAh7ThCE1VXEv+JeWj8mSpGo+0bwgsV+b23ljBFwEM9OmsOv3kM27iUPPm84g==",
439
+ "hasInstallScript": true,
440
+ "dependencies": {
441
+ "nan": "^2.14.0"
442
+ }
443
+ },
444
+ "node_modules/node-pty/node_modules/nan": {
445
+ "version": "2.14.2",
446
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
447
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
448
+ },
449
+ "node_modules/object-component": {
450
+ "version": "0.0.3",
451
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
452
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
453
+ },
454
+ "node_modules/once": {
455
+ "version": "1.4.0",
456
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
457
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
458
+ "optional": true,
459
+ "dependencies": {
460
+ "wrappy": "1"
461
+ }
462
+ },
463
+ "node_modules/options": {
464
+ "version": "0.0.6",
465
+ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
466
+ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=",
467
+ "engines": {
468
+ "node": ">=0.4.0"
469
+ }
470
+ },
471
+ "node_modules/parseqs": {
472
+ "version": "0.0.5",
473
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
474
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
475
+ "dependencies": {
476
+ "better-assert": "~1.0.0"
477
+ }
478
+ },
479
+ "node_modules/parseuri": {
480
+ "version": "0.0.5",
481
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
482
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
483
+ "dependencies": {
484
+ "better-assert": "~1.0.0"
485
+ }
486
+ },
487
+ "node_modules/path-is-absolute": {
488
+ "version": "1.0.1",
489
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
490
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
491
+ "optional": true,
492
+ "engines": {
493
+ "node": ">=0.10.0"
494
+ }
495
+ },
496
+ "node_modules/requires-port": {
497
+ "version": "1.0.0",
498
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
499
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
500
+ },
501
+ "node_modules/rimraf": {
502
+ "version": "2.4.5",
503
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz",
504
+ "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
505
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
506
+ "optional": true,
507
+ "dependencies": {
508
+ "glob": "^6.0.1"
509
+ },
510
+ "bin": {
511
+ "rimraf": "bin.js"
512
+ }
513
+ },
514
+ "node_modules/safe-buffer": {
515
+ "version": "5.1.2",
516
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
517
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
518
+ },
519
+ "node_modules/safe-json-stringify": {
520
+ "version": "1.2.0",
521
+ "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz",
522
+ "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==",
523
+ "optional": true
524
+ },
525
+ "node_modules/semver": {
526
+ "version": "5.6.0",
527
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
528
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
529
+ "bin": {
530
+ "semver": "bin/semver"
531
+ }
532
+ },
533
+ "node_modules/socket.io": {
534
+ "version": "2.1.1",
535
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz",
536
+ "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==",
537
+ "dependencies": {
538
+ "debug": "~3.1.0",
539
+ "engine.io": "~3.2.0",
540
+ "has-binary2": "~1.0.2",
541
+ "socket.io-adapter": "~1.1.0",
542
+ "socket.io-client": "2.1.1",
543
+ "socket.io-parser": "~3.2.0"
544
+ }
545
+ },
546
+ "node_modules/socket.io-adapter": {
547
+ "version": "1.1.1",
548
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
549
+ "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs="
550
+ },
551
+ "node_modules/socket.io-client": {
552
+ "version": "2.1.1",
553
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz",
554
+ "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==",
555
+ "dependencies": {
556
+ "backo2": "1.0.2",
557
+ "base64-arraybuffer": "0.1.5",
558
+ "component-bind": "1.0.0",
559
+ "component-emitter": "1.2.1",
560
+ "debug": "~3.1.0",
561
+ "engine.io-client": "~3.2.0",
562
+ "has-binary2": "~1.0.2",
563
+ "has-cors": "1.1.0",
564
+ "indexof": "0.0.1",
565
+ "object-component": "0.0.3",
566
+ "parseqs": "0.0.5",
567
+ "parseuri": "0.0.5",
568
+ "socket.io-parser": "~3.2.0",
569
+ "to-array": "0.1.4"
570
+ }
571
+ },
572
+ "node_modules/socket.io-parser": {
573
+ "version": "3.2.0",
574
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz",
575
+ "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==",
576
+ "dependencies": {
577
+ "component-emitter": "1.2.1",
578
+ "debug": "~3.1.0",
579
+ "isarray": "2.0.1"
580
+ }
581
+ },
582
+ "node_modules/strftime": {
583
+ "version": "0.9.2",
584
+ "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.9.2.tgz",
585
+ "integrity": "sha1-vMooYfKUVtNyqvaheBHIvG859YM=",
586
+ "engines": {
587
+ "node": ">=0.2.0"
588
+ }
589
+ },
590
+ "node_modules/to-array": {
591
+ "version": "0.1.4",
592
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
593
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
594
+ },
595
+ "node_modules/ultron": {
596
+ "version": "1.1.1",
597
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
598
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
599
+ },
600
+ "node_modules/wrappy": {
601
+ "version": "1.0.2",
602
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
603
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
604
+ "optional": true
605
+ },
606
+ "node_modules/ws": {
607
+ "version": "1.1.4",
608
+ "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz",
609
+ "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=",
610
+ "dependencies": {
611
+ "options": ">=0.0.5",
612
+ "ultron": "1.0.x"
613
+ }
614
+ },
615
+ "node_modules/ws/node_modules/ultron": {
616
+ "version": "1.0.2",
617
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
618
+ "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po="
619
+ },
620
+ "node_modules/xmlhttprequest-ssl": {
621
+ "version": "1.5.5",
622
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
623
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
624
+ "engines": {
625
+ "node": ">=0.4.0"
626
+ }
627
+ },
628
+ "node_modules/yeast": {
629
+ "version": "0.1.2",
630
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
631
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
632
+ }
633
+ }
634
+ }
datalab/web/node_modules/accepts/HISTORY.md ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1.3.5 / 2018-02-28
2
+ ==================
3
+
4
+ * deps: mime-types@~2.1.18
5
+ - deps: mime-db@~1.33.0
6
+
7
+ 1.3.4 / 2017-08-22
8
+ ==================
9
+
10
+ * deps: mime-types@~2.1.16
11
+ - deps: mime-db@~1.29.0
12
+
13
+ 1.3.3 / 2016-05-02
14
+ ==================
15
+
16
+ * deps: mime-types@~2.1.11
17
+ - deps: mime-db@~1.23.0
18
+ * deps: [email protected]
19
+ - perf: improve `Accept` parsing speed
20
+ - perf: improve `Accept-Charset` parsing speed
21
+ - perf: improve `Accept-Encoding` parsing speed
22
+ - perf: improve `Accept-Language` parsing speed
23
+
24
+ 1.3.2 / 2016-03-08
25
+ ==================
26
+
27
+ * deps: mime-types@~2.1.10
28
+ - Fix extension of `application/dash+xml`
29
+ - Update primary extension for `audio/mp4`
30
+ - deps: mime-db@~1.22.0
31
+
32
+ 1.3.1 / 2016-01-19
33
+ ==================
34
+
35
+ * deps: mime-types@~2.1.9
36
+ - deps: mime-db@~1.21.0
37
+
38
+ 1.3.0 / 2015-09-29
39
+ ==================
40
+
41
+ * deps: mime-types@~2.1.7
42
+ - deps: mime-db@~1.19.0
43
+ * deps: [email protected]
44
+ - Fix including type extensions in parameters in `Accept` parsing
45
+ - Fix parsing `Accept` parameters with quoted equals
46
+ - Fix parsing `Accept` parameters with quoted semicolons
47
+ - Lazy-load modules from main entry point
48
+ - perf: delay type concatenation until needed
49
+ - perf: enable strict mode
50
+ - perf: hoist regular expressions
51
+ - perf: remove closures getting spec properties
52
+ - perf: remove a closure from media type parsing
53
+ - perf: remove property delete from media type parsing
54
+
55
+ 1.2.13 / 2015-09-06
56
+ ===================
57
+
58
+ * deps: mime-types@~2.1.6
59
+ - deps: mime-db@~1.18.0
60
+
61
+ 1.2.12 / 2015-07-30
62
+ ===================
63
+
64
+ * deps: mime-types@~2.1.4
65
+ - deps: mime-db@~1.16.0
66
+
67
+ 1.2.11 / 2015-07-16
68
+ ===================
69
+
70
+ * deps: mime-types@~2.1.3
71
+ - deps: mime-db@~1.15.0
72
+
73
+ 1.2.10 / 2015-07-01
74
+ ===================
75
+
76
+ * deps: mime-types@~2.1.2
77
+ - deps: mime-db@~1.14.0
78
+
79
+ 1.2.9 / 2015-06-08
80
+ ==================
81
+
82
+ * deps: mime-types@~2.1.1
83
+ - perf: fix deopt during mapping
84
+
85
+ 1.2.8 / 2015-06-07
86
+ ==================
87
+
88
+ * deps: mime-types@~2.1.0
89
+ - deps: mime-db@~1.13.0
90
+ * perf: avoid argument reassignment & argument slice
91
+ * perf: avoid negotiator recursive construction
92
+ * perf: enable strict mode
93
+ * perf: remove unnecessary bitwise operator
94
+
95
+ 1.2.7 / 2015-05-10
96
+ ==================
97
+
98
+ * deps: [email protected]
99
+ - Fix media type parameter matching to be case-insensitive
100
+
101
+ 1.2.6 / 2015-05-07
102
+ ==================
103
+
104
+ * deps: mime-types@~2.0.11
105
+ - deps: mime-db@~1.9.1
106
+ * deps: [email protected]
107
+ - Fix comparing media types with quoted values
108
+ - Fix splitting media types with quoted commas
109
+
110
+ 1.2.5 / 2015-03-13
111
+ ==================
112
+
113
+ * deps: mime-types@~2.0.10
114
+ - deps: mime-db@~1.8.0
115
+
116
+ 1.2.4 / 2015-02-14
117
+ ==================
118
+
119
+ * Support Node.js 0.6
120
+ * deps: mime-types@~2.0.9
121
+ - deps: mime-db@~1.7.0
122
+ * deps: [email protected]
123
+ - Fix preference sorting to be stable for long acceptable lists
124
+
125
+ 1.2.3 / 2015-01-31
126
+ ==================
127
+
128
+ * deps: mime-types@~2.0.8
129
+ - deps: mime-db@~1.6.0
130
+
131
+ 1.2.2 / 2014-12-30
132
+ ==================
133
+
134
+ * deps: mime-types@~2.0.7
135
+ - deps: mime-db@~1.5.0
136
+
137
+ 1.2.1 / 2014-12-30
138
+ ==================
139
+
140
+ * deps: mime-types@~2.0.5
141
+ - deps: mime-db@~1.3.1
142
+
143
+ 1.2.0 / 2014-12-19
144
+ ==================
145
+
146
+ * deps: [email protected]
147
+ - Fix list return order when large accepted list
148
+ - Fix missing identity encoding when q=0 exists
149
+ - Remove dynamic building of Negotiator class
150
+
151
+ 1.1.4 / 2014-12-10
152
+ ==================
153
+
154
+ * deps: mime-types@~2.0.4
155
+ - deps: mime-db@~1.3.0
156
+
157
+ 1.1.3 / 2014-11-09
158
+ ==================
159
+
160
+ * deps: mime-types@~2.0.3
161
+ - deps: mime-db@~1.2.0
162
+
163
+ 1.1.2 / 2014-10-14
164
+ ==================
165
+
166
+ * deps: [email protected]
167
+ - Fix error when media type has invalid parameter
168
+
169
+ 1.1.1 / 2014-09-28
170
+ ==================
171
+
172
+ * deps: mime-types@~2.0.2
173
+ - deps: mime-db@~1.1.0
174
+ * deps: [email protected]
175
+ - Fix all negotiations to be case-insensitive
176
+ - Stable sort preferences of same quality according to client order
177
+
178
+ 1.1.0 / 2014-09-02
179
+ ==================
180
+
181
+ * update `mime-types`
182
+
183
+ 1.0.7 / 2014-07-04
184
+ ==================
185
+
186
+ * Fix wrong type returned from `type` when match after unknown extension
187
+
188
+ 1.0.6 / 2014-06-24
189
+ ==================
190
+
191
+ * deps: [email protected]
192
+
193
+ 1.0.5 / 2014-06-20
194
+ ==================
195
+
196
+ * fix crash when unknown extension given
197
+
198
+ 1.0.4 / 2014-06-19
199
+ ==================
200
+
201
+ * use `mime-types`
202
+
203
+ 1.0.3 / 2014-06-11
204
+ ==================
205
+
206
+ * deps: [email protected]
207
+ - Order by specificity when quality is the same
208
+
209
+ 1.0.2 / 2014-05-29
210
+ ==================
211
+
212
+ * Fix interpretation when header not in request
213
+ * deps: pin [email protected]
214
+
215
+ 1.0.1 / 2014-01-18
216
+ ==================
217
+
218
+ * Identity encoding isn't always acceptable
219
+ * deps: negotiator@~0.4.0
220
+
221
+ 1.0.0 / 2013-12-27
222
+ ==================
223
+
224
+ * Genesis
datalab/web/node_modules/accepts/LICENSE ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2014 Jonathan Ong <[email protected]>
4
+ Copyright (c) 2015 Douglas Christopher Wilson <[email protected]>
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ 'Software'), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
datalab/web/node_modules/accepts/README.md ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # accepts
2
+
3
+ [![NPM Version][npm-image]][npm-url]
4
+ [![NPM Downloads][downloads-image]][downloads-url]
5
+ [![Node.js Version][node-version-image]][node-version-url]
6
+ [![Build Status][travis-image]][travis-url]
7
+ [![Test Coverage][coveralls-image]][coveralls-url]
8
+
9
+ Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
10
+ Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
11
+
12
+ In addition to negotiator, it allows:
13
+
14
+ - Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
15
+ as well as `('text/html', 'application/json')`.
16
+ - Allows type shorthands such as `json`.
17
+ - Returns `false` when no types match
18
+ - Treats non-existent headers as `*`
19
+
20
+ ## Installation
21
+
22
+ This is a [Node.js](https://nodejs.org/en/) module available through the
23
+ [npm registry](https://www.npmjs.com/). Installation is done using the
24
+ [`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
25
+
26
+ ```sh
27
+ $ npm install accepts
28
+ ```
29
+
30
+ ## API
31
+
32
+ <!-- eslint-disable no-unused-vars -->
33
+
34
+ ```js
35
+ var accepts = require('accepts')
36
+ ```
37
+
38
+ ### accepts(req)
39
+
40
+ Create a new `Accepts` object for the given `req`.
41
+
42
+ #### .charset(charsets)
43
+
44
+ Return the first accepted charset. If nothing in `charsets` is accepted,
45
+ then `false` is returned.
46
+
47
+ #### .charsets()
48
+
49
+ Return the charsets that the request accepts, in the order of the client's
50
+ preference (most preferred first).
51
+
52
+ #### .encoding(encodings)
53
+
54
+ Return the first accepted encoding. If nothing in `encodings` is accepted,
55
+ then `false` is returned.
56
+
57
+ #### .encodings()
58
+
59
+ Return the encodings that the request accepts, in the order of the client's
60
+ preference (most preferred first).
61
+
62
+ #### .language(languages)
63
+
64
+ Return the first accepted language. If nothing in `languages` is accepted,
65
+ then `false` is returned.
66
+
67
+ #### .languages()
68
+
69
+ Return the languages that the request accepts, in the order of the client's
70
+ preference (most preferred first).
71
+
72
+ #### .type(types)
73
+
74
+ Return the first accepted type (and it is returned as the same text as what
75
+ appears in the `types` array). If nothing in `types` is accepted, then `false`
76
+ is returned.
77
+
78
+ The `types` array can contain full MIME types or file extensions. Any value
79
+ that is not a full MIME types is passed to `require('mime-types').lookup`.
80
+
81
+ #### .types()
82
+
83
+ Return the types that the request accepts, in the order of the client's
84
+ preference (most preferred first).
85
+
86
+ ## Examples
87
+
88
+ ### Simple type negotiation
89
+
90
+ This simple example shows how to use `accepts` to return a different typed
91
+ respond body based on what the client wants to accept. The server lists it's
92
+ preferences in order and will get back the best match between the client and
93
+ server.
94
+
95
+ ```js
96
+ var accepts = require('accepts')
97
+ var http = require('http')
98
+
99
+ function app (req, res) {
100
+ var accept = accepts(req)
101
+
102
+ // the order of this list is significant; should be server preferred order
103
+ switch (accept.type(['json', 'html'])) {
104
+ case 'json':
105
+ res.setHeader('Content-Type', 'application/json')
106
+ res.write('{"hello":"world!"}')
107
+ break
108
+ case 'html':
109
+ res.setHeader('Content-Type', 'text/html')
110
+ res.write('<b>hello, world!</b>')
111
+ break
112
+ default:
113
+ // the fallback is text/plain, so no need to specify it above
114
+ res.setHeader('Content-Type', 'text/plain')
115
+ res.write('hello, world!')
116
+ break
117
+ }
118
+
119
+ res.end()
120
+ }
121
+
122
+ http.createServer(app).listen(3000)
123
+ ```
124
+
125
+ You can test this out with the cURL program:
126
+ ```sh
127
+ curl -I -H'Accept: text/html' http://localhost:3000/
128
+ ```
129
+
130
+ ## License
131
+
132
+ [MIT](LICENSE)
133
+
134
+ [npm-image]: https://img.shields.io/npm/v/accepts.svg
135
+ [npm-url]: https://npmjs.org/package/accepts
136
+ [node-version-image]: https://img.shields.io/node/v/accepts.svg
137
+ [node-version-url]: https://nodejs.org/en/download/
138
+ [travis-image]: https://img.shields.io/travis/jshttp/accepts/master.svg
139
+ [travis-url]: https://travis-ci.org/jshttp/accepts
140
+ [coveralls-image]: https://img.shields.io/coveralls/jshttp/accepts/master.svg
141
+ [coveralls-url]: https://coveralls.io/r/jshttp/accepts
142
+ [downloads-image]: https://img.shields.io/npm/dm/accepts.svg
143
+ [downloads-url]: https://npmjs.org/package/accepts
datalab/web/node_modules/accepts/index.js ADDED
@@ -0,0 +1,238 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ * accepts
3
+ * Copyright(c) 2014 Jonathan Ong
4
+ * Copyright(c) 2015 Douglas Christopher Wilson
5
+ * MIT Licensed
6
+ */
7
+
8
+ 'use strict'
9
+
10
+ /**
11
+ * Module dependencies.
12
+ * @private
13
+ */
14
+
15
+ var Negotiator = require('negotiator')
16
+ var mime = require('mime-types')
17
+
18
+ /**
19
+ * Module exports.
20
+ * @public
21
+ */
22
+
23
+ module.exports = Accepts
24
+
25
+ /**
26
+ * Create a new Accepts object for the given req.
27
+ *
28
+ * @param {object} req
29
+ * @public
30
+ */
31
+
32
+ function Accepts (req) {
33
+ if (!(this instanceof Accepts)) {
34
+ return new Accepts(req)
35
+ }
36
+
37
+ this.headers = req.headers
38
+ this.negotiator = new Negotiator(req)
39
+ }
40
+
41
+ /**
42
+ * Check if the given `type(s)` is acceptable, returning
43
+ * the best match when true, otherwise `undefined`, in which
44
+ * case you should respond with 406 "Not Acceptable".
45
+ *
46
+ * The `type` value may be a single mime type string
47
+ * such as "application/json", the extension name
48
+ * such as "json" or an array `["json", "html", "text/plain"]`. When a list
49
+ * or array is given the _best_ match, if any is returned.
50
+ *
51
+ * Examples:
52
+ *
53
+ * // Accept: text/html
54
+ * this.types('html');
55
+ * // => "html"
56
+ *
57
+ * // Accept: text/*, application/json
58
+ * this.types('html');
59
+ * // => "html"
60
+ * this.types('text/html');
61
+ * // => "text/html"
62
+ * this.types('json', 'text');
63
+ * // => "json"
64
+ * this.types('application/json');
65
+ * // => "application/json"
66
+ *
67
+ * // Accept: text/*, application/json
68
+ * this.types('image/png');
69
+ * this.types('png');
70
+ * // => undefined
71
+ *
72
+ * // Accept: text/*;q=.5, application/json
73
+ * this.types(['html', 'json']);
74
+ * this.types('html', 'json');
75
+ * // => "json"
76
+ *
77
+ * @param {String|Array} types...
78
+ * @return {String|Array|Boolean}
79
+ * @public
80
+ */
81
+
82
+ Accepts.prototype.type =
83
+ Accepts.prototype.types = function (types_) {
84
+ var types = types_
85
+
86
+ // support flattened arguments
87
+ if (types && !Array.isArray(types)) {
88
+ types = new Array(arguments.length)
89
+ for (var i = 0; i < types.length; i++) {
90
+ types[i] = arguments[i]
91
+ }
92
+ }
93
+
94
+ // no types, return all requested types
95
+ if (!types || types.length === 0) {
96
+ return this.negotiator.mediaTypes()
97
+ }
98
+
99
+ // no accept header, return first given type
100
+ if (!this.headers.accept) {
101
+ return types[0]
102
+ }
103
+
104
+ var mimes = types.map(extToMime)
105
+ var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
106
+ var first = accepts[0]
107
+
108
+ return first
109
+ ? types[mimes.indexOf(first)]
110
+ : false
111
+ }
112
+
113
+ /**
114
+ * Return accepted encodings or best fit based on `encodings`.
115
+ *
116
+ * Given `Accept-Encoding: gzip, deflate`
117
+ * an array sorted by quality is returned:
118
+ *
119
+ * ['gzip', 'deflate']
120
+ *
121
+ * @param {String|Array} encodings...
122
+ * @return {String|Array}
123
+ * @public
124
+ */
125
+
126
+ Accepts.prototype.encoding =
127
+ Accepts.prototype.encodings = function (encodings_) {
128
+ var encodings = encodings_
129
+
130
+ // support flattened arguments
131
+ if (encodings && !Array.isArray(encodings)) {
132
+ encodings = new Array(arguments.length)
133
+ for (var i = 0; i < encodings.length; i++) {
134
+ encodings[i] = arguments[i]
135
+ }
136
+ }
137
+
138
+ // no encodings, return all requested encodings
139
+ if (!encodings || encodings.length === 0) {
140
+ return this.negotiator.encodings()
141
+ }
142
+
143
+ return this.negotiator.encodings(encodings)[0] || false
144
+ }
145
+
146
+ /**
147
+ * Return accepted charsets or best fit based on `charsets`.
148
+ *
149
+ * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
150
+ * an array sorted by quality is returned:
151
+ *
152
+ * ['utf-8', 'utf-7', 'iso-8859-1']
153
+ *
154
+ * @param {String|Array} charsets...
155
+ * @return {String|Array}
156
+ * @public
157
+ */
158
+
159
+ Accepts.prototype.charset =
160
+ Accepts.prototype.charsets = function (charsets_) {
161
+ var charsets = charsets_
162
+
163
+ // support flattened arguments
164
+ if (charsets && !Array.isArray(charsets)) {
165
+ charsets = new Array(arguments.length)
166
+ for (var i = 0; i < charsets.length; i++) {
167
+ charsets[i] = arguments[i]
168
+ }
169
+ }
170
+
171
+ // no charsets, return all requested charsets
172
+ if (!charsets || charsets.length === 0) {
173
+ return this.negotiator.charsets()
174
+ }
175
+
176
+ return this.negotiator.charsets(charsets)[0] || false
177
+ }
178
+
179
+ /**
180
+ * Return accepted languages or best fit based on `langs`.
181
+ *
182
+ * Given `Accept-Language: en;q=0.8, es, pt`
183
+ * an array sorted by quality is returned:
184
+ *
185
+ * ['es', 'pt', 'en']
186
+ *
187
+ * @param {String|Array} langs...
188
+ * @return {Array|String}
189
+ * @public
190
+ */
191
+
192
+ Accepts.prototype.lang =
193
+ Accepts.prototype.langs =
194
+ Accepts.prototype.language =
195
+ Accepts.prototype.languages = function (languages_) {
196
+ var languages = languages_
197
+
198
+ // support flattened arguments
199
+ if (languages && !Array.isArray(languages)) {
200
+ languages = new Array(arguments.length)
201
+ for (var i = 0; i < languages.length; i++) {
202
+ languages[i] = arguments[i]
203
+ }
204
+ }
205
+
206
+ // no languages, return all requested languages
207
+ if (!languages || languages.length === 0) {
208
+ return this.negotiator.languages()
209
+ }
210
+
211
+ return this.negotiator.languages(languages)[0] || false
212
+ }
213
+
214
+ /**
215
+ * Convert extnames to mime.
216
+ *
217
+ * @param {String} type
218
+ * @return {String}
219
+ * @private
220
+ */
221
+
222
+ function extToMime (type) {
223
+ return type.indexOf('/') === -1
224
+ ? mime.lookup(type)
225
+ : type
226
+ }
227
+
228
+ /**
229
+ * Check if mime is valid.
230
+ *
231
+ * @param {String} type
232
+ * @return {String}
233
+ * @private
234
+ */
235
+
236
+ function validMime (type) {
237
+ return typeof type === 'string'
238
+ }
datalab/web/node_modules/accepts/package.json ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "accepts",
3
+ "description": "Higher-level content negotiation",
4
+ "version": "1.3.5",
5
+ "contributors": [
6
+ "Douglas Christopher Wilson <[email protected]>",
7
+ "Jonathan Ong <[email protected]> (http://jongleberry.com)"
8
+ ],
9
+ "license": "MIT",
10
+ "repository": "jshttp/accepts",
11
+ "dependencies": {
12
+ "mime-types": "~2.1.18",
13
+ "negotiator": "0.6.1"
14
+ },
15
+ "devDependencies": {
16
+ "eslint": "4.18.1",
17
+ "eslint-config-standard": "11.0.0",
18
+ "eslint-plugin-import": "2.9.0",
19
+ "eslint-plugin-markdown": "1.0.0-beta.6",
20
+ "eslint-plugin-node": "6.0.1",
21
+ "eslint-plugin-promise": "3.6.0",
22
+ "eslint-plugin-standard": "3.0.1",
23
+ "istanbul": "0.4.5",
24
+ "mocha": "~1.21.5"
25
+ },
26
+ "files": [
27
+ "LICENSE",
28
+ "HISTORY.md",
29
+ "index.js"
30
+ ],
31
+ "engines": {
32
+ "node": ">= 0.6"
33
+ },
34
+ "scripts": {
35
+ "lint": "eslint --plugin markdown --ext js,md .",
36
+ "test": "mocha --reporter spec --check-leaks --bail test/",
37
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
38
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
39
+ },
40
+ "keywords": [
41
+ "content",
42
+ "negotiation",
43
+ "accept",
44
+ "accepts"
45
+ ]
46
+ }
datalab/web/node_modules/after/.npmignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ node_modules
2
+ .monitor
datalab/web/node_modules/after/.travis.yml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ language: node_js
2
+ node_js:
3
+ - 0.6
4
+ - 0.8
5
+ - 0.9
6
+ - 0.10
7
+ - 0.12
8
+ - 4.2.4
9
+ - 5.4.1
10
+ - iojs-1
11
+ - iojs-2
12
+ - iojs-3
datalab/web/node_modules/after/LICENCE ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2011 Raynos.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
datalab/web/node_modules/after/README.md ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # After [![Build Status][1]][2]
2
+
3
+ Invoke callback after n calls
4
+
5
+ ## Status: production ready
6
+
7
+ ## Example
8
+
9
+ ```js
10
+ var after = require("after")
11
+ var db = require("./db") // some db.
12
+
13
+ var updateUser = function (req, res) {
14
+ // use after to run two tasks in parallel,
15
+ // namely get request body and get session
16
+ // then run updateUser with the results
17
+ var next = after(2, updateUser)
18
+ var results = {}
19
+
20
+ getJSONBody(req, res, function (err, body) {
21
+ if (err) return next(err)
22
+
23
+ results.body = body
24
+ next(null, results)
25
+ })
26
+
27
+ getSessionUser(req, res, function (err, user) {
28
+ if (err) return next(err)
29
+
30
+ results.user = user
31
+ next(null, results)
32
+ })
33
+
34
+ // now do the thing!
35
+ function updateUser(err, result) {
36
+ if (err) {
37
+ res.statusCode = 500
38
+ return res.end("Unexpected Error")
39
+ }
40
+
41
+ if (!result.user || result.user.role !== "admin") {
42
+ res.statusCode = 403
43
+ return res.end("Permission Denied")
44
+ }
45
+
46
+ db.put("users:" + req.params.userId, result.body, function (err) {
47
+ if (err) {
48
+ res.statusCode = 500
49
+ return res.end("Unexpected Error")
50
+ }
51
+
52
+ res.statusCode = 200
53
+ res.end("Ok")
54
+ })
55
+ }
56
+ }
57
+ ```
58
+
59
+ ## Naive Example
60
+
61
+ ```js
62
+ var after = require("after")
63
+ , next = after(3, logItWorks)
64
+
65
+ next()
66
+ next()
67
+ next() // it works
68
+
69
+ function logItWorks() {
70
+ console.log("it works!")
71
+ }
72
+ ```
73
+
74
+ ## Example with error handling
75
+
76
+ ```js
77
+ var after = require("after")
78
+ , next = after(3, logError)
79
+
80
+ next()
81
+ next(new Error("oops")) // logs oops
82
+ next() // does nothing
83
+
84
+ // This callback is only called once.
85
+ // If there is an error the callback gets called immediately
86
+ // this avoids the situation where errors get lost.
87
+ function logError(err) {
88
+ console.log(err)
89
+ }
90
+ ```
91
+
92
+ ## Installation
93
+
94
+ `npm install after`
95
+
96
+ ## Tests
97
+
98
+ `npm test`
99
+
100
+ ## Contributors
101
+
102
+ - Raynos
103
+ - defunctzombie
104
+
105
+ ## MIT Licenced
106
+
107
+ [1]: https://secure.travis-ci.org/Raynos/after.png
108
+ [2]: http://travis-ci.org/Raynos/after
109
+ [3]: http://raynos.org/blog/2/Flow-control-in-node.js
110
+ [4]: http://stackoverflow.com/questions/6852059/determining-the-end-of-asynchronous-operations-javascript/6852307#6852307
111
+ [5]: http://stackoverflow.com/questions/6869872/in-javascript-what-are-best-practices-for-executing-multiple-asynchronous-functi/6870031#6870031
112
+ [6]: http://stackoverflow.com/questions/6864397/javascript-performance-long-running-tasks/6889419#6889419
113
+ [7]: http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js/6620091#6620091
114
+ [8]: http://github.com/Raynos/iterators
115
+ [9]: http://github.com/Raynos/composite
datalab/web/node_modules/after/index.js ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ module.exports = after
2
+
3
+ function after(count, callback, err_cb) {
4
+ var bail = false
5
+ err_cb = err_cb || noop
6
+ proxy.count = count
7
+
8
+ return (count === 0) ? callback() : proxy
9
+
10
+ function proxy(err, result) {
11
+ if (proxy.count <= 0) {
12
+ throw new Error('after called too many times')
13
+ }
14
+ --proxy.count
15
+
16
+ // after first error, rest are passed to err_cb
17
+ if (err) {
18
+ bail = true
19
+ callback(err)
20
+ // future error callbacks will go to error handler
21
+ callback = err_cb
22
+ } else if (proxy.count === 0 && !bail) {
23
+ callback(null, result)
24
+ }
25
+ }
26
+ }
27
+
28
+ function noop() {}
datalab/web/node_modules/after/package.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "after",
3
+ "description": "after - tiny flow control",
4
+ "version": "0.8.2",
5
+ "author": "Raynos <[email protected]>",
6
+ "contributors": [
7
+ {
8
+ "name": "Raynos",
9
+ "email": "[email protected]",
10
+ "url": "http://raynos.org"
11
+ }
12
+ ],
13
+ "scripts": {
14
+ "test": "mocha --ui tdd --reporter spec test/*.js"
15
+ },
16
+ "devDependencies": {
17
+ "mocha": "~1.8.1"
18
+ },
19
+ "keywords": [
20
+ "flowcontrol",
21
+ "after",
22
+ "flow",
23
+ "control",
24
+ "arch"
25
+ ],
26
+ "license": "MIT",
27
+ "repository": "git://github.com/Raynos/after.git"
28
+ }
datalab/web/node_modules/after/test/after-test.js ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*global suite, test*/
2
+
3
+ var assert = require("assert")
4
+ , after = require("../")
5
+
6
+ test("exists", function () {
7
+ assert(typeof after === "function", "after is not a function")
8
+ })
9
+
10
+ test("after when called with 0 invokes", function (done) {
11
+ after(0, done)
12
+ });
13
+
14
+ test("after 1", function (done) {
15
+ var next = after(1, done)
16
+ next()
17
+ })
18
+
19
+ test("after 5", function (done) {
20
+ var next = after(5, done)
21
+ , i = 5
22
+
23
+ while (i--) {
24
+ next()
25
+ }
26
+ })
27
+
28
+ test("manipulate count", function (done) {
29
+ var next = after(1, done)
30
+ , i = 5
31
+
32
+ next.count = i
33
+ while (i--) {
34
+ next()
35
+ }
36
+ })
37
+
38
+ test("after terminates on error", function (done) {
39
+ var next = after(2, function(err) {
40
+ assert.equal(err.message, 'test');
41
+ done();
42
+ })
43
+ next(new Error('test'))
44
+ next(new Error('test2'))
45
+ })
46
+
47
+ test('gee', function(done) {
48
+ done = after(2, done)
49
+
50
+ function cb(err) {
51
+ assert.equal(err.message, 1);
52
+ done()
53
+ }
54
+
55
+ var next = after(3, cb, function(err) {
56
+ assert.equal(err.message, 2)
57
+ done()
58
+ });
59
+
60
+ next()
61
+ next(new Error(1))
62
+ next(new Error(2))
63
+ })
64
+
65
+ test('eee', function(done) {
66
+ done = after(3, done)
67
+
68
+ function cb(err) {
69
+ assert.equal(err.message, 1);
70
+ done()
71
+ }
72
+
73
+ var next = after(3, cb, function(err) {
74
+ assert.equal(err.message, 2)
75
+ done()
76
+ });
77
+
78
+ next(new Error(1))
79
+ next(new Error(2))
80
+ next(new Error(2))
81
+ })
82
+
83
+ test('gge', function(done) {
84
+ function cb(err) {
85
+ assert.equal(err.message, 1);
86
+ done()
87
+ }
88
+
89
+ var next = after(3, cb, function(err) {
90
+ // should not happen
91
+ assert.ok(false);
92
+ });
93
+
94
+ next()
95
+ next()
96
+ next(new Error(1))
97
+ })
98
+
99
+ test('egg', function(done) {
100
+ function cb(err) {
101
+ assert.equal(err.message, 1);
102
+ done()
103
+ }
104
+
105
+ var next = after(3, cb, function(err) {
106
+ // should not happen
107
+ assert.ok(false);
108
+ });
109
+
110
+ next(new Error(1))
111
+ next()
112
+ next()
113
+ })
114
+
115
+ test('throws on too many calls', function(done) {
116
+ var next = after(1, done);
117
+ next()
118
+ assert.throws(next, /after called too many times/);
119
+ });
120
+
datalab/web/node_modules/arraybuffer.slice/.npmignore ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ lib-cov
2
+ lcov.info
3
+ *.seed
4
+ *.log
5
+ *.csv
6
+ *.dat
7
+ *.out
8
+ *.pid
9
+ *.gz
10
+
11
+ pids
12
+ logs
13
+ results
14
+ build
15
+ .grunt
16
+
17
+ node_modules
datalab/web/node_modules/arraybuffer.slice/LICENCE ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (C) 2013 Rase-
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
datalab/web/node_modules/arraybuffer.slice/Makefile ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+
2
+ REPORTER = dot
3
+
4
+ test:
5
+ @./node_modules/.bin/mocha \
6
+ --reporter $(REPORTER)
7
+
8
+ .PHONY: test
datalab/web/node_modules/arraybuffer.slice/README.md ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # How to
2
+ ```javascript
3
+ var sliceBuffer = require('arraybuffer.slice');
4
+ var ab = (new Int8Array(5)).buffer;
5
+ var sliced = sliceBuffer(ab, 1, 3);
6
+ sliced = sliceBuffer(ab, 1);
7
+ ```
8
+
9
+ # Licence (MIT)
10
+ Copyright (C) 2013 Rase-
11
+
12
+
13
+ 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:
14
+
15
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
16
+
17
+ 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.
datalab/web/node_modules/arraybuffer.slice/index.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * An abstraction for slicing an arraybuffer even when
3
+ * ArrayBuffer.prototype.slice is not supported
4
+ *
5
+ * @api public
6
+ */
7
+
8
+ module.exports = function(arraybuffer, start, end) {
9
+ var bytes = arraybuffer.byteLength;
10
+ start = start || 0;
11
+ end = end || bytes;
12
+
13
+ if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
14
+
15
+ if (start < 0) { start += bytes; }
16
+ if (end < 0) { end += bytes; }
17
+ if (end > bytes) { end = bytes; }
18
+
19
+ if (start >= bytes || start >= end || bytes === 0) {
20
+ return new ArrayBuffer(0);
21
+ }
22
+
23
+ var abv = new Uint8Array(arraybuffer);
24
+ var result = new Uint8Array(end - start);
25
+ for (var i = start, ii = 0; i < end; i++, ii++) {
26
+ result[ii] = abv[i];
27
+ }
28
+ return result.buffer;
29
+ };
datalab/web/node_modules/arraybuffer.slice/package.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "arraybuffer.slice",
3
+ "description": "Exports a function for slicing ArrayBuffers (no polyfilling)",
4
+ "version": "0.0.7",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/rase-/arraybuffer.slice",
7
+ "dependencies": {},
8
+ "devDependencies": {
9
+ "mocha": "1.17.1",
10
+ "expect.js": "0.2.0"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "[email protected]:rase-/arraybuffer.slice.git"
15
+ }
16
+ }
datalab/web/node_modules/arraybuffer.slice/test/slice-buffer.js ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Test dependencies
3
+ */
4
+
5
+ var sliceBuffer = require('../index.js');
6
+ var expect = require('expect.js');
7
+
8
+ /**
9
+ * Tests
10
+ */
11
+
12
+ describe('sliceBuffer', function() {
13
+ describe('using standard slice', function() {
14
+ it('should slice correctly with only start provided', function() {
15
+ var abv = new Uint8Array(10);
16
+ for (var i = 0; i < abv.length; i++) {
17
+ abv[i] = i;
18
+ }
19
+
20
+ var sliced = sliceBuffer(abv.buffer, 3);
21
+ var sabv = new Uint8Array(sliced);
22
+ for (var i = 3, ii = 0; i < abv.length; i++, ii++) {
23
+ expect(abv[i]).to.equal(sabv[ii]);
24
+ }
25
+ });
26
+
27
+ it('should slice correctly with start and end provided', function() {
28
+ var abv = new Uint8Array(10);
29
+ for (var i = 0; i < abv.length; i++) {
30
+ abv[i] = i;
31
+ }
32
+
33
+ var sliced = sliceBuffer(abv.buffer, 3, 8);
34
+ var sabv = new Uint8Array(sliced);
35
+ for (var i = 3, ii = 0; i < 8; i++, ii++) {
36
+ expect(abv[i]).to.equal(sabv[ii]);
37
+ }
38
+ });
39
+
40
+ it('should slice correctly with negative start', function() {
41
+ var abv = new Uint8Array(10);
42
+ for (var i = 0; i < abv.length; i++) {
43
+ abv[i] = i;
44
+ }
45
+
46
+ var sliced = sliceBuffer(abv.buffer, -3);
47
+ var sabv = new Uint8Array(sliced);
48
+ for (var i = abv.length - 3, ii = 0; i < abv.length; i++, ii++) {
49
+ expect(abv[i]).to.equal(sabv[ii]);
50
+ }
51
+ });
52
+
53
+ it('should slice correctly with negative end', function() {
54
+ var abv = new Uint8Array(10);
55
+ for (var i = 0; i < abv.length; i++) {
56
+ abv[i] = i;
57
+ }
58
+
59
+ var sliced = sliceBuffer(abv.buffer, 0, -3);
60
+ var sabv = new Uint8Array(sliced);
61
+ for (var i = 0, ii = 0; i < abv.length - 3; i++, ii++) {
62
+ expect(abv[i]).to.equal(sabv[ii]);
63
+ }
64
+ });
65
+
66
+ it('should slice correctly with negative start and end', function() {
67
+ var abv = new Uint8Array(10);
68
+ for (var i = 0; i < abv.length; i++) {
69
+ abv[i] = i;
70
+ }
71
+
72
+ var sliced = sliceBuffer(abv.buffer, -6, -3);
73
+ var sabv = new Uint8Array(sliced);
74
+ for (var i = abv.length - 6, ii = 0; i < abv.length - 3; i++, ii++) {
75
+ expect(abv[i]).to.equal(sabv[ii]);
76
+ }
77
+ });
78
+
79
+ it('should slice correctly with equal start and end', function() {
80
+ var abv = new Uint8Array(10);
81
+ for (var i = 0; i < abv.length; i++) {
82
+ abv[i] = i;
83
+ }
84
+
85
+ var sliced = sliceBuffer(abv.buffer, 1, 1);
86
+ expect(sliced.byteLength).to.equal(0);
87
+ });
88
+
89
+ it('should slice correctly when end larger than buffer', function() {
90
+ var abv = new Uint8Array(10);
91
+ for (var i = 0; i < abv.length; i++) {
92
+ abv[i] = i;
93
+ }
94
+
95
+ var sliced = sliceBuffer(abv.buffer, 0, 100);
96
+ expect(new Uint8Array(sliced)).to.eql(abv);
97
+ });
98
+
99
+ it('shoud slice correctly when start larger than end', function() {
100
+ var abv = new Uint8Array(10);
101
+ for (var i = 0; i < abv.length; i++) {
102
+ abv[i] = i;
103
+ }
104
+
105
+ var sliced = sliceBuffer(abv.buffer, 6, 5);
106
+ expect(sliced.byteLength).to.equal(0);
107
+ });
108
+ });
109
+
110
+ describe('using fallback', function() {
111
+ it('should slice correctly with only start provided', function() {
112
+ var abv = new Uint8Array(10);
113
+ for (var i = 0; i < abv.length; i++) {
114
+ abv[i] = i;
115
+ }
116
+ var ab = abv.buffer;
117
+ ab.slice = undefined;
118
+
119
+ var sliced = sliceBuffer(ab, 3);
120
+ var sabv = new Uint8Array(sliced);
121
+ for (var i = 3, ii = 0; i < abv.length; i++, ii++) {
122
+ expect(abv[i]).to.equal(sabv[ii]);
123
+ }
124
+ });
125
+
126
+ it('should slice correctly with start and end provided', function() {
127
+ var abv = new Uint8Array(10);
128
+ for (var i = 0; i < abv.length; i++) {
129
+ abv[i] = i;
130
+ }
131
+ var ab = abv.buffer;
132
+ ab.slice = undefined;
133
+
134
+
135
+ var sliced = sliceBuffer(ab, 3, 8);
136
+ var sabv = new Uint8Array(sliced);
137
+ for (var i = 3, ii = 0; i < 8; i++, ii++) {
138
+ expect(abv[i]).to.equal(sabv[ii]);
139
+ }
140
+ });
141
+
142
+ it('should slice correctly with negative start', function() {
143
+ var abv = new Uint8Array(10);
144
+ for (var i = 0; i < abv.length; i++) {
145
+ abv[i] = i;
146
+ }
147
+ var ab = abv.buffer;
148
+ ab.slice = undefined;
149
+
150
+
151
+ var sliced = sliceBuffer(ab, -3);
152
+ var sabv = new Uint8Array(sliced);
153
+ for (var i = abv.length - 3, ii = 0; i < abv.length; i++, ii++) {
154
+ expect(abv[i]).to.equal(sabv[ii]);
155
+ }
156
+ });
157
+
158
+ it('should slice correctly with negative end', function() {
159
+ var abv = new Uint8Array(10);
160
+ for (var i = 0; i < abv.length; i++) {
161
+ abv[i] = i;
162
+ }
163
+ var ab = abv.buffer;
164
+ ab.slice = undefined;
165
+
166
+ var sliced = sliceBuffer(ab, 0, -3);
167
+ var sabv = new Uint8Array(sliced);
168
+ for (var i = 0, ii = 0; i < abv.length - 3; i++, ii++) {
169
+ expect(abv[i]).to.equal(sabv[ii]);
170
+ }
171
+ });
172
+
173
+ it('should slice correctly with negative start and end', function() {
174
+ var abv = new Uint8Array(10);
175
+ for (var i = 0; i < abv.length; i++) {
176
+ abv[i] = i;
177
+ }
178
+ var ab = abv.buffer;
179
+ ab.slice = undefined;
180
+
181
+ var sliced = sliceBuffer(ab, -6, -3);
182
+ var sabv = new Uint8Array(sliced);
183
+ for (var i = abv.length - 6, ii = 0; i < abv.length - 3; i++, ii++) {
184
+ expect(abv[i]).to.equal(sabv[ii]);
185
+ }
186
+ });
187
+
188
+ it('should slice correctly with equal start and end', function() {
189
+ var abv = new Uint8Array(10);
190
+ for (var i = 0; i < abv.length; i++) {
191
+ abv[i] = i;
192
+ }
193
+ var ab = abv.buffer;
194
+ ab.slice = undefined;
195
+
196
+ var sliced = sliceBuffer(ab, 1, 1);
197
+ expect(sliced.byteLength).to.equal(0);
198
+ });
199
+
200
+ it('should slice correctly when end larger than buffer', function() {
201
+ var abv = new Uint8Array(10);
202
+ for (var i = 0; i < abv.length; i++) {
203
+ abv[i] = i;
204
+ }
205
+ var ab = abv.buffer;
206
+ ab.slice = undefined;
207
+
208
+ var sliced = sliceBuffer(ab, 0, 100);
209
+ var sabv = new Uint8Array(sliced);
210
+ for (var i = 0; i < abv.length; i++) {
211
+ expect(abv[i]).to.equal(sabv[i]);
212
+ }
213
+ });
214
+
215
+ it('shoud slice correctly when start larger than end', function() {
216
+ var abv = new Uint8Array(10);
217
+ for (var i = 0; i < abv.length; i++) {
218
+ abv[i] = i;
219
+ }
220
+ var ab = abv.buffer;
221
+ ab.slice = undefined;
222
+
223
+ var sliced = sliceBuffer(ab, 6, 5);
224
+ expect(sliced.byteLength).to.equal(0);
225
+ });
226
+ });
227
+ });
datalab/web/node_modules/async-limiter/.travis.yml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ language: node_js
2
+ node_js:
3
+ - "6"
4
+ - "node"
5
+ script: npm run travis
6
+ cache:
7
+ yarn: true
datalab/web/node_modules/async-limiter/LICENSE ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ The MIT License (MIT)
2
+ Copyright (c) 2017 Samuel Reed <[email protected]>
3
+
4
+ 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:
5
+
6
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
7
+
8
+ 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.
datalab/web/node_modules/async-limiter/coverage/coverage.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"/Users/samuelreed/git/forks/async-throttle/index.js":{"path":"/Users/samuelreed/git/forks/async-throttle/index.js","s":{"1":1,"2":7,"3":1,"4":6,"5":6,"6":6,"7":6,"8":6,"9":6,"10":1,"11":1,"12":3,"13":13,"14":13,"15":13,"16":1,"17":19,"18":1,"19":45,"20":6,"21":39,"22":13,"23":13,"24":13,"25":13,"26":39,"27":18,"28":6,"29":6,"30":1,"31":6,"32":6,"33":6,"34":1,"35":13,"36":13,"37":1},"b":{"1":[1,6],"2":[6,5],"3":[6,5],"4":[6,39],"5":[13,26],"6":[18,21],"7":[6,0]},"f":{"1":7,"2":3,"3":13,"4":19,"5":45,"6":6,"7":13},"fnMap":{"1":{"name":"Queue","line":3,"loc":{"start":{"line":3,"column":0},"end":{"line":3,"column":24}}},"2":{"name":"(anonymous_2)","line":22,"loc":{"start":{"line":22,"column":24},"end":{"line":22,"column":41}}},"3":{"name":"(anonymous_3)","line":23,"loc":{"start":{"line":23,"column":28},"end":{"line":23,"column":39}}},"4":{"name":"(anonymous_4)","line":31,"loc":{"start":{"line":31,"column":7},"end":{"line":31,"column":18}}},"5":{"name":"(anonymous_5)","line":36,"loc":{"start":{"line":36,"column":23},"end":{"line":36,"column":34}}},"6":{"name":"(anonymous_6)","line":55,"loc":{"start":{"line":55,"column":25},"end":{"line":55,"column":38}}},"7":{"name":"done","line":62,"loc":{"start":{"line":62,"column":0},"end":{"line":62,"column":16}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":14,"column":1}},"2":{"start":{"line":4,"column":2},"end":{"line":6,"column":3}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":30}},"4":{"start":{"line":8,"column":2},"end":{"line":8,"column":26}},"5":{"start":{"line":9,"column":2},"end":{"line":9,"column":53}},"6":{"start":{"line":10,"column":2},"end":{"line":10,"column":19}},"7":{"start":{"line":11,"column":2},"end":{"line":11,"column":17}},"8":{"start":{"line":12,"column":2},"end":{"line":12,"column":16}},"9":{"start":{"line":13,"column":2},"end":{"line":13,"column":31}},"10":{"start":{"line":16,"column":0},"end":{"line":20,"column":2}},"11":{"start":{"line":22,"column":0},"end":{"line":28,"column":3}},"12":{"start":{"line":23,"column":2},"end":{"line":27,"column":4}},"13":{"start":{"line":24,"column":4},"end":{"line":24,"column":75}},"14":{"start":{"line":25,"column":4},"end":{"line":25,"column":16}},"15":{"start":{"line":26,"column":4},"end":{"line":26,"column":24}},"16":{"start":{"line":30,"column":0},"end":{"line":34,"column":3}},"17":{"start":{"line":32,"column":4},"end":{"line":32,"column":43}},"18":{"start":{"line":36,"column":0},"end":{"line":53,"column":2}},"19":{"start":{"line":37,"column":2},"end":{"line":39,"column":3}},"20":{"start":{"line":38,"column":4},"end":{"line":38,"column":11}},"21":{"start":{"line":40,"column":2},"end":{"line":45,"column":3}},"22":{"start":{"line":41,"column":4},"end":{"line":41,"column":32}},"23":{"start":{"line":42,"column":4},"end":{"line":42,"column":19}},"24":{"start":{"line":43,"column":4},"end":{"line":43,"column":20}},"25":{"start":{"line":44,"column":4},"end":{"line":44,"column":16}},"26":{"start":{"line":47,"column":2},"end":{"line":52,"column":3}},"27":{"start":{"line":48,"column":4},"end":{"line":51,"column":5}},"28":{"start":{"line":49,"column":6},"end":{"line":49,"column":30}},"29":{"start":{"line":50,"column":6},"end":{"line":50,"column":27}},"30":{"start":{"line":55,"column":0},"end":{"line":60,"column":2}},"31":{"start":{"line":56,"column":2},"end":{"line":59,"column":3}},"32":{"start":{"line":57,"column":4},"end":{"line":57,"column":22}},"33":{"start":{"line":58,"column":4},"end":{"line":58,"column":16}},"34":{"start":{"line":62,"column":0},"end":{"line":65,"column":1}},"35":{"start":{"line":63,"column":2},"end":{"line":63,"column":17}},"36":{"start":{"line":64,"column":2},"end":{"line":64,"column":14}},"37":{"start":{"line":67,"column":0},"end":{"line":67,"column":23}}},"branchMap":{"1":{"line":4,"type":"if","locations":[{"start":{"line":4,"column":2},"end":{"line":4,"column":2}},{"start":{"line":4,"column":2},"end":{"line":4,"column":2}}]},"2":{"line":8,"type":"binary-expr","locations":[{"start":{"line":8,"column":12},"end":{"line":8,"column":19}},{"start":{"line":8,"column":23},"end":{"line":8,"column":25}}]},"3":{"line":9,"type":"binary-expr","locations":[{"start":{"line":9,"column":21},"end":{"line":9,"column":40}},{"start":{"line":9,"column":44},"end":{"line":9,"column":52}}]},"4":{"line":37,"type":"if","locations":[{"start":{"line":37,"column":2},"end":{"line":37,"column":2}},{"start":{"line":37,"column":2},"end":{"line":37,"column":2}}]},"5":{"line":40,"type":"if","locations":[{"start":{"line":40,"column":2},"end":{"line":40,"column":2}},{"start":{"line":40,"column":2},"end":{"line":40,"column":2}}]},"6":{"line":47,"type":"if","locations":[{"start":{"line":47,"column":2},"end":{"line":47,"column":2}},{"start":{"line":47,"column":2},"end":{"line":47,"column":2}}]},"7":{"line":56,"type":"if","locations":[{"start":{"line":56,"column":2},"end":{"line":56,"column":2}},{"start":{"line":56,"column":2},"end":{"line":56,"column":2}}]}}}}
datalab/web/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Code coverage report for async-throttle/</title>
5
+ <meta charset="utf-8">
6
+ <link rel="stylesheet" href="../prettify.css">
7
+ <link rel="stylesheet" href="../base.css">
8
+ <style type='text/css'>
9
+ div.coverage-summary .sorter {
10
+ background-image: url(../sort-arrow-sprite.png);
11
+ }
12
+ </style>
13
+ </head>
14
+ <body>
15
+ <div class="header high">
16
+ <h1>Code coverage report for <span class="entity">async-throttle/</span></h1>
17
+ <h2>
18
+ Statements: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
19
+ Branches: <span class="metric">92.86% <small>(13 / 14)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
20
+ Functions: <span class="metric">100% <small>(7 / 7)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
21
+ Lines: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
22
+ Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
23
+ </h2>
24
+ <div class="path"><a href="../index.html">All files</a> &#187; async-throttle/</div>
25
+ </div>
26
+ <div class="body">
27
+ <div class="coverage-summary">
28
+ <table>
29
+ <thead>
30
+ <tr>
31
+ <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
32
+ <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
33
+ <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
34
+ <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
35
+ <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
36
+ <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
37
+ <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
38
+ <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
39
+ <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
40
+ <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
41
+ </tr>
42
+ </thead>
43
+ <tbody><tr>
44
+ <td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
45
+ <td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
46
+ <td data-value="100" class="pct high">100%</td>
47
+ <td data-value="37" class="abs high">(37&nbsp;/&nbsp;37)</td>
48
+ <td data-value="92.86" class="pct high">92.86%</td>
49
+ <td data-value="14" class="abs high">(13&nbsp;/&nbsp;14)</td>
50
+ <td data-value="100" class="pct high">100%</td>
51
+ <td data-value="7" class="abs high">(7&nbsp;/&nbsp;7)</td>
52
+ <td data-value="100" class="pct high">100%</td>
53
+ <td data-value="37" class="abs high">(37&nbsp;/&nbsp;37)</td>
54
+ </tr>
55
+
56
+ </tbody>
57
+ </table>
58
+ </div>
59
+ </div>
60
+ <div class="footer">
61
+ <div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Sep 11 2017 11:14:14 GMT-0500 (CDT)</div>
62
+ </div>
63
+ <script src="../prettify.js"></script>
64
+ <script>
65
+ window.onload = function () {
66
+ if (typeof prettyPrint === 'function') {
67
+ prettyPrint();
68
+ }
69
+ };
70
+ </script>
71
+ <script src="../sorter.js"></script>
72
+ </body>
73
+ </html>
datalab/web/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Code coverage report for async-throttle/index.js</title>
5
+ <meta charset="utf-8">
6
+ <link rel="stylesheet" href="../prettify.css">
7
+ <link rel="stylesheet" href="../base.css">
8
+ <style type='text/css'>
9
+ div.coverage-summary .sorter {
10
+ background-image: url(../sort-arrow-sprite.png);
11
+ }
12
+ </style>
13
+ </head>
14
+ <body>
15
+ <div class="header high">
16
+ <h1>Code coverage report for <span class="entity">async-throttle/index.js</span></h1>
17
+ <h2>
18
+ Statements: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
19
+ Branches: <span class="metric">92.86% <small>(13 / 14)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
20
+ Functions: <span class="metric">100% <small>(7 / 7)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
21
+ Lines: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
22
+ Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
23
+ </h2>
24
+ <div class="path"><a href="../index.html">All files</a> &#187; <a href="index.html">async-throttle/</a> &#187; index.js</div>
25
+ </div>
26
+ <div class="body">
27
+ <pre><table class="coverage">
28
+ <tr><td class="line-count">1
29
+ 2
30
+ 3
31
+ 4
32
+ 5
33
+ 6
34
+ 7
35
+ 8
36
+ 9
37
+ 10
38
+ 11
39
+ 12
40
+ 13
41
+ 14
42
+ 15
43
+ 16
44
+ 17
45
+ 18
46
+ 19
47
+ 20
48
+ 21
49
+ 22
50
+ 23
51
+ 24
52
+ 25
53
+ 26
54
+ 27
55
+ 28
56
+ 29
57
+ 30
58
+ 31
59
+ 32
60
+ 33
61
+ 34
62
+ 35
63
+ 36
64
+ 37
65
+ 38
66
+ 39
67
+ 40
68
+ 41
69
+ 42
70
+ 43
71
+ 44
72
+ 45
73
+ 46
74
+ 47
75
+ 48
76
+ 49
77
+ 50
78
+ 51
79
+ 52
80
+ 53
81
+ 54
82
+ 55
83
+ 56
84
+ 57
85
+ 58
86
+ 59
87
+ 60
88
+ 61
89
+ 62
90
+ 63
91
+ 64
92
+ 65
93
+ 66
94
+ 67
95
+ 68</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
96
+ <span class="cline-any cline-neutral">&nbsp;</span>
97
+ <span class="cline-any cline-yes">1</span>
98
+ <span class="cline-any cline-yes">7</span>
99
+ <span class="cline-any cline-yes">1</span>
100
+ <span class="cline-any cline-neutral">&nbsp;</span>
101
+ <span class="cline-any cline-neutral">&nbsp;</span>
102
+ <span class="cline-any cline-yes">6</span>
103
+ <span class="cline-any cline-yes">6</span>
104
+ <span class="cline-any cline-yes">6</span>
105
+ <span class="cline-any cline-yes">6</span>
106
+ <span class="cline-any cline-yes">6</span>
107
+ <span class="cline-any cline-yes">6</span>
108
+ <span class="cline-any cline-neutral">&nbsp;</span>
109
+ <span class="cline-any cline-neutral">&nbsp;</span>
110
+ <span class="cline-any cline-yes">1</span>
111
+ <span class="cline-any cline-neutral">&nbsp;</span>
112
+ <span class="cline-any cline-neutral">&nbsp;</span>
113
+ <span class="cline-any cline-neutral">&nbsp;</span>
114
+ <span class="cline-any cline-neutral">&nbsp;</span>
115
+ <span class="cline-any cline-neutral">&nbsp;</span>
116
+ <span class="cline-any cline-yes">1</span>
117
+ <span class="cline-any cline-yes">3</span>
118
+ <span class="cline-any cline-yes">13</span>
119
+ <span class="cline-any cline-yes">13</span>
120
+ <span class="cline-any cline-yes">13</span>
121
+ <span class="cline-any cline-neutral">&nbsp;</span>
122
+ <span class="cline-any cline-neutral">&nbsp;</span>
123
+ <span class="cline-any cline-neutral">&nbsp;</span>
124
+ <span class="cline-any cline-yes">1</span>
125
+ <span class="cline-any cline-neutral">&nbsp;</span>
126
+ <span class="cline-any cline-yes">19</span>
127
+ <span class="cline-any cline-neutral">&nbsp;</span>
128
+ <span class="cline-any cline-neutral">&nbsp;</span>
129
+ <span class="cline-any cline-neutral">&nbsp;</span>
130
+ <span class="cline-any cline-yes">1</span>
131
+ <span class="cline-any cline-yes">45</span>
132
+ <span class="cline-any cline-yes">6</span>
133
+ <span class="cline-any cline-neutral">&nbsp;</span>
134
+ <span class="cline-any cline-yes">39</span>
135
+ <span class="cline-any cline-yes">13</span>
136
+ <span class="cline-any cline-yes">13</span>
137
+ <span class="cline-any cline-yes">13</span>
138
+ <span class="cline-any cline-yes">13</span>
139
+ <span class="cline-any cline-neutral">&nbsp;</span>
140
+ <span class="cline-any cline-neutral">&nbsp;</span>
141
+ <span class="cline-any cline-yes">39</span>
142
+ <span class="cline-any cline-yes">18</span>
143
+ <span class="cline-any cline-yes">6</span>
144
+ <span class="cline-any cline-yes">6</span>
145
+ <span class="cline-any cline-neutral">&nbsp;</span>
146
+ <span class="cline-any cline-neutral">&nbsp;</span>
147
+ <span class="cline-any cline-neutral">&nbsp;</span>
148
+ <span class="cline-any cline-neutral">&nbsp;</span>
149
+ <span class="cline-any cline-yes">1</span>
150
+ <span class="cline-any cline-yes">6</span>
151
+ <span class="cline-any cline-yes">6</span>
152
+ <span class="cline-any cline-yes">6</span>
153
+ <span class="cline-any cline-neutral">&nbsp;</span>
154
+ <span class="cline-any cline-neutral">&nbsp;</span>
155
+ <span class="cline-any cline-neutral">&nbsp;</span>
156
+ <span class="cline-any cline-yes">1</span>
157
+ <span class="cline-any cline-yes">13</span>
158
+ <span class="cline-any cline-yes">13</span>
159
+ <span class="cline-any cline-neutral">&nbsp;</span>
160
+ <span class="cline-any cline-neutral">&nbsp;</span>
161
+ <span class="cline-any cline-yes">1</span>
162
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict';
163
+ &nbsp;
164
+ function Queue(options) {
165
+ if (!(this instanceof Queue)) {
166
+ return new Queue(options);
167
+ }
168
+ &nbsp;
169
+ options = options || {};
170
+ this.concurrency = options.concurrency || Infinity;
171
+ this.pending = 0;
172
+ this.jobs = [];
173
+ this.cbs = [];
174
+ this._done = done.bind(this);
175
+ }
176
+ &nbsp;
177
+ var arrayAddMethods = [
178
+ 'push',
179
+ 'unshift',
180
+ 'splice'
181
+ ];
182
+ &nbsp;
183
+ arrayAddMethods.forEach(function(method) {
184
+ Queue.prototype[method] = function() {
185
+ var methodResult = Array.prototype[method].apply(this.jobs, arguments);
186
+ this._run();
187
+ return methodResult;
188
+ };
189
+ });
190
+ &nbsp;
191
+ Object.defineProperty(Queue.prototype, 'length', {
192
+ get: function() {
193
+ return this.pending + this.jobs.length;
194
+ }
195
+ });
196
+ &nbsp;
197
+ Queue.prototype._run = function() {
198
+ if (this.pending === this.concurrency) {
199
+ return;
200
+ }
201
+ if (this.jobs.length) {
202
+ var job = this.jobs.shift();
203
+ this.pending++;
204
+ job(this._done);
205
+ this._run();
206
+ }
207
+ &nbsp;
208
+ if (this.pending === 0) {
209
+ while (this.cbs.length !== 0) {
210
+ var cb = this.cbs.pop();
211
+ process.nextTick(cb);
212
+ }
213
+ }
214
+ };
215
+ &nbsp;
216
+ Queue.prototype.onDone = function(cb) {
217
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (typeof cb === 'function') {
218
+ this.cbs.push(cb);
219
+ this._run();
220
+ }
221
+ };
222
+ &nbsp;
223
+ function done() {
224
+ this.pending--;
225
+ this._run();
226
+ }
227
+ &nbsp;
228
+ module.exports = Queue;
229
+ &nbsp;</pre></td></tr>
230
+ </table></pre>
231
+
232
+ </div>
233
+ <div class="footer">
234
+ <div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Sep 11 2017 11:14:14 GMT-0500 (CDT)</div>
235
+ </div>
236
+ <script src="../prettify.js"></script>
237
+ <script>
238
+ window.onload = function () {
239
+ if (typeof prettyPrint === 'function') {
240
+ prettyPrint();
241
+ }
242
+ };
243
+ </script>
244
+ <script src="../sorter.js"></script>
245
+ </body>
246
+ </html>
datalab/web/node_modules/async-limiter/coverage/lcov-report/base.css ADDED
@@ -0,0 +1,182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body, html {
2
+ margin:0; padding: 0;
3
+ }
4
+ body {
5
+ font-family: Helvetica Neue, Helvetica,Arial;
6
+ font-size: 10pt;
7
+ }
8
+ div.header, div.footer {
9
+ background: #eee;
10
+ padding: 1em;
11
+ }
12
+ div.header {
13
+ z-index: 100;
14
+ position: fixed;
15
+ top: 0;
16
+ border-bottom: 1px solid #666;
17
+ width: 100%;
18
+ }
19
+ div.footer {
20
+ border-top: 1px solid #666;
21
+ }
22
+ div.body {
23
+ margin-top: 10em;
24
+ }
25
+ div.meta {
26
+ font-size: 90%;
27
+ text-align: center;
28
+ }
29
+ h1, h2, h3 {
30
+ font-weight: normal;
31
+ }
32
+ h1 {
33
+ font-size: 12pt;
34
+ }
35
+ h2 {
36
+ font-size: 10pt;
37
+ }
38
+ pre {
39
+ font-family: Consolas, Menlo, Monaco, monospace;
40
+ margin: 0;
41
+ padding: 0;
42
+ line-height: 1.3;
43
+ font-size: 14px;
44
+ -moz-tab-size: 2;
45
+ -o-tab-size: 2;
46
+ tab-size: 2;
47
+ }
48
+
49
+ div.path { font-size: 110%; }
50
+ div.path a:link, div.path a:visited { color: #000; }
51
+ table.coverage { border-collapse: collapse; margin:0; padding: 0 }
52
+
53
+ table.coverage td {
54
+ margin: 0;
55
+ padding: 0;
56
+ color: #111;
57
+ vertical-align: top;
58
+ }
59
+ table.coverage td.line-count {
60
+ width: 50px;
61
+ text-align: right;
62
+ padding-right: 5px;
63
+ }
64
+ table.coverage td.line-coverage {
65
+ color: #777 !important;
66
+ text-align: right;
67
+ border-left: 1px solid #666;
68
+ border-right: 1px solid #666;
69
+ }
70
+
71
+ table.coverage td.text {
72
+ }
73
+
74
+ table.coverage td span.cline-any {
75
+ display: inline-block;
76
+ padding: 0 5px;
77
+ width: 40px;
78
+ }
79
+ table.coverage td span.cline-neutral {
80
+ background: #eee;
81
+ }
82
+ table.coverage td span.cline-yes {
83
+ background: #b5d592;
84
+ color: #999;
85
+ }
86
+ table.coverage td span.cline-no {
87
+ background: #fc8c84;
88
+ }
89
+
90
+ .cstat-yes { color: #111; }
91
+ .cstat-no { background: #fc8c84; color: #111; }
92
+ .fstat-no { background: #ffc520; color: #111 !important; }
93
+ .cbranch-no { background: yellow !important; color: #111; }
94
+
95
+ .cstat-skip { background: #ddd; color: #111; }
96
+ .fstat-skip { background: #ddd; color: #111 !important; }
97
+ .cbranch-skip { background: #ddd !important; color: #111; }
98
+
99
+ .missing-if-branch {
100
+ display: inline-block;
101
+ margin-right: 10px;
102
+ position: relative;
103
+ padding: 0 4px;
104
+ background: black;
105
+ color: yellow;
106
+ }
107
+
108
+ .skip-if-branch {
109
+ display: none;
110
+ margin-right: 10px;
111
+ position: relative;
112
+ padding: 0 4px;
113
+ background: #ccc;
114
+ color: white;
115
+ }
116
+
117
+ .missing-if-branch .typ, .skip-if-branch .typ {
118
+ color: inherit !important;
119
+ }
120
+
121
+ .entity, .metric { font-weight: bold; }
122
+ .metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }
123
+ .metric small { font-size: 80%; font-weight: normal; color: #666; }
124
+
125
+ div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }
126
+ div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }
127
+ div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }
128
+ div.coverage-summary th.file { border-right: none !important; }
129
+ div.coverage-summary th.pic { border-left: none !important; text-align: right; }
130
+ div.coverage-summary th.pct { border-right: none !important; }
131
+ div.coverage-summary th.abs { border-left: none !important; text-align: right; }
132
+ div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }
133
+ div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }
134
+ div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; }
135
+ div.coverage-summary td.pic { min-width: 120px !important; }
136
+ div.coverage-summary a:link { text-decoration: none; color: #000; }
137
+ div.coverage-summary a:visited { text-decoration: none; color: #777; }
138
+ div.coverage-summary a:hover { text-decoration: underline; }
139
+ div.coverage-summary tfoot td { border-top: 1px solid #666; }
140
+
141
+ div.coverage-summary .sorter {
142
+ height: 10px;
143
+ width: 7px;
144
+ display: inline-block;
145
+ margin-left: 0.5em;
146
+ background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
147
+ }
148
+ div.coverage-summary .sorted .sorter {
149
+ background-position: 0 -20px;
150
+ }
151
+ div.coverage-summary .sorted-desc .sorter {
152
+ background-position: 0 -10px;
153
+ }
154
+
155
+ .high { background: #b5d592 !important; }
156
+ .medium { background: #ffe87c !important; }
157
+ .low { background: #fc8c84 !important; }
158
+
159
+ span.cover-fill, span.cover-empty {
160
+ display:inline-block;
161
+ border:1px solid #444;
162
+ background: white;
163
+ height: 12px;
164
+ }
165
+ span.cover-fill {
166
+ background: #ccc;
167
+ border-right: 1px solid #444;
168
+ }
169
+ span.cover-empty {
170
+ background: white;
171
+ border-left: none;
172
+ }
173
+ span.cover-full {
174
+ border-right: none !important;
175
+ }
176
+ pre.prettyprint {
177
+ border: none !important;
178
+ padding: 0 !important;
179
+ margin: 0 !important;
180
+ }
181
+ .com { color: #999 !important; }
182
+ .ignore-none { color: #999; font-weight: normal; }
datalab/web/node_modules/async-limiter/coverage/lcov-report/index.html ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Code coverage report for All files</title>
5
+ <meta charset="utf-8">
6
+ <link rel="stylesheet" href="prettify.css">
7
+ <link rel="stylesheet" href="base.css">
8
+ <style type='text/css'>
9
+ div.coverage-summary .sorter {
10
+ background-image: url(sort-arrow-sprite.png);
11
+ }
12
+ </style>
13
+ </head>
14
+ <body>
15
+ <div class="header high">
16
+ <h1>Code coverage report for <span class="entity">All files</span></h1>
17
+ <h2>
18
+ Statements: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
19
+ Branches: <span class="metric">92.86% <small>(13 / 14)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
20
+ Functions: <span class="metric">100% <small>(7 / 7)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
21
+ Lines: <span class="metric">100% <small>(37 / 37)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
22
+ Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
23
+ </h2>
24
+ <div class="path"></div>
25
+ </div>
26
+ <div class="body">
27
+ <div class="coverage-summary">
28
+ <table>
29
+ <thead>
30
+ <tr>
31
+ <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
32
+ <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
33
+ <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
34
+ <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
35
+ <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
36
+ <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
37
+ <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
38
+ <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
39
+ <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
40
+ <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
41
+ </tr>
42
+ </thead>
43
+ <tbody><tr>
44
+ <td class="file high" data-value="async-throttle/"><a href="async-throttle/index.html">async-throttle/</a></td>
45
+ <td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
46
+ <td data-value="100" class="pct high">100%</td>
47
+ <td data-value="37" class="abs high">(37&nbsp;/&nbsp;37)</td>
48
+ <td data-value="92.86" class="pct high">92.86%</td>
49
+ <td data-value="14" class="abs high">(13&nbsp;/&nbsp;14)</td>
50
+ <td data-value="100" class="pct high">100%</td>
51
+ <td data-value="7" class="abs high">(7&nbsp;/&nbsp;7)</td>
52
+ <td data-value="100" class="pct high">100%</td>
53
+ <td data-value="37" class="abs high">(37&nbsp;/&nbsp;37)</td>
54
+ </tr>
55
+
56
+ </tbody>
57
+ </table>
58
+ </div>
59
+ </div>
60
+ <div class="footer">
61
+ <div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Sep 11 2017 11:14:14 GMT-0500 (CDT)</div>
62
+ </div>
63
+ <script src="prettify.js"></script>
64
+ <script>
65
+ window.onload = function () {
66
+ if (typeof prettyPrint === 'function') {
67
+ prettyPrint();
68
+ }
69
+ };
70
+ </script>
71
+ <script src="sorter.js"></script>
72
+ </body>
73
+ </html>
datalab/web/node_modules/async-limiter/coverage/lcov-report/prettify.css ADDED
@@ -0,0 +1 @@
 
 
1
+ .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
datalab/web/node_modules/async-limiter/coverage/lcov-report/prettify.js ADDED
@@ -0,0 +1 @@
 
 
1
+ window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);