@cqa-lib/cqa-ui 1.1.320 → 1.1.321
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/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +33 -15
- package/fesm2015/cqa-lib-cqa-ui.mjs +32 -14
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +32 -14
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/step-builder/step-builder-loop/step-builder-loop.component.d.ts +10 -0
- package/package.json +1 -1
|
@@ -317,24 +317,42 @@ export class StepBuilderLoopComponent {
|
|
|
317
317
|
}
|
|
318
318
|
this.updateLoopIndexOptions();
|
|
319
319
|
}
|
|
320
|
+
/**
|
|
321
|
+
* Get display name for a 1-based row index from the selected profile's data array (data[index-1].name).
|
|
322
|
+
* Returns null if no name. Matches loop-step edit mode behavior.
|
|
323
|
+
*/
|
|
324
|
+
getDataRowNameForOneBasedIndex(oneBasedIndex) {
|
|
325
|
+
const profile = this.selectedDataProfile;
|
|
326
|
+
if (!profile?.data || !Array.isArray(profile.data))
|
|
327
|
+
return null;
|
|
328
|
+
const idx = oneBasedIndex - 1;
|
|
329
|
+
if (idx < 0 || idx >= profile.data.length)
|
|
330
|
+
return null;
|
|
331
|
+
const row = profile.data[idx];
|
|
332
|
+
return row && (row.name != null ? String(row.name) : null);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Build label for a loop index option: "setName (n)" when row has name, else "Step (n)".
|
|
336
|
+
* Matches loop-step edit mode dropdown display.
|
|
337
|
+
*/
|
|
338
|
+
getLoopIndexOptionLabel(idx) {
|
|
339
|
+
const rowName = this.getDataRowNameForOneBasedIndex(idx);
|
|
340
|
+
return rowName ? `${rowName} (${idx})` : `Step (${idx})`;
|
|
341
|
+
}
|
|
320
342
|
/**
|
|
321
343
|
* Update loop start and end config options
|
|
322
344
|
*/
|
|
323
345
|
updateLoopIndexOptions() {
|
|
324
|
-
// Convert startArray to SelectOptions
|
|
325
|
-
const startOptions = this.startArray.map(idx =>
|
|
326
|
-
|
|
327
|
-
value: idx,
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
value: idx,
|
|
335
|
-
name: String(idx),
|
|
336
|
-
label: String(idx)
|
|
337
|
-
}));
|
|
346
|
+
// Convert startArray to SelectOptions with "Step (n)" or "setName (n)" labels
|
|
347
|
+
const startOptions = this.startArray.map(idx => {
|
|
348
|
+
const label = this.getLoopIndexOptionLabel(idx);
|
|
349
|
+
return { id: idx, value: idx, name: label, label };
|
|
350
|
+
});
|
|
351
|
+
// Convert endArray to SelectOptions with same label format
|
|
352
|
+
const endOptions = this.endArray.map(idx => {
|
|
353
|
+
const label = this.getLoopIndexOptionLabel(idx);
|
|
354
|
+
return { id: idx, value: idx, name: label, label };
|
|
355
|
+
});
|
|
338
356
|
this.loopStartConfig = {
|
|
339
357
|
...this.loopStartConfig,
|
|
340
358
|
options: [{ id: -1, value: -1, name: 'Start', label: 'Start' }, ...startOptions],
|
|
@@ -612,4 +630,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
612
630
|
}], redirectToEnvironment: [{
|
|
613
631
|
type: Output
|
|
614
632
|
}] } });
|
|
615
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWxvb3AuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWxvb3Avc3RlcC1idWlsZGVyLWxvb3AuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWxvb3Avc3RlcC1idWlsZGVyLWxvb3AuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFnRGhGLE1BQU0sT0FBTyx3QkFBd0I7SUF1R25DLFlBQW9CLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBdEduQyxtQ0FBbUM7UUFDMUIsYUFBUSxHQUFhLEtBQUssQ0FBQztRQUVwQyw2Q0FBNkM7UUFDcEMsa0JBQWEsR0FBVTtZQUM5QixFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBQztZQUM3QyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBQztTQUN0QyxDQUFDO1FBRUYsZ0ZBQWdGO1FBQ3ZFLHVCQUFrQixHQUF3QixFQUFFLENBQUM7UUFFdEQsZ0VBQWdFO1FBQ3ZELHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUU5QyxzQ0FBc0M7UUFDN0IsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ2hELG1HQUFtRztRQUMxRiw4QkFBeUIsR0FBdUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUEsQ0FBQSxDQUFDLENBQUM7UUFDNUYsMkZBQTJGO1FBQ2xGLGlD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TTtnQkFDRSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUVJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vc3RlcC1idWlsZGVyLWFjdGlvbi9zdGVwLWJ1aWxkZXItYWN0aW9uLmNvbXBvbmVudCc7XG5cbi8vIEltcG9ydCBFbGVtZW50IHR5cGUgLSB1c2luZyBhbnkgZm9yIG5vdyBzaW5jZSBFbGVtZW50IGlzIGZyb20gdHMtcG9ydGFsLXVpXG4vLyBJbiBhIHJlYWwgc2NlbmFyaW8sIHlvdSBtaWdodCB3YW50IHRvIGNyZWF0ZSBhIHNoYXJlZCBpbnRlcmZhY2Ugb3IgaW1wb3J0IGZyb20gYSBzaGFyZWQgcGFja2FnZVxuaW50ZXJmYWNlIEVsZW1lbnQge1xuICBpZD86IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBsb2NhdG9yVmFsdWU/OiBzdHJpbmc7XG4gIG90aGVyTG9jYXRvcj86IHN0cmluZ1tdO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIExvb3BUeXBlID0gJ2ZvcicgfCAnd2hpbGUnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgZGF0YSBwcm9maWxlIG9wdGlvblxuICogQmFzZWQgb24gVGVzdERhdGEgbW9kZWwgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVByb2ZpbGVPcHRpb24ge1xuICBpZDogbnVtYmVyIHwgc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBBcnJheSBvZiBkYXRhIHNldHMgLSBsZW5ndGggZGV0ZXJtaW5lcyBhdmFpbGFibGUgbG9vcCBpbmRpY2VzICovXG4gIGRhdGE/OiBhbnlbXTtcbiAgLyoqIE9wdGlvbmFsOiBkaXJlY3QgZGF0YSBsZW5ndGggaWYgZGF0YSBhcnJheSBpcyBub3QgcHJvdmlkZWQgKi9cbiAgZGF0YUxlbmd0aD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb29wRm9ybURhdGEge1xuICBzZWxlY3RlZExvb3BUeXBlOiBMb29wVHlwZTtcbiAgbG9vcFR5cGU6IExvb3BUeXBlO1xuICBzZWxlY3RPcHRpb24/OiBzdHJpbmc7XG4gIGRhdGFQcm9maWxlPzogc3RyaW5nIHwgbnVtYmVyO1xuICBsb29wU3RhcnQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gIGxvb3BFbmQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHJ1blRpbWU/OiBzdHJpbmc7XG4gIHdoaWxlVGVtcGxhdGU/OiBhbnk7XG4gIGV2ZW50PzogYW55O1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzPzogYW55W107XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1zdGVwLWJ1aWxkZXItbG9vcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItbG9vcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwQnVpbGRlckxvb3BDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgbG9vcCB0eXBlICovXG4gIEBJbnB1dCgpIGxvb3BUeXBlOiBMb29wVHlwZSA9ICdmb3InO1xuXG4gIC8qKiBPcHRpb25zIGZvciB0aGUgc2VsZWN0IG9wdGlvbiBkcm9wZG93biAqL1xuICBASW5wdXQoKSBzZWxlY3RPcHRpb25zOiBhbnlbXSA9IFtcbiAgICB7dmFsdWU6ICdkYXRhUHJvZmlsZScsIGxhYmVsOiAnRGF0YSBQcm9maWxlJ30sXG4gICAge3ZhbHVlOiAncnVuVGltZScsIGxhYmVsOiAnUnVuIFRpbWUnfVxuICBdO1xuXG4gIC8qKiBPcHRpb25zIGZvciB0aGUgZGF0YSBwcm9maWxlIGRyb3Bkb3duIC0gYWNjZXB0cyBEYXRhUHJvZmlsZU9wdGlvbiBvYmplY3RzICovXG4gIEBJbnB1dCgpIGRhdGFQcm9maWxlT3B0aW9uczogRGF0YVByb2ZpbGVPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBJbmRpY2F0ZXMgaWYgbW9yZSBkYXRhIHByb2ZpbGVzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZURhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBkYXRhIHByb2ZpbGVzICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ0RhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogRnVuY3Rpb24gdG8gaGFuZGxlIHZhcmlhYmxlIHByb2Nlc3Npbmcgb3IgY3VzdG9tIGxvZ2ljLiBDYW4gYmUgcGFzc2VkIGZyb20gcGFyZW50IGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgc2V0V2hpbGVUZW1wbGF0ZVZhcmlhYmxlczogKHZhcmlhYmxlczogQWN0aW9uVGVtcGxhdGUpID0+IGFueSA9ICgpID0+IHsgcmV0dXJuIFtdfTtcbiAgLyoqIEZ1bmN0aW9uIHRvIGhhbmRsZSBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMuIENhbiBiZSBwYXNzZWQgZnJvbSBwYXJlbnQgY29tcG9uZW50LiAqL1xuICBASW5wdXQoKSBzZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiAodGVtcGxhdGU6IEFjdGlvblRlbXBsYXRlLCB0ZXN0U3RlcD86IGFueSkgPT4gYW55W10gPSAoKSA9PiB7IHJldHVybiBbXX07XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPExvb3BGb3JtRGF0YT4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gbG9vcCB0eXBlIGNoYW5nZXMgKi9cbiAgQE91dHB1dCgpIGxvb3BUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxMb29wVHlwZT4oKTtcblxuICAvKiogRW1pdCB3aGVuIG1vcmUgZGF0YSBwcm9maWxlcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVEYXRhUHJvZmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogRW1pdCB3aGVuIGRhdGEgcHJvZmlsZSBzZWFyY2ggcXVlcnkgY2hhbmdlcyAqL1xuICBAT3V0cHV0KCkgc2VhcmNoRGF0YVByb2ZpbGVzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBJbnB1dCgpIHdoaWxlVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSB3aGlsZVNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VhcmNoIFdoaWxlJztcbiAgQElucHV0KCkgd2hpbGVTZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG4gIFxuICAvLyBFbGVtZW50IGZldGNoaW5nIHByb3BlcnRpZXNcbiAgQElucHV0KCkgZWxlbWVudE9wdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGhhc01vcmVFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0xvYWRpbmdFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLy8gU2NyZWVuIG5hbWUgZmV0Y2hpbmcgcHJvcGVydGllc1xuICBASW5wdXQoKSBzY3JlZW5OYW1lT3B0aW9uczogeyBpZD86IG51bWJlcjsgbmFtZTogc3RyaW5nIH1bXSA9IFtdO1xuICBASW5wdXQoKSBoYXNNb3JlU2NyZWVuTmFtZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMb2FkaW5nU2NyZWVuTmFtZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8vIFBhcmFtZXRlciBmZXRjaGluZyBwcm9wZXJ0aWVzXG4gIEBJbnB1dCgpIHBhcmFtZXRlck9wdGlvbnM6IGFueVtdID0gW107IC8vIFRlc3REYXRhW10gLSByYXcgdGVzdCBkYXRhIHByb2ZpbGVzXG4gIEBJbnB1dCgpIGhhc01vcmVQYXJhbWV0ZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ1BhcmFtZXRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8vIEVudmlyb25tZW50IGZldGNoaW5nIHByb3BlcnRpZXNcbiAgQElucHV0KCkgZW52aXJvbm1lbnRPcHRpb25zOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgZW52aXJvbm1lbnQ6IHN0cmluZyB9W10gPSBbXTtcbiAgQElucHV0KCkgaGFzTW9yZUVudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0xvYWRpbmdFbnZpcm9ubWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8vIERlZmF1bHQgdGVzdCBkYXRhIHByb2ZpbGUgcHJvcGVydGllc1xuICBASW5wdXQoKSBkZWZhdWx0VGVzdERhdGFQcm9maWxlSWQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGRlZmF1bHRUZXN0RGF0YVN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gIFxuICBAT3V0cHV0KCkgbG9hZE1vcmVFbGVtZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaEVsZW1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hFbGVtZW50c0J5U2NyZWVuTmFtZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzY3JlZW5OYW1lSWQ6IG51bWJlcjsgc2VhcmNoVGVybT86IHN0cmluZyB9PigpOyAvLyBFbWl0IHdoZW4gc2NyZWVuIG5hbWUgaXMgc2VsZWN0ZWQgdG8gZmV0Y2ggZWxlbWVudHMgZmlsdGVyZWQgYnkgc2NyZWVuIG5hbWVcbiAgQE91dHB1dCgpIGNyZWF0ZUVsZW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaFNjcmVlbk5hbWUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGxvYWRNb3JlU2NyZWVuTmFtZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxFbGVtZW50Rm9ybSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaFBhcmFtZXRlcnMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGxvYWRNb3JlUGFyYW1ldGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaEVudmlyb25tZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgbG9hZE1vcmVFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWRpcmVjdFRvUGFyYW1ldGVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVkaXJlY3RUb0Vudmlyb25tZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBcbiAgc2VsZWN0ZWRXaGlsZVRlbXBsYXRlOiBhbnkgPSBudWxsO1xuICBzZWxlY3RlZExvb3BUeXBlOiBMb29wVHlwZSA9ICdmb3InO1xuICBcbiAgLy8gU2luZ2xlIEZvcm1Hcm91cCBjb250YWluaW5nIGFsbCBmb3VyIGZpZWxkc1xuICBsb29wRm9ybTogRm9ybUdyb3VwO1xuXG4gIC8vIEFkdmFuY2VkIHNldHRpbmdzIHN0YXRlIChzYW1lIHBhdHRlcm4gYXMgYWN0aW9uIHN0ZXAgYnVpbGRlcilcbiAgYWR2YW5jZWRFeHBhbmRlZDogYm9vbGVhbiA9IHRydWU7XG4gIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IGFueVtdID0gW107XG4gIGFkdmFuY2VkVmFyaWFibGVzRm9ybTogRm9ybUFycmF5O1xuXG4gIC8vIENvbmZpZ3MgZm9yIGR5bmFtaWMtc2VsZWN0IGNvbXBvbmVudHNcbiAgc2VsZWN0T3B0aW9uQ29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG4gIGRhdGFQcm9maWxlQ29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG4gIGxvb3BTdGFydENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuICBsb29wRW5kQ29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG5cblxuICAvLyBJbnRlcm5hbCBzdGF0ZSBmb3IgbWFuYWdpbmcgbG9vcCBpbmRpY2VzXG4gIHByaXZhdGUgc2VsZWN0ZWREYXRhUHJvZmlsZTogRGF0YVByb2ZpbGVPcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGFydEFycmF5OiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIGVuZEFycmF5OiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBzaW5nbGUgRm9ybUdyb3VwIHdpdGggYWxsIGZpZWxkc1xuICAgIHRoaXMubG9vcEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIHNlbGVjdE9wdGlvbjogbmV3IEZvcm1Db250cm9sKG51bGwpLFxuICAgICAgZGF0YVByb2ZpbGU6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcbiAgICAgIGxvb3BTdGFydDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxuICAgICAgbG9vcEVuZDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxuICAgICAgcnVuVGltZTogbmV3IEZvcm1Db250cm9sKG51bGwpXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIGFkdmFuY2VkIHZhcmlhYmxlcyBmb3JtXG4gICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmFycmF5KFtdKTtcblxuICAgIC8vIEluaXRpYWxpemUgY29uZmlnc1xuICAgIHRoaXMuc2VsZWN0T3B0aW9uQ29uZmlnID0ge1xuICAgICAga2V5OiAnc2VsZWN0T3B0aW9uJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnc2VsZWN0IG9wdGlvbicsXG4gICAgICBzZWxlY3RlZFZhbHVlOiAnZGF0YVByb2ZpbGUnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zOiB0aGlzLnNlbGVjdE9wdGlvbnNcbiAgICB9O1xuICAgIHRoaXMuZGF0YVByb2ZpbGVDb25maWcgPSB7XG4gICAgICBrZXk6ICdkYXRhUHJvZmlsZScsXG4gICAgICBwbGFjZWhvbGRlcjogJ2RhdGEgcHJvZmlsZScsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgc2VydmVyU2VhcmNoOiB0cnVlLFxuICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YVByb2ZpbGVzLFxuICAgICAgaXNMb2FkaW5nOiB0aGlzLmlzTG9hZGluZ0RhdGFQcm9maWxlcyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25EYXRhUHJvZmlsZUNoYW5nZSh2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgb25TZWFyY2g6IChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMub25TZWFyY2hEYXRhUHJvZmlsZXMocXVlcnkpO1xuICAgICAgfSxcbiAgICAgIG9uTG9hZE1vcmU6IChxdWVyeT86IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YVByb2ZpbGVzLmVtaXQocXVlcnkgfHwgJycpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5sb29wU3RhcnRDb25maWcgPSB7XG4gICAgICBrZXk6ICdsb29wU3RhcnQnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdsb29wIHN0YXJ0JyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogW10sXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vbkxvb3BTdGFydENoYW5nZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmxvb3BFbmRDb25maWcgPSB7XG4gICAgICBrZXk6ICdsb29wRW5kJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnbG9vcCBlbmQnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zOiBbXSxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAvLyBIYW5kbGUgY2hhbmdlIGlmIG5lZWRlZFxuICAgICAgfVxuICAgIH07ICBcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRMb29wVHlwZSA9IHRoaXMubG9vcFR5cGU7XG4gICAgdGhpcy51cGRhdGVDb25maWdzKCk7XG5cbiAgICAvLyBJbml0aWFsaXplIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcyBmb3IgbG9vcCBzdGVwcyAoc2FtZSB0eXBlIGFzIG90aGVyIHN0ZXBzKVxuICAgIHRoaXMuaW5pdEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcInRoaXMud2hpbGVUZW1wbGF0ZXNcIix0aGlzLndoaWxlVGVtcGxhdGVzKTtcbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0T3B0aW9ucyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZ3MoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2RhdGFQcm9maWxlT3B0aW9ucyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZ3MoKTtcbiAgICAgIC8vIElmIGEgZGF0YSBwcm9maWxlIGlzIGFscmVhZHkgc2VsZWN0ZWQsIHVwZGF0ZSBsb29wIGluZGljZXNcbiAgICAgIGNvbnN0IGN1cnJlbnRQcm9maWxlSWQgPSB0aGlzLmxvb3BGb3JtLmdldCgnZGF0YVByb2ZpbGUnKT8udmFsdWU7XG4gICAgICBpZiAoY3VycmVudFByb2ZpbGVJZCkge1xuICAgICAgICB0aGlzLm9uRGF0YVByb2ZpbGVDaGFuZ2UoY3VycmVudFByb2ZpbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydoYXNNb3JlRGF0YVByb2ZpbGVzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nRGF0YVByb2ZpbGVzJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlRGF0YVByb2ZpbGVDb25maWcoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2xvb3BUeXBlJ10pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMb29wVHlwZSA9IHRoaXMubG9vcFR5cGU7XG4gICAgfVxuICAgIC8vIE5vdGU6IGxvb3BTdGFydE9wdGlvbnMgYW5kIGxvb3BFbmRPcHRpb25zIGFyZSBub3cgY2FsY3VsYXRlZCBkeW5hbWljYWxseVxuICAgIC8vIHNvIHRoZXkgZG9uJ3QgbmVlZCB0byBiZSB1cGRhdGVkIGZyb20gaW5wdXRzXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMgZm9yIGxvb3Agc3RlcHMuXG4gICAqIEZvciBsb29wcywgd2UgY3VycmVudGx5IHN1cHBvcnQgdGhlIHNhbWUgZ2VuZXJpYyBhZHZhbmNlZCBmbGFnOiBzaG91bGRTa2lwLlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcygpOiB2b2lkIHtcbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzaG91bGRTa2lwJyxcbiAgICAgICAgbGFiZWw6ICdTa2lwIHRoaXMgc3RlcCBkdXJpbmcgZXhlY3V0aW9uLicsXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9XG4gICAgXTtcblxuICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCByZWFjdGl2ZSBmb3JtIGZvciBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMgKG1pcnJvcnMgYWN0aW9uIHN0ZXAgYmVoYXZpb3IpLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBleGlzdGluZyBmb3JtIGFycmF5XG4gICAgd2hpbGUgKHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ucmVtb3ZlQXQoMCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGZvcm0gZ3JvdXBzIGZvciBlYWNoIGFkdmFuY2VkIHZhcmlhYmxlXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55O1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgY29uc3QgdmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkodmFyaWFibGUudmFsdWUpID8gdmFyaWFibGUudmFsdWUgOiBbXTtcbiAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShcbiAgICAgICAgICB2YWx1ZUFycmF5Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdmFsdWVBcnJheS5tYXAoKGl0ZW06IHN0cmluZykgPT4gdGhpcy5mYi5jb250cm9sKGl0ZW0pKVxuICAgICAgICAgICAgOiBbdGhpcy5mYi5jb250cm9sKCcnKV1cbiAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZm9ybUFycmF5O1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhcmlhYmxlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlIHx8ICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZ3MoKTogdm9pZCB7XG4gICAgLy8gQ29udmVydCBEYXRhUHJvZmlsZU9wdGlvbltdIHRvIFNlbGVjdE9wdGlvbltdXG4gICAgdGhpcy5kYXRhUHJvZmlsZUNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuZGF0YVByb2ZpbGVDb25maWcsXG4gICAgICBvcHRpb25zOiB0aGlzLmNvbnZlcnREYXRhUHJvZmlsZU9wdGlvbnNUb1NlbGVjdE9wdGlvbnModGhpcy5kYXRhUHJvZmlsZU9wdGlvbnMpLFxuICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YVByb2ZpbGVzLFxuICAgICAgaXNMb2FkaW5nOiB0aGlzLmlzTG9hZGluZ0RhdGFQcm9maWxlcyxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uRGF0YVByb2ZpbGVDaGFuZ2UodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLm9uU2VhcmNoRGF0YVByb2ZpbGVzKHF1ZXJ5KTtcbiAgICAgIH0sXG4gICAgICBvbkxvYWRNb3JlOiAocXVlcnk/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkTW9yZURhdGFQcm9maWxlcy5lbWl0KHF1ZXJ5IHx8ICcnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIC8vIExvb3Agc3RhcnQgYW5kIGVuZCBvcHRpb25zIGFyZSB1cGRhdGVkIHdoZW4gZGF0YSBwcm9maWxlIGlzIHNlbGVjdGVkXG4gICAgdGhpcy51cGRhdGVMb29wSW5kZXhPcHRpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRhUHJvZmlsZU9wdGlvbnNUb1NlbGVjdE9wdGlvbnMob3B0aW9uczogRGF0YVByb2ZpbGVPcHRpb25bXSk6IFNlbGVjdE9wdGlvbltdIHtcbiAgICByZXR1cm4gb3B0aW9ucy5tYXAob3B0aW9uID0+ICh7XG4gICAgICBpZDogb3B0aW9uLmlkLFxuICAgICAgdmFsdWU6IG9wdGlvbi5pZCxcbiAgICAgIG5hbWU6IG9wdGlvbi5uYW1lLFxuICAgICAgbGFiZWw6IG9wdGlvbi5uYW1lXG4gICAgfSkpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgZGF0YSBwcm9maWxlIHNlbGVjdGlvbiBhbmQgdXBkYXRlIGxvb3Agc3RhcnQvZW5kIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgb25EYXRhUHJvZmlsZUNoYW5nZShwcm9maWxlSWQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkUHJvZmlsZSA9IHRoaXMuZGF0YVByb2ZpbGVPcHRpb25zLmZpbmQocHJvZmlsZSA9PiBcbiAgICAgIHByb2ZpbGUuaWQgPT09IHByb2ZpbGVJZCB8fCBTdHJpbmcocHJvZmlsZS5pZCkgPT09IFN0cmluZyhwcm9maWxlSWQpXG4gICAgKTtcblxuICAgIGlmIChzZWxlY3RlZFByb2ZpbGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhUHJvZmlsZSA9IHNlbGVjdGVkUHJvZmlsZTtcbiAgICAgIHRoaXMudXBkYXRlTG9vcEluZGljZXNGcm9tUHJvZmlsZShzZWxlY3RlZFByb2ZpbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YVByb2ZpbGUgPSBudWxsO1xuICAgICAgdGhpcy5zdGFydEFycmF5ID0gW107XG4gICAgICB0aGlzLmVuZEFycmF5ID0gW107XG4gICAgICB0aGlzLnVwZGF0ZUxvb3BJbmRleE9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGxvb3AgaW5kaWNlcyBiYXNlZCBvbiBzZWxlY3RlZCBkYXRhIHByb2ZpbGVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTG9vcEluZGljZXNGcm9tUHJvZmlsZShwcm9maWxlOiBEYXRhUHJvZmlsZU9wdGlvbik6IHZvaWQge1xuICAgIC8vIENhbGN1bGF0ZSBkYXRhIGxlbmd0aCBmcm9tIGRhdGEgYXJyYXkgb3IgdXNlIHByb3ZpZGVkIGRhdGFMZW5ndGhcbiAgICBsZXQgZGF0YVNldExlbmd0aCA9IDE7XG4gICAgaWYgKHByb2ZpbGUuZGF0YSAmJiBBcnJheS5pc0FycmF5KHByb2ZpbGUuZGF0YSkpIHtcbiAgICAgIGRhdGFTZXRMZW5ndGggPSBwcm9maWxlLmRhdGEubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAocHJvZmlsZS5kYXRhTGVuZ3RoICYmIHByb2ZpbGUuZGF0YUxlbmd0aCA+IDApIHtcbiAgICAgIGRhdGFTZXRMZW5ndGggPSBwcm9maWxlLmRhdGFMZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHN0YXJ0IGFycmF5IGZyb20gMSB0byBkYXRhU2V0TGVuZ3RoXG4gICAgdGhpcy5zdGFydEFycmF5ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF0YVNldExlbmd0aCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIC8vIEluaXRpYWxpemUgZW5kIGFycmF5IHNhbWUgYXMgc3RhcnQgYXJyYXlcbiAgICAvLyBFbmQgYXJyYXkgd2lsbCBiZSB1cGRhdGVkIHdoZW4gc3RhcnQgaW5kZXggaXMgc2VsZWN0ZWRcbiAgICB0aGlzLmVuZEFycmF5ID0gWy4uLnRoaXMuc3RhcnRBcnJheV07XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgaWYgZm9ybSBpcyBlbXB0eVxuICAgIGNvbnN0IGN1cnJlbnRTdGFydCA9IHRoaXMubG9vcEZvcm0uZ2V0KCdsb29wU3RhcnQnKT8udmFsdWU7XG4gICAgY29uc3QgY3VycmVudEVuZCA9IHRoaXMubG9vcEZvcm0uZ2V0KCdsb29wRW5kJyk/LnZhbHVlO1xuICAgIFxuICAgIGlmICghY3VycmVudFN0YXJ0ICYmIHRoaXMuc3RhcnRBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvb3BGb3JtLmdldCgnbG9vcFN0YXJ0Jyk/LnNldFZhbHVlKHRoaXMuc3RhcnRBcnJheVswXSk7XG4gICAgfVxuICAgIGlmICghY3VycmVudEVuZCAmJiB0aGlzLmVuZEFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubG9vcEZvcm0uZ2V0KCdsb29wRW5kJyk/LnNldFZhbHVlKHRoaXMuZW5kQXJyYXlbdGhpcy5lbmRBcnJheS5sZW5ndGggLSAxXSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVMb29wSW5kZXhPcHRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGxvb3Agc3RhcnQgY2hhbmdlIGFuZCB1cGRhdGUgZW5kIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgb25Mb29wU3RhcnRDaGFuZ2Uoc3RhcnRJbmRleDogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0YVByb2ZpbGUgfHwgIXN0YXJ0SW5kZXgpIHtcbiAgICAgIHRoaXMuZW5kQXJyYXkgPSBbLi4udGhpcy5zdGFydEFycmF5XTtcbiAgICAgIHRoaXMudXBkYXRlTG9vcEluZGV4T3B0aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0SWR4ID0gdHlwZW9mIHN0YXJ0SW5kZXggPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoc3RhcnRJbmRleCkgOiBzdGFydEluZGV4O1xuICAgIFxuICAgIGlmIChpc05hTihzdGFydElkeCkgfHwgc3RhcnRJZHggPCAxKSB7XG4gICAgICB0aGlzLmVuZEFycmF5ID0gWy4uLnRoaXMuc3RhcnRBcnJheV07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVuZCBhcnJheSBzaG91bGQgYmUgZnJvbSBzdGFydEluZGV4IHRvIGVuZCBvZiBkYXRhXG4gICAgICAvLyBCYXNlZCBvbiByZWZlcmVuY2U6IGVuZEFycmF5ID0gc3RhcnRBcnJheS5zcGxpY2Uoc3RhcnRJbmRleCAtIDEsIHN0YXJ0QXJyYXkubGVuZ3RoKVxuICAgICAgY29uc3Qgc3RhcnRBcnJheUNvcHkgPSBbLi4udGhpcy5zdGFydEFycmF5XTtcbiAgICAgIHRoaXMuZW5kQXJyYXkgPSBzdGFydEFycmF5Q29weS5zbGljZShzdGFydElkeCAtIDEpO1xuICAgIH1cblxuICAgIC8vIEF1dG8tdXBkYXRlIGVuZCBpbmRleCBpZiBjdXJyZW50IGVuZCBpcyBpbnZhbGlkXG4gICAgY29uc3QgY3VycmVudEVuZCA9IHRoaXMubG9vcEZvcm0uZ2V0KCdsb29wRW5kJyk/LnZhbHVlO1xuICAgIGNvbnN0IGVuZElkeCA9IHR5cGVvZiBjdXJyZW50RW5kID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KGN1cnJlbnRFbmQpIDogY3VycmVudEVuZDtcbiAgICBcbiAgICBpZiAoIWN1cnJlbnRFbmQgfHwgaXNOYU4oZW5kSWR4KSB8fCBlbmRJZHggPCBzdGFydElkeCkge1xuICAgICAgaWYgKHRoaXMuZW5kQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmxvb3BGb3JtLmdldCgnbG9vcEVuZCcpPy5zZXRWYWx1ZSh0aGlzLmVuZEFycmF5W3RoaXMuZW5kQXJyYXkubGVuZ3RoIC0gMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTG9vcEluZGV4T3B0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBsb29wIHN0YXJ0IGFuZCBlbmQgY29uZmlnIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTG9vcEluZGV4T3B0aW9ucygpOiB2b2lkIHtcbiAgICAvLyBDb252ZXJ0IHN0YXJ0QXJyYXkgdG8gU2VsZWN0T3B0aW9uc1xuICAgIGNvbnN0IHN0YXJ0T3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSB0aGlzLnN0YXJ0QXJyYXkubWFwKGlkeCA9PiAoe1xuICAgICAgaWQ6IGlkeCxcbiAgICAgIHZhbHVlOiBpZHgsXG4gICAgICBuYW1lOiBTdHJpbmcoaWR4KSxcbiAgICAgIGxhYmVsOiBTdHJpbmcoaWR4KVxuICAgIH0pKTtcblxuICAgIC8vIENvbnZlcnQgZW5kQXJyYXkgdG8gU2VsZWN0T3B0aW9uc1xuICAgIGNvbnN0IGVuZE9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gdGhpcy5lbmRBcnJheS5tYXAoaWR4ID0+ICh7XG4gICAgICBpZDogaWR4LFxuICAgICAgdmFsdWU6IGlkeCxcbiAgICAgIG5hbWU6IFN0cmluZyhpZHgpLFxuICAgICAgbGFiZWw6IFN0cmluZyhpZHgpXG4gICAgfSkpO1xuXG4gICAgdGhpcy5sb29wU3RhcnRDb25maWcgPSB7XG4gICAgICAuLi50aGlzLmxvb3BTdGFydENvbmZpZyxcbiAgICAgIG9wdGlvbnM6IFt7aWQ6IC0xLCB2YWx1ZTogLTEsIG5hbWU6ICdTdGFydCcsIGxhYmVsOiAnU3RhcnQnfSwgLi4uc3RhcnRPcHRpb25zXSxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uTG9vcFN0YXJ0Q2hhbmdlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5sb29wRW5kQ29uZmlnID0ge1xuICAgICAgLi4udGhpcy5sb29wRW5kQ29uZmlnLFxuICAgICAgb3B0aW9uczogWy4uLmVuZE9wdGlvbnMse2lkOiAtMSwgdmFsdWU6IC0xLCBuYW1lOiAnRW5kJywgbGFiZWw6ICdFbmQnfV0sXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZSBpZiBuZWVkZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgb25Mb29wVHlwZUNoYW5nZSh0eXBlOiBzdHJpbmcgfCBMb29wVHlwZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvb3BUeXBlID0gdHlwZSBhcyBMb29wVHlwZTtcbiAgICB0aGlzLnNlbGVjdGVkTG9vcFR5cGUgPSBsb29wVHlwZTtcbiAgICB0aGlzLmxvb3BUeXBlQ2hhbmdlLmVtaXQobG9vcFR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIHRoZSBBZHZhbmNlZCBzZXR0aW5ncyBzZWN0aW9uLlxuICAgKi9cbiAgdG9nZ2xlQWR2YW5jZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hZHZhbmNlZEV4cGFuZGVkID0gIXRoaXMuYWR2YW5jZWRFeHBhbmRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWR2YW5jZWQgYm9vbGVhbiB2YXJpYWJsZSBjaGFuZ2UgKGUuZy4gc2hvdWxkU2tpcCkuXG4gICAqL1xuICBvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQodmFyaWFibGVJbmRleCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWR2YW5jZWQgbm9uLWJvb2xlYW4gdmFsdWUgY2hhbmdlcyAoa2VwdCBnZW5lcmljIGZvciBmdXR1cmUgdXNlLCBlLmcuIHN0cl9saXN0KS5cbiAgICovXG4gIG9uQWR2YW5jZWRWYXJpYWJsZVZhbHVlQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZmluZCh2ID0+IHYubmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgICBpZiAodmFyaWFibGU/LnR5cGUgIT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgZm9ybUdyb3VwLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIGlzRm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkTG9vcFR5cGUgPT09ICd3aGlsZScpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRXaGlsZVRlbXBsYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgJ2ZvcicgbG9vcCB0eXBlXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmxvb3BGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uID0gZm9ybVZhbHVlLnNlbGVjdE9wdGlvbjtcbiAgICAgIFxuICAgICAgaWYgKCFzZWxlY3RPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoc2VsZWN0T3B0aW9uID09PSAnZGF0YVByb2ZpbGUnKSB7XG4gICAgICAgIC8vIEZvciBkYXRhIHByb2ZpbGUsIG5lZWQgZGF0YVByb2ZpbGUsIGxvb3BTdGFydCwgYW5kIGxvb3BFbmRcbiAgICAgICAgcmV0dXJuICEhKGZvcm1WYWx1ZS5kYXRhUHJvZmlsZSAmJiBmb3JtVmFsdWUubG9vcFN0YXJ0ICYmIGZvcm1WYWx1ZS5sb29wRW5kKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0T3B0aW9uID09PSAncnVuVGltZScpIHtcbiAgICAgICAgLy8gRm9yIHJ1biB0aW1lLCBuZWVkIHJ1blRpbWUgdmFsdWVcbiAgICAgICAgcmV0dXJuICEhKGZvcm1WYWx1ZS5ydW5UaW1lICYmIGZvcm1WYWx1ZS5ydW5UaW1lLnRyaW0oKSAhPT0gJycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Zvcm1WYWxpZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3luYyBhZHZhbmNlZCB2YXJpYWJsZXMgZnJvbSBmb3JtIHRvIGFycmF5IChzYW1lIHBhdHRlcm4gYXMgYWN0aW9uIHN0ZXApXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2goKHZhcmlhYmxlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gZm9ybUdyb3VwLmdldCgndmFsdWUnKT8udmFsdWU7XG4gICAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnICYmIGZvcm1WYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICAgIHZhcmlhYmxlLnZhbHVlID0gZm9ybVZhbHVlLmNvbnRyb2xzXG4gICAgICAgICAgICAubWFwKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbDogc3RyaW5nKSA9PiB2YWwgJiYgdmFsLnRyaW0oKSAhPT0gJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhcmlhYmxlLnZhbHVlID0gZm9ybVZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmxvb3BGb3JtLnZhbHVlO1xuICAgIGlmKHRoaXMuc2VsZWN0ZWRMb29wVHlwZSA9PT0gJ3doaWxlJykge1xuICAgICAgaWYoIXRoaXMuc2VsZWN0ZWRXaGlsZVRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RlcERhdGE6IExvb3BGb3JtRGF0YSA9IHtcbiAgICAgIHNlbGVjdGVkTG9vcFR5cGU6IHRoaXMuc2VsZWN0ZWRMb29wVHlwZSBhcyBMb29wVHlwZSxcbiAgICAgIGxvb3BUeXBlOiB0aGlzLnNlbGVjdGVkTG9vcFR5cGUsXG4gICAgICBzZWxlY3RPcHRpb246IGZvcm1WYWx1ZS5zZWxlY3RPcHRpb24gfHwgdW5kZWZpbmVkLFxuICAgICAgZGF0YVByb2ZpbGU6IGZvcm1WYWx1ZS5kYXRhUHJvZmlsZSB8fCB1bmRlZmluZWQsXG4gICAgICBsb29wU3RhcnQ6IGZvcm1WYWx1ZS5sb29wU3RhcnQgfHwgdW5kZWZpbmVkLFxuICAgICAgbG9vcEVuZDogZm9ybVZhbHVlLmxvb3BFbmQgfHwgdW5kZWZpbmVkLFxuICAgICAgcnVuVGltZTogZm9ybVZhbHVlLnJ1blRpbWUgfHwgdW5kZWZpbmVkLFxuICAgICAgd2hpbGVUZW1wbGF0ZTogdGhpcy5zZWxlY3RlZFdoaWxlVGVtcGxhdGUgfHwgdW5kZWZpbmVkLFxuICAgICAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczogdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzXG4gICAgfTtcbiAgICBjb25zb2xlLmxvZygnc3RlcERhdGEnLCBzdGVwRGF0YSk7XG4gICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICB9XG5cbiAgY3JlYXRlV2hpbGVTdGVwKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnY3JlYXRlV2hpbGVTdGVwJywgZXZlbnQpO1xuICAgIGNvbnN0IHN0ZXBEYXRhOiBMb29wRm9ybURhdGEgPSB7XG4gICAgICBzZWxlY3RlZExvb3BUeXBlOiB0aGlzLnNlbGVjdGVkTG9vcFR5cGUgYXMgTG9vcFR5cGUsXG4gICAgICBsb29wVHlwZTogdGhpcy5zZWxlY3RlZExvb3BUeXBlIGFzIExvb3BUeXBlLFxuICAgICAgZXZlbnQ6IGV2ZW50XG4gICAgfTtcbiAgICBjb25zb2xlLmxvZygnc3RlcERhdGEnLCBzdGVwRGF0YSk7XG4gICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzZWFyY2ggZXZlbnQgZm9yIGRhdGEgcHJvZmlsZXNcbiAgICovXG4gIG9uU2VhcmNoRGF0YVByb2ZpbGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaERhdGFQcm9maWxlcy5lbWl0KHF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbG9hZE1vcmUgZXZlbnQgZm9yIGRhdGEgcHJvZmlsZXNcbiAgICovXG4gIG9uTG9hZE1vcmVEYXRhUHJvZmlsZXMoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMubG9hZE1vcmVEYXRhUHJvZmlsZXMuZW1pdChldmVudC5xdWVyeSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGRhdGEgcHJvZmlsZSBjb25maWcgd2hlbiBsb2FkaW5nIHN0YXRlIG9yIGhhc01vcmUgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVEYXRhUHJvZmlsZUNvbmZpZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhUHJvZmlsZUNvbmZpZykge1xuICAgICAgdGhpcy5kYXRhUHJvZmlsZUNvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXRhUHJvZmlsZUNvbmZpZyxcbiAgICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YVByb2ZpbGVzLFxuICAgICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nRGF0YVByb2ZpbGVzXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRMb29wVHlwZSA9ICdmb3InO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhUHJvZmlsZSA9IG51bGw7XG4gICAgdGhpcy5zdGFydEFycmF5ID0gW107XG4gICAgdGhpcy5lbmRBcnJheSA9IFtdO1xuICAgIHRoaXMubG9vcEZvcm0ucmVzZXQoe1xuICAgICAgc2VsZWN0T3B0aW9uOiBudWxsLFxuICAgICAgZGF0YVByb2ZpbGU6IG51bGwsXG4gICAgICBsb29wU3RhcnQ6IG51bGwsXG4gICAgICBsb29wRW5kOiBudWxsXG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVMb29wSW5kZXhPcHRpb25zKCk7XG4gIH1cblxuICBvbldoaWxlU2VhcmNoQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLndoaWxlU2VhcmNoVmFsdWUgPSBldmVudDtcbiAgICB0aGlzLmZpbHRlcldoaWxlVGVtcGxhdGVzKGV2ZW50KTtcbiAgfVxuXG4gIG9uV2hpbGVTZWFyY2hTdWJtaXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25XaGlsZVNlYXJjaENoYW5nZShldmVudCk7XG4gIH1cblxuICBvbldoaWxlU2VhcmNoQ2xlYXJlZCgpOiB2b2lkIHtcbiAgICB0aGlzLndoaWxlU2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLmZpbHRlcldoaWxlVGVtcGxhdGVzKCcnKTtcbiAgfVxuXG4gIGZpbHRlcldoaWxlVGVtcGxhdGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLndoaWxlVGVtcGxhdGVzID0gdGhpcy53aGlsZVRlbXBsYXRlcy5maWx0ZXIodGVtcGxhdGUgPT4gdGVtcGxhdGUuaHRtbEdyYW1tYXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeS50b0xvd2VyQ2FzZSgpKSB8fCB0ZW1wbGF0ZS5uYXR1cmFsVGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5LnRvTG93ZXJDYXNlKCkpKTtcbiAgfVxuXG4gIHNlbGVjdFdoaWxlVGVtcGxhdGUodGVtcGxhdGU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRXaGlsZVRlbXBsYXRlID0gdGVtcGxhdGU7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaC1mdWxsIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMlwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIENyZWF0ZSBMb29wIFRlc3QgU3RlcFxuICA8L2gyPlxuXG4gIDwhLS0gTG9vcCBUeXBlIFNlbGVjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1tYi00IGNxYS13LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtYmctZ3JheS0xMDAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMSBjcWEtZ2FwLTBcIiBzdHlsZT1cImhlaWdodDogMzBweDsgYmFja2dyb3VuZC1jb2xvcjogI0YzRjRGNjtcIj5cbiAgICAgIDwhLS0gRm9yIEJ1dHRvbiAtLT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXctMS8yIGNxYS10ZXh0LVsxMnB4XSBjcWEtcm91bmRlZC1tZCBjcWEtZm9udC1tZWRpdW0gY3FhLXRyYW5zaXRpb24tYWxsIGNxYS1kdXJhdGlvbi0yMDAgY3FhLWVhc2UtaW4tb3V0IGNxYS1taW4tdy1bODBweF0gY3FhLXRleHQtY2VudGVyIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNlbGVjdGVkTG9vcFR5cGUgPT09ICdmb3InID8gJyMzRjQzRUUnIDogJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgIFtzdHlsZS5jb2xvcl09XCJzZWxlY3RlZExvb3BUeXBlID09PSAnZm9yJyA/ICcjRkZGRkZGJyA6ICcjNkI3MjgwJ1wiXG4gICAgICAgIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cIic4cHgnXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCInMjJweCdcIlxuICAgICAgICAoY2xpY2spPVwib25Mb29wVHlwZUNoYW5nZSgnZm9yJylcIj5cbiAgICAgICAgRm9yXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDwhLS0gV2hpbGUgQnV0dG9uIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLXRleHQtWzEycHhdIGNxYS1yb3VuZGVkLW1kIGNxYS1mb250LW1lZGl1bSBjcWEtdHJhbnNpdGlvbi1hbGwgY3FhLWR1cmF0aW9uLTIwMCBjcWEtZWFzZS1pbi1vdXQgY3FhLW1pbi13LVs4MHB4XSBjcWEtdGV4dC1jZW50ZXIgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwic2VsZWN0ZWRMb29wVHlwZSA9PT0gJ3doaWxlJyA/ICcjM0Y0M0VFJyA6ICd0cmFuc3BhcmVudCdcIlxuICAgICAgICBbc3R5bGUuY29sb3JdPVwic2VsZWN0ZWRMb29wVHlwZSA9PT0gJ3doaWxlJyA/ICcjRkZGRkZGJyA6ICcjNkI3MjgwJ1wiXG4gICAgICAgIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cIic4cHgnXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCInMjJweCdcIlxuICAgICAgICAoY2xpY2spPVwib25Mb29wVHlwZUNoYW5nZSgnd2hpbGUnKVwiPlxuICAgICAgICBXaGlsZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRm9ybSBGaWVsZHMgLS0+XG4gICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRMb29wVHlwZSA9PT0gJ2ZvcidcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPCEtLSBEcm9wZG93biBGaWVsZHMgUm93IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLTQgY3FhLWZsZXgtd3JhcFwiPlxuICAgICAgPCEtLSBTZWxlY3QgT3B0aW9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xXCIgc3R5bGU9XCJtaW4td2lkdGg6IGNhbGMoMjUlIC0gMTJweCk7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMS41XCI+XG4gICAgICAgICAgU2VsZWN0IE9wdGlvblxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwibG9vcEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwic2VsZWN0T3B0aW9uQ29uZmlnXCI+XG4gICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb29wRm9ybS5nZXQoJ3NlbGVjdE9wdGlvbicpPy52YWx1ZSA9PT0gJ2RhdGFQcm9maWxlJ1wiPlxuICAgICAgPCEtLSBEYXRhIFByb2ZpbGUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTFcIiBzdHlsZT1cIm1pbi13aWR0aDogY2FsYygyNSUgLSAxMnB4KTtcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1tYi0xLjVcIj5cbiAgICAgICAgICBEYXRhIFByb2ZpbGVcbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgIFtmb3JtXT1cImxvb3BGb3JtXCJcbiAgICAgICAgICBbY29uZmlnXT1cImRhdGFQcm9maWxlQ29uZmlnXCJcbiAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VhcmNoRGF0YVByb2ZpbGVzKCRldmVudC5xdWVyeSlcIlxuICAgICAgICAgIChsb2FkTW9yZSk9XCJvbkxvYWRNb3JlRGF0YVByb2ZpbGVzKCRldmVudClcIj5cbiAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBMb29wIFN0YXJ0IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xXCIgc3R5bGU9XCJtaW4td2lkdGg6IGNhbGMoMjUlIC0gMTJweCk7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMS41XCI+XG4gICAgICAgICAgTG9vcCBTdGFydFxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwibG9vcEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwibG9vcFN0YXJ0Q29uZmlnXCI+XG4gICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTG9vcCBFbmQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTFcIiBzdHlsZT1cIm1pbi13aWR0aDogY2FsYygyNSUgLSAxMnB4KTtcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1tYi0xLjVcIj5cbiAgICAgICAgICBMb29wIEVuZFxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwibG9vcEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwibG9vcEVuZENvbmZpZ1wiPlxuICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9vcEZvcm0uZ2V0KCdzZWxlY3RPcHRpb24nKT8udmFsdWUgPT09ICdydW5UaW1lJ1wiPlxuICAgICAgICA8IS0tIFJ1biBUaW1lIElucHV0IEZpZWxkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTFcIiBzdHlsZT1cIm1pbi13aWR0aDogY2FsYygyNSUgLSAxMnB4KTtcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLW1iLTEuNVwiPlxuICAgICAgICAgICAgUnVuIFRpbWVcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0VudGVyIFJ1biBUaW1lJ1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwibG9vcEZvcm0uZ2V0KCdydW5UaW1lJyk/LnZhbHVlXCJcbiAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwibG9vcEZvcm0uZ2V0KCdydW5UaW1lJyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGxcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gIGNxYS1nYXAtMiBjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXAtMCBjcWEtbWItMS41XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF1cIj5BZHZhbmNlZDwvc3Bhbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtYmFzZVwiIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJhZHZhbmNlZEV4cGFuZGVkXCI+XG4gICAgICAgICAgZXhwYW5kX21vcmVcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdiAqbmdJZj1cImFkdmFuY2VkRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1tdC0yXCI+XG4gICAgICAgIDxjcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0gXG4gICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVzXT1cImFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXNcIlxuICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlRm9ybV09XCJhZHZhbmNlZFZhcmlhYmxlc0Zvcm1cIlxuICAgICAgICAgICh2YXJpYWJsZUJvb2xlYW5DaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlQm9vbGVhbkNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgKHZhcmlhYmxlVmFsdWVDaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgPC9jcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gXG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZExvb3BUeXBlID09PSAnd2hpbGUnXCI+XG4gICAgPGNxYS1zdGVwLWJ1aWxkZXItYWN0aW9uIFxuICAgICAgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIiBcbiAgICAgIFt0ZW1wbGF0ZXNdPVwid2hpbGVUZW1wbGF0ZXNcIiBcbiAgICAgIFtzZXRUZW1wbGF0ZVZhcmlhYmxlc109XCJzZXRXaGlsZVRlbXBsYXRlVmFyaWFibGVzXCIgXG4gICAgICBbc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlc109XCJzZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzXCJcbiAgICAgIFtzZWFyY2hQbGFjZWhvbGRlcl09XCJ3aGlsZVNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgIFtlbGVtZW50T3B0aW9uc109XCJlbGVtZW50T3B0aW9uc1wiXG4gICAgICBbaGFzTW9yZUVsZW1lbnRzXT1cImhhc01vcmVFbGVtZW50c1wiXG4gICAgICBbaXNMb2FkaW5nRWxlbWVudHNdPVwiaXNMb2FkaW5nRWxlbWVudHNcIlxuICAgICAgW3NjcmVlbk5hbWVPcHRpb25zXT1cInNjcmVlbk5hbWVPcHRpb25zXCJcbiAgICAgIFtoYXNNb3JlU2NyZWVuTmFtZXNdPVwiaGFzTW9yZVNjcmVlbk5hbWVzXCJcbiAgICAgIFtpc0xvYWRpbmdTY3JlZW5OYW1lc109XCJpc0xvYWRpbmdTY3JlZW5OYW1lc1wiXG4gICAgICBbcGFyYW1ldGVyT3B0aW9uc109XCJwYXJhbWV0ZXJPcHRpb25zXCJcbiAgICAgIFtoYXNNb3JlUGFyYW1ldGVyc109XCJoYXNNb3JlUGFyYW1ldGVyc1wiXG4gICAgICBbaXNMb2FkaW5nUGFyYW1ldGVyc109XCJpc0xvYWRpbmdQYXJhbWV0ZXJzXCJcbiAgICAgIFtlbnZpcm9ubWVudE9wdGlvbnNdPVwiZW52aXJvbm1lbnRPcHRpb25zXCJcbiAgICAgIFtoYXNNb3JlRW52aXJvbm1lbnRzXT1cImhhc01vcmVFbnZpcm9ubWVudHNcIlxuICAgICAgW2lzTG9hZGluZ0Vudmlyb25tZW50c109XCJpc0xvYWRpbmdFbnZpcm9ubWVudHNcIlxuICAgICAgW2RlZmF1bHRUZXN0RGF0YVByb2ZpbGVJZF09XCJkZWZhdWx0VGVzdERhdGFQcm9maWxlSWRcIlxuICAgICAgW2RlZmF1bHRUZXN0RGF0YVN0YXJ0SW5kZXhdPVwiZGVmYXVsdFRlc3REYXRhU3RhcnRJbmRleFwiXG4gICAgICAodGVtcGxhdGVDaGFuZ2VkKT1cInNlbGVjdFdoaWxlVGVtcGxhdGUoJGV2ZW50KVwiIFxuICAgICAgKGNyZWF0ZVN0ZXApPVwiY3JlYXRlV2hpbGVTdGVwKCRldmVudClcIlxuICAgICAgKGxvYWRNb3JlRWxlbWVudHMpPVwibG9hZE1vcmVFbGVtZW50cy5lbWl0KClcIlxuICAgICAgKHNlYXJjaEVsZW1lbnRzKT1cInNlYXJjaEVsZW1lbnRzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAoc2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUpPVwic2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChjcmVhdGVFbGVtZW50KT1cImNyZWF0ZUVsZW1lbnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChzZWFyY2hTY3JlZW5OYW1lKT1cInNlYXJjaFNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChsb2FkTW9yZVNjcmVlbk5hbWVzKT1cImxvYWRNb3JlU2NyZWVuTmFtZXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdCk9XCJjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdC5lbWl0KCRldmVudClcIlxuICAgICAgKHNlYXJjaFBhcmFtZXRlcnMpPVwic2VhcmNoUGFyYW1ldGVycy5lbWl0KCRldmVudClcIlxuICAgICAgKGxvYWRNb3JlUGFyYW1ldGVycyk9XCJsb2FkTW9yZVBhcmFtZXRlcnMuZW1pdCgpXCJcbiAgICAgIChzZWFyY2hFbnZpcm9ubWVudHMpPVwic2VhcmNoRW52aXJvbm1lbnRzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAobG9hZE1vcmVFbnZpcm9ubWVudHMpPVwibG9hZE1vcmVFbnZpcm9ubWVudHMuZW1pdCgpXCJcbiAgICAgIChyZWRpcmVjdFRvUGFyYW1ldGVyKT1cInJlZGlyZWN0VG9QYXJhbWV0ZXIuZW1pdCgpXCJcbiAgICAgIChyZWRpcmVjdFRvRW52aXJvbm1lbnQpPVwicmVkaXJlY3RUb0Vudmlyb25tZW50LmVtaXQoKVwiXG4gICAgICAoY2FuY2VsRWxlbWVudEZvcm0pPVwiY2FuY2VsRWxlbWVudEZvcm0uZW1pdCgpXCI+XG4gICAgPC9jcWEtc3RlcC1idWlsZGVyLWFjdGlvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgPGRpdiAqbmdJZj1cInNlbGVjdGVkTG9vcFR5cGUgPT09ICdmb3InXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1nYXAtMiBjcWEtbXQtNiBjcWEtcHQtNCBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICBjbGFzcz1cImNxYS13LTEvMlwiXG4gICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgdGV4dD1cIkNhbmNlbFwiXG4gICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgY2xhc3M9XCJjcWEtdy0xLzJcIlxuICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICB0ZXh0PVwiQ3JlYXRlIFN0ZXBcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNGb3JtVmFsaWQoKVwiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNyZWF0ZVN0ZXAoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
|
|
633
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWxvb3AuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWxvb3Avc3RlcC1idWlsZGVyLWxvb3AuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWxvb3Avc3RlcC1idWlsZGVyLWxvb3AuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFnRGhGLE1BQU0sT0FBTyx3QkFBd0I7SUF1R25DLFlBQW9CLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBdEduQyxtQ0FBbUM7UUFDMUIsYUFBUSxHQUFhLEtBQUssQ0FBQztRQUVwQyw2Q0FBNkM7UUFDcEMsa0JBQWEsR0FBVTtZQUM5QixFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBQztZQUM3QyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBQztTQUN0QyxDQUFDO1FBRUYsZ0ZBQWdGO1FBQ3ZFLHVCQUFrQixHQUF3QixFQUFFLENBQUM7UUFFdEQsZ0VBQWdFO1FBQ3ZELHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUU5QyxzQ0FBc0M7UUFDN0IsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ2hELG1HQUFtRztRQUMxRiw4QkFBeUIsR0FBdUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUEsQ0FBQSxDQUFDLENBQUM7UUFDNUYsMkZBQTJGO1FBQ2xGLGlD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QkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUVJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vc3RlcC1idWlsZGVyLWFjdGlvbi9zdGVwLWJ1aWxkZXItYWN0aW9uLmNvbXBvbmVudCc7XG5cbi8vIEltcG9ydCBFbGVtZW50IHR5cGUgLSB1c2luZyBhbnkgZm9yIG5vdyBzaW5jZSBFbGVtZW50IGlzIGZyb20gdHMtcG9ydGFsLXVpXG4vLyBJbiBhIHJlYWwgc2NlbmFyaW8sIHlvdSBtaWdodCB3YW50IHRvIGNyZWF0ZSBhIHNoYXJlZCBpbnRlcmZhY2Ugb3IgaW1wb3J0IGZyb20gYSBzaGFyZWQgcGFja2FnZVxuaW50ZXJmYWNlIEVsZW1lbnQge1xuICBpZD86IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBsb2NhdG9yVmFsdWU/OiBzdHJpbmc7XG4gIG90aGVyTG9jYXRvcj86IHN0cmluZ1tdO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIExvb3BUeXBlID0gJ2ZvcicgfCAnd2hpbGUnO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgZGF0YSBwcm9maWxlIG9wdGlvblxuICogQmFzZWQgb24gVGVzdERhdGEgbW9kZWwgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVByb2ZpbGVPcHRpb24ge1xuICBpZDogbnVtYmVyIHwgc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBBcnJheSBvZiBkYXRhIHNldHMgLSBsZW5ndGggZGV0ZXJtaW5lcyBhdmFpbGFibGUgbG9vcCBpbmRpY2VzICovXG4gIGRhdGE/OiBhbnlbXTtcbiAgLyoqIE9wdGlvbmFsOiBkaXJlY3QgZGF0YSBsZW5ndGggaWYgZGF0YSBhcnJheSBpcyBub3QgcHJvdmlkZWQgKi9cbiAgZGF0YUxlbmd0aD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb29wRm9ybURhdGEge1xuICBzZWxlY3RlZExvb3BUeXBlOiBMb29wVHlwZTtcbiAgbG9vcFR5cGU6IExvb3BUeXBlO1xuICBzZWxlY3RPcHRpb24/OiBzdHJpbmc7XG4gIGRhdGFQcm9maWxlPzogc3RyaW5nIHwgbnVtYmVyO1xuICBsb29wU3RhcnQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gIGxvb3BFbmQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHJ1blRpbWU/OiBzdHJpbmc7XG4gIHdoaWxlVGVtcGxhdGU/OiBhbnk7XG4gIGV2ZW50PzogYW55O1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzPzogYW55W107XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1zdGVwLWJ1aWxkZXItbG9vcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItbG9vcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwQnVpbGRlckxvb3BDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgbG9vcCB0eXBlICovXG4gIEBJbnB1dCgpIGxvb3BUeXBlOiBMb29wVHlwZSA9ICdmb3InO1xuXG4gIC8qKiBPcHRpb25zIGZvciB0aGUgc2VsZWN0IG9wdGlvbiBkcm9wZG93biAqL1xuICBASW5wdXQoKSBzZWxlY3RPcHRpb25zOiBhbnlbXSA9IFtcbiAgICB7dmFsdWU6ICdkYXRhUHJvZmlsZScsIGxhYmVsOiAnRGF0YSBQcm9maWxlJ30sXG4gICAge3ZhbHVlOiAncnVuVGltZScsIGxhYmVsOiAnUnVuIFRpbWUnfVxuICBdO1xuXG4gIC8qKiBPcHRpb25zIGZvciB0aGUgZGF0YSBwcm9maWxlIGRyb3Bkb3duIC0gYWNjZXB0cyBEYXRhUHJvZmlsZU9wdGlvbiBvYmplY3RzICovXG4gIEBJbnB1dCgpIGRhdGFQcm9maWxlT3B0aW9uczogRGF0YVByb2ZpbGVPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBJbmRpY2F0ZXMgaWYgbW9yZSBkYXRhIHByb2ZpbGVzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZURhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBkYXRhIHByb2ZpbGVzICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ0RhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogRnVuY3Rpb24gdG8gaGFuZGxlIHZhcmlhYmxlIHByb2Nlc3Npbmcgb3IgY3VzdG9tIGxvZ2ljLiBDYW4gYmUgcGFzc2VkIGZyb20gcGFyZW50IGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgc2V0V2hpbGVUZW1wbGF0ZVZhcmlhYmxlczogKHZhcmlhYmxlczogQWN0aW9uVGVtcGxhdGUpID0+IGFueSA9ICgpID0+IHsgcmV0dXJuIFtdfTtcbiAgLyoqIEZ1bmN0aW9uIHRvIGhhbmRsZSBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMuIENhbiBiZSBwYXNzZWQgZnJvbSBwYXJlbnQgY29tcG9uZW50LiAqL1xuICBASW5wdXQoKSBzZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiAodGVtcGxhdGU6IEFjdGlvblRlbXBsYXRlLCB0ZXN0U3RlcD86IGFueSkgPT4gYW55W10gPSAoKSA9PiB7IHJldHVybiBbXX07XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPExvb3BGb3JtRGF0YT4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gbG9vcCB0eXBlIGNoYW5nZXMgKi9cbiAgQE91dHB1dCgpIGxvb3BUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxMb29wVHlwZT4oKTtcblxuICAvKiogRW1pdCB3aGVuIG1vcmUgZGF0YSBwcm9maWxlcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVEYXRhUHJvZmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogRW1pdCB3aGVuIGRhdGEgcHJvZmlsZSBzZWFyY2ggcXVlcnkgY2hhbmdlcyAqL1xuICBAT3V0cHV0KCkgc2VhcmNoRGF0YVByb2ZpbGVzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBJbnB1dCgpIHdoaWxlVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSB3aGlsZVNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VhcmNoIFdoaWxlJztcbiAgQElucHV0KCkgd2hpbGVTZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG4gIFxuICAvLyBFbGVtZW50IGZldGNoaW5nIHByb3BlcnRpZXNcbiAgQElucHV0KCkgZWxlbWVudE9wdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGhhc01vcmVFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0xvYWRpbmdFbGVtZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLy8gU2NyZWVuIG5hbWUgZmV0Y2hpbmcgcHJvcGVydGllc1xuICBASW5wdXQoKSBzY3JlZW5OYW1lT3B0aW9uczogeyBpZD86IG51bWJlcjsgbmFtZTogc3RyaW5nIH1bXSA9IFtdO1xuICBASW5wdXQoKSBoYXNNb3JlU2NyZWVuTmFtZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMb2FkaW5nU2NyZWVuTmFtZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8vIFBhcmFtZXRlciBmZXRjaGluZyBwcm9wZXJ0aWVzXG4gIEBJbnB1dCgpIHBhcmFtZXRlck9wdGlvbnM6IGFueVtdID0gW107IC8vIFRlc3REYXRhW10gLSByYXcgdGVzdCBkYXRhIHByb2ZpbGVzXG4gIEBJbnB1dCgpIGhhc01vcmVQYXJhbWV0ZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ1BhcmFtZXRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8vIEVudmlyb25tZW50IGZldGNoaW5nIHByb3BlcnRpZXNcbiAgQElucHV0KCkgZW52aXJvbm1lbnRPcHRpb25zOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgZW52aXJvbm1lbnQ6IHN0cmluZyB9W10gPSBbXTtcbiAgQElucHV0KCkgaGFzTW9yZUVudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0xvYWRpbmdFbnZpcm9ubWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8vIERlZmF1bHQgdGVzdCBkYXRhIHByb2ZpbGUgcHJvcGVydGllc1xuICBASW5wdXQoKSBkZWZhdWx0VGVzdERhdGFQcm9maWxlSWQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGRlZmF1bHRUZXN0RGF0YVN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gIFxuICBAT3V0cHV0KCkgbG9hZE1vcmVFbGVtZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaEVsZW1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hFbGVtZW50c0J5U2NyZWVuTmFtZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzY3JlZW5OYW1lSWQ6IG51bWJlcjsgc2VhcmNoVGVybT86IHN0cmluZyB9PigpOyAvLyBFbWl0IHdoZW4gc2NyZWVuIG5hbWUgaXMgc2VsZWN0ZWQgdG8gZmV0Y2ggZWxlbWVudHMgZmlsdGVyZWQgYnkgc2NyZWVuIG5hbWVcbiAgQE91dHB1dCgpIGNyZWF0ZUVsZW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaFNjcmVlbk5hbWUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGxvYWRNb3JlU2NyZWVuTmFtZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNyZWF0ZVNjcmVlbk5hbWVSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxFbGVtZW50Rm9ybSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaFBhcmFtZXRlcnMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGxvYWRNb3JlUGFyYW1ldGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaEVudmlyb25tZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgbG9hZE1vcmVFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWRpcmVjdFRvUGFyYW1ldGVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVkaXJlY3RUb0Vudmlyb25tZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBcbiAgc2VsZWN0ZWRXaGlsZVRlbXBsYXRlOiBhbnkgPSBudWxsO1xuICBzZWxlY3RlZExvb3BUeXBlOiBMb29wVHlwZSA9ICdmb3InO1xuICBcbiAgLy8gU2luZ2xlIEZvcm1Hcm91cCBjb250YWluaW5nIGFsbCBmb3VyIGZpZWxkc1xuICBsb29wRm9ybTogRm9ybUdyb3VwO1xuXG4gIC8vIEFkdmFuY2VkIHNldHRpbmdzIHN0YXRlIChzYW1lIHBhdHRlcm4gYXMgYWN0aW9uIHN0ZXAgYnVpbGRlcilcbiAgYWR2YW5jZWRFeHBhbmRlZDogYm9vbGVhbiA9IHRydWU7XG4gIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IGFueVtdID0gW107XG4gIGFkdmFuY2VkVmFyaWFibGVzRm9ybTogRm9ybUFycmF5O1xuXG4gIC8vIENvbmZpZ3MgZm9yIGR5bmFtaWMtc2VsZWN0IGNvbXBvbmVudHNcbiAgc2VsZWN0T3B0aW9uQ29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG4gIGRhdGFQcm9maWxlQ29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG4gIGxvb3BTdGFydENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnO1xuICBsb29wRW5kQ29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG5cblxuICAvLyBJbnRlcm5hbCBzdGF0ZSBmb3IgbWFuYWdpbmcgbG9vcCBpbmRpY2VzXG4gIHByaXZhdGUgc2VsZWN0ZWREYXRhUHJvZmlsZTogRGF0YVByb2ZpbGVPcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGFydEFycmF5OiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIGVuZEFycmF5OiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBzaW5nbGUgRm9ybUdyb3VwIHdpdGggYWxsIGZpZWxkc1xuICAgIHRoaXMubG9vcEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIHNlbGVjdE9wdGlvbjogbmV3IEZvcm1Db250cm9sKG51bGwpLFxuICAgICAgZGF0YVByb2ZpbGU6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcbiAgICAgIGxvb3BTdGFydDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxuICAgICAgbG9vcEVuZDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxuICAgICAgcnVuVGltZTogbmV3IEZvcm1Db250cm9sKG51bGwpXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIGFkdmFuY2VkIHZhcmlhYmxlcyBmb3JtXG4gICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmFycmF5KFtdKTtcblxuICAgIC8vIEluaXRpYWxpemUgY29uZmlnc1xuICAgIHRoaXMuc2VsZWN0T3B0aW9uQ29uZmlnID0ge1xuICAgICAga2V5OiAnc2VsZWN0T3B0aW9uJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnc2VsZWN0IG9wdGlvbicsXG4gICAgICBzZWxlY3RlZFZhbHVlOiAnZGF0YVByb2ZpbGUnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zOiB0aGlzLnNlbGVjdE9wdGlvbnNcbiAgICB9O1xuICAgIHRoaXMuZGF0YVByb2ZpbGVDb25maWcgPSB7XG4gICAgICBrZXk6ICdkYXRhUHJvZmlsZScsXG4gICAgICBwbGFjZWhvbGRlcjogJ2RhdGEgcHJvZmlsZScsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgc2VydmVyU2VhcmNoOiB0cnVlLFxuICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YVByb2ZpbGVzLFxuICAgICAgaXNMb2FkaW5nOiB0aGlzLmlzTG9hZGluZ0RhdGFQcm9maWxlcyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25EYXRhUHJvZmlsZUNoYW5nZSh2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgb25TZWFyY2g6IChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMub25TZWFyY2hEYXRhUHJvZmlsZXMocXVlcnkpO1xuICAgICAgfSxcbiAgICAgIG9uTG9hZE1vcmU6IChxdWVyeT86IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YVByb2ZpbGVzLmVtaXQocXVlcnkgfHwgJycpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5sb29wU3RhcnRDb25maWcgPSB7XG4gICAgICBrZXk6ICdsb29wU3RhcnQnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdsb29wIHN0YXJ0JyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogW10sXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vbkxvb3BTdGFydENoYW5nZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmxvb3BFbmRDb25maWcgPSB7XG4gICAgICBrZXk6ICdsb29wRW5kJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnbG9vcCBlbmQnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgICBvcHRpb25zOiBbXSxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAvLyBIYW5kbGUgY2hhbmdlIGlmIG5lZWRlZFxuICAgICAgfVxuICAgIH07ICBcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRMb29wVHlwZSA9IHRoaXMubG9vcFR5cGU7XG4gICAgdGhpcy51cGRhdGVDb25maWdzKCk7XG5cbiAgICAvLyBJbml0aWFsaXplIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcyBmb3IgbG9vcCBzdGVwcyAoc2FtZSB0eXBlIGFzIG90aGVyIHN0ZXBzKVxuICAgIHRoaXMuaW5pdEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcInRoaXMud2hpbGVUZW1wbGF0ZXNcIix0aGlzLndoaWxlVGVtcGxhdGVzKTtcbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0T3B0aW9ucyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZ3MoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2RhdGFQcm9maWxlT3B0aW9ucyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZ3MoKTtcbiAgICAgIC8vIElmIGEgZGF0YSBwcm9maWxlIGlzIGFscmVhZHkgc2VsZWN0ZWQsIHVwZGF0ZSBsb29wIGluZGljZXNcbiAgICAgIGNvbnN0IGN1cnJlbnRQcm9maWxlSWQgPSB0aGlzLmxvb3BGb3JtLmdldCgnZGF0YVByb2ZpbGUnKT8udmFsdWU7XG4gICAgICBpZiAoY3VycmVudFByb2ZpbGVJZCkge1xuICAgICAgICB0aGlzLm9uRGF0YVByb2ZpbGVDaGFuZ2UoY3VycmVudFByb2ZpbGVJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydoYXNNb3JlRGF0YVByb2ZpbGVzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nRGF0YVByb2ZpbGVzJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlRGF0YVByb2ZpbGVDb25maWcoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2xvb3BUeXBlJ10pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMb29wVHlwZSA9IHRoaXMubG9vcFR5cGU7XG4gICAgfVxuICAgIC8vIE5vdGU6IGxvb3BTdGFydE9wdGlvbnMgYW5kIGxvb3BFbmRPcHRpb25zIGFyZSBub3cgY2FsY3VsYXRlZCBkeW5hbWljYWxseVxuICAgIC8vIHNvIHRoZXkgZG9uJ3QgbmVlZCB0byBiZSB1cGRhdGVkIGZyb20gaW5wdXRzXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMgZm9yIGxvb3Agc3RlcHMuXG4gICAqIEZvciBsb29wcywgd2UgY3VycmVudGx5IHN1cHBvcnQgdGhlIHNhbWUgZ2VuZXJpYyBhZHZhbmNlZCBmbGFnOiBzaG91bGRTa2lwLlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcygpOiB2b2lkIHtcbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzaG91bGRTa2lwJyxcbiAgICAgICAgbGFiZWw6ICdTa2lwIHRoaXMgc3RlcCBkdXJpbmcgZXhlY3V0aW9uLicsXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9XG4gICAgXTtcblxuICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCByZWFjdGl2ZSBmb3JtIGZvciBhZHZhbmNlZCBzZXR0aW5ncyB2YXJpYWJsZXMgKG1pcnJvcnMgYWN0aW9uIHN0ZXAgYmVoYXZpb3IpLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBleGlzdGluZyBmb3JtIGFycmF5XG4gICAgd2hpbGUgKHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ucmVtb3ZlQXQoMCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGZvcm0gZ3JvdXBzIGZvciBlYWNoIGFkdmFuY2VkIHZhcmlhYmxlXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55O1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgY29uc3QgdmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkodmFyaWFibGUudmFsdWUpID8gdmFyaWFibGUudmFsdWUgOiBbXTtcbiAgICAgICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5mYi5hcnJheShcbiAgICAgICAgICB2YWx1ZUFycmF5Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdmFsdWVBcnJheS5tYXAoKGl0ZW06IHN0cmluZykgPT4gdGhpcy5mYi5jb250cm9sKGl0ZW0pKVxuICAgICAgICAgICAgOiBbdGhpcy5mYi5jb250cm9sKCcnKV1cbiAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZm9ybUFycmF5O1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhcmlhYmxlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlIHx8ICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZ3MoKTogdm9pZCB7XG4gICAgLy8gQ29udmVydCBEYXRhUHJvZmlsZU9wdGlvbltdIHRvIFNlbGVjdE9wdGlvbltdXG4gICAgdGhpcy5kYXRhUHJvZmlsZUNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuZGF0YVByb2ZpbGVDb25maWcsXG4gICAgICBvcHRpb25zOiB0aGlzLmNvbnZlcnREYXRhUHJvZmlsZU9wdGlvbnNUb1NlbGVjdE9wdGlvbnModGhpcy5kYXRhUHJvZmlsZU9wdGlvbnMpLFxuICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YVByb2ZpbGVzLFxuICAgICAgaXNMb2FkaW5nOiB0aGlzLmlzTG9hZGluZ0RhdGFQcm9maWxlcyxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uRGF0YVByb2ZpbGVDaGFuZ2UodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLm9uU2VhcmNoRGF0YVByb2ZpbGVzKHF1ZXJ5KTtcbiAgICAgIH0sXG4gICAgICBvbkxvYWRNb3JlOiAocXVlcnk/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkTW9yZURhdGFQcm9maWxlcy5lbWl0KHF1ZXJ5IHx8ICcnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIC8vIExvb3Agc3RhcnQgYW5kIGVuZCBvcHRpb25zIGFyZSB1cGRhdGVkIHdoZW4gZGF0YSBwcm9maWxlIGlzIHNlbGVjdGVkXG4gICAgdGhpcy51cGRhdGVMb29wSW5kZXhPcHRpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRhUHJvZmlsZU9wdGlvbnNUb1NlbGVjdE9wdGlvbnMob3B0aW9uczogRGF0YVByb2ZpbGVPcHRpb25bXSk6IFNlbGVjdE9wdGlvbltdIHtcbiAgICByZXR1cm4gb3B0aW9ucy5tYXAob3B0aW9uID0+ICh7XG4gICAgICBpZDogb3B0aW9uLmlkLFxuICAgICAgdmFsdWU6IG9wdGlvbi5pZCxcbiAgICAgIG5hbWU6IG9wdGlvbi5uYW1lLFxuICAgICAgbGFiZWw6IG9wdGlvbi5uYW1lXG4gICAgfSkpO1xuICB9XG4gIC8qKlxuICAgKiBIYW5kbGUgZGF0YSBwcm9maWxlIHNlbGVjdGlvbiBhbmQgdXBkYXRlIGxvb3Agc3RhcnQvZW5kIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgb25EYXRhUHJvZmlsZUNoYW5nZShwcm9maWxlSWQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkUHJvZmlsZSA9IHRoaXMuZGF0YVByb2ZpbGVPcHRpb25zLmZpbmQocHJvZmlsZSA9PiBcbiAgICAgIHByb2ZpbGUuaWQgPT09IHByb2ZpbGVJZCB8fCBTdHJpbmcocHJvZmlsZS5pZCkgPT09IFN0cmluZyhwcm9maWxlSWQpXG4gICAgKTtcblxuICAgIGlmIChzZWxlY3RlZFByb2ZpbGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhUHJvZmlsZSA9IHNlbGVjdGVkUHJvZmlsZTtcbiAgICAgIHRoaXMudXBkYXRlTG9vcEluZGljZXNGcm9tUHJvZmlsZShzZWxlY3RlZFByb2ZpbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YVByb2ZpbGUgPSBudWxsO1xuICAgICAgdGhpcy5zdGFydEFycmF5ID0gW107XG4gICAgICB0aGlzLmVuZEFycmF5ID0gW107XG4gICAgICB0aGlzLnVwZGF0ZUxvb3BJbmRleE9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGxvb3AgaW5kaWNlcyBiYXNlZCBvbiBzZWxlY3RlZCBkYXRhIHByb2ZpbGVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTG9vcEluZGljZXNGcm9tUHJvZmlsZShwcm9maWxlOiBEYXRhUHJvZmlsZU9wdGlvbik6IHZvaWQge1xuICAgIC8vIENhbGN1bGF0ZSBkYXRhIGxlbmd0aCBmcm9tIGRhdGEgYXJyYXkgb3IgdXNlIHByb3ZpZGVkIGRhdGFMZW5ndGhcbiAgICBsZXQgZGF0YVNldExlbmd0aCA9IDE7XG4gICAgaWYgKHByb2ZpbGUuZGF0YSAmJiBBcnJheS5pc0FycmF5KHByb2ZpbGUuZGF0YSkpIHtcbiAgICAgIGRhdGFTZXRMZW5ndGggPSBwcm9maWxlLmRhdGEubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAocHJvZmlsZS5kYXRhTGVuZ3RoICYmIHByb2ZpbGUuZGF0YUxlbmd0aCA+IDApIHtcbiAgICAgIGRhdGFTZXRMZW5ndGggPSBwcm9maWxlLmRhdGFMZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHN0YXJ0IGFycmF5IGZyb20gMSB0byBkYXRhU2V0TGVuZ3RoXG4gICAgdGhpcy5zdGFydEFycmF5ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF0YVNldExlbmd0aCB9LCAoXywgaSkgPT4gaSArIDEpO1xuICAgIC8vIEluaXRpYWxpemUgZW5kIGFycmF5IHNhbWUgYXMgc3RhcnQgYXJyYXlcbiAgICAvLyBFbmQgYXJyYXkgd2lsbCBiZSB1cGRhdGVkIHdoZW4gc3RhcnQgaW5kZXggaXMgc2VsZWN0ZWRcbiAgICB0aGlzLmVuZEFycmF5ID0gWy4uLnRoaXMuc3RhcnRBcnJheV07XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgaWYgZm9ybSBpcyBlbXB0eVxuICAgIGNvbnN0IGN1cnJlbnRTdGFydCA9IHRoaXMubG9vcEZvcm0uZ2V0KCdsb29wU3RhcnQnKT8udmFsdWU7XG4gICAgY29uc3QgY3VycmVudEVuZCA9IHRoaXMubG9vcEZvcm0uZ2V0KCdsb29wRW5kJyk/LnZhbHVlO1xuICAgIFxuICAgIGlmICghY3VycmVudFN0YXJ0ICYmIHRoaXMuc3RhcnRBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvb3BGb3JtLmdldCgnbG9vcFN0YXJ0Jyk/LnNldFZhbHVlKHRoaXMuc3RhcnRBcnJheVswXSk7XG4gICAgfVxuICAgIGlmICghY3VycmVudEVuZCAmJiB0aGlzLmVuZEFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMubG9vcEZvcm0uZ2V0KCdsb29wRW5kJyk/LnNldFZhbHVlKHRoaXMuZW5kQXJyYXlbdGhpcy5lbmRBcnJheS5sZW5ndGggLSAxXSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVMb29wSW5kZXhPcHRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGxvb3Agc3RhcnQgY2hhbmdlIGFuZCB1cGRhdGUgZW5kIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgb25Mb29wU3RhcnRDaGFuZ2Uoc3RhcnRJbmRleDogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0YVByb2ZpbGUgfHwgIXN0YXJ0SW5kZXgpIHtcbiAgICAgIHRoaXMuZW5kQXJyYXkgPSBbLi4udGhpcy5zdGFydEFycmF5XTtcbiAgICAgIHRoaXMudXBkYXRlTG9vcEluZGV4T3B0aW9ucygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0SWR4ID0gdHlwZW9mIHN0YXJ0SW5kZXggPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoc3RhcnRJbmRleCkgOiBzdGFydEluZGV4O1xuICAgIFxuICAgIGlmIChpc05hTihzdGFydElkeCkgfHwgc3RhcnRJZHggPCAxKSB7XG4gICAgICB0aGlzLmVuZEFycmF5ID0gWy4uLnRoaXMuc3RhcnRBcnJheV07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVuZCBhcnJheSBzaG91bGQgYmUgZnJvbSBzdGFydEluZGV4IHRvIGVuZCBvZiBkYXRhXG4gICAgICAvLyBCYXNlZCBvbiByZWZlcmVuY2U6IGVuZEFycmF5ID0gc3RhcnRBcnJheS5zcGxpY2Uoc3RhcnRJbmRleCAtIDEsIHN0YXJ0QXJyYXkubGVuZ3RoKVxuICAgICAgY29uc3Qgc3RhcnRBcnJheUNvcHkgPSBbLi4udGhpcy5zdGFydEFycmF5XTtcbiAgICAgIHRoaXMuZW5kQXJyYXkgPSBzdGFydEFycmF5Q29weS5zbGljZShzdGFydElkeCAtIDEpO1xuICAgIH1cblxuICAgIC8vIEF1dG8tdXBkYXRlIGVuZCBpbmRleCBpZiBjdXJyZW50IGVuZCBpcyBpbnZhbGlkXG4gICAgY29uc3QgY3VycmVudEVuZCA9IHRoaXMubG9vcEZvcm0uZ2V0KCdsb29wRW5kJyk/LnZhbHVlO1xuICAgIGNvbnN0IGVuZElkeCA9IHR5cGVvZiBjdXJyZW50RW5kID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KGN1cnJlbnRFbmQpIDogY3VycmVudEVuZDtcbiAgICBcbiAgICBpZiAoIWN1cnJlbnRFbmQgfHwgaXNOYU4oZW5kSWR4KSB8fCBlbmRJZHggPCBzdGFydElkeCkge1xuICAgICAgaWYgKHRoaXMuZW5kQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmxvb3BGb3JtLmdldCgnbG9vcEVuZCcpPy5zZXRWYWx1ZSh0aGlzLmVuZEFycmF5W3RoaXMuZW5kQXJyYXkubGVuZ3RoIC0gMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTG9vcEluZGV4T3B0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkaXNwbGF5IG5hbWUgZm9yIGEgMS1iYXNlZCByb3cgaW5kZXggZnJvbSB0aGUgc2VsZWN0ZWQgcHJvZmlsZSdzIGRhdGEgYXJyYXkgKGRhdGFbaW5kZXgtMV0ubmFtZSkuXG4gICAqIFJldHVybnMgbnVsbCBpZiBubyBuYW1lLiBNYXRjaGVzIGxvb3Atc3RlcCBlZGl0IG1vZGUgYmVoYXZpb3IuXG4gICAqL1xuICBwcml2YXRlIGdldERhdGFSb3dOYW1lRm9yT25lQmFzZWRJbmRleChvbmVCYXNlZEluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBwcm9maWxlID0gdGhpcy5zZWxlY3RlZERhdGFQcm9maWxlO1xuICAgIGlmICghcHJvZmlsZT8uZGF0YSB8fCAhQXJyYXkuaXNBcnJheShwcm9maWxlLmRhdGEpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBpZHggPSBvbmVCYXNlZEluZGV4IC0gMTtcbiAgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gcHJvZmlsZS5kYXRhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgcm93ID0gcHJvZmlsZS5kYXRhW2lkeF07XG4gICAgcmV0dXJuIHJvdyAmJiAocm93Lm5hbWUgIT0gbnVsbCA/IFN0cmluZyhyb3cubmFtZSkgOiBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBsYWJlbCBmb3IgYSBsb29wIGluZGV4IG9wdGlvbjogXCJzZXROYW1lIChuKVwiIHdoZW4gcm93IGhhcyBuYW1lLCBlbHNlIFwiU3RlcCAobilcIi5cbiAgICogTWF0Y2hlcyBsb29wLXN0ZXAgZWRpdCBtb2RlIGRyb3Bkb3duIGRpc3BsYXkuXG4gICAqL1xuICBwcml2YXRlIGdldExvb3BJbmRleE9wdGlvbkxhYmVsKGlkeDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCByb3dOYW1lID0gdGhpcy5nZXREYXRhUm93TmFtZUZvck9uZUJhc2VkSW5kZXgoaWR4KTtcbiAgICByZXR1cm4gcm93TmFtZSA/IGAke3Jvd05hbWV9ICgke2lkeH0pYCA6IGBTdGVwICgke2lkeH0pYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbG9vcCBzdGFydCBhbmQgZW5kIGNvbmZpZyBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUxvb3BJbmRleE9wdGlvbnMoKTogdm9pZCB7XG4gICAgLy8gQ29udmVydCBzdGFydEFycmF5IHRvIFNlbGVjdE9wdGlvbnMgd2l0aCBcIlN0ZXAgKG4pXCIgb3IgXCJzZXROYW1lIChuKVwiIGxhYmVsc1xuICAgIGNvbnN0IHN0YXJ0T3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSB0aGlzLnN0YXJ0QXJyYXkubWFwKGlkeCA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0TG9vcEluZGV4T3B0aW9uTGFiZWwoaWR4KTtcbiAgICAgIHJldHVybiB7IGlkOiBpZHgsIHZhbHVlOiBpZHgsIG5hbWU6IGxhYmVsLCBsYWJlbCB9O1xuICAgIH0pO1xuXG4gICAgLy8gQ29udmVydCBlbmRBcnJheSB0byBTZWxlY3RPcHRpb25zIHdpdGggc2FtZSBsYWJlbCBmb3JtYXRcbiAgICBjb25zdCBlbmRPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IHRoaXMuZW5kQXJyYXkubWFwKGlkeCA9PiB7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0TG9vcEluZGV4T3B0aW9uTGFiZWwoaWR4KTtcbiAgICAgIHJldHVybiB7IGlkOiBpZHgsIHZhbHVlOiBpZHgsIG5hbWU6IGxhYmVsLCBsYWJlbCB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5sb29wU3RhcnRDb25maWcgPSB7XG4gICAgICAuLi50aGlzLmxvb3BTdGFydENvbmZpZyxcbiAgICAgIG9wdGlvbnM6IFt7aWQ6IC0xLCB2YWx1ZTogLTEsIG5hbWU6ICdTdGFydCcsIGxhYmVsOiAnU3RhcnQnfSwgLi4uc3RhcnRPcHRpb25zXSxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uTG9vcFN0YXJ0Q2hhbmdlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5sb29wRW5kQ29uZmlnID0ge1xuICAgICAgLi4udGhpcy5sb29wRW5kQ29uZmlnLFxuICAgICAgb3B0aW9uczogWy4uLmVuZE9wdGlvbnMse2lkOiAtMSwgdmFsdWU6IC0xLCBuYW1lOiAnRW5kJywgbGFiZWw6ICdFbmQnfV0sXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZSBpZiBuZWVkZWRcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgb25Mb29wVHlwZUNoYW5nZSh0eXBlOiBzdHJpbmcgfCBMb29wVHlwZSk6IHZvaWQge1xuICAgIGNvbnN0IGxvb3BUeXBlID0gdHlwZSBhcyBMb29wVHlwZTtcbiAgICB0aGlzLnNlbGVjdGVkTG9vcFR5cGUgPSBsb29wVHlwZTtcbiAgICB0aGlzLmxvb3BUeXBlQ2hhbmdlLmVtaXQobG9vcFR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIHRoZSBBZHZhbmNlZCBzZXR0aW5ncyBzZWN0aW9uLlxuICAgKi9cbiAgdG9nZ2xlQWR2YW5jZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hZHZhbmNlZEV4cGFuZGVkID0gIXRoaXMuYWR2YW5jZWRFeHBhbmRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWR2YW5jZWQgYm9vbGVhbiB2YXJpYWJsZSBjaGFuZ2UgKGUuZy4gc2hvdWxkU2tpcCkuXG4gICAqL1xuICBvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQodmFyaWFibGVJbmRleCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWR2YW5jZWQgbm9uLWJvb2xlYW4gdmFsdWUgY2hhbmdlcyAoa2VwdCBnZW5lcmljIGZvciBmdXR1cmUgdXNlLCBlLmcuIHN0cl9saXN0KS5cbiAgICovXG4gIG9uQWR2YW5jZWRWYXJpYWJsZVZhbHVlQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZmluZCh2ID0+IHYubmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgICBpZiAodmFyaWFibGU/LnR5cGUgIT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgZm9ybUdyb3VwLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIGlzRm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkTG9vcFR5cGUgPT09ICd3aGlsZScpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRXaGlsZVRlbXBsYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgJ2ZvcicgbG9vcCB0eXBlXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmxvb3BGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uID0gZm9ybVZhbHVlLnNlbGVjdE9wdGlvbjtcbiAgICAgIFxuICAgICAgaWYgKCFzZWxlY3RPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoc2VsZWN0T3B0aW9uID09PSAnZGF0YVByb2ZpbGUnKSB7XG4gICAgICAgIC8vIEZvciBkYXRhIHByb2ZpbGUsIG5lZWQgZGF0YVByb2ZpbGUsIGxvb3BTdGFydCwgYW5kIGxvb3BFbmRcbiAgICAgICAgcmV0dXJuICEhKGZvcm1WYWx1ZS5kYXRhUHJvZmlsZSAmJiBmb3JtVmFsdWUubG9vcFN0YXJ0ICYmIGZvcm1WYWx1ZS5sb29wRW5kKTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0T3B0aW9uID09PSAncnVuVGltZScpIHtcbiAgICAgICAgLy8gRm9yIHJ1biB0aW1lLCBuZWVkIHJ1blRpbWUgdmFsdWVcbiAgICAgICAgcmV0dXJuICEhKGZvcm1WYWx1ZS5ydW5UaW1lICYmIGZvcm1WYWx1ZS5ydW5UaW1lLnRyaW0oKSAhPT0gJycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Zvcm1WYWxpZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3luYyBhZHZhbmNlZCB2YXJpYWJsZXMgZnJvbSBmb3JtIHRvIGFycmF5IChzYW1lIHBhdHRlcm4gYXMgYWN0aW9uIHN0ZXApXG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2goKHZhcmlhYmxlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICAgIGlmIChmb3JtR3JvdXApIHtcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gZm9ybUdyb3VwLmdldCgndmFsdWUnKT8udmFsdWU7XG4gICAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnICYmIGZvcm1WYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICAgIHZhcmlhYmxlLnZhbHVlID0gZm9ybVZhbHVlLmNvbnRyb2xzXG4gICAgICAgICAgICAubWFwKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbDogc3RyaW5nKSA9PiB2YWwgJiYgdmFsLnRyaW0oKSAhPT0gJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhcmlhYmxlLnZhbHVlID0gZm9ybVZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmxvb3BGb3JtLnZhbHVlO1xuICAgIGlmKHRoaXMuc2VsZWN0ZWRMb29wVHlwZSA9PT0gJ3doaWxlJykge1xuICAgICAgaWYoIXRoaXMuc2VsZWN0ZWRXaGlsZVRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RlcERhdGE6IExvb3BGb3JtRGF0YSA9IHtcbiAgICAgIHNlbGVjdGVkTG9vcFR5cGU6IHRoaXMuc2VsZWN0ZWRMb29wVHlwZSBhcyBMb29wVHlwZSxcbiAgICAgIGxvb3BUeXBlOiB0aGlzLnNlbGVjdGVkTG9vcFR5cGUsXG4gICAgICBzZWxlY3RPcHRpb246IGZvcm1WYWx1ZS5zZWxlY3RPcHRpb24gfHwgdW5kZWZpbmVkLFxuICAgICAgZGF0YVByb2ZpbGU6IGZvcm1WYWx1ZS5kYXRhUHJvZmlsZSB8fCB1bmRlZmluZWQsXG4gICAgICBsb29wU3RhcnQ6IGZvcm1WYWx1ZS5sb29wU3RhcnQgfHwgdW5kZWZpbmVkLFxuICAgICAgbG9vcEVuZDogZm9ybVZhbHVlLmxvb3BFbmQgfHwgdW5kZWZpbmVkLFxuICAgICAgcnVuVGltZTogZm9ybVZhbHVlLnJ1blRpbWUgfHwgdW5kZWZpbmVkLFxuICAgICAgd2hpbGVUZW1wbGF0ZTogdGhpcy5zZWxlY3RlZFdoaWxlVGVtcGxhdGUgfHwgdW5kZWZpbmVkLFxuICAgICAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczogdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzXG4gICAgfTtcbiAgICBjb25zb2xlLmxvZygnc3RlcERhdGEnLCBzdGVwRGF0YSk7XG4gICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICB9XG5cbiAgY3JlYXRlV2hpbGVTdGVwKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnY3JlYXRlV2hpbGVTdGVwJywgZXZlbnQpO1xuICAgIGNvbnN0IHN0ZXBEYXRhOiBMb29wRm9ybURhdGEgPSB7XG4gICAgICBzZWxlY3RlZExvb3BUeXBlOiB0aGlzLnNlbGVjdGVkTG9vcFR5cGUgYXMgTG9vcFR5cGUsXG4gICAgICBsb29wVHlwZTogdGhpcy5zZWxlY3RlZExvb3BUeXBlIGFzIExvb3BUeXBlLFxuICAgICAgZXZlbnQ6IGV2ZW50XG4gICAgfTtcbiAgICBjb25zb2xlLmxvZygnc3RlcERhdGEnLCBzdGVwRGF0YSk7XG4gICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzZWFyY2ggZXZlbnQgZm9yIGRhdGEgcHJvZmlsZXNcbiAgICovXG4gIG9uU2VhcmNoRGF0YVByb2ZpbGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaERhdGFQcm9maWxlcy5lbWl0KHF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbG9hZE1vcmUgZXZlbnQgZm9yIGRhdGEgcHJvZmlsZXNcbiAgICovXG4gIG9uTG9hZE1vcmVEYXRhUHJvZmlsZXMoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMubG9hZE1vcmVEYXRhUHJvZmlsZXMuZW1pdChldmVudC5xdWVyeSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGRhdGEgcHJvZmlsZSBjb25maWcgd2hlbiBsb2FkaW5nIHN0YXRlIG9yIGhhc01vcmUgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVEYXRhUHJvZmlsZUNvbmZpZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhUHJvZmlsZUNvbmZpZykge1xuICAgICAgdGhpcy5kYXRhUHJvZmlsZUNvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXRhUHJvZmlsZUNvbmZpZyxcbiAgICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlRGF0YVByb2ZpbGVzLFxuICAgICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nRGF0YVByb2ZpbGVzXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRMb29wVHlwZSA9ICdmb3InO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhUHJvZmlsZSA9IG51bGw7XG4gICAgdGhpcy5zdGFydEFycmF5ID0gW107XG4gICAgdGhpcy5lbmRBcnJheSA9IFtdO1xuICAgIHRoaXMubG9vcEZvcm0ucmVzZXQoe1xuICAgICAgc2VsZWN0T3B0aW9uOiBudWxsLFxuICAgICAgZGF0YVByb2ZpbGU6IG51bGwsXG4gICAgICBsb29wU3RhcnQ6IG51bGwsXG4gICAgICBsb29wRW5kOiBudWxsXG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVMb29wSW5kZXhPcHRpb25zKCk7XG4gIH1cblxuICBvbldoaWxlU2VhcmNoQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLndoaWxlU2VhcmNoVmFsdWUgPSBldmVudDtcbiAgICB0aGlzLmZpbHRlcldoaWxlVGVtcGxhdGVzKGV2ZW50KTtcbiAgfVxuXG4gIG9uV2hpbGVTZWFyY2hTdWJtaXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25XaGlsZVNlYXJjaENoYW5nZShldmVudCk7XG4gIH1cblxuICBvbldoaWxlU2VhcmNoQ2xlYXJlZCgpOiB2b2lkIHtcbiAgICB0aGlzLndoaWxlU2VhcmNoVmFsdWUgPSAnJztcbiAgICB0aGlzLmZpbHRlcldoaWxlVGVtcGxhdGVzKCcnKTtcbiAgfVxuXG4gIGZpbHRlcldoaWxlVGVtcGxhdGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLndoaWxlVGVtcGxhdGVzID0gdGhpcy53aGlsZVRlbXBsYXRlcy5maWx0ZXIodGVtcGxhdGUgPT4gdGVtcGxhdGUuaHRtbEdyYW1tYXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeS50b0xvd2VyQ2FzZSgpKSB8fCB0ZW1wbGF0ZS5uYXR1cmFsVGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5LnRvTG93ZXJDYXNlKCkpKTtcbiAgfVxuXG4gIHNlbGVjdFdoaWxlVGVtcGxhdGUodGVtcGxhdGU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRXaGlsZVRlbXBsYXRlID0gdGVtcGxhdGU7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaC1mdWxsIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMlwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIENyZWF0ZSBMb29wIFRlc3QgU3RlcFxuICA8L2gyPlxuXG4gIDwhLS0gTG9vcCBUeXBlIFNlbGVjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1tYi00IGNxYS13LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtYmctZ3JheS0xMDAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtMSBjcWEtZ2FwLTBcIiBzdHlsZT1cImhlaWdodDogMzBweDsgYmFja2dyb3VuZC1jb2xvcjogI0YzRjRGNjtcIj5cbiAgICAgIDwhLS0gRm9yIEJ1dHRvbiAtLT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXctMS8yIGNxYS10ZXh0LVsxMnB4XSBjcWEtcm91bmRlZC1tZCBjcWEtZm9udC1tZWRpdW0gY3FhLXRyYW5zaXRpb24tYWxsIGNxYS1kdXJhdGlvbi0yMDAgY3FhLWVhc2UtaW4tb3V0IGNxYS1taW4tdy1bODBweF0gY3FhLXRleHQtY2VudGVyIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNlbGVjdGVkTG9vcFR5cGUgPT09ICdmb3InID8gJyMzRjQzRUUnIDogJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgIFtzdHlsZS5jb2xvcl09XCJzZWxlY3RlZExvb3BUeXBlID09PSAnZm9yJyA/ICcjRkZGRkZGJyA6ICcjNkI3MjgwJ1wiXG4gICAgICAgIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cIic4cHgnXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCInMjJweCdcIlxuICAgICAgICAoY2xpY2spPVwib25Mb29wVHlwZUNoYW5nZSgnZm9yJylcIj5cbiAgICAgICAgRm9yXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDwhLS0gV2hpbGUgQnV0dG9uIC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLXRleHQtWzEycHhdIGNxYS1yb3VuZGVkLW1kIGNxYS1mb250LW1lZGl1bSBjcWEtdHJhbnNpdGlvbi1hbGwgY3FhLWR1cmF0aW9uLTIwMCBjcWEtZWFzZS1pbi1vdXQgY3FhLW1pbi13LVs4MHB4XSBjcWEtdGV4dC1jZW50ZXIgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwic2VsZWN0ZWRMb29wVHlwZSA9PT0gJ3doaWxlJyA/ICcjM0Y0M0VFJyA6ICd0cmFuc3BhcmVudCdcIlxuICAgICAgICBbc3R5bGUuY29sb3JdPVwic2VsZWN0ZWRMb29wVHlwZSA9PT0gJ3doaWxlJyA/ICcjRkZGRkZGJyA6ICcjNkI3MjgwJ1wiXG4gICAgICAgIFtzdHlsZS5ib3JkZXItcmFkaXVzXT1cIic4cHgnXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodF09XCInMjJweCdcIlxuICAgICAgICAoY2xpY2spPVwib25Mb29wVHlwZUNoYW5nZSgnd2hpbGUnKVwiPlxuICAgICAgICBXaGlsZVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRm9ybSBGaWVsZHMgLS0+XG4gICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRMb29wVHlwZSA9PT0gJ2ZvcidcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPCEtLSBEcm9wZG93biBGaWVsZHMgUm93IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLTQgY3FhLWZsZXgtd3JhcFwiPlxuICAgICAgPCEtLSBTZWxlY3QgT3B0aW9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xXCIgc3R5bGU9XCJtaW4td2lkdGg6IGNhbGMoMjUlIC0gMTJweCk7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMS41XCI+XG4gICAgICAgICAgU2VsZWN0IE9wdGlvblxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwibG9vcEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwic2VsZWN0T3B0aW9uQ29uZmlnXCI+XG4gICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb29wRm9ybS5nZXQoJ3NlbGVjdE9wdGlvbicpPy52YWx1ZSA9PT0gJ2RhdGFQcm9maWxlJ1wiPlxuICAgICAgPCEtLSBEYXRhIFByb2ZpbGUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTFcIiBzdHlsZT1cIm1pbi13aWR0aDogY2FsYygyNSUgLSAxMnB4KTtcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1tYi0xLjVcIj5cbiAgICAgICAgICBEYXRhIFByb2ZpbGVcbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgIFtmb3JtXT1cImxvb3BGb3JtXCJcbiAgICAgICAgICBbY29uZmlnXT1cImRhdGFQcm9maWxlQ29uZmlnXCJcbiAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VhcmNoRGF0YVByb2ZpbGVzKCRldmVudC5xdWVyeSlcIlxuICAgICAgICAgIChsb2FkTW9yZSk9XCJvbkxvYWRNb3JlRGF0YVByb2ZpbGVzKCRldmVudClcIj5cbiAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBMb29wIFN0YXJ0IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xXCIgc3R5bGU9XCJtaW4td2lkdGg6IGNhbGMoMjUlIC0gMTJweCk7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMS41XCI+XG4gICAgICAgICAgTG9vcCBTdGFydFxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwibG9vcEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwibG9vcFN0YXJ0Q29uZmlnXCI+XG4gICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTG9vcCBFbmQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTFcIiBzdHlsZT1cIm1pbi13aWR0aDogY2FsYygyNSUgLSAxMnB4KTtcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1tYi0xLjVcIj5cbiAgICAgICAgICBMb29wIEVuZFxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwibG9vcEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwibG9vcEVuZENvbmZpZ1wiPlxuICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9vcEZvcm0uZ2V0KCdzZWxlY3RPcHRpb24nKT8udmFsdWUgPT09ICdydW5UaW1lJ1wiPlxuICAgICAgICA8IS0tIFJ1biBUaW1lIElucHV0IEZpZWxkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTFcIiBzdHlsZT1cIm1pbi13aWR0aDogY2FsYygyNSUgLSAxMnB4KTtcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLW1iLTEuNVwiPlxuICAgICAgICAgICAgUnVuIFRpbWVcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0VudGVyIFJ1biBUaW1lJ1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwibG9vcEZvcm0uZ2V0KCdydW5UaW1lJyk/LnZhbHVlXCJcbiAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwibG9vcEZvcm0uZ2V0KCdydW5UaW1lJyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGxcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gIGNxYS1nYXAtMiBjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXAtMCBjcWEtbWItMS41XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF1cIj5BZHZhbmNlZDwvc3Bhbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtYmFzZVwiIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJhZHZhbmNlZEV4cGFuZGVkXCI+XG4gICAgICAgICAgZXhwYW5kX21vcmVcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdiAqbmdJZj1cImFkdmFuY2VkRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1tdC0yXCI+XG4gICAgICAgIDxjcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0gXG4gICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVzXT1cImFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXNcIlxuICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlRm9ybV09XCJhZHZhbmNlZFZhcmlhYmxlc0Zvcm1cIlxuICAgICAgICAgICh2YXJpYWJsZUJvb2xlYW5DaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlQm9vbGVhbkNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgKHZhcmlhYmxlVmFsdWVDaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgPC9jcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gXG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZExvb3BUeXBlID09PSAnd2hpbGUnXCI+XG4gICAgPGNxYS1zdGVwLWJ1aWxkZXItYWN0aW9uIFxuICAgICAgW3Nob3dIZWFkZXJdPVwiZmFsc2VcIiBcbiAgICAgIFt0ZW1wbGF0ZXNdPVwid2hpbGVUZW1wbGF0ZXNcIiBcbiAgICAgIFtzZXRUZW1wbGF0ZVZhcmlhYmxlc109XCJzZXRXaGlsZVRlbXBsYXRlVmFyaWFibGVzXCIgXG4gICAgICBbc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlc109XCJzZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzXCJcbiAgICAgIFtzZWFyY2hQbGFjZWhvbGRlcl09XCJ3aGlsZVNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgIFtlbGVtZW50T3B0aW9uc109XCJlbGVtZW50T3B0aW9uc1wiXG4gICAgICBbaGFzTW9yZUVsZW1lbnRzXT1cImhhc01vcmVFbGVtZW50c1wiXG4gICAgICBbaXNMb2FkaW5nRWxlbWVudHNdPVwiaXNMb2FkaW5nRWxlbWVudHNcIlxuICAgICAgW3NjcmVlbk5hbWVPcHRpb25zXT1cInNjcmVlbk5hbWVPcHRpb25zXCJcbiAgICAgIFtoYXNNb3JlU2NyZWVuTmFtZXNdPVwiaGFzTW9yZVNjcmVlbk5hbWVzXCJcbiAgICAgIFtpc0xvYWRpbmdTY3JlZW5OYW1lc109XCJpc0xvYWRpbmdTY3JlZW5OYW1lc1wiXG4gICAgICBbcGFyYW1ldGVyT3B0aW9uc109XCJwYXJhbWV0ZXJPcHRpb25zXCJcbiAgICAgIFtoYXNNb3JlUGFyYW1ldGVyc109XCJoYXNNb3JlUGFyYW1ldGVyc1wiXG4gICAgICBbaXNMb2FkaW5nUGFyYW1ldGVyc109XCJpc0xvYWRpbmdQYXJhbWV0ZXJzXCJcbiAgICAgIFtlbnZpcm9ubWVudE9wdGlvbnNdPVwiZW52aXJvbm1lbnRPcHRpb25zXCJcbiAgICAgIFtoYXNNb3JlRW52aXJvbm1lbnRzXT1cImhhc01vcmVFbnZpcm9ubWVudHNcIlxuICAgICAgW2lzTG9hZGluZ0Vudmlyb25tZW50c109XCJpc0xvYWRpbmdFbnZpcm9ubWVudHNcIlxuICAgICAgW2RlZmF1bHRUZXN0RGF0YVByb2ZpbGVJZF09XCJkZWZhdWx0VGVzdERhdGFQcm9maWxlSWRcIlxuICAgICAgW2RlZmF1bHRUZXN0RGF0YVN0YXJ0SW5kZXhdPVwiZGVmYXVsdFRlc3REYXRhU3RhcnRJbmRleFwiXG4gICAgICAodGVtcGxhdGVDaGFuZ2VkKT1cInNlbGVjdFdoaWxlVGVtcGxhdGUoJGV2ZW50KVwiIFxuICAgICAgKGNyZWF0ZVN0ZXApPVwiY3JlYXRlV2hpbGVTdGVwKCRldmVudClcIlxuICAgICAgKGxvYWRNb3JlRWxlbWVudHMpPVwibG9hZE1vcmVFbGVtZW50cy5lbWl0KClcIlxuICAgICAgKHNlYXJjaEVsZW1lbnRzKT1cInNlYXJjaEVsZW1lbnRzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAoc2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUpPVwic2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChjcmVhdGVFbGVtZW50KT1cImNyZWF0ZUVsZW1lbnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChzZWFyY2hTY3JlZW5OYW1lKT1cInNlYXJjaFNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChsb2FkTW9yZVNjcmVlbk5hbWVzKT1cImxvYWRNb3JlU2NyZWVuTmFtZXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgIChjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdCk9XCJjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdC5lbWl0KCRldmVudClcIlxuICAgICAgKHNlYXJjaFBhcmFtZXRlcnMpPVwic2VhcmNoUGFyYW1ldGVycy5lbWl0KCRldmVudClcIlxuICAgICAgKGxvYWRNb3JlUGFyYW1ldGVycyk9XCJsb2FkTW9yZVBhcmFtZXRlcnMuZW1pdCgpXCJcbiAgICAgIChzZWFyY2hFbnZpcm9ubWVudHMpPVwic2VhcmNoRW52aXJvbm1lbnRzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAobG9hZE1vcmVFbnZpcm9ubWVudHMpPVwibG9hZE1vcmVFbnZpcm9ubWVudHMuZW1pdCgpXCJcbiAgICAgIChyZWRpcmVjdFRvUGFyYW1ldGVyKT1cInJlZGlyZWN0VG9QYXJhbWV0ZXIuZW1pdCgpXCJcbiAgICAgIChyZWRpcmVjdFRvRW52aXJvbm1lbnQpPVwicmVkaXJlY3RUb0Vudmlyb25tZW50LmVtaXQoKVwiXG4gICAgICAoY2FuY2VsRWxlbWVudEZvcm0pPVwiY2FuY2VsRWxlbWVudEZvcm0uZW1pdCgpXCI+XG4gICAgPC9jcWEtc3RlcC1idWlsZGVyLWFjdGlvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgPGRpdiAqbmdJZj1cInNlbGVjdGVkTG9vcFR5cGUgPT09ICdmb3InXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1nYXAtMiBjcWEtbXQtNiBjcWEtcHQtNCBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICBjbGFzcz1cImNxYS13LTEvMlwiXG4gICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgdGV4dD1cIkNhbmNlbFwiXG4gICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgY2xhc3M9XCJjcWEtdy0xLzJcIlxuICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICB0ZXh0PVwiQ3JlYXRlIFN0ZXBcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNGb3JtVmFsaWQoKVwiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNyZWF0ZVN0ZXAoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
|
|
@@ -32432,24 +32432,42 @@ class StepBuilderLoopComponent {
|
|
|
32432
32432
|
}
|
|
32433
32433
|
this.updateLoopIndexOptions();
|
|
32434
32434
|
}
|
|
32435
|
+
/**
|
|
32436
|
+
* Get display name for a 1-based row index from the selected profile's data array (data[index-1].name).
|
|
32437
|
+
* Returns null if no name. Matches loop-step edit mode behavior.
|
|
32438
|
+
*/
|
|
32439
|
+
getDataRowNameForOneBasedIndex(oneBasedIndex) {
|
|
32440
|
+
const profile = this.selectedDataProfile;
|
|
32441
|
+
if (!(profile === null || profile === void 0 ? void 0 : profile.data) || !Array.isArray(profile.data))
|
|
32442
|
+
return null;
|
|
32443
|
+
const idx = oneBasedIndex - 1;
|
|
32444
|
+
if (idx < 0 || idx >= profile.data.length)
|
|
32445
|
+
return null;
|
|
32446
|
+
const row = profile.data[idx];
|
|
32447
|
+
return row && (row.name != null ? String(row.name) : null);
|
|
32448
|
+
}
|
|
32449
|
+
/**
|
|
32450
|
+
* Build label for a loop index option: "setName (n)" when row has name, else "Step (n)".
|
|
32451
|
+
* Matches loop-step edit mode dropdown display.
|
|
32452
|
+
*/
|
|
32453
|
+
getLoopIndexOptionLabel(idx) {
|
|
32454
|
+
const rowName = this.getDataRowNameForOneBasedIndex(idx);
|
|
32455
|
+
return rowName ? `${rowName} (${idx})` : `Step (${idx})`;
|
|
32456
|
+
}
|
|
32435
32457
|
/**
|
|
32436
32458
|
* Update loop start and end config options
|
|
32437
32459
|
*/
|
|
32438
32460
|
updateLoopIndexOptions() {
|
|
32439
|
-
// Convert startArray to SelectOptions
|
|
32440
|
-
const startOptions = this.startArray.map(idx =>
|
|
32441
|
-
|
|
32442
|
-
value: idx,
|
|
32443
|
-
|
|
32444
|
-
|
|
32445
|
-
|
|
32446
|
-
|
|
32447
|
-
|
|
32448
|
-
|
|
32449
|
-
value: idx,
|
|
32450
|
-
name: String(idx),
|
|
32451
|
-
label: String(idx)
|
|
32452
|
-
}));
|
|
32461
|
+
// Convert startArray to SelectOptions with "Step (n)" or "setName (n)" labels
|
|
32462
|
+
const startOptions = this.startArray.map(idx => {
|
|
32463
|
+
const label = this.getLoopIndexOptionLabel(idx);
|
|
32464
|
+
return { id: idx, value: idx, name: label, label };
|
|
32465
|
+
});
|
|
32466
|
+
// Convert endArray to SelectOptions with same label format
|
|
32467
|
+
const endOptions = this.endArray.map(idx => {
|
|
32468
|
+
const label = this.getLoopIndexOptionLabel(idx);
|
|
32469
|
+
return { id: idx, value: idx, name: label, label };
|
|
32470
|
+
});
|
|
32453
32471
|
this.loopStartConfig = Object.assign(Object.assign({}, this.loopStartConfig), { options: [{ id: -1, value: -1, name: 'Start', label: 'Start' }, ...startOptions], onChange: (value) => {
|
|
32454
32472
|
this.onLoopStartChange(value);
|
|
32455
32473
|
} });
|