@talrace/ngx-noder 0.0.11 → 0.0.12
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/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +2 -2
- package/esm2022/lib/editor/execution/edit.session.mjs +3 -3
- package/esm2022/lib/editor/execution/editor.mjs +12 -12
- package/esm2022/lib/editor/gadgets/history/operation-history.mjs +17 -18
- package/esm2022/lib/editor/operations/helpers/content-operations.helper.mjs +4 -4
- package/esm2022/lib/editor/operations/operations-helper.helper.mjs +7 -6
- package/esm2022/lib/editor/operations/save-commands.helper.mjs +4 -4
- package/esm2022/lib/models/generated/delete.model.mjs +1 -1
- package/esm2022/lib/models/generated/link-data.model.mjs +1 -1
- package/esm2022/lib/models/generated/link.model.mjs +1 -1
- package/fesm2022/talrace-ngx-noder.mjs +41 -42
- package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
- package/lib/editor/execution/editor.d.ts +1 -1
- package/lib/editor/gadgets/history/operation-history.d.ts +2 -2
- package/lib/editor/operations/helpers/content-operations.helper.d.ts +1 -1
- package/lib/editor/operations/operations-helper.helper.d.ts +1 -1
- package/lib/editor/operations/save-commands.helper.d.ts +1 -1
- package/lib/models/generated/delete.model.d.ts +1 -1
- package/package.json +1 -1
package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs
CHANGED
|
@@ -13,7 +13,7 @@ export class FontComponent {
|
|
|
13
13
|
constructor() {
|
|
14
14
|
this.isDisabled = false;
|
|
15
15
|
this.selectFont = new EventEmitter();
|
|
16
|
-
this.fonts = [
|
|
16
|
+
this.fonts = ['Arial', DEFAULT_FONT_FAMILY, 'Times New Roman', 'Verdana'];
|
|
17
17
|
this.font = DEFAULT_FONT_FAMILY;
|
|
18
18
|
}
|
|
19
19
|
set styles(value) {
|
|
@@ -46,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
46
46
|
}], selectFont: [{
|
|
47
47
|
type: Output
|
|
48
48
|
}] } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9udC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9hcGFydC1jb21wb25lbnRzL2VkaXRvci10b29sYmFyL2NvbXBvbmVudHMvYnV0dG9ucy9mb250L2ZvbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvYXBhcnQtY29tcG9uZW50cy9lZGl0b3ItdG9vbGJhci9jb21wb25lbnRzL2J1dHRvbnMvZm9udC9mb250LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOzs7Ozs7QUFXOUcsTUFBTSxPQUFPLGFBQWE7SUFSMUI7UUFTYSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBbUJsQixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVsRCxVQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFckUsU0FBSSxHQUFHLG1CQUFtQixDQUFDO0tBSzlCO0lBMUJHLElBQ0ksTUFBTSxDQUFDLEtBQXFCO1FBQzVCLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO1lBQ3BCLE9BQU87U0FDVjtRQUVELEtBQUssSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxVQUFVLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksaUJBQWlCLE1BQU0sVUFBVSxFQUFFLENBQUM7WUFDNUYsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsT0FBTzthQUNWO1NBQ0o7SUFDTCxDQUFDO0lBUUQsWUFBWSxDQUFDLElBQVk7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQzsrR0E1QlEsYUFBYTttR0FBYixhQUFhLHVLQ2pCMUIsc25CQXVCQSxtT0RaYyxZQUFZLDJKQUFFLGVBQWUsMk5BQUUsYUFBYSxtTEFBRSxhQUFhOzs0RkFNNUQsYUFBYTtrQkFSekIsU0FBUztpQ0FDTSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsWUFDNUQsY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxVQUFVO3NCQUFsQixLQUFLO2dCQUdGLE1BQU07c0JBRFQsS0FBSztnQkFpQkksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5cbmltcG9ydCB7IERFRkFVTFRfRk9OVF9GQU1JTFksIERFRkFVTFRfRk9OVF9TSVpFIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZWRpdG9yL2NvbnRlbnQvY29uc3RhbnRzL2VkaXRvci5jb25zdCc7XG5pbXBvcnQgeyBJVG9vbGJhclN0eWxlcyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2VkaXRvci9jb250ZW50L2Rpc3BsYXktZGF0YS90b29sYmFyLXN0eWxlcy5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgTWF0TWVudU1vZHVsZV0sXG4gICAgc2VsZWN0b3I6ICdhcHAtbm9kLWZvbnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnZm9udC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ2ZvbnQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBGb250Q29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBpc0Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdHlsZXModmFsdWU6IElUb29sYmFyU3R5bGVzKSB7XG4gICAgICAgIGlmICghdmFsdWU/LmZvbnRGYW1pbHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGZvbnRGYW1pbHkgb2YgdmFsdWUuZm9udEZhbWlseS5zcGxpdCgnLCAnKSkge1xuICAgICAgICAgICAgY29uc3QgaXRhbGljID0gdmFsdWUuaXRhbGljID8gJ2l0YWxpYyAnIDogJyc7XG4gICAgICAgICAgICBjb25zdCBib2xkID0gdmFsdWUuYm9sZCA/ICdib2xkICcgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGZvbnRTdHlsZXMgPSBgJHtpdGFsaWN9JHtib2xkfSR7dmFsdWUuZm9udFNpemUgPz8gREVGQVVMVF9GT05UX1NJWkV9cHQgJHtmb250RmFtaWx5fWA7XG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQuZm9udHMuY2hlY2soZm9udFN0eWxlcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbnQgPSBmb250RmFtaWx5LnJlcGxhY2VBbGwoJ1wiJywgJycpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBPdXRwdXQoKSBzZWxlY3RGb250ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBmb250cyA9IFsnQXJpYWwnLCBERUZBVUxUX0ZPTlRfRkFNSUxZLCAnVGltZXMgTmV3IFJvbWFuJywgJ1ZlcmRhbmEnXTtcblxuICAgIGZvbnQgPSBERUZBVUxUX0ZPTlRfRkFNSUxZO1xuXG4gICAgb25TZWxlY3RGb250KGZvbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdEZvbnQuZW1pdChmb250KTtcbiAgICB9XG59XG4iLCI8YnV0dG9uXG4gICAgbWF0LWJ1dHRvblxuICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJmb250TWVudVwiXG4gICAgW21hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzXT1cImZhbHNlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvbnQtbWVudVwiPlxuICAgICAgICA8c3Bhbj57eyBmb250IH19PC9zcGFuPlxuICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgIGZvbnRTZXQ9XCJub2Rlci1pY29uXCJcbiAgICAgICAgICAgIGZvbnRJY29uPVwiaWNvbi1hcnJvdy1kcm9wZG93blwiPjwvbWF0LWljb24+XG4gICAgPC9kaXY+XG48L2J1dHRvbj5cbjxtYXQtbWVudVxuICAgICNmb250TWVudT1cIm1hdE1lbnVcIlxuICAgIGNsYXNzPVwibm9kZXItbW9kYWxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmb250IG9mIGZvbnRzXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdEZvbnQoZm9udClcIj5cbiAgICAgICAgICAgIHt7IGZvbnQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG48L21hdC1tZW51PlxuIl19
|
|
@@ -261,7 +261,7 @@ export class EditSession {
|
|
|
261
261
|
CustomComponentHelper.applyRemovingComponents(this.customComponents.images, partIndexes.startIndex, partIndexes.endIndex);
|
|
262
262
|
CustomComponentHelper.applyRemovingComponents(this.customComponents.customElements, partIndexes.startIndex, partIndexes.endIndex);
|
|
263
263
|
CustomComponentHelper.applyRemovingComponents(this.customComponents.tabs, partIndexes.startIndex, partIndexes.endIndex);
|
|
264
|
-
OperationsHelper.delete(this.model, partIndexes.startIndex, partIndexes.endIndex);
|
|
264
|
+
OperationsHelper.delete(this.model, partIndexes.startIndex, partIndexes.endIndex - partIndexes.startIndex + 1);
|
|
265
265
|
this.selection.placeCursor(range.start);
|
|
266
266
|
this.displayData.resetAllNumberingInfo(range.start.row);
|
|
267
267
|
this.displayData.updateNextLineIndexes(range.start.row, range.start.row);
|
|
@@ -271,7 +271,7 @@ export class EditSession {
|
|
|
271
271
|
this.applyToolbarStyles();
|
|
272
272
|
}
|
|
273
273
|
replace(model) {
|
|
274
|
-
this.removeByDocumentIndexes(model.delete.startIndex, model.delete.
|
|
274
|
+
this.removeByDocumentIndexes(model.delete.startIndex, model.delete.startIndex + model.delete.count);
|
|
275
275
|
let endPoint;
|
|
276
276
|
if (model.insertText) {
|
|
277
277
|
endPoint = this.insertTextByDocumentIndex(model.insertText.insertIndex, model.insertText.text);
|
|
@@ -571,4 +571,4 @@ export class EditSession {
|
|
|
571
571
|
tableComponent.instance.updateTable();
|
|
572
572
|
}
|
|
573
573
|
}
|
|
574
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBR3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUkxSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFLbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFTakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3hFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdD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QUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxXQUFXLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3BFLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFlBQVksQ0FBQyxXQUFtQixFQUFFLEtBQWlCO1FBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBZSxDQUFDO1FBQ2pFLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBQ3RHLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWVsZW1lbnQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlJbWFnZVN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWltYWdlLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEJhc2VOb2RlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2Fic3RyYWN0L2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJyZWFrSGVscGVyIH0gZnJvbSAnLi4vZ2FkZ2V0cy9wYWdlLWJyZWFrL2JyZWFrLmhlbHBlcic7XG5pbXBvcnQgeyBCcmVha1R5cGVzIH0gZnJvbSAnLi4vZ2FkZ2V0cy9wYWdlLWJyZWFrL2JyZWFrLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgQ29udGVudEhlbHBlciB9IGZyb20gJy4uL3Bvc2l0aW9uaW5nL2NvbnRlbnQuaGVscGVyJztcbmltcG9ydCB7IENvbnRlbnRzSW50ZXJmYWNlIH0gZnJvbSAnLi4vY29udGVudC9jb250ZW50cy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ3Vyc29yUGFyYWdyYXBoIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvY3Vyc29yLXBhcmFncmFwaCc7XG5pbXBvcnQgeyBDVVNUT01fRUxFTUVOVF9NQVJLRVIgfSBmcm9tICcuLi9jb21wb25lbnRzL3NoYXJlZC9jdXN0b20tY29udGVudC1tYXJrZXJzLmNvbnN0JztcbmltcG9ydCB7IEN1c3RvbUNvbXBvbmVudEhlbHBlciB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb21wb25lbnQuaGVwbGVyJztcbmltcG9ydCB7IEN1c3RvbUNvbnRlbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3NoYXJlZC9jdXN0b20tY29udGVudCc7XG5pbXBvcnQgeyBDdXN0b21Db250ZW50U2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL3NlcnZpY2VzL2N1c3RvbS1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgREVGQVVMVF9URVhUX1NUWUxFLCBIWVBFUkxJTktfRk9OVF9DT0xPUiwgSFlQRVJMSU5LX0hFQURJTkdfU1RZTEVfSUQsIE5FV19MSU5FX01BUktVUCB9IGZyb20gJy4uL2NvbnRlbnQvY29uc3RhbnRzL2VkaXRvci5jb25zdCc7XG5pbXBvcnQgeyBEaXNwbGF5RGF0YSB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2Rpc3BsYXktZGF0YSc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWxlbWVudERhdGFNb2RlbCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZXh0ZXJuYWwtZWxlbWVudC9tb2RlbHMvZWxlbWVudC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZWxlbWVudC5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtYXRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZm9ybWF0Lm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdFN0eWxlSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL2Zvcm1hdC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgR2VuZXJhbFByb3BlcnRpZXNNb2RlbCB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2dlbmVyYWwtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBJQ3VzdG9tQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb21wb25lbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbWFnZURhdGFNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW1hZ2UtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRCcmVha01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtYnJlYWsubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0RWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtZWxlbWVudC5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRJbWFnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtaW1hZ2UubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0TGlua01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtbGluay5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRQYXJhZ3JhcGhNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXBhcmFncmFwaC5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFiTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWIubW9kZWwnO1xuaW1wb3J0IHsgSVRvb2xiYXJTdHlsZXMgfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS90b29sYmFyLXN0eWxlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlua0RhdGFNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbGluay1kYXRhLm1vZGVsJztcbmltcG9ydCB7IExpbmtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbGluay5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlckltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9pbWFnZS9jb21wb25lbnRzL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlclRhYkNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvdGFiL3RhYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZXJUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvdGFibGUvY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVyaW5nSGVscGVyIH0gZnJvbSAnLi4vZ2FkZ2V0cy9udW1iZXJpbmcvbnVtYmVyaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBOdW1iZXJpbmdMZXZlbE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9udW1iZXJpbmctbGV2ZWwubW9kZWwnO1xuaW1wb3J0IHsgTnVtYmVyaW5nTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL251bWJlcmluZy5tb2RlbCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdQYXJhZ3JhcGhTdHlsZU1vZGVsIH0gZnJvbSAnLi4vZ2FkZ2V0cy9udW1iZXJpbmcvbnVtYmVyaW5nLXBhcmFncmFwaC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBPcGVyYXRpb25zSGVscGVyIH0gZnJvbSAnLi4vb3BlcmF0aW9ucy9vcGVyYXRpb25zLWhlbHBlci5oZWxwZXInO1xuaW1wb3J0IHsgUGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhTdHlsZUhlbHBlciB9IGZyb20gJy4vaGVscGVycy9wYXJhZ3JhcGgtc3R5bGUuaGVscGVyJztcbmltcG9ydCB7IFBhcmFncmFwaFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBSYW5nZSB9IGZyb20gJy4uL3Bvc2l0aW9uaW5nL3JhbmdlJztcbmltcG9ydCB7IFJlcGxhY2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVwbGFjZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzaXplLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgUmVzdG9yZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLm1vZGVsJztcbmltcG9ydCB7IFNjcm9sbEJhciB9IGZyb20gJy4uL2dhZGdldHMvc2Nyb2xsYmFyJztcbmltcG9ydCB7IFNlbGVjdGlvbiB9IGZyb20gJy4uL3Bvc2l0aW9uaW5nL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGV4dC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBVbmljb2RlSGVscGVyIH0gZnJvbSAnLi4vZ2FkZ2V0cy91bmljb2RlL3VuaWNvZGUuaGVscGVyJztcblxuZXhwb3J0IGNsYXNzIEVkaXRTZXNzaW9uIHtcbiAgICB0b2tlblJlID0gbmV3IFJlZ0V4cCgnXlsnICsgVW5pY29kZUhlbHBlci53b3JkQ2hhcnMgKyAnXFxcXCRfXSsnLCAnZycpO1xuXG4gICAgbm9uVG9rZW5SZSA9IG5ldyBSZWdFeHAoJ14oPzpbXicgKyBVbmljb2RlSGVscGVyLndvcmRDaGFycyArICdcXFxcJF9dfFxcXFxzXSkrJywgJ2cnKTtcblxuICAgIGdldCBzY3JvbGxUb3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjcm9sbEJhcj8uc2Nyb2xsVG9wID8/IDA7IC8vIG9ubHkgbWFpbiBzZXNzaW9uIGlzIHNjcm9sbGFibGVcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGRpc3BsYXlEYXRhOiBEaXNwbGF5RGF0YSxcbiAgICAgICAgcHVibGljIHNlc3Npb25JZDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY3VzdG9tQ29udGVudFNlcnZpY2U6IEN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgbW9kZWw6IENvbnRlbnRzSW50ZXJmYWNlLFxuICAgICAgICBwdWJsaWMgc2VsZWN0aW9uOiBTZWxlY3Rpb24sXG4gICAgICAgIHB1YmxpYyBnZW5lcmFsUHJvcGVydGllczogR2VuZXJhbFByb3BlcnRpZXNNb2RlbCxcbiAgICAgICAgcHVibGljIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjdXN0b21Db21wb25lbnRzOiBJQ3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgcHJpdmF0ZSB0eXBlOiAnY2VsbCcgfCAnZWRnZScgfCAnbWFpbicsXG4gICAgICAgIHByaXZhdGUgc2Nyb2xsQmFyPzogU2Nyb2xsQmFyXG4gICAgKSB7fVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZ2V0Um93TGVuZ3RoKHJvdzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbcm93XS5uZXh0TGluZUluZGV4ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBoc1tyb3ddLm5leHRMaW5lSW5kZXhlcy5sZW5ndGggKyAxO1xuICAgIH1cblxuICAgIGdldFJvd0NhY2hlSW5kZXgoY2FjaGVBcnJheTogbnVtYmVyW10sIHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgZW5kID0gY2FjaGVBcnJheS5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoc3RhcnQgPD0gZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBtaWQgPSAoc3RhcnQgKyBlbmQpID4+IDE7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBjYWNoZUFycmF5W21pZF07XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA+IGNlbnRlcikge1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbWlkICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPCBjZW50ZXIpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSBtaWQgLSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0YXJ0IC0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSB3aWR0aCBvZiB0aGUgc3RyaW5nIGBzdHJgIG9uIHRoZSBzY3JlZW4gd2hpbGUgYXNzdW1pbmcgdGhhdCB0aGUgc3RyaW5nIHN0YXJ0cyBhdCB0aGUgZmlyc3QgY29sdW1uIG9uIHRoZSBzY3JlZW4uXG4gICAgICogVGhlIGZpcnN0IHBvc2l0aW9uIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgZm9yIGBzdHJgIG9uIHNjcmVlbi5cbiAgICAgKiBUaGUgc2Vjb25kIHZhbHVlIGNvbnRhaW5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgZG9jdW1lbnQgY29sdW1uIHRoYXQgdGhpcyBmdW5jdGlvbiByZWFkIHVudGlsLlxuICAgICAqL1xuICAgIGdldFN0cmluZ1NjcmVlbldpZHRoKHN0cjogc3RyaW5nLCBtYXhTY3JlZW5Db2x1bW4/OiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgICAgIGxldCBzY3JlZW5Db2x1bW4gPSAwO1xuICAgICAgICBsZXQgY29sdW1uOiBudW1iZXI7XG4gICAgICAgIGZvciAoY29sdW1uID0gMDsgY29sdW1uIDwgc3RyLmxlbmd0aDsgY29sdW1uKyspIHtcbiAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSAxO1xuXG4gICAgICAgICAgICBpZiAoc2NyZWVuQ29sdW1uID4gbWF4U2NyZWVuQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3NjcmVlbkNvbHVtbiwgY29sdW1uXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIHN0YXJ0aW5nIHJvdyBhbmQgY29sdW1uLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBgUmFuZ2VgIG9mIHRoZSBmaXJzdCB3b3JkIGJvdW5kYXJ5IGl0IGZpbmRzLlxuICAgICAqL1xuICAgIGdldFdvcmRSYW5nZShyb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIpOiBSYW5nZSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocm93KTtcbiAgICAgICAgbGV0IGluVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbHVtbiA+IDApIHtcbiAgICAgICAgICAgIGluVG9rZW4gPSAhIWxpbmUuY2hhckF0KGNvbHVtbiAtIDEpLm1hdGNoKHRoaXMudG9rZW5SZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWluVG9rZW4pIHtcbiAgICAgICAgICAgIGluVG9rZW4gPSAhIWxpbmUuY2hhckF0KGNvbHVtbikubWF0Y2godGhpcy50b2tlblJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZWdleHA6IFJlZ0V4cDtcbiAgICAgICAgaWYgKGluVG9rZW4pIHtcbiAgICAgICAgICAgIHJlZ2V4cCA9IHRoaXMudG9rZW5SZTtcbiAgICAgICAgfSBlbHNlIGlmICgvXlxccyskLy50ZXN0KGxpbmUuc2xpY2UoY29sdW1uIC0gMSwgY29sdW1uICsgMSkpKSB7XG4gICAgICAgICAgICByZWdleHAgPSAvXFxzLztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlZ2V4cCA9IHRoaXMubm9uVG9rZW5SZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGFydCA9IGNvbHVtbjtcbiAgICAgICAgaWYgKHN0YXJ0ID4gMCkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHN0YXJ0LS07XG4gICAgICAgICAgICB9IHdoaWxlIChzdGFydCA+PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KS5tYXRjaChyZWdleHApKTtcblxuICAgICAgICAgICAgc3RhcnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlbmQgPSBjb2x1bW47XG4gICAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBsaW5lLmNoYXJBdChlbmQpLm1hdGNoKHJlZ2V4cCkpIHtcbiAgICAgICAgICAgIGVuZCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShuZXcgQ3Vyc29yUGFyYWdyYXBoKHJvdywgc3RhcnQpLCBuZXcgQ3Vyc29yUGFyYWdyYXBoKHJvdywgZW5kKSk7XG4gICAgfVxuXG4gICAgZ2V0RGlzcGxheUxpbmUocm93OiBudW1iZXIsIGVuZENvbHVtbjogbnVtYmVyLCBzdGFydENvbHVtbj86IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaENvbnRlbnQgPSB0aGlzLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocm93KTtcblxuICAgICAgICByZXR1cm4gcGFyYWdyYXBoQ29udGVudC5zdWJzdHJpbmcoc3RhcnRDb2x1bW4gfHwgMCwgZW5kQ29sdW1uIHx8IHBhcmFncmFwaENvbnRlbnQubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZW1vdmVCeURvY3VtZW50SW5kZXhlcyhzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbiA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBzdGFydEluZGV4KTtcbiAgICAgICAgY29uc3QgZW5kUGFyYWdyYXBoUG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2Uoc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbiwgZW5kUGFyYWdyYXBoUG9zaXRpb24pKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUZXh0QnlEb2N1bWVudEluZGV4KGluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZywgc3R5bGU/OiBUZXh0U3R5bGVNb2RlbCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0VGV4dChwYXJhZ3JhcGhQb3NpdGlvbiwgdGV4dCwgc3R5bGUpO1xuICAgIH1cblxuICAgIGluc2VydEVsZW1lbnRCeURvY3VtZW50SW5kZXgoaW5zZXJ0RWxlbWVudDogSW5zZXJ0RWxlbWVudE1vZGVsKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEVsZW1lbnQuZWxlbWVudC5pbnNlcnRJbmRleCk7XG4gICAgICAgIHJldHVybiB0aGlzLmluc2VydEVsZW1lbnQoZWxlbWVudFBvc2l0aW9uLCBpbnNlcnRFbGVtZW50LmVsZW1lbnQpO1xuICAgIH1cblxuICAgIGluc2VydEJyZWFrQnlEb2N1bWVudEluZGV4KGluc2VydEVsZW1lbnQ6IEluc2VydEJyZWFrTW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBlbGVtZW50UG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0RWxlbWVudC5pbnNlcnRJbmRleCk7XG4gICAgICAgIHJldHVybiB0aGlzLmluc2VydEJyZWFrKGVsZW1lbnRQb3NpdGlvbiwgaW5zZXJ0RWxlbWVudC5icmVha1R5cGUgYXMgQnJlYWtUeXBlcyk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFiQnlEb2N1bWVudEluZGV4KGluc2VydEVsZW1lbnQ6IEluc2VydFRhYk1vZGVsKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEVsZW1lbnQuaW5zZXJ0SW5kZXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRUYWIoZWxlbWVudFBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBpbnNlcnRJbWFnZUJ5RG9jdW1lbnRJbmRleChpbnNlcnRFbGVtZW50OiBJbnNlcnRJbWFnZU1vZGVsKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEVsZW1lbnQuaW5zZXJ0SW5kZXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRJbWFnZShlbGVtZW50UG9zaXRpb24sIGluc2VydEVsZW1lbnQuaW1hZ2VEYXRhKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZUJ5RG9jdW1lbnRJbmRleChpbnNlcnRFbGVtZW50OiBJbnNlcnRUYWJsZU1vZGVsKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEVsZW1lbnQuaW5zZXJ0SW5kZXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRUYWJsZShlbGVtZW50UG9zaXRpb24sIGluc2VydEVsZW1lbnQpO1xuICAgIH1cblxuICAgIGluc2VydExpbmtCeURvY3VtZW50SW5kZXgoaW5zZXJ0RWxlbWVudDogSW5zZXJ0TGlua01vZGVsKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEVsZW1lbnQuaW5zZXJ0SW5kZXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRMaW5rKGVsZW1lbnRQb3NpdGlvbiwgaW5zZXJ0RWxlbWVudC5saW5rRGF0YU1vZGVsKTtcbiAgICB9XG5cbiAgICBpbnNlcnRQYXJhZ3JhcGhCeURvY3VtZW50SW5kZXgoaW5zZXJ0RWxlbWVudDogSW5zZXJ0UGFyYWdyYXBoTW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBlbGVtZW50UG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0RWxlbWVudC5pbnNlcnRJbmRleCk7XG4gICAgICAgIHJldHVybiB0aGlzLmluc2VydFBhcmFncmFwaChlbGVtZW50UG9zaXRpb24sIGluc2VydEVsZW1lbnQpO1xuICAgIH1cblxuICAgIGFwcGx5VGV4dFN0eWxlKHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgdGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydFBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBzdGFydEluZGV4KS5yb3c7XG4gICAgICAgIGNvbnN0IGVuZFBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBlbmRJbmRleCkucm93O1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmFwcGx5VGV4dFN0eWxlKHRoaXMubW9kZWwsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhzdGFydFBhcmFncmFwaCwgZW5kUGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5zZXRUZXh0U3R5bGUodGV4dFN0eWxlKTtcbiAgICB9XG5cbiAgICBhcHBseVBhcmFncmFwaFN0eWxlKHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgcGFyYWdyYXBoU3R5bGU6IFBhcmFncmFwaFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRQYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgc3RhcnRJbmRleCkucm93O1xuICAgICAgICBjb25zdCBlbmRQYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgZW5kSW5kZXgpLnJvdztcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5hcHBseVBhcmFncmFwaFN0eWxlKHRoaXMubW9kZWwsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHN0YXJ0UGFyYWdyYXBoLCBlbmRQYXJhZ3JhcGgpO1xuICAgICAgICB0aGlzLmFwcGx5VG9vbGJhclN0eWxlcygpO1xuICAgIH1cblxuICAgIGFwcGx5RWxlbWVudFN0eWxlKG1vZGVsOiBBcHBseUVsZW1lbnRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuYXBwbHlFbGVtZW50U3R5bGUodGhpcy5tb2RlbCwgbW9kZWwpO1xuICAgICAgICBjb25zdCBpbWFnZUNvbXBvbmVudFJlZiA9IHRoaXMuY3VzdG9tQ29tcG9uZW50cy5jdXN0b21FbGVtZW50cy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gbW9kZWwuaW5zZXJ0SW5kZXgpO1xuICAgICAgICBpbWFnZUNvbXBvbmVudFJlZi5pbnN0YW5jZS5pbml0aWFsaXplKCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBtb2RlbC5pbnNlcnRJbmRleCkucm93O1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwYXJhZ3JhcGgsIHBhcmFncmFwaCk7XG4gICAgfVxuXG4gICAgYWRkTnVtYmVyaW5nKGxldmVsczogTnVtYmVyaW5nTGV2ZWxNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRQYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgc3RhcnRJbmRleCkucm93O1xuICAgICAgICBjb25zdCBlbmRQYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgZW5kSW5kZXgpLnJvdztcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5hZGROdW1iZXJpbmcodGhpcy5tb2RlbCwgdGhpcy5nZW5lcmFsUHJvcGVydGllcy5udW1iZXJpbmdzLCBzdGFydEluZGV4LCBlbmRJbmRleCwgbGV2ZWxzKTtcbiAgICAgICAgdGhpcy5nZW5lcmFsUHJvcGVydGllcy5udW1iZXJpbmdJbmZvID0ge307XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHN0YXJ0UGFyYWdyYXBoLCBlbmRQYXJhZ3JhcGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRQYXJhZ3JhcGg7IGkgPD0gZW5kUGFyYWdyYXBoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaFNldHRpbmdzKGkpLm51bWJlcmluZ0RhdGEubnVtYmVyaW5nSWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU51bWJlcmluZ3NEYXRhT25DaGFuZ2UoZW5kUGFyYWdyYXBoICsgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFwcGx5VG9vbGJhclN0eWxlcygpO1xuICAgIH1cblxuICAgIHJlbW92ZU51bWJlcmluZ3Moc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0UGFyYWdyYXBoID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgpLnJvdztcbiAgICAgICAgY29uc3QgZW5kUGFyYWdyYXBoID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGVuZEluZGV4KS5yb3c7XG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIucmVtb3ZlTnVtYmVyaW5ncyh0aGlzLm1vZGVsLCB0aGlzLmdlbmVyYWxQcm9wZXJ0aWVzLm51bWJlcmluZ3MsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS5yZXNldEFsbE51bWJlcmluZ0luZm8oc3RhcnRQYXJhZ3JhcGgpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhzdGFydFBhcmFncmFwaCwgZW5kUGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOdW1iZXJpbmdzRGF0YU9uQ2hhbmdlKGVuZFBhcmFncmFwaCk7XG5cbiAgICAgICAgdGhpcy5hcHBseVRvb2xiYXJTdHlsZXMoKTtcbiAgICB9XG5cbiAgICByZXN0b3JlTnVtYmVyaW5ncyhwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhNb2RlbFtdLCBudW1iZXJpbmdzOiBOdW1iZXJpbmdNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYXJhZ3JhcGhzWzBdLmluc2VydEluZGV4O1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHBhcmFncmFwaHNbcGFyYWdyYXBocy5sZW5ndGggLSAxXS5pbnNlcnRJbmRleDtcbiAgICAgICAgY29uc3Qgc3RhcnRQYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgc3RhcnRJbmRleCkucm93O1xuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoV2l0aE9mZnNldCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGVuZEluZGV4KTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5yZXN0b3JlTnVtYmVyaW5ncyh0aGlzLm1vZGVsLCB0aGlzLmdlbmVyYWxQcm9wZXJ0aWVzLm51bWJlcmluZ3MsIHBhcmFncmFwaHMsIG51bWJlcmluZ3MpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnJlc2V0QWxsTnVtYmVyaW5nSW5mbyhzdGFydFBhcmFncmFwaCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHN0YXJ0UGFyYWdyYXBoLCBlbmRQb3NpdGlvbi5yb3cpO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcmFncmFwaCBvZiBwYXJhZ3JhcGhzKSB7XG4gICAgICAgICAgICBpZiAocGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLm51bWJlcmluZ0lkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOdW1iZXJpbmdzRGF0YU9uQ2hhbmdlKGVuZFBvc2l0aW9uLnJvdyArIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoZW5kUG9zaXRpb24pO1xuICAgICAgICB0aGlzLmFwcGx5VG9vbGJhclN0eWxlcygpO1xuICAgIH1cblxuICAgIGFwcGx5SW1hZ2VTdHlsZShhcHBseUltYWdlOiBBcHBseUltYWdlU3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbWFnZUNvbXBvbmVudFJlZiA9IHRoaXMuY3VzdG9tQ29tcG9uZW50cy5pbWFnZXMuZmluZCh4ID0+IHguaW5zdGFuY2UuaW5zZXJ0SW5kZXggPT09IGFwcGx5SW1hZ2UuaW5zZXJ0SW5kZXgpO1xuICAgICAgICBpbWFnZUNvbXBvbmVudFJlZi5pbnN0YW5jZS5yZXNpemUoeyB3aWR0aDogYXBwbHlJbWFnZS53aWR0aCwgaGVpZ2h0OiBhcHBseUltYWdlLmhlaWdodCB9KTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5hcHBseUltYWdlU3R5bGUodGhpcy5tb2RlbCwgYXBwbHlJbWFnZSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5kaXNwbGF5RGF0YS5pbmRleFRvUG9zaXRpb24oYXBwbHlJbWFnZS5pbnNlcnRJbmRleCwgMCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHN0YXJ0LnJvdywgdGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIHJlc3RvcmVUZXh0U3R5bGVzKGZvcm1hdHM6IEZvcm1hdE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGZvcm1hdHNbMF0uc3RhcnRJbmRleDtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBmb3JtYXRzW2Zvcm1hdHMubGVuZ3RoIC0gMV0uZW5kSW5kZXg7XG4gICAgICAgIGNvbnN0IHN0YXJ0UGFyYWdyYXBoID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgpLnJvdztcbiAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaFdpdGhPZmZzZXQodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBlbmRJbmRleCk7XG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIucmVzdG9yZVRleHRTdHlsZXModGhpcy5tb2RlbCwgZm9ybWF0cyk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHN0YXJ0UGFyYWdyYXBoLCBlbmRQb3NpdGlvbi5yb3cpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihlbmRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuYXBwbHlUb29sYmFyU3R5bGVzKCk7XG4gICAgfVxuXG4gICAgcmVzdG9yZVBhcmFncmFwaFN0eWxlcyhwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYXJhZ3JhcGhzWzBdLmluc2VydEluZGV4O1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHBhcmFncmFwaHNbcGFyYWdyYXBocy5sZW5ndGggLSAxXS5pbnNlcnRJbmRleDtcbiAgICAgICAgY29uc3Qgc3RhcnRQYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgc3RhcnRJbmRleCkucm93O1xuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoV2l0aE9mZnNldCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGVuZEluZGV4KTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5yZXN0b3JlUGFyYWdyYXBoU3R5bGVzKHRoaXMubW9kZWwsIHBhcmFncmFwaHMpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhzdGFydFBhcmFncmFwaCwgZW5kUG9zaXRpb24ucm93KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoZW5kUG9zaXRpb24pO1xuICAgICAgICB0aGlzLmFwcGx5VG9vbGJhclN0eWxlcygpO1xuICAgIH1cblxuICAgIHNldFRleHRTdHlsZSh0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSVRvb2xiYXJTdHlsZXMgPSB7IC4uLnRoaXMuZWRpdG9yU2VydmljZS5zdHlsZXMgfTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHRleHRTdHlsZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdGV4dFN0eWxlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0eWxlcyA9IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBgcmFuZ2VgIGZyb20gdGhlIGRvY3VtZW50LlxuICAgICAqIElmIGByYW5nZWAgaXMgZW1wdHksIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdW5tb2RpZmllZCB2YWx1ZSBvZiBgcmFuZ2Uuc3RhcnRgLlxuICAgICAqL1xuICAgIHJlbW92ZShyYW5nZTogUmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFydEluZGV4ZXMgPSBDb250ZW50SGVscGVyLmdldFNlbGVjdGVkUGFydERvY3VtZW50SW5kZXhlcyh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHJhbmdlKTtcblxuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnJlbW92ZVJhbmdlKHJhbmdlKTtcblxuICAgICAgICBDdXN0b21Db21wb25lbnRIZWxwZXIuYXBwbHlSZW1vdmluZ0NvbXBvbmVudHModGhpcy5jdXN0b21Db21wb25lbnRzLnRhYmxlcywgcGFydEluZGV4ZXMuc3RhcnRJbmRleCwgcGFydEluZGV4ZXMuZW5kSW5kZXgpO1xuICAgICAgICBDdXN0b21Db21wb25lbnRIZWxwZXIuYXBwbHlSZW1vdmluZ0NvbXBvbmVudHModGhpcy5jdXN0b21Db21wb25lbnRzLmltYWdlcywgcGFydEluZGV4ZXMuc3RhcnRJbmRleCwgcGFydEluZGV4ZXMuZW5kSW5kZXgpO1xuICAgICAgICBDdXN0b21Db21wb25lbnRIZWxwZXIuYXBwbHlSZW1vdmluZ0NvbXBvbmVudHModGhpcy5jdXN0b21Db21wb25lbnRzLmN1c3RvbUVsZW1lbnRzLCBwYXJ0SW5kZXhlcy5zdGFydEluZGV4LCBwYXJ0SW5kZXhlcy5lbmRJbmRleCk7XG4gICAgICAgIEN1c3RvbUNvbXBvbmVudEhlbHBlci5hcHBseVJlbW92aW5nQ29tcG9uZW50cyh0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFicywgcGFydEluZGV4ZXMuc3RhcnRJbmRleCwgcGFydEluZGV4ZXMuZW5kSW5kZXgpO1xuXG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuZGVsZXRlKHRoaXMubW9kZWwsIHBhcnRJbmRleGVzLnN0YXJ0SW5kZXgsIHBhcnRJbmRleGVzLmVuZEluZGV4KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihyYW5nZS5zdGFydCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEucmVzZXRBbGxOdW1iZXJpbmdJbmZvKHJhbmdlLnN0YXJ0LnJvdyk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQucm93KTtcbiAgICAgICAgaWYgKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cgJiYgdGhpcy50eXBlICE9PSAnY2VsbCcpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTnVtYmVyaW5nc0RhdGFPbkNoYW5nZShyYW5nZS5zdGFydC5yb3cgKyAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwbHlUb29sYmFyU3R5bGVzKCk7XG4gICAgfVxuXG4gICAgcmVwbGFjZShtb2RlbDogUmVwbGFjZU1vZGVsKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgdGhpcy5yZW1vdmVCeURvY3VtZW50SW5kZXhlcyhtb2RlbC5kZWxldGUuc3RhcnRJbmRleCwgbW9kZWwuZGVsZXRlLmVuZEluZGV4ICsgMSk7XG4gICAgICAgIGxldCBlbmRQb2ludDogQ3Vyc29yUGFyYWdyYXBoO1xuICAgICAgICBpZiAobW9kZWwuaW5zZXJ0VGV4dCkge1xuICAgICAgICAgICAgZW5kUG9pbnQgPSB0aGlzLmluc2VydFRleHRCeURvY3VtZW50SW5kZXgobW9kZWwuaW5zZXJ0VGV4dC5pbnNlcnRJbmRleCwgbW9kZWwuaW5zZXJ0VGV4dC50ZXh0KTtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlbC5pbnNlcnRQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIGVuZFBvaW50ID0gdGhpcy5pbnNlcnRQYXJhZ3JhcGhCeURvY3VtZW50SW5kZXgobW9kZWwuaW5zZXJ0UGFyYWdyYXBoKTtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlbC5pbnNlcnRFbGVtZW50KSB7XG4gICAgICAgICAgICBlbmRQb2ludCA9IHRoaXMuaW5zZXJ0RWxlbWVudEJ5RG9jdW1lbnRJbmRleChtb2RlbC5pbnNlcnRFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlbC5pbnNlcnRCcmVhaykge1xuICAgICAgICAgICAgZW5kUG9pbnQgPSB0aGlzLmluc2VydEJyZWFrQnlEb2N1bWVudEluZGV4KG1vZGVsLmluc2VydEJyZWFrKTtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlbC5pbnNlcnRUYWIpIHtcbiAgICAgICAgICAgIGVuZFBvaW50ID0gdGhpcy5pbnNlcnRUYWJCeURvY3VtZW50SW5kZXgobW9kZWwuaW5zZXJ0VGFiKTtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlbC5pbnNlcnRJbWFnZSkge1xuICAgICAgICAgICAgZW5kUG9pbnQgPSB0aGlzLmluc2VydEltYWdlQnlEb2N1bWVudEluZGV4KG1vZGVsLmluc2VydEltYWdlKTtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlbC5pbnNlcnRUYWJsZSkge1xuICAgICAgICAgICAgZW5kUG9pbnQgPSB0aGlzLmluc2VydFRhYmxlQnlEb2N1bWVudEluZGV4KG1vZGVsLmluc2VydFRhYmxlKTtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlbC5pbnNlcnRMaW5rKSB7XG4gICAgICAgICAgICBlbmRQb2ludCA9IHRoaXMuaW5zZXJ0TGlua0J5RG9jdW1lbnRJbmRleChtb2RlbC5pbnNlcnRMaW5rKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICB9XG5cbiAgICBpbnNlcnRUZXh0KHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgsIHRleHQ6IHN0cmluZywgY3Vyc29yU3R5bGU/OiBUZXh0U3R5bGVNb2RlbCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBvc2l0aW9uKTtcbiAgICAgICAgaWYgKGN1cnNvclN0eWxlKSB7XG4gICAgICAgICAgICBPcGVyYXRpb25zSGVscGVyLmluc2VydFN0eWxlZFRleHQodGhpcy5tb2RlbCwgdGV4dCwgaW5zZXJ0SW5kZXgsIGN1cnNvclN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuaW5zZXJ0VGV4dCh0aGlzLm1vZGVsLCB0ZXh0LCBpbnNlcnRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSB0aGlzLmRpc3BsYXlEYXRhLmluc2VydFRleHQocG9zaXRpb24sIHRleHQpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnJlc2V0QWxsTnVtYmVyaW5nSW5mbyhwb3NpdGlvbi5yb3cpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwb3NpdGlvbi5yb3csIGVuZFBvc2l0aW9uLnJvdyk7XG4gICAgICAgIGlmIChlbmRQb3NpdGlvbi5yb3cgLSBwb3NpdGlvbi5yb3cgJiYgdGhpcy50eXBlICE9PSAnY2VsbCcpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTnVtYmVyaW5nc0RhdGFPbkNoYW5nZShlbmRQb3NpdGlvbi5yb3cgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihlbmRQb3NpdGlvbik7XG4gICAgICAgIHJldHVybiBlbmRQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBpbnNlcnRFbGVtZW50KHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgsIGVsZW1lbnQ6IEVsZW1lbnREYXRhTW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGluc2VydEVsZW1lbnQgPSBuZXcgSW5zZXJ0RWxlbWVudE1vZGVsKHsgZWxlbWVudDogbmV3IEVsZW1lbnRNb2RlbCh7IGluc2VydEluZGV4LCAuLi5lbGVtZW50IH0pIH0pO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmluc2VydEVsZW1lbnQodGhpcy5tb2RlbCwgaW5zZXJ0RWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsLmVsZW1lbnRzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmN1c3RvbUNvbnRlbnRTZXJ2aWNlLmZpbmRDb21wb25lbnRUeXBlKG1vZGVsLnR5cGUpO1xuICAgICAgICB0aGlzLmFkZENvbXBvbmVudCh0aGlzLmN1c3RvbUNvbXBvbmVudHMuY3VzdG9tRWxlbWVudHMsIG1vZGVsLCB0eXBlKTtcblxuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHRoaXMuZGlzcGxheURhdGEuaW5zZXJ0VGV4dChwb3NpdGlvbiwgQ1VTVE9NX0VMRU1FTlRfTUFSS0VSKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMocG9zaXRpb24ucm93LCBlbmRQb3NpdGlvbi5yb3cpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihlbmRQb3NpdGlvbik7XG4gICAgICAgIHJldHVybiBlbmRQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBpbnNlcnRCcmVhayhwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoLCBicmVha1R5cGU6IEJyZWFrVHlwZXMpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGlzT25OZXdQYXJhZ3JhcGggPVxuICAgICAgICAgICAgYnJlYWtUeXBlID09PSBCcmVha1R5cGVzLlBhZ2UgJiZcbiAgICAgICAgICAgIEJyZWFrSGVscGVyLmdldEJyZWFrVHlwZSh0aGlzLm1vZGVsLCBDVVNUT01fRUxFTUVOVF9NQVJLRVIsIGluc2VydEluZGV4IC0gMSkgIT09IEJyZWFrVHlwZXMuUGFnZTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGlzT25OZXdQYXJhZ3JhcGggPyBgJHtORVdfTElORV9NQVJLVVB9JHtDVVNUT01fRUxFTUVOVF9NQVJLRVJ9YCA6IENVU1RPTV9FTEVNRU5UX01BUktFUjtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5pbnNlcnRCcmVhayh0aGlzLm1vZGVsLCB0ZXh0LCBpbnNlcnRJbmRleCwgYnJlYWtUeXBlKTtcblxuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHRoaXMuZGlzcGxheURhdGEuaW5zZXJ0VGV4dChwb3NpdGlvbiwgdGV4dCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHBvc2l0aW9uLnJvdywgZW5kUG9zaXRpb24ucm93KTtcbiAgICAgICAgaWYgKGlzT25OZXdQYXJhZ3JhcGggJiYgZW5kUG9zaXRpb24ucm93IC0gcG9zaXRpb24ucm93KSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU51bWJlcmluZ3NEYXRhT25DaGFuZ2UoZW5kUG9zaXRpb24ucm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gdGhpcy5kaXNwbGF5RGF0YS5nZXRQb3NpdGlvbkFmdGVyQnJlYWsoZW5kUG9zaXRpb24sIGJyZWFrVHlwZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGN1cnNvclBvc2l0aW9uKTtcblxuICAgICAgICByZXR1cm4gZW5kUG9zaXRpb247XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFiKHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwb3NpdGlvbik7XG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuaW5zZXJ0VGFiKHRoaXMubW9kZWwsIGluc2VydEluZGV4KTtcblxuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWwudGFicy5maW5kKHggPT4geC5pbnNlcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmFkZENvbXBvbmVudCh0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFicywgbW9kZWwsIE5vZGVyVGFiQ29tcG9uZW50KTtcblxuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHRoaXMuZGlzcGxheURhdGEuaW5zZXJ0VGV4dChwb3NpdGlvbiwgQ1VTVE9NX0VMRU1FTlRfTUFSS0VSKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMocG9zaXRpb24ucm93LCBwb3NpdGlvbi5yb3cpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGVuZFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIGVuZFBvc2l0aW9uO1xuICAgIH1cblxuICAgIGluc2VydEltYWdlKHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgsIGltYWdlRGF0YTogSW1hZ2VEYXRhTW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwb3NpdGlvbik7XG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuaW5zZXJ0SW1hZ2UodGhpcy5tb2RlbCwgaW5zZXJ0SW5kZXgsIGltYWdlRGF0YSk7XG5cbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsLmltYWdlcy5maW5kKHggPT4geC5pbnNlcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmFkZENvbXBvbmVudCh0aGlzLmN1c3RvbUNvbXBvbmVudHMuaW1hZ2VzLCBtb2RlbCwgTm9kZXJJbWFnZUNvbXBvbmVudCk7XG5cbiAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSB0aGlzLmRpc3BsYXlEYXRhLmluc2VydFRleHQocG9zaXRpb24sIENVU1RPTV9FTEVNRU5UX01BUktFUik7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHBvc2l0aW9uLnJvdywgcG9zaXRpb24ucm93KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihlbmRQb3NpdGlvbik7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvc2l0aW9uO1xuICAgIH1cblxuICAgIGluc2VydExpbmsocG9zaXRpb246IEN1cnNvclBhcmFncmFwaCwgbGlua0RhdGE6IExpbmtEYXRhTW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGxpbmtTdHlsZSA9IG5ldyBUZXh0U3R5bGVNb2RlbCh7XG4gICAgICAgICAgICAuLi5ERUZBVUxUX1RFWFRfU1RZTEUsXG4gICAgICAgICAgICBoZWFkaW5nU3R5bGVJZDogSFlQRVJMSU5LX0hFQURJTkdfU1RZTEVfSUQsXG4gICAgICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgICAgICBmb250Q29sb3I6IEhZUEVSTElOS19GT05UX0NPTE9SXG4gICAgICAgIH0pO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmluc2VydExpbmsodGhpcy5tb2RlbCwgbGlua0RhdGEudGV4dCwgbGlua0RhdGEubGluaywgaW5zZXJ0SW5kZXgsIGxpbmtTdHlsZSk7XG5cbiAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSB0aGlzLmRpc3BsYXlEYXRhLmluc2VydFRleHQocG9zaXRpb24sIGxpbmtEYXRhLnRleHQpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwb3NpdGlvbi5yb3csIHBvc2l0aW9uLnJvdyk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoZW5kUG9zaXRpb24pO1xuICAgICAgICByZXR1cm4gZW5kUG9zaXRpb247XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGUocG9zaXRpb246IEN1cnNvclBhcmFncmFwaCwgdGFibGVNb2RlbDogSW5zZXJ0VGFibGVNb2RlbCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBvc2l0aW9uKTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5pbnNlcnRUYWJsZSh0aGlzLm1vZGVsLCBpbnNlcnRJbmRleCwgdGFibGVNb2RlbCwgdGhpcy5kaXNwbGF5RGF0YS5jb250ZW50V2lkdGgpO1xuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWwudGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSB0YWJsZU1vZGVsLmluc2VydFRhYmxlSW5kZXgpO1xuICAgICAgICB0aGlzLmFkZENvbXBvbmVudCh0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLCBtb2RlbCwgTm9kZXJUYWJsZUNvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gdGhpcy5kaXNwbGF5RGF0YS5pbnNlcnRUZXh0KHBvc2l0aW9uLCB0YWJsZU1vZGVsLmNvbnRlbnQpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwb3NpdGlvbi5yb3csIGVuZFBvc2l0aW9uLnJvdyk7XG4gICAgICAgIGlmIChlbmRQb3NpdGlvbi5yb3cgLSBwb3NpdGlvbi5yb3cpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTnVtYmVyaW5nc0RhdGFPbkNoYW5nZShlbmRQb3NpdGlvbi5yb3cpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGVuZFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIGVuZFBvc2l0aW9uO1xuICAgIH1cblxuICAgIGluc2VydFBhcmFncmFwaChwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoLCBwYXJhZ3JhcGhNb2RlbDogSW5zZXJ0UGFyYWdyYXBoTW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHRleHQgPSBPcGVyYXRpb25zSGVscGVyLmluc2VydFBhcmFncmFwaCh0aGlzLm1vZGVsLCBpbnNlcnRJbmRleCwgcGFyYWdyYXBoTW9kZWwsIHRoaXMuZGlzcGxheURhdGEuY29udGVudFdpZHRoKTtcbiAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSB0aGlzLmRpc3BsYXlEYXRhLmluc2VydFRleHQocG9zaXRpb24sIHRleHQpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwb3NpdGlvbi5yb3csIGVuZFBvc2l0aW9uLnJvdyk7XG4gICAgICAgIGlmIChlbmRQb3NpdGlvbi5yb3cgLSBwb3NpdGlvbi5yb3cpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTnVtYmVyaW5nc0RhdGFPbkNoYW5nZShlbmRQb3NpdGlvbi5yb3cpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRQb2ludDogQ3Vyc29yUGFyYWdyYXBoO1xuICAgICAgICBpZiAocGFyYWdyYXBoTW9kZWwuaW5zZXJ0VGV4dCkge1xuICAgICAgICAgICAgY29uc3QgcGFyYWdyYXBoUG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KFxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocyxcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhNb2RlbC5pbnNlcnRUZXh0Lmluc2VydEluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZW5kUG9pbnQgPSB0aGlzLmRpc3BsYXlEYXRhLmluc2VydFRleHQocGFyYWdyYXBoUG9zaXRpb24sIHRleHQpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMocGFyYWdyYXBoUG9zaXRpb24ucm93LCBlbmRQb2ludC5yb3cpO1xuICAgICAgICAgICAgaWYgKGVuZFBvaW50LnJvdyAtIHBhcmFncmFwaFBvc2l0aW9uLnJvdykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTnVtYmVyaW5nc0RhdGFPbkNoYW5nZShlbmRQb2ludC5yb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoZW5kUG9pbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFncmFwaE1vZGVsLmluc2VydEltYWdlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhQb3NpdGlvbiA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgoXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgICAgIHBhcmFncmFwaE1vZGVsLmluc2VydEltYWdlLmluc2VydEluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VJbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwb3NpdGlvbik7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWwuaW1hZ2VzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbWFnZUluc2VydEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuYWRkQ29tcG9uZW50KHRoaXMuY3VzdG9tQ29tcG9uZW50cy5pbWFnZXMsIG1vZGVsLCBOb2RlckltYWdlQ29tcG9uZW50KTtcbiAgICAgICAgICAgIGVuZFBvaW50ID0gdGhpcy5kaXNwbGF5RGF0YS5pbnNlcnRUZXh0KHBhcmFncmFwaFBvc2l0aW9uLCBDVVNUT01fRUxFTUVOVF9NQVJLRVIpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMocGFyYWdyYXBoUG9zaXRpb24ucm93LCBwYXJhZ3JhcGhQb3NpdGlvbi5yb3cpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoZW5kUG9pbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFncmFwaE1vZGVsLmluc2VydFRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhQb3NpdGlvbiA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgoXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgICAgIHBhcmFncmFwaE1vZGVsLmluc2VydFRhYmxlLmluc2VydEluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVsLnRhYmxlcy5maW5kKHggPT4geC5pbnNlcnRJbmRleCA9PT0gcGFyYWdyYXBoTW9kZWwuaW5zZXJ0VGFibGUuaW5zZXJ0VGFibGVJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmFkZENvbXBvbmVudCh0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLCBtb2RlbCwgTm9kZXJUYWJsZUNvbXBvbmVudCk7XG4gICAgICAgICAgICBlbmRQb2ludCA9IHRoaXMuZGlzcGxheURhdGEuaW5zZXJ0VGV4dChwYXJhZ3JhcGhQb3NpdGlvbiwgcGFyYWdyYXBoTW9kZWwuaW5zZXJ0VGFibGUuY29udGVudCk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwYXJhZ3JhcGhQb3NpdGlvbi5yb3csIGVuZFBvaW50LnJvdyk7XG4gICAgICAgICAgICBpZiAoZW5kUG9pbnQucm93IC0gcGFyYWdyYXBoUG9zaXRpb24ucm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOdW1iZXJpbmdzRGF0YU9uQ2hhbmdlKGVuZFBvaW50LnJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihlbmRQb2ludCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgIH1cblxuICAgIGFkZENvbXBvbmVudDxUIGV4dGVuZHMgQmFzZU5vZGVyQ29tcG9uZW50PihjdXN0b21FbGVtZW50czogQ29tcG9uZW50UmVmPFQ+W10sIG1vZGVsOiBDdXN0b21Db250ZW50LCBjb21wb25lbnRUeXBlOiBUeXBlPFQ+KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLmN1c3RvbUNvbnRlbnRTZXJ2aWNlLmNvbXBvbmVudFNlcnZpY2UuZ2VuZXJhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSwge1xuICAgICAgICAgICAgY29udGVudDogbW9kZWwsXG4gICAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgICAgICAgICAgZ2VuZXJhbFByb3BlcnRpZXM6IHRoaXMuZ2VuZXJhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICBjb250ZW50V2lkdGg6IHRoaXMuZGlzcGxheURhdGEuY29udGVudFdpZHRoXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50UG9zaXRpb24gPSBjdXN0b21FbGVtZW50cy5maW5kSW5kZXgoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID4gbW9kZWwuaW5zZXJ0SW5kZXgpO1xuICAgICAgICBpZiAobmV3RWxlbWVudFBvc2l0aW9uID49IDApIHtcbiAgICAgICAgICAgIGN1c3RvbUVsZW1lbnRzLnNwbGljZShuZXdFbGVtZW50UG9zaXRpb24sIDAsIGN1c3RvbUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VzdG9tRWxlbWVudHMucHVzaChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFwcGx5VG9vbGJhclN0eWxlcygpOiB2b2lkIHtcbiAgICAgICAgLy8gdW5kZWZpbmVkIC0gdmFsdWUgd2Fzbid0IHNldFxuICAgICAgICAvLyBudWxsIC0gY29sbGlzaW9uIChkaWZmZXJlbnQgdmFsdWVzIGF0IHRoZSBzYW1lIHRpbWUpXG4gICAgICAgIC8vIHZhbHVlIC0gdmFsdWUgd2FzIHNldCB3aXRob3V0IGNvbGxpc2lvbnNcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQpO1xuICAgICAgICBsZXQgZW5kSW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgdGhpcy5zZWxlY3Rpb24ucmFuZ2UuZW5kKTtcbiAgICAgICAgaWYgKHN0YXJ0SW5kZXggIT09IGVuZEluZGV4KSB7XG4gICAgICAgICAgICBlbmRJbmRleC0tO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uLmN1cnNvci5jb2x1bW4gPiAwKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4LS07XG4gICAgICAgICAgICBlbmRJbmRleC0tO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaFN0eWxlcyA9IFBhcmFncmFwaFN0eWxlSGVscGVyLmdldFBhcmFncmFwaHNBdFJhbmdlKHRoaXMubW9kZWwucGFyYWdyYXBocywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+XG4gICAgICAgICAgICB4LnBhcmFncmFwaFN0eWxlLm51bWJlcmluZ0lkXG4gICAgICAgICAgICAgICAgPyBOdW1iZXJpbmdIZWxwZXIuZ2V0U3R5bGVzKHgucGFyYWdyYXBoU3R5bGUsIHRoaXMuZ2VuZXJhbFByb3BlcnRpZXMubnVtYmVyaW5ncylcbiAgICAgICAgICAgICAgICA6IG5ldyBOdW1iZXJpbmdQYXJhZ3JhcGhTdHlsZU1vZGVsKHgucGFyYWdyYXBoU3R5bGUpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuc2VsZWN0aW9uLmlzRW1wdHlcbiAgICAgICAgICAgID8gdGhpcy5nZXRTdHlsZUZvckN1cnNvcihzdGFydEluZGV4KVxuICAgICAgICAgICAgOiBGb3JtYXRTdHlsZUhlbHBlci5jb21iaW5lU2VjdGlvbih0aGlzLm1vZGVsLmZvcm1hdHMsIHRoaXMubW9kZWwubGlua3MsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiB4LnRleHRTdHlsZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSVRvb2xiYXJTdHlsZXMgPSB7fTtcbiAgICAgICAgZm9yIChsZXQgc3R5bGUgb2YgWy4uLnN0eWxlcywgLi4ucGFyYWdyYXBoU3R5bGVzXSkge1xuICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlKSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gc3R5bGVba2V5XTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdFtrZXldICE9PSBzdHlsZVtrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0eWxlcyA9IHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRTdHlsZUZvckN1cnNvcihpbmRleDogbnVtYmVyKTogVGV4dFN0eWxlTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IGxpbmsgPSB0aGlzLm1vZGVsLmxpbmtzLmZpbmQoeCA9PiB4LnN0YXJ0SW5kZXggPD0gaW5kZXggJiYgeC5lbmRJbmRleCA+IGluZGV4KTtcbiAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4SW5MaW5rID0gaW5kZXggLSBsaW5rLnN0YXJ0SW5kZXg7XG4gICAgICAgICAgICBjb25zdCBsaW5rRm9ybWF0ID0gbGluay5mb3JtYXRzLmZpbmQoeCA9PiB4LnN0YXJ0SW5kZXggPD0gaW5kZXhJbkxpbmsgJiYgeC5lbmRJbmRleCA+PSBpbmRleEluTGluayk7XG4gICAgICAgICAgICByZXR1cm4gW2xpbmtGb3JtYXQudGV4dFN0eWxlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IEZvcm1hdFN0eWxlSGVscGVyLmdldEZvcm1hdEF0SW5kZXgodGhpcy5tb2RlbC5mb3JtYXRzLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBbZm9ybWF0LnRleHRTdHlsZV07XG4gICAgfVxuXG4gICAgcmVzdG9yZShtb2RlbDogUmVzdG9yZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIG1vZGVsLnN0YXJ0SW5kZXgpO1xuICAgICAgICBpZiAobW9kZWwuc3RhcnRJbmRleCAhPT0gbW9kZWwuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQnlEb2N1bWVudEluZGV4ZXMobW9kZWwuc3RhcnRJbmRleCwgbW9kZWwuZW5kSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5yZXN0b3JlKHRoaXMubW9kZWwsIG1vZGVsKTtcblxuICAgICAgICBjb25zdCByZXN0b3JlRW5kSW5kZXggPSBtb2RlbC5zdGFydEluZGV4ICsgbW9kZWwudGV4dC5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzdG9yZUNvbXBvbmVudHModGhpcy5tb2RlbC50YWJsZXMsIHRoaXMuY3VzdG9tQ29tcG9uZW50cy50YWJsZXMsIE5vZGVyVGFibGVDb21wb25lbnQsIG1vZGVsLnN0YXJ0SW5kZXgsIHJlc3RvcmVFbmRJbmRleCk7XG4gICAgICAgIHRoaXMucmVzdG9yZUNvbXBvbmVudHModGhpcy5tb2RlbC5pbWFnZXMsIHRoaXMuY3VzdG9tQ29tcG9uZW50cy5pbWFnZXMsIE5vZGVySW1hZ2VDb21wb25lbnQsIG1vZGVsLnN0YXJ0SW5kZXgsIHJlc3RvcmVFbmRJbmRleCk7XG4gICAgICAgIHRoaXMucmVzdG9yZUNvbXBvbmVudHModGhpcy5tb2RlbC50YWJzLCB0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFicywgTm9kZXJUYWJDb21wb25lbnQsIG1vZGVsLnN0YXJ0SW5kZXgsIHJlc3RvcmVFbmRJbmRleCk7XG4gICAgICAgIHRoaXMucmVzdG9yZUVsZW1lbnRDb21wb25lbnRzKHRoaXMubW9kZWwuZWxlbWVudHMsIG1vZGVsLnN0YXJ0SW5kZXgsIHJlc3RvcmVFbmRJbmRleCk7XG5cbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzLmRpc3BsYXlEYXRhLmluc2VydFRleHQocGFyYWdyYXBoUG9zaXRpb24sIG1vZGVsLnRleHQpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnJlc2V0QWxsTnVtYmVyaW5nSW5mbyhwYXJhZ3JhcGhQb3NpdGlvbi5yb3cpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwYXJhZ3JhcGhQb3NpdGlvbi5yb3csIGVuZFBvaW50LnJvdyk7XG4gICAgICAgIGlmIChlbmRQb2ludC5yb3cgLSBwYXJhZ3JhcGhQb3NpdGlvbi5yb3cgJiYgdGhpcy50eXBlICE9PSAnY2VsbCcpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTnVtYmVyaW5nc0RhdGFPbkNoYW5nZShlbmRQb2ludC5yb3cgKyAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGVuZFBvaW50KTtcbiAgICAgICAgdGhpcy5hcHBseVRvb2xiYXJTdHlsZXMoKTtcbiAgICB9XG5cbiAgICByZXN0b3JlQ29tcG9uZW50czxUIGV4dGVuZHMgQmFzZU5vZGVyQ29tcG9uZW50PihcbiAgICAgICAgbW9kZWxzOiBDdXN0b21Db250ZW50W10sXG4gICAgICAgIGNvbXBvbmVudHM6IENvbXBvbmVudFJlZjxCYXNlTm9kZXJDb21wb25lbnQ+W10sXG4gICAgICAgIGNvbXBvbmVudFR5cGU6IFR5cGU8VD4sXG4gICAgICAgIHJlc3RvcmVJbmRleDogbnVtYmVyLFxuICAgICAgICByZXN0b3JlRW5kSW5kZXg6IG51bWJlclxuICAgICk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIG1vZGVscykge1xuICAgICAgICAgICAgaWYgKG1vZGVsLmluc2VydEluZGV4IDwgcmVzdG9yZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGVsLmluc2VydEluZGV4ID49IHJlc3RvcmVFbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hZGRDb21wb25lbnQoY29tcG9uZW50cywgbW9kZWwsIGNvbXBvbmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzdG9yZUVsZW1lbnRDb21wb25lbnRzKGVsZW1lbnRzOiBFbGVtZW50TW9kZWxbXSwgcmVzdG9yZUluZGV4OiBudW1iZXIsIHJlc3RvcmVFbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmIChtb2RlbC5pbnNlcnRJbmRleCA8IHJlc3RvcmVJbmRleCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlbC5pbnNlcnRJbmRleCA+PSByZXN0b3JlRW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmN1c3RvbUNvbnRlbnRTZXJ2aWNlLmZpbmRDb21wb25lbnRUeXBlKG1vZGVsLnR5cGUpO1xuICAgICAgICAgICAgdGhpcy5hZGRDb21wb25lbnQodGhpcy5jdXN0b21Db21wb25lbnRzLmN1c3RvbUVsZW1lbnRzLCBtb2RlbCwgdHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRMaW5rTW9kZWwoY3Vyc29yOiBDdXJzb3JQYXJhZ3JhcGgpOiBMaW5rTW9kZWwge1xuICAgICAgICBjb25zdCBpbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBjdXJzb3IpO1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5saW5rcy5maW5kKHggPT4geC5zdGFydEluZGV4IDw9IGluZGV4ICYmIHguZW5kSW5kZXggPiBpbmRleCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVSb3dzKGluc2VydEluZGV4OiBudW1iZXIsIHJvd3NDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBpbmhlcml0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuY3VzdG9tQ29tcG9uZW50cy50YWJsZXMuZmluZCh4ID0+IHguaW5zdGFuY2UuaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS5yZXNldE51bWJlcmluZ0luZm9CeVRhYmxlQ2VsbCh0YWJsZSk7XG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuaW5zZXJ0VGFibGVSb3dzKHRoaXMubW9kZWwsIGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgpO1xuICAgICAgICB0YWJsZS5pbnN0YW5jZS51cGRhdGVUYWJsZSgpO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleDogbnVtYmVyLCBjb2x1bW5zQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEucmVzZXROdW1iZXJpbmdJbmZvQnlUYWJsZUNlbGwodGFibGUpO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmluc2VydFRhYmxlQ29sdW1ucyhcbiAgICAgICAgICAgIHRoaXMubW9kZWwsXG4gICAgICAgICAgICBpbnNlcnRJbmRleCxcbiAgICAgICAgICAgIGNvbHVtbnNDb3VudCxcbiAgICAgICAgICAgIHRhcmdldEluZGV4LFxuICAgICAgICAgICAgaW5oZXJpdEluZGV4LFxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS5jb250ZW50V2lkdGhcbiAgICAgICAgKTtcbiAgICAgICAgdGFibGUuaW5zdGFuY2UudXBkYXRlVGFibGUoKTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZVJvd3MoaW5zZXJ0SW5kZXg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5jdXN0b21Db21wb25lbnRzLnRhYmxlcy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnJlc2V0TnVtYmVyaW5nSW5mb0J5VGFibGVDZWxsKHRhYmxlKTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5yZW1vdmVUYWJsZVJvd3ModGhpcy5tb2RlbCwgaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGFibGUuaW5zdGFuY2UudXBkYXRlVGFibGUoKTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5jdXN0b21Db21wb25lbnRzLnRhYmxlcy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnJlc2V0TnVtYmVyaW5nSW5mb0J5VGFibGVDZWxsKHRhYmxlKTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5yZW1vdmVUYWJsZUNvbHVtbnModGhpcy5tb2RlbCwgaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLmRpc3BsYXlEYXRhLmNvbnRlbnRXaWR0aCk7XG4gICAgICAgIHRhYmxlLmluc3RhbmNlLnVwZGF0ZVRhYmxlKCk7XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDb2x1bW5zKHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSByZXNpemVUYWJsZUNvbHVtbnMuaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnJlc2V0TnVtYmVyaW5nSW5mb0J5VGFibGVDZWxsKHRhYmxlKTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5yZXNpemVUYWJsZUNvbHVtbnModGhpcy5tb2RlbCwgcmVzaXplVGFibGVDb2x1bW5zKTtcbiAgICAgICAgdGFibGUuaW5zdGFuY2UudXBkYXRlVGFibGUoKTtcbiAgICB9XG5cbiAgICByZXN0b3JlVGFibGUoaW5zZXJ0SW5kZXg6IG51bWJlciwgdGFibGU6IFRhYmxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkVGFibGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRhYmxlKSkgYXMgVGFibGVNb2RlbDtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5yZXN0b3JlVGFibGUodGhpcy5tb2RlbCwgaW5zZXJ0SW5kZXgsIG9sZFRhYmxlKTtcbiAgICAgICAgY29uc3QgdGFibGVDb21wb25lbnQgPSB0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRhYmxlQ29tcG9uZW50Lmluc3RhbmNlLnVwZGF0ZVRhYmxlKCk7XG4gICAgfVxufVxuIl19
|
|
574
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC5zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBR3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUkxSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFLbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFTakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3hFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdD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QUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDcEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBWSxDQUFDLFdBQW1CLEVBQUUsS0FBaUI7UUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFlLENBQUM7UUFDakUsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUM7UUFDdEcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQXBwbHlFbGVtZW50U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktZWxlbWVudC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBBcHBseUltYWdlU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktaW1hZ2Utc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvYWJzdHJhY3QvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnJlYWtIZWxwZXIgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWsuaGVscGVyJztcbmltcG9ydCB7IEJyZWFrVHlwZXMgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWstdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBDb250ZW50SGVscGVyIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvY29udGVudC5oZWxwZXInO1xuaW1wb3J0IHsgQ29udGVudHNJbnRlcmZhY2UgfSBmcm9tICcuLi9jb250ZW50L2NvbnRlbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDdXJzb3JQYXJhZ3JhcGggfSBmcm9tICcuLi9wb3NpdGlvbmluZy9jdXJzb3ItcGFyYWdyYXBoJztcbmltcG9ydCB7IENVU1RPTV9FTEVNRU5UX01BUktFUiB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb250ZW50LW1hcmtlcnMuY29uc3QnO1xuaW1wb3J0IHsgQ3VzdG9tQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvY3VzdG9tLWNvbXBvbmVudC5oZXBsZXInO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb250ZW50JztcbmltcG9ydCB7IEN1c3RvbUNvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvc2VydmljZXMvY3VzdG9tLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBERUZBVUxUX1RFWFRfU1RZTEUsIEhZUEVSTElOS19GT05UX0NPTE9SLCBIWVBFUkxJTktfSEVBRElOR19TVFlMRV9JRCwgTkVXX0xJTkVfTUFSS1VQIH0gZnJvbSAnLi4vY29udGVudC9jb25zdGFudHMvZWRpdG9yLmNvbnN0JztcbmltcG9ydCB7IERpc3BsYXlEYXRhIH0gZnJvbSAnLi4vY29udGVudC9kaXNwbGF5LWRhdGEvZGlzcGxheS1kYXRhJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFbGVtZW50RGF0YU1vZGVsIH0gZnJvbSAnLi4vY29tcG9uZW50cy9leHRlcm5hbC1lbGVtZW50L21vZGVscy9lbGVtZW50LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9lbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9mb3JtYXQubW9kZWwnO1xuaW1wb3J0IHsgRm9ybWF0U3R5bGVIZWxwZXIgfSBmcm9tICcuL2hlbHBlcnMvZm9ybWF0LXN0eWxlLmhlbHBlcic7XG5pbXBvcnQgeyBHZW5lcmFsUHJvcGVydGllc01vZGVsIH0gZnJvbSAnLi4vY29udGVudC9kaXNwbGF5LWRhdGEvZ2VuZXJhbC1wcm9wZXJ0aWVzLm1vZGVsJztcbmltcG9ydCB7IElDdXN0b21Db21wb25lbnRzIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvY3VzdG9tLWNvbXBvbmVudHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEltYWdlRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEluc2VydEJyZWFrTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC1icmVhay5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRFbGVtZW50TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC1lbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IEluc2VydEltYWdlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC1pbWFnZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRMaW5rTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC1saW5rLm1vZGVsJztcbmltcG9ydCB7IEluc2VydFBhcmFncmFwaE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtcGFyYWdyYXBoLm1vZGVsJztcbmltcG9ydCB7IEluc2VydFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRUYWJNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXRhYi5tb2RlbCc7XG5pbXBvcnQgeyBJVG9vbGJhclN0eWxlcyB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL3Rvb2xiYXItc3R5bGVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaW5rRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9saW5rLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgTGlua01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9saW5rLm1vZGVsJztcbmltcG9ydCB7IE5vZGVySW1hZ2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2ltYWdlL2NvbXBvbmVudHMvaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVyVGFiQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWIvdGFiLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlclRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZS9jb21wb25lbnRzL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdIZWxwZXIgfSBmcm9tICcuLi9nYWRnZXRzL251bWJlcmluZy9udW1iZXJpbmcuaGVscGVyJztcbmltcG9ydCB7IE51bWJlcmluZ0xldmVsTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL251bWJlcmluZy1sZXZlbC5tb2RlbCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IE51bWJlcmluZ1BhcmFncmFwaFN0eWxlTW9kZWwgfSBmcm9tICcuLi9nYWRnZXRzL251bWJlcmluZy9udW1iZXJpbmctcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IE9wZXJhdGlvbnNIZWxwZXIgfSBmcm9tICcuLi9vcGVyYXRpb25zL29wZXJhdGlvbnMtaGVscGVyLmhlbHBlcic7XG5pbXBvcnQgeyBQYXJhZ3JhcGhNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLm1vZGVsJztcbmltcG9ydCB7IFBhcmFncmFwaFN0eWxlSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL3BhcmFncmFwaC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFJhbmdlIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcmFuZ2UnO1xuaW1wb3J0IHsgUmVwbGFjZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXBsYWNlLm1vZGVsJztcbmltcG9ydCB7IFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXNpemUtdGFibGUtY29sdW1ucy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUubW9kZWwnO1xuaW1wb3J0IHsgU2Nyb2xsQmFyIH0gZnJvbSAnLi4vZ2FkZ2V0cy9zY3JvbGxiYXInO1xuaW1wb3J0IHsgU2VsZWN0aW9uIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvc2VsZWN0aW9uJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFVuaWNvZGVIZWxwZXIgfSBmcm9tICcuLi9nYWRnZXRzL3VuaWNvZGUvdW5pY29kZS5oZWxwZXInO1xuXG5leHBvcnQgY2xhc3MgRWRpdFNlc3Npb24ge1xuICAgIHRva2VuUmUgPSBuZXcgUmVnRXhwKCdeWycgKyBVbmljb2RlSGVscGVyLndvcmRDaGFycyArICdcXFxcJF9dKycsICdnJyk7XG5cbiAgICBub25Ub2tlblJlID0gbmV3IFJlZ0V4cCgnXig/OlteJyArIFVuaWNvZGVIZWxwZXIud29yZENoYXJzICsgJ1xcXFwkX118XFxcXHNdKSsnLCAnZycpO1xuXG4gICAgZ2V0IHNjcm9sbFRvcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsQmFyPy5zY3JvbGxUb3AgPz8gMDsgLy8gb25seSBtYWluIHNlc3Npb24gaXMgc2Nyb2xsYWJsZVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZGlzcGxheURhdGE6IERpc3BsYXlEYXRhLFxuICAgICAgICBwdWJsaWMgc2Vzc2lvbklkOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBjdXN0b21Db250ZW50U2VydmljZTogQ3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBtb2RlbDogQ29udGVudHNJbnRlcmZhY2UsXG4gICAgICAgIHB1YmxpYyBzZWxlY3Rpb246IFNlbGVjdGlvbixcbiAgICAgICAgcHVibGljIGdlbmVyYWxQcm9wZXJ0aWVzOiBHZW5lcmFsUHJvcGVydGllc01vZGVsLFxuICAgICAgICBwdWJsaWMgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICAgICAgcHVibGljIGN1c3RvbUNvbXBvbmVudHM6IElDdXN0b21Db21wb25lbnRzLFxuICAgICAgICBwcml2YXRlIHR5cGU6ICdjZWxsJyB8ICdlZGdlJyB8ICdtYWluJyxcbiAgICAgICAgcHJpdmF0ZSBzY3JvbGxCYXI/OiBTY3JvbGxCYXJcbiAgICApIHt9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBnZXRSb3dMZW5ndGgocm93OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBoc1tyb3ddLm5leHRMaW5lSW5kZXhlcykge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzW3Jvd10ubmV4dExpbmVJbmRleGVzLmxlbmd0aCArIDE7XG4gICAgfVxuXG4gICAgZ2V0Um93Q2FjaGVJbmRleChjYWNoZUFycmF5OiBudW1iZXJbXSwgdmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGxldCBzdGFydCA9IDA7XG4gICAgICAgIGxldCBlbmQgPSBjYWNoZUFycmF5Lmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChzdGFydCA8PSBlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pZCA9IChzdGFydCArIGVuZCkgPj4gMTtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGNhY2hlQXJyYXlbbWlkXTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlID4gY2VudGVyKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBtaWQgKyAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8IGNlbnRlcikge1xuICAgICAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RhcnQgLSAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHdpZHRoIG9mIHRoZSBzdHJpbmcgYHN0cmAgb24gdGhlIHNjcmVlbiB3aGlsZSBhc3N1bWluZyB0aGF0IHRoZSBzdHJpbmcgc3RhcnRzIGF0IHRoZSBmaXJzdCBjb2x1bW4gb24gdGhlIHNjcmVlbi5cbiAgICAgKiBUaGUgZmlyc3QgcG9zaXRpb24gaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY29sdW1ucyBmb3IgYHN0cmAgb24gc2NyZWVuLlxuICAgICAqIFRoZSBzZWNvbmQgdmFsdWUgY29udGFpbnMgdGhlIHBvc2l0aW9uIG9mIHRoZSBkb2N1bWVudCBjb2x1bW4gdGhhdCB0aGlzIGZ1bmN0aW9uIHJlYWQgdW50aWwuXG4gICAgICovXG4gICAgZ2V0U3RyaW5nU2NyZWVuV2lkdGgoc3RyOiBzdHJpbmcsIG1heFNjcmVlbkNvbHVtbj86IG51bWJlcik6IG51bWJlcltdIHtcbiAgICAgICAgbGV0IHNjcmVlbkNvbHVtbiA9IDA7XG4gICAgICAgIGxldCBjb2x1bW46IG51bWJlcjtcbiAgICAgICAgZm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1bW4rKykge1xuICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IDE7XG5cbiAgICAgICAgICAgIGlmIChzY3JlZW5Db2x1bW4gPiBtYXhTY3JlZW5Db2x1bW4pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbc2NyZWVuQ29sdW1uLCBjb2x1bW5dO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgc3RhcnRpbmcgcm93IGFuZCBjb2x1bW4sIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGBSYW5nZWAgb2YgdGhlIGZpcnN0IHdvcmQgYm91bmRhcnkgaXQgZmluZHMuXG4gICAgICovXG4gICAgZ2V0V29yZFJhbmdlKHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcik6IFJhbmdlIHtcbiAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoQ29udGVudChyb3cpO1xuICAgICAgICBsZXQgaW5Ub2tlbiA9IGZhbHNlO1xuICAgICAgICBpZiAoY29sdW1uID4gMCkge1xuICAgICAgICAgICAgaW5Ub2tlbiA9ICEhbGluZS5jaGFyQXQoY29sdW1uIC0gMSkubWF0Y2godGhpcy50b2tlblJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaW5Ub2tlbikge1xuICAgICAgICAgICAgaW5Ub2tlbiA9ICEhbGluZS5jaGFyQXQoY29sdW1uKS5tYXRjaCh0aGlzLnRva2VuUmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlZ2V4cDogUmVnRXhwO1xuICAgICAgICBpZiAoaW5Ub2tlbikge1xuICAgICAgICAgICAgcmVnZXhwID0gdGhpcy50b2tlblJlO1xuICAgICAgICB9IGVsc2UgaWYgKC9eXFxzKyQvLnRlc3QobGluZS5zbGljZShjb2x1bW4gLSAxLCBjb2x1bW4gKyAxKSkpIHtcbiAgICAgICAgICAgIHJlZ2V4cCA9IC9cXHMvO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVnZXhwID0gdGhpcy5ub25Ub2tlblJlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0YXJ0ID0gY29sdW1uO1xuICAgICAgICBpZiAoc3RhcnQgPiAwKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgc3RhcnQtLTtcbiAgICAgICAgICAgIH0gd2hpbGUgKHN0YXJ0ID49IDAgJiYgbGluZS5jaGFyQXQoc3RhcnQpLm1hdGNoKHJlZ2V4cCkpO1xuXG4gICAgICAgICAgICBzdGFydCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVuZCA9IGNvbHVtbjtcbiAgICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGVuZCkubWF0Y2gocmVnZXhwKSkge1xuICAgICAgICAgICAgZW5kKys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKG5ldyBDdXJzb3JQYXJhZ3JhcGgocm93LCBzdGFydCksIG5ldyBDdXJzb3JQYXJhZ3JhcGgocm93LCBlbmQpKTtcbiAgICB9XG5cbiAgICBnZXREaXNwbGF5TGluZShyb3c6IG51bWJlciwgZW5kQ29sdW1uOiBudW1iZXIsIHN0YXJ0Q29sdW1uPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoQ29udGVudCA9IHRoaXMuZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoQ29udGVudChyb3cpO1xuXG4gICAgICAgIHJldHVybiBwYXJhZ3JhcGhDb250ZW50LnN1YnN0cmluZyhzdGFydENvbHVtbiB8fCAwLCBlbmRDb2x1bW4gfHwgcGFyYWdyYXBoQ29udGVudC5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJlbW92ZUJ5RG9jdW1lbnRJbmRleGVzKHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydFBhcmFncmFwaFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgpO1xuICAgICAgICBjb25zdCBlbmRQYXJhZ3JhcGhQb3NpdGlvbiA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMucmVtb3ZlKG5ldyBSYW5nZShzdGFydFBhcmFncmFwaFBvc2l0aW9uLCBlbmRQYXJhZ3JhcGhQb3NpdGlvbikpO1xuICAgIH1cblxuICAgIGluc2VydFRleHRCeURvY3VtZW50SW5kZXgoaW5kZXg6IG51bWJlciwgdGV4dDogc3RyaW5nLCBzdHlsZT86IFRleHRTdHlsZU1vZGVsKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoUG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5kZXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRUZXh0KHBhcmFncmFwaFBvc2l0aW9uLCB0ZXh0LCBzdHlsZSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0RWxlbWVudEJ5RG9jdW1lbnRJbmRleChpbnNlcnRFbGVtZW50OiBJbnNlcnRFbGVtZW50TW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBlbGVtZW50UG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0RWxlbWVudC5lbGVtZW50Lmluc2VydEluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0RWxlbWVudChlbGVtZW50UG9zaXRpb24sIGluc2VydEVsZW1lbnQuZWxlbWVudCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0QnJlYWtCeURvY3VtZW50SW5kZXgoaW5zZXJ0RWxlbWVudDogSW5zZXJ0QnJlYWtNb2RlbCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRQb3NpdGlvbiA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBpbnNlcnRFbGVtZW50Lmluc2VydEluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0QnJlYWsoZWxlbWVudFBvc2l0aW9uLCBpbnNlcnRFbGVtZW50LmJyZWFrVHlwZSBhcyBCcmVha1R5cGVzKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJCeURvY3VtZW50SW5kZXgoaW5zZXJ0RWxlbWVudDogSW5zZXJ0VGFiTW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBlbGVtZW50UG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0RWxlbWVudC5pbnNlcnRJbmRleCk7XG4gICAgICAgIHJldHVybiB0aGlzLmluc2VydFRhYihlbGVtZW50UG9zaXRpb24pO1xuICAgIH1cblxuICAgIGluc2VydEltYWdlQnlEb2N1bWVudEluZGV4KGluc2VydEVsZW1lbnQ6IEluc2VydEltYWdlTW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBlbGVtZW50UG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0RWxlbWVudC5pbnNlcnRJbmRleCk7XG4gICAgICAgIHJldHVybiB0aGlzLmluc2VydEltYWdlKGVsZW1lbnRQb3NpdGlvbiwgaW5zZXJ0RWxlbWVudC5pbWFnZURhdGEpO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlQnlEb2N1bWVudEluZGV4KGluc2VydEVsZW1lbnQ6IEluc2VydFRhYmxlTW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBlbGVtZW50UG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0RWxlbWVudC5pbnNlcnRJbmRleCk7XG4gICAgICAgIHJldHVybiB0aGlzLmluc2VydFRhYmxlKGVsZW1lbnRQb3NpdGlvbiwgaW5zZXJ0RWxlbWVudCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0TGlua0J5RG9jdW1lbnRJbmRleChpbnNlcnRFbGVtZW50OiBJbnNlcnRMaW5rTW9kZWwpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBlbGVtZW50UG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0RWxlbWVudC5pbnNlcnRJbmRleCk7XG4gICAgICAgIHJldHVybiB0aGlzLmluc2VydExpbmsoZWxlbWVudFBvc2l0aW9uLCBpbnNlcnRFbGVtZW50LmxpbmtEYXRhTW9kZWwpO1xuICAgIH1cblxuICAgIGluc2VydFBhcmFncmFwaEJ5RG9jdW1lbnRJbmRleChpbnNlcnRFbGVtZW50OiBJbnNlcnRQYXJhZ3JhcGhNb2RlbCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRQb3NpdGlvbiA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBpbnNlcnRFbGVtZW50Lmluc2VydEluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0UGFyYWdyYXBoKGVsZW1lbnRQb3NpdGlvbiwgaW5zZXJ0RWxlbWVudCk7XG4gICAgfVxuXG4gICAgYXBwbHlUZXh0U3R5bGUoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCB0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0UGFyYWdyYXBoID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgpLnJvdztcbiAgICAgICAgY29uc3QgZW5kUGFyYWdyYXBoID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGVuZEluZGV4KS5yb3c7XG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuYXBwbHlUZXh0U3R5bGUodGhpcy5tb2RlbCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHN0YXJ0UGFyYWdyYXBoLCBlbmRQYXJhZ3JhcGgpO1xuICAgICAgICB0aGlzLnNldFRleHRTdHlsZSh0ZXh0U3R5bGUpO1xuICAgIH1cblxuICAgIGFwcGx5UGFyYWdyYXBoU3R5bGUoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBwYXJhZ3JhcGhTdHlsZTogUGFyYWdyYXBoU3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydFBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBzdGFydEluZGV4KS5yb3c7XG4gICAgICAgIGNvbnN0IGVuZFBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBlbmRJbmRleCkucm93O1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmFwcGx5UGFyYWdyYXBoU3R5bGUodGhpcy5tb2RlbCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMoc3RhcnRQYXJhZ3JhcGgsIGVuZFBhcmFncmFwaCk7XG4gICAgICAgIHRoaXMuYXBwbHlUb29sYmFyU3R5bGVzKCk7XG4gICAgfVxuXG4gICAgYXBwbHlFbGVtZW50U3R5bGUobW9kZWw6IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5hcHBseUVsZW1lbnRTdHlsZSh0aGlzLm1vZGVsLCBtb2RlbCk7XG4gICAgICAgIGNvbnN0IGltYWdlQ29tcG9uZW50UmVmID0gdGhpcy5jdXN0b21Db21wb25lbnRzLmN1c3RvbUVsZW1lbnRzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBtb2RlbC5pbnNlcnRJbmRleCk7XG4gICAgICAgIGltYWdlQ29tcG9uZW50UmVmLmluc3RhbmNlLmluaXRpYWxpemUoKTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIG1vZGVsLmluc2VydEluZGV4KS5yb3c7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHBhcmFncmFwaCwgcGFyYWdyYXBoKTtcbiAgICB9XG5cbiAgICBhZGROdW1iZXJpbmcobGV2ZWxzOiBOdW1iZXJpbmdMZXZlbE1vZGVsW10sIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydFBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBzdGFydEluZGV4KS5yb3c7XG4gICAgICAgIGNvbnN0IGVuZFBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBlbmRJbmRleCkucm93O1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmFkZE51bWJlcmluZyh0aGlzLm1vZGVsLCB0aGlzLmdlbmVyYWxQcm9wZXJ0aWVzLm51bWJlcmluZ3MsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBsZXZlbHMpO1xuICAgICAgICB0aGlzLmdlbmVyYWxQcm9wZXJ0aWVzLm51bWJlcmluZ0luZm8gPSB7fTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMoc3RhcnRQYXJhZ3JhcGgsIGVuZFBhcmFncmFwaCk7XG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydFBhcmFncmFwaDsgaSA8PSBlbmRQYXJhZ3JhcGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoU2V0dGluZ3MoaSkubnVtYmVyaW5nRGF0YS5udW1iZXJpbmdJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTnVtYmVyaW5nc0RhdGFPbkNoYW5nZShlbmRQYXJhZ3JhcGggKyAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwbHlUb29sYmFyU3R5bGVzKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTnVtYmVyaW5ncyhzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRQYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgc3RhcnRJbmRleCkucm93O1xuICAgICAgICBjb25zdCBlbmRQYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgZW5kSW5kZXgpLnJvdztcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5yZW1vdmVOdW1iZXJpbmdzKHRoaXMubW9kZWwsIHRoaXMuZ2VuZXJhbFByb3BlcnRpZXMubnVtYmVyaW5ncywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnJlc2V0QWxsTnVtYmVyaW5nSW5mbyhzdGFydFBhcmFncmFwaCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHN0YXJ0UGFyYWdyYXBoLCBlbmRQYXJhZ3JhcGgpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU51bWJlcmluZ3NEYXRhT25DaGFuZ2UoZW5kUGFyYWdyYXBoKTtcblxuICAgICAgICB0aGlzLmFwcGx5VG9vbGJhclN0eWxlcygpO1xuICAgIH1cblxuICAgIHJlc3RvcmVOdW1iZXJpbmdzKHBhcmFncmFwaHM6IFBhcmFncmFwaE1vZGVsW10sIG51bWJlcmluZ3M6IE51bWJlcmluZ01vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhcmFncmFwaHNbMF0uaW5zZXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhzLmxlbmd0aCAtIDFdLmluc2VydEluZGV4O1xuICAgICAgICBjb25zdCBzdGFydFBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBzdGFydEluZGV4KS5yb3c7XG4gICAgICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhXaXRoT2Zmc2V0KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgZW5kSW5kZXgpO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLnJlc3RvcmVOdW1iZXJpbmdzKHRoaXMubW9kZWwsIHRoaXMuZ2VuZXJhbFByb3BlcnRpZXMubnVtYmVyaW5ncywgcGFyYWdyYXBocywgbnVtYmVyaW5ncyk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEucmVzZXRBbGxOdW1iZXJpbmdJbmZvKHN0YXJ0UGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMoc3RhcnRQYXJhZ3JhcGgsIGVuZFBvc2l0aW9uLnJvdyk7XG4gICAgICAgIGZvciAoY29uc3QgcGFyYWdyYXBoIG9mIHBhcmFncmFwaHMpIHtcbiAgICAgICAgICAgIGlmIChwYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU51bWJlcmluZ3NEYXRhT25DaGFuZ2UoZW5kUG9zaXRpb24ucm93ICsgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihlbmRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuYXBwbHlUb29sYmFyU3R5bGVzKCk7XG4gICAgfVxuXG4gICAgYXBwbHlJbWFnZVN0eWxlKGFwcGx5SW1hZ2U6IEFwcGx5SW1hZ2VTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGltYWdlQ29tcG9uZW50UmVmID0gdGhpcy5jdXN0b21Db21wb25lbnRzLmltYWdlcy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gYXBwbHlJbWFnZS5pbnNlcnRJbmRleCk7XG4gICAgICAgIGltYWdlQ29tcG9uZW50UmVmLmluc3RhbmNlLnJlc2l6ZSh7IHdpZHRoOiBhcHBseUltYWdlLndpZHRoLCBoZWlnaHQ6IGFwcGx5SW1hZ2UuaGVpZ2h0IH0pO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmFwcGx5SW1hZ2VTdHlsZSh0aGlzLm1vZGVsLCBhcHBseUltYWdlKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmRpc3BsYXlEYXRhLmluZGV4VG9Qb3NpdGlvbihhcHBseUltYWdlLmluc2VydEluZGV4LCAwKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMoc3RhcnQucm93LCB0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgcmVzdG9yZVRleHRTdHlsZXMoZm9ybWF0czogRm9ybWF0TW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gZm9ybWF0c1swXS5zdGFydEluZGV4O1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IGZvcm1hdHNbZm9ybWF0cy5sZW5ndGggLSAxXS5lbmRJbmRleDtcbiAgICAgICAgY29uc3Qgc3RhcnRQYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgc3RhcnRJbmRleCkucm93O1xuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoV2l0aE9mZnNldCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGVuZEluZGV4KTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5yZXN0b3JlVGV4dFN0eWxlcyh0aGlzLm1vZGVsLCBmb3JtYXRzKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMoc3RhcnRQYXJhZ3JhcGgsIGVuZFBvc2l0aW9uLnJvdyk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGVuZFBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5hcHBseVRvb2xiYXJTdHlsZXMoKTtcbiAgICB9XG5cbiAgICByZXN0b3JlUGFyYWdyYXBoU3R5bGVzKHBhcmFncmFwaHM6IFBhcmFncmFwaE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhcmFncmFwaHNbMF0uaW5zZXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhzLmxlbmd0aCAtIDFdLmluc2VydEluZGV4O1xuICAgICAgICBjb25zdCBzdGFydFBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBzdGFydEluZGV4KS5yb3c7XG4gICAgICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhXaXRoT2Zmc2V0KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgZW5kSW5kZXgpO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLnJlc3RvcmVQYXJhZ3JhcGhTdHlsZXModGhpcy5tb2RlbCwgcGFyYWdyYXBocyk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHN0YXJ0UGFyYWdyYXBoLCBlbmRQb3NpdGlvbi5yb3cpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihlbmRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuYXBwbHlUb29sYmFyU3R5bGVzKCk7XG4gICAgfVxuXG4gICAgc2V0VGV4dFN0eWxlKHRleHRTdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJVG9vbGJhclN0eWxlcyA9IHsgLi4udGhpcy5lZGl0b3JTZXJ2aWNlLnN0eWxlcyB9O1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXModGV4dFN0eWxlKSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0ZXh0U3R5bGVba2V5XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc3R5bGVzID0gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGByYW5nZWAgZnJvbSB0aGUgZG9jdW1lbnQuXG4gICAgICogSWYgYHJhbmdlYCBpcyBlbXB0eSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB1bm1vZGlmaWVkIHZhbHVlIG9mIGByYW5nZS5zdGFydGAuXG4gICAgICovXG4gICAgcmVtb3ZlKHJhbmdlOiBSYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJ0SW5kZXhlcyA9IENvbnRlbnRIZWxwZXIuZ2V0U2VsZWN0ZWRQYXJ0RG9jdW1lbnRJbmRleGVzKHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgcmFuZ2UpO1xuXG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEucmVtb3ZlUmFuZ2UocmFuZ2UpO1xuXG4gICAgICAgIEN1c3RvbUNvbXBvbmVudEhlbHBlci5hcHBseVJlbW92aW5nQ29tcG9uZW50cyh0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLCBwYXJ0SW5kZXhlcy5zdGFydEluZGV4LCBwYXJ0SW5kZXhlcy5lbmRJbmRleCk7XG4gICAgICAgIEN1c3RvbUNvbXBvbmVudEhlbHBlci5hcHBseVJlbW92aW5nQ29tcG9uZW50cyh0aGlzLmN1c3RvbUNvbXBvbmVudHMuaW1hZ2VzLCBwYXJ0SW5kZXhlcy5zdGFydEluZGV4LCBwYXJ0SW5kZXhlcy5lbmRJbmRleCk7XG4gICAgICAgIEN1c3RvbUNvbXBvbmVudEhlbHBlci5hcHBseVJlbW92aW5nQ29tcG9uZW50cyh0aGlzLmN1c3RvbUNvbXBvbmVudHMuY3VzdG9tRWxlbWVudHMsIHBhcnRJbmRleGVzLnN0YXJ0SW5kZXgsIHBhcnRJbmRleGVzLmVuZEluZGV4KTtcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50SGVscGVyLmFwcGx5UmVtb3ZpbmdDb21wb25lbnRzKHRoaXMuY3VzdG9tQ29tcG9uZW50cy50YWJzLCBwYXJ0SW5kZXhlcy5zdGFydEluZGV4LCBwYXJ0SW5kZXhlcy5lbmRJbmRleCk7XG5cbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5kZWxldGUodGhpcy5tb2RlbCwgcGFydEluZGV4ZXMuc3RhcnRJbmRleCwgcGFydEluZGV4ZXMuZW5kSW5kZXggLSBwYXJ0SW5kZXhlcy5zdGFydEluZGV4ICsgMSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocmFuZ2Uuc3RhcnQpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnJlc2V0QWxsTnVtYmVyaW5nSW5mbyhyYW5nZS5zdGFydC5yb3cpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LnJvdyk7XG4gICAgICAgIGlmIChyYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93ICYmIHRoaXMudHlwZSAhPT0gJ2NlbGwnKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU51bWJlcmluZ3NEYXRhT25DaGFuZ2UocmFuZ2Uuc3RhcnQucm93ICsgMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFwcGx5VG9vbGJhclN0eWxlcygpO1xuICAgIH1cblxuICAgIHJlcGxhY2UobW9kZWw6IFJlcGxhY2VNb2RlbCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIHRoaXMucmVtb3ZlQnlEb2N1bWVudEluZGV4ZXMobW9kZWwuZGVsZXRlLnN0YXJ0SW5kZXgsIG1vZGVsLmRlbGV0ZS5zdGFydEluZGV4ICsgbW9kZWwuZGVsZXRlLmNvdW50KTtcbiAgICAgICAgbGV0IGVuZFBvaW50OiBDdXJzb3JQYXJhZ3JhcGg7XG4gICAgICAgIGlmIChtb2RlbC5pbnNlcnRUZXh0KSB7XG4gICAgICAgICAgICBlbmRQb2ludCA9IHRoaXMuaW5zZXJ0VGV4dEJ5RG9jdW1lbnRJbmRleChtb2RlbC5pbnNlcnRUZXh0Lmluc2VydEluZGV4LCBtb2RlbC5pbnNlcnRUZXh0LnRleHQpO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsLmluc2VydFBhcmFncmFwaCkge1xuICAgICAgICAgICAgZW5kUG9pbnQgPSB0aGlzLmluc2VydFBhcmFncmFwaEJ5RG9jdW1lbnRJbmRleChtb2RlbC5pbnNlcnRQYXJhZ3JhcGgpO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsLmluc2VydEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVuZFBvaW50ID0gdGhpcy5pbnNlcnRFbGVtZW50QnlEb2N1bWVudEluZGV4KG1vZGVsLmluc2VydEVsZW1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsLmluc2VydEJyZWFrKSB7XG4gICAgICAgICAgICBlbmRQb2ludCA9IHRoaXMuaW5zZXJ0QnJlYWtCeURvY3VtZW50SW5kZXgobW9kZWwuaW5zZXJ0QnJlYWspO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsLmluc2VydFRhYikge1xuICAgICAgICAgICAgZW5kUG9pbnQgPSB0aGlzLmluc2VydFRhYkJ5RG9jdW1lbnRJbmRleChtb2RlbC5pbnNlcnRUYWIpO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsLmluc2VydEltYWdlKSB7XG4gICAgICAgICAgICBlbmRQb2ludCA9IHRoaXMuaW5zZXJ0SW1hZ2VCeURvY3VtZW50SW5kZXgobW9kZWwuaW5zZXJ0SW1hZ2UpO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsLmluc2VydFRhYmxlKSB7XG4gICAgICAgICAgICBlbmRQb2ludCA9IHRoaXMuaW5zZXJ0VGFibGVCeURvY3VtZW50SW5kZXgobW9kZWwuaW5zZXJ0VGFibGUpO1xuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsLmluc2VydExpbmspIHtcbiAgICAgICAgICAgIGVuZFBvaW50ID0gdGhpcy5pbnNlcnRMaW5rQnlEb2N1bWVudEluZGV4KG1vZGVsLmluc2VydExpbmspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50O1xuICAgIH1cblxuICAgIGluc2VydFRleHQocG9zaXRpb246IEN1cnNvclBhcmFncmFwaCwgdGV4dDogc3RyaW5nLCBjdXJzb3JTdHlsZT86IFRleHRTdHlsZU1vZGVsKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgcG9zaXRpb24pO1xuICAgICAgICBpZiAoY3Vyc29yU3R5bGUpIHtcbiAgICAgICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuaW5zZXJ0U3R5bGVkVGV4dCh0aGlzLm1vZGVsLCB0ZXh0LCBpbnNlcnRJbmRleCwgY3Vyc29yU3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5pbnNlcnRUZXh0KHRoaXMubW9kZWwsIHRleHQsIGluc2VydEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHRoaXMuZGlzcGxheURhdGEuaW5zZXJ0VGV4dChwb3NpdGlvbiwgdGV4dCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEucmVzZXRBbGxOdW1iZXJpbmdJbmZvKHBvc2l0aW9uLnJvdyk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHBvc2l0aW9uLnJvdywgZW5kUG9zaXRpb24ucm93KTtcbiAgICAgICAgaWYgKGVuZFBvc2l0aW9uLnJvdyAtIHBvc2l0aW9uLnJvdyAmJiB0aGlzLnR5cGUgIT09ICdjZWxsJykge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOdW1iZXJpbmdzRGF0YU9uQ2hhbmdlKGVuZFBvc2l0aW9uLnJvdyArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGVuZFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIGVuZFBvc2l0aW9uO1xuICAgIH1cblxuICAgIGluc2VydEVsZW1lbnQocG9zaXRpb246IEN1cnNvclBhcmFncmFwaCwgZWxlbWVudDogRWxlbWVudERhdGFNb2RlbCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0RWxlbWVudCA9IG5ldyBJbnNlcnRFbGVtZW50TW9kZWwoeyBlbGVtZW50OiBuZXcgRWxlbWVudE1vZGVsKHsgaW5zZXJ0SW5kZXgsIC4uLmVsZW1lbnQgfSkgfSk7XG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuaW5zZXJ0RWxlbWVudCh0aGlzLm1vZGVsLCBpbnNlcnRFbGVtZW50KTtcblxuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWwuZWxlbWVudHMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuY3VzdG9tQ29udGVudFNlcnZpY2UuZmluZENvbXBvbmVudFR5cGUobW9kZWwudHlwZSk7XG4gICAgICAgIHRoaXMuYWRkQ29tcG9uZW50KHRoaXMuY3VzdG9tQ29tcG9uZW50cy5jdXN0b21FbGVtZW50cywgbW9kZWwsIHR5cGUpO1xuXG4gICAgICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gdGhpcy5kaXNwbGF5RGF0YS5pbnNlcnRUZXh0KHBvc2l0aW9uLCBDVVNUT01fRUxFTUVOVF9NQVJLRVIpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwb3NpdGlvbi5yb3csIGVuZFBvc2l0aW9uLnJvdyk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGVuZFBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIGVuZFBvc2l0aW9uO1xuICAgIH1cblxuICAgIGluc2VydEJyZWFrKHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgsIGJyZWFrVHlwZTogQnJlYWtUeXBlcyk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgaXNPbk5ld1BhcmFncmFwaCA9XG4gICAgICAgICAgICBicmVha1R5cGUgPT09IEJyZWFrVHlwZXMuUGFnZSAmJlxuICAgICAgICAgICAgQnJlYWtIZWxwZXIuZ2V0QnJlYWtUeXBlKHRoaXMubW9kZWwsIENVU1RPTV9FTEVNRU5UX01BUktFUiwgaW5zZXJ0SW5kZXggLSAxKSAhPT0gQnJlYWtUeXBlcy5QYWdlO1xuICAgICAgICBjb25zdCB0ZXh0ID0gaXNPbk5ld1BhcmFncmFwaCA/IGAke05FV19MSU5FX01BUktVUH0ke0NVU1RPTV9FTEVNRU5UX01BUktFUn1gIDogQ1VTVE9NX0VMRU1FTlRfTUFSS0VSO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmluc2VydEJyZWFrKHRoaXMubW9kZWwsIHRleHQsIGluc2VydEluZGV4LCBicmVha1R5cGUpO1xuXG4gICAgICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gdGhpcy5kaXNwbGF5RGF0YS5pbnNlcnRUZXh0KHBvc2l0aW9uLCB0ZXh0KTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMocG9zaXRpb24ucm93LCBlbmRQb3NpdGlvbi5yb3cpO1xuICAgICAgICBpZiAoaXNPbk5ld1BhcmFncmFwaCAmJiBlbmRQb3NpdGlvbi5yb3cgLSBwb3NpdGlvbi5yb3cpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTnVtYmVyaW5nc0RhdGFPbkNoYW5nZShlbmRQb3NpdGlvbi5yb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3Vyc29yUG9zaXRpb24gPSB0aGlzLmRpc3BsYXlEYXRhLmdldFBvc2l0aW9uQWZ0ZXJCcmVhayhlbmRQb3NpdGlvbiwgYnJlYWtUeXBlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoY3Vyc29yUG9zaXRpb24pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWIocG9zaXRpb246IEN1cnNvclBhcmFncmFwaCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBvc2l0aW9uKTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5pbnNlcnRUYWIodGhpcy5tb2RlbCwgaW5zZXJ0SW5kZXgpO1xuXG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbC50YWJzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuYWRkQ29tcG9uZW50KHRoaXMuY3VzdG9tQ29tcG9uZW50cy50YWJzLCBtb2RlbCwgTm9kZXJUYWJDb21wb25lbnQpO1xuXG4gICAgICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gdGhpcy5kaXNwbGF5RGF0YS5pbnNlcnRUZXh0KHBvc2l0aW9uLCBDVVNUT01fRUxFTUVOVF9NQVJLRVIpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwb3NpdGlvbi5yb3csIHBvc2l0aW9uLnJvdyk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoZW5kUG9zaXRpb24pO1xuICAgICAgICByZXR1cm4gZW5kUG9zaXRpb247XG4gICAgfVxuXG4gICAgaW5zZXJ0SW1hZ2UocG9zaXRpb246IEN1cnNvclBhcmFncmFwaCwgaW1hZ2VEYXRhOiBJbWFnZURhdGFNb2RlbCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBvc2l0aW9uKTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5pbnNlcnRJbWFnZSh0aGlzLm1vZGVsLCBpbnNlcnRJbmRleCwgaW1hZ2VEYXRhKTtcblxuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWwuaW1hZ2VzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuYWRkQ29tcG9uZW50KHRoaXMuY3VzdG9tQ29tcG9uZW50cy5pbWFnZXMsIG1vZGVsLCBOb2RlckltYWdlQ29tcG9uZW50KTtcblxuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHRoaXMuZGlzcGxheURhdGEuaW5zZXJ0VGV4dChwb3NpdGlvbiwgQ1VTVE9NX0VMRU1FTlRfTUFSS0VSKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMocG9zaXRpb24ucm93LCBwb3NpdGlvbi5yb3cpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGVuZFBvc2l0aW9uKTtcblxuICAgICAgICByZXR1cm4gZW5kUG9zaXRpb247XG4gICAgfVxuXG4gICAgaW5zZXJ0TGluayhwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoLCBsaW5rRGF0YTogTGlua0RhdGFNb2RlbCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgbGlua1N0eWxlID0gbmV3IFRleHRTdHlsZU1vZGVsKHtcbiAgICAgICAgICAgIC4uLkRFRkFVTFRfVEVYVF9TVFlMRSxcbiAgICAgICAgICAgIGhlYWRpbmdTdHlsZUlkOiBIWVBFUkxJTktfSEVBRElOR19TVFlMRV9JRCxcbiAgICAgICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgICAgIGZvbnRDb2xvcjogSFlQRVJMSU5LX0ZPTlRfQ09MT1JcbiAgICAgICAgfSk7XG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuaW5zZXJ0TGluayh0aGlzLm1vZGVsLCBsaW5rRGF0YS50ZXh0LCBsaW5rRGF0YS5saW5rLCBpbnNlcnRJbmRleCwgbGlua1N0eWxlKTtcblxuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHRoaXMuZGlzcGxheURhdGEuaW5zZXJ0VGV4dChwb3NpdGlvbiwgbGlua0RhdGEudGV4dCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHBvc2l0aW9uLnJvdywgcG9zaXRpb24ucm93KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihlbmRQb3NpdGlvbik7XG4gICAgICAgIHJldHVybiBlbmRQb3NpdGlvbjtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZShwb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoLCB0YWJsZU1vZGVsOiBJbnNlcnRUYWJsZU1vZGVsKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgcG9zaXRpb24pO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLmluc2VydFRhYmxlKHRoaXMubW9kZWwsIGluc2VydEluZGV4LCB0YWJsZU1vZGVsLCB0aGlzLmRpc3BsYXlEYXRhLmNvbnRlbnRXaWR0aCk7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IHRhYmxlTW9kZWwuaW5zZXJ0VGFibGVJbmRleCk7XG4gICAgICAgIHRoaXMuYWRkQ29tcG9uZW50KHRoaXMuY3VzdG9tQ29tcG9uZW50cy50YWJsZXMsIG1vZGVsLCBOb2RlclRhYmxlQ29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSB0aGlzLmRpc3BsYXlEYXRhLmluc2VydFRleHQocG9zaXRpb24sIHRhYmxlTW9kZWwuY29udGVudCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHBvc2l0aW9uLnJvdywgZW5kUG9zaXRpb24ucm93KTtcbiAgICAgICAgaWYgKGVuZFBvc2l0aW9uLnJvdyAtIHBvc2l0aW9uLnJvdykge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOdW1iZXJpbmdzRGF0YU9uQ2hhbmdlKGVuZFBvc2l0aW9uLnJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoZW5kUG9zaXRpb24pO1xuICAgICAgICByZXR1cm4gZW5kUG9zaXRpb247XG4gICAgfVxuXG4gICAgaW5zZXJ0UGFyYWdyYXBoKHBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgsIHBhcmFncmFwaE1vZGVsOiBJbnNlcnRQYXJhZ3JhcGhNb2RlbCk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IE9wZXJhdGlvbnNIZWxwZXIuaW5zZXJ0UGFyYWdyYXBoKHRoaXMubW9kZWwsIGluc2VydEluZGV4LCBwYXJhZ3JhcGhNb2RlbCwgdGhpcy5kaXNwbGF5RGF0YS5jb250ZW50V2lkdGgpO1xuICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IHRoaXMuZGlzcGxheURhdGEuaW5zZXJ0VGV4dChwb3NpdGlvbiwgdGV4dCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHBvc2l0aW9uLnJvdywgZW5kUG9zaXRpb24ucm93KTtcbiAgICAgICAgaWYgKGVuZFBvc2l0aW9uLnJvdyAtIHBvc2l0aW9uLnJvdykge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOdW1iZXJpbmdzRGF0YU9uQ2hhbmdlKGVuZFBvc2l0aW9uLnJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVuZFBvaW50OiBDdXJzb3JQYXJhZ3JhcGg7XG4gICAgICAgIGlmIChwYXJhZ3JhcGhNb2RlbC5pbnNlcnRUZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhQb3NpdGlvbiA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgoXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgICAgIHBhcmFncmFwaE1vZGVsLmluc2VydFRleHQuaW5zZXJ0SW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbmRQb2ludCA9IHRoaXMuZGlzcGxheURhdGEuaW5zZXJ0VGV4dChwYXJhZ3JhcGhQb3NpdGlvbiwgdGV4dCk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwYXJhZ3JhcGhQb3NpdGlvbi5yb3csIGVuZFBvaW50LnJvdyk7XG4gICAgICAgICAgICBpZiAoZW5kUG9pbnQucm93IC0gcGFyYWdyYXBoUG9zaXRpb24ucm93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOdW1iZXJpbmdzRGF0YU9uQ2hhbmdlKGVuZFBvaW50LnJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihlbmRQb2ludCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYWdyYXBoTW9kZWwuaW5zZXJ0SW1hZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleChcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoTW9kZWwuaW5zZXJ0SW1hZ2UuaW5zZXJ0SW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBpbWFnZUluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbC5pbWFnZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGltYWdlSW5zZXJ0SW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5hZGRDb21wb25lbnQodGhpcy5jdXN0b21Db21wb25lbnRzLmltYWdlcywgbW9kZWwsIE5vZGVySW1hZ2VDb21wb25lbnQpO1xuICAgICAgICAgICAgZW5kUG9pbnQgPSB0aGlzLmRpc3BsYXlEYXRhLmluc2VydFRleHQocGFyYWdyYXBoUG9zaXRpb24sIENVU1RPTV9FTEVNRU5UX01BUktFUik7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcyhwYXJhZ3JhcGhQb3NpdGlvbi5yb3csIHBhcmFncmFwaFBvc2l0aW9uLnJvdyk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihlbmRQb2ludCk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYWdyYXBoTW9kZWwuaW5zZXJ0VGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaFBvc2l0aW9uID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleChcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoTW9kZWwuaW5zZXJ0VGFibGUuaW5zZXJ0SW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWwudGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBwYXJhZ3JhcGhNb2RlbC5pbnNlcnRUYWJsZS5pbnNlcnRUYWJsZUluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuYWRkQ29tcG9uZW50KHRoaXMuY3VzdG9tQ29tcG9uZW50cy50YWJsZXMsIG1vZGVsLCBOb2RlclRhYmxlQ29tcG9uZW50KTtcbiAgICAgICAgICAgIGVuZFBvaW50ID0gdGhpcy5kaXNwbGF5RGF0YS5pbnNlcnRUZXh0KHBhcmFncmFwaFBvc2l0aW9uLCBwYXJhZ3JhcGhNb2RlbC5pbnNlcnRUYWJsZS5jb250ZW50KTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHBhcmFncmFwaFBvc2l0aW9uLnJvdywgZW5kUG9pbnQucm93KTtcbiAgICAgICAgICAgIGlmIChlbmRQb2ludC5yb3cgLSBwYXJhZ3JhcGhQb3NpdGlvbi5yb3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnVwZGF0ZU51bWJlcmluZ3NEYXRhT25DaGFuZ2UoZW5kUG9pbnQucm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGVuZFBvaW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5kUG9pbnQ7XG4gICAgfVxuXG4gICAgYWRkQ29tcG9uZW50PFQgZXh0ZW5kcyBCYXNlTm9kZXJDb21wb25lbnQ+KGN1c3RvbUVsZW1lbnRzOiBDb21wb25lbnRSZWY8VD5bXSwgbW9kZWw6IEN1c3RvbUNvbnRlbnQsIGNvbXBvbmVudFR5cGU6IFR5cGU8VD4pIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuY3VzdG9tQ29udGVudFNlcnZpY2UuY29tcG9uZW50U2VydmljZS5nZW5lcmF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlLCB7XG4gICAgICAgICAgICBjb250ZW50OiBtb2RlbCxcbiAgICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG4gICAgICAgICAgICBnZW5lcmFsUHJvcGVydGllczogdGhpcy5nZW5lcmFsUHJvcGVydGllcyxcbiAgICAgICAgICAgIGNvbnRlbnRXaWR0aDogdGhpcy5kaXNwbGF5RGF0YS5jb250ZW50V2lkdGhcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnRQb3NpdGlvbiA9IGN1c3RvbUVsZW1lbnRzLmZpbmRJbmRleCh4ID0+IHguaW5zdGFuY2UuaW5zZXJ0SW5kZXggPiBtb2RlbC5pbnNlcnRJbmRleCk7XG4gICAgICAgIGlmIChuZXdFbGVtZW50UG9zaXRpb24gPj0gMCkge1xuICAgICAgICAgICAgY3VzdG9tRWxlbWVudHMuc3BsaWNlKG5ld0VsZW1lbnRQb3NpdGlvbiwgMCwgY3VzdG9tRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXN0b21FbGVtZW50cy5wdXNoKGN1c3RvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXBwbHlUb29sYmFyU3R5bGVzKCk6IHZvaWQge1xuICAgICAgICAvLyB1bmRlZmluZWQgLSB2YWx1ZSB3YXNuJ3Qgc2V0XG4gICAgICAgIC8vIG51bGwgLSBjb2xsaXNpb24gKGRpZmZlcmVudCB2YWx1ZXMgYXQgdGhlIHNhbWUgdGltZSlcbiAgICAgICAgLy8gdmFsdWUgLSB2YWx1ZSB3YXMgc2V0IHdpdGhvdXQgY29sbGlzaW9uc1xuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydCk7XG4gICAgICAgIGxldCBlbmRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCB0aGlzLnNlbGVjdGlvbi5yYW5nZS5lbmQpO1xuICAgICAgICBpZiAoc3RhcnRJbmRleCAhPT0gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGVuZEluZGV4LS07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb24uY3Vyc29yLmNvbHVtbiA+IDApIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgtLTtcbiAgICAgICAgICAgIGVuZEluZGV4LS07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYWdyYXBoU3R5bGVzID0gUGFyYWdyYXBoU3R5bGVIZWxwZXIuZ2V0UGFyYWdyYXBoc0F0UmFuZ2UodGhpcy5tb2RlbC5wYXJhZ3JhcGhzLCBzdGFydEluZGV4LCBlbmRJbmRleCkubWFwKHggPT5cbiAgICAgICAgICAgIHgucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWRcbiAgICAgICAgICAgICAgICA/IE51bWJlcmluZ0hlbHBlci5nZXRTdHlsZXMoeC5wYXJhZ3JhcGhTdHlsZSwgdGhpcy5nZW5lcmFsUHJvcGVydGllcy5udW1iZXJpbmdzKVxuICAgICAgICAgICAgICAgIDogbmV3IE51bWJlcmluZ1BhcmFncmFwaFN0eWxlTW9kZWwoeC5wYXJhZ3JhcGhTdHlsZSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3R5bGVzID0gdGhpcy5zZWxlY3Rpb24uaXNFbXB0eVxuICAgICAgICAgICAgPyB0aGlzLmdldFN0eWxlRm9yQ3Vyc29yKHN0YXJ0SW5kZXgpXG4gICAgICAgICAgICA6IEZvcm1hdFN0eWxlSGVscGVyLmNvbWJpbmVTZWN0aW9uKHRoaXMubW9kZWwuZm9ybWF0cywgdGhpcy5tb2RlbC5saW5rcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IHgudGV4dFN0eWxlKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJVG9vbGJhclN0eWxlcyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBzdHlsZSBvZiBbLi4uc3R5bGVzLCAuLi5wYXJhZ3JhcGhTdHlsZXNdKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoc3R5bGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBzdHlsZVtrZXldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0W2tleV0gIT09IHN0eWxlW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc3R5bGVzID0gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldFN0eWxlRm9yQ3Vyc29yKGluZGV4OiBudW1iZXIpOiBUZXh0U3R5bGVNb2RlbFtdIHtcbiAgICAgICAgY29uc3QgbGluayA9IHRoaXMubW9kZWwubGlua3MuZmluZCh4ID0+IHguc3RhcnRJbmRleCA8PSBpbmRleCAmJiB4LmVuZEluZGV4ID4gaW5kZXgpO1xuICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhJbkxpbmsgPSBpbmRleCAtIGxpbmsuc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtGb3JtYXQgPSBsaW5rLmZvcm1hdHMuZmluZCh4ID0+IHguc3RhcnRJbmRleCA8PSBpbmRleEluTGluayAmJiB4LmVuZEluZGV4ID49IGluZGV4SW5MaW5rKTtcbiAgICAgICAgICAgIHJldHVybiBbbGlua0Zvcm1hdC50ZXh0U3R5bGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybWF0ID0gRm9ybWF0U3R5bGVIZWxwZXIuZ2V0Rm9ybWF0QXRJbmRleCh0aGlzLm1vZGVsLmZvcm1hdHMsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIFtmb3JtYXQudGV4dFN0eWxlXTtcbiAgICB9XG5cbiAgICByZXN0b3JlKG1vZGVsOiBSZXN0b3JlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoUG9zaXRpb24gPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuZGlzcGxheURhdGEucGFyYWdyYXBocywgbW9kZWwuc3RhcnRJbmRleCk7XG4gICAgICAgIGlmIChtb2RlbC5zdGFydEluZGV4ICE9PSBtb2RlbC5lbmRJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVCeURvY3VtZW50SW5kZXhlcyhtb2RlbC5zdGFydEluZGV4LCBtb2RlbC5lbmRJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBPcGVyYXRpb25zSGVscGVyLnJlc3RvcmUodGhpcy5tb2RlbCwgbW9kZWwpO1xuXG4gICAgICAgIGNvbnN0IHJlc3RvcmVFbmRJbmRleCA9IG1vZGVsLnN0YXJ0SW5kZXggKyBtb2RlbC50ZXh0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXN0b3JlQ29tcG9uZW50cyh0aGlzLm1vZGVsLnRhYmxlcywgdGhpcy5jdXN0b21Db21wb25lbnRzLnRhYmxlcywgTm9kZXJUYWJsZUNvbXBvbmVudCwgbW9kZWwuc3RhcnRJbmRleCwgcmVzdG9yZUVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5yZXN0b3JlQ29tcG9uZW50cyh0aGlzLm1vZGVsLmltYWdlcywgdGhpcy5jdXN0b21Db21wb25lbnRzLmltYWdlcywgTm9kZXJJbWFnZUNvbXBvbmVudCwgbW9kZWwuc3RhcnRJbmRleCwgcmVzdG9yZUVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5yZXN0b3JlQ29tcG9uZW50cyh0aGlzLm1vZGVsLnRhYnMsIHRoaXMuY3VzdG9tQ29tcG9uZW50cy50YWJzLCBOb2RlclRhYkNvbXBvbmVudCwgbW9kZWwuc3RhcnRJbmRleCwgcmVzdG9yZUVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5yZXN0b3JlRWxlbWVudENvbXBvbmVudHModGhpcy5tb2RlbC5lbGVtZW50cywgbW9kZWwuc3RhcnRJbmRleCwgcmVzdG9yZUVuZEluZGV4KTtcblxuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuZGlzcGxheURhdGEuaW5zZXJ0VGV4dChwYXJhZ3JhcGhQb3NpdGlvbiwgbW9kZWwudGV4dCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEucmVzZXRBbGxOdW1iZXJpbmdJbmZvKHBhcmFncmFwaFBvc2l0aW9uLnJvdyk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKHBhcmFncmFwaFBvc2l0aW9uLnJvdywgZW5kUG9pbnQucm93KTtcbiAgICAgICAgaWYgKGVuZFBvaW50LnJvdyAtIHBhcmFncmFwaFBvc2l0aW9uLnJvdyAmJiB0aGlzLnR5cGUgIT09ICdjZWxsJykge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS51cGRhdGVOdW1iZXJpbmdzRGF0YU9uQ2hhbmdlKGVuZFBvaW50LnJvdyArIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoZW5kUG9pbnQpO1xuICAgICAgICB0aGlzLmFwcGx5VG9vbGJhclN0eWxlcygpO1xuICAgIH1cblxuICAgIHJlc3RvcmVDb21wb25lbnRzPFQgZXh0ZW5kcyBCYXNlTm9kZXJDb21wb25lbnQ+KFxuICAgICAgICBtb2RlbHM6IEN1c3RvbUNvbnRlbnRbXSxcbiAgICAgICAgY29tcG9uZW50czogQ29tcG9uZW50UmVmPEJhc2VOb2RlckNvbXBvbmVudD5bXSxcbiAgICAgICAgY29tcG9uZW50VHlwZTogVHlwZTxUPixcbiAgICAgICAgcmVzdG9yZUluZGV4OiBudW1iZXIsXG4gICAgICAgIHJlc3RvcmVFbmRJbmRleDogbnVtYmVyXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgbW9kZWxzKSB7XG4gICAgICAgICAgICBpZiAobW9kZWwuaW5zZXJ0SW5kZXggPCByZXN0b3JlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kZWwuaW5zZXJ0SW5kZXggPj0gcmVzdG9yZUVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZENvbXBvbmVudChjb21wb25lbnRzLCBtb2RlbCwgY29tcG9uZW50VHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXN0b3JlRWxlbWVudENvbXBvbmVudHMoZWxlbWVudHM6IEVsZW1lbnRNb2RlbFtdLCByZXN0b3JlSW5kZXg6IG51bWJlciwgcmVzdG9yZUVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBtb2RlbCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgaWYgKG1vZGVsLmluc2VydEluZGV4IDwgcmVzdG9yZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGVsLmluc2VydEluZGV4ID49IHJlc3RvcmVFbmRJbmRleCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMuY3VzdG9tQ29udGVudFNlcnZpY2UuZmluZENvbXBvbmVudFR5cGUobW9kZWwudHlwZSk7XG4gICAgICAgICAgICB0aGlzLmFkZENvbXBvbmVudCh0aGlzLmN1c3RvbUNvbXBvbmVudHMuY3VzdG9tRWxlbWVudHMsIG1vZGVsLCB0eXBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldExpbmtNb2RlbChjdXJzb3I6IEN1cnNvclBhcmFncmFwaCk6IExpbmtNb2RlbCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGN1cnNvcik7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmxpbmtzLmZpbmQoeCA9PiB4LnN0YXJ0SW5kZXggPD0gaW5kZXggJiYgeC5lbmRJbmRleCA+IGluZGV4KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVJvd3MoaW5zZXJ0SW5kZXg6IG51bWJlciwgcm93c0NvdW50OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIsIGluaGVyaXRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5jdXN0b21Db21wb25lbnRzLnRhYmxlcy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLnJlc2V0TnVtYmVyaW5nSW5mb0J5VGFibGVDZWxsKHRhYmxlKTtcbiAgICAgICAgT3BlcmF0aW9uc0hlbHBlci5pbnNlcnRUYWJsZVJvd3ModGhpcy5tb2RlbCwgaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCk7XG4gICAgICAgIHRhYmxlLmluc3RhbmNlLnVwZGF0ZVRhYmxlKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4OiBudW1iZXIsIGNvbHVtbnNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBpbmhlcml0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuY3VzdG9tQ29tcG9uZW50cy50YWJsZXMuZmluZCh4ID0+IHguaW5zdGFuY2UuaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5kaXNwbGF5RGF0YS5yZXNldE51bWJlcmluZ0luZm9CeVRhYmxlQ2VsbCh0YWJsZSk7XG4gICAgICAgIE9wZXJhdGlvbnNIZWxwZXIuaW5zZXJ0VGFibGVDb2x1bW5zKFxuICAgICAgICAgICAgdGhpcy5tb2RlbCxcbiAgICAgICAgICAgIGluc2VydEluZGV4LFxuICAgICAgICAgICAgY29sdW1uc0NvdW50LFxuICAgICAgICAgICAgdGFyZ2V0SW5kZXgsXG4gICAgICAgICAgICBpbmhlcml0SW5kZXgsXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlEYXRhLmNvbnRlbnRXaWR0aFxuICAgICAgICApO1xuICAgICAgICB0YWJsZS5pbnN0YW5jZS51cGRhdGVUYWJsZSgpO1xuICAgIH1cblxuICAgIHJlbW92ZVRhYmxlUm93cyhpbnNlcnRJbmRleDogbnVtYmVyLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEucmVzZXROdW1iZXJpbmdJbmZvQnlUYWJsZUNlbGwodGFibGUpO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLnJlbW92ZVRhYmxlUm93cyh0aGlzLm1vZGVsLCBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0YWJsZS5pbnN0YW5jZS51cGRhdGVUYWJsZSgpO1xuICAgIH1cblxuICAgIHJlbW92ZVRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleDogbnVtYmVyLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEucmVzZXROdW1iZXJpbmdJbmZvQnlUYWJsZUNlbGwodGFibGUpO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLnJlbW92ZVRhYmxlQ29sdW1ucyh0aGlzLm1vZGVsLCBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRoaXMuZGlzcGxheURhdGEuY29udGVudFdpZHRoKTtcbiAgICAgICAgdGFibGUuaW5zdGFuY2UudXBkYXRlVGFibGUoKTtcbiAgICB9XG5cbiAgICByZXNpemVUYWJsZUNvbHVtbnMocmVzaXplVGFibGVDb2x1bW5zOiBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuY3VzdG9tQ29tcG9uZW50cy50YWJsZXMuZmluZCh4ID0+IHguaW5zdGFuY2UuaW5zZXJ0SW5kZXggPT09IHJlc2l6ZVRhYmxlQ29sdW1ucy5pbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuZGlzcGxheURhdGEucmVzZXROdW1iZXJpbmdJbmZvQnlUYWJsZUNlbGwodGFibGUpO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLnJlc2l6ZVRhYmxlQ29sdW1ucyh0aGlzLm1vZGVsLCByZXNpemVUYWJsZUNvbHVtbnMpO1xuICAgICAgICB0YWJsZS5pbnN0YW5jZS51cGRhdGVUYWJsZSgpO1xuICAgIH1cblxuICAgIHJlc3RvcmVUYWJsZShpbnNlcnRJbmRleDogbnVtYmVyLCB0YWJsZTogVGFibGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRUYWJsZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGFibGUpKSBhcyBUYWJsZU1vZGVsO1xuICAgICAgICBPcGVyYXRpb25zSGVscGVyLnJlc3RvcmVUYWJsZSh0aGlzLm1vZGVsLCBpbnNlcnRJbmRleCwgb2xkVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZUNvbXBvbmVudCA9IHRoaXMuY3VzdG9tQ29tcG9uZW50cy50YWJsZXMuZmluZCh4ID0+IHguaW5zdGFuY2UuaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGFibGVDb21wb25lbnQuaW5zdGFuY2UudXBkYXRlVGFibGUoKTtcbiAgICB9XG59XG4iXX0=
|