@workflow/next 5.0.0-beta.42 → 5.0.0-beta.44
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/builder-eager.d.ts.map +1 -1
- package/dist/builder-eager.js +68 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +82 -8
- package/dist/watch-ignore.js +3 -3
- package/dist/watch-rebuild.d.ts +47 -0
- package/dist/watch-rebuild.d.ts.map +1 -1
- package/dist/watch-rebuild.js +80 -3
- package/docs/api-reference/with-workflow.mdx +16 -16
- package/docs/next.mdx +11 -11
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -44,13 +44,36 @@ const builders_1 = require("@workflow/builders");
|
|
|
44
44
|
const semver_1 = __importDefault(require("semver"));
|
|
45
45
|
const builder_js_1 = require("./builder.js");
|
|
46
46
|
const VERCEL_WORLD_PACKAGE = '@workflow/world-vercel';
|
|
47
|
-
const
|
|
48
|
-
|
|
47
|
+
const QUEUE_PACKAGE = '@vercel/queue';
|
|
48
|
+
// Bundling `@vercel/queue` requires the version whose dynamic `import()` carries
|
|
49
|
+
// `turbopackIgnore`/`webpackIgnore` annotations. Without them Turbopack cannot
|
|
50
|
+
// resolve that import ("server relative imports are not implemented yet") and
|
|
51
|
+
// fails the build, so an older copy has to stay external.
|
|
52
|
+
const QUEUE_MIN_BUNDLABLE_VERSION = '0.5.0';
|
|
53
|
+
// `@vercel/oidc` reaches `@vercel/cli-config`, and `@vercel/cli-auth` reaches
|
|
54
|
+
// both that and `@napi-rs/keyring`. Those are CLI-shaped dependencies that never
|
|
55
|
+
// run on a server: `xdg-app-paths` builds its config directory at module scope
|
|
56
|
+
// and throws `The "path" argument must be of type string` once bundled, which
|
|
57
|
+
// fails page-data collection. Keeping the three external stops any bundler from
|
|
58
|
+
// walking into that tree.
|
|
59
|
+
const VERCEL_WORLD_SERVER_EXTERNAL_PACKAGES = [
|
|
49
60
|
'@vercel/oidc',
|
|
50
61
|
'@vercel/cli-auth',
|
|
51
62
|
'@napi-rs/keyring',
|
|
52
63
|
];
|
|
53
|
-
|
|
64
|
+
// `@workflow/world-vercel` and the queue client are bundled into the Next.js
|
|
65
|
+
// server build. Every module left external has to be resolved from disk on a
|
|
66
|
+
// cold start, one file at a time, and `register()` in `instrumentation.ts` sits
|
|
67
|
+
// in front of the first request. Bundling the world cuts the module count for
|
|
68
|
+
// that import from ~440 to ~250 and takes ~50ms off `register()`.
|
|
69
|
+
const VERCEL_WORLD_DEPENDENCY_PACKAGES = [
|
|
70
|
+
QUEUE_PACKAGE,
|
|
71
|
+
...VERCEL_WORLD_SERVER_EXTERNAL_PACKAGES,
|
|
72
|
+
];
|
|
73
|
+
// The workflow and step bundles are built by esbuild, which resolves the
|
|
74
|
+
// dynamic import fine but gains nothing from inlining the world: those bundles
|
|
75
|
+
// are loaded once per invocation either way.
|
|
76
|
+
const WORKFLOW_BUNDLE_EXTERNAL_PACKAGES = [
|
|
54
77
|
VERCEL_WORLD_PACKAGE,
|
|
55
78
|
...VERCEL_WORLD_DEPENDENCY_PACKAGES,
|
|
56
79
|
];
|
|
@@ -211,6 +234,56 @@ function resolveNextVersion(workingDir) {
|
|
|
211
234
|
}
|
|
212
235
|
throw new AggregateError(errors, `Could not resolve Next.js version. Ensure \`next\` is installed in your project (working directory: ${workingDir}).`);
|
|
213
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Whether the `@vercel/queue` copy in the app's dependency tree can be bundled.
|
|
239
|
+
* Fails open when no version can be read: the copy in the graph is then the one
|
|
240
|
+
* `@workflow/world-vercel` pins, which ships alongside this plugin.
|
|
241
|
+
*/
|
|
242
|
+
function isBundlableQueueVersion(workingDir) {
|
|
243
|
+
const version = readInstalledQueueVersion(workingDir);
|
|
244
|
+
if (version === undefined || !semver_1.default.valid(version)) {
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
return semver_1.default.gte(version, QUEUE_MIN_BUNDLABLE_VERSION);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* The installed `@vercel/queue` version, read from the nearest `node_modules`
|
|
251
|
+
* copy at or above the app directory.
|
|
252
|
+
*
|
|
253
|
+
* The manifest is read from disk rather than looked up with
|
|
254
|
+
* `require.resolve('@vercel/queue/package.json')`: the published package's
|
|
255
|
+
* `exports` map declares only `.`, so Node answers a manifest subpath with
|
|
256
|
+
* `ERR_PACKAGE_PATH_NOT_EXPORTED` even when the package is installed. Resolving
|
|
257
|
+
* the package entry instead is no better, because a bundler or a test runner can
|
|
258
|
+
* substitute a resolver that answers from the toolchain's module graph rather
|
|
259
|
+
* than the app's.
|
|
260
|
+
*
|
|
261
|
+
* Returns undefined for a layout that keeps the package out of a reachable
|
|
262
|
+
* `node_modules` directory, which includes any pnpm app that does not depend on
|
|
263
|
+
* the queue client directly. Those layouts cannot externalize it by name under
|
|
264
|
+
* webpack either, so the caller bundles it.
|
|
265
|
+
*/
|
|
266
|
+
function readInstalledQueueVersion(workingDir) {
|
|
267
|
+
let directory = workingDir;
|
|
268
|
+
let previous = '';
|
|
269
|
+
while (directory !== previous) {
|
|
270
|
+
const manifestPath = (0, node_path_1.join)(directory, 'node_modules', ...QUEUE_PACKAGE.split('/'), 'package.json');
|
|
271
|
+
if (fileExists(manifestPath)) {
|
|
272
|
+
try {
|
|
273
|
+
const manifest = JSON.parse((0, node_fs_1.readFileSync)(manifestPath, 'utf8'));
|
|
274
|
+
return typeof manifest.version === 'string'
|
|
275
|
+
? manifest.version
|
|
276
|
+
: undefined;
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
previous = directory;
|
|
283
|
+
directory = (0, node_path_1.dirname)(directory);
|
|
284
|
+
}
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
214
287
|
function fileExists(path) {
|
|
215
288
|
try {
|
|
216
289
|
const stats = (0, node_fs_1.statSync)(path);
|
|
@@ -324,10 +397,8 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
324
397
|
nextConfig.serverExternalPackages = [
|
|
325
398
|
...new Set([
|
|
326
399
|
...(nextConfig.serverExternalPackages || []),
|
|
327
|
-
// Keep the Vercel world and its native-prone dependencies external so
|
|
328
|
-
// local builds do not try to parse @vercel/queue's keyring dependency
|
|
329
|
-
// tree.
|
|
330
400
|
...VERCEL_WORLD_SERVER_EXTERNAL_PACKAGES,
|
|
401
|
+
...(isBundlableQueueVersion(process.cwd()) ? [] : [QUEUE_PACKAGE]),
|
|
331
402
|
]),
|
|
332
403
|
];
|
|
333
404
|
const existingCompiler = nextConfig.compiler ?? {};
|
|
@@ -420,7 +491,10 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
420
491
|
// See: https://nextjs.org/docs/app/getting-started/server-and-client-components
|
|
421
492
|
'server-only',
|
|
422
493
|
'client-only',
|
|
423
|
-
...
|
|
494
|
+
...new Set([
|
|
495
|
+
...effectiveServerExternalPackages,
|
|
496
|
+
...WORKFLOW_BUNDLE_EXTERNAL_PACKAGES,
|
|
497
|
+
]),
|
|
424
498
|
],
|
|
425
499
|
});
|
|
426
500
|
})();
|
|
@@ -493,4 +567,4 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
|
|
|
493
567
|
return nextConfig;
|
|
494
568
|
};
|
|
495
569
|
}
|
|
496
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3VkEsb0NBZ1JDO0FBeG1CRCxxQ0FBNEQ7QUFDNUQsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUN0RCxpREFJNEI7QUFFNUIsb0RBQTRCO0FBQzVCLDZDQUE4QztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDO0FBQ3RELE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsZUFBZTtJQUNmLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQ25CLENBQUM7QUFDRixNQUFNLHFDQUFxQyxHQUFHO0lBQzVDLG9CQUFvQjtJQUNwQixHQUFHLGdDQUFnQztDQUNwQyxDQUFDO0FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUM3RCxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQztBQUNyRCxNQUFNLDBCQUEwQixHQUFHLGlDQUFpQyxDQUFDO0FBQ3JFLE1BQU0sMEJBQTBCLEdBQzlCLG9FQUFvRSxDQUFDO0FBQ3ZFLE1BQU0sb0NBQW9DLEdBQ3hDLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN6RSxNQUFNLHVDQUF1QyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFDbEUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDL0QsTUFBTSxZQUFZLEdBQUcsVUFDZSxDQUFDO0FBRXJDLGtGQUFrRjtBQUNsRixTQUFTLG1CQUFtQixDQUFDLFFBQTRCO0lBQ3ZELFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQWVE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bm9kZTpmcyc7XG5pbXBvcnQgeyBjb3B5RmlsZSwgbWtkaXIsIHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7XG4gIHJlc29sdmVDb25maWd1cmVkUHJvamVjdFJvb3QsXG4gIHJlc29sdmVQcm9qZWN0Um9vdCxcbiAgV09SS0ZMT1dfT1BUSU9OQUxfV1NfTkFUSVZFX01PRFVMRVMsXG59IGZyb20gJ0B3b3JrZmxvdy9idWlsZGVycyc7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWcgfSBmcm9tICduZXh0JztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGdldE5leHRCdWlsZGVyIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcblxuY29uc3QgVkVSQ0VMX1dPUkxEX1BBQ0tBR0UgPSAnQHdvcmtmbG93L3dvcmxkLXZlcmNlbCc7XG5jb25zdCBWRVJDRUxfV09STERfREVQRU5ERU5DWV9QQUNLQUdFUyA9IFtcbiAgJ0B2ZXJjZWwvcXVldWUnLFxuICAnQHZlcmNlbC9vaWRjJyxcbiAgJ0B2ZXJjZWwvY2xpLWF1dGgnLFxuICAnQG5hcGktcnMva2V5cmluZycsXG5dO1xuY29uc3QgVkVSQ0VMX1dPUkxEX1NFUlZFUl9FWFRFUk5BTF9QQUNLQUdFUyA9IFtcbiAgVkVSQ0VMX1dPUkxEX1BBQ0tBR0UsXG4gIC4uLlZFUkNFTF9XT1JMRF9ERVBFTkRFTkNZX1BBQ0tBR0VTLFxuXTtcbmNvbnN0IHVzZVdvcmtmbG93UGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugd29ya2Zsb3dcXDE7P1xccyokL207XG5jb25zdCB1c2VTdGVwUGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugc3RlcFxcMTs/XFxzKiQvbTtcbmNvbnN0IHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuID0gL2Zyb21cXHMrKFsnXCJdKUB3b3JrZmxvd1xcL3NlcmRlXFwxLztcbmNvbnN0IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuID1cbiAgL1N5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDFcXHMqXFwpLztcbmNvbnN0IHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybiA9XG4gIC9cXFtcXHMqV09SS0ZMT1dfKD86U0VSSUFMSVpFfERFU0VSSUFMSVpFKVxccypcXF0vO1xuXG5jb25zdCBQU0VVRE9fRVhURVJOQUxfUEFDS0FHRVMgPSBuZXcgU2V0KFsnc2VydmVyLW9ubHknLCAnY2xpZW50LW9ubHknXSk7XG5jb25zdCB3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmNvbnN0IEJBU0VfUEFUSF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAd29ya2Zsb3cvY29yZS9iYXNlUGF0aCcpO1xuY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmXG4gIFJlY29yZDxzeW1ib2wsIHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbi8vIEtlZXAgdGhpcyBsb2NhbDogQHdvcmtmbG93L25leHQgaXMgQ29tbW9uSlMsIHdoaWxlIEB3b3JrZmxvdy91dGlscyBpcyBFU00tb25seS5cbmZ1bmN0aW9uIHNldFdvcmtmbG93QmFzZVBhdGgoYmFzZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBnbG9iYWxDb25maWdbQkFTRV9QQVRIX1NZTUJPTF0gPSBiYXNlUGF0aCA/PyAnJztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgaGFzVXNlV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1VzZVN0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2Uge1xuICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICBoYXNVc2VXb3JrZmxvdzogYm9vbGVhbjtcbiAgaGFzVXNlU3RlcDogYm9vbGVhbjtcbiAgaGFzU2VyZGU6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNSZXNvbHZhYmxlUGFja2FnZVNwZWNpZmllcihzcGVjaWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4nKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzcGVjaWZpZXIuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzcGVjaWZpZXIuaW5jbHVkZXMoJyonKSB8fCBzcGVjaWZpZXIuaW5jbHVkZXMoJzonKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZTogc3RyaW5nKTogV29ya2Zsb3dQYXR0ZXJuTWF0Y2gge1xuICBjb25zdCBoYXNVc2VXb3JrZmxvdyA9IHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1VzZVN0ZXAgPSB1c2VTdGVwUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlSW1wb3J0ID0gd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZVN5bWJvbCA9IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5ID1cbiAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpO1xuXG4gIHJldHVybiB7XG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZTogaGFzU2VyZGVJbXBvcnQgfHwgaGFzU2VyZGVTeW1ib2wgfHwgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRJc3N1ZUxhYmVscyhkZXRlY3RlZDogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKGRldGVjdGVkLmhhc1VzZVdvcmtmbG93KSB7XG4gICAgaXNzdWVzLnB1c2goJ1widXNlIHdvcmtmbG93XCIgZnVuY3Rpb25zJyk7XG4gIH1cbiAgaWYgKGRldGVjdGVkLmhhc1VzZVN0ZXApIHtcbiAgICBpc3N1ZXMucHVzaCgnXCJ1c2Ugc3RlcFwiIGZ1bmN0aW9ucycpO1xuICB9XG4gIGlmIChkZXRlY3RlZC5oYXNTZXJkZSkge1xuICAgIGlzc3Vlcy5wdXNoKCdzZXJpYWxpemF0aW9uIGNsYXNzZXMnKTtcbiAgfVxuICByZXR1cm4gaXNzdWVzO1xufVxuXG5mdW5jdGlvbiBoYXNXb3JrZmxvd1NlcmRlRGVwZW5kZW5jeShwYWNrYWdlSnNvbjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWlzUGxhaW5PYmplY3QocGFja2FnZUpzb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMpXG4gICAgPyBwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXNcbiAgICA6IHt9O1xuICBjb25zdCBwZWVyRGVwZW5kZW5jaWVzID0gaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzKVxuICAgID8gcGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llc1xuICAgIDoge307XG5cbiAgcmV0dXJuIChcbiAgICBPYmplY3QuaGFzT3duKGRlcGVuZGVuY2llcywgJ0B3b3JrZmxvdy9zZXJkZScpIHx8XG4gICAgT2JqZWN0Lmhhc093bihwZWVyRGVwZW5kZW5jaWVzLCAnQHdvcmtmbG93L3NlcmRlJylcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8RGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UgfCBudWxsPiB7XG4gIGlmICghaXNSZXNvbHZhYmxlUGFja2FnZVNwZWNpZmllcihwYWNrYWdlTmFtZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBoYXNVc2VXb3JrZmxvdyA9IGZhbHNlO1xuICBsZXQgaGFzVXNlU3RlcCA9IGZhbHNlO1xuICBsZXQgaGFzU2VyZGUgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShgJHtwYWNrYWdlTmFtZX0vcGFja2FnZS5qc29uYCwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCBwYWNrYWdlSnNvblNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKHBhY2thZ2VKc29uU291cmNlKSBhcyB1bmtub3duO1xuICAgIGhhc1NlcmRlID0gaGFzV29ya2Zsb3dTZXJkZURlcGVuZGVuY3kocGFja2FnZUpzb24pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBDb250aW51ZSB0byBzb3VyY2Ugc2Nhbm5pbmcuXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IHJlcXVpcmUucmVzb2x2ZShwYWNrYWdlTmFtZSwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShlbnRyeVBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBhdHRlcm5zID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgIGhhc1VzZVdvcmtmbG93ID0gcGF0dGVybnMuaGFzVXNlV29ya2Zsb3c7XG4gICAgaGFzVXNlU3RlcCA9IHBhdHRlcm5zLmhhc1VzZVN0ZXA7XG4gICAgaGFzU2VyZGUgfHw9IHBhdHRlcm5zLmhhc1NlcmRlO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBVc2Ugd2hpY2hldmVyIHNpZ25hbCB3ZSBhbHJlYWR5IGhhdmUuXG4gIH1cblxuICBpZiAoIWhhc1VzZVdvcmtmbG93ICYmICFoYXNVc2VTdGVwICYmICFoYXNTZXJkZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYWNrYWdlTmFtZSxcbiAgICBoYXNVc2VXb3JrZmxvdyxcbiAgICBoYXNVc2VTdGVwLFxuICAgIGhhc1NlcmRlLFxuICB9O1xufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoXG4gIGRldGVjdGVkUGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW11cbik6IHZvaWQge1xuICBjb25zdCBuZXdseURldGVjdGVkUGFja2FnZXMgPSBkZXRlY3RlZFBhY2thZ2VzLmZpbHRlcigoeyBwYWNrYWdlTmFtZSB9KSA9PiB7XG4gICAgcmV0dXJuICF3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKTtcbiAgfSk7XG5cbiAgaWYgKG5ld2x5RGV0ZWN0ZWRQYWNrYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IHsgcGFja2FnZU5hbWUgfSBvZiBuZXdseURldGVjdGVkUGFja2FnZXMpIHtcbiAgICB3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuYWRkKHBhY2thZ2VOYW1lKTtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VEZXNjcmlwdGlvbnMgPSBuZXdseURldGVjdGVkUGFja2FnZXNcbiAgICAubWFwKFxuICAgICAgKGRldGVjdGVkKSA9PlxuICAgICAgICBgXCIke2RldGVjdGVkLnBhY2thZ2VOYW1lfVwiICgke2dldElzc3VlTGFiZWxzKGRldGVjdGVkKS5qb2luKCcsICcpfSlgXG4gICAgKVxuICAgIC5qb2luKCcsICcpO1xuICBjb25zdCBwYWNrYWdlTmFtZXMgPSBuZXdseURldGVjdGVkUGFja2FnZXNcbiAgICAubWFwKChkZXRlY3RlZCkgPT4gYFwiJHtkZXRlY3RlZC5wYWNrYWdlTmFtZX1cImApXG4gICAgLmpvaW4oJywgJyk7XG5cbiAgY29uc29sZS53YXJuKFxuICAgIGBcXG7imqAgV29ya2Zsb3cgZm91bmQgd29ya2Zsb3cgY29kZSBpbiBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzOiAke3BhY2thZ2VEZXNjcmlwdGlvbnN9LmAgK1xuICAgICAgYFxcbiAgV29ya2Zsb3cgcmVtb3ZlZCB0aGUgYWZmZWN0ZWQgZW50cmllcyBmcm9tIHNlcnZlckV4dGVybmFsUGFja2FnZXMgZm9yIHRoaXMgYnVpbGQgYW5kIGlzIGNvbXBpbGluZyB0aGUgcGFja2FnZXMgYW55d2F5LmAgK1xuICAgICAgYFxcbiAgUmVtb3ZlICR7cGFja2FnZU5hbWVzfSBmcm9tIHNlcnZlckV4dGVybmFsUGFja2FnZXMgaW4gbmV4dC5jb25maWcgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcuXFxuYFxuICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTmV4dFZlcnNpb24od29ya2luZ0Rpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcblxuICAvLyBUcnkgcmVzb2x2aW5nIGZyb20gdGhlIGNvbnN1bWluZyBwcm9qZWN0J3Mgd29ya2luZyBkaXJlY3RvcnkgZmlyc3QuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb25vcmVwbyBzZXR1cHMgd2hlcmUgYG5leHRgIG1heSBub3QgYmUgaG9pc3RlZCB0byB0aGVcbiAgLy8gc2FtZSBsb2NhdGlvbiBhcyBgQHdvcmtmbG93L25leHRgLlxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnbmV4dC9wYWNrYWdlLmpzb24nLCB7XG4gICAgICBwYXRoczogW3dvcmtpbmdEaXJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGFja2FnZUpzb24gPSByZXF1aXJlKHBhY2thZ2VKc29uUGF0aCkgYXMge1xuICAgICAgdmVyc2lvbj86IHVua25vd247XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHJlc29sdmVkUGFja2FnZUpzb24udmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFBhY2thZ2VKc29uLnZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JzLnB1c2goZSk7XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gcmVzb2x2aW5nIHJlbGF0aXZlIHRvIHRoaXMgcGFja2FnZSdzIGxvY2F0aW9uLlxuICB0cnkge1xuICAgIGNvbnN0IHZlcnNpb24gPSAocmVxdWlyZSgnbmV4dC9wYWNrYWdlLmpzb24nKSBhcyB7IHZlcnNpb24/OiB1bmtub3duIH0pXG4gICAgICAudmVyc2lvbjtcbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvcnMucHVzaChlKTtcbiAgfVxuXG4gIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihcbiAgICBlcnJvcnMsXG4gICAgYENvdWxkIG5vdCByZXNvbHZlIE5leHQuanMgdmVyc2lvbi4gRW5zdXJlIFxcYG5leHRcXGAgaXMgaW5zdGFsbGVkIGluIHlvdXIgcHJvamVjdCAod29ya2luZyBkaXJlY3Rvcnk6ICR7d29ya2luZ0Rpcn0pLmBcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmlsZUV4aXN0cyhwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGF0cyA9IHN0YXRTeW5jKHBhdGgpO1xuICAgIHJldHVybiBzdGF0cy5pc0ZpbGUoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMoe1xuICBwcm9qZWN0RGlyLFxuICBkaXN0RGlyLFxufToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB7IG1hbmlmZXN0UGF0aDogc3RyaW5nOyBkaWFnbm9zdGljc01hbmlmZXN0UGF0aDogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICBjb25zdCBtYW5pZmVzdENhbmRpZGF0ZXMgPSBbXG4gICAgam9pbihwcm9qZWN0RGlyLCAnYXBwLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgICBqb2luKHByb2plY3REaXIsICdzcmMvYXBwLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgICBqb2luKHByb2plY3REaXIsICdwdWJsaWMvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicpLFxuICBdO1xuICBjb25zdCBtYW5pZmVzdFBhdGggPSBtYW5pZmVzdENhbmRpZGF0ZXMuZmluZChmaWxlRXhpc3RzKTtcblxuICBpZiAoIW1hbmlmZXN0UGF0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkRGlzdERpciA9IGlzQWJzb2x1dGUoZGlzdERpcilcbiAgICA/IGRpc3REaXJcbiAgICA6IGpvaW4ocHJvamVjdERpciwgZGlzdERpcik7XG4gIGNvbnN0IGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoID0gam9pbihcbiAgICByZXNvbHZlZERpc3REaXIsXG4gICAgJ2RpYWdub3N0aWNzJyxcbiAgICAnd29ya2Zsb3dzLW1hbmlmZXN0Lmpzb24nXG4gICk7XG4gIHJldHVybiB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdChtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGF0aHMgPSBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKG1ldGFkYXRhKTtcbiAgaWYgKCFwYXRocykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9ID0gcGF0aHM7XG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUoZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgY29weUZpbGUobWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCk7XG59XG5cbmZ1bmN0aW9uIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RTeW5jKG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHZvaWQge1xuICBjb25zdCBwYXRocyA9IGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMobWV0YWRhdGEpO1xuICBpZiAoIXBhdGhzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH0gPSBwYXRocztcbiAgbWtkaXJTeW5jKGRpcm5hbWUoZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29weUZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlcldvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdENvcHkobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogdm9pZCB7XG4gIGNvbnN0IG1hcmtlciA9ICdfX3dvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdENvcGllcyc7XG4gIGNvbnN0IGdsb2JhbFdpdGhNYXJrZXIgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICAgIFttYXJrZXJdPzogQXJyYXk8eyBwcm9qZWN0RGlyOiBzdHJpbmc7IGRpc3REaXI6IHN0cmluZyB9PjtcbiAgfTtcblxuICBpZiAoIWdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSkge1xuICAgIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSA9IFtdO1xuICAgIHByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29weU1ldGFkYXRhIG9mIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXSB8fCBbXSkge1xuICAgICAgICBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0U3luYyhjb3B5TWV0YWRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdLnB1c2gobWV0YWRhdGEpO1xufVxuXG4vKipcbiAqIE1hcmsgYHdzYCdzIG9wdGlvbmFsIG5hdGl2ZSBhY2NlbGVyYXRvcnMgZXh0ZXJuYWwgb24gdGhlIHdlYnBhY2sgc2VydmVyXG4gKiBidWlsZCwgd2hpY2ggb3RoZXJ3aXNlIGJ1bmRsZXMgdGhlaXIgSlMgd3JhcHBlciB3aXRob3V0IHRoZSBuYXRpdmUgYC5ub2RlYFxuICogYmluZGluZyBhbmQgdGhyb3dzIFwiYnVmZmVyVXRpbC5tYXNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIgYXQgcnVudGltZS4gU2VlXG4gKiBgV09SS0ZMT1dfT1BUSU9OQUxfV1NfTkFUSVZFX01PRFVMRVNgOyBgQHdvcmtmbG93L3JvbGx1cGAgaGFuZGxlcyB0aGVcbiAqIFJvbGx1cC9WaXRlL05pdHJvIHNpZGUuXG4gKi9cbmZ1bmN0aW9uIGV4dGVybmFsaXplV3NOYXRpdmVBY2NlbGVyYXRvcnMod2VicGFja0NvbmZpZzoge1xuICBleHRlcm5hbHM/OiB1bmtub3duO1xufSk6IHZvaWQge1xuICBjb25zdCBuYW1lcyA9IFsuLi5XT1JLRkxPV19PUFRJT05BTF9XU19OQVRJVkVfTU9EVUxFU107XG4gIGlmIChBcnJheS5pc0FycmF5KHdlYnBhY2tDb25maWcuZXh0ZXJuYWxzKSkge1xuICAgIHdlYnBhY2tDb25maWcuZXh0ZXJuYWxzLnB1c2goLi4ubmFtZXMpO1xuICB9IGVsc2UgaWYgKHdlYnBhY2tDb25maWcuZXh0ZXJuYWxzKSB7XG4gICAgd2VicGFja0NvbmZpZy5leHRlcm5hbHMgPSBbd2VicGFja0NvbmZpZy5leHRlcm5hbHMsIC4uLm5hbWVzXTtcbiAgfSBlbHNlIHtcbiAgICB3ZWJwYWNrQ29uZmlnLmV4dGVybmFscyA9IG5hbWVzO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoV29ya2Zsb3coXG4gIG5leHRDb25maWdPckZuOlxuICAgIHwgTmV4dENvbmZpZ1xuICAgIHwgKChcbiAgICAgICAgcGhhc2U6IHN0cmluZyxcbiAgICAgICAgY3R4OiB7IGRlZmF1bHRDb25maWc6IE5leHRDb25maWcgfVxuICAgICAgKSA9PiBQcm9taXNlPE5leHRDb25maWc+KSxcbiAge1xuICAgIHdvcmtmbG93cyxcbiAgfToge1xuICAgIHdvcmtmbG93cz86IHtcbiAgICAgIGxvY2FsPzoge1xuICAgICAgICBwb3J0PzogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIC8qKlxuICAgICAgICogQ29udHJvbHMgaG93IHNvdXJjZSBtYXBzIGFyZSBlbWl0dGVkIGZvciB3b3JrZmxvdyBidW5kbGVzLiBBY2NlcHRzXG4gICAgICAgKiB0aGUgc2FtZSB2YWx1ZXMgYXMgZXNidWlsZCdzIGBzb3VyY2VtYXBgIG9wdGlvbjogYHRydWVgL2AnaW5saW5lJ2BcbiAgICAgICAqIChkZWZhdWx0KSwgYCdsaW5rZWQnYCwgYCdleHRlcm5hbCdgLCBgJ2JvdGgnYCwgb3IgYGZhbHNlYCB0byBvbWl0XG4gICAgICAgKiBzb3VyY2UgbWFwcy4gQ2FuIGFsc28gYmUgc2V0IHZpYSB0aGUgYFdPUktGTE9XX1NPVVJDRU1BUGBcbiAgICAgICAqIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgICAgICovXG4gICAgICBzb3VyY2VtYXA/OiBib29sZWFuIHwgJ2lubGluZScgfCAnbGlua2VkJyB8ICdleHRlcm5hbCcgfCAnYm90aCc7XG4gICAgfTtcbiAgfSA9IHt9XG4pIHtcbiAgaWYgKCFwcm9jZXNzLmVudi5WRVJDRUxfREVQTE9ZTUVOVF9JRCkge1xuICAgIGlmICghcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEKSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQgPSAnbG9jYWwnO1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTE9DQUxfREFUQV9ESVIgPSAnLm5leHQvd29ya2Zsb3ctZGF0YSc7XG4gICAgfVxuICAgIGNvbnN0IG1heWJlUG9ydCA9IHdvcmtmbG93cz8ubG9jYWw/LnBvcnQ7XG4gICAgaWYgKG1heWJlUG9ydCkge1xuICAgICAgcHJvY2Vzcy5lbnYuUE9SVCA9IG1heWJlUG9ydC50b1N0cmluZygpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIXByb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCkge1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEID0gJ3ZlcmNlbCc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ29uZmlnKFxuICAgIHBoYXNlOiBzdHJpbmcsXG4gICAgY3R4OiB7IGRlZmF1bHRDb25maWc6IE5leHRDb25maWcgfVxuICApIHtcbiAgICBpZiAoXG4gICAgICBwaGFzZSA9PT0gJ3BoYXNlLWRldmVsb3BtZW50LXNlcnZlcicgfHxcbiAgICAgIHBoYXNlID09PSAncGhhc2UtcHJvZHVjdGlvbi1idWlsZCdcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgcHJld2FybVdvcmtmbG93U3djUGx1Z2luQ2FjaGUgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgICAgJy4vc3djLXBsdWdpbi1jYWNoZS5qcydcbiAgICAgICk7XG4gICAgICAvLyBMb2FkZXIgd29ya2VycyBpbmhlcml0IHRoaXMgY3dkIGFuZCByZWFkIGZyb20gdGhlIHNhbWUgU1dDIGNhY2hlLlxuICAgICAgcHJld2FybVdvcmtmbG93U3djUGx1Z2luQ2FjaGUocHJvY2Vzcy5jd2QoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9hZGVyUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnLi9sb2FkZXInKTtcbiAgICBsZXQgbmV4dENvbmZpZzogTmV4dENvbmZpZztcblxuICAgIGlmICh0eXBlb2YgbmV4dENvbmZpZ09yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG5leHRDb25maWcgPSBhd2FpdCBuZXh0Q29uZmlnT3JGbihwaGFzZSwgY3R4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dENvbmZpZyA9IG5leHRDb25maWdPckZuO1xuICAgIH1cbiAgICAvLyBzaGFsbG93IGNsb25lIHRvIGF2b2lkIHJlYWQtb25seSBvbiB0b3AtbGV2ZWxcbiAgICBuZXh0Q29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgbmV4dENvbmZpZyk7XG4gICAgY29uc3Qgd29ya2Zsb3dCYXNlUGF0aCA9IG5leHRDb25maWcuYmFzZVBhdGg7XG4gICAgc2V0V29ya2Zsb3dCYXNlUGF0aCh3b3JrZmxvd0Jhc2VQYXRoKTtcbiAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFtcbiAgICAgICAgLi4uKG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyB8fCBbXSksXG4gICAgICAgIC8vIEtlZXAgdGhlIFZlcmNlbCB3b3JsZCBhbmQgaXRzIG5hdGl2ZS1wcm9uZSBkZXBlbmRlbmNpZXMgZXh0ZXJuYWwgc29cbiAgICAgICAgLy8gbG9jYWwgYnVpbGRzIGRvIG5vdCB0cnkgdG8gcGFyc2UgQHZlcmNlbC9xdWV1ZSdzIGtleXJpbmcgZGVwZW5kZW5jeVxuICAgICAgICAvLyB0cmVlLlxuICAgICAgICAuLi5WRVJDRUxfV09STERfU0VSVkVSX0VYVEVSTkFMX1BBQ0tBR0VTLFxuICAgICAgXSksXG4gICAgXTtcbiAgICBjb25zdCBleGlzdGluZ0NvbXBpbGVyID0gbmV4dENvbmZpZy5jb21waWxlciA/PyB7fTtcbiAgICBjb25zdCBleGlzdGluZ1J1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGUgPSAoXG4gICAgICBleGlzdGluZ0NvbXBpbGVyIGFzIHtcbiAgICAgICAgcnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZT86IChtZXRhZGF0YToge1xuICAgICAgICAgIHByb2plY3REaXI6IHN0cmluZztcbiAgICAgICAgICBkaXN0RGlyOiBzdHJpbmc7XG4gICAgICAgIH0pID0+IFByb21pc2U8dm9pZD47XG4gICAgICB9XG4gICAgKS5ydW5BZnRlclByb2R1Y3Rpb25Db21waWxlO1xuXG4gICAgY29uc3QgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBBcnJheS5pc0FycmF5KFxuICAgICAgbmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzXG4gICAgKVxuICAgICAgPyBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXNcbiAgICAgIDogW107XG4gICAgbGV0IGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcztcblxuICAgIGlmIChjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkZXRlY3RlZFdvcmtmbG93UGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFja2FnZU5hbWUgb2YgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMpIHtcbiAgICAgICAgaWYgKFBTRVVET19FWFRFUk5BTF9QQUNLQUdFUy5oYXMocGFja2FnZU5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRldGVjdGVkID0gYXdhaXQgZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICAgICAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgICAgICBwcm9jZXNzLmN3ZCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5wdXNoKGRldGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEJlc3QtZWZmb3J0IG9ubHkuIE5ldmVyIGJsb2NrIGNvbmZpZyBnZW5lcmF0aW9uLlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFja2FnZXMgPSBuZXcgU2V0KFxuICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5tYXAoKGRldGVjdGVkKSA9PiBkZXRlY3RlZC5wYWNrYWdlTmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9XG4gICAgICAgICAgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAgICAgKHBhY2thZ2VOYW1lKSA9PiAhcmVtb3ZlZFBhY2thZ2VzLmhhcyhwYWNrYWdlTmFtZSlcbiAgICAgICAgICApO1xuICAgICAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzO1xuICAgICAgICB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBpZiB0dXJib3BhY2sgaXMgYmVpbmcgdXNlZFxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2spIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrID0ge307XG4gICAgfVxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMpIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzID0ge307XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcyBhcyBhbnk7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgbmV4dFZlcnNpb24gPSByZXNvbHZlTmV4dFZlcnNpb24od29ya2luZ0Rpcik7XG4gICAgY29uc3QgY29uZmlndXJlZFByb2plY3RSb290ID1cbiAgICAgIG5leHRDb25maWcub3V0cHV0RmlsZVRyYWNpbmdSb290ID8/IG5leHRDb25maWcudHVyYm9wYWNrPy5yb290O1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gY29uZmlndXJlZFByb2plY3RSb290XG4gICAgICA/IHJlc29sdmVDb25maWd1cmVkUHJvamVjdFJvb3Qod29ya2luZ0RpciwgY29uZmlndXJlZFByb2plY3RSb290KVxuICAgICAgOiByZXNvbHZlUHJvamVjdFJvb3Qod29ya2luZ0Rpcik7XG4gICAgY29uc3Qgc3VwcG9ydHNUdXJib0NvbmRpdGlvbiA9IHNlbXZlci5ndGUobmV4dFZlcnNpb24sICd2MTYuMC4wJyk7XG5cbiAgICBjb25zdCBzaG91bGRXYXRjaCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnO1xuICAgIGxldCB3b3JrZmxvd0J1aWxkZXJQcm9taXNlOiBQcm9taXNlPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGlzdERpciA9IG5leHRDb25maWcuZGlzdERpciB8fCAnLm5leHQnO1xuXG4gICAgbmV4dENvbmZpZy5jb21waWxlciA9IHtcbiAgICAgIC4uLmV4aXN0aW5nQ29tcGlsZXIsXG4gICAgICBydW5BZnRlclByb2R1Y3Rpb25Db21waWxlOiBhc3luYyAobWV0YWRhdGEpID0+IHtcbiAgICAgICAgaWYgKGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZSkge1xuICAgICAgICAgIGF3YWl0IGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZShtZXRhZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdChtZXRhZGF0YSk7XG4gICAgICAgIHJlZ2lzdGVyV29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0Q29weShtZXRhZGF0YSk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBnZXRXb3JrZmxvd0J1aWxkZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXdvcmtmbG93QnVpbGRlclByb21pc2UpIHtcbiAgICAgICAgd29ya2Zsb3dCdWlsZGVyUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgTmV4dEJ1aWxkZXIgPSBhd2FpdCBnZXROZXh0QnVpbGRlcihuZXh0VmVyc2lvbik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBOZXh0QnVpbGRlcih7XG4gICAgICAgICAgICB3YXRjaDogc2hvdWxkV2F0Y2gsXG4gICAgICAgICAgICAvLyBnZXRJbnB1dEZpbGVzIGZpbHRlcnMgdGhlIHByb2plY3QgdG8gTmV4dC5qcyBlbnRyeXBvaW50c1xuICAgICAgICAgICAgZGlyczogWycuJ10sXG4gICAgICAgICAgICBwYWdlRXh0ZW5zaW9uczogbmV4dENvbmZpZy5wYWdlRXh0ZW5zaW9ucyA/PyBbXG4gICAgICAgICAgICAgICd0c3gnLFxuICAgICAgICAgICAgICAndHMnLFxuICAgICAgICAgICAgICAnanN4JyxcbiAgICAgICAgICAgICAgJ2pzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwcm9qZWN0Um9vdCxcbiAgICAgICAgICAgIG1vZHVsZVNwZWNpZmllclJvb3Q6IHdvcmtpbmdEaXIsXG4gICAgICAgICAgICB3b3JraW5nRGlyLFxuICAgICAgICAgICAgZGlzdERpcixcbiAgICAgICAgICAgIGJhc2VQYXRoOiB3b3JrZmxvd0Jhc2VQYXRoLFxuICAgICAgICAgICAgZGlhZ25vc3RpY3NEaXI6IGAke2Rpc3REaXJ9L2RpYWdub3N0aWNzYCxcbiAgICAgICAgICAgIGJ1aWxkVGFyZ2V0OiAnbmV4dCcsXG4gICAgICAgICAgICB3b3JrZmxvd3NCdW5kbGVQYXRoOiAnJywgLy8gbm90IHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgc3RlcHNCdW5kbGVQYXRoOiAnJywgLy8gbm90IHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgd2ViaG9va0J1bmRsZVBhdGg6ICcnLCAvLyBub2RlIHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgc291cmNlbWFwOiB3b3JrZmxvd3M/LnNvdXJjZW1hcCxcbiAgICAgICAgICAgIGV4dGVybmFsUGFja2FnZXM6IFtcbiAgICAgICAgICAgICAgLy8gc2VydmVyLW9ubHkgYW5kIGNsaWVudC1vbmx5IGFyZSBwc2V1ZG8tcGFja2FnZXMgaGFuZGxlZCBieSBOZXh0LmpzXG4gICAgICAgICAgICAgIC8vIGR1cmluZyBpdHMgYnVpbGQgcHJvY2Vzcy4gV2UgbWFyayB0aGVtIGFzIGV4dGVybmFsIHRvIHByZXZlbnQgZXNidWlsZFxuICAgICAgICAgICAgICAvLyBmcm9tIGZhaWxpbmcgd2hlbiBidW5kbGluZyBjb2RlIHRoYXQgaW1wb3J0cyB0aGVtLlxuICAgICAgICAgICAgICAvLyBTZWU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9nZXR0aW5nLXN0YXJ0ZWQvc2VydmVyLWFuZC1jbGllbnQtY29tcG9uZW50c1xuICAgICAgICAgICAgICAnc2VydmVyLW9ubHknLFxuICAgICAgICAgICAgICAnY2xpZW50LW9ubHknLFxuICAgICAgICAgICAgICAuLi5lZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtmbG93QnVpbGRlclByb21pc2U7XG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIFtcbiAgICAgICcqLnRzeCcsXG4gICAgICAnKi50cycsXG4gICAgICAnKi5qc3gnLFxuICAgICAgJyouanMnLFxuICAgICAgJyoubWpzJyxcbiAgICAgICcqLm10cycsXG4gICAgICAnKi5janMnLFxuICAgICAgJyouY3RzJyxcbiAgICBdKSB7XG4gICAgICBuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlc1trZXldID0ge1xuICAgICAgICAuLi4oc3VwcG9ydHNUdXJib0NvbmRpdGlvblxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25kaXRpb246IHtcbiAgICAgICAgICAgICAgICAvLyBVc2UgJ2FsbCcgdG8gY29tYmluZTogbXVzdCBtYXRjaCBjb250ZW50IEFORCBtdXN0IE5PVCBiZSBpbiBnZW5lcmF0ZWQgcGF0aFxuICAgICAgICAgICAgICAgIC8vIE1lcmdlIHdpdGggYW55IGV4aXN0aW5nICdhbGwnIGNvbmRpdGlvbnMgZnJvbSB1c2VyIGNvbmZpZ1xuICAgICAgICAgICAgICAgIGFsbDogW1xuICAgICAgICAgICAgICAgICAgLi4uKGV4aXN0aW5nUnVsZXNba2V5XT8uY29uZGl0aW9uPy5hbGwgfHwgW10pLFxuICAgICAgICAgICAgICAgICAgLy8gRXhjbHVkZSBnZW5lcmF0ZWQgd29ya2Zsb3cgcm91dGUgZmlsZXMgZnJvbSB0cmFuc2Zvcm1hdGlvblxuICAgICAgICAgICAgICAgICAgeyBub3Q6IHsgcGF0aDogL1svXFxcXF1cXC53ZWxsLWtub3duWy9cXFxcXXdvcmtmbG93Wy9cXFxcXS8gfSB9LFxuICAgICAgICAgICAgICAgICAgLy8gTWF0Y2ggZmlsZXMgd2l0aCB3b3JrZmxvdyBkaXJlY3RpdmVzIG9yIGN1c3RvbSBzZXJpYWxpemF0aW9uIHBhdHRlcm5zXG4gICAgICAgICAgICAgICAgICAvLyBVc2VzIGJhY2tyZWZlcmVuY2VzIChcXDIsIFxcMykgdG8gZW5zdXJlIG1hdGNoaW5nIHF1b3RlIHR5cGVzXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6XG4gICAgICAgICAgICAgICAgICAgICAgLyh1c2Ugd29ya2Zsb3d8dXNlIHN0ZXB8ZnJvbVxccysoWydcIl0pQHdvcmtmbG93XFwvc2VyZGVcXDJ8U3ltYm9sXFwuZm9yXFxzKlxcKFxccyooWydcIl0pd29ya2Zsb3ctKD86c2VyaWFsaXplfGRlc2VyaWFsaXplKVxcM1xccypcXCkpLyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgbG9hZGVyczogWy4uLihleGlzdGluZ1J1bGVzW2tleV0/LmxvYWRlcnMgfHwgW10pLCBsb2FkZXJQYXRoXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gY29uZmlndXJlIHRoZSBsb2FkZXIgZm9yIHdlYnBhY2tcbiAgICBjb25zdCBleGlzdGluZ1dlYnBhY2tNb2RpZnkgPSBuZXh0Q29uZmlnLndlYnBhY2s7XG4gICAgbmV4dENvbmZpZy53ZWJwYWNrID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IFt3ZWJwYWNrQ29uZmlnXSA9IGFyZ3M7XG4gICAgICBpZiAoIXdlYnBhY2tDb25maWcubW9kdWxlKSB7XG4gICAgICAgIHdlYnBhY2tDb25maWcubW9kdWxlID0ge307XG4gICAgICB9XG4gICAgICBpZiAoIXdlYnBhY2tDb25maWcubW9kdWxlLnJ1bGVzKSB7XG4gICAgICAgIHdlYnBhY2tDb25maWcubW9kdWxlLnJ1bGVzID0gW107XG4gICAgICB9XG4gICAgICAvLyBsb2FkZXJzIGluIHdlYnBhY2sgYXBwbHkgYm90dG9tLT51cCBzbyBlbnN1cmVcbiAgICAgIC8vIG91cnMgY29tZXMgYmVmb3JlIHRoZSBkZWZhdWx0IHN3YyB0cmFuc2Zvcm1cbiAgICAgIHdlYnBhY2tDb25maWcubW9kdWxlLnJ1bGVzLnB1c2goe1xuICAgICAgICB0ZXN0OiAvLipcXC4obWpzfGNqc3xjdHN8dHN8dHN4fGpzfGpzeCkkLyxcbiAgICAgICAgbG9hZGVyOiBsb2FkZXJQYXRoLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhcmdzWzFdPy5pc1NlcnZlcikge1xuICAgICAgICBleHRlcm5hbGl6ZVdzTmF0aXZlQWNjZWxlcmF0b3JzKHdlYnBhY2tDb25maWcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXhpc3RpbmdXZWJwYWNrTW9kaWZ5XG4gICAgICAgID8gKGV4aXN0aW5nV2VicGFja01vZGlmeSguLi5hcmdzKSA/PyB3ZWJwYWNrQ29uZmlnKVxuICAgICAgICA6IHdlYnBhY2tDb25maWc7XG4gICAgfTtcbiAgICAvLyBvbmx5IHJ1biB0aGlzIGluIHRoZSBtYWluIHByb2Nlc3Mgc28gaXQgb25seSBydW5zIG9uY2VcbiAgICAvLyBhcyBOZXh0LmpzIHVzZXMgY2hpbGQgcHJvY2Vzc2VzIGZvciBkaWZmZXJlbnQgYnVpbGRzXG4gICAgaWYgKFxuICAgICAgIXByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfUFJJVkFURV9CVUlMVCAmJlxuICAgICAgcGhhc2UgIT09ICdwaGFzZS1wcm9kdWN0aW9uLXNlcnZlcidcbiAgICApIHtcbiAgICAgIGNvbnN0IHdvcmtmbG93QnVpbGRlciA9IGF3YWl0IGdldFdvcmtmbG93QnVpbGRlcigpO1xuXG4gICAgICBhd2FpdCB3b3JrZmxvd0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfUFJJVkFURV9CVUlMVCA9ICcxJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENvbmZpZztcbiAgfTtcbn1cbiJdfQ==
|
|
570
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5YUEsb0NBaVJDO0FBMXJCRCxxQ0FBMEU7QUFDMUUsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUN0RCxpREFJNEI7QUFFNUIsb0RBQTRCO0FBQzVCLDZDQUE4QztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDO0FBQ3RELE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQztBQUN0QyxpRkFBaUY7QUFDakYsK0VBQStFO0FBQy9FLDhFQUE4RTtBQUM5RSwwREFBMEQ7QUFDMUQsTUFBTSwyQkFBMkIsR0FBRyxPQUFPLENBQUM7QUFDNUMsOEVBQThFO0FBQzlFLGlGQUFpRjtBQUNqRiwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLGdGQUFnRjtBQUNoRiwwQkFBMEI7QUFDMUIsTUFBTSxxQ0FBcUMsR0FBRztJQUM1QyxjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLGtCQUFrQjtDQUNuQixDQUFDO0FBQ0YsNkVBQTZFO0FBQzdFLDZFQUE2RTtBQUM3RSxnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLGtFQUFrRTtBQUNsRSxNQUFNLGdDQUFnQyxHQUFHO0lBQ3ZDLGFBQWE7SUFDYixHQUFHLHFDQUFxQztDQUN6QyxDQUFDO0FBQ0YseUVBQXlFO0FBQ3pFLCtFQUErRTtBQUMvRSw2Q0FBNkM7QUFDN0MsTUFBTSxpQ0FBaUMsR0FBRztJQUN4QyxvQkFBb0I7SUFDcEIsR0FBRyxnQ0FBZ0M7Q0FDcEMsQ0FBQztBQUNGLE1BQU0sa0JBQWtCLEdBQUcsaUNBQWlDLENBQUM7QUFDN0QsTUFBTSxjQUFjLEdBQUcsNkJBQTZCLENBQUM7QUFDckQsTUFBTSwwQkFBMEIsR0FBRyxpQ0FBaUMsQ0FBQztBQUNyRSxNQUFNLDBCQUEwQixHQUM5QixvRUFBb0UsQ0FBQztBQUN2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QUUsQ0FBQztnQkFDdEIsK0JBQStCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakQsQ0FBQztZQUVELE9BQU8scUJBQXFCO2dCQUMxQixDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNwQixDQUFDLENBQUM7UUFDRix5REFBeUQ7UUFDekQsdURBQXVEO1FBQ3ZELElBQ0UsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQjtZQUN4QyxLQUFLLEtBQUsseUJBQXlCLEVBQ25DLENBQUM7WUFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7WUFFbkQsTUFBTSxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxHQUFHLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3B5RmlsZVN5bmMsIG1rZGlyU3luYywgcmVhZEZpbGVTeW5jLCBzdGF0U3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgY29weUZpbGUsIG1rZGlyLCByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSwgaXNBYnNvbHV0ZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQge1xuICByZXNvbHZlQ29uZmlndXJlZFByb2plY3RSb290LFxuICByZXNvbHZlUHJvamVjdFJvb3QsXG4gIFdPUktGTE9XX09QVElPTkFMX1dTX05BVElWRV9NT0RVTEVTLFxufSBmcm9tICdAd29ya2Zsb3cvYnVpbGRlcnMnO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnIH0gZnJvbSAnbmV4dCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBnZXROZXh0QnVpbGRlciB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5cbmNvbnN0IFZFUkNFTF9XT1JMRF9QQUNLQUdFID0gJ0B3b3JrZmxvdy93b3JsZC12ZXJjZWwnO1xuY29uc3QgUVVFVUVfUEFDS0FHRSA9ICdAdmVyY2VsL3F1ZXVlJztcbi8vIEJ1bmRsaW5nIGBAdmVyY2VsL3F1ZXVlYCByZXF1aXJlcyB0aGUgdmVyc2lvbiB3aG9zZSBkeW5hbWljIGBpbXBvcnQoKWAgY2Fycmllc1xuLy8gYHR1cmJvcGFja0lnbm9yZWAvYHdlYnBhY2tJZ25vcmVgIGFubm90YXRpb25zLiBXaXRob3V0IHRoZW0gVHVyYm9wYWNrIGNhbm5vdFxuLy8gcmVzb2x2ZSB0aGF0IGltcG9ydCAoXCJzZXJ2ZXIgcmVsYXRpdmUgaW1wb3J0cyBhcmUgbm90IGltcGxlbWVudGVkIHlldFwiKSBhbmRcbi8vIGZhaWxzIHRoZSBidWlsZCwgc28gYW4gb2xkZXIgY29weSBoYXMgdG8gc3RheSBleHRlcm5hbC5cbmNvbnN0IFFVRVVFX01JTl9CVU5ETEFCTEVfVkVSU0lPTiA9ICcwLjUuMCc7XG4vLyBgQHZlcmNlbC9vaWRjYCByZWFjaGVzIGBAdmVyY2VsL2NsaS1jb25maWdgLCBhbmQgYEB2ZXJjZWwvY2xpLWF1dGhgIHJlYWNoZXNcbi8vIGJvdGggdGhhdCBhbmQgYEBuYXBpLXJzL2tleXJpbmdgLiBUaG9zZSBhcmUgQ0xJLXNoYXBlZCBkZXBlbmRlbmNpZXMgdGhhdCBuZXZlclxuLy8gcnVuIG9uIGEgc2VydmVyOiBgeGRnLWFwcC1wYXRoc2AgYnVpbGRzIGl0cyBjb25maWcgZGlyZWN0b3J5IGF0IG1vZHVsZSBzY29wZVxuLy8gYW5kIHRocm93cyBgVGhlIFwicGF0aFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmdgIG9uY2UgYnVuZGxlZCwgd2hpY2hcbi8vIGZhaWxzIHBhZ2UtZGF0YSBjb2xsZWN0aW9uLiBLZWVwaW5nIHRoZSB0aHJlZSBleHRlcm5hbCBzdG9wcyBhbnkgYnVuZGxlciBmcm9tXG4vLyB3YWxraW5nIGludG8gdGhhdCB0cmVlLlxuY29uc3QgVkVSQ0VMX1dPUkxEX1NFUlZFUl9FWFRFUk5BTF9QQUNLQUdFUyA9IFtcbiAgJ0B2ZXJjZWwvb2lkYycsXG4gICdAdmVyY2VsL2NsaS1hdXRoJyxcbiAgJ0BuYXBpLXJzL2tleXJpbmcnLFxuXTtcbi8vIGBAd29ya2Zsb3cvd29ybGQtdmVyY2VsYCBhbmQgdGhlIHF1ZXVlIGNsaWVudCBhcmUgYnVuZGxlZCBpbnRvIHRoZSBOZXh0LmpzXG4vLyBzZXJ2ZXIgYnVpbGQuIEV2ZXJ5IG1vZHVsZSBsZWZ0IGV4dGVybmFsIGhhcyB0byBiZSByZXNvbHZlZCBmcm9tIGRpc2sgb24gYVxuLy8gY29sZCBzdGFydCwgb25lIGZpbGUgYXQgYSB0aW1lLCBhbmQgYHJlZ2lzdGVyKClgIGluIGBpbnN0cnVtZW50YXRpb24udHNgIHNpdHNcbi8vIGluIGZyb250IG9mIHRoZSBmaXJzdCByZXF1ZXN0LiBCdW5kbGluZyB0aGUgd29ybGQgY3V0cyB0aGUgbW9kdWxlIGNvdW50IGZvclxuLy8gdGhhdCBpbXBvcnQgZnJvbSB+NDQwIHRvIH4yNTAgYW5kIHRha2VzIH41MG1zIG9mZiBgcmVnaXN0ZXIoKWAuXG5jb25zdCBWRVJDRUxfV09STERfREVQRU5ERU5DWV9QQUNLQUdFUyA9IFtcbiAgUVVFVUVfUEFDS0FHRSxcbiAgLi4uVkVSQ0VMX1dPUkxEX1NFUlZFUl9FWFRFUk5BTF9QQUNLQUdFUyxcbl07XG4vLyBUaGUgd29ya2Zsb3cgYW5kIHN0ZXAgYnVuZGxlcyBhcmUgYnVpbHQgYnkgZXNidWlsZCwgd2hpY2ggcmVzb2x2ZXMgdGhlXG4vLyBkeW5hbWljIGltcG9ydCBmaW5lIGJ1dCBnYWlucyBub3RoaW5nIGZyb20gaW5saW5pbmcgdGhlIHdvcmxkOiB0aG9zZSBidW5kbGVzXG4vLyBhcmUgbG9hZGVkIG9uY2UgcGVyIGludm9jYXRpb24gZWl0aGVyIHdheS5cbmNvbnN0IFdPUktGTE9XX0JVTkRMRV9FWFRFUk5BTF9QQUNLQUdFUyA9IFtcbiAgVkVSQ0VMX1dPUkxEX1BBQ0tBR0UsXG4gIC4uLlZFUkNFTF9XT1JMRF9ERVBFTkRFTkNZX1BBQ0tBR0VTLFxuXTtcbmNvbnN0IHVzZVdvcmtmbG93UGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugd29ya2Zsb3dcXDE7P1xccyokL207XG5jb25zdCB1c2VTdGVwUGF0dGVybiA9IC9eXFxzKihbJ1wiXSl1c2Ugc3RlcFxcMTs/XFxzKiQvbTtcbmNvbnN0IHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuID0gL2Zyb21cXHMrKFsnXCJdKUB3b3JrZmxvd1xcL3NlcmRlXFwxLztcbmNvbnN0IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuID1cbiAgL1N5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDFcXHMqXFwpLztcbmNvbnN0IHdvcmtmbG93U2VyZGVDb21wdXRlZFByb3BlcnR5UGF0dGVybiA9XG4gIC9cXFtcXHMqV09SS0ZMT1dfKD86U0VSSUFMSVpFfERFU0VSSUFMSVpFKVxccypcXF0vO1xuXG5jb25zdCBQU0VVRE9fRVhURVJOQUxfUEFDS0FHRVMgPSBuZXcgU2V0KFsnc2VydmVyLW9ubHknLCAnY2xpZW50LW9ubHknXSk7XG5jb25zdCB3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbmNvbnN0IEJBU0VfUEFUSF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAd29ya2Zsb3cvY29yZS9iYXNlUGF0aCcpO1xuY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmXG4gIFJlY29yZDxzeW1ib2wsIHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbi8vIEtlZXAgdGhpcyBsb2NhbDogQHdvcmtmbG93L25leHQgaXMgQ29tbW9uSlMsIHdoaWxlIEB3b3JrZmxvdy91dGlscyBpcyBFU00tb25seS5cbmZ1bmN0aW9uIHNldFdvcmtmbG93QmFzZVBhdGgoYmFzZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBnbG9iYWxDb25maWdbQkFTRV9QQVRIX1NZTUJPTF0gPSBiYXNlUGF0aCA/PyAnJztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgaGFzVXNlV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1VzZVN0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2Uge1xuICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICBoYXNVc2VXb3JrZmxvdzogYm9vbGVhbjtcbiAgaGFzVXNlU3RlcDogYm9vbGVhbjtcbiAgaGFzU2VyZGU6IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNSZXNvbHZhYmxlUGFja2FnZVNwZWNpZmllcihzcGVjaWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4nKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzcGVjaWZpZXIuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChzcGVjaWZpZXIuaW5jbHVkZXMoJyonKSB8fCBzcGVjaWZpZXIuaW5jbHVkZXMoJzonKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zKHNvdXJjZTogc3RyaW5nKTogV29ya2Zsb3dQYXR0ZXJuTWF0Y2gge1xuICBjb25zdCBoYXNVc2VXb3JrZmxvdyA9IHVzZVdvcmtmbG93UGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1VzZVN0ZXAgPSB1c2VTdGVwUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlSW1wb3J0ID0gd29ya2Zsb3dTZXJkZUltcG9ydFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZVN5bWJvbCA9IHdvcmtmbG93U2VyZGVTeW1ib2xQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5ID1cbiAgICB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4udGVzdChzb3VyY2UpO1xuXG4gIHJldHVybiB7XG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZTogaGFzU2VyZGVJbXBvcnQgfHwgaGFzU2VyZGVTeW1ib2wgfHwgaGFzU2VyZGVDb21wdXRlZFByb3BlcnR5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRJc3N1ZUxhYmVscyhkZXRlY3RlZDogRGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGlzc3Vlczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKGRldGVjdGVkLmhhc1VzZVdvcmtmbG93KSB7XG4gICAgaXNzdWVzLnB1c2goJ1widXNlIHdvcmtmbG93XCIgZnVuY3Rpb25zJyk7XG4gIH1cbiAgaWYgKGRldGVjdGVkLmhhc1VzZVN0ZXApIHtcbiAgICBpc3N1ZXMucHVzaCgnXCJ1c2Ugc3RlcFwiIGZ1bmN0aW9ucycpO1xuICB9XG4gIGlmIChkZXRlY3RlZC5oYXNTZXJkZSkge1xuICAgIGlzc3Vlcy5wdXNoKCdzZXJpYWxpemF0aW9uIGNsYXNzZXMnKTtcbiAgfVxuICByZXR1cm4gaXNzdWVzO1xufVxuXG5mdW5jdGlvbiBoYXNXb3JrZmxvd1NlcmRlRGVwZW5kZW5jeShwYWNrYWdlSnNvbjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWlzUGxhaW5PYmplY3QocGFja2FnZUpzb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMpXG4gICAgPyBwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXNcbiAgICA6IHt9O1xuICBjb25zdCBwZWVyRGVwZW5kZW5jaWVzID0gaXNQbGFpbk9iamVjdChwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzKVxuICAgID8gcGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llc1xuICAgIDoge307XG5cbiAgcmV0dXJuIChcbiAgICBPYmplY3QuaGFzT3duKGRlcGVuZGVuY2llcywgJ0B3b3JrZmxvdy9zZXJkZScpIHx8XG4gICAgT2JqZWN0Lmhhc093bihwZWVyRGVwZW5kZW5jaWVzLCAnQHdvcmtmbG93L3NlcmRlJylcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8RGV0ZWN0ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2UgfCBudWxsPiB7XG4gIGlmICghaXNSZXNvbHZhYmxlUGFja2FnZVNwZWNpZmllcihwYWNrYWdlTmFtZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBoYXNVc2VXb3JrZmxvdyA9IGZhbHNlO1xuICBsZXQgaGFzVXNlU3RlcCA9IGZhbHNlO1xuICBsZXQgaGFzU2VyZGUgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShgJHtwYWNrYWdlTmFtZX0vcGFja2FnZS5qc29uYCwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCBwYWNrYWdlSnNvblNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKHBhY2thZ2VKc29uU291cmNlKSBhcyB1bmtub3duO1xuICAgIGhhc1NlcmRlID0gaGFzV29ya2Zsb3dTZXJkZURlcGVuZGVuY3kocGFja2FnZUpzb24pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBDb250aW51ZSB0byBzb3VyY2Ugc2Nhbm5pbmcuXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IHJlcXVpcmUucmVzb2x2ZShwYWNrYWdlTmFtZSwge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShlbnRyeVBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBhdHRlcm5zID0gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xuICAgIGhhc1VzZVdvcmtmbG93ID0gcGF0dGVybnMuaGFzVXNlV29ya2Zsb3c7XG4gICAgaGFzVXNlU3RlcCA9IHBhdHRlcm5zLmhhc1VzZVN0ZXA7XG4gICAgaGFzU2VyZGUgfHw9IHBhdHRlcm5zLmhhc1NlcmRlO1xuICB9IGNhdGNoIHtcbiAgICAvLyBCZXN0LWVmZm9ydCBvbmx5LiBVc2Ugd2hpY2hldmVyIHNpZ25hbCB3ZSBhbHJlYWR5IGhhdmUuXG4gIH1cblxuICBpZiAoIWhhc1VzZVdvcmtmbG93ICYmICFoYXNVc2VTdGVwICYmICFoYXNTZXJkZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYWNrYWdlTmFtZSxcbiAgICBoYXNVc2VXb3JrZmxvdyxcbiAgICBoYXNVc2VTdGVwLFxuICAgIGhhc1NlcmRlLFxuICB9O1xufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoXG4gIGRldGVjdGVkUGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW11cbik6IHZvaWQge1xuICBjb25zdCBuZXdseURldGVjdGVkUGFja2FnZXMgPSBkZXRlY3RlZFBhY2thZ2VzLmZpbHRlcigoeyBwYWNrYWdlTmFtZSB9KSA9PiB7XG4gICAgcmV0dXJuICF3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKTtcbiAgfSk7XG5cbiAgaWYgKG5ld2x5RGV0ZWN0ZWRQYWNrYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IHsgcGFja2FnZU5hbWUgfSBvZiBuZXdseURldGVjdGVkUGFja2FnZXMpIHtcbiAgICB3YXJuZWRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuYWRkKHBhY2thZ2VOYW1lKTtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VEZXNjcmlwdGlvbnMgPSBuZXdseURldGVjdGVkUGFja2FnZXNcbiAgICAubWFwKFxuICAgICAgKGRldGVjdGVkKSA9PlxuICAgICAgICBgXCIke2RldGVjdGVkLnBhY2thZ2VOYW1lfVwiICgke2dldElzc3VlTGFiZWxzKGRldGVjdGVkKS5qb2luKCcsICcpfSlgXG4gICAgKVxuICAgIC5qb2luKCcsICcpO1xuICBjb25zdCBwYWNrYWdlTmFtZXMgPSBuZXdseURldGVjdGVkUGFja2FnZXNcbiAgICAubWFwKChkZXRlY3RlZCkgPT4gYFwiJHtkZXRlY3RlZC5wYWNrYWdlTmFtZX1cImApXG4gICAgLmpvaW4oJywgJyk7XG5cbiAgY29uc29sZS53YXJuKFxuICAgIGBcXG7imqAgV29ya2Zsb3cgZm91bmQgd29ya2Zsb3cgY29kZSBpbiBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzOiAke3BhY2thZ2VEZXNjcmlwdGlvbnN9LmAgK1xuICAgICAgYFxcbiAgV29ya2Zsb3cgcmVtb3ZlZCB0aGUgYWZmZWN0ZWQgZW50cmllcyBmcm9tIHNlcnZlckV4dGVybmFsUGFja2FnZXMgZm9yIHRoaXMgYnVpbGQgYW5kIGlzIGNvbXBpbGluZyB0aGUgcGFja2FnZXMgYW55d2F5LmAgK1xuICAgICAgYFxcbiAgUmVtb3ZlICR7cGFja2FnZU5hbWVzfSBmcm9tIHNlcnZlckV4dGVybmFsUGFja2FnZXMgaW4gbmV4dC5jb25maWcgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcuXFxuYFxuICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTmV4dFZlcnNpb24od29ya2luZ0Rpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcblxuICAvLyBUcnkgcmVzb2x2aW5nIGZyb20gdGhlIGNvbnN1bWluZyBwcm9qZWN0J3Mgd29ya2luZyBkaXJlY3RvcnkgZmlyc3QuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb25vcmVwbyBzZXR1cHMgd2hlcmUgYG5leHRgIG1heSBub3QgYmUgaG9pc3RlZCB0byB0aGVcbiAgLy8gc2FtZSBsb2NhdGlvbiBhcyBgQHdvcmtmbG93L25leHRgLlxuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZSgnbmV4dC9wYWNrYWdlLmpzb24nLCB7XG4gICAgICBwYXRoczogW3dvcmtpbmdEaXJdLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGFja2FnZUpzb24gPSByZXF1aXJlKHBhY2thZ2VKc29uUGF0aCkgYXMge1xuICAgICAgdmVyc2lvbj86IHVua25vd247XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHJlc29sdmVkUGFja2FnZUpzb24udmVyc2lvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFBhY2thZ2VKc29uLnZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JzLnB1c2goZSk7XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gcmVzb2x2aW5nIHJlbGF0aXZlIHRvIHRoaXMgcGFja2FnZSdzIGxvY2F0aW9uLlxuICB0cnkge1xuICAgIGNvbnN0IHZlcnNpb24gPSAocmVxdWlyZSgnbmV4dC9wYWNrYWdlLmpzb24nKSBhcyB7IHZlcnNpb24/OiB1bmtub3duIH0pXG4gICAgICAudmVyc2lvbjtcbiAgICBpZiAodHlwZW9mIHZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvcnMucHVzaChlKTtcbiAgfVxuXG4gIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihcbiAgICBlcnJvcnMsXG4gICAgYENvdWxkIG5vdCByZXNvbHZlIE5leHQuanMgdmVyc2lvbi4gRW5zdXJlIFxcYG5leHRcXGAgaXMgaW5zdGFsbGVkIGluIHlvdXIgcHJvamVjdCAod29ya2luZyBkaXJlY3Rvcnk6ICR7d29ya2luZ0Rpcn0pLmBcbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBgQHZlcmNlbC9xdWV1ZWAgY29weSBpbiB0aGUgYXBwJ3MgZGVwZW5kZW5jeSB0cmVlIGNhbiBiZSBidW5kbGVkLlxuICogRmFpbHMgb3BlbiB3aGVuIG5vIHZlcnNpb24gY2FuIGJlIHJlYWQ6IHRoZSBjb3B5IGluIHRoZSBncmFwaCBpcyB0aGVuIHRoZSBvbmVcbiAqIGBAd29ya2Zsb3cvd29ybGQtdmVyY2VsYCBwaW5zLCB3aGljaCBzaGlwcyBhbG9uZ3NpZGUgdGhpcyBwbHVnaW4uXG4gKi9cbmZ1bmN0aW9uIGlzQnVuZGxhYmxlUXVldWVWZXJzaW9uKHdvcmtpbmdEaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB2ZXJzaW9uID0gcmVhZEluc3RhbGxlZFF1ZXVlVmVyc2lvbih3b3JraW5nRGlyKTtcbiAgaWYgKHZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCAhc2VtdmVyLnZhbGlkKHZlcnNpb24pKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHNlbXZlci5ndGUodmVyc2lvbiwgUVVFVUVfTUlOX0JVTkRMQUJMRV9WRVJTSU9OKTtcbn1cblxuLyoqXG4gKiBUaGUgaW5zdGFsbGVkIGBAdmVyY2VsL3F1ZXVlYCB2ZXJzaW9uLCByZWFkIGZyb20gdGhlIG5lYXJlc3QgYG5vZGVfbW9kdWxlc2BcbiAqIGNvcHkgYXQgb3IgYWJvdmUgdGhlIGFwcCBkaXJlY3RvcnkuXG4gKlxuICogVGhlIG1hbmlmZXN0IGlzIHJlYWQgZnJvbSBkaXNrIHJhdGhlciB0aGFuIGxvb2tlZCB1cCB3aXRoXG4gKiBgcmVxdWlyZS5yZXNvbHZlKCdAdmVyY2VsL3F1ZXVlL3BhY2thZ2UuanNvbicpYDogdGhlIHB1Ymxpc2hlZCBwYWNrYWdlJ3NcbiAqIGBleHBvcnRzYCBtYXAgZGVjbGFyZXMgb25seSBgLmAsIHNvIE5vZGUgYW5zd2VycyBhIG1hbmlmZXN0IHN1YnBhdGggd2l0aFxuICogYEVSUl9QQUNLQUdFX1BBVEhfTk9UX0VYUE9SVEVEYCBldmVuIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiBSZXNvbHZpbmdcbiAqIHRoZSBwYWNrYWdlIGVudHJ5IGluc3RlYWQgaXMgbm8gYmV0dGVyLCBiZWNhdXNlIGEgYnVuZGxlciBvciBhIHRlc3QgcnVubmVyIGNhblxuICogc3Vic3RpdHV0ZSBhIHJlc29sdmVyIHRoYXQgYW5zd2VycyBmcm9tIHRoZSB0b29sY2hhaW4ncyBtb2R1bGUgZ3JhcGggcmF0aGVyXG4gKiB0aGFuIHRoZSBhcHAncy5cbiAqXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBmb3IgYSBsYXlvdXQgdGhhdCBrZWVwcyB0aGUgcGFja2FnZSBvdXQgb2YgYSByZWFjaGFibGVcbiAqIGBub2RlX21vZHVsZXNgIGRpcmVjdG9yeSwgd2hpY2ggaW5jbHVkZXMgYW55IHBucG0gYXBwIHRoYXQgZG9lcyBub3QgZGVwZW5kIG9uXG4gKiB0aGUgcXVldWUgY2xpZW50IGRpcmVjdGx5LiBUaG9zZSBsYXlvdXRzIGNhbm5vdCBleHRlcm5hbGl6ZSBpdCBieSBuYW1lIHVuZGVyXG4gKiB3ZWJwYWNrIGVpdGhlciwgc28gdGhlIGNhbGxlciBidW5kbGVzIGl0LlxuICovXG5mdW5jdGlvbiByZWFkSW5zdGFsbGVkUXVldWVWZXJzaW9uKHdvcmtpbmdEaXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGxldCBkaXJlY3RvcnkgPSB3b3JraW5nRGlyO1xuICBsZXQgcHJldmlvdXMgPSAnJztcbiAgd2hpbGUgKGRpcmVjdG9yeSAhPT0gcHJldmlvdXMpIHtcbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKFxuICAgICAgZGlyZWN0b3J5LFxuICAgICAgJ25vZGVfbW9kdWxlcycsXG4gICAgICAuLi5RVUVVRV9QQUNLQUdFLnNwbGl0KCcvJyksXG4gICAgICAncGFja2FnZS5qc29uJ1xuICAgICk7XG4gICAgaWYgKGZpbGVFeGlzdHMobWFuaWZlc3RQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhtYW5pZmVzdFBhdGgsICd1dGY4JykpIGFzIHtcbiAgICAgICAgICB2ZXJzaW9uPzogdW5rbm93bjtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBtYW5pZmVzdC52ZXJzaW9uID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gbWFuaWZlc3QudmVyc2lvblxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzID0gZGlyZWN0b3J5O1xuICAgIGRpcmVjdG9yeSA9IGRpcm5hbWUoZGlyZWN0b3J5KTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmaWxlRXhpc3RzKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXRzID0gc3RhdFN5bmMocGF0aCk7XG4gICAgcmV0dXJuIHN0YXRzLmlzRmlsZSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0V29ya2Zsb3dNYW5pZmVzdENvcHlQYXRocyh7XG4gIHByb2plY3REaXIsXG4gIGRpc3REaXIsXG59OiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHsgbWFuaWZlc3RQYXRoOiBzdHJpbmc7IGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hbmlmZXN0Q2FuZGlkYXRlcyA9IFtcbiAgICBqb2luKHByb2plY3REaXIsICdhcHAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicpLFxuICAgIGpvaW4ocHJvamVjdERpciwgJ3NyYy9hcHAvLndlbGwta25vd24vd29ya2Zsb3cvdjEvbWFuaWZlc3QuanNvbicpLFxuICAgIGpvaW4ocHJvamVjdERpciwgJ3B1YmxpYy8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gIF07XG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IG1hbmlmZXN0Q2FuZGlkYXRlcy5maW5kKGZpbGVFeGlzdHMpO1xuXG4gIGlmICghbWFuaWZlc3RQYXRoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWREaXN0RGlyID0gaXNBYnNvbHV0ZShkaXN0RGlyKVxuICAgID8gZGlzdERpclxuICAgIDogam9pbihwcm9qZWN0RGlyLCBkaXN0RGlyKTtcbiAgY29uc3QgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggPSBqb2luKFxuICAgIHJlc29sdmVkRGlzdERpcixcbiAgICAnZGlhZ25vc3RpY3MnLFxuICAgICd3b3JrZmxvd3MtbWFuaWZlc3QuanNvbidcbiAgKTtcbiAgcmV0dXJuIHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0KG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYXRocyA9IGdldFdvcmtmbG93TWFuaWZlc3RDb3B5UGF0aHMobWV0YWRhdGEpO1xuICBpZiAoIXBhdGhzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH0gPSBwYXRocztcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShkaWFnbm9zdGljc01hbmlmZXN0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCBjb3B5RmlsZShtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKTtcbn1cblxuZnVuY3Rpb24gY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdFN5bmMobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogdm9pZCB7XG4gIGNvbnN0IHBhdGhzID0gZ2V0V29ya2Zsb3dNYW5pZmVzdENvcHlQYXRocyhtZXRhZGF0YSk7XG4gIGlmICghcGF0aHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfSA9IHBhdGhzO1xuICBta2RpclN5bmMoZGlybmFtZShkaWFnbm9zdGljc01hbmlmZXN0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb3B5RmlsZVN5bmMobWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyV29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0Q29weShtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB2b2lkIHtcbiAgY29uc3QgbWFya2VyID0gJ19fd29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0Q29waWVzJztcbiAgY29uc3QgZ2xvYmFsV2l0aE1hcmtlciA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgW21hcmtlcl0/OiBBcnJheTx7IHByb2plY3REaXI6IHN0cmluZzsgZGlzdERpcjogc3RyaW5nIH0+O1xuICB9O1xuXG4gIGlmICghZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdKSB7XG4gICAgZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdID0gW107XG4gICAgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb3B5TWV0YWRhdGEgb2YgZ2xvYmFsV2l0aE1hcmtlclttYXJrZXJdIHx8IFtdKSB7XG4gICAgICAgIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RTeW5jKGNvcHlNZXRhZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0ucHVzaChtZXRhZGF0YSk7XG59XG5cbi8qKlxuICogTWFyayBgd3NgJ3Mgb3B0aW9uYWwgbmF0aXZlIGFjY2VsZXJhdG9ycyBleHRlcm5hbCBvbiB0aGUgd2VicGFjayBzZXJ2ZXJcbiAqIGJ1aWxkLCB3aGljaCBvdGhlcndpc2UgYnVuZGxlcyB0aGVpciBKUyB3cmFwcGVyIHdpdGhvdXQgdGhlIG5hdGl2ZSBgLm5vZGVgXG4gKiBiaW5kaW5nIGFuZCB0aHJvd3MgXCJidWZmZXJVdGlsLm1hc2sgaXMgbm90IGEgZnVuY3Rpb25cIiBhdCBydW50aW1lLiBTZWVcbiAqIGBXT1JLRkxPV19PUFRJT05BTF9XU19OQVRJVkVfTU9EVUxFU2A7IGBAd29ya2Zsb3cvcm9sbHVwYCBoYW5kbGVzIHRoZVxuICogUm9sbHVwL1ZpdGUvTml0cm8gc2lkZS5cbiAqL1xuZnVuY3Rpb24gZXh0ZXJuYWxpemVXc05hdGl2ZUFjY2VsZXJhdG9ycyh3ZWJwYWNrQ29uZmlnOiB7XG4gIGV4dGVybmFscz86IHVua25vd247XG59KTogdm9pZCB7XG4gIGNvbnN0IG5hbWVzID0gWy4uLldPUktGTE9XX09QVElPTkFMX1dTX05BVElWRV9NT0RVTEVTXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkod2VicGFja0NvbmZpZy5leHRlcm5hbHMpKSB7XG4gICAgd2VicGFja0NvbmZpZy5leHRlcm5hbHMucHVzaCguLi5uYW1lcyk7XG4gIH0gZWxzZSBpZiAod2VicGFja0NvbmZpZy5leHRlcm5hbHMpIHtcbiAgICB3ZWJwYWNrQ29uZmlnLmV4dGVybmFscyA9IFt3ZWJwYWNrQ29uZmlnLmV4dGVybmFscywgLi4ubmFtZXNdO1xuICB9IGVsc2Uge1xuICAgIHdlYnBhY2tDb25maWcuZXh0ZXJuYWxzID0gbmFtZXM7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhXb3JrZmxvdyhcbiAgbmV4dENvbmZpZ09yRm46XG4gICAgfCBOZXh0Q29uZmlnXG4gICAgfCAoKFxuICAgICAgICBwaGFzZTogc3RyaW5nLFxuICAgICAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICAgICApID0+IFByb21pc2U8TmV4dENvbmZpZz4pLFxuICB7XG4gICAgd29ya2Zsb3dzLFxuICB9OiB7XG4gICAgd29ya2Zsb3dzPzoge1xuICAgICAgbG9jYWw/OiB7XG4gICAgICAgIHBvcnQ/OiBudW1iZXI7XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBDb250cm9scyBob3cgc291cmNlIG1hcHMgYXJlIGVtaXR0ZWQgZm9yIHdvcmtmbG93IGJ1bmRsZXMuIEFjY2VwdHNcbiAgICAgICAqIHRoZSBzYW1lIHZhbHVlcyBhcyBlc2J1aWxkJ3MgYHNvdXJjZW1hcGAgb3B0aW9uOiBgdHJ1ZWAvYCdpbmxpbmUnYFxuICAgICAgICogKGRlZmF1bHQpLCBgJ2xpbmtlZCdgLCBgJ2V4dGVybmFsJ2AsIGAnYm90aCdgLCBvciBgZmFsc2VgIHRvIG9taXRcbiAgICAgICAqIHNvdXJjZSBtYXBzLiBDYW4gYWxzbyBiZSBzZXQgdmlhIHRoZSBgV09SS0ZMT1dfU09VUkNFTUFQYFxuICAgICAgICogZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAgICAgKi9cbiAgICAgIHNvdXJjZW1hcD86IGJvb2xlYW4gfCAnaW5saW5lJyB8ICdsaW5rZWQnIHwgJ2V4dGVybmFsJyB8ICdib3RoJztcbiAgICB9O1xuICB9ID0ge31cbikge1xuICBpZiAoIXByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgaWYgKCFwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQpIHtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCA9ICdsb2NhbCc7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9EQVRBX0RJUiA9ICcubmV4dC93b3JrZmxvdy1kYXRhJztcbiAgICB9XG4gICAgY29uc3QgbWF5YmVQb3J0ID0gd29ya2Zsb3dzPy5sb2NhbD8ucG9ydDtcbiAgICBpZiAobWF5YmVQb3J0KSB7XG4gICAgICBwcm9jZXNzLmVudi5QT1JUID0gbWF5YmVQb3J0LnRvU3RyaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEKSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQgPSAndmVyY2VsJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gYnVpbGRDb25maWcoXG4gICAgcGhhc2U6IHN0cmluZyxcbiAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICkge1xuICAgIGlmIChcbiAgICAgIHBoYXNlID09PSAncGhhc2UtZGV2ZWxvcG1lbnQtc2VydmVyJyB8fFxuICAgICAgcGhhc2UgPT09ICdwaGFzZS1wcm9kdWN0aW9uLWJ1aWxkJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBwcmV3YXJtV29ya2Zsb3dTd2NQbHVnaW5DYWNoZSB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgICAnLi9zd2MtcGx1Z2luLWNhY2hlLmpzJ1xuICAgICAgKTtcbiAgICAgIC8vIExvYWRlciB3b3JrZXJzIGluaGVyaXQgdGhpcyBjd2QgYW5kIHJlYWQgZnJvbSB0aGUgc2FtZSBTV0MgY2FjaGUuXG4gICAgICBwcmV3YXJtV29ya2Zsb3dTd2NQbHVnaW5DYWNoZShwcm9jZXNzLmN3ZCgpKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkZXJQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCcuL2xvYWRlcicpO1xuICAgIGxldCBuZXh0Q29uZmlnOiBOZXh0Q29uZmlnO1xuXG4gICAgaWYgKHR5cGVvZiBuZXh0Q29uZmlnT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmV4dENvbmZpZyA9IGF3YWl0IG5leHRDb25maWdPckZuKHBoYXNlLCBjdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q29uZmlnID0gbmV4dENvbmZpZ09yRm47XG4gICAgfVxuICAgIC8vIHNoYWxsb3cgY2xvbmUgdG8gYXZvaWQgcmVhZC1vbmx5IG9uIHRvcC1sZXZlbFxuICAgIG5leHRDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0Q29uZmlnKTtcbiAgICBjb25zdCB3b3JrZmxvd0Jhc2VQYXRoID0gbmV4dENvbmZpZy5iYXNlUGF0aDtcbiAgICBzZXRXb3JrZmxvd0Jhc2VQYXRoKHdvcmtmbG93QmFzZVBhdGgpO1xuICAgIG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoW1xuICAgICAgICAuLi4obmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIHx8IFtdKSxcbiAgICAgICAgLi4uVkVSQ0VMX1dPUkxEX1NFUlZFUl9FWFRFUk5BTF9QQUNLQUdFUyxcbiAgICAgICAgLi4uKGlzQnVuZGxhYmxlUXVldWVWZXJzaW9uKHByb2Nlc3MuY3dkKCkpID8gW10gOiBbUVVFVUVfUEFDS0FHRV0pLFxuICAgICAgXSksXG4gICAgXTtcbiAgICBjb25zdCBleGlzdGluZ0NvbXBpbGVyID0gbmV4dENvbmZpZy5jb21waWxlciA/PyB7fTtcbiAgICBjb25zdCBleGlzdGluZ1J1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGUgPSAoXG4gICAgICBleGlzdGluZ0NvbXBpbGVyIGFzIHtcbiAgICAgICAgcnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZT86IChtZXRhZGF0YToge1xuICAgICAgICAgIHByb2plY3REaXI6IHN0cmluZztcbiAgICAgICAgICBkaXN0RGlyOiBzdHJpbmc7XG4gICAgICAgIH0pID0+IFByb21pc2U8dm9pZD47XG4gICAgICB9XG4gICAgKS5ydW5BZnRlclByb2R1Y3Rpb25Db21waWxlO1xuXG4gICAgY29uc3QgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBBcnJheS5pc0FycmF5KFxuICAgICAgbmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzXG4gICAgKVxuICAgICAgPyBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXNcbiAgICAgIDogW107XG4gICAgbGV0IGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcztcblxuICAgIGlmIChjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkZXRlY3RlZFdvcmtmbG93UGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFja2FnZU5hbWUgb2YgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMpIHtcbiAgICAgICAgaWYgKFBTRVVET19FWFRFUk5BTF9QQUNLQUdFUy5oYXMocGFja2FnZU5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRldGVjdGVkID0gYXdhaXQgZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICAgICAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgICAgICBwcm9jZXNzLmN3ZCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5wdXNoKGRldGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEJlc3QtZWZmb3J0IG9ubHkuIE5ldmVyIGJsb2NrIGNvbmZpZyBnZW5lcmF0aW9uLlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFja2FnZXMgPSBuZXcgU2V0KFxuICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5tYXAoKGRldGVjdGVkKSA9PiBkZXRlY3RlZC5wYWNrYWdlTmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9XG4gICAgICAgICAgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAgICAgKHBhY2thZ2VOYW1lKSA9PiAhcmVtb3ZlZFBhY2thZ2VzLmhhcyhwYWNrYWdlTmFtZSlcbiAgICAgICAgICApO1xuICAgICAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzO1xuICAgICAgICB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBpZiB0dXJib3BhY2sgaXMgYmVpbmcgdXNlZFxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2spIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrID0ge307XG4gICAgfVxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMpIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzID0ge307XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcyBhcyBhbnk7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgbmV4dFZlcnNpb24gPSByZXNvbHZlTmV4dFZlcnNpb24od29ya2luZ0Rpcik7XG4gICAgY29uc3QgY29uZmlndXJlZFByb2plY3RSb290ID1cbiAgICAgIG5leHRDb25maWcub3V0cHV0RmlsZVRyYWNpbmdSb290ID8/IG5leHRDb25maWcudHVyYm9wYWNrPy5yb290O1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gY29uZmlndXJlZFByb2plY3RSb290XG4gICAgICA/IHJlc29sdmVDb25maWd1cmVkUHJvamVjdFJvb3Qod29ya2luZ0RpciwgY29uZmlndXJlZFByb2plY3RSb290KVxuICAgICAgOiByZXNvbHZlUHJvamVjdFJvb3Qod29ya2luZ0Rpcik7XG4gICAgY29uc3Qgc3VwcG9ydHNUdXJib0NvbmRpdGlvbiA9IHNlbXZlci5ndGUobmV4dFZlcnNpb24sICd2MTYuMC4wJyk7XG5cbiAgICBjb25zdCBzaG91bGRXYXRjaCA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnO1xuICAgIGxldCB3b3JrZmxvd0J1aWxkZXJQcm9taXNlOiBQcm9taXNlPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGlzdERpciA9IG5leHRDb25maWcuZGlzdERpciB8fCAnLm5leHQnO1xuXG4gICAgbmV4dENvbmZpZy5jb21waWxlciA9IHtcbiAgICAgIC4uLmV4aXN0aW5nQ29tcGlsZXIsXG4gICAgICBydW5BZnRlclByb2R1Y3Rpb25Db21waWxlOiBhc3luYyAobWV0YWRhdGEpID0+IHtcbiAgICAgICAgaWYgKGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZSkge1xuICAgICAgICAgIGF3YWl0IGV4aXN0aW5nUnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZShtZXRhZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdChtZXRhZGF0YSk7XG4gICAgICAgIHJlZ2lzdGVyV29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0Q29weShtZXRhZGF0YSk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBnZXRXb3JrZmxvd0J1aWxkZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXdvcmtmbG93QnVpbGRlclByb21pc2UpIHtcbiAgICAgICAgd29ya2Zsb3dCdWlsZGVyUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgTmV4dEJ1aWxkZXIgPSBhd2FpdCBnZXROZXh0QnVpbGRlcihuZXh0VmVyc2lvbik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBOZXh0QnVpbGRlcih7XG4gICAgICAgICAgICB3YXRjaDogc2hvdWxkV2F0Y2gsXG4gICAgICAgICAgICAvLyBnZXRJbnB1dEZpbGVzIGZpbHRlcnMgdGhlIHByb2plY3QgdG8gTmV4dC5qcyBlbnRyeXBvaW50c1xuICAgICAgICAgICAgZGlyczogWycuJ10sXG4gICAgICAgICAgICBwYWdlRXh0ZW5zaW9uczogbmV4dENvbmZpZy5wYWdlRXh0ZW5zaW9ucyA/PyBbXG4gICAgICAgICAgICAgICd0c3gnLFxuICAgICAgICAgICAgICAndHMnLFxuICAgICAgICAgICAgICAnanN4JyxcbiAgICAgICAgICAgICAgJ2pzJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwcm9qZWN0Um9vdCxcbiAgICAgICAgICAgIG1vZHVsZVNwZWNpZmllclJvb3Q6IHdvcmtpbmdEaXIsXG4gICAgICAgICAgICB3b3JraW5nRGlyLFxuICAgICAgICAgICAgZGlzdERpcixcbiAgICAgICAgICAgIGJhc2VQYXRoOiB3b3JrZmxvd0Jhc2VQYXRoLFxuICAgICAgICAgICAgZGlhZ25vc3RpY3NEaXI6IGAke2Rpc3REaXJ9L2RpYWdub3N0aWNzYCxcbiAgICAgICAgICAgIGJ1aWxkVGFyZ2V0OiAnbmV4dCcsXG4gICAgICAgICAgICB3b3JrZmxvd3NCdW5kbGVQYXRoOiAnJywgLy8gbm90IHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgc3RlcHNCdW5kbGVQYXRoOiAnJywgLy8gbm90IHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgd2ViaG9va0J1bmRsZVBhdGg6ICcnLCAvLyBub2RlIHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgc291cmNlbWFwOiB3b3JrZmxvd3M/LnNvdXJjZW1hcCxcbiAgICAgICAgICAgIGV4dGVybmFsUGFja2FnZXM6IFtcbiAgICAgICAgICAgICAgLy8gc2VydmVyLW9ubHkgYW5kIGNsaWVudC1vbmx5IGFyZSBwc2V1ZG8tcGFja2FnZXMgaGFuZGxlZCBieSBOZXh0LmpzXG4gICAgICAgICAgICAgIC8vIGR1cmluZyBpdHMgYnVpbGQgcHJvY2Vzcy4gV2UgbWFyayB0aGVtIGFzIGV4dGVybmFsIHRvIHByZXZlbnQgZXNidWlsZFxuICAgICAgICAgICAgICAvLyBmcm9tIGZhaWxpbmcgd2hlbiBidW5kbGluZyBjb2RlIHRoYXQgaW1wb3J0cyB0aGVtLlxuICAgICAgICAgICAgICAvLyBTZWU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9nZXR0aW5nLXN0YXJ0ZWQvc2VydmVyLWFuZC1jbGllbnQtY29tcG9uZW50c1xuICAgICAgICAgICAgICAnc2VydmVyLW9ubHknLFxuICAgICAgICAgICAgICAnY2xpZW50LW9ubHknLFxuICAgICAgICAgICAgICAuLi5uZXcgU2V0KFtcbiAgICAgICAgICAgICAgICAuLi5lZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLFxuICAgICAgICAgICAgICAgIC4uLldPUktGTE9XX0JVTkRMRV9FWFRFUk5BTF9QQUNLQUdFUyxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29ya2Zsb3dCdWlsZGVyUHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgW1xuICAgICAgJyoudHN4JyxcbiAgICAgICcqLnRzJyxcbiAgICAgICcqLmpzeCcsXG4gICAgICAnKi5qcycsXG4gICAgICAnKi5tanMnLFxuICAgICAgJyoubXRzJyxcbiAgICAgICcqLmNqcycsXG4gICAgICAnKi5jdHMnLFxuICAgIF0pIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzW2tleV0gPSB7XG4gICAgICAgIC4uLihzdXBwb3J0c1R1cmJvQ29uZGl0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbjoge1xuICAgICAgICAgICAgICAgIC8vIFVzZSAnYWxsJyB0byBjb21iaW5lOiBtdXN0IG1hdGNoIGNvbnRlbnQgQU5EIG11c3QgTk9UIGJlIGluIGdlbmVyYXRlZCBwYXRoXG4gICAgICAgICAgICAgICAgLy8gTWVyZ2Ugd2l0aCBhbnkgZXhpc3RpbmcgJ2FsbCcgY29uZGl0aW9ucyBmcm9tIHVzZXIgY29uZmlnXG4gICAgICAgICAgICAgICAgYWxsOiBbXG4gICAgICAgICAgICAgICAgICAuLi4oZXhpc3RpbmdSdWxlc1trZXldPy5jb25kaXRpb24/LmFsbCB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAvLyBFeGNsdWRlIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyBmcm9tIHRyYW5zZm9ybWF0aW9uXG4gICAgICAgICAgICAgICAgICB7IG5vdDogeyBwYXRoOiAvWy9cXFxcXVxcLndlbGwta25vd25bL1xcXFxdd29ya2Zsb3dbL1xcXFxdLyB9IH0sXG4gICAgICAgICAgICAgICAgICAvLyBNYXRjaCBmaWxlcyB3aXRoIHdvcmtmbG93IGRpcmVjdGl2ZXMgb3IgY3VzdG9tIHNlcmlhbGl6YXRpb24gcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgIC8vIFVzZXMgYmFja3JlZmVyZW5jZXMgKFxcMiwgXFwzKSB0byBlbnN1cmUgbWF0Y2hpbmcgcXVvdGUgdHlwZXNcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgICAgICAgICAgICAvKHVzZSB3b3JrZmxvd3x1c2Ugc3RlcHxmcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMnxTeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwzXFxzKlxcKSkvLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICBsb2FkZXJzOiBbLi4uKGV4aXN0aW5nUnVsZXNba2V5XT8ubG9hZGVycyB8fCBbXSksIGxvYWRlclBhdGhdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBmb3Igd2VicGFja1xuICAgIGNvbnN0IGV4aXN0aW5nV2VicGFja01vZGlmeSA9IG5leHRDb25maWcud2VicGFjaztcbiAgICBuZXh0Q29uZmlnLndlYnBhY2sgPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgW3dlYnBhY2tDb25maWddID0gYXJncztcbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMgPSBbXTtcbiAgICAgIH1cbiAgICAgIC8vIGxvYWRlcnMgaW4gd2VicGFjayBhcHBseSBib3R0b20tPnVwIHNvIGVuc3VyZVxuICAgICAgLy8gb3VycyBjb21lcyBiZWZvcmUgdGhlIGRlZmF1bHQgc3djIHRyYW5zZm9ybVxuICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMucHVzaCh7XG4gICAgICAgIHRlc3Q6IC8uKlxcLihtanN8Y2pzfGN0c3x0c3x0c3h8anN8anN4KSQvLFxuICAgICAgICBsb2FkZXI6IGxvYWRlclBhdGgsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGFyZ3NbMV0/LmlzU2VydmVyKSB7XG4gICAgICAgIGV4dGVybmFsaXplV3NOYXRpdmVBY2NlbGVyYXRvcnMod2VicGFja0NvbmZpZyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBleGlzdGluZ1dlYnBhY2tNb2RpZnlcbiAgICAgICAgPyAoZXhpc3RpbmdXZWJwYWNrTW9kaWZ5KC4uLmFyZ3MpID8/IHdlYnBhY2tDb25maWcpXG4gICAgICAgIDogd2VicGFja0NvbmZpZztcbiAgICB9O1xuICAgIC8vIG9ubHkgcnVuIHRoaXMgaW4gdGhlIG1haW4gcHJvY2VzcyBzbyBpdCBvbmx5IHJ1bnMgb25jZVxuICAgIC8vIGFzIE5leHQuanMgdXNlcyBjaGlsZCBwcm9jZXNzZXMgZm9yIGRpZmZlcmVudCBidWlsZHNcbiAgICBpZiAoXG4gICAgICAhcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTkVYVF9QUklWQVRFX0JVSUxUICYmXG4gICAgICBwaGFzZSAhPT0gJ3BoYXNlLXByb2R1Y3Rpb24tc2VydmVyJ1xuICAgICkge1xuICAgICAgY29uc3Qgd29ya2Zsb3dCdWlsZGVyID0gYXdhaXQgZ2V0V29ya2Zsb3dCdWlsZGVyKCk7XG5cbiAgICAgIGF3YWl0IHdvcmtmbG93QnVpbGRlci5idWlsZCgpO1xuICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTkVYVF9QUklWQVRFX0JVSUxUID0gJzEnO1xuICAgIH1cblxuICAgIHJldHVybiBuZXh0Q29uZmlnO1xuICB9O1xufVxuIl19
|
package/dist/watch-ignore.js
CHANGED
|
@@ -78,7 +78,7 @@ function matcherWithout(entry, dropped) {
|
|
|
78
78
|
* applies them: a rule in a deeper `.gitignore` overrides a conflicting rule
|
|
79
79
|
* from a shallower one.
|
|
80
80
|
*
|
|
81
|
-
* Nested `.gitignore` files *below* `workingDir` are intentionally not read
|
|
81
|
+
* Nested `.gitignore` files *below* `workingDir` are intentionally not read;
|
|
82
82
|
* the {@link WATCH_IGNORED_PATHS_ENV} env var backstops anything they'd cover.
|
|
83
83
|
*/
|
|
84
84
|
function loadGitignoreMatchers(workingDir, projectRoot) {
|
|
@@ -147,7 +147,7 @@ function createWatchIgnorePredicate(options) {
|
|
|
147
147
|
const testEntry = (entry, rel, dropped) => {
|
|
148
148
|
const matcher = dropped ? matcherWithout(entry, dropped) : entry.matcher;
|
|
149
149
|
// Test the trailing-slash form too so a directory node itself matches a
|
|
150
|
-
// `dir/` gitignore rule (not just its children)
|
|
150
|
+
// `dir/` gitignore rule (not just its children); this lets the walk and
|
|
151
151
|
// chokidar prune the directory instead of descending into it.
|
|
152
152
|
const asFile = matcher.test(rel);
|
|
153
153
|
const asDir = matcher.test(`${rel}/`);
|
|
@@ -261,4 +261,4 @@ function createWatchIgnorePredicate(options) {
|
|
|
261
261
|
return walkGitignore(normalizedPath);
|
|
262
262
|
};
|
|
263
263
|
}
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gtaWdub3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dhdGNoLWlnbm9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF1Q0Esb0RBUUM7QUF5SEQsZ0VBNkpDO0FBclVELHFDQUF1QztBQUN2Qyx5Q0FBMkM7QUFDM0Msb0RBQTZDO0FBRTdDOzs7O0dBSUc7QUFDVSxRQUFBLDhCQUE4QixHQUFzQjtJQUMvRCxRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxVQUFVO0lBQ1YsV0FBVztJQUNYLFFBQVE7SUFDUixTQUFTO0lBQ1QsT0FBTztJQUNQLFVBQVU7SUFDVixTQUFTO0lBQ1QsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQix3QkFBd0I7Q0FDekIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ1UsUUFBQSx1QkFBdUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUUxRSxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRW5FOzs7R0FHRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLEtBQXlCO0lBQzVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sS0FBSztTQUNULEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNyQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQWNEOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBdUIsRUFBRSxPQUFvQjtJQUNuRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtB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QkFDeEQsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ25FLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgcG9zaXggfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGlnbm9yZSwgeyB0eXBlIElnbm9yZSB9IGZyb20gJ2lnbm9yZSc7XG5cbi8qKlxuICogRGlyZWN0b3J5LW5hbWUgZnJhZ21lbnRzIHRoYXQgYXJlIGFsd2F5cyBleGNsdWRlZCBmcm9tIHRoZSBkZXYgd2F0Y2hlcixcbiAqIHJlZ2FyZGxlc3Mgb2YgYC5naXRpZ25vcmVgLiBNYXRjaGVkIGFzIFBPU0lYIHN1YnN0cmluZ3Mgb2YgdGhlIGFic29sdXRlXG4gKiBwYXRoIChlLmcuIGAvbm9kZV9tb2R1bGVzL2AgbWF0Y2hlcyBhbnkgcGF0aCBjb250YWluaW5nIHRoYXQgc2VnbWVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVElOX0lHTk9SRURfUEFUSF9GUkFHTUVOVFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnLy5naXQvJyxcbiAgJy9ub2RlX21vZHVsZXMvJyxcbiAgJy8ubmV4dC8nLFxuICAnLy50dXJiby8nLFxuICAnLy52ZXJjZWwvJyxcbiAgJy9kaXN0LycsXG4gICcvYnVpbGQvJyxcbiAgJy9vdXQvJyxcbiAgJy8uY2FjaGUvJyxcbiAgJy8ueWFybi8nLFxuICAnLy5wbnBtLXN0b3JlLycsXG4gICcvLnBhcmNlbC1jYWNoZS8nLFxuICAnLy53ZWxsLWtub3duL3dvcmtmbG93LycsXG5dO1xuXG4vKipcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgbGV0cyBhIHByb2plY3QgYWRkIGV4dHJhIHBhdGggZnJhZ21lbnRzIHRvIHRoZVxuICogZGV2IHdhdGNoZXIgaWdub3JlIGxpc3QuIENvbW1hLXNlcGFyYXRlZDsgZWFjaCBlbnRyeSBpcyBtYXRjaGVkIGFzIGEgUE9TSVhcbiAqIHN1YnN0cmluZyBvZiB0aGUgYWJzb2x1dGUgcGF0aCwgZXhhY3RseSBsaWtlIHtAbGluayBCVUlMVElOX0lHTk9SRURfUEFUSF9GUkFHTUVOVFN9LlxuICogQWRkaXRpdmUgdG8gYC5naXRpZ25vcmVgIGFuZCB0aGUgYnVpbHQtaW4gbGlzdC4gRGV2LW1vZGUgb25seS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdBVENIX0lHTk9SRURfUEFUSFNfRU5WID0gJ1dPUktGTE9XX0RFVl9XQVRDSF9JR05PUkVEX1BBVEhTJztcblxuY29uc3QgdG9Qb3NpeCA9IChwYXRobmFtZTogc3RyaW5nKSA9PiBwYXRobmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbi8qKlxuICogUGFyc2UgdGhlIGNvbW1hLXNlcGFyYXRlZCB7QGxpbmsgV0FUQ0hfSUdOT1JFRF9QQVRIU19FTlZ9IHZhbHVlIGludG8gYSBsaXN0XG4gKiBvZiBQT1NJWCBwYXRoIGZyYWdtZW50cy4gV2hpdGVzcGFjZSBpcyB0cmltbWVkIGFuZCBlbXB0eSBlbnRyaWVzIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlnbm9yZWRQYXRoc0Vudih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiB2YWx1ZVxuICAgIC5zcGxpdCgnLCcpXG4gICAgLm1hcCgoZW50cnkpID0+IHRvUG9zaXgoZW50cnkudHJpbSgpKSlcbiAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubGVuZ3RoID4gMCk7XG59XG5cbmludGVyZmFjZSBHaXRpZ25vcmVNYXRjaGVyIHtcbiAgLyoqIFBPU0lYIGFic29sdXRlIGRpcmVjdG9yeSB0aGUgYC5naXRpZ25vcmVgIGxpdmVzIGluIChubyB0cmFpbGluZyBzbGFzaCkuICovXG4gIGRpcjogc3RyaW5nO1xuICBtYXRjaGVyOiBJZ25vcmU7XG4gIC8qKiBSYXcgcGF0dGVybiBsaW5lcywgdXNlZCB0byByZWJ1aWxkIHRoZSBtYXRjaGVyIHdpdGhvdXQgYSBuZXV0cmFsaXplZCBydWxlLiAqL1xuICBsaW5lczogc3RyaW5nW107XG4gIC8qKiBXaGV0aGVyIHRoaXMgZmlsZSBjb250YWlucyBhbnkgYCFgIHJlLWluY2x1c2lvbiBydWxlLiAqL1xuICBoYXNOZWdhdGlvbjogYm9vbGVhbjtcbiAgLyoqIE1hdGNoZXJzIHJlYnVpbHQgd2l0aCBzb21lIHJ1bGVzIGRyb3BwZWQsIGtleWVkIGJ5IHRoZSBkcm9wcGVkIHNldC4gKi9cbiAgZmlsdGVyZWQ6IE1hcDxzdHJpbmcsIElnbm9yZT47XG59XG5cbi8qKlxuICogUmVidWlsZCBhIG1hdGNoZXIgd2l0aCBgZHJvcHBlZGAgcGF0dGVybiBsaW5lcyByZW1vdmVkLiBVc2VkIHdoZW4gYSBydWxlXG4gKiBleGNsdWRlZCBhIGRpcmVjdG9yeSB0aGF0IGEgZGVlcGVyIGAuZ2l0aWdub3JlYCByZS1pbmNsdWRlZDogdGhhdCBydWxlIG11c3RcbiAqIHN0b3AgYXBwbHlpbmcgdG8gdGhlIHN1YnRyZWUsIHdoaWxlIGV2ZXJ5ICpvdGhlciogcnVsZSBpbiB0aGUgc2FtZSBmaWxlXG4gKiAoZS5nLiBhIGAqLnNlY3JldGAgdGhhdCBzdGlsbCBtYXRjaGVzIGEgZmlsZSBpbnNpZGUpIGtlZXBzIGFwcGx5aW5nLlxuICovXG5mdW5jdGlvbiBtYXRjaGVyV2l0aG91dChlbnRyeTogR2l0aWdub3JlTWF0Y2hlciwgZHJvcHBlZDogU2V0PHN0cmluZz4pOiBJZ25vcmUge1xuICBpZiAoZHJvcHBlZC5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGVudHJ5Lm1hdGNoZXI7XG4gIH1cbiAgY29uc3Qga2V5ID0gWy4uLmRyb3BwZWRdLnNvcnQoKS5qb2luKCdcXG4nKTtcbiAgY29uc3QgY2FjaGVkID0gZW50cnkuZmlsdGVyZWQuZ2V0KGtleSk7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG4gIGNvbnN0IHJlYnVpbHQgPSBpZ25vcmUoKS5hZGQoXG4gICAgZW50cnkubGluZXMuZmlsdGVyKChsaW5lKSA9PiAhZHJvcHBlZC5oYXMobGluZS50cmltKCkpKVxuICApO1xuICBlbnRyeS5maWx0ZXJlZC5zZXQoa2V5LCByZWJ1aWx0KTtcbiAgcmV0dXJuIHJlYnVpbHQ7XG59XG5cbi8qKlxuICogTG9hZCBgLmdpdGlnbm9yZWAgbWF0Y2hlcnMgZm9yIGB3b3JraW5nRGlyYCB1cCB0byBhbmQgaW5jbHVkaW5nXG4gKiBgcHJvamVjdFJvb3RgLiBJbiBhIG1vbm9yZXBvIHRoZSBsYXJnZXN0IGlnbm9yZWQgdHJlZXMgYXJlIHR5cGljYWxseSBsaXN0ZWRcbiAqIGF0IHRoZSB3b3Jrc3BhY2Ugcm9vdCwgYW5kIGFwcC1sZXZlbCBgLmdpdGlnbm9yZWAgZmlsZXMgYXJlIGNvdmVyZWQgdG9vLlxuICpcbiAqIFJldHVybmVkIG91dGVybW9zdC1maXJzdCAod29ya3NwYWNlIHJvb3Qg4oaSIGFwcCksIHdoaWNoIGlzIHRoZSBvcmRlciBnaXRcbiAqIGFwcGxpZXMgdGhlbTogYSBydWxlIGluIGEgZGVlcGVyIGAuZ2l0aWdub3JlYCBvdmVycmlkZXMgYSBjb25mbGljdGluZyBydWxlXG4gKiBmcm9tIGEgc2hhbGxvd2VyIG9uZS5cbiAqXG4gKiBOZXN0ZWQgYC5naXRpZ25vcmVgIGZpbGVzICpiZWxvdyogYHdvcmtpbmdEaXJgIGFyZSBpbnRlbnRpb25hbGx5IG5vdCByZWFkIOKAlFxuICogdGhlIHtAbGluayBXQVRDSF9JR05PUkVEX1BBVEhTX0VOVn0gZW52IHZhciBiYWNrc3RvcHMgYW55dGhpbmcgdGhleSdkIGNvdmVyLlxuICovXG5mdW5jdGlvbiBsb2FkR2l0aWdub3JlTWF0Y2hlcnMoXG4gIHdvcmtpbmdEaXI6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZ1xuKTogR2l0aWdub3JlTWF0Y2hlcltdIHtcbiAgY29uc3QgbWF0Y2hlcnM6IEdpdGlnbm9yZU1hdGNoZXJbXSA9IFtdO1xuICBjb25zdCBzdG9wQXQgPSB0b1Bvc2l4KHByb2plY3RSb290KTtcblxuICBsZXQgY3VycmVudCA9IHRvUG9zaXgod29ya2luZ0Rpcik7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbGV0IGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29udGVudCA9IHJlYWRGaWxlU3luYyhwb3NpeC5qb2luKGN1cnJlbnQsICcuZ2l0aWdub3JlJyksICd1dGYtOCcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29udGVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgICBtYXRjaGVycy5wdXNoKHtcbiAgICAgICAgZGlyOiBjdXJyZW50LFxuICAgICAgICBtYXRjaGVyOiBpZ25vcmUoKS5hZGQoY29udGVudCksXG4gICAgICAgIGxpbmVzLFxuICAgICAgICBoYXNOZWdhdGlvbjogbGluZXMuc29tZSgobGluZSkgPT4gbGluZS50cmltKCkuc3RhcnRzV2l0aCgnIScpKSxcbiAgICAgICAgZmlsdGVyZWQ6IG5ldyBNYXAoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50ID09PSBzdG9wQXQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpO1xuICAgIGlmIChwYXJlbnQgPT09IGN1cnJlbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjdXJyZW50ID0gcGFyZW50O1xuICB9XG5cbiAgLy8gQ29sbGVjdGVkIGlubmVybW9zdC1maXJzdCB3aGlsZSB3YWxraW5nIHVwOyBnaXQgcHJlY2VkZW5jZSBpc1xuICAvLyBvdXRlcm1vc3QtZmlyc3QsIHdpdGggZGVlcGVyIGZpbGVzIHdpbm5pbmcuXG4gIHJldHVybiBtYXRjaGVycy5yZXZlcnNlKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hJZ25vcmVPcHRpb25zIHtcbiAgLyoqIEFic29sdXRlIHBhdGggb2YgdGhlIGFwcCBkaXJlY3RvcnkgYmVpbmcgYnVpbHQuICovXG4gIHdvcmtpbmdEaXI6IHN0cmluZztcbiAgLyoqIEFic29sdXRlIHBhdGggb2YgdGhlIHdvcmtzcGFjZS9wcm9qZWN0IHJvb3QuIERlZmF1bHRzIHRvIGB3b3JraW5nRGlyYC4gKi9cbiAgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHRyYSBQT1NJWCBzdWJzdHJpbmcgZnJhZ21lbnRzIHRvIGlnbm9yZSwgaW4gYWRkaXRpb24gdG8gdGhlIGJ1aWx0LWluXG4gICAqIGxpc3QgYW5kIHRoZSB7QGxpbmsgV0FUQ0hfSUdOT1JFRF9QQVRIU19FTlZ9IGVudiB2YXIuIFVzZWQgYnkgdGhlIGNhbGxlclxuICAgKiBmb3IgYnVpbGQtdGltZSBwYXRocyBzdWNoIGFzIHRoZSBnZW5lcmF0ZWQgd29ya2Zsb3cgZGlyZWN0b3J5LlxuICAgKi9cbiAgZXh0cmFGcmFnbWVudHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIGZvciB0aGUge0BsaW5rIFdBVENIX0lHTk9SRURfUEFUSFNfRU5WfSBlbnYgdmFyLiBQcmltYXJpbHkgZm9yXG4gICAqIHRlc3Rpbmc7IGRlZmF1bHRzIHRvIGBwcm9jZXNzLmVudltXQVRDSF9JR05PUkVEX1BBVEhTX0VOVl1gLlxuICAgKi9cbiAgZW52SWdub3JlZFBhdGhzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBkZXYtd2F0Y2hlciBpZ25vcmUgcHJlZGljYXRlLiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gcmVjZWl2ZXMgYVxuICogUE9TSVgtbm9ybWFsaXplZCBhYnNvbHV0ZSBwYXRoIGFuZCByZXR1cm5zIGB0cnVlYCB3aGVuIHRoYXQgcGF0aCBzaG91bGQgYmVcbiAqIHBydW5lZCBmcm9tIGJvdGggdGhlIGluaXRpYWwgZGlyZWN0b3J5IHdhbGsgYW5kIHRoZSBjaG9raWRhciB3YXRjaCBzZXQuXG4gKlxuICogQSBwYXRoIGlzIGlnbm9yZWQgd2hlbiBpdCBtYXRjaGVzIGFueSBvZjpcbiAqIC0gYSBidWlsdC1pbiBmcmFnbWVudCAoe0BsaW5rIEJVSUxUSU5fSUdOT1JFRF9QQVRIX0ZSQUdNRU5UU30pIG9yIGNhbGxlclxuICogICBgZXh0cmFGcmFnbWVudHNgIChQT1NJWCBzdWJzdHJpbmcgbWF0Y2gpLFxuICogLSBhIHtAbGluayBXQVRDSF9JR05PUkVEX1BBVEhTX0VOVn0gZnJhZ21lbnQgKFBPU0lYIHN1YnN0cmluZyBtYXRjaCksXG4gKiAtIGEgYC5naXRpZ25vcmVgIHJ1bGUgZnJvbSBgd29ya2luZ0RpcmAgdXAgdG8gYHByb2plY3RSb290YC5cbiAqXG4gKiBNYXRjaGVycyBhcmUgYnVpbHQgb25jZSBoZXJlOyB0aGUgcmV0dXJuZWQgcHJlZGljYXRlIGlzIGhvdCAoY2FsbGVkIHBlciBwYXRoXG4gKiBkdXJpbmcgdHJhdmVyc2FsIGFuZCBwZXIgY2hva2lkYXIgZXZlbnQpIGFuZCBkb2VzIG5vIEkvTy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlKFxuICBvcHRpb25zOiBXYXRjaElnbm9yZU9wdGlvbnNcbik6IChub3JtYWxpemVkUGF0aDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290ID8/IG9wdGlvbnMud29ya2luZ0RpcjtcbiAgY29uc3QgZW52SWdub3JlZFBhdGhzID1cbiAgICBvcHRpb25zLmVudklnbm9yZWRQYXRocyA/PyBwcm9jZXNzLmVudltXQVRDSF9JR05PUkVEX1BBVEhTX0VOVl07XG5cbiAgY29uc3QgZnJhZ21lbnRzID0gW1xuICAgIC4uLkJVSUxUSU5fSUdOT1JFRF9QQVRIX0ZSQUdNRU5UUyxcbiAgICAuLi4ob3B0aW9ucy5leHRyYUZyYWdtZW50cyA/PyBbXSkubWFwKHRvUG9zaXgpLFxuICAgIC4uLnBhcnNlSWdub3JlZFBhdGhzRW52KGVudklnbm9yZWRQYXRocyksXG4gIF07XG5cbiAgY29uc3QgZ2l0aWdub3JlTWF0Y2hlcnMgPSBsb2FkR2l0aWdub3JlTWF0Y2hlcnMoXG4gICAgb3B0aW9ucy53b3JraW5nRGlyLFxuICAgIHByb2plY3RSb290XG4gICk7XG4gIC8vIFJlLWluY2x1c2lvbiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gc29tZSBmaWxlIGhhcyBhIGAhYCBydWxlLiBXaXRob3V0IG9uZSxcbiAgLy8gdGhlIGNoZWFwIGZsYXQgc2NhbiBiZWxvdyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmdWxsIHBlci1kaXJlY3Rvcnkgd2Fsay5cbiAgY29uc3QgYW55TmVnYXRpb24gPSBnaXRpZ25vcmVNYXRjaGVycy5zb21lKChlbnRyeSkgPT4gZW50cnkuaGFzTmVnYXRpb24pO1xuICBjb25zdCBvdXRlcm1vc3REaXIgPSBnaXRpZ25vcmVNYXRjaGVyc1swXT8uZGlyO1xuXG4gIC8qKiBUZXN0IG9uZSBwYXRoIGFnYWluc3Qgb25lIG1hdGNoZXIsIGFzIGJvdGggYSBmaWxlIGFuZCBhIGRpcmVjdG9yeSBub2RlLiAqL1xuICBjb25zdCB0ZXN0RW50cnkgPSAoXG4gICAgZW50cnk6IEdpdGlnbm9yZU1hdGNoZXIsXG4gICAgcmVsOiBzdHJpbmcsXG4gICAgZHJvcHBlZDogU2V0PHN0cmluZz4gfCB1bmRlZmluZWRcbiAgKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlciA9IGRyb3BwZWQgPyBtYXRjaGVyV2l0aG91dChlbnRyeSwgZHJvcHBlZCkgOiBlbnRyeS5tYXRjaGVyO1xuICAgIC8vIFRlc3QgdGhlIHRyYWlsaW5nLXNsYXNoIGZvcm0gdG9vIHNvIGEgZGlyZWN0b3J5IG5vZGUgaXRzZWxmIG1hdGNoZXMgYVxuICAgIC8vIGBkaXIvYCBnaXRpZ25vcmUgcnVsZSAobm90IGp1c3QgaXRzIGNoaWxkcmVuKSDigJQgdGhpcyBsZXRzIHRoZSB3YWxrIGFuZFxuICAgIC8vIGNob2tpZGFyIHBydW5lIHRoZSBkaXJlY3RvcnkgaW5zdGVhZCBvZiBkZXNjZW5kaW5nIGludG8gaXQuXG4gICAgY29uc3QgYXNGaWxlID0gbWF0Y2hlci50ZXN0KHJlbCk7XG4gICAgY29uc3QgYXNEaXIgPSBtYXRjaGVyLnRlc3QoYCR7cmVsfS9gKTtcbiAgICBpZiAoYXNGaWxlLmlnbm9yZWQpIHtcbiAgICAgIHJldHVybiB7IGlnbm9yZWQ6IHRydWUsIHBhdHRlcm46IGFzRmlsZS5ydWxlPy5wYXR0ZXJuIH07XG4gICAgfVxuICAgIGlmIChhc0Rpci5pZ25vcmVkKSB7XG4gICAgICByZXR1cm4geyBpZ25vcmVkOiB0cnVlLCBwYXR0ZXJuOiBhc0Rpci5ydWxlPy5wYXR0ZXJuIH07XG4gICAgfVxuICAgIGlmIChhc0ZpbGUudW5pZ25vcmVkIHx8IGFzRGlyLnVuaWdub3JlZCkge1xuICAgICAgcmV0dXJuIHsgaWdub3JlZDogZmFsc2UsIHBhdHRlcm46IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlIG9uZSBwYXRoIGxldmVsIGFnYWluc3QgZXZlcnkgYXBwbGljYWJsZSBgLmdpdGlnbm9yZWAsIGRlZXBlc3QgZmlsZVxuICAgKiBsYXN0IHNvIGl0IHdpbnMuIFJldHVybnMgdGhlIGxldmVsJ3MgdmVyZGljdCBwbHVzIHRoZSBydWxlcyB0aGF0IHZvdGVkIHRvXG4gICAqIGV4Y2x1ZGUgaXQsIHdoaWNoIHRoZSBjYWxsZXIgbmV1dHJhbGl6ZXMgaWYgdGhlIGxldmVsIGlzIHJlLWluY2x1ZGVkLlxuICAgKi9cbiAgY29uc3QgZGVjaWRlTGV2ZWwgPSAoXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgbmV1dHJhbGl6ZWQ6IE1hcDxudW1iZXIsIFNldDxzdHJpbmc+PlxuICApID0+IHtcbiAgICBsZXQgZGVjaXNpb246IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGV4Y2x1ZGVkQnk6IEFycmF5PHsgaW5kZXg6IG51bWJlcjsgcGF0dGVybjogc3RyaW5nIH0+ID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZ2l0aWdub3JlTWF0Y2hlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdpdGlnbm9yZU1hdGNoZXJzW2luZGV4XTtcbiAgICAgIGNvbnN0IHJlbCA9IHBvc2l4LnJlbGF0aXZlKGVudHJ5LmRpciwgcHJlZml4KTtcbiAgICAgIC8vIEVtcHR5IG1lYW5zIHRoZSBwYXRoICppcyogdGhlIGdpdGlnbm9yZSBkaXI7IGEgYC4uYCBwcmVmaXggbWVhbnMgaXQgaXNcbiAgICAgIC8vIG91dHNpZGUuIGBpZ25vcmVgIG9ubHkgYWNjZXB0cyByZWxhdGl2ZSwgaW4tdHJlZSBwYXRocy5cbiAgICAgIGlmIChyZWwgPT09ICcnIHx8IHJlbCA9PT0gJy4uJyB8fCByZWwuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXN0RW50cnkoZW50cnksIHJlbCwgbmV1dHJhbGl6ZWQuZ2V0KGluZGV4KSk7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdWx0Lmlnbm9yZWQpIHtcbiAgICAgICAgZGVjaXNpb24gPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoZGVjaXNpb24gIT09IHRydWUpIHtcbiAgICAgICAgZXhjbHVkZWRCeSA9IFtdO1xuICAgICAgfVxuICAgICAgZGVjaXNpb24gPSB0cnVlO1xuICAgICAgaWYgKHJlc3VsdC5wYXR0ZXJuKSB7XG4gICAgICAgIGV4Y2x1ZGVkQnkucHVzaCh7IGluZGV4LCBwYXR0ZXJuOiByZXN1bHQucGF0dGVybiB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBkZWNpc2lvbiwgZXhjbHVkZWRCeSB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBXYWxrIHRoZSBwYXRoIG9uZSBkaXJlY3Rvcnkgc2VnbWVudCBhdCBhIHRpbWUsIHRoZSB3YXkgZ2l0IGRvZXMuIEF0IGVhY2hcbiAgICogbGV2ZWwgdGhlIGRlZXBlc3QgYC5naXRpZ25vcmVgIHdpdGggYW4gb3BpbmlvbiB3aW5zOyBpZiB0aGF0IHZlcmRpY3QgaXNcbiAgICogXCJpZ25vcmVkXCIgZ2l0IHN0b3BzIGRlc2NlbmRpbmcsIHNvIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIFdoZW4gYSBsZXZlbCBpcyByZS1pbmNsdWRlZCBhZnRlciBhIHNoYWxsb3dlciBmaWxlIGV4Y2x1ZGVkIGl0LCB0aGUgcnVsZVxuICAgKiB0aGF0IGRpZCB0aGUgZXhjbHVkaW5nIGlzIG5ldXRyYWxpemVkIGZvciB0aGUgcmVzdCBvZiB0aGUgd2Fsay4gVGhhdCBpc1xuICAgKiB3aGF0IGxldHMgcm9vdCBgZ2VuZXJhdGVkL2AgKyBhcHAgYCFnZW5lcmF0ZWQvYCB3YXRjaCBgYXBwL2dlbmVyYXRlZC94LnRzYFxuICAgKiB3aGlsZSBhIHNpYmxpbmcgcm9vdCBydWxlIHN1Y2ggYXMgYCouc2VjcmV0YCBzdGlsbCBleGNsdWRlc1xuICAgKiBgYXBwL2dlbmVyYXRlZC9hLnNlY3JldGAuXG4gICAqL1xuICBjb25zdCB3YWxrR2l0aWdub3JlID0gKG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIW91dGVybW9zdERpcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCByZWxUb0Jhc2UgPSBwb3NpeC5yZWxhdGl2ZShvdXRlcm1vc3REaXIsIG5vcm1hbGl6ZWRQYXRoKTtcbiAgICBpZiAocmVsVG9CYXNlID09PSAnJyB8fCByZWxUb0Jhc2UgPT09ICcuLicgfHwgcmVsVG9CYXNlLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmV1dHJhbGl6ZWQgPSBuZXcgTWFwPG51bWJlciwgU2V0PHN0cmluZz4+KCk7XG4gICAgbGV0IHByZWZpeCA9IG91dGVybW9zdERpcjtcblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiByZWxUb0Jhc2Uuc3BsaXQoJy8nKSkge1xuICAgICAgcHJlZml4ID0gYCR7cHJlZml4fS8ke3NlZ21lbnR9YDtcbiAgICAgIGNvbnN0IHsgZGVjaXNpb24sIGV4Y2x1ZGVkQnkgfSA9IGRlY2lkZUxldmVsKHByZWZpeCwgbmV1dHJhbGl6ZWQpO1xuXG4gICAgICBpZiAoZGVjaXNpb24gPT09IHRydWUpIHtcbiAgICAgICAgLy8gR2l0IGRvZXMgbm90IGRlc2NlbmQgaW50byBhbiBleGNsdWRlZCBkaXJlY3RvcnkuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGRlY2lzaW9uID09PSBmYWxzZSkge1xuICAgICAgICAvLyBUaGlzIGxldmVsIHdhcyByZS1pbmNsdWRlZDsgdGhlIHJ1bGVzIHRoYXQgZXhjbHVkZWQgaXQgbXVzdCBub3RcbiAgICAgICAgLy8gcmVzdXJyZWN0IGZvciBhbnl0aGluZyBiZW5lYXRoIGl0LlxuICAgICAgICBmb3IgKGNvbnN0IHsgaW5kZXgsIHBhdHRlcm4gfSBvZiBleGNsdWRlZEJ5KSB7XG4gICAgICAgICAgY29uc3QgZHJvcHBlZCA9IG5ldXRyYWxpemVkLmdldChpbmRleCkgPz8gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgZHJvcHBlZC5hZGQocGF0dGVybik7XG4gICAgICAgICAgbmV1dHJhbGl6ZWQuc2V0KGluZGV4LCBkcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXR1cm4gKG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAvLyBCdWlsdC1pbiBhbmQgZW52LXZhciBmcmFnbWVudHMgYXJlIGhhcmQgZXhjbHVkZXM6IHRoZXkgYXJlIGRlbGliZXJhdGVseVxuICAgIC8vIG5vdCBzdWJqZWN0IHRvIGdpdGlnbm9yZSBuZWdhdGlvbiwgc28gYSBzdHJheSBgIWAgcnVsZSBjYW5ub3QgZHJhZ1xuICAgIC8vIGBub2RlX21vZHVsZXNgIG9yIHRoZSBnZW5lcmF0ZWQgZGlyZWN0b3J5IGJhY2sgaW50byB0aGUgd2F0Y2ggc2V0LlxuICAgIGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG4gICAgICBpZiAobm9ybWFsaXplZFBhdGguaW5jbHVkZXMoZnJhZ21lbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghYW55TmVnYXRpb24pIHtcbiAgICAgIC8vIEZhc3QgcGF0aDogbm8gcmUtaW5jbHVzaW9uIGFueXdoZXJlLCBzbyB0aGUgZmlyc3QgbWF0Y2ggZGVjaWRlcy5cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZ2l0aWdub3JlTWF0Y2hlcnMpIHtcbiAgICAgICAgY29uc3QgcmVsID0gcG9zaXgucmVsYXRpdmUoZW50cnkuZGlyLCBub3JtYWxpemVkUGF0aCk7XG4gICAgICAgIGlmIChyZWwgPT09ICcnIHx8IHJlbCA9PT0gJy4uJyB8fCByZWwuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkubWF0Y2hlci5pZ25vcmVzKHJlbCkgfHwgZW50cnkubWF0Y2hlci5pZ25vcmVzKGAke3JlbH0vYCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB3YWxrR2l0aWdub3JlKG5vcm1hbGl6ZWRQYXRoKTtcbiAgfTtcbn1cbiJdfQ==
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2gtaWdub3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dhdGNoLWlnbm9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF1Q0Esb0RBUUM7QUF5SEQsZ0VBNkpDO0FBclVELHFDQUF1QztBQUN2Qyx5Q0FBMkM7QUFDM0Msb0RBQTZDO0FBRTdDOzs7O0dBSUc7QUFDVSxRQUFBLDhCQUE4QixHQUFzQjtJQUMvRCxRQUFRO0lBQ1IsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCxVQUFVO0lBQ1YsV0FBVztJQUNYLFFBQVE7SUFDUixTQUFTO0lBQ1QsT0FBTztJQUNQLFVBQVU7SUFDVixTQUFTO0lBQ1QsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQix3QkFBd0I7Q0FDekIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ1UsUUFBQSx1QkFBdUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUUxRSxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRW5FOzs7R0FHRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLEtBQXlCO0lBQzVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sS0FBSztTQUNULEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNyQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQWNEOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBdUIsRUFBRSxPQUFvQjtJQUNuRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtB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QkFDeEQsU0FBUztnQkFDWCxDQUFDO2dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ25FLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgcG9zaXggfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IGlnbm9yZSwgeyB0eXBlIElnbm9yZSB9IGZyb20gJ2lnbm9yZSc7XG5cbi8qKlxuICogRGlyZWN0b3J5LW5hbWUgZnJhZ21lbnRzIHRoYXQgYXJlIGFsd2F5cyBleGNsdWRlZCBmcm9tIHRoZSBkZXYgd2F0Y2hlcixcbiAqIHJlZ2FyZGxlc3Mgb2YgYC5naXRpZ25vcmVgLiBNYXRjaGVkIGFzIFBPU0lYIHN1YnN0cmluZ3Mgb2YgdGhlIGFic29sdXRlXG4gKiBwYXRoIChlLmcuIGAvbm9kZV9tb2R1bGVzL2AgbWF0Y2hlcyBhbnkgcGF0aCBjb250YWluaW5nIHRoYXQgc2VnbWVudCkuXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVElOX0lHTk9SRURfUEFUSF9GUkFHTUVOVFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnLy5naXQvJyxcbiAgJy9ub2RlX21vZHVsZXMvJyxcbiAgJy8ubmV4dC8nLFxuICAnLy50dXJiby8nLFxuICAnLy52ZXJjZWwvJyxcbiAgJy9kaXN0LycsXG4gICcvYnVpbGQvJyxcbiAgJy9vdXQvJyxcbiAgJy8uY2FjaGUvJyxcbiAgJy8ueWFybi8nLFxuICAnLy5wbnBtLXN0b3JlLycsXG4gICcvLnBhcmNlbC1jYWNoZS8nLFxuICAnLy53ZWxsLWtub3duL3dvcmtmbG93LycsXG5dO1xuXG4vKipcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgbGV0cyBhIHByb2plY3QgYWRkIGV4dHJhIHBhdGggZnJhZ21lbnRzIHRvIHRoZVxuICogZGV2IHdhdGNoZXIgaWdub3JlIGxpc3QuIENvbW1hLXNlcGFyYXRlZDsgZWFjaCBlbnRyeSBpcyBtYXRjaGVkIGFzIGEgUE9TSVhcbiAqIHN1YnN0cmluZyBvZiB0aGUgYWJzb2x1dGUgcGF0aCwgZXhhY3RseSBsaWtlIHtAbGluayBCVUlMVElOX0lHTk9SRURfUEFUSF9GUkFHTUVOVFN9LlxuICogQWRkaXRpdmUgdG8gYC5naXRpZ25vcmVgIGFuZCB0aGUgYnVpbHQtaW4gbGlzdC4gRGV2LW1vZGUgb25seS5cbiAqL1xuZXhwb3J0IGNvbnN0IFdBVENIX0lHTk9SRURfUEFUSFNfRU5WID0gJ1dPUktGTE9XX0RFVl9XQVRDSF9JR05PUkVEX1BBVEhTJztcblxuY29uc3QgdG9Qb3NpeCA9IChwYXRobmFtZTogc3RyaW5nKSA9PiBwYXRobmFtZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbi8qKlxuICogUGFyc2UgdGhlIGNvbW1hLXNlcGFyYXRlZCB7QGxpbmsgV0FUQ0hfSUdOT1JFRF9QQVRIU19FTlZ9IHZhbHVlIGludG8gYSBsaXN0XG4gKiBvZiBQT1NJWCBwYXRoIGZyYWdtZW50cy4gV2hpdGVzcGFjZSBpcyB0cmltbWVkIGFuZCBlbXB0eSBlbnRyaWVzIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUlnbm9yZWRQYXRoc0Vudih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiB2YWx1ZVxuICAgIC5zcGxpdCgnLCcpXG4gICAgLm1hcCgoZW50cnkpID0+IHRvUG9zaXgoZW50cnkudHJpbSgpKSlcbiAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubGVuZ3RoID4gMCk7XG59XG5cbmludGVyZmFjZSBHaXRpZ25vcmVNYXRjaGVyIHtcbiAgLyoqIFBPU0lYIGFic29sdXRlIGRpcmVjdG9yeSB0aGUgYC5naXRpZ25vcmVgIGxpdmVzIGluIChubyB0cmFpbGluZyBzbGFzaCkuICovXG4gIGRpcjogc3RyaW5nO1xuICBtYXRjaGVyOiBJZ25vcmU7XG4gIC8qKiBSYXcgcGF0dGVybiBsaW5lcywgdXNlZCB0byByZWJ1aWxkIHRoZSBtYXRjaGVyIHdpdGhvdXQgYSBuZXV0cmFsaXplZCBydWxlLiAqL1xuICBsaW5lczogc3RyaW5nW107XG4gIC8qKiBXaGV0aGVyIHRoaXMgZmlsZSBjb250YWlucyBhbnkgYCFgIHJlLWluY2x1c2lvbiBydWxlLiAqL1xuICBoYXNOZWdhdGlvbjogYm9vbGVhbjtcbiAgLyoqIE1hdGNoZXJzIHJlYnVpbHQgd2l0aCBzb21lIHJ1bGVzIGRyb3BwZWQsIGtleWVkIGJ5IHRoZSBkcm9wcGVkIHNldC4gKi9cbiAgZmlsdGVyZWQ6IE1hcDxzdHJpbmcsIElnbm9yZT47XG59XG5cbi8qKlxuICogUmVidWlsZCBhIG1hdGNoZXIgd2l0aCBgZHJvcHBlZGAgcGF0dGVybiBsaW5lcyByZW1vdmVkLiBVc2VkIHdoZW4gYSBydWxlXG4gKiBleGNsdWRlZCBhIGRpcmVjdG9yeSB0aGF0IGEgZGVlcGVyIGAuZ2l0aWdub3JlYCByZS1pbmNsdWRlZDogdGhhdCBydWxlIG11c3RcbiAqIHN0b3AgYXBwbHlpbmcgdG8gdGhlIHN1YnRyZWUsIHdoaWxlIGV2ZXJ5ICpvdGhlciogcnVsZSBpbiB0aGUgc2FtZSBmaWxlXG4gKiAoZS5nLiBhIGAqLnNlY3JldGAgdGhhdCBzdGlsbCBtYXRjaGVzIGEgZmlsZSBpbnNpZGUpIGtlZXBzIGFwcGx5aW5nLlxuICovXG5mdW5jdGlvbiBtYXRjaGVyV2l0aG91dChlbnRyeTogR2l0aWdub3JlTWF0Y2hlciwgZHJvcHBlZDogU2V0PHN0cmluZz4pOiBJZ25vcmUge1xuICBpZiAoZHJvcHBlZC5zaXplID09PSAwKSB7XG4gICAgcmV0dXJuIGVudHJ5Lm1hdGNoZXI7XG4gIH1cbiAgY29uc3Qga2V5ID0gWy4uLmRyb3BwZWRdLnNvcnQoKS5qb2luKCdcXG4nKTtcbiAgY29uc3QgY2FjaGVkID0gZW50cnkuZmlsdGVyZWQuZ2V0KGtleSk7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG4gIGNvbnN0IHJlYnVpbHQgPSBpZ25vcmUoKS5hZGQoXG4gICAgZW50cnkubGluZXMuZmlsdGVyKChsaW5lKSA9PiAhZHJvcHBlZC5oYXMobGluZS50cmltKCkpKVxuICApO1xuICBlbnRyeS5maWx0ZXJlZC5zZXQoa2V5LCByZWJ1aWx0KTtcbiAgcmV0dXJuIHJlYnVpbHQ7XG59XG5cbi8qKlxuICogTG9hZCBgLmdpdGlnbm9yZWAgbWF0Y2hlcnMgZm9yIGB3b3JraW5nRGlyYCB1cCB0byBhbmQgaW5jbHVkaW5nXG4gKiBgcHJvamVjdFJvb3RgLiBJbiBhIG1vbm9yZXBvIHRoZSBsYXJnZXN0IGlnbm9yZWQgdHJlZXMgYXJlIHR5cGljYWxseSBsaXN0ZWRcbiAqIGF0IHRoZSB3b3Jrc3BhY2Ugcm9vdCwgYW5kIGFwcC1sZXZlbCBgLmdpdGlnbm9yZWAgZmlsZXMgYXJlIGNvdmVyZWQgdG9vLlxuICpcbiAqIFJldHVybmVkIG91dGVybW9zdC1maXJzdCAod29ya3NwYWNlIHJvb3Qg4oaSIGFwcCksIHdoaWNoIGlzIHRoZSBvcmRlciBnaXRcbiAqIGFwcGxpZXMgdGhlbTogYSBydWxlIGluIGEgZGVlcGVyIGAuZ2l0aWdub3JlYCBvdmVycmlkZXMgYSBjb25mbGljdGluZyBydWxlXG4gKiBmcm9tIGEgc2hhbGxvd2VyIG9uZS5cbiAqXG4gKiBOZXN0ZWQgYC5naXRpZ25vcmVgIGZpbGVzICpiZWxvdyogYHdvcmtpbmdEaXJgIGFyZSBpbnRlbnRpb25hbGx5IG5vdCByZWFkO1xuICogdGhlIHtAbGluayBXQVRDSF9JR05PUkVEX1BBVEhTX0VOVn0gZW52IHZhciBiYWNrc3RvcHMgYW55dGhpbmcgdGhleSdkIGNvdmVyLlxuICovXG5mdW5jdGlvbiBsb2FkR2l0aWdub3JlTWF0Y2hlcnMoXG4gIHdvcmtpbmdEaXI6IHN0cmluZyxcbiAgcHJvamVjdFJvb3Q6IHN0cmluZ1xuKTogR2l0aWdub3JlTWF0Y2hlcltdIHtcbiAgY29uc3QgbWF0Y2hlcnM6IEdpdGlnbm9yZU1hdGNoZXJbXSA9IFtdO1xuICBjb25zdCBzdG9wQXQgPSB0b1Bvc2l4KHByb2plY3RSb290KTtcblxuICBsZXQgY3VycmVudCA9IHRvUG9zaXgod29ya2luZ0Rpcik7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgbGV0IGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29udGVudCA9IHJlYWRGaWxlU3luYyhwb3NpeC5qb2luKGN1cnJlbnQsICcuZ2l0aWdub3JlJyksICd1dGYtOCcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29udGVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgICBtYXRjaGVycy5wdXNoKHtcbiAgICAgICAgZGlyOiBjdXJyZW50LFxuICAgICAgICBtYXRjaGVyOiBpZ25vcmUoKS5hZGQoY29udGVudCksXG4gICAgICAgIGxpbmVzLFxuICAgICAgICBoYXNOZWdhdGlvbjogbGluZXMuc29tZSgobGluZSkgPT4gbGluZS50cmltKCkuc3RhcnRzV2l0aCgnIScpKSxcbiAgICAgICAgZmlsdGVyZWQ6IG5ldyBNYXAoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50ID09PSBzdG9wQXQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGN1cnJlbnQpO1xuICAgIGlmIChwYXJlbnQgPT09IGN1cnJlbnQpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjdXJyZW50ID0gcGFyZW50O1xuICB9XG5cbiAgLy8gQ29sbGVjdGVkIGlubmVybW9zdC1maXJzdCB3aGlsZSB3YWxraW5nIHVwOyBnaXQgcHJlY2VkZW5jZSBpc1xuICAvLyBvdXRlcm1vc3QtZmlyc3QsIHdpdGggZGVlcGVyIGZpbGVzIHdpbm5pbmcuXG4gIHJldHVybiBtYXRjaGVycy5yZXZlcnNlKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2F0Y2hJZ25vcmVPcHRpb25zIHtcbiAgLyoqIEFic29sdXRlIHBhdGggb2YgdGhlIGFwcCBkaXJlY3RvcnkgYmVpbmcgYnVpbHQuICovXG4gIHdvcmtpbmdEaXI6IHN0cmluZztcbiAgLyoqIEFic29sdXRlIHBhdGggb2YgdGhlIHdvcmtzcGFjZS9wcm9qZWN0IHJvb3QuIERlZmF1bHRzIHRvIGB3b3JraW5nRGlyYC4gKi9cbiAgcHJvamVjdFJvb3Q/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHRyYSBQT1NJWCBzdWJzdHJpbmcgZnJhZ21lbnRzIHRvIGlnbm9yZSwgaW4gYWRkaXRpb24gdG8gdGhlIGJ1aWx0LWluXG4gICAqIGxpc3QgYW5kIHRoZSB7QGxpbmsgV0FUQ0hfSUdOT1JFRF9QQVRIU19FTlZ9IGVudiB2YXIuIFVzZWQgYnkgdGhlIGNhbGxlclxuICAgKiBmb3IgYnVpbGQtdGltZSBwYXRocyBzdWNoIGFzIHRoZSBnZW5lcmF0ZWQgd29ya2Zsb3cgZGlyZWN0b3J5LlxuICAgKi9cbiAgZXh0cmFGcmFnbWVudHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIGZvciB0aGUge0BsaW5rIFdBVENIX0lHTk9SRURfUEFUSFNfRU5WfSBlbnYgdmFyLiBQcmltYXJpbHkgZm9yXG4gICAqIHRlc3Rpbmc7IGRlZmF1bHRzIHRvIGBwcm9jZXNzLmVudltXQVRDSF9JR05PUkVEX1BBVEhTX0VOVl1gLlxuICAgKi9cbiAgZW52SWdub3JlZFBhdGhzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBkZXYtd2F0Y2hlciBpZ25vcmUgcHJlZGljYXRlLiBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gcmVjZWl2ZXMgYVxuICogUE9TSVgtbm9ybWFsaXplZCBhYnNvbHV0ZSBwYXRoIGFuZCByZXR1cm5zIGB0cnVlYCB3aGVuIHRoYXQgcGF0aCBzaG91bGQgYmVcbiAqIHBydW5lZCBmcm9tIGJvdGggdGhlIGluaXRpYWwgZGlyZWN0b3J5IHdhbGsgYW5kIHRoZSBjaG9raWRhciB3YXRjaCBzZXQuXG4gKlxuICogQSBwYXRoIGlzIGlnbm9yZWQgd2hlbiBpdCBtYXRjaGVzIGFueSBvZjpcbiAqIC0gYSBidWlsdC1pbiBmcmFnbWVudCAoe0BsaW5rIEJVSUxUSU5fSUdOT1JFRF9QQVRIX0ZSQUdNRU5UU30pIG9yIGNhbGxlclxuICogICBgZXh0cmFGcmFnbWVudHNgIChQT1NJWCBzdWJzdHJpbmcgbWF0Y2gpLFxuICogLSBhIHtAbGluayBXQVRDSF9JR05PUkVEX1BBVEhTX0VOVn0gZnJhZ21lbnQgKFBPU0lYIHN1YnN0cmluZyBtYXRjaCksXG4gKiAtIGEgYC5naXRpZ25vcmVgIHJ1bGUgZnJvbSBgd29ya2luZ0RpcmAgdXAgdG8gYHByb2plY3RSb290YC5cbiAqXG4gKiBNYXRjaGVycyBhcmUgYnVpbHQgb25jZSBoZXJlOyB0aGUgcmV0dXJuZWQgcHJlZGljYXRlIGlzIGhvdCAoY2FsbGVkIHBlciBwYXRoXG4gKiBkdXJpbmcgdHJhdmVyc2FsIGFuZCBwZXIgY2hva2lkYXIgZXZlbnQpIGFuZCBkb2VzIG5vIEkvTy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhdGNoSWdub3JlUHJlZGljYXRlKFxuICBvcHRpb25zOiBXYXRjaElnbm9yZU9wdGlvbnNcbik6IChub3JtYWxpemVkUGF0aDogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290ID8/IG9wdGlvbnMud29ya2luZ0RpcjtcbiAgY29uc3QgZW52SWdub3JlZFBhdGhzID1cbiAgICBvcHRpb25zLmVudklnbm9yZWRQYXRocyA/PyBwcm9jZXNzLmVudltXQVRDSF9JR05PUkVEX1BBVEhTX0VOVl07XG5cbiAgY29uc3QgZnJhZ21lbnRzID0gW1xuICAgIC4uLkJVSUxUSU5fSUdOT1JFRF9QQVRIX0ZSQUdNRU5UUyxcbiAgICAuLi4ob3B0aW9ucy5leHRyYUZyYWdtZW50cyA/PyBbXSkubWFwKHRvUG9zaXgpLFxuICAgIC4uLnBhcnNlSWdub3JlZFBhdGhzRW52KGVudklnbm9yZWRQYXRocyksXG4gIF07XG5cbiAgY29uc3QgZ2l0aWdub3JlTWF0Y2hlcnMgPSBsb2FkR2l0aWdub3JlTWF0Y2hlcnMoXG4gICAgb3B0aW9ucy53b3JraW5nRGlyLFxuICAgIHByb2plY3RSb290XG4gICk7XG4gIC8vIFJlLWluY2x1c2lvbiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gc29tZSBmaWxlIGhhcyBhIGAhYCBydWxlLiBXaXRob3V0IG9uZSxcbiAgLy8gdGhlIGNoZWFwIGZsYXQgc2NhbiBiZWxvdyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmdWxsIHBlci1kaXJlY3Rvcnkgd2Fsay5cbiAgY29uc3QgYW55TmVnYXRpb24gPSBnaXRpZ25vcmVNYXRjaGVycy5zb21lKChlbnRyeSkgPT4gZW50cnkuaGFzTmVnYXRpb24pO1xuICBjb25zdCBvdXRlcm1vc3REaXIgPSBnaXRpZ25vcmVNYXRjaGVyc1swXT8uZGlyO1xuXG4gIC8qKiBUZXN0IG9uZSBwYXRoIGFnYWluc3Qgb25lIG1hdGNoZXIsIGFzIGJvdGggYSBmaWxlIGFuZCBhIGRpcmVjdG9yeSBub2RlLiAqL1xuICBjb25zdCB0ZXN0RW50cnkgPSAoXG4gICAgZW50cnk6IEdpdGlnbm9yZU1hdGNoZXIsXG4gICAgcmVsOiBzdHJpbmcsXG4gICAgZHJvcHBlZDogU2V0PHN0cmluZz4gfCB1bmRlZmluZWRcbiAgKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlciA9IGRyb3BwZWQgPyBtYXRjaGVyV2l0aG91dChlbnRyeSwgZHJvcHBlZCkgOiBlbnRyeS5tYXRjaGVyO1xuICAgIC8vIFRlc3QgdGhlIHRyYWlsaW5nLXNsYXNoIGZvcm0gdG9vIHNvIGEgZGlyZWN0b3J5IG5vZGUgaXRzZWxmIG1hdGNoZXMgYVxuICAgIC8vIGBkaXIvYCBnaXRpZ25vcmUgcnVsZSAobm90IGp1c3QgaXRzIGNoaWxkcmVuKTsgdGhpcyBsZXRzIHRoZSB3YWxrIGFuZFxuICAgIC8vIGNob2tpZGFyIHBydW5lIHRoZSBkaXJlY3RvcnkgaW5zdGVhZCBvZiBkZXNjZW5kaW5nIGludG8gaXQuXG4gICAgY29uc3QgYXNGaWxlID0gbWF0Y2hlci50ZXN0KHJlbCk7XG4gICAgY29uc3QgYXNEaXIgPSBtYXRjaGVyLnRlc3QoYCR7cmVsfS9gKTtcbiAgICBpZiAoYXNGaWxlLmlnbm9yZWQpIHtcbiAgICAgIHJldHVybiB7IGlnbm9yZWQ6IHRydWUsIHBhdHRlcm46IGFzRmlsZS5ydWxlPy5wYXR0ZXJuIH07XG4gICAgfVxuICAgIGlmIChhc0Rpci5pZ25vcmVkKSB7XG4gICAgICByZXR1cm4geyBpZ25vcmVkOiB0cnVlLCBwYXR0ZXJuOiBhc0Rpci5ydWxlPy5wYXR0ZXJuIH07XG4gICAgfVxuICAgIGlmIChhc0ZpbGUudW5pZ25vcmVkIHx8IGFzRGlyLnVuaWdub3JlZCkge1xuICAgICAgcmV0dXJuIHsgaWdub3JlZDogZmFsc2UsIHBhdHRlcm46IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlIG9uZSBwYXRoIGxldmVsIGFnYWluc3QgZXZlcnkgYXBwbGljYWJsZSBgLmdpdGlnbm9yZWAsIGRlZXBlc3QgZmlsZVxuICAgKiBsYXN0IHNvIGl0IHdpbnMuIFJldHVybnMgdGhlIGxldmVsJ3MgdmVyZGljdCBwbHVzIHRoZSBydWxlcyB0aGF0IHZvdGVkIHRvXG4gICAqIGV4Y2x1ZGUgaXQsIHdoaWNoIHRoZSBjYWxsZXIgbmV1dHJhbGl6ZXMgaWYgdGhlIGxldmVsIGlzIHJlLWluY2x1ZGVkLlxuICAgKi9cbiAgY29uc3QgZGVjaWRlTGV2ZWwgPSAoXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgbmV1dHJhbGl6ZWQ6IE1hcDxudW1iZXIsIFNldDxzdHJpbmc+PlxuICApID0+IHtcbiAgICBsZXQgZGVjaXNpb246IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGV4Y2x1ZGVkQnk6IEFycmF5PHsgaW5kZXg6IG51bWJlcjsgcGF0dGVybjogc3RyaW5nIH0+ID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZ2l0aWdub3JlTWF0Y2hlcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdpdGlnbm9yZU1hdGNoZXJzW2luZGV4XTtcbiAgICAgIGNvbnN0IHJlbCA9IHBvc2l4LnJlbGF0aXZlKGVudHJ5LmRpciwgcHJlZml4KTtcbiAgICAgIC8vIEVtcHR5IG1lYW5zIHRoZSBwYXRoICppcyogdGhlIGdpdGlnbm9yZSBkaXI7IGEgYC4uYCBwcmVmaXggbWVhbnMgaXQgaXNcbiAgICAgIC8vIG91dHNpZGUuIGBpZ25vcmVgIG9ubHkgYWNjZXB0cyByZWxhdGl2ZSwgaW4tdHJlZSBwYXRocy5cbiAgICAgIGlmIChyZWwgPT09ICcnIHx8IHJlbCA9PT0gJy4uJyB8fCByZWwuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN1bHQgPSB0ZXN0RW50cnkoZW50cnksIHJlbCwgbmV1dHJhbGl6ZWQuZ2V0KGluZGV4KSk7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVzdWx0Lmlnbm9yZWQpIHtcbiAgICAgICAgZGVjaXNpb24gPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoZGVjaXNpb24gIT09IHRydWUpIHtcbiAgICAgICAgZXhjbHVkZWRCeSA9IFtdO1xuICAgICAgfVxuICAgICAgZGVjaXNpb24gPSB0cnVlO1xuICAgICAgaWYgKHJlc3VsdC5wYXR0ZXJuKSB7XG4gICAgICAgIGV4Y2x1ZGVkQnkucHVzaCh7IGluZGV4LCBwYXR0ZXJuOiByZXN1bHQucGF0dGVybiB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBkZWNpc2lvbiwgZXhjbHVkZWRCeSB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBXYWxrIHRoZSBwYXRoIG9uZSBkaXJlY3Rvcnkgc2VnbWVudCBhdCBhIHRpbWUsIHRoZSB3YXkgZ2l0IGRvZXMuIEF0IGVhY2hcbiAgICogbGV2ZWwgdGhlIGRlZXBlc3QgYC5naXRpZ25vcmVgIHdpdGggYW4gb3BpbmlvbiB3aW5zOyBpZiB0aGF0IHZlcmRpY3QgaXNcbiAgICogXCJpZ25vcmVkXCIgZ2l0IHN0b3BzIGRlc2NlbmRpbmcsIHNvIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIFdoZW4gYSBsZXZlbCBpcyByZS1pbmNsdWRlZCBhZnRlciBhIHNoYWxsb3dlciBmaWxlIGV4Y2x1ZGVkIGl0LCB0aGUgcnVsZVxuICAgKiB0aGF0IGRpZCB0aGUgZXhjbHVkaW5nIGlzIG5ldXRyYWxpemVkIGZvciB0aGUgcmVzdCBvZiB0aGUgd2Fsay4gVGhhdCBpc1xuICAgKiB3aGF0IGxldHMgcm9vdCBgZ2VuZXJhdGVkL2AgKyBhcHAgYCFnZW5lcmF0ZWQvYCB3YXRjaCBgYXBwL2dlbmVyYXRlZC94LnRzYFxuICAgKiB3aGlsZSBhIHNpYmxpbmcgcm9vdCBydWxlIHN1Y2ggYXMgYCouc2VjcmV0YCBzdGlsbCBleGNsdWRlc1xuICAgKiBgYXBwL2dlbmVyYXRlZC9hLnNlY3JldGAuXG4gICAqL1xuICBjb25zdCB3YWxrR2l0aWdub3JlID0gKG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIW91dGVybW9zdERpcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCByZWxUb0Jhc2UgPSBwb3NpeC5yZWxhdGl2ZShvdXRlcm1vc3REaXIsIG5vcm1hbGl6ZWRQYXRoKTtcbiAgICBpZiAocmVsVG9CYXNlID09PSAnJyB8fCByZWxUb0Jhc2UgPT09ICcuLicgfHwgcmVsVG9CYXNlLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmV1dHJhbGl6ZWQgPSBuZXcgTWFwPG51bWJlciwgU2V0PHN0cmluZz4+KCk7XG4gICAgbGV0IHByZWZpeCA9IG91dGVybW9zdERpcjtcblxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiByZWxUb0Jhc2Uuc3BsaXQoJy8nKSkge1xuICAgICAgcHJlZml4ID0gYCR7cHJlZml4fS8ke3NlZ21lbnR9YDtcbiAgICAgIGNvbnN0IHsgZGVjaXNpb24sIGV4Y2x1ZGVkQnkgfSA9IGRlY2lkZUxldmVsKHByZWZpeCwgbmV1dHJhbGl6ZWQpO1xuXG4gICAgICBpZiAoZGVjaXNpb24gPT09IHRydWUpIHtcbiAgICAgICAgLy8gR2l0IGRvZXMgbm90IGRlc2NlbmQgaW50byBhbiBleGNsdWRlZCBkaXJlY3RvcnkuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGRlY2lzaW9uID09PSBmYWxzZSkge1xuICAgICAgICAvLyBUaGlzIGxldmVsIHdhcyByZS1pbmNsdWRlZDsgdGhlIHJ1bGVzIHRoYXQgZXhjbHVkZWQgaXQgbXVzdCBub3RcbiAgICAgICAgLy8gcmVzdXJyZWN0IGZvciBhbnl0aGluZyBiZW5lYXRoIGl0LlxuICAgICAgICBmb3IgKGNvbnN0IHsgaW5kZXgsIHBhdHRlcm4gfSBvZiBleGNsdWRlZEJ5KSB7XG4gICAgICAgICAgY29uc3QgZHJvcHBlZCA9IG5ldXRyYWxpemVkLmdldChpbmRleCkgPz8gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgZHJvcHBlZC5hZGQocGF0dGVybik7XG4gICAgICAgICAgbmV1dHJhbGl6ZWQuc2V0KGluZGV4LCBkcm9wcGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICByZXR1cm4gKG5vcm1hbGl6ZWRQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICAvLyBCdWlsdC1pbiBhbmQgZW52LXZhciBmcmFnbWVudHMgYXJlIGhhcmQgZXhjbHVkZXM6IHRoZXkgYXJlIGRlbGliZXJhdGVseVxuICAgIC8vIG5vdCBzdWJqZWN0IHRvIGdpdGlnbm9yZSBuZWdhdGlvbiwgc28gYSBzdHJheSBgIWAgcnVsZSBjYW5ub3QgZHJhZ1xuICAgIC8vIGBub2RlX21vZHVsZXNgIG9yIHRoZSBnZW5lcmF0ZWQgZGlyZWN0b3J5IGJhY2sgaW50byB0aGUgd2F0Y2ggc2V0LlxuICAgIGZvciAoY29uc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRzKSB7XG4gICAgICBpZiAobm9ybWFsaXplZFBhdGguaW5jbHVkZXMoZnJhZ21lbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghYW55TmVnYXRpb24pIHtcbiAgICAgIC8vIEZhc3QgcGF0aDogbm8gcmUtaW5jbHVzaW9uIGFueXdoZXJlLCBzbyB0aGUgZmlyc3QgbWF0Y2ggZGVjaWRlcy5cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZ2l0aWdub3JlTWF0Y2hlcnMpIHtcbiAgICAgICAgY29uc3QgcmVsID0gcG9zaXgucmVsYXRpdmUoZW50cnkuZGlyLCBub3JtYWxpemVkUGF0aCk7XG4gICAgICAgIGlmIChyZWwgPT09ICcnIHx8IHJlbCA9PT0gJy4uJyB8fCByZWwuc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkubWF0Y2hlci5pZ25vcmVzKHJlbCkgfHwgZW50cnkubWF0Y2hlci5pZ25vcmVzKGAke3JlbH0vYCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB3YWxrR2l0aWdub3JlKG5vcm1hbGl6ZWRQYXRoKTtcbiAgfTtcbn1cbiJdfQ==
|
package/dist/watch-rebuild.d.ts
CHANGED
|
@@ -49,6 +49,53 @@ export declare const replaceSourceSnapshots: ({ discoveredEntries, inputFiles, n
|
|
|
49
49
|
readSnapshot: (file: string) => Promise<SourceSnapshot>;
|
|
50
50
|
sourceSnapshots: Map<string, SourceSnapshot>;
|
|
51
51
|
}) => Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Run a full rebuild while keeping the classifier baseline anchored to the
|
|
54
|
+
* content the rebuild consumed.
|
|
55
|
+
*
|
|
56
|
+
* A full rebuild reads sources twice: once when the bundler consumes them and
|
|
57
|
+
* once when the baseline is refreshed from disk afterwards (the `rebuild`
|
|
58
|
+
* callback owns both, in that order). An edit that lands between those reads
|
|
59
|
+
* would be absorbed into the baseline without ever being built, and its
|
|
60
|
+
* queued watcher event would then classify as a no-op, silently dropping
|
|
61
|
+
* the change until the next unrelated rebuild.
|
|
62
|
+
*
|
|
63
|
+
* To prevent that, the relevant files are re-read from disk immediately
|
|
64
|
+
* before the rebuild starts, and files present both before and after get
|
|
65
|
+
* that captured value restored. A mid-(multi-second-)rebuild edit then still
|
|
66
|
+
* diffs against what the rebuild consumed, while a duplicate watcher event
|
|
67
|
+
* for content the rebuild already consumed (watchers routinely emit several
|
|
68
|
+
* events per edit, the triggering edit included) diffs equal and stays a
|
|
69
|
+
* no-op instead of cascading into back-to-back full rebuilds.
|
|
70
|
+
*
|
|
71
|
+
* The capture costs one serial read of the relevant set (~150-250ms at ~250
|
|
72
|
+
* files) per full rediscovery. A zero-read formulation (cloning the live
|
|
73
|
+
* baseline map and pinning the triggering batch to the snapshots
|
|
74
|
+
* `classifyRebuild` read) was tried and reverted: writes landing in the
|
|
75
|
+
* capture window (test-teardown restores, multi-flush setup bursts) are
|
|
76
|
+
* content the imminent build consumes anyway, and the clone un-absorbs them
|
|
77
|
+
* into follow-up full rebuilds; with real-world multi-second rebuilds that
|
|
78
|
+
* bursts into rebuild chains. The disk capture intentionally coalesces such
|
|
79
|
+
* writes into the in-flight rebuild.
|
|
80
|
+
*
|
|
81
|
+
* Files the rebuild discovered for the first time have no captured content
|
|
82
|
+
* and keep their post-build baseline. That is already sound for the two
|
|
83
|
+
* cases that matter: a new file the build missed has no baseline at all, so
|
|
84
|
+
* its queued add event forces the follow-up rebuild, and a new file the
|
|
85
|
+
* build did consume gets a baseline matching what it consumed. What stays
|
|
86
|
+
* narrowed rather than closed is a file created and then edited again within
|
|
87
|
+
* one rebuild window; eviction-style conservatism was tried against that
|
|
88
|
+
* and rejected too: it turned every added file's routine duplicate watcher
|
|
89
|
+
* events into redundant full rebuilds.
|
|
90
|
+
*/
|
|
91
|
+
export declare const pinBaselinesAcrossFullRebuild: ({ discoveredEntries, inputFiles, normalizePath, readSnapshot, rebuild, sourceSnapshots, }: {
|
|
92
|
+
discoveredEntries: DiscoveredEntriesLike;
|
|
93
|
+
inputFiles: string[];
|
|
94
|
+
normalizePath?: (path: string) => string;
|
|
95
|
+
readSnapshot: (file: string) => Promise<SourceSnapshot>;
|
|
96
|
+
rebuild: () => Promise<void>;
|
|
97
|
+
sourceSnapshots: Map<string, SourceSnapshot>;
|
|
98
|
+
}) => Promise<void>;
|
|
52
99
|
export declare const classifyRebuild: ({ discoveredEntries, fileChanges, inputFiles, normalizePath, parentHasChild, readSnapshot, sourceSnapshots, }: {
|
|
53
100
|
discoveredEntries: DiscoveredEntriesLike;
|
|
54
101
|
fileChanges: FileChanges;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-rebuild.d.ts","sourceRoot":"","sources":["../src/watch-rebuild.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;CAAE,GACzD;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,wBAAwB,EAAE,OAAO,CAAC;IAClC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC,GACD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK;IACtD,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAqDF,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,WAmFrD,CAAC;AAoBF,eAAO,MAAM,sBAAsB,GAAI,QAAQ,MAAM,WAG7C,CAAC;AAET,eAAO,MAAM,0BAA0B,GAAI,QAAQ,MAAM,WAaxD,CAAC;AAEF,eAAO,MAAM,8BAA8B,GACzC,QAAQ,MAAM,EACd,wBAAwB,qBAAqB,KAC5C,cAUF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,mCAGxC;IACD,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB,EAAE,qBAAqB,CAAC;CAC/C,KAAG,OAAO,CAAC,cAAc,CAIvB,CAAC;AAEJ,eAAO,MAAM,gBAAgB,GAAI,mDAI9B;IACD,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C,gBASE,CAAC;AAEJ,eAAO,MAAM,sBAAsB,GAAU,kFAM1C;IACD,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC9C,
|
|
1
|
+
{"version":3,"file":"watch-rebuild.d.ts","sourceRoot":"","sources":["../src/watch-rebuild.ts"],"names":[],"mappings":"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"}
|