build-strap 3.0.0 → 4.0.0-dev.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/artifactory.js +1 -1
- package/cert.js +1 -1
- package/copy.js +1 -1
- package/copy.js.flow +1 -1
- package/cp.js +1 -1
- package/docker.container.js +1 -1
- package/docker.js +4 -7
- package/docker.js.flow +2 -5
- package/docker.network.js +1 -1
- package/docker.volume.js +1 -1
- package/dockerCleanup.js +1 -1
- package/dockerCompose.js +4 -4
- package/fs.js +1 -1
- package/git.js +1 -1
- package/hg.js +1 -1
- package/inline-resources.js +1 -1
- package/maps.js +1 -1
- package/package.json +3 -3
- package/pkg.js +1 -1
- package/run.js +1 -1
- package/src/copy.js +1 -1
- package/src/docker.js +2 -5
- package/src/version.js +9 -8
- package/version.js +11 -10
- package/version.js.flow +9 -8
- package/yarn.js +1 -1
package/LICENSE
CHANGED
package/artifactory.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.artifactoryCleanup = artifactoryCleanup;exports.artifactoryDelete = artifactoryDelete;exports.artifactoryNpm = artifactoryNpm;exports.artifactoryPut = artifactoryPut;exports.artifactoryRequest = artifactoryRequest;exports.artifactoryStandard = artifactoryStandard;exports.downloadRepositoryFile = downloadRepositoryFile;exports.getArtifactoryConfig = getArtifactoryConfig;exports.getLatestRepositoryVersion = getLatestRepositoryVersion;exports.getNpmArtifacts = getNpmArtifacts;exports.parseVersionedFilePath = parseVersionedFilePath;
|
|
2
2
|
var _path = _interopRequireDefault(require("path"));
|
|
3
3
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
4
4
|
var _requestPromiseNative = _interopRequireDefault(require("request-promise-native"));
|
package/cert.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.generateCert = generateCert;exports.getCertConfig = getCertConfig;exports.getIpAddresses = getIpAddresses;
|
|
2
2
|
var _os = _interopRequireDefault(require("os"));
|
|
3
3
|
var _requestPromiseNative = _interopRequireDefault(require("request-promise-native"));
|
|
4
4
|
var _path = _interopRequireDefault(require("path"));
|
package/copy.js
CHANGED
|
@@ -77,4 +77,4 @@ async function copySrc({
|
|
|
77
77
|
(0, _cp.onKillSignal)(() => watcher.close());
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3B5LmpzIl0sIm5hbWVzIjpbInRpbWVyIiwidGhyb3R0bGVkQ2FsbGJhY2siLCJjYkZuIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImNvcHlTcmMiLCJmcm9tIiwidG8iLCJ3YXRjaCIsInByb2Nlc3MiLCJhcmd2IiwiaW5jbHVkZXMiLCJ3YXRjaGVyIiwiY2hva2lkYXIiLCJwYXRoIiwiam9pbiIsImlnbm9yZUluaXRpYWwiLCJvbiIsImV2ZW50IiwiZmlsZVBhdGgiLCJzdGFydCIsIkRhdGUiLCJzcmMiLCJyZWxhdGl2ZSIsImRlc3QiLCJkaXJuYW1lIiwibm9zb3J0IiwiZG90IiwiZGVwZW5kZW5jaWVzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImRlcCIsInRvQ29weSIsImVuZCIsInRpbWUiLCJnZXRUaW1lIiwiY2xvc2UiXSwibWFwcGluZ3MiOiI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUQ7O0FBRUEsSUFBSUEsS0FBSyxHQUFHLElBQVo7QUFDQSxlQUFlQyxpQkFBZixDQUFpQ0MsSUFBakMsRUFBdUM7QUFDckMsTUFBSSxDQUFDQSxJQUFELElBQVMsT0FBT0EsSUFBUCxLQUFnQixVQUE3QixFQUF5QztBQUN2QztBQUNEO0FBQ0QsTUFBSUYsS0FBSixFQUFXO0FBQ1RHLElBQUFBLFlBQVksQ0FBQ0gsS0FBRCxDQUFaO0FBQ0FBLElBQUFBLEtBQUssR0FBRyxJQUFSO0FBQ0Q7QUFDREEsRUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUMsTUFBTTtBQUN2QkosSUFBQUEsS0FBSyxHQUFHLElBQVI7QUFDQUUsSUFBQUEsSUFBSTtBQUNMLEdBSGlCLEVBR2YsR0FIZSxDQUFsQjtBQUlEOzs7Ozs7Ozs7QUFTTSxlQUFlRyxPQUFmLENBQXVCO0FBQzVCQyxFQUFBQSxJQUQ0QjtBQUU1QkMsRUFBQUEsRUFGNEI7QUFHNUJDLEVBQUFBLEtBQUssR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWFDLFFBQWIsQ0FBc0IsU0FBdEIsQ0FIb0I7QUFJNUJULEVBQUFBLElBSjRCO0FBS1YsRUFMYixFQUtnQztBQUNyQyxRQUFNLGlCQUFRSSxJQUFSLEVBQWNDLEVBQWQsQ0FBTjtBQUNBLE1BQUlMLElBQUosRUFBVSxNQUFNQSxJQUFJLEVBQVY7QUFDVixNQUFJTSxLQUFKLEVBQVc7QUFDVCxVQUFNSSxPQUFPLEdBQUdDLGtCQUFTTCxLQUFULENBQWUsQ0FBQ00sY0FBS0MsSUFBTCxDQUFVVCxJQUFWLEVBQWdCLE9BQWhCLENBQUQsQ0FBZixFQUEyQztBQUN6RFUsTUFBQUEsYUFBYSxFQUFFLElBRDBDLEVBQTNDLENBQWhCOzs7QUFJQUosSUFBQUEsT0FBTyxDQUFDSyxFQUFSLENBQVcsS0FBWCxFQUFrQixPQUFPQyxLQUFQLEVBQWNDLFFBQWQsS0FBMkI7QUFDM0MsWUFBTUMsS0FBSyxHQUFHLElBQUlDLElBQUosRUFBZDtBQUNBLFlBQU1DLEdBQUcsR0FBR1IsY0FBS1MsUUFBTCxDQUFjakIsSUFBZCxFQUFvQmEsUUFBcEIsQ0FBWjtBQUNBLFlBQU1LLElBQUksR0FBR1YsY0FBS0MsSUFBTCxDQUFVUixFQUFWLEVBQWNlLEdBQWQsQ0FBYjtBQUNBLGNBQVFKLEtBQVI7QUFDRSxhQUFLLEtBQUw7QUFDQSxhQUFLLFFBQUw7QUFDRSxnQkFBTSxpQkFBUUosY0FBS1csT0FBTCxDQUFhRCxJQUFiLENBQVIsQ0FBTjtBQUNBLGdCQUFNLGtCQUFTTCxRQUFULEVBQW1CSyxJQUFuQixDQUFOO0FBQ0E7QUFDRixhQUFLLFFBQUw7QUFDQSxhQUFLLFdBQUw7QUFDRSw0QkFBU0EsSUFBVCxFQUFlLEVBQUVFLE1BQU0sRUFBRSxJQUFWLEVBQWdCQyxHQUFHLEVBQUUsSUFBckIsRUFBZjtBQUNBO0FBQ0Y7QUFDRSxpQkFYSjs7QUFhQTtBQUNBLFVBQUlDLDhCQUFhSixJQUFiLENBQUosRUFBd0I7QUFDdEIsY0FBTUssT0FBTyxDQUFDQyxHQUFSO0FBQ0pGLHNDQUFhSixJQUFiLEVBQW1CTyxHQUFuQixDQUF1QixPQUFPQyxHQUFQLEtBQWU7QUFDcEMsZ0JBQU1DLE1BQU0sR0FBR25CLGNBQUtDLElBQUwsQ0FBVVQsSUFBVixFQUFnQlEsY0FBS1MsUUFBTCxDQUFjaEIsRUFBZCxFQUFrQnlCLEdBQWxCLENBQWhCLENBQWY7QUFDQSxnQkFBTSxrQkFBU0MsTUFBVCxFQUFpQkQsR0FBakIsQ0FBTjtBQUNBLDZCQUFVLFdBQVVBLEdBQUksNkJBQXhCO0FBQ0QsU0FKRCxDQURJLENBQU47O0FBT0Q7QUFDRCxZQUFNRSxHQUFHLEdBQUcsSUFBSWIsSUFBSixFQUFaO0FBQ0EsWUFBTWMsSUFBSSxHQUFHRCxHQUFHLENBQUNFLE9BQUosS0FBZ0JoQixLQUFLLENBQUNnQixPQUFOLEVBQTdCO0FBQ0EseUJBQVUsR0FBRWxCLEtBQU0sS0FBSU0sSUFBSyxXQUFVVyxJQUFLLEtBQTFDLEVBQWdERCxHQUFoRDtBQUNBakMsTUFBQUEsaUJBQWlCLENBQUNDLElBQUQsQ0FBakI7QUFDRCxLQS9CRDs7QUFpQ0EsMEJBQWEsTUFBTVUsT0FBTyxDQUFDeUIsS0FBUixFQUFuQjtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY2hva2lkYXIgZnJvbSAnY2hva2lkYXInO1xuaW1wb3J0IHsgY29weUZpbGUsIG1ha2VEaXIsIGNvcHlEaXIsIGNsZWFuRGlyIH0gZnJvbSAnLi9mcyc7XG5pbXBvcnQgeyBvbktpbGxTaWduYWwgfSBmcm9tICcuL2NwJztcbmltcG9ydCB7IGJ1aWxkTG9nIH0gZnJvbSAnLi9ydW4nO1xuaW1wb3J0IHsgZGVwZW5kZW5jaWVzIH0gZnJvbSAnLi9pbmxpbmUtcmVzb3VyY2VzJztcblxubGV0IHRpbWVyID0gbnVsbDtcbmFzeW5jIGZ1bmN0aW9uIHRocm90dGxlZENhbGxiYWNrKGNiRm4pIHtcbiAgaWYgKCFjYkZuIHx8IHR5cGVvZiBjYkZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0aW1lcikge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICB9XG4gIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgdGltZXIgPSBudWxsO1xuICAgIGNiRm4oKTtcbiAgfSwgMjAwKTtcbn1cblxuZXhwb3J0IHR5cGUgQ29weVNyY09wdGlvbnMgPSB7XG4gIGZyb206IHN0cmluZyxcbiAgdG86IHN0cmluZyxcbiAgd2F0Y2g/OiBib29sZWFuLFxuICBjYkZuPzogKCkgPT4gUHJvbWlzZTxhbnk+IHwgdm9pZCxcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5U3JjKHtcbiAgZnJvbSxcbiAgdG8sXG4gIHdhdGNoID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLXdhdGNoJyksXG4gIGNiRm4sXG59OiBDb3B5U3JjT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGNvcHlEaXIoZnJvbSwgdG8pO1xuICBpZiAoY2JGbikgYXdhaXQgY2JGbigpO1xuICBpZiAod2F0Y2gpIHtcbiAgICBjb25zdCB3YXRjaGVyID0gY2hva2lkYXIud2F0Y2goW3BhdGguam9pbihmcm9tLCAnLyoqLyonKV0sIHtcbiAgICAgIGlnbm9yZUluaXRpYWw6IHRydWUsXG4gICAgfSk7XG5cbiAgICB3YXRjaGVyLm9uKCdhbGwnLCBhc3luYyAoZXZlbnQsIGZpbGVQYXRoKSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBzcmMgPSBwYXRoLnJlbGF0aXZlKGZyb20sIGZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGRlc3QgPSBwYXRoLmpvaW4odG8sIHNyYyk7XG4gICAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgIGNhc2UgJ2NoYW5nZSc6XG4gICAgICAgICAgYXdhaXQgbWFrZURpcihwYXRoLmRpcm5hbWUoZGVzdCkpO1xuICAgICAgICAgIGF3YWl0IGNvcHlGaWxlKGZpbGVQYXRoLCBkZXN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndW5saW5rJzpcbiAgICAgICAgY2FzZSAndW5saW5rRGlyJzpcbiAgICAgICAgICBjbGVhbkRpcihkZXN0LCB7IG5vc29ydDogdHJ1ZSwgZG90OiB0cnVlIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGRlcGVuZGVuY2llc1xuICAgICAgaWYgKGRlcGVuZGVuY2llc1tkZXN0XSkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBkZXBlbmRlbmNpZXNbZGVzdF0ubWFwKGFzeW5jIChkZXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ29weSA9IHBhdGguam9pbihmcm9tLCBwYXRoLnJlbGF0aXZlKHRvLCBkZXApKTtcbiAgICAgICAgICAgIGF3YWl0IGNvcHlGaWxlKHRvQ29weSwgZGVwKTtcbiAgICAgICAgICAgIGJ1aWxkTG9nKGBjb3BpZWQgJyR7ZGVwfScgZHVlIHRvIGNoYW5nZWQgZGVwZW5kZW5jeWApO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZW5kID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IHRpbWUgPSBlbmQuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpO1xuICAgICAgYnVpbGRMb2coYCR7ZXZlbnR9ICcke2Rlc3R9JyBhZnRlciAke3RpbWV9IG1zYCwgZW5kKTtcbiAgICAgIHRocm90dGxlZENhbGxiYWNrKGNiRm4pO1xuICAgIH0pO1xuXG4gICAgb25LaWxsU2lnbmFsKCgpID0+IHdhdGNoZXIuY2xvc2UoKSk7XG4gIH1cbn1cbiJdfQ==
|
package/copy.js.flow
CHANGED
package/cp.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.onKillSignal = exports.exec = void 0;exports.spawn = spawn;exports.spawnAdv = spawnAdv;
|
|
2
2
|
var _child_process = _interopRequireDefault(require("child_process"));
|
|
3
3
|
var _crossSpawn = _interopRequireDefault(require("cross-spawn"));
|
|
4
4
|
var _run = require("./run");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
package/docker.container.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports._dockerContainerLs = _dockerContainerLs;exports.dockerContainerFind = dockerContainerFind;exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports._dockerContainerInspect = _dockerContainerInspect;exports._dockerContainerLs = _dockerContainerLs;exports.dockerContainerFind = dockerContainerFind;exports.dockerContainerInspect = void 0;exports.dockerContainerKill = dockerContainerKill;exports.dockerContainerLs = void 0;exports.dockerContainerRestart = dockerContainerRestart;exports.dockerContainerRm = dockerContainerRm;exports.dockerContainerRun = dockerContainerRun;exports.dockerContainerRunDaemon = dockerContainerRunDaemon;exports.dockerContainerStart = dockerContainerStart;exports.dockerContainerStop = dockerContainerStop;exports.dockerContainerWaitForStart = void 0;exports.dockerTryStopContainer = dockerTryStopContainer;
|
|
2
2
|
var _bytes = _interopRequireDefault(require("bytes"));
|
|
3
3
|
var _throttle = _interopRequireDefault(require("lodash/throttle"));
|
|
4
4
|
var _run = require("./run");
|
package/docker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.copyFilesFromDockerImage = copyFilesFromDockerImage;exports.dockerBuild = dockerBuild;exports.dockerImages = dockerImages;exports.dockerLogin = dockerLogin;exports.dockerPull = dockerPull;exports.dockerPullAndRunContainer = dockerPullAndRunContainer;exports.dockerPush = dockerPush;exports.dockerRmi = dockerRmi;exports.dockerTag = dockerTag;exports.dockerTagVersion = dockerTagVersion;exports.getDockerConfig = getDockerConfig;exports.getDockerDigest = getDockerDigest;exports.getDockerId = getDockerId;exports.getDockerRepo = getDockerRepo;exports.getDockerTags = getDockerTags;exports.getUntaggedDockerIds = getUntaggedDockerIds;exports.parseDockerDate = void 0;
|
|
2
2
|
var _path = _interopRequireDefault(require("path"));
|
|
3
3
|
var _bytes = _interopRequireDefault(require("bytes"));
|
|
4
4
|
var _isReachable = _interopRequireDefault(require("is-reachable"));
|
|
@@ -84,7 +84,7 @@ repo = getDockerRepo())
|
|
|
84
84
|
['latest', `${major}`, `${major}.${minor}`, `${major}.${minor}.${patch}`],
|
|
85
85
|
repo);
|
|
86
86
|
|
|
87
|
-
} else if (branch === (0, _version.getDevBranch)()) {
|
|
87
|
+
} else if (branch === (await (0, _version.getDevBranch)())) {
|
|
88
88
|
await dockerTag(imageId, ['latest-dev'], repo);
|
|
89
89
|
} else if (branch.match(/^(release|patch)-/)) {
|
|
90
90
|
await dockerTag(imageId, ['latest-rc'], repo);
|
|
@@ -229,10 +229,7 @@ async function dockerPull({
|
|
|
229
229
|
offline = process.argv.includes('--offline'),
|
|
230
230
|
testUrl })
|
|
231
231
|
{
|
|
232
|
-
if (
|
|
233
|
-
offline ||
|
|
234
|
-
!(await (0, _isReachable.default)(testUrl || 'https://hub.docker.com')))
|
|
235
|
-
{
|
|
232
|
+
if (offline || !(await (0, _isReachable.default)(testUrl || 'https://hub.docker.com'))) {
|
|
236
233
|
if (offline === false) {
|
|
237
234
|
throw new Error('Offline, cannot docker pull');
|
|
238
235
|
}
|
|
@@ -365,4 +362,4 @@ async function copyFilesFromDockerImage({
|
|
|
365
362
|
throw new Error('Some files failed to copy');
|
|
366
363
|
}
|
|
367
364
|
}
|
|
368
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb2NrZXIuanMiXSwibmFtZXMiOlsiZ2V0RG9ja2VyQ29uZmlnIiwiZG9ja2VyIiwicGFyc2VEb2NrZXJEYXRlIiwiZGF0ZSIsInRvRGF0ZSIsImRvY2tlckJ1aWxkIiwidGFncyIsImJ1aWxkQXJncyIsInRhcmdldCIsImV4dHJhQXJncyIsInJlcG8iLCJnZXREb2NrZXJSZXBvIiwiZG9ja2VyRmlsZSIsIndvcmtEaXIiLCJhcmdzIiwicGF0aCIsInJlc29sdmUiLCJyZWR1Y2UiLCJhciIsInQiLCJhIiwic3RkaW8iLCJkb2NrZXJUYWciLCJpbWFnZUlkIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImRvY2tlclRhZ1ZlcnNpb24iLCJpc1JlbGVhc2UiLCJtYWpvciIsIm1pbm9yIiwicGF0Y2giLCJicmFuY2giLCJtYXRjaCIsImRvY2tlckltYWdlcyIsImZpbHRlciIsImNhcHR1cmVPdXRwdXQiLCJzcGxpdCIsImxpbmUiLCJ0cmltIiwibCIsIlJlcG9zaXRvcnkiLCJyZXBvc2l0b3J5IiwiVGFnIiwidGFnIiwiSUQiLCJpZCIsIkRpZ2VzdCIsImRpZ2VzdCIsIkNyZWF0ZWRBdCIsIlNpemUiLCJKU09OIiwicGFyc2UiLCJjcmVhdGVkIiwic2l6ZSIsImJ5dGVzIiwibSIsImdldERvY2tlcklkIiwiZ2V0VW50YWdnZWREb2NrZXJJZHMiLCJnZXREb2NrZXJUYWdzIiwiZnVsbE5hbWUiLCJnZXREb2NrZXJEaWdlc3QiLCJkb2NrZXJMb2dpbiIsInVzZXIiLCJwYXNzd29yZCIsInJlZ2lzdHJ5IiwicmVnIiwicHJvY2VzcyIsImVudiIsIkFSVElGQUNUT1JZX1VTRVIiLCJBUlRJRkFDVE9SWV9QQVNTV09SRCIsImRvY2tlclB1c2giLCJwcmV2IiwiZG9ja2VyUHVsbCIsImltYWdlIiwib2ZmbGluZSIsImFyZ3YiLCJpbmNsdWRlcyIsInRlc3RVcmwiLCJFcnJvciIsImRvY2tlclJtaSIsImltYWdlcyIsImlnbm9yZUVycm9ycyIsImNhdGNoIiwiZXJyIiwibWVzc2FnZSIsImRrclJlcG8iLCJuYW1lIiwiZGtyTmFtZSIsImRvY2tlclB1bGxBbmRSdW5Db250YWluZXIiLCJvcHRpb25zIiwicnVuQXJncyIsImNtZCIsIm5ldHdvcmsiLCJhbGlhcyIsImNvcHlGaWxlc0Zyb21Eb2NrZXJJbWFnZSIsImZpbGVQYXRocyIsImNvbnRhaW5lciIsInNwYXduT3B0aW9ucyIsInBpcGVPdXRwdXQiLCJjb3B5RXJyb3JzIiwiZm9yRWFjaCIsImZwIiwiZnJvbSIsInRvIiwiZXJyb3IiLCJwdXNoIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUEsMkM7Ozs7Ozs7O0FBUU8sU0FBU0EsZUFBVCxHQUF5QztBQUM5QyxTQUFPLG1CQUFTQyxNQUFULElBQW1CLEVBQTFCO0FBQ0Q7O0FBRU0sTUFBTUMsZUFBZSxHQUFHLENBQUNDLElBQUQ7QUFDN0IscUJBQU9BLElBQVAsRUFBYSx3QkFBYixFQUF1Q0MsTUFBdkMsRUFESyxDOztBQUdBLGVBQWVDLFdBQWY7QUFDTEMsSUFBYyxHQUFHLENBQUMsUUFBRCxDQURaO0FBRUxDLFNBQW1CLEdBQUcsRUFGakI7QUFHTEMsTUFBZSxHQUFHLElBSGI7QUFJTEMsU0FBdUIsR0FBRyxFQUpyQjtBQUtMQyxJQUFZLEdBQUdDLGFBQWEsRUFMdkI7QUFNTEMsVUFBa0IsR0FBRyxjQU5oQjtBQU9MQyxPQUFlLEdBQUcsR0FQYjtBQVFZO0FBQ2pCLFFBQU1DLElBQUksR0FBRztBQUNYLFNBRFc7QUFFWCxLQUFHLENBQUMsSUFBRCxFQUFPQyxjQUFLQyxPQUFMLENBQWFKLFVBQWIsQ0FBUCxDQUZRO0FBR1gsTUFBSUosTUFBTSxHQUFHLENBQUMsVUFBRCxFQUFhQSxNQUFiLENBQUgsR0FBMEIsRUFBcEMsQ0FIVztBQUlYLEtBQUdGLElBQUksQ0FBQ1csTUFBTCxDQUFZLENBQUNDLEVBQUQsRUFBS0MsQ0FBTCxLQUFXLENBQUMsR0FBR0QsRUFBSixF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RCxLQUFQLEVBQWM7QUFDZEwsTUFBQUEsVUFBVSxDQUFDTSxJQUFYLENBQWdCRCxLQUFoQjtBQUNEO0FBQ0Y7O0FBRUQsTUFBSUwsVUFBVSxDQUFDTyxNQUFYLEdBQW9CLENBQXBCLElBQXlCekIsWUFBWSxLQUFLLElBQTlDLEVBQW9EO0FBQ2xELFVBQU0sSUFBSUgsS0FBSixDQUFVLDJCQUFWLENBQU47QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGJ5dGVzIGZyb20gJ2J5dGVzJztcbmltcG9ydCBpc1JlYWNoYWJsZSBmcm9tICdpcy1yZWFjaGFibGUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgYnVpbGRMb2cgfSBmcm9tICcuL3J1bic7XG5pbXBvcnQgeyBnZXRDZmcsIGdldFBrZ05hbWUsIGdldFBrZ1Njb3BlIH0gZnJvbSAnLi9wa2cnO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICcuL2NwJztcbmltcG9ydCB7IGdldFZlcnNpb24sIGdldERldkJyYW5jaCB9IGZyb20gJy4vdmVyc2lvbic7XG5pbXBvcnQge1xuICBkb2NrZXJDb250YWluZXJSdW5EYWVtb24sXG4gIGRvY2tlckNvbnRhaW5lcktpbGwsXG59IGZyb20gJy4vZG9ja2VyLmNvbnRhaW5lcic7XG5pbXBvcnQgeyBkb2NrZXJOZXR3b3JrQ29ubmVjdCB9IGZyb20gJy4vZG9ja2VyLm5ldHdvcmsnO1xuXG5leHBvcnQgdHlwZSBEb2NrZXJDb25maWcgPSB7XG4gIHJlZ2lzdHJ5Pzogc3RyaW5nLFxuICByZXBvc2l0b3J5Pzogc3RyaW5nLFxuICBuYW1lPzogc3RyaW5nLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERvY2tlckNvbmZpZygpOiBEb2NrZXJDb25maWcge1xuICByZXR1cm4gZ2V0Q2ZnKCkuZG9ja2VyIHx8IHt9O1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VEb2NrZXJEYXRlID0gKGRhdGU6IHN0cmluZyk6IERhdGUgPT5cbiAgbW9tZW50KGRhdGUsICdZWVlZLU1NLUREIEhIOm1tOnNzIFpaJykudG9EYXRlKCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb2NrZXJCdWlsZChcbiAgdGFnczogc3RyaW5nW10gPSBbJ2xhdGVzdCddLFxuICBidWlsZEFyZ3M6IHN0cmluZ1tdID0gW10sXG4gIHRhcmdldDogP3N0cmluZyA9IG51bGwsXG4gIGV4dHJhQXJncz86ID8oc3RyaW5nW10pID0gW10sXG4gIHJlcG86IHN0cmluZyA9IGdldERvY2tlclJlcG8oKSxcbiAgZG9ja2VyRmlsZTogc3RyaW5nID0gJy4vRG9ja2VyZmlsZScsXG4gIHdvcmtEaXI6IHN0cmluZyA9ICcuJyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJ2J1aWxkJyxcbiAgICAuLi5bJy1mJywgcGF0aC5yZXNvbHZlKGRvY2tlckZpbGUpXSxcbiAgICAuLi4odGFyZ2V0ID8gWyctLXRhcmdldCcsIHRhcmdldF0gOiBbXSksXG4gICAgLi4udGFncy5yZWR1Y2UoKGFyLCB0KSA9PiBbLi4uYXIsICctdCcsIGAke3JlcG99OiR7dH1gXSwgW10pLFxuICAgIC4uLmJ1aWxkQXJncy5yZWR1Y2UoKGFyLCBhKSA9PiBbLi4uYXIsICctLWJ1aWxkLWFyZycsIGFdLCBbXSksXG4gICAgLi4uKGV4dHJhQXJncyB8fCBbXSksXG4gICAgcGF0aC5yZXNvbHZlKHdvcmtEaXIpLFxuICBdO1xuXG4gIHJldHVybiBzcGF3bignZG9ja2VyJywgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyVGFnKFxuICBpbWFnZUlkOiBzdHJpbmcsXG4gIHRhZ3M6IHN0cmluZ1tdID0gWydsYXRlc3QnXSxcbiAgcmVwbz86IHN0cmluZyA9IGdldERvY2tlclJlcG8oKSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICB0YWdzLm1hcChhc3luYyAodCkgPT4ge1xuICAgICAgYXdhaXQgc3Bhd24oJ2RvY2tlcicsIFsndGFnJywgaW1hZ2VJZCwgYCR7cmVwb306JHt0fWBdKTtcbiAgICAgIGJ1aWxkTG9nKGBUYWdnZWQgaW1hZ2UgJHtpbWFnZUlkfSBhcyAke3JlcG99OiR7dH1gKTtcbiAgICB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBBcHBseSB0aGUgc3RhbmRhcmQgY29udmVudGlvbiBmb3IgdGFnZ2luZyB0aGUgZG9ja2VyIGltYWdlIGZvciB0aGUgcHJvamVjdCxcbiAqIGJhc2VkIG9uIHRoZSBzb3VyY2UgY29udHJvbCBicmFuY2ggYmVpbmcgYnVpbHQuXG4gKiBGb3IgcmVsZWFzZXMsIGFwcGxpZXMgYGxhdGVzdGAsIGBNLm0ucGAsIGBNLm1gLCBgTWBcbiAqIEZvciByZWxlYXNlIGNhbmRpZGF0ZXMsIGFwcGxpZXMgYGxhdGVzdC1yY2BcbiAqIEZvciBmZWF0dXJlIGJyYW5jaGVzLCBhcHBsaWVzIGBsYXRlc3QtZmVhdHVyZWBcbiAqIEZvciBkZXZlbG9wbWVudCBicmFuY2gsIGFwcGxpZXMgYGxhdGVzdC1kZXZgXG4gKiBBbGwgb3RoZXIgYnJhbmNoZXMsIG5vIHRhZyBpcyBhcHBsaWVzXG4gKiBAcGFyYW0ge3N0cmluZ30gaW1hZ2VJZCBpZCBvZiB0aGUgZG9ja2VyIGltYWdlIHRvIHdoaWNoIHRvIGFwcGx5IHRoZSB0YWdzXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbyBvcHRpb25hbCBvdmVycmlkZSBvZiB0aGUgZG9ja2VyIHJlcG8gdXJsIHRvIHVzZSAoZGVyaXZlZCBmcm9tIHBhY2thZ2UuanNvbiBieSBkZWZhdWx0KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyVGFnVmVyc2lvbihcbiAgaW1hZ2VJZDogc3RyaW5nLFxuICByZXBvPzogc3RyaW5nID0gZ2V0RG9ja2VyUmVwbygpLFxuKSB7XG4gIGNvbnN0IHsgaXNSZWxlYXNlLCBtYWpvciwgbWlub3IsIHBhdGNoLCBicmFuY2ggfSA9IGF3YWl0IGdldFZlcnNpb24oKTtcbiAgLy8gZGV0ZXJtaW5lIHdoYXQgdGFncyB0byBhcHBseVxuICBpZiAoaXNSZWxlYXNlKSB7XG4gICAgYXdhaXQgZG9ja2VyVGFnKFxuICAgICAgaW1hZ2VJZCxcbiAgICAgIFsnbGF0ZXN0JywgYCR7bWFqb3J9YCwgYCR7bWFqb3J9LiR7bWlub3J9YCwgYCR7bWFqb3J9LiR7bWlub3J9LiR7cGF0Y2h9YF0sXG4gICAgICByZXBvLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoYnJhbmNoID09PSBnZXREZXZCcmFuY2goKSkge1xuICAgIGF3YWl0IGRvY2tlclRhZyhpbWFnZUlkLCBbJ2xhdGVzdC1kZXYnXSwgcmVwbyk7XG4gIH0gZWxzZSBpZiAoYnJhbmNoLm1hdGNoKC9eKHJlbGVhc2V8cGF0Y2gpLS8pKSB7XG4gICAgYXdhaXQgZG9ja2VyVGFnKGltYWdlSWQsIFsnbGF0ZXN0LXJjJ10sIHJlcG8pO1xuICB9IGVsc2UgaWYgKGJyYW5jaC5tYXRjaCgvXmZlYXR1cmUtLykpIHtcbiAgICBhd2FpdCBkb2NrZXJUYWcoaW1hZ2VJZCwgWydsYXRlc3QtZmVhdHVyZSddLCByZXBvKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBEb2NrZXJJbWFnZSA9IHtcbiAgcmVwb3NpdG9yeTogc3RyaW5nLFxuICB0YWc6IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgZGlnZXN0OiBzdHJpbmcsXG4gIGNyZWF0ZWQ6IERhdGUsXG4gIHNpemU6IG51bWJlcixcbn07XG5cbmV4cG9ydCB0eXBlIERvY2tlckltYWdlRmlsdGVyID0gKGk6IERvY2tlckltYWdlKSA9PiBib29sZWFuO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VySW1hZ2VzKFxuICByZXBvPzogP3N0cmluZyA9IGdldERvY2tlclJlcG8oKSxcbiAgZmlsdGVyPzogP0RvY2tlckltYWdlRmlsdGVyID0gbnVsbCxcbik6IFByb21pc2U8RG9ja2VySW1hZ2VbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IHNwYXduKFxuICAgICAgJ2RvY2tlcicsXG4gICAgICBbJ2ltYWdlcycsICctLWZvcm1hdCcsIGB7e2pzb24gLn19YCwgLi4uKHJlcG8gPyBbcmVwb10gOiBbXSldLFxuICAgICAgeyBjYXB0dXJlT3V0cHV0OiB0cnVlIH0sXG4gICAgKVxuICApXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5maWx0ZXIoKGxpbmUpID0+ICEhbGluZS50cmltKCkpXG4gICAgLm1hcCgobCkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBSZXBvc2l0b3J5OiByZXBvc2l0b3J5LFxuICAgICAgICBUYWc6IHRhZyxcbiAgICAgICAgSUQ6IGlkLFxuICAgICAgICBEaWdlc3Q6IGRpZ2VzdCxcbiAgICAgICAgQ3JlYXRlZEF0LFxuICAgICAgICBTaXplLFxuICAgICAgfSA9IEpTT04ucGFyc2UobC50cmltKCkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVwb3NpdG9yeSxcbiAgICAgICAgdGFnLFxuICAgICAgICBpZCxcbiAgICAgICAgZGlnZXN0LFxuICAgICAgICBjcmVhdGVkOiBwYXJzZURvY2tlckRhdGUoQ3JlYXRlZEF0KSxcbiAgICAgICAgc2l6ZTogYnl0ZXMucGFyc2UoU2l6ZSksXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihcbiAgICAgIChtKSA9PlxuICAgICAgICAobSAmJiBtLmlkKSAhPSBudWxsICYmXG4gICAgICAgICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nID8gZmlsdGVyKG0pIDogdHJ1ZSksXG4gICAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERvY2tlcklkKFxuICB0YWc6IHN0cmluZyA9ICdsYXRlc3QnLFxuICByZXBvPzogP3N0cmluZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgZG9ja2VySW1hZ2VzKHJlcG8sIChtKSA9PiBtLnRhZyA9PT0gdGFnKSkubWFwKChtKSA9PiBtLmlkKVswXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFVudGFnZ2VkRG9ja2VySWRzKFxuICByZXBvPzogP3N0cmluZyxcbiAgZmlsdGVyPzogP0RvY2tlckltYWdlRmlsdGVyID0gbnVsbCxcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBkb2NrZXJJbWFnZXMoXG4gICAgICByZXBvLFxuICAgICAgKG0pID0+XG4gICAgICAgIG0udGFnID09PSAnPG5vbmU+JyAmJiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJyA/IGZpbHRlcihtKSA6IHRydWUpLFxuICAgIClcbiAgKS5tYXAoKG0pID0+IG0uaWQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RG9ja2VyVGFncyhcbiAgaWQ/OiA/c3RyaW5nLFxuICByZXBvPzogP3N0cmluZyxcbiAgZnVsbE5hbWU6IGJvb2xlYW4gPSBmYWxzZSxcbiAgZmlsdGVyPzogP0RvY2tlckltYWdlRmlsdGVyID0gbnVsbCxcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBkb2NrZXJJbWFnZXMoXG4gICAgICByZXBvLFxuICAgICAgKG0pID0+XG4gICAgICAgICghaWQgfHwgbS5pZCA9PT0gaWQpICYmXG4gICAgICAgICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nID8gZmlsdGVyKG0pIDogdHJ1ZSksXG4gICAgKVxuICApLm1hcCgobSkgPT4gKGZ1bGxOYW1lID8gYCR7bS5yZXBvc2l0b3J5fToke20udGFnfWAgOiBtLnRhZykpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RG9ja2VyRGlnZXN0KFxuICBpbWFnZUlkOiBzdHJpbmcsXG4gIHJlcG8/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGRvY2tlckltYWdlcyhyZXBvLCAobSkgPT4gbS5pZCA9PT0gaW1hZ2VJZCkpLm1hcChcbiAgICAobSkgPT4gbS5kaWdlc3QsXG4gIClbMF07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb2NrZXJMb2dpbihcbiAgdXNlcjogc3RyaW5nLFxuICBwYXNzd29yZDogc3RyaW5nLFxuICByZWdpc3RyeTogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlZyA9IHJlZ2lzdHJ5IHx8IGdldERvY2tlckNvbmZpZygpLnJlZ2lzdHJ5O1xuICBhd2FpdCBzcGF3bihcbiAgICAnZG9ja2VyJyxcbiAgICBbXG4gICAgICAnbG9naW4nLFxuICAgICAgJy11JyxcbiAgICAgIHVzZXIgfHwgcHJvY2Vzcy5lbnYuQVJUSUZBQ1RPUllfVVNFUiB8fCAnJyxcbiAgICAgICctcCcsXG4gICAgICBwYXNzd29yZCB8fCBwcm9jZXNzLmVudi5BUlRJRkFDVE9SWV9QQVNTV09SRCB8fCAnJyxcbiAgICAgIC4uLihyZWcgPyBbcmVnXSA6IFtdKSxcbiAgICBdLFxuICAgIHsgc3RkaW86ICdpbmhlcml0JyB9LFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyUHVzaChcbiAgdGFncz86IHN0cmluZ1tdID0gWydsYXRlc3QnXSxcbiAgcmVwbz86IHN0cmluZyA9IGdldERvY2tlclJlcG8oKSxcbikge1xuICAvLyBkbyB0aGlzIHNlcXVlbnRpYWxseSwgc28geW91IGRvbid0IHB1c2ggdGhlIHNhbWUgaW1hZ2Ugc2ltdWx0YW5lb3VzbHlcbiAgYXdhaXQgdGFncy5yZWR1Y2UoYXN5bmMgKHByZXYsIHRhZykgPT4ge1xuICAgIGF3YWl0IHByZXY7XG4gICAgYXdhaXQgc3Bhd24oJ2RvY2tlcicsIFsncHVzaCcsIGAke3JlcG99OiR7dGFnfWBdLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbn1cblxuZXhwb3J0IHR5cGUgRG9ja2VyUHVsbE9wdGlvbnMgPSB7XG4gIGltYWdlOiBzdHJpbmcsXG4gIG9mZmxpbmU/OiBib29sZWFuLFxuICB0ZXN0VXJsPzogP3N0cmluZyxcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb2NrZXJQdWxsKHtcbiAgaW1hZ2UsXG4gIG9mZmxpbmUgPSBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tb2ZmbGluZScpLFxuICB0ZXN0VXJsLFxufTogRG9ja2VyUHVsbE9wdGlvbnMpIHtcbiAgaWYgKFxuICAgIG9mZmxpbmUgfHxcbiAgICAhKGF3YWl0IGlzUmVhY2hhYmxlKHRlc3RVcmwgfHwgJ2h0dHBzOi8vaHViLmRvY2tlci5jb20nKSlcbiAgKSB7XG4gICAgaWYgKG9mZmxpbmUgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09mZmxpbmUsIGNhbm5vdCBkb2NrZXIgcHVsbCcpO1xuICAgIH1cbiAgICBidWlsZExvZygnSXQgbG9va3MgbGlrZSB5b3UgYXJlIG9mZmxpbmUsIHNraXBwaW5nIGRvY2tlciBwdWxsJyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdGhyb3dzIG9uIGZhaWx1cmVcbiAgICBhd2FpdCBzcGF3bignZG9ja2VyJywgWydwdWxsJywgaW1hZ2VdLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvY2tlclJtaShcbiAgaW1hZ2VzOiBzdHJpbmdbXSA9IFtdLFxuICBpZ25vcmVFcnJvcnM6IGJvb2xlYW4gPSB0cnVlLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIG11c3QgZG8gdGhlc2Ugc2VxdWVudGlhbGx5LCBvciB0aGV5IHdpbGwgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlclxuICBhd2FpdCBpbWFnZXMucmVkdWNlKGFzeW5jIChwcmV2LCBpbWFnZSkgPT4ge1xuICAgIGF3YWl0IHByZXY7XG4gICAgYXdhaXQgc3Bhd24oJ2RvY2tlcicsIFsncm1pJywgaW1hZ2VdLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGlnbm9yZUVycm9ycykge1xuICAgICAgICBidWlsZExvZyhcbiAgICAgICAgICBgV2FybmluZyAoaWdub3JlZCBFcnJvcik6IEZhaWxlZCB0byBybSBpbWFnZShzKTogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBQcm9taXNlLnJlc29sdmUoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREb2NrZXJSZXBvKCk6IHN0cmluZyB7XG4gIGNvbnN0IHsgcmVnaXN0cnksIHJlcG9zaXRvcnk6IGRrclJlcG8sIG5hbWU6IGRrck5hbWUgfSA9IGdldERvY2tlckNvbmZpZygpO1xuICBjb25zdCByZXBvc2l0b3J5ID0gZGtyUmVwbyB8fCBnZXRQa2dTY29wZSgpO1xuICBjb25zdCBuYW1lID0gZGtyTmFtZSB8fCBnZXRQa2dOYW1lKGZhbHNlKTtcbiAgaWYgKCFyZXBvc2l0b3J5IHx8ICFuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0RvY2tlciBjb25maWd1cmF0aW9uIGlzIG1pc3Npbmcgb3IgaW5jb21wbGV0ZSBpbiBwYWNrYWdlLmpzb24nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGAke3JlZ2lzdHJ5ID8gYCR7cmVnaXN0cnl9L2AgOiAnJ30ke3JlcG9zaXRvcnl9LyR7bmFtZX1gO1xufVxuXG5leHBvcnQgdHlwZSBQdWxsQW5kUnVuQ29udGFpbmVyT3B0aW9ucyA9IHtcbiAgLi4uRG9ja2VyUHVsbE9wdGlvbnMsXG4gIHJ1bkFyZ3M/OiBzdHJpbmdbXSxcbiAgY21kPzogc3RyaW5nW10sXG4gIG5ldHdvcms/OiA/c3RyaW5nLFxuICBhbGlhcz86ID9zdHJpbmcsXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyUHVsbEFuZFJ1bkNvbnRhaW5lcihcbiAgaW1hZ2U6IHN0cmluZyxcbiAgb3B0aW9uczogUHVsbEFuZFJ1bkNvbnRhaW5lck9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBydW5BcmdzID0gW10sXG4gICAgY21kID0gW10sXG4gICAgbmV0d29yayxcbiAgICBhbGlhcyxcbiAgICBvZmZsaW5lID0gcHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLW9mZmxpbmUnKSxcbiAgICB0ZXN0VXJsLFxuICB9ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGF3YWl0IGRvY2tlclB1bGwoeyBpbWFnZSwgb2ZmbGluZSwgdGVzdFVybCB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYnVpbGRMb2coYGRvY2tlciBwdWxsIGZhaWxlZCAoJHtlcnIubWVzc2FnZX0pLCBhdHRlbXB0aW5nIHRvIGNvbnRpbnVlLi4uYCk7XG4gIH1cbiAgY29uc3QgeyBpZCB9ID0gYXdhaXQgZG9ja2VyQ29udGFpbmVyUnVuRGFlbW9uKHsgaW1hZ2UsIHJ1bkFyZ3MsIGNtZCB9KTtcbiAgaWYgKG5ldHdvcmspIHtcbiAgICBhd2FpdCBkb2NrZXJOZXR3b3JrQ29ubmVjdChuZXR3b3JrLCBpZCwgYWxpYXMpO1xuICB9XG4gIHJldHVybiBpZDtcbn1cblxuZXhwb3J0IHR5cGUgQ29weUZpbGVQYXRoQ29uZmlnID0ge1xuICBmcm9tOiBzdHJpbmcsXG4gIHRvOiBzdHJpbmcsXG59O1xuXG5leHBvcnQgdHlwZSBDb3B5RmlsZXNGcm9tRG9ja2VySW1hZ2VDb25maWcgPSB7XG4gIGltYWdlSWQ6IHN0cmluZyxcbiAgZmlsZVBhdGhzOiBDb3B5RmlsZVBhdGhDb25maWdbXSxcbiAgaWdub3JlRXJyb3JzPzogP2Jvb2xlYW4sXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weUZpbGVzRnJvbURvY2tlckltYWdlKHtcbiAgaW1hZ2VJZCxcbiAgZmlsZVBhdGhzLFxuICBpZ25vcmVFcnJvcnMsXG59OiBDb3B5RmlsZXNGcm9tRG9ja2VySW1hZ2VDb25maWcpOiBQcm9taXNlPGFueT4ge1xuICBjb25zdCBjb250YWluZXIgPSBhd2FpdCBkb2NrZXJDb250YWluZXJSdW5EYWVtb24oe1xuICAgIGltYWdlOiBpbWFnZUlkLFxuICAgIHJ1bkFyZ3M6IFsnLWl0JywgJy0tcm0nLCAnLS1lbnRyeXBvaW50PS9iaW4vYmFzaCddLFxuICAgIGNtZDogWydyZWFkJywgJy1wJywgJ3BhdXNlJ10sXG4gIH0pO1xuXG4gIGJ1aWxkTG9nKGBDb3B5aW5nIEZpbGVzIGZyb20gRG9ja2VyIEltYWdlIC0gaW1hZ2VJZCAoJHtpbWFnZUlkfSlgKTtcblxuICBjb25zdCBzcGF3bk9wdGlvbnMgPSB7XG4gICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICBwaXBlT3V0cHV0OiB0cnVlLFxuICAgIGNhcHR1cmVPdXRwdXQ6IGZhbHNlLFxuICB9O1xuICBjb25zdCBjb3B5RXJyb3JzID0gW107XG5cbiAgdHJ5IHtcbiAgICBmaWxlUGF0aHMuZm9yRWFjaChhc3luYyAoZnApID0+IHtcbiAgICAgIC8vIFRyeSB0byBjb3B5IGZyb20gdGhlIERlYnVnIEZvbGRlclxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc3Bhd24oXG4gICAgICAgICAgJ2RvY2tlcicsXG4gICAgICAgICAgWydjcCcsIGAke2NvbnRhaW5lci5pZH06JHtmcC5mcm9tfWAsIGZwLnRvXSxcbiAgICAgICAgICBzcGF3bk9wdGlvbnMsXG4gICAgICAgICk7XG4gICAgICAgIGJ1aWxkTG9nKGBDb3BpZWQgJHtmcC5mcm9tfSA9PiAke2ZwLnRvfWApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29weUVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgYnVpbGRMb2coYEVycm9yIGNvcHlpbmcgZmlsZSAke2ZwLmZyb219YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRvY2tlckNvbnRhaW5lcktpbGwoY29udGFpbmVyLmlkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29weUVycm9ycy5wdXNoKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29weUVycm9ycy5sZW5ndGggPiAwICYmIGlnbm9yZUVycm9ycyAhPT0gdHJ1ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignU29tZSBmaWxlcyBmYWlsZWQgdG8gY29weScpO1xuICB9XG59XG4iXX0=
|
|
365
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb2NrZXIuanMiXSwibmFtZXMiOlsiZ2V0RG9ja2VyQ29uZmlnIiwiZG9ja2VyIiwicGFyc2VEb2NrZXJEYXRlIiwiZGF0ZSIsInRvRGF0ZSIsImRvY2tlckJ1aWxkIiwidGFncyIsImJ1aWxkQXJncyIsInRhcmdldCIsImV4dHJhQXJncyIsInJlcG8iLCJnZXREb2NrZXJSZXBvIiwiZG9ja2VyRmlsZSIsIndvcmtEaXIiLCJhcmdzIiwicGF0aCIsInJlc29sdmUiLCJyZWR1Y2UiLCJhciIsInQiLCJhIiwic3RkaW8iLCJkb2NrZXJUYWciLCJpbWFnZUlkIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImRvY2tlclRhZ1ZlcnNpb24iLCJpc1JlbGVhc2UiLCJtYWpvciIsIm1pbm9yIiwicGF0Y2giLCJicmFuY2giLCJtYXRjaCIsImRvY2tlckltYWdlcyIsImZpbHRlciIsImNhcHR1cmVPdXRwdXQiLCJzcGxpdCIsImxpbmUiLCJ0cmltIiwibCIsIlJlcG9zaXRvcnkiLCJyZXBvc2l0b3J5IiwiVGFnIiwidGFnIiwiSUQiLCJpZCIsIkRpZ2VzdCIsImRpZ2VzdCIsIkNyZWF0ZWRBdCIsIlNpemUiLCJKU09OIiwicGFyc2UiLCJjcmVhdGVkIiwic2l6ZSIsImJ5dGVzIiwibSIsImdldERvY2tlcklkIiwiZ2V0VW50YWdnZWREb2NrZXJJZHMiLCJnZXREb2NrZXJUYWdzIiwiZnVsbE5hbWUiLCJnZXREb2NrZXJEaWdlc3QiLCJkb2NrZXJMb2dpbiIsInVzZXIiLCJwYXNzd29yZCIsInJlZ2lzdHJ5IiwicmVnIiwicHJvY2VzcyIsImVudiIsIkFSVElGQUNUT1JZX1VTRVIiLCJBUlRJRkFDVE9SWV9QQVNTV09SRCIsImRvY2tlclB1c2giLCJwcmV2IiwiZG9ja2VyUHVsbCIsImltYWdlIiwib2ZmbGluZSIsImFyZ3YiLCJpbmNsdWRlcyIsInRlc3RVcmwiLCJFcnJvciIsImRvY2tlclJtaSIsImltYWdlcyIsImlnbm9yZUVycm9ycyIsImNhdGNoIiwiZXJyIiwibWVzc2FnZSIsImRrclJlcG8iLCJuYW1lIiwiZGtyTmFtZSIsImRvY2tlclB1bGxBbmRSdW5Db250YWluZXIiLCJvcHRpb25zIiwicnVuQXJncyIsImNtZCIsIm5ldHdvcmsiLCJhbGlhcyIsImNvcHlGaWxlc0Zyb21Eb2NrZXJJbWFnZSIsImZpbGVQYXRocyIsImNvbnRhaW5lciIsInNwYXduT3B0aW9ucyIsInBpcGVPdXRwdXQiLCJjb3B5RXJyb3JzIiwiZm9yRWFjaCIsImZwIiwiZnJvbSIsInRvIiwiZXJyb3IiLCJwdXNoIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUEsMkM7Ozs7Ozs7O0FBUU8sU0FBU0EsZUFBVCxHQUF5QztBQUM5QyxTQUFPLG1CQUFTQyxNQUFULElBQW1CLEVBQTFCO0FBQ0Q7O0FBRU0sTUFBTUMsZUFBZSxHQUFHLENBQUNDLElBQUQ7QUFDN0IscUJBQU9BLElBQVAsRUFBYSx3QkFBYixFQUF1Q0MsTUFBdkMsRUFESyxDOztBQUdBLGVBQWVDLFdBQWY7QUFDTEMsSUFBYyxHQUFHLENBQUMsUUFBRCxDQURaO0FBRUxDLFNBQW1CLEdBQUcsRUFGakI7QUFHTEMsTUFBZSxHQUFHLElBSGI7QUFJTEMsU0FBdUIsR0FBRyxFQUpyQjtBQUtMQyxJQUFZLEdBQUdDLGFBQWEsRUFMdkI7QUFNTEMsVUFBa0IsR0FBRyxjQU5oQjtBQU9MQyxPQUFlLEdBQUcsR0FQYjtBQVFZO0FBQ2pCLFFBQU1DLElBQUksR0FBRztBQUNYLFNBRFc7QUFFWCxLQUFHLENBQUMsSUFBRCxFQUFPQyxjQUFLQyxPQUFMLENBQWFKLFVBQWIsQ0FBUCxDQUZRO0FBR1gsTUFBSUosTUFBTSxHQUFHLENBQUMsVUFBRCxFQUFhQSxNQUFiLENBQUgsR0FBMEIsRUFBcEMsQ0FIVztBQUlYLEtBQUdGLElBQUksQ0FBQ1csTUFBTCxDQUFZLENBQUNDLEVBQUQsRUFBS0MsQ0FBTCxLQUFXLENBQUMsR0FBR0QsRUFBSixF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LE9BQU8yRCxLQUFQLEVBQWM7QUFDZEwsTUFBQUEsVUFBVSxDQUFDTSxJQUFYLENBQWdCRCxLQUFoQjtBQUNEO0FBQ0Y7O0FBRUQsTUFBSUwsVUFBVSxDQUFDTyxNQUFYLEdBQW9CLENBQXBCLElBQXlCekIsWUFBWSxLQUFLLElBQTlDLEVBQW9EO0FBQ2xELFVBQU0sSUFBSUgsS0FBSixDQUFVLDJCQUFWLENBQU47QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGJ5dGVzIGZyb20gJ2J5dGVzJztcbmltcG9ydCBpc1JlYWNoYWJsZSBmcm9tICdpcy1yZWFjaGFibGUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgYnVpbGRMb2cgfSBmcm9tICcuL3J1bic7XG5pbXBvcnQgeyBnZXRDZmcsIGdldFBrZ05hbWUsIGdldFBrZ1Njb3BlIH0gZnJvbSAnLi9wa2cnO1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICcuL2NwJztcbmltcG9ydCB7IGdldFZlcnNpb24sIGdldERldkJyYW5jaCB9IGZyb20gJy4vdmVyc2lvbic7XG5pbXBvcnQge1xuICBkb2NrZXJDb250YWluZXJSdW5EYWVtb24sXG4gIGRvY2tlckNvbnRhaW5lcktpbGwsXG59IGZyb20gJy4vZG9ja2VyLmNvbnRhaW5lcic7XG5pbXBvcnQgeyBkb2NrZXJOZXR3b3JrQ29ubmVjdCB9IGZyb20gJy4vZG9ja2VyLm5ldHdvcmsnO1xuXG5leHBvcnQgdHlwZSBEb2NrZXJDb25maWcgPSB7XG4gIHJlZ2lzdHJ5Pzogc3RyaW5nLFxuICByZXBvc2l0b3J5Pzogc3RyaW5nLFxuICBuYW1lPzogc3RyaW5nLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERvY2tlckNvbmZpZygpOiBEb2NrZXJDb25maWcge1xuICByZXR1cm4gZ2V0Q2ZnKCkuZG9ja2VyIHx8IHt9O1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VEb2NrZXJEYXRlID0gKGRhdGU6IHN0cmluZyk6IERhdGUgPT5cbiAgbW9tZW50KGRhdGUsICdZWVlZLU1NLUREIEhIOm1tOnNzIFpaJykudG9EYXRlKCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb2NrZXJCdWlsZChcbiAgdGFnczogc3RyaW5nW10gPSBbJ2xhdGVzdCddLFxuICBidWlsZEFyZ3M6IHN0cmluZ1tdID0gW10sXG4gIHRhcmdldDogP3N0cmluZyA9IG51bGwsXG4gIGV4dHJhQXJncz86ID8oc3RyaW5nW10pID0gW10sXG4gIHJlcG86IHN0cmluZyA9IGdldERvY2tlclJlcG8oKSxcbiAgZG9ja2VyRmlsZTogc3RyaW5nID0gJy4vRG9ja2VyZmlsZScsXG4gIHdvcmtEaXI6IHN0cmluZyA9ICcuJyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJ2J1aWxkJyxcbiAgICAuLi5bJy1mJywgcGF0aC5yZXNvbHZlKGRvY2tlckZpbGUpXSxcbiAgICAuLi4odGFyZ2V0ID8gWyctLXRhcmdldCcsIHRhcmdldF0gOiBbXSksXG4gICAgLi4udGFncy5yZWR1Y2UoKGFyLCB0KSA9PiBbLi4uYXIsICctdCcsIGAke3JlcG99OiR7dH1gXSwgW10pLFxuICAgIC4uLmJ1aWxkQXJncy5yZWR1Y2UoKGFyLCBhKSA9PiBbLi4uYXIsICctLWJ1aWxkLWFyZycsIGFdLCBbXSksXG4gICAgLi4uKGV4dHJhQXJncyB8fCBbXSksXG4gICAgcGF0aC5yZXNvbHZlKHdvcmtEaXIpLFxuICBdO1xuXG4gIHJldHVybiBzcGF3bignZG9ja2VyJywgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyVGFnKFxuICBpbWFnZUlkOiBzdHJpbmcsXG4gIHRhZ3M6IHN0cmluZ1tdID0gWydsYXRlc3QnXSxcbiAgcmVwbz86IHN0cmluZyA9IGdldERvY2tlclJlcG8oKSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICB0YWdzLm1hcChhc3luYyAodCkgPT4ge1xuICAgICAgYXdhaXQgc3Bhd24oJ2RvY2tlcicsIFsndGFnJywgaW1hZ2VJZCwgYCR7cmVwb306JHt0fWBdKTtcbiAgICAgIGJ1aWxkTG9nKGBUYWdnZWQgaW1hZ2UgJHtpbWFnZUlkfSBhcyAke3JlcG99OiR7dH1gKTtcbiAgICB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBBcHBseSB0aGUgc3RhbmRhcmQgY29udmVudGlvbiBmb3IgdGFnZ2luZyB0aGUgZG9ja2VyIGltYWdlIGZvciB0aGUgcHJvamVjdCxcbiAqIGJhc2VkIG9uIHRoZSBzb3VyY2UgY29udHJvbCBicmFuY2ggYmVpbmcgYnVpbHQuXG4gKiBGb3IgcmVsZWFzZXMsIGFwcGxpZXMgYGxhdGVzdGAsIGBNLm0ucGAsIGBNLm1gLCBgTWBcbiAqIEZvciByZWxlYXNlIGNhbmRpZGF0ZXMsIGFwcGxpZXMgYGxhdGVzdC1yY2BcbiAqIEZvciBmZWF0dXJlIGJyYW5jaGVzLCBhcHBsaWVzIGBsYXRlc3QtZmVhdHVyZWBcbiAqIEZvciBkZXZlbG9wbWVudCBicmFuY2gsIGFwcGxpZXMgYGxhdGVzdC1kZXZgXG4gKiBBbGwgb3RoZXIgYnJhbmNoZXMsIG5vIHRhZyBpcyBhcHBsaWVzXG4gKiBAcGFyYW0ge3N0cmluZ30gaW1hZ2VJZCBpZCBvZiB0aGUgZG9ja2VyIGltYWdlIHRvIHdoaWNoIHRvIGFwcGx5IHRoZSB0YWdzXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbyBvcHRpb25hbCBvdmVycmlkZSBvZiB0aGUgZG9ja2VyIHJlcG8gdXJsIHRvIHVzZSAoZGVyaXZlZCBmcm9tIHBhY2thZ2UuanNvbiBieSBkZWZhdWx0KVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyVGFnVmVyc2lvbihcbiAgaW1hZ2VJZDogc3RyaW5nLFxuICByZXBvPzogc3RyaW5nID0gZ2V0RG9ja2VyUmVwbygpLFxuKSB7XG4gIGNvbnN0IHsgaXNSZWxlYXNlLCBtYWpvciwgbWlub3IsIHBhdGNoLCBicmFuY2ggfSA9IGF3YWl0IGdldFZlcnNpb24oKTtcbiAgLy8gZGV0ZXJtaW5lIHdoYXQgdGFncyB0byBhcHBseVxuICBpZiAoaXNSZWxlYXNlKSB7XG4gICAgYXdhaXQgZG9ja2VyVGFnKFxuICAgICAgaW1hZ2VJZCxcbiAgICAgIFsnbGF0ZXN0JywgYCR7bWFqb3J9YCwgYCR7bWFqb3J9LiR7bWlub3J9YCwgYCR7bWFqb3J9LiR7bWlub3J9LiR7cGF0Y2h9YF0sXG4gICAgICByZXBvLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoYnJhbmNoID09PSAoYXdhaXQgZ2V0RGV2QnJhbmNoKCkpKSB7XG4gICAgYXdhaXQgZG9ja2VyVGFnKGltYWdlSWQsIFsnbGF0ZXN0LWRldiddLCByZXBvKTtcbiAgfSBlbHNlIGlmIChicmFuY2gubWF0Y2goL14ocmVsZWFzZXxwYXRjaCktLykpIHtcbiAgICBhd2FpdCBkb2NrZXJUYWcoaW1hZ2VJZCwgWydsYXRlc3QtcmMnXSwgcmVwbyk7XG4gIH0gZWxzZSBpZiAoYnJhbmNoLm1hdGNoKC9eZmVhdHVyZS0vKSkge1xuICAgIGF3YWl0IGRvY2tlclRhZyhpbWFnZUlkLCBbJ2xhdGVzdC1mZWF0dXJlJ10sIHJlcG8pO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIERvY2tlckltYWdlID0ge1xuICByZXBvc2l0b3J5OiBzdHJpbmcsXG4gIHRhZzogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBkaWdlc3Q6IHN0cmluZyxcbiAgY3JlYXRlZDogRGF0ZSxcbiAgc2l6ZTogbnVtYmVyLFxufTtcblxuZXhwb3J0IHR5cGUgRG9ja2VySW1hZ2VGaWx0ZXIgPSAoaTogRG9ja2VySW1hZ2UpID0+IGJvb2xlYW47XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb2NrZXJJbWFnZXMoXG4gIHJlcG8/OiA/c3RyaW5nID0gZ2V0RG9ja2VyUmVwbygpLFxuICBmaWx0ZXI/OiA/RG9ja2VySW1hZ2VGaWx0ZXIgPSBudWxsLFxuKTogUHJvbWlzZTxEb2NrZXJJbWFnZVtdPiB7XG4gIHJldHVybiAoXG4gICAgYXdhaXQgc3Bhd24oXG4gICAgICAnZG9ja2VyJyxcbiAgICAgIFsnaW1hZ2VzJywgJy0tZm9ybWF0JywgYHt7anNvbiAufX1gLCAuLi4ocmVwbyA/IFtyZXBvXSA6IFtdKV0sXG4gICAgICB7IGNhcHR1cmVPdXRwdXQ6IHRydWUgfSxcbiAgICApXG4gIClcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLmZpbHRlcigobGluZSkgPT4gISFsaW5lLnRyaW0oKSlcbiAgICAubWFwKChsKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIFJlcG9zaXRvcnk6IHJlcG9zaXRvcnksXG4gICAgICAgIFRhZzogdGFnLFxuICAgICAgICBJRDogaWQsXG4gICAgICAgIERpZ2VzdDogZGlnZXN0LFxuICAgICAgICBDcmVhdGVkQXQsXG4gICAgICAgIFNpemUsXG4gICAgICB9ID0gSlNPTi5wYXJzZShsLnRyaW0oKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXBvc2l0b3J5LFxuICAgICAgICB0YWcsXG4gICAgICAgIGlkLFxuICAgICAgICBkaWdlc3QsXG4gICAgICAgIGNyZWF0ZWQ6IHBhcnNlRG9ja2VyRGF0ZShDcmVhdGVkQXQpLFxuICAgICAgICBzaXplOiBieXRlcy5wYXJzZShTaXplKSxcbiAgICAgIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKFxuICAgICAgKG0pID0+XG4gICAgICAgIChtICYmIG0uaWQpICE9IG51bGwgJiZcbiAgICAgICAgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicgPyBmaWx0ZXIobSkgOiB0cnVlKSxcbiAgICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RG9ja2VySWQoXG4gIHRhZzogc3RyaW5nID0gJ2xhdGVzdCcsXG4gIHJlcG8/OiA/c3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBkb2NrZXJJbWFnZXMocmVwbywgKG0pID0+IG0udGFnID09PSB0YWcpKS5tYXAoKG0pID0+IG0uaWQpWzBdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VW50YWdnZWREb2NrZXJJZHMoXG4gIHJlcG8/OiA/c3RyaW5nLFxuICBmaWx0ZXI/OiA/RG9ja2VySW1hZ2VGaWx0ZXIgPSBudWxsLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IGRvY2tlckltYWdlcyhcbiAgICAgIHJlcG8sXG4gICAgICAobSkgPT5cbiAgICAgICAgbS50YWcgPT09ICc8bm9uZT4nICYmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nID8gZmlsdGVyKG0pIDogdHJ1ZSksXG4gICAgKVxuICApLm1hcCgobSkgPT4gbS5pZCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREb2NrZXJUYWdzKFxuICBpZD86ID9zdHJpbmcsXG4gIHJlcG8/OiA/c3RyaW5nLFxuICBmdWxsTmFtZTogYm9vbGVhbiA9IGZhbHNlLFxuICBmaWx0ZXI/OiA/RG9ja2VySW1hZ2VGaWx0ZXIgPSBudWxsLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IGRvY2tlckltYWdlcyhcbiAgICAgIHJlcG8sXG4gICAgICAobSkgPT5cbiAgICAgICAgKCFpZCB8fCBtLmlkID09PSBpZCkgJiZcbiAgICAgICAgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicgPyBmaWx0ZXIobSkgOiB0cnVlKSxcbiAgICApXG4gICkubWFwKChtKSA9PiAoZnVsbE5hbWUgPyBgJHttLnJlcG9zaXRvcnl9OiR7bS50YWd9YCA6IG0udGFnKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREb2NrZXJEaWdlc3QoXG4gIGltYWdlSWQ6IHN0cmluZyxcbiAgcmVwbz86IHN0cmluZyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgZG9ja2VySW1hZ2VzKHJlcG8sIChtKSA9PiBtLmlkID09PSBpbWFnZUlkKSkubWFwKFxuICAgIChtKSA9PiBtLmRpZ2VzdCxcbiAgKVswXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvY2tlckxvZ2luKFxuICB1c2VyOiBzdHJpbmcsXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIHJlZ2lzdHJ5OiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVnID0gcmVnaXN0cnkgfHwgZ2V0RG9ja2VyQ29uZmlnKCkucmVnaXN0cnk7XG4gIGF3YWl0IHNwYXduKFxuICAgICdkb2NrZXInLFxuICAgIFtcbiAgICAgICdsb2dpbicsXG4gICAgICAnLXUnLFxuICAgICAgdXNlciB8fCBwcm9jZXNzLmVudi5BUlRJRkFDVE9SWV9VU0VSIHx8ICcnLFxuICAgICAgJy1wJyxcbiAgICAgIHBhc3N3b3JkIHx8IHByb2Nlc3MuZW52LkFSVElGQUNUT1JZX1BBU1NXT1JEIHx8ICcnLFxuICAgICAgLi4uKHJlZyA/IFtyZWddIDogW10pLFxuICAgIF0sXG4gICAgeyBzdGRpbzogJ2luaGVyaXQnIH0sXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb2NrZXJQdXNoKFxuICB0YWdzPzogc3RyaW5nW10gPSBbJ2xhdGVzdCddLFxuICByZXBvPzogc3RyaW5nID0gZ2V0RG9ja2VyUmVwbygpLFxuKSB7XG4gIC8vIGRvIHRoaXMgc2VxdWVudGlhbGx5LCBzbyB5b3UgZG9uJ3QgcHVzaCB0aGUgc2FtZSBpbWFnZSBzaW11bHRhbmVvdXNseVxuICBhd2FpdCB0YWdzLnJlZHVjZShhc3luYyAocHJldiwgdGFnKSA9PiB7XG4gICAgYXdhaXQgcHJldjtcbiAgICBhd2FpdCBzcGF3bignZG9ja2VyJywgWydwdXNoJywgYCR7cmVwb306JHt0YWd9YF0sIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpO1xufVxuXG5leHBvcnQgdHlwZSBEb2NrZXJQdWxsT3B0aW9ucyA9IHtcbiAgaW1hZ2U6IHN0cmluZyxcbiAgb2ZmbGluZT86IGJvb2xlYW4sXG4gIHRlc3RVcmw/OiA/c3RyaW5nLFxufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvY2tlclB1bGwoe1xuICBpbWFnZSxcbiAgb2ZmbGluZSA9IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1vZmZsaW5lJyksXG4gIHRlc3RVcmwsXG59OiBEb2NrZXJQdWxsT3B0aW9ucykge1xuICBpZiAob2ZmbGluZSB8fCAhKGF3YWl0IGlzUmVhY2hhYmxlKHRlc3RVcmwgfHwgJ2h0dHBzOi8vaHViLmRvY2tlci5jb20nKSkpIHtcbiAgICBpZiAob2ZmbGluZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT2ZmbGluZSwgY2Fubm90IGRvY2tlciBwdWxsJyk7XG4gICAgfVxuICAgIGJ1aWxkTG9nKCdJdCBsb29rcyBsaWtlIHlvdSBhcmUgb2ZmbGluZSwgc2tpcHBpbmcgZG9ja2VyIHB1bGwnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aHJvd3Mgb24gZmFpbHVyZVxuICAgIGF3YWl0IHNwYXduKCdkb2NrZXInLCBbJ3B1bGwnLCBpbWFnZV0sIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyUm1pKFxuICBpbWFnZXM6IHN0cmluZ1tdID0gW10sXG4gIGlnbm9yZUVycm9yczogYm9vbGVhbiA9IHRydWUsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gbXVzdCBkbyB0aGVzZSBzZXF1ZW50aWFsbHksIG9yIHRoZXkgd2lsbCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyXG4gIGF3YWl0IGltYWdlcy5yZWR1Y2UoYXN5bmMgKHByZXYsIGltYWdlKSA9PiB7XG4gICAgYXdhaXQgcHJldjtcbiAgICBhd2FpdCBzcGF3bignZG9ja2VyJywgWydybWknLCBpbWFnZV0sIHsgc3RkaW86ICdpbmhlcml0JyB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoaWdub3JlRXJyb3JzKSB7XG4gICAgICAgIGJ1aWxkTG9nKFxuICAgICAgICAgIGBXYXJuaW5nIChpZ25vcmVkIEVycm9yKTogRmFpbGVkIHRvIHJtIGltYWdlKHMpOiAke2Vyci5tZXNzYWdlfWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIFByb21pc2UucmVzb2x2ZSgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERvY2tlclJlcG8oKTogc3RyaW5nIHtcbiAgY29uc3QgeyByZWdpc3RyeSwgcmVwb3NpdG9yeTogZGtyUmVwbywgbmFtZTogZGtyTmFtZSB9ID0gZ2V0RG9ja2VyQ29uZmlnKCk7XG4gIGNvbnN0IHJlcG9zaXRvcnkgPSBka3JSZXBvIHx8IGdldFBrZ1Njb3BlKCk7XG4gIGNvbnN0IG5hbWUgPSBka3JOYW1lIHx8IGdldFBrZ05hbWUoZmFsc2UpO1xuICBpZiAoIXJlcG9zaXRvcnkgfHwgIW5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRG9ja2VyIGNvbmZpZ3VyYXRpb24gaXMgbWlzc2luZyBvciBpbmNvbXBsZXRlIGluIHBhY2thZ2UuanNvbicsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYCR7cmVnaXN0cnkgPyBgJHtyZWdpc3RyeX0vYCA6ICcnfSR7cmVwb3NpdG9yeX0vJHtuYW1lfWA7XG59XG5cbmV4cG9ydCB0eXBlIFB1bGxBbmRSdW5Db250YWluZXJPcHRpb25zID0ge1xuICAuLi5Eb2NrZXJQdWxsT3B0aW9ucyxcbiAgcnVuQXJncz86IHN0cmluZ1tdLFxuICBjbWQ/OiBzdHJpbmdbXSxcbiAgbmV0d29yaz86ID9zdHJpbmcsXG4gIGFsaWFzPzogP3N0cmluZyxcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb2NrZXJQdWxsQW5kUnVuQ29udGFpbmVyKFxuICBpbWFnZTogc3RyaW5nLFxuICBvcHRpb25zOiBQdWxsQW5kUnVuQ29udGFpbmVyT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIHJ1bkFyZ3MgPSBbXSxcbiAgICBjbWQgPSBbXSxcbiAgICBuZXR3b3JrLFxuICAgIGFsaWFzLFxuICAgIG9mZmxpbmUgPSBwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tb2ZmbGluZScpLFxuICAgIHRlc3RVcmwsXG4gIH0gPSBvcHRpb25zO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgZG9ja2VyUHVsbCh7IGltYWdlLCBvZmZsaW5lLCB0ZXN0VXJsIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBidWlsZExvZyhgZG9ja2VyIHB1bGwgZmFpbGVkICgke2Vyci5tZXNzYWdlfSksIGF0dGVtcHRpbmcgdG8gY29udGludWUuLi5gKTtcbiAgfVxuICBjb25zdCB7IGlkIH0gPSBhd2FpdCBkb2NrZXJDb250YWluZXJSdW5EYWVtb24oeyBpbWFnZSwgcnVuQXJncywgY21kIH0pO1xuICBpZiAobmV0d29yaykge1xuICAgIGF3YWl0IGRvY2tlck5ldHdvcmtDb25uZWN0KG5ldHdvcmssIGlkLCBhbGlhcyk7XG4gIH1cbiAgcmV0dXJuIGlkO1xufVxuXG5leHBvcnQgdHlwZSBDb3B5RmlsZVBhdGhDb25maWcgPSB7XG4gIGZyb206IHN0cmluZyxcbiAgdG86IHN0cmluZyxcbn07XG5cbmV4cG9ydCB0eXBlIENvcHlGaWxlc0Zyb21Eb2NrZXJJbWFnZUNvbmZpZyA9IHtcbiAgaW1hZ2VJZDogc3RyaW5nLFxuICBmaWxlUGF0aHM6IENvcHlGaWxlUGF0aENvbmZpZ1tdLFxuICBpZ25vcmVFcnJvcnM/OiA/Ym9vbGVhbixcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5RmlsZXNGcm9tRG9ja2VySW1hZ2Uoe1xuICBpbWFnZUlkLFxuICBmaWxlUGF0aHMsXG4gIGlnbm9yZUVycm9ycyxcbn06IENvcHlGaWxlc0Zyb21Eb2NrZXJJbWFnZUNvbmZpZyk6IFByb21pc2U8YW55PiB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGF3YWl0IGRvY2tlckNvbnRhaW5lclJ1bkRhZW1vbih7XG4gICAgaW1hZ2U6IGltYWdlSWQsXG4gICAgcnVuQXJnczogWyctaXQnLCAnLS1ybScsICctLWVudHJ5cG9pbnQ9L2Jpbi9iYXNoJ10sXG4gICAgY21kOiBbJ3JlYWQnLCAnLXAnLCAncGF1c2UnXSxcbiAgfSk7XG5cbiAgYnVpbGRMb2coYENvcHlpbmcgRmlsZXMgZnJvbSBEb2NrZXIgSW1hZ2UgLSBpbWFnZUlkICgke2ltYWdlSWR9KWApO1xuXG4gIGNvbnN0IHNwYXduT3B0aW9ucyA9IHtcbiAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgIHBpcGVPdXRwdXQ6IHRydWUsXG4gICAgY2FwdHVyZU91dHB1dDogZmFsc2UsXG4gIH07XG4gIGNvbnN0IGNvcHlFcnJvcnMgPSBbXTtcblxuICB0cnkge1xuICAgIGZpbGVQYXRocy5mb3JFYWNoKGFzeW5jIChmcCkgPT4ge1xuICAgICAgLy8gVHJ5IHRvIGNvcHkgZnJvbSB0aGUgRGVidWcgRm9sZGVyXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzcGF3bihcbiAgICAgICAgICAnZG9ja2VyJyxcbiAgICAgICAgICBbJ2NwJywgYCR7Y29udGFpbmVyLmlkfToke2ZwLmZyb219YCwgZnAudG9dLFxuICAgICAgICAgIHNwYXduT3B0aW9ucyxcbiAgICAgICAgKTtcbiAgICAgICAgYnVpbGRMb2coYENvcGllZCAke2ZwLmZyb219ID0+ICR7ZnAudG99YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb3B5RXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICBidWlsZExvZyhgRXJyb3IgY29weWluZyBmaWxlICR7ZnAuZnJvbX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZG9ja2VyQ29udGFpbmVyS2lsbChjb250YWluZXIuaWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb3B5RXJyb3JzLnB1c2goZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb3B5RXJyb3JzLmxlbmd0aCA+IDAgJiYgaWdub3JlRXJyb3JzICE9PSB0cnVlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGZpbGVzIGZhaWxlZCB0byBjb3B5Jyk7XG4gIH1cbn1cbiJdfQ==
|
package/docker.js.flow
CHANGED
|
@@ -84,7 +84,7 @@ export async function dockerTagVersion(
|
|
|
84
84
|
['latest', `${major}`, `${major}.${minor}`, `${major}.${minor}.${patch}`],
|
|
85
85
|
repo,
|
|
86
86
|
);
|
|
87
|
-
} else if (branch === getDevBranch()) {
|
|
87
|
+
} else if (branch === (await getDevBranch())) {
|
|
88
88
|
await dockerTag(imageId, ['latest-dev'], repo);
|
|
89
89
|
} else if (branch.match(/^(release|patch)-/)) {
|
|
90
90
|
await dockerTag(imageId, ['latest-rc'], repo);
|
|
@@ -229,10 +229,7 @@ export async function dockerPull({
|
|
|
229
229
|
offline = process.argv.includes('--offline'),
|
|
230
230
|
testUrl,
|
|
231
231
|
}: DockerPullOptions) {
|
|
232
|
-
if (
|
|
233
|
-
offline ||
|
|
234
|
-
!(await isReachable(testUrl || 'https://hub.docker.com'))
|
|
235
|
-
) {
|
|
232
|
+
if (offline || !(await isReachable(testUrl || 'https://hub.docker.com'))) {
|
|
236
233
|
if (offline === false) {
|
|
237
234
|
throw new Error('Offline, cannot docker pull');
|
|
238
235
|
}
|
package/docker.network.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports._dockerNetworkLs = _dockerNetworkLs;exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports._dockerNetworkLs = _dockerNetworkLs;exports.dockerNetworkConnect = dockerNetworkConnect;exports.dockerNetworkCreate = dockerNetworkCreate;exports.dockerNetworkDelete = dockerNetworkDelete;exports.dockerNetworkFind = dockerNetworkFind;exports.dockerNetworkLs = void 0;exports.dockerNetworkRm = dockerNetworkRm;
|
|
2
2
|
var _throttle = _interopRequireDefault(require("lodash/throttle"));
|
|
3
3
|
var _cp = require("./cp");
|
|
4
4
|
var _docker = require("./docker");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
package/docker.volume.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports._dockerVolumeInspect = _dockerVolumeInspect;exports._dockerVolumeLs = _dockerVolumeLs;exports.dockerVolumeCreate = dockerVolumeCreate;exports.dockerVolumeFind = dockerVolumeFind;exports.dockerVolumeLs = exports.dockerVolumeInspect = void 0;exports.dockerVolumeRm = dockerVolumeRm;
|
|
2
2
|
var _throttle = _interopRequireDefault(require("lodash/throttle"));
|
|
3
3
|
var _cp = require("./cp");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
|
4
4
|
|
package/dockerCleanup.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.dockerImageCleanup = exports.dockerContainerCleanup = exports.dockerCleanup = exports.default = void 0;
|
|
2
2
|
var _uniq = _interopRequireDefault(require("lodash/uniq"));
|
|
3
3
|
var _docker = require("./docker");
|
|
4
4
|
|
package/dockerCompose.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.dockerComposeCreateVolumes = exports.dockerComposeCreateResourceTracker = exports.dockerComposeCreateNetworks = exports.DockerComposeService = void 0;exports.dockerComposeGetAllServices = dockerComposeGetAllServices;exports.dockerComposeParse = exports.dockerComposeGetMain = void 0;exports.dockerComposeRunService = dockerComposeRunService;exports.dockerComposeTeardown = dockerComposeTeardown;
|
|
2
2
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
3
3
|
var _jsYaml = _interopRequireDefault(require("js-yaml"));
|
|
4
4
|
var _path = _interopRequireDefault(require("path"));
|
|
@@ -18,7 +18,7 @@ var _docker3 = require("./docker.network");
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
var _docker4 = require("./docker.volume");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _classPrivateFieldGet(receiver, privateMap) {var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get");return _classApplyDescriptorGet(receiver, descriptor);}function _classApplyDescriptorGet(receiver, descriptor) {if (descriptor.get) {return descriptor.get.call(receiver);}return descriptor.value;}function _classPrivateFieldSet(receiver, privateMap, value) {var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set");_classApplyDescriptorSet(receiver, descriptor, value);return value;}function _classExtractFieldDescriptor(receiver, privateMap, action) {if (!privateMap.has(receiver)) {throw new TypeError("attempted to " + action + " private field on non-instance");}return privateMap.get(receiver);}function _classApplyDescriptorSet(receiver, descriptor, value) {if (descriptor.set) {descriptor.set.call(receiver, value);} else {if (!descriptor.writable) {throw new TypeError("attempted to set read only private field");}descriptor.value = value;}}
|
|
21
|
+
var _docker4 = require("./docker.volume");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _classPrivateFieldInitSpec(obj, privateMap, value) {_checkPrivateRedeclaration(obj, privateMap);privateMap.set(obj, value);}function _checkPrivateRedeclaration(obj, privateCollection) {if (privateCollection.has(obj)) {throw new TypeError("Cannot initialize the same private elements twice on an object");}}function _classPrivateFieldGet(receiver, privateMap) {var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get");return _classApplyDescriptorGet(receiver, descriptor);}function _classApplyDescriptorGet(receiver, descriptor) {if (descriptor.get) {return descriptor.get.call(receiver);}return descriptor.value;}function _classPrivateFieldSet(receiver, privateMap, value) {var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set");_classApplyDescriptorSet(receiver, descriptor, value);return value;}function _classExtractFieldDescriptor(receiver, privateMap, action) {if (!privateMap.has(receiver)) {throw new TypeError("attempted to " + action + " private field on non-instance");}return privateMap.get(receiver);}function _classApplyDescriptorSet(receiver, descriptor, value) {if (descriptor.set) {descriptor.set.call(receiver, value);} else {if (!descriptor.writable) {throw new TypeError("attempted to set read only private field");}descriptor.value = value;}}
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
|
|
@@ -304,7 +304,7 @@ class DockerComposeService {
|
|
|
304
304
|
name,
|
|
305
305
|
serviceDef,
|
|
306
306
|
dockerCompose)
|
|
307
|
-
{
|
|
307
|
+
{_classPrivateFieldInitSpec(this, _name, { writable: true, value: void 0 });_classPrivateFieldInitSpec(this, _svcDef, { writable: true, value: void 0 });_classPrivateFieldInitSpec(this, _dockerCompose, { writable: true, value: void 0 });_classPrivateFieldInitSpec(this, _tracker, { writable: true, value: dockerComposeCreateResourceTracker() });_classPrivateFieldInitSpec(this, _parsedPorts, { writable: true, value: null });_classPrivateFieldInitSpec(this, _parsedNetworks, { writable: true, value: null });_classPrivateFieldInitSpec(this, _parsedVolumes, { writable: true, value: null });_classPrivateFieldInitSpec(this, _baseRunArgs, { writable: true, value: null });
|
|
308
308
|
_classPrivateFieldSet(this, _name, name);
|
|
309
309
|
_classPrivateFieldSet(this, _svcDef, serviceDef);
|
|
310
310
|
_classPrivateFieldSet(this, _dockerCompose, dockerCompose || null);
|
|
@@ -763,4 +763,4 @@ dockerCompose)
|
|
|
763
763
|
dockerUrl };
|
|
764
764
|
|
|
765
765
|
}
|
|
766
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb2NrZXJDb21wb3NlLmpzIl0sIm5hbWVzIjpbImRvY2tlckNvbXBvc2VDcmVhdGVSZXNvdXJjZVRyYWNrZXIiLCJuZXR3b3JrcyIsIk1hcCIsInNlcnZpY2VzIiwiY29udGFpbmVycyIsInZvbHVtZXMiLCJjbGVhbmluZyIsImRlZmF1bHRUcmFja2VyIiwiZG9ja2VyQ29tcG9zZVBhcnNlIiwiZmlsZVBhdGgiLCJ5YW1sIiwibG9hZCIsImZzIiwicmVhZEZpbGUiLCJkYyIsImRvY2tlckNvbXBvc2VHZXRNYWluIiwiZm9yY2UiLCJkb2NrZXJDb21wb3NlUmVzb2x2ZSIsImRvY2tlckNvbXBvc2UiLCJwcmVmaXhOYW1lIiwibmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsIl9fZGlybmFtZSIsImdldFNlcnZpY2VEZWYiLCJwYXJzZVBvcnRzIiwicG9ydHNDZmciLCJhdm9pZENvbmZsaWN0cyIsIm1hcExvY2FsIiwiaG9zdCIsInBvcnRzIiwicnVuQXJncyIsInJlZHVjZSIsImFyZ3MiLCJwb3J0U3RyIiwibHAiLCJkcCIsInNwbGl0IiwibG9jYWxEZWZhdWx0IiwicGFyc2VJbnQiLCJkb2NrZXIiLCJsb2NhbCIsInBvcnQiLCJwdXNoIiwicGFyc2VFbnYiLCJlbnYiLCJBcnJheSIsImlzQXJyYXkiLCJmbGF0TWFwIiwiZSIsImsiLCJ2IiwicGFyc2VVTGltaXRzIiwidWwiLCJzb2Z0IiwiaGFyZCIsInBhcnNlVm9sdW1lcyIsInZvbENmZyIsIm5hbWVTdWZmaXgiLCJ2b2xNYXAiLCJtYXAiLCJzcmMiLCJyZXN0IiwicmVhbFNyYyIsInJlc29sdmUiLCJqb2luIiwicGFyc2VOZXR3b3JrcyIsIm5ldENmZyIsIm5ldE1hcCIsIm4iLCJkb2NrZXJDb21wb3NlQ3JlYXRlTmV0d29ya3MiLCJuYW1lcyIsInRyYWNrZXIiLCJQcm9taXNlIiwiYWxsIiwia2V5IiwidmFsIiwiaW5jbHVkZXMiLCJuZXR3b3JrIiwic2V0IiwiZG9ja2VyQ29tcG9zZUNyZWF0ZVZvbHVtZXMiLCJ2b2x1bWUiLCJEb2NrZXJDb21wb3NlU2VydmljZSIsImNvbnN0cnVjdG9yIiwic2VydmljZURlZiIsImltYWdlIiwiZGVmYXVsdENvbnRhaW5lck5hbWUiLCJjb250YWluZXJfbmFtZSIsImNtZCIsImNvbW1hbmQiLCJlbnZBcmdzIiwiZW52aXJvbm1lbnQiLCJnZXROYW1lcyIsIm1heCIsImkiLCJzdWZmaXgiLCJ0ZXN0TmFtZSIsImNvbnRhaW5lciIsImFsaWFzZXMiLCJFcnJvciIsImdldFBvcnRzIiwiZ2V0RGVmYXVsdFBvcnRJbmZvIiwiZ2V0RGVmYXVsdFBvcnRzIiwiZ2V0RGVmYXVsdFBvcnRBcmdzIiwiZ2V0RGVmYXVsdFVybHMiLCJnZXRVcmxzIiwiZ2V0RGVmYXVsdE5ldHdvcmtJbmZvIiwiZ2V0RGVmYXVsdE5ldHdvcmtzIiwiZ2V0RGVmYXVsdE5ldHdvcmtBcmdzIiwiZ2V0RGVmYXVsdFZvbHVtZUluZm8iLCJnZXREZWZhdWx0Vm9sdW1lcyIsImdldERlZmF1bHRWb2x1bWVBcmdzIiwicHVsbCIsImdldEJhc2VSdW5BcmdzIiwidWxBcmdzIiwidWxpbWl0cyIsIm5ldEFyZ3MiLCJhc3NlbWJsZVJ1bkFyZ3MiLCJjb250YWluZXJOYW1lIiwiYWRkaXRpb25hbEFyZ3MiLCJhZGRpdGlvbmFsIiwiYSIsImdldFJ1bkFyZ3MiLCJtYXBMb2NhbFBvcnRzIiwiY05hbWUiLCJwQXJncyIsInZBcmdzIiwidXAiLCJoZWFsdGhDaGVjayIsIm1hcFZvbHVtZXMiLCJtYXBQb3J0cyIsInNpemUiLCJpc1J1bm5pbmciLCJzdGFydCIsImlkQWxpYXMiLCJpZCIsInNsaWNlIiwidXJscyIsImluZm8iLCJzZXJ2aWNlIiwiZG93biIsImluY2x1ZGVEZWZhdWx0cyIsImluY2x1ZGVWb2x1bWVzIiwiaW5jbHVkZU5ldHdvcmtzIiwiZG9ja2VyQ29tcG9zZVRlYXJkb3duIiwidGVhcmRvd24iLCJwYXJzZSIsInN2Y0RlZiIsImFsaWFzIiwiZG9ja2VyQ29tcG9zZUdldEFsbFNlcnZpY2VzIiwicyIsInByb21pc2VzIiwiZnJvbSIsInZhbHVlcyIsImNsZWFyIiwic3ZjTmFtZXMiLCJsZW5ndGgiLCJjIiwicm0iLCJlcnIiLCJtZXNzYWdlIiwiZG9ja2VyQ29tcG9zZVJ1blNlcnZpY2UiLCJ1cE9wdGlvbnMiLCJ1cFJlc3VsdCIsInVybCIsImRvY2tlclVybCIsImRvY2tlclBvcnQiLCJmb3JFYWNoIl0sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7Ozs7OztBQU1BLDBDOzs7Ozs7Ozs7Ozs7OztBQWNPLE1BQU1BLGtDQUFrQyxHQUFHLE9BQXFDO0FBQ3JGQyxFQUFBQSxRQUFRLEVBQUUsSUFBSUMsR0FBSixFQUQyRTtBQUVyRkMsRUFBQUEsUUFBUSxFQUFFLElBQUlELEdBQUosRUFGMkU7QUFHckZFLEVBQUFBLFVBQVUsRUFBRSxJQUFJRixHQUFKLEVBSHlFO0FBSXJGRyxFQUFBQSxPQUFPLEVBQUUsSUFBSUgsR0FBSixFQUo0RTtBQUtyRkksRUFBQUEsUUFBUSxFQUFFLElBTDJFLEVBQXJDLENBQTNDLEM7OztBQVFQLE1BQU1DLGNBQWMsR0FBR1Asa0NBQWtDLEVBQXpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1RLGtCQUFrQixHQUFHO0FBQ2hDQyxRQUFpQixHQUFHLHNCQURZO0FBRUpDLGdCQUFLQyxJQUFMLENBQVUsTUFBTUMsaUJBQUdDLFFBQUgsQ0FBWUosUUFBWixDQUFoQixDQUZ2QixDOztBQUlQLElBQUlLLEVBQWtCLEdBQUcsSUFBekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQyxvQkFBb0IsR0FBRztBQUNsQ0MsS0FBZSxHQUFHLEtBRGdCO0FBRVA7QUFDM0IsTUFBSUEsS0FBSyxJQUFJLENBQUNGLEVBQWQsRUFBa0I7QUFDaEJBLElBQUFBLEVBQUUsR0FBRyxNQUFNTixrQkFBa0IsRUFBN0I7QUFDRDtB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LENBSEY7QUFJSnZJLElBQUFBLEtBQUssRUFBRSxDQUFDLEVBQUVXLEtBQUssRUFBRUMsSUFBVCxFQUFlRixNQUFNLEVBQUU4SCxVQUF2QixFQUFELENBSkg7QUFLRkgsRUFBQUEsUUFMSjtBQU1BLFFBQU0sRUFBRTVCLEVBQUYsRUFBTW5ILElBQU4sRUFBWWlFLEtBQVosS0FBc0JZLFNBQTVCO0FBQ0F3QyxFQUFBQSxJQUFJLENBQUM4QixPQUFMO0FBQ0UsR0FBQyxFQUFFOUgsS0FBRixFQUFEO0FBQ0VBLEVBQUFBLEtBQUssSUFBSSxtQkFBVSxJQUFHa0csT0FBTyxDQUFDdkgsSUFBSyxtQkFBa0JxQixLQUFNLEVBQWxELENBRmI7O0FBSUEsU0FBTztBQUNMLE9BQUcwSCxRQURFO0FBRUw1QixJQUFBQSxFQUZLO0FBR0xsRCxJQUFBQSxLQUhLO0FBSUxqRSxJQUFBQSxJQUpLO0FBS0xzQixJQUFBQSxJQUxLO0FBTUw0SCxJQUFBQSxVQU5LO0FBT0xGLElBQUFBLEdBUEs7QUFRTEMsSUFBQUEsU0FSSyxFQUFQOztBQVVEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGdldFBvcnQgZnJvbSAnZ2V0LXBvcnQnO1xuaW1wb3J0IHsga2V5cywgZW50cmllcywgbWFwVmFsdWVzQXN5bmMsIHR5cGUgTWFwT2JqIH0gZnJvbSAnLi9tYXBzJztcblxuaW1wb3J0IHsgYnVpbGRMb2cgfSBmcm9tICcuL3J1bic7XG5pbXBvcnQgeyBkb2NrZXJQdWxsIH0gZnJvbSAnLi9kb2NrZXInO1xuaW1wb3J0IHtcbiAgZG9ja2VyQ29udGFpbmVyRmluZCxcbiAgZG9ja2VyQ29udGFpbmVyUnVuRGFlbW9uLFxuICB0eXBlIERvY2tlckNvbnRhaW5lcixcbn0gZnJvbSAnLi9kb2NrZXIuY29udGFpbmVyJztcbmltcG9ydCB7XG4gIGRvY2tlck5ldHdvcmtEZWxldGUsXG4gIGRvY2tlck5ldHdvcmtDcmVhdGUsXG4gIHR5cGUgRG9ja2VyTmV0d29ya0NyZWF0ZU9wdGlvbnMsXG4gIHR5cGUgRG9ja2VyTmV0d29yayxcbn0gZnJvbSAnLi9kb2NrZXIubmV0d29yayc7XG5pbXBvcnQge1xuICBkb2NrZXJWb2x1bWVDcmVhdGUsXG4gIGRvY2tlclZvbHVtZVJtLFxuICB0eXBlIERvY2tlclZvbHVtZSxcbn0gZnJvbSAnLi9kb2NrZXIudm9sdW1lJztcblxuZXhwb3J0IHR5cGUgRG9ja2VyQ29tcG9zZVJlc291cmNlVHJhY2tlciA9IHtcbiAgc2VydmljZXM6IE1hcDxzdHJpbmcsIERvY2tlckNvbXBvc2VTZXJ2aWNlPixcbiAgbmV0d29ya3M6IE1hcDxzdHJpbmcsIERvY2tlck5ldHdvcms+LFxuICBjb250YWluZXJzOiBNYXA8c3RyaW5nLCBEb2NrZXJDb250YWluZXI+LFxuICB2b2x1bWVzOiBNYXA8c3RyaW5nLCBEb2NrZXJWb2x1bWU+LFxuICBjbGVhbmluZzogP1Byb21pc2U8dm9pZD4sXG59O1xuXG5leHBvcnQgY29uc3QgZG9ja2VyQ29tcG9zZUNyZWF0ZVJlc291cmNlVHJhY2tlciA9ICgpOiBEb2NrZXJDb21wb3NlUmVzb3VyY2VUcmFja2VyID0+ICh7XG4gIG5ldHdvcmtzOiBuZXcgTWFwKCksXG4gIHNlcnZpY2VzOiBuZXcgTWFwKCksXG4gIGNvbnRhaW5lcnM6IG5ldyBNYXAoKSxcbiAgdm9sdW1lczogbmV3IE1hcCgpLFxuICBjbGVhbmluZzogbnVsbCxcbn0pO1xuXG5jb25zdCBkZWZhdWx0VHJhY2tlciA9IGRvY2tlckNvbXBvc2VDcmVhdGVSZXNvdXJjZVRyYWNrZXIoKTtcblxudHlwZSBEb2NrZXJDb21wb3NlRW52RGVmID0gc3RyaW5nW10gfCB7IFtzdHJpbmddOiBzdHJpbmcgfTtcblxudHlwZSBEb2NrZXJDb21wb3NlVUxpbWl0RGVmID0gbnVtYmVyIHwgeyBzb2Z0OiBudW1iZXIsIGhhcmQ6IG51bWJlciB9O1xuXG50eXBlIERvY2tlckNvbXBvc2VVTGltaXRzRGVmID0ge1xuICBbc3RyaW5nXTogRG9ja2VyQ29tcG9zZVVMaW1pdERlZixcbn07XG5cbnR5cGUgRG9ja2VyQ29tcG9zZVNlcnZpY2VEZWYgPSB7XG4gIGNvbnRhaW5lcl9uYW1lPzogc3RyaW5nLFxuICBpbWFnZT86IHN0cmluZyxcbiAgcG9ydHM/OiBzdHJpbmdbXSxcbiAgdm9sdW1lcz86IHN0cmluZ1tdLFxuICBjb21tYW5kPzogc3RyaW5nW10sXG4gIG5ldHdvcmtzPzogc3RyaW5nW10sXG4gIGVudmlyb25tZW50PzogRG9ja2VyQ29tcG9zZUVudkRlZixcbiAgbGlua3M/OiBzdHJpbmdbXSxcbiAgdWxpbWl0cz86IERvY2tlckNvbXBvc2VVTGltaXRzRGVmLFxufTtcblxudHlwZSBEb2NrZXJDb21wb3NlVm9sdW1lRGVmID0ge1xuICBuYW1lPzogc3RyaW5nLFxufTtcblxudHlwZSBEb2NrZXJDb21wb3NlTmV0d29ya0RlZiA9IHtcbiAgLi4uRG9ja2VyTmV0d29ya0NyZWF0ZU9wdGlvbnMsXG4gIG5hbWU/OiBzdHJpbmcsXG59O1xuXG50eXBlIERvY2tlckNvbXBvc2UgPSB7XG4gIHZlcnNpb246IHN0cmluZyxcbiAgc2VydmljZXM/OiB7XG4gICAgW3N0cmluZ106IERvY2tlckNvbXBvc2VTZXJ2aWNlRGVmLFxuICB9LFxuICB2b2x1bWVzPzoge1xuICAgIFtzdHJpbmddOiBEb2NrZXJDb21wb3NlVm9sdW1lRGVmLFxuICB9LFxuICBuZXR3b3Jrcz86IHtcbiAgICBbc3RyaW5nXTogRG9ja2VyQ29tcG9zZU5ldHdvcmtEZWYsXG4gIH0sXG59O1xuXG4vKipcbiAqIFBhcnNlIGEgZG9ja2VyLWNvbXBvc2UueW1sIGZpbGUgaW50byBhIHBvam8gcmVwcmVzZW50YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCBQYXRoIHRvIHRoZSBkb2NrZXItY29tcG9zZS55bWwgZmlsZVxuICovXG5leHBvcnQgY29uc3QgZG9ja2VyQ29tcG9zZVBhcnNlID0gYXN5bmMgKFxuICBmaWxlUGF0aD86IHN0cmluZyA9ICcuL2RvY2tlci1jb21wb3NlLnltbCcsXG4pOiBQcm9taXNlPERvY2tlckNvbXBvc2U+ID0+ICh5YW1sLmxvYWQoYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpKTogYW55KTtcblxubGV0IGRjOiA/RG9ja2VyQ29tcG9zZSA9IG51bGw7XG5cbi8qKlxuICogR2V0IHRoZSBtYWluIGRvY2tlci1jb21wb3NlLnltbCBmcm9tIHRoZSByb290IG9mIHRoZSByZXBvXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlIEZvcmNlIHJlbG9hZCBmcm9tIGZpbGVcbiAqL1xuZXhwb3J0IGNvbnN0IGRvY2tlckNvbXBvc2VHZXRNYWluID0gYXN5bmMgKFxuICBmb3JjZT86IGJvb2xlYW4gPSBmYWxzZSxcbik6IFByb21pc2U8RG9ja2VyQ29tcG9zZT4gPT4ge1xuICBpZiAoZm9yY2UgfHwgIWRjKSB7XG4gICAgZGMgPSBhd2FpdCBkb2NrZXJDb21wb3NlUGFyc2UoKTtcbiAgfVxuICByZXR1cm4gZGM7XG59O1xuXG4vLyBGdW5jdGlvbiB0aGF0IGhhbmRsZXMgcGFzc2VkIGRvY2tlckNvbXBvc2UgYXMgZWl0aGVyIGEgZmlsZSBwYXRoIG9yIGBEb2NrZXJDb21wb3NlYCBvYmplY3QuXG4vLyBJZiBub3QgcGFzc2VkLCBkZWZhdWx0cyB0byB0aGUgbWFpbiBkb2NrZXItY29tcG9zZS55bWwgZnJvbSB0aGUgcm9vdCBvZiB0aGUgcmVwb1xuY29uc3QgZG9ja2VyQ29tcG9zZVJlc29sdmUgPSBhc3luYyAoXG4gIGRvY2tlckNvbXBvc2U/OiA/KHN0cmluZyB8IERvY2tlckNvbXBvc2UpLFxuICBmb3JjZT86IGJvb2xlYW4sXG4pOiBQcm9taXNlPERvY2tlckNvbXBvc2U+ID0+XG4gIHR5cGVvZiBkb2NrZXJDb21wb3NlID09PSAnc3RyaW5nJ1xuICAgID8gZG9ja2VyQ29tcG9zZVBhcnNlKGRvY2tlckNvbXBvc2UpXG4gICAgOiBkb2NrZXJDb21wb3NlIHx8IGRvY2tlckNvbXBvc2VHZXRNYWluKGZvcmNlKTtcblxuLy8gRGV0ZXJtaW5lcyBhbiB1bm5hbWVkIHJlc291cmNlJ3MgbmFtZSBmcm9tIHRoZSBkaXJuYW1lIGNvbWJpbmVkIHdpdGggdGhlIGtleVxuY29uc3QgcHJlZml4TmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IGAke3BhdGguYmFzZW5hbWUoX19kaXJuYW1lKX1fJHtuYW1lfWA7XG5cbmNvbnN0IGdldFNlcnZpY2VEZWYgPSBhc3luYyAoXG4gIG5hbWU6IHN0cmluZyxcbiAgZm9yY2U/OiBib29sZWFuLFxuICBkb2NrZXJDb21wb3NlPzogPyhzdHJpbmcgfCBEb2NrZXJDb21wb3NlKSxcbik6IFByb21pc2U8P0RvY2tlckNvbXBvc2VTZXJ2aWNlRGVmPiA9PlxuICAoYXdhaXQgZG9ja2VyQ29tcG9zZVJlc29sdmUoZG9ja2VyQ29tcG9zZSwgZm9yY2UpKS5zZXJ2aWNlcz8uW25hbWVdIHx8IG51bGw7XG5cbnR5cGUgUG9ydE1hcCA9IHtcbiAgbG9jYWw6ID9udW1iZXIsXG4gIGxvY2FsRGVmYXVsdDogbnVtYmVyLFxuICBkb2NrZXI6IG51bWJlcixcbn07XG5cbnR5cGUgVXJsTWFwID0ge1xuICBsb2NhbDogP3N0cmluZyxcbiAgZG9ja2VyOiA/c3RyaW5nLFxufTtcblxudHlwZSBQYXJzZWRQb3J0SW5mbyA9IHtcbiAgcnVuQXJnczogc3RyaW5nW10sXG4gIHBvcnRzOiBQb3J0TWFwW10sXG59O1xuXG5jb25zdCBwYXJzZVBvcnRzID0gYXN5bmMgKFxuICBwb3J0c0NmZz86IHN0cmluZ1tdID0gW10sXG4gIGF2b2lkQ29uZmxpY3RzPzogYm9vbGVhbiA9IHRydWUsXG4gIG1hcExvY2FsPzogYm9vbGVhbiA9IHRydWUsXG4gIGhvc3Q/OiBzdHJpbmcgPSAnMC4wLjAuMCcsXG4pOiBQcm9taXNlPFBhcnNlZFBvcnRJbmZvPiA9PiB7XG4gIGNvbnN0IHBvcnRzOiBQb3J0TWFwW10gPSBbXTtcbiAgY29uc3QgcnVuQXJncyA9IGF3YWl0IHBvcnRzQ2ZnLnJlZHVjZShhc3luYyAoYXJncywgcG9ydFN0cikgPT4ge1xuICAgIGNvbnN0IFtscCwgZHBdID0gcG9ydFN0ci5zcGxpdCgnOicpO1xuICAgIGNvbnN0IGxvY2FsRGVmYXVsdCA9IHBhcnNlSW50KGxwLCAxMCk7XG4gICAgY29uc3QgZG9ja2VyID0gcGFyc2VJbnQoZHAsIDEwKTtcbiAgICBjb25zdCBsb2NhbCA9IG1hcExvY2FsXG4gICAgICA/IGF2b2lkQ29uZmxpY3RzXG4gICAgICAgID8gYXdhaXQgZ2V0UG9ydCh7IHBvcnQ6IGxvY2FsRGVmYXVsdCwgaG9zdCB9KVxuICAgICAgICA6IGxvY2FsRGVmYXVsdFxuICAgICAgOiBudWxsO1xuICAgIHBvcnRzLnB1c2goeyBsb2NhbCwgbG9jYWxEZWZhdWx0LCBkb2NrZXIgfSk7XG4gICAgcmV0dXJuIGxvY2FsID8gWy4uLihhd2FpdCBhcmdzKSwgJy1wJywgYCR7bG9jYWx9OiR7ZG9ja2VyfWBdIDogYXJncztcbiAgfSwgW10pO1xuICByZXR1cm4geyBydW5BcmdzLCBwb3J0cyB9O1xufTtcblxuY29uc3QgcGFyc2VFbnYgPSAoZW52PzogRG9ja2VyQ29tcG9zZUVudkRlZiA9IFtdKTogc3RyaW5nW10gPT5cbiAgQXJyYXkuaXNBcnJheShlbnYpXG4gICAgPyBlbnYuZmxhdE1hcCgoZSkgPT4gWyctZScsIGVdKVxuICAgIDogZW50cmllcyhlbnYpLmZsYXRNYXAoKFtrLCB2XSkgPT4gWyctZScsIGAke2t9PSR7dn1gXSk7XG5cbmNvbnN0IHBhcnNlVUxpbWl0cyA9ICh1bD86IERvY2tlckNvbXBvc2VVTGltaXRzRGVmID0ge30pOiBzdHJpbmdbXSA9PlxuICBlbnRyaWVzKHVsKS5mbGF0TWFwKChbaywgdl0pID0+IFtcbiAgICAnLS11bGltaXQnLFxuICAgIGAke2t9PSR7XG4gICAgICB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogYCR7di5zb2Z0fSR7di5oYXJkID8gYDoke3YuaGFyZH1gIDogJyd9YFxuICAgIH1gLFxuICBdKTtcblxudHlwZSBQYXJzZWRWb2x1bWVJbmZvID0ge1xuICBydW5BcmdzOiBzdHJpbmdbXSxcbiAgdm9sdW1lczogc3RyaW5nW10sXG59O1xuXG5jb25zdCBwYXJzZVZvbHVtZXMgPSBhc3luYyAoXG4gIHZvbENmZz86IHN0cmluZ1tdID0gW10sXG4gIG5hbWVTdWZmaXg/OiBzdHJpbmcgPSAnJyxcbiAgZG9ja2VyQ29tcG9zZT86ID8oc3RyaW5nIHwgRG9ja2VyQ29tcG9zZSksXG4pOiBQcm9taXNlPFBhcnNlZFZvbHVtZUluZm8+ID0+IHtcbiAgY29uc3QgeyB2b2x1bWVzOiB2b2xNYXAgfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICBjb25zdCB2b2x1bWVzID0gW107XG4gIGNvbnN0IHJ1bkFyZ3M6IHN0cmluZ1tdID0gdm9sQ2ZnXG4gICAgLm1hcCgodikgPT4ge1xuICAgICAgY29uc3QgW3NyYywgLi4ucmVzdF0gPSB2LnNwbGl0KCc6Jyk7XG4gICAgICBjb25zdCBuYW1lID0gdm9sTWFwPy5bc3JjXVxuICAgICAgICA/IGAke3ZvbE1hcFtzcmNdLm5hbWUgfHwgcHJlZml4TmFtZShzcmMpfSR7bmFtZVN1ZmZpeH1gXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHZvbHVtZXMucHVzaChuYW1lKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlYWxTcmMgPSBuYW1lIHx8IHBhdGgucmVzb2x2ZShzcmMpO1xuICAgICAgcmV0dXJuIFtyZWFsU3JjLCAuLi5yZXN0XS5qb2luKCc6Jyk7XG4gICAgfSlcbiAgICAuZmxhdE1hcCgodikgPT4gWyctdicsIHZdKTtcbiAgcmV0dXJuIHsgcnVuQXJncywgdm9sdW1lcyB9O1xufTtcblxudHlwZSBQYXJzZWROZXR3b3JrSW5mbyA9IHtcbiAgcnVuQXJnczogc3RyaW5nW10sXG4gIG5ldHdvcmtzOiBzdHJpbmdbXSxcbn07XG5cbmNvbnN0IHBhcnNlTmV0d29ya3MgPSBhc3luYyAoXG4gIG5ldENmZz86IHN0cmluZ1tdID0gW10sXG4gIGRvY2tlckNvbXBvc2U/OiA/KHN0cmluZyB8IERvY2tlckNvbXBvc2UpLFxuKTogUHJvbWlzZTxQYXJzZWROZXR3b3JrSW5mbz4gPT4ge1xuICBjb25zdCB7IG5ldHdvcmtzOiBuZXRNYXAgfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICBjb25zdCBuZXR3b3JrcyA9IG5ldENmZy5tYXAoKG4pID0+IG5ldE1hcD8uW25dLm5hbWUgfHwgcHJlZml4TmFtZShuKSk7XG4gIHJldHVybiB7XG4gICAgbmV0d29ya3MsXG4gICAgcnVuQXJnczogKG5ldHdvcmtzLmZsYXRNYXAoKG4pID0+IFsnLS1uZXR3b3JrJywgbl0pOiBzdHJpbmdbXSksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZG9ja2VyQ29tcG9zZUNyZWF0ZU5ldHdvcmtzID0gYXN5bmMgKFxuICBuYW1lcz86ID8oc3RyaW5nW10pLFxuICBkb2NrZXJDb21wb3NlPzogPyhzdHJpbmcgfCBEb2NrZXJDb21wb3NlKSxcbiAgdHJhY2tlcj86IERvY2tlckNvbXBvc2VSZXNvdXJjZVRyYWNrZXIgPSBkZWZhdWx0VHJhY2tlcixcbikgPT4ge1xuICBjb25zdCB7IG5ldHdvcmtzID0ge30gfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBlbnRyaWVzKG5ldHdvcmtzKS5tYXAoYXN5bmMgKFtrZXksIHZhbF0pID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSB2YWw/Lm5hbWUgfHwgcHJlZml4TmFtZShrZXkpO1xuICAgICAgaWYgKCFuYW1lcyB8fCBuYW1lcy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICBjb25zdCBuZXR3b3JrID0gYXdhaXQgZG9ja2VyTmV0d29ya0NyZWF0ZShuYW1lLCAodmFsIHx8IHt9OiBhbnkpKTtcbiAgICAgICAgaWYgKG5ldHdvcmspIHtcbiAgICAgICAgICB0cmFja2VyLm5ldHdvcmtzLnNldChuYW1lLCBuZXR3b3JrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGRvY2tlckNvbXBvc2VDcmVhdGVWb2x1bWVzID0gYXN5bmMgKFxuICBuYW1lcz86IHN0cmluZ1tdLFxuICBkb2NrZXJDb21wb3NlPzogPyhzdHJpbmcgfCBEb2NrZXJDb21wb3NlKSxcbiAgdHJhY2tlcj86IERvY2tlckNvbXBvc2VSZXNvdXJjZVRyYWNrZXIgPSBkZWZhdWx0VHJhY2tlcixcbikgPT4ge1xuICBjb25zdCB7IHZvbHVtZXMgPSB7fSB9ID0gYXdhaXQgZG9ja2VyQ29tcG9zZVJlc29sdmUoZG9ja2VyQ29tcG9zZSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGVudHJpZXModm9sdW1lcykubWFwKGFzeW5jIChba2V5LCB2YWxdKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdmFsPy5uYW1lIHx8IHByZWZpeE5hbWUoa2V5KTtcbiAgICAgIGlmICghbmFtZXMgfHwgbmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgY29uc3Qgdm9sdW1lID0gYXdhaXQgZG9ja2VyVm9sdW1lQ3JlYXRlKG5hbWUsICh2YWwgfHwge306IGFueSkpO1xuICAgICAgICBpZiAodm9sdW1lKSB7XG4gICAgICAgICAgdHJhY2tlci52b2x1bWVzLnNldChuYW1lLCB2b2x1bWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG4gICk7XG59O1xuXG50eXBlIEhlYWx0aENoZWNrRm4gPSAoVXBSZXN1bHQpID0+IFByb21pc2U8dm9pZD47XG5cbnR5cGUgVXBPcHRpb25zID0ge1xuICBoZWFsdGhDaGVjaz86IEhlYWx0aENoZWNrRm4sXG4gIGF2b2lkQ29uZmxpY3RzPzogYm9vbGVhbixcbiAgbWFwVm9sdW1lcz86IGJvb2xlYW4sXG4gIG1hcFBvcnRzPzogYm9vbGVhbixcbiAgY21kPzogc3RyaW5nW10sXG4gIHRyYWNrZXI/OiBEb2NrZXJDb21wb3NlUmVzb3VyY2VUcmFja2VyLFxufTtcblxudHlwZSBTZXJ2aWNlTmFtZUluZm8gPSB7XG4gIG5hbWU6IHN0cmluZyxcbiAgYWxpYXNlczogc3RyaW5nW10sXG4gIHN1ZmZpeDogc3RyaW5nLFxufTtcblxudHlwZSBVcFJlc3VsdCA9IHt8XG4gIHNlcnZpY2U6IERvY2tlckNvbXBvc2VTZXJ2aWNlLFxuICBjb250YWluZXI6IERvY2tlckNvbnRhaW5lcixcbiAgY29udGFpbmVyTmFtZTogc3RyaW5nLFxuICBhbGlhc2VzOiBzdHJpbmdbXSxcbiAgcG9ydHM6IFBvcnRNYXBbXSxcbiAgdXJsczogVXJsTWFwW10sXG4gIHZvbHVtZXM6IHN0cmluZ1tdLFxufH07XG5cbmV4cG9ydCBjbGFzcyBEb2NrZXJDb21wb3NlU2VydmljZSB7XG4gICNuYW1lOiBzdHJpbmc7XG4gICNzdmNEZWY6IERvY2tlckNvbXBvc2VTZXJ2aWNlRGVmO1xuICAjZG9ja2VyQ29tcG9zZTogPyhEb2NrZXJDb21wb3NlIHwgc3RyaW5nKTtcbiAgI3RyYWNrZXI6IERvY2tlckNvbXBvc2VSZXNvdXJjZVRyYWNrZXIgPSBkb2NrZXJDb21wb3NlQ3JlYXRlUmVzb3VyY2VUcmFja2VyKCk7XG5cbiAgLy8gbGF6aWx5IGNvbXB1dGVkXG4gICNwYXJzZWRQb3J0czogP1BhcnNlZFBvcnRJbmZvID0gbnVsbDtcbiAgI3BhcnNlZE5ldHdvcmtzOiA/UGFyc2VkTmV0d29ya0luZm8gPSBudWxsO1xuICAjcGFyc2VkVm9sdW1lczogP1BhcnNlZFZvbHVtZUluZm8gPSBudWxsO1xuICAjYmFzZVJ1bkFyZ3M6ID8oc3RyaW5nW10pID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZURlZjogRG9ja2VyQ29tcG9zZVNlcnZpY2VEZWYsXG4gICAgZG9ja2VyQ29tcG9zZT86ID8oRG9ja2VyQ29tcG9zZSB8IHN0cmluZyksXG4gICkge1xuICAgIHRoaXMuI25hbWUgPSBuYW1lO1xuICAgIHRoaXMuI3N2Y0RlZiA9IHNlcnZpY2VEZWY7XG4gICAgdGhpcy4jZG9ja2VyQ29tcG9zZSA9IGRvY2tlckNvbXBvc2UgfHwgbnVsbDtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI25hbWU7XG4gIH1cblxuICBnZXQgc2VydmljZURlZigpOiBEb2NrZXJDb21wb3NlU2VydmljZURlZiB7XG4gICAgcmV0dXJuIHRoaXMuI3N2Y0RlZjtcbiAgfVxuXG4gIGdldCBpbWFnZSgpOiA/c3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jc3ZjRGVmLmltYWdlIHx8IG51bGw7XG4gIH1cblxuICBnZXQgZGVmYXVsdENvbnRhaW5lck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jc3ZjRGVmLmNvbnRhaW5lcl9uYW1lIHx8IHRoaXMuI25hbWU7XG4gIH1cblxuICBnZXQgY21kKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy4jc3ZjRGVmLmNvbW1hbmQgfHwgW107XG4gIH1cblxuICBnZXQgZW52QXJncygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHBhcnNlRW52KHRoaXMuI3N2Y0RlZi5lbnZpcm9ubWVudCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCAoYXZhaWxhYmxlKSBjb250YWluZXIgbmFtZSBhbmQgYWxpYXMoZXMpXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXZvaWRDb25mbGljdHMgaWYgYHRydWVgLCBmaW5kIGEgY29udGFpbmVyIG5hbWUgdGhhdCBpcyB1bnVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBtYXhpbXVtIG51bWJlciBvZiBuYW1lcyB0byB0cnlcbiAgICovXG4gIGFzeW5jIGdldE5hbWVzKFxuICAgIGF2b2lkQ29uZmxpY3RzPzogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG1heD86IG51bWJlciA9IDEwMCxcbiAgKTogUHJvbWlzZTxTZXJ2aWNlTmFtZUluZm8+IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXg7IGkgKz0gMSkge1xuICAgICAgY29uc3Qgc3VmZml4ID0gaSA/IGAtJHtpfWAgOiAnJztcbiAgICAgIGNvbnN0IHRlc3ROYW1lID0gYCR7dGhpcy5kZWZhdWx0Q29udGFpbmVyTmFtZX0ke3N1ZmZpeH1gO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gYXdhaXQgZG9ja2VyQ29udGFpbmVyRmluZCh0ZXN0TmFtZSwgeyBhbGw6IHRydWUgfSk7XG4gICAgICBpZiAoIWF2b2lkQ29uZmxpY3RzIHx8ICFjb250YWluZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiB0ZXN0TmFtZSxcbiAgICAgICAgICBhbGlhc2VzOiBbYCR7dGhpcy5uYW1lfSR7c3VmZml4fWBdLFxuICAgICAgICAgIHN1ZmZpeCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBmaW5kIGF2YWlsYWJsZSBjb250YWluZXIgbmFtZSBmb3IgJHt0aGlzLmRlZmF1bHRDb250YWluZXJOYW1lfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEdldCAoYXZhaWxhYmxlKSBwb3J0IG1hcHBpbmdzXG4gIGFzeW5jIGdldFBvcnRzKFxuICAgIGF2b2lkQ29uZmxpY3RzPzogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG1hcExvY2FsPzogYm9vbGVhbiA9IHRydWUsXG4gICk6IFByb21pc2U8UGFyc2VkUG9ydEluZm8+IHtcbiAgICByZXR1cm4gcGFyc2VQb3J0cyh0aGlzLiNzdmNEZWYucG9ydHMsIGF2b2lkQ29uZmxpY3RzLCBtYXBMb2NhbCk7XG4gIH1cblxuICBhc3luYyBnZXREZWZhdWx0UG9ydEluZm8oKTogUHJvbWlzZTxQYXJzZWRQb3J0SW5mbz4ge1xuICAgIGlmICghdGhpcy4jcGFyc2VkUG9ydHMpIHtcbiAgICAgIHRoaXMuI3BhcnNlZFBvcnRzID0gYXdhaXQgdGhpcy5nZXRQb3J0cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jcGFyc2VkUG9ydHM7XG4gIH1cblxuICBhc3luYyBnZXREZWZhdWx0UG9ydHMoKTogUHJvbWlzZTxQb3J0TWFwW10+IHtcbiAgICBjb25zdCB7IHBvcnRzIH0gPSBhd2FpdCB0aGlzLmdldERlZmF1bHRQb3J0SW5mbygpO1xuICAgIHJldHVybiBwb3J0cztcbiAgfVxuXG4gIGFzeW5jIGdldERlZmF1bHRQb3J0QXJncygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgeyBydW5BcmdzIH0gPSBhd2FpdCB0aGlzLmdldERlZmF1bHRQb3J0SW5mbygpO1xuICAgIHJldHVybiBydW5BcmdzO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdFVybHMoKTogUHJvbWlzZTxVcmxNYXBbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldFVybHMoXG4gICAgICBhd2FpdCB0aGlzLmdldERlZmF1bHRQb3J0cygpLFxuICAgICAgdGhpcy5kZWZhdWx0Q29udGFpbmVyTmFtZSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdE5ldHdvcmtJbmZvKCk6IFByb21pc2U8UGFyc2VkTmV0d29ya0luZm8+IHtcbiAgICBpZiAoIXRoaXMuI3BhcnNlZE5ldHdvcmtzKSB7XG4gICAgICB0aGlzLiNwYXJzZWROZXR3b3JrcyA9IGF3YWl0IHBhcnNlTmV0d29ya3ModGhpcy4jc3ZjRGVmLm5ldHdvcmtzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI3BhcnNlZE5ldHdvcmtzO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdE5ldHdvcmtzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCB7IG5ldHdvcmtzIH0gPSBhd2FpdCB0aGlzLmdldERlZmF1bHROZXR3b3JrSW5mbygpO1xuICAgIHJldHVybiBuZXR3b3JrcztcbiAgfVxuXG4gIGFzeW5jIGdldERlZmF1bHROZXR3b3JrQXJncygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgeyBydW5BcmdzIH0gPSBhd2FpdCB0aGlzLmdldERlZmF1bHROZXR3b3JrSW5mbygpO1xuICAgIHJldHVybiBydW5BcmdzO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdFZvbHVtZUluZm8oKTogUHJvbWlzZTxQYXJzZWRWb2x1bWVJbmZvPiB7XG4gICAgaWYgKCF0aGlzLiNwYXJzZWRWb2x1bWVzKSB7XG4gICAgICB0aGlzLiNwYXJzZWRWb2x1bWVzID0gYXdhaXQgcGFyc2VWb2x1bWVzKHRoaXMuI3N2Y0RlZi5uZXR3b3Jrcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNwYXJzZWRWb2x1bWVzO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdFZvbHVtZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHsgdm9sdW1lcyB9ID0gYXdhaXQgdGhpcy5nZXREZWZhdWx0Vm9sdW1lSW5mbygpO1xuICAgIHJldHVybiB2b2x1bWVzO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdFZvbHVtZUFyZ3MoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHsgcnVuQXJncyB9ID0gYXdhaXQgdGhpcy5nZXREZWZhdWx0Vm9sdW1lSW5mbygpO1xuICAgIHJldHVybiBydW5BcmdzO1xuICB9XG5cbiAgYXN5bmMgcHVsbCgpIHtcbiAgICBpZiAoIXRoaXMuaW1hZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHB1bGwgJyR7dGhpcy5uYW1lfScsIG5vIGltYWdlIGNvbmZpZ3VyZWQuYCk7XG4gICAgfVxuICAgIGF3YWl0IGRvY2tlclB1bGwoeyBpbWFnZTogdGhpcy5pbWFnZSB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldEJhc2VSdW5BcmdzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBpZiAoIXRoaXMuI2Jhc2VSdW5BcmdzKSB7XG4gICAgICBjb25zdCBlbnZBcmdzID0gcGFyc2VFbnYodGhpcy4jc3ZjRGVmLmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IHVsQXJncyA9IHBhcnNlVUxpbWl0cyh0aGlzLiNzdmNEZWYudWxpbWl0cyk7XG4gICAgICBjb25zdCBuZXRBcmdzID0gYXdhaXQgdGhpcy5nZXREZWZhdWx0TmV0d29ya0FyZ3MoKTtcblxuICAgICAgdGhpcy4jYmFzZVJ1bkFyZ3MgPSBbJy0tcm0nLCAuLi5lbnZBcmdzLCAuLi5uZXRBcmdzLCAuLi51bEFyZ3NdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jYmFzZVJ1bkFyZ3M7XG4gIH1cblxuICBhc3luYyBhc3NlbWJsZVJ1bkFyZ3MoXG4gICAgY29udGFpbmVyTmFtZT86IHN0cmluZyA9IHRoaXMuZGVmYXVsdENvbnRhaW5lck5hbWUsXG4gICAgYWxpYXNlcz86IHN0cmluZ1tdID0gW3RoaXMubmFtZV0sXG4gICAgYWRkaXRpb25hbEFyZ3M/OiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGFkZGl0aW9uYWwgPSBhZGRpdGlvbmFsQXJncyB8fCBbXG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXREZWZhdWx0UG9ydEFyZ3MoKSksXG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXREZWZhdWx0Vm9sdW1lQXJncygpKSxcbiAgICBdO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRCYXNlUnVuQXJncygpKSxcbiAgICAgIC4uLihjb250YWluZXJOYW1lID8gWyctLW5hbWUnLCBjb250YWluZXJOYW1lXSA6IFtdKSxcbiAgICAgIC4uLmFsaWFzZXMuZmxhdE1hcCgoYSkgPT4gKGEgPyBbJy0tbmV0d29yay1hbGlhcycsIGFdIDogW10pKSxcbiAgICAgIC4uLmFkZGl0aW9uYWwsXG4gICAgXTtcbiAgfVxuXG4gIGFzeW5jIGdldFJ1bkFyZ3MoXG4gICAgYXZvaWRDb25mbGljdHM/OiBib29sZWFuID0gZmFsc2UsXG4gICAgbWFwTG9jYWxQb3J0cz86IGJvb2xlYW4gPSB0cnVlLFxuICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgeyBuYW1lOiBjTmFtZSwgYWxpYXNlcywgc3VmZml4IH0gPSBhd2FpdCB0aGlzLmdldE5hbWVzKFxuICAgICAgYXZvaWRDb25mbGljdHMsXG4gICAgKTtcbiAgICBjb25zdCB7IHJ1bkFyZ3M6IHBBcmdzIH0gPSBhd2FpdCB0aGlzLmdldFBvcnRzKFxuICAgICAgYXZvaWRDb25mbGljdHMsXG4gICAgICBtYXBMb2NhbFBvcnRzLFxuICAgICk7XG4gICAgY29uc3QgeyBydW5BcmdzOiB2QXJncyB9ID0gYXdhaXQgcGFyc2VWb2x1bWVzKHRoaXMuI3N2Y0RlZi52b2x1bWVzLCBzdWZmaXgpO1xuICAgIHJldHVybiB0aGlzLmFzc2VtYmxlUnVuQXJncyhjTmFtZSwgYWxpYXNlcywgWy4uLnBBcmdzLCAuLi52QXJnc10pO1xuICB9XG5cbiAgYXN5bmMgdXAoe1xuICAgIGhlYWx0aENoZWNrLFxuICAgIGF2b2lkQ29uZmxpY3RzID0gZmFsc2UsXG4gICAgbWFwVm9sdW1lcyA9IHRydWUsXG4gICAgbWFwUG9ydHMgPSB0cnVlLFxuICAgIGNtZCA9IHRoaXMuY21kLFxuICAgIHRyYWNrZXIgPSBkZWZhdWx0VHJhY2tlcixcbiAgfTogVXBPcHRpb25zID0ge30pOiBQcm9taXNlPFVwUmVzdWx0PiB7XG4gICAgY29uc3QgeyBpbWFnZSB9ID0gdGhpcztcbiAgICBpZiAoIWltYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgYnJpbmcgdXAgc2VydmljZSAnJHt0aGlzLm5hbWV9Jywgbm8gaW1hZ2UgZGVmaW5lZC5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuI3RyYWNrZXIuY29udGFpbmVycy5zaXplKSB7XG4gICAgICBidWlsZExvZyhcbiAgICAgICAgYFdhcm5pbmc6IHVwIGNhbGxlZCBvbiBzZXJ2aWNlICcke3RoaXMubmFtZX0nIHdpdGggYWxyZWFkeSBydW5uaW5nIGNvbnRhaW5lcmAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB7IG5hbWU6IGNvbnRhaW5lck5hbWUsIGFsaWFzZXMsIHN1ZmZpeCB9ID0gYXdhaXQgdGhpcy5nZXROYW1lcyhcbiAgICAgIGF2b2lkQ29uZmxpY3RzLFxuICAgICk7XG4gICAgY29uc3QgeyBydW5BcmdzOiBwQXJncywgcG9ydHMgfSA9IGF3YWl0IHRoaXMuZ2V0UG9ydHMoXG4gICAgICBhdm9pZENvbmZsaWN0cyxcbiAgICAgIG1hcFBvcnRzLFxuICAgICk7XG4gICAgY29uc3QgeyBydW5BcmdzOiB2QXJncywgdm9sdW1lcyB9ID0gbWFwVm9sdW1lc1xuICAgICAgPyBhd2FpdCBwYXJzZVZvbHVtZXModGhpcy4jc3ZjRGVmLnZvbHVtZXMsIHN1ZmZpeClcbiAgICAgIDogeyBydW5BcmdzOiBbXSwgdm9sdW1lczogW10gfTtcblxuICAgIGxldCBjb250YWluZXIgPSBhd2FpdCBkb2NrZXJDb250YWluZXJGaW5kKGNvbnRhaW5lck5hbWUsIHsgYWxsOiB0cnVlIH0pO1xuICAgIGlmIChjb250YWluZXIgJiYgIShhd2FpdCBjb250YWluZXIuaXNSdW5uaW5nKCkpKSB7XG4gICAgICBhd2FpdCBjb250YWluZXIuc3RhcnQoKTtcbiAgICB9XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGF3YWl0IHRoaXMucHVsbCgpO1xuICAgICAgYXdhaXQgZG9ja2VyQ29tcG9zZUNyZWF0ZU5ldHdvcmtzKFxuICAgICAgICBhd2FpdCB0aGlzLmdldERlZmF1bHROZXR3b3JrcygpLFxuICAgICAgICB0aGlzLiNkb2NrZXJDb21wb3NlLFxuICAgICAgICB0aGlzLiN0cmFja2VyLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGRvY2tlckNvbXBvc2VDcmVhdGVWb2x1bWVzKFxuICAgICAgICB2b2x1bWVzLFxuICAgICAgICB0aGlzLiNkb2NrZXJDb21wb3NlLFxuICAgICAgICB0aGlzLiN0cmFja2VyLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJ1bkFyZ3MgPSBhd2FpdCB0aGlzLmFzc2VtYmxlUnVuQXJncyhjb250YWluZXJOYW1lLCBhbGlhc2VzLCBbXG4gICAgICAgIC4uLnBBcmdzLFxuICAgICAgICAuLi52QXJncyxcbiAgICAgIF0pO1xuICAgICAgY29udGFpbmVyID0gYXdhaXQgZG9ja2VyQ29udGFpbmVyUnVuRGFlbW9uKHtcbiAgICAgICAgaW1hZ2UsXG4gICAgICAgIHJ1bkFyZ3MsXG4gICAgICAgIGNtZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWlsZExvZyhgUmV1c2luZyBleGlzdGluZyBjb250YWluZXIgZm9yICcke3RoaXMubmFtZX0nIHNlcnZpY2UuYCk7XG4gICAgfVxuICAgIC8vIFRoaXMgc2VydmljZSB0cmFja3MgdGhlIHRoaW5ncyBpdCBjcmVhdGVkXG4gICAgdGhpcy4jdHJhY2tlci5jb250YWluZXJzLnNldChjb250YWluZXJOYW1lLCBjb250YWluZXIpO1xuICAgIC8vIFRoZSBwYXNzZWQgdHJhY2tlciBuZWVkcyB0byB0cmFjayB0aGlzIHNlcnZpY2VcbiAgICB0cmFja2VyLnNlcnZpY2VzLnNldCh0aGlzLm5hbWUsIHRoaXMpO1xuXG4gICAgY29uc3QgaWRBbGlhcyA9IGNvbnRhaW5lci5pZC5zbGljZSgwLCAxMik7XG4gICAgYWxpYXNlcy5wdXNoKGlkQWxpYXMpO1xuICAgIGNvbnN0IHVybHMgPSB0aGlzLmNvbnN0cnVjdG9yLmdldFVybHMocG9ydHMsIGlkQWxpYXMpO1xuXG4gICAgY29uc3QgaW5mbzogVXBSZXN1bHQgPSB7XG4gICAgICBzZXJ2aWNlOiB0aGlzLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgY29udGFpbmVyTmFtZSxcbiAgICAgIGFsaWFzZXMsXG4gICAgICBwb3J0cyxcbiAgICAgIHZvbHVtZXMsXG4gICAgICB1cmxzLFxuICAgIH07XG4gICAgYXdhaXQgaGVhbHRoQ2hlY2s/LihpbmZvKTtcbiAgICByZXR1cm4gaW5mbztcbiAgfVxuXG4gIGFzeW5jIGRvd24oe1xuICAgIGluY2x1ZGVEZWZhdWx0cyA9IGZhbHNlLFxuICAgIGluY2x1ZGVWb2x1bWVzID0gZmFsc2UsXG4gICAgaW5jbHVkZU5ldHdvcmtzID0gZmFsc2UsXG4gIH06IHtcbiAgICBpbmNsdWRlRGVmYXVsdHM/OiBib29sZWFuLFxuICAgIGluY2x1ZGVWb2x1bWVzPzogYm9vbGVhbixcbiAgICBpbmNsdWRlTmV0d29ya3M/OiBib29sZWFuLFxuICB9ID0ge30pIHtcbiAgICBidWlsZExvZyhgQnJpbmdpbmcgZG93biA8JHt0aGlzLm5hbWV9PiBzZXJ2aWNlLi4uYCk7XG4gICAgYXdhaXQgZG9ja2VyQ29tcG9zZVRlYXJkb3duKHtcbiAgICAgIHRyYWNrZXI6IHRoaXMuI3RyYWNrZXIsXG4gICAgICBpbmNsdWRlVm9sdW1lcyxcbiAgICAgIGluY2x1ZGVOZXR3b3JrcyxcbiAgICB9KTtcbiAgICBpZiAoaW5jbHVkZURlZmF1bHRzKSB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBhd2FpdCBkb2NrZXJDb250YWluZXJGaW5kKHRoaXMuZGVmYXVsdENvbnRhaW5lck5hbWUpO1xuICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICBhd2FpdCBjb250YWluZXIudGVhcmRvd24odHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBhcnNlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmb3JjZT86IGJvb2xlYW4gPSB0cnVlLFxuICAgIGRvY2tlckNvbXBvc2U/OiA/KERvY2tlckNvbXBvc2UgfCBzdHJpbmcpLFxuICApOiBQcm9taXNlPD9Eb2NrZXJDb21wb3NlU2VydmljZT4ge1xuICAgIGNvbnN0IHN2Y0RlZiA9IGF3YWl0IGdldFNlcnZpY2VEZWYobmFtZSwgZm9yY2UsIGRvY2tlckNvbXBvc2UpO1xuICAgIHJldHVybiBzdmNEZWYgPyBuZXcgdGhpcyhuYW1lLCBzdmNEZWYsIGRvY2tlckNvbXBvc2UpIDogbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRVcmxzKHBvcnRzOiBQb3J0TWFwW10sIGFsaWFzOiBzdHJpbmcpOiBVcmxNYXBbXSB7XG4gICAgcmV0dXJuIHBvcnRzLm1hcCgoeyBsb2NhbCwgZG9ja2VyIH0pID0+ICh7XG4gICAgICBsb2NhbDogbG9jYWwgPyBgaHR0cDovL2xvY2FsaG9zdDoke2xvY2FsfWAgOiBudWxsLFxuICAgICAgZG9ja2VyOiBkb2NrZXIgPyBgaHR0cDovLyR7YWxpYXN9OiR7ZG9ja2VyfWAgOiBudWxsLFxuICAgIH0pKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyQ29tcG9zZUdldEFsbFNlcnZpY2VzKFxuICBkb2NrZXJDb21wb3NlPzogPyhzdHJpbmcgfCBEb2NrZXJDb21wb3NlKSxcbik6IFByb21pc2U8TWFwT2JqPHN0cmluZywgRG9ja2VyQ29tcG9zZVNlcnZpY2U+PiB7XG4gIGNvbnN0IHsgc2VydmljZXMgfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICByZXR1cm4gbWFwVmFsdWVzQXN5bmMoc2VydmljZXMsIChzLCBuYW1lKSA9PlxuICAgIERvY2tlckNvbXBvc2VTZXJ2aWNlLnBhcnNlKG5hbWUpLFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyQ29tcG9zZVRlYXJkb3duKHtcbiAgaW5jbHVkZURlZmF1bHRzID0gZmFsc2UsXG4gIGluY2x1ZGVWb2x1bWVzID0gZmFsc2UsXG4gIGluY2x1ZGVOZXR3b3JrcyA9IGZhbHNlLFxuICBkb2NrZXJDb21wb3NlLFxuICB0cmFja2VyID0gZGVmYXVsdFRyYWNrZXIsXG59OiB7XG4gIGluY2x1ZGVEZWZhdWx0cz86IGJvb2xlYW4sXG4gIGluY2x1ZGVWb2x1bWVzPzogYm9vbGVhbixcbiAgaW5jbHVkZU5ldHdvcmtzPzogYm9vbGVhbixcbiAgZG9ja2VyQ29tcG9zZT86ID8oc3RyaW5nIHwgRG9ja2VyQ29tcG9zZSksXG4gIHRyYWNrZXI/OiBEb2NrZXJDb21wb3NlUmVzb3VyY2VUcmFja2VyLFxufSA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghdHJhY2tlci5jbGVhbmluZykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRyYWNrZXIuY2xlYW5pbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRyYWNrZXIuc2VydmljZXMuc2l6ZSkge1xuICAgICAgICBidWlsZExvZygnQnJpbmdpbmcgZG93biBzdGFydGVkIGRvY2tlciBzZXJ2aWNlcy4uLicpO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFByb21pc2UuYWxsKFxuICAgICAgICAgIEFycmF5LmZyb20odHJhY2tlci5zZXJ2aWNlcy52YWx1ZXMoKSkubWFwKGFzeW5jIChzKSA9PlxuICAgICAgICAgICAgcy5kb3duKHsgaW5jbHVkZVZvbHVtZXMsIGluY2x1ZGVOZXR3b3JrcyB9KSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0cmFja2VyLnNlcnZpY2VzLmNsZWFyKCk7XG4gICAgICAgIGF3YWl0IHByb21pc2VzO1xuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVEZWZhdWx0cykge1xuICAgICAgICBjb25zdCB7IHNlcnZpY2VzIH0gPSBhd2FpdCBkb2NrZXJDb21wb3NlUmVzb2x2ZShkb2NrZXJDb21wb3NlKTtcbiAgICAgICAgY29uc3Qgc3ZjTmFtZXMgPSBrZXlzKHNlcnZpY2VzKTtcbiAgICAgICAgaWYgKHN2Y05hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIGJ1aWxkTG9nKCdCcmluZ2luZyBkb3duIGRlZmF1bHQgZG9ja2VyIHNlcnZpY2VzLi4uJyk7XG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBzdmNOYW1lcy5tYXAoYXN5bmMgKHMpID0+XG4gICAgICAgICAgICAgIChhd2FpdCBEb2NrZXJDb21wb3NlU2VydmljZS5wYXJzZShzKSk/LmRvd24oe1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEZWZhdWx0cyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlVm9sdW1lcyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlTmV0d29ya3MsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFja2VyLmNvbnRhaW5lcnMuc2l6ZSkge1xuICAgICAgICBidWlsZExvZygnU3RvcHBpbmcgY3JlYXRlZCBkb2NrZXIgY29udGFpbmVycy4uLicpO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFByb21pc2UuYWxsKFxuICAgICAgICAgIEFycmF5LmZyb20odHJhY2tlci5jb250YWluZXJzLnZhbHVlcygpKS5tYXAoYXN5bmMgKGMpID0+XG4gICAgICAgICAgICBjLnRlYXJkb3duKHRydWUpLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRyYWNrZXIuY29udGFpbmVycy5jbGVhcigpO1xuICAgICAgICBhd2FpdCBwcm9taXNlcztcbiAgICAgIH1cblxuICAgICAgaWYgKGluY2x1ZGVWb2x1bWVzKSB7XG4gICAgICAgIGlmICh0cmFja2VyLnZvbHVtZXMuc2l6ZSkge1xuICAgICAgICAgIGJ1aWxkTG9nKCdSZW1vdmluZyBjcmVhdGVkIGRvY2tlciB2b2x1bWVzLi4uJyk7XG4gICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIEFycmF5LmZyb20odHJhY2tlci52b2x1bWVzLnZhbHVlcygpKS5tYXAoYXN5bmMgKHYpID0+IHYucm0oKSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cmFja2VyLnZvbHVtZXMuY2xlYXIoKTtcbiAgICAgICAgICBhd2FpdCBwcm9taXNlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5jbHVkZURlZmF1bHRzKSB7XG4gICAgICAgICAgYnVpbGRMb2coJ1JlbW92aW5nIGRlZmF1bHQgZG9ja2VyIHZvbHVtZXMuLi4nKTtcbiAgICAgICAgICBjb25zdCB7IHZvbHVtZXMgfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgZW50cmllcyh2b2x1bWVzKS5tYXAoYXN5bmMgKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHZhbD8ubmFtZSB8fCBwcmVmaXhOYW1lKGtleSk7XG4gICAgICAgICAgICAgIGF3YWl0IGRvY2tlclZvbHVtZVJtKG5hbWUsIHRydWUpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5jbHVkZU5ldHdvcmtzKSB7XG4gICAgICAgIGlmICh0cmFja2VyLm5ldHdvcmtzLnNpemUpIHtcbiAgICAgICAgICBidWlsZExvZygnUmVtb3ZpbmcgY3JlYXRlZCBkb2NrZXIgbmV0d29ya3MuLi4nKTtcbiAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0cmFja2VyLm5ldHdvcmtzLnZhbHVlcygpKS5tYXAoYXN5bmMgKG4pID0+IG4ucm0oKSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cmFja2VyLm5ldHdvcmtzLmNsZWFyKCk7XG4gICAgICAgICAgYXdhaXQgcHJvbWlzZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluY2x1ZGVEZWZhdWx0cykge1xuICAgICAgICAgIGJ1aWxkTG9nKCdSZW1vdmluZyBkZWZhdWx0IGRvY2tlciBuZXR3b3Jrcy4uLicpO1xuICAgICAgICAgIGNvbnN0IHsgbmV0d29ya3MgfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgZW50cmllcyhuZXR3b3JrcykubWFwKGFzeW5jIChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB2YWw/Lm5hbWUgfHwgcHJlZml4TmFtZShrZXkpO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGRvY2tlck5ldHdvcmtEZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGJ1aWxkTG9nKGBFcnJvciBkZWxldGluZyBuZXR3b3JrICcke25hbWV9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB0cmFja2VyLmNsZWFuaW5nID0gbnVsbDtcbiAgICB9KSgpO1xuICB9XG4gIHJldHVybiB0cmFja2VyLmNsZWFuaW5nO1xufVxuXG5leHBvcnQgdHlwZSBEb2NrZXJDb250YWluZXJJbmZvID0ge3xcbiAgLi4uVXBSZXN1bHQsXG4gIGlkOiBzdHJpbmcsXG4gIGltYWdlOiBzdHJpbmcsXG4gIG5hbWU/OiA/c3RyaW5nLFxuXG4gIC8vIGZvciBjb252ZW5pZW5jZSwgdGhlIGZpcnN0IHBvcnQgbWFwcGluZyBpbmZvXG4gIHBvcnQ/OiA/bnVtYmVyLFxuICBkb2NrZXJQb3J0PzogP251bWJlcixcbiAgdXJsPzogP3N0cmluZyxcbiAgZG9ja2VyVXJsPzogP3N0cmluZyxcbnx9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyQ29tcG9zZVJ1blNlcnZpY2UoXG4gIGtleTogc3RyaW5nLFxuICB1cE9wdGlvbnM/OiBVcE9wdGlvbnMgPSB7fSxcbiAgZG9ja2VyQ29tcG9zZT86ID8oc3RyaW5nIHwgRG9ja2VyQ29tcG9zZSksXG4pOiBQcm9taXNlPERvY2tlckNvbnRhaW5lckluZm8+IHtcbiAgY29uc3Qgc2VydmljZTogP0RvY2tlckNvbXBvc2VTZXJ2aWNlID0gYXdhaXQgRG9ja2VyQ29tcG9zZVNlcnZpY2UucGFyc2UoXG4gICAga2V5LFxuICAgIGZhbHNlLFxuICAgIGRvY2tlckNvbXBvc2UsXG4gICk7XG4gIGlmICghc2VydmljZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZpbmQgc2VydmljZSAnJHtrZXl9J2ApO1xuICB9XG4gIGJ1aWxkTG9nKGBTdGFydGluZyA8JHtzZXJ2aWNlLm5hbWV9PiBzZXJ2aWNlLi4uYCk7XG4gIGNvbnN0IHVwUmVzdWx0OiBVcFJlc3VsdCA9IGF3YWl0IHNlcnZpY2UudXAodXBPcHRpb25zKTtcbiAgY29uc3Qge1xuICAgIGNvbnRhaW5lcixcbiAgICB1cmxzLFxuICAgIHVybHM6IFt7IGxvY2FsOiB1cmwsIGRvY2tlcjogZG9ja2VyVXJsIH1dLFxuICAgIHBvcnRzOiBbeyBsb2NhbDogcG9ydCwgZG9ja2VyOiBkb2NrZXJQb3J0IH1dLFxuICB9ID0gdXBSZXN1bHQ7XG4gIGNvbnN0IHsgaWQsIG5hbWUsIGltYWdlIH0gPSBjb250YWluZXI7XG4gIHVybHMuZm9yRWFjaChcbiAgICAoeyBsb2NhbCB9KSA9PlxuICAgICAgbG9jYWwgJiYgYnVpbGRMb2coYDwke3NlcnZpY2UubmFtZX0+IGFjY2Vzc2libGUgYXQgJHtsb2NhbH1gKSxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICAuLi51cFJlc3VsdCxcbiAgICBpZCxcbiAgICBpbWFnZSxcbiAgICBuYW1lLFxuICAgIHBvcnQsXG4gICAgZG9ja2VyUG9ydCxcbiAgICB1cmwsXG4gICAgZG9ja2VyVXJsLFxuICB9O1xufVxuIl19
|
|
766
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb2NrZXJDb21wb3NlLmpzIl0sIm5hbWVzIjpbImRvY2tlckNvbXBvc2VDcmVhdGVSZXNvdXJjZVRyYWNrZXIiLCJuZXR3b3JrcyIsIk1hcCIsInNlcnZpY2VzIiwiY29udGFpbmVycyIsInZvbHVtZXMiLCJjbGVhbmluZyIsImRlZmF1bHRUcmFja2VyIiwiZG9ja2VyQ29tcG9zZVBhcnNlIiwiZmlsZVBhdGgiLCJ5YW1sIiwibG9hZCIsImZzIiwicmVhZEZpbGUiLCJkYyIsImRvY2tlckNvbXBvc2VHZXRNYWluIiwiZm9yY2UiLCJkb2NrZXJDb21wb3NlUmVzb2x2ZSIsImRvY2tlckNvbXBvc2UiLCJwcmVmaXhOYW1lIiwibmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsIl9fZGlybmFtZSIsImdldFNlcnZpY2VEZWYiLCJwYXJzZVBvcnRzIiwicG9ydHNDZmciLCJhdm9pZENvbmZsaWN0cyIsIm1hcExvY2FsIiwiaG9zdCIsInBvcnRzIiwicnVuQXJncyIsInJlZHVjZSIsImFyZ3MiLCJwb3J0U3RyIiwibHAiLCJkcCIsInNwbGl0IiwibG9jYWxEZWZhdWx0IiwicGFyc2VJbnQiLCJkb2NrZXIiLCJsb2NhbCIsInBvcnQiLCJwdXNoIiwicGFyc2VFbnYiLCJlbnYiLCJBcnJheSIsImlzQXJyYXkiLCJmbGF0TWFwIiwiZSIsImsiLCJ2IiwicGFyc2VVTGltaXRzIiwidWwiLCJzb2Z0IiwiaGFyZCIsInBhcnNlVm9sdW1lcyIsInZvbENmZyIsIm5hbWVTdWZmaXgiLCJ2b2xNYXAiLCJtYXAiLCJzcmMiLCJyZXN0IiwicmVhbFNyYyIsInJlc29sdmUiLCJqb2luIiwicGFyc2VOZXR3b3JrcyIsIm5ldENmZyIsIm5ldE1hcCIsIm4iLCJkb2NrZXJDb21wb3NlQ3JlYXRlTmV0d29ya3MiLCJuYW1lcyIsInRyYWNrZXIiLCJQcm9taXNlIiwiYWxsIiwia2V5IiwidmFsIiwiaW5jbHVkZXMiLCJuZXR3b3JrIiwic2V0IiwiZG9ja2VyQ29tcG9zZUNyZWF0ZVZvbHVtZXMiLCJ2b2x1bWUiLCJEb2NrZXJDb21wb3NlU2VydmljZSIsImNvbnN0cnVjdG9yIiwic2VydmljZURlZiIsImltYWdlIiwiZGVmYXVsdENvbnRhaW5lck5hbWUiLCJjb250YWluZXJfbmFtZSIsImNtZCIsImNvbW1hbmQiLCJlbnZBcmdzIiwiZW52aXJvbm1lbnQiLCJnZXROYW1lcyIsIm1heCIsImkiLCJzdWZmaXgiLCJ0ZXN0TmFtZSIsImNvbnRhaW5lciIsImFsaWFzZXMiLCJFcnJvciIsImdldFBvcnRzIiwiZ2V0RGVmYXVsdFBvcnRJbmZvIiwiZ2V0RGVmYXVsdFBvcnRzIiwiZ2V0RGVmYXVsdFBvcnRBcmdzIiwiZ2V0RGVmYXVsdFVybHMiLCJnZXRVcmxzIiwiZ2V0RGVmYXVsdE5ldHdvcmtJbmZvIiwiZ2V0RGVmYXVsdE5ldHdvcmtzIiwiZ2V0RGVmYXVsdE5ldHdvcmtBcmdzIiwiZ2V0RGVmYXVsdFZvbHVtZUluZm8iLCJnZXREZWZhdWx0Vm9sdW1lcyIsImdldERlZmF1bHRWb2x1bWVBcmdzIiwicHVsbCIsImdldEJhc2VSdW5BcmdzIiwidWxBcmdzIiwidWxpbWl0cyIsIm5ldEFyZ3MiLCJhc3NlbWJsZVJ1bkFyZ3MiLCJjb250YWluZXJOYW1lIiwiYWRkaXRpb25hbEFyZ3MiLCJhZGRpdGlvbmFsIiwiYSIsImdldFJ1bkFyZ3MiLCJtYXBMb2NhbFBvcnRzIiwiY05hbWUiLCJwQXJncyIsInZBcmdzIiwidXAiLCJoZWFsdGhDaGVjayIsIm1hcFZvbHVtZXMiLCJtYXBQb3J0cyIsInNpemUiLCJpc1J1bm5pbmciLCJzdGFydCIsImlkQWxpYXMiLCJpZCIsInNsaWNlIiwidXJscyIsImluZm8iLCJzZXJ2aWNlIiwiZG93biIsImluY2x1ZGVEZWZhdWx0cyIsImluY2x1ZGVWb2x1bWVzIiwiaW5jbHVkZU5ldHdvcmtzIiwiZG9ja2VyQ29tcG9zZVRlYXJkb3duIiwidGVhcmRvd24iLCJwYXJzZSIsInN2Y0RlZiIsImFsaWFzIiwiZG9ja2VyQ29tcG9zZUdldEFsbFNlcnZpY2VzIiwicyIsInByb21pc2VzIiwiZnJvbSIsInZhbHVlcyIsImNsZWFyIiwic3ZjTmFtZXMiLCJsZW5ndGgiLCJjIiwicm0iLCJlcnIiLCJtZXNzYWdlIiwiZG9ja2VyQ29tcG9zZVJ1blNlcnZpY2UiLCJ1cE9wdGlvbnMiLCJ1cFJlc3VsdCIsInVybCIsImRvY2tlclVybCIsImRvY2tlclBvcnQiLCJmb3JFYWNoIl0sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7Ozs7OztBQU1BLDBDOzs7Ozs7Ozs7Ozs7OztBQWNPLE1BQU1BLGtDQUFrQyxHQUFHLE9BQXFDO0FBQ3JGQyxFQUFBQSxRQUFRLEVBQUUsSUFBSUMsR0FBSixFQUQyRTtBQUVyRkMsRUFBQUEsUUFBUSxFQUFFLElBQUlELEdBQUosRUFGMkU7QUFHckZFLEVBQUFBLFVBQVUsRUFBRSxJQUFJRixHQUFKLEVBSHlFO0FBSXJGRyxFQUFBQSxPQUFPLEVBQUUsSUFBSUgsR0FBSixFQUo0RTtBQUtyRkksRUFBQUEsUUFBUSxFQUFFLElBTDJFLEVBQXJDLENBQTNDLEM7OztBQVFQLE1BQU1DLGNBQWMsR0FBR1Asa0NBQWtDLEVBQXpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1RLGtCQUFrQixHQUFHO0FBQ2hDQyxRQUFpQixHQUFHLHNCQURZO0FBRUpDLGdCQUFLQyxJQUFMLENBQVUsTUFBTUMsaUJBQUdDLFFBQUgsQ0FBWUosUUFBWixDQUFoQixDQUZ2QixDOztBQUlQLElBQUlLLEVBQWtCLEdBQUcsSUFBekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNQyxvQkFBb0IsR0FBRztBQUNsQ0MsS0FBZSxHQUFHLEtBRGdCO0FBRVA7QUFDM0IsTUFBSUEsS0FBSyxJQUFJLENBQUNGLEVBQWQsRUFBa0I7QUFDaEJBLElBQUFBLEVBQUUsR0FBRyxNQUFNTixrQkFBa0IsRUFBN0I7QUFDRDtB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LENBSEY7QUFJSnZJLElBQUFBLEtBQUssRUFBRSxDQUFDLEVBQUVXLEtBQUssRUFBRUMsSUFBVCxFQUFlRixNQUFNLEVBQUU4SCxVQUF2QixFQUFELENBSkg7QUFLRkgsRUFBQUEsUUFMSjtBQU1BLFFBQU0sRUFBRTVCLEVBQUYsRUFBTW5ILElBQU4sRUFBWWlFLEtBQVosS0FBc0JZLFNBQTVCO0FBQ0F3QyxFQUFBQSxJQUFJLENBQUM4QixPQUFMO0FBQ0UsR0FBQyxFQUFFOUgsS0FBRixFQUFEO0FBQ0VBLEVBQUFBLEtBQUssSUFBSSxtQkFBVSxJQUFHa0csT0FBTyxDQUFDdkgsSUFBSyxtQkFBa0JxQixLQUFNLEVBQWxELENBRmI7O0FBSUEsU0FBTztBQUNMLE9BQUcwSCxRQURFO0FBRUw1QixJQUFBQSxFQUZLO0FBR0xsRCxJQUFBQSxLQUhLO0FBSUxqRSxJQUFBQSxJQUpLO0FBS0xzQixJQUFBQSxJQUxLO0FBTUw0SCxJQUFBQSxVQU5LO0FBT0xGLElBQUFBLEdBUEs7QUFRTEMsSUFBQUEsU0FSSyxFQUFQOztBQVVEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGdldFBvcnQgZnJvbSAnZ2V0LXBvcnQnO1xuaW1wb3J0IHsga2V5cywgZW50cmllcywgbWFwVmFsdWVzQXN5bmMsIHR5cGUgTWFwT2JqIH0gZnJvbSAnLi9tYXBzJztcblxuaW1wb3J0IHsgYnVpbGRMb2cgfSBmcm9tICcuL3J1bic7XG5pbXBvcnQgeyBkb2NrZXJQdWxsIH0gZnJvbSAnLi9kb2NrZXInO1xuaW1wb3J0IHtcbiAgZG9ja2VyQ29udGFpbmVyRmluZCxcbiAgZG9ja2VyQ29udGFpbmVyUnVuRGFlbW9uLFxuICB0eXBlIERvY2tlckNvbnRhaW5lcixcbn0gZnJvbSAnLi9kb2NrZXIuY29udGFpbmVyJztcbmltcG9ydCB7XG4gIGRvY2tlck5ldHdvcmtEZWxldGUsXG4gIGRvY2tlck5ldHdvcmtDcmVhdGUsXG4gIHR5cGUgRG9ja2VyTmV0d29ya0NyZWF0ZU9wdGlvbnMsXG4gIHR5cGUgRG9ja2VyTmV0d29yayxcbn0gZnJvbSAnLi9kb2NrZXIubmV0d29yayc7XG5pbXBvcnQge1xuICBkb2NrZXJWb2x1bWVDcmVhdGUsXG4gIGRvY2tlclZvbHVtZVJtLFxuICB0eXBlIERvY2tlclZvbHVtZSxcbn0gZnJvbSAnLi9kb2NrZXIudm9sdW1lJztcblxuZXhwb3J0IHR5cGUgRG9ja2VyQ29tcG9zZVJlc291cmNlVHJhY2tlciA9IHtcbiAgc2VydmljZXM6IE1hcDxzdHJpbmcsIERvY2tlckNvbXBvc2VTZXJ2aWNlPixcbiAgbmV0d29ya3M6IE1hcDxzdHJpbmcsIERvY2tlck5ldHdvcms+LFxuICBjb250YWluZXJzOiBNYXA8c3RyaW5nLCBEb2NrZXJDb250YWluZXI+LFxuICB2b2x1bWVzOiBNYXA8c3RyaW5nLCBEb2NrZXJWb2x1bWU+LFxuICBjbGVhbmluZzogP1Byb21pc2U8dm9pZD4sXG59O1xuXG5leHBvcnQgY29uc3QgZG9ja2VyQ29tcG9zZUNyZWF0ZVJlc291cmNlVHJhY2tlciA9ICgpOiBEb2NrZXJDb21wb3NlUmVzb3VyY2VUcmFja2VyID0+ICh7XG4gIG5ldHdvcmtzOiBuZXcgTWFwKCksXG4gIHNlcnZpY2VzOiBuZXcgTWFwKCksXG4gIGNvbnRhaW5lcnM6IG5ldyBNYXAoKSxcbiAgdm9sdW1lczogbmV3IE1hcCgpLFxuICBjbGVhbmluZzogbnVsbCxcbn0pO1xuXG5jb25zdCBkZWZhdWx0VHJhY2tlciA9IGRvY2tlckNvbXBvc2VDcmVhdGVSZXNvdXJjZVRyYWNrZXIoKTtcblxudHlwZSBEb2NrZXJDb21wb3NlRW52RGVmID0gc3RyaW5nW10gfCB7IFtzdHJpbmddOiBzdHJpbmcgfTtcblxudHlwZSBEb2NrZXJDb21wb3NlVUxpbWl0RGVmID0gbnVtYmVyIHwgeyBzb2Z0OiBudW1iZXIsIGhhcmQ6IG51bWJlciB9O1xuXG50eXBlIERvY2tlckNvbXBvc2VVTGltaXRzRGVmID0ge1xuICBbc3RyaW5nXTogRG9ja2VyQ29tcG9zZVVMaW1pdERlZixcbn07XG5cbnR5cGUgRG9ja2VyQ29tcG9zZVNlcnZpY2VEZWYgPSB7XG4gIGNvbnRhaW5lcl9uYW1lPzogc3RyaW5nLFxuICBpbWFnZT86IHN0cmluZyxcbiAgcG9ydHM/OiBzdHJpbmdbXSxcbiAgdm9sdW1lcz86IHN0cmluZ1tdLFxuICBjb21tYW5kPzogc3RyaW5nW10sXG4gIG5ldHdvcmtzPzogc3RyaW5nW10sXG4gIGVudmlyb25tZW50PzogRG9ja2VyQ29tcG9zZUVudkRlZixcbiAgbGlua3M/OiBzdHJpbmdbXSxcbiAgdWxpbWl0cz86IERvY2tlckNvbXBvc2VVTGltaXRzRGVmLFxufTtcblxudHlwZSBEb2NrZXJDb21wb3NlVm9sdW1lRGVmID0ge1xuICBuYW1lPzogc3RyaW5nLFxufTtcblxudHlwZSBEb2NrZXJDb21wb3NlTmV0d29ya0RlZiA9IHtcbiAgLi4uRG9ja2VyTmV0d29ya0NyZWF0ZU9wdGlvbnMsXG4gIG5hbWU/OiBzdHJpbmcsXG59O1xuXG50eXBlIERvY2tlckNvbXBvc2UgPSB7XG4gIHZlcnNpb246IHN0cmluZyxcbiAgc2VydmljZXM/OiB7XG4gICAgW3N0cmluZ106IERvY2tlckNvbXBvc2VTZXJ2aWNlRGVmLFxuICB9LFxuICB2b2x1bWVzPzoge1xuICAgIFtzdHJpbmddOiBEb2NrZXJDb21wb3NlVm9sdW1lRGVmLFxuICB9LFxuICBuZXR3b3Jrcz86IHtcbiAgICBbc3RyaW5nXTogRG9ja2VyQ29tcG9zZU5ldHdvcmtEZWYsXG4gIH0sXG59O1xuXG4vKipcbiAqIFBhcnNlIGEgZG9ja2VyLWNvbXBvc2UueW1sIGZpbGUgaW50byBhIHBvam8gcmVwcmVzZW50YXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCBQYXRoIHRvIHRoZSBkb2NrZXItY29tcG9zZS55bWwgZmlsZVxuICovXG5leHBvcnQgY29uc3QgZG9ja2VyQ29tcG9zZVBhcnNlID0gYXN5bmMgKFxuICBmaWxlUGF0aD86IHN0cmluZyA9ICcuL2RvY2tlci1jb21wb3NlLnltbCcsXG4pOiBQcm9taXNlPERvY2tlckNvbXBvc2U+ID0+ICh5YW1sLmxvYWQoYXdhaXQgZnMucmVhZEZpbGUoZmlsZVBhdGgpKTogYW55KTtcblxubGV0IGRjOiA/RG9ja2VyQ29tcG9zZSA9IG51bGw7XG5cbi8qKlxuICogR2V0IHRoZSBtYWluIGRvY2tlci1jb21wb3NlLnltbCBmcm9tIHRoZSByb290IG9mIHRoZSByZXBvXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlIEZvcmNlIHJlbG9hZCBmcm9tIGZpbGVcbiAqL1xuZXhwb3J0IGNvbnN0IGRvY2tlckNvbXBvc2VHZXRNYWluID0gYXN5bmMgKFxuICBmb3JjZT86IGJvb2xlYW4gPSBmYWxzZSxcbik6IFByb21pc2U8RG9ja2VyQ29tcG9zZT4gPT4ge1xuICBpZiAoZm9yY2UgfHwgIWRjKSB7XG4gICAgZGMgPSBhd2FpdCBkb2NrZXJDb21wb3NlUGFyc2UoKTtcbiAgfVxuICByZXR1cm4gZGM7XG59O1xuXG4vLyBGdW5jdGlvbiB0aGF0IGhhbmRsZXMgcGFzc2VkIGRvY2tlckNvbXBvc2UgYXMgZWl0aGVyIGEgZmlsZSBwYXRoIG9yIGBEb2NrZXJDb21wb3NlYCBvYmplY3QuXG4vLyBJZiBub3QgcGFzc2VkLCBkZWZhdWx0cyB0byB0aGUgbWFpbiBkb2NrZXItY29tcG9zZS55bWwgZnJvbSB0aGUgcm9vdCBvZiB0aGUgcmVwb1xuY29uc3QgZG9ja2VyQ29tcG9zZVJlc29sdmUgPSBhc3luYyAoXG4gIGRvY2tlckNvbXBvc2U/OiA/KHN0cmluZyB8IERvY2tlckNvbXBvc2UpLFxuICBmb3JjZT86IGJvb2xlYW4sXG4pOiBQcm9taXNlPERvY2tlckNvbXBvc2U+ID0+XG4gIHR5cGVvZiBkb2NrZXJDb21wb3NlID09PSAnc3RyaW5nJ1xuICAgID8gZG9ja2VyQ29tcG9zZVBhcnNlKGRvY2tlckNvbXBvc2UpXG4gICAgOiBkb2NrZXJDb21wb3NlIHx8IGRvY2tlckNvbXBvc2VHZXRNYWluKGZvcmNlKTtcblxuLy8gRGV0ZXJtaW5lcyBhbiB1bm5hbWVkIHJlc291cmNlJ3MgbmFtZSBmcm9tIHRoZSBkaXJuYW1lIGNvbWJpbmVkIHdpdGggdGhlIGtleVxuY29uc3QgcHJlZml4TmFtZSA9IChuYW1lOiBzdHJpbmcpID0+IGAke3BhdGguYmFzZW5hbWUoX19kaXJuYW1lKX1fJHtuYW1lfWA7XG5cbmNvbnN0IGdldFNlcnZpY2VEZWYgPSBhc3luYyAoXG4gIG5hbWU6IHN0cmluZyxcbiAgZm9yY2U/OiBib29sZWFuLFxuICBkb2NrZXJDb21wb3NlPzogPyhzdHJpbmcgfCBEb2NrZXJDb21wb3NlKSxcbik6IFByb21pc2U8P0RvY2tlckNvbXBvc2VTZXJ2aWNlRGVmPiA9PlxuICAoYXdhaXQgZG9ja2VyQ29tcG9zZVJlc29sdmUoZG9ja2VyQ29tcG9zZSwgZm9yY2UpKS5zZXJ2aWNlcz8uW25hbWVdIHx8IG51bGw7XG5cbnR5cGUgUG9ydE1hcCA9IHtcbiAgbG9jYWw6ID9udW1iZXIsXG4gIGxvY2FsRGVmYXVsdDogbnVtYmVyLFxuICBkb2NrZXI6IG51bWJlcixcbn07XG5cbnR5cGUgVXJsTWFwID0ge1xuICBsb2NhbDogP3N0cmluZyxcbiAgZG9ja2VyOiA/c3RyaW5nLFxufTtcblxudHlwZSBQYXJzZWRQb3J0SW5mbyA9IHtcbiAgcnVuQXJnczogc3RyaW5nW10sXG4gIHBvcnRzOiBQb3J0TWFwW10sXG59O1xuXG5jb25zdCBwYXJzZVBvcnRzID0gYXN5bmMgKFxuICBwb3J0c0NmZz86IHN0cmluZ1tdID0gW10sXG4gIGF2b2lkQ29uZmxpY3RzPzogYm9vbGVhbiA9IHRydWUsXG4gIG1hcExvY2FsPzogYm9vbGVhbiA9IHRydWUsXG4gIGhvc3Q/OiBzdHJpbmcgPSAnMC4wLjAuMCcsXG4pOiBQcm9taXNlPFBhcnNlZFBvcnRJbmZvPiA9PiB7XG4gIGNvbnN0IHBvcnRzOiBQb3J0TWFwW10gPSBbXTtcbiAgY29uc3QgcnVuQXJncyA9IGF3YWl0IHBvcnRzQ2ZnLnJlZHVjZShhc3luYyAoYXJncywgcG9ydFN0cikgPT4ge1xuICAgIGNvbnN0IFtscCwgZHBdID0gcG9ydFN0ci5zcGxpdCgnOicpO1xuICAgIGNvbnN0IGxvY2FsRGVmYXVsdCA9IHBhcnNlSW50KGxwLCAxMCk7XG4gICAgY29uc3QgZG9ja2VyID0gcGFyc2VJbnQoZHAsIDEwKTtcbiAgICBjb25zdCBsb2NhbCA9IG1hcExvY2FsXG4gICAgICA/IGF2b2lkQ29uZmxpY3RzXG4gICAgICAgID8gYXdhaXQgZ2V0UG9ydCh7IHBvcnQ6IGxvY2FsRGVmYXVsdCwgaG9zdCB9KVxuICAgICAgICA6IGxvY2FsRGVmYXVsdFxuICAgICAgOiBudWxsO1xuICAgIHBvcnRzLnB1c2goeyBsb2NhbCwgbG9jYWxEZWZhdWx0LCBkb2NrZXIgfSk7XG4gICAgcmV0dXJuIGxvY2FsID8gWy4uLihhd2FpdCBhcmdzKSwgJy1wJywgYCR7bG9jYWx9OiR7ZG9ja2VyfWBdIDogYXJncztcbiAgfSwgW10pO1xuICByZXR1cm4geyBydW5BcmdzLCBwb3J0cyB9O1xufTtcblxuY29uc3QgcGFyc2VFbnYgPSAoZW52PzogRG9ja2VyQ29tcG9zZUVudkRlZiA9IFtdKTogc3RyaW5nW10gPT5cbiAgQXJyYXkuaXNBcnJheShlbnYpXG4gICAgPyBlbnYuZmxhdE1hcCgoZSkgPT4gWyctZScsIGVdKVxuICAgIDogZW50cmllcyhlbnYpLmZsYXRNYXAoKFtrLCB2XSkgPT4gWyctZScsIGAke2t9PSR7dn1gXSk7XG5cbmNvbnN0IHBhcnNlVUxpbWl0cyA9ICh1bD86IERvY2tlckNvbXBvc2VVTGltaXRzRGVmID0ge30pOiBzdHJpbmdbXSA9PlxuICBlbnRyaWVzKHVsKS5mbGF0TWFwKChbaywgdl0pID0+IFtcbiAgICAnLS11bGltaXQnLFxuICAgIGAke2t9PSR7XG4gICAgICB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogYCR7di5zb2Z0fSR7di5oYXJkID8gYDoke3YuaGFyZH1gIDogJyd9YFxuICAgIH1gLFxuICBdKTtcblxudHlwZSBQYXJzZWRWb2x1bWVJbmZvID0ge1xuICBydW5BcmdzOiBzdHJpbmdbXSxcbiAgdm9sdW1lczogc3RyaW5nW10sXG59O1xuXG5jb25zdCBwYXJzZVZvbHVtZXMgPSBhc3luYyAoXG4gIHZvbENmZz86IHN0cmluZ1tdID0gW10sXG4gIG5hbWVTdWZmaXg/OiBzdHJpbmcgPSAnJyxcbiAgZG9ja2VyQ29tcG9zZT86ID8oc3RyaW5nIHwgRG9ja2VyQ29tcG9zZSksXG4pOiBQcm9taXNlPFBhcnNlZFZvbHVtZUluZm8+ID0+IHtcbiAgY29uc3QgeyB2b2x1bWVzOiB2b2xNYXAgfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICBjb25zdCB2b2x1bWVzID0gW107XG4gIGNvbnN0IHJ1bkFyZ3M6IHN0cmluZ1tdID0gdm9sQ2ZnXG4gICAgLm1hcCgodikgPT4ge1xuICAgICAgY29uc3QgW3NyYywgLi4ucmVzdF0gPSB2LnNwbGl0KCc6Jyk7XG4gICAgICBjb25zdCBuYW1lID0gdm9sTWFwPy5bc3JjXVxuICAgICAgICA/IGAke3ZvbE1hcFtzcmNdLm5hbWUgfHwgcHJlZml4TmFtZShzcmMpfSR7bmFtZVN1ZmZpeH1gXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHZvbHVtZXMucHVzaChuYW1lKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlYWxTcmMgPSBuYW1lIHx8IHBhdGgucmVzb2x2ZShzcmMpO1xuICAgICAgcmV0dXJuIFtyZWFsU3JjLCAuLi5yZXN0XS5qb2luKCc6Jyk7XG4gICAgfSlcbiAgICAuZmxhdE1hcCgodikgPT4gWyctdicsIHZdKTtcbiAgcmV0dXJuIHsgcnVuQXJncywgdm9sdW1lcyB9O1xufTtcblxudHlwZSBQYXJzZWROZXR3b3JrSW5mbyA9IHtcbiAgcnVuQXJnczogc3RyaW5nW10sXG4gIG5ldHdvcmtzOiBzdHJpbmdbXSxcbn07XG5cbmNvbnN0IHBhcnNlTmV0d29ya3MgPSBhc3luYyAoXG4gIG5ldENmZz86IHN0cmluZ1tdID0gW10sXG4gIGRvY2tlckNvbXBvc2U/OiA/KHN0cmluZyB8IERvY2tlckNvbXBvc2UpLFxuKTogUHJvbWlzZTxQYXJzZWROZXR3b3JrSW5mbz4gPT4ge1xuICBjb25zdCB7IG5ldHdvcmtzOiBuZXRNYXAgfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICBjb25zdCBuZXR3b3JrcyA9IG5ldENmZy5tYXAoKG4pID0+IG5ldE1hcD8uW25dLm5hbWUgfHwgcHJlZml4TmFtZShuKSk7XG4gIHJldHVybiB7XG4gICAgbmV0d29ya3MsXG4gICAgcnVuQXJnczogKG5ldHdvcmtzLmZsYXRNYXAoKG4pID0+IFsnLS1uZXR3b3JrJywgbl0pOiBzdHJpbmdbXSksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZG9ja2VyQ29tcG9zZUNyZWF0ZU5ldHdvcmtzID0gYXN5bmMgKFxuICBuYW1lcz86ID8oc3RyaW5nW10pLFxuICBkb2NrZXJDb21wb3NlPzogPyhzdHJpbmcgfCBEb2NrZXJDb21wb3NlKSxcbiAgdHJhY2tlcj86IERvY2tlckNvbXBvc2VSZXNvdXJjZVRyYWNrZXIgPSBkZWZhdWx0VHJhY2tlcixcbikgPT4ge1xuICBjb25zdCB7IG5ldHdvcmtzID0ge30gfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBlbnRyaWVzKG5ldHdvcmtzKS5tYXAoYXN5bmMgKFtrZXksIHZhbF0pID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSB2YWw/Lm5hbWUgfHwgcHJlZml4TmFtZShrZXkpO1xuICAgICAgaWYgKCFuYW1lcyB8fCBuYW1lcy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICBjb25zdCBuZXR3b3JrID0gYXdhaXQgZG9ja2VyTmV0d29ya0NyZWF0ZShuYW1lLCAodmFsIHx8IHt9OiBhbnkpKTtcbiAgICAgICAgaWYgKG5ldHdvcmspIHtcbiAgICAgICAgICB0cmFja2VyLm5ldHdvcmtzLnNldChuYW1lLCBuZXR3b3JrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGRvY2tlckNvbXBvc2VDcmVhdGVWb2x1bWVzID0gYXN5bmMgKFxuICBuYW1lcz86IHN0cmluZ1tdLFxuICBkb2NrZXJDb21wb3NlPzogPyhzdHJpbmcgfCBEb2NrZXJDb21wb3NlKSxcbiAgdHJhY2tlcj86IERvY2tlckNvbXBvc2VSZXNvdXJjZVRyYWNrZXIgPSBkZWZhdWx0VHJhY2tlcixcbikgPT4ge1xuICBjb25zdCB7IHZvbHVtZXMgPSB7fSB9ID0gYXdhaXQgZG9ja2VyQ29tcG9zZVJlc29sdmUoZG9ja2VyQ29tcG9zZSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGVudHJpZXModm9sdW1lcykubWFwKGFzeW5jIChba2V5LCB2YWxdKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdmFsPy5uYW1lIHx8IHByZWZpeE5hbWUoa2V5KTtcbiAgICAgIGlmICghbmFtZXMgfHwgbmFtZXMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgY29uc3Qgdm9sdW1lID0gYXdhaXQgZG9ja2VyVm9sdW1lQ3JlYXRlKG5hbWUsICh2YWwgfHwge306IGFueSkpO1xuICAgICAgICBpZiAodm9sdW1lKSB7XG4gICAgICAgICAgdHJhY2tlci52b2x1bWVzLnNldChuYW1lLCB2b2x1bWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG4gICk7XG59O1xuXG50eXBlIEhlYWx0aENoZWNrRm4gPSAoVXBSZXN1bHQpID0+IFByb21pc2U8dm9pZD47XG5cbnR5cGUgVXBPcHRpb25zID0ge1xuICBoZWFsdGhDaGVjaz86IEhlYWx0aENoZWNrRm4sXG4gIGF2b2lkQ29uZmxpY3RzPzogYm9vbGVhbixcbiAgbWFwVm9sdW1lcz86IGJvb2xlYW4sXG4gIG1hcFBvcnRzPzogYm9vbGVhbixcbiAgY21kPzogc3RyaW5nW10sXG4gIHRyYWNrZXI/OiBEb2NrZXJDb21wb3NlUmVzb3VyY2VUcmFja2VyLFxufTtcblxudHlwZSBTZXJ2aWNlTmFtZUluZm8gPSB7XG4gIG5hbWU6IHN0cmluZyxcbiAgYWxpYXNlczogc3RyaW5nW10sXG4gIHN1ZmZpeDogc3RyaW5nLFxufTtcblxudHlwZSBVcFJlc3VsdCA9IHt8XG4gIHNlcnZpY2U6IERvY2tlckNvbXBvc2VTZXJ2aWNlLFxuICBjb250YWluZXI6IERvY2tlckNvbnRhaW5lcixcbiAgY29udGFpbmVyTmFtZTogc3RyaW5nLFxuICBhbGlhc2VzOiBzdHJpbmdbXSxcbiAgcG9ydHM6IFBvcnRNYXBbXSxcbiAgdXJsczogVXJsTWFwW10sXG4gIHZvbHVtZXM6IHN0cmluZ1tdLFxufH07XG5cbmV4cG9ydCBjbGFzcyBEb2NrZXJDb21wb3NlU2VydmljZSB7XG4gICNuYW1lOiBzdHJpbmc7XG4gICNzdmNEZWY6IERvY2tlckNvbXBvc2VTZXJ2aWNlRGVmO1xuICAjZG9ja2VyQ29tcG9zZTogPyhEb2NrZXJDb21wb3NlIHwgc3RyaW5nKTtcbiAgI3RyYWNrZXI6IERvY2tlckNvbXBvc2VSZXNvdXJjZVRyYWNrZXIgPSBkb2NrZXJDb21wb3NlQ3JlYXRlUmVzb3VyY2VUcmFja2VyKCk7XG5cbiAgLy8gbGF6aWx5IGNvbXB1dGVkXG4gICNwYXJzZWRQb3J0czogP1BhcnNlZFBvcnRJbmZvID0gbnVsbDtcbiAgI3BhcnNlZE5ldHdvcmtzOiA/UGFyc2VkTmV0d29ya0luZm8gPSBudWxsO1xuICAjcGFyc2VkVm9sdW1lczogP1BhcnNlZFZvbHVtZUluZm8gPSBudWxsO1xuICAjYmFzZVJ1bkFyZ3M6ID8oc3RyaW5nW10pID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZURlZjogRG9ja2VyQ29tcG9zZVNlcnZpY2VEZWYsXG4gICAgZG9ja2VyQ29tcG9zZT86ID8oRG9ja2VyQ29tcG9zZSB8IHN0cmluZyksXG4gICkge1xuICAgIHRoaXMuI25hbWUgPSBuYW1lO1xuICAgIHRoaXMuI3N2Y0RlZiA9IHNlcnZpY2VEZWY7XG4gICAgdGhpcy4jZG9ja2VyQ29tcG9zZSA9IGRvY2tlckNvbXBvc2UgfHwgbnVsbDtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI25hbWU7XG4gIH1cblxuICBnZXQgc2VydmljZURlZigpOiBEb2NrZXJDb21wb3NlU2VydmljZURlZiB7XG4gICAgcmV0dXJuIHRoaXMuI3N2Y0RlZjtcbiAgfVxuXG4gIGdldCBpbWFnZSgpOiA/c3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jc3ZjRGVmLmltYWdlIHx8IG51bGw7XG4gIH1cblxuICBnZXQgZGVmYXVsdENvbnRhaW5lck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jc3ZjRGVmLmNvbnRhaW5lcl9uYW1lIHx8IHRoaXMuI25hbWU7XG4gIH1cblxuICBnZXQgY21kKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy4jc3ZjRGVmLmNvbW1hbmQgfHwgW107XG4gIH1cblxuICBnZXQgZW52QXJncygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHBhcnNlRW52KHRoaXMuI3N2Y0RlZi5lbnZpcm9ubWVudCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCAoYXZhaWxhYmxlKSBjb250YWluZXIgbmFtZSBhbmQgYWxpYXMoZXMpXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gYXZvaWRDb25mbGljdHMgaWYgYHRydWVgLCBmaW5kIGEgY29udGFpbmVyIG5hbWUgdGhhdCBpcyB1bnVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBtYXhpbXVtIG51bWJlciBvZiBuYW1lcyB0byB0cnlcbiAgICovXG4gIGFzeW5jIGdldE5hbWVzKFxuICAgIGF2b2lkQ29uZmxpY3RzPzogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG1heD86IG51bWJlciA9IDEwMCxcbiAgKTogUHJvbWlzZTxTZXJ2aWNlTmFtZUluZm8+IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXg7IGkgKz0gMSkge1xuICAgICAgY29uc3Qgc3VmZml4ID0gaSA/IGAtJHtpfWAgOiAnJztcbiAgICAgIGNvbnN0IHRlc3ROYW1lID0gYCR7dGhpcy5kZWZhdWx0Q29udGFpbmVyTmFtZX0ke3N1ZmZpeH1gO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gYXdhaXQgZG9ja2VyQ29udGFpbmVyRmluZCh0ZXN0TmFtZSwgeyBhbGw6IHRydWUgfSk7XG4gICAgICBpZiAoIWF2b2lkQ29uZmxpY3RzIHx8ICFjb250YWluZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiB0ZXN0TmFtZSxcbiAgICAgICAgICBhbGlhc2VzOiBbYCR7dGhpcy5uYW1lfSR7c3VmZml4fWBdLFxuICAgICAgICAgIHN1ZmZpeCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBmaW5kIGF2YWlsYWJsZSBjb250YWluZXIgbmFtZSBmb3IgJHt0aGlzLmRlZmF1bHRDb250YWluZXJOYW1lfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEdldCAoYXZhaWxhYmxlKSBwb3J0IG1hcHBpbmdzXG4gIGFzeW5jIGdldFBvcnRzKFxuICAgIGF2b2lkQ29uZmxpY3RzPzogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG1hcExvY2FsPzogYm9vbGVhbiA9IHRydWUsXG4gICk6IFByb21pc2U8UGFyc2VkUG9ydEluZm8+IHtcbiAgICByZXR1cm4gcGFyc2VQb3J0cyh0aGlzLiNzdmNEZWYucG9ydHMsIGF2b2lkQ29uZmxpY3RzLCBtYXBMb2NhbCk7XG4gIH1cblxuICBhc3luYyBnZXREZWZhdWx0UG9ydEluZm8oKTogUHJvbWlzZTxQYXJzZWRQb3J0SW5mbz4ge1xuICAgIGlmICghdGhpcy4jcGFyc2VkUG9ydHMpIHtcbiAgICAgIHRoaXMuI3BhcnNlZFBvcnRzID0gYXdhaXQgdGhpcy5nZXRQb3J0cygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jcGFyc2VkUG9ydHM7XG4gIH1cblxuICBhc3luYyBnZXREZWZhdWx0UG9ydHMoKTogUHJvbWlzZTxQb3J0TWFwW10+IHtcbiAgICBjb25zdCB7IHBvcnRzIH0gPSBhd2FpdCB0aGlzLmdldERlZmF1bHRQb3J0SW5mbygpO1xuICAgIHJldHVybiBwb3J0cztcbiAgfVxuXG4gIGFzeW5jIGdldERlZmF1bHRQb3J0QXJncygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgeyBydW5BcmdzIH0gPSBhd2FpdCB0aGlzLmdldERlZmF1bHRQb3J0SW5mbygpO1xuICAgIHJldHVybiBydW5BcmdzO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdFVybHMoKTogUHJvbWlzZTxVcmxNYXBbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldFVybHMoXG4gICAgICBhd2FpdCB0aGlzLmdldERlZmF1bHRQb3J0cygpLFxuICAgICAgdGhpcy5kZWZhdWx0Q29udGFpbmVyTmFtZSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdE5ldHdvcmtJbmZvKCk6IFByb21pc2U8UGFyc2VkTmV0d29ya0luZm8+IHtcbiAgICBpZiAoIXRoaXMuI3BhcnNlZE5ldHdvcmtzKSB7XG4gICAgICB0aGlzLiNwYXJzZWROZXR3b3JrcyA9IGF3YWl0IHBhcnNlTmV0d29ya3ModGhpcy4jc3ZjRGVmLm5ldHdvcmtzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI3BhcnNlZE5ldHdvcmtzO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdE5ldHdvcmtzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCB7IG5ldHdvcmtzIH0gPSBhd2FpdCB0aGlzLmdldERlZmF1bHROZXR3b3JrSW5mbygpO1xuICAgIHJldHVybiBuZXR3b3JrcztcbiAgfVxuXG4gIGFzeW5jIGdldERlZmF1bHROZXR3b3JrQXJncygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgeyBydW5BcmdzIH0gPSBhd2FpdCB0aGlzLmdldERlZmF1bHROZXR3b3JrSW5mbygpO1xuICAgIHJldHVybiBydW5BcmdzO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdFZvbHVtZUluZm8oKTogUHJvbWlzZTxQYXJzZWRWb2x1bWVJbmZvPiB7XG4gICAgaWYgKCF0aGlzLiNwYXJzZWRWb2x1bWVzKSB7XG4gICAgICB0aGlzLiNwYXJzZWRWb2x1bWVzID0gYXdhaXQgcGFyc2VWb2x1bWVzKHRoaXMuI3N2Y0RlZi5uZXR3b3Jrcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiNwYXJzZWRWb2x1bWVzO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdFZvbHVtZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHsgdm9sdW1lcyB9ID0gYXdhaXQgdGhpcy5nZXREZWZhdWx0Vm9sdW1lSW5mbygpO1xuICAgIHJldHVybiB2b2x1bWVzO1xuICB9XG5cbiAgYXN5bmMgZ2V0RGVmYXVsdFZvbHVtZUFyZ3MoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHsgcnVuQXJncyB9ID0gYXdhaXQgdGhpcy5nZXREZWZhdWx0Vm9sdW1lSW5mbygpO1xuICAgIHJldHVybiBydW5BcmdzO1xuICB9XG5cbiAgYXN5bmMgcHVsbCgpIHtcbiAgICBpZiAoIXRoaXMuaW1hZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHB1bGwgJyR7dGhpcy5uYW1lfScsIG5vIGltYWdlIGNvbmZpZ3VyZWQuYCk7XG4gICAgfVxuICAgIGF3YWl0IGRvY2tlclB1bGwoeyBpbWFnZTogdGhpcy5pbWFnZSB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldEJhc2VSdW5BcmdzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBpZiAoIXRoaXMuI2Jhc2VSdW5BcmdzKSB7XG4gICAgICBjb25zdCBlbnZBcmdzID0gcGFyc2VFbnYodGhpcy4jc3ZjRGVmLmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IHVsQXJncyA9IHBhcnNlVUxpbWl0cyh0aGlzLiNzdmNEZWYudWxpbWl0cyk7XG4gICAgICBjb25zdCBuZXRBcmdzID0gYXdhaXQgdGhpcy5nZXREZWZhdWx0TmV0d29ya0FyZ3MoKTtcblxuICAgICAgdGhpcy4jYmFzZVJ1bkFyZ3MgPSBbJy0tcm0nLCAuLi5lbnZBcmdzLCAuLi5uZXRBcmdzLCAuLi51bEFyZ3NdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jYmFzZVJ1bkFyZ3M7XG4gIH1cblxuICBhc3luYyBhc3NlbWJsZVJ1bkFyZ3MoXG4gICAgY29udGFpbmVyTmFtZT86IHN0cmluZyA9IHRoaXMuZGVmYXVsdENvbnRhaW5lck5hbWUsXG4gICAgYWxpYXNlcz86IHN0cmluZ1tdID0gW3RoaXMubmFtZV0sXG4gICAgYWRkaXRpb25hbEFyZ3M/OiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGFkZGl0aW9uYWwgPSBhZGRpdGlvbmFsQXJncyB8fCBbXG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXREZWZhdWx0UG9ydEFyZ3MoKSksXG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXREZWZhdWx0Vm9sdW1lQXJncygpKSxcbiAgICBdO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oYXdhaXQgdGhpcy5nZXRCYXNlUnVuQXJncygpKSxcbiAgICAgIC4uLihjb250YWluZXJOYW1lID8gWyctLW5hbWUnLCBjb250YWluZXJOYW1lXSA6IFtdKSxcbiAgICAgIC4uLmFsaWFzZXMuZmxhdE1hcCgoYSkgPT4gKGEgPyBbJy0tbmV0d29yay1hbGlhcycsIGFdIDogW10pKSxcbiAgICAgIC4uLmFkZGl0aW9uYWwsXG4gICAgXTtcbiAgfVxuXG4gIGFzeW5jIGdldFJ1bkFyZ3MoXG4gICAgYXZvaWRDb25mbGljdHM/OiBib29sZWFuID0gZmFsc2UsXG4gICAgbWFwTG9jYWxQb3J0cz86IGJvb2xlYW4gPSB0cnVlLFxuICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgeyBuYW1lOiBjTmFtZSwgYWxpYXNlcywgc3VmZml4IH0gPSBhd2FpdCB0aGlzLmdldE5hbWVzKFxuICAgICAgYXZvaWRDb25mbGljdHMsXG4gICAgKTtcbiAgICBjb25zdCB7IHJ1bkFyZ3M6IHBBcmdzIH0gPSBhd2FpdCB0aGlzLmdldFBvcnRzKFxuICAgICAgYXZvaWRDb25mbGljdHMsXG4gICAgICBtYXBMb2NhbFBvcnRzLFxuICAgICk7XG4gICAgY29uc3QgeyBydW5BcmdzOiB2QXJncyB9ID0gYXdhaXQgcGFyc2VWb2x1bWVzKHRoaXMuI3N2Y0RlZi52b2x1bWVzLCBzdWZmaXgpO1xuICAgIHJldHVybiB0aGlzLmFzc2VtYmxlUnVuQXJncyhjTmFtZSwgYWxpYXNlcywgWy4uLnBBcmdzLCAuLi52QXJnc10pO1xuICB9XG5cbiAgYXN5bmMgdXAoe1xuICAgIGhlYWx0aENoZWNrLFxuICAgIGF2b2lkQ29uZmxpY3RzID0gZmFsc2UsXG4gICAgbWFwVm9sdW1lcyA9IHRydWUsXG4gICAgbWFwUG9ydHMgPSB0cnVlLFxuICAgIGNtZCA9IHRoaXMuY21kLFxuICAgIHRyYWNrZXIgPSBkZWZhdWx0VHJhY2tlcixcbiAgfTogVXBPcHRpb25zID0ge30pOiBQcm9taXNlPFVwUmVzdWx0PiB7XG4gICAgY29uc3QgeyBpbWFnZSB9ID0gdGhpcztcbiAgICBpZiAoIWltYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgYnJpbmcgdXAgc2VydmljZSAnJHt0aGlzLm5hbWV9Jywgbm8gaW1hZ2UgZGVmaW5lZC5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuI3RyYWNrZXIuY29udGFpbmVycy5zaXplKSB7XG4gICAgICBidWlsZExvZyhcbiAgICAgICAgYFdhcm5pbmc6IHVwIGNhbGxlZCBvbiBzZXJ2aWNlICcke3RoaXMubmFtZX0nIHdpdGggYWxyZWFkeSBydW5uaW5nIGNvbnRhaW5lcmAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB7IG5hbWU6IGNvbnRhaW5lck5hbWUsIGFsaWFzZXMsIHN1ZmZpeCB9ID0gYXdhaXQgdGhpcy5nZXROYW1lcyhcbiAgICAgIGF2b2lkQ29uZmxpY3RzLFxuICAgICk7XG4gICAgY29uc3QgeyBydW5BcmdzOiBwQXJncywgcG9ydHMgfSA9IGF3YWl0IHRoaXMuZ2V0UG9ydHMoXG4gICAgICBhdm9pZENvbmZsaWN0cyxcbiAgICAgIG1hcFBvcnRzLFxuICAgICk7XG4gICAgY29uc3QgeyBydW5BcmdzOiB2QXJncywgdm9sdW1lcyB9ID0gbWFwVm9sdW1lc1xuICAgICAgPyBhd2FpdCBwYXJzZVZvbHVtZXModGhpcy4jc3ZjRGVmLnZvbHVtZXMsIHN1ZmZpeClcbiAgICAgIDogeyBydW5BcmdzOiBbXSwgdm9sdW1lczogW10gfTtcblxuICAgIGxldCBjb250YWluZXIgPSBhd2FpdCBkb2NrZXJDb250YWluZXJGaW5kKGNvbnRhaW5lck5hbWUsIHsgYWxsOiB0cnVlIH0pO1xuICAgIGlmIChjb250YWluZXIgJiYgIShhd2FpdCBjb250YWluZXIuaXNSdW5uaW5nKCkpKSB7XG4gICAgICBhd2FpdCBjb250YWluZXIuc3RhcnQoKTtcbiAgICB9XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGF3YWl0IHRoaXMucHVsbCgpO1xuICAgICAgYXdhaXQgZG9ja2VyQ29tcG9zZUNyZWF0ZU5ldHdvcmtzKFxuICAgICAgICBhd2FpdCB0aGlzLmdldERlZmF1bHROZXR3b3JrcygpLFxuICAgICAgICB0aGlzLiNkb2NrZXJDb21wb3NlLFxuICAgICAgICB0aGlzLiN0cmFja2VyLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGRvY2tlckNvbXBvc2VDcmVhdGVWb2x1bWVzKFxuICAgICAgICB2b2x1bWVzLFxuICAgICAgICB0aGlzLiNkb2NrZXJDb21wb3NlLFxuICAgICAgICB0aGlzLiN0cmFja2VyLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJ1bkFyZ3MgPSBhd2FpdCB0aGlzLmFzc2VtYmxlUnVuQXJncyhjb250YWluZXJOYW1lLCBhbGlhc2VzLCBbXG4gICAgICAgIC4uLnBBcmdzLFxuICAgICAgICAuLi52QXJncyxcbiAgICAgIF0pO1xuICAgICAgY29udGFpbmVyID0gYXdhaXQgZG9ja2VyQ29udGFpbmVyUnVuRGFlbW9uKHtcbiAgICAgICAgaW1hZ2UsXG4gICAgICAgIHJ1bkFyZ3MsXG4gICAgICAgIGNtZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWlsZExvZyhgUmV1c2luZyBleGlzdGluZyBjb250YWluZXIgZm9yICcke3RoaXMubmFtZX0nIHNlcnZpY2UuYCk7XG4gICAgfVxuICAgIC8vIFRoaXMgc2VydmljZSB0cmFja3MgdGhlIHRoaW5ncyBpdCBjcmVhdGVkXG4gICAgdGhpcy4jdHJhY2tlci5jb250YWluZXJzLnNldChjb250YWluZXJOYW1lLCBjb250YWluZXIpO1xuICAgIC8vIFRoZSBwYXNzZWQgdHJhY2tlciBuZWVkcyB0byB0cmFjayB0aGlzIHNlcnZpY2VcbiAgICB0cmFja2VyLnNlcnZpY2VzLnNldCh0aGlzLm5hbWUsIHRoaXMpO1xuXG4gICAgY29uc3QgaWRBbGlhcyA9IGNvbnRhaW5lci5pZC5zbGljZSgwLCAxMik7XG4gICAgYWxpYXNlcy5wdXNoKGlkQWxpYXMpO1xuICAgIGNvbnN0IHVybHMgPSB0aGlzLmNvbnN0cnVjdG9yLmdldFVybHMocG9ydHMsIGlkQWxpYXMpO1xuXG4gICAgY29uc3QgaW5mbzogVXBSZXN1bHQgPSB7XG4gICAgICBzZXJ2aWNlOiB0aGlzLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgY29udGFpbmVyTmFtZSxcbiAgICAgIGFsaWFzZXMsXG4gICAgICBwb3J0cyxcbiAgICAgIHZvbHVtZXMsXG4gICAgICB1cmxzLFxuICAgIH07XG4gICAgYXdhaXQgaGVhbHRoQ2hlY2s/LihpbmZvKTtcbiAgICByZXR1cm4gaW5mbztcbiAgfVxuXG4gIGFzeW5jIGRvd24oe1xuICAgIGluY2x1ZGVEZWZhdWx0cyA9IGZhbHNlLFxuICAgIGluY2x1ZGVWb2x1bWVzID0gZmFsc2UsXG4gICAgaW5jbHVkZU5ldHdvcmtzID0gZmFsc2UsXG4gIH06IHtcbiAgICBpbmNsdWRlRGVmYXVsdHM/OiBib29sZWFuLFxuICAgIGluY2x1ZGVWb2x1bWVzPzogYm9vbGVhbixcbiAgICBpbmNsdWRlTmV0d29ya3M/OiBib29sZWFuLFxuICB9ID0ge30pIHtcbiAgICBidWlsZExvZyhgQnJpbmdpbmcgZG93biA8JHt0aGlzLm5hbWV9PiBzZXJ2aWNlLi4uYCk7XG4gICAgYXdhaXQgZG9ja2VyQ29tcG9zZVRlYXJkb3duKHtcbiAgICAgIHRyYWNrZXI6IHRoaXMuI3RyYWNrZXIsXG4gICAgICBpbmNsdWRlVm9sdW1lcyxcbiAgICAgIGluY2x1ZGVOZXR3b3JrcyxcbiAgICB9KTtcbiAgICBpZiAoaW5jbHVkZURlZmF1bHRzKSB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBhd2FpdCBkb2NrZXJDb250YWluZXJGaW5kKHRoaXMuZGVmYXVsdENvbnRhaW5lck5hbWUpO1xuICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICBhd2FpdCBjb250YWluZXIudGVhcmRvd24odHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBhcnNlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmb3JjZT86IGJvb2xlYW4gPSB0cnVlLFxuICAgIGRvY2tlckNvbXBvc2U/OiA/KERvY2tlckNvbXBvc2UgfCBzdHJpbmcpLFxuICApOiBQcm9taXNlPD9Eb2NrZXJDb21wb3NlU2VydmljZT4ge1xuICAgIGNvbnN0IHN2Y0RlZiA9IGF3YWl0IGdldFNlcnZpY2VEZWYobmFtZSwgZm9yY2UsIGRvY2tlckNvbXBvc2UpO1xuICAgIHJldHVybiBzdmNEZWYgPyBuZXcgdGhpcyhuYW1lLCBzdmNEZWYsIGRvY2tlckNvbXBvc2UpIDogbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRVcmxzKHBvcnRzOiBQb3J0TWFwW10sIGFsaWFzOiBzdHJpbmcpOiBVcmxNYXBbXSB7XG4gICAgcmV0dXJuIHBvcnRzLm1hcCgoeyBsb2NhbCwgZG9ja2VyIH0pID0+ICh7XG4gICAgICBsb2NhbDogbG9jYWwgPyBgaHR0cDovL2xvY2FsaG9zdDoke2xvY2FsfWAgOiBudWxsLFxuICAgICAgZG9ja2VyOiBkb2NrZXIgPyBgaHR0cDovLyR7YWxpYXN9OiR7ZG9ja2VyfWAgOiBudWxsLFxuICAgIH0pKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyQ29tcG9zZUdldEFsbFNlcnZpY2VzKFxuICBkb2NrZXJDb21wb3NlPzogPyhzdHJpbmcgfCBEb2NrZXJDb21wb3NlKSxcbik6IFByb21pc2U8TWFwT2JqPHN0cmluZywgRG9ja2VyQ29tcG9zZVNlcnZpY2U+PiB7XG4gIGNvbnN0IHsgc2VydmljZXMgfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICByZXR1cm4gbWFwVmFsdWVzQXN5bmMoc2VydmljZXMsIChzLCBuYW1lKSA9PlxuICAgIERvY2tlckNvbXBvc2VTZXJ2aWNlLnBhcnNlKG5hbWUpLFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyQ29tcG9zZVRlYXJkb3duKHtcbiAgaW5jbHVkZURlZmF1bHRzID0gZmFsc2UsXG4gIGluY2x1ZGVWb2x1bWVzID0gZmFsc2UsXG4gIGluY2x1ZGVOZXR3b3JrcyA9IGZhbHNlLFxuICBkb2NrZXJDb21wb3NlLFxuICB0cmFja2VyID0gZGVmYXVsdFRyYWNrZXIsXG59OiB7XG4gIGluY2x1ZGVEZWZhdWx0cz86IGJvb2xlYW4sXG4gIGluY2x1ZGVWb2x1bWVzPzogYm9vbGVhbixcbiAgaW5jbHVkZU5ldHdvcmtzPzogYm9vbGVhbixcbiAgZG9ja2VyQ29tcG9zZT86ID8oc3RyaW5nIHwgRG9ja2VyQ29tcG9zZSksXG4gIHRyYWNrZXI/OiBEb2NrZXJDb21wb3NlUmVzb3VyY2VUcmFja2VyLFxufSA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghdHJhY2tlci5jbGVhbmluZykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRyYWNrZXIuY2xlYW5pbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHRyYWNrZXIuc2VydmljZXMuc2l6ZSkge1xuICAgICAgICBidWlsZExvZygnQnJpbmdpbmcgZG93biBzdGFydGVkIGRvY2tlciBzZXJ2aWNlcy4uLicpO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFByb21pc2UuYWxsKFxuICAgICAgICAgIEFycmF5LmZyb20odHJhY2tlci5zZXJ2aWNlcy52YWx1ZXMoKSkubWFwKGFzeW5jIChzKSA9PlxuICAgICAgICAgICAgcy5kb3duKHsgaW5jbHVkZVZvbHVtZXMsIGluY2x1ZGVOZXR3b3JrcyB9KSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0cmFja2VyLnNlcnZpY2VzLmNsZWFyKCk7XG4gICAgICAgIGF3YWl0IHByb21pc2VzO1xuICAgICAgfVxuICAgICAgaWYgKGluY2x1ZGVEZWZhdWx0cykge1xuICAgICAgICBjb25zdCB7IHNlcnZpY2VzIH0gPSBhd2FpdCBkb2NrZXJDb21wb3NlUmVzb2x2ZShkb2NrZXJDb21wb3NlKTtcbiAgICAgICAgY29uc3Qgc3ZjTmFtZXMgPSBrZXlzKHNlcnZpY2VzKTtcbiAgICAgICAgaWYgKHN2Y05hbWVzLmxlbmd0aCkge1xuICAgICAgICAgIGJ1aWxkTG9nKCdCcmluZ2luZyBkb3duIGRlZmF1bHQgZG9ja2VyIHNlcnZpY2VzLi4uJyk7XG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBzdmNOYW1lcy5tYXAoYXN5bmMgKHMpID0+XG4gICAgICAgICAgICAgIChhd2FpdCBEb2NrZXJDb21wb3NlU2VydmljZS5wYXJzZShzKSk/LmRvd24oe1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEZWZhdWx0cyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlVm9sdW1lcyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlTmV0d29ya3MsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFja2VyLmNvbnRhaW5lcnMuc2l6ZSkge1xuICAgICAgICBidWlsZExvZygnU3RvcHBpbmcgY3JlYXRlZCBkb2NrZXIgY29udGFpbmVycy4uLicpO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFByb21pc2UuYWxsKFxuICAgICAgICAgIEFycmF5LmZyb20odHJhY2tlci5jb250YWluZXJzLnZhbHVlcygpKS5tYXAoYXN5bmMgKGMpID0+XG4gICAgICAgICAgICBjLnRlYXJkb3duKHRydWUpLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRyYWNrZXIuY29udGFpbmVycy5jbGVhcigpO1xuICAgICAgICBhd2FpdCBwcm9taXNlcztcbiAgICAgIH1cblxuICAgICAgaWYgKGluY2x1ZGVWb2x1bWVzKSB7XG4gICAgICAgIGlmICh0cmFja2VyLnZvbHVtZXMuc2l6ZSkge1xuICAgICAgICAgIGJ1aWxkTG9nKCdSZW1vdmluZyBjcmVhdGVkIGRvY2tlciB2b2x1bWVzLi4uJyk7XG4gICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIEFycmF5LmZyb20odHJhY2tlci52b2x1bWVzLnZhbHVlcygpKS5tYXAoYXN5bmMgKHYpID0+IHYucm0oKSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cmFja2VyLnZvbHVtZXMuY2xlYXIoKTtcbiAgICAgICAgICBhd2FpdCBwcm9taXNlcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5jbHVkZURlZmF1bHRzKSB7XG4gICAgICAgICAgYnVpbGRMb2coJ1JlbW92aW5nIGRlZmF1bHQgZG9ja2VyIHZvbHVtZXMuLi4nKTtcbiAgICAgICAgICBjb25zdCB7IHZvbHVtZXMgfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgZW50cmllcyh2b2x1bWVzKS5tYXAoYXN5bmMgKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHZhbD8ubmFtZSB8fCBwcmVmaXhOYW1lKGtleSk7XG4gICAgICAgICAgICAgIGF3YWl0IGRvY2tlclZvbHVtZVJtKG5hbWUsIHRydWUpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5jbHVkZU5ldHdvcmtzKSB7XG4gICAgICAgIGlmICh0cmFja2VyLm5ldHdvcmtzLnNpemUpIHtcbiAgICAgICAgICBidWlsZExvZygnUmVtb3ZpbmcgY3JlYXRlZCBkb2NrZXIgbmV0d29ya3MuLi4nKTtcbiAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0cmFja2VyLm5ldHdvcmtzLnZhbHVlcygpKS5tYXAoYXN5bmMgKG4pID0+IG4ucm0oKSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cmFja2VyLm5ldHdvcmtzLmNsZWFyKCk7XG4gICAgICAgICAgYXdhaXQgcHJvbWlzZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluY2x1ZGVEZWZhdWx0cykge1xuICAgICAgICAgIGJ1aWxkTG9nKCdSZW1vdmluZyBkZWZhdWx0IGRvY2tlciBuZXR3b3Jrcy4uLicpO1xuICAgICAgICAgIGNvbnN0IHsgbmV0d29ya3MgfSA9IGF3YWl0IGRvY2tlckNvbXBvc2VSZXNvbHZlKGRvY2tlckNvbXBvc2UpO1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgZW50cmllcyhuZXR3b3JrcykubWFwKGFzeW5jIChba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB2YWw/Lm5hbWUgfHwgcHJlZml4TmFtZShrZXkpO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGRvY2tlck5ldHdvcmtEZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGJ1aWxkTG9nKGBFcnJvciBkZWxldGluZyBuZXR3b3JrICcke25hbWV9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB0cmFja2VyLmNsZWFuaW5nID0gbnVsbDtcbiAgICB9KSgpO1xuICB9XG4gIHJldHVybiB0cmFja2VyLmNsZWFuaW5nO1xufVxuXG5leHBvcnQgdHlwZSBEb2NrZXJDb250YWluZXJJbmZvID0ge3xcbiAgLi4uVXBSZXN1bHQsXG4gIGlkOiBzdHJpbmcsXG4gIGltYWdlOiBzdHJpbmcsXG4gIG5hbWU/OiA/c3RyaW5nLFxuXG4gIC8vIGZvciBjb252ZW5pZW5jZSwgdGhlIGZpcnN0IHBvcnQgbWFwcGluZyBpbmZvXG4gIHBvcnQ/OiA/bnVtYmVyLFxuICBkb2NrZXJQb3J0PzogP251bWJlcixcbiAgdXJsPzogP3N0cmluZyxcbiAgZG9ja2VyVXJsPzogP3N0cmluZyxcbnx9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG9ja2VyQ29tcG9zZVJ1blNlcnZpY2UoXG4gIGtleTogc3RyaW5nLFxuICB1cE9wdGlvbnM/OiBVcE9wdGlvbnMgPSB7fSxcbiAgZG9ja2VyQ29tcG9zZT86ID8oc3RyaW5nIHwgRG9ja2VyQ29tcG9zZSksXG4pOiBQcm9taXNlPERvY2tlckNvbnRhaW5lckluZm8+IHtcbiAgY29uc3Qgc2VydmljZTogP0RvY2tlckNvbXBvc2VTZXJ2aWNlID0gYXdhaXQgRG9ja2VyQ29tcG9zZVNlcnZpY2UucGFyc2UoXG4gICAga2V5LFxuICAgIGZhbHNlLFxuICAgIGRvY2tlckNvbXBvc2UsXG4gICk7XG4gIGlmICghc2VydmljZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZpbmQgc2VydmljZSAnJHtrZXl9J2ApO1xuICB9XG4gIGJ1aWxkTG9nKGBTdGFydGluZyA8JHtzZXJ2aWNlLm5hbWV9PiBzZXJ2aWNlLi4uYCk7XG4gIGNvbnN0IHVwUmVzdWx0OiBVcFJlc3VsdCA9IGF3YWl0IHNlcnZpY2UudXAodXBPcHRpb25zKTtcbiAgY29uc3Qge1xuICAgIGNvbnRhaW5lcixcbiAgICB1cmxzLFxuICAgIHVybHM6IFt7IGxvY2FsOiB1cmwsIGRvY2tlcjogZG9ja2VyVXJsIH1dLFxuICAgIHBvcnRzOiBbeyBsb2NhbDogcG9ydCwgZG9ja2VyOiBkb2NrZXJQb3J0IH1dLFxuICB9ID0gdXBSZXN1bHQ7XG4gIGNvbnN0IHsgaWQsIG5hbWUsIGltYWdlIH0gPSBjb250YWluZXI7XG4gIHVybHMuZm9yRWFjaChcbiAgICAoeyBsb2NhbCB9KSA9PlxuICAgICAgbG9jYWwgJiYgYnVpbGRMb2coYDwke3NlcnZpY2UubmFtZX0+IGFjY2Vzc2libGUgYXQgJHtsb2NhbH1gKSxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICAuLi51cFJlc3VsdCxcbiAgICBpZCxcbiAgICBpbWFnZSxcbiAgICBuYW1lLFxuICAgIHBvcnQsXG4gICAgZG9ja2VyUG9ydCxcbiAgICB1cmwsXG4gICAgZG9ja2VyVXJsLFxuICB9O1xufVxuIl19
|
package/fs.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.writeFile = exports.renameFile = exports.readFile = exports.readDir = exports.moveDir = exports.makeDir = exports.copyFile = exports.copyDir = exports.cleanDir = void 0;
|
|
2
2
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
3
3
|
var _path = _interopRequireDefault(require("path"));
|
|
4
4
|
var _glob = _interopRequireDefault(require("glob"));
|
package/git.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.git = git;exports.gitBranch = gitBranch;exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.git = git;exports.gitBranch = gitBranch;exports.gitInfo = gitInfo;exports.gitRevId = gitRevId;
|
|
2
2
|
var _cp = require("./cp");
|
|
3
3
|
|
|
4
4
|
async function git(args) {
|
package/hg.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.hg = hg;exports.hgBranch = hgBranch;exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.hg = hg;exports.hgBranch = hgBranch;exports.hgInfo = hgInfo;exports.hgRevId = hgRevId;
|
|
2
2
|
var _cp = require("./cp");
|
|
3
3
|
|
|
4
4
|
async function hg(args, cwd) {
|
package/inline-resources.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.dependencies = void 0;exports.inlineResources = inlineResources;exports.inlineResourcesFromString = inlineResourcesFromString;exports.requireResourcesLoader = requireResourcesLoader;exports.webpackInlineResourceLoader = webpackInlineResourceLoader;
|
|
2
2
|
var _glob = _interopRequireDefault(require("glob"));
|
|
3
3
|
var _path = _interopRequireDefault(require("path"));
|
|
4
4
|
var _fs = _interopRequireDefault(require("fs"));
|
package/maps.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.values = exports.mapValuesAsync = exports.mapValues = exports.keys = exports.filterNullish = exports.filterKeys = exports.entries = void 0;
|
|
2
2
|
// Util functions for using objects as maps and preserving type information
|
|
3
3
|
|
|
4
4
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "build-strap",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0-dev.46",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"bytes": "3",
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
"request": "^2.88.2",
|
|
18
18
|
"request-promise-native": "^1.0.9",
|
|
19
19
|
"rimraf": "^3.0.2",
|
|
20
|
-
"set-value": "^4.0.
|
|
20
|
+
"set-value": "^4.0.1",
|
|
21
21
|
"source-map-support": "^0.5.16",
|
|
22
22
|
"stream-counter": "1",
|
|
23
|
-
"tar": "^6.1.
|
|
23
|
+
"tar": "^6.1.9",
|
|
24
24
|
"url-join": "^4.0.1"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {},
|
package/pkg.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.getCfg = getCfg;exports.getPkg = getPkg;exports.getPkgName = getPkgName;exports.getPkgScope = getPkgScope;exports.setPkg = setPkg;
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
package/run.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.buildLog = buildLog;exports.default = void 0;exports.format = format;exports.handleEntryPoint = handleEntryPoint;exports.run = run;exports.runCli = runCli;
|
|
2
2
|
function format(time = new Date()) {
|
|
3
3
|
return time.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, '$1');
|
|
4
4
|
}
|
package/src/copy.js
CHANGED
package/src/docker.js
CHANGED
|
@@ -84,7 +84,7 @@ export async function dockerTagVersion(
|
|
|
84
84
|
['latest', `${major}`, `${major}.${minor}`, `${major}.${minor}.${patch}`],
|
|
85
85
|
repo,
|
|
86
86
|
);
|
|
87
|
-
} else if (branch === getDevBranch()) {
|
|
87
|
+
} else if (branch === (await getDevBranch())) {
|
|
88
88
|
await dockerTag(imageId, ['latest-dev'], repo);
|
|
89
89
|
} else if (branch.match(/^(release|patch)-/)) {
|
|
90
90
|
await dockerTag(imageId, ['latest-rc'], repo);
|
|
@@ -229,10 +229,7 @@ export async function dockerPull({
|
|
|
229
229
|
offline = process.argv.includes('--offline'),
|
|
230
230
|
testUrl,
|
|
231
231
|
}: DockerPullOptions) {
|
|
232
|
-
if (
|
|
233
|
-
offline ||
|
|
234
|
-
!(await isReachable(testUrl || 'https://hub.docker.com'))
|
|
235
|
-
) {
|
|
232
|
+
if (offline || !(await isReachable(testUrl || 'https://hub.docker.com'))) {
|
|
236
233
|
if (offline === false) {
|
|
237
234
|
throw new Error('Offline, cannot docker pull');
|
|
238
235
|
}
|
package/src/version.js
CHANGED
|
@@ -6,9 +6,8 @@ import { getCfg, getPkg } from './pkg';
|
|
|
6
6
|
import { buildLog } from './run';
|
|
7
7
|
|
|
8
8
|
export function getBuild(): string {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return arg || process.env.BUILD_NUMBER || '0';
|
|
9
|
+
const arg = process.argv.find((el) => /^--buildNum=\d+$/.test(el));
|
|
10
|
+
return (arg && arg.substr(11)) || process.env.BUILD_NUMBER || '0';
|
|
12
11
|
}
|
|
13
12
|
|
|
14
13
|
export function getReleaseBranch(): string {
|
|
@@ -17,7 +16,7 @@ export function getReleaseBranch(): string {
|
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
type RepoType = 'git' | 'hg' | 'unknown';
|
|
20
|
-
export function getRepoType(): RepoType {
|
|
19
|
+
export async function getRepoType(): Promise<RepoType> {
|
|
21
20
|
const { repoType } = getCfg();
|
|
22
21
|
|
|
23
22
|
return (
|
|
@@ -36,7 +35,7 @@ type RepoInfo = {
|
|
|
36
35
|
};
|
|
37
36
|
|
|
38
37
|
export async function getRepoInfo(): Promise<RepoInfo> {
|
|
39
|
-
const repoType = getRepoType();
|
|
38
|
+
const repoType = await getRepoType();
|
|
40
39
|
const { branch, revision } =
|
|
41
40
|
repoType === 'git'
|
|
42
41
|
? await gitInfo()
|
|
@@ -49,9 +48,9 @@ export async function getRepoInfo(): Promise<RepoInfo> {
|
|
|
49
48
|
return { branch, revision };
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
export function getDevBranch(): string {
|
|
51
|
+
export async function getDevBranch(): Promise<string> {
|
|
53
52
|
const { devBranch } = getCfg();
|
|
54
|
-
return devBranch || getRepoType() === 'hg' ? 'default' : 'dev';
|
|
53
|
+
return devBranch || (await getRepoType()) === 'hg' ? 'default' : 'dev';
|
|
55
54
|
}
|
|
56
55
|
|
|
57
56
|
export async function getIsRelease(
|
|
@@ -118,7 +117,9 @@ export async function getVersion(
|
|
|
118
117
|
npm,
|
|
119
118
|
info,
|
|
120
119
|
};
|
|
121
|
-
if (logIt)
|
|
120
|
+
if (logIt) {
|
|
121
|
+
buildLog(`Building version ${info}`);
|
|
122
|
+
}
|
|
122
123
|
}
|
|
123
124
|
return version;
|
|
124
125
|
}
|
package/version.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.getBanner = getBanner;exports.getBuild = getBuild;exports.getDevBranch = getDevBranch;exports.getIsRelease = getIsRelease;exports.getReleaseBranch = getReleaseBranch;exports.getRepoInfo = getRepoInfo;exports.getRepoType = getRepoType;exports.getUniqueBuildTag = getUniqueBuildTag;exports.getVersion = getVersion;exports.getVersionCode = getVersionCode;exports.useVersionCache = useVersionCache;
|
|
2
2
|
var _fs = _interopRequireDefault(require("fs"));
|
|
3
3
|
var _git = require("./git");
|
|
4
4
|
var _hg = require("./hg");
|
|
@@ -6,9 +6,8 @@ var _pkg = require("./pkg");
|
|
|
6
6
|
var _run = require("./run");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
|
|
7
7
|
|
|
8
8
|
function getBuild() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return arg || process.env.BUILD_NUMBER || '0';
|
|
9
|
+
const arg = process.argv.find((el) => /^--buildNum=\d+$/.test(el));
|
|
10
|
+
return arg && arg.substr(11) || process.env.BUILD_NUMBER || '0';
|
|
12
11
|
}
|
|
13
12
|
|
|
14
13
|
function getReleaseBranch() {
|
|
@@ -17,7 +16,7 @@ function getReleaseBranch() {
|
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
|
|
20
|
-
function getRepoType() {
|
|
19
|
+
async function getRepoType() {
|
|
21
20
|
const { repoType } = (0, _pkg.getCfg)();
|
|
22
21
|
|
|
23
22
|
return (
|
|
@@ -36,7 +35,7 @@ function getRepoType() {
|
|
|
36
35
|
|
|
37
36
|
|
|
38
37
|
async function getRepoInfo() {
|
|
39
|
-
const repoType = getRepoType();
|
|
38
|
+
const repoType = await getRepoType();
|
|
40
39
|
const { branch, revision } =
|
|
41
40
|
repoType === 'git' ?
|
|
42
41
|
await (0, _git.gitInfo)() :
|
|
@@ -49,9 +48,9 @@ async function getRepoInfo() {
|
|
|
49
48
|
return { branch, revision };
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
function getDevBranch() {
|
|
51
|
+
async function getDevBranch() {
|
|
53
52
|
const { devBranch } = (0, _pkg.getCfg)();
|
|
54
|
-
return devBranch || getRepoType() === 'hg' ? 'default' : 'dev';
|
|
53
|
+
return devBranch || (await getRepoType()) === 'hg' ? 'default' : 'dev';
|
|
55
54
|
}
|
|
56
55
|
|
|
57
56
|
async function getIsRelease(
|
|
@@ -118,7 +117,9 @@ release = null)
|
|
|
118
117
|
npm,
|
|
119
118
|
info };
|
|
120
119
|
|
|
121
|
-
if (logIt)
|
|
120
|
+
if (logIt) {
|
|
121
|
+
(0, _run.buildLog)(`Building version ${info}`);
|
|
122
|
+
}
|
|
122
123
|
}
|
|
123
124
|
return version;
|
|
124
125
|
}
|
|
@@ -139,4 +140,4 @@ async function getUniqueBuildTag() {
|
|
|
139
140
|
const { branch, revision, build } = await getVersion();
|
|
140
141
|
return `${branch}-${revision}-${build}`;
|
|
141
142
|
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLmpzIl0sIm5hbWVzIjpbImdldEJ1aWxkIiwiYXJnIiwicHJvY2VzcyIsImFyZ3YiLCJmaW5kIiwiZWwiLCJ0ZXN0Iiwic3Vic3RyIiwiZW52IiwiQlVJTERfTlVNQkVSIiwiZ2V0UmVsZWFzZUJyYW5jaCIsInJlbGVhc2VCcmFuY2giLCJnZXRSZXBvVHlwZSIsInJlcG9UeXBlIiwiZnMiLCJleGlzdHNTeW5jIiwiZ2V0UmVwb0luZm8iLCJicmFuY2giLCJyZXZpc2lvbiIsIkVycm9yIiwiZ2V0RGV2QnJhbmNoIiwiZGV2QnJhbmNoIiwiZ2V0SXNSZWxlYXNlIiwicGFzc2VkQnJhbmNoIiwicmVsZWFzZU92ZXJyaWRlIiwiaW5jbHVkZXMiLCJjYWNoZVZlcnNpb24iLCJ1c2VWZXJzaW9uQ2FjaGUiLCJ1c2VDYWNoZSIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwibG9nSXQiLCJyZWxlYXNlIiwicGtnVmVycyIsIm5hbWUiLCJtYWpvciIsIm1pbm9yIiwicGF0Y2giLCJtYXRjaCIsImJ1aWxkIiwiaXNSZWxlYXNlIiwic2hvcnQiLCJucG0iLCJpbmZvIiwiZ2V0QmFubmVyIiwiY29weXJpZ2h0IiwidG9kYXkiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJ0b0lTT1N0cmluZyIsImdldFZlcnNpb25Db2RlIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldFVuaXF1ZUJ1aWxkVGFnIl0sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Qjs7QUFFTyxTQUFTQSxRQUFULEdBQTRCO0FBQ2pDLE1BQUlDLEdBQUcsR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWFDLElBQWIsQ0FBa0IsQ0FBQ0MsRUFBRCxLQUFRLG1CQUFtQkMsSUFBbkIsQ0FBd0JELEVBQXhCLENBQTFCLENBQVY7QUFDQUosRUFBQUEsR0FBRyxHQUFHQSxHQUFHLElBQUlBLEdBQUcsQ0FBQ00sTUFBSixDQUFXLEVBQVgsQ0FBYjtBQUNBLFNBQU9OLEdBQUcsSUFB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dUIsaUJBQWYsR0FBb0Q7QUFDekQsUUFBTSxFQUFFcEMsTUFBRixFQUFVQyxRQUFWLEVBQW9CcUIsS0FBcEIsS0FBOEIsTUFBTVQsVUFBVSxFQUFwRDtBQUNBLFNBQVEsR0FBRWIsTUFBTyxJQUFHQyxRQUFTLElBQUdxQixLQUFNLEVBQXRDO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmxvd1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IGdpdEluZm8gfSBmcm9tICcuL2dpdCc7XG5pbXBvcnQgeyBoZ0luZm8gfSBmcm9tICcuL2hnJztcbmltcG9ydCB7IGdldENmZywgZ2V0UGtnIH0gZnJvbSAnLi9wa2cnO1xuaW1wb3J0IHsgYnVpbGRMb2cgfSBmcm9tICcuL3J1bic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdWlsZCgpOiBzdHJpbmcge1xuICBsZXQgYXJnID0gcHJvY2Vzcy5hcmd2LmZpbmQoKGVsKSA9PiAvXi0tYnVpbGROdW09XFxkKyQvLnRlc3QoZWwpKTtcbiAgYXJnID0gYXJnICYmIGFyZy5zdWJzdHIoMTEpO1xuICByZXR1cm4gYXJnIHx8IHByb2Nlc3MuZW52LkJVSUxEX05VTUJFUiB8fCAnMCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxlYXNlQnJhbmNoKCk6IHN0cmluZyB7XG4gIGNvbnN0IHsgcmVsZWFzZUJyYW5jaCB9ID0gZ2V0Q2ZnKCk7XG4gIHJldHVybiByZWxlYXNlQnJhbmNoIHx8ICdtYXN0ZXInO1xufVxuXG50eXBlIFJlcG9UeXBlID0gJ2dpdCcgfCAnaGcnIHwgJ3Vua25vd24nO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlcG9UeXBlKCk6IFJlcG9UeXBlIHtcbiAgY29uc3QgeyByZXBvVHlwZSB9ID0gZ2V0Q2ZnKCk7XG5cbiAgcmV0dXJuIChcbiAgICByZXBvVHlwZSB8fFxuICAgIChmcy5leGlzdHNTeW5jKCcuLy5oZycpXG4gICAgICA/ICdoZydcbiAgICAgIDogZnMuZXhpc3RzU3luYygnLi8uZ2l0JylcbiAgICAgID8gJ2dpdCdcbiAgICAgIDogJ3Vua25vd24nKVxuICApO1xufVxuXG50eXBlIFJlcG9JbmZvID0ge1xuICBicmFuY2g6IHN0cmluZyxcbiAgcmV2aXNpb246IHN0cmluZyxcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZXBvSW5mbygpOiBQcm9taXNlPFJlcG9JbmZvPiB7XG4gIGNvbnN0IHJlcG9UeXBlID0gZ2V0UmVwb1R5cGUoKTtcbiAgY29uc3QgeyBicmFuY2gsIHJldmlzaW9uIH0gPVxuICAgIHJlcG9UeXBlID09PSAnZ2l0J1xuICAgICAgPyBhd2FpdCBnaXRJbmZvKClcbiAgICAgIDogcmVwb1R5cGUgPT09ICdoZydcbiAgICAgID8gYXdhaXQgaGdJbmZvKClcbiAgICAgIDoge307XG4gIGlmICghYnJhbmNoIHx8ICFyZXZpc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHBhcnNlIGJyYW5jaCBhbmQgcmV2aXNpb24gZnJvbSBzb3VyY2UgcmVwby4nKTtcbiAgfVxuICByZXR1cm4geyBicmFuY2gsIHJldmlzaW9uIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZCcmFuY2goKTogc3RyaW5nIHtcbiAgY29uc3QgeyBkZXZCcmFuY2ggfSA9IGdldENmZygpO1xuICByZXR1cm4gZGV2QnJhbmNoIHx8IGdldFJlcG9UeXBlKCkgPT09ICdoZycgPyAnZGVmYXVsdCcgOiAnZGV2Jztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldElzUmVsZWFzZShcbiAgcGFzc2VkQnJhbmNoPzogP3N0cmluZyA9IG51bGwsXG4gIHJlbGVhc2VPdmVycmlkZT86ID9ib29sZWFuID0gbnVsbCxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBicmFuY2ggPSBwYXNzZWRCcmFuY2ggfHwgKGF3YWl0IGdldFJlcG9JbmZvKCkpLmJyYW5jaDtcbiAgcmV0dXJuIHJlbGVhc2VPdmVycmlkZSAhPSBudWxsXG4gICAgPyByZWxlYXNlT3ZlcnJpZGVcbiAgICA6IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1mb3JjZS1yZWxlYXNlLXZlcnNpb24nKVxuICAgID8gdHJ1ZVxuICAgIDogYnJhbmNoID09PSBnZXRSZWxlYXNlQnJhbmNoKCk7XG59XG5cbmxldCBjYWNoZVZlcnNpb24gPSB0cnVlO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVZlcnNpb25DYWNoZSh1c2VDYWNoZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgY2FjaGVWZXJzaW9uID0gdXNlQ2FjaGU7XG59XG5cbmV4cG9ydCB0eXBlIFZlcnNpb24gPSB7fFxuICBicmFuY2g6IHN0cmluZyxcbiAgYnVpbGQ6IHN0cmluZyxcbiAgaW5mbzogc3RyaW5nLFxuICBpc1JlbGVhc2U6IGJvb2xlYW4sXG4gIG1ham9yOiBzdHJpbmcsXG4gIG1pbm9yOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgbnBtOiBzdHJpbmcsXG4gIHBhdGNoOiBzdHJpbmcsXG4gIHJldmlzaW9uOiBzdHJpbmcsXG4gIHNob3J0OiBzdHJpbmcsXG58fTtcblxubGV0IHZlcnNpb24gPSBudWxsO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb24oXG4gIGxvZ0l0OiBib29sZWFuID0gdHJ1ZSxcbiAgcmVsZWFzZTogP2Jvb2xlYW4gPSBudWxsLFxuKTogUHJvbWlzZTxWZXJzaW9uPiB7XG4gIGlmICghY2FjaGVWZXJzaW9uIHx8IHZlcnNpb24gPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgdmVyc2lvbjogcGtnVmVycywgbmFtZSB9ID0gZ2V0UGtnKCk7XG4gICAgY29uc3QgeyBicmFuY2gsIHJldmlzaW9uIH0gPSBhd2FpdCBnZXRSZXBvSW5mbygpO1xuICAgIGNvbnN0IFssIG1ham9yLCBtaW5vciwgcGF0Y2hdID1cbiAgICAgIHBrZ1ZlcnMubWF0Y2goL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykkLykgfHwgW107XG4gICAgaWYgKCFtYWpvciB8fCAhbWlub3IgfHwgIXBhdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmVyc2lvbiBmb3JtYXQgaW4gcGFja2FnZS5qc29uJyk7XG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkID0gZ2V0QnVpbGQoKTtcbiAgICBjb25zdCBpc1JlbGVhc2UgPSBhd2FpdCBnZXRJc1JlbGVhc2UoYnJhbmNoLCByZWxlYXNlKTtcbiAgICBjb25zdCBzaG9ydCA9IGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNofWA7XG4gICAgY29uc3QgbnBtID0gYCR7c2hvcnR9JHtpc1JlbGVhc2UgPyAnJyA6IGAtJHticmFuY2h9LiR7YnVpbGR9YH1gO1xuICAgIGNvbnN0IGluZm8gPSBgJHtzaG9ydH0ke1xuICAgICAgaXNSZWxlYXNlID8gYCske2J1aWxkfS5gIDogYC0ke2JyYW5jaH0uJHtidWlsZH0rYFxuICAgIH0ke3JldmlzaW9ufWA7XG4gICAgdmVyc2lvbiA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBicmFuY2gsXG4gICAgICByZXZpc2lvbixcbiAgICAgIG1ham9yLFxuICAgICAgbWlub3IsXG4gICAgICBwYXRjaCxcbiAgICAgIGJ1aWxkLFxuICAgICAgc2hvcnQsXG4gICAgICBpc1JlbGVhc2UsXG4gICAgICBucG0sXG4gICAgICBpbmZvLFxuICAgIH07XG4gICAgaWYgKGxvZ0l0KSBidWlsZExvZyhgQnVpbGRpbmcgdmVyc2lvbiAke2luZm99YCk7XG4gIH1cbiAgcmV0dXJuIHZlcnNpb247XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCYW5uZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBjb3B5cmlnaHQgPSAnJyB9ID0gZ2V0Q2ZnKCk7XG4gIGNvbnN0IHsgaW5mbywgbmFtZSB9ID0gYXdhaXQgZ2V0VmVyc2lvbigpO1xuICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gIHJldHVybiBgJHtuYW1lfSB2JHtpbmZvfSB8IChjKSAke3RvZGF5LmdldEZ1bGxZZWFyKCl9ICR7Y29weXJpZ2h0fSB8IGJ1aWx0IG9uICR7dG9kYXkudG9JU09TdHJpbmcoKX1gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VmVyc2lvbkNvZGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGAvLyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWRcbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJHtKU09OLnN0cmluZ2lmeShhd2FpdCBnZXRWZXJzaW9uKCksIG51bGwsIDIpfWA7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRVbmlxdWVCdWlsZFRhZygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IGJyYW5jaCwgcmV2aXNpb24sIGJ1aWxkIH0gPSBhd2FpdCBnZXRWZXJzaW9uKCk7XG4gIHJldHVybiBgJHticmFuY2h9LSR7cmV2aXNpb259LSR7YnVpbGR9YDtcbn1cbiJdfQ==
|
|
143
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLmpzIl0sIm5hbWVzIjpbImdldEJ1aWxkIiwiYXJnIiwicHJvY2VzcyIsImFyZ3YiLCJmaW5kIiwiZWwiLCJ0ZXN0Iiwic3Vic3RyIiwiZW52IiwiQlVJTERfTlVNQkVSIiwiZ2V0UmVsZWFzZUJyYW5jaCIsInJlbGVhc2VCcmFuY2giLCJnZXRSZXBvVHlwZSIsInJlcG9UeXBlIiwiZnMiLCJleGlzdHNTeW5jIiwiZ2V0UmVwb0luZm8iLCJicmFuY2giLCJyZXZpc2lvbiIsIkVycm9yIiwiZ2V0RGV2QnJhbmNoIiwiZGV2QnJhbmNoIiwiZ2V0SXNSZWxlYXNlIiwicGFzc2VkQnJhbmNoIiwicmVsZWFzZU92ZXJyaWRlIiwiaW5jbHVkZXMiLCJjYWNoZVZlcnNpb24iLCJ1c2VWZXJzaW9uQ2FjaGUiLCJ1c2VDYWNoZSIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwibG9nSXQiLCJyZWxlYXNlIiwicGtnVmVycyIsIm5hbWUiLCJtYWpvciIsIm1pbm9yIiwicGF0Y2giLCJtYXRjaCIsImJ1aWxkIiwiaXNSZWxlYXNlIiwic2hvcnQiLCJucG0iLCJpbmZvIiwiZ2V0QmFubmVyIiwiY29weXJpZ2h0IiwidG9kYXkiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJ0b0lTT1N0cmluZyIsImdldFZlcnNpb25Db2RlIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldFVuaXF1ZUJ1aWxkVGFnIl0sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Qjs7QUFFTyxTQUFTQSxRQUFULEdBQTRCO0FBQ2pDLFFBQU1DLEdBQUcsR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWFDLElBQWIsQ0FBa0IsQ0FBQ0MsRUFBRCxLQUFRLG1CQUFtQkMsSUFBbkIsQ0FBd0JELEVBQXhCLENBQTFCLENBQVo7QUFDQSxTQUFRSixHQUFHLElBQUlBLEdBQUcsQ0FBQ00sTUFBSixDQUFXLEVBQVgsQ0FBUixJQUEyQkwsT0FBTyxDQUFDTSxHQUFSLENBQVlDLFlB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LGVBQWV1QixpQkFBZixHQUFvRDtBQUN6RCxRQUFNLEVBQUVwQyxNQUFGLEVBQVVDLFFBQVYsRUFBb0JxQixLQUFwQixLQUE4QixNQUFNVCxVQUFVLEVBQXBEO0FBQ0EsU0FBUSxHQUFFYixNQUFPLElBQUdDLFFBQVMsSUFBR3FCLEtBQU0sRUFBdEM7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgZ2l0SW5mbyB9IGZyb20gJy4vZ2l0JztcbmltcG9ydCB7IGhnSW5mbyB9IGZyb20gJy4vaGcnO1xuaW1wb3J0IHsgZ2V0Q2ZnLCBnZXRQa2cgfSBmcm9tICcuL3BrZyc7XG5pbXBvcnQgeyBidWlsZExvZyB9IGZyb20gJy4vcnVuJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1aWxkKCk6IHN0cmluZyB7XG4gIGNvbnN0IGFyZyA9IHByb2Nlc3MuYXJndi5maW5kKChlbCkgPT4gL14tLWJ1aWxkTnVtPVxcZCskLy50ZXN0KGVsKSk7XG4gIHJldHVybiAoYXJnICYmIGFyZy5zdWJzdHIoMTEpKSB8fCBwcm9jZXNzLmVudi5CVUlMRF9OVU1CRVIgfHwgJzAnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsZWFzZUJyYW5jaCgpOiBzdHJpbmcge1xuICBjb25zdCB7IHJlbGVhc2VCcmFuY2ggfSA9IGdldENmZygpO1xuICByZXR1cm4gcmVsZWFzZUJyYW5jaCB8fCAnbWFzdGVyJztcbn1cblxudHlwZSBSZXBvVHlwZSA9ICdnaXQnIHwgJ2hnJyB8ICd1bmtub3duJztcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRSZXBvVHlwZSgpOiBQcm9taXNlPFJlcG9UeXBlPiB7XG4gIGNvbnN0IHsgcmVwb1R5cGUgfSA9IGdldENmZygpO1xuXG4gIHJldHVybiAoXG4gICAgcmVwb1R5cGUgfHxcbiAgICAoZnMuZXhpc3RzU3luYygnLi8uaGcnKVxuICAgICAgPyAnaGcnXG4gICAgICA6IGZzLmV4aXN0c1N5bmMoJy4vLmdpdCcpXG4gICAgICA/ICdnaXQnXG4gICAgICA6ICd1bmtub3duJylcbiAgKTtcbn1cblxudHlwZSBSZXBvSW5mbyA9IHtcbiAgYnJhbmNoOiBzdHJpbmcsXG4gIHJldmlzaW9uOiBzdHJpbmcsXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UmVwb0luZm8oKTogUHJvbWlzZTxSZXBvSW5mbz4ge1xuICBjb25zdCByZXBvVHlwZSA9IGF3YWl0IGdldFJlcG9UeXBlKCk7XG4gIGNvbnN0IHsgYnJhbmNoLCByZXZpc2lvbiB9ID1cbiAgICByZXBvVHlwZSA9PT0gJ2dpdCdcbiAgICAgID8gYXdhaXQgZ2l0SW5mbygpXG4gICAgICA6IHJlcG9UeXBlID09PSAnaGcnXG4gICAgICA/IGF3YWl0IGhnSW5mbygpXG4gICAgICA6IHt9O1xuICBpZiAoIWJyYW5jaCB8fCAhcmV2aXNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBicmFuY2ggYW5kIHJldmlzaW9uIGZyb20gc291cmNlIHJlcG8uJyk7XG4gIH1cbiAgcmV0dXJuIHsgYnJhbmNoLCByZXZpc2lvbiB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGV2QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgZGV2QnJhbmNoIH0gPSBnZXRDZmcoKTtcbiAgcmV0dXJuIGRldkJyYW5jaCB8fCAoYXdhaXQgZ2V0UmVwb1R5cGUoKSkgPT09ICdoZycgPyAnZGVmYXVsdCcgOiAnZGV2Jztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldElzUmVsZWFzZShcbiAgcGFzc2VkQnJhbmNoPzogP3N0cmluZyA9IG51bGwsXG4gIHJlbGVhc2VPdmVycmlkZT86ID9ib29sZWFuID0gbnVsbCxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBicmFuY2ggPSBwYXNzZWRCcmFuY2ggfHwgKGF3YWl0IGdldFJlcG9JbmZvKCkpLmJyYW5jaDtcbiAgcmV0dXJuIHJlbGVhc2VPdmVycmlkZSAhPSBudWxsXG4gICAgPyByZWxlYXNlT3ZlcnJpZGVcbiAgICA6IHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1mb3JjZS1yZWxlYXNlLXZlcnNpb24nKVxuICAgID8gdHJ1ZVxuICAgIDogYnJhbmNoID09PSBnZXRSZWxlYXNlQnJhbmNoKCk7XG59XG5cbmxldCBjYWNoZVZlcnNpb24gPSB0cnVlO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVZlcnNpb25DYWNoZSh1c2VDYWNoZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgY2FjaGVWZXJzaW9uID0gdXNlQ2FjaGU7XG59XG5cbmV4cG9ydCB0eXBlIFZlcnNpb24gPSB7fFxuICBicmFuY2g6IHN0cmluZyxcbiAgYnVpbGQ6IHN0cmluZyxcbiAgaW5mbzogc3RyaW5nLFxuICBpc1JlbGVhc2U6IGJvb2xlYW4sXG4gIG1ham9yOiBzdHJpbmcsXG4gIG1pbm9yOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgbnBtOiBzdHJpbmcsXG4gIHBhdGNoOiBzdHJpbmcsXG4gIHJldmlzaW9uOiBzdHJpbmcsXG4gIHNob3J0OiBzdHJpbmcsXG58fTtcblxubGV0IHZlcnNpb24gPSBudWxsO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb24oXG4gIGxvZ0l0OiBib29sZWFuID0gdHJ1ZSxcbiAgcmVsZWFzZTogP2Jvb2xlYW4gPSBudWxsLFxuKTogUHJvbWlzZTxWZXJzaW9uPiB7XG4gIGlmICghY2FjaGVWZXJzaW9uIHx8IHZlcnNpb24gPT0gbnVsbCkge1xuICAgIGNvbnN0IHsgdmVyc2lvbjogcGtnVmVycywgbmFtZSB9ID0gZ2V0UGtnKCk7XG4gICAgY29uc3QgeyBicmFuY2gsIHJldmlzaW9uIH0gPSBhd2FpdCBnZXRSZXBvSW5mbygpO1xuICAgIGNvbnN0IFssIG1ham9yLCBtaW5vciwgcGF0Y2hdID1cbiAgICAgIHBrZ1ZlcnMubWF0Y2goL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykkLykgfHwgW107XG4gICAgaWYgKCFtYWpvciB8fCAhbWlub3IgfHwgIXBhdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmVyc2lvbiBmb3JtYXQgaW4gcGFja2FnZS5qc29uJyk7XG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkID0gZ2V0QnVpbGQoKTtcbiAgICBjb25zdCBpc1JlbGVhc2UgPSBhd2FpdCBnZXRJc1JlbGVhc2UoYnJhbmNoLCByZWxlYXNlKTtcbiAgICBjb25zdCBzaG9ydCA9IGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNofWA7XG4gICAgY29uc3QgbnBtID0gYCR7c2hvcnR9JHtpc1JlbGVhc2UgPyAnJyA6IGAtJHticmFuY2h9LiR7YnVpbGR9YH1gO1xuICAgIGNvbnN0IGluZm8gPSBgJHtzaG9ydH0ke1xuICAgICAgaXNSZWxlYXNlID8gYCske2J1aWxkfS5gIDogYC0ke2JyYW5jaH0uJHtidWlsZH0rYFxuICAgIH0ke3JldmlzaW9ufWA7XG4gICAgdmVyc2lvbiA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBicmFuY2gsXG4gICAgICByZXZpc2lvbixcbiAgICAgIG1ham9yLFxuICAgICAgbWlub3IsXG4gICAgICBwYXRjaCxcbiAgICAgIGJ1aWxkLFxuICAgICAgc2hvcnQsXG4gICAgICBpc1JlbGVhc2UsXG4gICAgICBucG0sXG4gICAgICBpbmZvLFxuICAgIH07XG4gICAgaWYgKGxvZ0l0KSB7XG4gICAgICBidWlsZExvZyhgQnVpbGRpbmcgdmVyc2lvbiAke2luZm99YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2ZXJzaW9uO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmFubmVyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgY29weXJpZ2h0ID0gJycgfSA9IGdldENmZygpO1xuICBjb25zdCB7IGluZm8sIG5hbWUgfSA9IGF3YWl0IGdldFZlcnNpb24oKTtcbiAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICByZXR1cm4gYCR7bmFtZX0gdiR7aW5mb30gfCAoYykgJHt0b2RheS5nZXRGdWxsWWVhcigpfSAke2NvcHlyaWdodH0gfCBidWlsdCBvbiAke3RvZGF5LnRvSVNPU3RyaW5nKCl9YDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb25Db2RlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBgLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICR7SlNPTi5zdHJpbmdpZnkoYXdhaXQgZ2V0VmVyc2lvbigpLCBudWxsLCAyKX1gO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VW5pcXVlQnVpbGRUYWcoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBicmFuY2gsIHJldmlzaW9uLCBidWlsZCB9ID0gYXdhaXQgZ2V0VmVyc2lvbigpO1xuICByZXR1cm4gYCR7YnJhbmNofS0ke3JldmlzaW9ufS0ke2J1aWxkfWA7XG59XG4iXX0=
|
package/version.js.flow
CHANGED
|
@@ -6,9 +6,8 @@ import { getCfg, getPkg } from './pkg';
|
|
|
6
6
|
import { buildLog } from './run';
|
|
7
7
|
|
|
8
8
|
export function getBuild(): string {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return arg || process.env.BUILD_NUMBER || '0';
|
|
9
|
+
const arg = process.argv.find((el) => /^--buildNum=\d+$/.test(el));
|
|
10
|
+
return (arg && arg.substr(11)) || process.env.BUILD_NUMBER || '0';
|
|
12
11
|
}
|
|
13
12
|
|
|
14
13
|
export function getReleaseBranch(): string {
|
|
@@ -17,7 +16,7 @@ export function getReleaseBranch(): string {
|
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
type RepoType = 'git' | 'hg' | 'unknown';
|
|
20
|
-
export function getRepoType(): RepoType {
|
|
19
|
+
export async function getRepoType(): Promise<RepoType> {
|
|
21
20
|
const { repoType } = getCfg();
|
|
22
21
|
|
|
23
22
|
return (
|
|
@@ -36,7 +35,7 @@ type RepoInfo = {
|
|
|
36
35
|
};
|
|
37
36
|
|
|
38
37
|
export async function getRepoInfo(): Promise<RepoInfo> {
|
|
39
|
-
const repoType = getRepoType();
|
|
38
|
+
const repoType = await getRepoType();
|
|
40
39
|
const { branch, revision } =
|
|
41
40
|
repoType === 'git'
|
|
42
41
|
? await gitInfo()
|
|
@@ -49,9 +48,9 @@ export async function getRepoInfo(): Promise<RepoInfo> {
|
|
|
49
48
|
return { branch, revision };
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
export function getDevBranch(): string {
|
|
51
|
+
export async function getDevBranch(): Promise<string> {
|
|
53
52
|
const { devBranch } = getCfg();
|
|
54
|
-
return devBranch || getRepoType() === 'hg' ? 'default' : 'dev';
|
|
53
|
+
return devBranch || (await getRepoType()) === 'hg' ? 'default' : 'dev';
|
|
55
54
|
}
|
|
56
55
|
|
|
57
56
|
export async function getIsRelease(
|
|
@@ -118,7 +117,9 @@ export async function getVersion(
|
|
|
118
117
|
npm,
|
|
119
118
|
info,
|
|
120
119
|
};
|
|
121
|
-
if (logIt)
|
|
120
|
+
if (logIt) {
|
|
121
|
+
buildLog(`Building version ${info}`);
|
|
122
|
+
}
|
|
122
123
|
}
|
|
123
124
|
return version;
|
|
124
125
|
}
|
package/yarn.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.yarnAdv = yarnAdv;exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.yarn = yarn;exports.yarnAdv = yarnAdv;exports.yarnFiles = void 0;exports.yarnInstall = yarnInstall;exports.yarnUpgrade = yarnUpgrade;
|
|
2
2
|
var _md5File = _interopRequireDefault(require("md5-file"));
|
|
3
3
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
4
4
|
var _path = _interopRequireDefault(require("path"));
|