@datagrok-libraries/utils 3.0.0 → 3.0.2
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/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rich-function-view.d.ts","sourceRoot":"","sources":["rich-function-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAO7C,OAAO,+BAA+B,CAAC;AAkCvC,qBAAa,gBAAiB,SAAQ,YAAY;IAiBvC,OAAO,EAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAC;IAf/D,OAAO,CAAC,eAAe,CAAiB;IAGxC,OAAO,CAAC,SAAS,CAAS;IAE1B,MAAM,CAAC,YAAY,CACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACrB,OAAO,GAAE;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACb;gBAMvC,QAAQ,EAAE,MAAM,EACT,OAAO,GAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACrB;IAOzB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,OAAO,IAAI,WAAW;IA6BtB,eAAe,IAAI,WAAW;IAMrC,OAAO,CAAC,QAAQ,CAAmB;IAE5B,gBAAgB,IAAI,WAAW;
|
|
1
|
+
{"version":3,"file":"rich-function-view.d.ts","sourceRoot":"","sources":["rich-function-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAO7C,OAAO,+BAA+B,CAAC;AAkCvC,qBAAa,gBAAiB,SAAQ,YAAY;IAiBvC,OAAO,EAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAC;IAf/D,OAAO,CAAC,eAAe,CAAiB;IAGxC,OAAO,CAAC,SAAS,CAAS;IAE1B,MAAM,CAAC,YAAY,CACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACrB,OAAO,GAAE;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACb;gBAMvC,QAAQ,EAAE,MAAM,EACT,OAAO,GAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACrB;IAOzB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,OAAO,IAAI,WAAW;IA6BtB,eAAe,IAAI,WAAW;IAMrC,OAAO,CAAC,QAAQ,CAAmB;IAE5B,gBAAgB,IAAI,WAAW;IAgJzB,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ;IAelD,OAAO,CAAC,iBAAiB,CAAoC;IAE7D,SAAS,KAAK,QAAQ,kBAKrB;IAED,SAAS,KAAK,cAAc,kBAE3B;IAED,SAAS,KAAK,oBAAoB,YAEjC;IAED,SAAS,KAAK,wBAAwB,aAIrC;IAED,SAAS,KAAK,gBAAgB,aAK7B;IAED,SAAS,KAAK,UAAU,aAEvB;IAED,SAAS,KAAK,kBAAkB,kCAmB/B;IAEqB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAY5B,KAAK;IAanB,OAAO,CAAC,gBAAgB;IAiHxB,SAAS,CAAC,aAAa,WAAkB,MAAM,mBAoI7C;IAEF,YAAY;;;yBAtI6B,MAAM;;MA2I7C;CACH"}
|
|
@@ -125,7 +125,7 @@ export class RichFunctionView extends FunctionView {
|
|
|
125
125
|
}
|
|
126
126
|
else {
|
|
127
127
|
for (const outputParam of outputParams.filter((outputParam) => outputParam.property.propertyType === DG.TYPE.DATA_FRAME &&
|
|
128
|
-
((tabLabel === 'Output' && outputParam.property.category === 'Misc') ||
|
|
128
|
+
((tabLabel === 'Output' && outputParam.property.category === 'Misc' || outputParam.property.category === 'Output') ||
|
|
129
129
|
(tabLabel !== 'Output' && outputParam.property.category === tabLabel)))) {
|
|
130
130
|
const nonGridViewers = this.dfToViewerMapping[outputParam.property.name]
|
|
131
131
|
.filter((viewer) => viewer.type !== DG.VIEWER.GRID)
|
|
@@ -276,11 +276,11 @@ export class RichFunctionView extends FunctionView {
|
|
|
276
276
|
dfBlock
|
|
277
277
|
], { style: Object.assign({}, (fullBlockWidth > 0) ? { 'width': `${fullBlockWidth}%` } : { 'width': `100%` }) });
|
|
278
278
|
});
|
|
279
|
-
const generateScalarsTable = () =>
|
|
280
|
-
var _a;
|
|
281
|
-
|
|
282
|
-
return
|
|
283
|
-
}
|
|
279
|
+
const generateScalarsTable = () => {
|
|
280
|
+
const table = DG.HtmlTable.create(tabScalarProps, (scalarProp) => { var _a; return [scalarProp.name, (_a = this.funcCall) === null || _a === void 0 ? void 0 : _a.outputs[scalarProp.name], scalarProp.options['units']]; }).root;
|
|
281
|
+
table.style.maxWidth = '400px';
|
|
282
|
+
return table;
|
|
283
|
+
};
|
|
284
284
|
let scalarsTable = generateScalarsTable();
|
|
285
285
|
tabScalarProps.forEach((tabScalarProp) => {
|
|
286
286
|
const subscribeOnFcChanges = () => {
|
|
@@ -360,7 +360,7 @@ export class RichFunctionView extends FunctionView {
|
|
|
360
360
|
get outputTabsLabels() {
|
|
361
361
|
return [
|
|
362
362
|
...this.outUniqueParamCategories,
|
|
363
|
-
...this.outUniqueParamCategories.find((val) => val === 'Misc') ? ['Output'] : [], // if no categories are stated, the default category is added
|
|
363
|
+
...this.outUniqueParamCategories.find((val) => val === 'Misc' || val === 'Output') ? ['Output'] : [], // if no categories are stated, the default category is added
|
|
364
364
|
];
|
|
365
365
|
}
|
|
366
366
|
get tabsLabels() {
|
|
@@ -561,4 +561,4 @@ const plotToSheet = (exportWb, sheet, plot, columnForImage, rowForImage = 0) =>
|
|
|
561
561
|
ext: { width: canvas.width, height: canvas.height },
|
|
562
562
|
});
|
|
563
563
|
});
|
|
564
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC1mdW5jdGlvbi12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmljaC1mdW5jdGlvbi12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sK0JBQStCLENBQUM7QUFFdkMsTUFBTSxrQkFBa0IsR0FBNEI7SUFDbEQsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFDakMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVE7SUFDL0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVE7SUFDaEMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFDakMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDdkMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU87SUFDOUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxD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QUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUU5QyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXBFLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXJFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzFGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBRTlGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUF1QixDQUFDO1lBQzdFLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUF1QixDQUFDO1lBRS9FLFFBQVEsQ0FBQyxPQUFPLENBQUMs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LEVBQUU7SUFDckosTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBbUIsRUFBRSxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLEVBQUUsT0FBTztRQUNmLFNBQVMsRUFBRSxLQUFLO0tBQ2pCLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQ3RCLEVBQUUsRUFBRSxFQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBQztRQUMzQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBQztLQUNsRCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0Z1bmN0aW9uVmlld30gZnJvbSAnLi9mdW5jdGlvbi12aWV3JztcbmltcG9ydCBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtVaVV0aWxzfSBmcm9tICcuL3NoYXJlZC1jb21wb25lbnRzL3VpLXV0aWxzJztcbmltcG9ydCAnLi4vY3NzL3JpY2gtZnVuY3Rpb24tdmlldy5jc3MnO1xuXG5jb25zdCB2aWV3ZXJUeXBlc01hcHBpbmc6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICBbJ2JhcmNoYXJ0J106IERHLlZJRVdFUi5CQVJfQ0hBUlQsXG4gIFsnYm94cGxvdCddOiBERy5WSUVXRVIuQk9YX1BMT1QsXG4gIFsnY2FsZW5kYXInXTogREcuVklFV0VSLkNBTEVOREFSLFxuICBbJ2NvcnJwbG90J106IERHLlZJRVdFUi5DT1JSX1BMT1QsXG4gIFsnZGVuc2l0eXBsb3QnXTogREcuVklFV0VSLkRFTlNJVFlfUExPVCxcbiAgWydmaWx0ZXJzJ106IERHLlZJRVdFUi5GSUxURVJTLFxuICBbJ2Zvcm0nXTogREcuVklFV0VSLkZPUk0sXG4gIFsnZ2xvYmUnXTogREcuVklFV0VSLkdMT0JFLFxuICBbJ2dvb2dsZW1hcCddOiBERy5WSUVXRVIuR09PR0xFX01BUCxcbiAgWydncmlkJ106IERHLlZJRVdFUi5HUklELFxuICBbJ2hlYXRtYXAnXTogREcuVklFV0VSLkhFQVRfTUFQLFxuICBbJ2hpc3RvZ3JhbSddOiBERy5WSUVXRVIuSElTVE9HUkFNLFxuICBbJ2xpbmVjaGFydCddOiBERy5WSUVXRVIuTElORV9DSEFSVCxcbiAgWydtYXJrdXAnXTogREcuVklFV0VSLk1BUktVUCxcbiAgWydtYXRyaXhwbG90J106IERHLlZJRVdFUi5NQVRSSVhfUExPVCxcbiAgWyduZXR3b3JrZGlhZ3JhbSddOiBERy5WSUVXRVIuTkVUV09SS19ESUFHUkFNLFxuICBbJ3BjcGxvdCddOiBERy5WSUVXRVIuUENfUExPVCxcbiAgWydwaWVjaGFydCddOiBERy5WSUVXRVIuUElFX0NIQVJULFxuICBbJ3NjYXR0ZXJwbG90J106IERHLlZJRVdFUi5TQ0FUVEVSX1BMT1QsXG4gIFsnc2NhdHRlcnBsb3QzZCddOiBERy5WSUVXRVIuU0NBVFRFUl9QTE9UXzNELFxuICBbJ3NoYXBlbWFwJ106IERHLlZJRVdFUi5TSEFQRV9NQVAsXG4gIFsnc3RhdGlzdGljcyddOiBERy5WSUVXRVIuU1RBVElTVElDUyxcbiAgWyd0aWxldmlld2VyJ106IERHLlZJRVdFUi5USUxFX1ZJRVdFUixcbiAgWyd0aW1lbGluZXMnXTogREcuVklFV0VSLlRJTUVMSU5FUyxcbiAgWyd0cmVlbWFwJ106IERHLlZJRVdFUi5UUkVFX01BUCxcbiAgWyd0cmVsbGlzcGxvdCddOiBERy5WSUVXRVIuVFJFTExJU19QTE9ULFxuICBbJ3dvcmRjbG91ZCddOiBERy5WSUVXRVIuV09SRF9DTE9VRCxcbn07XG5cbmNvbnN0IEZJTEVfSU5QVVRfVFlQRSA9ICdmaWxlJztcblxuZXhwb3J0IGNsYXNzIFJpY2hGdW5jdGlvblZpZXcgZXh0ZW5kcyBGdW5jdGlvblZpZXcge1xuICAvLyBlbWl0dGVkIHdoZW4gcnVuQnV0dG9uIGRpc2FiaWxpdHkgc2hvdWxkIGJlIGNoZWNrZWRcbiAgcHJpdmF0ZSBjaGVja0Rpc2FiaWxpdHkgPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8vIHN0b3JlcyB0aGUgcnVubmluZyBzdGF0ZVxuICBwcml2YXRlIGlzUnVubmluZyA9IGZhbHNlO1xuXG4gIHN0YXRpYyBmcm9tRnVuY0NhbGwoXG4gICAgZnVuY0NhbGw6IERHLkZ1bmNDYWxsLFxuICAgIG9wdGlvbnM6IHtoaXN0b3J5RW5hYmxlZDogYm9vbGVhbiwgaXNUYWJiZWQ6IGJvb2xlYW59ID1cbiAgICB7aGlzdG9yeUVuYWJsZWQ6IHRydWUsIGlzVGFiYmVkOiBmYWxzZX1cbiAgKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmNDYWxsLmZ1bmMubnFOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIG9wdGlvbnM6IHsgaGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW4sIGlzVGFiYmVkOiBib29sZWFufSA9XG4gICAge2hpc3RvcnlFbmFibGVkOiB0cnVlLCBpc1RhYmJlZDogZmFsc2V9XG4gICkge1xuICAgIHN1cGVyKGZ1bmNOYW1lLCBvcHRpb25zKTtcblxuICAgIHRoaXMuYmFzZVBhdGggPSBgc2NyaXB0cy8ke3RoaXMuZnVuY0NhbGwuZnVuYy5pZH0vdmlld2A7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25BZnRlclJ1bihydW5GdW5jOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudGFic0VsZW0ucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgIHRoaXMudGFic0VsZW0ucGFuZXMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICB0YWIuaGVhZGVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgfSk7XG4gICAgY29uc3QgZmlyc3RPdXRwdXRUYWIgPSB0aGlzLnRhYnNFbGVtLnBhbmVzLmZpbmQoKHRhYikgPT4gdGFiLm5hbWUgIT09ICdJbnB1dCcpO1xuICAgIGlmIChmaXJzdE91dHB1dFRhYikgdGhpcy50YWJzRWxlbS5jdXJyZW50UGFuZSA9IGZpcnN0T3V0cHV0VGFiO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkSU8oKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGlucHV0QmxvY2sgPSB0aGlzLmJ1aWxkSW5wdXRCbG9jaygpO1xuXG4gICAgdWkudG9vbHMuaGFuZGxlUmVzaXplKGlucHV0QmxvY2ssICh3aWR0aCkgPT4ge1xuICAgICAgaWYgKHdpZHRoIDwgMzUwKVxuICAgICAgICAkKGlucHV0QmxvY2suZmlyc3RDaGlsZCEpLmFkZENsYXNzKCd1aS1mb3JtLWNvbmRlbnNlZCcpO1xuICAgICAgZWxzZVxuICAgICAgICAkKGlucHV0QmxvY2suZmlyc3RDaGlsZCEpLnJlbW92ZUNsYXNzKCd1aS1mb3JtLWNvbmRlbnNlZCcpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0QmxvY2sgPSB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcbiAgICBvdXRwdXRCbG9jay5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgb3V0cHV0QmxvY2suc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy50YWJzRWxlbS5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBpZiAoISF0aGlzLnRhYnNFbGVtLmdldFBhbmUoJ0lucHV0JykpIHtcbiAgICAgIHRoaXMudGFic0VsZW0ucGFuZXMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgIHRhYi5oZWFkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG91dCA9IHVpLnNwbGl0SChbaW5wdXRCbG9jaywgdWkucGFuZWwoW291dHB1dEJsb2NrXSwge3N0eWxlOiB7J3BhZGRpbmctdG9wJzogJzBweCd9fSldLCBudWxsLCB0cnVlKTtcbiAgICBvdXQuc3R5bGUucGFkZGluZyA9ICcwIDEycHgnO1xuXG4gICAgaW5wdXRCbG9jay5wYXJlbnRFbGVtZW50IS5zdHlsZS5tYXhXaWR0aCA9ICc0NTBweCc7XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcHVibGljIGJ1aWxkSW5wdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgZm9ybURpdiA9IHRoaXMucmVuZGVyUnVuU2VjdGlvbigpO1xuXG4gICAgcmV0dXJuIGZvcm1EaXY7XG4gIH1cblxuICBwcml2YXRlIHRhYnNFbGVtID0gdWkudGFiQ29udHJvbCgpO1xuXG4gIHB1YmxpYyBidWlsZE91dHB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICB0aGlzLnRhYnNFbGVtLnJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG5cbiAgICB0aGlzLnRhYnNMYWJlbHMuZm9yRWFjaCgodGFiTGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IHRhYkRmUHJvcHMgPSB0aGlzLmNhdGVnb3J5VG9QYXJhbU1hcFt0YWJMYWJlbF0uZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICAgIGNvbnN0IHRhYlNjYWxhclByb3BzID0gdGhpcy5jYXRlZ29yeVRvUGFyYW1NYXBbdGFiTGFiZWxdLmZpbHRlcigocCkgPT4gcC5wcm9wZXJ0eVR5cGUgIT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICAgIC8vIEVYUExBSU46IHVuZGVmaW5lZCBhbmQgSlNPTi5wYXJzZVxuICAgICAgY29uc3QgcGFyc2VkVGFiRGZQcm9wcyA9IHRhYkRmUHJvcHMubWFwKChkZlByb3ApID0+IChkZlByb3Aub3B0aW9uc1sndmlld2VyJ10gIT09IHVuZGVmaW5lZCkgP1xuICAgICAgICBKU09OLnBhcnNlKGRmUHJvcC5vcHRpb25zWyd2aWV3ZXInXSwgKF8sIHYpID0+IHYgPT09ICd0cnVlJyB8fCB2ID09PSAnZmFsc2UnID8gSlNPTi5wYXJzZSh2KTogdik6XG4gICAgICAgIFtdKTtcblxuICAgICAgY29uc3QgZGZCbG9ja3MgPSB0YWJEZlByb3BzLm1hcCgoZGZQcm9wLCBkZkluZGV4KSA9PiB7XG4gICAgICAgIGxldCBmdWxsQmxvY2tXaWR0aCA9IDA7XG4gICAgICAgIHBhcnNlZFRhYkRmUHJvcHNbZGZJbmRleF0uZm9yRWFjaCgoXzogYW55LCB2aWV3ZXJJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tTaXplID0gcGFyc2VkVGFiRGZQcm9wc1tkZkluZGV4XVt2aWV3ZXJJbmRleF1bJ2Jsb2NrJ107XG5cbiAgICAgICAgICBmdWxsQmxvY2tXaWR0aCArPSBibG9ja1NpemUgPyBwYXJzZUludChibG9ja1NpemUpOiAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB2aWV3ZXJzOiBQcm9taXNlPERHLlZpZXdlcltdPiA9IFByb21pc2UuYWxsKHBhcnNlZFRhYkRmUHJvcHNbZGZJbmRleF0ubWFwKGFzeW5jICh2aWV3ZXJEZXNjOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZTogREcuRGF0YUZyYW1lID0gdGhpcy5mdW5jQ2FsbD8ub3V0cHV0c1tkZlByb3AubmFtZV0/LnZhbHVlID8/IHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zW2RmUHJvcC5uYW1lXT8udmFsdWUgPz8gZ3Jvay5kYXRhLmRlbW8uZGVtb2coMSk7XG5cbiAgICAgICAgICBjb25zdCB2aWV3ZXIgPSB2aWV3ZXJUeXBlc01hcHBpbmdbdmlld2VyRGVzY1sndHlwZSddXSA/IERHLlZpZXdlci5mcm9tVHlwZSh2aWV3ZXJUeXBlc01hcHBpbmdbdmlld2VyRGVzY1sndHlwZSddXSwgaW5pdGlhbFZhbHVlKTogYXdhaXQgaW5pdGlhbFZhbHVlLnBsb3QuZnJvbVR5cGUodmlld2VyRGVzY1sndHlwZSddKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgdmlld2VyLnNldE9wdGlvbnModmlld2VyRGVzYyk7XG5cbiAgICAgICAgICBpZiAodGhpcy5kZlRvVmlld2VyTWFwcGluZ1tkZlByb3AubmFtZV0pIHRoaXMuZGZUb1ZpZXdlck1hcHBpbmdbZGZQcm9wLm5hbWVdLnB1c2godmlld2VyKTsgZWxzZSB0aGlzLmRmVG9WaWV3ZXJNYXBwaW5nW2RmUHJvcC5uYW1lXSA9IFt2aWV3ZXJdO1xuXG4gICAgICAgICAgcmV0dXJuIHZpZXdlcjtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHZpZXdlcnMudGhlbigobG9hZGVkVmlld2VycykgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1YnNjcmliZU9uRmNDaGFuZ2VzID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtID0gdGhpcy5mdW5jQ2FsbCEub3V0cHV0UGFyYW1zW2RmUHJvcC5uYW1lXSA/PyB0aGlzLmZ1bmNDYWxsIS5pbnB1dFBhcmFtc1tkZlByb3AubmFtZV07XG5cbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbS5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgbG9hZGVkVmlld2Vycy5mb3JFYWNoKGFzeW5jICh2aWV3ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnZhbHVlcyh2aWV3ZXJUeXBlc01hcHBpbmcpLmluY2x1ZGVzKHZpZXdlci50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgdmlld2VyLmRhdGFGcmFtZSA9IGN1cnJlbnRQYXJhbS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gRVhQTEFJTiBXSFlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdlciA9IGF3YWl0IGN1cnJlbnRQYXJhbS52YWx1ZS5wbG90LmZyb21UeXBlKHZpZXdlci50eXBlKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdC5yZXBsYWNlV2l0aChuZXdWaWV3ZXIucm9vdCk7XG4gICAgICAgICAgICAgICAgICB2aWV3ZXIgPSBuZXdWaWV3ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuZnVuY0NhbGxSZXBsYWNlZC5zdWJzY3JpYmUoc3Vic2NyaWJlT25GY0NoYW5nZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkZkJsb2NrVGl0bGU6IHN0cmluZyA9IGRmUHJvcC5vcHRpb25zWydjYXB0aW9uJ10gPz8gZGZQcm9wLm5hbWU7XG5cbiAgICAgICAgY29uc3QgZGZCbG9jayA9IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZFZpZXdlcnMgPSBhd2FpdCB2aWV3ZXJzO1xuICAgICAgICAgIHJldHVybiB1aS5kaXZIKFxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGxvYWRlZFZpZXdlcnMubWFwKCh2aWV3ZXIpID0+IHZpZXdlci5yb290LCB7c3R5bGU6IHsnZmxleC13cmFwJzogJ3dyYXAnfX0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRhYkxhYmVsID09PSAnSW5wdXQnKSB7XG4gICAgICAgICAgY29uc3Qgc3Vic2NyaWJlT25GY0NoYW5nZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFyYW06IERHLkZ1bmNDYWxsUGFyYW0gPSB0aGlzLmZ1bmNDYWxsIS5vdXRwdXRQYXJhbXNbZGZQcm9wLm5hbWVdID8/IHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zW2RmUHJvcC5uYW1lXTtcblxuICAgICAgICAgICAgY3VycmVudFBhcmFtLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRhYnNFbGVtLnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuZnVuY0NhbGxSZXBsYWNlZC5zdWJzY3JpYmUoc3Vic2NyaWJlT25GY0NoYW5nZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVpLmRpdlYoW1xuICAgICAgICAgIC8vIFJlbW92aW5nIHRpdGxlIG1hcmdpbiBvbiB0b3Agb2YgYmxvY2sgdGl0bGVzXG4gICAgICAgICAgdWkuaDIoZGZCbG9ja1RpdGxlLCB7Li4uKGRmSW5kZXggPiAwKSA/IHtzdHlsZTogeydtYXJnaW4tdG9wJzogJzBweCd9fSA6IHt9fSksXG4gICAgICAgICAgZGZCbG9ja1xuICAgICAgICBdLCB7c3R5bGU6IHsuLi4oZnVsbEJsb2NrV2lkdGggPiAwKSA/IHsnd2lkdGgnOiBgJHtmdWxsQmxvY2tXaWR0aH0lYH06IHsnd2lkdGgnOiBgMTAwJWB9fX0pO1xuICAgICAgfSk7XG5cblxuICAgICAgY29uc3QgZ2VuZXJhdGVTY2FsYXJzVGFibGUgPSAoKSA9PiB1aS50YWJsZUZyb21NYXAoXG4gICAgICAgIHRhYlNjYWxhclByb3BzLnJlZHVjZSgoYWNjLCBzY2FsYXIpID0+IHtcbiAgICAgICAgICBhY2Nbc2NhbGFyLm5hbWVdID0gdGhpcy5mdW5jQ2FsbD8ub3V0cHV0c1tzY2FsYXIubmFtZV07XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30gYXMge1trZXk6IHN0cmluZ106IHN0cmluZ30pXG4gICAgICApO1xuXG4gICAgICBsZXQgc2NhbGFyc1RhYmxlID0gZ2VuZXJhdGVTY2FsYXJzVGFibGUoKTtcblxuICAgICAgdGFiU2NhbGFyUHJvcHMuZm9yRWFjaCgodGFiU2NhbGFyUHJvcCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVPbkZjQ2hhbmdlcyA9ICgpID0+IHtcbiAgICAgICAgICAodGhpcy5mdW5jQ2FsbCEub3V0cHV0UGFyYW1zW3RhYlNjYWxhclByb3AubmFtZV0gYXMgREcuRnVuY0NhbGxQYXJhbSkub25DaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdTY2FsYXJzVGFibGUgPSBnZW5lcmF0ZVNjYWxhcnNUYWJsZSgpO1xuICAgICAgICAgICAgc2NhbGFyc1RhYmxlLnJlcGxhY2VXaXRoKG5ld1NjYWxhcnNUYWJsZSk7XG4gICAgICAgICAgICBzY2FsYXJzVGFibGUgPSBuZXdTY2FsYXJzVGFibGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc3Vic2NyaWJlT25GY0NoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5mdW5jQ2FsbFJlcGxhY2VkLnN1YnNjcmliZShzdWJzY3JpYmVPbkZjQ2hhbmdlcyk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZGZTZWN0aW9ucyA9IFtdIGFzIEhUTUxFbGVtZW50W107XG4gICAgICBsZXQgY3VycmVudFdpZHRoID0gMDtcbiAgICAgIGxldCBjdXJyZW50U2VjdGlvbiA9IHVpLmRpdkgoW10sIHtzdHlsZTogeydtYXJnaW4tYm90dG9tJzogJzI1cHgnfX0pOyAvLyBBZGRpbmcgc21hbGwgbWFyZ2luIGJldHdlZW4gc2VjdGlvbnNcbiAgICAgIGRmQmxvY2tzLmZvckVhY2goKGRmQmxvY2ssIGRmSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYmxvY2tXaWR0aCA9IHBhcnNlSW50KGRmQmxvY2suc3R5bGUud2lkdGgpO1xuXG4gICAgICAgIGlmIChjdXJyZW50V2lkdGggKyBibG9ja1dpZHRoID09PSAxMDApIHtcbiAgICAgICAgICBjdXJyZW50U2VjdGlvbi5hcHBlbmQoZGZCbG9jayk7XG4gICAgICAgICAgZGZTZWN0aW9ucy5wdXNoKGN1cnJlbnRTZWN0aW9uKTtcbiAgICAgICAgICBjdXJyZW50U2VjdGlvbiA9IHVpLmRpdkgoW10pO1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFdpZHRoICsgYmxvY2tXaWR0aCA8IDEwMCkge1xuICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLmFwcGVuZChkZkJsb2NrKTtcbiAgICAgICAgICBjdXJyZW50V2lkdGggKz0gYmxvY2tXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZlNlY3Rpb25zLnB1c2goY3VycmVudFNlY3Rpb24pO1xuICAgICAgICAgIGN1cnJlbnRTZWN0aW9uID0gdWkuZGl2SChbXSk7XG4gICAgICAgICAgY3VycmVudFNlY3Rpb24uYXBwZW5kKGRmQmxvY2spO1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCA9IGJsb2NrV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGZJbmRleCA9PT0gZGZCbG9ja3MubGVuZ3RoIC0gMSlcbiAgICAgICAgICBkZlNlY3Rpb25zLnB1c2goY3VycmVudFNlY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudGFic0VsZW0uYWRkUGFuZSh0YWJMYWJlbCwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdWkuZGl2VihbLi4uZGZTZWN0aW9ucywgLi4udGFiU2NhbGFyUHJvcHMubGVuZ3RoID8gW3VpLmgyKCdTY2FsYXIgdmFsdWVzJyldOiBbXSwgc2NhbGFyc1RhYmxlXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dEJsb2NrID0gdWkuYm94KCk7XG4gICAgb3V0cHV0QmxvY2suYXBwZW5kKHRoaXMudGFic0VsZW0ucm9vdCk7XG5cbiAgICByZXR1cm4gb3V0cHV0QmxvY2s7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlckxvYWRSdW4obG9hZGVkUnVuOiBERy5GdW5jQ2FsbCkge1xuICAgIHd1KHRoaXMuZnVuY0NhbGwhLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pLmZvckVhY2goKG91dCkgPT4ge1xuICAgICAgdGhpcy5mdW5jQ2FsbCEuc2V0UGFyYW1WYWx1ZShvdXQubmFtZSwgbG9hZGVkUnVuLm91dHB1dHNbb3V0Lm5hbWVdKTtcbiAgICB9KTtcblxuICAgIHd1KHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSkuZm9yRWFjaCgoaW5wKSA9PiB7XG4gICAgICB0aGlzLmZ1bmNDYWxsIS5zZXRQYXJhbVZhbHVlKGlucC5uYW1lLCBsb2FkZWRSdW4uaW5wdXRzW2lucC5uYW1lXSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRhYnNFbGVtLnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICB0aGlzLnRhYnNFbGVtLnBhbmVzLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgdGFiLmhlYWRlci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZlRvVmlld2VyTWFwcGluZzoge1trZXk6IHN0cmluZ106IERHLlZpZXdlcltdfSA9IHt9O1xuXG4gIHByb3RlY3RlZCBnZXQgZGZQYXJhbXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMuZnVuYyEuaW5wdXRzLmZpbHRlcigocCkgPT4gcC5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FKSxcbiAgICAgIC4uLnRoaXMuZnVuYyEub3V0cHV0cy5maWx0ZXIoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSksXG4gICAgXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgZGZPdXRwdXRQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuYyEub3V0cHV0cy5maWx0ZXIoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzSW5wdXRQYW5lbFJlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmZ1bmM/LmlucHV0cy5zb21lKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKSB8fCBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgb3V0VW5pcXVlUGFyYW1DYXRlZ29yaWVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5uZXcgU2V0KHRoaXMuZnVuYyEub3V0cHV0cy5tYXAoKHApID0+IHAuY2F0ZWdvcnkpKSAvLyBnZXQgYWxsIG91dHB1dCBwYXJhbXMnIGNhdGVnb3JpZXNcbiAgICBdOyAvLyBrZWVwIG9ubHkgdW5pcXVlIG9mIHRoZW1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgb3V0cHV0VGFic0xhYmVscygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5vdXRVbmlxdWVQYXJhbUNhdGVnb3JpZXMsXG4gICAgICAuLi50aGlzLm91dFVuaXF1ZVBhcmFtQ2F0ZWdvcmllcy5maW5kKCh2YWwpID0+IHZhbCA9PT0gJ01pc2MnKSA/IFsnT3V0cHV0J10gOiBbXSwgLy8gaWYgbm8gY2F0ZWdvcmllcyBhcmUgc3RhdGVkLCB0aGUgZGVmYXVsdCBjYXRlZ29yeSBpcyBhZGRlZFxuICAgIF07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRhYnNMYWJlbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2F0ZWdvcnlUb1BhcmFtTWFwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgY2F0ZWdvcnlUb1BhcmFtTWFwKCkge1xuICAgIGNvbnN0IG1hcCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIERHLlByb3BlcnR5W10+O1xuXG4gICAgaWYgKHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuZnVuYyEuaW5wdXRzLlxuICAgICAgICBmaWx0ZXIoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpLlxuICAgICAgICBmb3JFYWNoKChwKSA9PiBtYXBbJ0lucHV0J10gPyBtYXBbJ0lucHV0J10ucHVzaChwKTogbWFwWydJbnB1dCddID0gW3BdKTtcbiAgICB9XG5cbiAgICB0aGlzLmZ1bmMhLm91dHB1dHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSBwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeTtcblxuICAgICAgaWYgKG1hcFtjYXRlZ29yeV0pXG4gICAgICAgIG1hcFtjYXRlZ29yeV0ucHVzaChwKTtcbiAgICAgIGVsc2VcbiAgICAgICAgbWFwW2NhdGVnb3J5XSA9IFtwXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29ycmVzcG9kaW5nIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIGF3YWl0IHRoaXMub25CZWZvcmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gICAgY29uc3QgcGkgPSBERy5UYXNrQmFyUHJvZ3Jlc3NJbmRpY2F0b3IuY3JlYXRlKCdDYWxjdWxhdGluZy4uLicpO1xuICAgIHRoaXMuZnVuY0NhbGwubmV3SWQoKTtcbiAgICBhd2FpdCB0aGlzLmZ1bmNDYWxsLmNhbGwoKTsgLy8gbXV0YXRlcyB0aGUgZnVuY0NhbGwgZmllbGRcbiAgICBwaS5jbG9zZSgpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlclJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgICB0aGlzLmxhc3RDYWxsID0gdGhpcy5vcHRpb25zLmlzVGFiYmVkID8gdGhpcy5mdW5jQ2FsbC5jbG9uZSgpIDogYXdhaXQgdGhpcy5zYXZlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkb1J1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzUnVubmluZyA9IHRydWU7XG4gICAgdGhpcy5jaGVja0Rpc2FiaWxpdHkubmV4dCgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJ1bigpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgZ3Jvay5zaGVsbC5lcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclJ1blNlY3Rpb24oKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IHJ1bkJ1dHRvbiA9IHVpLmJpZ0J1dHRvbignUnVuJywgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5kb1J1bigpKTtcbiAgICAvLyBSRVBMQUNFIEJZIFRZUEUgR1VBUkRcbiAgICBjb25zdCBpc0Z1bmNTY3JpcHQgPSAoKSA9PiB7XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIHJldHVybiAhIXRoaXMuZnVuYy5zY3JpcHQ7XG4gICAgfTtcbiAgICAvLyBUTyBETzogbW92ZSBidXR0b24gc29tZXdoZXJlXG4gICAgY29uc3Qgb3BlblNjcmlwdEJ0biA9IHVpLmJ1dHRvbignT3BlbiBzY3JpcHQnLCBhc3luYyAoKSA9PiB7XG4gICAgICB3aW5kb3cub3BlbihgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9zY3JpcHQvJHsodGhpcy5mdW5jIGFzIERHLlNjcmlwdCkuaWR9YCwgJ19ibGFuaycpO1xuICAgIH0pO1xuICAgIC8vIGNvbnN0IGJ1dHRvbldyYXBwZXIgPSB1aS5kaXYoWy4uLnRoaXMub3B0aW9ucy5pc1RhYmJlZCAmJiBpc0Z1bmNTY3JpcHQoKSA/IFtvcGVuU2NyaXB0QnRuXTogW10sIHJ1bkJ1dHRvbl0pO1xuICAgIGNvbnN0IGJ1dHRvbldyYXBwZXIgPSB1aS5kaXYoW3J1bkJ1dHRvbl0pO1xuICAgIHVpLnRvb2x0aXAuYmluZChidXR0b25XcmFwcGVyLCAoKSA9PiBydW5CdXR0b24uZGlzYWJsZWQgPyAodGhpcy5pc1J1bm5pbmcgPyAnQ29tcHV0YXRpb25zIGFyZSBpbiBwcm9ncmVzcycgOiAnU29tZSBpbnB1dHMgYXJlIGludmFsaWQnKSA6ICcnKTtcblxuICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gKHd1KHRoaXMuZnVuY0NhbGwhLmlucHV0cy52YWx1ZXMoKSkuZXZlcnkoKHYpID0+IHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkKSkgJiYgIXRoaXMuaXNSdW5uaW5nO1xuICAgICAgcnVuQnV0dG9uLmRpc2FibGVkID0gIWlzVmFsaWQ7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dHMgPSB1aS5kaXZWKFtdLCAndWktZm9ybScpO1xuICAgIGxldCBwcmV2Q2F0ZWdvcnkgPSAnTWlzYyc7XG4gICAgd3UodGhpcy5mdW5jQ2FsbCEuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigodmFsKSA9PiAhIXZhbClcbiAgICAgIC5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHZhbC5wcm9wZXJ0eTtcbiAgICAgICAgaWYgKHByb3AucHJvcGVydHlUeXBlLnRvU3RyaW5nKCkgPT09IEZJTEVfSU5QVVRfVFlQRSkge1xuICAgICAgICAgIGNvbnN0IHQgPSBVaVV0aWxzLmZpbGVJbnB1dChwcm9wLmNhcHRpb24gPz8gcHJvcC5uYW1lLCBudWxsLCAoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mdW5jQ2FsbCEuaW5wdXRzW3Byb3AubmFtZV0gPSBmaWxlO1xuICAgICAgICAgICAgdGhpcy5jaGVja0Rpc2FiaWxpdHkubmV4dCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChwcm9wLmNhdGVnb3J5ICE9PSBwcmV2Q2F0ZWdvcnkpXG4gICAgICAgICAgICBpbnB1dHMuYXBwZW5kKHVpLmgyKHByb3AuY2F0ZWdvcnkpKTtcblxuICAgICAgICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICAgICAgICBpbnB1dHMuYXBwZW5kKHQucm9vdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHQgPSBwcm9wLnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FID9cbiAgICAgICAgICAgIHVpLnRhYmxlSW5wdXQocHJvcC5jYXB0aW9uID8/IHByb3AubmFtZSwgbnVsbCwgZ3Jvay5zaGVsbC50YWJsZXMpOlxuICAgICAgICAgICAgdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCk7XG5cbiAgICAgICAgICB0LmlucHV0Lm9ua2V5ZG93biA9IGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgaWYgKGV2LmtleSA9PSAnRW50ZXInKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRvUnVuKCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHQuY2FwdGlvbkxhYmVsLmZpcnN0Q2hpbGQhLnJlcGxhY2VXaXRoKHVpLnNwYW4oW3Byb3AuY2FwdGlvbiA/PyBwcm9wLm5hbWVdKSk7XG4gICAgICAgICAgaWYgKHByb3Aub3B0aW9uc1sndW5pdHMnXSkgdC5hZGRQb3N0Zml4KHByb3Aub3B0aW9uc1sndW5pdHMnXSk7XG5cbiAgICAgICAgICBjb25zdCBzdWJzY3JpYmVPbkZjQ2hhbmdlcyA9ICgpID0+IHtcbiAgICAgICAgICAgIHQudmFsdWUgPSB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdID8/IHByb3AuZGVmYXVsdFZhbHVlID8/IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdID0gdGhpcy5mdW5jQ2FsbCEuaW5wdXRzW3ZhbC5uYW1lXSA/PyBwcm9wLmRlZmF1bHRWYWx1ZSA/PyBudWxsO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuZnVuY0NhbGxSZXBsYWNlZC5zdWJzY3JpYmUoc3Vic2NyaWJlT25GY0NoYW5nZXMpO1xuXG4gICAgICAgICAgdC5vbkNoYW5nZWQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gUmVzb2x2aW5nIGNhc2Ugb2YgcHJvcGVydHlUeXBlID0gREFUQUZSQU1FXG4gICAgICAgICAgICBpZiAoISF0LnByb3BlcnR5KSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuZnVuY0NhbGwhLmlucHV0c1t2YWwubmFtZV0gPSB0LnZhbHVlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdC5vbklucHV0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVuY0NhbGwhLmlucHV0c1t2YWwubmFtZV0gPSB0LnZhbHVlO1xuICAgICAgICAgICAgaWYgKHQudmFsdWUgPT09IG51bGwpIHNldFRpbWVvdXQoKCkgPT4gdC5pbnB1dC5jbGFzc0xpc3QuYWRkKCdkNC1pbnZhbGlkJyksIDEwMCk7IGVsc2UgdC5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdkNC1pbnZhbGlkJyk7IDtcblxuICAgICAgICAgICAgdGhpcy5jaGVja0Rpc2FiaWxpdHkubmV4dCgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFsLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdO1xuXG4gICAgICAgICAgICBpZiAodmFsLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKSB7XG4gICAgICAgICAgICAgIC8vIERFQUxJTkcgV0lUSCBCVUc6IGh0dHBzOi8vcmVkZGF0YS5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9HUk9LLTEyMjIzXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1RhYmxlSW5wdXQgPSB1aS50YWJsZUlucHV0KHByb3AuY2FwdGlvbiA/PyBwcm9wLm5hbWUsIG5ld1ZhbHVlLCBbLi4uZ3Jvay5zaGVsbC50YWJsZXMsIG5ld1ZhbHVlXSk7XG4gICAgICAgICAgICAgIHQucm9vdC5yZXBsYWNlV2l0aChuZXdUYWJsZUlucHV0LnJvb3QpO1xuICAgICAgICAgICAgICB0ID0gbmV3VGFibGVJbnB1dDtcblxuICAgICAgICAgICAgICB0Lm9uSW5wdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZnVuY0NhbGwhLmlucHV0c1t2YWwubmFtZV0gPSB0LnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0LnZhbHVlID09PSBudWxsKSBzZXRUaW1lb3V0KCgpID0+IHQuaW5wdXQuY2xhc3NMaXN0LmFkZCgnZDQtaW52YWxpZCcpLCAxMDApOyBlbHNlIHQuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnZDQtaW52YWxpZCcpOyA7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRGlzYWJpbGl0eS5uZXh0KCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdC5ub3RpZnkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICB0Lm5vdGlmeSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChwcm9wLmNhdGVnb3J5ICE9PSBwcmV2Q2F0ZWdvcnkpXG4gICAgICAgICAgICBpbnB1dHMuYXBwZW5kKHVpLmgyKHByb3AuY2F0ZWdvcnkpKTtcblxuICAgICAgICAgIGlmICh0LnZhbHVlID09PSBudWxsKSBydW5CdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIGlucHV0cy5hcHBlbmQodC5yb290KTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2Q2F0ZWdvcnkgPSBwcm9wLmNhdGVnb3J5O1xuICAgICAgfSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGJ1dHRvbnMgPSB1aS5idXR0b25zSW5wdXQoW2J1dHRvbldyYXBwZXJdKTtcbiAgICBpbnB1dHMuYXBwZW5kKGJ1dHRvbnMpO1xuICAgIGlucHV0cy5jbGFzc0xpc3QucmVtb3ZlKCd1aS1wYW5lbCcpO1xuICAgIGlucHV0cy5zdHlsZS5wYWRkaW5nVG9wID0gJzBweCc7XG4gICAgaW5wdXRzLnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzBweCc7XG5cbiAgICByZXR1cm4gdWkuZGl2KFtpbnB1dHNdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0ID0gYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbGFzdENhbGwgPSB0aGlzLmxhc3RDYWxsO1xuICAgIGlmICghbGFzdENhbGwpIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gd2FzIG5vdCBjYWxsZWRgKTtcblxuICAgIGlmICghdGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KSkgdGhyb3cgbmV3IEVycm9yKGBGb3JtYXQgXCIke2Zvcm1hdH1cIiBpcyBub3Qgc3VwcG9ydGVkLmApO1xuXG4gICAgaWYgKCF0aGlzLmZ1bmMpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBjb25zdCBCTE9CX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgY29uc3QgZXhwb3J0V29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuXG4gICAgY29uc3QgaXNTY2FsYXJUeXBlID0gKHR5cGU6IERHLlRZUEUpID0+IChERy5UWVBFU19TQ0FMQVIuaGFzKHR5cGUpKTtcblxuICAgIGNvbnN0IGlzRGF0YUZyYW1lID0gKHR5cGU6IERHLlRZUEUpID0+ICh0eXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzRGF0YUZyYW1lKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhcklucHV0cyA9IHRoaXMuZnVuYy5pbnB1dHMuZmlsdGVyKChpbnB1dCkgPT4gaXNTY2FsYXJUeXBlKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc0RhdGFGcmFtZShvdXRwdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3Qgc2NhbGFyT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc1NjYWxhclR5cGUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCldIGFzIERHLkZ1bmNDYWxsUGFyYW1bXTtcbiAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG5cbiAgICBkZklucHV0cy5mb3JFYWNoKChkZklucHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZklucHV0Lm5hbWU7XG4gICAgICBjb25zdCBjdXJyZW50RGZTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uSU5QVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLmlucHV0c1tkZklucHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG4gICAgICBkZlRvU2hlZXQoY3VycmVudERmU2hlZXQsIGN1cnJlbnREZik7XG4gICAgfSk7XG5cbiAgICBpZiAoc2NhbGFySW5wdXRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5wdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ0lucHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KGlucHV0U2NhbGFyc1NoZWV0LCBzY2FsYXJJbnB1dHMubWFwKChzY2FsYXJJbnB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFySW5wdXQub3B0aW9uc1snY2FwdGlvbiddIHx8IHNjYWxhcklucHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5pbnB1dHNbc2NhbGFySW5wdXQubmFtZV0sXG4gICAgICAgIHVuaXRzOiBzY2FsYXJJbnB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBkZk91dHB1dHMuZm9yRWFjaCgoZGZPdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZk91dHB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpO1xuXG4gICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG5cbiAgICBpZiAoc2NhbGFyT3V0cHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG91dHB1dFNjYWxhcnNTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldCgnT3V0cHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KG91dHB1dFNjYWxhcnNTaGVldCwgc2NhbGFyT3V0cHV0cy5tYXAoKHNjYWxhck91dHB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJPdXRwdXQubmFtZSxcbiAgICAgICAgdmFsdWU6IGxhc3RDYWxsLm91dHB1dHNbc2NhbGFyT3V0cHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ3VuaXRzJ10gfHwgJycsXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB0aGlzLnRhYnNFbGVtO1xuICAgIGZvciAoY29uc3QgdGFiTGFiZWwgb2YgdGhpcy50YWJzTGFiZWxzKSB7XG4gICAgICB0YWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGFiQ29udHJvbC5nZXRQYW5lKHRhYkxhYmVsKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMCkpO1xuICAgICAgaWYgKHRhYkxhYmVsID09PSAnSW5wdXQnKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5wdXRQYXJhbSBvZiBpbnB1dFBhcmFtcy5maWx0ZXIoKGlucHV0UGFyYW0pID0+IGlucHV0UGFyYW0ucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpKSB7XG4gICAgICAgICAgY29uc3Qgbm9uR3JpZFZpZXdlcnMgPSB0aGlzLmRmVG9WaWV3ZXJNYXBwaW5nW2lucHV0UGFyYW0ubmFtZV1cbiAgICAgICAgICAgIC5maWx0ZXIoKHZpZXdlcikgPT4gdmlld2VyLnR5cGUgIT09IERHLlZJRVdFUi5HUklEKVxuICAgICAgICAgICAgLmZpbHRlcigodmlld2VyKSA9PiBPYmplY3QudmFsdWVzKHZpZXdlclR5cGVzTWFwcGluZykuaW5jbHVkZXModmlld2VyLnR5cGUpKTtcblxuICAgICAgICAgIGNvbnN0IGRmSW5wdXQgPSBkZklucHV0cy5maW5kKChpbnB1dCkgPT4gaW5wdXQubmFtZSA9PT0gaW5wdXRQYXJhbS5uYW1lKTtcbiAgICAgICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0IS5vcHRpb25zLmNhcHRpb24gfHwgaW5wdXRQYXJhbS5uYW1lO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dCEubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCB2aWV3ZXJdIG9mIG5vbkdyaWRWaWV3ZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgYXdhaXQgcGxvdFRvU2hlZXQoXG4gICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLFxuICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSksXG4gICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGggKyAyLFxuICAgICAgICAgICAgICAoaW5kZXggPiAwKSA/IE1hdGguY2VpbChub25HcmlkVmlld2Vyc1tpbmRleC0xXS5yb290LmNsaWVudEhlaWdodCAvIDIwKSArIDEgOiAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3Qgb3V0cHV0UGFyYW0gb2Ygb3V0cHV0UGFyYW1zLmZpbHRlcihcbiAgICAgICAgICAob3V0cHV0UGFyYW0pID0+IG91dHB1dFBhcmFtLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmXG4gICAgICAgICAgKFxuICAgICAgICAgICAgKHRhYkxhYmVsID09PSAnT3V0cHV0JyAmJiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5jYXRlZ29yeSA9PT0gJ01pc2MnKSB8fFxuICAgICAgICAgICAgKHRhYkxhYmVsICE9PSAnT3V0cHV0JyAmJiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5jYXRlZ29yeSA9PT0gdGFiTGFiZWwpXG4gICAgICAgICAgKVxuICAgICAgICApKSB7XG4gICAgICAgICAgY29uc3Qgbm9uR3JpZFZpZXdlcnMgPSB0aGlzLmRmVG9WaWV3ZXJNYXBwaW5nW291dHB1dFBhcmFtLnByb3BlcnR5Lm5hbWVdXG4gICAgICAgICAgICAuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRClcbiAgICAgICAgICAgIC5maWx0ZXIoKHZpZXdlcikgPT4gT2JqZWN0LnZhbHVlcyh2aWV3ZXJUeXBlc01hcHBpbmcpLmluY2x1ZGVzKHZpZXdlci50eXBlKSk7XG5cbiAgICAgICAgICBjb25zdCBkZk91dHB1dCA9IGRmT3V0cHV0cy5maW5kKChvdXRwdXQpID0+IG91dHB1dC5uYW1lID09PSBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5uYW1lKSE7XG4gICAgICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZPdXRwdXQub3B0aW9ucy5jYXB0aW9uIHx8IG91dHB1dFBhcmFtLnByb3BlcnR5Lm5hbWU7XG4gICAgICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLm91dHB1dHNbZGZPdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCB2aWV3ZXJdIG9mIG5vbkdyaWRWaWV3ZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHZpZXdlci50eXBlID09PSBERy5WSUVXRVIuU1RBVElTVElDUykge1xuICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uc3RyaW5nKCdOYW1lJywgbGVuZ3RoKS5pbml0KChpOiBudW1iZXIpID0+IGN1cnJlbnREZi5jb2x1bW5zLmJ5SW5kZXgoaSkubmFtZSksXG4gICAgICAgICAgICAgICAgREcuQ29sdW1uLmludCgnVmFsdWVzJywgbGVuZ3RoKS5pbml0KChpOiBudW1iZXIpID0+IGN1cnJlbnREZi5jb2x1bW5zLmJ5SW5kZXgoaSkuc3RhdHMudmFsdWVDb3VudCksXG4gICAgICAgICAgICAgICAgREcuQ29sdW1uLmludCgnTnVsbHMnLCBsZW5ndGgpLmluaXQoKGk6IG51bWJlcikgPT4gY3VycmVudERmLmNvbHVtbnMuYnlJbmRleChpKS5zdGF0cy5taXNzaW5nVmFsdWVDb3VudCksXG4gICAgICAgICAgICAgICAgREcuQ29sdW1uLmZsb2F0KCdNaW4nLCBsZW5ndGgpLmluaXQoKGk6IG51bWJlcikgPT4gY3VycmVudERmLmNvbHVtbnMuYnlJbmRleChpKS5zdGF0cy5taW4pLFxuICAgICAgICAgICAgICAgIERHLkNvbHVtbi5mbG9hdCgnTWF4JywgbGVuZ3RoKS5pbml0KChpOiBudW1iZXIpID0+IGN1cnJlbnREZi5jb2x1bW5zLmJ5SW5kZXgoaSkuc3RhdHMubWF4KSxcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uZmxvYXQoJ0F2ZycsIGxlbmd0aCkuaW5pdCgoaTogbnVtYmVyKSA9PiBjdXJyZW50RGYuY29sdW1ucy5ieUluZGV4KGkpLnN0YXRzLmF2ZyksXG4gICAgICAgICAgICAgICAgREcuQ29sdW1uLmZsb2F0KCdTdGRldicsIGxlbmd0aCkuaW5pdCgoaTogbnVtYmVyKSA9PiBjdXJyZW50RGYuY29sdW1ucy5ieUluZGV4KGkpLnN0YXRzLnN0ZGV2KSxcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIGRmVG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpLFxuICAgICAgICAgICAgICAgIHN0YXRzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXdhaXQgcGxvdFRvU2hlZXQoXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2ssXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2suZ2V0V29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKSxcbiAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgICBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGggKyAyLFxuICAgICAgICAgICAgICAgIChpbmRleCA+IDApID8gTWF0aC5jZWlsKG5vbkdyaWRWaWV3ZXJzW2luZGV4LTFdLnJvb3QuY2xpZW50SGVpZ2h0IC8gMjApICsgMSA6IDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBleHBvcnRXb3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XG5cbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHt0eXBlOiBCTE9CX1RZUEV9KTtcbiAgfTtcblxuICBleHBvcnRDb25maWcgPSB7XG4gICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucygpLFxuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHRoaXMuZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHMoKSxcbiAgICBleHBvcnQ6IHRoaXMuZGVmYXVsdEV4cG9ydCxcbiAgICBmaWxlbmFtZTogdGhpcy5kZWZhdWx0RXhwb3J0RmlsZW5hbWUsXG4gIH07XG59XG5cbmNvbnN0IGdldFNoZWV0TmFtZSA9IChuYW1lOiBzdHJpbmcsIGRpcmVjdGlvbjogRElSRUNUSU9OKSA9PiB7XG4gIGNvbnN0IGlkZWFsTmFtZSA9IGAke2RpcmVjdGlvbn0gLSAke25hbWV9YDtcbiAgcmV0dXJuIChpZGVhbE5hbWUubGVuZ3RoID4gMzEpID8gbmFtZS5zdWJzdHJpbmcoMCwgMzIpIDogaWRlYWxOYW1lO1xufTtcblxuZW51bSBESVJFQ1RJT04ge1xuICBJTlBVVCA9ICdJbnB1dCcsXG4gIE9VVFBVVCA9ICdPdXRwdXQnXG59XG5cbmNvbnN0IHNjYWxhcnNUb1NoZWV0ID0gKHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgc2NhbGFyczogeyBjYXB0aW9uOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHVuaXRzOiBzdHJpbmcgfVtdKSA9PiB7XG4gIHNoZWV0LmFkZFJvdyhbJ1BhcmFtZXRlcicsICdWYWx1ZScsICdVbml0cyddKS5mb250ID0ge2JvbGQ6IHRydWV9O1xuICBzY2FsYXJzLmZvckVhY2goKHNjYWxhcikgPT4ge1xuICAgIHNoZWV0LmFkZFJvdyhbc2NhbGFyLmNhcHRpb24sIHNjYWxhci52YWx1ZSwgc2NhbGFyLnVuaXRzXSk7XG4gIH0pO1xuXG4gIHNoZWV0LmdldENvbHVtbigxKS53aWR0aCA9IE1hdGgubWF4KFxuICAgIC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci5jYXB0aW9uLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1BhcmFtZXRlcicubGVuZ3RoXG4gICkgKiAxLjI7XG4gIHNoZWV0LmdldENvbHVtbigyKS53aWR0aCA9IE1hdGgubWF4KC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci52YWx1ZS50b1N0cmluZygpLmxlbmd0aCksICdWYWx1ZScubGVuZ3RoKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDMpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnVuaXRzLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1VuaXRzJy5sZW5ndGgpICogMS4yO1xufTtcblxuY29uc3QgZGZUb1NoZWV0ID0gKHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgZGY6IERHLkRhdGFGcmFtZSwgY29sdW1uOiBudW1iZXIgPSAwLCByb3c6IG51bWJlciA9IDApID0+IHtcbiAgZm9yIChsZXQgaT0gMDsgaSA8IGRmLmNvbHVtbnMubmFtZXMoKS5sZW5ndGg7IGkrKykge1xuICAgIHNoZWV0LmdldENlbGwoMSArIHJvdywgMSArIGkgKyBjb2x1bW4pLnZhbHVlID0gZGYuY29sdW1ucy5ieUluZGV4KGkpLm5hbWU7XG4gICAgc2hlZXQuZ2V0Q29sdW1uKDEgKyBpICsgY29sdW1uKS53aWR0aCA9IE1hdGgubWF4KFxuICAgICAgLi4uZGYuY29sdW1ucy5ieUluZGV4KGkpLmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gY2F0ZWdvcnkudG9TdHJpbmcoKS5sZW5ndGgpLFxuICAgICAgZGYuY29sdW1ucy5ieUluZGV4KGkpLm5hbWUubGVuZ3RoXG4gICAgKSAqIDEuMjtcbiAgfVxuICBmb3IgKGxldCBkZkNvbHVtbiA9IDA7IGRmQ29sdW1uIDwgZGYuY29sdW1ucy5sZW5ndGg7IGRmQ29sdW1uKyspIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLnJvd0NvdW50OyBpKyspXG4gICAgICBzaGVldC5nZXRDZWxsKGkgKyAyICsgcm93LCAxICsgY29sdW1uK2RmQ29sdW1uKS52YWx1ZSA9IGRmLmNvbHVtbnMuYnlJbmRleChkZkNvbHVtbikuZ2V0KGkpO1xuICB9XG59O1xuXG5jb25zdCBwbG90VG9TaGVldCA9IGFzeW5jIChleHBvcnRXYjogRXhjZWxKUy5Xb3JrYm9vaywgc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBwbG90OiBIVE1MRWxlbWVudCwgY29sdW1uRm9ySW1hZ2U6IG51bWJlciwgcm93Rm9ySW1hZ2U6IG51bWJlciA9IDApID0+IHtcbiAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMocGxvdCBhcyBIVE1MRWxlbWVudCwge2xvZ2dpbmc6IGZhbHNlfSk7XG4gIGNvbnN0IGRhdGFVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcblxuICBjb25zdCBpbWFnZUlkID0gZXhwb3J0V2IuYWRkSW1hZ2Uoe1xuICAgIGJhc2U2NDogZGF0YVVybCxcbiAgICBleHRlbnNpb246ICdwbmcnLFxuICB9KTtcbiAgc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwge1xuICAgIHRsOiB7Y29sOiBjb2x1bW5Gb3JJbWFnZSwgcm93OiByb3dGb3JJbWFnZX0sXG4gICAgZXh0OiB7d2lkdGg6IGNhbnZhcy53aWR0aCwgaGVpZ2h0OiBjYW52YXMuaGVpZ2h0fSxcbiAgfSk7XG59O1xuIl19
|
|
564
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC1mdW5jdGlvbi12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmljaC1mdW5jdGlvbi12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sK0JBQStCLENBQUM7QUFFdkMsTUFBTSxrQkFBa0IsR0FBNEI7SUFDbEQsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFDakMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVE7SUFDL0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVE7SUFDaEMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFDakMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDdkMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU87SUFDOUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxD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QUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUU5QyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXBFLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXJFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzFGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBRTlGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUF1QixDQUFDO1lBQzdFLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUF1QixDQUFDO1lBRS9FLFFBQVEsQ0FBQyxPQUFPLENBQUMs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Q0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0Y7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFPLFFBQTBCLEVBQUUsS0FBd0IsRUFBRSxJQUFpQixFQUFFLGNBQXNCLEVBQUUsY0FBc0IsQ0FBQyxFQUFFLEVBQUU7SUFDckosTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBbUIsRUFBRSxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLEVBQUUsT0FBTztRQUNmLFNBQVMsRUFBRSxLQUFLO0tBQ2pCLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQ3RCLEVBQUUsRUFBRSxFQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBQztRQUMzQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBQztLQUNsRCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0Z1bmN0aW9uVmlld30gZnJvbSAnLi9mdW5jdGlvbi12aWV3JztcbmltcG9ydCBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtVaVV0aWxzfSBmcm9tICcuL3NoYXJlZC1jb21wb25lbnRzL3VpLXV0aWxzJztcbmltcG9ydCAnLi4vY3NzL3JpY2gtZnVuY3Rpb24tdmlldy5jc3MnO1xuXG5jb25zdCB2aWV3ZXJUeXBlc01hcHBpbmc6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICBbJ2JhcmNoYXJ0J106IERHLlZJRVdFUi5CQVJfQ0hBUlQsXG4gIFsnYm94cGxvdCddOiBERy5WSUVXRVIuQk9YX1BMT1QsXG4gIFsnY2FsZW5kYXInXTogREcuVklFV0VSLkNBTEVOREFSLFxuICBbJ2NvcnJwbG90J106IERHLlZJRVdFUi5DT1JSX1BMT1QsXG4gIFsnZGVuc2l0eXBsb3QnXTogREcuVklFV0VSLkRFTlNJVFlfUExPVCxcbiAgWydmaWx0ZXJzJ106IERHLlZJRVdFUi5GSUxURVJTLFxuICBbJ2Zvcm0nXTogREcuVklFV0VSLkZPUk0sXG4gIFsnZ2xvYmUnXTogREcuVklFV0VSLkdMT0JFLFxuICBbJ2dvb2dsZW1hcCddOiBERy5WSUVXRVIuR09PR0xFX01BUCxcbiAgWydncmlkJ106IERHLlZJRVdFUi5HUklELFxuICBbJ2hlYXRtYXAnXTogREcuVklFV0VSLkhFQVRfTUFQLFxuICBbJ2hpc3RvZ3JhbSddOiBERy5WSUVXRVIuSElTVE9HUkFNLFxuICBbJ2xpbmVjaGFydCddOiBERy5WSUVXRVIuTElORV9DSEFSVCxcbiAgWydtYXJrdXAnXTogREcuVklFV0VSLk1BUktVUCxcbiAgWydtYXRyaXhwbG90J106IERHLlZJRVdFUi5NQVRSSVhfUExPVCxcbiAgWyduZXR3b3JrZGlhZ3JhbSddOiBERy5WSUVXRVIuTkVUV09SS19ESUFHUkFNLFxuICBbJ3BjcGxvdCddOiBERy5WSUVXRVIuUENfUExPVCxcbiAgWydwaWVjaGFydCddOiBERy5WSUVXRVIuUElFX0NIQVJULFxuICBbJ3NjYXR0ZXJwbG90J106IERHLlZJRVdFUi5TQ0FUVEVSX1BMT1QsXG4gIFsnc2NhdHRlcnBsb3QzZCddOiBERy5WSUVXRVIuU0NBVFRFUl9QTE9UXzNELFxuICBbJ3NoYXBlbWFwJ106IERHLlZJRVdFUi5TSEFQRV9NQVAsXG4gIFsnc3RhdGlzdGljcyddOiBERy5WSUVXRVIuU1RBVElTVElDUyxcbiAgWyd0aWxldmlld2VyJ106IERHLlZJRVdFUi5USUxFX1ZJRVdFUixcbiAgWyd0aW1lbGluZXMnXTogREcuVklFV0VSLlRJTUVMSU5FUyxcbiAgWyd0cmVlbWFwJ106IERHLlZJRVdFUi5UUkVFX01BUCxcbiAgWyd0cmVsbGlzcGxvdCddOiBERy5WSUVXRVIuVFJFTExJU19QTE9ULFxuICBbJ3dvcmRjbG91ZCddOiBERy5WSUVXRVIuV09SRF9DTE9VRCxcbn07XG5cbmNvbnN0IEZJTEVfSU5QVVRfVFlQRSA9ICdmaWxlJztcblxuZXhwb3J0IGNsYXNzIFJpY2hGdW5jdGlvblZpZXcgZXh0ZW5kcyBGdW5jdGlvblZpZXcge1xuICAvLyBlbWl0dGVkIHdoZW4gcnVuQnV0dG9uIGRpc2FiaWxpdHkgc2hvdWxkIGJlIGNoZWNrZWRcbiAgcHJpdmF0ZSBjaGVja0Rpc2FiaWxpdHkgPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8vIHN0b3JlcyB0aGUgcnVubmluZyBzdGF0ZVxuICBwcml2YXRlIGlzUnVubmluZyA9IGZhbHNlO1xuXG4gIHN0YXRpYyBmcm9tRnVuY0NhbGwoXG4gICAgZnVuY0NhbGw6IERHLkZ1bmNDYWxsLFxuICAgIG9wdGlvbnM6IHtoaXN0b3J5RW5hYmxlZDogYm9vbGVhbiwgaXNUYWJiZWQ6IGJvb2xlYW59ID1cbiAgICB7aGlzdG9yeUVuYWJsZWQ6IHRydWUsIGlzVGFiYmVkOiBmYWxzZX1cbiAgKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmNDYWxsLmZ1bmMubnFOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIG9wdGlvbnM6IHsgaGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW4sIGlzVGFiYmVkOiBib29sZWFufSA9XG4gICAge2hpc3RvcnlFbmFibGVkOiB0cnVlLCBpc1RhYmJlZDogZmFsc2V9XG4gICkge1xuICAgIHN1cGVyKGZ1bmNOYW1lLCBvcHRpb25zKTtcblxuICAgIHRoaXMuYmFzZVBhdGggPSBgc2NyaXB0cy8ke3RoaXMuZnVuY0NhbGwuZnVuYy5pZH0vdmlld2A7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25BZnRlclJ1bihydW5GdW5jOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudGFic0VsZW0ucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgIHRoaXMudGFic0VsZW0ucGFuZXMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICB0YWIuaGVhZGVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgfSk7XG4gICAgY29uc3QgZmlyc3RPdXRwdXRUYWIgPSB0aGlzLnRhYnNFbGVtLnBhbmVzLmZpbmQoKHRhYikgPT4gdGFiLm5hbWUgIT09ICdJbnB1dCcpO1xuICAgIGlmIChmaXJzdE91dHB1dFRhYikgdGhpcy50YWJzRWxlbS5jdXJyZW50UGFuZSA9IGZpcnN0T3V0cHV0VGFiO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkSU8oKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGlucHV0QmxvY2sgPSB0aGlzLmJ1aWxkSW5wdXRCbG9jaygpO1xuXG4gICAgdWkudG9vbHMuaGFuZGxlUmVzaXplKGlucHV0QmxvY2ssICh3aWR0aCkgPT4ge1xuICAgICAgaWYgKHdpZHRoIDwgMzUwKVxuICAgICAgICAkKGlucHV0QmxvY2suZmlyc3RDaGlsZCEpLmFkZENsYXNzKCd1aS1mb3JtLWNvbmRlbnNlZCcpO1xuICAgICAgZWxzZVxuICAgICAgICAkKGlucHV0QmxvY2suZmlyc3RDaGlsZCEpLnJlbW92ZUNsYXNzKCd1aS1mb3JtLWNvbmRlbnNlZCcpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0QmxvY2sgPSB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcbiAgICBvdXRwdXRCbG9jay5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgb3V0cHV0QmxvY2suc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy50YWJzRWxlbS5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBpZiAoISF0aGlzLnRhYnNFbGVtLmdldFBhbmUoJ0lucHV0JykpIHtcbiAgICAgIHRoaXMudGFic0VsZW0ucGFuZXMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgIHRhYi5oZWFkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG91dCA9IHVpLnNwbGl0SChbaW5wdXRCbG9jaywgdWkucGFuZWwoW291dHB1dEJsb2NrXSwge3N0eWxlOiB7J3BhZGRpbmctdG9wJzogJzBweCd9fSldLCBudWxsLCB0cnVlKTtcbiAgICBvdXQuc3R5bGUucGFkZGluZyA9ICcwIDEycHgnO1xuXG4gICAgaW5wdXRCbG9jay5wYXJlbnRFbGVtZW50IS5zdHlsZS5tYXhXaWR0aCA9ICc0NTBweCc7XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcHVibGljIGJ1aWxkSW5wdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgZm9ybURpdiA9IHRoaXMucmVuZGVyUnVuU2VjdGlvbigpO1xuXG4gICAgcmV0dXJuIGZvcm1EaXY7XG4gIH1cblxuICBwcml2YXRlIHRhYnNFbGVtID0gdWkudGFiQ29udHJvbCgpO1xuXG4gIHB1YmxpYyBidWlsZE91dHB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICB0aGlzLnRhYnNFbGVtLnJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG5cbiAgICB0aGlzLnRhYnNMYWJlbHMuZm9yRWFjaCgodGFiTGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IHRhYkRmUHJvcHMgPSB0aGlzLmNhdGVnb3J5VG9QYXJhbU1hcFt0YWJMYWJlbF0uZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICAgIGNvbnN0IHRhYlNjYWxhclByb3BzID0gdGhpcy5jYXRlZ29yeVRvUGFyYW1NYXBbdGFiTGFiZWxdLmZpbHRlcigocCkgPT4gcC5wcm9wZXJ0eVR5cGUgIT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICAgIC8vIEVYUExBSU46IHVuZGVmaW5lZCBhbmQgSlNPTi5wYXJzZVxuICAgICAgY29uc3QgcGFyc2VkVGFiRGZQcm9wcyA9IHRhYkRmUHJvcHMubWFwKChkZlByb3ApID0+IChkZlByb3Aub3B0aW9uc1sndmlld2VyJ10gIT09IHVuZGVmaW5lZCkgP1xuICAgICAgICBKU09OLnBhcnNlKGRmUHJvcC5vcHRpb25zWyd2aWV3ZXInXSwgKF8sIHYpID0+IHYgPT09ICd0cnVlJyB8fCB2ID09PSAnZmFsc2UnID8gSlNPTi5wYXJzZSh2KTogdik6XG4gICAgICAgIFtdKTtcblxuICAgICAgY29uc3QgZGZCbG9ja3MgPSB0YWJEZlByb3BzLm1hcCgoZGZQcm9wLCBkZkluZGV4KSA9PiB7XG4gICAgICAgIGxldCBmdWxsQmxvY2tXaWR0aCA9IDA7XG4gICAgICAgIHBhcnNlZFRhYkRmUHJvcHNbZGZJbmRleF0uZm9yRWFjaCgoXzogYW55LCB2aWV3ZXJJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tTaXplID0gcGFyc2VkVGFiRGZQcm9wc1tkZkluZGV4XVt2aWV3ZXJJbmRleF1bJ2Jsb2NrJ107XG5cbiAgICAgICAgICBmdWxsQmxvY2tXaWR0aCArPSBibG9ja1NpemUgPyBwYXJzZUludChibG9ja1NpemUpOiAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB2aWV3ZXJzOiBQcm9taXNlPERHLlZpZXdlcltdPiA9IFByb21pc2UuYWxsKHBhcnNlZFRhYkRmUHJvcHNbZGZJbmRleF0ubWFwKGFzeW5jICh2aWV3ZXJEZXNjOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZTogREcuRGF0YUZyYW1lID0gdGhpcy5mdW5jQ2FsbD8ub3V0cHV0c1tkZlByb3AubmFtZV0/LnZhbHVlID8/IHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zW2RmUHJvcC5uYW1lXT8udmFsdWUgPz8gZ3Jvay5kYXRhLmRlbW8uZGVtb2coMSk7XG5cbiAgICAgICAgICBjb25zdCB2aWV3ZXIgPSB2aWV3ZXJUeXBlc01hcHBpbmdbdmlld2VyRGVzY1sndHlwZSddXSA/IERHLlZpZXdlci5mcm9tVHlwZSh2aWV3ZXJUeXBlc01hcHBpbmdbdmlld2VyRGVzY1sndHlwZSddXSwgaW5pdGlhbFZhbHVlKTogYXdhaXQgaW5pdGlhbFZhbHVlLnBsb3QuZnJvbVR5cGUodmlld2VyRGVzY1sndHlwZSddKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgdmlld2VyLnNldE9wdGlvbnModmlld2VyRGVzYyk7XG5cbiAgICAgICAgICBpZiAodGhpcy5kZlRvVmlld2VyTWFwcGluZ1tkZlByb3AubmFtZV0pIHRoaXMuZGZUb1ZpZXdlck1hcHBpbmdbZGZQcm9wLm5hbWVdLnB1c2godmlld2VyKTsgZWxzZSB0aGlzLmRmVG9WaWV3ZXJNYXBwaW5nW2RmUHJvcC5uYW1lXSA9IFt2aWV3ZXJdO1xuXG4gICAgICAgICAgcmV0dXJuIHZpZXdlcjtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHZpZXdlcnMudGhlbigobG9hZGVkVmlld2VycykgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1YnNjcmliZU9uRmNDaGFuZ2VzID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtID0gdGhpcy5mdW5jQ2FsbCEub3V0cHV0UGFyYW1zW2RmUHJvcC5uYW1lXSA/PyB0aGlzLmZ1bmNDYWxsIS5pbnB1dFBhcmFtc1tkZlByb3AubmFtZV07XG5cbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbS5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgbG9hZGVkVmlld2Vycy5mb3JFYWNoKGFzeW5jICh2aWV3ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnZhbHVlcyh2aWV3ZXJUeXBlc01hcHBpbmcpLmluY2x1ZGVzKHZpZXdlci50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgdmlld2VyLmRhdGFGcmFtZSA9IGN1cnJlbnRQYXJhbS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gRVhQTEFJTiBXSFlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdlciA9IGF3YWl0IGN1cnJlbnRQYXJhbS52YWx1ZS5wbG90LmZyb21UeXBlKHZpZXdlci50eXBlKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdC5yZXBsYWNlV2l0aChuZXdWaWV3ZXIucm9vdCk7XG4gICAgICAgICAgICAgICAgICB2aWV3ZXIgPSBuZXdWaWV3ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuZnVuY0NhbGxSZXBsYWNlZC5zdWJzY3JpYmUoc3Vic2NyaWJlT25GY0NoYW5nZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkZkJsb2NrVGl0bGU6IHN0cmluZyA9IGRmUHJvcC5vcHRpb25zWydjYXB0aW9uJ10gPz8gZGZQcm9wLm5hbWU7XG5cbiAgICAgICAgY29uc3QgZGZCbG9jayA9IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZFZpZXdlcnMgPSBhd2FpdCB2aWV3ZXJzO1xuICAgICAgICAgIHJldHVybiB1aS5kaXZIKFxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGxvYWRlZFZpZXdlcnMubWFwKCh2aWV3ZXIpID0+IHZpZXdlci5yb290LCB7c3R5bGU6IHsnZmxleC13cmFwJzogJ3dyYXAnfX0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRhYkxhYmVsID09PSAnSW5wdXQnKSB7XG4gICAgICAgICAgY29uc3Qgc3Vic2NyaWJlT25GY0NoYW5nZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFyYW06IERHLkZ1bmNDYWxsUGFyYW0gPSB0aGlzLmZ1bmNDYWxsIS5vdXRwdXRQYXJhbXNbZGZQcm9wLm5hbWVdID8/IHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zW2RmUHJvcC5uYW1lXTtcblxuICAgICAgICAgICAgY3VycmVudFBhcmFtLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRhYnNFbGVtLnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuZnVuY0NhbGxSZXBsYWNlZC5zdWJzY3JpYmUoc3Vic2NyaWJlT25GY0NoYW5nZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVpLmRpdlYoW1xuICAgICAgICAgIC8vIFJlbW92aW5nIHRpdGxlIG1hcmdpbiBvbiB0b3Agb2YgYmxvY2sgdGl0bGVzXG4gICAgICAgICAgdWkuaDIoZGZCbG9ja1RpdGxlLCB7Li4uKGRmSW5kZXggPiAwKSA/IHtzdHlsZTogeydtYXJnaW4tdG9wJzogJzBweCd9fSA6IHt9fSksXG4gICAgICAgICAgZGZCbG9ja1xuICAgICAgICBdLCB7c3R5bGU6IHsuLi4oZnVsbEJsb2NrV2lkdGggPiAwKSA/IHsnd2lkdGgnOiBgJHtmdWxsQmxvY2tXaWR0aH0lYH06IHsnd2lkdGgnOiBgMTAwJWB9fX0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlU2NhbGFyc1RhYmxlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IERHLkh0bWxUYWJsZS5jcmVhdGUoXG4gICAgICAgICAgdGFiU2NhbGFyUHJvcHMsXG4gICAgICAgICAgKHNjYWxhclByb3A6IERHLlByb3BlcnR5KSA9PiBbc2NhbGFyUHJvcC5uYW1lLCB0aGlzLmZ1bmNDYWxsPy5vdXRwdXRzW3NjYWxhclByb3AubmFtZV0sIHNjYWxhclByb3Aub3B0aW9uc1sndW5pdHMnXV1cbiAgICAgICAgKS5yb290O1xuICAgICAgICB0YWJsZS5zdHlsZS5tYXhXaWR0aCA9ICc0MDBweCc7XG4gICAgICAgIHJldHVybiB0YWJsZTtcbiAgICAgIH07XG5cbiAgICAgIGxldCBzY2FsYXJzVGFibGUgPSBnZW5lcmF0ZVNjYWxhcnNUYWJsZSgpO1xuXG4gICAgICB0YWJTY2FsYXJQcm9wcy5mb3JFYWNoKCh0YWJTY2FsYXJQcm9wKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZU9uRmNDaGFuZ2VzID0gKCkgPT4ge1xuICAgICAgICAgICh0aGlzLmZ1bmNDYWxsIS5vdXRwdXRQYXJhbXNbdGFiU2NhbGFyUHJvcC5uYW1lXSBhcyBERy5GdW5jQ2FsbFBhcmFtKS5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NjYWxhcnNUYWJsZSA9IGdlbmVyYXRlU2NhbGFyc1RhYmxlKCk7XG4gICAgICAgICAgICBzY2FsYXJzVGFibGUucmVwbGFjZVdpdGgobmV3U2NhbGFyc1RhYmxlKTtcbiAgICAgICAgICAgIHNjYWxhcnNUYWJsZSA9IG5ld1NjYWxhcnNUYWJsZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmZ1bmNDYWxsUmVwbGFjZWQuc3Vic2NyaWJlKHN1YnNjcmliZU9uRmNDaGFuZ2VzKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkZlNlY3Rpb25zID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgIGxldCBjdXJyZW50V2lkdGggPSAwO1xuICAgICAgbGV0IGN1cnJlbnRTZWN0aW9uID0gdWkuZGl2SChbXSwge3N0eWxlOiB7J21hcmdpbi1ib3R0b20nOiAnMjVweCd9fSk7IC8vIEFkZGluZyBzbWFsbCBtYXJnaW4gYmV0d2VlbiBzZWN0aW9uc1xuICAgICAgZGZCbG9ja3MuZm9yRWFjaCgoZGZCbG9jaywgZGZJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBibG9ja1dpZHRoID0gcGFyc2VJbnQoZGZCbG9jay5zdHlsZS53aWR0aCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCArIGJsb2NrV2lkdGggPT09IDEwMCkge1xuICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLmFwcGVuZChkZkJsb2NrKTtcbiAgICAgICAgICBkZlNlY3Rpb25zLnB1c2goY3VycmVudFNlY3Rpb24pO1xuICAgICAgICAgIGN1cnJlbnRTZWN0aW9uID0gdWkuZGl2SChbXSk7XG4gICAgICAgICAgY3VycmVudFdpZHRoID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50V2lkdGggKyBibG9ja1dpZHRoIDwgMTAwKSB7XG4gICAgICAgICAgY3VycmVudFNlY3Rpb24uYXBwZW5kKGRmQmxvY2spO1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCArPSBibG9ja1dpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRmU2VjdGlvbnMucHVzaChjdXJyZW50U2VjdGlvbik7XG4gICAgICAgICAgY3VycmVudFNlY3Rpb24gPSB1aS5kaXZIKFtdKTtcbiAgICAgICAgICBjdXJyZW50U2VjdGlvbi5hcHBlbmQoZGZCbG9jayk7XG4gICAgICAgICAgY3VycmVudFdpZHRoID0gYmxvY2tXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZkluZGV4ID09PSBkZkJsb2Nrcy5sZW5ndGggLSAxKVxuICAgICAgICAgIGRmU2VjdGlvbnMucHVzaChjdXJyZW50U2VjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy50YWJzRWxlbS5hZGRQYW5lKHRhYkxhYmVsLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiB1aS5kaXZWKFsuLi5kZlNlY3Rpb25zLCAuLi50YWJTY2FsYXJQcm9wcy5sZW5ndGggPyBbdWkuaDIoJ1NjYWxhciB2YWx1ZXMnKV06IFtdLCBzY2FsYXJzVGFibGVdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0QmxvY2sgPSB1aS5ib3goKTtcbiAgICBvdXRwdXRCbG9jay5hcHBlbmQodGhpcy50YWJzRWxlbS5yb290KTtcblxuICAgIHJldHVybiBvdXRwdXRCbG9jaztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyTG9hZFJ1bihsb2FkZWRSdW46IERHLkZ1bmNDYWxsKSB7XG4gICAgd3UodGhpcy5mdW5jQ2FsbCEub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSkuZm9yRWFjaCgob3V0KSA9PiB7XG4gICAgICB0aGlzLmZ1bmNDYWxsIS5zZXRQYXJhbVZhbHVlKG91dC5uYW1lLCBsb2FkZWRSdW4ub3V0cHV0c1tvdXQubmFtZV0pO1xuICAgIH0pO1xuXG4gICAgd3UodGhpcy5mdW5jQ2FsbCEuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKS5mb3JFYWNoKChpbnApID0+IHtcbiAgICAgIHRoaXMuZnVuY0NhbGwhLnNldFBhcmFtVmFsdWUoaW5wLm5hbWUsIGxvYWRlZFJ1bi5pbnB1dHNbaW5wLm5hbWVdKTtcbiAgICB9KTtcblxuICAgIHRoaXMudGFic0VsZW0ucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgIHRoaXMudGFic0VsZW0ucGFuZXMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICB0YWIuaGVhZGVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRmVG9WaWV3ZXJNYXBwaW5nOiB7W2tleTogc3RyaW5nXTogREcuVmlld2VyW119ID0ge307XG5cbiAgcHJvdGVjdGVkIGdldCBkZlBhcmFtcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5mdW5jIS5pbnB1dHMuZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUpLFxuICAgICAgLi4udGhpcy5mdW5jIS5vdXRwdXRzLmZpbHRlcigocCkgPT4gcC5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FKSxcbiAgICBdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBkZk91dHB1dFBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jIS5vdXRwdXRzLmZpbHRlcigocCkgPT4gcC5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNJbnB1dFBhbmVsUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuYz8uaW5wdXRzLnNvbWUoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpIHx8IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRVbmlxdWVQYXJhbUNhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLm5ldyBTZXQodGhpcy5mdW5jIS5vdXRwdXRzLm1hcCgocCkgPT4gcC5jYXRlZ29yeSkpIC8vIGdldCBhbGwgb3V0cHV0IHBhcmFtcycgY2F0ZWdvcmllc1xuICAgIF07IC8vIGtlZXAgb25seSB1bmlxdWUgb2YgdGhlbVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRwdXRUYWJzTGFiZWxzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLm91dFVuaXF1ZVBhcmFtQ2F0ZWdvcmllcyxcbiAgICAgIC4uLnRoaXMub3V0VW5pcXVlUGFyYW1DYXRlZ29yaWVzLmZpbmQoKHZhbCkgPT4gdmFsID09PSAnTWlzYycgfHwgdmFsID09PSAnT3V0cHV0JykgPyBbJ091dHB1dCddIDogW10sIC8vIGlmIG5vIGNhdGVnb3JpZXMgYXJlIHN0YXRlZCwgdGhlIGRlZmF1bHQgY2F0ZWdvcnkgaXMgYWRkZWRcbiAgICBdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0YWJzTGFiZWxzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNhdGVnb3J5VG9QYXJhbU1hcCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGNhdGVnb3J5VG9QYXJhbU1hcCgpIHtcbiAgICBjb25zdCBtYXAgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBERy5Qcm9wZXJ0eVtdPjtcblxuICAgIGlmICh0aGlzLmlzSW5wdXRQYW5lbFJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmZ1bmMhLmlucHV0cy5cbiAgICAgICAgZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKS5cbiAgICAgICAgZm9yRWFjaCgocCkgPT4gbWFwWydJbnB1dCddID8gbWFwWydJbnB1dCddLnB1c2gocCk6IG1hcFsnSW5wdXQnXSA9IFtwXSk7XG4gICAgfVxuXG4gICAgdGhpcy5mdW5jIS5vdXRwdXRzLmZvckVhY2goKHApID0+IHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnk7XG5cbiAgICAgIGlmIChtYXBbY2F0ZWdvcnldKVxuICAgICAgICBtYXBbY2F0ZWdvcnldLnB1c2gocCk7XG4gICAgICBlbHNlXG4gICAgICAgIG1hcFtjYXRlZ29yeV0gPSBbcF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICAgIGNvbnN0IHBpID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZSgnQ2FsY3VsYXRpbmcuLi4nKTtcbiAgICB0aGlzLmZ1bmNDYWxsLm5ld0lkKCk7XG4gICAgYXdhaXQgdGhpcy5mdW5jQ2FsbC5jYWxsKCk7IC8vIG11dGF0ZXMgdGhlIGZ1bmNDYWxsIGZpZWxkXG4gICAgcGkuY2xvc2UoKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSdW4odGhpcy5mdW5jQ2FsbCk7XG4gICAgdGhpcy5sYXN0Q2FsbCA9IHRoaXMub3B0aW9ucy5pc1RhYmJlZCA/IHRoaXMuZnVuY0NhbGwuY2xvbmUoKSA6IGF3YWl0IHRoaXMuc2F2ZVJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG9SdW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5ydW4oKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGdyb2suc2hlbGwuZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNoZWNrRGlzYWJpbGl0eS5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSdW5TZWN0aW9uKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBydW5CdXR0b24gPSB1aS5iaWdCdXR0b24oJ1J1bicsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZG9SdW4oKSk7XG4gICAgLy8gUkVQTEFDRSBCWSBUWVBFIEdVQVJEXG4gICAgY29uc3QgaXNGdW5jU2NyaXB0ID0gKCkgPT4ge1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICByZXR1cm4gISF0aGlzLmZ1bmMuc2NyaXB0O1xuICAgIH07XG4gICAgLy8gVE8gRE86IG1vdmUgYnV0dG9uIHNvbWV3aGVyZVxuICAgIGNvbnN0IG9wZW5TY3JpcHRCdG4gPSB1aS5idXR0b24oJ09wZW4gc2NyaXB0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgd2luZG93Lm9wZW4oYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vc2NyaXB0LyR7KHRoaXMuZnVuYyBhcyBERy5TY3JpcHQpLmlkfWAsICdfYmxhbmsnKTtcbiAgICB9KTtcbiAgICAvLyBjb25zdCBidXR0b25XcmFwcGVyID0gdWkuZGl2KFsuLi50aGlzLm9wdGlvbnMuaXNUYWJiZWQgJiYgaXNGdW5jU2NyaXB0KCkgPyBbb3BlblNjcmlwdEJ0bl06IFtdLCBydW5CdXR0b25dKTtcbiAgICBjb25zdCBidXR0b25XcmFwcGVyID0gdWkuZGl2KFtydW5CdXR0b25dKTtcbiAgICB1aS50b29sdGlwLmJpbmQoYnV0dG9uV3JhcHBlciwgKCkgPT4gcnVuQnV0dG9uLmRpc2FibGVkID8gKHRoaXMuaXNSdW5uaW5nID8gJ0NvbXB1dGF0aW9ucyBhcmUgaW4gcHJvZ3Jlc3MnIDogJ1NvbWUgaW5wdXRzIGFyZSBpbnZhbGlkJykgOiAnJyk7XG5cbiAgICB0aGlzLmNoZWNrRGlzYWJpbGl0eS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgaXNWYWxpZCA9ICh3dSh0aGlzLmZ1bmNDYWxsIS5pbnB1dHMudmFsdWVzKCkpLmV2ZXJ5KCh2KSA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCkpICYmICF0aGlzLmlzUnVubmluZztcbiAgICAgIHJ1bkJ1dHRvbi5kaXNhYmxlZCA9ICFpc1ZhbGlkO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXRzID0gdWkuZGl2VihbXSwgJ3VpLWZvcm0nKTtcbiAgICBsZXQgcHJldkNhdGVnb3J5ID0gJ01pc2MnO1xuICAgIHd1KHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKHZhbCkgPT4gISF2YWwpXG4gICAgICAuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3AgPSB2YWwucHJvcGVydHk7XG4gICAgICAgIGlmIChwcm9wLnByb3BlcnR5VHlwZS50b1N0cmluZygpID09PSBGSUxFX0lOUFVUX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCB0ID0gVWlVdGlscy5maWxlSW5wdXQocHJvcC5jYXB0aW9uID8/IHByb3AubmFtZSwgbnVsbCwgKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVuY0NhbGwhLmlucHV0c1twcm9wLm5hbWVdID0gZmlsZTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAocHJvcC5jYXRlZ29yeSAhPT0gcHJldkNhdGVnb3J5KVxuICAgICAgICAgICAgaW5wdXRzLmFwcGVuZCh1aS5oMihwcm9wLmNhdGVnb3J5KSk7XG5cbiAgICAgICAgICB0aGlzLmNoZWNrRGlzYWJpbGl0eS5uZXh0KCk7XG4gICAgICAgICAgaW5wdXRzLmFwcGVuZCh0LnJvb3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB0ID0gcHJvcC5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSA/XG4gICAgICAgICAgICB1aS50YWJsZUlucHV0KHByb3AuY2FwdGlvbiA/PyBwcm9wLm5hbWUsIG51bGwsIGdyb2suc2hlbGwudGFibGVzKTpcbiAgICAgICAgICAgIHVpLmlucHV0LmZvclByb3BlcnR5KHByb3ApO1xuXG4gICAgICAgICAgdC5pbnB1dC5vbmtleWRvd24gPSBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChldi5rZXkgPT0gJ0VudGVyJylcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kb1J1bigpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0LmNhcHRpb25MYWJlbC5maXJzdENoaWxkIS5yZXBsYWNlV2l0aCh1aS5zcGFuKFtwcm9wLmNhcHRpb24gPz8gcHJvcC5uYW1lXSkpO1xuICAgICAgICAgIGlmIChwcm9wLm9wdGlvbnNbJ3VuaXRzJ10pIHQuYWRkUG9zdGZpeChwcm9wLm9wdGlvbnNbJ3VuaXRzJ10pO1xuXG4gICAgICAgICAgY29uc3Qgc3Vic2NyaWJlT25GY0NoYW5nZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICB0LnZhbHVlID0gdGhpcy5mdW5jQ2FsbCEuaW5wdXRzW3ZhbC5uYW1lXSA/PyBwcm9wLmRlZmF1bHRWYWx1ZSA/PyBudWxsO1xuICAgICAgICAgICAgdGhpcy5mdW5jQ2FsbCEuaW5wdXRzW3ZhbC5uYW1lXSA9IHRoaXMuZnVuY0NhbGwhLmlucHV0c1t2YWwubmFtZV0gPz8gcHJvcC5kZWZhdWx0VmFsdWUgPz8gbnVsbDtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc3Vic2NyaWJlT25GY0NoYW5nZXMoKTtcbiAgICAgICAgICB0aGlzLmZ1bmNDYWxsUmVwbGFjZWQuc3Vic2NyaWJlKHN1YnNjcmliZU9uRmNDaGFuZ2VzKTtcblxuICAgICAgICAgIHQub25DaGFuZ2VkKCgpID0+IHtcbiAgICAgICAgICAgIC8vIFJlc29sdmluZyBjYXNlIG9mIHByb3BlcnR5VHlwZSA9IERBVEFGUkFNRVxuICAgICAgICAgICAgaWYgKCEhdC5wcm9wZXJ0eSkgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdID0gdC52YWx1ZTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHQub25JbnB1dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdID0gdC52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0LnZhbHVlID09PSBudWxsKSBzZXRUaW1lb3V0KCgpID0+IHQuaW5wdXQuY2xhc3NMaXN0LmFkZCgnZDQtaW52YWxpZCcpLCAxMDApOyBlbHNlIHQuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnZDQtaW52YWxpZCcpOyA7XG5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhbC5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5mdW5jQ2FsbCEuaW5wdXRzW3ZhbC5uYW1lXTtcblxuICAgICAgICAgICAgaWYgKHZhbC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSkge1xuICAgICAgICAgICAgICAvLyBERUFMSU5HIFdJVEggQlVHOiBodHRwczovL3JlZGRhdGEuYXRsYXNzaWFuLm5ldC9icm93c2UvR1JPSy0xMjIyM1xuICAgICAgICAgICAgICBjb25zdCBuZXdUYWJsZUlucHV0ID0gdWkudGFibGVJbnB1dChwcm9wLmNhcHRpb24gPz8gcHJvcC5uYW1lLCBuZXdWYWx1ZSwgWy4uLmdyb2suc2hlbGwudGFibGVzLCBuZXdWYWx1ZV0pO1xuICAgICAgICAgICAgICB0LnJvb3QucmVwbGFjZVdpdGgobmV3VGFibGVJbnB1dC5yb290KTtcbiAgICAgICAgICAgICAgdCA9IG5ld1RhYmxlSW5wdXQ7XG5cbiAgICAgICAgICAgICAgdC5vbklucHV0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdID0gdC52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodC52YWx1ZSA9PT0gbnVsbCkgc2V0VGltZW91dCgoKSA9PiB0LmlucHV0LmNsYXNzTGlzdC5hZGQoJ2Q0LWludmFsaWQnKSwgMTAwKTsgZWxzZSB0LmlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Q0LWludmFsaWQnKTsgO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0Rpc2FiaWxpdHkubmV4dCgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHQubm90aWZ5ID0gZmFsc2U7XG4gICAgICAgICAgICAgIHQudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgdC5ub3RpZnkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNoZWNrRGlzYWJpbGl0eS5uZXh0KCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAocHJvcC5jYXRlZ29yeSAhPT0gcHJldkNhdGVnb3J5KVxuICAgICAgICAgICAgaW5wdXRzLmFwcGVuZCh1aS5oMihwcm9wLmNhdGVnb3J5KSk7XG5cbiAgICAgICAgICBpZiAodC52YWx1ZSA9PT0gbnVsbCkgcnVuQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBpbnB1dHMuYXBwZW5kKHQucm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgcHJldkNhdGVnb3J5ID0gcHJvcC5jYXRlZ29yeTtcbiAgICAgIH0pO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBidXR0b25zID0gdWkuYnV0dG9uc0lucHV0KFtidXR0b25XcmFwcGVyXSk7XG4gICAgaW5wdXRzLmFwcGVuZChidXR0b25zKTtcbiAgICBpbnB1dHMuY2xhc3NMaXN0LnJlbW92ZSgndWktcGFuZWwnKTtcbiAgICBpbnB1dHMuc3R5bGUucGFkZGluZ1RvcCA9ICcwcHgnO1xuICAgIGlucHV0cy5zdHlsZS5wYWRkaW5nTGVmdCA9ICcwcHgnO1xuXG4gICAgcmV0dXJuIHVpLmRpdihbaW5wdXRzXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdEV4cG9ydCA9IGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGxhc3RDYWxsID0gdGhpcy5sYXN0Q2FsbDtcbiAgICBpZiAoIWxhc3RDYWxsKSB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIHdhcyBub3QgY2FsbGVkYCk7XG5cbiAgICBpZiAoIXRoaXMuZXhwb3J0Q29uZmlnIS5zdXBwb3J0ZWRGb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHRocm93IG5ldyBFcnJvcihgRm9ybWF0IFwiJHtmb3JtYXR9XCIgaXMgbm90IHN1cHBvcnRlZC5gKTtcblxuICAgIGlmICghdGhpcy5mdW5jKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb3JyZXNwb2RpbmcgZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgY29uc3QgQkxPQl9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuICAgIGNvbnN0IGV4cG9ydFdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcblxuICAgIGNvbnN0IGlzU2NhbGFyVHlwZSA9ICh0eXBlOiBERy5UWVBFKSA9PiAoREcuVFlQRVNfU0NBTEFSLmhhcyh0eXBlKSk7XG5cbiAgICBjb25zdCBpc0RhdGFGcmFtZSA9ICh0eXBlOiBERy5UWVBFKSA9PiAodHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gdGhpcy5mdW5jLmlucHV0cy5maWx0ZXIoKGlucHV0KSA9PiBpc0RhdGFGcmFtZShpbnB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBzY2FsYXJJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzU2NhbGFyVHlwZShpbnB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBkZk91dHB1dHMgPSB0aGlzLmZ1bmMub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gaXNEYXRhRnJhbWUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhck91dHB1dHMgPSB0aGlzLmZ1bmMub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gaXNTY2FsYXJUeXBlKG91dHB1dC5wcm9wZXJ0eVR5cGUpKTtcblxuICAgIGNvbnN0IGlucHV0UGFyYW1zID0gWy4uLmxhc3RDYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG4gICAgY29uc3Qgb3V0cHV0UGFyYW1zID0gWy4uLmxhc3RDYWxsLm91dHB1dFBhcmFtcy52YWx1ZXMoKV0gYXMgREcuRnVuY0NhbGxQYXJhbVtdO1xuXG4gICAgZGZJbnB1dHMuZm9yRWFjaCgoZGZJbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZJbnB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNjYWxhcklucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGlucHV0U2NhbGFyc1NoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KCdJbnB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChpbnB1dFNjYWxhcnNTaGVldCwgc2NhbGFySW5wdXRzLm1hcCgoc2NhbGFySW5wdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhcklucHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJJbnB1dC5uYW1lLFxuICAgICAgICB2YWx1ZTogbGFzdENhbGwuaW5wdXRzW3NjYWxhcklucHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFySW5wdXQub3B0aW9uc1sndW5pdHMnXSB8fCAnJyxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgZGZPdXRwdXRzLmZvckVhY2goKGRmT3V0cHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZPdXRwdXQubmFtZTtcbiAgICAgIGNvbnN0IGN1cnJlbnREZlNoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLm91dHB1dHNbZGZPdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcbiAgICAgIGRmVG9TaGVldChjdXJyZW50RGZTaGVldCwgY3VycmVudERmKTtcbiAgICB9KTtcblxuXG4gICAgaWYgKHNjYWxhck91dHB1dHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvdXRwdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ091dHB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChvdXRwdXRTY2FsYXJzU2hlZXQsIHNjYWxhck91dHB1dHMubWFwKChzY2FsYXJPdXRwdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhck91dHB1dC5vcHRpb25zWydjYXB0aW9uJ10gfHwgc2NhbGFyT3V0cHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5vdXRwdXRzW3NjYWxhck91dHB1dC5uYW1lXSxcbiAgICAgICAgdW5pdHM6IHNjYWxhck91dHB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJDb250cm9sID0gdGhpcy50YWJzRWxlbTtcbiAgICBmb3IgKGNvbnN0IHRhYkxhYmVsIG9mIHRoaXMudGFic0xhYmVscykge1xuICAgICAgdGFiQ29udHJvbC5jdXJyZW50UGFuZSA9IHRhYkNvbnRyb2wuZ2V0UGFuZSh0YWJMYWJlbCk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMDApKTtcbiAgICAgIGlmICh0YWJMYWJlbCA9PT0gJ0lucHV0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IGlucHV0UGFyYW0gb2YgaW5wdXRQYXJhbXMuZmlsdGVyKChpbnB1dFBhcmFtKSA9PiBpbnB1dFBhcmFtLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKSkge1xuICAgICAgICAgIGNvbnN0IG5vbkdyaWRWaWV3ZXJzID0gdGhpcy5kZlRvVmlld2VyTWFwcGluZ1tpbnB1dFBhcmFtLm5hbWVdXG4gICAgICAgICAgICAuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRClcbiAgICAgICAgICAgIC5maWx0ZXIoKHZpZXdlcikgPT4gT2JqZWN0LnZhbHVlcyh2aWV3ZXJUeXBlc01hcHBpbmcpLmluY2x1ZGVzKHZpZXdlci50eXBlKSk7XG5cbiAgICAgICAgICBjb25zdCBkZklucHV0ID0gZGZJbnB1dHMuZmluZCgoaW5wdXQpID0+IGlucHV0Lm5hbWUgPT09IGlucHV0UGFyYW0ubmFtZSk7XG4gICAgICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dCEub3B0aW9ucy5jYXB0aW9uIHx8IGlucHV0UGFyYW0ubmFtZTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwuaW5wdXRzW2RmSW5wdXQhLm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmlld2VyXSBvZiBub25HcmlkVmlld2Vycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHBsb3RUb1NoZWV0KFxuICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2suZ2V0V29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5JTlBVVCkpLFxuICAgICAgICAgICAgICB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgY3VycmVudERmLmNvbHVtbnMubGVuZ3RoICsgMixcbiAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dFBhcmFtIG9mIG91dHB1dFBhcmFtcy5maWx0ZXIoXG4gICAgICAgICAgKG91dHB1dFBhcmFtKSA9PiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSAmJlxuICAgICAgICAgIChcbiAgICAgICAgICAgICh0YWJMYWJlbCA9PT0gJ091dHB1dCcgJiYgb3V0cHV0UGFyYW0ucHJvcGVydHkuY2F0ZWdvcnkgPT09ICdNaXNjJyB8fCBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5jYXRlZ29yeSA9PT0gJ091dHB1dCcpIHx8XG4gICAgICAgICAgICAodGFiTGFiZWwgIT09ICdPdXRwdXQnICYmIG91dHB1dFBhcmFtLnByb3BlcnR5LmNhdGVnb3J5ID09PSB0YWJMYWJlbClcbiAgICAgICAgICApXG4gICAgICAgICkpIHtcbiAgICAgICAgICBjb25zdCBub25HcmlkVmlld2VycyA9IHRoaXMuZGZUb1ZpZXdlck1hcHBpbmdbb3V0cHV0UGFyYW0ucHJvcGVydHkubmFtZV1cbiAgICAgICAgICAgIC5maWx0ZXIoKHZpZXdlcikgPT4gdmlld2VyLnR5cGUgIT09IERHLlZJRVdFUi5HUklEKVxuICAgICAgICAgICAgLmZpbHRlcigodmlld2VyKSA9PiBPYmplY3QudmFsdWVzKHZpZXdlclR5cGVzTWFwcGluZykuaW5jbHVkZXModmlld2VyLnR5cGUpKTtcblxuICAgICAgICAgIGNvbnN0IGRmT3V0cHV0ID0gZGZPdXRwdXRzLmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lm5hbWUgPT09IG91dHB1dFBhcmFtLnByb3BlcnR5Lm5hbWUpITtcbiAgICAgICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dC5vcHRpb25zLmNhcHRpb24gfHwgb3V0cHV0UGFyYW0ucHJvcGVydHkubmFtZTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZpZXdlcl0gb2Ygbm9uR3JpZFZpZXdlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodmlld2VyLnR5cGUgPT09IERHLlZJRVdFUi5TVEFUSVNUSUNTKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICAgICAgICAgIERHLkNvbHVtbi5zdHJpbmcoJ05hbWUnLCBsZW5ndGgpLmluaXQoKGk6IG51bWJlcikgPT4gY3VycmVudERmLmNvbHVtbnMuYnlJbmRleChpKS5uYW1lKSxcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uaW50KCdWYWx1ZXMnLCBsZW5ndGgpLmluaXQoKGk6IG51bWJlcikgPT4gY3VycmVudERmLmNvbHVtbnMuYnlJbmRleChpKS5zdGF0cy52YWx1ZUNvdW50KSxcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uaW50KCdOdWxscycsIGxlbmd0aCkuaW5pdCgoaTogbnVtYmVyKSA9PiBjdXJyZW50RGYuY29sdW1ucy5ieUluZGV4KGkpLnN0YXRzLm1pc3NpbmdWYWx1ZUNvdW50KSxcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uZmxvYXQoJ01pbicsIGxlbmd0aCkuaW5pdCgoaTogbnVtYmVyKSA9PiBjdXJyZW50RGYuY29sdW1ucy5ieUluZGV4KGkpLnN0YXRzLm1pbiksXG4gICAgICAgICAgICAgICAgREcuQ29sdW1uLmZsb2F0KCdNYXgnLCBsZW5ndGgpLmluaXQoKGk6IG51bWJlcikgPT4gY3VycmVudERmLmNvbHVtbnMuYnlJbmRleChpKS5zdGF0cy5tYXgpLFxuICAgICAgICAgICAgICAgIERHLkNvbHVtbi5mbG9hdCgnQXZnJywgbGVuZ3RoKS5pbml0KChpOiBudW1iZXIpID0+IGN1cnJlbnREZi5jb2x1bW5zLmJ5SW5kZXgoaSkuc3RhdHMuYXZnKSxcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uZmxvYXQoJ1N0ZGV2JywgbGVuZ3RoKS5pbml0KChpOiBudW1iZXIpID0+IGN1cnJlbnREZi5jb2x1bW5zLmJ5SW5kZXgoaSkuc3RhdHMuc3RkZXYpLFxuICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgZGZUb1NoZWV0KFxuICAgICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLmdldFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uT1VUUFVUKSksXG4gICAgICAgICAgICAgICAgc3RhdHMsXG4gICAgICAgICAgICAgICAgY3VycmVudERmLmNvbHVtbnMubGVuZ3RoICsgMixcbiAgICAgICAgICAgICAgICAoaW5kZXggPiAwKSA/IE1hdGguY2VpbChub25HcmlkVmlld2Vyc1tpbmRleC0xXS5yb290LmNsaWVudEhlaWdodCAvIDIwKSArIDEgOiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhd2FpdCBwbG90VG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpLFxuICAgICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGV4cG9ydFdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcblxuICAgIHJldHVybiBuZXcgQmxvYihbYnVmZmVyXSwge3R5cGU6IEJMT0JfVFlQRX0pO1xuICB9O1xuXG4gIGV4cG9ydENvbmZpZyA9IHtcbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zKCksXG4gICAgc3VwcG9ydGVkRm9ybWF0czogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cygpLFxuICAgIGV4cG9ydDogdGhpcy5kZWZhdWx0RXhwb3J0LFxuICAgIGZpbGVuYW1lOiB0aGlzLmRlZmF1bHRFeHBvcnRGaWxlbmFtZSxcbiAgfTtcbn1cblxuY29uc3QgZ2V0U2hlZXROYW1lID0gKG5hbWU6IHN0cmluZywgZGlyZWN0aW9uOiBESVJFQ1RJT04pID0+IHtcbiAgY29uc3QgaWRlYWxOYW1lID0gYCR7ZGlyZWN0aW9ufSAtICR7bmFtZX1gO1xuICByZXR1cm4gKGlkZWFsTmFtZS5sZW5ndGggPiAzMSkgPyBuYW1lLnN1YnN0cmluZygwLCAzMikgOiBpZGVhbE5hbWU7XG59O1xuXG5lbnVtIERJUkVDVElPTiB7XG4gIElOUFVUID0gJ0lucHV0JyxcbiAgT1VUUFVUID0gJ091dHB1dCdcbn1cblxuY29uc3Qgc2NhbGFyc1RvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBzY2FsYXJzOiB7IGNhcHRpb246IHN0cmluZywgdmFsdWU6IHN0cmluZywgdW5pdHM6IHN0cmluZyB9W10pID0+IHtcbiAgc2hlZXQuYWRkUm93KFsnUGFyYW1ldGVyJywgJ1ZhbHVlJywgJ1VuaXRzJ10pLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIHNjYWxhcnMuZm9yRWFjaCgoc2NhbGFyKSA9PiB7XG4gICAgc2hlZXQuYWRkUm93KFtzY2FsYXIuY2FwdGlvbiwgc2NhbGFyLnZhbHVlLCBzY2FsYXIudW5pdHNdKTtcbiAgfSk7XG5cbiAgc2hlZXQuZ2V0Q29sdW1uKDEpLndpZHRoID0gTWF0aC5tYXgoXG4gICAgLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLmNhcHRpb24udG9TdHJpbmcoKS5sZW5ndGgpLCAnUGFyYW1ldGVyJy5sZW5ndGhcbiAgKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1ZhbHVlJy5sZW5ndGgpICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMykud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudW5pdHMudG9TdHJpbmcoKS5sZW5ndGgpLCAnVW5pdHMnLmxlbmd0aCkgKiAxLjI7XG59O1xuXG5jb25zdCBkZlRvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBkZjogREcuRGF0YUZyYW1lLCBjb2x1bW46IG51bWJlciA9IDAsIHJvdzogbnVtYmVyID0gMCkgPT4ge1xuICBmb3IgKGxldCBpPSAwOyBpIDwgZGYuY29sdW1ucy5uYW1lcygpLmxlbmd0aDsgaSsrKSB7XG4gICAgc2hlZXQuZ2V0Q2VsbCgxICsgcm93LCAxICsgaSArIGNvbHVtbikudmFsdWUgPSBkZi5jb2x1bW5zLmJ5SW5kZXgoaSkubmFtZTtcbiAgICBzaGVldC5nZXRDb2x1bW4oMSArIGkgKyBjb2x1bW4pLndpZHRoID0gTWF0aC5tYXgoXG4gICAgICAuLi5kZi5jb2x1bW5zLmJ5SW5kZXgoaSkuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS50b1N0cmluZygpLmxlbmd0aCksXG4gICAgICBkZi5jb2x1bW5zLmJ5SW5kZXgoaSkubmFtZS5sZW5ndGhcbiAgICApICogMS4yO1xuICB9XG4gIGZvciAobGV0IGRmQ29sdW1uID0gMDsgZGZDb2x1bW4gPCBkZi5jb2x1bW5zLmxlbmd0aDsgZGZDb2x1bW4rKykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGYucm93Q291bnQ7IGkrKylcbiAgICAgIHNoZWV0LmdldENlbGwoaSArIDIgKyByb3csIDEgKyBjb2x1bW4rZGZDb2x1bW4pLnZhbHVlID0gZGYuY29sdW1ucy5ieUluZGV4KGRmQ29sdW1uKS5nZXQoaSk7XG4gIH1cbn07XG5cbmNvbnN0IHBsb3RUb1NoZWV0ID0gYXN5bmMgKGV4cG9ydFdiOiBFeGNlbEpTLldvcmtib29rLCBzaGVldDogRXhjZWxKUy5Xb3Jrc2hlZXQsIHBsb3Q6IEhUTUxFbGVtZW50LCBjb2x1bW5Gb3JJbWFnZTogbnVtYmVyLCByb3dGb3JJbWFnZTogbnVtYmVyID0gMCkgPT4ge1xuICBjb25zdCBjYW52YXMgPSBhd2FpdCBodG1sMmNhbnZhcyhwbG90IGFzIEhUTUxFbGVtZW50LCB7bG9nZ2luZzogZmFsc2V9KTtcbiAgY29uc3QgZGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuXG4gIGNvbnN0IGltYWdlSWQgPSBleHBvcnRXYi5hZGRJbWFnZSh7XG4gICAgYmFzZTY0OiBkYXRhVXJsLFxuICAgIGV4dGVuc2lvbjogJ3BuZycsXG4gIH0pO1xuICBzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XG4gICAgdGw6IHtjb2w6IGNvbHVtbkZvckltYWdlLCByb3c6IHJvd0ZvckltYWdlfSxcbiAgICBleHQ6IHt3aWR0aDogY2FudmFzLndpZHRoLCBoZWlnaHQ6IGNhbnZhcy5oZWlnaHR9LFxuICB9KTtcbn07XG4iXX0=
|
|
@@ -36,13 +36,16 @@ export declare class HistoryPanel {
|
|
|
36
36
|
historyTab: HTMLDivElement;
|
|
37
37
|
favTab: HTMLDivElement;
|
|
38
38
|
sharedTab: HTMLDivElement;
|
|
39
|
-
tabs: DG.TabControl;
|
|
40
39
|
filterPane: HTMLDivElement;
|
|
40
|
+
tabs: DG.TabControl;
|
|
41
41
|
private _root;
|
|
42
42
|
myCards: HTMLElement[];
|
|
43
43
|
favoriteCards: HTMLElement[];
|
|
44
44
|
sharedCards: HTMLElement[];
|
|
45
|
-
|
|
45
|
+
buildFilterPane(currentTabName: string): any;
|
|
46
|
+
myPaneFilter: any;
|
|
47
|
+
favoritesPaneFilter: any;
|
|
48
|
+
sharedPaneFilter: any;
|
|
46
49
|
showDeleteRunDialog(funcCall: DG.FuncCall): void;
|
|
47
50
|
updateSharedPane(sharedRuns: DG.FuncCall[]): void;
|
|
48
51
|
updateFavoritesPane(favoriteRuns: DG.FuncCall[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-panel.d.ts","sourceRoot":"","sources":["history-panel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAkB,OAAO,EAAC,MAAM,MAAM,CAAC;AAE9C,OAAO,6BAA6B,CAAC;AAErC,eAAO,MAAM,eAAe;;;;CAI3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;CAQ5B,CAAC;
|
|
1
|
+
{"version":3,"file":"history-panel.d.ts","sourceRoot":"","sources":["history-panel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAkB,OAAO,EAAC,MAAM,MAAM,CAAC;AAE9C,OAAO,6BAA6B,CAAC;AAErC,eAAO,MAAM,eAAe;;;;CAI3B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;CAQ5B,CAAC;AA2DF,qBAAa,YAAY;IAqTrB,OAAO,CAAC,IAAI;IAnTP,WAAW,kBAAyB;IAGpC,uBAAuB,uBAA8B;IAGrD,oBAAoB,uBAA8B;IAGlD,4BAA4B,uBAA8B;IAG1D,yBAAyB,uBAA8B;IAGvD,gBAAgB,kBAAyB;IAGzC,sBAAsB,uBAA8B;IAGpD,mBAAmB,uBAA8B;IAGjD,2BAA2B,uBAA8B;IAGzD,wBAAwB,uBAA8B;IAGtD,eAAe,kBAAyB;IAE/C,OAAO,CAAC,KAAK,CAA2B;IAExC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,gBAAgB,CAAuB;IAExC,YAAY,gBAAuB;IAE1C,UAAU,iBAAY;IACtB,MAAM,iBAAY;IAClB,SAAS,iBAAY;IACrB,UAAU,iBAAY;IACtB,IAAI,gBAID;IAEH,OAAO,CAAC,KAAK,CAEgC;IAE7C,OAAO,gBAAuB;IAC9B,aAAa,gBAAuB;IACpC,WAAW,gBAAuB;IAElC,eAAe,CAAC,cAAc,EAAE,MAAM;IAqDtC,YAAY,MAAuC;IACnD,mBAAmB,MAAwC;IAC3D,gBAAgB,MAAsC;IAEtD,mBAAmB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;IAWzC,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,EAAE;IAS1C,mBAAmB,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,EAAE;IAU/C,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE;IAUlC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;IA8DhC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;IA0EpC,mBAAmB,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE;IAK5C,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE;IAK1C,kBAAkB,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE;gBAMjC,IAAI,EAAE,EAAE,CAAC,IAAI;YAkET,iBAAiB;YASjB,sBAAsB;YAWtB,cAAc;YA4Bd,mBAAmB;IAWjC,IAAW,IAAI,mBAEd;CACF"}
|
|
@@ -70,6 +70,9 @@ class HistoryPanelStore {
|
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
+
const MY_PANE_LABEL = 'HISTORY';
|
|
74
|
+
const FAVORITES_LABEL = 'FAVORITES';
|
|
75
|
+
const SHARED_LABEL = 'SHARED';
|
|
73
76
|
export class HistoryPanel {
|
|
74
77
|
constructor(func) {
|
|
75
78
|
this.func = func;
|
|
@@ -103,23 +106,21 @@ export class HistoryPanel {
|
|
|
103
106
|
this.historyTab = ui.div();
|
|
104
107
|
this.favTab = ui.div();
|
|
105
108
|
this.sharedTab = ui.div();
|
|
109
|
+
this.filterPane = ui.div();
|
|
106
110
|
this.tabs = ui.tabControl({
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
[MY_PANE_LABEL]: ui.box(this.historyTab),
|
|
112
|
+
[FAVORITES_LABEL]: ui.box(this.favTab),
|
|
113
|
+
[SHARED_LABEL]: ui.box(this.sharedTab),
|
|
110
114
|
});
|
|
111
|
-
this.filterPane = ui.div();
|
|
112
115
|
this._root = ui.divV([
|
|
113
|
-
ui.panel([
|
|
114
|
-
ui.h2('History'),
|
|
115
|
-
this.filterPane,
|
|
116
|
-
]),
|
|
117
|
-
ui.element('div', 'splitbar-horizontal'),
|
|
118
116
|
this.tabs.root,
|
|
119
117
|
], { style: { width: '100%', height: '100%' } });
|
|
120
118
|
this.myCards = [];
|
|
121
119
|
this.favoriteCards = [];
|
|
122
120
|
this.sharedCards = [];
|
|
121
|
+
this.myPaneFilter = this.buildFilterPane(MY_PANE_LABEL);
|
|
122
|
+
this.favoritesPaneFilter = this.buildFilterPane(FAVORITES_LABEL);
|
|
123
|
+
this.sharedPaneFilter = this.buildFilterPane(SHARED_LABEL);
|
|
123
124
|
this.tabs.root.style.width = '100%';
|
|
124
125
|
this.tabs.root.style.height = '100%';
|
|
125
126
|
this.myRunsFilter.subscribe(() => this.updateMyPane(this.store.filteredMyRuns));
|
|
@@ -172,61 +173,51 @@ export class HistoryPanel {
|
|
|
172
173
|
this.store.allRuns.next(this.store.allRuns.value.filter((call) => call.id !== id));
|
|
173
174
|
});
|
|
174
175
|
this.allRunsFetch.next();
|
|
175
|
-
this.updateFilterPane();
|
|
176
176
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
177
|
+
buildFilterPane(currentTabName) {
|
|
178
|
+
return ui.wait(() => __awaiter(this, void 0, void 0, function* () {
|
|
179
|
+
const filteringText = new Subject();
|
|
180
|
+
const textInput = ui.stringInput('Search', '', (v) => filteringText.next(v));
|
|
181
|
+
DG.debounce(filteringText.asObservable(), 600).subscribe(() => {
|
|
182
|
+
this.store.filteringOptions.text = textInput.stringValue;
|
|
183
|
+
this.myRunsFilter.next();
|
|
184
|
+
this.favRunsFilter.next();
|
|
185
|
+
this.sharedRunsFilter.next();
|
|
186
|
+
});
|
|
187
|
+
const dateInput = ui.dateInput('Started after', dayjs().subtract(1, 'week'), (v) => {
|
|
188
|
+
this.store.filteringOptions.startedAfter = v;
|
|
189
|
+
this.myRunsFilter.next();
|
|
190
|
+
this.favRunsFilter.next();
|
|
191
|
+
this.sharedRunsFilter.next();
|
|
192
|
+
});
|
|
193
|
+
const defaultUsers = Object.values(defaultUsersIds);
|
|
194
|
+
const allUsers = yield grok.dapi.users.list();
|
|
195
|
+
const filteredUsers = allUsers.filter((user) => !defaultUsers.includes(user.id));
|
|
196
|
+
const authorInput = ui.choiceInput('Author', 'Anyone', ['Anyone', ...filteredUsers], (v) => {
|
|
197
|
+
this.store.filteringOptions.author = (v === 'Anyone') ? undefined : v;
|
|
198
|
+
this.sharedRunsFilter.next();
|
|
199
|
+
});
|
|
200
|
+
authorInput.root.style.display = 'none';
|
|
201
|
+
dateInput.addPatternMenu('datetime');
|
|
202
|
+
const form = ui.divV([
|
|
203
|
+
textInput,
|
|
204
|
+
dateInput,
|
|
205
|
+
authorInput,
|
|
206
|
+
], 'ui-form ui-form-wide ui-form-left');
|
|
207
|
+
if (currentTabName === MY_PANE_LABEL) {
|
|
208
|
+
dateInput.root.style.removeProperty('display');
|
|
201
209
|
authorInput.root.style.display = 'none';
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
authorInput.root.style.display = 'none';
|
|
214
|
-
}
|
|
215
|
-
if (currentTabName === 'FAVORITES') {
|
|
216
|
-
dateInput.root.style.removeProperty('display');
|
|
217
|
-
authorInput.root.style.display = 'none';
|
|
218
|
-
}
|
|
219
|
-
if (currentTabName === 'SHARED') {
|
|
220
|
-
dateInput.root.style.removeProperty('display');
|
|
221
|
-
authorInput.root.style.removeProperty('display');
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
return form;
|
|
225
|
-
}));
|
|
226
|
-
};
|
|
227
|
-
const newFilterPane = buildFilterPane();
|
|
228
|
-
this.filterPane.replaceWith(newFilterPane);
|
|
229
|
-
this.filterPane = newFilterPane;
|
|
210
|
+
}
|
|
211
|
+
if (currentTabName === FAVORITES_LABEL) {
|
|
212
|
+
dateInput.root.style.removeProperty('display');
|
|
213
|
+
authorInput.root.style.display = 'none';
|
|
214
|
+
}
|
|
215
|
+
if (currentTabName === SHARED_LABEL) {
|
|
216
|
+
dateInput.root.style.removeProperty('display');
|
|
217
|
+
authorInput.root.style.removeProperty('display');
|
|
218
|
+
}
|
|
219
|
+
return form;
|
|
220
|
+
}));
|
|
230
221
|
}
|
|
231
222
|
;
|
|
232
223
|
showDeleteRunDialog(funcCall) {
|
|
@@ -242,19 +233,31 @@ export class HistoryPanel {
|
|
|
242
233
|
;
|
|
243
234
|
updateSharedPane(sharedRuns) {
|
|
244
235
|
const newTab = (sharedRuns.length > 0) ? this.renderSharedCards(sharedRuns) : ui.divText('No runs are marked as shared', 'no-elements-label');
|
|
245
|
-
this.sharedTab.replaceWith(
|
|
236
|
+
this.sharedTab.replaceWith(ui.divV([
|
|
237
|
+
this.sharedPaneFilter,
|
|
238
|
+
ui.element('div', 'splitbar-horizontal'),
|
|
239
|
+
newTab
|
|
240
|
+
]));
|
|
246
241
|
this.sharedTab = newTab;
|
|
247
242
|
}
|
|
248
243
|
;
|
|
249
244
|
updateFavoritesPane(favoriteRuns) {
|
|
250
245
|
const newTab = (favoriteRuns.length > 0) ? this.renderFavoriteCards(favoriteRuns) : ui.divText('No runs are marked as favorites', 'no-elements-label');
|
|
251
|
-
this.favTab.replaceWith(
|
|
246
|
+
this.favTab.replaceWith(ui.divV([
|
|
247
|
+
this.favoritesPaneFilter,
|
|
248
|
+
ui.element('div', 'splitbar-horizontal'),
|
|
249
|
+
newTab
|
|
250
|
+
]));
|
|
252
251
|
this.favTab = newTab;
|
|
253
252
|
}
|
|
254
253
|
;
|
|
255
254
|
updateMyPane(myRuns) {
|
|
256
255
|
const newTab = (myRuns.length > 0) ? this.renderHistoryCards(myRuns) : ui.divText('No runs are found in history', 'no-elements-label');
|
|
257
|
-
this.historyTab.replaceWith(
|
|
256
|
+
this.historyTab.replaceWith(ui.divV([
|
|
257
|
+
this.myPaneFilter,
|
|
258
|
+
ui.element('div', 'splitbar-horizontal'),
|
|
259
|
+
newTab
|
|
260
|
+
]));
|
|
258
261
|
this.historyTab = newTab;
|
|
259
262
|
}
|
|
260
263
|
;
|
|
@@ -336,7 +339,7 @@ export class HistoryPanel {
|
|
|
336
339
|
funcCall = yield historyUtils.loadRun(funcCall.id);
|
|
337
340
|
funcCall.options['title'] = title;
|
|
338
341
|
funcCall.options['description'] = description;
|
|
339
|
-
if (isShared === funcCall.options['isShared'] && isFavorite === funcCall.options['isFavorite']) {
|
|
342
|
+
if (!!isShared === !!funcCall.options['isShared'] && !!isFavorite === !!funcCall.options['isFavorite']) {
|
|
340
343
|
yield historyUtils.saveRun(funcCall);
|
|
341
344
|
const editedRun = this.store.allRuns.value.find((call) => call.id === funcCall.id);
|
|
342
345
|
editedRun.options['title'] = funcCall.options['title'];
|
|
@@ -444,4 +447,4 @@ export class HistoryPanel {
|
|
|
444
447
|
return this._root;
|
|
445
448
|
}
|
|
446
449
|
}
|
|
447
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sNkJBQTZCLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE1BQU0sRUFBRSxzQ0FBc0M7SUFDOUMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxRQUFRLEVBQUUsc0NBQXNDO0NBQ2pELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixXQUFXLEVBQUUsc0NBQXNDO0lBQ25ELFlBQVksRUFBRSxzQ0FBc0M7SUFDcEQsZ0JBQWdCLEVBQUUsc0NBQXNDO0lBQ3hELE1BQU0sRUFBRSxzQ0FBc0M7SUFDOUMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxRQUFRLEVBQUUsc0NBQXNDO0lBQ2hELGdCQUFnQixFQUFFLHNDQUFzQztDQUN6RCxDQUFDO0FBRUYsTUFBTSxpQkFBaUI7SUFBdkI7UUFDRSxxQkFBZ0IsR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLEVBSTNCLENBQUM7UUFFRixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBNENuRCxDQUFDO0lBMUNDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFB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QUM7UUFDckIsQ0FBQztLQUFBO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHd1IGZyb20gJ3d1JztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7aGlzdG9yeVV0aWxzfSBmcm9tICcuLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCAnLi4vLi4vY3NzL2hpc3RvcnktcGFuZWwuY3NzJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRVc2Vyc0lkcyA9IHtcbiAgJ1Rlc3QnOiAnY2ExZTY3MmUtZTNiZS00MGUwLWI3OWItZDJjNjhlNjhkMzgwJyxcbiAgJ0FkbWluJzogJzg3OGM0MmIwLTlhNTAtMTFlNi1jNTM3LTZiZjhlOWFiMDJlZScsXG4gICdTeXN0ZW0nOiAnM2UzMmM1ZmEtYWM5Yy00ZDM5LThiNGItNGRiM2U1NzZiM2MzJyxcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0R3JvdXBzSWRzID0ge1xuICAnQWxsIHVzZXJzJzogJ2E0YjQ1ODQwLTlhNTAtMTFlNi05Y2M5LTg1NDZiOGJmNjJlNicsXG4gICdEZXZlbG9wZXJzJzogJ2JhOWNkMTkxLTlhNTAtMTFlNi05Y2M5LTkxMGJmODI3ZjBhYicsXG4gICdOZWVkIHRvIGNyZWF0ZSc6ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLFxuICAnVGVzdCc6ICdjYTFlNjcyZS1lM2JlLTQwZTAtYjc5Yi04NTQ2YjhiZjYyZTYnLFxuICAnQWRtaW4nOiAnYTRiNDU4NDAtOWE1MC0xMWU2LWM1MzctNmJmOGU5YWIwMmVlJyxcbiAgJ1N5c3RlbSc6ICdhNGI0NTg0MC1hYzljLTRkMzktOGI0Yi00ZGIzZTU3NmIzYzMnLFxuICAnQWRtaW5pc3RyYXRvcnMnOiAnMWFiOGIzOGQtOWM0ZS00YjFlLTgxYzMtYWUyYmRlM2UxMmM1Jyxcbn07XG5cbmNsYXNzIEhpc3RvcnlQYW5lbFN0b3JlIHtcbiAgZmlsdGVyaW5nT3B0aW9ucyA9IHt0ZXh0OiAnJ30gYXMge1xuICAgIHRleHQ6IHN0cmluZyxcbiAgICBhdXRob3I/OiBERy5Vc2VyLFxuICAgIHN0YXJ0ZWRBZnRlcj86IGRheWpzLkRheWpzLFxuICB9O1xuXG4gIGFsbFJ1bnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERHLkZ1bmNDYWxsW10+KFtdKTtcblxuICBnZXQgbXlSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmFsbFJ1bnMudmFsdWUuZmlsdGVyKChydW4pID0+IHJ1bi5hdXRob3IuaWQgPT09IGdyb2suc2hlbGwudXNlci5pZCk7XG4gIH1cblxuICBnZXQgZmF2b3JpdGVSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmFsbFJ1bnMudmFsdWUuZmlsdGVyKChydW4pID0+IHJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10gJiYgIXJ1bi5vcHRpb25zWydpc0ltcG9ydGVkJ10pO1xuICB9XG5cbiAgZ2V0IHNoYXJlZFJ1bnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsUnVucy52YWx1ZS5maWx0ZXIoKHJ1bikgPT4gcnVuLm9wdGlvbnNbJ2lzU2hhcmVkJ10pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkTXlSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLm15UnVucy5maWx0ZXIoKHZhbCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRlZEFmdGVyID0gKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgPyB2YWwuc3RhcnRlZCA+IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgOiB0cnVlKTtcbiAgICAgIGNvbnN0IHRpdGxlQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWyd0aXRsZSddKSA/IHZhbC5vcHRpb25zWyd0aXRsZSddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG4gICAgICBjb25zdCBkZXNjQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IHZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG5cbiAgICAgIHJldHVybiAodGl0bGVDb250YWluc1RleHQgfHwgZGVzY0NvbnRhaW5zVGV4dCkgJiYgc3RhcnRlZEFmdGVyO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkRmF2b3JpdGVSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmZhdm9yaXRlUnVucy5maWx0ZXIoKHZhbCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRlZEFmdGVyID0gKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgPyB2YWwuc3RhcnRlZCA+IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgOiB0cnVlKTtcbiAgICAgIGNvbnN0IHRpdGxlQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWyd0aXRsZSddKSA/IHZhbC5vcHRpb25zWyd0aXRsZSddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG4gICAgICBjb25zdCBkZXNjQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IHZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG5cbiAgICAgIHJldHVybiAodGl0bGVDb250YWluc1RleHQgfHwgZGVzY0NvbnRhaW5zVGV4dCkgJiYgc3RhcnRlZEFmdGVyO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkU2hhcmVkUnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFyZWRSdW5zLmZpbHRlcigodmFsKSA9PiB7XG4gICAgICBjb25zdCBpc0F1dGhvcmVkID0gdGhpcy5maWx0ZXJpbmdPcHRpb25zLmF1dGhvciA/IHZhbC5hdXRob3IuaWQgPT09IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5hdXRob3IuaWQ6IHRydWU7XG4gICAgICBjb25zdCBzdGFydGVkQWZ0ZXIgPSAodGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA/IHZhbC5zdGFydGVkID4gdGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA6IHRydWUpO1xuICAgICAgY29uc3QgdGl0bGVDb250YWluc1RleHQgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0Lmxlbmd0aCkgPyB0cnVlIDogKCEhdmFsLm9wdGlvbnNbJ3RpdGxlJ10pID8gdmFsLm9wdGlvbnNbJ3RpdGxlJ10uaW5jbHVkZXModGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQpOiBmYWxzZTtcbiAgICAgIGNvbnN0IGRlc2NDb250YWluc1RleHQgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0Lmxlbmd0aCkgPyB0cnVlIDogKCEhdmFsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pID8gdmFsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uaW5jbHVkZXModGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQpOiBmYWxzZTtcblxuICAgICAgcmV0dXJuICh0aXRsZUNvbnRhaW5zVGV4dCB8fCBkZXNjQ29udGFpbnNUZXh0KSAmJiBzdGFydGVkQWZ0ZXIgJiYgaXNBdXRob3JlZDtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSGlzdG9yeVBhbmVsIHtcbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIHNob3VsZCBpcyBjaG9zZW4uIENvbnRhaW5zIEZ1bmNDYWxsIElEXG4gIHB1YmxpYyBvblJ1bkNob3NlbiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgYWRkZWQgdG8gZmF2b3JpdGVzXG4gIHB1YmxpYyBiZWZvcmVSdW5BZGRUb0Zhdm9yaXRlcyA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBhZGRlZCB0byBzaGFyZWRcbiAgcHVibGljIGJlZm9yZVJ1bkFkZFRvU2hhcmVkID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIHJlbW92ZWQgZnJvbSBmYXZvcml0ZXNcbiAgcHVibGljIGJlZm9yZVJ1blJlbW92ZUZyb21GYXZvcml0ZXMgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgcmVtb3ZlZCBmcm9tIHNoYXJlZFxuICBwdWJsaWMgYmVmb3JlUnVuUmVtb3ZlRnJvbVNoYXJlZCA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBkZWxldGVkXG4gIHB1YmxpYyBiZWZvcmVSdW5EZWxldGVkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyBhZGRlZCB0byBmYXZvcml0ZXNcbiAgcHVibGljIGFmdGVyUnVuQWRkVG9GYXZvcml0ZXMgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgYWRkZWQgdG8gc2hhcmVkXG4gIHB1YmxpYyBhZnRlclJ1bkFkZFRvU2hhcmVkID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIHJlbW92ZWQgZnJvbSBmYXZvcml0ZXNcbiAgcHVibGljIGFmdGVyUnVuUmVtb3ZlRnJvbUZhdm9yaXRlcyA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyByZW1vdmVkIGZyb20gc2hhcmVkXG4gIHB1YmxpYyBhZnRlclJ1blJlbW92ZUZyb21TaGFyZWQgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgZGVsZXRlZFxuICBwdWJsaWMgYWZ0ZXJSdW5EZWxldGVkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgc3RvcmUgPSBuZXcgSGlzdG9yeVBhbmVsU3RvcmUoKTtcblxuICBwcml2YXRlIG15UnVuc0ZpbHRlciA9IG5ldyBTdWJqZWN0PHRydWU+KCk7XG4gIHByaXZhdGUgZmF2UnVuc0ZpbHRlciA9IG5ldyBTdWJqZWN0PHRydWU+KCk7XG4gIHByaXZhdGUgc2hhcmVkUnVuc0ZpbHRlciA9IG5ldyBTdWJqZWN0PHRydWU+KCk7XG5cbiAgcHVibGljIGFsbFJ1bnNGZXRjaCA9IG5ldyBTdWJqZWN0PHRydWU+KCk7XG5cbiAgaGlzdG9yeVRhYiA9IHVpLmRpdigpO1xuICBmYXZUYWIgPSB1aS5kaXYoKTtcbiAgc2hhcmVkVGFiID0gdWkuZGl2KCk7XG4gIHRhYnMgPSB1aS50YWJDb250cm9sKHtcbiAgICAnSElTVE9SWSc6IHVpLmJveCh0aGlzLmhpc3RvcnlUYWIpLFxuICAgICdGQVZPUklURVMnOiB1aS5ib3godGhpcy5mYXZUYWIpLFxuICAgICdTSEFSRUQnOiB1aS5ib3godGhpcy5zaGFyZWRUYWIpLFxuICB9KTtcbiAgZmlsdGVyUGFuZSA9IHVpLmRpdigpO1xuXG4gIHByaXZhdGUgX3Jvb3QgPSB1aS5kaXZWKFtcbiAgICB1aS5wYW5lbChbXG4gICAgICB1aS5oMignSGlzdG9yeScpLFxuICAgICAgdGhpcy5maWx0ZXJQYW5lLFxuICAgIF0pLFxuICAgIHVpLmVsZW1lbnQoJ2RpdicsICdzcGxpdGJhci1ob3Jpem9udGFsJyksXG4gICAgdGhpcy50YWJzLnJvb3QsXG4gIF0sIHtzdHlsZToge3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnfX0pO1xuXG4gIG15Q2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICBmYXZvcml0ZUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgc2hhcmVkQ2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gIHVwZGF0ZUZpbHRlclBhbmUoKSB7XG4gICAgY29uc3QgYnVpbGRGaWx0ZXJQYW5lID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJpbmdUZXh0ID0gbmV3IFN1YmplY3QoKTtcblxuICAgICAgICBjb25zdCB0ZXh0SW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnU2VhcmNoJywgJycsICh2OiBzdHJpbmcpID0+IGZpbHRlcmluZ1RleHQubmV4dCh2KSk7XG4gICAgICAgIERHLmRlYm91bmNlKGZpbHRlcmluZ1RleHQuYXNPYnNlcnZhYmxlKCksIDYwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnN0b3JlLmZpbHRlcmluZ09wdGlvbnMudGV4dCA9IHRleHRJbnB1dC5zdHJpbmdWYWx1ZTtcbiAgICAgICAgICB0aGlzLm15UnVuc0ZpbHRlci5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5mYXZSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgICB0aGlzLnNoYXJlZFJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkYXRlSW5wdXQgPSB1aS5kYXRlSW5wdXQoJ1N0YXJ0ZWQgYWZ0ZXInLCBkYXlqcygpLnN1YnRyYWN0KDEsICd3ZWVrJyksICh2OiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgPSB2O1xuICAgICAgICAgIHRoaXMubXlSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgICB0aGlzLmZhdlJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICAgIHRoaXMuc2hhcmVkUnVuc0ZpbHRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRVc2VycyA9IE9iamVjdC52YWx1ZXMoZGVmYXVsdFVzZXJzSWRzKTtcbiAgICAgICAgY29uc3QgYWxsVXNlcnMgPSBhd2FpdCBncm9rLmRhcGkudXNlcnMubGlzdCgpIGFzIERHLlVzZXJbXTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRVc2VycyA9IGFsbFVzZXJzLmZpbHRlcigodXNlcikgPT4gIWRlZmF1bHRVc2Vycy5pbmNsdWRlcyh1c2VyLmlkKSk7XG5cbiAgICAgICAgY29uc3QgYXV0aG9ySW5wdXQgPSB1aS5jaG9pY2VJbnB1dDxERy5Vc2VyIHwgc3RyaW5nPignQXV0aG9yJywgJ0FueW9uZScsIFsnQW55b25lJywgLi4uZmlsdGVyZWRVc2Vyc10sICh2OiBERy5Vc2VyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5maWx0ZXJpbmdPcHRpb25zLmF1dGhvciA9ICh2ID09PSAnQW55b25lJykgPyB1bmRlZmluZWQgOiB2IGFzIERHLlVzZXI7XG4gICAgICAgICAgdGhpcy5zaGFyZWRSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGF1dGhvcklucHV0LnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICBkYXRlSW5wdXQuYWRkUGF0dGVybk1lbnUoJ2RhdGV0aW1lJyk7XG4gICAgICAgIGNvbnN0IGZvcm0gPSB1aS5kaXZWKFtcbiAgICAgICAgICB0ZXh0SW5wdXQsXG4gICAgICAgICAgZGF0ZUlucHV0LFxuICAgICAgICAgIGF1dGhvcklucHV0LFxuICAgICAgICBdLCAndWktZm9ybSB1aS1mb3JtLXdpZGUgdWktZm9ybS1sZWZ0Jyk7XG4gICAgICAgIGZvcm0uc3R5bGUucGFkZGluZyA9ICcwcHgnO1xuXG4gICAgICAgIHRoaXMudGFicy5vblRhYkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VGFiTmFtZSA9IHRoaXMudGFicy5jdXJyZW50UGFuZS5uYW1lO1xuICAgICAgICAgIGlmIChjdXJyZW50VGFiTmFtZSA9PT0gJ0hJU1RPUlknKSB7XG4gICAgICAgICAgICBkYXRlSW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudFRhYk5hbWUgPT09ICdGQVZPUklURVMnKSB7XG4gICAgICAgICAgICBkYXRlSW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudFRhYk5hbWUgPT09ICdTSEFSRUQnKSB7XG4gICAgICAgICAgICBkYXRlSW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmV3RmlsdGVyUGFuZSA9IGJ1aWxkRmlsdGVyUGFuZSgpO1xuICAgIHRoaXMuZmlsdGVyUGFuZS5yZXBsYWNlV2l0aChuZXdGaWx0ZXJQYW5lKTtcbiAgICB0aGlzLmZpbHRlclBhbmUgPSBuZXdGaWx0ZXJQYW5lO1xuICB9O1xuXG4gIHNob3dEZWxldGVSdW5EaWFsb2coZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgdWkuZGlhbG9nKHt0aXRsZTogJ0RlbGV0ZSBydW4nfSlcbiAgICAgIC5hZGQodWkuZGl2VGV4dCgnVGhlIGRlbGV0ZWQgcnVuIGlzIGltcG9zc2libGUgdG8gcmVzdG9yZS4gQXJlIHlvdSBzdXJlPycpKVxuICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICB0aGlzLmJlZm9yZVJ1bkRlbGV0ZWQubmV4dChmdW5jQ2FsbC5pZCk7XG4gICAgICAgIGF3YWl0IGhpc3RvcnlVdGlscy5kZWxldGVSdW4oZnVuY0NhbGwpO1xuICAgICAgICB0aGlzLmFmdGVyUnVuRGVsZXRlZC5uZXh0KGZ1bmNDYWxsLmlkKTtcbiAgICAgIH0pXG4gICAgICAuc2hvdyh7Y2VudGVyOiB0cnVlfSk7XG4gIH07XG5cbiAgdXBkYXRlU2hhcmVkUGFuZShzaGFyZWRSdW5zOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgY29uc3QgbmV3VGFiID0gKHNoYXJlZFJ1bnMubGVuZ3RoID4gMCkgPyB0aGlzLnJlbmRlclNoYXJlZENhcmRzKHNoYXJlZFJ1bnMpIDogdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIHNoYXJlZCcsICduby1lbGVtZW50cy1sYWJlbCcpO1xuICAgIHRoaXMuc2hhcmVkVGFiLnJlcGxhY2VXaXRoKG5ld1RhYik7XG4gICAgdGhpcy5zaGFyZWRUYWIgPSBuZXdUYWI7XG4gIH07XG5cbiAgdXBkYXRlRmF2b3JpdGVzUGFuZShmYXZvcml0ZVJ1bnM6IERHLkZ1bmNDYWxsW10pIHtcbiAgICBjb25zdCBuZXdUYWIgPSAoZmF2b3JpdGVSdW5zLmxlbmd0aCA+IDApID8gdGhpcy5yZW5kZXJGYXZvcml0ZUNhcmRzKGZhdm9yaXRlUnVucykgOiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBtYXJrZWQgYXMgZmF2b3JpdGVzJywgJ25vLWVsZW1lbnRzLWxhYmVsJyk7XG4gICAgdGhpcy5mYXZUYWIucmVwbGFjZVdpdGgobmV3VGFiKTtcbiAgICB0aGlzLmZhdlRhYiA9IG5ld1RhYjtcbiAgfTtcblxuICB1cGRhdGVNeVBhbmUobXlSdW5zOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgY29uc3QgbmV3VGFiID0gKG15UnVucy5sZW5ndGggPiAwKSA/IHRoaXMucmVuZGVySGlzdG9yeUNhcmRzKG15UnVucykgOiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBmb3VuZCBpbiBoaXN0b3J5JywgJ25vLWVsZW1lbnRzLWxhYmVsJyk7XG4gICAgdGhpcy5oaXN0b3J5VGFiLnJlcGxhY2VXaXRoKG5ld1RhYik7XG4gICAgdGhpcy5oaXN0b3J5VGFiID0gbmV3VGFiO1xuICB9O1xuXG4gIHJlbmRlckNhcmQoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgY29uc3QgaWNvbiA9IGZ1bmNDYWxsLmF1dGhvci5waWN0dXJlIGFzIEhUTUxFbGVtZW50O1xuICAgIGljb24uc3R5bGUud2lkdGggPSAnMjVweCc7XG4gICAgaWNvbi5zdHlsZS5oZWlnaHQgPSAnMjVweCc7XG4gICAgaWNvbi5zdHlsZS5mb250U2l6ZSA9ICcyMHB4JztcbiAgICBjb25zdCBjYXJkTGFiZWwgPSB1aS5sYWJlbChmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID8/IGZ1bmNDYWxsLmF1dGhvci5mcmllbmRseU5hbWUsIHtzdHlsZTogeydjb2xvcic6ICd2YXIoLS1ibHVlLTEpJ319KTtcbiAgICB1aS5iaW5kKGZ1bmNDYWxsLmF1dGhvciwgaWNvbik7XG5cbiAgICBjb25zdCBlZGl0SWNvbiA9IHVpLmljb25GQSgnZWRpdCcsIChldikgPT4ge1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnNob3dFZGl0RGlhbG9nKGZ1bmNDYWxsKTtcbiAgICB9KTtcbiAgICBlZGl0SWNvbi5jbGFzc0xpc3QuYWRkKCdjdi1mdW5jY2FsbC1jYXJkLWhvdmVyLWljb24nKTtcblxuICAgIGNvbnN0IGRlbGV0ZUljb24gPSB1aS5pY29uRkEoJ3RyYXNoLWFsdCcsIGFzeW5jIChldikgPT4ge1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnNob3dEZWxldGVSdW5EaWFsb2coZnVuY0NhbGwpO1xuICAgIH0sICdEZWxldGUgdGhlIHJ1bicpO1xuICAgIGRlbGV0ZUljb24uY2xhc3NMaXN0LmFkZCgnY3YtZnVuY2NhbGwtY2FyZC1ob3Zlci1pY29uJyk7XG5cbiAgICBjb25zdCBmYXZvcml0ZWRJY29uID0gdWkuaWNvbkZBKCdzdGFyJywgbnVsbCwgJ1VuZmF2b3JpdGUgdGhlIHJ1bicpO1xuICAgIGZhdm9yaXRlZEljb24uY2xhc3NMaXN0LmFkZCgnZmFzJywgJ2N2LWZ1bmNjYWxsLWNhcmQtZGVmLWljb24nKTtcblxuICAgIGNvbnN0IHNoYXJlZEljb24gPSB1aS5pY29uRkEoJ3NoYXJlLWFsdCcsIG51bGwsICdBZGQgdG8gc2hhcmVkJyk7XG4gICAgc2hhcmVkSWNvbi5jbGFzc0xpc3QuYWRkKCdmYXMnLCAnY3YtZnVuY2NhbGwtY2FyZC1kZWYtaWNvbicpO1xuICAgIHNoYXJlZEljb24uc3R5bGUuY29sb3IgPSAndmFyKC0tYmx1ZS0xKSc7XG5cbiAgICBjb25zdCBkYXRlU3RhcnRlZCA9IG5ldyBEYXRlKGZ1bmNDYWxsLnN0YXJ0ZWQudG9TdHJpbmcoKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLXVzJywge21vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICdudW1lcmljJ30pO1xuXG4gICAgY29uc3QgY2FyZCA9IHVpLmRpdkgoW1xuICAgICAgdWkuZGl2SChbXG4gICAgICAgIGljb24sXG4gICAgICAgIHVpLmRpdlYoW1xuICAgICAgICAgIGNhcmRMYWJlbCxcbiAgICAgICAgICB1aS5zcGFuKFtkYXRlU3RhcnRlZF0pLFxuICAgICAgICAgIC4uLihmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IFt1aS5kaXZUZXh0KGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10sICdkZXNjcmlwdGlvbicpXTogW10sXG4gICAgICAgIF0sICdjdi1jYXJkLWNvbnRlbnQnKSxcbiAgICAgIF0pLFxuICAgICAgdWkuZGl2SChbXG4gICAgICAgIGVkaXRJY29uLCBkZWxldGVJY29uLFxuICAgICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddKSA/IFtmYXZvcml0ZWRJY29uXSA6IFtdLFxuICAgICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkgPyBbc2hhcmVkSWNvbl06IFtdLFxuICAgICAgXSlcbiAgICBdLCAnY3YtZnVuY2NhbGwtY2FyZCcpO1xuXG4gICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgIHRoaXMub25SdW5DaG9zZW4ubmV4dChmdW5jQ2FsbC5pZCk7XG5cbiAgICAgIGNvbnN0IGFsbENhcmRzID0gWy4uLnRoaXMubXlDYXJkcywgLi4udGhpcy5mYXZvcml0ZUNhcmRzLCAuLi50aGlzLnNoYXJlZENhcmRzXTtcbiAgICAgIGFsbENhcmRzLmZvckVhY2goKGMpID0+IGMuY2xhc3NMaXN0LnJlbW92ZSgnY2xpY2tlZCcpKTtcblxuICAgICAgY2FyZC5jbGFzc0xpc3QuYWRkKCdjbGlja2VkJyk7XG4gICAgfSk7XG4gICAgdWkudG9vbHRpcC5iaW5kKGNhcmQsICgpID0+IHVpLnRhYmxlRnJvbU1hcCh7XG4gICAgICBBdXRob3I6IGdyb2suc2hlbGwudXNlci50b01hcmt1cCgpLFxuICAgICAgRGF0ZTogZGF0ZVN0YXJ0ZWQsXG4gICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSkgPyB7J1RpdGxlJzogZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXX06e30sXG4gICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSkgPyB7J0Rlc2NyaXB0aW9uJzogZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXX06e30sXG4gICAgfSkpO1xuICAgIHJldHVybiBjYXJkO1xuICB9XG5cbiAgc2hvd0VkaXREaWFsb2coZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgY29uc3QgZGxnID0gdWkuZGlhbG9nKHt0aXRsZTogJ0VkaXQgcnVuJ30pO1xuXG4gICAgbGV0IHRpdGxlID0gZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyAnJztcbiAgICBsZXQgZGVzY3JpcHRpb24gPSBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddID8/ICcnO1xuICAgIGNvbnN0IHRpdGxlSW5wdXQgPSB1aS5zdHJpbmdJbnB1dCgnVGl0bGUnLCB0aXRsZSwgKHM6IHN0cmluZykgPT4ge1xuICAgICAgdGl0bGUgPSBzO1xuICAgICAgaWYgKHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnVGl0bGUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QuYWRkKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIGRsZy5nZXRCdXR0b24oJ09LJykuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGl0bGVJbnB1dC5zZXRUb29sdGlwKCcnKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aXRsZUlucHV0LmlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Q0LWludmFsaWQnKSwgMTAwKTtcbiAgICAgICAgZGxnLmdldEJ1dHRvbignT0snKS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBpc1NoYXJlZCA9IGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPz8gZmFsc2U7XG4gICAgbGV0IGlzRmF2b3JpdGUgPSBmdW5jQ2FsbC5vcHRpb25zWydpc0Zhdm9yaXRlJ10gPz8gZmFsc2U7XG5cbiAgICBkbGcuYWRkKHVpLmZvcm0oW1xuICAgICAgdGl0bGVJbnB1dCxcbiAgICAgIHVpLnN0cmluZ0lucHV0KCdEZXNjcmlwdGlvbicsIGRlc2NyaXB0aW9uLCAoczogc3RyaW5nKSA9PiB7IGRlc2NyaXB0aW9uID0gczsgfSksXG4gICAgICB1aS5ib29sSW5wdXQoJ0Zhdm9yaXRlcycsIGlzRmF2b3JpdGUsIChiOiBib29sZWFuKSA9PiBpc0Zhdm9yaXRlID0gYiksXG4gICAgICB1aS5ib29sSW5wdXQoJ1NoYXJlJywgaXNTaGFyZWQsIChiOiBib29sZWFuKSA9PiBpc1NoYXJlZCA9IGIpLFxuICAgIF0pKVxuICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICBmdW5jQ2FsbCA9IGF3YWl0IGhpc3RvcnlVdGlscy5sb2FkUnVuKGZ1bmNDYWxsLmlkKTtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA9IHRpdGxlO1xuICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gZGVzY3JpcHRpb247XG5cbiAgICAgICAgaWYgKGlzU2hhcmVkID09PSBmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddICYmIGlzRmF2b3JpdGUgPT09IGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkge1xuICAgICAgICAgIGF3YWl0IGhpc3RvcnlVdGlscy5zYXZlUnVuKGZ1bmNDYWxsKTtcblxuICAgICAgICAgIGNvbnN0IGVkaXRlZFJ1biA9IHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maW5kKChjYWxsKSA9PiBjYWxsLmlkID09PSBmdW5jQ2FsbC5pZCk7XG4gICAgICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWyd0aXRsZSddID0gZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXTtcbiAgICAgICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddO1xuXG4gICAgICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNTaGFyZWQgJiYgIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10pIHtcbiAgICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddID0gaXNTaGFyZWQ7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCB0cnVlKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNTaGFyZWQgJiYgZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBpc1NoYXJlZDtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbVNoYXJlZChmdW5jQ2FsbCk7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGYXZvcml0ZSAmJiAhZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddKSB7XG4gICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddID0gaXNGYXZvcml0ZTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUnVuVG9GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0Zhdm9yaXRlICYmIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGlzRmF2b3JpdGU7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCB0cnVlKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnNob3coe2NlbnRlcjogdHJ1ZX0pO1xuICAgIHRpdGxlSW5wdXQuZmlyZUNoYW5nZWQoKTtcbiAgfVxuXG4gIHJlbmRlckZhdm9yaXRlQ2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5mYXZvcml0ZUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHRoaXMucmVuZGVyQ2FyZChmdW5jQ2FsbCkpO1xuICAgIHJldHVybiB1aS5kaXZWKHRoaXMuZmF2b3JpdGVDYXJkcyk7XG4gIH07XG5cbiAgcmVuZGVyU2hhcmVkQ2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5zaGFyZWRDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB0aGlzLnJlbmRlckNhcmQoZnVuY0NhbGwpKTtcbiAgICByZXR1cm4gdWkuZGl2Vih0aGlzLnNoYXJlZENhcmRzKTtcbiAgfTtcblxuICByZW5kZXJIaXN0b3J5Q2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5teUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHRoaXMucmVuZGVyQ2FyZChmdW5jQ2FsbCkpO1xuICAgIHJldHVybiB1aS5kaXZWKHRoaXMubXlDYXJkcywge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmdW5jOiBERy5GdW5jXG4gICkge1xuICAgIHRoaXMudGFicy5yb290LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIHRoaXMudGFicy5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcblxuICAgIHRoaXMubXlSdW5zRmlsdGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZU15UGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkTXlSdW5zKSk7XG4gICAgdGhpcy5mYXZSdW5zRmlsdGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUZhdm9yaXRlc1BhbmUodGhpcy5zdG9yZS5maWx0ZXJlZEZhdm9yaXRlUnVucykpO1xuICAgIHRoaXMuc2hhcmVkUnVuc0ZpbHRlci5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVTaGFyZWRQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRTaGFyZWRSdW5zKSk7XG5cbiAgICB0aGlzLnN0b3JlLmFsbFJ1bnMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTXlQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRNeVJ1bnMpO1xuICAgICAgdGhpcy51cGRhdGVGYXZvcml0ZXNQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRGYXZvcml0ZVJ1bnMpO1xuICAgICAgdGhpcy51cGRhdGVTaGFyZWRQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRTaGFyZWRSdW5zKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWxsUnVuc0ZldGNoLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCB0cnVlKTtcbiAgICAgIGNvbnN0IGFsbFJ1bnMgPSAoYXdhaXQgaGlzdG9yeVV0aWxzLnB1bGxSdW5zQnlOYW1lKHRoaXMuZnVuYy5uYW1lLCBbXSwge29yZGVyOiAnc3RhcnRlZCd9LCBbJ3Nlc3Npb24udXNlcicsICdvcHRpb25zJ10pKS5yZXZlcnNlKCk7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dChhbGxSdW5zKTtcbiAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsZWFyTWV0YWRhdGEgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICBpZiAoIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSAmJiAhZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkge1xuICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID0gbnVsbDtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5BZGRUb0Zhdm9yaXRlcy5zdWJzY3JpYmUoKGFkZGVkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gYWRkZWQuaWQpO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWyd0aXRsZSddID0gYWRkZWQub3B0aW9uc1sndGl0bGUnXTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IGFkZGVkLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ107XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1bkFkZFRvU2hhcmVkLnN1YnNjcmliZSgoYWRkZWQpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRlZFJ1biA9IHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maW5kKChjYWxsKSA9PiBjYWxsLmlkID09PSBhZGRlZC5pZCk7XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ3RpdGxlJ10gPSBhZGRlZC5vcHRpb25zWyd0aXRsZSddO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gYWRkZWQub3B0aW9uc1snZGVzY3JpcHRpb24nXTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1snaXNTaGFyZWQnXSA9IHRydWU7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1blJlbW92ZUZyb21GYXZvcml0ZXMuc3Vic2NyaWJlKChyZW1vdmVkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gcmVtb3ZlZC5pZCkhO1xuICAgICAgZWRpdGVkUnVuLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGZhbHNlO1xuICAgICAgY2xlYXJNZXRhZGF0YShlZGl0ZWRSdW4pO1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tU2hhcmVkLnN1YnNjcmliZSgocmVtb3ZlZCkgPT4ge1xuICAgICAgY29uc3QgZWRpdGVkUnVuID0gdGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbmQoKGNhbGwpID0+IGNhbGwuaWQgPT09IHJlbW92ZWQuaWQpITtcbiAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWydpc1NoYXJlZCddID0gZmFsc2U7XG4gICAgICBjbGVhck1ldGFkYXRhKGVkaXRlZFJ1bik7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1bkRlbGV0ZWQuc3Vic2NyaWJlKChpZCkgPT4ge1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbHRlcigoY2FsbCkgPT4gY2FsbC5pZCAhPT0gaWQpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWxsUnVuc0ZldGNoLm5leHQoKTtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlclBhbmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkUnVuVG9GYXZvcml0ZXMoY2FsbFRvRmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb0Zhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG5cbiAgICB0aGlzLmJlZm9yZVJ1bkFkZFRvRmF2b3JpdGVzLm5leHQoY2FsbFRvRmF2b3JpdGUpO1xuICAgIGNvbnN0IHNhdmVkRmF2b3JpdGUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLnNhdmUoY2FsbFRvRmF2b3JpdGUpO1xuICAgIHRoaXMuYWZ0ZXJSdW5BZGRUb0Zhdm9yaXRlcy5uZXh0KHNhdmVkRmF2b3JpdGUpO1xuICAgIHJldHVybiBzYXZlZEZhdm9yaXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb1VuZmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1sndGl0bGUnXSA9IG51bGw7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGZhbHNlO1xuXG4gICAgdGhpcy5iZWZvcmVSdW5SZW1vdmVGcm9tRmF2b3JpdGVzLm5leHQoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgY29uc3QgZmF2b3JpdGVTYXZlID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5zYXZlKGNhbGxUb1VuZmF2b3JpdGUpO1xuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tRmF2b3JpdGVzLm5leHQoZmF2b3JpdGVTYXZlKTtcbiAgICByZXR1cm4gZmF2b3JpdGVTYXZlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRSdW5Ub1NoYXJlZChjYWxsVG9TaGFyZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvU2hhcmUub3B0aW9uc1snaXNTaGFyZWQnXSA9IHRydWU7XG5cbiAgICB0aGlzLmJlZm9yZVJ1bkFkZFRvU2hhcmVkLm5leHQoY2FsbFRvU2hhcmUpO1xuXG4gICAgY29uc3QgYWxsR3JvdXAgPSBhd2FpdCBncm9rLmRhcGkuZ3JvdXBzLmZpbmQoZGVmYXVsdEdyb3Vwc0lkc1snQWxsIHVzZXJzJ10pO1xuXG4gICAgY29uc3QgZGZPdXRwdXRzID0gd3UoY2FsbFRvU2hhcmUub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcblxuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGRmT3V0cHV0cykge1xuICAgICAgY29uc3QgZGYgPSBjYWxsVG9TaGFyZS5vdXRwdXRzW291dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWU7XG4gICAgICBhd2FpdCBncm9rLmRhcGkucGVybWlzc2lvbnMuZ3JhbnQoZGYuZ2V0VGFibGVJbmZvKCksIGFsbEdyb3VwLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB3dShjYWxsVG9TaGFyZS5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpIHtcbiAgICAgIGNvbnN0IGRmID0gY2FsbFRvU2hhcmUuaW5wdXRzW2lucHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZTtcbiAgICAgIGF3YWl0IGdyb2suZGFwaS5wZXJtaXNzaW9ucy5ncmFudChkZi5nZXRUYWJsZUluZm8oKSwgYWxsR3JvdXAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlZFNoYXJlZCA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuc2F2ZShjYWxsVG9TaGFyZSk7XG5cbiAgICB0aGlzLmFmdGVyUnVuQWRkVG9TaGFyZWQubmV4dChzYXZlZFNoYXJlZCk7XG4gICAgcmV0dXJuIHNhdmVkU2hhcmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVSdW5Gcm9tU2hhcmVkKGNhbGxUb1Vuc2hhcmU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1Vuc2hhcmUub3B0aW9uc1sndGl0bGUnXSA9IG51bGw7XG4gICAgY2FsbFRvVW5zaGFyZS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBmYWxzZTtcblxuICAgIHRoaXMuYmVmb3JlUnVuUmVtb3ZlRnJvbVNoYXJlZC5uZXh0KGNhbGxUb1Vuc2hhcmUpO1xuICAgIGNvbnN0IHNhdmVkU2hhcmVkID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5zYXZlKGNhbGxUb1Vuc2hhcmUpO1xuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tU2hhcmVkLm5leHQoc2F2ZWRTaGFyZWQpO1xuICAgIHJldHVybiBzYXZlZFNoYXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm9vdDtcbiAgfVxufVxuIl19
|
|
450
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhpc3RvcnktcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sNkJBQTZCLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE1BQU0sRUFBRSxzQ0FBc0M7SUFDOUMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxRQUFRLEVBQUUsc0NBQXNDO0NBQ2pELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixXQUFXLEVBQUUsc0NBQXNDO0lBQ25ELFlBQVksRUFBRSxzQ0FBc0M7SUFDcEQsZ0JBQWdCLEVBQUUsc0NBQXNDO0lBQ3hELE1BQU0sRUFBRSxzQ0FBc0M7SUFDOUMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxRQUFRLEVBQUUsc0NBQXNDO0lBQ2hELGdCQUFnQixFQUFFLHNDQUFzQztDQUN6RCxDQUFDO0FBRUYsTUFBTSxpQkFBaUI7SUFBdkI7UUFDRSxxQkFBZ0IsR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLEVBSTNCLENBQUM7UUFFRixZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBNENuRCxDQUFDO0lBMUNDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFB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QUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEQsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztLQUFBO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHd1IGZyb20gJ3d1JztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7aGlzdG9yeVV0aWxzfSBmcm9tICcuLi9oaXN0b3J5LXV0aWxzJztcbmltcG9ydCAnLi4vLi4vY3NzL2hpc3RvcnktcGFuZWwuY3NzJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRVc2Vyc0lkcyA9IHtcbiAgJ1Rlc3QnOiAnY2ExZTY3MmUtZTNiZS00MGUwLWI3OWItZDJjNjhlNjhkMzgwJyxcbiAgJ0FkbWluJzogJzg3OGM0MmIwLTlhNTAtMTFlNi1jNTM3LTZiZjhlOWFiMDJlZScsXG4gICdTeXN0ZW0nOiAnM2UzMmM1ZmEtYWM5Yy00ZDM5LThiNGItNGRiM2U1NzZiM2MzJyxcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0R3JvdXBzSWRzID0ge1xuICAnQWxsIHVzZXJzJzogJ2E0YjQ1ODQwLTlhNTAtMTFlNi05Y2M5LTg1NDZiOGJmNjJlNicsXG4gICdEZXZlbG9wZXJzJzogJ2JhOWNkMTkxLTlhNTAtMTFlNi05Y2M5LTkxMGJmODI3ZjBhYicsXG4gICdOZWVkIHRvIGNyZWF0ZSc6ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLFxuICAnVGVzdCc6ICdjYTFlNjcyZS1lM2JlLTQwZTAtYjc5Yi04NTQ2YjhiZjYyZTYnLFxuICAnQWRtaW4nOiAnYTRiNDU4NDAtOWE1MC0xMWU2LWM1MzctNmJmOGU5YWIwMmVlJyxcbiAgJ1N5c3RlbSc6ICdhNGI0NTg0MC1hYzljLTRkMzktOGI0Yi00ZGIzZTU3NmIzYzMnLFxuICAnQWRtaW5pc3RyYXRvcnMnOiAnMWFiOGIzOGQtOWM0ZS00YjFlLTgxYzMtYWUyYmRlM2UxMmM1Jyxcbn07XG5cbmNsYXNzIEhpc3RvcnlQYW5lbFN0b3JlIHtcbiAgZmlsdGVyaW5nT3B0aW9ucyA9IHt0ZXh0OiAnJ30gYXMge1xuICAgIHRleHQ6IHN0cmluZyxcbiAgICBhdXRob3I/OiBERy5Vc2VyLFxuICAgIHN0YXJ0ZWRBZnRlcj86IGRheWpzLkRheWpzLFxuICB9O1xuXG4gIGFsbFJ1bnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERHLkZ1bmNDYWxsW10+KFtdKTtcblxuICBnZXQgbXlSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmFsbFJ1bnMudmFsdWUuZmlsdGVyKChydW4pID0+IHJ1bi5hdXRob3IuaWQgPT09IGdyb2suc2hlbGwudXNlci5pZCk7XG4gIH1cblxuICBnZXQgZmF2b3JpdGVSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmFsbFJ1bnMudmFsdWUuZmlsdGVyKChydW4pID0+IHJ1bi5vcHRpb25zWydpc0Zhdm9yaXRlJ10gJiYgIXJ1bi5vcHRpb25zWydpc0ltcG9ydGVkJ10pO1xuICB9XG5cbiAgZ2V0IHNoYXJlZFJ1bnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsUnVucy52YWx1ZS5maWx0ZXIoKHJ1bikgPT4gcnVuLm9wdGlvbnNbJ2lzU2hhcmVkJ10pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkTXlSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLm15UnVucy5maWx0ZXIoKHZhbCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRlZEFmdGVyID0gKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgPyB2YWwuc3RhcnRlZCA+IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgOiB0cnVlKTtcbiAgICAgIGNvbnN0IHRpdGxlQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWyd0aXRsZSddKSA/IHZhbC5vcHRpb25zWyd0aXRsZSddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG4gICAgICBjb25zdCBkZXNjQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IHZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG5cbiAgICAgIHJldHVybiAodGl0bGVDb250YWluc1RleHQgfHwgZGVzY0NvbnRhaW5zVGV4dCkgJiYgc3RhcnRlZEFmdGVyO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkRmF2b3JpdGVSdW5zKCkge1xuICAgIHJldHVybiB0aGlzLmZhdm9yaXRlUnVucy5maWx0ZXIoKHZhbCkgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRlZEFmdGVyID0gKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgPyB2YWwuc3RhcnRlZCA+IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5zdGFydGVkQWZ0ZXIgOiB0cnVlKTtcbiAgICAgIGNvbnN0IHRpdGxlQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWyd0aXRsZSddKSA/IHZhbC5vcHRpb25zWyd0aXRsZSddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG4gICAgICBjb25zdCBkZXNjQ29udGFpbnNUZXh0ID0gKCF0aGlzLmZpbHRlcmluZ09wdGlvbnMudGV4dC5sZW5ndGgpID8gdHJ1ZSA6ICghIXZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddKSA/IHZhbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLmluY2x1ZGVzKHRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0KTogZmFsc2U7XG5cbiAgICAgIHJldHVybiAodGl0bGVDb250YWluc1RleHQgfHwgZGVzY0NvbnRhaW5zVGV4dCkgJiYgc3RhcnRlZEFmdGVyO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpbHRlcmVkU2hhcmVkUnVucygpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFyZWRSdW5zLmZpbHRlcigodmFsKSA9PiB7XG4gICAgICBjb25zdCBpc0F1dGhvcmVkID0gdGhpcy5maWx0ZXJpbmdPcHRpb25zLmF1dGhvciA/IHZhbC5hdXRob3IuaWQgPT09IHRoaXMuZmlsdGVyaW5nT3B0aW9ucy5hdXRob3IuaWQ6IHRydWU7XG4gICAgICBjb25zdCBzdGFydGVkQWZ0ZXIgPSAodGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA/IHZhbC5zdGFydGVkID4gdGhpcy5maWx0ZXJpbmdPcHRpb25zLnN0YXJ0ZWRBZnRlciA6IHRydWUpO1xuICAgICAgY29uc3QgdGl0bGVDb250YWluc1RleHQgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0Lmxlbmd0aCkgPyB0cnVlIDogKCEhdmFsLm9wdGlvbnNbJ3RpdGxlJ10pID8gdmFsLm9wdGlvbnNbJ3RpdGxlJ10uaW5jbHVkZXModGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQpOiBmYWxzZTtcbiAgICAgIGNvbnN0IGRlc2NDb250YWluc1RleHQgPSAoIXRoaXMuZmlsdGVyaW5nT3B0aW9ucy50ZXh0Lmxlbmd0aCkgPyB0cnVlIDogKCEhdmFsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pID8gdmFsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uaW5jbHVkZXModGhpcy5maWx0ZXJpbmdPcHRpb25zLnRleHQpOiBmYWxzZTtcblxuICAgICAgcmV0dXJuICh0aXRsZUNvbnRhaW5zVGV4dCB8fCBkZXNjQ29udGFpbnNUZXh0KSAmJiBzdGFydGVkQWZ0ZXIgJiYgaXNBdXRob3JlZDtcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBNWV9QQU5FX0xBQkVMID0gJ0hJU1RPUlknIGFzIGNvbnN0O1xuY29uc3QgRkFWT1JJVEVTX0xBQkVMID0gJ0ZBVk9SSVRFUycgYXMgY29uc3Q7XG5jb25zdCBTSEFSRURfTEFCRUwgPSAnU0hBUkVEJyBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIEhpc3RvcnlQYW5lbCB7XG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBzaG91bGQgaXMgY2hvc2VuLiBDb250YWlucyBGdW5jQ2FsbCBJRFxuICBwdWJsaWMgb25SdW5DaG9zZW4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIGFkZGVkIHRvIGZhdm9yaXRlc1xuICBwdWJsaWMgYmVmb3JlUnVuQWRkVG9GYXZvcml0ZXMgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgYWRkZWQgdG8gc2hhcmVkXG4gIHB1YmxpYyBiZWZvcmVSdW5BZGRUb1NoYXJlZCA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyByZW1vdmVkIGZyb20gZmF2b3JpdGVzXG4gIHB1YmxpYyBiZWZvcmVSdW5SZW1vdmVGcm9tRmF2b3JpdGVzID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIHJlbW92ZWQgZnJvbSBzaGFyZWRcbiAgcHVibGljIGJlZm9yZVJ1blJlbW92ZUZyb21TaGFyZWQgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgZGVsZXRlZFxuICBwdWJsaWMgYmVmb3JlUnVuRGVsZXRlZCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgYWRkZWQgdG8gZmF2b3JpdGVzXG4gIHB1YmxpYyBhZnRlclJ1bkFkZFRvRmF2b3JpdGVzID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIGFkZGVkIHRvIHNoYXJlZFxuICBwdWJsaWMgYWZ0ZXJSdW5BZGRUb1NoYXJlZCA9IG5ldyBTdWJqZWN0PERHLkZ1bmNDYWxsPigpO1xuXG4gIC8vIEVtaXR0ZWQgd2hlbiBGdW5jQ2FsbCBpcyByZW1vdmVkIGZyb20gZmF2b3JpdGVzXG4gIHB1YmxpYyBhZnRlclJ1blJlbW92ZUZyb21GYXZvcml0ZXMgPSBuZXcgU3ViamVjdDxERy5GdW5jQ2FsbD4oKTtcblxuICAvLyBFbWl0dGVkIHdoZW4gRnVuY0NhbGwgaXMgcmVtb3ZlZCBmcm9tIHNoYXJlZFxuICBwdWJsaWMgYWZ0ZXJSdW5SZW1vdmVGcm9tU2hhcmVkID0gbmV3IFN1YmplY3Q8REcuRnVuY0NhbGw+KCk7XG5cbiAgLy8gRW1pdHRlZCB3aGVuIEZ1bmNDYWxsIGlzIGRlbGV0ZWRcbiAgcHVibGljIGFmdGVyUnVuRGVsZXRlZCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIHN0b3JlID0gbmV3IEhpc3RvcnlQYW5lbFN0b3JlKCk7XG5cbiAgcHJpdmF0ZSBteVJ1bnNGaWx0ZXIgPSBuZXcgU3ViamVjdDx0cnVlPigpO1xuICBwcml2YXRlIGZhdlJ1bnNGaWx0ZXIgPSBuZXcgU3ViamVjdDx0cnVlPigpO1xuICBwcml2YXRlIHNoYXJlZFJ1bnNGaWx0ZXIgPSBuZXcgU3ViamVjdDx0cnVlPigpO1xuXG4gIHB1YmxpYyBhbGxSdW5zRmV0Y2ggPSBuZXcgU3ViamVjdDx0cnVlPigpO1xuXG4gIGhpc3RvcnlUYWIgPSB1aS5kaXYoKTtcbiAgZmF2VGFiID0gdWkuZGl2KCk7XG4gIHNoYXJlZFRhYiA9IHVpLmRpdigpO1xuICBmaWx0ZXJQYW5lID0gdWkuZGl2KCk7XG4gIHRhYnMgPSB1aS50YWJDb250cm9sKHtcbiAgICBbTVlfUEFORV9MQUJFTF06IHVpLmJveCh0aGlzLmhpc3RvcnlUYWIpLFxuICAgIFtGQVZPUklURVNfTEFCRUxdOiB1aS5ib3godGhpcy5mYXZUYWIpLFxuICAgIFtTSEFSRURfTEFCRUxdOiB1aS5ib3godGhpcy5zaGFyZWRUYWIpLFxuICB9KTtcblxuICBwcml2YXRlIF9yb290ID0gdWkuZGl2VihbXG4gICAgdGhpcy50YWJzLnJvb3QsXG4gIF0sIHtzdHlsZToge3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnfX0pO1xuXG4gIG15Q2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuICBmYXZvcml0ZUNhcmRzID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgc2hhcmVkQ2FyZHMgPSBbXSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gIGJ1aWxkRmlsdGVyUGFuZShjdXJyZW50VGFiTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVyaW5nVGV4dCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAgIGNvbnN0IHRleHRJbnB1dCA9IHVpLnN0cmluZ0lucHV0KCdTZWFyY2gnLCAnJywgKHY6IHN0cmluZykgPT4gZmlsdGVyaW5nVGV4dC5uZXh0KHYpKTtcbiAgICAgIERHLmRlYm91bmNlKGZpbHRlcmluZ1RleHQuYXNPYnNlcnZhYmxlKCksIDYwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZS5maWx0ZXJpbmdPcHRpb25zLnRleHQgPSB0ZXh0SW5wdXQuc3RyaW5nVmFsdWU7XG4gICAgICAgIHRoaXMubXlSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgdGhpcy5mYXZSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgICAgdGhpcy5zaGFyZWRSdW5zRmlsdGVyLm5leHQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkYXRlSW5wdXQgPSB1aS5kYXRlSW5wdXQoJ1N0YXJ0ZWQgYWZ0ZXInLCBkYXlqcygpLnN1YnRyYWN0KDEsICd3ZWVrJyksICh2OiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLmZpbHRlcmluZ09wdGlvbnMuc3RhcnRlZEFmdGVyID0gdjtcbiAgICAgICAgdGhpcy5teVJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICB0aGlzLmZhdlJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgICB0aGlzLnNoYXJlZFJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRVc2VycyA9IE9iamVjdC52YWx1ZXMoZGVmYXVsdFVzZXJzSWRzKTtcbiAgICAgIGNvbnN0IGFsbFVzZXJzID0gYXdhaXQgZ3Jvay5kYXBpLnVzZXJzLmxpc3QoKSBhcyBERy5Vc2VyW107XG4gICAgICBjb25zdCBmaWx0ZXJlZFVzZXJzID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyKSA9PiAhZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIuaWQpKTtcblxuICAgICAgY29uc3QgYXV0aG9ySW5wdXQgPSB1aS5jaG9pY2VJbnB1dDxERy5Vc2VyIHwgc3RyaW5nPignQXV0aG9yJywgJ0FueW9uZScsIFsnQW55b25lJywgLi4uZmlsdGVyZWRVc2Vyc10sICh2OiBERy5Vc2VyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZmlsdGVyaW5nT3B0aW9ucy5hdXRob3IgPSAodiA9PT0gJ0FueW9uZScpID8gdW5kZWZpbmVkIDogdiBhcyBERy5Vc2VyO1xuICAgICAgICB0aGlzLnNoYXJlZFJ1bnNGaWx0ZXIubmV4dCgpO1xuICAgICAgfSk7XG4gICAgICBhdXRob3JJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgIGRhdGVJbnB1dC5hZGRQYXR0ZXJuTWVudSgnZGF0ZXRpbWUnKTtcbiAgICAgIGNvbnN0IGZvcm0gPSB1aS5kaXZWKFtcbiAgICAgICAgdGV4dElucHV0LFxuICAgICAgICBkYXRlSW5wdXQsXG4gICAgICAgIGF1dGhvcklucHV0LFxuICAgICAgXSwgJ3VpLWZvcm0gdWktZm9ybS13aWRlIHVpLWZvcm0tbGVmdCcpO1xuXG4gICAgICBpZiAoY3VycmVudFRhYk5hbWUgPT09IE1ZX1BBTkVfTEFCRUwpIHtcbiAgICAgICAgZGF0ZUlucHV0LnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRUYWJOYW1lID09PSBGQVZPUklURVNfTEFCRUwpIHtcbiAgICAgICAgZGF0ZUlucHV0LnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRUYWJOYW1lID09PSBTSEFSRURfTEFCRUwpIHtcbiAgICAgICAgZGF0ZUlucHV0LnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgYXV0aG9ySW5wdXQucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9ybTtcbiAgICB9KTtcbiAgfTtcblxuICBteVBhbmVGaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyUGFuZShNWV9QQU5FX0xBQkVMKTtcbiAgZmF2b3JpdGVzUGFuZUZpbHRlciA9dGhpcy5idWlsZEZpbHRlclBhbmUoRkFWT1JJVEVTX0xBQkVMKTtcbiAgc2hhcmVkUGFuZUZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXJQYW5lKFNIQVJFRF9MQUJFTCk7XG5cbiAgc2hvd0RlbGV0ZVJ1bkRpYWxvZyhmdW5jQ2FsbDogREcuRnVuY0NhbGwpIHtcbiAgICB1aS5kaWFsb2coe3RpdGxlOiAnRGVsZXRlIHJ1bid9KVxuICAgICAgLmFkZCh1aS5kaXZUZXh0KCdUaGUgZGVsZXRlZCBydW4gaXMgaW1wb3NzaWJsZSB0byByZXN0b3JlLiBBcmUgeW91IHN1cmU/JykpXG4gICAgICAub25PSyhhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMuYmVmb3JlUnVuRGVsZXRlZC5uZXh0KGZ1bmNDYWxsLmlkKTtcbiAgICAgICAgYXdhaXQgaGlzdG9yeVV0aWxzLmRlbGV0ZVJ1bihmdW5jQ2FsbCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJSdW5EZWxldGVkLm5leHQoZnVuY0NhbGwuaWQpO1xuICAgICAgfSlcbiAgICAgIC5zaG93KHtjZW50ZXI6IHRydWV9KTtcbiAgfTtcblxuICB1cGRhdGVTaGFyZWRQYW5lKHNoYXJlZFJ1bnM6IERHLkZ1bmNDYWxsW10pIHtcbiAgICBjb25zdCBuZXdUYWIgPSAoc2hhcmVkUnVucy5sZW5ndGggPiAwKSA/IHRoaXMucmVuZGVyU2hhcmVkQ2FyZHMoc2hhcmVkUnVucykgOiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBtYXJrZWQgYXMgc2hhcmVkJywgJ25vLWVsZW1lbnRzLWxhYmVsJyk7XG4gICAgdGhpcy5zaGFyZWRUYWIucmVwbGFjZVdpdGgodWkuZGl2VihbXG4gICAgICB0aGlzLnNoYXJlZFBhbmVGaWx0ZXIsXG4gICAgICB1aS5lbGVtZW50KCdkaXYnLCAnc3BsaXRiYXItaG9yaXpvbnRhbCcpLFxuICAgICAgbmV3VGFiXSkpO1xuICAgIHRoaXMuc2hhcmVkVGFiID0gbmV3VGFiO1xuICB9O1xuXG4gIHVwZGF0ZUZhdm9yaXRlc1BhbmUoZmF2b3JpdGVSdW5zOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgY29uc3QgbmV3VGFiID0gKGZhdm9yaXRlUnVucy5sZW5ndGggPiAwKSA/IHRoaXMucmVuZGVyRmF2b3JpdGVDYXJkcyhmYXZvcml0ZVJ1bnMpIDogdWkuZGl2VGV4dCgnTm8gcnVucyBhcmUgbWFya2VkIGFzIGZhdm9yaXRlcycsICduby1lbGVtZW50cy1sYWJlbCcpO1xuICAgIHRoaXMuZmF2VGFiLnJlcGxhY2VXaXRoKHVpLmRpdlYoW1xuICAgICAgdGhpcy5mYXZvcml0ZXNQYW5lRmlsdGVyLFxuICAgICAgdWkuZWxlbWVudCgnZGl2JywgJ3NwbGl0YmFyLWhvcml6b250YWwnKSxcbiAgICAgIG5ld1RhYlxuICAgIF0pKTtcbiAgICB0aGlzLmZhdlRhYiA9IG5ld1RhYjtcbiAgfTtcblxuICB1cGRhdGVNeVBhbmUobXlSdW5zOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgY29uc3QgbmV3VGFiID0gKG15UnVucy5sZW5ndGggPiAwKSA/IHRoaXMucmVuZGVySGlzdG9yeUNhcmRzKG15UnVucykgOiB1aS5kaXZUZXh0KCdObyBydW5zIGFyZSBmb3VuZCBpbiBoaXN0b3J5JywgJ25vLWVsZW1lbnRzLWxhYmVsJyk7XG4gICAgdGhpcy5oaXN0b3J5VGFiLnJlcGxhY2VXaXRoKHVpLmRpdlYoW1xuICAgICAgdGhpcy5teVBhbmVGaWx0ZXIsXG4gICAgICB1aS5lbGVtZW50KCdkaXYnLCAnc3BsaXRiYXItaG9yaXpvbnRhbCcpLFxuICAgICAgbmV3VGFiXG4gICAgXSkpO1xuICAgIHRoaXMuaGlzdG9yeVRhYiA9IG5ld1RhYjtcbiAgfTtcblxuICByZW5kZXJDYXJkKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGljb24gPSBmdW5jQ2FsbC5hdXRob3IucGljdHVyZSBhcyBIVE1MRWxlbWVudDtcbiAgICBpY29uLnN0eWxlLndpZHRoID0gJzI1cHgnO1xuICAgIGljb24uc3R5bGUuaGVpZ2h0ID0gJzI1cHgnO1xuICAgIGljb24uc3R5bGUuZm9udFNpemUgPSAnMjBweCc7XG4gICAgY29uc3QgY2FyZExhYmVsID0gdWkubGFiZWwoZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXSA/PyBmdW5jQ2FsbC5hdXRob3IuZnJpZW5kbHlOYW1lLCB7c3R5bGU6IHsnY29sb3InOiAndmFyKC0tYmx1ZS0xKSd9fSk7XG4gICAgdWkuYmluZChmdW5jQ2FsbC5hdXRob3IsIGljb24pO1xuXG4gICAgY29uc3QgZWRpdEljb24gPSB1aS5pY29uRkEoJ2VkaXQnLCAoZXYpID0+IHtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zaG93RWRpdERpYWxvZyhmdW5jQ2FsbCk7XG4gICAgfSk7XG4gICAgZWRpdEljb24uY2xhc3NMaXN0LmFkZCgnY3YtZnVuY2NhbGwtY2FyZC1ob3Zlci1pY29uJyk7XG5cbiAgICBjb25zdCBkZWxldGVJY29uID0gdWkuaWNvbkZBKCd0cmFzaC1hbHQnLCBhc3luYyAoZXYpID0+IHtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zaG93RGVsZXRlUnVuRGlhbG9nKGZ1bmNDYWxsKTtcbiAgICB9LCAnRGVsZXRlIHRoZSBydW4nKTtcbiAgICBkZWxldGVJY29uLmNsYXNzTGlzdC5hZGQoJ2N2LWZ1bmNjYWxsLWNhcmQtaG92ZXItaWNvbicpO1xuXG4gICAgY29uc3QgZmF2b3JpdGVkSWNvbiA9IHVpLmljb25GQSgnc3RhcicsIG51bGwsICdVbmZhdm9yaXRlIHRoZSBydW4nKTtcbiAgICBmYXZvcml0ZWRJY29uLmNsYXNzTGlzdC5hZGQoJ2ZhcycsICdjdi1mdW5jY2FsbC1jYXJkLWRlZi1pY29uJyk7XG5cbiAgICBjb25zdCBzaGFyZWRJY29uID0gdWkuaWNvbkZBKCdzaGFyZS1hbHQnLCBudWxsLCAnQWRkIHRvIHNoYXJlZCcpO1xuICAgIHNoYXJlZEljb24uY2xhc3NMaXN0LmFkZCgnZmFzJywgJ2N2LWZ1bmNjYWxsLWNhcmQtZGVmLWljb24nKTtcbiAgICBzaGFyZWRJY29uLnN0eWxlLmNvbG9yID0gJ3ZhcigtLWJsdWUtMSknO1xuXG4gICAgY29uc3QgZGF0ZVN0YXJ0ZWQgPSBuZXcgRGF0ZShmdW5jQ2FsbC5zdGFydGVkLnRvU3RyaW5nKCkpLnRvTG9jYWxlU3RyaW5nKCdlbi11cycsIHttb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnbnVtZXJpYyd9KTtcblxuICAgIGNvbnN0IGNhcmQgPSB1aS5kaXZIKFtcbiAgICAgIHVpLmRpdkgoW1xuICAgICAgICBpY29uLFxuICAgICAgICB1aS5kaXZWKFtcbiAgICAgICAgICBjYXJkTGFiZWwsXG4gICAgICAgICAgdWkuc3BhbihbZGF0ZVN0YXJ0ZWRdKSxcbiAgICAgICAgICAuLi4oZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSkgPyBbdWkuZGl2VGV4dChmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddLCAnZGVzY3JpcHRpb24nKV06IFtdLFxuICAgICAgICBdLCAnY3YtY2FyZC1jb250ZW50JyksXG4gICAgICBdKSxcbiAgICAgIHVpLmRpdkgoW1xuICAgICAgICBlZGl0SWNvbiwgZGVsZXRlSWNvbixcbiAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkgPyBbZmF2b3JpdGVkSWNvbl0gOiBbXSxcbiAgICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10pID8gW3NoYXJlZEljb25dOiBbXSxcbiAgICAgIF0pXG4gICAgXSwgJ2N2LWZ1bmNjYWxsLWNhcmQnKTtcblxuICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLm9uUnVuQ2hvc2VuLm5leHQoZnVuY0NhbGwuaWQpO1xuXG4gICAgICBjb25zdCBhbGxDYXJkcyA9IFsuLi50aGlzLm15Q2FyZHMsIC4uLnRoaXMuZmF2b3JpdGVDYXJkcywgLi4udGhpcy5zaGFyZWRDYXJkc107XG4gICAgICBhbGxDYXJkcy5mb3JFYWNoKChjKSA9PiBjLmNsYXNzTGlzdC5yZW1vdmUoJ2NsaWNrZWQnKSk7XG5cbiAgICAgIGNhcmQuY2xhc3NMaXN0LmFkZCgnY2xpY2tlZCcpO1xuICAgIH0pO1xuICAgIHVpLnRvb2x0aXAuYmluZChjYXJkLCAoKSA9PiB1aS50YWJsZUZyb21NYXAoe1xuICAgICAgQXV0aG9yOiBncm9rLnNoZWxsLnVzZXIudG9NYXJrdXAoKSxcbiAgICAgIERhdGU6IGRhdGVTdGFydGVkLFxuICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10pID8geydUaXRsZSc6IGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ119Ont9LFxuICAgICAgLi4uKGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pID8geydEZXNjcmlwdGlvbic6IGZ1bmNDYWxsLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ119Ont9LFxuICAgIH0pKTtcbiAgICByZXR1cm4gY2FyZDtcbiAgfVxuXG4gIHNob3dFZGl0RGlhbG9nKGZ1bmNDYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIGNvbnN0IGRsZyA9IHVpLmRpYWxvZyh7dGl0bGU6ICdFZGl0IHJ1bid9KTtcblxuICAgIGxldCB0aXRsZSA9IGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPz8gJyc7XG4gICAgbGV0IGRlc2NyaXB0aW9uID0gZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSA/PyAnJztcbiAgICBjb25zdCB0aXRsZUlucHV0ID0gdWkuc3RyaW5nSW5wdXQoJ1RpdGxlJywgdGl0bGUsIChzOiBzdHJpbmcpID0+IHtcbiAgICAgIHRpdGxlID0gcztcbiAgICAgIGlmIChzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aXRsZUlucHV0LnNldFRvb2x0aXAoJ1RpdGxlIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRpdGxlSW5wdXQuaW5wdXQuY2xhc3NMaXN0LmFkZCgnZDQtaW52YWxpZCcpLCAxMDApO1xuICAgICAgICBkbGcuZ2V0QnV0dG9uKCdPSycpLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRpdGxlSW5wdXQuc2V0VG9vbHRpcCgnJyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGl0bGVJbnB1dC5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdkNC1pbnZhbGlkJyksIDEwMCk7XG4gICAgICAgIGRsZy5nZXRCdXR0b24oJ09LJykuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgaXNTaGFyZWQgPSBmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddID8/IGZhbHNlO1xuICAgIGxldCBpc0Zhdm9yaXRlID0gZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddID8/IGZhbHNlO1xuXG4gICAgZGxnLmFkZCh1aS5mb3JtKFtcbiAgICAgIHRpdGxlSW5wdXQsXG4gICAgICB1aS5zdHJpbmdJbnB1dCgnRGVzY3JpcHRpb24nLCBkZXNjcmlwdGlvbiwgKHM6IHN0cmluZykgPT4geyBkZXNjcmlwdGlvbiA9IHM7IH0pLFxuICAgICAgdWkuYm9vbElucHV0KCdGYXZvcml0ZXMnLCBpc0Zhdm9yaXRlLCAoYjogYm9vbGVhbikgPT4gaXNGYXZvcml0ZSA9IGIpLFxuICAgICAgdWkuYm9vbElucHV0KCdTaGFyZScsIGlzU2hhcmVkLCAoYjogYm9vbGVhbikgPT4gaXNTaGFyZWQgPSBiKSxcbiAgICBdKSlcbiAgICAgIC5vbk9LKGFzeW5jICgpID0+IHtcbiAgICAgICAgZnVuY0NhbGwgPSBhd2FpdCBoaXN0b3J5VXRpbHMubG9hZFJ1bihmdW5jQ2FsbC5pZCk7XG4gICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ3RpdGxlJ10gPSB0aXRsZTtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IGRlc2NyaXB0aW9uO1xuXG4gICAgICAgIGlmICghIWlzU2hhcmVkID09PSAhIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gJiYgISFpc0Zhdm9yaXRlID09PSAhIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkge1xuICAgICAgICAgIGF3YWl0IGhpc3RvcnlVdGlscy5zYXZlUnVuKGZ1bmNDYWxsKTtcblxuICAgICAgICAgIGNvbnN0IGVkaXRlZFJ1biA9IHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maW5kKChjYWxsKSA9PiBjYWxsLmlkID09PSBmdW5jQ2FsbC5pZCk7XG4gICAgICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWyd0aXRsZSddID0gZnVuY0NhbGwub3B0aW9uc1sndGl0bGUnXTtcbiAgICAgICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10gPSBmdW5jQ2FsbC5vcHRpb25zWydkZXNjcmlwdGlvbiddO1xuXG4gICAgICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNTaGFyZWQgJiYgIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10pIHtcbiAgICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWydpc1NoYXJlZCddID0gaXNTaGFyZWQ7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCB0cnVlKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZFJ1blRvU2hhcmVkKGZ1bmNDYWxsKTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNTaGFyZWQgJiYgZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBpc1NoYXJlZDtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlUnVuRnJvbVNoYXJlZChmdW5jQ2FsbCk7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNGYXZvcml0ZSAmJiAhZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddKSB7XG4gICAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snaXNGYXZvcml0ZSddID0gaXNGYXZvcml0ZTtcbiAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy50YWJzLnJvb3QsIHRydWUpO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYWRkUnVuVG9GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0Zhdm9yaXRlICYmIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSkge1xuICAgICAgICAgIGZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGlzRmF2b3JpdGU7XG4gICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMudGFicy5yb290LCB0cnVlKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZVJ1bkZyb21GYXZvcml0ZXMoZnVuY0NhbGwpO1xuICAgICAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnRhYnMucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnNob3coe2NlbnRlcjogdHJ1ZX0pO1xuICAgIHRpdGxlSW5wdXQuZmlyZUNoYW5nZWQoKTtcbiAgfVxuXG4gIHJlbmRlckZhdm9yaXRlQ2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5mYXZvcml0ZUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHRoaXMucmVuZGVyQ2FyZChmdW5jQ2FsbCkpO1xuICAgIHJldHVybiB1aS5kaXZWKHRoaXMuZmF2b3JpdGVDYXJkcyk7XG4gIH07XG5cbiAgcmVuZGVyU2hhcmVkQ2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5zaGFyZWRDYXJkcyA9IGZ1bmNDYWxscy5tYXAoKGZ1bmNDYWxsKSA9PiB0aGlzLnJlbmRlckNhcmQoZnVuY0NhbGwpKTtcbiAgICByZXR1cm4gdWkuZGl2Vih0aGlzLnNoYXJlZENhcmRzKTtcbiAgfTtcblxuICByZW5kZXJIaXN0b3J5Q2FyZHMoZnVuY0NhbGxzOiBERy5GdW5jQ2FsbFtdKSB7XG4gICAgdGhpcy5teUNhcmRzID0gZnVuY0NhbGxzLm1hcCgoZnVuY0NhbGwpID0+IHRoaXMucmVuZGVyQ2FyZChmdW5jQ2FsbCkpO1xuICAgIHJldHVybiB1aS5kaXZWKHRoaXMubXlDYXJkcywge3N0eWxlOiB7aGVpZ2h0OiAnMTAwJSd9fSk7XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmdW5jOiBERy5GdW5jXG4gICkge1xuICAgIHRoaXMudGFicy5yb290LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgIHRoaXMudGFicy5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcblxuICAgIHRoaXMubXlSdW5zRmlsdGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZU15UGFuZSh0aGlzLnN0b3JlLmZpbHRlcmVkTXlSdW5zKSk7XG4gICAgdGhpcy5mYXZSdW5zRmlsdGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUZhdm9yaXRlc1BhbmUodGhpcy5zdG9yZS5maWx0ZXJlZEZhdm9yaXRlUnVucykpO1xuICAgIHRoaXMuc2hhcmVkUnVuc0ZpbHRlci5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVTaGFyZWRQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRTaGFyZWRSdW5zKSk7XG5cbiAgICB0aGlzLnN0b3JlLmFsbFJ1bnMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlTXlQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRNeVJ1bnMpO1xuICAgICAgdGhpcy51cGRhdGVGYXZvcml0ZXNQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRGYXZvcml0ZVJ1bnMpO1xuICAgICAgdGhpcy51cGRhdGVTaGFyZWRQYW5lKHRoaXMuc3RvcmUuZmlsdGVyZWRTaGFyZWRSdW5zKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWxsUnVuc0ZldGNoLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3IodGhpcy5yb290LCB0cnVlKTtcbiAgICAgIGNvbnN0IGFsbFJ1bnMgPSAoYXdhaXQgaGlzdG9yeVV0aWxzLnB1bGxSdW5zQnlOYW1lKHRoaXMuZnVuYy5uYW1lLCBbXSwge29yZGVyOiAnc3RhcnRlZCd9LCBbJ3Nlc3Npb24udXNlcicsICdvcHRpb25zJ10pKS5yZXZlcnNlKCk7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dChhbGxSdW5zKTtcbiAgICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcih0aGlzLnJvb3QsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsZWFyTWV0YWRhdGEgPSAoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSA9PiB7XG4gICAgICBpZiAoIWZ1bmNDYWxsLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSAmJiAhZnVuY0NhbGwub3B0aW9uc1snaXNTaGFyZWQnXSkge1xuICAgICAgICBmdW5jQ2FsbC5vcHRpb25zWyd0aXRsZSddID0gbnVsbDtcbiAgICAgICAgZnVuY0NhbGwub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5BZGRUb0Zhdm9yaXRlcy5zdWJzY3JpYmUoKGFkZGVkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gYWRkZWQuaWQpO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWyd0aXRsZSddID0gYWRkZWQub3B0aW9uc1sndGl0bGUnXTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1snZGVzY3JpcHRpb24nXSA9IGFkZGVkLm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ107XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1bkFkZFRvU2hhcmVkLnN1YnNjcmliZSgoYWRkZWQpID0+IHtcbiAgICAgIGNvbnN0IGVkaXRlZFJ1biA9IHRoaXMuc3RvcmUuYWxsUnVucy52YWx1ZS5maW5kKChjYWxsKSA9PiBjYWxsLmlkID09PSBhZGRlZC5pZCk7XG4gICAgICBlZGl0ZWRSdW4hLm9wdGlvbnNbJ3RpdGxlJ10gPSBhZGRlZC5vcHRpb25zWyd0aXRsZSddO1xuICAgICAgZWRpdGVkUnVuIS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gYWRkZWQub3B0aW9uc1snZGVzY3JpcHRpb24nXTtcbiAgICAgIGVkaXRlZFJ1biEub3B0aW9uc1snaXNTaGFyZWQnXSA9IHRydWU7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1blJlbW92ZUZyb21GYXZvcml0ZXMuc3Vic2NyaWJlKChyZW1vdmVkKSA9PiB7XG4gICAgICBjb25zdCBlZGl0ZWRSdW4gPSB0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUuZmluZCgoY2FsbCkgPT4gY2FsbC5pZCA9PT0gcmVtb3ZlZC5pZCkhO1xuICAgICAgZWRpdGVkUnVuLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGZhbHNlO1xuICAgICAgY2xlYXJNZXRhZGF0YShlZGl0ZWRSdW4pO1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tU2hhcmVkLnN1YnNjcmliZSgocmVtb3ZlZCkgPT4ge1xuICAgICAgY29uc3QgZWRpdGVkUnVuID0gdGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbmQoKGNhbGwpID0+IGNhbGwuaWQgPT09IHJlbW92ZWQuaWQpITtcbiAgICAgIGVkaXRlZFJ1bi5vcHRpb25zWydpc1NoYXJlZCddID0gZmFsc2U7XG4gICAgICBjbGVhck1ldGFkYXRhKGVkaXRlZFJ1bik7XG4gICAgICB0aGlzLnN0b3JlLmFsbFJ1bnMubmV4dCh0aGlzLnN0b3JlLmFsbFJ1bnMudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZnRlclJ1bkRlbGV0ZWQuc3Vic2NyaWJlKChpZCkgPT4ge1xuICAgICAgdGhpcy5zdG9yZS5hbGxSdW5zLm5leHQodGhpcy5zdG9yZS5hbGxSdW5zLnZhbHVlLmZpbHRlcigoY2FsbCkgPT4gY2FsbC5pZCAhPT0gaWQpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWxsUnVuc0ZldGNoLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkUnVuVG9GYXZvcml0ZXMoY2FsbFRvRmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb0Zhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IHRydWU7XG5cbiAgICB0aGlzLmJlZm9yZVJ1bkFkZFRvRmF2b3JpdGVzLm5leHQoY2FsbFRvRmF2b3JpdGUpO1xuICAgIGNvbnN0IHNhdmVkRmF2b3JpdGUgPSBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmFsbFBhY2thZ2VWZXJzaW9ucygpLnNhdmUoY2FsbFRvRmF2b3JpdGUpO1xuICAgIHRoaXMuYWZ0ZXJSdW5BZGRUb0Zhdm9yaXRlcy5uZXh0KHNhdmVkRmF2b3JpdGUpO1xuICAgIHJldHVybiBzYXZlZEZhdm9yaXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVSdW5Gcm9tRmF2b3JpdGVzKGNhbGxUb1VuZmF2b3JpdGU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1VuZmF2b3JpdGUub3B0aW9uc1sndGl0bGUnXSA9IG51bGw7XG4gICAgY2FsbFRvVW5mYXZvcml0ZS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbmZhdm9yaXRlLm9wdGlvbnNbJ2lzRmF2b3JpdGUnXSA9IGZhbHNlO1xuXG4gICAgdGhpcy5iZWZvcmVSdW5SZW1vdmVGcm9tRmF2b3JpdGVzLm5leHQoY2FsbFRvVW5mYXZvcml0ZSk7XG4gICAgY29uc3QgZmF2b3JpdGVTYXZlID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5zYXZlKGNhbGxUb1VuZmF2b3JpdGUpO1xuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tRmF2b3JpdGVzLm5leHQoZmF2b3JpdGVTYXZlKTtcbiAgICByZXR1cm4gZmF2b3JpdGVTYXZlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRSdW5Ub1NoYXJlZChjYWxsVG9TaGFyZTogREcuRnVuY0NhbGwpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgY2FsbFRvU2hhcmUub3B0aW9uc1snaXNTaGFyZWQnXSA9IHRydWU7XG5cbiAgICB0aGlzLmJlZm9yZVJ1bkFkZFRvU2hhcmVkLm5leHQoY2FsbFRvU2hhcmUpO1xuXG4gICAgY29uc3QgYWxsR3JvdXAgPSBhd2FpdCBncm9rLmRhcGkuZ3JvdXBzLmZpbmQoZGVmYXVsdEdyb3Vwc0lkc1snQWxsIHVzZXJzJ10pO1xuXG4gICAgY29uc3QgZGZPdXRwdXRzID0gd3UoY2FsbFRvU2hhcmUub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0LnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcblxuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGRmT3V0cHV0cykge1xuICAgICAgY29uc3QgZGYgPSBjYWxsVG9TaGFyZS5vdXRwdXRzW291dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWU7XG4gICAgICBhd2FpdCBncm9rLmRhcGkucGVybWlzc2lvbnMuZ3JhbnQoZGYuZ2V0VGFibGVJbmZvKCksIGFsbEdyb3VwLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB3dShjYWxsVG9TaGFyZS5pbnB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pXG4gICAgICAuZmlsdGVyKChpbnB1dCkgPT4gaW5wdXQucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZGZJbnB1dHMpIHtcbiAgICAgIGNvbnN0IGRmID0gY2FsbFRvU2hhcmUuaW5wdXRzW2lucHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZTtcbiAgICAgIGF3YWl0IGdyb2suZGFwaS5wZXJtaXNzaW9ucy5ncmFudChkZi5nZXRUYWJsZUluZm8oKSwgYWxsR3JvdXAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzYXZlZFNoYXJlZCA9IGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuYWxsUGFja2FnZVZlcnNpb25zKCkuc2F2ZShjYWxsVG9TaGFyZSk7XG5cbiAgICB0aGlzLmFmdGVyUnVuQWRkVG9TaGFyZWQubmV4dChzYXZlZFNoYXJlZCk7XG4gICAgcmV0dXJuIHNhdmVkU2hhcmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVSdW5Gcm9tU2hhcmVkKGNhbGxUb1Vuc2hhcmU6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIGNhbGxUb1Vuc2hhcmUub3B0aW9uc1sndGl0bGUnXSA9IG51bGw7XG4gICAgY2FsbFRvVW5zaGFyZS5vcHRpb25zWydkZXNjcmlwdGlvbiddID0gbnVsbDtcbiAgICBjYWxsVG9VbnNoYXJlLm9wdGlvbnNbJ2lzU2hhcmVkJ10gPSBmYWxzZTtcblxuICAgIHRoaXMuYmVmb3JlUnVuUmVtb3ZlRnJvbVNoYXJlZC5uZXh0KGNhbGxUb1Vuc2hhcmUpO1xuICAgIGNvbnN0IHNhdmVkU2hhcmVkID0gYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5hbGxQYWNrYWdlVmVyc2lvbnMoKS5zYXZlKGNhbGxUb1Vuc2hhcmUpO1xuICAgIHRoaXMuYWZ0ZXJSdW5SZW1vdmVGcm9tU2hhcmVkLm5leHQoc2F2ZWRTaGFyZWQpO1xuICAgIHJldHVybiBzYXZlZFNoYXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm9vdDtcbiAgfVxufVxuIl19
|