@nlabs/lex 1.52.22 → 1.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/main.ts +2 -21
- package/README.md +19 -0
- package/examples/lex.config.js +9 -1
- package/jest.config.mjs +1 -19
- package/jest.config.template.cjs +1 -10
- package/lex.config.js +10 -1
- package/lib/LexConfig.d.ts +1 -0
- package/lib/LexConfig.js +1 -1
- package/lib/commands/lint/lint.js +1 -8
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -2
- package/lib/utils/app.d.ts +0 -1
- package/lib/utils/app.js +3 -4
- package/lib/utils/file.d.ts +0 -3
- package/lib/utils/file.js +1 -45
- package/package.json +3 -16
- package/resolver.cjs +10 -92
- package/tsconfig.json +2 -1
- package/webpack.config.js +2 -1
- package/babel.config.json +0 -19
- package/lib/utils/deepMerge.d.ts +0 -11
- package/lib/utils/deepMerge.js +0 -40
- package/lib/utils/reactShim.d.ts +0 -4
- package/lib/utils/reactShim.js +0 -7
|
@@ -339,10 +339,6 @@ SORT-KEYS RULE (HIGHEST PRIORITY):
|
|
|
339
339
|
- Preserve the original formatting and line breaks when sorting
|
|
340
340
|
|
|
341
341
|
Example of CORRECT formatting (DO NOT CHANGE):
|
|
342
|
-
export class UserConstants {
|
|
343
|
-
static readonly ADD_ITEM_ERROR: string = 'USER_ADD_ITEM_ERROR';
|
|
344
|
-
static readonly OTHER_CONSTANT: string = 'OTHER_CONSTANT';
|
|
345
|
-
}
|
|
346
342
|
|
|
347
343
|
constructor(flux: FluxFramework, CustomAdapter: typeof Event = Event) {
|
|
348
344
|
this.CustomAdapter = CustomAdapter;
|
|
@@ -368,7 +364,6 @@ const config = {
|
|
|
368
364
|
};
|
|
369
365
|
|
|
370
366
|
Example of INCORRECT formatting (FIX THIS):
|
|
371
|
-
export class UserConstants {static readonly ADD_ITEM_ERROR: string = 'USER_ADD_ITEM_ERROR';
|
|
372
367
|
static readonly OTHER_CONSTANT: string = 'OTHER_CONSTANT';
|
|
373
368
|
}
|
|
374
369
|
|
|
@@ -474,7 +469,6 @@ WHAT NOT TO FIX:
|
|
|
474
469
|
- Do not modify code that is not mentioned in the ESLint errors
|
|
475
470
|
|
|
476
471
|
Example of CORRECT formatting (DO NOT CHANGE):
|
|
477
|
-
export class UserConstants {
|
|
478
472
|
static readonly ADD_ITEM_ERROR: string = 'USER_ADD_ITEM_ERROR';
|
|
479
473
|
static readonly OTHER_CONSTANT: string = 'OTHER_CONSTANT';
|
|
480
474
|
}
|
|
@@ -503,7 +497,6 @@ const config = {
|
|
|
503
497
|
};
|
|
504
498
|
|
|
505
499
|
Example of INCORRECT formatting (FIX THIS):
|
|
506
|
-
export class UserConstants {static readonly ADD_ITEM_ERROR: string = 'USER_ADD_ITEM_ERROR';
|
|
507
500
|
static readonly OTHER_CONSTANT: string = 'OTHER_CONSTANT';
|
|
508
501
|
}
|
|
509
502
|
|
|
@@ -952,4 +945,4 @@ export default {
|
|
|
952
945
|
}
|
|
953
946
|
};
|
|
954
947
|
|
|
955
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9saW50L2xpbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2Rpcm5hbWUsIHJlc29sdmUgYXMgcGF0aFJlc29sdmUsIGV4dG5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7cmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmxldCBjdXJyZW50RmlsZW5hbWU6IHN0cmluZztcbmxldCBjdXJyZW50RGlybmFtZTogc3RyaW5nO1xuXG50cnkge1xuICBjdXJyZW50RmlsZW5hbWUgPSBldmFsKCdyZXF1aXJlKFwidXJsXCIpLmZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKScpO1xuICBjdXJyZW50RGlybmFtZSA9IGRpcm5hbWUoY3VycmVudEZpbGVuYW1lKTtcbn0gY2F0Y2h7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNhY2hlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FjaGVGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBjYWNoZUxvY2F0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb2xvcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudkluZm8/OiBib29sZWFuO1xuICByZWFkb25seSBleHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZpeD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeERyeVJ1bj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeFR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcbiAgcmVhZG9ubHkgZ2xvYmFsPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXR0ZXJuPzogc3RyaW5nO1xuICByZWFkb25seSBpbml0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbWF4V2FybmluZ3M/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5vQ29sb3I/OiBib29sZWFuO1xuICByZWFkb25seSBub0VzbGludHJjPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm9JZ25vcmU/OiBib29sZWFuO1xuICByZWFkb25seSBub0lubGluZUNvbmZpZz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcnNlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyc2VyT3B0aW9ucz86IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luPzogc3RyaW5nO1xuICByZWFkb25seSBwcmludENvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmVDb21tZW50cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlc2Rpcj86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RkaW4/OiBib29sZWFuO1xuICByZWFkb25seSBzdGRpbkZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaW50Q2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5pbnRlcmZhY2UgQ29uZmlnUmVzdWx0IHtcbiAgY29uZmlnUGF0aDogc3RyaW5nO1xuICBvcmlnaW5hbENvbmZpZzogc3RyaW5nIHwgbnVsbDtcbn1cblxuY29uc3QgY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyA9ICh1c2VUeXBlc2NyaXB0OiBib29sZWFuLCBjd2Q6IHN0cmluZyk6IENvbmZpZ1Jlc3VsdCA9PiB7XG4gIC8vIFVzZSBhIHRlbXBvcmFyeSBmaWxlIHBhdGggaW5zdGVhZCBvZiBjcmVhdGluZyBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnlcbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcbiAgY29uc3Qgb3JpZ2luYWxDb25maWcgPSBudWxsO1xuXG4gIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBDb21tb25KUyBtb2R1bGUgdGhhdCByZXF1aXJlcyBMZXgncyBFU0xpbnQgY29uZmlnXG4gIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBgLy8gVGVtcG9yYXJ5IEVTTGludCBjb25maWcgZ2VuZXJhdGVkIGJ5IExleFxuY29uc3QgbGV4Q29uZmlnID0gcmVxdWlyZSgnQG5sYWJzL2xleC9lc2xpbnQuY29uZmlnLm1qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxleENvbmZpZztgO1xuXG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcblxuICByZXR1cm4ge1xuICAgIGNvbmZpZ1BhdGgsXG4gICAgb3JpZ2luYWxDb25maWdcbiAgfTtcbn07XG5cbmNvbnN0IGRldGVjdFR5cGVTY3JpcHQgPSAoY3dkOiBzdHJpbmcpOiBib29sZWFuID0+IGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuanNvbicpKTtcblxuLyoqXG4gKiBFbnN1cmUgcGFja2FnZS5qc29uIGhhcyB0eXBlOiBtb2R1bGUgZm9yIEVTTSBzdXBwb3J0XG4gKi9cbmNvbnN0IGVuc3VyZU1vZHVsZVR5cGUgPSAoY3dkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcblxuICAgICAgLy8gSWYgdHlwZSBpcyBub3Qgc2V0IHRvIG1vZHVsZSwgd2FybiBpbnN0ZWFkIG9mIGF1dG8tbW9kaWZ5aW5nXG4gICAgICBpZihwYWNrYWdlSnNvbi50eXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICBsb2coJ1dhcm5pbmc6IHBhY2thZ2UuanNvbiBzaG91bGQgaGF2ZSBcInR5cGVcIjogXCJtb2R1bGVcIiBmb3IgRVNNIHN1cHBvcnQuIFBsZWFzZSBhZGQgdGhpcyBtYW51YWxseS4nLCAnd2FybicsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgLy8gSWdub3JlIGVycm9yc1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaW5zdGFsbERlcGVuZGVuY2llcyA9IGFzeW5jIChjd2Q6IHN0cmluZywgdXNlVHlwZXNjcmlwdDogYm9vbGVhbiwgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGxvZygnVXNpbmcgVHlwZVNjcmlwdCBFU0xpbnQgZnJvbSBMZXguLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgfSBlbHNlIHtcbiAgICBsb2coJ1VzaW5nIEVTTGludCBmcm9tIExleC4uLicsICdpbmZvJywgcXVpZXQpO1xuICB9XG59O1xuXG5jb25zdCBydW5Fc2xpbnRXaXRoTGV4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGNsaU5hbWU6IHN0cmluZyxcbiAgZml4OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhbixcbiAgdXNlVHlwZXNjcmlwdDogYm9vbGVhbixcbiAgY2FwdHVyZU91dHB1dD86IChvdXRwdXQ6IHN0cmluZyk9PiB2b2lkXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJ2VzbGludC5jb25maWcubWpzJyk7XG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGhUcyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ2VzbGludC5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcbiAgICBjb25zdCBoYXNMZXhDb25maWdFc2xpbnQgPSBMZXhDb25maWcuY29uZmlnLmVzbGludCAmJiBPYmplY3Qua2V5cyhMZXhDb25maWcuY29uZmlnLmVzbGludCkubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IHBvc3NpYmxlUGF0aHMgPSBbXG4gICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcubWpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcudHMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLm1qcycpLFxuICAgICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ2VzbGludC5jb25maWcudHMnKVxuICAgIF07XG5cbiAgICBsZXQgbGV4Q29uZmlnUGF0aCA9ICcnO1xuXG4gICAgZm9yKGNvbnN0IHBhdGggb2YgcG9zc2libGVQYXRocykge1xuICAgICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICBsZXhDb25maWdQYXRoID0gcGF0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbmZpZ1BhdGggPSAnJztcbiAgICBsZXQgdGVtcENvbmZpZ1BhdGggPSAnJztcblxuICAgIC8vIFByaW9yaXR5OlxuICAgIC8vIDEuIFByb2plY3QgZXNsaW50LmNvbmZpZyBmaWxlc1xuICAgIC8vIDIuIEVTTGludCBjb25maWcgaW4gbGV4LmNvbmZpZy4qIGZpbGVcbiAgICAvLyAzLiBMZXgncyBkZWZhdWx0IGVzbGludC5jb25maWcubWpzXG4gICAgLy8gNC4gQ3JlYXRlIGEgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlXG4gICAgaWYoaGFzUHJvamVjdENvbmZpZykge1xuICAgICAgY29uZmlnUGF0aCA9IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgPyBwcm9qZWN0Q29uZmlnUGF0aFRzIDogcHJvamVjdENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIHByb2plY3QgRVNMaW50IGNvbmZpZyBmaWxlOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGhhc0xleENvbmZpZ0VzbGludCkge1xuICAgICAgLy8gV2hlbiB1c2luZyBsZXguY29uZmlnLmVzbGludCwgY3JlYXRlIGEgdGVtcG9yYXJ5IEpTIGNvbmZpZyBmaWxlIChub3QgSlNPTilcbiAgICAgIC8vIHRvIGF2b2lkIEVTTSBKU09OIGltcG9ydCBpc3N1ZXNcbiAgICAgIHRlbXBDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWVzbGludC5janMnKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgQ29tbW9uSlMgbW9kdWxlIHRoYXQgZXh0ZW5kcyBMZXgncyBlc2xpbnQgY29uZmlnXG4gICAgICBjb25zdCBjb25maWdDb250ZW50ID0gYC8vIFRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGdlbmVyYXRlZCBieSBMZXhcbmNvbnN0IGxleENvbmZpZyA9IHJlcXVpcmUoJ0BubGFicy9sZXgvZXNsaW50LmNvbmZpZy5tanMnKTtcbmNvbnN0IHVzZXJDb25maWcgPSAke0pTT04uc3RyaW5naWZ5KExleENvbmZpZy5jb25maWcuZXNsaW50LCBudWxsLCAyKX07XG5cbi8vIE1lcmdlIExleCdzIGNvbmZpZyB3aXRoIHVzZXIgY29uZmlnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLi4ubGV4Q29uZmlnXG59O2A7XG5cbiAgICAgIHdyaXRlRmlsZVN5bmModGVtcENvbmZpZ1BhdGgsIGNvbmZpZ0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBjb25maWdQYXRoID0gdGVtcENvbmZpZ1BhdGg7XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgVXNpbmcgRVNMaW50IGNvbmZpZyBmcm9tIGxleC5jb25maWcuKiBmaWxlIHZpYSB0ZW1wIGZpbGU6ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKSkge1xuICAgICAgY29uZmlnUGF0aCA9IGxleENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIExleCBFU0xpbnQgY29uZmlnIGZpbGU6ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGRlZmF1bHQgY29uZmlnIGZpbGUgaWYgbm8gb3RoZXIgY29uZmlnIGlzIGZvdW5kXG4gICAgICB0ZW1wQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgYmFzaWMgRVNMaW50IGNvbmZpZ1xuICAgICAgY29uc3QgY29uZmlnQ29udGVudCA9IGAvLyBUZW1wb3JhcnkgZGVmYXVsdCBFU0xpbnQgY29uZmlnIGdlbmVyYXRlZCBieSBMZXhcbmNvbnN0IGxleENvbmZpZyA9IHJlcXVpcmUoJ0BubGFicy9sZXgvZXNsaW50LmNvbmZpZy5tanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBsZXhDb25maWc7YDtcblxuICAgICAgd3JpdGVGaWxlU3luYyh0ZW1wQ29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcbiAgICAgIGNvbmZpZ1BhdGggPSB0ZW1wQ29uZmlnUGF0aDtcblxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBDcmVhdGVkIHRlbXBvcmFyeSBkZWZhdWx0IEVTTGludCBjb25maWcgYXQ6ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coJ05vIEVTTGludCBjb25maWd1cmF0aW9uIGZvdW5kLiBVc2luZyBMZXggZGVmYXVsdCBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVzbGludEJpbmFyeSA9IHJlc29sdmVCaW5hcnlQYXRoKCdlc2xpbnQnLCAnZXNsaW50Jyk7XG5cbiAgICBpZighZXNsaW50QmluYXJ5KSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVTTGludCBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlc2AsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBCYXNlIEVTTGludCBhcmd1bWVudHNcbiAgICBjb25zdCBiYXNlRXNsaW50QXJncyA9IFtcbiAgICAgIC4uLihmaXggPyBbJy0tZml4J10gOiBbXSksXG4gICAgICAuLi4oZGVidWcgPyBbJy0tZGVidWcnXSA6IFtdKSxcbiAgICAgICctLW5vLWVycm9yLW9uLXVubWF0Y2hlZC1wYXR0ZXJuJyxcbiAgICAgICctLW5vLXdhcm4taWdub3JlZCdcbiAgICBdO1xuXG4gICAgLy8gQWRkIGNvbmZpZyBwYXRoXG4gICAgY29uc3QgY29uZmlnQXJncyA9IGNvbmZpZ1BhdGggPyBbJy0tY29uZmlnJywgY29uZmlnUGF0aF0gOiBbXTtcblxuICAgIGNvbnN0IGpzUmVzdWx0ID0gYXdhaXQgZXhlY2EoZXNsaW50QmluYXJ5LCBbXG4gICAgICAnc3JjLyoqLyoue2pzLGpzeH0nLFxuICAgICAgLi4uY29uZmlnQXJncyxcbiAgICAgIC4uLmJhc2VFc2xpbnRBcmdzXG4gICAgXSwge1xuICAgICAgY3dkLFxuICAgICAgcmVqZWN0OiBmYWxzZSxcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86ICdwaXBlJ1xuICAgIH0pO1xuXG4gICAgaWYoanNSZXN1bHQuc3Rkb3V0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coanNSZXN1bHQuc3Rkb3V0KTtcbiAgICAgIGlmKGNhcHR1cmVPdXRwdXQpIHtcbiAgICAgICAgY2FwdHVyZU91dHB1dChqc1Jlc3VsdC5zdGRvdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGpzUmVzdWx0LnN0ZGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoanNSZXN1bHQuc3RkZXJyKTtcbiAgICAgIGlmKGNhcHR1cmVPdXRwdXQpIHtcbiAgICAgICAgY2FwdHVyZU91dHB1dChqc1Jlc3VsdC5zdGRlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0c1Jlc3VsdDogYW55ID0ge2V4aXRDb2RlOiAwLCBzdGRlcnI6ICcnLCBzdGRvdXQ6ICcnfTtcbiAgICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgICB0c1Jlc3VsdCA9IGF3YWl0IGV4ZWNhKGVzbGludEJpbmFyeSwgW1xuICAgICAgICAnc3JjLyoqLyoue3RzLHRzeH0nLFxuICAgICAgICAuLi5jb25maWdBcmdzLFxuICAgICAgICAuLi5iYXNlRXNsaW50QXJnc1xuICAgICAgXSwge1xuICAgICAgICBjd2QsXG4gICAgICAgIHJlamVjdDogZmFsc2UsXG4gICAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgICBzdGRpbzogJ3BpcGUnXG4gICAgICB9KTtcblxuICAgICAgaWYodHNSZXN1bHQuc3Rkb3V0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUubG9nKHRzUmVzdWx0LnN0ZG91dCk7XG4gICAgICB9XG5cbiAgICAgIGlmKHRzUmVzdWx0LnN0ZGVycikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKHRzUmVzdWx0LnN0ZGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgdGVtcCBmaWxlIGlmIGNyZWF0ZWRcbiAgICBpZih0ZW1wQ29uZmlnUGF0aCAmJiBleGlzdHNTeW5jKHRlbXBDb25maWdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdW5saW5rU3luYyh0ZW1wQ29uZmlnUGF0aCk7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBSZW1vdmVkIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGF0ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGVycm9ycyB3aGVuIGNsZWFuaW5nIHVwXG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBGYWlsZWQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlc2xpbnROb3RGb3VuZCA9IGpzUmVzdWx0LnN0ZGVycj8uaW5jbHVkZXMoJ2NvbW1hbmQgbm90IGZvdW5kJykgfHwganNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnZXNsaW50OiBjb21tYW5kIG5vdCBmb3VuZCcpO1xuICAgIGlmKGVzbGludE5vdEZvdW5kKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0VTTGludCBub3QgZm91bmQhJyk7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IExleCdzIEVTTGludCBiaW5hcnkgbm90IGZvdW5kLiBQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZihqc1Jlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiB0c1Jlc3VsdC5leGl0Q29kZSA9PT0gMCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdMaW50aW5nIGNvbXBsZXRlZCEnKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IG5vRmlsZXNGb3VuZCA9XG4gICAgICAoanNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpIHx8IGpzUmVzdWx0LnN0ZG91dD8uaW5jbHVkZXMoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKSkgJiZcbiAgICAgICghdXNlVHlwZXNjcmlwdCB8fCB0c1Jlc3VsdC5zdGRlcnI/LmluY2x1ZGVzKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykgfHwgdHNSZXN1bHQuc3Rkb3V0Py5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpKTtcblxuICAgIGlmKG5vRmlsZXNGb3VuZCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdObyBmaWxlcyBmb3VuZCB0byBsaW50Jyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgc3Bpbm5lci5mYWlsKCdMaW50aW5nIGZhaWxlZCEnKTtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVTTGludCBmb3VuZCBpc3N1ZXMgaW4geW91ciBjb2RlLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gMTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnTGludGluZyBmYWlsZWQhJyk7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5jb25zdCBhcHBseUFJRml4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgZXJyb3JzOiBzdHJpbmcsXG4gIHF1aWV0OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdVc2luZyBBSSB0byBmaXggcmVtYWluaW5nIGxpbnQgaXNzdWVzLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlRXJyb3JNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gICAgY29uc3QgbGluZXMgPSBlcnJvcnMuc3BsaXQoJ1xcbicpO1xuICAgIGxldCBjdXJyZW50RmlsZSA9ICcnO1xuXG4gICAgZm9yKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmKGxpbmUubWF0Y2goL14oXFwvfFtBLVpdOlxcXFwpLio/XFwuKGpzfGpzeHx0c3x0c3gpJC8pKSB7XG4gICAgICAgIGN1cnJlbnRGaWxlID0gbGluZS50cmltKCk7XG4gICAgICAgIGlmKCFmaWxlRXJyb3JNYXAuaGFzKGN1cnJlbnRGaWxlKSkge1xuICAgICAgICAgIGZpbGVFcnJvck1hcC5zZXQoY3VycmVudEZpbGUsIFtdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKGN1cnJlbnRGaWxlICYmIGxpbmUudHJpbSgpICYmIGxpbmUubWF0Y2goL1xccytcXGQrOlxcZCtcXHMrKGVycm9yfHdhcm5pbmcpXFxzKy8pKSB7XG4gICAgICAgIGNvbnN0IGVycm9yQXJyYXkgPSBmaWxlRXJyb3JNYXAuZ2V0KGN1cnJlbnRGaWxlKTtcbiAgICAgICAgaWYoZXJyb3JBcnJheSkge1xuICAgICAgICAgIGVycm9yQXJyYXkucHVzaChsaW5lLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihmaWxlRXJyb3JNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgbG9nKCdVc2luZyBhbHRlcm5hdGl2ZSBlcnJvciBwYXJzaW5nIHN0cmF0ZWd5JywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gZXJyb3JzLnNwbGl0KCdcXG5cXG4nKTtcblxuICAgICAgZm9yKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgaWYoc2VjdGlvbi50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lcyA9IHNlY3Rpb24uc3BsaXQoJ1xcbicpO1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGxpbmVzWzBdLnRyaW0oKTtcblxuICAgICAgICBpZihmaWxlUGF0aC5tYXRjaCgvXFwuKGpzfGpzeHx0c3x0c3gpJC8pKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlUGF0aCwgW10pO1xuXG4gICAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZihsaW5lc1tpXS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGZpbGVFcnJvck1hcC5nZXQoZmlsZVBhdGgpPy5wdXNoKGxpbmVzW2ldLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZUVycm9yTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGxvZygnVXNpbmcgZGlyZWN0IGZpbGUgcGF0aCBleHRyYWN0aW9uJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IGZpbGVQYXRoUmVnZXggPSAvKD86XFwvfFtBLVpdOlxcXFwpKD86W146XFxuXStcXC8pKlteOlxcbl0rXFwuKGpzfGpzeHx0c3x0c3gpL2c7XG4gICAgICBjb25zdCBmaWxlUGF0aHMgPSBlcnJvcnMubWF0Y2goZmlsZVBhdGhSZWdleCkgfHwgW107XG5cbiAgICAgIGZvcihjb25zdCBmaWxlUGF0aCBvZiBmaWxlUGF0aHMpIHtcbiAgICAgICAgaWYoIWZpbGVFcnJvck1hcC5oYXMoZmlsZVBhdGgpICYmIGV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlUGF0aCwgW10pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtub3duRmlsZXMgPSBbXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy9jcmVhdGUvY2hhbmdlbG9nLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy91dGlscy9haVNlcnZpY2UudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3dkLCAnc3JjL3V0aWxzL2FwcC50cycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShjd2QsICdzcmMvdXRpbHMvcmVhY3RTaGltLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy9jb21tYW5kcy9saW50L2F1dG9maXguanMnKVxuICAgICAgXTtcblxuICAgICAgZm9yKGNvbnN0IGZpbGUgb2Yga25vd25GaWxlcykge1xuICAgICAgICBpZihleGlzdHNTeW5jKGZpbGUpICYmICFmaWxlRXJyb3JNYXAuaGFzKGZpbGUpKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IoY29uc3QgZmlsZVBhdGggb2YgZmlsZUVycm9yTWFwLmtleXMoKSkge1xuICAgICAgaWYoIWV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgIGxvZyhgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZVBhdGh9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsb2coYFByb2Nlc3NpbmcgZmlsZTogJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgICAgY29uc3QgaXNDdXJzb3JJREUgPSBMZXhDb25maWcuY29uZmlnLmFpPy5wcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0lERSA9PT0gJ3RydWUnO1xuXG4gICAgICBpZihpc0N1cnNvcklERSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBGaXggYWxsIEVTTGludCBlcnJvcnMgaW4gdGhpcyBmaWxlLiBGb2N1cyBvbjpcbjEuIEZpeGluZyBuYW1pbmcgY29udmVudGlvbnNcbjIuIEZpeGluZyBzb3J0LWtleXMgaXNzdWVzXG4zLiBSZXBsYWNpbmcgY29uc29sZS5sb2cgd2l0aCBsb2cgdXRpbGl0eVxuNC4gRml4aW5nIG5vLXBsdXNwbHVzIGlzc3Vlc1xuNS4gRml4aW5nIHVubmVjZXNzYXJ5IGVzY2FwZSBjaGFyYWN0ZXJzXG42LiBGaXhpbmcgb3RoZXIgRVNMaW50IGVycm9yc1xuXG5DUklUSUNBTCBSRVFVSVJFTUVOVFM6XG4tIE9OTFkgZml4IHRoZSBzcGVjaWZpYyBsaW5lcyB3aXRoIEVTTGludCBlcnJvcnNcbi0gRE8gTk9UIG1vZGlmeSBhbnkgb3RoZXIgbGluZXMgb2YgY29kZVxuLSBETyBOT1QgcmVtb3ZlIGxpbmUgYnJlYWtzIHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgY2F1c2luZyBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBjb25kZW5zZSBtdWx0aS1saW5lIHN0cnVjdHVyZXMgdG8gc2luZ2xlIGxpbmVzXG4tIFBSRVNFUlZFIGFsbCBleGlzdGluZyBsaW5lIGJyZWFrcyBhbmQgZm9ybWF0dGluZyB0aGF0IGlzIG5vdCBjYXVzaW5nIGVycm9yc1xuXG5TUEVDSUZJQyBGT1JNQVRUSU5HIFJVTEVTOlxuLSBNYWludGFpbiBwcm9wZXIgaW5kZW50YXRpb24gKDIgc3BhY2VzKVxuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gY2xhc3MvaW50ZXJmYWNlIGRlY2xhcmF0aW9uIGFuZCB0aGVpciBtZW1iZXJzXG4tIEtlZXAgbGluZSBicmVha3MgYmV0d2VlbiBtZXRob2RzXG4tIEVuc3VyZSB0aGVyZSBpcyBhIGxpbmUgYnJlYWsgYWZ0ZXIgb3BlbmluZyBicmFjZXMgZm9yIGNsYXNzZXMsIGludGVyZmFjZXMsIGFuZCBtZXRob2RzXG4tIERPIE5PVCBwbGFjZSBjbGFzcy9pbnRlcmZhY2UgcHJvcGVydGllcyBvciBtZXRob2RzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIG9wZW5pbmcgYnJhY2Vcbi0gUHJlc2VydmUgZW1wdHkgbGluZXMgYmV0d2VlbiBsb2dpY2FsIGNvZGUgYmxvY2tzXG4tIFBSRVNFUlZFIG11bHRpLWxpbmUgaW1wb3J0cyAtIGRvIG5vdCBjb25kZW5zZSB0aGVtIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIG9iamVjdC9hcnJheSBkZWNsYXJhdGlvbnMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcblxuU09SVC1LRVlTIFJVTEUgKEhJR0hFU1QgUFJJT1JJVFkpOlxuLSBBbGwgb2JqZWN0IGxpdGVyYWwga2V5cyBNVVNUIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSBpbiBhc2NlbmRpbmcgb3JkZXJcbi0gVGhpcyBhcHBsaWVzIHRvIEFMTCBvYmplY3RzIGluIHRoZSBmaWxlLCBub3QganVzdCB0aG9zZSB3aXRoIGV4cGxpY2l0IHNvcnQta2V5cyBlcnJvcnNcbi0gRXhhbXBsZToge2I6IDIsIGE6IDEsIGM6IDN9IHNob3VsZCBiZWNvbWUge2E6IDEsIGI6IDIsIGM6IDN9XG4tIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBmb3JtYXR0aW5nIGFuZCBsaW5lIGJyZWFrcyB3aGVuIHNvcnRpbmdcblxuRXhhbXBsZSBvZiBDT1JSRUNUIGZvcm1hdHRpbmcgKERPIE5PVCBDSEFOR0UpOlxuZXhwb3J0IGNsYXNzIFVzZXJDb25zdGFudHMge1xuICBzdGF0aWMgcmVhZG9ubHkgQUREX0lURU1fRVJST1I6IHN0cmluZyA9ICdVU0VSX0FERF9JVEVNX0VSUk9SJztcbiAgc3RhdGljIHJlYWRvbmx5IE9USEVSX0NPTlNUQU5UOiBzdHJpbmcgPSAnT1RIRVJfQ09OU1RBTlQnO1xufVxuXG5jb25zdHJ1Y3RvcihmbHV4OiBGbHV4RnJhbWV3b3JrLCBDdXN0b21BZGFwdGVyOiB0eXBlb2YgRXZlbnQgPSBFdmVudCkge1xuICB0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O1xufVxuXG5pbXBvcnQge1xuICBhcHAsXG4gIGV2ZW50cyxcbiAgaW1hZ2VzLFxuICBsb2NhdGlvbnMsXG4gIG1lc3NhZ2VzLFxuICBwb3N0cyxcbiAgdGFncyxcbiAgdXNlcnMsXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcyc7XG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgYXBpS2V5OiAndmFsdWUnLFxuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICB0aW1lb3V0OiA1MDAwXG59O1xuXG5FeGFtcGxlIG9mIElOQ09SUkVDVCBmb3JtYXR0aW5nIChGSVggVEhJUyk6XG5leHBvcnQgY2xhc3MgVXNlckNvbnN0YW50cyB7c3RhdGljIHJlYWRvbmx5IEFERF9JVEVNX0VSUk9SOiBzdHJpbmcgPSAnVVNFUl9BRERfSVRFTV9FUlJPUic7XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHt0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O31cblxuaW1wb3J0IHthcHAsIGV2ZW50cywgaW1hZ2VzLCBsb2NhdGlvbnMsIG1lc3NhZ2VzLCBwb3N0cywgdGFncywgdXNlcnMsIHdlYnNvY2tldH0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7YmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywgYXBpS2V5OiAndmFsdWUnLCB0aW1lb3V0OiA1MDAwfTtcblxuRml4IE9OTFkgdGhlIHNwZWNpZmljIEVTTGludCBlcnJvcnMuIFJldHVybiB0aGUgcHJvcGVybHkgZm9ybWF0dGVkIGNvZGUuYDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcm9tcHRGaWxlID0gcGF0aFJlc29sdmUoY3dkLCAnLmN1cnNvcl9wcm9tcHRfdGVtcC50eHQnKTtcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMocHJvbXB0RmlsZSwgcHJvbXB0LCAndXRmOCcpO1xuXG4gICAgICAgICAgICAvLyBVc2UgQ3Vyc29yIENMSSB0byBmaXggdGhlIGZpbGVcbiAgICAgICAgICAgIGF3YWl0IGV4ZWNhKCdjdXJzb3InLCBbJ2VkaXQnLCAnLS1maWxlJywgZmlsZVBhdGgsICctLXByb21wdC1maWxlJywgcHJvbXB0RmlsZV0sIHtcbiAgICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgICByZWplY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGRpbzogJ3BpcGUnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdW5saW5rU3luYyhwcm9tcHRGaWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvZyhgQXBwbGllZCBDdXJzb3IgQUkgZml4ZXMgdG8gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9IGNhdGNoe1xuICAgICAgICAgICAgY29uc3Qgd2FzTW9kaWZpZWQgPSBhd2FpdCBhcHBseURpcmVjdEZpeGVzKGZpbGVQYXRoLCBxdWlldCk7XG4gICAgICAgICAgICBpZih3YXNNb2RpZmllZCkge1xuICAgICAgICAgICAgICBsb2coYEFwcGxpZWQgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgbG9nKGBFcnJvciB1c2luZyBDdXJzb3IgQUk6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgYXdhaXQgYXBwbHlEaXJlY3RGaXhlcyhmaWxlUGF0aCwgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB3YXNNb2RpZmllZCA9IGF3YWl0IGFwcGx5RGlyZWN0Rml4ZXMoZmlsZVBhdGgsIHF1aWV0KTtcbiAgICAgICAgaWYod2FzTW9kaWZpZWQpIHtcbiAgICAgICAgICBsb2coYEFwcGxpZWQgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlRXJyb3JzID0gZmlsZUVycm9yTWFwLmdldChmaWxlUGF0aCkgfHwgW107XG4gICAgICAgIGlmKGZpbGVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7Y2FsbEFJU2VydmljZX0gPSBhd2FpdCBpbXBvcnQoJy4uLy4uL3V0aWxzL2FpU2VydmljZS5qcycpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICAgICAgICAgICAgY29uc3QgcHJvbXB0ID0gYEZpeCB0aGUgZm9sbG93aW5nIEVTTGludCBlcnJvcnMgaW4gdGhpcyBjb2RlOlxuJHtmaWxlRXJyb3JzLmpvaW4oJ1xcbicpfVxuXG5IZXJlJ3MgdGhlIGNvZGU6XG5cXGBcXGBcXGBcbiR7ZmlsZUNvbnRlbnR9XG5cXGBcXGBcXGBcblxuQ1JJVElDQUwgUkVRVUlSRU1FTlRTOlxuLSBPTkxZIGZpeCB0aGUgc3BlY2lmaWMgbGluZXMgd2l0aCBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBtb2RpZnkgYW55IG90aGVyIGxpbmVzIG9mIGNvZGVcbi0gRE8gTk9UIHJlbW92ZSBsaW5lIGJyZWFrcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGNhdXNpbmcgRVNMaW50IGVycm9yc1xuLSBETyBOT1QgY29uZGVuc2UgbXVsdGktbGluZSBzdHJ1Y3R1cmVzIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBhbGwgZXhpc3RpbmcgbGluZSBicmVha3MgYW5kIGZvcm1hdHRpbmcgdGhhdCBpcyBub3QgY2F1c2luZyBlcnJvcnNcblxuU1BFQ0lGSUMgRk9STUFUVElORyBSVUxFUzpcbi0gTWFpbnRhaW4gcHJvcGVyIGluZGVudGF0aW9uICgyIHNwYWNlcylcbi0gS2VlcCBsaW5lIGJyZWFrcyBiZXR3ZWVuIGNsYXNzL2ludGVyZmFjZSBkZWNsYXJhdGlvbiBhbmQgdGhlaXIgbWVtYmVyc1xuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gbWV0aG9kc1xuLSBFbnN1cmUgdGhlcmUgaXMgYSBsaW5lIGJyZWFrIGFmdGVyIG9wZW5pbmcgYnJhY2VzIGZvciBjbGFzc2VzLCBpbnRlcmZhY2VzLCBhbmQgbWV0aG9kc1xuLSBETyBOT1QgcGxhY2UgY2xhc3MvaW50ZXJmYWNlIHByb3BlcnRpZXMgb3IgbWV0aG9kcyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBvcGVuaW5nIGJyYWNlXG4tIFByZXNlcnZlIGVtcHR5IGxpbmVzIGJldHdlZW4gbG9naWNhbCBjb2RlIGJsb2Nrc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIGltcG9ydHMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcbi0gUFJFU0VSVkUgbXVsdGktbGluZSBvYmplY3QvYXJyYXkgZGVjbGFyYXRpb25zIC0gZG8gbm90IGNvbmRlbnNlIHRoZW0gdG8gc2luZ2xlIGxpbmVzXG5cblNPUlQtS0VZUyBSVUxFIChISUdIRVNUIFBSSU9SSVRZKTpcbi0gQWxsIG9iamVjdCBsaXRlcmFsIGtleXMgTVVTVCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgaW4gYXNjZW5kaW5nIG9yZGVyXG4tIFRoaXMgYXBwbGllcyB0byBBTEwgb2JqZWN0cyBpbiB0aGUgZmlsZSwgbm90IGp1c3QgdGhvc2Ugd2l0aCBleHBsaWNpdCBzb3J0LWtleXMgZXJyb3JzXG4tIEV4YW1wbGU6IHtiOiAyLCBhOiAxLCBjOiAzfSBzaG91bGQgYmVjb21lIHthOiAxLCBiOiAyLCBjOiAzfVxuLSBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZm9ybWF0dGluZyBhbmQgbGluZSBicmVha3Mgd2hlbiBzb3J0aW5nXG5cbldIQVQgVE8gRklYOlxuMS4gU29ydGluZyBhbGwgb2JqZWN0IGtleXMgYWxwaGFiZXRpY2FsbHkgKHNvcnQta2V5cyBydWxlKSAtIEFMTCBvYmplY3RzIG11c3QgaGF2ZSBzb3J0ZWQga2V5c1xuMi4gRml4aW5nIG5hbWluZyBjb252ZW50aW9ucyAtIE9OTFkgZm9yIHZhcmlhYmxlcy9mdW5jdGlvbnMgd2l0aCBuYW1pbmcgZXJyb3JzXG4zLiBSZXBsYWNpbmcgY29uc29sZS5sb2cgd2l0aCBsb2cgdXRpbGl0eSAtIE9OTFkgZm9yIGNvbnNvbGUubG9nIHN0YXRlbWVudHNcbjQuIEZpeGluZyBuby1wbHVzcGx1cyBpc3N1ZXMgLSBPTkxZIGZvciArKy8tLSBvcGVyYXRvcnNcbjUuIEZpeGluZyB1bm5lY2Vzc2FyeSBlc2NhcGUgY2hhcmFjdGVycyAtIE9OTFkgZm9yIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IGRvbid0IG5lZWQgZXNjYXBpbmdcbjYuIFByb3BlciBpbmRlbnRhdGlvbiBhbmQgc3BhY2luZyAtIE9OTFkgd2hlcmUgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGJ5IGVycm9yc1xuNy4gU3RyaW5nIHF1b3RlcyBjb25zaXN0ZW5jeSAodXNlIHNpbmdsZSBxdW90ZXMpIC0gT05MWSBmb3Igc3RyaW5nIGxpdGVyYWxzIHdpdGggcXVvdGUgZXJyb3JzXG44LiBJbXBvcnQgb3JkZXIgYW5kIHNwYWNpbmcgLSBPTkxZIGZvciBpbXBvcnRzIHdpdGggb3JkZXIvc3BhY2luZyBlcnJvcnNcbjkuIEZ1bmN0aW9uIHBhcmFtZXRlciBmb3JtYXR0aW5nIC0gT05MWSBmb3IgZnVuY3Rpb25zIHdpdGggcGFyYW1ldGVyIGVycm9yc1xuMTAuIFZhcmlhYmxlIG5hbWluZyBjb252ZW50aW9ucyAtIE9OTFkgZm9yIHZhcmlhYmxlcyB3aXRoIG5hbWluZyBlcnJvcnNcbjExLiBObyB1bnVzZWQgdmFyaWFibGVzIG9yIGltcG9ydHMgLSBPTkxZIGZvciB1bnVzZWQgdmFyaWFibGVzL2ltcG9ydHNcbjEyLiBBdm9pZGluZyBuZXN0ZWQgdGVybmFyaWVzIC0gT05MWSBmb3IgbmVzdGVkIHRlcm5hcnkgZXhwcmVzc2lvbnNcbjEzLiBBbnkgb3RoZXIgRVNMaW50IGVycm9ycyAtIE9OTFkgZm9yIHRoZSBzcGVjaWZpYyBlcnJvcnMgbGlzdGVkIGFib3ZlXG5cbldIQVQgTk9UIFRPIEZJWDpcbi0gRG8gbm90IGNoYW5nZSBwcm9wZXJseSBmb3JtYXR0ZWQgbXVsdGktbGluZSBzdHJ1Y3R1cmVzXG4tIERvIG5vdCByZW1vdmUgbGluZSBicmVha3MgdGhhdCBhcmUgbm90IGNhdXNpbmcgZXJyb3JzXG4tIERvIG5vdCBjaGFuZ2UgaW5kZW50YXRpb24gdGhhdCBpcyBhbHJlYWR5IGNvcnJlY3Rcbi0gRG8gbm90IG1vZGlmeSBzcGFjaW5nIHRoYXQgaXMgYWxyZWFkeSBjb3JyZWN0XG4tIERvIG5vdCBjb25kZW5zZSByZWFkYWJsZSBtdWx0aS1saW5lIGNvZGUgdG8gc2luZ2xlIGxpbmVzXG4tIERvIG5vdCBtb2RpZnkgY29kZSB0aGF0IGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIEVTTGludCBlcnJvcnNcblxuRXhhbXBsZSBvZiBDT1JSRUNUIGZvcm1hdHRpbmcgKERPIE5PVCBDSEFOR0UpOlxuZXhwb3J0IGNsYXNzIFVzZXJDb25zdGFudHMge1xuICBzdGF0aWMgcmVhZG9ubHkgQUREX0lURU1fRVJST1I6IHN0cmluZyA9ICdVU0VSX0FERF9JVEVNX0VSUk9SJztcbiAgc3RhdGljIHJlYWRvbmx5IE9USEVSX0NPTlNUQU5UOiBzdHJpbmcgPSAnT1RIRVJfQ09OU1RBTlQnO1xufVxuXG5jb25zdHJ1Y3RvcihmbHV4OiBGbHV4RnJhbWV3b3JrLCBDdXN0b21BZGFwdGVyOiB0eXBlb2YgRXZlbnQgPSBFdmVudCkge1xuICB0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O1xufVxuXG5pbXBvcnQge1xuICBhcHAsXG4gIGV2ZW50cyxcbiAgaW1hZ2VzLFxuICBsb2NhdGlvbnMsXG4gIG1lc3NhZ2VzLFxuICBwb3N0cyxcbiAgdGFncyxcbiAgdXNlcnMsXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcyc7XG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgYXBpS2V5OiAndmFsdWUnLFxuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICB0aW1lb3V0OiA1MDAwXG59O1xuXG5FeGFtcGxlIG9mIElOQ09SUkVDVCBmb3JtYXR0aW5nIChGSVggVEhJUyk6XG5leHBvcnQgY2xhc3MgVXNlckNvbnN0YW50cyB7c3RhdGljIHJlYWRvbmx5IEFERF9JVEVNX0VSUk9SOiBzdHJpbmcgPSAnVVNFUl9BRERfSVRFTV9FUlJPUic7XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHt0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O31cblxuaW1wb3J0IHthcHAsIGV2ZW50cywgaW1hZ2VzLCBsb2NhdGlvbnMsIG1lc3NhZ2VzLCBwb3N0cywgdGFncywgdXNlcnMsIHdlYnNvY2tldH0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7YmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywgYXBpS2V5OiAndmFsdWUnLCB0aW1lb3V0OiA1MDAwfTtcblxuRml4IE9OTFkgdGhlIHNwZWNpZmljIEVTTGludCBlcnJvcnMgbGlzdGVkIGFib3ZlLiBSZXZpZXcgdGhlIGVudGlyZSBmaWxlIGZvciBjb21wbGlhbmNlIHdpdGggYWxsIEVTTGludCBydWxlcy5cblJldHVybiBvbmx5IHRoZSBwcm9wZXJseSBmb3JtYXR0ZWQgZml4ZWQgY29kZSB3aXRob3V0IGFueSBleHBsYW5hdGlvbnMuYDtcblxuICAgICAgICAgICAgY29uc3QgZml4ZWRDb250ZW50ID0gYXdhaXQgY2FsbEFJU2VydmljZShwcm9tcHQsIHF1aWV0KTtcblxuICAgICAgICAgICAgaWYoZml4ZWRDb250ZW50ICYmIGZpeGVkQ29udGVudCAhPT0gZmlsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZml4ZWRDb250ZW50LCAndXRmOCcpO1xuICAgICAgICAgICAgICBsb2coYEFwcGxpZWQgQUkgZml4ZXMgdG8gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYEVycm9yIGFwcGx5aW5nIEFJIGZpeGVzIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQUkgZml4ZXMgYXBwbGllZCBzdWNjZXNzZnVsbHkhJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBhcHBseSBBSSBmaXhlcycpO1xuICAgIGxvZyhgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGFwcGx5RGlyZWN0Rml4ZXMgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgbGV0IHdhc01vZGlmaWVkID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICBsZXQgbmV3Q29udGVudCA9IGZpbGVDb250ZW50O1xuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2FpU2VydmljZS50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gYWlTZXJ2aWNlLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC8nQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uXFwvanNvbicsXFxzKidBdXRob3JpemF0aW9uJzogYEJlYXJlci9nLFxuICAgICAgICAnXFwnQXV0aG9yaXphdGlvblxcJzogYEJlYXJlclxcJywgXFwnQ29udGVudC1UeXBlXFwnOiBcXCdhcHBsaWNhdGlvbi9qc29uXFwnJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2hlYWRlcnM6IHsoW159XSopfSxcXHMqbWV0aG9kOiAnUE9TVCcvZyxcbiAgICAgICAgJ21ldGhvZDogXFwnUE9TVFxcJyxcXG4gICAgICBoZWFkZXJzOiB7JDF9J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL3tyb2xlOiAnc3lzdGVtJywgY29udGVudDovZyxcbiAgICAgICAgJ3tjb250ZW50Oiwgcm9sZTogXFwnc3lzdGVtXFwnLCdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAve3JvbGU6ICd1c2VyJywgY29udGVudDovZyxcbiAgICAgICAgJ3tjb250ZW50Oiwgcm9sZTogXFwndXNlclxcJywnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvXFwoKFteKV0qPylfKFthLXpBLVowLTldKykoXFxzKjpbXildKilcXCkvZyxcbiAgICAgICAgJygkMSQyJDMpJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvY29uc29sZVxcLmxvZ1xcKC9nLCAnbG9nKCcpO1xuXG4gICAgICBpZighbmV3Q29udGVudC5pbmNsdWRlcygnaW1wb3J0IHtsb2d9JykgJiYgbmV3Q29udGVudC5pbmNsdWRlcygnbG9nKCcpKSB7XG4gICAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgL2ltcG9ydCB7KFtefV0qKX0gZnJvbSAnKC4qKSc7LyxcbiAgICAgICAgICAnaW1wb3J0IHskMX0gZnJvbSBcXCckMlxcJztcXG5pbXBvcnQge2xvZ30gZnJvbSBcXCcuL2xvZy5qc1xcJzsnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ3JlYWN0U2hpbS50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBuYW1pbmctY29udmVudGlvbiBpc3N1ZXMgaW4gcmVhY3RTaGltLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICdpbXBvcnQgKiBhcyBSZWFjdCBmcm9tJyxcbiAgICAgICAgJ2ltcG9ydCAqIGFzIHJlYWN0IGZyb20nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9SZWFjdFxcLi9nLCAncmVhY3QuJyk7XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2NoYW5nZWxvZy50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gY2hhbmdlbG9nLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoLyhcXHcrKVxcK1xcKy9nLCAnJDEgKz0gMScpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwkL2csICckJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwuL2csICcuJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwqL2csICcqJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcOi9nLCAnOicpO1xuICAgIH1cblxuICAgIGlmKGZpbGVQYXRoLmluY2x1ZGVzKCdhcHAudHMnKSkge1xuICAgICAgbG9nKCdGaXhpbmcgaXNzdWVzIGluIGFwcC50cycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9jb25zb2xlXFwubG9nXFwoL2csICdsb2coJyk7XG5cbiAgICAgIGlmKCFuZXdDb250ZW50LmluY2x1ZGVzKCdpbXBvcnQge2xvZ30nKSAmJiBuZXdDb250ZW50LmluY2x1ZGVzKCdsb2coJykpIHtcbiAgICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICAvaW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJzsvLFxuICAgICAgICAgICdpbXBvcnQgYm94ZW4gZnJvbSBcXCdib3hlblxcJztcXG5pbXBvcnQge2xvZ30gZnJvbSBcXCcuL2xvZy5qc1xcJzsnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xcXFxcXC8vZywgJy8nKTtcbiAgICB9XG5cbiAgICBpZihmaWxlUGF0aC5pbmNsdWRlcygnYXV0b2ZpeC5qcycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gYXV0b2ZpeC5qcycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvaW1wb3J0IHsoW159XSopfSBmcm9tICdwYXRoJztbXFxzXFxuXSppbXBvcnQgeyhbXn1dKil9IGZyb20gJ3BhdGgnOy8sXG4gICAgICAgICdpbXBvcnQgeyQxLCAkMn0gZnJvbSBcXCdwYXRoXFwnOydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9fX2ZpbGVuYW1lL2csXG4gICAgICAgICdjdXJyZW50RmlsZW5hbWUnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL19fZGlybmFtZS9nLFxuICAgICAgICAnY3VycmVudERpcm5hbWUnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvY29uc3QgcHJlZml4ID0gdHlwZSA9PT0gJ2Vycm9yJyBcXD8gJ+KdjCAnIDogdHlwZSA9PT0gJ3N1Y2Nlc3MnIFxcPyAn4pyFICcgOiAn4oS577iPICc7LyxcbiAgICAgICAgJ2xldCBwcmVmaXggPSBcXCfihLnvuI8gXFwnO1xcbmlmKHR5cGUgPT09IFxcJ2Vycm9yXFwnKSB7XFxuICBwcmVmaXggPSBcXCfinYwgXFwnO1xcbn0gZWxzZSBpZih0eXBlID09PSBcXCdzdWNjZXNzXFwnKSB7XFxuICBwcmVmaXggPSBcXCfinIUgXFwnO1xcbn0nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gcnVuRXNsaW50Rml4XFwoXFwpL2csXG4gICAgICAgICdjb25zdCBydW5Fc2xpbnRGaXggPSBhc3luYyAoKSdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZXNXaXRoRXJyb3JzXFwoXFwpL2csXG4gICAgICAgICdjb25zdCBnZXRGaWxlc1dpdGhFcnJvcnMgPSBhc3luYyAoKSdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gaXNDdXJzb3JBdmFpbGFibGVcXChcXCkvZyxcbiAgICAgICAgJ2NvbnN0IGlzQ3Vyc29yQXZhaWxhYmxlID0gYXN5bmMgKCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIGZpeEZpbGVXaXRoQ3Vyc29yQUlcXChmaWxlUGF0aFxcKS9nLFxuICAgICAgICAnY29uc3QgZml4RmlsZVdpdGhDdXJzb3JBSSA9IGFzeW5jIChmaWxlUGF0aCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIG1haW5cXChcXCkvZyxcbiAgICAgICAgJ2NvbnN0IG1haW4gPSBhc3luYyAoKSdcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30vZyxcbiAgICAgICAgJ2ltcG9ydCB7d3JpdGVGaWxlU3luY30nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvY29uc29sZVxcLmxvZ1xcKGBcXCR7cHJlZml4fSBcXCR7bWVzc2FnZX1gXFwpOy9nLFxuICAgICAgICAncHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7cHJlZml4fSAke21lc3NhZ2V9XFxcXG5gKTsnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvfSBjYXRjaFxcKGVycm9yXFwpIHtbXFxzXFxuXSpcXC9cXC8gSWdub3JlIGNsZWFudXAgZXJyb3JzL2csXG4gICAgICAgICd9IGNhdGNoKF8pIHtcXG4gICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnMnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL30gY2F0Y2hcXChlcnJvclxcKSB7W1xcc1xcbl0qbG9nXFwoL2csXG4gICAgICAgICd9IGNhdGNoKGVycikge1xcbiAgICBsb2coJ1xuICAgICAgKTtcbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC99IGNhdGNoXFwoZXJyb3JcXCkge1tcXHNcXG5dKnJldHVybiBmYWxzZTsvZyxcbiAgICAgICAgJ30gY2F0Y2goXykge1xcbiAgICByZXR1cm4gZmFsc2U7J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2ZvclxcKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVzV2l0aEVycm9yc1xcKSB7W1xcc1xcbl0qY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpeEZpbGVXaXRoQ3Vyc29yQUlcXChmaWxlUGF0aFxcKTsvZyxcbiAgICAgICAgJ2NvbnN0IGZpeFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChmaWxlc1dpdGhFcnJvcnMubWFwKGZpbGVQYXRoID0+IGZpeEZpbGVXaXRoQ3Vyc29yQUkoZmlsZVBhdGgpKSk7XFxuZm9yKGNvbnN0IHN1Y2Nlc3Mgb2YgZml4UmVzdWx0cykgeydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9maXhlZENvdW50XFwrXFwrOy9nLFxuICAgICAgICAnZml4ZWRDb3VudCArPSAxOydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYobmV3Q29udGVudCAhPT0gZmlsZUNvbnRlbnQpIHtcbiAgICAgIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIG5ld0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBsb2coYEZpeGVkIGlzc3VlcyBpbiAke2ZpbGVQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgd2FzTW9kaWZpZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB3YXNNb2RpZmllZDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgYXBwbHlpbmcgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgbG9hZEFJQ29uZmlnID0gYXN5bmMgKGN3ZDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgZGVidWc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBjb25maWdGb3JtYXRzID0gWydqcycsICdtanMnLCAnY2pzJywgJ3RzJywgJ2pzb24nXTtcbiAgY29uc3QgY29uZmlnQmFzZU5hbWUgPSAnbGV4LmNvbmZpZyc7XG4gIGxldCBsZXhDb25maWdQYXRoID0gJyc7XG5cbiAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgYC4vJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCk7XG4gICAgaWYoZXhpc3RzU3luYyhwb3RlbnRpYWxQYXRoKSkge1xuICAgICAgbGV4Q29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZihsZXhDb25maWdQYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZvciBNSlMgZmlsZXMsIHdlIG5lZWQgdG8gdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggVVJMIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICBjb25zdCBmb3JtYXQgPSBleHRuYW1lKGxleENvbmZpZ1BhdGgpLnNsaWNlKDEpO1xuICAgICAgbGV0IGltcG9ydFBhdGggPSBsZXhDb25maWdQYXRoO1xuXG4gICAgICAvLyBVc2UgVVJMIHByb3RvY29sIGZvciBFU00gaW1wb3J0c1xuICAgICAgaWYoZm9ybWF0ID09PSAnbWpzJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYGZpbGU6Ly8ke2xleENvbmZpZ1BhdGh9YCk7XG4gICAgICAgICAgaW1wb3J0UGF0aCA9IHVybC5ocmVmO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYFVzaW5nIFVSTCBmb3JtYXQgZm9yIE1KUyBpbXBvcnQ6ICR7aW1wb3J0UGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2godXJsRXJyb3IpIHtcbiAgICAgICAgICBsb2coYEVycm9yIGNyZWF0aW5nIFVSTCBmb3IgTUpTIGltcG9ydDogJHt1cmxFcnJvci5tZXNzYWdlfWAsICd3YXJuJywgZGVidWcgfHwgIXF1aWV0KTtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gYGZpbGU6Ly8ke2xleENvbmZpZ1BhdGh9YDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFRyeWluZyB0byBpbXBvcnQgY29uZmlnIGZyb20gJHtpbXBvcnRQYXRofSAoZm9ybWF0OiAke2Zvcm1hdH0pYCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBsZXhDb25maWc7XG4gICAgICB0cnkge1xuICAgICAgICBsZXhDb25maWcgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICB9IGNhdGNoKGltcG9ydEVycm9yKSB7XG4gICAgICAgIGlmKGltcG9ydEVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBkZWZpbmVkIGluIEVTIG1vZHVsZSBzY29wZScpKSB7XG4gICAgICAgICAgbG9nKGBFUyBNb2R1bGUgc3ludGF4IGVycm9yIGluICR7bGV4Q29uZmlnUGF0aH0uIE1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgJ2V4cG9ydCcgaW5zdGVhZCBvZiAnbW9kdWxlLmV4cG9ydHMnLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihpbXBvcnRFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBpbXBvcnRFcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGJvdGggRVNNIChkZWZhdWx0IGV4cG9ydCkgYW5kIENvbW1vbkpTIChtb2R1bGUuZXhwb3J0cylcbiAgICAgIGxldCBjb25maWdEYXRhID0gbnVsbDtcbiAgICAgIGlmKGxleENvbmZpZy5kZWZhdWx0KSB7XG4gICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWcuZGVmYXVsdDtcbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYEZvdW5kIGRlZmF1bHQgZXhwb3J0IGluICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIENvbW1vbkpTIG9yIG90aGVyIG1vZHVsZSBzeXN0ZW1zXG4gICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWc7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBVc2luZyBkaXJlY3QgZXhwb3J0IGluICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihjb25maWdEYXRhICYmIGNvbmZpZ0RhdGEuYWkpIHtcbiAgICAgICAgbG9nKGBGb3VuZCBBSSBjb25maWd1cmF0aW9uIGluICR7cGF0aFJlc29sdmUoY3dkLCBsZXhDb25maWdQYXRoKX0sIGFwcGx5aW5nIHNldHRpbmdzLi4uYCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5haSwgLi4uY29uZmlnRGF0YS5haX07XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBFcnJvciBsb2FkaW5nIEFJIGNvbmZpZ3VyYXRpb24gZnJvbSAke2xleENvbmZpZ1BhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogTG9hZCBFU0xpbnQgY29uZmlndXJhdGlvbiBmcm9tIGxleC5jb25maWcuKiBmaWxlc1xuICovXG5jb25zdCBsb2FkRVNMaW50Q29uZmlnID0gYXN5bmMgKGN3ZDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgLy8gQ2hlY2sgaWYgTGV4Q29uZmlnIGFscmVhZHkgaGFzIEVTTGludCBjb25maWd1cmF0aW9uIGxvYWRlZFxuICBpZihMZXhDb25maWcuY29uZmlnLmVzbGludCAmJiBPYmplY3Qua2V5cyhMZXhDb25maWcuY29uZmlnLmVzbGludCkubGVuZ3RoID4gMCkge1xuICAgIGxvZygnRm91bmQgRVNMaW50IGNvbmZpZ3VyYXRpb24gaW4gbGV4LmNvbmZpZy4qIGZpbGUnLCAnaW5mbycsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUcnkgdG8gbG9hZCBmcm9tIGxleC5jb25maWcuKiBmaWxlcyBpZiBub3QgYWxyZWFkeSBsb2FkZWRcbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG4gIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lID0gJ2xleC5jb25maWcnO1xuXG4gIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgIGNvbnN0IHBvdGVudGlhbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGAuLyR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWApO1xuICAgIGlmKGV4aXN0c1N5bmMocG90ZW50aWFsUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEZvciBNSlMgZmlsZXMsIHdlIG5lZWQgdG8gdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggVVJMIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgIGNvbnN0IGZpbGVGb3JtYXQgPSBleHRuYW1lKHBvdGVudGlhbFBhdGgpLnNsaWNlKDEpO1xuICAgICAgICBsZXQgaW1wb3J0UGF0aCA9IHBvdGVudGlhbFBhdGg7XG5cbiAgICAgICAgLy8gVXNlIFVSTCBwcm90b2NvbCBmb3IgRVNNIGltcG9ydHNcbiAgICAgICAgaWYoZmlsZUZvcm1hdCA9PT0gJ21qcycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgZmlsZTovLyR7cG90ZW50aWFsUGF0aH1gKTtcbiAgICAgICAgICAgIGltcG9ydFBhdGggPSB1cmwuaHJlZjtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgVXNpbmcgVVJMIGZvcm1hdCBmb3IgTUpTIGltcG9ydDogJHtpbXBvcnRQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2godXJsRXJyb3IpIHtcbiAgICAgICAgICAgIGxvZyhgRXJyb3IgY3JlYXRpbmcgVVJMIGZvciBNSlMgaW1wb3J0OiAke3VybEVycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBkZWJ1ZyB8fCAhcXVpZXQpO1xuICAgICAgICAgICAgaW1wb3J0UGF0aCA9IGBmaWxlOi8vJHtwb3RlbnRpYWxQYXRofWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYFRyeWluZyB0byBpbXBvcnQgY29uZmlnIGZyb20gJHtpbXBvcnRQYXRofSAoZm9ybWF0OiAke2ZpbGVGb3JtYXR9KWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxleENvbmZpZztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXhDb25maWcgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICAgIH0gY2F0Y2goaW1wb3J0RXJyb3IpIHtcbiAgICAgICAgICBpZihpbXBvcnRFcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdub3QgZGVmaW5lZCBpbiBFUyBtb2R1bGUgc2NvcGUnKSkge1xuICAgICAgICAgICAgbG9nKGBFUyBNb2R1bGUgc3ludGF4IGVycm9yIGluICR7cG90ZW50aWFsUGF0aH0uIE1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgJ2V4cG9ydCcgaW5zdGVhZCBvZiAnbW9kdWxlLmV4cG9ydHMnLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoaW1wb3J0RXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGltcG9ydEVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGJvdGggRVNNIChkZWZhdWx0IGV4cG9ydCkgYW5kIENvbW1vbkpTIChtb2R1bGUuZXhwb3J0cylcbiAgICAgICAgbGV0IGNvbmZpZ0RhdGEgPSBudWxsO1xuICAgICAgICBpZihsZXhDb25maWcuZGVmYXVsdCkge1xuICAgICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWcuZGVmYXVsdDtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBGb3VuZCBkZWZhdWx0IGV4cG9ydCBpbiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBDb21tb25KUyBvciBvdGhlciBtb2R1bGUgc3lzdGVtc1xuICAgICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWc7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgVXNpbmcgZGlyZWN0IGV4cG9ydCBpbiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoY29uZmlnRGF0YSAmJiBjb25maWdEYXRhLmVzbGludCAmJiBPYmplY3Qua2V5cyhjb25maWdEYXRhLmVzbGludCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZyhgRm91bmQgRVNMaW50IGNvbmZpZ3VyYXRpb24gaW4gJHtwYXRoUmVzb2x2ZShjd2QsIHBvdGVudGlhbFBhdGgpfSwgYXBwbHlpbmcgc2V0dGluZ3MuLi5gLCAnaW5mbycsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQsIC4uLmNvbmZpZ0RhdGEuZXNsaW50fTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYEVycm9yIGxvYWRpbmcgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSAke3BvdGVudGlhbFBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCByZW1vdmVGaWxlQ29tbWVudHMgPSAoZmlsZVBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4pOiBib29sZWFuID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICAgIGlmKGZpbGVDb250ZW50Lmxlbmd0aCA+IDEwMDAwMDApIHsgLy8gMU1CIGxpbWl0XG4gICAgICBsb2coYFNraXBwaW5nIGNvbW1lbnQgcmVtb3ZhbCBmb3IgbGFyZ2UgZmlsZTogJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gVXNlIHJlZ2V4IHRvIG1hdGNoIGRpZmZlcmVudCB0eXBlcyBvZiBjb21tZW50c1xuICAgIC8vIFByZXNlcnZlczpcbiAgICAvLyAxLiBDb3B5cmlnaHQgbm90aWNlcyAoLyogQ29weXJpZ2h0IC4uLiAqLylcbiAgICAvLyAyLiBUT0RPIGNvbW1lbnRzICgvLyBUT0RPOiAuLi4pXG4gICAgLy8gMy4gTGljZW5zZSBoZWFkZXJzICgvKiAuLi4gTGljZW5zZSAuLi4gKi8pXG5cbiAgICAvLyBIYW5kbGUgbXVsdGktbGluZSBjb21tZW50cyBmaXJzdCAtIHByZXNlcnZlIGNvcHlyaWdodC9saWNlbnNlIG5vdGljZXNcbiAgICBsZXQgbmV3Q29udGVudCA9IGZpbGVDb250ZW50LnJlcGxhY2UoXG4gICAgICAvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLFxuICAgICAgKG1hdGNoKSA9PiB7XG4gICAgICAgIGlmKG1hdGNoLmluY2x1ZGVzKCdDb3B5cmlnaHQnKSB8fFxuICAgICAgICAgIG1hdGNoLmluY2x1ZGVzKCdMSUNFTlNFJykgfHxcbiAgICAgICAgICBtYXRjaC5pbmNsdWRlcygnTGljZW5zZScpIHx8XG4gICAgICAgICAgbWF0Y2guaW5jbHVkZXMoJ2xpY2Vuc2UnKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhhbmRsZSBzaW5nbGUtbGluZSBjb21tZW50cyAtIHByZXNlcnZlIFRPRE9zXG4gICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgIC9cXC9cXC8uKiQvZ20sXG4gICAgICAobWF0Y2gpID0+IHtcbiAgICAgICAgaWYobWF0Y2guaW5jbHVkZXMoJ1RPRE8nKSB8fCBtYXRjaC5pbmNsdWRlcygnRklYTUUnKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIENsZWFuIHVwIGFueSBtdWx0aXBsZSBibGFuayBsaW5lcyBjcmVhdGVkIGJ5IGNvbW1lbnQgcmVtb3ZhbFxuICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xcblxccypcXG5cXHMqXFxuL2csICdcXG5cXG4nKTtcblxuICAgIC8vIElmIHRoZSBmaWxlIHdhcyBtb2RpZmllZCwgc2F2ZSBpdFxuICAgIGlmKG5ld0NvbnRlbnQgIT09IGZpbGVDb250ZW50KSB7XG4gICAgICB3cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBuZXdDb250ZW50LCAndXRmOCcpO1xuICAgICAgbG9nKGBSZW1vdmVkIGNvbW1lbnRzIGZyb20gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgcmVtb3ZpbmcgY29tbWVudHMgZnJvbSAke2ZpbGVQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsaW50ID0gYXN5bmMgKGNtZDogTGludE9wdGlvbnMgJiB7J3JlbW92ZS1jb21tZW50cyc/OiBib29sZWFufSwgY2FsbGJhY2s6IExpbnRDYWxsYmFjayA9IHByb2Nlc3MuZXhpdCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZml4ID0gZmFsc2UsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBxdWlldCA9IGZhbHNlLFxuICAgIGNvbmZpZyA9IG51bGwsXG4gICAgcmVtb3ZlQ29tbWVudHMgPSBmYWxzZSxcbiAgICAncmVtb3ZlLWNvbW1lbnRzJzogcmVtb3ZlQ29tbWVudHNGbGFnID0gZmFsc2VcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzaG91bGRSZW1vdmVDb21tZW50cyA9IHJlbW92ZUNvbW1lbnRzIHx8IHJlbW92ZUNvbW1lbnRzRmxhZztcblxuICBsb2coYCR7Y2xpTmFtZX0gbGludGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBhd2FpdCBsb2FkQUlDb25maWcoY3dkLCBxdWlldCwgZGVidWcpO1xuXG4gIGxldCB0ZW1wQ29uZmlnUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VUeXBlc2NyaXB0ID0gZGV0ZWN0VHlwZVNjcmlwdChjd2QpO1xuICAgIGxvZyhgVHlwZVNjcmlwdCAke3VzZVR5cGVzY3JpcHQgPyAnZGV0ZWN0ZWQnIDogJ25vdCBkZXRlY3RlZCd9IGZyb20gdHNjb25maWcuanNvbmAsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgICAgTGV4Q29uZmlnLmNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKTtcbiAgICB9XG5cbiAgICBlbnN1cmVNb2R1bGVUeXBlKGN3ZCk7XG5cbiAgICBhd2FpdCBpbnN0YWxsRGVwZW5kZW5jaWVzKGN3ZCwgdXNlVHlwZXNjcmlwdCwgcXVpZXQpO1xuXG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLm1qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLnRzJyk7XG4gICAgY29uc3QgaGFzRXNsaW50Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHxcbiAgICAgIGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy5qc29uJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy55bWwnKSkgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLnlhbWwnKSkgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjJykpO1xuXG4gICAgY29uc3QgaGFzTGV4RXNsaW50Q29uZmlnID0gYXdhaXQgbG9hZEVTTGludENvbmZpZyhjd2QsIHF1aWV0LCBkZWJ1Zyk7XG5cbiAgICBpZihoYXNMZXhFc2xpbnRDb25maWcpIHtcbiAgICAgIGxvZygnVXNpbmcgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSBsZXguY29uZmlnLiogZmlsZScsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cblxuICAgIGlmKGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzb24nKSkpIHtcbiAgICAgIHVubGlua1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzb24nKSk7XG4gICAgfVxuXG4gICAgbGV0IGxleENvbmZpZ1BhdGggPSAnJztcbiAgICBsZXQgc2hvdWxkQ3JlYXRlVGVtcENvbmZpZyA9IGZhbHNlO1xuXG4gICAgaWYoIWhhc0VzbGludENvbmZpZyAmJiAhaGFzTGV4RXNsaW50Q29uZmlnKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZVBhdGhzID0gW1xuICAgICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICcuLi8uLi8uLi8uLi9lc2xpbnQuY29uZmlnLmptcycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnLi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcuL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ2VzbGludC5jb25maWcubWpzJylcbiAgICAgIF07XG5cbiAgICAgIGZvcihjb25zdCBwYXRoIG9mIHBvc3NpYmxlUGF0aHMpIHtcbiAgICAgICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAgIGxleENvbmZpZ1BhdGggPSBwYXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgQ3VycmVudCBkaXJlY3Rvcnk6ICR7Y3VycmVudERpcm5hbWV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGxvZyhgUHJvamVjdCBjb25maWcgcGF0aDogJHtwcm9qZWN0Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBQcm9qZWN0IGNvbmZpZyBleGlzdHM6ICR7aGFzRXNsaW50Q29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBsb2coYEZvdW5kIExleCBjb25maWc6ICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBMZXggY29uZmlnIGV4aXN0czogJHshIWxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYobGV4Q29uZmlnUGF0aCAmJiBleGlzdHNTeW5jKGxleENvbmZpZ1BhdGgpKSB7XG4gICAgICAgIGxvZygnTm8gRVNMaW50IGNvbmZpZ3VyYXRpb24gZm91bmQgaW4gcHJvamVjdC4gVXNpbmcgTGV4XFwncyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaG91bGRDcmVhdGVUZW1wQ29uZmlnID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihjb25maWcpIHtcbiAgICAgIGNvbnN0IHVzZXJDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBjb25maWcpO1xuICAgICAgaWYoZXhpc3RzU3luYyh1c2VyQ29uZmlnUGF0aCkpIHtcbiAgICAgICAgbG9nKGBVc2luZyBzcGVjaWZpZWQgRVNMaW50IGNvbmZpZ3VyYXRpb246ICR7Y29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBzaG91bGRDcmVhdGVUZW1wQ29uZmlnID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFNwZWNpZmllZCBFU0xpbnQgY29uZmlndXJhdGlvbiBub3QgZm91bmQ6ICR7Y29uZmlnfS4gVXNpbmcgTGV4J3MgZGVmYXVsdCBjb25maWd1cmF0aW9uLmAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHNob3VsZENyZWF0ZVRlbXBDb25maWcpIHtcbiAgICAgIGxvZygnTm8gRVNMaW50IGNvbmZpZ3VyYXRpb24gZm91bmQuIENyZWF0aW5nIGEgdGVtcG9yYXJ5IGNvbmZpZ3VyYXRpb24uLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGNvbmZpZ1Jlc3VsdCA9IGNyZWF0ZURlZmF1bHRFU0xpbnRDb25maWcodXNlVHlwZXNjcmlwdCwgY3dkKTtcbiAgICAgIHRlbXBDb25maWdQYXRoID0gY29uZmlnUmVzdWx0LmNvbmZpZ1BhdGg7XG4gICAgfVxuXG4gICAgbGV0IGVzbGludE91dHB1dCA9ICcnO1xuICAgIGNvbnN0IGNhcHR1cmVPdXRwdXQgPSAob3V0cHV0OiBzdHJpbmcpID0+IHtcbiAgICAgIGVzbGludE91dHB1dCArPSBgJHtvdXRwdXR9XFxuYDtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuRXNsaW50V2l0aExleChjd2QsIHF1aWV0LCBjbGlOYW1lLCB0cnVlLCBkZWJ1ZywgdXNlVHlwZXNjcmlwdCwgY2FwdHVyZU91dHB1dCk7XG5cbiAgICBpZihzaG91bGRSZW1vdmVDb21tZW50cykge1xuICAgICAgc3Bpbm5lci5zdGFydCgnUmVtb3ZpbmcgY29tbWVudHMgZnJvbSBmaWxlcy4uLicpO1xuXG4gICAgICBjb25zdCBnbG9iID0gYXdhaXQgaW1wb3J0KCdnbG9iJyk7XG4gICAgICBjb25zdCBmaWxlcyA9IGdsb2Iuc3luYygne3NyYyxsaWJ9LyoqLyoue2pzLGpzeCx0cyx0c3h9Jywge1xuICAgICAgICBjd2QsXG4gICAgICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovbGliLyoqJywgJyoqL2Rpc3QvKionLCAnKiovYnVpbGQvKionXVxuICAgICAgfSk7XG5cbiAgICAgIGxldCBwcm9jZXNzZWRDb3VudCA9IDA7XG4gICAgICBmb3IoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZSk7XG4gICAgICAgIGlmKHJlbW92ZUZpbGVDb21tZW50cyhmaWxlUGF0aCwgcXVpZXQpKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoYFJlbW92ZWQgY29tbWVudHMgZnJvbSAke3Byb2Nlc3NlZENvdW50fSBmaWxlc2ApO1xuICAgIH1cblxuICAgIGlmKHJlc3VsdCAhPT0gMCAmJiBmaXgpIHtcbiAgICAgIGNvbnN0IGFpQ29uZmlndXJlZCA9IExleENvbmZpZy5jb25maWcuYWk/LnByb3ZpZGVyICYmIExleENvbmZpZy5jb25maWcuYWkucHJvdmlkZXIgIT09ICdub25lJztcblxuICAgICAgaWYoYWlDb25maWd1cmVkKSB7XG4gICAgICAgIGxvZygnQXBwbHlpbmcgQUkgZml4ZXMgdG8gcmVtYWluaW5nIGlzc3Vlcy4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBhd2FpdCBhcHBseUFJRml4KGN3ZCwgZXNsaW50T3V0cHV0LCBxdWlldCk7XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJGaXhSZXN1bHQgPSBhd2FpdCBydW5Fc2xpbnRXaXRoTGV4KGN3ZCwgcXVpZXQsIGNsaU5hbWUsIGZhbHNlLCBkZWJ1ZywgdXNlVHlwZXNjcmlwdCk7XG5cbiAgICAgICAgY2FsbGJhY2soYWZ0ZXJGaXhSZXN1bHQpO1xuICAgICAgICByZXR1cm4gYWZ0ZXJGaXhSZXN1bHQ7XG4gICAgICB9XG4gICAgICBsb2coJ0VTTGludCBjb3VsZCBub3QgZml4IGFsbCBpc3N1ZXMgYXV0b21hdGljYWxseS4nLCAnd2FybicsIHF1aWV0KTtcbiAgICAgIGxvZygnVG8gZW5hYmxlIEFJLXBvd2VyZWQgZml4ZXMsIGFkZCBBSSBjb25maWd1cmF0aW9uIHRvIHlvdXIgbGV4LmNvbmZpZyBmaWxlOicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgbG9nKGBcbi8vIEluIGxleC5jb25maWcuanMgKG9yIGxleC5jb25maWcubWpzLCBsZXguY29uZmlnLmNqcywgZXRjLilcbmV4cG9ydCBkZWZhdWx0IHtcbiAgLy8gWW91ciBleGlzdGluZyBjb25maWdcbiAgYWk6IHtcbiAgICBwcm92aWRlcjogJ2N1cnNvcicgLy8gb3IgJ29wZW5haScsICdhbnRocm9waWMnLCBldGMuXG4gICAgLy8gQWRkaXRpb25hbCBwcm92aWRlci1zcGVjaWZpYyBzZXR0aW5nc1xuICB9XG59O2AsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBpZihzcGlubmVyKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0xpbnRpbmcgZmFpbGVkIScpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCB0ZW1wRmlsZVBhdGhzID0gW1xuICAgICAgdGVtcENvbmZpZ1BhdGgsXG4gICAgICBwYXRoUmVzb2x2ZShjd2QsICcubGV4LXRlbXAtZXNsaW50LmNqcycpLFxuICAgICAgcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWRlZmF1bHQtZXNsaW50LmNqcycpXG4gICAgXTtcblxuICAgIGZvcihjb25zdCBmaWxlUGF0aCBvZiB0ZW1wRmlsZVBhdGhzKSB7XG4gICAgICBpZihmaWxlUGF0aCAmJiBleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHVubGlua1N5bmMoZmlsZVBhdGgpO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYENsZWFuZWQgdXAgdGVtcG9yYXJ5IEVTTGludCBjb25maWcgYXQgJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2h7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07Il0sIm5hbWVzIjpbImV4ZWNhIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInVubGlua1N5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImV4dG5hbWUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJjdXJyZW50RmlsZW5hbWUiLCJjdXJyZW50RGlybmFtZSIsImV2YWwiLCJwcm9jZXNzIiwiY3dkIiwiY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyIsInVzZVR5cGVzY3JpcHQiLCJjb25maWdQYXRoIiwib3JpZ2luYWxDb25maWciLCJjb25maWdDb250ZW50IiwiZGV0ZWN0VHlwZVNjcmlwdCIsImVuc3VyZU1vZHVsZVR5cGUiLCJwYWNrYWdlSnNvblBhdGgiLCJwYWNrYWdlSnNvbkNvbnRlbnQiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsInR5cGUiLCJfZXJyb3IiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwicXVpZXQiLCJydW5Fc2xpbnRXaXRoTGV4IiwiY2xpTmFtZSIsImZpeCIsImRlYnVnIiwiY2FwdHVyZU91dHB1dCIsInNwaW5uZXIiLCJwcm9qZWN0Q29uZmlnUGF0aCIsInByb2plY3RDb25maWdQYXRoVHMiLCJoYXNQcm9qZWN0Q29uZmlnIiwiaGFzTGV4Q29uZmlnRXNsaW50IiwiY29uZmlnIiwiZXNsaW50IiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInBvc3NpYmxlUGF0aHMiLCJlbnYiLCJMRVhfSE9NRSIsImxleENvbmZpZ1BhdGgiLCJwYXRoIiwidGVtcENvbmZpZ1BhdGgiLCJzdHJpbmdpZnkiLCJlc2xpbnRCaW5hcnkiLCJiYXNlRXNsaW50QXJncyIsImNvbmZpZ0FyZ3MiLCJqc1Jlc3VsdCIsInJlamVjdCIsInNoZWxsIiwic3RkaW8iLCJzdGRvdXQiLCJjb25zb2xlIiwic3RkZXJyIiwiZXJyb3IiLCJ0c1Jlc3VsdCIsImV4aXRDb2RlIiwibWVzc2FnZSIsImVzbGludE5vdEZvdW5kIiwiaW5jbHVkZXMiLCJmYWlsIiwic3VjY2VlZCIsIm5vRmlsZXNGb3VuZCIsImFwcGx5QUlGaXgiLCJlcnJvcnMiLCJzdGFydCIsImZpbGVFcnJvck1hcCIsIk1hcCIsImxpbmVzIiwic3BsaXQiLCJjdXJyZW50RmlsZSIsImxpbmUiLCJtYXRjaCIsInRyaW0iLCJoYXMiLCJzZXQiLCJlcnJvckFycmF5IiwiZ2V0IiwicHVzaCIsInNpemUiLCJzZWN0aW9ucyIsInNlY3Rpb24iLCJmaWxlUGF0aCIsImkiLCJmaWxlUGF0aFJlZ2V4IiwiZmlsZVBhdGhzIiwia25vd25GaWxlcyIsImZpbGUiLCJpc0N1cnNvcklERSIsImFpIiwicHJvdmlkZXIiLCJDVVJTT1JfSURFIiwicHJvbXB0IiwicHJvbXB0RmlsZSIsIndhc01vZGlmaWVkIiwiYXBwbHlEaXJlY3RGaXhlcyIsImZpbGVFcnJvcnMiLCJjYWxsQUlTZXJ2aWNlIiwiZmlsZUNvbnRlbnQiLCJqb2luIiwiZml4ZWRDb250ZW50IiwibmV3Q29udGVudCIsInJlcGxhY2UiLCJsb2FkQUlDb25maWciLCJjb25maWdGb3JtYXRzIiwiY29uZmlnQmFzZU5hbWUiLCJmb3JtYXQiLCJwb3RlbnRpYWxQYXRoIiwic2xpY2UiLCJpbXBvcnRQYXRoIiwidXJsIiwiVVJMIiwiaHJlZiIsInVybEVycm9yIiwibGV4Q29uZmlnIiwiaW1wb3J0RXJyb3IiLCJjb25maWdEYXRhIiwiZGVmYXVsdCIsImxvYWRFU0xpbnRDb25maWciLCJmaWxlRm9ybWF0IiwicmVtb3ZlRmlsZUNvbW1lbnRzIiwibGludCIsImNtZCIsImNhbGxiYWNrIiwiZXhpdCIsInJlbW92ZUNvbW1lbnRzIiwicmVtb3ZlQ29tbWVudHNGbGFnIiwic2hvdWxkUmVtb3ZlQ29tbWVudHMiLCJjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnIiwiaGFzRXNsaW50Q29uZmlnIiwiaGFzTGV4RXNsaW50Q29uZmlnIiwic2hvdWxkQ3JlYXRlVGVtcENvbmZpZyIsInVzZXJDb25maWdQYXRoIiwiY29uZmlnUmVzdWx0IiwiZXNsaW50T3V0cHV0Iiwib3V0cHV0IiwicmVzdWx0IiwiZ2xvYiIsImZpbGVzIiwic3luYyIsImlnbm9yZSIsInByb2Nlc3NlZENvdW50IiwiYWlDb25maWd1cmVkIiwiYWZ0ZXJGaXhSZXN1bHQiLCJ0ZW1wRmlsZVBhdGhz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
|
|
948
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9saW50L2xpbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB1bmxpbmtTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2Rpcm5hbWUsIHJlc29sdmUgYXMgcGF0aFJlc29sdmUsIGV4dG5hbWV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7cmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmxldCBjdXJyZW50RmlsZW5hbWU6IHN0cmluZztcbmxldCBjdXJyZW50RGlybmFtZTogc3RyaW5nO1xuXG50cnkge1xuICBjdXJyZW50RmlsZW5hbWUgPSBldmFsKCdyZXF1aXJlKFwidXJsXCIpLmZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKScpO1xuICBjdXJyZW50RGlybmFtZSA9IGRpcm5hbWUoY3VycmVudEZpbGVuYW1lKTtcbn0gY2F0Y2h7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNhY2hlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FjaGVGaWxlPzogc3RyaW5nO1xuICByZWFkb25seSBjYWNoZUxvY2F0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBjb2xvcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudkluZm8/OiBib29sZWFuO1xuICByZWFkb25seSBleHQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZpeD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeERyeVJ1bj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZpeFR5cGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZvcm1hdD86IHN0cmluZztcbiAgcmVhZG9ubHkgZ2xvYmFsPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBpZ25vcmVQYXR0ZXJuPzogc3RyaW5nO1xuICByZWFkb25seSBpbml0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbWF4V2FybmluZ3M/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5vQ29sb3I/OiBib29sZWFuO1xuICByZWFkb25seSBub0VzbGludHJjPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbm9JZ25vcmU/OiBib29sZWFuO1xuICByZWFkb25seSBub0lubGluZUNvbmZpZz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcnNlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyc2VyT3B0aW9ucz86IHN0cmluZztcbiAgcmVhZG9ubHkgcGx1Z2luPzogc3RyaW5nO1xuICByZWFkb25seSBwcmludENvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmVDb21tZW50cz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlcG9ydFVudXNlZERpc2FibGVEaXJlY3RpdmVzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVzb2x2ZVBsdWdpbnNSZWxhdGl2ZVRvPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlc2Rpcj86IHN0cmluZztcbiAgcmVhZG9ubHkgc3RkaW4/OiBib29sZWFuO1xuICByZWFkb25seSBzdGRpbkZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBMaW50Q2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5pbnRlcmZhY2UgQ29uZmlnUmVzdWx0IHtcbiAgY29uZmlnUGF0aDogc3RyaW5nO1xuICBvcmlnaW5hbENvbmZpZzogc3RyaW5nIHwgbnVsbDtcbn1cblxuY29uc3QgY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyA9ICh1c2VUeXBlc2NyaXB0OiBib29sZWFuLCBjd2Q6IHN0cmluZyk6IENvbmZpZ1Jlc3VsdCA9PiB7XG4gIC8vIFVzZSBhIHRlbXBvcmFyeSBmaWxlIHBhdGggaW5zdGVhZCBvZiBjcmVhdGluZyBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnlcbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcbiAgY29uc3Qgb3JpZ2luYWxDb25maWcgPSBudWxsO1xuXG4gIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBDb21tb25KUyBtb2R1bGUgdGhhdCByZXF1aXJlcyBMZXgncyBFU0xpbnQgY29uZmlnXG4gIGNvbnN0IGNvbmZpZ0NvbnRlbnQgPSBgLy8gVGVtcG9yYXJ5IEVTTGludCBjb25maWcgZ2VuZXJhdGVkIGJ5IExleFxuY29uc3QgbGV4Q29uZmlnID0gcmVxdWlyZSgnQG5sYWJzL2xleC9lc2xpbnQuY29uZmlnLm1qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxleENvbmZpZztgO1xuXG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcblxuICByZXR1cm4ge1xuICAgIGNvbmZpZ1BhdGgsXG4gICAgb3JpZ2luYWxDb25maWdcbiAgfTtcbn07XG5cbmNvbnN0IGRldGVjdFR5cGVTY3JpcHQgPSAoY3dkOiBzdHJpbmcpOiBib29sZWFuID0+IGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuanNvbicpKTtcblxuLyoqXG4gKiBFbnN1cmUgcGFja2FnZS5qc29uIGhhcyB0eXBlOiBtb2R1bGUgZm9yIEVTTSBzdXBwb3J0XG4gKi9cbmNvbnN0IGVuc3VyZU1vZHVsZVR5cGUgPSAoY3dkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uQ29udGVudCA9IHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcblxuICAgICAgLy8gSWYgdHlwZSBpcyBub3Qgc2V0IHRvIG1vZHVsZSwgd2FybiBpbnN0ZWFkIG9mIGF1dG8tbW9kaWZ5aW5nXG4gICAgICBpZihwYWNrYWdlSnNvbi50eXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICBsb2coJ1dhcm5pbmc6IHBhY2thZ2UuanNvbiBzaG91bGQgaGF2ZSBcInR5cGVcIjogXCJtb2R1bGVcIiBmb3IgRVNNIHN1cHBvcnQuIFBsZWFzZSBhZGQgdGhpcyBtYW51YWxseS4nLCAnd2FybicsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgLy8gSWdub3JlIGVycm9yc1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaW5zdGFsbERlcGVuZGVuY2llcyA9IGFzeW5jIChjd2Q6IHN0cmluZywgdXNlVHlwZXNjcmlwdDogYm9vbGVhbiwgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGxvZygnVXNpbmcgVHlwZVNjcmlwdCBFU0xpbnQgZnJvbSBMZXguLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgfSBlbHNlIHtcbiAgICBsb2coJ1VzaW5nIEVTTGludCBmcm9tIExleC4uLicsICdpbmZvJywgcXVpZXQpO1xuICB9XG59O1xuXG5jb25zdCBydW5Fc2xpbnRXaXRoTGV4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGNsaU5hbWU6IHN0cmluZyxcbiAgZml4OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhbixcbiAgdXNlVHlwZXNjcmlwdDogYm9vbGVhbixcbiAgY2FwdHVyZU91dHB1dD86IChvdXRwdXQ6IHN0cmluZyk9PiB2b2lkXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJ2VzbGludC5jb25maWcubWpzJyk7XG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGhUcyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ2VzbGludC5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcbiAgICBjb25zdCBoYXNMZXhDb25maWdFc2xpbnQgPSBMZXhDb25maWcuY29uZmlnLmVzbGludCAmJiBPYmplY3Qua2V5cyhMZXhDb25maWcuY29uZmlnLmVzbGludCkubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IHBvc3NpYmxlUGF0aHMgPSBbXG4gICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcubWpzJyksXG4gICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcudHMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcvdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLm1qcycpLFxuICAgICAgcGF0aFJlc29sdmUocHJvY2Vzcy5lbnYuTEVYX0hPTUUgfHwgJy91c3IvbG9jYWwvbGliL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ2VzbGludC5jb25maWcudHMnKVxuICAgIF07XG5cbiAgICBsZXQgbGV4Q29uZmlnUGF0aCA9ICcnO1xuXG4gICAgZm9yKGNvbnN0IHBhdGggb2YgcG9zc2libGVQYXRocykge1xuICAgICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICBsZXhDb25maWdQYXRoID0gcGF0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNvbmZpZ1BhdGggPSAnJztcbiAgICBsZXQgdGVtcENvbmZpZ1BhdGggPSAnJztcblxuICAgIC8vIFByaW9yaXR5OlxuICAgIC8vIDEuIFByb2plY3QgZXNsaW50LmNvbmZpZyBmaWxlc1xuICAgIC8vIDIuIEVTTGludCBjb25maWcgaW4gbGV4LmNvbmZpZy4qIGZpbGVcbiAgICAvLyAzLiBMZXgncyBkZWZhdWx0IGVzbGludC5jb25maWcubWpzXG4gICAgLy8gNC4gQ3JlYXRlIGEgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlXG4gICAgaWYoaGFzUHJvamVjdENvbmZpZykge1xuICAgICAgY29uZmlnUGF0aCA9IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgPyBwcm9qZWN0Q29uZmlnUGF0aFRzIDogcHJvamVjdENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIHByb2plY3QgRVNMaW50IGNvbmZpZyBmaWxlOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGhhc0xleENvbmZpZ0VzbGludCkge1xuICAgICAgLy8gV2hlbiB1c2luZyBsZXguY29uZmlnLmVzbGludCwgY3JlYXRlIGEgdGVtcG9yYXJ5IEpTIGNvbmZpZyBmaWxlIChub3QgSlNPTilcbiAgICAgIC8vIHRvIGF2b2lkIEVTTSBKU09OIGltcG9ydCBpc3N1ZXNcbiAgICAgIHRlbXBDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWVzbGludC5janMnKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgQ29tbW9uSlMgbW9kdWxlIHRoYXQgZXh0ZW5kcyBMZXgncyBlc2xpbnQgY29uZmlnXG4gICAgICBjb25zdCBjb25maWdDb250ZW50ID0gYC8vIFRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGdlbmVyYXRlZCBieSBMZXhcbmNvbnN0IGxleENvbmZpZyA9IHJlcXVpcmUoJ0BubGFicy9sZXgvZXNsaW50LmNvbmZpZy5tanMnKTtcbmNvbnN0IHVzZXJDb25maWcgPSAke0pTT04uc3RyaW5naWZ5KExleENvbmZpZy5jb25maWcuZXNsaW50LCBudWxsLCAyKX07XG5cbi8vIE1lcmdlIExleCdzIGNvbmZpZyB3aXRoIHVzZXIgY29uZmlnXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLi4ubGV4Q29uZmlnXG59O2A7XG5cbiAgICAgIHdyaXRlRmlsZVN5bmModGVtcENvbmZpZ1BhdGgsIGNvbmZpZ0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBjb25maWdQYXRoID0gdGVtcENvbmZpZ1BhdGg7XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgVXNpbmcgRVNMaW50IGNvbmZpZyBmcm9tIGxleC5jb25maWcuKiBmaWxlIHZpYSB0ZW1wIGZpbGU6ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKGxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKSkge1xuICAgICAgY29uZmlnUGF0aCA9IGxleENvbmZpZ1BhdGg7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFVzaW5nIExleCBFU0xpbnQgY29uZmlnIGZpbGU6ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGRlZmF1bHQgY29uZmlnIGZpbGUgaWYgbm8gb3RoZXIgY29uZmlnIGlzIGZvdW5kXG4gICAgICB0ZW1wQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgJy5sZXgtdGVtcC1kZWZhdWx0LWVzbGludC5janMnKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgYmFzaWMgRVNMaW50IGNvbmZpZ1xuICAgICAgY29uc3QgY29uZmlnQ29udGVudCA9IGAvLyBUZW1wb3JhcnkgZGVmYXVsdCBFU0xpbnQgY29uZmlnIGdlbmVyYXRlZCBieSBMZXhcbmNvbnN0IGxleENvbmZpZyA9IHJlcXVpcmUoJ0BubGFicy9sZXgvZXNsaW50LmNvbmZpZy5tanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBsZXhDb25maWc7YDtcblxuICAgICAgd3JpdGVGaWxlU3luYyh0ZW1wQ29uZmlnUGF0aCwgY29uZmlnQ29udGVudCwgJ3V0ZjgnKTtcbiAgICAgIGNvbmZpZ1BhdGggPSB0ZW1wQ29uZmlnUGF0aDtcblxuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKGBDcmVhdGVkIHRlbXBvcmFyeSBkZWZhdWx0IEVTTGludCBjb25maWcgYXQ6ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coJ05vIEVTTGludCBjb25maWd1cmF0aW9uIGZvdW5kLiBVc2luZyBMZXggZGVmYXVsdCBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVzbGludEJpbmFyeSA9IHJlc29sdmVCaW5hcnlQYXRoKCdlc2xpbnQnLCAnZXNsaW50Jyk7XG5cbiAgICBpZighZXNsaW50QmluYXJ5KSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVTTGludCBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlc2AsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyBCYXNlIEVTTGludCBhcmd1bWVudHNcbiAgICBjb25zdCBiYXNlRXNsaW50QXJncyA9IFtcbiAgICAgIC4uLihmaXggPyBbJy0tZml4J10gOiBbXSksXG4gICAgICAuLi4oZGVidWcgPyBbJy0tZGVidWcnXSA6IFtdKSxcbiAgICAgICctLW5vLWVycm9yLW9uLXVubWF0Y2hlZC1wYXR0ZXJuJyxcbiAgICAgICctLW5vLXdhcm4taWdub3JlZCdcbiAgICBdO1xuXG4gICAgLy8gQWRkIGNvbmZpZyBwYXRoXG4gICAgY29uc3QgY29uZmlnQXJncyA9IGNvbmZpZ1BhdGggPyBbJy0tY29uZmlnJywgY29uZmlnUGF0aF0gOiBbXTtcblxuICAgIGNvbnN0IGpzUmVzdWx0ID0gYXdhaXQgZXhlY2EoZXNsaW50QmluYXJ5LCBbXG4gICAgICAnc3JjLyoqLyoue2pzLGpzeH0nLFxuICAgICAgLi4uY29uZmlnQXJncyxcbiAgICAgIC4uLmJhc2VFc2xpbnRBcmdzXG4gICAgXSwge1xuICAgICAgY3dkLFxuICAgICAgcmVqZWN0OiBmYWxzZSxcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86ICdwaXBlJ1xuICAgIH0pO1xuXG4gICAgaWYoanNSZXN1bHQuc3Rkb3V0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coanNSZXN1bHQuc3Rkb3V0KTtcbiAgICAgIGlmKGNhcHR1cmVPdXRwdXQpIHtcbiAgICAgICAgY2FwdHVyZU91dHB1dChqc1Jlc3VsdC5zdGRvdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGpzUmVzdWx0LnN0ZGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoanNSZXN1bHQuc3RkZXJyKTtcbiAgICAgIGlmKGNhcHR1cmVPdXRwdXQpIHtcbiAgICAgICAgY2FwdHVyZU91dHB1dChqc1Jlc3VsdC5zdGRlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0c1Jlc3VsdDogYW55ID0ge2V4aXRDb2RlOiAwLCBzdGRlcnI6ICcnLCBzdGRvdXQ6ICcnfTtcbiAgICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgICB0c1Jlc3VsdCA9IGF3YWl0IGV4ZWNhKGVzbGludEJpbmFyeSwgW1xuICAgICAgICAnc3JjLyoqLyoue3RzLHRzeH0nLFxuICAgICAgICAuLi5jb25maWdBcmdzLFxuICAgICAgICAuLi5iYXNlRXNsaW50QXJnc1xuICAgICAgXSwge1xuICAgICAgICBjd2QsXG4gICAgICAgIHJlamVjdDogZmFsc2UsXG4gICAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgICBzdGRpbzogJ3BpcGUnXG4gICAgICB9KTtcblxuICAgICAgaWYodHNSZXN1bHQuc3Rkb3V0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUubG9nKHRzUmVzdWx0LnN0ZG91dCk7XG4gICAgICB9XG5cbiAgICAgIGlmKHRzUmVzdWx0LnN0ZGVycikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKHRzUmVzdWx0LnN0ZGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgdGVtcCBmaWxlIGlmIGNyZWF0ZWRcbiAgICBpZih0ZW1wQ29uZmlnUGF0aCAmJiBleGlzdHNTeW5jKHRlbXBDb25maWdQYXRoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdW5saW5rU3luYyh0ZW1wQ29uZmlnUGF0aCk7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBSZW1vdmVkIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnIGF0ICR7dGVtcENvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGVycm9ycyB3aGVuIGNsZWFuaW5nIHVwXG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBGYWlsZWQgdG8gcmVtb3ZlIHRlbXBvcmFyeSBFU0xpbnQgY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlc2xpbnROb3RGb3VuZCA9IGpzUmVzdWx0LnN0ZGVycj8uaW5jbHVkZXMoJ2NvbW1hbmQgbm90IGZvdW5kJykgfHwganNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnZXNsaW50OiBjb21tYW5kIG5vdCBmb3VuZCcpO1xuICAgIGlmKGVzbGludE5vdEZvdW5kKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0VTTGludCBub3QgZm91bmQhJyk7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IExleCdzIEVTTGludCBiaW5hcnkgbm90IGZvdW5kLiBQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZihqc1Jlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiB0c1Jlc3VsdC5leGl0Q29kZSA9PT0gMCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdMaW50aW5nIGNvbXBsZXRlZCEnKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IG5vRmlsZXNGb3VuZCA9XG4gICAgICAoanNSZXN1bHQuc3RkZXJyPy5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpIHx8IGpzUmVzdWx0LnN0ZG91dD8uaW5jbHVkZXMoJ05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknKSkgJiZcbiAgICAgICghdXNlVHlwZXNjcmlwdCB8fCB0c1Jlc3VsdC5zdGRlcnI/LmluY2x1ZGVzKCdObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JykgfHwgdHNSZXN1bHQuc3Rkb3V0Py5pbmNsdWRlcygnTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScpKTtcblxuICAgIGlmKG5vRmlsZXNGb3VuZCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdObyBmaWxlcyBmb3VuZCB0byBsaW50Jyk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgc3Bpbm5lci5mYWlsKCdMaW50aW5nIGZhaWxlZCEnKTtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVTTGludCBmb3VuZCBpc3N1ZXMgaW4geW91ciBjb2RlLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gMTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnTGludGluZyBmYWlsZWQhJyk7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5jb25zdCBhcHBseUFJRml4ID0gYXN5bmMgKFxuICBjd2Q6IHN0cmluZyxcbiAgZXJyb3JzOiBzdHJpbmcsXG4gIHF1aWV0OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdVc2luZyBBSSB0byBmaXggcmVtYWluaW5nIGxpbnQgaXNzdWVzLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlRXJyb3JNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gICAgY29uc3QgbGluZXMgPSBlcnJvcnMuc3BsaXQoJ1xcbicpO1xuICAgIGxldCBjdXJyZW50RmlsZSA9ICcnO1xuXG4gICAgZm9yKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGlmKGxpbmUubWF0Y2goL14oXFwvfFtBLVpdOlxcXFwpLio/XFwuKGpzfGpzeHx0c3x0c3gpJC8pKSB7XG4gICAgICAgIGN1cnJlbnRGaWxlID0gbGluZS50cmltKCk7XG4gICAgICAgIGlmKCFmaWxlRXJyb3JNYXAuaGFzKGN1cnJlbnRGaWxlKSkge1xuICAgICAgICAgIGZpbGVFcnJvck1hcC5zZXQoY3VycmVudEZpbGUsIFtdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKGN1cnJlbnRGaWxlICYmIGxpbmUudHJpbSgpICYmIGxpbmUubWF0Y2goL1xccytcXGQrOlxcZCtcXHMrKGVycm9yfHdhcm5pbmcpXFxzKy8pKSB7XG4gICAgICAgIGNvbnN0IGVycm9yQXJyYXkgPSBmaWxlRXJyb3JNYXAuZ2V0KGN1cnJlbnRGaWxlKTtcbiAgICAgICAgaWYoZXJyb3JBcnJheSkge1xuICAgICAgICAgIGVycm9yQXJyYXkucHVzaChsaW5lLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihmaWxlRXJyb3JNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgbG9nKCdVc2luZyBhbHRlcm5hdGl2ZSBlcnJvciBwYXJzaW5nIHN0cmF0ZWd5JywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gZXJyb3JzLnNwbGl0KCdcXG5cXG4nKTtcblxuICAgICAgZm9yKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgaWYoc2VjdGlvbi50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lcyA9IHNlY3Rpb24uc3BsaXQoJ1xcbicpO1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGxpbmVzWzBdLnRyaW0oKTtcblxuICAgICAgICBpZihmaWxlUGF0aC5tYXRjaCgvXFwuKGpzfGpzeHx0c3x0c3gpJC8pKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlUGF0aCwgW10pO1xuXG4gICAgICAgICAgZm9yKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZihsaW5lc1tpXS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgICAgICAgIGZpbGVFcnJvck1hcC5nZXQoZmlsZVBhdGgpPy5wdXNoKGxpbmVzW2ldLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZUVycm9yTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGxvZygnVXNpbmcgZGlyZWN0IGZpbGUgcGF0aCBleHRyYWN0aW9uJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIGNvbnN0IGZpbGVQYXRoUmVnZXggPSAvKD86XFwvfFtBLVpdOlxcXFwpKD86W146XFxuXStcXC8pKlteOlxcbl0rXFwuKGpzfGpzeHx0c3x0c3gpL2c7XG4gICAgICBjb25zdCBmaWxlUGF0aHMgPSBlcnJvcnMubWF0Y2goZmlsZVBhdGhSZWdleCkgfHwgW107XG5cbiAgICAgIGZvcihjb25zdCBmaWxlUGF0aCBvZiBmaWxlUGF0aHMpIHtcbiAgICAgICAgaWYoIWZpbGVFcnJvck1hcC5oYXMoZmlsZVBhdGgpICYmIGV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlUGF0aCwgW10pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtub3duRmlsZXMgPSBbXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy9jcmVhdGUvY2hhbmdlbG9nLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy91dGlscy9haVNlcnZpY2UudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3dkLCAnc3JjL3V0aWxzL2FwcC50cycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShjd2QsICdzcmMvdXRpbHMvcmVhY3RTaGltLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKGN3ZCwgJ3NyYy9jb21tYW5kcy9saW50L2F1dG9maXguanMnKVxuICAgICAgXTtcblxuICAgICAgZm9yKGNvbnN0IGZpbGUgb2Yga25vd25GaWxlcykge1xuICAgICAgICBpZihleGlzdHNTeW5jKGZpbGUpICYmICFmaWxlRXJyb3JNYXAuaGFzKGZpbGUpKSB7XG4gICAgICAgICAgZmlsZUVycm9yTWFwLnNldChmaWxlLCBbXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IoY29uc3QgZmlsZVBhdGggb2YgZmlsZUVycm9yTWFwLmtleXMoKSkge1xuICAgICAgaWYoIWV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICAgIGxvZyhgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZVBhdGh9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsb2coYFByb2Nlc3NpbmcgZmlsZTogJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgICAgY29uc3QgaXNDdXJzb3JJREUgPSBMZXhDb25maWcuY29uZmlnLmFpPy5wcm92aWRlciA9PT0gJ2N1cnNvcicgfHwgcHJvY2Vzcy5lbnYuQ1VSU09SX0lERSA9PT0gJ3RydWUnO1xuXG4gICAgICBpZihpc0N1cnNvcklERSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHByb21wdCA9IGBGaXggYWxsIEVTTGludCBlcnJvcnMgaW4gdGhpcyBmaWxlLiBGb2N1cyBvbjpcbjEuIEZpeGluZyBuYW1pbmcgY29udmVudGlvbnNcbjIuIEZpeGluZyBzb3J0LWtleXMgaXNzdWVzXG4zLiBSZXBsYWNpbmcgY29uc29sZS5sb2cgd2l0aCBsb2cgdXRpbGl0eVxuNC4gRml4aW5nIG5vLXBsdXNwbHVzIGlzc3Vlc1xuNS4gRml4aW5nIHVubmVjZXNzYXJ5IGVzY2FwZSBjaGFyYWN0ZXJzXG42LiBGaXhpbmcgb3RoZXIgRVNMaW50IGVycm9yc1xuXG5DUklUSUNBTCBSRVFVSVJFTUVOVFM6XG4tIE9OTFkgZml4IHRoZSBzcGVjaWZpYyBsaW5lcyB3aXRoIEVTTGludCBlcnJvcnNcbi0gRE8gTk9UIG1vZGlmeSBhbnkgb3RoZXIgbGluZXMgb2YgY29kZVxuLSBETyBOT1QgcmVtb3ZlIGxpbmUgYnJlYWtzIHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgY2F1c2luZyBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBjb25kZW5zZSBtdWx0aS1saW5lIHN0cnVjdHVyZXMgdG8gc2luZ2xlIGxpbmVzXG4tIFBSRVNFUlZFIGFsbCBleGlzdGluZyBsaW5lIGJyZWFrcyBhbmQgZm9ybWF0dGluZyB0aGF0IGlzIG5vdCBjYXVzaW5nIGVycm9yc1xuXG5TUEVDSUZJQyBGT1JNQVRUSU5HIFJVTEVTOlxuLSBNYWludGFpbiBwcm9wZXIgaW5kZW50YXRpb24gKDIgc3BhY2VzKVxuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gY2xhc3MvaW50ZXJmYWNlIGRlY2xhcmF0aW9uIGFuZCB0aGVpciBtZW1iZXJzXG4tIEtlZXAgbGluZSBicmVha3MgYmV0d2VlbiBtZXRob2RzXG4tIEVuc3VyZSB0aGVyZSBpcyBhIGxpbmUgYnJlYWsgYWZ0ZXIgb3BlbmluZyBicmFjZXMgZm9yIGNsYXNzZXMsIGludGVyZmFjZXMsIGFuZCBtZXRob2RzXG4tIERPIE5PVCBwbGFjZSBjbGFzcy9pbnRlcmZhY2UgcHJvcGVydGllcyBvciBtZXRob2RzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIG9wZW5pbmcgYnJhY2Vcbi0gUHJlc2VydmUgZW1wdHkgbGluZXMgYmV0d2VlbiBsb2dpY2FsIGNvZGUgYmxvY2tzXG4tIFBSRVNFUlZFIG11bHRpLWxpbmUgaW1wb3J0cyAtIGRvIG5vdCBjb25kZW5zZSB0aGVtIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIG9iamVjdC9hcnJheSBkZWNsYXJhdGlvbnMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcblxuU09SVC1LRVlTIFJVTEUgKEhJR0hFU1QgUFJJT1JJVFkpOlxuLSBBbGwgb2JqZWN0IGxpdGVyYWwga2V5cyBNVVNUIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSBpbiBhc2NlbmRpbmcgb3JkZXJcbi0gVGhpcyBhcHBsaWVzIHRvIEFMTCBvYmplY3RzIGluIHRoZSBmaWxlLCBub3QganVzdCB0aG9zZSB3aXRoIGV4cGxpY2l0IHNvcnQta2V5cyBlcnJvcnNcbi0gRXhhbXBsZToge2I6IDIsIGE6IDEsIGM6IDN9IHNob3VsZCBiZWNvbWUge2E6IDEsIGI6IDIsIGM6IDN9XG4tIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBmb3JtYXR0aW5nIGFuZCBsaW5lIGJyZWFrcyB3aGVuIHNvcnRpbmdcblxuRXhhbXBsZSBvZiBDT1JSRUNUIGZvcm1hdHRpbmcgKERPIE5PVCBDSEFOR0UpOlxuXG5jb25zdHJ1Y3RvcihmbHV4OiBGbHV4RnJhbWV3b3JrLCBDdXN0b21BZGFwdGVyOiB0eXBlb2YgRXZlbnQgPSBFdmVudCkge1xuICB0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O1xufVxuXG5pbXBvcnQge1xuICBhcHAsXG4gIGV2ZW50cyxcbiAgaW1hZ2VzLFxuICBsb2NhdGlvbnMsXG4gIG1lc3NhZ2VzLFxuICBwb3N0cyxcbiAgdGFncyxcbiAgdXNlcnMsXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcyc7XG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgYXBpS2V5OiAndmFsdWUnLFxuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICB0aW1lb3V0OiA1MDAwXG59O1xuXG5FeGFtcGxlIG9mIElOQ09SUkVDVCBmb3JtYXR0aW5nIChGSVggVEhJUyk6XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHt0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O31cblxuaW1wb3J0IHthcHAsIGV2ZW50cywgaW1hZ2VzLCBsb2NhdGlvbnMsIG1lc3NhZ2VzLCBwb3N0cywgdGFncywgdXNlcnMsIHdlYnNvY2tldH0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7YmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywgYXBpS2V5OiAndmFsdWUnLCB0aW1lb3V0OiA1MDAwfTtcblxuRml4IE9OTFkgdGhlIHNwZWNpZmljIEVTTGludCBlcnJvcnMuIFJldHVybiB0aGUgcHJvcGVybHkgZm9ybWF0dGVkIGNvZGUuYDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcm9tcHRGaWxlID0gcGF0aFJlc29sdmUoY3dkLCAnLmN1cnNvcl9wcm9tcHRfdGVtcC50eHQnKTtcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMocHJvbXB0RmlsZSwgcHJvbXB0LCAndXRmOCcpO1xuXG4gICAgICAgICAgICAvLyBVc2UgQ3Vyc29yIENMSSB0byBmaXggdGhlIGZpbGVcbiAgICAgICAgICAgIGF3YWl0IGV4ZWNhKCdjdXJzb3InLCBbJ2VkaXQnLCAnLS1maWxlJywgZmlsZVBhdGgsICctLXByb21wdC1maWxlJywgcHJvbXB0RmlsZV0sIHtcbiAgICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgICByZWplY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBzdGRpbzogJ3BpcGUnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdW5saW5rU3luYyhwcm9tcHRGaWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxvZyhgQXBwbGllZCBDdXJzb3IgQUkgZml4ZXMgdG8gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9IGNhdGNoe1xuICAgICAgICAgICAgY29uc3Qgd2FzTW9kaWZpZWQgPSBhd2FpdCBhcHBseURpcmVjdEZpeGVzKGZpbGVQYXRoLCBxdWlldCk7XG4gICAgICAgICAgICBpZih3YXNNb2RpZmllZCkge1xuICAgICAgICAgICAgICBsb2coYEFwcGxpZWQgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgbG9nKGBFcnJvciB1c2luZyBDdXJzb3IgQUk6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgYXdhaXQgYXBwbHlEaXJlY3RGaXhlcyhmaWxlUGF0aCwgcXVpZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB3YXNNb2RpZmllZCA9IGF3YWl0IGFwcGx5RGlyZWN0Rml4ZXMoZmlsZVBhdGgsIHF1aWV0KTtcbiAgICAgICAgaWYod2FzTW9kaWZpZWQpIHtcbiAgICAgICAgICBsb2coYEFwcGxpZWQgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlRXJyb3JzID0gZmlsZUVycm9yTWFwLmdldChmaWxlUGF0aCkgfHwgW107XG4gICAgICAgIGlmKGZpbGVFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7Y2FsbEFJU2VydmljZX0gPSBhd2FpdCBpbXBvcnQoJy4uLy4uL3V0aWxzL2FpU2VydmljZS5qcycpO1xuXG4gICAgICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICAgICAgICAgICAgY29uc3QgcHJvbXB0ID0gYEZpeCB0aGUgZm9sbG93aW5nIEVTTGludCBlcnJvcnMgaW4gdGhpcyBjb2RlOlxuJHtmaWxlRXJyb3JzLmpvaW4oJ1xcbicpfVxuXG5IZXJlJ3MgdGhlIGNvZGU6XG5cXGBcXGBcXGBcbiR7ZmlsZUNvbnRlbnR9XG5cXGBcXGBcXGBcblxuQ1JJVElDQUwgUkVRVUlSRU1FTlRTOlxuLSBPTkxZIGZpeCB0aGUgc3BlY2lmaWMgbGluZXMgd2l0aCBFU0xpbnQgZXJyb3JzXG4tIERPIE5PVCBtb2RpZnkgYW55IG90aGVyIGxpbmVzIG9mIGNvZGVcbi0gRE8gTk9UIHJlbW92ZSBsaW5lIGJyZWFrcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGNhdXNpbmcgRVNMaW50IGVycm9yc1xuLSBETyBOT1QgY29uZGVuc2UgbXVsdGktbGluZSBzdHJ1Y3R1cmVzIHRvIHNpbmdsZSBsaW5lc1xuLSBQUkVTRVJWRSBhbGwgZXhpc3RpbmcgbGluZSBicmVha3MgYW5kIGZvcm1hdHRpbmcgdGhhdCBpcyBub3QgY2F1c2luZyBlcnJvcnNcblxuU1BFQ0lGSUMgRk9STUFUVElORyBSVUxFUzpcbi0gTWFpbnRhaW4gcHJvcGVyIGluZGVudGF0aW9uICgyIHNwYWNlcylcbi0gS2VlcCBsaW5lIGJyZWFrcyBiZXR3ZWVuIGNsYXNzL2ludGVyZmFjZSBkZWNsYXJhdGlvbiBhbmQgdGhlaXIgbWVtYmVyc1xuLSBLZWVwIGxpbmUgYnJlYWtzIGJldHdlZW4gbWV0aG9kc1xuLSBFbnN1cmUgdGhlcmUgaXMgYSBsaW5lIGJyZWFrIGFmdGVyIG9wZW5pbmcgYnJhY2VzIGZvciBjbGFzc2VzLCBpbnRlcmZhY2VzLCBhbmQgbWV0aG9kc1xuLSBETyBOT1QgcGxhY2UgY2xhc3MvaW50ZXJmYWNlIHByb3BlcnRpZXMgb3IgbWV0aG9kcyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBvcGVuaW5nIGJyYWNlXG4tIFByZXNlcnZlIGVtcHR5IGxpbmVzIGJldHdlZW4gbG9naWNhbCBjb2RlIGJsb2Nrc1xuLSBQUkVTRVJWRSBtdWx0aS1saW5lIGltcG9ydHMgLSBkbyBub3QgY29uZGVuc2UgdGhlbSB0byBzaW5nbGUgbGluZXNcbi0gUFJFU0VSVkUgbXVsdGktbGluZSBvYmplY3QvYXJyYXkgZGVjbGFyYXRpb25zIC0gZG8gbm90IGNvbmRlbnNlIHRoZW0gdG8gc2luZ2xlIGxpbmVzXG5cblNPUlQtS0VZUyBSVUxFIChISUdIRVNUIFBSSU9SSVRZKTpcbi0gQWxsIG9iamVjdCBsaXRlcmFsIGtleXMgTVVTVCBiZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgaW4gYXNjZW5kaW5nIG9yZGVyXG4tIFRoaXMgYXBwbGllcyB0byBBTEwgb2JqZWN0cyBpbiB0aGUgZmlsZSwgbm90IGp1c3QgdGhvc2Ugd2l0aCBleHBsaWNpdCBzb3J0LWtleXMgZXJyb3JzXG4tIEV4YW1wbGU6IHtiOiAyLCBhOiAxLCBjOiAzfSBzaG91bGQgYmVjb21lIHthOiAxLCBiOiAyLCBjOiAzfVxuLSBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZm9ybWF0dGluZyBhbmQgbGluZSBicmVha3Mgd2hlbiBzb3J0aW5nXG5cbldIQVQgVE8gRklYOlxuMS4gU29ydGluZyBhbGwgb2JqZWN0IGtleXMgYWxwaGFiZXRpY2FsbHkgKHNvcnQta2V5cyBydWxlKSAtIEFMTCBvYmplY3RzIG11c3QgaGF2ZSBzb3J0ZWQga2V5c1xuMi4gRml4aW5nIG5hbWluZyBjb252ZW50aW9ucyAtIE9OTFkgZm9yIHZhcmlhYmxlcy9mdW5jdGlvbnMgd2l0aCBuYW1pbmcgZXJyb3JzXG4zLiBSZXBsYWNpbmcgY29uc29sZS5sb2cgd2l0aCBsb2cgdXRpbGl0eSAtIE9OTFkgZm9yIGNvbnNvbGUubG9nIHN0YXRlbWVudHNcbjQuIEZpeGluZyBuby1wbHVzcGx1cyBpc3N1ZXMgLSBPTkxZIGZvciArKy8tLSBvcGVyYXRvcnNcbjUuIEZpeGluZyB1bm5lY2Vzc2FyeSBlc2NhcGUgY2hhcmFjdGVycyAtIE9OTFkgZm9yIGVzY2FwZWQgY2hhcmFjdGVycyB0aGF0IGRvbid0IG5lZWQgZXNjYXBpbmdcbjYuIFByb3BlciBpbmRlbnRhdGlvbiBhbmQgc3BhY2luZyAtIE9OTFkgd2hlcmUgc3BlY2lmaWNhbGx5IHJlcXVpcmVkIGJ5IGVycm9yc1xuNy4gU3RyaW5nIHF1b3RlcyBjb25zaXN0ZW5jeSAodXNlIHNpbmdsZSBxdW90ZXMpIC0gT05MWSBmb3Igc3RyaW5nIGxpdGVyYWxzIHdpdGggcXVvdGUgZXJyb3JzXG44LiBJbXBvcnQgb3JkZXIgYW5kIHNwYWNpbmcgLSBPTkxZIGZvciBpbXBvcnRzIHdpdGggb3JkZXIvc3BhY2luZyBlcnJvcnNcbjkuIEZ1bmN0aW9uIHBhcmFtZXRlciBmb3JtYXR0aW5nIC0gT05MWSBmb3IgZnVuY3Rpb25zIHdpdGggcGFyYW1ldGVyIGVycm9yc1xuMTAuIFZhcmlhYmxlIG5hbWluZyBjb252ZW50aW9ucyAtIE9OTFkgZm9yIHZhcmlhYmxlcyB3aXRoIG5hbWluZyBlcnJvcnNcbjExLiBObyB1bnVzZWQgdmFyaWFibGVzIG9yIGltcG9ydHMgLSBPTkxZIGZvciB1bnVzZWQgdmFyaWFibGVzL2ltcG9ydHNcbjEyLiBBdm9pZGluZyBuZXN0ZWQgdGVybmFyaWVzIC0gT05MWSBmb3IgbmVzdGVkIHRlcm5hcnkgZXhwcmVzc2lvbnNcbjEzLiBBbnkgb3RoZXIgRVNMaW50IGVycm9ycyAtIE9OTFkgZm9yIHRoZSBzcGVjaWZpYyBlcnJvcnMgbGlzdGVkIGFib3ZlXG5cbldIQVQgTk9UIFRPIEZJWDpcbi0gRG8gbm90IGNoYW5nZSBwcm9wZXJseSBmb3JtYXR0ZWQgbXVsdGktbGluZSBzdHJ1Y3R1cmVzXG4tIERvIG5vdCByZW1vdmUgbGluZSBicmVha3MgdGhhdCBhcmUgbm90IGNhdXNpbmcgZXJyb3JzXG4tIERvIG5vdCBjaGFuZ2UgaW5kZW50YXRpb24gdGhhdCBpcyBhbHJlYWR5IGNvcnJlY3Rcbi0gRG8gbm90IG1vZGlmeSBzcGFjaW5nIHRoYXQgaXMgYWxyZWFkeSBjb3JyZWN0XG4tIERvIG5vdCBjb25kZW5zZSByZWFkYWJsZSBtdWx0aS1saW5lIGNvZGUgdG8gc2luZ2xlIGxpbmVzXG4tIERvIG5vdCBtb2RpZnkgY29kZSB0aGF0IGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIEVTTGludCBlcnJvcnNcblxuRXhhbXBsZSBvZiBDT1JSRUNUIGZvcm1hdHRpbmcgKERPIE5PVCBDSEFOR0UpOlxuICBzdGF0aWMgcmVhZG9ubHkgQUREX0lURU1fRVJST1I6IHN0cmluZyA9ICdVU0VSX0FERF9JVEVNX0VSUk9SJztcbiAgc3RhdGljIHJlYWRvbmx5IE9USEVSX0NPTlNUQU5UOiBzdHJpbmcgPSAnT1RIRVJfQ09OU1RBTlQnO1xufVxuXG5jb25zdHJ1Y3RvcihmbHV4OiBGbHV4RnJhbWV3b3JrLCBDdXN0b21BZGFwdGVyOiB0eXBlb2YgRXZlbnQgPSBFdmVudCkge1xuICB0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O1xufVxuXG5pbXBvcnQge1xuICBhcHAsXG4gIGV2ZW50cyxcbiAgaW1hZ2VzLFxuICBsb2NhdGlvbnMsXG4gIG1lc3NhZ2VzLFxuICBwb3N0cyxcbiAgdGFncyxcbiAgdXNlcnMsXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcyc7XG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgYXBpS2V5OiAndmFsdWUnLFxuICBiYXNlVXJsOiAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nLFxuICB0aW1lb3V0OiA1MDAwXG59O1xuXG5FeGFtcGxlIG9mIElOQ09SUkVDVCBmb3JtYXR0aW5nIChGSVggVEhJUyk6XG4gIHN0YXRpYyByZWFkb25seSBPVEhFUl9DT05TVEFOVDogc3RyaW5nID0gJ09USEVSX0NPTlNUQU5UJztcbn1cblxuY29uc3RydWN0b3IoZmx1eDogRmx1eEZyYW1ld29yaywgQ3VzdG9tQWRhcHRlcjogdHlwZW9mIEV2ZW50ID0gRXZlbnQpIHt0aGlzLkN1c3RvbUFkYXB0ZXIgPSBDdXN0b21BZGFwdGVyO1xuICB0aGlzLmZsdXggPSBmbHV4O31cblxuaW1wb3J0IHthcHAsIGV2ZW50cywgaW1hZ2VzLCBsb2NhdGlvbnMsIG1lc3NhZ2VzLCBwb3N0cywgdGFncywgdXNlcnMsIHdlYnNvY2tldH0gZnJvbSAnLi9zdG9yZXMnO1xuXG5jb25zdCBjb25maWcgPSB7YmFzZVVybDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywgYXBpS2V5OiAndmFsdWUnLCB0aW1lb3V0OiA1MDAwfTtcblxuRml4IE9OTFkgdGhlIHNwZWNpZmljIEVTTGludCBlcnJvcnMgbGlzdGVkIGFib3ZlLiBSZXZpZXcgdGhlIGVudGlyZSBmaWxlIGZvciBjb21wbGlhbmNlIHdpdGggYWxsIEVTTGludCBydWxlcy5cblJldHVybiBvbmx5IHRoZSBwcm9wZXJseSBmb3JtYXR0ZWQgZml4ZWQgY29kZSB3aXRob3V0IGFueSBleHBsYW5hdGlvbnMuYDtcblxuICAgICAgICAgICAgY29uc3QgZml4ZWRDb250ZW50ID0gYXdhaXQgY2FsbEFJU2VydmljZShwcm9tcHQsIHF1aWV0KTtcblxuICAgICAgICAgICAgaWYoZml4ZWRDb250ZW50ICYmIGZpeGVkQ29udGVudCAhPT0gZmlsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZml4ZWRDb250ZW50LCAndXRmOCcpO1xuICAgICAgICAgICAgICBsb2coYEFwcGxpZWQgQUkgZml4ZXMgdG8gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYEVycm9yIGFwcGx5aW5nIEFJIGZpeGVzIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQUkgZml4ZXMgYXBwbGllZCBzdWNjZXNzZnVsbHkhJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBhcHBseSBBSSBmaXhlcycpO1xuICAgIGxvZyhgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGFwcGx5RGlyZWN0Rml4ZXMgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgbGV0IHdhc01vZGlmaWVkID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICBsZXQgbmV3Q29udGVudCA9IGZpbGVDb250ZW50O1xuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2FpU2VydmljZS50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gYWlTZXJ2aWNlLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC8nQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uXFwvanNvbicsXFxzKidBdXRob3JpemF0aW9uJzogYEJlYXJlci9nLFxuICAgICAgICAnXFwnQXV0aG9yaXphdGlvblxcJzogYEJlYXJlclxcJywgXFwnQ29udGVudC1UeXBlXFwnOiBcXCdhcHBsaWNhdGlvbi9qc29uXFwnJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2hlYWRlcnM6IHsoW159XSopfSxcXHMqbWV0aG9kOiAnUE9TVCcvZyxcbiAgICAgICAgJ21ldGhvZDogXFwnUE9TVFxcJyxcXG4gICAgICBoZWFkZXJzOiB7JDF9J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL3tyb2xlOiAnc3lzdGVtJywgY29udGVudDovZyxcbiAgICAgICAgJ3tjb250ZW50Oiwgcm9sZTogXFwnc3lzdGVtXFwnLCdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAve3JvbGU6ICd1c2VyJywgY29udGVudDovZyxcbiAgICAgICAgJ3tjb250ZW50Oiwgcm9sZTogXFwndXNlclxcJywnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvXFwoKFteKV0qPylfKFthLXpBLVowLTldKykoXFxzKjpbXildKilcXCkvZyxcbiAgICAgICAgJygkMSQyJDMpJ1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZSgvY29uc29sZVxcLmxvZ1xcKC9nLCAnbG9nKCcpO1xuXG4gICAgICBpZighbmV3Q29udGVudC5pbmNsdWRlcygnaW1wb3J0IHtsb2d9JykgJiYgbmV3Q29udGVudC5pbmNsdWRlcygnbG9nKCcpKSB7XG4gICAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICAgL2ltcG9ydCB7KFtefV0qKX0gZnJvbSAnKC4qKSc7LyxcbiAgICAgICAgICAnaW1wb3J0IHskMX0gZnJvbSBcXCckMlxcJztcXG5pbXBvcnQge2xvZ30gZnJvbSBcXCcuL2xvZy5qc1xcJzsnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ3JlYWN0U2hpbS50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBuYW1pbmctY29udmVudGlvbiBpc3N1ZXMgaW4gcmVhY3RTaGltLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgICdpbXBvcnQgKiBhcyBSZWFjdCBmcm9tJyxcbiAgICAgICAgJ2ltcG9ydCAqIGFzIHJlYWN0IGZyb20nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9SZWFjdFxcLi9nLCAncmVhY3QuJyk7XG4gICAgfVxuXG4gICAgaWYoZmlsZVBhdGguaW5jbHVkZXMoJ2NoYW5nZWxvZy50cycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gY2hhbmdlbG9nLnRzJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoLyhcXHcrKVxcK1xcKy9nLCAnJDEgKz0gMScpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwkL2csICckJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwuL2csICcuJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcXFwqL2csICcqJyk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9cXFxcOi9nLCAnOicpO1xuICAgIH1cblxuICAgIGlmKGZpbGVQYXRoLmluY2x1ZGVzKCdhcHAudHMnKSkge1xuICAgICAgbG9nKCdGaXhpbmcgaXNzdWVzIGluIGFwcC50cycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKC9jb25zb2xlXFwubG9nXFwoL2csICdsb2coJyk7XG5cbiAgICAgIGlmKCFuZXdDb250ZW50LmluY2x1ZGVzKCdpbXBvcnQge2xvZ30nKSAmJiBuZXdDb250ZW50LmluY2x1ZGVzKCdsb2coJykpIHtcbiAgICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgICAvaW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJzsvLFxuICAgICAgICAgICdpbXBvcnQgYm94ZW4gZnJvbSBcXCdib3hlblxcJztcXG5pbXBvcnQge2xvZ30gZnJvbSBcXCcuL2xvZy5qc1xcJzsnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xcXFxcXC8vZywgJy8nKTtcbiAgICB9XG5cbiAgICBpZihmaWxlUGF0aC5pbmNsdWRlcygnYXV0b2ZpeC5qcycpKSB7XG4gICAgICBsb2coJ0ZpeGluZyBpc3N1ZXMgaW4gYXV0b2ZpeC5qcycsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvaW1wb3J0IHsoW159XSopfSBmcm9tICdwYXRoJztbXFxzXFxuXSppbXBvcnQgeyhbXn1dKil9IGZyb20gJ3BhdGgnOy8sXG4gICAgICAgICdpbXBvcnQgeyQxLCAkMn0gZnJvbSBcXCdwYXRoXFwnOydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9fX2ZpbGVuYW1lL2csXG4gICAgICAgICdjdXJyZW50RmlsZW5hbWUnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL19fZGlybmFtZS9nLFxuICAgICAgICAnY3VycmVudERpcm5hbWUnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvY29uc3QgcHJlZml4ID0gdHlwZSA9PT0gJ2Vycm9yJyBcXD8gJ+KdjCAnIDogdHlwZSA9PT0gJ3N1Y2Nlc3MnIFxcPyAn4pyFICcgOiAn4oS577iPICc7LyxcbiAgICAgICAgJ2xldCBwcmVmaXggPSBcXCfihLnvuI8gXFwnO1xcbmlmKHR5cGUgPT09IFxcJ2Vycm9yXFwnKSB7XFxuICBwcmVmaXggPSBcXCfinYwgXFwnO1xcbn0gZWxzZSBpZih0eXBlID09PSBcXCdzdWNjZXNzXFwnKSB7XFxuICBwcmVmaXggPSBcXCfinIUgXFwnO1xcbn0nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gcnVuRXNsaW50Rml4XFwoXFwpL2csXG4gICAgICAgICdjb25zdCBydW5Fc2xpbnRGaXggPSBhc3luYyAoKSdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gZ2V0RmlsZXNXaXRoRXJyb3JzXFwoXFwpL2csXG4gICAgICAgICdjb25zdCBnZXRGaWxlc1dpdGhFcnJvcnMgPSBhc3luYyAoKSdcbiAgICAgICk7XG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvYXN5bmMgZnVuY3Rpb24gaXNDdXJzb3JBdmFpbGFibGVcXChcXCkvZyxcbiAgICAgICAgJ2NvbnN0IGlzQ3Vyc29yQXZhaWxhYmxlID0gYXN5bmMgKCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIGZpeEZpbGVXaXRoQ3Vyc29yQUlcXChmaWxlUGF0aFxcKS9nLFxuICAgICAgICAnY29uc3QgZml4RmlsZVdpdGhDdXJzb3JBSSA9IGFzeW5jIChmaWxlUGF0aCknXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2FzeW5jIGZ1bmN0aW9uIG1haW5cXChcXCkvZyxcbiAgICAgICAgJ2NvbnN0IG1haW4gPSBhc3luYyAoKSdcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30vZyxcbiAgICAgICAgJ2ltcG9ydCB7d3JpdGVGaWxlU3luY30nXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvY29uc29sZVxcLmxvZ1xcKGBcXCR7cHJlZml4fSBcXCR7bWVzc2FnZX1gXFwpOy9nLFxuICAgICAgICAncHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7cHJlZml4fSAke21lc3NhZ2V9XFxcXG5gKTsnXG4gICAgICApO1xuXG4gICAgICBuZXdDb250ZW50ID0gbmV3Q29udGVudC5yZXBsYWNlKFxuICAgICAgICAvfSBjYXRjaFxcKGVycm9yXFwpIHtbXFxzXFxuXSpcXC9cXC8gSWdub3JlIGNsZWFudXAgZXJyb3JzL2csXG4gICAgICAgICd9IGNhdGNoKF8pIHtcXG4gICAgICAvLyBJZ25vcmUgY2xlYW51cCBlcnJvcnMnXG4gICAgICApO1xuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL30gY2F0Y2hcXChlcnJvclxcKSB7W1xcc1xcbl0qbG9nXFwoL2csXG4gICAgICAgICd9IGNhdGNoKGVycikge1xcbiAgICBsb2coJ1xuICAgICAgKTtcbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC99IGNhdGNoXFwoZXJyb3JcXCkge1tcXHNcXG5dKnJldHVybiBmYWxzZTsvZyxcbiAgICAgICAgJ30gY2F0Y2goXykge1xcbiAgICByZXR1cm4gZmFsc2U7J1xuICAgICAgKTtcblxuICAgICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgICAgL2ZvclxcKGNvbnN0IGZpbGVQYXRoIG9mIGZpbGVzV2l0aEVycm9yc1xcKSB7W1xcc1xcbl0qY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpeEZpbGVXaXRoQ3Vyc29yQUlcXChmaWxlUGF0aFxcKTsvZyxcbiAgICAgICAgJ2NvbnN0IGZpeFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChmaWxlc1dpdGhFcnJvcnMubWFwKGZpbGVQYXRoID0+IGZpeEZpbGVXaXRoQ3Vyc29yQUkoZmlsZVBhdGgpKSk7XFxuZm9yKGNvbnN0IHN1Y2Nlc3Mgb2YgZml4UmVzdWx0cykgeydcbiAgICAgICk7XG5cbiAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoXG4gICAgICAgIC9maXhlZENvdW50XFwrXFwrOy9nLFxuICAgICAgICAnZml4ZWRDb3VudCArPSAxOydcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYobmV3Q29udGVudCAhPT0gZmlsZUNvbnRlbnQpIHtcbiAgICAgIHdyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIG5ld0NvbnRlbnQsICd1dGY4Jyk7XG4gICAgICBsb2coYEZpeGVkIGlzc3VlcyBpbiAke2ZpbGVQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgd2FzTW9kaWZpZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB3YXNNb2RpZmllZDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgYXBwbHlpbmcgZGlyZWN0IGZpeGVzIHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgbG9hZEFJQ29uZmlnID0gYXN5bmMgKGN3ZDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgZGVidWc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBjb25maWdGb3JtYXRzID0gWydqcycsICdtanMnLCAnY2pzJywgJ3RzJywgJ2pzb24nXTtcbiAgY29uc3QgY29uZmlnQmFzZU5hbWUgPSAnbGV4LmNvbmZpZyc7XG4gIGxldCBsZXhDb25maWdQYXRoID0gJyc7XG5cbiAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgYC4vJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCk7XG4gICAgaWYoZXhpc3RzU3luYyhwb3RlbnRpYWxQYXRoKSkge1xuICAgICAgbGV4Q29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZihsZXhDb25maWdQYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZvciBNSlMgZmlsZXMsIHdlIG5lZWQgdG8gdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggVVJMIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICBjb25zdCBmb3JtYXQgPSBleHRuYW1lKGxleENvbmZpZ1BhdGgpLnNsaWNlKDEpO1xuICAgICAgbGV0IGltcG9ydFBhdGggPSBsZXhDb25maWdQYXRoO1xuXG4gICAgICAvLyBVc2UgVVJMIHByb3RvY29sIGZvciBFU00gaW1wb3J0c1xuICAgICAgaWYoZm9ybWF0ID09PSAnbWpzJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYGZpbGU6Ly8ke2xleENvbmZpZ1BhdGh9YCk7XG4gICAgICAgICAgaW1wb3J0UGF0aCA9IHVybC5ocmVmO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYFVzaW5nIFVSTCBmb3JtYXQgZm9yIE1KUyBpbXBvcnQ6ICR7aW1wb3J0UGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2godXJsRXJyb3IpIHtcbiAgICAgICAgICBsb2coYEVycm9yIGNyZWF0aW5nIFVSTCBmb3IgTUpTIGltcG9ydDogJHt1cmxFcnJvci5tZXNzYWdlfWAsICd3YXJuJywgZGVidWcgfHwgIXF1aWV0KTtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gYGZpbGU6Ly8ke2xleENvbmZpZ1BhdGh9YDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFRyeWluZyB0byBpbXBvcnQgY29uZmlnIGZyb20gJHtpbXBvcnRQYXRofSAoZm9ybWF0OiAke2Zvcm1hdH0pYCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBsZXhDb25maWc7XG4gICAgICB0cnkge1xuICAgICAgICBsZXhDb25maWcgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICB9IGNhdGNoKGltcG9ydEVycm9yKSB7XG4gICAgICAgIGlmKGltcG9ydEVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBkZWZpbmVkIGluIEVTIG1vZHVsZSBzY29wZScpKSB7XG4gICAgICAgICAgbG9nKGBFUyBNb2R1bGUgc3ludGF4IGVycm9yIGluICR7bGV4Q29uZmlnUGF0aH0uIE1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgJ2V4cG9ydCcgaW5zdGVhZCBvZiAnbW9kdWxlLmV4cG9ydHMnLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihpbXBvcnRFcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBpbXBvcnRFcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGJvdGggRVNNIChkZWZhdWx0IGV4cG9ydCkgYW5kIENvbW1vbkpTIChtb2R1bGUuZXhwb3J0cylcbiAgICAgIGxldCBjb25maWdEYXRhID0gbnVsbDtcbiAgICAgIGlmKGxleENvbmZpZy5kZWZhdWx0KSB7XG4gICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWcuZGVmYXVsdDtcbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYEZvdW5kIGRlZmF1bHQgZXhwb3J0IGluICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIENvbW1vbkpTIG9yIG90aGVyIG1vZHVsZSBzeXN0ZW1zXG4gICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWc7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBVc2luZyBkaXJlY3QgZXhwb3J0IGluICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihjb25maWdEYXRhICYmIGNvbmZpZ0RhdGEuYWkpIHtcbiAgICAgICAgbG9nKGBGb3VuZCBBSSBjb25maWd1cmF0aW9uIGluICR7cGF0aFJlc29sdmUoY3dkLCBsZXhDb25maWdQYXRoKX0sIGFwcGx5aW5nIHNldHRpbmdzLi4uYCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5haSwgLi4uY29uZmlnRGF0YS5haX07XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBFcnJvciBsb2FkaW5nIEFJIGNvbmZpZ3VyYXRpb24gZnJvbSAke2xleENvbmZpZ1BhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogTG9hZCBFU0xpbnQgY29uZmlndXJhdGlvbiBmcm9tIGxleC5jb25maWcuKiBmaWxlc1xuICovXG5jb25zdCBsb2FkRVNMaW50Q29uZmlnID0gYXN5bmMgKGN3ZDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgLy8gQ2hlY2sgaWYgTGV4Q29uZmlnIGFscmVhZHkgaGFzIEVTTGludCBjb25maWd1cmF0aW9uIGxvYWRlZFxuICBpZihMZXhDb25maWcuY29uZmlnLmVzbGludCAmJiBPYmplY3Qua2V5cyhMZXhDb25maWcuY29uZmlnLmVzbGludCkubGVuZ3RoID4gMCkge1xuICAgIGxvZygnRm91bmQgRVNMaW50IGNvbmZpZ3VyYXRpb24gaW4gbGV4LmNvbmZpZy4qIGZpbGUnLCAnaW5mbycsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUcnkgdG8gbG9hZCBmcm9tIGxleC5jb25maWcuKiBmaWxlcyBpZiBub3QgYWxyZWFkeSBsb2FkZWRcbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG4gIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lID0gJ2xleC5jb25maWcnO1xuXG4gIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgIGNvbnN0IHBvdGVudGlhbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGAuLyR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWApO1xuICAgIGlmKGV4aXN0c1N5bmMocG90ZW50aWFsUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEZvciBNSlMgZmlsZXMsIHdlIG5lZWQgdG8gdXNlIGR5bmFtaWMgaW1wb3J0IHdpdGggVVJMIGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgIGNvbnN0IGZpbGVGb3JtYXQgPSBleHRuYW1lKHBvdGVudGlhbFBhdGgpLnNsaWNlKDEpO1xuICAgICAgICBsZXQgaW1wb3J0UGF0aCA9IHBvdGVudGlhbFBhdGg7XG5cbiAgICAgICAgLy8gVXNlIFVSTCBwcm90b2NvbCBmb3IgRVNNIGltcG9ydHNcbiAgICAgICAgaWYoZmlsZUZvcm1hdCA9PT0gJ21qcycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChgZmlsZTovLyR7cG90ZW50aWFsUGF0aH1gKTtcbiAgICAgICAgICAgIGltcG9ydFBhdGggPSB1cmwuaHJlZjtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgVXNpbmcgVVJMIGZvcm1hdCBmb3IgTUpTIGltcG9ydDogJHtpbXBvcnRQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2godXJsRXJyb3IpIHtcbiAgICAgICAgICAgIGxvZyhgRXJyb3IgY3JlYXRpbmcgVVJMIGZvciBNSlMgaW1wb3J0OiAke3VybEVycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBkZWJ1ZyB8fCAhcXVpZXQpO1xuICAgICAgICAgICAgaW1wb3J0UGF0aCA9IGBmaWxlOi8vJHtwb3RlbnRpYWxQYXRofWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICBsb2coYFRyeWluZyB0byBpbXBvcnQgY29uZmlnIGZyb20gJHtpbXBvcnRQYXRofSAoZm9ybWF0OiAke2ZpbGVGb3JtYXR9KWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxleENvbmZpZztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXhDb25maWcgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICAgIH0gY2F0Y2goaW1wb3J0RXJyb3IpIHtcbiAgICAgICAgICBpZihpbXBvcnRFcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdub3QgZGVmaW5lZCBpbiBFUyBtb2R1bGUgc2NvcGUnKSkge1xuICAgICAgICAgICAgbG9nKGBFUyBNb2R1bGUgc3ludGF4IGVycm9yIGluICR7cG90ZW50aWFsUGF0aH0uIE1ha2Ugc3VyZSB5b3UncmUgdXNpbmcgJ2V4cG9ydCcgaW5zdGVhZCBvZiAnbW9kdWxlLmV4cG9ydHMnLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoaW1wb3J0RXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGltcG9ydEVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGJvdGggRVNNIChkZWZhdWx0IGV4cG9ydCkgYW5kIENvbW1vbkpTIChtb2R1bGUuZXhwb3J0cylcbiAgICAgICAgbGV0IGNvbmZpZ0RhdGEgPSBudWxsO1xuICAgICAgICBpZihsZXhDb25maWcuZGVmYXVsdCkge1xuICAgICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWcuZGVmYXVsdDtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBGb3VuZCBkZWZhdWx0IGV4cG9ydCBpbiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBDb21tb25KUyBvciBvdGhlciBtb2R1bGUgc3lzdGVtc1xuICAgICAgICAgIGNvbmZpZ0RhdGEgPSBsZXhDb25maWc7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgVXNpbmcgZGlyZWN0IGV4cG9ydCBpbiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoY29uZmlnRGF0YSAmJiBjb25maWdEYXRhLmVzbGludCAmJiBPYmplY3Qua2V5cyhjb25maWdEYXRhLmVzbGludCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZyhgRm91bmQgRVNMaW50IGNvbmZpZ3VyYXRpb24gaW4gJHtwYXRoUmVzb2x2ZShjd2QsIHBvdGVudGlhbFBhdGgpfSwgYXBwbHlpbmcgc2V0dGluZ3MuLi5gLCAnaW5mbycsIGRlYnVnIHx8ICFxdWlldCk7XG4gICAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5lc2xpbnQsIC4uLmNvbmZpZ0RhdGEuZXNsaW50fTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYEVycm9yIGxvYWRpbmcgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSAke3BvdGVudGlhbFBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCByZW1vdmVGaWxlQ29tbWVudHMgPSAoZmlsZVBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4pOiBib29sZWFuID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlQ29udGVudCA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblxuICAgIGlmKGZpbGVDb250ZW50Lmxlbmd0aCA+IDEwMDAwMDApIHsgLy8gMU1CIGxpbWl0XG4gICAgICBsb2coYFNraXBwaW5nIGNvbW1lbnQgcmVtb3ZhbCBmb3IgbGFyZ2UgZmlsZTogJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gVXNlIHJlZ2V4IHRvIG1hdGNoIGRpZmZlcmVudCB0eXBlcyBvZiBjb21tZW50c1xuICAgIC8vIFByZXNlcnZlczpcbiAgICAvLyAxLiBDb3B5cmlnaHQgbm90aWNlcyAoLyogQ29weXJpZ2h0IC4uLiAqLylcbiAgICAvLyAyLiBUT0RPIGNvbW1lbnRzICgvLyBUT0RPOiAuLi4pXG4gICAgLy8gMy4gTGljZW5zZSBoZWFkZXJzICgvKiAuLi4gTGljZW5zZSAuLi4gKi8pXG5cbiAgICAvLyBIYW5kbGUgbXVsdGktbGluZSBjb21tZW50cyBmaXJzdCAtIHByZXNlcnZlIGNvcHlyaWdodC9saWNlbnNlIG5vdGljZXNcbiAgICBsZXQgbmV3Q29udGVudCA9IGZpbGVDb250ZW50LnJlcGxhY2UoXG4gICAgICAvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLFxuICAgICAgKG1hdGNoKSA9PiB7XG4gICAgICAgIGlmKG1hdGNoLmluY2x1ZGVzKCdDb3B5cmlnaHQnKSB8fFxuICAgICAgICAgIG1hdGNoLmluY2x1ZGVzKCdMSUNFTlNFJykgfHxcbiAgICAgICAgICBtYXRjaC5pbmNsdWRlcygnTGljZW5zZScpIHx8XG4gICAgICAgICAgbWF0Y2guaW5jbHVkZXMoJ2xpY2Vuc2UnKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhhbmRsZSBzaW5nbGUtbGluZSBjb21tZW50cyAtIHByZXNlcnZlIFRPRE9zXG4gICAgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQucmVwbGFjZShcbiAgICAgIC9cXC9cXC8uKiQvZ20sXG4gICAgICAobWF0Y2gpID0+IHtcbiAgICAgICAgaWYobWF0Y2guaW5jbHVkZXMoJ1RPRE8nKSB8fCBtYXRjaC5pbmNsdWRlcygnRklYTUUnKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIENsZWFuIHVwIGFueSBtdWx0aXBsZSBibGFuayBsaW5lcyBjcmVhdGVkIGJ5IGNvbW1lbnQgcmVtb3ZhbFxuICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UoL1xcblxccypcXG5cXHMqXFxuL2csICdcXG5cXG4nKTtcblxuICAgIC8vIElmIHRoZSBmaWxlIHdhcyBtb2RpZmllZCwgc2F2ZSBpdFxuICAgIGlmKG5ld0NvbnRlbnQgIT09IGZpbGVDb250ZW50KSB7XG4gICAgICB3cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBuZXdDb250ZW50LCAndXRmOCcpO1xuICAgICAgbG9nKGBSZW1vdmVkIGNvbW1lbnRzIGZyb20gJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgRXJyb3IgcmVtb3ZpbmcgY29tbWVudHMgZnJvbSAke2ZpbGVQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsaW50ID0gYXN5bmMgKGNtZDogTGludE9wdGlvbnMgJiB7J3JlbW92ZS1jb21tZW50cyc/OiBib29sZWFufSwgY2FsbGJhY2s6IExpbnRDYWxsYmFjayA9IHByb2Nlc3MuZXhpdCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZml4ID0gZmFsc2UsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBxdWlldCA9IGZhbHNlLFxuICAgIGNvbmZpZyA9IG51bGwsXG4gICAgcmVtb3ZlQ29tbWVudHMgPSBmYWxzZSxcbiAgICAncmVtb3ZlLWNvbW1lbnRzJzogcmVtb3ZlQ29tbWVudHNGbGFnID0gZmFsc2VcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzaG91bGRSZW1vdmVDb21tZW50cyA9IHJlbW92ZUNvbW1lbnRzIHx8IHJlbW92ZUNvbW1lbnRzRmxhZztcblxuICBsb2coYCR7Y2xpTmFtZX0gbGludGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBhd2FpdCBsb2FkQUlDb25maWcoY3dkLCBxdWlldCwgZGVidWcpO1xuXG4gIGxldCB0ZW1wQ29uZmlnUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1c2VUeXBlc2NyaXB0ID0gZGV0ZWN0VHlwZVNjcmlwdChjd2QpO1xuICAgIGxvZyhgVHlwZVNjcmlwdCAke3VzZVR5cGVzY3JpcHQgPyAnZGV0ZWN0ZWQnIDogJ25vdCBkZXRlY3RlZCd9IGZyb20gdHNjb25maWcuanNvbmAsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgICAgTGV4Q29uZmlnLmNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKTtcbiAgICB9XG5cbiAgICBlbnN1cmVNb2R1bGVUeXBlKGN3ZCk7XG5cbiAgICBhd2FpdCBpbnN0YWxsRGVwZW5kZW5jaWVzKGN3ZCwgdXNlVHlwZXNjcmlwdCwgcXVpZXQpO1xuXG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLm1qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShjd2QsICdlc2xpbnQuY29uZmlnLnRzJyk7XG4gICAgY29uc3QgaGFzRXNsaW50Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHxcbiAgICAgIGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy5qc29uJykpIHx8XG4gICAgICBleGlzdHNTeW5jKHBhdGhSZXNvbHZlKGN3ZCwgJy5lc2xpbnRyYy55bWwnKSkgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLnlhbWwnKSkgfHxcbiAgICAgIGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjJykpO1xuXG4gICAgY29uc3QgaGFzTGV4RXNsaW50Q29uZmlnID0gYXdhaXQgbG9hZEVTTGludENvbmZpZyhjd2QsIHF1aWV0LCBkZWJ1Zyk7XG5cbiAgICBpZihoYXNMZXhFc2xpbnRDb25maWcpIHtcbiAgICAgIGxvZygnVXNpbmcgRVNMaW50IGNvbmZpZ3VyYXRpb24gZnJvbSBsZXguY29uZmlnLiogZmlsZScsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cblxuICAgIGlmKGV4aXN0c1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzb24nKSkpIHtcbiAgICAgIHVubGlua1N5bmMocGF0aFJlc29sdmUoY3dkLCAnLmVzbGludHJjLmpzb24nKSk7XG4gICAgfVxuXG4gICAgbGV0IGxleENvbmZpZ1BhdGggPSAnJztcbiAgICBsZXQgc2hvdWxkQ3JlYXRlVGVtcENvbmZpZyA9IGZhbHNlO1xuXG4gICAgaWYoIWhhc0VzbGludENvbmZpZyAmJiAhaGFzTGV4RXNsaW50Q29uZmlnKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZVBhdGhzID0gW1xuICAgICAgICBwYXRoUmVzb2x2ZShjdXJyZW50RGlybmFtZSwgJy4uLy4uLy4uLy4uL2VzbGludC5jb25maWcudHMnKSxcbiAgICAgICAgcGF0aFJlc29sdmUoY3VycmVudERpcm5hbWUsICcuLi8uLi8uLi8uLi9lc2xpbnQuY29uZmlnLmptcycpLFxuICAgICAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmVudi5MRVhfSE9NRSB8fCAnLi9ub2RlX21vZHVsZXMvQG5sYWJzL2xleCcsICdlc2xpbnQuY29uZmlnLnRzJyksXG4gICAgICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuZW52LkxFWF9IT01FIHx8ICcuL25vZGVfbW9kdWxlcy9AbmxhYnMvbGV4JywgJ2VzbGludC5jb25maWcubWpzJylcbiAgICAgIF07XG5cbiAgICAgIGZvcihjb25zdCBwYXRoIG9mIHBvc3NpYmxlUGF0aHMpIHtcbiAgICAgICAgaWYoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAgIGxleENvbmZpZ1BhdGggPSBwYXRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgQ3VycmVudCBkaXJlY3Rvcnk6ICR7Y3VycmVudERpcm5hbWV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIGxvZyhgUHJvamVjdCBjb25maWcgcGF0aDogJHtwcm9qZWN0Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBQcm9qZWN0IGNvbmZpZyBleGlzdHM6ICR7aGFzRXNsaW50Q29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBsb2coYEZvdW5kIExleCBjb25maWc6ICR7bGV4Q29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgbG9nKGBMZXggY29uZmlnIGV4aXN0czogJHshIWxleENvbmZpZ1BhdGggJiYgZXhpc3RzU3luYyhsZXhDb25maWdQYXRoKX1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYobGV4Q29uZmlnUGF0aCAmJiBleGlzdHNTeW5jKGxleENvbmZpZ1BhdGgpKSB7XG4gICAgICAgIGxvZygnTm8gRVNMaW50IGNvbmZpZ3VyYXRpb24gZm91bmQgaW4gcHJvamVjdC4gVXNpbmcgTGV4XFwncyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaG91bGRDcmVhdGVUZW1wQ29uZmlnID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZihjb25maWcpIHtcbiAgICAgIGNvbnN0IHVzZXJDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBjb25maWcpO1xuICAgICAgaWYoZXhpc3RzU3luYyh1c2VyQ29uZmlnUGF0aCkpIHtcbiAgICAgICAgbG9nKGBVc2luZyBzcGVjaWZpZWQgRVNMaW50IGNvbmZpZ3VyYXRpb246ICR7Y29uZmlnfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBzaG91bGRDcmVhdGVUZW1wQ29uZmlnID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFNwZWNpZmllZCBFU0xpbnQgY29uZmlndXJhdGlvbiBub3QgZm91bmQ6ICR7Y29uZmlnfS4gVXNpbmcgTGV4J3MgZGVmYXVsdCBjb25maWd1cmF0aW9uLmAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHNob3VsZENyZWF0ZVRlbXBDb25maWcpIHtcbiAgICAgIGxvZygnTm8gRVNMaW50IGNvbmZpZ3VyYXRpb24gZm91bmQuIENyZWF0aW5nIGEgdGVtcG9yYXJ5IGNvbmZpZ3VyYXRpb24uLi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGNvbmZpZ1Jlc3VsdCA9IGNyZWF0ZURlZmF1bHRFU0xpbnRDb25maWcodXNlVHlwZXNjcmlwdCwgY3dkKTtcbiAgICAgIHRlbXBDb25maWdQYXRoID0gY29uZmlnUmVzdWx0LmNvbmZpZ1BhdGg7XG4gICAgfVxuXG4gICAgbGV0IGVzbGludE91dHB1dCA9ICcnO1xuICAgIGNvbnN0IGNhcHR1cmVPdXRwdXQgPSAob3V0cHV0OiBzdHJpbmcpID0+IHtcbiAgICAgIGVzbGludE91dHB1dCArPSBgJHtvdXRwdXR9XFxuYDtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuRXNsaW50V2l0aExleChjd2QsIHF1aWV0LCBjbGlOYW1lLCB0cnVlLCBkZWJ1ZywgdXNlVHlwZXNjcmlwdCwgY2FwdHVyZU91dHB1dCk7XG5cbiAgICBpZihzaG91bGRSZW1vdmVDb21tZW50cykge1xuICAgICAgc3Bpbm5lci5zdGFydCgnUmVtb3ZpbmcgY29tbWVudHMgZnJvbSBmaWxlcy4uLicpO1xuXG4gICAgICBjb25zdCBnbG9iID0gYXdhaXQgaW1wb3J0KCdnbG9iJyk7XG4gICAgICBjb25zdCBmaWxlcyA9IGdsb2Iuc3luYygne3NyYyxsaWJ9LyoqLyoue2pzLGpzeCx0cyx0c3h9Jywge1xuICAgICAgICBjd2QsXG4gICAgICAgIGlnbm9yZTogWycqKi9ub2RlX21vZHVsZXMvKionLCAnKiovbGliLyoqJywgJyoqL2Rpc3QvKionLCAnKiovYnVpbGQvKionXVxuICAgICAgfSk7XG5cbiAgICAgIGxldCBwcm9jZXNzZWRDb3VudCA9IDA7XG4gICAgICBmb3IoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgZmlsZSk7XG4gICAgICAgIGlmKHJlbW92ZUZpbGVDb21tZW50cyhmaWxlUGF0aCwgcXVpZXQpKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoYFJlbW92ZWQgY29tbWVudHMgZnJvbSAke3Byb2Nlc3NlZENvdW50fSBmaWxlc2ApO1xuICAgIH1cblxuICAgIGlmKHJlc3VsdCAhPT0gMCAmJiBmaXgpIHtcbiAgICAgIGNvbnN0IGFpQ29uZmlndXJlZCA9IExleENvbmZpZy5jb25maWcuYWk/LnByb3ZpZGVyICYmIExleENvbmZpZy5jb25maWcuYWkucHJvdmlkZXIgIT09ICdub25lJztcblxuICAgICAgaWYoYWlDb25maWd1cmVkKSB7XG4gICAgICAgIGxvZygnQXBwbHlpbmcgQUkgZml4ZXMgdG8gcmVtYWluaW5nIGlzc3Vlcy4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICBhd2FpdCBhcHBseUFJRml4KGN3ZCwgZXNsaW50T3V0cHV0LCBxdWlldCk7XG5cbiAgICAgICAgY29uc3QgYWZ0ZXJGaXhSZXN1bHQgPSBhd2FpdCBydW5Fc2xpbnRXaXRoTGV4KGN3ZCwgcXVpZXQsIGNsaU5hbWUsIGZhbHNlLCBkZWJ1ZywgdXNlVHlwZXNjcmlwdCk7XG5cbiAgICAgICAgY2FsbGJhY2soYWZ0ZXJGaXhSZXN1bHQpO1xuICAgICAgICByZXR1cm4gYWZ0ZXJGaXhSZXN1bHQ7XG4gICAgICB9XG4gICAgICBsb2coJ0VTTGludCBjb3VsZCBub3QgZml4IGFsbCBpc3N1ZXMgYXV0b21hdGljYWxseS4nLCAnd2FybicsIHF1aWV0KTtcbiAgICAgIGxvZygnVG8gZW5hYmxlIEFJLXBvd2VyZWQgZml4ZXMsIGFkZCBBSSBjb25maWd1cmF0aW9uIHRvIHlvdXIgbGV4LmNvbmZpZyBmaWxlOicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgbG9nKGBcbi8vIEluIGxleC5jb25maWcuanMgKG9yIGxleC5jb25maWcubWpzLCBsZXguY29uZmlnLmNqcywgZXRjLilcbmV4cG9ydCBkZWZhdWx0IHtcbiAgLy8gWW91ciBleGlzdGluZyBjb25maWdcbiAgYWk6IHtcbiAgICBwcm92aWRlcjogJ2N1cnNvcicgLy8gb3IgJ29wZW5haScsICdhbnRocm9waWMnLCBldGMuXG4gICAgLy8gQWRkaXRpb25hbCBwcm92aWRlci1zcGVjaWZpYyBzZXR0aW5nc1xuICB9XG59O2AsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBpZihzcGlubmVyKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0xpbnRpbmcgZmFpbGVkIScpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCB0ZW1wRmlsZVBhdGhzID0gW1xuICAgICAgdGVtcENvbmZpZ1BhdGgsXG4gICAgICBwYXRoUmVzb2x2ZShjd2QsICcubGV4LXRlbXAtZXNsaW50LmNqcycpLFxuICAgICAgcGF0aFJlc29sdmUoY3dkLCAnLmxleC10ZW1wLWRlZmF1bHQtZXNsaW50LmNqcycpXG4gICAgXTtcblxuICAgIGZvcihjb25zdCBmaWxlUGF0aCBvZiB0ZW1wRmlsZVBhdGhzKSB7XG4gICAgICBpZihmaWxlUGF0aCAmJiBleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHVubGlua1N5bmMoZmlsZVBhdGgpO1xuICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICBsb2coYENsZWFuZWQgdXAgdGVtcG9yYXJ5IEVTTGludCBjb25maWcgYXQgJHtmaWxlUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2h7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07Il0sIm5hbWVzIjpbImV4ZWNhIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInVubGlua1N5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImV4dG5hbWUiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJjdXJyZW50RmlsZW5hbWUiLCJjdXJyZW50RGlybmFtZSIsImV2YWwiLCJwcm9jZXNzIiwiY3dkIiwiY3JlYXRlRGVmYXVsdEVTTGludENvbmZpZyIsInVzZVR5cGVzY3JpcHQiLCJjb25maWdQYXRoIiwib3JpZ2luYWxDb25maWciLCJjb25maWdDb250ZW50IiwiZGV0ZWN0VHlwZVNjcmlwdCIsImVuc3VyZU1vZHVsZVR5cGUiLCJwYWNrYWdlSnNvblBhdGgiLCJwYWNrYWdlSnNvbkNvbnRlbnQiLCJwYWNrYWdlSnNvbiIsIkpTT04iLCJwYXJzZSIsInR5cGUiLCJfZXJyb3IiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwicXVpZXQiLCJydW5Fc2xpbnRXaXRoTGV4IiwiY2xpTmFtZSIsImZpeCIsImRlYnVnIiwiY2FwdHVyZU91dHB1dCIsInNwaW5uZXIiLCJwcm9qZWN0Q29uZmlnUGF0aCIsInByb2plY3RDb25maWdQYXRoVHMiLCJoYXNQcm9qZWN0Q29uZmlnIiwiaGFzTGV4Q29uZmlnRXNsaW50IiwiY29uZmlnIiwiZXNsaW50IiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInBvc3NpYmxlUGF0aHMiLCJlbnYiLCJMRVhfSE9NRSIsImxleENvbmZpZ1BhdGgiLCJwYXRoIiwidGVtcENvbmZpZ1BhdGgiLCJzdHJpbmdpZnkiLCJlc2xpbnRCaW5hcnkiLCJiYXNlRXNsaW50QXJncyIsImNvbmZpZ0FyZ3MiLCJqc1Jlc3VsdCIsInJlamVjdCIsInNoZWxsIiwic3RkaW8iLCJzdGRvdXQiLCJjb25zb2xlIiwic3RkZXJyIiwiZXJyb3IiLCJ0c1Jlc3VsdCIsImV4aXRDb2RlIiwibWVzc2FnZSIsImVzbGludE5vdEZvdW5kIiwiaW5jbHVkZXMiLCJmYWlsIiwic3VjY2VlZCIsIm5vRmlsZXNGb3VuZCIsImFwcGx5QUlGaXgiLCJlcnJvcnMiLCJzdGFydCIsImZpbGVFcnJvck1hcCIsIk1hcCIsImxpbmVzIiwic3BsaXQiLCJjdXJyZW50RmlsZSIsImxpbmUiLCJtYXRjaCIsInRyaW0iLCJoYXMiLCJzZXQiLCJlcnJvckFycmF5IiwiZ2V0IiwicHVzaCIsInNpemUiLCJzZWN0aW9ucyIsInNlY3Rpb24iLCJmaWxlUGF0aCIsImkiLCJmaWxlUGF0aFJlZ2V4IiwiZmlsZVBhdGhzIiwia25vd25GaWxlcyIsImZpbGUiLCJpc0N1cnNvcklERSIsImFpIiwicHJvdmlkZXIiLCJDVVJTT1JfSURFIiwicHJvbXB0IiwicHJvbXB0RmlsZSIsIndhc01vZGlmaWVkIiwiYXBwbHlEaXJlY3RGaXhlcyIsImZpbGVFcnJvcnMiLCJjYWxsQUlTZXJ2aWNlIiwiZmlsZUNvbnRlbnQiLCJqb2luIiwiZml4ZWRDb250ZW50IiwibmV3Q29udGVudCIsInJlcGxhY2UiLCJsb2FkQUlDb25maWciLCJjb25maWdGb3JtYXRzIiwiY29uZmlnQmFzZU5hbWUiLCJmb3JtYXQiLCJwb3RlbnRpYWxQYXRoIiwic2xpY2UiLCJpbXBvcnRQYXRoIiwidXJsIiwiVVJMIiwiaHJlZiIsInVybEVycm9yIiwibGV4Q29uZmlnIiwiaW1wb3J0RXJyb3IiLCJjb25maWdEYXRhIiwiZGVmYXVsdCIsImxvYWRFU0xpbnRDb25maWciLCJmaWxlRm9ybWF0IiwicmVtb3ZlRmlsZUNvbW1lbnRzIiwibGludCIsImNtZCIsImNhbGxiYWNrIiwiZXhpdCIsInJlbW92ZUNvbW1lbnRzIiwicmVtb3ZlQ29tbWVudHNGbGFnIiwic2hvdWxkUmVtb3ZlQ29tbWVudHMiLCJjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnIiwiaGFzRXNsaW50Q29uZmlnIiwiaGFzTGV4RXNsaW50Q29uZmlnIiwic2hvdWxkQ3JlYXRlVGVtcENvbmZpZyIsInVzZXJDb25maWdQYXRoIiwiY29uZmlnUmVzdWx0IiwiZXNsaW50T3V0cHV0Iiwib3V0cHV0IiwicmVzdWx0IiwiZ2xvYiIsImZpbGVzIiwic3luYyIsImlnbm9yZSIsInByb2Nlc3NlZENvdW50IiwiYWlDb25maWd1cmVkIiwiYWZ0ZXJGaXhSZXN1bHQiLCJ0ZW1wRmlsZVBhdGhzIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLEVBQUVDLFlBQVksRUFBRUMsVUFBVSxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUN2RSxTQUFRQyxPQUFPLEVBQUVDLFdBQVdDLFdBQVcsRUFBRUMsT0FBTyxRQUFPLE9BQU87QUFFOUQsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxhQUFhLFFBQU8scUJBQXFCO0FBQ2pELFNBQVFDLGlCQUFpQixRQUFPLHNCQUFzQjtBQUN0RCxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBRXZDLElBQUlDO0FBQ0osSUFBSUM7QUFFSixJQUFJO0lBQ0ZELGtCQUFrQkUsS0FBSztJQUN2QkQsaUJBQWlCVCxRQUFRUTtBQUMzQixFQUFFLE9BQUs7SUFD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
|
package/lib/index.d.ts
CHANGED
|
@@ -12,7 +12,6 @@ export * from './utils/aiService.js';
|
|
|
12
12
|
export * from './utils/app.js';
|
|
13
13
|
export * from './utils/file.js';
|
|
14
14
|
export * from './utils/log.js';
|
|
15
|
-
export * from './utils/reactShim.js';
|
|
16
15
|
export * from './storybook/index.js';
|
|
17
16
|
export * from './commands/ai/ai.js';
|
|
18
17
|
export * from './commands/build/build.js';
|
package/lib/index.js
CHANGED
|
@@ -14,7 +14,6 @@ export * from './utils/aiService.js';
|
|
|
14
14
|
export * from './utils/app.js';
|
|
15
15
|
export * from './utils/file.js';
|
|
16
16
|
export * from './utils/log.js';
|
|
17
|
-
export * from './utils/reactShim.js';
|
|
18
17
|
// Export Storybook module
|
|
19
18
|
export * from './storybook/index.js';
|
|
20
19
|
// Export commands
|
|
@@ -38,4 +37,4 @@ export * from './commands/update/update.js';
|
|
|
38
37
|
export * from './commands/upgrade/upgrade.js';
|
|
39
38
|
export * from './commands/versions/versions.js';
|
|
40
39
|
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7TGV4Q29uZmlnVHlwZX0gZnJvbSAnLi9MZXhDb25maWcuanMnO1xuXG4vLyBFeHBvcnQgdHlwZXMgZnJvbSB0eXBlcy50c1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIEV4cG9ydCBjbGFzc2VzIGFuZCB2YWx1ZXMgZnJvbSBMZXhDb25maWdcbmV4cG9ydCB7XG4gIGRlZmF1bHRDb25maWdWYWx1ZXMsIExleENvbmZpZ1xufSBmcm9tICcuL0xleENvbmZpZy5qcyc7XG5cbi8vIEV4cG9ydCBDb25maWcgYXMgYm90aCBhIHR5cGUgYW5kIGEgbmFtZXNwYWNlIHdpdGggY3JlYXRlIG1ldGhvZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuZXhwb3J0IGNvbnN0IENvbmZpZyA9IHtcbiAgY3JlYXRlOiAoY29uZmlnOiBMZXhDb25maWdUeXBlKSA9PiBjb25maWdcbn07XG5cbi8vIEV4cG9ydCB1dGlsaXR5IGZ1bmN0aW9uc1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9haVNlcnZpY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9hcHAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9maWxlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuLy8gRXhwb3J0IFN0b3J5Ym9vayBtb2R1bGVcbmV4cG9ydCAqIGZyb20gJy4vc3Rvcnlib29rL2luZGV4LmpzJztcblxuLy8gRXhwb3J0IGNvbW1hbmRzXG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2FpL2FpLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvYnVpbGQvYnVpbGQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jbGVhbi9jbGVhbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2NvbmZpZy9jb25maWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jb3B5L2NvcHkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy9jcmVhdGUvY3JlYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvZGV2L2Rldi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2luaXQvaW5pdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2xpbmsvbGluay5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL2xpbnQvbGludC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL21pZ3JhdGUvbWlncmF0ZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3B1Ymxpc2gvcHVibGlzaC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3NlcnZlcmxlc3Mvc2VydmVybGVzcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbW1hbmRzL3N0b3J5Ym9vay9zdG9yeWJvb2suanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy90ZXN0L3Rlc3QuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21tYW5kcy91cGRhdGUvdXBkYXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvdXBncmFkZS91cGdyYWRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMvdmVyc2lvbnMvdmVyc2lvbnMuanMnO1xuIl0sIm5hbWVzIjpbImRlZmF1bHRDb25maWdWYWx1ZXMiLCJMZXhDb25maWciLCJDb25maWciLCJjcmVhdGUiLCJjb25maWciXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUlELDZCQUE2QjtBQUM3QixjQUFjLGFBQWE7QUFFM0IsMkNBQTJDO0FBQzNDLFNBQ0VBLG1CQUFtQixFQUFFQyxTQUFTLFFBQ3pCLGlCQUFpQjtBQUV4Qiw2RkFBNkY7QUFDN0YsT0FBTyxNQUFNQyxTQUFTO0lBQ3BCQyxRQUFRLENBQUNDLFNBQTBCQTtBQUNyQyxFQUFFO0FBRUYsMkJBQTJCO0FBQzNCLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMsaUJBQWlCO0FBQy9CLGNBQWMsa0JBQWtCO0FBQ2hDLGNBQWMsaUJBQWlCO0FBRS9CLDBCQUEwQjtBQUMxQixjQUFjLHVCQUF1QjtBQUVyQyxrQkFBa0I7QUFDbEIsY0FBYyxzQkFBc0I7QUFDcEMsY0FBYyw0QkFBNEI7QUFDMUMsY0FBYyw0QkFBNEI7QUFDMUMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyw4QkFBOEI7QUFDNUMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyw4QkFBOEI7QUFDNUMsY0FBYyx3QkFBd0I7QUFDdEMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyxzQ0FBc0M7QUFDcEQsY0FBYyxvQ0FBb0M7QUFDbEQsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyw4QkFBOEI7QUFDNUMsY0FBYyxnQ0FBZ0M7QUFDOUMsY0FBYyxrQ0FBa0MifQ==
|
package/lib/utils/app.d.ts
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
4
|
*/
|
|
5
5
|
import type { LexConfigType } from '../LexConfig.js';
|
|
6
|
-
export declare const cwd: string;
|
|
7
6
|
export interface GetFilenamesProps {
|
|
8
7
|
readonly callback?: (status: number) => void;
|
|
9
8
|
readonly cliName?: string;
|