@pipeline-builder/pipeline-manager 4.4.19 → 4.5.0
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/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +17 -5
- package/dist/commands/upgrade.d.ts +80 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +342 -0
- package/dist/utils/error-handler.js +5 -1
- package/dist/utils/request-context.d.ts.map +1 -1
- package/dist/utils/request-context.js +6 -1
- package/dist/utils/update-notice.d.ts +25 -0
- package/dist/utils/update-notice.d.ts.map +1 -0
- package/dist/utils/update-notice.js +100 -0
- package/package.json +4 -4
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* `pipeline-manager --upgrade [version]`: replace this CLI with the latest
|
|
5
|
+
* release (or a named version / dist-tag) in place; `--upgrade-check [version]`
|
|
6
|
+
* reports what that would do without doing it.
|
|
7
|
+
*
|
|
8
|
+
* It only acts on an install it can prove it owns: a GLOBAL npm or pnpm
|
|
9
|
+
* install whose package directory is the one running now. Anything else (npx,
|
|
10
|
+
* a project dependency, a workspace checkout, Volta, Homebrew) is refused with
|
|
11
|
+
* the command that would update it, because reinstalling globally would leave
|
|
12
|
+
* the copy actually being run untouched and report a success that changed nothing.
|
|
13
|
+
*
|
|
14
|
+
* Before installing it checks, in order: the target's `engines.node` against
|
|
15
|
+
* the running Node; that a downgrade does not go below the first release with
|
|
16
|
+
* `--upgrade` (which would strand the user); that the global directory
|
|
17
|
+
* is writable; and that the downloaded tarball matches the registry's
|
|
18
|
+
* `dist.integrity` AND carries a valid registry ECDSA signature over it. The
|
|
19
|
+
* verified tarball itself is what gets installed.
|
|
20
|
+
*
|
|
21
|
+
* Synchronous on purpose: it runs from Commander's `option:upgrade` listener,
|
|
22
|
+
* like `--version`, and exits before any command would.
|
|
23
|
+
*/
|
|
24
|
+
import { spawnSync } from 'node:child_process';
|
|
25
|
+
import { createHash, createPublicKey, verify } from 'node:crypto';
|
|
26
|
+
import { accessSync, constants as fsConstants, existsSync, mkdtempSync, readFileSync, realpathSync, rmSync } from 'node:fs';
|
|
27
|
+
import { tmpdir } from 'node:os';
|
|
28
|
+
import { dirname, join } from 'node:path';
|
|
29
|
+
import { fileURLToPath } from 'node:url';
|
|
30
|
+
import { compareSemver, satisfiesRange } from '@pipeline-builder/api-core';
|
|
31
|
+
import { APP_NAME, APP_VERSION } from '../config/cli.constants.js';
|
|
32
|
+
import { ERROR_CODES } from '../utils/error-handler.js';
|
|
33
|
+
import { printError, printInfo, printSuccess, printWarning } from '../utils/output-utils.js';
|
|
34
|
+
export const PACKAGE_NAME = '@pipeline-builder/pipeline-manager';
|
|
35
|
+
/** The first release that has `--upgrade`: moving below it would leave no way back but a manual install. */
|
|
36
|
+
export const UPGRADE_SINCE = '4.4.21';
|
|
37
|
+
const REPO_URL = 'https://github.com/mwashburn160/pipeline-builder';
|
|
38
|
+
/** Opt out of the registry-signature check (a mirror that doesn't serve npm's signing keys). */
|
|
39
|
+
export const SKIP_VERIFY_ENV = 'PIPELINE_MANAGER_UPGRADE_SKIP_VERIFY';
|
|
40
|
+
/** A semver (`4.4.19`, `5.0.0-rc.1`) or a dist-tag (`latest`, `next`); nothing a shell could read as syntax. */
|
|
41
|
+
const VERSION_SPEC = /^(?:\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?|[A-Za-z][0-9A-Za-z.-]*)$/;
|
|
42
|
+
/**
|
|
43
|
+
* The npm that belongs to the RUNNING Node (next to `process.execPath`), so a
|
|
44
|
+
* version manager or Homebrew putting a different Node's npm first on PATH
|
|
45
|
+
* can't make the ownership check look at the wrong global root. Falls back to
|
|
46
|
+
* whatever `npm` is on PATH.
|
|
47
|
+
*/
|
|
48
|
+
export function npmBinFor(execPath, platform, exists) {
|
|
49
|
+
const sibling = join(dirname(execPath), platform === 'win32' ? 'npm.cmd' : 'npm');
|
|
50
|
+
return exists(sibling) ? sibling : 'npm';
|
|
51
|
+
}
|
|
52
|
+
/** Quote an argument for the win32 shell when it holds a space (temp paths under `C:\Users\First Last`). */
|
|
53
|
+
const winQuote = (a) => (/\s/.test(a) ? `"${a}"` : a);
|
|
54
|
+
export const systemDeps = () => {
|
|
55
|
+
const npmBin = npmBinFor(process.execPath, process.platform, existsSync);
|
|
56
|
+
const win = process.platform === 'win32';
|
|
57
|
+
return {
|
|
58
|
+
run: (cmd, args, inherit) => {
|
|
59
|
+
// Windows ships the managers as .cmd shims, which Node only spawns through
|
|
60
|
+
// a shell; every argument is fixed, checked against VERSION_SPEC, or a
|
|
61
|
+
// temp path we created (quoted).
|
|
62
|
+
const r = spawnSync(cmd === 'npm' ? npmBin : cmd, win ? args.map(winQuote) : args, {
|
|
63
|
+
encoding: 'utf8', stdio: inherit ? 'inherit' : ['ignore', 'pipe', 'pipe'], shell: win,
|
|
64
|
+
});
|
|
65
|
+
return { status: r.error ? null : r.status, stdout: r.stdout ?? '' };
|
|
66
|
+
},
|
|
67
|
+
// dist/commands/upgrade.js → the package root.
|
|
68
|
+
packageRoot: fileURLToPath(new URL('../../', import.meta.url)),
|
|
69
|
+
currentVersion: APP_VERSION,
|
|
70
|
+
nodeVersion: process.version,
|
|
71
|
+
env: process.env,
|
|
72
|
+
realpath: (p) => { try {
|
|
73
|
+
return realpathSync(p);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return null;
|
|
77
|
+
} },
|
|
78
|
+
readVersion: (dir) => {
|
|
79
|
+
try {
|
|
80
|
+
return JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8')).version ?? null;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
writable: (dir) => { try {
|
|
87
|
+
accessSync(dir, fsConstants.W_OK);
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return false;
|
|
92
|
+
} },
|
|
93
|
+
// Synchronous GET via a short-lived Node child (this module must stay sync).
|
|
94
|
+
fetchText: (url) => {
|
|
95
|
+
const script = 'const r = await fetch(process.argv[1]); if (!r.ok) process.exit(1); process.stdout.write(await r.text());';
|
|
96
|
+
const r = spawnSync(process.execPath, ['--input-type=module', '-e', script, url], { encoding: 'utf8', timeout: 30_000 });
|
|
97
|
+
return r.status === 0 ? r.stdout : null;
|
|
98
|
+
},
|
|
99
|
+
integrityOf: (file) => `sha512-${createHash('sha512').update(readFileSync(file)).digest('base64')}`,
|
|
100
|
+
makeTempDir: () => mkdtempSync(join(tmpdir(), 'pipeline-manager-upgrade-')),
|
|
101
|
+
removeDir: (dir) => rmSync(dir, { recursive: true, force: true }),
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
/** Where this package would live under `manager`'s global root, or null when that manager is absent. */
|
|
105
|
+
function globalRoot(manager, deps) {
|
|
106
|
+
const r = deps.run(manager, ['root', '-g'], false);
|
|
107
|
+
const root = r.status === 0 ? r.stdout.trim() : '';
|
|
108
|
+
return root || null;
|
|
109
|
+
}
|
|
110
|
+
/** The global manager that owns the running copy (compared by realpath: pnpm links into its store). */
|
|
111
|
+
function owningManager(deps) {
|
|
112
|
+
const self = deps.realpath(deps.packageRoot);
|
|
113
|
+
if (!self)
|
|
114
|
+
return null;
|
|
115
|
+
for (const manager of ['npm', 'pnpm']) {
|
|
116
|
+
const root = globalRoot(manager, deps);
|
|
117
|
+
const dir = root ? join(root, ...PACKAGE_NAME.split('/')) : null;
|
|
118
|
+
if (root && dir && deps.realpath(dir) === self)
|
|
119
|
+
return { manager, root, dir };
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
/** What `spec` resolves to on the registry: the version plus what the install checks need. */
|
|
124
|
+
function resolveRelease(spec, deps) {
|
|
125
|
+
const r = deps.run('npm', ['view', `${PACKAGE_NAME}@${spec}`, 'version', 'engines', 'dist.integrity', 'dist.signatures', '--json'], false);
|
|
126
|
+
let body;
|
|
127
|
+
try {
|
|
128
|
+
body = JSON.parse(r.stdout || 'null');
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
body = null;
|
|
132
|
+
}
|
|
133
|
+
// On failure `--json` prints `{"error":{"code":"E404",…}}`: a missing version
|
|
134
|
+
// or tag is the caller's mistake, not the network's.
|
|
135
|
+
if (r.status !== 0) {
|
|
136
|
+
const code = body?.error?.code;
|
|
137
|
+
return { ok: false, notFound: code === 'E404' };
|
|
138
|
+
}
|
|
139
|
+
const o = body;
|
|
140
|
+
const version = o?.version;
|
|
141
|
+
if (typeof version !== 'string')
|
|
142
|
+
return { ok: false, notFound: o === null };
|
|
143
|
+
const engines = o?.engines;
|
|
144
|
+
const signatures = Array.isArray(o?.['dist.signatures']) ? o['dist.signatures'] : [];
|
|
145
|
+
return {
|
|
146
|
+
ok: true,
|
|
147
|
+
release: {
|
|
148
|
+
version,
|
|
149
|
+
nodeRange: typeof engines?.node === 'string' ? engines.node : undefined,
|
|
150
|
+
integrity: typeof o?.['dist.integrity'] === 'string' ? o['dist.integrity'] : undefined,
|
|
151
|
+
signatures,
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* npm's signing keys, ALWAYS from the public registry that issued them — never
|
|
157
|
+
* from the configured registry. `dist.signatures` are npm's own, so a mirror
|
|
158
|
+
* passes them through unchanged; fetching keys from the mirror would let a
|
|
159
|
+
* malicious or compromised mirror sign its own tarball with its own key.
|
|
160
|
+
*/
|
|
161
|
+
export const NPM_KEYS_URL = 'https://registry.npmjs.org/-/npm/v1/keys';
|
|
162
|
+
/** npm's signing keys, by keyid. */
|
|
163
|
+
function registryKeys(deps) {
|
|
164
|
+
const text = deps.fetchText(NPM_KEYS_URL);
|
|
165
|
+
if (!text)
|
|
166
|
+
return null;
|
|
167
|
+
try {
|
|
168
|
+
const keys = JSON.parse(text).keys ?? [];
|
|
169
|
+
return new Map(keys.filter((k) => typeof k.keyid === 'string' && typeof k.key === 'string').map((k) => [k.keyid, k.key]));
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/** Does any registry signature verify `<name>@<version>:<integrity>`? */
|
|
176
|
+
export function signatureValid(release, keys) {
|
|
177
|
+
if (!release.integrity)
|
|
178
|
+
return false;
|
|
179
|
+
const message = Buffer.from(`${PACKAGE_NAME}@${release.version}:${release.integrity}`);
|
|
180
|
+
return release.signatures.some(({ keyid, sig }) => {
|
|
181
|
+
const key = keys.get(keyid);
|
|
182
|
+
if (!key)
|
|
183
|
+
return false;
|
|
184
|
+
try {
|
|
185
|
+
return verify('sha256', message, createPublicKey({ key: Buffer.from(key, 'base64'), format: 'der', type: 'spki' }), Buffer.from(sig, 'base64'));
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Download the target with `npm pack` and prove it is the registry's signed
|
|
194
|
+
* artifact. Returns the tarball path, or an error message.
|
|
195
|
+
*/
|
|
196
|
+
function fetchVerifiedTarball(release, dir, deps) {
|
|
197
|
+
const pack = deps.run('npm', ['pack', `${PACKAGE_NAME}@${release.version}`, '--pack-destination', dir, '--json'], false);
|
|
198
|
+
let filename;
|
|
199
|
+
try {
|
|
200
|
+
filename = JSON.parse(pack.stdout)[0]?.filename;
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
filename = undefined;
|
|
204
|
+
}
|
|
205
|
+
if (pack.status !== 0 || typeof filename !== 'string')
|
|
206
|
+
return { error: `npm could not download ${PACKAGE_NAME}@${release.version}` };
|
|
207
|
+
const tarball = join(dir, filename);
|
|
208
|
+
if (deps.env[SKIP_VERIFY_ENV] === '1') {
|
|
209
|
+
printWarning(`${SKIP_VERIFY_ENV}=1: installing without checking the registry signature`);
|
|
210
|
+
return { tarball };
|
|
211
|
+
}
|
|
212
|
+
if (!release.integrity)
|
|
213
|
+
return { error: `the registry gave no dist.integrity for ${release.version}` };
|
|
214
|
+
const actual = deps.integrityOf(tarball);
|
|
215
|
+
if (actual !== release.integrity)
|
|
216
|
+
return { error: `the downloaded tarball's hash (${actual}) is not the registry's (${release.integrity})` };
|
|
217
|
+
const keys = registryKeys(deps);
|
|
218
|
+
if (!keys)
|
|
219
|
+
return { error: `could not fetch npm's signing keys from ${NPM_KEYS_URL} (no route to registry.npmjs.org? set ${SKIP_VERIFY_ENV}=1 to install unverified)` };
|
|
220
|
+
if (!signatureValid(release, keys))
|
|
221
|
+
return { error: `no valid registry signature over ${PACKAGE_NAME}@${release.version}` };
|
|
222
|
+
return { tarball };
|
|
223
|
+
}
|
|
224
|
+
/** Link to what changed between two releases. */
|
|
225
|
+
export function changesUrl(from, to) {
|
|
226
|
+
const tag = (v) => `release/${PACKAGE_NAME}/${v}`;
|
|
227
|
+
return `${REPO_URL}/compare/${tag(from)}...${tag(to)}`;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Upgrade (or move) this CLI to `requested` (`true` = latest). Returns the
|
|
231
|
+
* process exit code; never throws for an expected failure.
|
|
232
|
+
*/
|
|
233
|
+
export function selfUpgrade(requested, deps = systemDeps(), opts = {}) {
|
|
234
|
+
const spec = requested === true ? 'latest' : requested;
|
|
235
|
+
if (!VERSION_SPEC.test(spec)) {
|
|
236
|
+
printError(`Invalid version "${spec}": use a version like 4.4.21, or a dist-tag like latest`);
|
|
237
|
+
return ERROR_CODES.VALIDATION;
|
|
238
|
+
}
|
|
239
|
+
const owner = owningManager(deps);
|
|
240
|
+
if (!owner && !opts.check) {
|
|
241
|
+
printError(`${APP_NAME} ${deps.currentVersion} at ${deps.packageRoot} is not a global npm or pnpm install, so --upgrade cannot replace it`);
|
|
242
|
+
printInfo(`Update it with whatever installed it: npm install -g ${PACKAGE_NAME}@${spec} (global), `
|
|
243
|
+
+ `a version bump in your project, npx ${PACKAGE_NAME}@${spec}, or your Node manager (Volta: volta install ${PACKAGE_NAME}@${spec})`);
|
|
244
|
+
return ERROR_CODES.CONFIGURATION;
|
|
245
|
+
}
|
|
246
|
+
const resolved = resolveRelease(spec, deps);
|
|
247
|
+
if (!resolved.ok) {
|
|
248
|
+
if (resolved.notFound) {
|
|
249
|
+
printError(`${PACKAGE_NAME} has no version or dist-tag "${spec}"`);
|
|
250
|
+
return ERROR_CODES.VALIDATION;
|
|
251
|
+
}
|
|
252
|
+
printError(`Could not reach the npm registry to resolve ${PACKAGE_NAME}@${spec}`);
|
|
253
|
+
return ERROR_CODES.NETWORK;
|
|
254
|
+
}
|
|
255
|
+
const { release } = resolved;
|
|
256
|
+
const target = release.version;
|
|
257
|
+
const order = compareSemver(target, deps.currentVersion);
|
|
258
|
+
if (order === 0) {
|
|
259
|
+
printSuccess(`${APP_NAME} ${deps.currentVersion} is already ${requested === true ? 'the latest release' : 'installed'}`);
|
|
260
|
+
return 0;
|
|
261
|
+
}
|
|
262
|
+
// A bare --upgrade never moves backwards; naming a version is how to downgrade.
|
|
263
|
+
if (order < 0 && requested === true) {
|
|
264
|
+
printSuccess(`${APP_NAME} ${deps.currentVersion} is newer than the latest release (${target}); nothing to do`);
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
// Only a DOWNGRADE can strand the user; moving up from a pre-flag build is fine.
|
|
268
|
+
if (order < 0 && compareSemver(target, UPGRADE_SINCE) < 0) {
|
|
269
|
+
printError(`${target} predates --upgrade (added in ${UPGRADE_SINCE}), so moving to it would leave no way back but a manual install`);
|
|
270
|
+
printInfo(`If that is what you want: npm install -g ${PACKAGE_NAME}@${target}`);
|
|
271
|
+
return ERROR_CODES.VALIDATION;
|
|
272
|
+
}
|
|
273
|
+
if (release.nodeRange) {
|
|
274
|
+
const fits = satisfiesRange(deps.nodeVersion, release.nodeRange);
|
|
275
|
+
if (fits === false) {
|
|
276
|
+
printError(`${APP_NAME} ${target} needs Node ${release.nodeRange}, but this is Node ${deps.nodeVersion}; upgrade Node first`);
|
|
277
|
+
return ERROR_CODES.CONFIGURATION;
|
|
278
|
+
}
|
|
279
|
+
if (fits === null)
|
|
280
|
+
printWarning(`Could not check ${target}'s Node requirement "${release.nodeRange}" against ${deps.nodeVersion}`);
|
|
281
|
+
}
|
|
282
|
+
const verb = order > 0 ? 'Upgrading' : 'Downgrading';
|
|
283
|
+
if (opts.check) {
|
|
284
|
+
printInfo(`${APP_NAME} ${deps.currentVersion} → ${target} is available${owner ? '' : ' (not a global npm/pnpm install: update it with whatever installed it)'}`);
|
|
285
|
+
printInfo(`Changes: ${changesUrl(deps.currentVersion, target)}`);
|
|
286
|
+
return 1;
|
|
287
|
+
}
|
|
288
|
+
// `owner` is non-null past the !check guard above.
|
|
289
|
+
const own = owner;
|
|
290
|
+
if (!deps.writable(own.root)) {
|
|
291
|
+
printError(`${own.root} is not writable by this user, so ${own.manager} cannot replace ${APP_NAME} there`);
|
|
292
|
+
// Never "re-run pipeline-manager with sudo": that runs the whole CLI (its
|
|
293
|
+
// credential store, its config) as root. Name the one command that needs it.
|
|
294
|
+
printInfo(`Either install just the package as root: sudo npm install -g ${PACKAGE_NAME}@${target}`);
|
|
295
|
+
printInfo('or move npm globals into your home directory (npm config set prefix ~/.npm-global, then add ~/.npm-global/bin to PATH) and re-run --upgrade');
|
|
296
|
+
return ERROR_CODES.FILE_SYSTEM;
|
|
297
|
+
}
|
|
298
|
+
printInfo(`${verb} ${APP_NAME} ${deps.currentVersion} → ${target} (${own.manager} global install)`);
|
|
299
|
+
const tmp = deps.makeTempDir();
|
|
300
|
+
try {
|
|
301
|
+
const fetched = fetchVerifiedTarball(release, tmp, deps);
|
|
302
|
+
if ('error' in fetched) {
|
|
303
|
+
printError(`Not installing ${target}: ${fetched.error}; ${APP_NAME} ${deps.currentVersion} is unchanged`);
|
|
304
|
+
return ERROR_CODES.GENERAL;
|
|
305
|
+
}
|
|
306
|
+
const install = own.manager === 'npm'
|
|
307
|
+
? deps.run('npm', ['install', '-g', fetched.tarball], true)
|
|
308
|
+
: deps.run('pnpm', ['add', '-g', fetched.tarball], true);
|
|
309
|
+
if (install.status !== 0) {
|
|
310
|
+
printError(`${own.manager} could not install ${PACKAGE_NAME}@${target}; ${APP_NAME} ${deps.currentVersion} is unchanged`);
|
|
311
|
+
return ERROR_CODES.FILE_SYSTEM;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
finally {
|
|
315
|
+
deps.removeDir(tmp);
|
|
316
|
+
}
|
|
317
|
+
// Read the version back from disk rather than trusting the exit code.
|
|
318
|
+
const installed = deps.readVersion(own.dir);
|
|
319
|
+
if (installed !== target) {
|
|
320
|
+
printWarning(`${own.manager} reported success, but ${own.dir} holds ${installed ?? 'no readable package'} instead of ${target}`);
|
|
321
|
+
return ERROR_CODES.GENERAL;
|
|
322
|
+
}
|
|
323
|
+
printSuccess(`${APP_NAME} is now ${target} (was ${deps.currentVersion}); signature verified`);
|
|
324
|
+
printInfo(`What changed: ${changesUrl(deps.currentVersion, target)}`);
|
|
325
|
+
return 0;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Register the top-level `--upgrade [version]` and `--upgrade-check [version]`
|
|
329
|
+
* flags. Handled the way Commander handles `--version`: the option listener
|
|
330
|
+
* runs and exits, so each works on its own without a root action that would
|
|
331
|
+
* change how unknown commands are reported.
|
|
332
|
+
*/
|
|
333
|
+
export function registerUpgradeOption(program, upgrade = (r, o) => selfUpgrade(r, systemDeps(), o)) {
|
|
334
|
+
program.option('--upgrade [version]', 'Upgrade this CLI in place to the latest release (or the given version / dist-tag)');
|
|
335
|
+
program.option('--upgrade-check [version]', 'Report whether --upgrade would change anything (exit 0 = current, 1 = available)');
|
|
336
|
+
// Commander's listener gets the value as given, or null/undefined for a bare
|
|
337
|
+
// flag (not `true`, unlike the parsed opts), so anything not a string means latest.
|
|
338
|
+
const latestOr = (value) => (typeof value === 'string' ? value : true);
|
|
339
|
+
program.on('option:upgrade', (value) => process.exit(upgrade(latestOr(value), {})));
|
|
340
|
+
program.on('option:upgrade-check', (value) => process.exit(upgrade(latestOr(value), { check: true })));
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3VwZ3JhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxJQUFJLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU3RixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsb0NBQW9DLENBQUM7QUFDakUsNEdBQTRHO0FBQzVHLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFDdEMsTUFBTSxRQUFRLEdBQUcsa0RBQWtELENBQUM7QUFDcEUsZ0dBQWdHO0FBQ2hHLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxz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QUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0RSxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsT0FBZ0IsRUFDaEIsT0FBTyxHQUErRCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRS9HLE9BQU8sQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsbUZBQW1GLENBQUMsQ0FBQztJQUMzSCxPQUFPLENBQUMsTUFBTSxDQUFDLDJCQUEyQixFQUFFLGtGQUFrRixDQUFDLENBQUM7SUFDaEksNkVBQTZFO0lBQzdFLG9GQUFvRjtJQUNwRixNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBaUIsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9GLE9BQU8sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0YsT0FBTyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBgcGlwZWxpbmUtbWFuYWdlciAtLXVwZ3JhZGUgW3ZlcnNpb25dYDogcmVwbGFjZSB0aGlzIENMSSB3aXRoIHRoZSBsYXRlc3RcbiAqIHJlbGVhc2UgKG9yIGEgbmFtZWQgdmVyc2lvbiAvIGRpc3QtdGFnKSBpbiBwbGFjZTsgYC0tdXBncmFkZS1jaGVjayBbdmVyc2lvbl1gXG4gKiByZXBvcnRzIHdoYXQgdGhhdCB3b3VsZCBkbyB3aXRob3V0IGRvaW5nIGl0LlxuICpcbiAqIEl0IG9ubHkgYWN0cyBvbiBhbiBpbnN0YWxsIGl0IGNhbiBwcm92ZSBpdCBvd25zOiBhIEdMT0JBTCBucG0gb3IgcG5wbVxuICogaW5zdGFsbCB3aG9zZSBwYWNrYWdlIGRpcmVjdG9yeSBpcyB0aGUgb25lIHJ1bm5pbmcgbm93LiBBbnl0aGluZyBlbHNlIChucHgsXG4gKiBhIHByb2plY3QgZGVwZW5kZW5jeSwgYSB3b3Jrc3BhY2UgY2hlY2tvdXQsIFZvbHRhLCBIb21lYnJldykgaXMgcmVmdXNlZCB3aXRoXG4gKiB0aGUgY29tbWFuZCB0aGF0IHdvdWxkIHVwZGF0ZSBpdCwgYmVjYXVzZSByZWluc3RhbGxpbmcgZ2xvYmFsbHkgd291bGQgbGVhdmVcbiAqIHRoZSBjb3B5IGFjdHVhbGx5IGJlaW5nIHJ1biB1bnRvdWNoZWQgYW5kIHJlcG9ydCBhIHN1Y2Nlc3MgdGhhdCBjaGFuZ2VkIG5vdGhpbmcuXG4gKlxuICogQmVmb3JlIGluc3RhbGxpbmcgaXQgY2hlY2tzLCBpbiBvcmRlcjogdGhlIHRhcmdldCdzIGBlbmdpbmVzLm5vZGVgIGFnYWluc3RcbiAqIHRoZSBydW5uaW5nIE5vZGU7IHRoYXQgYSBkb3duZ3JhZGUgZG9lcyBub3QgZ28gYmVsb3cgdGhlIGZpcnN0IHJlbGVhc2Ugd2l0aFxuICogYC0tdXBncmFkZWAgKHdoaWNoIHdvdWxkIHN0cmFuZCB0aGUgdXNlcik7IHRoYXQgdGhlIGdsb2JhbCBkaXJlY3RvcnlcbiAqIGlzIHdyaXRhYmxlOyBhbmQgdGhhdCB0aGUgZG93bmxvYWRlZCB0YXJiYWxsIG1hdGNoZXMgdGhlIHJlZ2lzdHJ5J3NcbiAqIGBkaXN0LmludGVncml0eWAgQU5EIGNhcnJpZXMgYSB2YWxpZCByZWdpc3RyeSBFQ0RTQSBzaWduYXR1cmUgb3ZlciBpdC4gVGhlXG4gKiB2ZXJpZmllZCB0YXJiYWxsIGl0c2VsZiBpcyB3aGF0IGdldHMgaW5zdGFsbGVkLlxuICpcbiAqIFN5bmNocm9ub3VzIG9uIHB1cnBvc2U6IGl0IHJ1bnMgZnJvbSBDb21tYW5kZXIncyBgb3B0aW9uOnVwZ3JhZGVgIGxpc3RlbmVyLFxuICogbGlrZSBgLS12ZXJzaW9uYCwgYW5kIGV4aXRzIGJlZm9yZSBhbnkgY29tbWFuZCB3b3VsZC5cbiAqL1xuXG5pbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCwgY3JlYXRlUHVibGljS2V5LCB2ZXJpZnkgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBhY2Nlc3NTeW5jLCBjb25zdGFudHMgYXMgZnNDb25zdGFudHMsIGV4aXN0c1N5bmMsIG1rZHRlbXBTeW5jLCByZWFkRmlsZVN5bmMsIHJlYWxwYXRoU3luYywgcm1TeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IGNvbXBhcmVTZW12ZXIsIHNhdGlzZmllc1JhbmdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IEFQUF9OQU1FLCBBUFBfVkVSU0lPTiB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1tYW5hZ2VyJztcbi8qKiBUaGUgZmlyc3QgcmVsZWFzZSB0aGF0IGhhcyBgLS11cGdyYWRlYDogbW92aW5nIGJlbG93IGl0IHdvdWxkIGxlYXZlIG5vIHdheSBiYWNrIGJ1dCBhIG1hbnVhbCBpbnN0YWxsLiAqL1xuZXhwb3J0IGNvbnN0IFVQR1JBREVfU0lOQ0UgPSAnNC40LjIxJztcbmNvbnN0IFJFUE9fVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9td2FzaGJ1cm4xNjAvcGlwZWxpbmUtYnVpbGRlcic7XG4vKiogT3B0IG91dCBvZiB0aGUgcmVnaXN0cnktc2lnbmF0dXJlIGNoZWNrIChhIG1pcnJvciB0aGF0IGRvZXNuJ3Qgc2VydmUgbnBtJ3Mgc2lnbmluZyBrZXlzKS4gKi9cbmV4cG9ydCBjb25zdCBTS0lQX1ZFUklGWV9FTlYgPSAnUElQRUxJTkVfTUFOQUdFUl9VUEdSQURFX1NLSVBfVkVSSUZZJztcblxuLyoqIEEgc2VtdmVyIChgNC40LjE5YCwgYDUuMC4wLXJjLjFgKSBvciBhIGRpc3QtdGFnIChgbGF0ZXN0YCwgYG5leHRgKTsgbm90aGluZyBhIHNoZWxsIGNvdWxkIHJlYWQgYXMgc3ludGF4LiAqL1xuY29uc3QgVkVSU0lPTl9TUEVDID0gL14oPzpcXGQrXFwuXFxkK1xcLlxcZCsoPzotWzAtOUEtWmEtei4tXSspP3xbQS1aYS16XVswLTlBLVphLXouLV0qKSQvO1xuXG50eXBlIE1hbmFnZXIgPSAnbnBtJyB8ICdwbnBtJztcblxuZXhwb3J0IGludGVyZmFjZSBSdW5SZXN1bHQgeyBzdGF0dXM6IG51bWJlciB8IG51bGw7IHN0ZG91dDogc3RyaW5nIH1cblxuLyoqIFRoZSBwcm9jZXNzIHNlYW1zLCBpbmplY3RhYmxlIHNvIHRlc3RzIG5ldmVyIHRvdWNoIGEgcmVhbCByZWdpc3RyeSBvciBnbG9iYWwgaW5zdGFsbC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBncmFkZURlcHMge1xuICAvKiogUnVuIGEgcGFja2FnZS1tYW5hZ2VyIGNvbW1hbmQ7IGBpbmhlcml0YCBzdHJlYW1zIGl0cyBvdXRwdXQgdG8gdGhlIHRlcm1pbmFsLiAqL1xuICBydW46IChjbWQ6IE1hbmFnZXIsIGFyZ3M6IHN0cmluZ1tdLCBpbmhlcml0OiBib29sZWFuKSA9PiBSdW5SZXN1bHQ7XG4gIC8qKiBUaGlzIHBhY2thZ2UncyBpbnN0YWxsZWQgZGlyZWN0b3J5LiAqL1xuICBwYWNrYWdlUm9vdDogc3RyaW5nO1xuICBjdXJyZW50VmVyc2lvbjogc3RyaW5nO1xuICAvKiogVGhlIHJ1bm5pbmcgTm9kZSdzIHZlcnNpb24gKGBwcm9jZXNzLnZlcnNpb25gKS4gKi9cbiAgbm9kZVZlcnNpb246IHN0cmluZztcbiAgZW52OiBOb2RlSlMuUHJvY2Vzc0VudjtcbiAgLyoqIHJlYWxwYXRoLCBvciBudWxsIHdoZW4gdGhlIHBhdGggZG9lcyBub3QgZXhpc3QuICovXG4gIHJlYWxwYXRoOiAocDogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGB2ZXJzaW9uYCBmaWVsZCBvZiBgPGRpcj4vcGFja2FnZS5qc29uYCwgb3IgbnVsbCB3aGVuIHVucmVhZGFibGUuICovXG4gIHJlYWRWZXJzaW9uOiAoZGlyOiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGw7XG4gIC8qKiBXaGV0aGVyIHRoaXMgcHJvY2VzcyBtYXkgd3JpdGUgaW50byBgZGlyYC4gKi9cbiAgd3JpdGFibGU6IChkaXI6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgLyoqIEdFVCBgdXJsYCBhbmQgcmV0dXJuIHRoZSBib2R5LCBvciBudWxsIG9uIGFueSBmYWlsdXJlLiAqL1xuICBmZXRjaFRleHQ6ICh1cmw6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcbiAgLyoqIGBzaGE1MTItPGJhc2U2ND5gIG9mIGEgZmlsZSAodGhlIHJlZ2lzdHJ5J3MgYGRpc3QuaW50ZWdyaXR5YCBmb3JtKS4gKi9cbiAgaW50ZWdyaXR5T2Y6IChmaWxlOiBzdHJpbmcpID0+IHN0cmluZztcbiAgbWFrZVRlbXBEaXI6ICgpID0+IHN0cmluZztcbiAgcmVtb3ZlRGlyOiAoZGlyOiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogVGhlIG5wbSB0aGF0IGJlbG9uZ3MgdG8gdGhlIFJVTk5JTkcgTm9kZSAobmV4dCB0byBgcHJvY2Vzcy5leGVjUGF0aGApLCBzbyBhXG4gKiB2ZXJzaW9uIG1hbmFnZXIgb3IgSG9tZWJyZXcgcHV0dGluZyBhIGRpZmZlcmVudCBOb2RlJ3MgbnBtIGZpcnN0IG9uIFBBVEhcbiAqIGNhbid0IG1ha2UgdGhlIG93bmVyc2hpcCBjaGVjayBsb29rIGF0IHRoZSB3cm9uZyBnbG9iYWwgcm9vdC4gRmFsbHMgYmFjayB0b1xuICogd2hhdGV2ZXIgYG5wbWAgaXMgb24gUEFUSC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5wbUJpbkZvcihleGVjUGF0aDogc3RyaW5nLCBwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtLCBleGlzdHM6IChwOiBzdHJpbmcpID0+IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBzaWJsaW5nID0gam9pbihkaXJuYW1lKGV4ZWNQYXRoKSwgcGxhdGZvcm0gPT09ICd3aW4zMicgPyAnbnBtLmNtZCcgOiAnbnBtJyk7XG4gIHJldHVybiBleGlzdHMoc2libGluZykgPyBzaWJsaW5nIDogJ25wbSc7XG59XG5cbi8qKiBRdW90ZSBhbiBhcmd1bWVudCBmb3IgdGhlIHdpbjMyIHNoZWxsIHdoZW4gaXQgaG9sZHMgYSBzcGFjZSAodGVtcCBwYXRocyB1bmRlciBgQzpcXFVzZXJzXFxGaXJzdCBMYXN0YCkuICovXG5jb25zdCB3aW5RdW90ZSA9IChhOiBzdHJpbmcpID0+ICgvXFxzLy50ZXN0KGEpID8gYFwiJHthfVwiYCA6IGEpO1xuXG5leHBvcnQgY29uc3Qgc3lzdGVtRGVwcyA9ICgpOiBVcGdyYWRlRGVwcyA9PiB7XG4gIGNvbnN0IG5wbUJpbiA9IG5wbUJpbkZvcihwcm9jZXNzLmV4ZWNQYXRoLCBwcm9jZXNzLnBsYXRmb3JtLCBleGlzdHNTeW5jKTtcbiAgY29uc3Qgd2luID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgcmV0dXJuIHtcbiAgICBydW46IChjbWQsIGFyZ3MsIGluaGVyaXQpID0+IHtcbiAgICAgIC8vIFdpbmRvd3Mgc2hpcHMgdGhlIG1hbmFnZXJzIGFzIC5jbWQgc2hpbXMsIHdoaWNoIE5vZGUgb25seSBzcGF3bnMgdGhyb3VnaFxuICAgICAgLy8gYSBzaGVsbDsgZXZlcnkgYXJndW1lbnQgaXMgZml4ZWQsIGNoZWNrZWQgYWdhaW5zdCBWRVJTSU9OX1NQRUMsIG9yIGFcbiAgICAgIC8vIHRlbXAgcGF0aCB3ZSBjcmVhdGVkIChxdW90ZWQpLlxuICAgICAgY29uc3QgciA9IHNwYXduU3luYyhjbWQgPT09ICducG0nID8gbnBtQmluIDogY21kLCB3aW4gPyBhcmdzLm1hcCh3aW5RdW90ZSkgOiBhcmdzLCB7XG4gICAgICAgIGVuY29kaW5nOiAndXRmOCcsIHN0ZGlvOiBpbmhlcml0ID8gJ2luaGVyaXQnIDogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sIHNoZWxsOiB3aW4sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHN0YXR1czogci5lcnJvciA/IG51bGwgOiByLnN0YXR1cywgc3Rkb3V0OiByLnN0ZG91dCA/PyAnJyB9O1xuICAgIH0sXG4gICAgLy8gZGlzdC9jb21tYW5kcy91cGdyYWRlLmpzIOKGkiB0aGUgcGFja2FnZSByb290LlxuICAgIHBhY2thZ2VSb290OiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4uLy4uLycsIGltcG9ydC5tZXRhLnVybCkpLFxuICAgIGN1cnJlbnRWZXJzaW9uOiBBUFBfVkVSU0lPTixcbiAgICBub2RlVmVyc2lvbjogcHJvY2Vzcy52ZXJzaW9uLFxuICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgcmVhbHBhdGg6IChwKSA9PiB7IHRyeSB7IHJldHVybiByZWFscGF0aFN5bmMocCk7IH0gY2F0Y2ggeyByZXR1cm4gbnVsbDsgfSB9LFxuICAgIHJlYWRWZXJzaW9uOiAoZGlyKSA9PiB7XG4gICAgICB0cnkgeyByZXR1cm4gKEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGpvaW4oZGlyLCAncGFja2FnZS5qc29uJyksICd1dGY4JykpIGFzIHsgdmVyc2lvbj86IHN0cmluZyB9KS52ZXJzaW9uID8/IG51bGw7IH0gY2F0Y2ggeyByZXR1cm4gbnVsbDsgfVxuICAgIH0sXG4gICAgd3JpdGFibGU6IChkaXIpID0+IHsgdHJ5IHsgYWNjZXNzU3luYyhkaXIsIGZzQ29uc3RhbnRzLldfT0spOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCB7IHJldHVybiBmYWxzZTsgfSB9LFxuICAgIC8vIFN5bmNocm9ub3VzIEdFVCB2aWEgYSBzaG9ydC1saXZlZCBOb2RlIGNoaWxkICh0aGlzIG1vZHVsZSBtdXN0IHN0YXkgc3luYykuXG4gICAgZmV0Y2hUZXh0OiAodXJsKSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHQgPSAnY29uc3QgciA9IGF3YWl0IGZldGNoKHByb2Nlc3MuYXJndlsxXSk7IGlmICghci5vaykgcHJvY2Vzcy5leGl0KDEpOyBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCByLnRleHQoKSk7JztcbiAgICAgIGNvbnN0IHIgPSBzcGF3blN5bmMocHJvY2Vzcy5leGVjUGF0aCwgWyctLWlucHV0LXR5cGU9bW9kdWxlJywgJy1lJywgc2NyaXB0LCB1cmxdLCB7IGVuY29kaW5nOiAndXRmOCcsIHRpbWVvdXQ6IDMwXzAwMCB9KTtcbiAgICAgIHJldHVybiByLnN0YXR1cyA9PT0gMCA/IHIuc3Rkb3V0IDogbnVsbDtcbiAgICB9LFxuICAgIGludGVncml0eU9mOiAoZmlsZSkgPT4gYHNoYTUxMi0ke2NyZWF0ZUhhc2goJ3NoYTUxMicpLnVwZGF0ZShyZWFkRmlsZVN5bmMoZmlsZSkpLmRpZ2VzdCgnYmFzZTY0Jyl9YCxcbiAgICBtYWtlVGVtcERpcjogKCkgPT4gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgJ3BpcGVsaW5lLW1hbmFnZXItdXBncmFkZS0nKSksXG4gICAgcmVtb3ZlRGlyOiAoZGlyKSA9PiBybVN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSksXG4gIH07XG59O1xuXG4vKiogV2hlcmUgdGhpcyBwYWNrYWdlIHdvdWxkIGxpdmUgdW5kZXIgYG1hbmFnZXJgJ3MgZ2xvYmFsIHJvb3QsIG9yIG51bGwgd2hlbiB0aGF0IG1hbmFnZXIgaXMgYWJzZW50LiAqL1xuZnVuY3Rpb24gZ2xvYmFsUm9vdChtYW5hZ2VyOiBNYW5hZ2VyLCBkZXBzOiBVcGdyYWRlRGVwcyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCByID0gZGVwcy5ydW4obWFuYWdlciwgWydyb290JywgJy1nJ10sIGZhbHNlKTtcbiAgY29uc3Qgcm9vdCA9IHIuc3RhdHVzID09PSAwID8gci5zdGRvdXQudHJpbSgpIDogJyc7XG4gIHJldHVybiByb290IHx8IG51bGw7XG59XG5cbi8qKiBUaGUgZ2xvYmFsIG1hbmFnZXIgdGhhdCBvd25zIHRoZSBydW5uaW5nIGNvcHkgKGNvbXBhcmVkIGJ5IHJlYWxwYXRoOiBwbnBtIGxpbmtzIGludG8gaXRzIHN0b3JlKS4gKi9cbmZ1bmN0aW9uIG93bmluZ01hbmFnZXIoZGVwczogVXBncmFkZURlcHMpOiB7IG1hbmFnZXI6IE1hbmFnZXI7IHJvb3Q6IHN0cmluZzsgZGlyOiBzdHJpbmcgfSB8IG51bGwge1xuICBjb25zdCBzZWxmID0gZGVwcy5yZWFscGF0aChkZXBzLnBhY2thZ2VSb290KTtcbiAgaWYgKCFzZWxmKSByZXR1cm4gbnVsbDtcbiAgZm9yIChjb25zdCBtYW5hZ2VyIG9mIFsnbnBtJywgJ3BucG0nXSBhcyBjb25zdCkge1xuICAgIGNvbnN0IHJvb3QgPSBnbG9iYWxSb290KG1hbmFnZXIsIGRlcHMpO1xuICAgIGNvbnN0IGRpciA9IHJvb3QgPyBqb2luKHJvb3QsIC4uLlBBQ0tBR0VfTkFNRS5zcGxpdCgnLycpKSA6IG51bGw7XG4gICAgaWYgKHJvb3QgJiYgZGlyICYmIGRlcHMucmVhbHBhdGgoZGlyKSA9PT0gc2VsZikgcmV0dXJuIHsgbWFuYWdlciwgcm9vdCwgZGlyIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmludGVyZmFjZSBSZWxlYXNlIHsgdmVyc2lvbjogc3RyaW5nOyBub2RlUmFuZ2U/OiBzdHJpbmc7IGludGVncml0eT86IHN0cmluZzsgc2lnbmF0dXJlczogQXJyYXk8eyBrZXlpZDogc3RyaW5nOyBzaWc6IHN0cmluZyB9PiB9XG5cbnR5cGUgUmVzb2x1dGlvbiA9IHsgb2s6IHRydWU7IHJlbGVhc2U6IFJlbGVhc2UgfSB8IHsgb2s6IGZhbHNlOyBub3RGb3VuZDogYm9vbGVhbiB9O1xuXG4vKiogV2hhdCBgc3BlY2AgcmVzb2x2ZXMgdG8gb24gdGhlIHJlZ2lzdHJ5OiB0aGUgdmVyc2lvbiBwbHVzIHdoYXQgdGhlIGluc3RhbGwgY2hlY2tzIG5lZWQuICovXG5mdW5jdGlvbiByZXNvbHZlUmVsZWFzZShzcGVjOiBzdHJpbmcsIGRlcHM6IFVwZ3JhZGVEZXBzKTogUmVzb2x1dGlvbiB7XG4gIGNvbnN0IHIgPSBkZXBzLnJ1bignbnBtJywgWyd2aWV3JywgYCR7UEFDS0FHRV9OQU1FfUAke3NwZWN9YCwgJ3ZlcnNpb24nLCAnZW5naW5lcycsICdkaXN0LmludGVncml0eScsICdkaXN0LnNpZ25hdHVyZXMnLCAnLS1qc29uJ10sIGZhbHNlKTtcbiAgbGV0IGJvZHk6IHVua25vd247XG4gIHRyeSB7IGJvZHkgPSBKU09OLnBhcnNlKHIuc3Rkb3V0IHx8ICdudWxsJyk7IH0gY2F0Y2ggeyBib2R5ID0gbnVsbDsgfVxuICAvLyBPbiBmYWlsdXJlIGAtLWpzb25gIHByaW50cyBge1wiZXJyb3JcIjp7XCJjb2RlXCI6XCJFNDA0XCIs4oCmfX1gOiBhIG1pc3NpbmcgdmVyc2lvblxuICAvLyBvciB0YWcgaXMgdGhlIGNhbGxlcidzIG1pc3Rha2UsIG5vdCB0aGUgbmV0d29yaydzLlxuICBpZiAoci5zdGF0dXMgIT09IDApIHtcbiAgICBjb25zdCBjb2RlID0gKGJvZHkgYXMgeyBlcnJvcj86IHsgY29kZT86IHVua25vd24gfSB9IHwgbnVsbCk/LmVycm9yPy5jb2RlO1xuICAgIHJldHVybiB7IG9rOiBmYWxzZSwgbm90Rm91bmQ6IGNvZGUgPT09ICdFNDA0JyB9O1xuICB9XG4gIGNvbnN0IG8gPSBib2R5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgY29uc3QgdmVyc2lvbiA9IG8/LnZlcnNpb247XG4gIGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gJ3N0cmluZycpIHJldHVybiB7IG9rOiBmYWxzZSwgbm90Rm91bmQ6IG8gPT09IG51bGwgfTtcbiAgY29uc3QgZW5naW5lcyA9IG8/LmVuZ2luZXMgYXMgeyBub2RlPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICBjb25zdCBzaWduYXR1cmVzID0gQXJyYXkuaXNBcnJheShvPy5bJ2Rpc3Quc2lnbmF0dXJlcyddKSA/IChvWydkaXN0LnNpZ25hdHVyZXMnXSBhcyBBcnJheTx7IGtleWlkOiBzdHJpbmc7IHNpZzogc3RyaW5nIH0+KSA6IFtdO1xuICByZXR1cm4ge1xuICAgIG9rOiB0cnVlLFxuICAgIHJlbGVhc2U6IHtcbiAgICAgIHZlcnNpb24sXG4gICAgICBub2RlUmFuZ2U6IHR5cGVvZiBlbmdpbmVzPy5ub2RlID09PSAnc3RyaW5nJyA/IGVuZ2luZXMubm9kZSA6IHVuZGVmaW5lZCxcbiAgICAgIGludGVncml0eTogdHlwZW9mIG8/LlsnZGlzdC5pbnRlZ3JpdHknXSA9PT0gJ3N0cmluZycgPyAob1snZGlzdC5pbnRlZ3JpdHknXSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgc2lnbmF0dXJlcyxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIG5wbSdzIHNpZ25pbmcga2V5cywgQUxXQVlTIGZyb20gdGhlIHB1YmxpYyByZWdpc3RyeSB0aGF0IGlzc3VlZCB0aGVtIOKAlCBuZXZlclxuICogZnJvbSB0aGUgY29uZmlndXJlZCByZWdpc3RyeS4gYGRpc3Quc2lnbmF0dXJlc2AgYXJlIG5wbSdzIG93biwgc28gYSBtaXJyb3JcbiAqIHBhc3NlcyB0aGVtIHRocm91Z2ggdW5jaGFuZ2VkOyBmZXRjaGluZyBrZXlzIGZyb20gdGhlIG1pcnJvciB3b3VsZCBsZXQgYVxuICogbWFsaWNpb3VzIG9yIGNvbXByb21pc2VkIG1pcnJvciBzaWduIGl0cyBvd24gdGFyYmFsbCB3aXRoIGl0cyBvd24ga2V5LlxuICovXG5leHBvcnQgY29uc3QgTlBNX0tFWVNfVVJMID0gJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLy0vbnBtL3YxL2tleXMnO1xuXG4vKiogbnBtJ3Mgc2lnbmluZyBrZXlzLCBieSBrZXlpZC4gKi9cbmZ1bmN0aW9uIHJlZ2lzdHJ5S2V5cyhkZXBzOiBVcGdyYWRlRGVwcyk6IE1hcDxzdHJpbmcsIHN0cmluZz4gfCBudWxsIHtcbiAgY29uc3QgdGV4dCA9IGRlcHMuZmV0Y2hUZXh0KE5QTV9LRVlTX1VSTCk7XG4gIGlmICghdGV4dCkgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgY29uc3Qga2V5cyA9IChKU09OLnBhcnNlKHRleHQpIGFzIHsga2V5cz86IEFycmF5PHsga2V5aWQ/OiB1bmtub3duOyBrZXk/OiB1bmtub3duIH0+IH0pLmtleXMgPz8gW107XG4gICAgcmV0dXJuIG5ldyBNYXAoa2V5cy5maWx0ZXIoKGspID0+IHR5cGVvZiBrLmtleWlkID09PSAnc3RyaW5nJyAmJiB0eXBlb2Ygay5rZXkgPT09ICdzdHJpbmcnKS5tYXAoKGspID0+IFtrLmtleWlkIGFzIHN0cmluZywgay5rZXkgYXMgc3RyaW5nXSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKiogRG9lcyBhbnkgcmVnaXN0cnkgc2lnbmF0dXJlIHZlcmlmeSBgPG5hbWU+QDx2ZXJzaW9uPjo8aW50ZWdyaXR5PmA/ICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbmF0dXJlVmFsaWQocmVsZWFzZTogUmVsZWFzZSwga2V5czogTWFwPHN0cmluZywgc3RyaW5nPik6IGJvb2xlYW4ge1xuICBpZiAoIXJlbGVhc2UuaW50ZWdyaXR5KSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbShgJHtQQUNLQUdFX05BTUV9QCR7cmVsZWFzZS52ZXJzaW9ufToke3JlbGVhc2UuaW50ZWdyaXR5fWApO1xuICByZXR1cm4gcmVsZWFzZS5zaWduYXR1cmVzLnNvbWUoKHsga2V5aWQsIHNpZyB9KSA9PiB7XG4gICAgY29uc3Qga2V5ID0ga2V5cy5nZXQoa2V5aWQpO1xuICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB2ZXJpZnkoJ3NoYTI1NicsIG1lc3NhZ2UsIGNyZWF0ZVB1YmxpY0tleSh7IGtleTogQnVmZmVyLmZyb20oa2V5LCAnYmFzZTY0JyksIGZvcm1hdDogJ2RlcicsIHR5cGU6ICdzcGtpJyB9KSwgQnVmZmVyLmZyb20oc2lnLCAnYmFzZTY0JykpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRG93bmxvYWQgdGhlIHRhcmdldCB3aXRoIGBucG0gcGFja2AgYW5kIHByb3ZlIGl0IGlzIHRoZSByZWdpc3RyeSdzIHNpZ25lZFxuICogYXJ0aWZhY3QuIFJldHVybnMgdGhlIHRhcmJhbGwgcGF0aCwgb3IgYW4gZXJyb3IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZmV0Y2hWZXJpZmllZFRhcmJhbGwocmVsZWFzZTogUmVsZWFzZSwgZGlyOiBzdHJpbmcsIGRlcHM6IFVwZ3JhZGVEZXBzKTogeyB0YXJiYWxsOiBzdHJpbmcgfSB8IHsgZXJyb3I6IHN0cmluZyB9IHtcbiAgY29uc3QgcGFjayA9IGRlcHMucnVuKCducG0nLCBbJ3BhY2snLCBgJHtQQUNLQUdFX05BTUV9QCR7cmVsZWFzZS52ZXJzaW9ufWAsICctLXBhY2stZGVzdGluYXRpb24nLCBkaXIsICctLWpzb24nXSwgZmFsc2UpO1xuICBsZXQgZmlsZW5hbWU6IHVua25vd247XG4gIHRyeSB7IGZpbGVuYW1lID0gKEpTT04ucGFyc2UocGFjay5zdGRvdXQpIGFzIEFycmF5PHsgZmlsZW5hbWU/OiB1bmtub3duIH0+KVswXT8uZmlsZW5hbWU7IH0gY2F0Y2ggeyBmaWxlbmFtZSA9IHVuZGVmaW5lZDsgfVxuICBpZiAocGFjay5zdGF0dXMgIT09IDAgfHwgdHlwZW9mIGZpbGVuYW1lICE9PSAnc3RyaW5nJykgcmV0dXJuIHsgZXJyb3I6IGBucG0gY291bGQgbm90IGRvd25sb2FkICR7UEFDS0FHRV9OQU1FfUAke3JlbGVhc2UudmVyc2lvbn1gIH07XG4gIGNvbnN0IHRhcmJhbGwgPSBqb2luKGRpciwgZmlsZW5hbWUpO1xuXG4gIGlmIChkZXBzLmVudltTS0lQX1ZFUklGWV9FTlZdID09PSAnMScpIHtcbiAgICBwcmludFdhcm5pbmcoYCR7U0tJUF9WRVJJRllfRU5WfT0xOiBpbnN0YWxsaW5nIHdpdGhvdXQgY2hlY2tpbmcgdGhlIHJlZ2lzdHJ5IHNpZ25hdHVyZWApO1xuICAgIHJldHVybiB7IHRhcmJhbGwgfTtcbiAgfVxuICBpZiAoIXJlbGVhc2UuaW50ZWdyaXR5KSByZXR1cm4geyBlcnJvcjogYHRoZSByZWdpc3RyeSBnYXZlIG5vIGRpc3QuaW50ZWdyaXR5IGZvciAke3JlbGVhc2UudmVyc2lvbn1gIH07XG4gIGNvbnN0IGFjdHVhbCA9IGRlcHMuaW50ZWdyaXR5T2YodGFyYmFsbCk7XG4gIGlmIChhY3R1YWwgIT09IHJlbGVhc2UuaW50ZWdyaXR5KSByZXR1cm4geyBlcnJvcjogYHRoZSBkb3dubG9hZGVkIHRhcmJhbGwncyBoYXNoICgke2FjdHVhbH0pIGlzIG5vdCB0aGUgcmVnaXN0cnkncyAoJHtyZWxlYXNlLmludGVncml0eX0pYCB9O1xuICBjb25zdCBrZXlzID0gcmVnaXN0cnlLZXlzKGRlcHMpO1xuICBpZiAoIWtleXMpIHJldHVybiB7IGVycm9yOiBgY291bGQgbm90IGZldGNoIG5wbSdzIHNpZ25pbmcga2V5cyBmcm9tICR7TlBNX0tFWVNfVVJMfSAobm8gcm91dGUgdG8gcmVnaXN0cnkubnBtanMub3JnPyBzZXQgJHtTS0lQX1ZFUklGWV9FTlZ9PTEgdG8gaW5zdGFsbCB1bnZlcmlmaWVkKWAgfTtcbiAgaWYgKCFzaWduYXR1cmVWYWxpZChyZWxlYXNlLCBrZXlzKSkgcmV0dXJuIHsgZXJyb3I6IGBubyB2YWxpZCByZWdpc3RyeSBzaWduYXR1cmUgb3ZlciAke1BBQ0tBR0VfTkFNRX1AJHtyZWxlYXNlLnZlcnNpb259YCB9O1xuICByZXR1cm4geyB0YXJiYWxsIH07XG59XG5cbi8qKiBMaW5rIHRvIHdoYXQgY2hhbmdlZCBiZXR3ZWVuIHR3byByZWxlYXNlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VzVXJsKGZyb206IHN0cmluZywgdG86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRhZyA9ICh2OiBzdHJpbmcpID0+IGByZWxlYXNlLyR7UEFDS0FHRV9OQU1FfS8ke3Z9YDtcbiAgcmV0dXJuIGAke1JFUE9fVVJMfS9jb21wYXJlLyR7dGFnKGZyb20pfS4uLiR7dGFnKHRvKX1gO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZ3JhZGVPcHRpb25zIHtcbiAgLyoqIFJlcG9ydCB3aGF0IHdvdWxkIGhhcHBlbiAoZXhpdCAwID0gY3VycmVudCwgMSA9IGEgbW92ZSBpcyBhdmFpbGFibGUpIHdpdGhvdXQgaW5zdGFsbGluZy4gKi9cbiAgY2hlY2s/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFVwZ3JhZGUgKG9yIG1vdmUpIHRoaXMgQ0xJIHRvIGByZXF1ZXN0ZWRgIChgdHJ1ZWAgPSBsYXRlc3QpLiBSZXR1cm5zIHRoZVxuICogcHJvY2VzcyBleGl0IGNvZGU7IG5ldmVyIHRocm93cyBmb3IgYW4gZXhwZWN0ZWQgZmFpbHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGZVcGdyYWRlKHJlcXVlc3RlZDogc3RyaW5nIHwgdHJ1ZSwgZGVwczogVXBncmFkZURlcHMgPSBzeXN0ZW1EZXBzKCksIG9wdHM6IFVwZ3JhZGVPcHRpb25zID0ge30pOiBudW1iZXIge1xuICBjb25zdCBzcGVjID0gcmVxdWVzdGVkID09PSB0cnVlID8gJ2xhdGVzdCcgOiByZXF1ZXN0ZWQ7XG4gIGlmICghVkVSU0lPTl9TUEVDLnRlc3Qoc3BlYykpIHtcbiAgICBwcmludEVycm9yKGBJbnZhbGlkIHZlcnNpb24gXCIke3NwZWN9XCI6IHVzZSBhIHZlcnNpb24gbGlrZSA0LjQuMjEsIG9yIGEgZGlzdC10YWcgbGlrZSBsYXRlc3RgKTtcbiAgICByZXR1cm4gRVJST1JfQ09ERVMuVkFMSURBVElPTjtcbiAgfVxuXG4gIGNvbnN0IG93bmVyID0gb3duaW5nTWFuYWdlcihkZXBzKTtcbiAgaWYgKCFvd25lciAmJiAhb3B0cy5jaGVjaykge1xuICAgIHByaW50RXJyb3IoYCR7QVBQX05BTUV9ICR7ZGVwcy5jdXJyZW50VmVyc2lvbn0gYXQgJHtkZXBzLnBhY2thZ2VSb290fSBpcyBub3QgYSBnbG9iYWwgbnBtIG9yIHBucG0gaW5zdGFsbCwgc28gLS11cGdyYWRlIGNhbm5vdCByZXBsYWNlIGl0YCk7XG4gICAgcHJpbnRJbmZvKGBVcGRhdGUgaXQgd2l0aCB3aGF0ZXZlciBpbnN0YWxsZWQgaXQ6IG5wbSBpbnN0YWxsIC1nICR7UEFDS0FHRV9OQU1FfUAke3NwZWN9IChnbG9iYWwpLCBgXG4gICAgICArIGBhIHZlcnNpb24gYnVtcCBpbiB5b3VyIHByb2plY3QsIG5weCAke1BBQ0tBR0VfTkFNRX1AJHtzcGVjfSwgb3IgeW91ciBOb2RlIG1hbmFnZXIgKFZvbHRhOiB2b2x0YSBpbnN0YWxsICR7UEFDS0FHRV9OQU1FfUAke3NwZWN9KWApO1xuICAgIHJldHVybiBFUlJPUl9DT0RFUy5DT05GSUdVUkFUSU9OO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlUmVsZWFzZShzcGVjLCBkZXBzKTtcbiAgaWYgKCFyZXNvbHZlZC5vaykge1xuICAgIGlmIChyZXNvbHZlZC5ub3RGb3VuZCkge1xuICAgICAgcHJpbnRFcnJvcihgJHtQQUNLQUdFX05BTUV9IGhhcyBubyB2ZXJzaW9uIG9yIGRpc3QtdGFnIFwiJHtzcGVjfVwiYCk7XG4gICAgICByZXR1cm4gRVJST1JfQ09ERVMuVkFMSURBVElPTjtcbiAgICB9XG4gICAgcHJpbnRFcnJvcihgQ291bGQgbm90IHJlYWNoIHRoZSBucG0gcmVnaXN0cnkgdG8gcmVzb2x2ZSAke1BBQ0tBR0VfTkFNRX1AJHtzcGVjfWApO1xuICAgIHJldHVybiBFUlJPUl9DT0RFUy5ORVRXT1JLO1xuICB9XG4gIGNvbnN0IHsgcmVsZWFzZSB9ID0gcmVzb2x2ZWQ7XG4gIGNvbnN0IHRhcmdldCA9IHJlbGVhc2UudmVyc2lvbjtcblxuICBjb25zdCBvcmRlciA9IGNvbXBhcmVTZW12ZXIodGFyZ2V0LCBkZXBzLmN1cnJlbnRWZXJzaW9uKTtcbiAgaWYgKG9yZGVyID09PSAwKSB7XG4gICAgcHJpbnRTdWNjZXNzKGAke0FQUF9OQU1FfSAke2RlcHMuY3VycmVudFZlcnNpb259IGlzIGFscmVhZHkgJHtyZXF1ZXN0ZWQgPT09IHRydWUgPyAndGhlIGxhdGVzdCByZWxlYXNlJyA6ICdpbnN0YWxsZWQnfWApO1xuICAgIHJldHVybiAwO1xuICB9XG4gIC8vIEEgYmFyZSAtLXVwZ3JhZGUgbmV2ZXIgbW92ZXMgYmFja3dhcmRzOyBuYW1pbmcgYSB2ZXJzaW9uIGlzIGhvdyB0byBkb3duZ3JhZGUuXG4gIGlmIChvcmRlciA8IDAgJiYgcmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgcHJpbnRTdWNjZXNzKGAke0FQUF9OQU1FfSAke2RlcHMuY3VycmVudFZlcnNpb259IGlzIG5ld2VyIHRoYW4gdGhlIGxhdGVzdCByZWxlYXNlICgke3RhcmdldH0pOyBub3RoaW5nIHRvIGRvYCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgLy8gT25seSBhIERPV05HUkFERSBjYW4gc3RyYW5kIHRoZSB1c2VyOyBtb3ZpbmcgdXAgZnJvbSBhIHByZS1mbGFnIGJ1aWxkIGlzIGZpbmUuXG4gIGlmIChvcmRlciA8IDAgJiYgY29tcGFyZVNlbXZlcih0YXJnZXQsIFVQR1JBREVfU0lOQ0UpIDwgMCkge1xuICAgIHByaW50RXJyb3IoYCR7dGFyZ2V0fSBwcmVkYXRlcyAtLXVwZ3JhZGUgKGFkZGVkIGluICR7VVBHUkFERV9TSU5DRX0pLCBzbyBtb3ZpbmcgdG8gaXQgd291bGQgbGVhdmUgbm8gd2F5IGJhY2sgYnV0IGEgbWFudWFsIGluc3RhbGxgKTtcbiAgICBwcmludEluZm8oYElmIHRoYXQgaXMgd2hhdCB5b3Ugd2FudDogbnBtIGluc3RhbGwgLWcgJHtQQUNLQUdFX05BTUV9QCR7dGFyZ2V0fWApO1xuICAgIHJldHVybiBFUlJPUl9DT0RFUy5WQUxJREFUSU9OO1xuICB9XG4gIGlmIChyZWxlYXNlLm5vZGVSYW5nZSkge1xuICAgIGNvbnN0IGZpdHMgPSBzYXRpc2ZpZXNSYW5nZShkZXBzLm5vZGVWZXJzaW9uLCByZWxlYXNlLm5vZGVSYW5nZSk7XG4gICAgaWYgKGZpdHMgPT09IGZhbHNlKSB7XG4gICAgICBwcmludEVycm9yKGAke0FQUF9OQU1FfSAke3RhcmdldH0gbmVlZHMgTm9kZSAke3JlbGVhc2Uubm9kZVJhbmdlfSwgYnV0IHRoaXMgaXMgTm9kZSAke2RlcHMubm9kZVZlcnNpb259OyB1cGdyYWRlIE5vZGUgZmlyc3RgKTtcbiAgICAgIHJldHVybiBFUlJPUl9DT0RFUy5DT05GSUdVUkFUSU9OO1xuICAgIH1cbiAgICBpZiAoZml0cyA9PT0gbnVsbCkgcHJpbnRXYXJuaW5nKGBDb3VsZCBub3QgY2hlY2sgJHt0YXJnZXR9J3MgTm9kZSByZXF1aXJlbWVudCBcIiR7cmVsZWFzZS5ub2RlUmFuZ2V9XCIgYWdhaW5zdCAke2RlcHMubm9kZVZlcnNpb259YCk7XG4gIH1cblxuICBjb25zdCB2ZXJiID0gb3JkZXIgPiAwID8gJ1VwZ3JhZGluZycgOiAnRG93bmdyYWRpbmcnO1xuICBpZiAob3B0cy5jaGVjaykge1xuICAgIHByaW50SW5mbyhgJHtBUFBfTkFNRX0gJHtkZXBzLmN1cnJlbnRWZXJzaW9ufSDihpIgJHt0YXJnZXR9IGlzIGF2YWlsYWJsZSR7b3duZXIgPyAnJyA6ICcgKG5vdCBhIGdsb2JhbCBucG0vcG5wbSBpbnN0YWxsOiB1cGRhdGUgaXQgd2l0aCB3aGF0ZXZlciBpbnN0YWxsZWQgaXQpJ31gKTtcbiAgICBwcmludEluZm8oYENoYW5nZXM6ICR7Y2hhbmdlc1VybChkZXBzLmN1cnJlbnRWZXJzaW9uLCB0YXJnZXQpfWApO1xuICAgIHJldHVybiAxO1xuICB9XG4gIC8vIGBvd25lcmAgaXMgbm9uLW51bGwgcGFzdCB0aGUgIWNoZWNrIGd1YXJkIGFib3ZlLlxuICBjb25zdCBvd24gPSBvd25lciE7XG5cbiAgaWYgKCFkZXBzLndyaXRhYmxlKG93bi5yb290KSkge1xuICAgIHByaW50RXJyb3IoYCR7b3duLnJvb3R9IGlzIG5vdCB3cml0YWJsZSBieSB0aGlzIHVzZXIsIHNvICR7b3duLm1hbmFnZXJ9IGNhbm5vdCByZXBsYWNlICR7QVBQX05BTUV9IHRoZXJlYCk7XG4gICAgLy8gTmV2ZXIgXCJyZS1ydW4gcGlwZWxpbmUtbWFuYWdlciB3aXRoIHN1ZG9cIjogdGhhdCBydW5zIHRoZSB3aG9sZSBDTEkgKGl0c1xuICAgIC8vIGNyZWRlbnRpYWwgc3RvcmUsIGl0cyBjb25maWcpIGFzIHJvb3QuIE5hbWUgdGhlIG9uZSBjb21tYW5kIHRoYXQgbmVlZHMgaXQuXG4gICAgcHJpbnRJbmZvKGBFaXRoZXIgaW5zdGFsbCBqdXN0IHRoZSBwYWNrYWdlIGFzIHJvb3Q6IHN1ZG8gbnBtIGluc3RhbGwgLWcgJHtQQUNLQUdFX05BTUV9QCR7dGFyZ2V0fWApO1xuICAgIHByaW50SW5mbygnb3IgbW92ZSBucG0gZ2xvYmFscyBpbnRvIHlvdXIgaG9tZSBkaXJlY3RvcnkgKG5wbSBjb25maWcgc2V0IHByZWZpeCB+Ly5ucG0tZ2xvYmFsLCB0aGVuIGFkZCB+Ly5ucG0tZ2xvYmFsL2JpbiB0byBQQVRIKSBhbmQgcmUtcnVuIC0tdXBncmFkZScpO1xuICAgIHJldHVybiBFUlJPUl9DT0RFUy5GSUxFX1NZU1RFTTtcbiAgfVxuXG4gIHByaW50SW5mbyhgJHt2ZXJifSAke0FQUF9OQU1FfSAke2RlcHMuY3VycmVudFZlcnNpb259IOKGkiAke3RhcmdldH0gKCR7b3duLm1hbmFnZXJ9IGdsb2JhbCBpbnN0YWxsKWApO1xuICBjb25zdCB0bXAgPSBkZXBzLm1ha2VUZW1wRGlyKCk7XG4gIHRyeSB7XG4gICAgY29uc3QgZmV0Y2hlZCA9IGZldGNoVmVyaWZpZWRUYXJiYWxsKHJlbGVhc2UsIHRtcCwgZGVwcyk7XG4gICAgaWYgKCdlcnJvcicgaW4gZmV0Y2hlZCkge1xuICAgICAgcHJpbnRFcnJvcihgTm90IGluc3RhbGxpbmcgJHt0YXJnZXR9OiAke2ZldGNoZWQuZXJyb3J9OyAke0FQUF9OQU1FfSAke2RlcHMuY3VycmVudFZlcnNpb259IGlzIHVuY2hhbmdlZGApO1xuICAgICAgcmV0dXJuIEVSUk9SX0NPREVTLkdFTkVSQUw7XG4gICAgfVxuICAgIGNvbnN0IGluc3RhbGwgPSBvd24ubWFuYWdlciA9PT0gJ25wbSdcbiAgICAgID8gZGVwcy5ydW4oJ25wbScsIFsnaW5zdGFsbCcsICctZycsIGZldGNoZWQudGFyYmFsbF0sIHRydWUpXG4gICAgICA6IGRlcHMucnVuKCdwbnBtJywgWydhZGQnLCAnLWcnLCBmZXRjaGVkLnRhcmJhbGxdLCB0cnVlKTtcbiAgICBpZiAoaW5zdGFsbC5zdGF0dXMgIT09IDApIHtcbiAgICAgIHByaW50RXJyb3IoYCR7b3duLm1hbmFnZXJ9IGNvdWxkIG5vdCBpbnN0YWxsICR7UEFDS0FHRV9OQU1FfUAke3RhcmdldH07ICR7QVBQX05BTUV9ICR7ZGVwcy5jdXJyZW50VmVyc2lvbn0gaXMgdW5jaGFuZ2VkYCk7XG4gICAgICByZXR1cm4gRVJST1JfQ09ERVMuRklMRV9TWVNURU07XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGRlcHMucmVtb3ZlRGlyKHRtcCk7XG4gIH1cblxuICAvLyBSZWFkIHRoZSB2ZXJzaW9uIGJhY2sgZnJvbSBkaXNrIHJhdGhlciB0aGFuIHRydXN0aW5nIHRoZSBleGl0IGNvZGUuXG4gIGNvbnN0IGluc3RhbGxlZCA9IGRlcHMucmVhZFZlcnNpb24ob3duLmRpcik7XG4gIGlmIChpbnN0YWxsZWQgIT09IHRhcmdldCkge1xuICAgIHByaW50V2FybmluZyhgJHtvd24ubWFuYWdlcn0gcmVwb3J0ZWQgc3VjY2VzcywgYnV0ICR7b3duLmRpcn0gaG9sZHMgJHtpbnN0YWxsZWQgPz8gJ25vIHJlYWRhYmxlIHBhY2thZ2UnfSBpbnN0ZWFkIG9mICR7dGFyZ2V0fWApO1xuICAgIHJldHVybiBFUlJPUl9DT0RFUy5HRU5FUkFMO1xuICB9XG4gIHByaW50U3VjY2VzcyhgJHtBUFBfTkFNRX0gaXMgbm93ICR7dGFyZ2V0fSAod2FzICR7ZGVwcy5jdXJyZW50VmVyc2lvbn0pOyBzaWduYXR1cmUgdmVyaWZpZWRgKTtcbiAgcHJpbnRJbmZvKGBXaGF0IGNoYW5nZWQ6ICR7Y2hhbmdlc1VybChkZXBzLmN1cnJlbnRWZXJzaW9uLCB0YXJnZXQpfWApO1xuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgdG9wLWxldmVsIGAtLXVwZ3JhZGUgW3ZlcnNpb25dYCBhbmQgYC0tdXBncmFkZS1jaGVjayBbdmVyc2lvbl1gXG4gKiBmbGFncy4gSGFuZGxlZCB0aGUgd2F5IENvbW1hbmRlciBoYW5kbGVzIGAtLXZlcnNpb25gOiB0aGUgb3B0aW9uIGxpc3RlbmVyXG4gKiBydW5zIGFuZCBleGl0cywgc28gZWFjaCB3b3JrcyBvbiBpdHMgb3duIHdpdGhvdXQgYSByb290IGFjdGlvbiB0aGF0IHdvdWxkXG4gKiBjaGFuZ2UgaG93IHVua25vd24gY29tbWFuZHMgYXJlIHJlcG9ydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJVcGdyYWRlT3B0aW9uKFxuICBwcm9ncmFtOiBDb21tYW5kLFxuICB1cGdyYWRlOiAocmVxdWVzdGVkOiBzdHJpbmcgfCB0cnVlLCBvcHRzOiBVcGdyYWRlT3B0aW9ucykgPT4gbnVtYmVyID0gKHIsIG8pID0+IHNlbGZVcGdyYWRlKHIsIHN5c3RlbURlcHMoKSwgbyksXG4pOiB2b2lkIHtcbiAgcHJvZ3JhbS5vcHRpb24oJy0tdXBncmFkZSBbdmVyc2lvbl0nLCAnVXBncmFkZSB0aGlzIENMSSBpbiBwbGFjZSB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgKG9yIHRoZSBnaXZlbiB2ZXJzaW9uIC8gZGlzdC10YWcpJyk7XG4gIHByb2dyYW0ub3B0aW9uKCctLXVwZ3JhZGUtY2hlY2sgW3ZlcnNpb25dJywgJ1JlcG9ydCB3aGV0aGVyIC0tdXBncmFkZSB3b3VsZCBjaGFuZ2UgYW55dGhpbmcgKGV4aXQgMCA9IGN1cnJlbnQsIDEgPSBhdmFpbGFibGUpJyk7XG4gIC8vIENvbW1hbmRlcidzIGxpc3RlbmVyIGdldHMgdGhlIHZhbHVlIGFzIGdpdmVuLCBvciBudWxsL3VuZGVmaW5lZCBmb3IgYSBiYXJlXG4gIC8vIGZsYWcgKG5vdCBgdHJ1ZWAsIHVubGlrZSB0aGUgcGFyc2VkIG9wdHMpLCBzbyBhbnl0aGluZyBub3QgYSBzdHJpbmcgbWVhbnMgbGF0ZXN0LlxuICBjb25zdCBsYXRlc3RPciA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHRydWUgPT4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IHRydWUpO1xuICBwcm9ncmFtLm9uKCdvcHRpb246dXBncmFkZScsICh2YWx1ZTogdW5rbm93bikgPT4gcHJvY2Vzcy5leGl0KHVwZ3JhZGUobGF0ZXN0T3IodmFsdWUpLCB7fSkpKTtcbiAgcHJvZ3JhbS5vbignb3B0aW9uOnVwZ3JhZGUtY2hlY2snLCAodmFsdWU6IHVua25vd24pID0+IHByb2Nlc3MuZXhpdCh1cGdyYWRlKGxhdGVzdE9yKHZhbHVlKSwgeyBjaGVjazogdHJ1ZSB9KSkpO1xufVxuIl19
|
|
@@ -176,6 +176,10 @@ function resolveExitCode(err, fallback) {
|
|
|
176
176
|
return ERROR_CODES.NOT_FOUND;
|
|
177
177
|
if (status === 408 || status === 504)
|
|
178
178
|
return ERROR_CODES.TIMEOUT;
|
|
179
|
+
// CLIENT_UPGRADE_REQUIRED: this CLI is below the platform's minimum — a
|
|
180
|
+
// local-install problem (fix: --upgrade), so scripts can tell it apart.
|
|
181
|
+
if (status === 426)
|
|
182
|
+
return ERROR_CODES.CONFIGURATION;
|
|
179
183
|
if (status && status >= 500)
|
|
180
184
|
return ERROR_CODES.API_REQUEST;
|
|
181
185
|
// A request that got no HTTP response never reached the server (DNS / refused
|
|
@@ -306,4 +310,4 @@ function isAxiosError(err) {
|
|
|
306
310
|
'isAxiosError' in err &&
|
|
307
311
|
err.isAxiosError === true);
|
|
308
312
|
}
|
|
309
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vycm9yLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUNMLFdBQVcsR0FJWixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTlDLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFHdkI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixHQUFZLEVBQ1osSUFBSSxHQUFjLFdBQVcsQ0FBQyxPQUFPLEVBQ3JDLE9BQU8sR0FBd0IsRUFBRTtJQUVqQyxNQUFNLEVBQ0osS0FBSyxHQUFHLEtBQUssRUFDYixJQUFJLEdBQUcsSUFBSSxFQUNYLFlBQVksR0FBRyxJQUFJLEVBQ25CLE9BQU8sRUFDUCxhQUFhLEdBQUcsbUJBQW1CLEVBQUUsR0FDdEMsR0FBRyxPQUFPLENBQUM7SUFFWiw4RUFBOEU7SUFDOUUsZ0ZBQWdGO0lBQ2hGLDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsOEJBQThCO0lBQzlCLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFaEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFH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QUFPLEdBQUcsS0FBSyxRQUFRO1FBQ3ZCLEdBQUcsS0FBSyxJQUFJO1FBQ1osY0FBYyxJQUFJLEdBQUc7UUFDcEIsR0FBK0IsQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUN2RCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBpc1F1b3RhRXhjZWVkZWRCb2R5IH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IGdlbmVyYXRlRXhlY3V0aW9uSWQgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQge1xuICBFUlJPUl9DT0RFUyxcbiAgdHlwZSBFcnJvckNvZGUsXG4gIHR5cGUgRXJyb3JIYW5kbGVyT3B0aW9ucyxcbiAgdHlwZSBBeGlvc0Vycm9yTGlrZSxcbn0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuXG5jb25zdCB7IGJvbGQsIGRpbSwgcmVkLCB5ZWxsb3csIGN5YW4gfSA9IHBpY287XG5cbi8vIFJlLWV4cG9ydCBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IEVSUk9SX0NPREVTIH07XG5leHBvcnQgdHlwZSB7IEVycm9yQ29kZSB9O1xuXG4vKipcbiAqIEZvcm1hdCBhbmQgaGFuZGxlIGVycm9ycyB3aXRoIGNvbG9yZWQgb3V0cHV0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVFcnJvcihcbiAgZXJyOiB1bmtub3duLFxuICBjb2RlOiBFcnJvckNvZGUgPSBFUlJPUl9DT0RFUy5HRU5FUkFMLFxuICBvcHRpb25zOiBFcnJvckhhbmRsZXJPcHRpb25zID0ge30sXG4pOiBuZXZlciB7XG4gIGNvbnN0IHtcbiAgICBkZWJ1ZyA9IGZhbHNlLFxuICAgIGV4aXQgPSB0cnVlLFxuICAgIGxvZ1RvQ29uc29sZSA9IHRydWUsXG4gICAgY29udGV4dCxcbiAgICBjb3JyZWxhdGlvbklkID0gZ2VuZXJhdGVFeGVjdXRpb25JZCgpLFxuICB9ID0gb3B0aW9ucztcblxuICAvLyBEZXJpdmUgdGhlIGNhbm9uaWNhbCBleGl0IGNvZGUgZnJvbSB0aGUgQUNUVUFMIGVycm9yIChzZWUgcmVzb2x2ZUV4aXRDb2RlKSxcbiAgLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBjYWxsZXIncyBgY29kZWAgZm9yIGFueXRoaW5nIHVuY2xhc3NpZmlhYmxlLiBUaGlzIGlzIHdoYXRcbiAgLy8gbWFrZXMgZXZlcnkgY29tbWFuZCBlbWl0IHRoZSBTQU1FIGV4aXQgY29kZSBmb3IgdGhlIHNhbWUgY2xhc3Mgb2YgZmFpbHVyZSxcbiAgLy8gcmF0aGVyIHRoYW4gYSBibGFua2V0IEFQSV9SRVFVRVNUL0dFTkVSQUwuIFVzZWQgZm9yIGRpc3BsYXksIHRoZSBzdWdnZXN0aW9uLFxuICAvLyBhbmQgdGhlIHByb2Nlc3MgZXhpdCBiZWxvdy5cbiAgY29uc3QgcmVzb2x2ZWRDb2RlID0gcmVzb2x2ZUV4aXRDb2RlKGVyciwgY29kZSk7XG5cbiAgaWYgKGxvZ1RvQ29uc29sZSkge1xuICAgIGNvbnN0IGRpdmlkZXIgPSAn4pSAJy5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCk7XG4gICAgY29uc3QgZXJyb3JJZCA9IGBFUlItJHtjb3JyZWxhdGlvbklkfWA7XG5cbiAgICBjb25zb2xlLmVycm9yKCdcXG4nICsgcmVkKGJvbGQoJ+KclyBFUlJPUicpKSArIGRpbShgIFske2Vycm9ySWR9XWApICsgJ1xcbicpO1xuICAgIGNvbnNvbGUuZXJyb3IoZGltKGRpdmlkZXIpKTtcblxuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihyZWQoYm9sZCgnTWVzc2FnZTonKSksIGVyci5tZXNzYWdlKTtcblxuICAgICAgaWYgKGVyci5uYW1lICE9PSAnRXJyb3InKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdUeXBlOicpLCBlcnIubmFtZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3cgVmFsaWRhdGlvbiBlcnJvciBkZXRhaWxzXG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgIGlmIChlcnIuZmllbGQpIGNvbnNvbGUuZXJyb3IocmVkKCdGaWVsZDonKSwgZXJyLmZpZWxkKTtcbiAgICAgICAgaWYgKGVyci52YWx1ZSAhPT0gdW5kZWZpbmVkKSBjb25zb2xlLmVycm9yKHJlZCgnVmFsdWU6JyksIHNhbml0aXplVmFsdWUoZXJyLnZhbHVlKSk7XG4gICAgICAgIGlmIChlcnIucnVsZSkgY29uc29sZS5lcnJvcihyZWQoJ1J1bGU6JyksIGVyci5ydWxlKTtcbiAgICAgICAgaWYgKGVyci5leHBlY3RlZCkgY29uc29sZS5lcnJvcihyZWQoJ0V4cGVjdGVkOicpLCBlcnIuZXhwZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG93IE5ldHdvcmsgZXJyb3IgZGV0YWlsc1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5ldHdvcmtFcnJvcikge1xuICAgICAgICBpZiAoZXJyLnVybCkgY29uc29sZS5lcnJvcihyZWQoJ1VSTDonKSwgc2FuaXRpemVVcmwoZXJyLnVybCkpO1xuICAgICAgICBpZiAoZXJyLnRpbWVvdXQpIGNvbnNvbGUuZXJyb3IocmVkKCdUaW1lb3V0OicpLCBgJHtlcnIudGltZW91dH1tc2ApO1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnUmVxdWVzdCBNYWRlOicpLCBlcnIucmVxdWVzdE1hZGUgPyAnWWVzJyA6ICdObycpO1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnUmVzcG9uc2UgUmVjZWl2ZWQ6JyksIGVyci5yZXNwb25zZVJlY2VpdmVkID8gJ1llcycgOiAnTm8nKTtcbiAgICAgICAgaWYgKGVyci5jYXVzZSkgY29uc29sZS5lcnJvcihyZWQoJ0NhdXNlZCBieTonKSwgZXJyLmNhdXNlLm1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG93IEF4aW9zIGVycm9yIGRldGFpbHNcbiAgICAgIGlmIChpc0F4aW9zRXJyb3IoZXJyKSkge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBlcnIucmVzcG9uc2U/LnN0YXR1cztcbiAgICAgICAgY29uc3QgdXJsID0gZXJyLmNvbmZpZz8udXJsO1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1N0YXR1czonKSwgc3RhdHVzKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnU3RhdHVzIFRleHQ6JyksIGdldEh0dHBTdGF0dXNUZXh0KHN0YXR1cykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cmwpIGNvbnNvbGUuZXJyb3IocmVkKCdVUkw6JyksIHNhbml0aXplVXJsKHVybCkpO1xuICAgICAgICBpZiAoZXJyLnJlc3BvbnNlPy5kYXRhKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1Jlc3BvbnNlOicpKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGRpbShzYW5pdGl6ZUVycm9yRGF0YShlcnIucmVzcG9uc2UuZGF0YSkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTaG93IENESy9leGVjU3luYyBlcnJvciBkZXRhaWxzIChzdGRlcnIgY2FwdHVyZWQgZnJvbSBjaGlsZCBwcm9jZXNzKVxuICAgICAgaWYgKCdzdGRlcnInIGluIGVyciAmJiBlcnIuc3RkZXJyKSB7XG4gICAgICAgIGNvbnN0IHN0ZGVyciA9IChlcnIuc3RkZXJyIGFzIEJ1ZmZlciB8IHN0cmluZykudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ0RLIE91dHB1dDonKSk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc3RkZXJyKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0NvZGU6JyksIGdldEVycm9yQ29kZU5hbWUocmVzb2x2ZWRDb2RlKSk7XG4gICAgICBjb25zb2xlLmVycm9yKGRpbSgnRXJyb3IgSUQ6JyksIGRpbShlcnJvcklkKSk7XG5cbiAgICAgIGlmIChjb250ZXh0ICYmIE9iamVjdC5rZXlzKGNvbnRleHQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdDb250ZXh0OicpKTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY29udGV4dCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgICAke2N5YW4oa2V5KX06YCwgZGltKHNhbml0aXplVmFsdWUodmFsdWUpKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVidWcgJiYgZXJyLnN0YWNrKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGRpbSgnU3RhY2sgdHJhY2U6JykpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGRpbShzYW5pdGl6ZVN0YWNrVHJhY2UoZXJyLnN0YWNrKSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKHJlZCgnRXJyb3I6JyksIFN0cmluZyhlcnIpKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdDb2RlOicpLCBnZXRFcnJvckNvZGVOYW1lKHJlc29sdmVkQ29kZSkpO1xuICAgICAgY29uc29sZS5lcnJvcihkaW0oJ0Vycm9yIElEOicpLCBkaW0oZXJyb3JJZCkpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZGltKGRpdmlkZXIpKTtcblxuICAgIGlmICghZGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoeWVsbG93KCfwn5KhIFRpcDonKSwgZGltKCdSdW4gd2l0aCAtLWRlYnVnIGZsYWcgdG8gc2VlIGZ1bGwgc3RhY2sgdHJhY2UnKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VnZ2VzdGlvbiA9IGdldEVycm9yU3VnZ2VzdGlvbihlcnIsIHJlc29sdmVkQ29kZSk7XG4gICAgaWYgKHN1Z2dlc3Rpb24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoeWVsbG93KCfwn5KhIFN1Z2dlc3Rpb246JyksIGRpbShzdWdnZXN0aW9uKSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcignJyk7XG4gIH1cblxuICBpZiAoZXhpdCkge1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSByZXNvbHZlZENvZGU7XG4gICAgcHJvY2Vzcy5leGl0KHJlc29sdmVkQ29kZSk7XG4gIH1cblxuICB0aHJvdyBlcnI7XG59XG5cbi8vIC0tLSBFcnJvciBjbGFzc2VzIChvbmx5IHRob3NlIGFjdHVhbGx5IHVzZWQpIC0tLVxuXG4vKipcbiAqIFZhbGlkYXRpb24gZXJyb3IgY2xhc3NcbiAqL1xuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyBmaWVsZD86IHN0cmluZyxcbiAgICBwdWJsaWMgdmFsdWU/OiB1bmtub3duLFxuICAgIHB1YmxpYyBydWxlPzogc3RyaW5nLFxuICAgIHB1YmxpYyBleHBlY3RlZD86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1ZhbGlkYXRpb25FcnJvcic7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBOZXR3b3JrIGVycm9yIGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgdXJsPzogc3RyaW5nLFxuICAgIHB1YmxpYyBjYXVzZT86IEVycm9yLFxuICAgIHB1YmxpYyB0aW1lb3V0PzogbnVtYmVyLFxuICAgIHB1YmxpYyByZXF1ZXN0TWFkZTogYm9vbGVhbiA9IHRydWUsXG4gICAgcHVibGljIHJlc3BvbnNlUmVjZWl2ZWQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ05ldHdvcmtFcnJvcic7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbn1cblxuLy8gLS0tIFByaXZhdGUgaGVscGVycyAtLS1cblxuLyoqXG4gKiBNYXAgdGhlIEFDVFVBTCBlcnJvciB0byBhIGNhbm9uaWNhbCBleGl0IGNvZGUgc28gZXZlcnkgY29tbWFuZCBleGl0cyB3aXRoIHRoZVxuICogU0FNRSBjb2RlIGZvciB0aGUgc2FtZSBjbGFzcyBvZiBmYWlsdXJlLiBUaGUgY2FsbGVyLXN1cHBsaWVkIGBmYWxsYmFja2AgKGUuZy5cbiAqIEFQSV9SRVFVRVNUKSBpcyB1c2VkIG9ubHkgZm9yIGVycm9ycyB0aGlzIGNhbid0IGNsYXNzaWZ5LiBDb2RlcyAoc3JjL3R5cGVzL2Vycm9yLnRzKTpcbiAqXG4gKiAgIDEgR0VORVJBTCDCtyAyIFZBTElEQVRJT04gwrcgMyBBUElfUkVRVUVTVCDCtyA0IEFVVEhFTlRJQ0FUSU9OIMK3IDUgQVVUSE9SSVpBVElPTlxuICogICA2IE5PVF9GT1VORCDCtyA3IE5FVFdPUksgwrcgOCBDT05GSUdVUkFUSU9OIMK3IDkgRklMRV9TWVNURU0gwrcgMTAgVElNRU9VVFxuICpcbiAqIFByZWNlZGVuY2U6IHR5cGVkIENMSSBlcnJvcnMg4oaSIEhUVFAgc3RhdHVzIOKGkiBOb2RlIHN5c3RlbSBlcnJvciBgY29kZWAg4oaSIGZhbGxiYWNrLlxuICovXG5mdW5jdGlvbiByZXNvbHZlRXhpdENvZGUoZXJyOiB1bmtub3duLCBmYWxsYmFjazogRXJyb3JDb2RlKTogRXJyb3JDb2RlIHtcbiAgaWYgKGVyciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikgcmV0dXJuIEVSUk9SX0NPREVTLlZBTElEQVRJT047XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBOZXR3b3JrRXJyb3IpIHJldHVybiBlcnIudGltZW91dCA/IEVSUk9SX0NPREVTLlRJTUVPVVQgOiBFUlJPUl9DT0RFUy5ORVRXT1JLO1xuXG4gIGlmIChpc0F4aW9zRXJyb3IoZXJyKSkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGVyci5yZXNwb25zZT8uc3RhdHVzO1xuICAgIGlmIChzdGF0dXMgPT09IDQwMCB8fCBzdGF0dXMgPT09IDQyMikgcmV0dXJuIEVSUk9SX0NPREVTLlZBTElEQVRJT047XG4gICAgaWYgKHN0YXR1cyA9PT0gNDAxKSByZXR1cm4gRVJST1JfQ09ERVMuQVVUSEVOVElDQVRJT047XG4gICAgaWYgKHN0YXR1cyA9PT0gNDAzKSByZXR1cm4gRVJST1JfQ09ERVMuQVVUSE9SSVpBVElPTjtcbiAgICBpZiAoc3RhdHVzID09PSA0MDQpIHJldHVybiBFUlJPUl9DT0RFUy5OT1RfRk9VTkQ7XG4gICAgaWYgKHN0YXR1cyA9PT0gNDA4IHx8IHN0YXR1cyA9PT0gNTA0KSByZXR1cm4gRVJST1JfQ09ERVMuVElNRU9VVDtcbiAgICBpZiAoc3RhdHVzICYmIHN0YXR1cyA+PSA1MDApIHJldHVybiBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVDtcbiAgICAvLyBBIHJlcXVlc3QgdGhhdCBnb3Qgbm8gSFRUUCByZXNwb25zZSBuZXZlciByZWFjaGVkIHRoZSBzZXJ2ZXIgKEROUyAvIHJlZnVzZWRcbiAgICAvLyAvIHJlc2V0KSDigJQgdGhhdCdzIGEgbmV0d29yayBmYWlsdXJlLCBub3QgYW4gQVBJLXJlc3BvbnNlIGVycm9yLlxuICAgIGlmICghZXJyLnJlc3BvbnNlKSByZXR1cm4gRVJST1JfQ09ERVMuTkVUV09SSztcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cblxuICAvLyBOb2RlIHN5c3RlbSBlcnJvcnMgKGZzICsgc29ja2V0cykgY2FycnkgYSBzdHJpbmcgYGNvZGVgLlxuICBjb25zdCBzeXNDb2RlID0gKGVyciBhcyB7IGNvZGU/OiB1bmtub3duIH0gfCBudWxsKT8uY29kZTtcbiAgaWYgKHR5cGVvZiBzeXNDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGlmIChbJ0VOT0VOVCcsICdFQUNDRVMnLCAnRUlTRElSJywgJ0VOT1RESVInLCAnRUVYSVNUJywgJ0VQRVJNJywgJ0VOT1NQQycsICdFTUZJTEUnXS5pbmNsdWRlcyhzeXNDb2RlKSkge1xuICAgICAgcmV0dXJuIEVSUk9SX0NPREVTLkZJTEVfU1lTVEVNO1xuICAgIH1cbiAgICBpZiAoc3lzQ29kZSA9PT0gJ0VUSU1FRE9VVCcpIHJldHVybiBFUlJPUl9DT0RFUy5USU1FT1VUO1xuICAgIGlmIChbJ0VDT05OUkVGVVNFRCcsICdFTk9URk9VTkQnLCAnRUNPTk5SRVNFVCcsICdFSE9TVFVOUkVBQ0gnLCAnRU5FVFVOUkVBQ0gnLCAnRUFJX0FHQUlOJywgJ0VQSVBFJ10uaW5jbHVkZXMoc3lzQ29kZSkpIHtcbiAgICAgIHJldHVybiBFUlJPUl9DT0RFUy5ORVRXT1JLO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JDb2RlTmFtZShjb2RlOiBFcnJvckNvZGUpOiBzdHJpbmcge1xuICBjb25zdCBlbnRyeSA9IE9iamVjdC5lbnRyaWVzKEVSUk9SX0NPREVTKS5maW5kKChbXywgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gY29kZSk7XG4gIHJldHVybiBlbnRyeSA/IGAke2VudHJ5WzBdfSAoJHtjb2RlfSlgIDogU3RyaW5nKGNvZGUpO1xufVxuXG5mdW5jdGlvbiBnZXRIdHRwU3RhdHVzVGV4dChzdGF0dXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IHN0YXR1c1RleHRzOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xuICAgIDQwMDogJ0JhZCBSZXF1ZXN0JyxcbiAgICA0MDE6ICdVbmF1dGhvcml6ZWQnLFxuICAgIDQwMzogJ0ZvcmJpZGRlbicsXG4gICAgNDA0OiAnTm90IEZvdW5kJyxcbiAgICA0MDg6ICdSZXF1ZXN0IFRpbWVvdXQnLFxuICAgIDQwOTogJ0NvbmZsaWN0JyxcbiAgICA0MjI6ICdVbnByb2Nlc3NhYmxlIEVudGl0eScsXG4gICAgNDI5OiAnVG9vIE1hbnkgUmVxdWVzdHMnLFxuICAgIDUwMDogJ0ludGVybmFsIFNlcnZlciBFcnJvcicsXG4gICAgNTAyOiAnQmFkIEdhdGV3YXknLFxuICAgIDUwMzogJ1NlcnZpY2UgVW5hdmFpbGFibGUnLFxuICAgIDUwNDogJ0dhdGV3YXkgVGltZW91dCcsXG4gIH07XG4gIHJldHVybiBzdGF0dXNUZXh0c1tzdGF0dXNdIHx8ICdVbmtub3duJztcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JTdWdnZXN0aW9uKGVycjogdW5rbm93biwgY29kZTogRXJyb3JDb2RlKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChjb2RlID09PSBFUlJPUl9DT0RFUy5BVVRIRU5USUNBVElPTikge1xuICAgIHJldHVybiAnQ2hlY2sgdGhhdCBQTEFURk9STV9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgY29ycmVjdGx5JztcbiAgfVxuICBpZiAoY29kZSA9PT0gRVJST1JfQ09ERVMuTkVUV09SSykge1xuICAgIHJldHVybiAnQ2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uIGFuZCBBUEkgZW5kcG9pbnQgVVJMJztcbiAgfVxuICBpZiAoY29kZSA9PT0gRVJST1JfQ09ERVMuQ09ORklHVVJBVElPTikge1xuICAgIHJldHVybiAnUnVuIFwiY2xpIHZlcnNpb24gLS1jaGVjay1jb25maWdcIiB0byB2ZXJpZnkgY29uZmlndXJhdGlvbic7XG4gIH1cbiAgaWYgKGNvZGUgPT09IEVSUk9SX0NPREVTLk5PVF9GT1VORCkge1xuICAgIHJldHVybiAnVmVyaWZ5IHRoZSByZXNvdXJjZSBJRCBleGlzdHMgYW5kIHlvdSBoYXZlIGFjY2VzcyB0byBpdCc7XG4gIH1cbiAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKCdjZGsnKSkge1xuICAgIHJldHVybiAnQ2hlY2sgdGhlIENESyBvdXRwdXQgYWJvdmUgZm9yIENsb3VkRm9ybWF0aW9uIGVycm9ycy4gUnVuIHdpdGggLS1kZWJ1ZyBmb3IgZnVsbCBkZXRhaWxzJztcbiAgfVxuICBpZiAoZXJyIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yICYmIGVyci5maWVsZCkge1xuICAgIHJldHVybiBgQ2hlY2sgdGhlIHZhbHVlIHByb3ZpZGVkIGZvciBcIiR7ZXJyLmZpZWxkfVwiYDtcbiAgfVxuICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnIucmVzcG9uc2U/LnN0YXR1cztcbiAgICBpZiAoc3RhdHVzID09PSA0MDEgfHwgc3RhdHVzID09PSA0MDMpIHJldHVybiAnQ2hlY2sgeW91ciBhdXRoZW50aWNhdGlvbiB0b2tlbiBhbmQgcGVybWlzc2lvbnMnO1xuICAgIC8vIEEgcXVvdGEgcmVmdXNhbCB3b24ndCBjbGVhciBieSB3YWl0aW5nIGEgbW9tZW50OiB0aGUgbWVzc2FnZSBhbHJlYWR5IG5hbWVzXG4gICAgLy8gdGhlIHJlc2V0IGRhdGUgYW5kIHRoZSB1cGdyYWRlIGxpbmsgKGFwaS1jbGllbnQpLiBPbmx5IGEgcGxhaW4gNDI5IGlzIGFcbiAgICAvLyByYXRlIGxpbWl0LlxuICAgIGlmIChzdGF0dXMgPT09IDQyOSAmJiBpc1F1b3RhRXhjZWVkZWRCb2R5KGVyci5yZXNwb25zZT8uZGF0YSkpIHtcbiAgICAgIHJldHVybiAnUmV0cnlpbmcgd2lsbCBub3QgaGVscCB1bnRpbCB0aGUgcXVvdGEgcmVzZXRzIOKAlCByYWlzZSB0aGUgbGltaXQgYXQgdGhlIHVwZ3JhZGUgbGluayBhYm92ZSc7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09IDQyOSkgcmV0dXJuICdSYXRlIGxpbWl0IGV4Y2VlZGVkIC0gd2FpdCBhIG1vbWVudCBiZWZvcmUgcmV0cnlpbmcnO1xuICAgIGlmIChzdGF0dXMgJiYgc3RhdHVzID49IDUwMCkgcmV0dXJuICdTZXJ2ZXIgZXJyb3IgLSB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBzdXBwb3J0JztcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVFcnJvckRhdGEoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHJldHVybiBkYXRhO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgIT09IG51bGwpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWQgPSB7IC4uLmRhdGEgfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBbJ3Rva2VuJywgJ3Bhc3N3b3JkJywgJ3NlY3JldCcsICdhcGlLZXknLCAnYXV0aG9yaXphdGlvbicsICdqd3QnLCAnY3JlZGVudGlhbCcsICdiZWFyZXInXS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZCBpbiBzYW5pdGl6ZWQpIHNhbml0aXplZFtmaWVsZF0gPSAnW1JFREFDVEVEXSc7XG4gICAgfSk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNhbml0aXplZCwgbnVsbCwgMik7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyhkYXRhKTtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwodXJsKTtcbiAgICBbJ3Rva2VuJywgJ2tleScsICdzZWNyZXQnLCAncGFzc3dvcmQnLCAnYXBpS2V5J10uZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICBpZiAodXJsT2JqLnNlYXJjaFBhcmFtcy5oYXMocGFyYW0pKSB1cmxPYmouc2VhcmNoUGFyYW1zLnNldChwYXJhbSwgJ1tSRURBQ1RFRF0nKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdXJsT2JqLnRvU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FuaXRpemVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAndW5kZWZpbmVkJztcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoID4gMjAgJiYgL15bQS1aYS16MC05Ky89Xy1dKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4gYCR7dmFsdWUuc3Vic3RyaW5nKDAsIDgpfS4uLltSRURBQ1RFRF1gO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUubGVuZ3RoID4gMTAwID8gdmFsdWUuc3Vic3RyaW5nKDAsIDk3KSArICcuLi4nIDogdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiBzYW5pdGl6ZUVycm9yRGF0YSh2YWx1ZSk7XG4gIGNvbnN0IHN0ciA9IFN0cmluZyh2YWx1ZSk7XG4gIHJldHVybiBzdHIubGVuZ3RoID4gMTAwID8gc3RyLnN1YnN0cmluZygwLCA5NykgKyAnLi4uJyA6IHN0cjtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVTdGFja1RyYWNlKHN0YWNrOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RhY2suc3BsaXQoJ1xcbicpLnNsaWNlKDAsIDEwKS5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoL1xcLy4qP1xcLy9nLCAnLi4uLycpKS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gaXNBeGlvc0Vycm9yKGVycjogdW5rbm93bik6IGVyciBpcyBBeGlvc0Vycm9yTGlrZSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGVyciA9PT0gJ29iamVjdCcgJiZcbiAgICBlcnIgIT09IG51bGwgJiZcbiAgICAnaXNBeGlvc0Vycm9yJyBpbiBlcnIgJiZcbiAgICAoZXJyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5pc0F4aW9zRXJyb3IgPT09IHRydWVcbiAgKTtcbn1cbiJdfQ==
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vycm9yLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUNMLFdBQVcsR0FJWixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTlDLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFHdkI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixHQUFZLEVBQ1osSUFBSSxHQUFjLFdBQVcsQ0FBQyxPQUFPLEVBQ3JDLE9BQU8sR0FBd0IsRUFBRTtJQUVqQyxNQUFNLEVBQ0osS0FBSyxHQUFHLEtBQUssRUFDYixJQUFJLEdBQUcsSUFBSSxFQUNYLFlBQVksR0FBRyxJQUFJLEVBQ25CLE9BQU8sRUFDUCxhQUFhLEdBQUcsbUJBQW1CLEVBQUUsR0FDdEMsR0FBRyxPQUFPLENBQUM7SUFFWiw4RUFBOEU7SUFDOUUsZ0ZBQWdGO0lBQ2hGLDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsOEJBQThCO0lBQzlCLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFaEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFH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QUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsR0FBWTtJQUNoQyxPQUFPLENBQ0wsT0FBTyxHQUFHLEtBQUssUUFBUTtRQUN2QixHQUFHLEtBQUssSUFBSTtRQUNaLGNBQWMsSUFBSSxHQUFHO1FBQ3BCLEdBQStCLENBQUMsWUFBWSxLQUFLLElBQUksQ0FDdkQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgaXNRdW90YUV4Y2VlZGVkQm9keSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUV4ZWN1dGlvbklkIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHtcbiAgRVJST1JfQ09ERVMsXG4gIHR5cGUgRXJyb3JDb2RlLFxuICB0eXBlIEVycm9ySGFuZGxlck9wdGlvbnMsXG4gIHR5cGUgQXhpb3NFcnJvckxpa2UsXG59IGZyb20gJy4uL3R5cGVzL2luZGV4LmpzJztcblxuY29uc3QgeyBib2xkLCBkaW0sIHJlZCwgeWVsbG93LCBjeWFuIH0gPSBwaWNvO1xuXG4vLyBSZS1leHBvcnQgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgeyBFUlJPUl9DT0RFUyB9O1xuZXhwb3J0IHR5cGUgeyBFcnJvckNvZGUgfTtcblxuLyoqXG4gKiBGb3JtYXQgYW5kIGhhbmRsZSBlcnJvcnMgd2l0aCBjb2xvcmVkIG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRXJyb3IoXG4gIGVycjogdW5rbm93bixcbiAgY29kZTogRXJyb3JDb2RlID0gRVJST1JfQ09ERVMuR0VORVJBTCxcbiAgb3B0aW9uczogRXJyb3JIYW5kbGVyT3B0aW9ucyA9IHt9LFxuKTogbmV2ZXIge1xuICBjb25zdCB7XG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBleGl0ID0gdHJ1ZSxcbiAgICBsb2dUb0NvbnNvbGUgPSB0cnVlLFxuICAgIGNvbnRleHQsXG4gICAgY29ycmVsYXRpb25JZCA9IGdlbmVyYXRlRXhlY3V0aW9uSWQoKSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgLy8gRGVyaXZlIHRoZSBjYW5vbmljYWwgZXhpdCBjb2RlIGZyb20gdGhlIEFDVFVBTCBlcnJvciAoc2VlIHJlc29sdmVFeGl0Q29kZSksXG4gIC8vIGZhbGxpbmcgYmFjayB0byB0aGUgY2FsbGVyJ3MgYGNvZGVgIGZvciBhbnl0aGluZyB1bmNsYXNzaWZpYWJsZS4gVGhpcyBpcyB3aGF0XG4gIC8vIG1ha2VzIGV2ZXJ5IGNvbW1hbmQgZW1pdCB0aGUgU0FNRSBleGl0IGNvZGUgZm9yIHRoZSBzYW1lIGNsYXNzIG9mIGZhaWx1cmUsXG4gIC8vIHJhdGhlciB0aGFuIGEgYmxhbmtldCBBUElfUkVRVUVTVC9HRU5FUkFMLiBVc2VkIGZvciBkaXNwbGF5LCB0aGUgc3VnZ2VzdGlvbixcbiAgLy8gYW5kIHRoZSBwcm9jZXNzIGV4aXQgYmVsb3cuXG4gIGNvbnN0IHJlc29sdmVkQ29kZSA9IHJlc29sdmVFeGl0Q29kZShlcnIsIGNvZGUpO1xuXG4gIGlmIChsb2dUb0NvbnNvbGUpIHtcbiAgICBjb25zdCBkaXZpZGVyID0gJ+KUgCcucmVwZWF0KHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApO1xuICAgIGNvbnN0IGVycm9ySWQgPSBgRVJSLSR7Y29ycmVsYXRpb25JZH1gO1xuXG4gICAgY29uc29sZS5lcnJvcignXFxuJyArIHJlZChib2xkKCfinJcgRVJST1InKSkgKyBkaW0oYCBbJHtlcnJvcklkfV1gKSArICdcXG4nKTtcbiAgICBjb25zb2xlLmVycm9yKGRpbShkaXZpZGVyKSk7XG5cbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKGJvbGQoJ01lc3NhZ2U6JykpLCBlcnIubWVzc2FnZSk7XG5cbiAgICAgIGlmIChlcnIubmFtZSAhPT0gJ0Vycm9yJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnVHlwZTonKSwgZXJyLm5hbWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG93IFZhbGlkYXRpb24gZXJyb3IgZGV0YWlsc1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICBpZiAoZXJyLmZpZWxkKSBjb25zb2xlLmVycm9yKHJlZCgnRmllbGQ6JyksIGVyci5maWVsZCk7XG4gICAgICAgIGlmIChlcnIudmFsdWUgIT09IHVuZGVmaW5lZCkgY29uc29sZS5lcnJvcihyZWQoJ1ZhbHVlOicpLCBzYW5pdGl6ZVZhbHVlKGVyci52YWx1ZSkpO1xuICAgICAgICBpZiAoZXJyLnJ1bGUpIGNvbnNvbGUuZXJyb3IocmVkKCdSdWxlOicpLCBlcnIucnVsZSk7XG4gICAgICAgIGlmIChlcnIuZXhwZWN0ZWQpIGNvbnNvbGUuZXJyb3IocmVkKCdFeHBlY3RlZDonKSwgZXJyLmV4cGVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBOZXR3b3JrIGVycm9yIGRldGFpbHNcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOZXR3b3JrRXJyb3IpIHtcbiAgICAgICAgaWYgKGVyci51cmwpIGNvbnNvbGUuZXJyb3IocmVkKCdVUkw6JyksIHNhbml0aXplVXJsKGVyci51cmwpKTtcbiAgICAgICAgaWYgKGVyci50aW1lb3V0KSBjb25zb2xlLmVycm9yKHJlZCgnVGltZW91dDonKSwgYCR7ZXJyLnRpbWVvdXR9bXNgKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1JlcXVlc3QgTWFkZTonKSwgZXJyLnJlcXVlc3RNYWRlID8gJ1llcycgOiAnTm8nKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1Jlc3BvbnNlIFJlY2VpdmVkOicpLCBlcnIucmVzcG9uc2VSZWNlaXZlZCA/ICdZZXMnIDogJ05vJyk7XG4gICAgICAgIGlmIChlcnIuY2F1c2UpIGNvbnNvbGUuZXJyb3IocmVkKCdDYXVzZWQgYnk6JyksIGVyci5jYXVzZS5tZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBBeGlvcyBlcnJvciBkZXRhaWxzXG4gICAgICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZXJyLnJlc3BvbnNlPy5zdGF0dXM7XG4gICAgICAgIGNvbnN0IHVybCA9IGVyci5jb25maWc/LnVybDtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdTdGF0dXM6JyksIHN0YXR1cyk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ1N0YXR1cyBUZXh0OicpLCBnZXRIdHRwU3RhdHVzVGV4dChzdGF0dXMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXJsKSBjb25zb2xlLmVycm9yKHJlZCgnVVJMOicpLCBzYW5pdGl6ZVVybCh1cmwpKTtcbiAgICAgICAgaWYgKGVyci5yZXNwb25zZT8uZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdSZXNwb25zZTonKSk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc2FuaXRpemVFcnJvckRhdGEoZXJyLnJlc3BvbnNlLmRhdGEpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2hvdyBDREsvZXhlY1N5bmMgZXJyb3IgZGV0YWlscyAoc3RkZXJyIGNhcHR1cmVkIGZyb20gY2hpbGQgcHJvY2VzcylcbiAgICAgIGlmICgnc3RkZXJyJyBpbiBlcnIgJiYgZXJyLnN0ZGVycikge1xuICAgICAgICBjb25zdCBzdGRlcnIgPSAoZXJyLnN0ZGVyciBhcyBCdWZmZXIgfCBzdHJpbmcpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICBpZiAoc3RkZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0NESyBPdXRwdXQ6JykpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGltKHN0ZGVycikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZXJyb3IocmVkKCdDb2RlOicpLCBnZXRFcnJvckNvZGVOYW1lKHJlc29sdmVkQ29kZSkpO1xuICAgICAgY29uc29sZS5lcnJvcihkaW0oJ0Vycm9yIElEOicpLCBkaW0oZXJyb3JJZCkpO1xuXG4gICAgICBpZiAoY29udGV4dCAmJiBPYmplY3Qua2V5cyhjb250ZXh0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICAgICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ29udGV4dDonKSk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbnRleHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgJHtjeWFuKGtleSl9OmAsIGRpbShzYW5pdGl6ZVZhbHVlKHZhbHVlKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlYnVnICYmIGVyci5zdGFjaykge1xuICAgICAgICBjb25zb2xlLmVycm9yKCcnKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihkaW0oJ1N0YWNrIHRyYWNlOicpKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihkaW0oc2FuaXRpemVTdGFja1RyYWNlKGVyci5zdGFjaykpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihyZWQoJ0Vycm9yOicpLCBTdHJpbmcoZXJyKSk7XG4gICAgICBjb25zb2xlLmVycm9yKHJlZCgnQ29kZTonKSwgZ2V0RXJyb3JDb2RlTmFtZShyZXNvbHZlZENvZGUpKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZGltKCdFcnJvciBJRDonKSwgZGltKGVycm9ySWQpKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmVycm9yKGRpbShkaXZpZGVyKSk7XG5cbiAgICBpZiAoIWRlYnVnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHllbGxvdygn8J+SoSBUaXA6JyksIGRpbSgnUnVuIHdpdGggLS1kZWJ1ZyBmbGFnIHRvIHNlZSBmdWxsIHN0YWNrIHRyYWNlJykpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSBnZXRFcnJvclN1Z2dlc3Rpb24oZXJyLCByZXNvbHZlZENvZGUpO1xuICAgIGlmIChzdWdnZXN0aW9uKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHllbGxvdygn8J+SoSBTdWdnZXN0aW9uOicpLCBkaW0oc3VnZ2VzdGlvbikpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoJycpO1xuICB9XG5cbiAgaWYgKGV4aXQpIHtcbiAgICBwcm9jZXNzLmV4aXRDb2RlID0gcmVzb2x2ZWRDb2RlO1xuICAgIHByb2Nlc3MuZXhpdChyZXNvbHZlZENvZGUpO1xuICB9XG5cbiAgdGhyb3cgZXJyO1xufVxuXG4vLyAtLS0gRXJyb3IgY2xhc3NlcyAob25seSB0aG9zZSBhY3R1YWxseSB1c2VkKSAtLS1cblxuLyoqXG4gKiBWYWxpZGF0aW9uIGVycm9yIGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgZmllbGQ/OiBzdHJpbmcsXG4gICAgcHVibGljIHZhbHVlPzogdW5rbm93bixcbiAgICBwdWJsaWMgcnVsZT86IHN0cmluZyxcbiAgICBwdWJsaWMgZXhwZWN0ZWQ/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdWYWxpZGF0aW9uRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbi8qKlxuICogTmV0d29yayBlcnJvciBjbGFzc1xuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHVybD86IHN0cmluZyxcbiAgICBwdWJsaWMgY2F1c2U/OiBFcnJvcixcbiAgICBwdWJsaWMgdGltZW91dD86IG51bWJlcixcbiAgICBwdWJsaWMgcmVxdWVzdE1hZGU6IGJvb2xlYW4gPSB0cnVlLFxuICAgIHB1YmxpYyByZXNwb25zZVJlY2VpdmVkOiBib29sZWFuID0gZmFsc2UsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdOZXR3b3JrRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbi8vIC0tLSBQcml2YXRlIGhlbHBlcnMgLS0tXG5cbi8qKlxuICogTWFwIHRoZSBBQ1RVQUwgZXJyb3IgdG8gYSBjYW5vbmljYWwgZXhpdCBjb2RlIHNvIGV2ZXJ5IGNvbW1hbmQgZXhpdHMgd2l0aCB0aGVcbiAqIFNBTUUgY29kZSBmb3IgdGhlIHNhbWUgY2xhc3Mgb2YgZmFpbHVyZS4gVGhlIGNhbGxlci1zdXBwbGllZCBgZmFsbGJhY2tgIChlLmcuXG4gKiBBUElfUkVRVUVTVCkgaXMgdXNlZCBvbmx5IGZvciBlcnJvcnMgdGhpcyBjYW4ndCBjbGFzc2lmeS4gQ29kZXMgKHNyYy90eXBlcy9lcnJvci50cyk6XG4gKlxuICogICAxIEdFTkVSQUwgwrcgMiBWQUxJREFUSU9OIMK3IDMgQVBJX1JFUVVFU1QgwrcgNCBBVVRIRU5USUNBVElPTiDCtyA1IEFVVEhPUklaQVRJT05cbiAqICAgNiBOT1RfRk9VTkQgwrcgNyBORVRXT1JLIMK3IDggQ09ORklHVVJBVElPTiDCtyA5IEZJTEVfU1lTVEVNIMK3IDEwIFRJTUVPVVRcbiAqXG4gKiBQcmVjZWRlbmNlOiB0eXBlZCBDTEkgZXJyb3JzIOKGkiBIVFRQIHN0YXR1cyDihpIgTm9kZSBzeXN0ZW0gZXJyb3IgYGNvZGVgIOKGkiBmYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUV4aXRDb2RlKGVycjogdW5rbm93biwgZmFsbGJhY2s6IEVycm9yQ29kZSk6IEVycm9yQ29kZSB7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IpIHJldHVybiBFUlJPUl9DT0RFUy5WQUxJREFUSU9OO1xuICBpZiAoZXJyIGluc3RhbmNlb2YgTmV0d29ya0Vycm9yKSByZXR1cm4gZXJyLnRpbWVvdXQgPyBFUlJPUl9DT0RFUy5USU1FT1VUIDogRVJST1JfQ09ERVMuTkVUV09SSztcblxuICBpZiAoaXNBeGlvc0Vycm9yKGVycikpIHtcbiAgICBjb25zdCBzdGF0dXMgPSBlcnIucmVzcG9uc2U/LnN0YXR1cztcbiAgICBpZiAoc3RhdHVzID09PSA0MDAgfHwgc3RhdHVzID09PSA0MjIpIHJldHVybiBFUlJPUl9DT0RFUy5WQUxJREFUSU9OO1xuICAgIGlmIChzdGF0dXMgPT09IDQwMSkgcmV0dXJuIEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OO1xuICAgIGlmIChzdGF0dXMgPT09IDQwMykgcmV0dXJuIEVSUk9SX0NPREVTLkFVVEhPUklaQVRJT047XG4gICAgaWYgKHN0YXR1cyA9PT0gNDA0KSByZXR1cm4gRVJST1JfQ09ERVMuTk9UX0ZPVU5EO1xuICAgIGlmIChzdGF0dXMgPT09IDQwOCB8fCBzdGF0dXMgPT09IDUwNCkgcmV0dXJuIEVSUk9SX0NPREVTLlRJTUVPVVQ7XG4gICAgLy8gQ0xJRU5UX1VQR1JBREVfUkVRVUlSRUQ6IHRoaXMgQ0xJIGlzIGJlbG93IHRoZSBwbGF0Zm9ybSdzIG1pbmltdW0g4oCUIGFcbiAgICAvLyBsb2NhbC1pbnN0YWxsIHByb2JsZW0gKGZpeDogLS11cGdyYWRlKSwgc28gc2NyaXB0cyBjYW4gdGVsbCBpdCBhcGFydC5cbiAgICBpZiAoc3RhdHVzID09PSA0MjYpIHJldHVybiBFUlJPUl9DT0RFUy5DT05GSUdVUkFUSU9OO1xuICAgIGlmIChzdGF0dXMgJiYgc3RhdHVzID49IDUwMCkgcmV0dXJuIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNUO1xuICAgIC8vIEEgcmVxdWVzdCB0aGF0IGdvdCBubyBIVFRQIHJlc3BvbnNlIG5ldmVyIHJlYWNoZWQgdGhlIHNlcnZlciAoRE5TIC8gcmVmdXNlZFxuICAgIC8vIC8gcmVzZXQpIOKAlCB0aGF0J3MgYSBuZXR3b3JrIGZhaWx1cmUsIG5vdCBhbiBBUEktcmVzcG9uc2UgZXJyb3IuXG4gICAgaWYgKCFlcnIucmVzcG9uc2UpIHJldHVybiBFUlJPUl9DT0RFUy5ORVRXT1JLO1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuXG4gIC8vIE5vZGUgc3lzdGVtIGVycm9ycyAoZnMgKyBzb2NrZXRzKSBjYXJyeSBhIHN0cmluZyBgY29kZWAuXG4gIGNvbnN0IHN5c0NvZGUgPSAoZXJyIGFzIHsgY29kZT86IHVua25vd24gfSB8IG51bGwpPy5jb2RlO1xuICBpZiAodHlwZW9mIHN5c0NvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKFsnRU5PRU5UJywgJ0VBQ0NFUycsICdFSVNESVInLCAnRU5PVERJUicsICdFRVhJU1QnLCAnRVBFUk0nLCAnRU5PU1BDJywgJ0VNRklMRSddLmluY2x1ZGVzKHN5c0NvZGUpKSB7XG4gICAgICByZXR1cm4gRVJST1JfQ09ERVMuRklMRV9TWVNURU07XG4gICAgfVxuICAgIGlmIChzeXNDb2RlID09PSAnRVRJTUVET1VUJykgcmV0dXJuIEVSUk9SX0NPREVTLlRJTUVPVVQ7XG4gICAgaWYgKFsnRUNPTk5SRUZVU0VEJywgJ0VOT1RGT1VORCcsICdFQ09OTlJFU0VUJywgJ0VIT1NUVU5SRUFDSCcsICdFTkVUVU5SRUFDSCcsICdFQUlfQUdBSU4nLCAnRVBJUEUnXS5pbmNsdWRlcyhzeXNDb2RlKSkge1xuICAgICAgcmV0dXJuIEVSUk9SX0NPREVTLk5FVFdPUks7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvckNvZGVOYW1lKGNvZGU6IEVycm9yQ29kZSk6IHN0cmluZyB7XG4gIGNvbnN0IGVudHJ5ID0gT2JqZWN0LmVudHJpZXMoRVJST1JfQ09ERVMpLmZpbmQoKFtfLCB2YWx1ZV0pID0+IHZhbHVlID09PSBjb2RlKTtcbiAgcmV0dXJuIGVudHJ5ID8gYCR7ZW50cnlbMF19ICgke2NvZGV9KWAgOiBTdHJpbmcoY29kZSk7XG59XG5cbmZ1bmN0aW9uIGdldEh0dHBTdGF0dXNUZXh0KHN0YXR1czogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzVGV4dHM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgNDAwOiAnQmFkIFJlcXVlc3QnLFxuICAgIDQwMTogJ1VuYXV0aG9yaXplZCcsXG4gICAgNDAzOiAnRm9yYmlkZGVuJyxcbiAgICA0MDQ6ICdOb3QgRm91bmQnLFxuICAgIDQwODogJ1JlcXVlc3QgVGltZW91dCcsXG4gICAgNDA5OiAnQ29uZmxpY3QnLFxuICAgIDQyMjogJ1VucHJvY2Vzc2FibGUgRW50aXR5JyxcbiAgICA0Mjk6ICdUb28gTWFueSBSZXF1ZXN0cycsXG4gICAgNTAwOiAnSW50ZXJuYWwgU2VydmVyIEVycm9yJyxcbiAgICA1MDI6ICdCYWQgR2F0ZXdheScsXG4gICAgNTAzOiAnU2VydmljZSBVbmF2YWlsYWJsZScsXG4gICAgNTA0OiAnR2F0ZXdheSBUaW1lb3V0JyxcbiAgfTtcbiAgcmV0dXJuIHN0YXR1c1RleHRzW3N0YXR1c10gfHwgJ1Vua25vd24nO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvclN1Z2dlc3Rpb24oZXJyOiB1bmtub3duLCBjb2RlOiBFcnJvckNvZGUpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKGNvZGUgPT09IEVSUk9SX0NPREVTLkFVVEhFTlRJQ0FUSU9OKSB7XG4gICAgcmV0dXJuICdDaGVjayB0aGF0IFBMQVRGT1JNX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCBjb3JyZWN0bHknO1xuICB9XG4gIGlmIChjb2RlID09PSBFUlJPUl9DT0RFUy5ORVRXT1JLKSB7XG4gICAgcmV0dXJuICdDaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24gYW5kIEFQSSBlbmRwb2ludCBVUkwnO1xuICB9XG4gIGlmIChjb2RlID09PSBFUlJPUl9DT0RFUy5DT05GSUdVUkFUSU9OKSB7XG4gICAgcmV0dXJuICdSdW4gXCJjbGkgdmVyc2lvbiAtLWNoZWNrLWNvbmZpZ1wiIHRvIHZlcmlmeSBjb25maWd1cmF0aW9uJztcbiAgfVxuICBpZiAoY29kZSA9PT0gRVJST1JfQ09ERVMuTk9UX0ZPVU5EKSB7XG4gICAgcmV0dXJuICdWZXJpZnkgdGhlIHJlc291cmNlIElEIGV4aXN0cyBhbmQgeW91IGhhdmUgYWNjZXNzIHRvIGl0JztcbiAgfVxuICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyLm1lc3NhZ2UuaW5jbHVkZXMoJ2NkaycpKSB7XG4gICAgcmV0dXJuICdDaGVjayB0aGUgQ0RLIG91dHB1dCBhYm92ZSBmb3IgQ2xvdWRGb3JtYXRpb24gZXJyb3JzLiBSdW4gd2l0aCAtLWRlYnVnIGZvciBmdWxsIGRldGFpbHMnO1xuICB9XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IgJiYgZXJyLmZpZWxkKSB7XG4gICAgcmV0dXJuIGBDaGVjayB0aGUgdmFsdWUgcHJvdmlkZWQgZm9yIFwiJHtlcnIuZmllbGR9XCJgO1xuICB9XG4gIGlmIChpc0F4aW9zRXJyb3IoZXJyKSkge1xuICAgIGNvbnN0IHN0YXR1cyA9IGVyci5yZXNwb25zZT8uc3RhdHVzO1xuICAgIGlmIChzdGF0dXMgPT09IDQwMSB8fCBzdGF0dXMgPT09IDQwMykgcmV0dXJuICdDaGVjayB5b3VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIGFuZCBwZXJtaXNzaW9ucyc7XG4gICAgLy8gQSBxdW90YSByZWZ1c2FsIHdvbid0IGNsZWFyIGJ5IHdhaXRpbmcgYSBtb21lbnQ6IHRoZSBtZXNzYWdlIGFscmVhZHkgbmFtZXNcbiAgICAvLyB0aGUgcmVzZXQgZGF0ZSBhbmQgdGhlIHVwZ3JhZGUgbGluayAoYXBpLWNsaWVudCkuIE9ubHkgYSBwbGFpbiA0MjkgaXMgYVxuICAgIC8vIHJhdGUgbGltaXQuXG4gICAgaWYgKHN0YXR1cyA9PT0gNDI5ICYmIGlzUXVvdGFFeGNlZWRlZEJvZHkoZXJyLnJlc3BvbnNlPy5kYXRhKSkge1xuICAgICAgcmV0dXJuICdSZXRyeWluZyB3aWxsIG5vdCBoZWxwIHVudGlsIHRoZSBxdW90YSByZXNldHMg4oCUIHJhaXNlIHRoZSBsaW1pdCBhdCB0aGUgdXBncmFkZSBsaW5rIGFib3ZlJztcbiAgICB9XG4gICAgaWYgKHN0YXR1cyA9PT0gNDI5KSByZXR1cm4gJ1JhdGUgbGltaXQgZXhjZWVkZWQgLSB3YWl0IGEgbW9tZW50IGJlZm9yZSByZXRyeWluZyc7XG4gICAgaWYgKHN0YXR1cyAmJiBzdGF0dXMgPj0gNTAwKSByZXR1cm4gJ1NlcnZlciBlcnJvciAtIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IHN1cHBvcnQnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUVycm9yRGF0YShkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgcmV0dXJuIGRhdGE7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHsgLi4uZGF0YSB9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIFsndG9rZW4nLCAncGFzc3dvcmQnLCAnc2VjcmV0JywgJ2FwaUtleScsICdhdXRob3JpemF0aW9uJywgJ2p3dCcsICdjcmVkZW50aWFsJywgJ2JlYXJlciddLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgaWYgKGZpZWxkIGluIHNhbml0aXplZCkgc2FuaXRpemVkW2ZpZWxkXSA9ICdbUkVEQUNURURdJztcbiAgICB9KTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2FuaXRpemVkLCBudWxsLCAyKTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKGRhdGEpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuICAgIFsndG9rZW4nLCAna2V5JywgJ3NlY3JldCcsICdwYXNzd29yZCcsICdhcGlLZXknXS5mb3JFYWNoKHBhcmFtID0+IHtcbiAgICAgIGlmICh1cmxPYmouc2VhcmNoUGFyYW1zLmhhcyhwYXJhbSkpIHVybE9iai5zZWFyY2hQYXJhbXMuc2V0KHBhcmFtLCAnW1JFREFDVEVEXScpO1xuICAgIH0pO1xuICAgIHJldHVybiB1cmxPYmoudG9TdHJpbmcoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJ251bGwnO1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICd1bmRlZmluZWQnO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyMCAmJiAvXltBLVphLXowLTkrLz1fLV0rJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgOCl9Li4uW1JFREFDVEVEXWA7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPiAxMDAgPyB2YWx1ZS5zdWJzdHJpbmcoMCwgOTcpICsgJy4uLicgOiB2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIHNhbml0aXplRXJyb3JEYXRhKHZhbHVlKTtcbiAgY29uc3Qgc3RyID0gU3RyaW5nKHZhbHVlKTtcbiAgcmV0dXJuIHN0ci5sZW5ndGggPiAxMDAgPyBzdHIuc3Vic3RyaW5nKDAsIDk3KSArICcuLi4nIDogc3RyO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZVN0YWNrVHJhY2Uoc3RhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdGFjay5zcGxpdCgnXFxuJykuc2xpY2UoMCwgMTApLm1hcChsaW5lID0+IGxpbmUucmVwbGFjZSgvXFwvLio/XFwvL2csICcuLi4vJykpLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBpc0F4aW9zRXJyb3IoZXJyOiB1bmtub3duKTogZXJyIGlzIEF4aW9zRXJyb3JMaWtlIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgZXJyID09PSAnb2JqZWN0JyAmJlxuICAgIGVyciAhPT0gbnVsbCAmJlxuICAgICdpc0F4aW9zRXJyb3InIGluIGVyciAmJlxuICAgIChlcnIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZVxuICApO1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-context.d.ts","sources":["../../src/utils/request-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"request-context.d.ts","sources":["../../src/utils/request-context.ts"],"names":[],"mappings":"AAkCA,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,gGAAgG;AAChG,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE1D;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,0FAA0F;AAC1F,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,2FAA2F;AAC3F,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAatG"}
|