@seniorsistemas/components-ai 2.0.0 → 2.0.2-master-c019cc99
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/components/dynamic-form/dynamic-form.component.mjs +9 -18
- package/esm2022/lib/components/dynamic-form/fields/dynamic-field-lookup.component.mjs +15 -6
- package/esm2022/lib/services/auth.service.mjs +24 -118
- package/esm2022/lib/utils/utils.mjs +2 -2
- package/fesm2022/seniorsistemas-components-ai.mjs +47 -140
- package/fesm2022/seniorsistemas-components-ai.mjs.map +1 -1
- package/lib/services/auth.service.d.ts +2 -45
- package/package.json +1 -1
|
@@ -128,7 +128,7 @@ export class DynamicFieldLookupComponent {
|
|
|
128
128
|
}
|
|
129
129
|
else {
|
|
130
130
|
const upperTerm = term.toUpperCase();
|
|
131
|
-
filterConditions.push(`UPPER(${field})
|
|
131
|
+
filterConditions.push(`containing(UPPER(${field}), '${upperTerm}')`);
|
|
132
132
|
}
|
|
133
133
|
});
|
|
134
134
|
if (filterConditions.length > 0) {
|
|
@@ -297,7 +297,7 @@ export class DynamicFieldLookupComponent {
|
|
|
297
297
|
}
|
|
298
298
|
else {
|
|
299
299
|
const upperTerm = term.toUpperCase();
|
|
300
|
-
filterConditions.push(`UPPER(${field})
|
|
300
|
+
filterConditions.push(`containing(UPPER(${field}), '${upperTerm}')`);
|
|
301
301
|
}
|
|
302
302
|
});
|
|
303
303
|
if (filterConditions.length > 0) {
|
|
@@ -374,12 +374,21 @@ export class DynamicFieldLookupComponent {
|
|
|
374
374
|
this.loadData();
|
|
375
375
|
}
|
|
376
376
|
selectItem(item) {
|
|
377
|
-
//
|
|
378
|
-
|
|
379
|
-
this.displayValue = this.formatDisplayValue(item);
|
|
377
|
+
// Close dialog first, then set value in next tick to prevent
|
|
378
|
+
// click event from propagating to elements behind the dialog
|
|
380
379
|
this.showLookupDialog = false;
|
|
380
|
+
setTimeout(() => {
|
|
381
|
+
this.setValue(item);
|
|
382
|
+
this.displayValue = this.formatDisplayValue(item);
|
|
383
|
+
});
|
|
381
384
|
}
|
|
382
385
|
onRowSelect(event) {
|
|
386
|
+
// Prevent the click event from propagating after the dialog closes,
|
|
387
|
+
// which could trigger buttons behind the dialog (e.g. inline-edit save button)
|
|
388
|
+
if (event.originalEvent) {
|
|
389
|
+
event.originalEvent.stopPropagation();
|
|
390
|
+
event.originalEvent.preventDefault();
|
|
391
|
+
}
|
|
383
392
|
this.selectItem(event.data);
|
|
384
393
|
}
|
|
385
394
|
clearValue() {
|
|
@@ -761,4 +770,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
761
770
|
}], mode: [{
|
|
762
771
|
type: Input
|
|
763
772
|
}] } });
|
|
764
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC1sb29rdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2ZpZWxkcy9keW5hbWljLWZpZWxkLWxvb2t1cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0Is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WTt3QkFDWixXQUFXO3dCQUNYLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLDRCQUE0Qjt3QkFDNUIscUJBQXFCO3FCQUN0QixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBLVDt1RkE0SlEsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IER5bmFtaWNGb3JtRmllbGRDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvZHluYW1pYy1mb3JtLm1vZGVscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25IZWxwZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy90cmFuc2xhdGlvbi5oZWxwZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkLXdyYXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IExvb2t1cENvbHVtbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbnRpdHktbGlzdC5jb25maWcnO1xuaW1wb3J0IHsgVGFibGVMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy90YWJsZS1sb2FkaW5nL3RhYmxlLWxvYWRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2lhLWR5bmFtaWMtZmllbGQtbG9va3VwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJbnB1dFRleHRNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIFRhYmxlTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgT3ZlcmxheVBhbmVsTW9kdWxlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgRHluYW1pY0ZpZWxkV3JhcHBlckNvbXBvbmVudCxcbiAgICBUYWJsZUxvYWRpbmdEaXJlY3RpdmVcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c2lhLWR5bmFtaWMtZmllbGQtd3JhcHBlciBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwibW9kZVwiPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImxvb2t1cC1maWVsZFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBpc0ZpZWxkRGlzYWJsZWQoKX1cIj5cbiAgICAgICAgPCEtLSBIaWRkZW4gaW5wdXQgcGFyYSBvIGZvcm1Db250cm9sIC0tPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuZmllbGRcIiAvPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvb2t1cC1pbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDwhLS0gQXV0b2NvbXBsZXRlIG1vZGU6IGVkaXRhYmxlIGlucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgKm5nSWY9XCJpc0F1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAjYXV0b2NvbXBsZXRlSW5wdXRcbiAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgIFt2YWx1ZV09XCJhdXRvY29tcGxldGVUZXh0XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRQbGFjZWhvbGRlcigpXCJcbiAgICAgICAgICAgIFtjbGFzcy5wLWludmFsaWRdPVwiaXNGaWVsZEludmFsaWQoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaWVsZERpc2FibGVkKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtZGlzcGxheVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25BdXRvY29tcGxldGVJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbkF1dG9jb21wbGV0ZUZvY3VzKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25BdXRvY29tcGxldGVCbHVyKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPCEtLSBTdGFuZGFyZCBtb2RlOiByZWFkb25seSBpbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzQXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyKClcIlxuICAgICAgICAgICAgW2NsYXNzLnAtaW52YWxpZF09XCJpc0ZpZWxkSW52YWxpZCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpZWxkRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtZGlzcGxheVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3Blbkxvb2t1cCgpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDwhLS0gQXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zIGRyb3Bkb3duIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvY29tcGxldGUtc3VnZ2VzdGlvbnNcIiAqbmdJZj1cInNob3dTdWdnZXN0aW9ucyAmJiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic3VnZ2VzdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgICAobW91c2Vkb3duKT1cInNlbGVjdFN1Z2dlc3Rpb24oaXRlbSlcIj5cbiAgICAgICAgICAgICAge3sgZm9ybWF0RGlzcGxheVZhbHVlKGl0ZW0pIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zXCIgKm5nSWY9XCJzaG93U3VnZ2VzdGlvbnMgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAwICYmIGF1dG9jb21wbGV0ZUxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWdnZXN0aW9uLWl0ZW0gc3VnZ2VzdGlvbi1sb2FkaW5nXCI+QnVzY2FuZG8uLi48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9va3VwLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJjbGVhclZhbHVlKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaWVsZERpc2FibGVkKClcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIkxpbXBhclwiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktc2VhcmNoXCJcbiAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9wZW5Mb29rdXAoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpZWxkRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiQnVzY2FyXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIExvb2t1cCBEaWFsb2cgLS0+XG4gICAgICA8cC1kaWFsb2dcbiAgICAgICAgWyh2aXNpYmxlKV09XCJzaG93TG9va3VwRGlhbG9nXCJcbiAgICAgICAgW21vZGFsXT1cInRydWVcIlxuICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzgwMHB4JywgbWF4SGVpZ2h0OiAnODB2aCcgfVwiXG4gICAgICAgIFtjb250ZW50U3R5bGVdPVwieyBtYXhIZWlnaHQ6ICdjYWxjKDgwdmggLSAxMjBweCknLCBvdmVyZmxvdzogJ2F1dG8nIH1cIlxuICAgICAgICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgW2hlYWRlcl09XCInU2VsZWNpb25hciAnICsgKGZpZWxkLmxhYmVsIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAob25IaWRlKT1cIm9uRGlhbG9nSGlkZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvb2t1cC1kaWFsb2ctY29udGVudFwiPlxuICAgICAgICAgIDwhLS0gU2VhcmNoIElucHV0IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidCdXNjYXIgJyArIChmaWVsZC5sYWJlbCB8IHRyYW5zbGF0ZSkudG9Mb3dlckNhc2UoKSArICcuLi4nXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25TZWFyY2goKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0LWZ1bGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYnV0dG9ucy1pbnNpZGVcIj5cbiAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJjbGVhclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1idXR0b24tY2xlYXJcIlxuICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiTGltcGFyIGJ1c2NhXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uU2VhcmNoKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWJ1dHRvbi1zZWFyY2hcIlxuICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiQnVzY2FyXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEYXRhIFRhYmxlIC0tPlxuICAgICAgICAgIDxwLXRhYmxlXG4gICAgICAgICAgICBbdmFsdWVdPVwiZmlsdGVyZWREYXRhXCJcbiAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcm93c109XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgICAgICAgICBbbGF6eV09XCJ0cnVlXCJcbiAgICAgICAgICAgIChvbkxhenlMb2FkKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIiBzaWFUYWJsZUxvYWRpbmdcbiAgICAgICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiTW9zdHJhbmRvIHtmaXJzdH0gYSB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICAgICAgICBbcm93SG92ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkIGxvb2t1cC10YWJsZVwiXG4gICAgICAgICAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtXCJcbiAgICAgICAgICAgIChvblJvd1NlbGVjdCk9XCJvblJvd1NlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU9XCJzaW5nbGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCI+XG4gICAgICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDx0ciBbcFNlbGVjdGFibGVSb3ddPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldEZpZWxkVmFsdWUoaXRlbSwgY29sLmZpZWxkKSB9fVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aFwiIGNsYXNzPVwiZW1wdHktbWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8cD5OZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbzwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlRlbnRlIGFqdXN0YXIgb3MgdGVybW9zIGRlIGJ1c2NhPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC10YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3AtZGlhbG9nPlxuICAgIDwvc2lhLWR5bmFtaWMtZmllbGQtd3JhcHBlcj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIC5sb29rdXAtZmllbGQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLmxvb2t1cC1pbnB1dC1ncm91cCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIFxuICAgICAgLmxvb2t1cC1kaXNwbGF5IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgaGVpZ2h0OiAyLjg1N3JlbTtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbSA0cmVtIDAuNzVyZW0gMC43NXJlbTtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmxvb2t1cC1idXR0b25zIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogNHB4O1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDJweDtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICB9XG5cbiAgICAgIDo6bmctZGVlcCAucC1idXR0b24ge1xuICAgICAgICB3aWR0aDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiAycmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDtcbiAgICAgICAgXG4gICAgICAgIC5wLWJ1dHRvbi1pY29uIHtcbiAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5wLWJ1dHRvbi1sYWJlbCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXAtc3VyZmFjZS0wLCAjZmZmKTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcC1zdXJmYWNlLTMwMCwgI2QxZDVkYik7XG4gICAgICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA2cHggNnB4O1xuICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblxuICAgICAgICAuc3VnZ2VzdGlvbi1pdGVtIHtcbiAgICAgICAgICBwYWRkaW5nOiAwLjYyNXJlbSAwLjc1cmVtO1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1wLXRleHQtY29sb3IsICMzMzMpO1xuICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7XG5cbiAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXAtc3VyZmFjZS0xMDAsICNmM2Y0ZjYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICYuc3VnZ2VzdGlvbi1sb2FkaW5nIHtcbiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1wLXRleHQtbXV0ZWQtY29sb3IsICM5OTkpO1xuICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5sb29rdXAtZGlhbG9nLWNvbnRlbnQge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAuc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgIC5zZWFyY2gtaW5wdXQtZnVsbCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogNS41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaC1idXR0b25zLWluc2lkZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZ2FwOiAycHg7XG4gICAgICAgICAgXG4gICAgICAgICAgOjpuZy1kZWVwIC5wLWJ1dHRvbiB7XG4gICAgICAgICAgICB3aWR0aDogMi41cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBoZWlnaHQ6IDIuNXJlbSAhaW1wb3J0YW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAubG9va3VwLXRhYmxlIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgXG4gICAgICAgIC5lbXB0eS1zdGF0ZSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmc6IDMycHg7XG4gICAgICAgICAgY29sb3I6IHZhcigtLXAtdGV4dC1jb2xvci1zZWNvbmRhcnkpO1xuXG4gICAgICAgICAgaSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcCB7XG4gICAgICAgICAgICBtYXJnaW46IDhweCAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNtYWxsIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZExvb2t1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZmllbGQhOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBmb3JtITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIG1vZGU6ICdmb3JtJyB8ICdmaWx0ZXInID0gJ2Zvcm0nO1xuXG4gIGRpc3BsYXlWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHNob3dMb29rdXBEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWFyY2hUZXJtOiBzdHJpbmcgPSAnJztcbiAgXG4gIGRhdGE6IGFueVtdID0gW107XG4gIGZpbHRlcmVkRGF0YTogYW55W10gPSBbXTtcbiAgdG90YWxSZWNvcmRzOiBudW1iZXIgPSAwO1xuICBjdXJyZW50UGFnZTogbnVtYmVyID0gMDtcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBzZWxlY3RlZEl0ZW06IGFueSA9IG51bGw7XG4gIFxuICBjb2x1bW5zOiBMb29rdXBDb2x1bW5bXSA9IFtdO1xuICBkaXNwbGF5RmllbGQ6IHN0cmluZyA9ICduYW1lJztcbiAgdmFsdWVGaWVsZDogc3RyaW5nID0gJ2lkJztcbiAgc2VhcmNoRmllbGRzOiBzdHJpbmdbXSA9IFsnbmFtZSddO1xuXG4gIC8vIEF1dG9jb21wbGV0ZSBzdGF0ZVxuICBhdXRvY29tcGxldGVUZXh0OiBzdHJpbmcgPSAnJztcbiAgc3VnZ2VzdGlvbnM6IGFueVtdID0gW107XG4gIHNob3dTdWdnZXN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuICBhdXRvY29tcGxldGVMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBhdXRvY29tcGxldGVTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IGlzQXV0b2NvbXBsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkPy5sb29rdXBBdXRvY29tcGxldGUgPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBtaW5MZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZD8ubG9va3VwQXV0b2NvbXBsZXRlTWluTGVuZ3RoID8/IDI7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dXBMb29rdXBDb25maWcoKTtcbiAgICB0aGlzLndhdGNoVmFsdWVDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZXR1cEF1dG9jb21wbGV0ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQXV0b2NvbXBsZXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0F1dG9jb21wbGV0ZSkgcmV0dXJuO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3ViID0gdGhpcy5hdXRvY29tcGxldGVTdWJqZWN0LnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApLnN1YnNjcmliZSh0ZXJtID0+IHtcbiAgICAgIGlmICh0ZXJtLmxlbmd0aCA+PSB0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlYXJjaFN1Z2dlc3Rpb25zKHRlcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25BdXRvY29tcGxldGVJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5hdXRvY29tcGxldGVUZXh0ID0gdmFsdWU7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBvbkF1dG9jb21wbGV0ZUZvY3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVRleHQubGVuZ3RoID49IHRoaXMubWluTGVuZ3RoICYmIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uQXV0b2NvbXBsZXRlQmx1cigpOiB2b2lkIHtcbiAgICAvLyBEZWxheSB0byBhbGxvdyBjbGljayBvbiBzdWdnZXN0aW9uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuc2hvd1N1Z2dlc3Rpb25zID0gZmFsc2U7IH0sIDIwMCk7XG4gIH1cblxuICBzZWxlY3RTdWdnZXN0aW9uKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmFsdWUoaXRlbSk7XG4gICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmZvcm1hdERpc3BsYXlWYWx1ZShpdGVtKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVRleHQgPSB0aGlzLmRpc3BsYXlWYWx1ZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoU3VnZ2VzdGlvbnModGVybTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkPy5sb29rdXBTZXJ2aWNlKSByZXR1cm47XG4gICAgdGhpcy5hdXRvY29tcGxldGVMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IHRydWU7XG5cbiAgICBjb25zdCBsaXN0UGFyYW1zOiBhbnkgPSB7IHBhZ2U6IDAsIHNpemU6IDEwIH07XG5cbiAgICBpZiAodGhpcy5maWVsZC5sb29rdXBTb3J0KSB7XG4gICAgICBsaXN0UGFyYW1zLnNvcnQgPSB0aGlzLmZpZWxkLmxvb2t1cFNvcnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyQ29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBpc051bWVyaWNUZXJtID0gIWlzTmFOKE51bWJlcih0ZXJtKSkgJiYgdGVybSAhPT0gJyc7XG5cbiAgICB0aGlzLnNlYXJjaEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGZpZWxkKTtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGNvbHVtbj8udHlwZSB8fCAndGV4dCc7XG5cbiAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChpc051bWVyaWNUZXJtKSB7XG4gICAgICAgICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKGAke2ZpZWxkfSBlcSAke3Rlcm19YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVwcGVyVGVybSA9IHRlcm0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKGBVUFBFUigke2ZpZWxkfSkgbGlrZSAnJSR7dXBwZXJUZXJtfSUnYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZmlsdGVyQ29uZGl0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5ID0gZmlsdGVyQ29uZGl0aW9ucy5qb2luKCcgb3IgJyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgbG9va3VwRmlsdGVyc1xuICAgIGlmICh0aGlzLmZpZWxkLmxvb2t1cEZpbHRlcnMpIHtcbiAgICAgIGNvbnN0IGV4dHJhID0gdHlwZW9mIHRoaXMuZmllbGQubG9va3VwRmlsdGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHRoaXMuZmllbGQubG9va3VwRmlsdGVycyh0aGlzLmZvcm1Hcm91cD8udmFsdWUgfHwge30pXG4gICAgICAgIDogdGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzO1xuICAgICAgaWYgKGV4dHJhKSB7XG4gICAgICAgIGxpc3RQYXJhbXMuZmlsdGVyUXVlcnkgPSBsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5XG4gICAgICAgICAgPyBgKCR7bGlzdFBhcmFtcy5maWx0ZXJRdWVyeX0pIGFuZCAoJHtleHRyYX0pYFxuICAgICAgICAgIDogZXh0cmE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5maWVsZC5sb29rdXBTZXJ2aWNlLmxpc3QobGlzdFBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gcmVzLmNvbnRlbnRzIHx8IFtdO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXRjaFZhbHVlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgpO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICAvLyBDYXJyZWdhciB2YWxvciBpbmljaWFsXG4gICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLmhhbmRsZVZhbHVlRGlzcGxheShjb250cm9sLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gT2JzZXJ2YXIgbXVkYW7Dp2FzXG4gICAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZURpc3BsYXkodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPYnTDqW0gbyBGb3JtQ29udHJvbCwgbGlkYW5kbyBjb20gY2FtcG9zIGFuaW5oYWRvcyAoY29tIHBvbnRvIG5vIG5vbWUpXG4gICAqL1xuICBwcml2YXRlIGdldEZvcm1Db250cm9sKCkge1xuICAgIGlmICghdGhpcy5maWVsZD8uZmllbGQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEFjZXNzYSBkaXJldGFtZW50ZSB2aWEgY29udHJvbHNbXSBwb2lzIGZvcm0uZ2V0KCkgbsOjbyBmdW5jaW9uYSBjb20gY2FtcG9zIHF1ZSB0w6ptIHBvbnRvXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmZpZWxkLmZpZWxkXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woKTtcbiAgICByZXR1cm4gY29udHJvbD8udmFsdWU7XG4gIH1cblxuICBnZXQgY3VycmVudFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgpO1xuICAgIGNvbnRyb2w/LnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBMb29rdXBDb25maWcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmllbGQpIHtcbiAgICAgIHRoaXMuZGlzcGxheUZpZWxkID0gdGhpcy5maWVsZC5sb29rdXBEaXNwbGF5RmllbGQgfHwgJ25hbWUnO1xuICAgICAgdGhpcy52YWx1ZUZpZWxkID0gdGhpcy5maWVsZC5sb29rdXBWYWx1ZUZpZWxkIHx8ICdpZCc7XG4gICAgICB0aGlzLnNlYXJjaEZpZWxkcyA9IHRoaXMuZmllbGQubG9va3VwU2VhcmNoRmllbGRzIHx8IFsnbmFtZSddO1xuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5maWVsZC5sb29rdXBDb2x1bW5zIHx8IFtcbiAgICAgICAgeyBmaWVsZDogdGhpcy5kaXNwbGF5RmllbGQsIGhlYWRlcjogJ05vbWUnLCB3aWR0aDogJzEwMCUnIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZURpc3BsYXkodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVGV4dCA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmZvcm1hdERpc3BsYXlWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVRleHQgPSB0aGlzLmRpc3BsYXlWYWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVGV4dCA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdERpc3BsYXlWYWx1ZShpdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xuICAgIFxuICAgIGlmICh0aGlzLmZpZWxkPy5sb29rdXBEaXNwbGF5RmllbGRzICYmIHRoaXMuZmllbGQubG9va3VwRGlzcGxheUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgLm1hcChmaWVsZE5hbWUgPT4gdGhpcy5nZXRGaWVsZFZhbHVlKGl0ZW0sIGZpZWxkTmFtZSkpXG4gICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJycpO1xuICAgICAgXG4gICAgICByZXR1cm4gdmFsdWVzLmpvaW4oJyAtICcpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFZhbHVlKGl0ZW0sIHRoaXMuZGlzcGxheUZpZWxkKSB8fCAnJztcbiAgfVxuXG4gIGlzRmllbGRJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCk7XG4gICAgcmV0dXJuICEhKGNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIChjb250cm9sLmRpcnR5IHx8IGNvbnRyb2wudG91Y2hlZCkpO1xuICB9XG5cbiAgaXNGaWVsZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCk7XG4gICAgcmV0dXJuIGNvbnRyb2w/LmRpc2FibGVkIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVHJhbnNsYXRpb25IZWxwZXIuZ2V0RmlsdGVyUGxhY2Vob2xkZXIoXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZSxcbiAgICAgIHRoaXMubW9kZSxcbiAgICAgIHRoaXMuZmllbGQubGFiZWwsXG4gICAgICB0aGlzLmZpZWxkLnBsYWNlaG9sZGVyXG4gICAgKTtcbiAgfVxuXG4gIG9wZW5Mb29rdXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNGaWVsZERpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW0oKTtcbiAgICBcbiAgICB0aGlzLnNob3dMb29rdXBEaWFsb2cgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgIC8vIERlbGF5IGxvYWREYXRhIHRvIG5leHQgbWFjcm90YXNrIHRvIGF2b2lkIE5HMDEwMFxuICAgIC8vIChwLWRpYWxvZyB0cmlnZ2VycyBhIENEIGN5Y2xlIG9uIG9wZW4gdGhhdCBjb25mbGljdHMgd2l0aCBsb2FkaW5nIHN0YXRlIGNoYW5nZSlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZERhdGEoKSwgMCk7XG4gIH1cblxuICBvbkRpYWxvZ0hpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG93TG9va3VwRGlhbG9nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFnZSA9IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cztcbiAgICBpZiAobmV3UGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZSAmJiB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBuZXdQYWdlO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkPy5sb29rdXBTZXJ2aWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBcbiAgICBjb25zdCBsaXN0UGFyYW1zOiBhbnkgPSB7IFxuICAgICAgcGFnZTogdGhpcy5jdXJyZW50UGFnZSxcbiAgICAgIHNpemU6IHRoaXMucGFnZVNpemVcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZmllbGQubG9va3VwU29ydCkge1xuICAgICAgbGlzdFBhcmFtcy5zb3J0ID0gdGhpcy5maWVsZC5sb29rdXBTb3J0O1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5zZWFyY2hUZXJtLnRyaW0oKSkge1xuICAgICAgY29uc3QgdGVybSA9IHRoaXMuc2VhcmNoVGVybS50cmltKCk7XG4gICAgICBjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgY29uc3QgaXNOdW1lcmljVGVybSA9ICFpc05hTihOdW1iZXIodGVybSkpICYmIHRlcm0gIT09ICcnO1xuICAgICAgXG4gICAgICB0aGlzLnNlYXJjaEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBjb2x1bW4/LnR5cGUgfHwgJ3RleHQnO1xuICAgICAgICBcbiAgICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBpZiAoaXNOdW1lcmljVGVybSkge1xuICAgICAgICAgICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKGAke2ZpZWxkfSBlcSAke3Rlcm19YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHVwcGVyVGVybSA9IHRlcm0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBmaWx0ZXJDb25kaXRpb25zLnB1c2goYFVQUEVSKCR7ZmllbGR9KSBsaWtlICclJHt1cHBlclRlcm19JSdgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmIChmaWx0ZXJDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGlzdFBhcmFtcy5maWx0ZXJRdWVyeSA9IGZpbHRlckNvbmRpdGlvbnMuam9pbignIG9yICcpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzKSB7XG4gICAgICBsZXQgZXh0cmFGaWx0ZXIgPSAnJztcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGV4dHJhRmlsdGVyID0gdGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzKHRoaXMuZm9ybUdyb3VwPy52YWx1ZSB8fCB7fSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHRyYUZpbHRlciA9IHRoaXMuZmllbGQubG9va3VwRmlsdGVycztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGV4dHJhRmlsdGVyKSB7XG4gICAgICAgIGlmIChsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5KSB7XG4gICAgICAgICAgbGlzdFBhcmFtcy5maWx0ZXJRdWVyeSA9IGAoJHtsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5fSkgYW5kICgke2V4dHJhRmlsdGVyfSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpc3RQYXJhbXMuZmlsdGVyUXVlcnkgPSBleHRyYUZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmZpZWxkLmxvb2t1cFNlcnZpY2UubGlzdChsaXN0UGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuY29udGVudHMgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2UudG90YWxFbGVtZW50cyB8fCAwO1xuICAgICAgICBcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW0oKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFww7NzIGNhcnJlZ2FyIG9zIGRhZG9zIGRhIGdyaWQsIHNlIHRlbW9zIHVtIHZhbG9yIHNlbGVjaW9uYWRvIG1hcyBzZW0gZGlzcGxheVZhbHVlLFxuICAgICAgICAvLyB0ZW50YXIgZW5jb250cmFyIG8gaXRlbSBub3MgZGFkb3MgY2FycmVnYWRvc1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiAhdGhpcy5kaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5maWx0ZXJlZERhdGEuZmluZChpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5mb3JtYXREaXNwbGF5VmFsdWUoaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKF9lcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbXTtcbiAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSAwO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRJdGVtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyB2YWx1ZSBjYW4gYmUgYSBmdWxsIG9iamVjdCBvciBqdXN0IGFuIElEXG4gICAgY29uc3QgdmFsdWVJZCA9IHR5cGVvZiB0aGlzLnZhbHVlID09PSAnb2JqZWN0JyA/IHRoaXMudmFsdWVbdGhpcy52YWx1ZUZpZWxkXSA6IHRoaXMudmFsdWU7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQoaSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT09IHZhbHVlSWQpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIEl0ZW0gbm90IGluIGN1cnJlbnQgcGFnZSBidXQgd2UgaGF2ZSB0aGUgZnVsbCBvYmplY3QgZnJvbSBhdXRvY29tcGxldGVcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd0xvb2t1cERpYWxvZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBjbGVhclNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBzZWxlY3RJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIC8vIEFsd2F5cyBzZXQgdGhlIGZ1bGwgb2JqZWN0LCBub3QganVzdCB0aGUgSURcbiAgICB0aGlzLnNldFZhbHVlKGl0ZW0pO1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5mb3JtYXREaXNwbGF5VmFsdWUoaXRlbSk7XG4gICAgdGhpcy5zaG93TG9va3VwRGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICBvblJvd1NlbGVjdChldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RJdGVtKGV2ZW50LmRhdGEpO1xuICB9XG5cbiAgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XG4gICAgdGhpcy5hdXRvY29tcGxldGVUZXh0ID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0RmllbGRWYWx1ZShpdGVtOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBmaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCBrZXkpID0+IG9iaj8uW2tleV0sIGl0ZW0pIHx8ICcnO1xuICB9XG59XG4iXX0=
|
|
773
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZC1sb29rdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2ZpZWxkcy9keW5hbWljLWZpZWxkLWxvb2t1cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0Is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ZUFBZSwwSUFDZixZQUFZLG02QkFDWixXQUFXLHFvRUFDWCxhQUFhLHFYQUNiLGtCQUFrQiwwQkFDbEIsYUFBYSxrREFDYiw0QkFBNEIseUdBQzVCLHFCQUFxQjs7NEZBdVVaLDJCQUEyQjtrQkF0VnZDLFNBQVM7K0JBQ0UsMEJBQTBCLGNBQ3hCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLDRCQUE0Qjt3QkFDNUIscUJBQXFCO3FCQUN0QixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBLVDt1RkE0SlEsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IElucHV0VGV4dE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXR0ZXh0JztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IER5bmFtaWNGb3JtRmllbGRDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvZHluYW1pYy1mb3JtLm1vZGVscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25IZWxwZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy90cmFuc2xhdGlvbi5oZWxwZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRXcmFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi9keW5hbWljLWZpZWxkLXdyYXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IExvb2t1cENvbHVtbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9lbnRpdHktbGlzdC5jb25maWcnO1xuaW1wb3J0IHsgVGFibGVMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy90YWJsZS1sb2FkaW5nL3RhYmxlLWxvYWRpbmcuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2lhLWR5bmFtaWMtZmllbGQtbG9va3VwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBJbnB1dFRleHRNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIFRhYmxlTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgT3ZlcmxheVBhbmVsTW9kdWxlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgRHluYW1pY0ZpZWxkV3JhcHBlckNvbXBvbmVudCxcbiAgICBUYWJsZUxvYWRpbmdEaXJlY3RpdmVcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c2lhLWR5bmFtaWMtZmllbGQtd3JhcHBlciBbZmllbGRdPVwiZmllbGRcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVdPVwibW9kZVwiPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImxvb2t1cC1maWVsZFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBpc0ZpZWxkRGlzYWJsZWQoKX1cIj5cbiAgICAgICAgPCEtLSBIaWRkZW4gaW5wdXQgcGFyYSBvIGZvcm1Db250cm9sIC0tPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuZmllbGRcIiAvPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvb2t1cC1pbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDwhLS0gQXV0b2NvbXBsZXRlIG1vZGU6IGVkaXRhYmxlIGlucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgKm5nSWY9XCJpc0F1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAjYXV0b2NvbXBsZXRlSW5wdXRcbiAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgIFt2YWx1ZV09XCJhdXRvY29tcGxldGVUZXh0XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRQbGFjZWhvbGRlcigpXCJcbiAgICAgICAgICAgIFtjbGFzcy5wLWludmFsaWRdPVwiaXNGaWVsZEludmFsaWQoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaWVsZERpc2FibGVkKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtZGlzcGxheVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25BdXRvY29tcGxldGVJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbkF1dG9jb21wbGV0ZUZvY3VzKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25BdXRvY29tcGxldGVCbHVyKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPCEtLSBTdGFuZGFyZCBtb2RlOiByZWFkb25seSBpbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzQXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgIFt2YWx1ZV09XCJkaXNwbGF5VmFsdWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyKClcIlxuICAgICAgICAgICAgW2NsYXNzLnAtaW52YWxpZF09XCJpc0ZpZWxkSW52YWxpZCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpZWxkRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgY2xhc3M9XCJsb29rdXAtZGlzcGxheVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3Blbkxvb2t1cCgpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDwhLS0gQXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zIGRyb3Bkb3duIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvY29tcGxldGUtc3VnZ2VzdGlvbnNcIiAqbmdJZj1cInNob3dTdWdnZXN0aW9ucyAmJiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic3VnZ2VzdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgICAobW91c2Vkb3duKT1cInNlbGVjdFN1Z2dlc3Rpb24oaXRlbSlcIj5cbiAgICAgICAgICAgICAge3sgZm9ybWF0RGlzcGxheVZhbHVlKGl0ZW0pIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zXCIgKm5nSWY9XCJzaG93U3VnZ2VzdGlvbnMgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAwICYmIGF1dG9jb21wbGV0ZUxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWdnZXN0aW9uLWl0ZW0gc3VnZ2VzdGlvbi1sb2FkaW5nXCI+QnVzY2FuZG8uLi48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9va3VwLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJjbGVhclZhbHVlKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaWVsZERpc2FibGVkKClcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIkxpbXBhclwiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktc2VhcmNoXCJcbiAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9wZW5Mb29rdXAoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0ZpZWxkRGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgIHBUb29sdGlwPVwiQnVzY2FyXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIExvb2t1cCBEaWFsb2cgLS0+XG4gICAgICA8cC1kaWFsb2dcbiAgICAgICAgWyh2aXNpYmxlKV09XCJzaG93TG9va3VwRGlhbG9nXCJcbiAgICAgICAgW21vZGFsXT1cInRydWVcIlxuICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzgwMHB4JywgbWF4SGVpZ2h0OiAnODB2aCcgfVwiXG4gICAgICAgIFtjb250ZW50U3R5bGVdPVwieyBtYXhIZWlnaHQ6ICdjYWxjKDgwdmggLSAxMjBweCknLCBvdmVyZmxvdzogJ2F1dG8nIH1cIlxuICAgICAgICBbZHJhZ2dhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgW3Jlc2l6YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgW2hlYWRlcl09XCInU2VsZWNpb25hciAnICsgKGZpZWxkLmxhYmVsIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAob25IaWRlKT1cIm9uRGlhbG9nSGlkZSgpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvb2t1cC1kaWFsb2ctY29udGVudFwiPlxuICAgICAgICAgIDwhLS0gU2VhcmNoIElucHV0IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidCdXNjYXIgJyArIChmaWVsZC5sYWJlbCB8IHRyYW5zbGF0ZSkudG9Mb3dlckNhc2UoKSArICcuLi4nXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25TZWFyY2goKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0LWZ1bGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYnV0dG9ucy1pbnNpZGVcIj5cbiAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJjbGVhclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1idXR0b24tY2xlYXJcIlxuICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiTGltcGFyIGJ1c2NhXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uU2VhcmNoKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWJ1dHRvbi1zZWFyY2hcIlxuICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiQnVzY2FyXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEYXRhIFRhYmxlIC0tPlxuICAgICAgICAgIDxwLXRhYmxlXG4gICAgICAgICAgICBbdmFsdWVdPVwiZmlsdGVyZWREYXRhXCJcbiAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcm93c109XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgICAgICAgICBbbGF6eV09XCJ0cnVlXCJcbiAgICAgICAgICAgIChvbkxhenlMb2FkKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIiBzaWFUYWJsZUxvYWRpbmdcbiAgICAgICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiTW9zdHJhbmRvIHtmaXJzdH0gYSB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICAgICAgICBbcm93SG92ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkIGxvb2t1cC10YWJsZVwiXG4gICAgICAgICAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtXCJcbiAgICAgICAgICAgIChvblJvd1NlbGVjdCk9XCJvblJvd1NlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU9XCJzaW5nbGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCI+XG4gICAgICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDx0ciBbcFNlbGVjdGFibGVSb3ddPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldEZpZWxkVmFsdWUoaXRlbSwgY29sLmZpZWxkKSB9fVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aFwiIGNsYXNzPVwiZW1wdHktbWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8cD5OZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbzwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlRlbnRlIGFqdXN0YXIgb3MgdGVybW9zIGRlIGJ1c2NhPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC10YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3AtZGlhbG9nPlxuICAgIDwvc2lhLWR5bmFtaWMtZmllbGQtd3JhcHBlcj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIC5sb29rdXAtZmllbGQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLmxvb2t1cC1pbnB1dC1ncm91cCB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIFxuICAgICAgLmxvb2t1cC1kaXNwbGF5IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgaGVpZ2h0OiAyLjg1N3JlbTtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbSA0cmVtIDAuNzVyZW0gMC43NXJlbTtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmxvb2t1cC1idXR0b25zIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogNHB4O1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDJweDtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgICB9XG5cbiAgICAgIDo6bmctZGVlcCAucC1idXR0b24ge1xuICAgICAgICB3aWR0aDogMnJlbSAhaW1wb3J0YW50O1xuICAgICAgICBoZWlnaHQ6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgbWluLXdpZHRoOiAycmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDJyZW0gIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyICFpbXBvcnRhbnQ7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDtcbiAgICAgICAgXG4gICAgICAgIC5wLWJ1dHRvbi1pY29uIHtcbiAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5wLWJ1dHRvbi1sYWJlbCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXAtc3VyZmFjZS0wLCAjZmZmKTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcC1zdXJmYWNlLTMwMCwgI2QxZDVkYik7XG4gICAgICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA2cHggNnB4O1xuICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblxuICAgICAgICAuc3VnZ2VzdGlvbi1pdGVtIHtcbiAgICAgICAgICBwYWRkaW5nOiAwLjYyNXJlbSAwLjc1cmVtO1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICAgIGNvbG9yOiB2YXIoLS1wLXRleHQtY29sb3IsICMzMzMpO1xuICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7XG5cbiAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXAtc3VyZmFjZS0xMDAsICNmM2Y0ZjYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICYuc3VnZ2VzdGlvbi1sb2FkaW5nIHtcbiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1wLXRleHQtbXV0ZWQtY29sb3IsICM5OTkpO1xuICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5sb29rdXAtZGlhbG9nLWNvbnRlbnQge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAuc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgIC5zZWFyY2gtaW5wdXQtZnVsbCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogNS41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaC1idXR0b25zLWluc2lkZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZ2FwOiAycHg7XG4gICAgICAgICAgXG4gICAgICAgICAgOjpuZy1kZWVwIC5wLWJ1dHRvbiB7XG4gICAgICAgICAgICB3aWR0aDogMi41cmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBoZWlnaHQ6IDIuNXJlbSAhaW1wb3J0YW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAubG9va3VwLXRhYmxlIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgXG4gICAgICAgIC5lbXB0eS1zdGF0ZSB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmc6IDMycHg7XG4gICAgICAgICAgY29sb3I6IHZhcigtLXAtdGV4dC1jb2xvci1zZWNvbmRhcnkpO1xuXG4gICAgICAgICAgaSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDQ4cHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcCB7XG4gICAgICAgICAgICBtYXJnaW46IDhweCAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNtYWxsIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGaWVsZExvb2t1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgZmllbGQhOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBmb3JtITogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIG1vZGU6ICdmb3JtJyB8ICdmaWx0ZXInID0gJ2Zvcm0nO1xuXG4gIGRpc3BsYXlWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHNob3dMb29rdXBEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWFyY2hUZXJtOiBzdHJpbmcgPSAnJztcbiAgXG4gIGRhdGE6IGFueVtdID0gW107XG4gIGZpbHRlcmVkRGF0YTogYW55W10gPSBbXTtcbiAgdG90YWxSZWNvcmRzOiBudW1iZXIgPSAwO1xuICBjdXJyZW50UGFnZTogbnVtYmVyID0gMDtcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBzZWxlY3RlZEl0ZW06IGFueSA9IG51bGw7XG4gIFxuICBjb2x1bW5zOiBMb29rdXBDb2x1bW5bXSA9IFtdO1xuICBkaXNwbGF5RmllbGQ6IHN0cmluZyA9ICduYW1lJztcbiAgdmFsdWVGaWVsZDogc3RyaW5nID0gJ2lkJztcbiAgc2VhcmNoRmllbGRzOiBzdHJpbmdbXSA9IFsnbmFtZSddO1xuXG4gIC8vIEF1dG9jb21wbGV0ZSBzdGF0ZVxuICBhdXRvY29tcGxldGVUZXh0OiBzdHJpbmcgPSAnJztcbiAgc3VnZ2VzdGlvbnM6IGFueVtdID0gW107XG4gIHNob3dTdWdnZXN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuICBhdXRvY29tcGxldGVMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBhdXRvY29tcGxldGVTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IGlzQXV0b2NvbXBsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkPy5sb29rdXBBdXRvY29tcGxldGUgPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBtaW5MZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZD8ubG9va3VwQXV0b2NvbXBsZXRlTWluTGVuZ3RoID8/IDI7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dXBMb29rdXBDb25maWcoKTtcbiAgICB0aGlzLndhdGNoVmFsdWVDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZXR1cEF1dG9jb21wbGV0ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5hdXRvY29tcGxldGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwQXV0b2NvbXBsZXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0F1dG9jb21wbGV0ZSkgcmV0dXJuO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU3ViID0gdGhpcy5hdXRvY29tcGxldGVTdWJqZWN0LnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApLnN1YnNjcmliZSh0ZXJtID0+IHtcbiAgICAgIGlmICh0ZXJtLmxlbmd0aCA+PSB0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgICB0aGlzLnNlYXJjaFN1Z2dlc3Rpb25zKHRlcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25BdXRvY29tcGxldGVJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5hdXRvY29tcGxldGVUZXh0ID0gdmFsdWU7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmF1dG9jb21wbGV0ZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBvbkF1dG9jb21wbGV0ZUZvY3VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVRleHQubGVuZ3RoID49IHRoaXMubWluTGVuZ3RoICYmIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uQXV0b2NvbXBsZXRlQmx1cigpOiB2b2lkIHtcbiAgICAvLyBEZWxheSB0byBhbGxvdyBjbGljayBvbiBzdWdnZXN0aW9uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuc2hvd1N1Z2dlc3Rpb25zID0gZmFsc2U7IH0sIDIwMCk7XG4gIH1cblxuICBzZWxlY3RTdWdnZXN0aW9uKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmFsdWUoaXRlbSk7XG4gICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmZvcm1hdERpc3BsYXlWYWx1ZShpdGVtKTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVRleHQgPSB0aGlzLmRpc3BsYXlWYWx1ZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoU3VnZ2VzdGlvbnModGVybTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkPy5sb29rdXBTZXJ2aWNlKSByZXR1cm47XG4gICAgdGhpcy5hdXRvY29tcGxldGVMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IHRydWU7XG5cbiAgICBjb25zdCBsaXN0UGFyYW1zOiBhbnkgPSB7IHBhZ2U6IDAsIHNpemU6IDEwIH07XG5cbiAgICBpZiAodGhpcy5maWVsZC5sb29rdXBTb3J0KSB7XG4gICAgICBsaXN0UGFyYW1zLnNvcnQgPSB0aGlzLmZpZWxkLmxvb2t1cFNvcnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyQ29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBpc051bWVyaWNUZXJtID0gIWlzTmFOKE51bWJlcih0ZXJtKSkgJiYgdGVybSAhPT0gJyc7XG5cbiAgICB0aGlzLnNlYXJjaEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuZmllbGQgPT09IGZpZWxkKTtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGNvbHVtbj8udHlwZSB8fCAndGV4dCc7XG5cbiAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChpc051bWVyaWNUZXJtKSB7XG4gICAgICAgICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKGAke2ZpZWxkfSBlcSAke3Rlcm19YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHVwcGVyVGVybSA9IHRlcm0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKGBjb250YWluaW5nKFVQUEVSKCR7ZmllbGR9KSwgJyR7dXBwZXJUZXJtfScpYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZmlsdGVyQ29uZGl0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5ID0gZmlsdGVyQ29uZGl0aW9ucy5qb2luKCcgb3IgJyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgbG9va3VwRmlsdGVyc1xuICAgIGlmICh0aGlzLmZpZWxkLmxvb2t1cEZpbHRlcnMpIHtcbiAgICAgIGNvbnN0IGV4dHJhID0gdHlwZW9mIHRoaXMuZmllbGQubG9va3VwRmlsdGVycyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHRoaXMuZmllbGQubG9va3VwRmlsdGVycyh0aGlzLmZvcm1Hcm91cD8udmFsdWUgfHwge30pXG4gICAgICAgIDogdGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzO1xuICAgICAgaWYgKGV4dHJhKSB7XG4gICAgICAgIGxpc3RQYXJhbXMuZmlsdGVyUXVlcnkgPSBsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5XG4gICAgICAgICAgPyBgKCR7bGlzdFBhcmFtcy5maWx0ZXJRdWVyeX0pIGFuZCAoJHtleHRyYX0pYFxuICAgICAgICAgIDogZXh0cmE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5maWVsZC5sb29rdXBTZXJ2aWNlLmxpc3QobGlzdFBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gcmVzLmNvbnRlbnRzIHx8IFtdO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXRjaFZhbHVlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgpO1xuICAgIGlmIChjb250cm9sKSB7XG4gICAgICAvLyBDYXJyZWdhciB2YWxvciBpbmljaWFsXG4gICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLmhhbmRsZVZhbHVlRGlzcGxheShjb250cm9sLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gT2JzZXJ2YXIgbXVkYW7Dp2FzXG4gICAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZURpc3BsYXkodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPYnTDqW0gbyBGb3JtQ29udHJvbCwgbGlkYW5kbyBjb20gY2FtcG9zIGFuaW5oYWRvcyAoY29tIHBvbnRvIG5vIG5vbWUpXG4gICAqL1xuICBwcml2YXRlIGdldEZvcm1Db250cm9sKCkge1xuICAgIGlmICghdGhpcy5maWVsZD8uZmllbGQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEFjZXNzYSBkaXJldGFtZW50ZSB2aWEgY29udHJvbHNbXSBwb2lzIGZvcm0uZ2V0KCkgbsOjbyBmdW5jaW9uYSBjb20gY2FtcG9zIHF1ZSB0w6ptIHBvbnRvXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLmZpZWxkLmZpZWxkXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woKTtcbiAgICByZXR1cm4gY29udHJvbD8udmFsdWU7XG4gIH1cblxuICBnZXQgY3VycmVudFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbCgpO1xuICAgIGNvbnRyb2w/LnNldFZhbHVlKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBMb29rdXBDb25maWcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmllbGQpIHtcbiAgICAgIHRoaXMuZGlzcGxheUZpZWxkID0gdGhpcy5maWVsZC5sb29rdXBEaXNwbGF5RmllbGQgfHwgJ25hbWUnO1xuICAgICAgdGhpcy52YWx1ZUZpZWxkID0gdGhpcy5maWVsZC5sb29rdXBWYWx1ZUZpZWxkIHx8ICdpZCc7XG4gICAgICB0aGlzLnNlYXJjaEZpZWxkcyA9IHRoaXMuZmllbGQubG9va3VwU2VhcmNoRmllbGRzIHx8IFsnbmFtZSddO1xuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5maWVsZC5sb29rdXBDb2x1bW5zIHx8IFtcbiAgICAgICAgeyBmaWVsZDogdGhpcy5kaXNwbGF5RmllbGQsIGhlYWRlcjogJ05vbWUnLCB3aWR0aDogJzEwMCUnIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZURpc3BsYXkodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVGV4dCA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmZvcm1hdERpc3BsYXlWYWx1ZSh2YWx1ZSk7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVRleHQgPSB0aGlzLmRpc3BsYXlWYWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSAnJztcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVGV4dCA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdERpc3BsYXlWYWx1ZShpdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xuICAgIFxuICAgIGlmICh0aGlzLmZpZWxkPy5sb29rdXBEaXNwbGF5RmllbGRzICYmIHRoaXMuZmllbGQubG9va3VwRGlzcGxheUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgLm1hcChmaWVsZE5hbWUgPT4gdGhpcy5nZXRGaWVsZFZhbHVlKGl0ZW0sIGZpZWxkTmFtZSkpXG4gICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJycpO1xuICAgICAgXG4gICAgICByZXR1cm4gdmFsdWVzLmpvaW4oJyAtICcpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFZhbHVlKGl0ZW0sIHRoaXMuZGlzcGxheUZpZWxkKSB8fCAnJztcbiAgfVxuXG4gIGlzRmllbGRJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCk7XG4gICAgcmV0dXJuICEhKGNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIChjb250cm9sLmRpcnR5IHx8IGNvbnRyb2wudG91Y2hlZCkpO1xuICB9XG5cbiAgaXNGaWVsZERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCk7XG4gICAgcmV0dXJuIGNvbnRyb2w/LmRpc2FibGVkIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVHJhbnNsYXRpb25IZWxwZXIuZ2V0RmlsdGVyUGxhY2Vob2xkZXIoXG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZSxcbiAgICAgIHRoaXMubW9kZSxcbiAgICAgIHRoaXMuZmllbGQubGFiZWwsXG4gICAgICB0aGlzLmZpZWxkLnBsYWNlaG9sZGVyXG4gICAgKTtcbiAgfVxuXG4gIG9wZW5Mb29rdXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNGaWVsZERpc2FibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW0oKTtcbiAgICBcbiAgICB0aGlzLnNob3dMb29rdXBEaWFsb2cgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgIC8vIERlbGF5IGxvYWREYXRhIHRvIG5leHQgbWFjcm90YXNrIHRvIGF2b2lkIE5HMDEwMFxuICAgIC8vIChwLWRpYWxvZyB0cmlnZ2VycyBhIENEIGN5Y2xlIG9uIG9wZW4gdGhhdCBjb25mbGljdHMgd2l0aCBsb2FkaW5nIHN0YXRlIGNoYW5nZSlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZERhdGEoKSwgMCk7XG4gIH1cblxuICBvbkRpYWxvZ0hpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG93TG9va3VwRGlhbG9nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UGFnZSA9IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cztcbiAgICBpZiAobmV3UGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZSAmJiB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBuZXdQYWdlO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZpZWxkPy5sb29rdXBTZXJ2aWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBcbiAgICBjb25zdCBsaXN0UGFyYW1zOiBhbnkgPSB7IFxuICAgICAgcGFnZTogdGhpcy5jdXJyZW50UGFnZSxcbiAgICAgIHNpemU6IHRoaXMucGFnZVNpemVcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZmllbGQubG9va3VwU29ydCkge1xuICAgICAgbGlzdFBhcmFtcy5zb3J0ID0gdGhpcy5maWVsZC5sb29rdXBTb3J0O1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5zZWFyY2hUZXJtLnRyaW0oKSkge1xuICAgICAgY29uc3QgdGVybSA9IHRoaXMuc2VhcmNoVGVybS50cmltKCk7XG4gICAgICBjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgY29uc3QgaXNOdW1lcmljVGVybSA9ICFpc05hTihOdW1iZXIodGVybSkpICYmIHRlcm0gIT09ICcnO1xuICAgICAgXG4gICAgICB0aGlzLnNlYXJjaEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBjb2x1bW4/LnR5cGUgfHwgJ3RleHQnO1xuICAgICAgICBcbiAgICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBpZiAoaXNOdW1lcmljVGVybSkge1xuICAgICAgICAgICAgZmlsdGVyQ29uZGl0aW9ucy5wdXNoKGAke2ZpZWxkfSBlcSAke3Rlcm19YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHVwcGVyVGVybSA9IHRlcm0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBmaWx0ZXJDb25kaXRpb25zLnB1c2goYGNvbnRhaW5pbmcoVVBQRVIoJHtmaWVsZH0pLCAnJHt1cHBlclRlcm19JylgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmIChmaWx0ZXJDb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGlzdFBhcmFtcy5maWx0ZXJRdWVyeSA9IGZpbHRlckNvbmRpdGlvbnMuam9pbignIG9yICcpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzKSB7XG4gICAgICBsZXQgZXh0cmFGaWx0ZXIgPSAnJztcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGV4dHJhRmlsdGVyID0gdGhpcy5maWVsZC5sb29rdXBGaWx0ZXJzKHRoaXMuZm9ybUdyb3VwPy52YWx1ZSB8fCB7fSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHRyYUZpbHRlciA9IHRoaXMuZmllbGQubG9va3VwRmlsdGVycztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKGV4dHJhRmlsdGVyKSB7XG4gICAgICAgIGlmIChsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5KSB7XG4gICAgICAgICAgbGlzdFBhcmFtcy5maWx0ZXJRdWVyeSA9IGAoJHtsaXN0UGFyYW1zLmZpbHRlclF1ZXJ5fSkgYW5kICgke2V4dHJhRmlsdGVyfSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpc3RQYXJhbXMuZmlsdGVyUXVlcnkgPSBleHRyYUZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmZpZWxkLmxvb2t1cFNlcnZpY2UubGlzdChsaXN0UGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID0gcmVzcG9uc2UuY29udGVudHMgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2UudG90YWxFbGVtZW50cyB8fCAwO1xuICAgICAgICBcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZEl0ZW0oKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFww7NzIGNhcnJlZ2FyIG9zIGRhZG9zIGRhIGdyaWQsIHNlIHRlbW9zIHVtIHZhbG9yIHNlbGVjaW9uYWRvIG1hcyBzZW0gZGlzcGxheVZhbHVlLFxuICAgICAgICAvLyB0ZW50YXIgZW5jb250cmFyIG8gaXRlbSBub3MgZGFkb3MgY2FycmVnYWRvc1xuICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiAhdGhpcy5kaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5maWx0ZXJlZERhdGEuZmluZChpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy52YWx1ZSk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5mb3JtYXREaXNwbGF5VmFsdWUoaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKF9lcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBbXTtcbiAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSAwO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRJdGVtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyB2YWx1ZSBjYW4gYmUgYSBmdWxsIG9iamVjdCBvciBqdXN0IGFuIElEXG4gICAgY29uc3QgdmFsdWVJZCA9IHR5cGVvZiB0aGlzLnZhbHVlID09PSAnb2JqZWN0JyA/IHRoaXMudmFsdWVbdGhpcy52YWx1ZUZpZWxkXSA6IHRoaXMudmFsdWU7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQoaSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT09IHZhbHVlSWQpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIEl0ZW0gbm90IGluIGN1cnJlbnQgcGFnZSBidXQgd2UgaGF2ZSB0aGUgZnVsbCBvYmplY3QgZnJvbSBhdXRvY29tcGxldGVcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBvblNlYXJjaCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd0xvb2t1cERpYWxvZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBjbGVhclNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gIH1cblxuICBzZWxlY3RJdGVtKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIC8vIENsb3NlIGRpYWxvZyBmaXJzdCwgdGhlbiBzZXQgdmFsdWUgaW4gbmV4dCB0aWNrIHRvIHByZXZlbnRcbiAgICAvLyBjbGljayBldmVudCBmcm9tIHByb3BhZ2F0aW5nIHRvIGVsZW1lbnRzIGJlaGluZCB0aGUgZGlhbG9nXG4gICAgdGhpcy5zaG93TG9va3VwRGlhbG9nID0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldFZhbHVlKGl0ZW0pO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLmZvcm1hdERpc3BsYXlWYWx1ZShpdGVtKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uUm93U2VsZWN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBQcmV2ZW50IHRoZSBjbGljayBldmVudCBmcm9tIHByb3BhZ2F0aW5nIGFmdGVyIHRoZSBkaWFsb2cgY2xvc2VzLFxuICAgIC8vIHdoaWNoIGNvdWxkIHRyaWdnZXIgYnV0dG9ucyBiZWhpbmQgdGhlIGRpYWxvZyAoZS5nLiBpbmxpbmUtZWRpdCBzYXZlIGJ1dHRvbilcbiAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50Lm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RJdGVtKGV2ZW50LmRhdGEpO1xuICB9XG5cbiAgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gJyc7XG4gICAgdGhpcy5hdXRvY29tcGxldGVUZXh0ID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0RmllbGRWYWx1ZShpdGVtOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBmaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCBrZXkpID0+IG9iaj8uW2tleV0sIGl0ZW0pIHx8ICcnO1xuICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
3
|
import * as i1 from "./cookie.service";
|
|
5
4
|
export class AuthService {
|
|
@@ -7,155 +6,62 @@ export class AuthService {
|
|
|
7
6
|
TOKEN_COOKIE_NAME = 'com.senior.token';
|
|
8
7
|
API_URL_COOKIE_NAME = 'com.senior.base.url';
|
|
9
8
|
API_PATH_SUFFIX = '/t/senior.com.br/bridge/1.0/rest';
|
|
10
|
-
currentUserSubject = new BehaviorSubject(null);
|
|
11
|
-
currentUser$ = this.currentUserSubject.asObservable();
|
|
12
9
|
constructor(cookieService) {
|
|
13
10
|
this.cookieService = cookieService;
|
|
14
|
-
this.loadUserFromCookie();
|
|
15
11
|
}
|
|
16
12
|
/**
|
|
17
|
-
*
|
|
13
|
+
* Parse token from cookie. Always reads fresh from cookie, no cache.
|
|
18
14
|
*/
|
|
19
|
-
|
|
15
|
+
parseTokenFromCookie() {
|
|
20
16
|
const tokenString = this.cookieService.getCookie(this.TOKEN_COOKIE_NAME);
|
|
21
|
-
if (tokenString)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
console.error('[AuthService] Error parsing token from cookie:', error);
|
|
33
|
-
this.currentUserSubject.next(null);
|
|
34
|
-
}
|
|
17
|
+
if (!tokenString)
|
|
18
|
+
return null;
|
|
19
|
+
try {
|
|
20
|
+
const token = JSON.parse(tokenString);
|
|
21
|
+
return token?.access_token ? token : null;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
35
25
|
}
|
|
36
26
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Get current user token
|
|
39
|
-
*/
|
|
40
27
|
getCurrentUser() {
|
|
41
|
-
return this.
|
|
28
|
+
return this.parseTokenFromCookie();
|
|
42
29
|
}
|
|
43
|
-
/**
|
|
44
|
-
* Get access token
|
|
45
|
-
*/
|
|
46
30
|
getAccessToken() {
|
|
47
|
-
|
|
48
|
-
return user?.access_token || null;
|
|
31
|
+
return this.parseTokenFromCookie()?.access_token || null;
|
|
49
32
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Get token type (e.g., "Bearer")
|
|
52
|
-
*/
|
|
53
33
|
getTokenType() {
|
|
54
|
-
|
|
55
|
-
return user?.token_type || 'Bearer';
|
|
34
|
+
return this.parseTokenFromCookie()?.token_type || 'Bearer';
|
|
56
35
|
}
|
|
57
|
-
/**
|
|
58
|
-
* Get refresh token
|
|
59
|
-
*/
|
|
60
36
|
getRefreshToken() {
|
|
61
|
-
|
|
62
|
-
return user?.refresh_token || null;
|
|
37
|
+
return this.parseTokenFromCookie()?.refresh_token || null;
|
|
63
38
|
}
|
|
64
|
-
/**
|
|
65
|
-
* Get API base URL from cookie
|
|
66
|
-
*/
|
|
67
39
|
getApiBaseUrl() {
|
|
68
40
|
const baseUrl = this.cookieService.getCookie(this.API_URL_COOKIE_NAME);
|
|
69
|
-
// In development, use proxy
|
|
70
41
|
if (!baseUrl) {
|
|
71
|
-
// Check if we're in development mode
|
|
72
42
|
const isDevelopment = !window.location.hostname.includes('senior.com.br');
|
|
73
|
-
|
|
74
|
-
return '/api';
|
|
75
|
-
}
|
|
76
|
-
return null;
|
|
43
|
+
return isDevelopment ? '/api' : null;
|
|
77
44
|
}
|
|
78
|
-
|
|
79
|
-
const cleanBaseUrl = baseUrl.replace(/\/$/, '');
|
|
80
|
-
// Combine with API path suffix
|
|
81
|
-
return `${cleanBaseUrl}${this.API_PATH_SUFFIX}`;
|
|
45
|
+
return `${baseUrl.replace(/\/$/, '')}${this.API_PATH_SUFFIX}`;
|
|
82
46
|
}
|
|
83
|
-
/**
|
|
84
|
-
* Check if user is authenticated
|
|
85
|
-
*/
|
|
86
47
|
isAuthenticated() {
|
|
87
|
-
const user = this.
|
|
88
|
-
return user !== null
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Check if token is valid (not expired)
|
|
92
|
-
*/
|
|
93
|
-
isTokenValid(token) {
|
|
94
|
-
if (!token || !token.access_token) {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
// Check if token is expired
|
|
98
|
-
const now = Math.floor(Date.now() / 1000);
|
|
99
|
-
const tokenExpiry = token.expires_in;
|
|
100
|
-
// If expires_in is a timestamp, compare directly
|
|
101
|
-
// If it's a duration, we'd need the token creation time
|
|
102
|
-
// For now, assume it's a timestamp
|
|
103
|
-
// If expires_in is very large (like a duration in seconds), skip expiry check
|
|
104
|
-
if (tokenExpiry > 1000000000) {
|
|
105
|
-
// Looks like a timestamp
|
|
106
|
-
return tokenExpiry > now;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
// Looks like a duration, assume token is valid
|
|
110
|
-
return true;
|
|
111
|
-
}
|
|
48
|
+
const user = this.parseTokenFromCookie();
|
|
49
|
+
return user !== null;
|
|
112
50
|
}
|
|
113
|
-
/**
|
|
114
|
-
* Check if refresh token is valid
|
|
115
|
-
*/
|
|
116
|
-
isRefreshTokenValid() {
|
|
117
|
-
const user = this.getCurrentUser();
|
|
118
|
-
if (!user || !user.refresh_token) {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
const now = Math.floor(Date.now() / 1000);
|
|
122
|
-
const refreshExpiry = user.refresh_expires_in;
|
|
123
|
-
return refreshExpiry > now;
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Get user locale
|
|
127
|
-
*/
|
|
128
51
|
getUserLocale() {
|
|
129
|
-
|
|
130
|
-
return user?.locale || 'pt-BR';
|
|
52
|
+
return this.parseTokenFromCookie()?.locale || 'pt-BR';
|
|
131
53
|
}
|
|
132
|
-
/**
|
|
133
|
-
* Get user full name
|
|
134
|
-
*/
|
|
135
54
|
getUserFullName() {
|
|
136
|
-
|
|
137
|
-
return user?.fullName || '';
|
|
55
|
+
return this.parseTokenFromCookie()?.fullName || '';
|
|
138
56
|
}
|
|
139
|
-
/**
|
|
140
|
-
* Get user email
|
|
141
|
-
*/
|
|
142
57
|
getUserEmail() {
|
|
143
|
-
|
|
144
|
-
return user?.email || '';
|
|
58
|
+
return this.parseTokenFromCookie()?.email || '';
|
|
145
59
|
}
|
|
146
|
-
/**
|
|
147
|
-
* Get tenant name
|
|
148
|
-
*/
|
|
149
60
|
getTenantName() {
|
|
150
|
-
|
|
151
|
-
return user?.tenantName || '';
|
|
61
|
+
return this.parseTokenFromCookie()?.tenantName || '';
|
|
152
62
|
}
|
|
153
|
-
/**
|
|
154
|
-
* Get username
|
|
155
|
-
*/
|
|
156
63
|
getUsername() {
|
|
157
|
-
|
|
158
|
-
return user?.username || '';
|
|
64
|
+
return this.parseTokenFromCookie()?.username || '';
|
|
159
65
|
}
|
|
160
66
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, deps: [{ token: i1.CookieService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
161
67
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthService, providedIn: 'root' });
|
|
@@ -166,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
166
72
|
providedIn: 'root'
|
|
167
73
|
}]
|
|
168
74
|
}], ctorParameters: () => [{ type: i1.CookieService }] });
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQW9CdkMsTUFBTSxPQUFPLFdBQVc7SUFRRjtJQVBILGlCQUFpQixHQUFHLGtCQUFrQixDQUFDO0lBQ3ZDLG1CQUFtQixHQUFHLHFCQUFxQixDQUFDO0lBQzVDLGVBQWUsR0FBRyxrQ0FBa0MsQ0FBQztJQUU5RCxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBbUIsSUFBSSxDQUFDLENBQUM7SUFDbEUsWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU3RCxZQUFvQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM5QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxrQkFBa0I7UUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFekUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQWMsQ0FBQztnQkFFbkQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsa0JBQWtCLENB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VUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi9jb29raWUuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclRva2VuIHtcbiAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gIGV4cGlyZXNfaW46IG51bWJlcjtcbiAgcmVmcmVzaF90b2tlbjogc3RyaW5nO1xuICB0b2tlbl90eXBlOiBzdHJpbmc7XG4gIHJlZnJlc2hfZXhwaXJlc19pbjogbnVtYmVyO1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBmdWxsTmFtZTogc3RyaW5nO1xuICB0ZW5hbnROYW1lOiBzdHJpbmc7XG4gIGxvY2FsZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBUT0tFTl9DT09LSUVfTkFNRSA9ICdjb20uc2VuaW9yLnRva2VuJztcbiAgcHJpdmF0ZSByZWFkb25seSBBUElfVVJMX0NPT0tJRV9OQU1FID0gJ2NvbS5zZW5pb3IuYmFzZS51cmwnO1xuICBwcml2YXRlIHJlYWRvbmx5IEFQSV9QQVRIX1NVRkZJWCA9ICcvdC9zZW5pb3IuY29tLmJyL2JyaWRnZS8xLjAvcmVzdCc7XG4gIFxuICBwcml2YXRlIGN1cnJlbnRVc2VyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXNlclRva2VuIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBjdXJyZW50VXNlciQgPSB0aGlzLmN1cnJlbnRVc2VyU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UpIHtcbiAgICB0aGlzLmxvYWRVc2VyRnJvbUNvb2tpZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdXNlciB0b2tlbiBmcm9tIGNvb2tpZVxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkVXNlckZyb21Db29raWUoKTogdm9pZCB7XG4gICAgY29uc3QgdG9rZW5TdHJpbmcgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0Q29va2llKHRoaXMuVE9LRU5fQ09PS0lFX05BTUUpO1xuICAgIFxuICAgIGlmICh0b2tlblN0cmluZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBKU09OLnBhcnNlKHRva2VuU3RyaW5nKSBhcyBVc2VyVG9rZW47XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5pc1Rva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VXNlclN1YmplY3QubmV4dCh0b2tlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VXNlclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0F1dGhTZXJ2aWNlXSBFcnJvciBwYXJzaW5nIHRva2VuIGZyb20gY29va2llOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlclN1YmplY3QubmV4dChudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgdXNlciB0b2tlblxuICAgKi9cbiAgZ2V0Q3VycmVudFVzZXIoKTogVXNlclRva2VuIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXJTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhY2Nlc3MgdG9rZW5cbiAgICovXG4gIGdldEFjY2Vzc1Rva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgcmV0dXJuIHVzZXI/LmFjY2Vzc190b2tlbiB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0b2tlbiB0eXBlIChlLmcuLCBcIkJlYXJlclwiKVxuICAgKi9cbiAgZ2V0VG9rZW5UeXBlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICByZXR1cm4gdXNlcj8udG9rZW5fdHlwZSB8fCAnQmVhcmVyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmVmcmVzaCB0b2tlblxuICAgKi9cbiAgZ2V0UmVmcmVzaFRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgcmV0dXJuIHVzZXI/LnJlZnJlc2hfdG9rZW4gfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgQVBJIGJhc2UgVVJMIGZyb20gY29va2llXG4gICAqL1xuICBnZXRBcGlCYXNlVXJsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0Q29va2llKHRoaXMuQVBJX1VSTF9DT09LSUVfTkFNRSk7XG4gICAgXG4gICAgLy8gSW4gZGV2ZWxvcG1lbnQsIHVzZSBwcm94eVxuICAgIGlmICghYmFzZVVybCkge1xuICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgaW4gZGV2ZWxvcG1lbnQgbW9kZVxuICAgICAgY29uc3QgaXNEZXZlbG9wbWVudCA9ICF3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUuaW5jbHVkZXMoJ3Nlbmlvci5jb20uYnInKTtcbiAgICAgIGlmIChpc0RldmVsb3BtZW50KSB7XG4gICAgICAgIHJldHVybiAnL2FwaSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGZyb20gYmFzZSBVUkxcbiAgICBjb25zdCBjbGVhbkJhc2VVcmwgPSBiYXNlVXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgXG4gICAgLy8gQ29tYmluZSB3aXRoIEFQSSBwYXRoIHN1ZmZpeFxuICAgIHJldHVybiBgJHtjbGVhbkJhc2VVcmx9JHt0aGlzLkFQSV9QQVRIX1NVRkZJWH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHVzZXIgaXMgYXV0aGVudGljYXRlZFxuICAgKi9cbiAgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgcmV0dXJuIHVzZXIgIT09IG51bGwgJiYgdGhpcy5pc1Rva2VuVmFsaWQodXNlcik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdG9rZW4gaXMgdmFsaWQgKG5vdCBleHBpcmVkKVxuICAgKi9cbiAgcHJpdmF0ZSBpc1Rva2VuVmFsaWQodG9rZW46IFVzZXJUb2tlbik6IGJvb2xlYW4ge1xuICAgIGlmICghdG9rZW4gfHwgIXRva2VuLmFjY2Vzc190b2tlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRva2VuIGlzIGV4cGlyZWRcbiAgICBjb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICBjb25zdCB0b2tlbkV4cGlyeSA9IHRva2VuLmV4cGlyZXNfaW47XG4gICAgXG4gICAgLy8gSWYgZXhwaXJlc19pbiBpcyBhIHRpbWVzdGFtcCwgY29tcGFyZSBkaXJlY3RseVxuICAgIC8vIElmIGl0J3MgYSBkdXJhdGlvbiwgd2UnZCBuZWVkIHRoZSB0b2tlbiBjcmVhdGlvbiB0aW1lXG4gICAgLy8gRm9yIG5vdywgYXNzdW1lIGl0J3MgYSB0aW1lc3RhbXBcbiAgICAvLyBJZiBleHBpcmVzX2luIGlzIHZlcnkgbGFyZ2UgKGxpa2UgYSBkdXJhdGlvbiBpbiBzZWNvbmRzKSwgc2tpcCBleHBpcnkgY2hlY2tcbiAgICBpZiAodG9rZW5FeHBpcnkgPiAxMDAwMDAwMDAwKSB7XG4gICAgICAvLyBMb29rcyBsaWtlIGEgdGltZXN0YW1wXG4gICAgICByZXR1cm4gdG9rZW5FeHBpcnkgPiBub3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExvb2tzIGxpa2UgYSBkdXJhdGlvbiwgYXNzdW1lIHRva2VuIGlzIHZhbGlkXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgcmVmcmVzaCB0b2tlbiBpcyB2YWxpZFxuICAgKi9cbiAgaXNSZWZyZXNoVG9rZW5WYWxpZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIGlmICghdXNlciB8fCAhdXNlci5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgY29uc3QgcmVmcmVzaEV4cGlyeSA9IHVzZXIucmVmcmVzaF9leHBpcmVzX2luO1xuICAgIFxuICAgIHJldHVybiByZWZyZXNoRXhwaXJ5ID4gbm93O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGxvY2FsZVxuICAgKi9cbiAgZ2V0VXNlckxvY2FsZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgcmV0dXJuIHVzZXI/LmxvY2FsZSB8fCAncHQtQlInO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGZ1bGwgbmFtZVxuICAgKi9cbiAgZ2V0VXNlckZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICByZXR1cm4gdXNlcj8uZnVsbE5hbWUgfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHVzZXIgZW1haWxcbiAgICovXG4gIGdldFVzZXJFbWFpbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgcmV0dXJuIHVzZXI/LmVtYWlsIHx8ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0ZW5hbnQgbmFtZVxuICAgKi9cbiAgZ2V0VGVuYW50TmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgcmV0dXJuIHVzZXI/LnRlbmFudE5hbWUgfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHVzZXJuYW1lXG4gICAqL1xuICBnZXRVc2VybmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgcmV0dXJuIHVzZXI/LnVzZXJuYW1lIHx8ICcnO1xuICB9XG59XG4iXX0=
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL3NlcnZpY2VzL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFvQjNDLE1BQU0sT0FBTyxXQUFXO0lBS0Y7SUFKSCxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQztJQUN2QyxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztJQUM1QyxlQUFlLEdBQUcsa0NBQWtDLENBQUM7SUFFdEUsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7SUFBRyxDQUFDO0lBRXBEOztPQUVHO0lBQ0ssb0JBQW9CO1FBQzFCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQWMsQ0FBQztZQUNuRCxPQUFPLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFlBQVksSUFBSSxJQUFJLENBQUM7SUFDM0QsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFVBQVUsSUFBSSxRQUFRLENBQUM7SUFDN0QsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMxRSxPQUFPLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVELGVBQWU7UUFDYixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN6QyxPQUFPLElBQUksS0FBSyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sSUFBSSxPQUFPLENBQUM7SUFDeEQsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDckQsQ0FBQzt3R0FyRVUsV0FBVzs0R0FBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi9jb29raWUuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclRva2VuIHtcbiAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gIGV4cGlyZXNfaW46IG51bWJlcjtcbiAgcmVmcmVzaF90b2tlbjogc3RyaW5nO1xuICB0b2tlbl90eXBlOiBzdHJpbmc7XG4gIHJlZnJlc2hfZXhwaXJlc19pbjogbnVtYmVyO1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBmdWxsTmFtZTogc3RyaW5nO1xuICB0ZW5hbnROYW1lOiBzdHJpbmc7XG4gIGxvY2FsZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBUT0tFTl9DT09LSUVfTkFNRSA9ICdjb20uc2VuaW9yLnRva2VuJztcbiAgcHJpdmF0ZSByZWFkb25seSBBUElfVVJMX0NPT0tJRV9OQU1FID0gJ2NvbS5zZW5pb3IuYmFzZS51cmwnO1xuICBwcml2YXRlIHJlYWRvbmx5IEFQSV9QQVRIX1NVRkZJWCA9ICcvdC9zZW5pb3IuY29tLmJyL2JyaWRnZS8xLjAvcmVzdCc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBQYXJzZSB0b2tlbiBmcm9tIGNvb2tpZS4gQWx3YXlzIHJlYWRzIGZyZXNoIGZyb20gY29va2llLCBubyBjYWNoZS5cbiAgICovXG4gIHByaXZhdGUgcGFyc2VUb2tlbkZyb21Db29raWUoKTogVXNlclRva2VuIHwgbnVsbCB7XG4gICAgY29uc3QgdG9rZW5TdHJpbmcgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0Q29va2llKHRoaXMuVE9LRU5fQ09PS0lFX05BTUUpO1xuICAgIGlmICghdG9rZW5TdHJpbmcpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IEpTT04ucGFyc2UodG9rZW5TdHJpbmcpIGFzIFVzZXJUb2tlbjtcbiAgICAgIHJldHVybiB0b2tlbj8uYWNjZXNzX3Rva2VuID8gdG9rZW4gOiBudWxsO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudFVzZXIoKTogVXNlclRva2VuIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VUb2tlbkZyb21Db29raWUoKTtcbiAgfVxuXG4gIGdldEFjY2Vzc1Rva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnBhcnNlVG9rZW5Gcm9tQ29va2llKCk/LmFjY2Vzc190b2tlbiB8fCBudWxsO1xuICB9XG5cbiAgZ2V0VG9rZW5UeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VUb2tlbkZyb21Db29raWUoKT8udG9rZW5fdHlwZSB8fCAnQmVhcmVyJztcbiAgfVxuXG4gIGdldFJlZnJlc2hUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRva2VuRnJvbUNvb2tpZSgpPy5yZWZyZXNoX3Rva2VuIHx8IG51bGw7XG4gIH1cblxuICBnZXRBcGlCYXNlVXJsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0Q29va2llKHRoaXMuQVBJX1VSTF9DT09LSUVfTkFNRSk7XG4gICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICBjb25zdCBpc0RldmVsb3BtZW50ID0gIXdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZS5pbmNsdWRlcygnc2VuaW9yLmNvbS5icicpO1xuICAgICAgcmV0dXJuIGlzRGV2ZWxvcG1lbnQgPyAnL2FwaScgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpfSR7dGhpcy5BUElfUEFUSF9TVUZGSVh9YDtcbiAgfVxuXG4gIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5wYXJzZVRva2VuRnJvbUNvb2tpZSgpO1xuICAgIHJldHVybiB1c2VyICE9PSBudWxsO1xuICB9XG5cbiAgZ2V0VXNlckxvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhcnNlVG9rZW5Gcm9tQ29va2llKCk/LmxvY2FsZSB8fCAncHQtQlInO1xuICB9XG5cbiAgZ2V0VXNlckZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VUb2tlbkZyb21Db29raWUoKT8uZnVsbE5hbWUgfHwgJyc7XG4gIH1cblxuICBnZXRVc2VyRW1haWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRva2VuRnJvbUNvb2tpZSgpPy5lbWFpbCB8fCAnJztcbiAgfVxuXG4gIGdldFRlbmFudE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRva2VuRnJvbUNvb2tpZSgpPy50ZW5hbnROYW1lIHx8ICcnO1xuICB9XG5cbiAgZ2V0VXNlcm5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZVRva2VuRnJvbUNvb2tpZSgpPy51c2VybmFtZSB8fCAnJztcbiAgfVxufVxuIl19
|