@rivet-health/design-system 5.0.2 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/input/single-select/single-select.component.mjs +4 -1
- package/esm2020/lib/visualization/legend-item/legend-item.component.mjs +9 -3
- package/esm2020/lib/visualization/stacked-row/stacked-row.component.mjs +70 -25
- package/esm2020/lib/visualization/time-series/time-series.component.mjs +3 -3
- package/fesm2015/rivet-health-design-system.mjs +82 -28
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +82 -28
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/input/single-select/single-select.component.d.ts +1 -0
- package/lib/visualization/legend-item/legend-item.component.d.ts +3 -1
- package/lib/visualization/stacked-row/stacked-row.component.d.ts +20 -12
- package/package.json +1 -1
|
@@ -43,6 +43,9 @@ export class SingleSelectComponent extends InputLabelComponent {
|
|
|
43
43
|
this.open = true;
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
+
close() {
|
|
47
|
+
this.open = false;
|
|
48
|
+
}
|
|
46
49
|
trackByHeader(i, group) {
|
|
47
50
|
return `${i}${group.header}`;
|
|
48
51
|
}
|
|
@@ -157,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
157
160
|
}
|
|
158
161
|
SingleSelectComponent.getFilterAsync = getFilterAsync;
|
|
159
162
|
})(SingleSelectComponent || (SingleSelectComponent = {}));
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9zaW5nbGUtc2VsZWN0L3NpbmdsZS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvc2luZ2xlLXNlbGVjdC9zaW5nbGUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxTQUFTLENBQUM7QUFDM0IsT0FBTyxFQUVMLFlBQVksRUFDWixJQUFJLEVBQ0osR0FBRyxFQUNILFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBUTNFLE1BQU0sT0FBTyxxQkFHWCxTQUFRLG1CQUFtQjtJQVQ3Qjs7UUFXRSxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBR2pCLG1CQUFjLEdBQWEsSUFBSSxDQUFDO1FBR2hDLHlCQUFvQixHQUErQztZQUNqRSxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7UUFHRixZQUFPLEdBQVksS0FBSyxDQUFDO1FBR3pCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHeEIscUJBQWdCLEdBQVcsc0JBQXNCLENBQUM7UUFTbEQsZ0JBQVcsR0FBVyxXQUFXLENBQUM7UUFHbEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUd6QixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRy9DLHlCQUFvQixH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LEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNO1NBQ3JELENBQUMsQ0FBQyxFQUNILFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQzFDLENBQUM7SUFDSixDQUFDO0lBekRlLG9DQUFjLGlCQXlEN0IsQ0FBQTtBQUNILENBQUMsRUE3SGdCLHFCQUFxQixLQUFyQixxQkFBcUIsUUE2SHJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBGdXNlIGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgZGVib3VuY2VUaW1lLFxuICBmcm9tLFxuICBtYXAsXG4gIHBhaXJ3aXNlLFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIaWdobGlnaHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi92aXN1YWxpemF0aW9uL2hpZ2hsaWdodC9oaWdobGlnaHQuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0TGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi9pbnB1dC1sYWJlbC9pbnB1dC1sYWJlbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtc2luZ2xlLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zaW5nbGUtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2luZ2xlLXNlbGVjdC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTaW5nbGVTZWxlY3RDb21wb25lbnQ8XG4gIFQgZXh0ZW5kcyBTaW5nbGVTZWxlY3RDb21wb25lbnQuT3B0aW9uR3JvdXA8VT4sXG4gIFUgZXh0ZW5kcyBTaW5nbGVTZWxlY3RDb21wb25lbnQuT3B0aW9uLFxuPiBleHRlbmRzIElucHV0TGFiZWxDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBncm91cHM6IFRbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGVkT3B0aW9uOiBVIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgZmlsdGVyYWJpbGl0eU9wdGlvbnM6IFNpbmdsZVNlbGVjdENvbXBvbmVudC5GaWx0ZXJhYmlsaXR5T3B0aW9ucyA9IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgfTtcblxuICBASW5wdXQoKVxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbG9ja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbm9PcHRpb25zTWVzc2FnZTogc3RyaW5nID0gJ05vIGF2YWlsYWJsZSBvcHRpb25zJztcblxuICBASW5wdXQoKVxuICBub2RlVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBASW5wdXQoKVxuICB0cmlnZ2VyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICBASW5wdXQoKVxuICBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdC4uLic7XG5cbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmaWx0ZXJRdWVyeTogc3RyaW5nID0gJyc7XG5cbiAgQE91dHB1dCgpXG4gIGZpbHRlclF1ZXJ5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHNlbGVjdGVkT3B0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbVRyaWdnZXJCdXR0b24nKSBjdXN0b21UcmlnZ2VyQnV0dG9uPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3RhbmRhcmRUcmlnZ2VyQnV0dG9uJykgc3RhbmRhcmRUcmlnZ2VyQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICBnZXRUcmlnZ2VyKCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21UcmlnZ2VyQnV0dG9uPy5uYXRpdmVFbGVtZW50ID8/XG4gICAgICB0aGlzLnN0YW5kYXJkVHJpZ2dlckJ1dHRvbj8ubmF0aXZlRWxlbWVudFxuICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmlsdGVyYWJpbGl0eU9wdGlvbnMuZW5hYmxlZCAmJlxuICAgICAgdGhpcy5maWx0ZXJhYmlsaXR5T3B0aW9ucy5wbGFjZWhvbGRlclxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyYWJpbGl0eU9wdGlvbnMucGxhY2Vob2xkZXI7XG4gICAgfVxuICAgIHJldHVybiAnRmlsdGVyIG9wdGlvbnMuLi4nO1xuICB9XG5cbiAgYWxsb3dlZE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmxvY2tlZCkge1xuICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0cmFja0J5SGVhZGVyKGk6IG51bWJlciwgZ3JvdXA6IFNpbmdsZVNlbGVjdENvbXBvbmVudC5PcHRpb25Hcm91cDxVPikge1xuICAgIHJldHVybiBgJHtpfSR7Z3JvdXAuaGVhZGVyfWA7XG4gIH1cblxuICB0cmFja0J5T3B0aW9uKF86IG51bWJlciwgb3B0aW9uOiBVKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5pZDtcbiAgfVxuXG4gIG9wZW46IGJvb2xlYW4gPSBmYWxzZTtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBTaW5nbGVTZWxlY3RDb21wb25lbnQge1xuICBleHBvcnQgdHlwZSBPcHRpb24gPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIHN1YnRpdGxlPzogc3RyaW5nO1xuICAgIGNvdW50PzogbnVtYmVyO1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICB0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgIHN1YnRpdGxlSGlnaGxpZ2h0SW5kaWNlcz86IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gIH07XG5cbiAgdHlwZSBOb2RlPFYgZXh0ZW5kcyBPcHRpb24+ID0gViAmIHtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBPcHRpb25Hcm91cDxPIGV4dGVuZHMgT3B0aW9uPiA9IHtcbiAgICBoZWFkZXI/OiBzdHJpbmc7XG4gICAgb3B0aW9uczogT1tdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEZpbHRlcmFiaWxpdHlPcHRpb25zID1cbiAgICB8IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2U7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWU7XG4gICAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgICAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyU3luYzxUIGV4dGVuZHMgT3B0aW9uR3JvdXA8VT4sIFUgZXh0ZW5kcyBPcHRpb24+KFxuICAgIGdyb3VwczogVFtdLFxuICAgIGV4YWN0OiBib29sZWFuID0gZmFsc2UsXG4gICk6IChxdWVyeTogc3RyaW5nKSA9PiBUW10ge1xuICAgIHJldHVybiBmdW5jdGlvbiBmaWx0ZXIocXVlcnk6IHN0cmluZykge1xuICAgICAgaWYgKCFxdWVyeSkgcmV0dXJuIGdyb3VwcztcblxuICAgICAgY29uc3QgZnVzZU9wdGlvbnMgPSB7XG4gICAgICAgIGtleXM6IFsndGl0bGUnLCAnc3VidGl0bGUnXSxcbiAgICAgICAgaW5jbHVkZU1hdGNoZXM6IHRydWUsXG4gICAgICAgIHNob3VsZFNvcnQ6IHRydWUsXG4gICAgICAgIHRocmVzaG9sZDogZXhhY3QgPyAwLjAgOiAwLjYsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZ3JvdXBzXG4gICAgICAgIC5tYXAoZ3JvdXAgPT4ge1xuICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShncm91cC5vcHRpb25zLCBmdXNlT3B0aW9ucyk7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGZ1c2Uuc2VhcmNoKHF1ZXJ5KTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgIG9wdGlvbnM6IG1hdGNoZXMubWFwKG1hdGNoID0+ICh7XG4gICAgICAgICAgICAgIC4uLm1hdGNoLml0ZW0sXG4gICAgICAgICAgICAgIHRpdGxlSGlnaGxpZ2h0SW5kaWNlczogW1xuICAgICAgICAgICAgICAgIC4uLihtYXRjaC5tYXRjaGVzPy5maW5kKHJlc3VsdCA9PiByZXN1bHQua2V5ID09PSAndGl0bGUnKVxuICAgICAgICAgICAgICAgICAgPy5pbmRpY2VzIHx8IFtdKSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzOiBbXG4gICAgICAgICAgICAgICAgLi4uKG1hdGNoLm1hdGNoZXM/LmZpbmQocmVzdWx0ID0+IHJlc3VsdC5rZXkgPT09ICdzdWJ0aXRsZScpXG4gICAgICAgICAgICAgICAgICA/LmluZGljZXMgfHwgW10pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucy5sZW5ndGggPiAwKTsgLy8gUmVtb3ZlIGVtcHR5IGdyb3Vwc1xuICAgIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyQXN5bmM8VCBleHRlbmRzIE9wdGlvbkdyb3VwPFU+LCBVIGV4dGVuZHMgT3B0aW9uPihcbiAgICBxdWVyeSQ6IE9ic2VydmFibGU8c3RyaW5nPixcbiAgICBmZXRjaGVyOiAocXVlcnk6IHN0cmluZykgPT4gUHJvbWlzZTxUW10+LFxuICAgIGRlYm91bmNlSW5wdXQ6IG51bWJlciA9IDMwMCxcbiAgKTogT2JzZXJ2YWJsZTx7XG4gICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICBncm91cHM6IFRbXTtcbiAgfT4ge1xuICAgIHJldHVybiBxdWVyeSQucGlwZShcbiAgICAgIGRlYm91bmNlVGltZShkZWJvdW5jZUlucHV0KSxcbiAgICAgIHN3aXRjaE1hcChxdWVyeSA9PlxuICAgICAgICBmcm9tKGZldGNoZXIocXVlcnkpKS5waXBlKFxuICAgICAgICAgIG1hcChncm91cHMgPT4ge1xuICAgICAgICAgICAgaWYgKCFxdWVyeSkgcmV0dXJuIHsgbG9hZGluZzogZmFsc2UsIGdyb3VwcyB9O1xuXG4gICAgICAgICAgICBjb25zdCBmdXNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAga2V5czogWyd0aXRsZScsICdzdWJ0aXRsZSddLFxuICAgICAgICAgICAgICBpbmNsdWRlTWF0Y2hlczogdHJ1ZSxcbiAgICAgICAgICAgICAgc2hvdWxkU29ydDogdHJ1ZSxcbiAgICAgICAgICAgICAgdGhyZXNob2xkOiAwLjYsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEdyb3VwcyA9IGdyb3Vwc1xuICAgICAgICAgICAgICAubWFwKGdyb3VwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoZ3JvdXAub3B0aW9ucywgZnVzZU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBmdXNlLnNlYXJjaChxdWVyeSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOiBtYXRjaGVzLm1hcChtYXRjaCA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5tYXRjaC5pdGVtLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZUhpZ2hsaWdodEluZGljZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAuLi4obWF0Y2gubWF0Y2hlcz8uZmluZChyZXN1bHQgPT4gcmVzdWx0LmtleSA9PT0gJ3RpdGxlJylcbiAgICAgICAgICAgICAgICAgICAgICAgID8uaW5kaWNlcyB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlSGlnaGxpZ2h0SW5kaWNlczogW1xuICAgICAgICAgICAgICAgICAgICAgIC4uLihtYXRjaC5tYXRjaGVzPy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0+IHJlc3VsdC5rZXkgPT09ICdzdWJ0aXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgKT8uaW5kaWNlcyB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZpbHRlcihncm91cCA9PiBncm91cC5vcHRpb25zLmxlbmd0aCA+IDApOyAvLyBSZW1vdmUgZW1wdHkgZ3JvdXBzXG5cbiAgICAgICAgICAgIHJldHVybiB7IGxvYWRpbmc6IGZhbHNlLCBncm91cHM6IGZpbHRlcmVkR3JvdXBzIH07XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3RhcnRXaXRoKHsgbG9hZGluZzogdHJ1ZSwgZ3JvdXBzOiBbXSB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgbWFwKChbcHJldmlvdXMsIG5leHRdKSA9PiAoe1xuICAgICAgICBsb2FkaW5nOiBuZXh0LmxvYWRpbmcsXG4gICAgICAgIGdyb3VwczogbmV4dC5sb2FkaW5nID8gcHJldmlvdXMuZ3JvdXBzIDogbmV4dC5ncm91cHMsXG4gICAgICB9KSksXG4gICAgICBzdGFydFdpdGgoeyBsb2FkaW5nOiBmYWxzZSwgZ3JvdXBzOiBbXSB9KSxcbiAgICApO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwidHJpZ2dlclRlbXBsYXRlOyBlbHNlIHN0YW5kYXJkVHJpZ2dlclwiPlxuICA8YnV0dG9uXG4gICAgI2N1c3RvbVRyaWdnZXJCdXR0b25cbiAgICAoY2xpY2spPVwiYWxsb3dlZE9wZW4oKVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGxvY2tlZFwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmlnZ2VyVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgc2VsZWN0ZWRPcHRpb24gfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L2J1dHRvbj5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNzdGFuZGFyZFRyaWdnZXI+XG4gIDxyaXYtaW5wdXQtbGFiZWxcbiAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgIFtoZWxwXT1cImhlbHBcIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgW2xhYmVsQWN0aW9uVGV4dF09XCJsYWJlbEFjdGlvblRleHRcIlxuICAgIChsYWJlbEFjdGlvbik9XCJsYWJlbEFjdGlvbi5lbWl0KCRldmVudClcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgI3N0YW5kYXJkVHJpZ2dlckJ1dHRvblxuICAgICAgY2xhc3M9XCJ0cmlnZ2VyXCJcbiAgICAgIChjbGljayk9XCJhbGxvd2VkT3BlbigpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBsb2NrZWRcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkT3B0aW9uOyBlbHNlIHBsYWNlaG9sZGVyVmFsdWVcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IHNlbGVjdGVkT3B0aW9uLnRpdGxlIH19PC9zcGFuPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyVmFsdWU+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWUgcGxhY2Vob2xkZXJcIj57eyBwbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8c3BhbiBjbGFzcz1cImNoZXZyb25cIj5cbiAgICAgICAgPHJpdi1pY29uICpuZ0lmPVwiIWxvY2tlZFwiIFtuYW1lXT1cIidDaGV2cm9uRG93bidcIiBbc2l6ZV09XCIxNlwiPjwvcml2LWljb24+XG4gICAgICAgIDxyaXYtaWNvbiAqbmdJZj1cImxvY2tlZFwiIFtuYW1lXT1cIidMb2NrJ1wiIFtzaXplXT1cIjE2XCI+PC9yaXYtaWNvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9yaXYtaW5wdXQtbGFiZWw+XG48L25nLXRlbXBsYXRlPlxuXG48cml2LWNhbGxvdXRcbiAgKm5nSWY9XCJvcGVuXCJcbiAgW2FuY2hvcl09XCJnZXRUcmlnZ2VyKClcIlxuICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICBbYWxsb3dlZFBvc2l0aW9uc109XCJbXG4gICAgJ3RvcC1sZWZ0JyxcbiAgICAndG9wLWNlbnRlcicsXG4gICAgJ3RvcC1yaWdodCcsXG4gICAgJ2JvdHRvbS1yaWdodCcsXG4gICAgJ2JvdHRvbS1jZW50ZXInLFxuICAgICdib3R0b20tbGVmdCdcbiAgXVwiXG4gIChjbG9zZSk9XCJvcGVuID0gZmFsc2VcIlxuPlxuICA8aW5wdXRcbiAgICAqbmdJZj1cImZpbHRlcmFiaWxpdHlPcHRpb25zLmVuYWJsZWRcIlxuICAgICNmaWx0ZXJcbiAgICBjbGFzcz1cImZpbHRlclwiXG4gICAgW3BsYWNlaG9sZGVyXT1cImdldEZpbHRlclBsYWNlaG9sZGVyKClcIlxuICAgIFt2YWx1ZV09XCJmaWx0ZXJRdWVyeVwiXG4gICAgKGlucHV0KT1cImZpbHRlclF1ZXJ5ID0gZmlsdGVyLnZhbHVlOyBmaWx0ZXJRdWVyeUNoYW5nZS5lbWl0KGZpbHRlclF1ZXJ5KVwiXG4gIC8+XG4gIDxkaXYgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgPHJpdi1sb2FkaW5nLWNvdmVyIFtsb2FkaW5nXT1cImxvYWRpbmdcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwczsgdHJhY2tCeTogdHJhY2tCeUhlYWRlclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXAuaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJncm91cC1oZWFkZXJcIj5cbiAgICAgICAgICAgIHt7IGdyb3VwLmhlYWRlciB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cC5vcHRpb25zOyBsZXQgbm9kZXNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZXMubGVuZ3RoID4gMDsgZWxzZSBlbXB0eVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbm9kZSBvZiBub2RlczsgdHJhY2tCeTogdHJhY2tCeU9wdGlvblwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZVRlbXBsYXRlOyBlbHNlIHN0YW5kYXJkVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1zaW5nbGUtc2VsZWN0LW5vZGVcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkT3B0aW9uQ2hhbmdlLmVtaXQobm9kZSk7IG9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG5vZGUgfVwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3N0YW5kYXJkVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaW5nbGUtc2VsZWN0LW5vZGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIm5vZGU/LmlkID09PSBzZWxlY3RlZE9wdGlvbj8uaWRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIm5vZGU/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJub2RlPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRPcHRpb25DaGFuZ2UuZW1pdChub2RlKTsgb3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCInQ2hlY2snXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlPy5pZCA9PT0gc2VsZWN0ZWRPcHRpb24/LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVdPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgPjwvcml2LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cml2LWhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwibm9kZT8udGl0bGUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZGljZXNdPVwibm9kZT8udGl0bGVIaWdobGlnaHRJbmRpY2VzIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9yaXYtaGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibm9kZT8uc3VidGl0bGVcIiBjbGFzcz1cImxhYmVsLXN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHJpdi1oaWdobGlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIm5vZGU/LnN1YnRpdGxlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRpY2VzXT1cIm5vZGU/LnN1YnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyB8fCBbXVwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvcml2LWhpZ2hsaWdodD5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eVwiPlxuICAgICAgICAgICAgICB7eyBub09wdGlvbnNNZXNzYWdlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvcml2LWxvYWRpbmctY292ZXI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZm9vdGVyXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Zvb3Rlcl1cIj4gPC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvcml2LWNhbGxvdXQ+XG4iXX0=
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9zaW5nbGUtc2VsZWN0L3NpbmdsZS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvc2luZ2xlLXNlbGVjdC9zaW5nbGUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLElBQUksTUFBTSxTQUFTLENBQUM7QUFDM0IsT0FBTyxFQUVMLFlBQVksRUFDWixJQUFJLEVBQ0osR0FBRyxFQUNILFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBUTNFLE1BQU0sT0FBTyxxQkFHWCxTQUFRLG1CQUFtQjtJQVQ3Qjs7UUFXRSxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBR2pCLG1CQUFjLEdBQWEsSUFBSSxDQUFDO1FBR2hDLHlCQUFvQixHQUErQztZQUNqRSxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7UUFHRixZQUFPLEdBQVksS0FBSyxDQUFDO1FBR3pCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHeEIscUJBQWdCLEdBQVcsc0JBQXNCLENBQUM7UUFTbEQsZ0JBQVcsR0FBVyxXQUFXLENBQUM7UUFHbEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUd6QixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRy9DLHlCQUFvQixH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LENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU07U0FDckQsQ0FBQyxDQUFDLEVBQ0gsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDMUMsQ0FBQztJQUNKLENBQUM7SUF6RGUsb0NBQWMsaUJBeUQ3QixDQUFBO0FBQ0gsQ0FBQyxFQTdIZ0IscUJBQXFCLEtBQXJCLHFCQUFxQixRQTZIckMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IEZ1c2UgZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQge1xuICBPYnNlcnZhYmxlLFxuICBkZWJvdW5jZVRpbWUsXG4gIGZyb20sXG4gIG1hcCxcbiAgcGFpcndpc2UsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEhpZ2hsaWdodENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Zpc3VhbGl6YXRpb24vaGlnaGxpZ2h0L2hpZ2hsaWdodC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0LWxhYmVsL2lucHV0LWxhYmVsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1zaW5nbGUtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpbmdsZS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zaW5nbGUtc2VsZWN0LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNpbmdsZVNlbGVjdENvbXBvbmVudDxcbiAgVCBleHRlbmRzIFNpbmdsZVNlbGVjdENvbXBvbmVudC5PcHRpb25Hcm91cDxVPixcbiAgVSBleHRlbmRzIFNpbmdsZVNlbGVjdENvbXBvbmVudC5PcHRpb24sXG4+IGV4dGVuZHMgSW5wdXRMYWJlbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIGdyb3VwczogVFtdID0gW107XG5cbiAgQElucHV0KClcbiAgc2VsZWN0ZWRPcHRpb246IFUgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKVxuICBmaWx0ZXJhYmlsaXR5T3B0aW9uczogU2luZ2xlU2VsZWN0Q29tcG9uZW50LkZpbHRlcmFiaWxpdHlPcHRpb25zID0ge1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBsb2NrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBub09wdGlvbnNNZXNzYWdlOiBzdHJpbmcgPSAnTm8gYXZhaWxhYmxlIG9wdGlvbnMnO1xuXG4gIEBJbnB1dCgpXG4gIG5vZGVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpXG4gIHRyaWdnZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBJbnB1dCgpXG4gIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0Li4uJztcblxuICBASW5wdXQoKVxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZpbHRlclF1ZXJ5OiBzdHJpbmcgPSAnJztcblxuICBAT3V0cHV0KClcbiAgZmlsdGVyUXVlcnlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0ZWRPcHRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFU+KCk7XG5cbiAgQFZpZXdDaGlsZCgnY3VzdG9tVHJpZ2dlckJ1dHRvbicpIGN1c3RvbVRyaWdnZXJCdXR0b24/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdGFuZGFyZFRyaWdnZXJCdXR0b24nKSBzdGFuZGFyZFRyaWdnZXJCdXR0b24/OiBFbGVtZW50UmVmO1xuXG4gIGdldFRyaWdnZXIoKTogRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVRyaWdnZXJCdXR0b24/Lm5hdGl2ZUVsZW1lbnQgPz9cbiAgICAgIHRoaXMuc3RhbmRhcmRUcmlnZ2VyQnV0dG9uPy5uYXRpdmVFbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIGdldEZpbHRlclBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5maWx0ZXJhYmlsaXR5T3B0aW9ucy5lbmFibGVkICYmXG4gICAgICB0aGlzLmZpbHRlcmFiaWxpdHlPcHRpb25zLnBsYWNlaG9sZGVyXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJhYmlsaXR5T3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG4gICAgcmV0dXJuICdGaWx0ZXIgb3B0aW9ucy4uLic7XG4gIH1cblxuICBhbGxvd2VkT3BlbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMubG9ja2VkKSB7XG4gICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHRyYWNrQnlIZWFkZXIoaTogbnVtYmVyLCBncm91cDogU2luZ2xlU2VsZWN0Q29tcG9uZW50Lk9wdGlvbkdyb3VwPFU+KSB7XG4gICAgcmV0dXJuIGAke2l9JHtncm91cC5oZWFkZXJ9YDtcbiAgfVxuXG4gIHRyYWNrQnlPcHRpb24oXzogbnVtYmVyLCBvcHRpb246IFUpIHtcbiAgICByZXR1cm4gb3B0aW9uLmlkO1xuICB9XG5cbiAgb3BlbjogYm9vbGVhbiA9IGZhbHNlO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNpbmdsZVNlbGVjdENvbXBvbmVudCB7XG4gIGV4cG9ydCB0eXBlIE9wdGlvbiA9IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgY291bnQ/OiBudW1iZXI7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHRpdGxlSGlnaGxpZ2h0SW5kaWNlcz86IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gICAgc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgfTtcblxuICB0eXBlIE5vZGU8ViBleHRlbmRzIE9wdGlvbj4gPSBWICYge1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIE9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBPcHRpb24+ID0ge1xuICAgIGhlYWRlcj86IHN0cmluZztcbiAgICBvcHRpb25zOiBPW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRmlsdGVyYWJpbGl0eU9wdGlvbnMgPVxuICAgIHwge1xuICAgICAgICBlbmFibGVkOiBmYWxzZTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZTtcbiAgICAgICAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJTeW5jPFQgZXh0ZW5kcyBPcHRpb25Hcm91cDxVPiwgVSBleHRlbmRzIE9wdGlvbj4oXG4gICAgZ3JvdXBzOiBUW10sXG4gICAgZXhhY3Q6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogKHF1ZXJ5OiBzdHJpbmcpID0+IFRbXSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGZpbHRlcihxdWVyeTogc3RyaW5nKSB7XG4gICAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gZ3JvdXBzO1xuXG4gICAgICBjb25zdCBmdXNlT3B0aW9ucyA9IHtcbiAgICAgICAga2V5czogWyd0aXRsZScsICdzdWJ0aXRsZSddLFxuICAgICAgICBpbmNsdWRlTWF0Y2hlczogdHJ1ZSxcbiAgICAgICAgc2hvdWxkU29ydDogdHJ1ZSxcbiAgICAgICAgdGhyZXNob2xkOiBleGFjdCA/IDAuMCA6IDAuNixcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBncm91cHNcbiAgICAgICAgLm1hcChncm91cCA9PiB7XG4gICAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGdyb3VwLm9wdGlvbnMsIGZ1c2VPcHRpb25zKTtcbiAgICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVzZS5zZWFyY2gocXVlcnkpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgb3B0aW9uczogbWF0Y2hlcy5tYXAobWF0Y2ggPT4gKHtcbiAgICAgICAgICAgICAgLi4ubWF0Y2guaXRlbSxcbiAgICAgICAgICAgICAgdGl0bGVIaWdobGlnaHRJbmRpY2VzOiBbXG4gICAgICAgICAgICAgICAgLi4uKG1hdGNoLm1hdGNoZXM/LmZpbmQocmVzdWx0ID0+IHJlc3VsdC5rZXkgPT09ICd0aXRsZScpXG4gICAgICAgICAgICAgICAgICA/LmluZGljZXMgfHwgW10pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdWJ0aXRsZUhpZ2hsaWdodEluZGljZXM6IFtcbiAgICAgICAgICAgICAgICAuLi4obWF0Y2gubWF0Y2hlcz8uZmluZChyZXN1bHQgPT4gcmVzdWx0LmtleSA9PT0gJ3N1YnRpdGxlJylcbiAgICAgICAgICAgICAgICAgID8uaW5kaWNlcyB8fCBbXSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcihncm91cCA9PiBncm91cC5vcHRpb25zLmxlbmd0aCA+IDApOyAvLyBSZW1vdmUgZW1wdHkgZ3JvdXBzXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJBc3luYzxUIGV4dGVuZHMgT3B0aW9uR3JvdXA8VT4sIFUgZXh0ZW5kcyBPcHRpb24+KFxuICAgIHF1ZXJ5JDogT2JzZXJ2YWJsZTxzdHJpbmc+LFxuICAgIGZldGNoZXI6IChxdWVyeTogc3RyaW5nKSA9PiBQcm9taXNlPFRbXT4sXG4gICAgZGVib3VuY2VJbnB1dDogbnVtYmVyID0gMzAwLFxuICApOiBPYnNlcnZhYmxlPHtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgIGdyb3VwczogVFtdO1xuICB9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5JC5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKGRlYm91bmNlSW5wdXQpLFxuICAgICAgc3dpdGNoTWFwKHF1ZXJ5ID0+XG4gICAgICAgIGZyb20oZmV0Y2hlcihxdWVyeSkpLnBpcGUoXG4gICAgICAgICAgbWFwKGdyb3VwcyA9PiB7XG4gICAgICAgICAgICBpZiAoIXF1ZXJ5KSByZXR1cm4geyBsb2FkaW5nOiBmYWxzZSwgZ3JvdXBzIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZ1c2VPcHRpb25zID0ge1xuICAgICAgICAgICAgICBrZXlzOiBbJ3RpdGxlJywgJ3N1YnRpdGxlJ10sXG4gICAgICAgICAgICAgIGluY2x1ZGVNYXRjaGVzOiB0cnVlLFxuICAgICAgICAgICAgICBzaG91bGRTb3J0OiB0cnVlLFxuICAgICAgICAgICAgICB0aHJlc2hvbGQ6IDAuNixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBzID0gZ3JvdXBzXG4gICAgICAgICAgICAgIC5tYXAoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShncm91cC5vcHRpb25zLCBmdXNlT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGZ1c2Uuc2VhcmNoKHF1ZXJ5KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG1hdGNoZXMubWFwKG1hdGNoID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLm1hdGNoLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlSGlnaGxpZ2h0SW5kaWNlczogW1xuICAgICAgICAgICAgICAgICAgICAgIC4uLihtYXRjaC5tYXRjaGVzPy5maW5kKHJlc3VsdCA9PiByZXN1bHQua2V5ID09PSAndGl0bGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgPy5pbmRpY2VzIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgLi4uKG1hdGNoLm1hdGNoZXM/LmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPT4gcmVzdWx0LmtleSA9PT0gJ3N1YnRpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICApPy5pbmRpY2VzIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmlsdGVyKGdyb3VwID0+IGdyb3VwLm9wdGlvbnMubGVuZ3RoID4gMCk7IC8vIFJlbW92ZSBlbXB0eSBncm91cHNcblxuICAgICAgICAgICAgcmV0dXJuIHsgbG9hZGluZzogZmFsc2UsIGdyb3VwczogZmlsdGVyZWRHcm91cHMgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzdGFydFdpdGgoeyBsb2FkaW5nOiB0cnVlLCBncm91cHM6IFtdIH0pLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKFtwcmV2aW91cywgbmV4dF0pID0+ICh7XG4gICAgICAgIGxvYWRpbmc6IG5leHQubG9hZGluZyxcbiAgICAgICAgZ3JvdXBzOiBuZXh0LmxvYWRpbmcgPyBwcmV2aW91cy5ncm91cHMgOiBuZXh0Lmdyb3VwcyxcbiAgICAgIH0pKSxcbiAgICAgIHN0YXJ0V2l0aCh7IGxvYWRpbmc6IGZhbHNlLCBncm91cHM6IFtdIH0pLFxuICAgICk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmlnZ2VyVGVtcGxhdGU7IGVsc2Ugc3RhbmRhcmRUcmlnZ2VyXCI+XG4gIDxidXR0b25cbiAgICAjY3VzdG9tVHJpZ2dlckJ1dHRvblxuICAgIChjbGljayk9XCJhbGxvd2VkT3BlbigpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyaWdnZXJUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzZWxlY3RlZE9wdGlvbiB9XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvYnV0dG9uPlxuPC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI3N0YW5kYXJkVHJpZ2dlcj5cbiAgPHJpdi1pbnB1dC1sYWJlbFxuICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgW2hlbHBdPVwiaGVscFwiXG4gICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbbGFiZWxBY3Rpb25UZXh0XT1cImxhYmVsQWN0aW9uVGV4dFwiXG4gICAgKGxhYmVsQWN0aW9uKT1cImxhYmVsQWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gID5cbiAgICA8YnV0dG9uXG4gICAgICAjc3RhbmRhcmRUcmlnZ2VyQnV0dG9uXG4gICAgICBjbGFzcz1cInRyaWdnZXJcIlxuICAgICAgKGNsaWNrKT1cImFsbG93ZWRPcGVuKClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGxvY2tlZFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRPcHRpb247IGVsc2UgcGxhY2Vob2xkZXJWYWx1ZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3sgc2VsZWN0ZWRPcHRpb24udGl0bGUgfX08L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXJWYWx1ZT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZSBwbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyIH19PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY2hldnJvblwiPlxuICAgICAgICA8cml2LWljb24gKm5nSWY9XCIhbG9ja2VkXCIgW25hbWVdPVwiJ0NoZXZyb25Eb3duJ1wiIFtzaXplXT1cIjE2XCI+PC9yaXYtaWNvbj5cbiAgICAgICAgPHJpdi1pY29uICpuZ0lmPVwibG9ja2VkXCIgW25hbWVdPVwiJ0xvY2snXCIgW3NpemVdPVwiMTZcIj48L3Jpdi1pY29uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L3Jpdi1pbnB1dC1sYWJlbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxyaXYtY2FsbG91dFxuICAqbmdJZj1cIm9wZW5cIlxuICBbYW5jaG9yXT1cImdldFRyaWdnZXIoKVwiXG4gIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgW3Nob3dDYXJldF09XCJmYWxzZVwiXG4gIFthbGxvd2VkUG9zaXRpb25zXT1cIltcbiAgICAndG9wLWxlZnQnLFxuICAgICd0b3AtY2VudGVyJyxcbiAgICAndG9wLXJpZ2h0JyxcbiAgICAnYm90dG9tLXJpZ2h0JyxcbiAgICAnYm90dG9tLWNlbnRlcicsXG4gICAgJ2JvdHRvbS1sZWZ0J1xuICBdXCJcbiAgKGNsb3NlKT1cIm9wZW4gPSBmYWxzZVwiXG4+XG4gIDxpbnB1dFxuICAgICpuZ0lmPVwiZmlsdGVyYWJpbGl0eU9wdGlvbnMuZW5hYmxlZFwiXG4gICAgI2ZpbHRlclxuICAgIGNsYXNzPVwiZmlsdGVyXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0RmlsdGVyUGxhY2Vob2xkZXIoKVwiXG4gICAgW3ZhbHVlXT1cImZpbHRlclF1ZXJ5XCJcbiAgICAoaW5wdXQpPVwiZmlsdGVyUXVlcnkgPSBmaWx0ZXIudmFsdWU7IGZpbHRlclF1ZXJ5Q2hhbmdlLmVtaXQoZmlsdGVyUXVlcnkpXCJcbiAgLz5cbiAgPGRpdiBjbGFzcz1cIm9wdGlvbnNcIj5cbiAgICA8cml2LWxvYWRpbmctY292ZXIgW2xvYWRpbmddPVwibG9hZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgZ3JvdXBzOyB0cmFja0J5OiB0cmFja0J5SGVhZGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cC5oZWFkZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImdyb3VwLWhlYWRlclwiPlxuICAgICAgICAgICAge3sgZ3JvdXAuaGVhZGVyIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwLm9wdGlvbnM7IGxldCBub2Rlc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2Rlcy5sZW5ndGggPiAwOyBlbHNlIGVtcHR5XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBub2RlIG9mIG5vZGVzOyB0cmFja0J5OiB0cmFja0J5T3B0aW9uXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlVGVtcGxhdGU7IGVsc2Ugc3RhbmRhcmRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLXNpbmdsZS1zZWxlY3Qtbm9kZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRPcHRpb25DaGFuZ2UuZW1pdChub2RlKTsgb3BlbiA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbm9kZSB9XCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhbmRhcmRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNpbmdsZS1zZWxlY3Qtbm9kZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwibm9kZT8uaWQgPT09IHNlbGVjdGVkT3B0aW9uPy5pZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwibm9kZT8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm5vZGU/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZE9wdGlvbkNoYW5nZS5lbWl0KG5vZGUpOyBvcGVuID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHJpdi1pY29uXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidDaGVjaydcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGU/LmlkID09PSBzZWxlY3RlZE9wdGlvbj8uaWRcIlxuICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCIxNlwiXG4gICAgICAgICAgICAgICAgICA+PC9yaXYtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxyaXYtaGlnaGxpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJub2RlPy50aXRsZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kaWNlc109XCJub2RlPy50aXRsZUhpZ2hsaWdodEluZGljZXMgfHwgW11cIlxuICAgICAgICAgICAgICAgICAgICAgID48L3Jpdi1oaWdobGlnaHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJub2RlPy5zdWJ0aXRsZVwiIGNsYXNzPVwibGFiZWwtc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cml2LWhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwibm9kZT8uc3VidGl0bGUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZGljZXNdPVwibm9kZT8uc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9yaXYtaGlnaGxpZ2h0PlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5XCI+XG4gICAgICAgICAgICAgIHt7IG5vT3B0aW9uc01lc3NhZ2UgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9yaXYtbG9hZGluZy1jb3Zlcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZm9vdGVyXVwiPiA8L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9yaXYtY2FsbG91dD5cbiJdfQ==
|
|
@@ -9,17 +9,21 @@ export class LegendItemComponent {
|
|
|
9
9
|
this.colorToken = '';
|
|
10
10
|
this.style = 'solid';
|
|
11
11
|
this.visibility = 'visible';
|
|
12
|
+
this.clickable = false;
|
|
12
13
|
this.itemClick = new EventEmitter();
|
|
13
14
|
}
|
|
14
15
|
get backgroundColor() {
|
|
15
16
|
return `var(${this.colorToken})`;
|
|
16
17
|
}
|
|
18
|
+
isLegendItemClickable() {
|
|
19
|
+
return this.clickable && this.visibility !== 'locked';
|
|
20
|
+
}
|
|
17
21
|
}
|
|
18
22
|
LegendItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LegendItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
-
LegendItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: LegendItemComponent, selector: "riv-legend-item", inputs: { label: "label", colorToken: "colorToken", style: "style", visibility: "visibility", iconTooltip: "iconTooltip" }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<button
|
|
23
|
+
LegendItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: LegendItemComponent, selector: "riv-legend-item", inputs: { label: "label", colorToken: "colorToken", style: "style", visibility: "visibility", iconTooltip: "iconTooltip", clickable: "clickable" }, outputs: { itemClick: "itemClick" }, ngImport: i0, template: "<button\n (click)=\"isLegendItemClickable() ? itemClick.emit() : null\"\n [rivTooltip]=\"iconTooltip\"\n type=\"button\"\n [disabled]=\"visibility === 'locked'\"\n [class.clickable]=\"clickable\"\n>\n <i\n *ngIf=\"visibility === 'visible'\"\n [class.striped]=\"style === 'striped'\"\n [style.background-color]=\"backgroundColor\"\n class=\"opacity-hover\"\n ></i>\n <i\n *ngIf=\"visibility === 'hidden'\"\n class=\"hidden-legend-item opacity-hover\"\n [class.striped]=\"style === 'striped'\"\n [style.border-color]=\"backgroundColor\"\n [style.--background-color-hover]=\"backgroundColor\"\n ></i>\n <riv-icon *ngIf=\"visibility === 'locked'\" name=\"Lock\" [size]=\"16\"></riv-icon>\n\n <span\n [class.low-contrast]=\"visibility === 'hidden' || visibility === 'locked'\"\n >\n {{ label }}\n </span>\n</button>\n", styles: [":host{display:inline-flex;align-items:center;gap:var(--size-small)}i{width:var(--size-large);height:var(--size-large)}i.striped{background-image:repeating-linear-gradient(315deg,transparent 0px,transparent 2.5px,var(--white-100) 2.5px,var(--white-100) 3.5px,transparent 3.5px,transparent 6px)}span{color:var(--type-light-low-contrast);font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}button{display:inline-flex;gap:var(--size-small);align-items:center;cursor:default}.hidden-legend-item{border-width:var(--border-width);border-style:solid;background-color:transparent}button:hover.clickable .hidden-legend-item{background-color:var(--background-color-hover)}button:not([disabled]).clickable:hover{cursor:pointer}button:not([disabled]).clickable:hover .opacity-hover{opacity:.6}button[disabled]{cursor:not-allowed}button[disabled] .low-contrast{color:var(--type-light-disabled)}button:not(:hover) .low-contrast{color:var(--type-light-disabled)}button:not(.clickable):hover .low-contrast{color:var(--type-light-disabled)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "directive", type: i3.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
20
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LegendItemComponent, decorators: [{
|
|
21
25
|
type: Component,
|
|
22
|
-
args: [{ selector: 'riv-legend-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button
|
|
26
|
+
args: [{ selector: 'riv-legend-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n (click)=\"isLegendItemClickable() ? itemClick.emit() : null\"\n [rivTooltip]=\"iconTooltip\"\n type=\"button\"\n [disabled]=\"visibility === 'locked'\"\n [class.clickable]=\"clickable\"\n>\n <i\n *ngIf=\"visibility === 'visible'\"\n [class.striped]=\"style === 'striped'\"\n [style.background-color]=\"backgroundColor\"\n class=\"opacity-hover\"\n ></i>\n <i\n *ngIf=\"visibility === 'hidden'\"\n class=\"hidden-legend-item opacity-hover\"\n [class.striped]=\"style === 'striped'\"\n [style.border-color]=\"backgroundColor\"\n [style.--background-color-hover]=\"backgroundColor\"\n ></i>\n <riv-icon *ngIf=\"visibility === 'locked'\" name=\"Lock\" [size]=\"16\"></riv-icon>\n\n <span\n [class.low-contrast]=\"visibility === 'hidden' || visibility === 'locked'\"\n >\n {{ label }}\n </span>\n</button>\n", styles: [":host{display:inline-flex;align-items:center;gap:var(--size-small)}i{width:var(--size-large);height:var(--size-large)}i.striped{background-image:repeating-linear-gradient(315deg,transparent 0px,transparent 2.5px,var(--white-100) 2.5px,var(--white-100) 3.5px,transparent 3.5px,transparent 6px)}span{color:var(--type-light-low-contrast);font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}button{display:inline-flex;gap:var(--size-small);align-items:center;cursor:default}.hidden-legend-item{border-width:var(--border-width);border-style:solid;background-color:transparent}button:hover.clickable .hidden-legend-item{background-color:var(--background-color-hover)}button:not([disabled]).clickable:hover{cursor:pointer}button:not([disabled]).clickable:hover .opacity-hover{opacity:.6}button[disabled]{cursor:not-allowed}button[disabled] .low-contrast{color:var(--type-light-disabled)}button:not(:hover) .low-contrast{color:var(--type-light-disabled)}button:not(.clickable):hover .low-contrast{color:var(--type-light-disabled)}\n"] }]
|
|
23
27
|
}], propDecorators: { label: [{
|
|
24
28
|
type: Input
|
|
25
29
|
}], colorToken: [{
|
|
@@ -30,6 +34,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
30
34
|
type: Input
|
|
31
35
|
}], iconTooltip: [{
|
|
32
36
|
type: Input
|
|
37
|
+
}], clickable: [{
|
|
38
|
+
type: Input
|
|
33
39
|
}], itemClick: [{
|
|
34
40
|
type: Output
|
|
35
41
|
}] } });
|
|
@@ -37,4 +43,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
37
43
|
LegendItemComponent.Styles = ['solid', 'striped'];
|
|
38
44
|
LegendItemComponent.Visibilities = ['visible', 'hidden', 'locked'];
|
|
39
45
|
})(LegendItemComponent || (LegendItemComponent = {}));
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnZW5kLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9sZWdlbmQtaXRlbS9sZWdlbmQtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2xlZ2VuZC1pdGVtL2xlZ2VuZC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOzs7OztBQVF2QixNQUFNLE9BQU8sbUJBQW1CO0lBTmhDO1FBUUUsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUduQixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBR3hCLFVBQUssR0FBOEIsT0FBTyxDQUFDO1FBRzNDLGVBQVUsR0FBbUMsU0FBUyxDQUFDO1FBVXZELGNBQVMsR0FBWSxLQUFLLENBQUM7UUFHM0IsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7S0FLaEM7SUFiQyxJQUFJLGVBQWU7UUFDakIsT0FBTyxPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQztJQUNuQyxDQUFDO0lBUUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQztJQUN4RCxDQUFDOztnSEE1QlUsbUJBQW1CO29HQUFuQixtQkFBbUIsZ1BDZGhDLDQxQkE0QkE7MkZEZGEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzhCQUkvQyxLQUFLO3NCQURKLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQVFOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixTQUFTO3NCQURSLE1BQU07O0FBUVQsV0FBaUIsbUJBQW1CO0lBQ3JCLDBCQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFVLENBQUM7SUFHdkMsZ0NBQVksR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFVLENBQUM7QUFFdkUsQ0FBQyxFQU5nQixtQkFBbUIsS0FBbkIsbUJBQW1CLFFBTW5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LWxlZ2VuZC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xlZ2VuZC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGVnZW5kLWl0ZW0uY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTGVnZW5kSXRlbUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIGxhYmVsOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKVxuICBjb2xvclRva2VuOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKVxuICBzdHlsZTogTGVnZW5kSXRlbUNvbXBvbmVudC5TdHlsZSA9ICdzb2xpZCc7XG5cbiAgQElucHV0KClcbiAgdmlzaWJpbGl0eTogTGVnZW5kSXRlbUNvbXBvbmVudC5WaXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuXG4gIEBJbnB1dCgpXG4gIGljb25Ub29sdGlwPzogc3RyaW5nO1xuXG4gIGdldCBiYWNrZ3JvdW5kQ29sb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHZhcigke3RoaXMuY29sb3JUb2tlbn0pYDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGNsaWNrYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKVxuICBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgaXNMZWdlbmRJdGVtQ2xpY2thYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsaWNrYWJsZSAmJiB0aGlzLnZpc2liaWxpdHkgIT09ICdsb2NrZWQnO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTGVnZW5kSXRlbUNvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBTdHlsZXMgPSBbJ3NvbGlkJywgJ3N0cmlwZWQnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgU3R5bGUgPSAodHlwZW9mIFN0eWxlcylbbnVtYmVyXTtcblxuICBleHBvcnQgY29uc3QgVmlzaWJpbGl0aWVzID0gWyd2aXNpYmxlJywgJ2hpZGRlbicsICdsb2NrZWQnXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgVmlzaWJpbGl0eSA9ICh0eXBlb2YgVmlzaWJpbGl0aWVzKVtudW1iZXJdO1xufVxuIiwiPGJ1dHRvblxuICAoY2xpY2spPVwiaXNMZWdlbmRJdGVtQ2xpY2thYmxlKCkgPyBpdGVtQ2xpY2suZW1pdCgpIDogbnVsbFwiXG4gIFtyaXZUb29sdGlwXT1cImljb25Ub29sdGlwXCJcbiAgdHlwZT1cImJ1dHRvblwiXG4gIFtkaXNhYmxlZF09XCJ2aXNpYmlsaXR5ID09PSAnbG9ja2VkJ1wiXG4gIFtjbGFzcy5jbGlja2FibGVdPVwiY2xpY2thYmxlXCJcbj5cbiAgPGlcbiAgICAqbmdJZj1cInZpc2liaWxpdHkgPT09ICd2aXNpYmxlJ1wiXG4gICAgW2NsYXNzLnN0cmlwZWRdPVwic3R5bGUgPT09ICdzdHJpcGVkJ1wiXG4gICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiYmFja2dyb3VuZENvbG9yXCJcbiAgICBjbGFzcz1cIm9wYWNpdHktaG92ZXJcIlxuICA+PC9pPlxuICA8aVxuICAgICpuZ0lmPVwidmlzaWJpbGl0eSA9PT0gJ2hpZGRlbidcIlxuICAgIGNsYXNzPVwiaGlkZGVuLWxlZ2VuZC1pdGVtIG9wYWNpdHktaG92ZXJcIlxuICAgIFtjbGFzcy5zdHJpcGVkXT1cInN0eWxlID09PSAnc3RyaXBlZCdcIlxuICAgIFtzdHlsZS5ib3JkZXItY29sb3JdPVwiYmFja2dyb3VuZENvbG9yXCJcbiAgICBbc3R5bGUuLS1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyXT1cImJhY2tncm91bmRDb2xvclwiXG4gID48L2k+XG4gIDxyaXYtaWNvbiAqbmdJZj1cInZpc2liaWxpdHkgPT09ICdsb2NrZWQnXCIgbmFtZT1cIkxvY2tcIiBbc2l6ZV09XCIxNlwiPjwvcml2LWljb24+XG5cbiAgPHNwYW5cbiAgICBbY2xhc3MubG93LWNvbnRyYXN0XT1cInZpc2liaWxpdHkgPT09ICdoaWRkZW4nIHx8IHZpc2liaWxpdHkgPT09ICdsb2NrZWQnXCJcbiAgPlxuICAgIHt7IGxhYmVsIH19XG4gIDwvc3Bhbj5cbjwvYnV0dG9uPlxuIl19
|
|
@@ -18,7 +18,7 @@ export class StackedRowComponent {
|
|
|
18
18
|
// Width helps determine the size of the viewbox this graph is displaying in.
|
|
19
19
|
this.width$ = new BehaviorSubject(960);
|
|
20
20
|
// Height helps determine the size of the viewbox this graph is displaying in.
|
|
21
|
-
this.height$ = new BehaviorSubject(
|
|
21
|
+
this.height$ = new BehaviorSubject(null);
|
|
22
22
|
// ValueFormatter determines how we style the values in a metric and the x-axis
|
|
23
23
|
this.valueFormatter = v => v.toString();
|
|
24
24
|
this.zeroStateMessage$ = new BehaviorSubject('No data to display.');
|
|
@@ -28,13 +28,42 @@ export class StackedRowComponent {
|
|
|
28
28
|
| X Axis Labels |
|
|
29
29
|
Row Name | Rectangles | Totals
|
|
30
30
|
*/
|
|
31
|
+
this.RECTANGLE_HEIGHTS = {
|
|
32
|
+
MIN_HEIGHT: 12,
|
|
33
|
+
MAX_HEIGHT: 42, // Sets the largest size a row can expand to
|
|
34
|
+
};
|
|
31
35
|
this.SECTION_HEIGHTS = {
|
|
32
36
|
// Space reserved for the x-axis labels
|
|
33
37
|
X_AXIS_LABEL: 14,
|
|
34
38
|
// Height of each row
|
|
35
|
-
PER_ROW:
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
PER_ROW: () => {
|
|
40
|
+
//Only use height if specified
|
|
41
|
+
if (this.input.length && this.height) {
|
|
42
|
+
let rowHeight = (this.height -
|
|
43
|
+
this.SECTION_HEIGHTS.X_AXIS_LABEL -
|
|
44
|
+
this.SECTION_PADDING.OUTER_TOP_BOTTOM -
|
|
45
|
+
this.SECTION_PADDING.RECTANGLE_TO_ROW) /
|
|
46
|
+
this.input.length; // calculate base row height
|
|
47
|
+
// Clamping the row height between the min and max heights
|
|
48
|
+
return Math.min(Math.max(rowHeight, this.RECTANGLE_HEIGHTS.MIN_HEIGHT), this.RECTANGLE_HEIGHTS.MAX_HEIGHT);
|
|
49
|
+
}
|
|
50
|
+
return (this.RECTANGLE_HEIGHTS.MIN_HEIGHT + this.SECTION_PADDING.BETWEEN_ROW); // Default if no input
|
|
51
|
+
},
|
|
52
|
+
// Max Height of each rectangle
|
|
53
|
+
PER_RECTANGLE: () => {
|
|
54
|
+
//Only use height if specified
|
|
55
|
+
if (this.input.length && this.height) {
|
|
56
|
+
let rectangleHeight = (this.height -
|
|
57
|
+
this.SECTION_HEIGHTS.X_AXIS_LABEL -
|
|
58
|
+
this.SECTION_PADDING.OUTER_TOP_BOTTOM -
|
|
59
|
+
this.SECTION_PADDING.RECTANGLE_TO_ROW) /
|
|
60
|
+
this.input.length -
|
|
61
|
+
this.SECTION_PADDING.BETWEEN_ROW; // calculate base rectangle height
|
|
62
|
+
// Clamping the rectangle height between the min and max heights
|
|
63
|
+
return Math.min(Math.max(rectangleHeight, this.RECTANGLE_HEIGHTS.MIN_HEIGHT), this.RECTANGLE_HEIGHTS.MAX_HEIGHT);
|
|
64
|
+
}
|
|
65
|
+
return this.RECTANGLE_HEIGHTS.MIN_HEIGHT; // Default if no input
|
|
66
|
+
},
|
|
38
67
|
};
|
|
39
68
|
this.SECTION_WIDTHS = {
|
|
40
69
|
// Space reserved for the name at the start of the row
|
|
@@ -52,33 +81,43 @@ export class StackedRowComponent {
|
|
|
52
81
|
RECTANGLE_TO_ROW: 6,
|
|
53
82
|
};
|
|
54
83
|
// The number of X-axis segments to create, with labels at the start of each segment.
|
|
55
|
-
this.
|
|
84
|
+
this.X_TICK_COUNT_MAX = 8;
|
|
85
|
+
this.X_TICK_COUNT_MIN = 3;
|
|
86
|
+
this.X_TICK_MAX_WIDTH = 900;
|
|
87
|
+
this.X_TICK_MIN_WIDTH = 400;
|
|
56
88
|
this.drawData$ = combineLatest([
|
|
57
89
|
this.input$,
|
|
58
90
|
this.width$,
|
|
59
91
|
this.height$,
|
|
60
92
|
]).pipe(map(([input, width, height]) => {
|
|
61
|
-
return this.getDrawnData(input, width, height
|
|
93
|
+
return this.getDrawnData(input, width, height
|
|
94
|
+
? height
|
|
95
|
+
: this.SECTION_HEIGHTS.X_AXIS_LABEL +
|
|
96
|
+
this.SECTION_PADDING.OUTER_TOP_BOTTOM +
|
|
97
|
+
this.SECTION_PADDING.RECTANGLE_TO_ROW +
|
|
98
|
+
this.SECTION_HEIGHTS.PER_ROW() * input.length);
|
|
62
99
|
}), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
63
100
|
// Lets us know whether to display the zero data state
|
|
64
101
|
this.empty$ = this.input$.pipe(map(input => input.every(stack => stack.data.length === 0)), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
65
102
|
// What rectangle we are currently hovering over
|
|
66
103
|
this.hoveredRectangle$ = new BehaviorSubject(null);
|
|
104
|
+
// What band we are currently hovering over
|
|
105
|
+
this.hoveredBand$ = new BehaviorSubject(null);
|
|
67
106
|
// Create the metric to display based on the currently hovered rectangle
|
|
68
|
-
this.callout$ = this.
|
|
69
|
-
if (!
|
|
107
|
+
this.callout$ = combineLatest([this.hoveredBand$, this.drawData$]).pipe(map(([hoveredBand, drawData]) => {
|
|
108
|
+
if (!hoveredBand || !drawData)
|
|
70
109
|
return null;
|
|
71
|
-
const { target } =
|
|
110
|
+
const { target } = hoveredBand.event;
|
|
72
111
|
if (!target)
|
|
73
112
|
return null;
|
|
74
113
|
const anchor = target.getBoundingClientRect();
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
value: this.valueFormatter(stackedRowElement.value),
|
|
80
|
-
};
|
|
81
|
-
return { anchor,
|
|
114
|
+
const metrics = drawData.rects
|
|
115
|
+
.filter(rect => rect.rowName === hoveredBand.rowName)
|
|
116
|
+
.map(rect => ({
|
|
117
|
+
label: rect.stackedRowElement.label,
|
|
118
|
+
value: this.valueFormatter(rect.stackedRowElement.value),
|
|
119
|
+
}));
|
|
120
|
+
return { anchor, metrics };
|
|
82
121
|
}), shareReplay({ refCount: true, bufferSize: 1 }));
|
|
83
122
|
}
|
|
84
123
|
set input(v) {
|
|
@@ -122,7 +161,7 @@ export class StackedRowComponent {
|
|
|
122
161
|
// The y-index of the top of the current row
|
|
123
162
|
getTopOfRow(rowIndex) {
|
|
124
163
|
const spaceAboveRows = this.SECTION_PADDING.OUTER_TOP_BOTTOM + this.SECTION_HEIGHTS.X_AXIS_LABEL;
|
|
125
|
-
const aboveRows = rowIndex * this.SECTION_HEIGHTS.PER_ROW;
|
|
164
|
+
const aboveRows = rowIndex * this.SECTION_HEIGHTS.PER_ROW();
|
|
126
165
|
const aboveRowPaddings = rowIndex * this.SECTION_PADDING.BETWEEN_ROW;
|
|
127
166
|
const allAboveRows = aboveRows + aboveRowPaddings;
|
|
128
167
|
return spaceAboveRows + allAboveRows;
|
|
@@ -143,14 +182,20 @@ export class StackedRowComponent {
|
|
|
143
182
|
const xScale = scaleLinear()
|
|
144
183
|
.domain([0, domainMax])
|
|
145
184
|
.range([this.locationOfXAxisZero(), this.locationOfXAxisEnd(width)]);
|
|
146
|
-
|
|
185
|
+
// Setup a linear scale for tick count based on width
|
|
186
|
+
const tickScale = scaleLinear()
|
|
187
|
+
.domain([this.X_TICK_MIN_WIDTH, this.X_TICK_MAX_WIDTH])
|
|
188
|
+
.range([this.X_TICK_COUNT_MIN, this.X_TICK_COUNT_MAX])
|
|
189
|
+
.clamp(true); // Ensures the scale does not go beyond the defined range
|
|
190
|
+
const xtickCountAdjusted = Math.round(tickScale(width));
|
|
191
|
+
const xTicks = xScale.ticks(xtickCountAdjusted);
|
|
147
192
|
const rects = this.createRectanglesFromRows(rowsForDisplay, xScale);
|
|
148
193
|
const rowNamesToDraw = this.getRowNamesToDraw(rowsForDisplay);
|
|
149
194
|
const rowTotalsToDraw = this.getRowTotalsToDraw(rowsForDisplay, width);
|
|
150
195
|
const legendItems = getLegendItems(rowsForDisplay, keysInOrder);
|
|
151
196
|
return {
|
|
152
197
|
legendItems: legendItems,
|
|
153
|
-
rowHeight: this.SECTION_HEIGHTS.PER_RECTANGLE,
|
|
198
|
+
rowHeight: this.SECTION_HEIGHTS.PER_RECTANGLE(),
|
|
154
199
|
rects: rects,
|
|
155
200
|
rowNames: rowNamesToDraw,
|
|
156
201
|
rowTotals: rowTotalsToDraw,
|
|
@@ -166,7 +211,7 @@ export class StackedRowComponent {
|
|
|
166
211
|
currentRow.elementsButStacked.forEach((currentElement, _) => {
|
|
167
212
|
const topOfRow = this.getTopOfRow(rowIndex);
|
|
168
213
|
const rectangleWidth = xScale(currentElement.topline) - xScale(currentElement.baseline);
|
|
169
|
-
const rectangleHeight = this.SECTION_HEIGHTS.PER_RECTANGLE;
|
|
214
|
+
const rectangleHeight = this.SECTION_HEIGHTS.PER_RECTANGLE();
|
|
170
215
|
const rectangleX = xScale(currentElement.baseline);
|
|
171
216
|
const rectangleY = topOfRow + this.SECTION_PADDING.RECTANGLE_TO_ROW;
|
|
172
217
|
const fill = `var(${currentElement.colorToken})`;
|
|
@@ -191,7 +236,7 @@ export class StackedRowComponent {
|
|
|
191
236
|
// The row name looks right if its base is at the base of the associated rectangle
|
|
192
237
|
const rowLabelY = this.getTopOfRow(rowIndex) +
|
|
193
238
|
this.SECTION_PADDING.RECTANGLE_TO_ROW +
|
|
194
|
-
this.SECTION_HEIGHTS.PER_RECTANGLE;
|
|
239
|
+
this.SECTION_HEIGHTS.PER_RECTANGLE() / 2;
|
|
195
240
|
return {
|
|
196
241
|
label: row.rowName,
|
|
197
242
|
x: rowLabelX,
|
|
@@ -206,7 +251,7 @@ export class StackedRowComponent {
|
|
|
206
251
|
// The row totals looks right if its base is at the base of the associated rectangle
|
|
207
252
|
const rowLabelY = this.getTopOfRow(rowIndex) +
|
|
208
253
|
this.SECTION_PADDING.RECTANGLE_TO_ROW +
|
|
209
|
-
this.SECTION_HEIGHTS.PER_RECTANGLE;
|
|
254
|
+
this.SECTION_HEIGHTS.PER_RECTANGLE() / 2;
|
|
210
255
|
return {
|
|
211
256
|
label: this.valueFormatter(row.rowTotal),
|
|
212
257
|
x: rowLabelX,
|
|
@@ -216,10 +261,10 @@ export class StackedRowComponent {
|
|
|
216
261
|
}
|
|
217
262
|
}
|
|
218
263
|
StackedRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: StackedRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
219
|
-
StackedRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: StackedRowComponent, selector: "riv-stacked-row", inputs: { input: "input", width: "width", height: "height", valueFormatter: "valueFormatter", zeroStateMessage: "zeroStateMessage" }, ngImport: i0, template: "<div *ngIf=\"!(empty$ | async); else zeroState\" class=\"container\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let draw\"\n [attr.viewBox]=\"draw.viewBox\"\n >\n <defs>\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"draw.rowHeight\"\n [attr.height]=\"draw.rowHeight\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"draw.rowHeight\"\n [attr.y2]=\"draw.rowHeight\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <g *ngFor=\"let rowNameToDraw of draw.rowNames\">\n <text\n rivSVGTextTruncate\n [text]=\"rowNameToDraw.label\"\n [width]=\"SECTION_WIDTHS.ROW_NAME\"\n class=\"row-title\"\n [attr.x]=\"rowNameToDraw.x\"\n [attr.y]=\"rowNameToDraw.y\"\n ></text>\n </g>\n <g *ngFor=\"let tick of draw.xTicks\">\n <rect\n class=\"tick\"\n [attr.x]=\"draw.xScale(tick)\"\n y=\"0\"\n width=\"1\"\n height=\"100%\"\n ></rect>\n <text\n class=\"tick-label\"\n [attr.x]=\"draw.xScale(tick)\"\n [attr.y]=\"locationOfXAxisTick()\"\n dx=\"4\"\n dy=\"-4\"\n >\n {{ valueFormatter(tick) }}\n </text>\n </g>\n <g
|
|
264
|
+
StackedRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: StackedRowComponent, selector: "riv-stacked-row", inputs: { input: "input", width: "width", height: "height", valueFormatter: "valueFormatter", zeroStateMessage: "zeroStateMessage" }, ngImport: i0, template: "<div *ngIf=\"!(empty$ | async); else zeroState\" class=\"container\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let draw\"\n [attr.viewBox]=\"draw.viewBox\"\n >\n <defs>\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"draw.rowHeight\"\n [attr.height]=\"draw.rowHeight\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"draw.rowHeight\"\n [attr.y2]=\"draw.rowHeight\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <g *ngFor=\"let rowNameToDraw of draw.rowNames\">\n <text\n rivSVGTextTruncate\n [text]=\"rowNameToDraw.label\"\n [width]=\"SECTION_WIDTHS.ROW_NAME\"\n class=\"row-title\"\n [attr.x]=\"rowNameToDraw.x\"\n [attr.y]=\"rowNameToDraw.y\"\n ></text>\n </g>\n <g *ngFor=\"let tick of draw.xTicks\">\n <rect\n class=\"tick\"\n [attr.x]=\"draw.xScale(tick)\"\n y=\"0\"\n width=\"1\"\n height=\"100%\"\n ></rect>\n <text\n class=\"tick-label\"\n [attr.x]=\"draw.xScale(tick)\"\n [attr.y]=\"locationOfXAxisTick()\"\n dx=\"4\"\n dy=\"-4\"\n >\n {{ valueFormatter(tick) }}\n </text>\n </g>\n <g\n *ngFor=\"let rect of draw.rects\"\n (mouseenter)=\"hoveredBand$.next({ rowName: rect.rowName, event: $event })\"\n (mouseleave)=\"hoveredBand$.next(null)\"\n >\n <rect\n class=\"row\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"rect.fill\"\n [class.blurred]=\"\n (hoveredBand$ | async) !== null &&\n (hoveredBand$ | async)?.rowName !== rect.rowName\n \"\n ></rect>\n <rect\n *ngIf=\"rect.striped\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"url(#stripes)\"\n ></rect>\n </g>\n <g *ngFor=\"let rowTotalToDraw of draw.rowTotals\">\n <text\n class=\"row-total\"\n [attr.x]=\"rowTotalToDraw.x\"\n [attr.y]=\"rowTotalToDraw.y\"\n text-anchor=\"end\"\n >\n {{ rowTotalToDraw.label }}\n </text>\n </g>\n </svg>\n <legend *ngIf=\"drawData$ | async; let draw\">\n <riv-legend-item\n *ngFor=\"let item of draw.legendItems\"\n [label]=\"item.label\"\n [colorToken]=\"item.colorToken\"\n [style]=\"item.style ? item.style : 'solid'\"\n ></riv-legend-item>\n </legend>\n</div>\n\n<ng-container *ngIf=\"callout$ | async; let callout\">\n <riv-callout\n *riv-callout\n [anchor]=\"callout.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'bottom-center'\"\n [allowedPositions]=\"[\n 'center-right',\n 'center-left',\n 'top-center',\n 'bottom-center'\n ]\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-metric\" *ngFor=\"let metric of callout.metrics\">\n <div>{{ metric.label }}</div>\n <div class=\"callout-metric-value\">{{ metric.value }}</div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".tick{fill:var(--gray-20)}.tick-label{font-size:var(--type-0-font-size);line-height:var(--type-0-line-height-0);fill:var(--type-light-low-contrast)}.row-title{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2)}.row-total{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2);fill:var(--type-light-low-contrast)}.row{transition:opacity var(--short-transition)}.row.blurred{opacity:.4}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.callout-content{padding:var(--size-large);display:grid;gap:var(--size-medium);grid-template-columns:1fr 1fr}.callout-metric{display:flex;flex-direction:column;gap:var(--size-xsmall);font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}.callout-metric-value{font-weight:var(--font-weight-heavy)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "directive", type: i3.CalloutDirective, selector: "[riv-callout]" }, { kind: "component", type: i4.LegendItemComponent, selector: "riv-legend-item", inputs: ["label", "colorToken", "style", "visibility", "iconTooltip", "clickable"], outputs: ["itemClick"] }, { kind: "directive", type: i5.SVGTextTruncateDirective, selector: "svg text[rivSVGTextTruncate]", inputs: ["text", "width"] }, { kind: "component", type: i6.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
220
265
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: StackedRowComponent, decorators: [{
|
|
221
266
|
type: Component,
|
|
222
|
-
args: [{ selector: 'riv-stacked-row', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"!(empty$ | async); else zeroState\" class=\"container\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let draw\"\n [attr.viewBox]=\"draw.viewBox\"\n >\n <defs>\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"draw.rowHeight\"\n [attr.height]=\"draw.rowHeight\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"draw.rowHeight\"\n [attr.y2]=\"draw.rowHeight\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <g *ngFor=\"let rowNameToDraw of draw.rowNames\">\n <text\n rivSVGTextTruncate\n [text]=\"rowNameToDraw.label\"\n [width]=\"SECTION_WIDTHS.ROW_NAME\"\n class=\"row-title\"\n [attr.x]=\"rowNameToDraw.x\"\n [attr.y]=\"rowNameToDraw.y\"\n ></text>\n </g>\n <g *ngFor=\"let tick of draw.xTicks\">\n <rect\n class=\"tick\"\n [attr.x]=\"draw.xScale(tick)\"\n y=\"0\"\n width=\"1\"\n height=\"100%\"\n ></rect>\n <text\n class=\"tick-label\"\n [attr.x]=\"draw.xScale(tick)\"\n [attr.y]=\"locationOfXAxisTick()\"\n dx=\"4\"\n dy=\"-4\"\n >\n {{ valueFormatter(tick) }}\n </text>\n </g>\n <g
|
|
267
|
+
args: [{ selector: 'riv-stacked-row', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"!(empty$ | async); else zeroState\" class=\"container\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let draw\"\n [attr.viewBox]=\"draw.viewBox\"\n >\n <defs>\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"draw.rowHeight\"\n [attr.height]=\"draw.rowHeight\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"draw.rowHeight\"\n [attr.y2]=\"draw.rowHeight\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <g *ngFor=\"let rowNameToDraw of draw.rowNames\">\n <text\n rivSVGTextTruncate\n [text]=\"rowNameToDraw.label\"\n [width]=\"SECTION_WIDTHS.ROW_NAME\"\n class=\"row-title\"\n [attr.x]=\"rowNameToDraw.x\"\n [attr.y]=\"rowNameToDraw.y\"\n ></text>\n </g>\n <g *ngFor=\"let tick of draw.xTicks\">\n <rect\n class=\"tick\"\n [attr.x]=\"draw.xScale(tick)\"\n y=\"0\"\n width=\"1\"\n height=\"100%\"\n ></rect>\n <text\n class=\"tick-label\"\n [attr.x]=\"draw.xScale(tick)\"\n [attr.y]=\"locationOfXAxisTick()\"\n dx=\"4\"\n dy=\"-4\"\n >\n {{ valueFormatter(tick) }}\n </text>\n </g>\n <g\n *ngFor=\"let rect of draw.rects\"\n (mouseenter)=\"hoveredBand$.next({ rowName: rect.rowName, event: $event })\"\n (mouseleave)=\"hoveredBand$.next(null)\"\n >\n <rect\n class=\"row\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"rect.fill\"\n [class.blurred]=\"\n (hoveredBand$ | async) !== null &&\n (hoveredBand$ | async)?.rowName !== rect.rowName\n \"\n ></rect>\n <rect\n *ngIf=\"rect.striped\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"url(#stripes)\"\n ></rect>\n </g>\n <g *ngFor=\"let rowTotalToDraw of draw.rowTotals\">\n <text\n class=\"row-total\"\n [attr.x]=\"rowTotalToDraw.x\"\n [attr.y]=\"rowTotalToDraw.y\"\n text-anchor=\"end\"\n >\n {{ rowTotalToDraw.label }}\n </text>\n </g>\n </svg>\n <legend *ngIf=\"drawData$ | async; let draw\">\n <riv-legend-item\n *ngFor=\"let item of draw.legendItems\"\n [label]=\"item.label\"\n [colorToken]=\"item.colorToken\"\n [style]=\"item.style ? item.style : 'solid'\"\n ></riv-legend-item>\n </legend>\n</div>\n\n<ng-container *ngIf=\"callout$ | async; let callout\">\n <riv-callout\n *riv-callout\n [anchor]=\"callout.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'bottom-center'\"\n [allowedPositions]=\"[\n 'center-right',\n 'center-left',\n 'top-center',\n 'bottom-center'\n ]\"\n >\n <div class=\"callout-content\">\n <div class=\"callout-metric\" *ngFor=\"let metric of callout.metrics\">\n <div>{{ metric.label }}</div>\n <div class=\"callout-metric-value\">{{ metric.value }}</div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".tick{fill:var(--gray-20)}.tick-label{font-size:var(--type-0-font-size);line-height:var(--type-0-line-height-0);fill:var(--type-light-low-contrast)}.row-title{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2)}.row-total{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2);fill:var(--type-light-low-contrast)}.row{transition:opacity var(--short-transition)}.row.blurred{opacity:.4}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.callout-content{padding:var(--size-large);display:grid;gap:var(--size-medium);grid-template-columns:1fr 1fr}.callout-metric{display:flex;flex-direction:column;gap:var(--size-xsmall);font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}.callout-metric-value{font-weight:var(--font-weight-heavy)}\n"] }]
|
|
223
268
|
}], propDecorators: { input: [{
|
|
224
269
|
type: Input
|
|
225
270
|
}], width: [{
|
|
@@ -231,4 +276,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
231
276
|
}], zeroStateMessage: [{
|
|
232
277
|
type: Input
|
|
233
278
|
}] } });
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2tlZC1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9zdGFja2VkLXJvdy9zdGFja2VkLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3N0YWNrZWQtcm93L3N0YWNrZWQtcm93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEQsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsR0FBRyxFQUNILFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFLTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFRL0IsNkVBQTZFO0FBQzdFLDJCQUEyQjtBQU8zQixNQUFNLE9BQU8sbUJBQW1CO0lBTmhDO1FBT0UsK0VBQStFO1FBQzlELFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FDM0MsRUFBRSxDQUNILENBQUM7UUFTRiw2RUFBNkU7UUFDNUQsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFTLEdBQUcsQ0FBQyxDQUFDO1FBUzNELDhFQUE4RTtRQUM3RCxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQVMsR0FBRyxDQUFDLENBQUM7UUFTNUQsK0VBQStFO1FBRXhFLG1CQUFjLEdBQTBCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUN0RCxxQkFBcUIsQ0FDdEIsQ0FB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ZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnRlcm5TZXQgfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQgeyBTY2FsZUxpbmVhciwgc2NhbGVMaW5lYXIgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUm93RGlzcGxheUluZm8sXG4gIFJvd0xhYmVsLFxuICBSb3dSZWN0YW5nbGUsXG4gIFN0YWNrZWRSb3dEcmF3RGF0YSxcbiAgZ2V0S2V5T3JkZXIsXG4gIGdldExlZ2VuZEl0ZW1zLFxuICBnZXRSb3dEaXNwbGF5SW5mbyxcbiAgc3RhbmRhcmRpemVSb3dTdGFja3MsXG59IGZyb20gJy4vc3RhY2tlZC1yb3cuaGVscGVycyc7XG5cbnR5cGUgQ2FsbG91dE1ldHJpYyA9IHtcbiAgcm93TmFtZTogc3RyaW5nO1xuICBlbGVtZW50TGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn07XG5cbi8vIFRPRE86IG9uY2Ugd2UgdXBncmFkZSB0byBBbmd1bGFyIDE2LCB0aGlzIGNvbXBvbmVudCBjYW4gYmUgY2xlYW5lZCB1cCB3aXRoXG4vLyBzaWduYWxzIGluc3RlYWQgb2YgUnhKUy5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Jpdi1zdGFja2VkLXJvdycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGFja2VkLXJvdy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0YWNrZWQtcm93LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFN0YWNrZWRSb3dDb21wb25lbnQge1xuICAvLyBUaGlzIGlzIHRoZSBsaXN0IG9mIHJvd3Mgd2Ugd2lsbCBkaXNwbGF5LCBpbiB0aGUgb3JkZXIgd2Ugd2lsbCBkaXNwbGF5IHRoZW0uXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5wdXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTdGFja2VkUm93Q29tcG9uZW50LlJvd1N0YWNrW10+KFxuICAgIFtdLFxuICApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlucHV0KHY6IFN0YWNrZWRSb3dDb21wb25lbnQuUm93U3RhY2tbXSkge1xuICAgIHRoaXMuaW5wdXQkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBpbnB1dCgpOiBTdGFja2VkUm93Q29tcG9uZW50LlJvd1N0YWNrW10ge1xuICAgIHJldHVybiB0aGlzLmlucHV0JC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgLy8gV2lkdGggaGVscHMgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSB2aWV3Ym94IHRoaXMgZ3JhcGggaXMgZGlzcGxheWluZyBpbi5cbiAgcHJpdmF0ZSByZWFkb25seSB3aWR0aCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oOTYwKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCB3aWR0aCh2OiBudW1iZXIpIHtcbiAgICB0aGlzLndpZHRoJC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy53aWR0aCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8vIEhlaWdodCBoZWxwcyBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIHZpZXdib3ggdGhpcyBncmFwaCBpcyBkaXNwbGF5aW5nIGluLlxuICBwcml2YXRlIHJlYWRvbmx5IGhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMjU2KTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoZWlnaHQodjogbnVtYmVyKSB7XG4gICAgdGhpcy5oZWlnaHQkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5oZWlnaHQkLmdldFZhbHVlKCk7XG4gIH1cblxuICAvLyBWYWx1ZUZvcm1hdHRlciBkZXRlcm1pbmVzIGhvdyB3ZSBzdHlsZSB0aGUgdmFsdWVzIGluIGEgbWV0cmljIGFuZCB0aGUgeC1heGlzXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YWx1ZUZvcm1hdHRlcjogKHY6IG51bWJlcikgPT4gc3RyaW5nID0gdiA9PiB2LnRvU3RyaW5nKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB6ZXJvU3RhdGVNZXNzYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcbiAgICAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgemVyb1N0YXRlTWVzc2FnZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnplcm9TdGF0ZU1lc3NhZ2UkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCB6ZXJvU3RhdGVNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuemVyb1N0YXRlTWVzc2FnZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qXG4gICAgVGhlIGxheW91dCB3ZSBhcmUgc2hvb3RpbmcgZm9yIGlzOlxuXG4gICAgICAgICAgICAgIHwgICBYIEF4aXMgTGFiZWxzICB8XG4gICAgUm93IE5hbWUgIHwgICBSZWN0YW5nbGVzICAgICB8ICAgVG90YWxzXG4gICovXG4gIHJlYWRvbmx5IFNFQ1RJT05fSEVJR0hUUyA9IHtcbiAgICAvLyBTcGFjZSByZXNlcnZlZCBmb3IgdGhlIHgtYXhpcyBsYWJlbHNcbiAgICBYX0FYSVNfTEFCRUw6IDE0LFxuICAgIC8vIEhlaWdodCBvZiBlYWNoIHJvd1xuICAgIFBFUl9ST1c6IDIwLFxuICAgIC8vIEhlaWdoIG9mIGVhY2ggcmVjdGFuZ2xlXG4gICAgUEVSX1JFQ1RBTkdMRTogOCxcbiAgfTtcblxuICByZWFkb25seSBTRUNUSU9OX1dJRFRIUyA9IHtcbiAgICAvLyBTcGFjZSByZXNlcnZlZCBmb3IgdGhlIG5hbWUgYXQgdGhlIHN0YXJ0IG9mIHRoZSByb3dcbiAgICBST1dfTkFNRTogMTAwLFxuICAgIC8vIFNwYWNlIHJlc2VydmVkIGZvciB0aGUgdG90YWxzIGF0IHRoZSBlbmQgb2YgdGhlIHJvd1xuICAgIFJPV19UT1RBTF9MQUJFTDogNzIsXG4gIH07XG5cbiAgcmVhZG9ubHkgU0VDVElPTl9QQURESU5HID0ge1xuICAgIC8vIFBhZGRpbmcgYmV0d2VlbiBlYWNoIGVkZ2Ugb2YgdGhlIHZpZXdib3ggYW5kIHRoZSBjb250ZW50XG4gICAgT1VURVJfVE9QX0JPVFRPTTogNCxcbiAgICBPVVRFUl9MRUZUX1JJR0hUOiA0LFxuICAgIC8vIFBhZGRpbmcgYmV0d2VlbiB0aGUgYm90dG9tIG9mIG9uZSByb3cgYW5kIHRoZSB0b3Agb2YgdGhlIG5leHQgcm93XG4gICAgQkVUV0VFTl9ST1c6IDQsXG4gICAgLy8gU3BhY2UgYmV0d2VlbiB0aGUgcm93IGFuZCB0aGUgdG9wIG9mIGEgcmVjdGFuZ2xlIGluIHRoYXQgcm93XG4gICAgUkVDVEFOR0xFX1RPX1JPVzogNixcbiAgfTtcblxuICAvLyBUaGUgbnVtYmVyIG9mIFgtYXhpcyBzZWdtZW50cyB0byBjcmVhdGUsIHdpdGggbGFiZWxzIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNlZ21lbnQuXG4gIHJlYWRvbmx5IFhfVElDS19DT1VOVCA9IDg7XG5cbiAgLy8gWmVybyBvbiB0aGUgWCBheGlzIGlzIGFmdGVyIHRoZSBsZWZ0IHBhZGRpbmcgYW5kIHRoZSByb3cgbmFtZS5cbiAgbG9jYXRpb25PZlhBeGlzWmVybygpIHtcbiAgICByZXR1cm4gdGhpcy5TRUNUSU9OX1BBRERJTkcuT1VURVJfTEVGVF9SSUdIVCArIHRoaXMuU0VDVElPTl9XSURUSFMuUk9XX05BTUU7XG4gIH1cbiAgLy8gVGhlIGVuZCBvZiB0aGUgWCBheGlzIGlzIHJpZ2h0IGJlZm9yZSB0aGUgcm93IHRvdGFsIGFuZCB0aGUgcmlnaHQgcGFkZGluZy5cbiAgbG9jYXRpb25PZlhBeGlzRW5kKHdpZHRoOiBudW1iZXIpIHtcbiAgICBjb25zdCBzcGFjZU9uUmlnaHQ6IG51bWJlciA9XG4gICAgICB0aGlzLlNFQ1RJT05fV0lEVEhTLlJPV19UT1RBTF9MQUJFTCArXG4gICAgICB0aGlzLlNFQ1RJT05fUEFERElORy5PVVRFUl9MRUZUX1JJR0hUO1xuICAgIHJldHVybiB3aWR0aCAtIHNwYWNlT25SaWdodDtcbiAgfVxuICAvLyBUaGUgeS1pbmRleCBvZiB0aGUgeC1heGlzIHRpY2tzXG4gIGxvY2F0aW9uT2ZYQXhpc1RpY2soKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX1RPUF9CT1RUT00gKyB0aGlzLlNFQ1RJT05fSEVJR0hUUy5YX0FYSVNfTEFCRUxcbiAgICApO1xuICB9XG4gIC8vIFRoZSB5LWluZGV4IG9mIHRoZSB0b3Agb2YgdGhlIGN1cnJlbnQgcm93XG4gIGdldFRvcE9mUm93KHJvd0luZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzcGFjZUFib3ZlUm93czogbnVtYmVyID1cbiAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX1RPUF9CT1RUT00gKyB0aGlzLlNFQ1RJT05fSEVJR0hUUy5YX0FYSVNfTEFCRUw7XG5cbiAgICBjb25zdCBhYm92ZVJvd3M6IG51bWJlciA9IHJvd0luZGV4ICogdGhpcy5TRUNUSU9OX0hFSUdIVFMuUEVSX1JPVztcbiAgICBjb25zdCBhYm92ZVJvd1BhZGRpbmdzOiBudW1iZXIgPVxuICAgICAgcm93SW5kZXggKiB0aGlzLlNFQ1RJT05fUEFERElORy5CRVRXRUVOX1JPVztcbiAgICBjb25zdCBhbGxBYm92ZVJvd3M6IG51bWJlciA9IGFib3ZlUm93cyArIGFib3ZlUm93UGFkZGluZ3M7XG5cbiAgICByZXR1cm4gc3BhY2VBYm92ZVJvd3MgKyBhbGxBYm92ZVJvd3M7XG4gIH1cblxuICAvLyBDYWxjdWxhdGUgYWxsIHRoZSB2YWx1ZXMgd2UgbmVlZCBmb3IgZGlzcGxheWluZyB0aGUgZ3JhcGggb24gc2NyZWVuLlxuICBnZXREcmF3bkRhdGEoXG4gICAgcm93U3RhY2tzOiBTdGFja2VkUm93Q29tcG9uZW50LlJvd1N0YWNrW10sXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgKSB7XG4gICAgaWYgKHJvd1N0YWNrcy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHZpZXdCb3ggPSBgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWA7XG5cbiAgICBjb25zdCBrZXlzSW5PcmRlcjogSW50ZXJuU2V0PHN0cmluZz4gPSBnZXRLZXlPcmRlcihyb3dTdGFja3MpO1xuICAgIGNvbnN0IHN0YW5kYXJkaXplZFJvd3M6IFN0YWNrZWRSb3dDb21wb25lbnQuUm93U3RhY2tbXSA9XG4gICAgICBzdGFuZGFyZGl6ZVJvd1N0YWNrcyhyb3dTdGFja3MsIGtleXNJbk9yZGVyKTtcbiAgICBjb25zdCByb3dzRm9yRGlzcGxheTogUm93RGlzcGxheUluZm9bXSA9IHN0YW5kYXJkaXplZFJvd3MubWFwKHN0YWNrRGF0YSA9PiB7XG4gICAgICByZXR1cm4gZ2V0Um93RGlzcGxheUluZm8oc3RhY2tEYXRhKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBkb21haW4gc2hvdWxkIGJlIHRoZSBoaWdoZXN0IHRvdGFsIHZhbHVlIGZyb20gdGhlIHJvd3MuXG4gICAgY29uc3QgZG9tYWluTWF4ID0gTWF0aC5tYXgoMCwgLi4ucm93c0ZvckRpc3BsYXkubWFwKHJvdyA9PiByb3cucm93VG90YWwpKTtcbiAgICBjb25zdCB4U2NhbGU6IFNjYWxlTGluZWFyPG51bWJlciwgbnVtYmVyLCBuZXZlcj4gPSBzY2FsZUxpbmVhcigpXG4gICAgICAuZG9tYWluKFswLCBkb21haW5NYXhdKVxuICAgICAgLnJhbmdlKFt0aGlzLmxvY2F0aW9uT2ZYQXhpc1plcm8oKSwgdGhpcy5sb2NhdGlvbk9mWEF4aXNFbmQod2lkdGgpXSk7XG4gICAgY29uc3QgeFRpY2tzID0geFNjYWxlLnRpY2tzKHRoaXMuWF9USUNLX0NPVU5UKTtcblxuICAgIGNvbnN0IHJlY3RzOiBSb3dSZWN0YW5nbGVbXSA9IHRoaXMuY3JlYXRlUmVjdGFuZ2xlc0Zyb21Sb3dzKFxuICAgICAgcm93c0ZvckRpc3BsYXksXG4gICAgICB4U2NhbGUsXG4gICAgKTtcblxuICAgIGNvbnN0IHJvd05hbWVzVG9EcmF3OiBSb3dMYWJlbFtdID0gdGhpcy5nZXRSb3dOYW1lc1RvRHJhdyhyb3dzRm9yRGlzcGxheSk7XG4gICAgY29uc3Qgcm93VG90YWxzVG9EcmF3OiBSb3dMYWJlbFtdID0gdGhpcy5nZXRSb3dUb3RhbHNUb0RyYXcoXG4gICAgICByb3dzRm9yRGlzcGxheSxcbiAgICAgIHdpZHRoLFxuICAgICk7XG5cbiAgICBjb25zdCBsZWdlbmRJdGVtcyA9IGdldExlZ2VuZEl0ZW1zKHJvd3NGb3JEaXNwbGF5LCBrZXlzSW5PcmRlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGVnZW5kSXRlbXM6IGxlZ2VuZEl0ZW1zLFxuICAgICAgcm93SGVpZ2h0OiB0aGlzLlNFQ1RJT05fSEVJR0hUUy5QRVJfUkVDVEFOR0xFLFxuICAgICAgcmVjdHM6IHJlY3RzLFxuICAgICAgcm93TmFtZXM6IHJvd05hbWVzVG9EcmF3LFxuICAgICAgcm93VG90YWxzOiByb3dUb3RhbHNUb0RyYXcsXG4gICAgICB2aWV3Qm94OiB2aWV3Qm94LFxuICAgICAgeFNjYWxlOiB4U2NhbGUsXG4gICAgICB4VGlja3M6IHhUaWNrcyxcbiAgICB9O1xuICB9XG5cbiAgLy8gR2V0IGRhdGEgZm9yIGFsbCB0aGUgcmVjdGFuZ2xlcyBmb3IgYWxsIHRoZSByb3dzXG4gIGNyZWF0ZVJlY3RhbmdsZXNGcm9tUm93cyhcbiAgICBkaXNwbGF5Um93czogUm93RGlzcGxheUluZm9bXSxcbiAgICB4U2NhbGU6IFNjYWxlTGluZWFyPG51bWJlciwgbnVtYmVyLCBuZXZlcj4sXG4gICk6IFJvd1JlY3RhbmdsZVtdIHtcbiAgICBjb25zdCByZWN0YW5nbGVzOiBSb3dSZWN0YW5nbGVbXSA9IFtdO1xuICAgIGRpc3BsYXlSb3dzLmZvckVhY2goKGN1cnJlbnRSb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICBjdXJyZW50Um93LmVsZW1lbnRzQnV0U3RhY2tlZC5mb3JFYWNoKChjdXJyZW50RWxlbWVudCwgXykgPT4ge1xuICAgICAgICBjb25zdCB0b3BPZlJvdzogbnVtYmVyID0gdGhpcy5nZXRUb3BPZlJvdyhyb3dJbmRleCk7XG5cbiAgICAgICAgY29uc3QgcmVjdGFuZ2xlV2lkdGg6IG51bWJlciA9XG4gICAgICAgICAgeFNjYWxlKGN1cnJlbnRFbGVtZW50LnRvcGxpbmUpIC0geFNjYWxlKGN1cnJlbnRFbGVtZW50LmJhc2VsaW5lKTtcbiAgICAgICAgY29uc3QgcmVjdGFuZ2xlSGVpZ2h0OiBudW1iZXIgPSB0aGlzLlNFQ1RJT05fSEVJR0hUUy5QRVJfUkVDVEFOR0xFO1xuXG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZVg6IG51bWJlciA9IHhTY2FsZShjdXJyZW50RWxlbWVudC5iYXNlbGluZSk7XG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZVk6IG51bWJlciA9XG4gICAgICAgICAgdG9wT2ZSb3cgKyB0aGlzLlNFQ1RJT05fUEFERElORy5SRUNUQU5HTEVfVE9fUk9XO1xuXG4gICAgICAgIGNvbnN0IGZpbGwgPSBgdmFyKCR7Y3VycmVudEVsZW1lbnQuY29sb3JUb2tlbn0pYDtcblxuICAgICAgICByZWN0YW5nbGVzLnB1c2goe1xuICAgICAgICAgIHg6IHJlY3RhbmdsZVgsXG4gICAgICAgICAgeTogcmVjdGFuZ2xlWSxcbiAgICAgICAgICB3aWR0aDogcmVjdGFuZ2xlV2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiByZWN0YW5nbGVIZWlnaHQsXG4gICAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgICBzdHJpcGVkOiBjdXJyZW50RWxlbWVudC5zdHlsZSA9PT0gJ3N0cmlwZWQnLFxuICAgICAgICAgIHJvd05hbWU6IGN1cnJlbnRSb3cucm93TmFtZSxcbiAgICAgICAgICBzdGFja2VkUm93RWxlbWVudDogY3VycmVudEVsZW1lbnQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlY3RhbmdsZXM7XG4gIH1cblxuICAvLyBHZXQgZGF0YSBvbiB0aGUgcm93IG5hbWVzIHdlIGFyZSBkcmF3aW5nXG4gIGdldFJvd05hbWVzVG9EcmF3KGRpc3BsYXlSb3dzOiBSb3dEaXNwbGF5SW5mb1tdKTogUm93TGFiZWxbXSB7XG4gICAgcmV0dXJuIGRpc3BsYXlSb3dzLm1hcCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgcm93TGFiZWxYID0gdGhpcy5TRUNUSU9OX1BBRERJTkcuT1VURVJfTEVGVF9SSUdIVDtcbiAgICAgIC8vIFRoZSByb3cgbmFtZSBsb29rcyByaWdodCBpZiBpdHMgYmFzZSBpcyBhdCB0aGUgYmFzZSBvZiB0aGUgYXNzb2NpYXRlZCByZWN0YW5nbGVcbiAgICAgIGNvbnN0IHJvd0xhYmVsWSA9XG4gICAgICAgIHRoaXMuZ2V0VG9wT2ZSb3cocm93SW5kZXgpICtcbiAgICAgICAgdGhpcy5TRUNUSU9OX1BBRERJTkcuUkVDVEFOR0xFX1RPX1JPVyArXG4gICAgICAgIHRoaXMuU0VDVElPTl9IRUlHSFRTLlBFUl9SRUNUQU5HTEU7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiByb3cucm93TmFtZSxcbiAgICAgICAgeDogcm93TGFiZWxYLFxuICAgICAgICB5OiByb3dMYWJlbFksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLy8gR2V0IGRhdGEgb24gdGhlIHJvdyB0b3RhbHMgd2UgYXJlIGRyYXdpbmdcbiAgZ2V0Um93VG90YWxzVG9EcmF3KGRpc3BsYXlSb3dzOiBSb3dEaXNwbGF5SW5mb1tdLCB3aWR0aDogbnVtYmVyKTogUm93TGFiZWxbXSB7XG4gICAgcmV0dXJuIGRpc3BsYXlSb3dzLm1hcCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgcm93TGFiZWxYID0gd2lkdGggLSB0aGlzLlNFQ1RJT05fUEFERElORy5PVVRFUl9MRUZUX1JJR0hUO1xuICAgICAgLy8gVGhlIHJvdyB0b3RhbHMgbG9va3MgcmlnaHQgaWYgaXRzIGJhc2UgaXMgYXQgdGhlIGJhc2Ugb2YgdGhlIGFzc29jaWF0ZWQgcmVjdGFuZ2xlXG4gICAgICBjb25zdCByb3dMYWJlbFkgPVxuICAgICAgICB0aGlzLmdldFRvcE9mUm93KHJvd0luZGV4KSArXG4gICAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLlJFQ1RBTkdMRV9UT19ST1cgK1xuICAgICAgICB0aGlzLlNFQ1RJT05fSEVJR0hUUy5QRVJfUkVDVEFOR0xFO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogdGhpcy52YWx1ZUZvcm1hdHRlcihyb3cucm93VG90YWwpLFxuICAgICAgICB4OiByb3dMYWJlbFgsXG4gICAgICAgIHk6IHJvd0xhYmVsWSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICByZWFkb25seSBkcmF3RGF0YSQ6IE9ic2VydmFibGU8U3RhY2tlZFJvd0RyYXdEYXRhIHwgbnVsbD4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmlucHV0JCxcbiAgICB0aGlzLndpZHRoJCxcbiAgICB0aGlzLmhlaWdodCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaW5wdXQsIHdpZHRoLCBoZWlnaHRdKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREcmF3bkRhdGEoaW5wdXQsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgLy8gTGV0cyB1cyBrbm93IHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgemVybyBkYXRhIHN0YXRlXG4gIHJlYWRvbmx5IGVtcHR5JCA9IHRoaXMuaW5wdXQkLnBpcGUoXG4gICAgbWFwKGlucHV0ID0+IGlucHV0LmV2ZXJ5KHN0YWNrID0+IHN0YWNrLmRhdGEubGVuZ3RoID09PSAwKSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICAvLyBXaGF0IHJlY3RhbmdsZSB3ZSBhcmUgY3VycmVudGx5IGhvdmVyaW5nIG92ZXJcbiAgcmVhZG9ubHkgaG92ZXJlZFJlY3RhbmdsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcbiAgICByZWN0YW5nbGU6IFJvd1JlY3RhbmdsZTtcbiAgICBldmVudDogTW91c2VFdmVudDtcbiAgfSB8IG51bGw+KG51bGwpO1xuXG4gIC8vIENyZWF0ZSB0aGUgbWV0cmljIHRvIGRpc3BsYXkgYmFzZWQgb24gdGhlIGN1cnJlbnRseSBob3ZlcmVkIHJlY3RhbmdsZVxuICByZWFkb25seSBjYWxsb3V0JCA9IHRoaXMuaG92ZXJlZFJlY3RhbmdsZSQucGlwZShcbiAgICBtYXAoaG92ZXJlZFJlY3RhbmdsZSA9PiB7XG4gICAgICBpZiAoIWhvdmVyZWRSZWN0YW5nbGUpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCB7IHRhcmdldCB9ID0gaG92ZXJlZFJlY3RhbmdsZS5ldmVudDtcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IGFuY2hvciA9ICg8U1ZHUmVjdEVsZW1lbnQ+dGFyZ2V0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgY29uc3QgeyByb3dOYW1lLCBzdGFja2VkUm93RWxlbWVudCB9ID0gaG92ZXJlZFJlY3RhbmdsZS5yZWN0YW5nbGU7XG5cbiAgICAgIGNvbnN0IG1ldHJpYzogQ2FsbG91dE1ldHJpYyA9IHtcbiAgICAgICAgcm93TmFtZTogcm93TmFtZSxcbiAgICAgICAgZWxlbWVudExhYmVsOiBzdGFja2VkUm93RWxlbWVudC5sYWJlbCxcbiAgICAgICAgdmFsdWU6IHRoaXMudmFsdWVGb3JtYXR0ZXIoc3RhY2tlZFJvd0VsZW1lbnQudmFsdWUpLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHsgYW5jaG9yLCBtZXRyaWMgfTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFN0YWNrZWRSb3dDb21wb25lbnQge1xuICAvLyBBIHNwZWNpZmljYWxseSBjb2xvcmVkIHNlY3Rpb24gb2Ygb25lIHJvdy5cbiAgZXhwb3J0IHR5cGUgUm93RWxlbWVudCA9IHtcbiAgICBsYWJlbDogc3RyaW5nOyAvLyBMZWdlbmQgZWxlbWVudCBuYW1lXG4gICAgdmFsdWU6IG51bWJlcjtcbiAgICBjb2xvclRva2VuOiBzdHJpbmc7XG4gICAgc3R5bGU/OiAnc29saWQnIHwgJ3N0cmlwZWQnO1xuICB9O1xuICAvLyBUaGUgaW5wdXQgdGhhdCBkZXRlcm1pbmVzIG9uZSByb3cuXG4gIGV4cG9ydCB0eXBlIFJvd1N0YWNrID0ge1xuICAgIHJvd05hbWU6IHN0cmluZztcbiAgICBkYXRhOiBSb3dFbGVtZW50W107XG4gIH07XG59XG4iLCI8ZGl2ICpuZ0lmPVwiIShlbXB0eSQgfCBhc3luYyk7IGVsc2UgemVyb1N0YXRlXCIgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgPHN2Z1xuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICpuZ0lmPVwiZHJhd0RhdGEkIHwgYXN5bmM7IGxldCBkcmF3XCJcbiAgICBbYXR0ci52aWV3Qm94XT1cImRyYXcudmlld0JveFwiXG4gID5cbiAgICA8ZGVmcz5cbiAgICAgIDxwYXR0ZXJuXG4gICAgICAgIGlkPVwic3RyaXBlc1wiXG4gICAgICAgIHg9XCIwXCJcbiAgICAgICAgeT1cIjBcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJkcmF3LnJvd0hlaWdodFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJkcmF3LnJvd0hlaWdodFwiXG4gICAgICAgIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgID5cbiAgICAgICAgPGxpbmVcbiAgICAgICAgICBbYXR0ci54MV09XCIwXCJcbiAgICAgICAgICBbYXR0ci55MV09XCIwXCJcbiAgICAgICAgICBbYXR0ci54Ml09XCJkcmF3LnJvd0hlaWdodFwiXG4gICAgICAgICAgW2F0dHIueTJdPVwiZHJhdy5yb3dIZWlnaHRcIlxuICAgICAgICAgIHN0cm9rZT1cInZhcigtLXdoaXRlLTEwMClcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgICA+PC9saW5lPlxuICAgICAgPC9wYXR0ZXJuPlxuICAgIDwvZGVmcz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgcm93TmFtZVRvRHJhdyBvZiBkcmF3LnJvd05hbWVzXCI+XG4gICAgICA8dGV4dFxuICAgICAgICByaXZTVkdUZXh0VHJ1bmNhdGVcbiAgICAgICAgW3RleHRdPVwicm93TmFtZVRvRHJhdy5sYWJlbFwiXG4gICAgICAgIFt3aWR0aF09XCJTRUNUSU9OX1dJRFRIUy5ST1dfTkFNRVwiXG4gICAgICAgIGNsYXNzPVwicm93LXRpdGxlXCJcbiAgICAgICAgW2F0dHIueF09XCJyb3dOYW1lVG9EcmF3LnhcIlxuICAgICAgICBbYXR0ci55XT1cInJvd05hbWVUb0RyYXcueVwiXG4gICAgICA+PC90ZXh0PlxuICAgIDwvZz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkcmF3LnhUaWNrc1wiPlxuICAgICAgPHJlY3RcbiAgICAgICAgY2xhc3M9XCJ0aWNrXCJcbiAgICAgICAgW2F0dHIueF09XCJkcmF3LnhTY2FsZSh0aWNrKVwiXG4gICAgICAgIHk9XCIwXCJcbiAgICAgICAgd2lkdGg9XCIxXCJcbiAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICA+PC9yZWN0PlxuICAgICAgPHRleHRcbiAgICAgICAgY2xhc3M9XCJ0aWNrLWxhYmVsXCJcbiAgICAgICAgW2F0dHIueF09XCJkcmF3LnhTY2FsZSh0aWNrKVwiXG4gICAgICAgIFthdHRyLnldPVwibG9jYXRpb25PZlhBeGlzVGljaygpXCJcbiAgICAgICAgZHg9XCI0XCJcbiAgICAgICAgZHk9XCItNFwiXG4gICAgICA+XG4gICAgICAgIHt7IHZhbHVlRm9ybWF0dGVyKHRpY2spIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCByZWN0IG9mIGRyYXcucmVjdHNcIj5cbiAgICAgIDxyZWN0XG4gICAgICAgIGNsYXNzPVwicm93XCJcbiAgICAgICAgW2F0dHIueF09XCJyZWN0LnhcIlxuICAgICAgICBbYXR0ci55XT1cInJlY3QueVwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwicmVjdC5oZWlnaHRcIlxuICAgICAgICBbYXR0ci5maWxsXT1cInJlY3QuZmlsbFwiXG4gICAgICAgIFtjbGFzcy5ibHVycmVkXT1cIlxuICAgICAgICAgIChob3ZlcmVkUmVjdGFuZ2xlJCB8IGFzeW5jKSAhPT0gbnVsbCAmJlxuICAgICAgICAgIChob3ZlcmVkUmVjdGFuZ2xlJCB8IGFzeW5jKT8ucmVjdGFuZ2xlPy5yb3dOYW1lICE9PSByZWN0LnJvd05hbWVcbiAgICAgICAgXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwiXG4gICAgICAgICAgaG92ZXJlZFJlY3RhbmdsZSQubmV4dCh7IHJlY3RhbmdsZTogcmVjdCwgZXZlbnQ6ICRldmVudCB9KVxuICAgICAgICBcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkUmVjdGFuZ2xlJC5uZXh0KG51bGwpXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8cmVjdFxuICAgICAgICAqbmdJZj1cInJlY3Quc3RyaXBlZFwiXG4gICAgICAgIFthdHRyLnhdPVwicmVjdC54XCJcbiAgICAgICAgW2F0dHIueV09XCJyZWN0LnlcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJyZWN0LndpZHRoXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInJlY3QuaGVpZ2h0XCJcbiAgICAgICAgZmlsbD1cInVybCgjc3RyaXBlcylcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICBob3ZlcmVkUmVjdGFuZ2xlJC5uZXh0KHsgcmVjdGFuZ2xlOiByZWN0LCBldmVudDogJGV2ZW50IH0pXG4gICAgICAgIFwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRSZWN0YW5nbGUkLm5leHQobnVsbClcIlxuICAgICAgPjwvcmVjdD5cbiAgICA8L2c+XG4gICAgPGcgKm5nRm9yPVwibGV0IHJvd1RvdGFsVG9EcmF3IG9mIGRyYXcucm93VG90YWxzXCI+XG4gICAgICA8dGV4dFxuICAgICAgICBjbGFzcz1cInJvdy10b3RhbFwiXG4gICAgICAgIFthdHRyLnhdPVwicm93VG90YWxUb0RyYXcueFwiXG4gICAgICAgIFthdHRyLnldPVwicm93VG90YWxUb0RyYXcueVwiXG4gICAgICAgIHRleHQtYW5jaG9yPVwiZW5kXCJcbiAgICAgID5cbiAgICAgICAge3sgcm93VG90YWxUb0RyYXcubGFiZWwgfX1cbiAgICAgIDwvdGV4dD5cbiAgICA8L2c+XG4gIDwvc3ZnPlxuICA8bGVnZW5kICpuZ0lmPVwiZHJhd0RhdGEkIHwgYXN5bmM7IGxldCBkcmF3XCI+XG4gICAgPHJpdi1sZWdlbmQtaXRlbVxuICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZHJhdy5sZWdlbmRJdGVtc1wiXG4gICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICBbY29sb3JUb2tlbl09XCJpdGVtLmNvbG9yVG9rZW5cIlxuICAgICAgW3N0eWxlXT1cIml0ZW0uc3R5bGUgPyBpdGVtLnN0eWxlIDogJ3NvbGlkJ1wiXG4gICAgPjwvcml2LWxlZ2VuZC1pdGVtPlxuICA8L2xlZ2VuZD5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiY2FsbG91dCQgfCBhc3luYzsgbGV0IGNhbGxvdXRcIj5cbiAgPHJpdi1jYWxsb3V0XG4gICAgKnJpdi1jYWxsb3V0XG4gICAgW2FuY2hvcl09XCJjYWxsb3V0LmFuY2hvclwiXG4gICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCInY2VudGVyLXJpZ2h0J1wiXG4gICAgW2FsbG93ZWRQb3NpdGlvbnNdPVwiW1xuICAgICAgJ2NlbnRlci1yaWdodCcsXG4gICAgICAnY2VudGVyLWxlZnQnLFxuICAgICAgJ3RvcC1jZW50ZXInLFxuICAgICAgJ2JvdHRvbS1jZW50ZXInXG4gICAgXVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1jb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC10aXRsZVwiPnt7IGNhbGxvdXQubWV0cmljLnJvd05hbWUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LW1ldHJpY1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1sYWJlbFwiPnt7IGNhbGxvdXQubWV0cmljLmVsZW1lbnRMYWJlbCB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1tZXRyaWMtdmFsdWVcIj57eyBjYWxsb3V0Lm1ldHJpYy52YWx1ZSB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvcml2LWNhbGxvdXQ+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICN6ZXJvU3RhdGU+XG4gIDxyaXYtemVyby1zdGF0ZSBbbWVzc2FnZV09XCJ6ZXJvU3RhdGVNZXNzYWdlXCI+PC9yaXYtemVyby1zdGF0ZT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2tlZC1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9zdGFja2VkLXJvdy9zdGFja2VkLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3N0YWNrZWQtcm93L3N0YWNrZWQtcm93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEQsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsR0FBRyxFQUNILFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFLTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixvQkFBb0IsR0FDckIsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFRL0IsNkVBQTZFO0FBQzdFLDJCQUEyQjtBQU8zQixNQUFNLE9BQU8sbUJBQW1CO0lBTmhDO1FBT0UsK0VBQStFO1FBQzlELFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FDM0MsRUFBRSxDQUNILENBQUM7UUFTRiw2RUFBNkU7UUFDNUQsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFTLEdBQUcsQ0FBQyxDQUFDO1FBUzNELDhFQUE4RTtRQUM3RCxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBU3BFLCtFQUErRTtRQUV4RSxtQkFBYyxHQUEwQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVoRCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FDdEQscUJBQXFCLENBQ3RCLENB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LG1CQUFtQjtrQkFOL0IsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTTs4QkFRcEMsS0FBSztzQkFEZixLQUFLO2dCQVdLLEtBQUs7c0JBRGYsS0FBSztnQkFXSyxNQUFNO3NCQURoQixLQUFLO2dCQVVDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBT0ssZ0JBQWdCO3NCQUQxQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEludGVyblNldCB9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCB7IFNjYWxlTGluZWFyLCBzY2FsZUxpbmVhciB9IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgY29tYmluZUxhdGVzdCxcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBSb3dEaXNwbGF5SW5mbyxcbiAgUm93TGFiZWwsXG4gIFJvd1JlY3RhbmdsZSxcbiAgU3RhY2tlZFJvd0RyYXdEYXRhLFxuICBnZXRLZXlPcmRlcixcbiAgZ2V0TGVnZW5kSXRlbXMsXG4gIGdldFJvd0Rpc3BsYXlJbmZvLFxuICBzdGFuZGFyZGl6ZVJvd1N0YWNrcyxcbn0gZnJvbSAnLi9zdGFja2VkLXJvdy5oZWxwZXJzJztcblxudHlwZSBDYWxsb3V0TWV0cmljID0ge1xuICByb3dOYW1lOiBzdHJpbmc7XG4gIGVsZW1lbnRMYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufTtcblxuLy8gVE9ETzogb25jZSB3ZSB1cGdyYWRlIHRvIEFuZ3VsYXIgMTYsIHRoaXMgY29tcG9uZW50IGNhbiBiZSBjbGVhbmVkIHVwIHdpdGhcbi8vIHNpZ25hbHMgaW5zdGVhZCBvZiBSeEpTLlxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXN0YWNrZWQtcm93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0YWNrZWQtcm93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RhY2tlZC1yb3cuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU3RhY2tlZFJvd0NvbXBvbmVudCB7XG4gIC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2Ygcm93cyB3ZSB3aWxsIGRpc3BsYXksIGluIHRoZSBvcmRlciB3ZSB3aWxsIGRpc3BsYXkgdGhlbS5cbiAgcHJpdmF0ZSByZWFkb25seSBpbnB1dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0YWNrZWRSb3dDb21wb25lbnQuUm93U3RhY2tbXT4oXG4gICAgW10sXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW5wdXQodjogU3RhY2tlZFJvd0NvbXBvbmVudC5Sb3dTdGFja1tdKSB7XG4gICAgdGhpcy5pbnB1dCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlucHV0KCk6IFN0YWNrZWRSb3dDb21wb25lbnQuUm93U3RhY2tbXSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXQkLmdldFZhbHVlKCk7XG4gIH1cblxuICAvLyBXaWR0aCBoZWxwcyBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIHZpZXdib3ggdGhpcyBncmFwaCBpcyBkaXNwbGF5aW5nIGluLlxuICBwcml2YXRlIHJlYWRvbmx5IHdpZHRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPig5NjApO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHdpZHRoKHY6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGgkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCB3aWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLndpZHRoJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgLy8gSGVpZ2h0IGhlbHBzIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgdmlld2JveCB0aGlzIGdyYXBoIGlzIGRpc3BsYXlpbmcgaW4uXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaGVpZ2h0KHY6IG51bWJlciB8IG51bGwpIHtcbiAgICB0aGlzLmhlaWdodCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhlaWdodCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5oZWlnaHQkLmdldFZhbHVlKCk7XG4gIH1cblxuICAvLyBWYWx1ZUZvcm1hdHRlciBkZXRlcm1pbmVzIGhvdyB3ZSBzdHlsZSB0aGUgdmFsdWVzIGluIGEgbWV0cmljIGFuZCB0aGUgeC1heGlzXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YWx1ZUZvcm1hdHRlcjogKHY6IG51bWJlcikgPT4gc3RyaW5nID0gdiA9PiB2LnRvU3RyaW5nKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB6ZXJvU3RhdGVNZXNzYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcbiAgICAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgemVyb1N0YXRlTWVzc2FnZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnplcm9TdGF0ZU1lc3NhZ2UkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCB6ZXJvU3RhdGVNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuemVyb1N0YXRlTWVzc2FnZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8qXG4gICAgVGhlIGxheW91dCB3ZSBhcmUgc2hvb3RpbmcgZm9yIGlzOlxuXG4gICAgICAgICAgICAgIHwgICBYIEF4aXMgTGFiZWxzICB8XG4gICAgUm93IE5hbWUgIHwgICBSZWN0YW5nbGVzICAgICB8ICAgVG90YWxzXG4gICovXG4gIHJlYWRvbmx5IFJFQ1RBTkdMRV9IRUlHSFRTID0ge1xuICAgIE1JTl9IRUlHSFQ6IDEyLCAvLyBTZXRzIHRoZSBzbWFsbGVzdCBzaXplIGEgcm93IGNhbiBzaHJpbmsgdG9cbiAgICBNQVhfSEVJR0hUOiA0MiwgLy8gU2V0cyB0aGUgbGFyZ2VzdCBzaXplIGEgcm93IGNhbiBleHBhbmQgdG9cbiAgfTtcblxuICByZWFkb25seSBTRUNUSU9OX0hFSUdIVFMgPSB7XG4gICAgLy8gU3BhY2UgcmVzZXJ2ZWQgZm9yIHRoZSB4LWF4aXMgbGFiZWxzXG4gICAgWF9BWElTX0xBQkVMOiAxNCxcbiAgICAvLyBIZWlnaHQgb2YgZWFjaCByb3dcbiAgICBQRVJfUk9XOiAoKTogbnVtYmVyID0+IHtcbiAgICAgIC8vT25seSB1c2UgaGVpZ2h0IGlmIHNwZWNpZmllZFxuICAgICAgaWYgKHRoaXMuaW5wdXQubGVuZ3RoICYmIHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgIGxldCByb3dIZWlnaHQgPVxuICAgICAgICAgICh0aGlzLmhlaWdodCAtXG4gICAgICAgICAgICB0aGlzLlNFQ1RJT05fSEVJR0hUUy5YX0FYSVNfTEFCRUwgLVxuICAgICAgICAgICAgdGhpcy5TRUNUSU9OX1BBRERJTkcuT1VURVJfVE9QX0JPVFRPTSAtXG4gICAgICAgICAgICB0aGlzLlNFQ1RJT05fUEFERElORy5SRUNUQU5HTEVfVE9fUk9XKSAvXG4gICAgICAgICAgdGhpcy5pbnB1dC5sZW5ndGg7IC8vIGNhbGN1bGF0ZSBiYXNlIHJvdyBoZWlnaHRcbiAgICAgICAgLy8gQ2xhbXBpbmcgdGhlIHJvdyBoZWlnaHQgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggaGVpZ2h0c1xuICAgICAgICByZXR1cm4gTWF0aC5taW4oXG4gICAgICAgICAgTWF0aC5tYXgocm93SGVpZ2h0LCB0aGlzLlJFQ1RBTkdMRV9IRUlHSFRTLk1JTl9IRUlHSFQpLFxuICAgICAgICAgIHRoaXMuUkVDVEFOR0xFX0hFSUdIVFMuTUFYX0hFSUdIVCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuUkVDVEFOR0xFX0hFSUdIVFMuTUlOX0hFSUdIVCArIHRoaXMuU0VDVElPTl9QQURESU5HLkJFVFdFRU5fUk9XXG4gICAgICApOyAvLyBEZWZhdWx0IGlmIG5vIGlucHV0XG4gICAgfSxcbiAgICAvLyBNYXggSGVpZ2h0IG9mIGVhY2ggcmVjdGFuZ2xlXG4gICAgUEVSX1JFQ1RBTkdMRTogKCk6IG51bWJlciA9PiB7XG4gICAgICAvL09ubHkgdXNlIGhlaWdodCBpZiBzcGVjaWZpZWRcbiAgICAgIGlmICh0aGlzLmlucHV0Lmxlbmd0aCAmJiB0aGlzLmhlaWdodCkge1xuICAgICAgICBsZXQgcmVjdGFuZ2xlSGVpZ2h0ID1cbiAgICAgICAgICAodGhpcy5oZWlnaHQgLVxuICAgICAgICAgICAgdGhpcy5TRUNUSU9OX0hFSUdIVFMuWF9BWElTX0xBQkVMIC1cbiAgICAgICAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX1RPUF9CT1RUT00gLVxuICAgICAgICAgICAgdGhpcy5TRUNUSU9OX1BBRERJTkcuUkVDVEFOR0xFX1RPX1JPVykgL1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5sZW5ndGggLVxuICAgICAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLkJFVFdFRU5fUk9XOyAvLyBjYWxjdWxhdGUgYmFzZSByZWN0YW5nbGUgaGVpZ2h0XG4gICAgICAgIC8vIENsYW1waW5nIHRoZSByZWN0YW5nbGUgaGVpZ2h0IGJldHdlZW4gdGhlIG1pbiBhbmQgbWF4IGhlaWdodHNcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKFxuICAgICAgICAgIE1hdGgubWF4KHJlY3RhbmdsZUhlaWdodCwgdGhpcy5SRUNUQU5HTEVfSEVJR0hUUy5NSU5fSEVJR0hUKSxcbiAgICAgICAgICB0aGlzLlJFQ1RBTkdMRV9IRUlHSFRTLk1BWF9IRUlHSFQsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5SRUNUQU5HTEVfSEVJR0hUUy5NSU5fSEVJR0hUOyAvLyBEZWZhdWx0IGlmIG5vIGlucHV0XG4gICAgfSxcbiAgfTtcblxuICByZWFkb25seSBTRUNUSU9OX1dJRFRIUyA9IHtcbiAgICAvLyBTcGFjZSByZXNlcnZlZCBmb3IgdGhlIG5hbWUgYXQgdGhlIHN0YXJ0IG9mIHRoZSByb3dcbiAgICBST1dfTkFNRTogMTAwLFxuICAgIC8vIFNwYWNlIHJlc2VydmVkIGZvciB0aGUgdG90YWxzIGF0IHRoZSBlbmQgb2YgdGhlIHJvd1xuICAgIFJPV19UT1RBTF9MQUJFTDogNzIsXG4gIH07XG5cbiAgcmVhZG9ubHkgU0VDVElPTl9QQURESU5HID0ge1xuICAgIC8vIFBhZGRpbmcgYmV0d2VlbiBlYWNoIGVkZ2Ugb2YgdGhlIHZpZXdib3ggYW5kIHRoZSBjb250ZW50XG4gICAgT1VURVJfVE9QX0JPVFRPTTogNCxcbiAgICBPVVRFUl9MRUZUX1JJR0hUOiA0LFxuICAgIC8vIFBhZGRpbmcgYmV0d2VlbiB0aGUgYm90dG9tIG9mIG9uZSByb3cgYW5kIHRoZSB0b3Agb2YgdGhlIG5leHQgcm93XG4gICAgQkVUV0VFTl9ST1c6IDQsXG4gICAgLy8gU3BhY2UgYmV0d2VlbiB0aGUgcm93IGFuZCB0aGUgdG9wIG9mIGEgcmVjdGFuZ2xlIGluIHRoYXQgcm93XG4gICAgUkVDVEFOR0xFX1RPX1JPVzogNixcbiAgfTtcblxuICAvLyBUaGUgbnVtYmVyIG9mIFgtYXhpcyBzZWdtZW50cyB0byBjcmVhdGUsIHdpdGggbGFiZWxzIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNlZ21lbnQuXG4gIHJlYWRvbmx5IFhfVElDS19DT1VOVF9NQVggPSA4O1xuICByZWFkb25seSBYX1RJQ0tfQ09VTlRfTUlOID0gMztcbiAgcmVhZG9ubHkgWF9USUNLX01BWF9XSURUSCA9IDkwMDtcbiAgcmVhZG9ubHkgWF9USUNLX01JTl9XSURUSCA9IDQwMDtcblxuICAvLyBaZXJvIG9uIHRoZSBYIGF4aXMgaXMgYWZ0ZXIgdGhlIGxlZnQgcGFkZGluZyBhbmQgdGhlIHJvdyBuYW1lLlxuICBsb2NhdGlvbk9mWEF4aXNaZXJvKCkge1xuICAgIHJldHVybiB0aGlzLlNFQ1RJT05fUEFERElORy5PVVRFUl9MRUZUX1JJR0hUICsgdGhpcy5TRUNUSU9OX1dJRFRIUy5ST1dfTkFNRTtcbiAgfVxuICAvLyBUaGUgZW5kIG9mIHRoZSBYIGF4aXMgaXMgcmlnaHQgYmVmb3JlIHRoZSByb3cgdG90YWwgYW5kIHRoZSByaWdodCBwYWRkaW5nLlxuICBsb2NhdGlvbk9mWEF4aXNFbmQod2lkdGg6IG51bWJlcikge1xuICAgIGNvbnN0IHNwYWNlT25SaWdodDogbnVtYmVyID1cbiAgICAgIHRoaXMuU0VDVElPTl9XSURUSFMuUk9XX1RPVEFMX0xBQkVMICtcbiAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX0xFRlRfUklHSFQ7XG4gICAgcmV0dXJuIHdpZHRoIC0gc3BhY2VPblJpZ2h0O1xuICB9XG4gIC8vIFRoZSB5LWluZGV4IG9mIHRoZSB4LWF4aXMgdGlja3NcbiAgbG9jYXRpb25PZlhBeGlzVGljaygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5TRUNUSU9OX1BBRERJTkcuT1VURVJfVE9QX0JPVFRPTSArIHRoaXMuU0VDVElPTl9IRUlHSFRTLlhfQVhJU19MQUJFTFxuICAgICk7XG4gIH1cbiAgLy8gVGhlIHktaW5kZXggb2YgdGhlIHRvcCBvZiB0aGUgY3VycmVudCByb3dcbiAgZ2V0VG9wT2ZSb3cocm93SW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHNwYWNlQWJvdmVSb3dzOiBudW1iZXIgPVxuICAgICAgdGhpcy5TRUNUSU9OX1BBRERJTkcuT1VURVJfVE9QX0JPVFRPTSArIHRoaXMuU0VDVElPTl9IRUlHSFRTLlhfQVhJU19MQUJFTDtcblxuICAgIGNvbnN0IGFib3ZlUm93czogbnVtYmVyID0gcm93SW5kZXggKiB0aGlzLlNFQ1RJT05fSEVJR0hUUy5QRVJfUk9XKCk7XG4gICAgY29uc3QgYWJvdmVSb3dQYWRkaW5nczogbnVtYmVyID1cbiAgICAgIHJvd0luZGV4ICogdGhpcy5TRUNUSU9OX1BBRERJTkcuQkVUV0VFTl9ST1c7XG4gICAgY29uc3QgYWxsQWJvdmVSb3dzOiBudW1iZXIgPSBhYm92ZVJvd3MgKyBhYm92ZVJvd1BhZGRpbmdzO1xuXG4gICAgcmV0dXJuIHNwYWNlQWJvdmVSb3dzICsgYWxsQWJvdmVSb3dzO1xuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIGFsbCB0aGUgdmFsdWVzIHdlIG5lZWQgZm9yIGRpc3BsYXlpbmcgdGhlIGdyYXBoIG9uIHNjcmVlbi5cbiAgZ2V0RHJhd25EYXRhKFxuICAgIHJvd1N0YWNrczogU3RhY2tlZFJvd0NvbXBvbmVudC5Sb3dTdGFja1tdLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICkge1xuICAgIGlmIChyb3dTdGFja3MubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB2aWV3Qm94ID0gYDAgMCAke3dpZHRofSAke2hlaWdodH1gO1xuXG4gICAgY29uc3Qga2V5c0luT3JkZXI6IEludGVyblNldDxzdHJpbmc+ID0gZ2V0S2V5T3JkZXIocm93U3RhY2tzKTtcbiAgICBjb25zdCBzdGFuZGFyZGl6ZWRSb3dzOiBTdGFja2VkUm93Q29tcG9uZW50LlJvd1N0YWNrW10gPVxuICAgICAgc3RhbmRhcmRpemVSb3dTdGFja3Mocm93U3RhY2tzLCBrZXlzSW5PcmRlcik7XG4gICAgY29uc3Qgcm93c0ZvckRpc3BsYXk6IFJvd0Rpc3BsYXlJbmZvW10gPSBzdGFuZGFyZGl6ZWRSb3dzLm1hcChzdGFja0RhdGEgPT4ge1xuICAgICAgcmV0dXJuIGdldFJvd0Rpc3BsYXlJbmZvKHN0YWNrRGF0YSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZG9tYWluIHNob3VsZCBiZSB0aGUgaGlnaGVzdCB0b3RhbCB2YWx1ZSBmcm9tIHRoZSByb3dzLlxuICAgIGNvbnN0IGRvbWFpbk1heCA9IE1hdGgubWF4KDAsIC4uLnJvd3NGb3JEaXNwbGF5Lm1hcChyb3cgPT4gcm93LnJvd1RvdGFsKSk7XG4gICAgY29uc3QgeFNjYWxlOiBTY2FsZUxpbmVhcjxudW1iZXIsIG51bWJlciwgbmV2ZXI+ID0gc2NhbGVMaW5lYXIoKVxuICAgICAgLmRvbWFpbihbMCwgZG9tYWluTWF4XSlcbiAgICAgIC5yYW5nZShbdGhpcy5sb2NhdGlvbk9mWEF4aXNaZXJvKCksIHRoaXMubG9jYXRpb25PZlhBeGlzRW5kKHdpZHRoKV0pO1xuXG4gICAgLy8gU2V0dXAgYSBsaW5lYXIgc2NhbGUgZm9yIHRpY2sgY291bnQgYmFzZWQgb24gd2lkdGhcbiAgICBjb25zdCB0aWNrU2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAuZG9tYWluKFt0aGlzLlhfVElDS19NSU5fV0lEVEgsIHRoaXMuWF9USUNLX01BWF9XSURUSF0pXG4gICAgICAucmFuZ2UoW3RoaXMuWF9USUNLX0NPVU5UX01JTiwgdGhpcy5YX1RJQ0tfQ09VTlRfTUFYXSlcbiAgICAgIC5jbGFtcCh0cnVlKTsgLy8gRW5zdXJlcyB0aGUgc2NhbGUgZG9lcyBub3QgZ28gYmV5b25kIHRoZSBkZWZpbmVkIHJhbmdlXG5cbiAgICBjb25zdCB4dGlja0NvdW50QWRqdXN0ZWQgPSBNYXRoLnJvdW5kKHRpY2tTY2FsZSh3aWR0aCkpO1xuICAgIGNvbnN0IHhUaWNrcyA9IHhTY2FsZS50aWNrcyh4dGlja0NvdW50QWRqdXN0ZWQpO1xuXG4gICAgY29uc3QgcmVjdHM6IFJvd1JlY3RhbmdsZVtdID0gdGhpcy5jcmVhdGVSZWN0YW5nbGVzRnJvbVJvd3MoXG4gICAgICByb3dzRm9yRGlzcGxheSxcbiAgICAgIHhTY2FsZSxcbiAgICApO1xuXG4gICAgY29uc3Qgcm93TmFtZXNUb0RyYXc6IFJvd0xhYmVsW10gPSB0aGlzLmdldFJvd05hbWVzVG9EcmF3KHJvd3NGb3JEaXNwbGF5KTtcbiAgICBjb25zdCByb3dUb3RhbHNUb0RyYXc6IFJvd0xhYmVsW10gPSB0aGlzLmdldFJvd1RvdGFsc1RvRHJhdyhcbiAgICAgIHJvd3NGb3JEaXNwbGF5LFxuICAgICAgd2lkdGgsXG4gICAgKTtcblxuICAgIGNvbnN0IGxlZ2VuZEl0ZW1zID0gZ2V0TGVnZW5kSXRlbXMocm93c0ZvckRpc3BsYXksIGtleXNJbk9yZGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICBsZWdlbmRJdGVtczogbGVnZW5kSXRlbXMsXG4gICAgICByb3dIZWlnaHQ6IHRoaXMuU0VDVElPTl9IRUlHSFRTLlBFUl9SRUNUQU5HTEUoKSxcbiAgICAgIHJlY3RzOiByZWN0cyxcbiAgICAgIHJvd05hbWVzOiByb3dOYW1lc1RvRHJhdyxcbiAgICAgIHJvd1RvdGFsczogcm93VG90YWxzVG9EcmF3LFxuICAgICAgdmlld0JveDogdmlld0JveCxcbiAgICAgIHhTY2FsZTogeFNjYWxlLFxuICAgICAgeFRpY2tzOiB4VGlja3MsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEdldCBkYXRhIGZvciBhbGwgdGhlIHJlY3RhbmdsZXMgZm9yIGFsbCB0aGUgcm93c1xuICBjcmVhdGVSZWN0YW5nbGVzRnJvbVJvd3MoXG4gICAgZGlzcGxheVJvd3M6IFJvd0Rpc3BsYXlJbmZvW10sXG4gICAgeFNjYWxlOiBTY2FsZUxpbmVhcjxudW1iZXIsIG51bWJlciwgbmV2ZXI+LFxuICApOiBSb3dSZWN0YW5nbGVbXSB7XG4gICAgY29uc3QgcmVjdGFuZ2xlczogUm93UmVjdGFuZ2xlW10gPSBbXTtcbiAgICBkaXNwbGF5Um93cy5mb3JFYWNoKChjdXJyZW50Um93LCByb3dJbmRleCkgPT4ge1xuICAgICAgY3VycmVudFJvdy5lbGVtZW50c0J1dFN0YWNrZWQuZm9yRWFjaCgoY3VycmVudEVsZW1lbnQsIF8pID0+IHtcbiAgICAgICAgY29uc3QgdG9wT2ZSb3c6IG51bWJlciA9IHRoaXMuZ2V0VG9wT2ZSb3cocm93SW5kZXgpO1xuXG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZVdpZHRoOiBudW1iZXIgPVxuICAgICAgICAgIHhTY2FsZShjdXJyZW50RWxlbWVudC50b3BsaW5lKSAtIHhTY2FsZShjdXJyZW50RWxlbWVudC5iYXNlbGluZSk7XG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZUhlaWdodDogbnVtYmVyID0gdGhpcy5TRUNUSU9OX0hFSUdIVFMuUEVSX1JFQ1RBTkdMRSgpO1xuXG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZVg6IG51bWJlciA9IHhTY2FsZShjdXJyZW50RWxlbWVudC5iYXNlbGluZSk7XG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZVk6IG51bWJlciA9XG4gICAgICAgICAgdG9wT2ZSb3cgKyB0aGlzLlNFQ1RJT05fUEFERElORy5SRUNUQU5HTEVfVE9fUk9XO1xuXG4gICAgICAgIGNvbnN0IGZpbGwgPSBgdmFyKCR7Y3VycmVudEVsZW1lbnQuY29sb3JUb2tlbn0pYDtcblxuICAgICAgICByZWN0YW5nbGVzLnB1c2goe1xuICAgICAgICAgIHg6IHJlY3RhbmdsZVgsXG4gICAgICAgICAgeTogcmVjdGFuZ2xlWSxcbiAgICAgICAgICB3aWR0aDogcmVjdGFuZ2xlV2lkdGgsXG4gICAgICAgICAgaGVpZ2h0OiByZWN0YW5nbGVIZWlnaHQsXG4gICAgICAgICAgZmlsbDogZmlsbCxcbiAgICAgICAgICBzdHJpcGVkOiBjdXJyZW50RWxlbWVudC5zdHlsZSA9PT0gJ3N0cmlwZWQnLFxuICAgICAgICAgIHJvd05hbWU6IGN1cnJlbnRSb3cucm93TmFtZSxcbiAgICAgICAgICBzdGFja2VkUm93RWxlbWVudDogY3VycmVudEVsZW1lbnQsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlY3RhbmdsZXM7XG4gIH1cblxuICAvLyBHZXQgZGF0YSBvbiB0aGUgcm93IG5hbWVzIHdlIGFyZSBkcmF3aW5nXG4gIGdldFJvd05hbWVzVG9EcmF3KGRpc3BsYXlSb3dzOiBSb3dEaXNwbGF5SW5mb1tdKTogUm93TGFiZWxbXSB7XG4gICAgcmV0dXJuIGRpc3BsYXlSb3dzLm1hcCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgcm93TGFiZWxYID0gdGhpcy5TRUNUSU9OX1BBRERJTkcuT1VURVJfTEVGVF9SSUdIVDtcbiAgICAgIC8vIFRoZSByb3cgbmFtZSBsb29rcyByaWdodCBpZiBpdHMgYmFzZSBpcyBhdCB0aGUgYmFzZSBvZiB0aGUgYXNzb2NpYXRlZCByZWN0YW5nbGVcbiAgICAgIGNvbnN0IHJvd0xhYmVsWSA9XG4gICAgICAgIHRoaXMuZ2V0VG9wT2ZSb3cocm93SW5kZXgpICtcbiAgICAgICAgdGhpcy5TRUNUSU9OX1BBRERJTkcuUkVDVEFOR0xFX1RPX1JPVyArXG4gICAgICAgIHRoaXMuU0VDVElPTl9IRUlHSFRTLlBFUl9SRUNUQU5HTEUoKSAvIDI7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiByb3cucm93TmFtZSxcbiAgICAgICAgeDogcm93TGFiZWxYLFxuICAgICAgICB5OiByb3dMYWJlbFksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLy8gR2V0IGRhdGEgb24gdGhlIHJvdyB0b3RhbHMgd2UgYXJlIGRyYXdpbmdcbiAgZ2V0Um93VG90YWxzVG9EcmF3KGRpc3BsYXlSb3dzOiBSb3dEaXNwbGF5SW5mb1tdLCB3aWR0aDogbnVtYmVyKTogUm93TGFiZWxbXSB7XG4gICAgcmV0dXJuIGRpc3BsYXlSb3dzLm1hcCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgcm93TGFiZWxYID0gd2lkdGggLSB0aGlzLlNFQ1RJT05fUEFERElORy5PVVRFUl9MRUZUX1JJR0hUO1xuICAgICAgLy8gVGhlIHJvdyB0b3RhbHMgbG9va3MgcmlnaHQgaWYgaXRzIGJhc2UgaXMgYXQgdGhlIGJhc2Ugb2YgdGhlIGFzc29jaWF0ZWQgcmVjdGFuZ2xlXG4gICAgICBjb25zdCByb3dMYWJlbFkgPVxuICAgICAgICB0aGlzLmdldFRvcE9mUm93KHJvd0luZGV4KSArXG4gICAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLlJFQ1RBTkdMRV9UT19ST1cgK1xuICAgICAgICB0aGlzLlNFQ1RJT05fSEVJR0hUUy5QRVJfUkVDVEFOR0xFKCkgLyAyO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogdGhpcy52YWx1ZUZvcm1hdHRlcihyb3cucm93VG90YWwpLFxuICAgICAgICB4OiByb3dMYWJlbFgsXG4gICAgICAgIHk6IHJvd0xhYmVsWSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICByZWFkb25seSBkcmF3RGF0YSQ6IE9ic2VydmFibGU8U3RhY2tlZFJvd0RyYXdEYXRhIHwgbnVsbD4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmlucHV0JCxcbiAgICB0aGlzLndpZHRoJCxcbiAgICB0aGlzLmhlaWdodCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaW5wdXQsIHdpZHRoLCBoZWlnaHRdKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREcmF3bkRhdGEoXG4gICAgICAgIGlucHV0LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICAgICAgPyBoZWlnaHRcbiAgICAgICAgICA6IHRoaXMuU0VDVElPTl9IRUlHSFRTLlhfQVhJU19MQUJFTCArXG4gICAgICAgICAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX1RPUF9CT1RUT00gK1xuICAgICAgICAgICAgICB0aGlzLlNFQ1RJT05fUEFERElORy5SRUNUQU5HTEVfVE9fUk9XICtcbiAgICAgICAgICAgICAgdGhpcy5TRUNUSU9OX0hFSUdIVFMuUEVSX1JPVygpICogaW5wdXQubGVuZ3RoLFxuICAgICAgKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIC8vIExldHMgdXMga25vdyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIHplcm8gZGF0YSBzdGF0ZVxuICByZWFkb25seSBlbXB0eSQgPSB0aGlzLmlucHV0JC5waXBlKFxuICAgIG1hcChpbnB1dCA9PiBpbnB1dC5ldmVyeShzdGFjayA9PiBzdGFjay5kYXRhLmxlbmd0aCA9PT0gMCkpLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgLy8gV2hhdCByZWN0YW5nbGUgd2UgYXJlIGN1cnJlbnRseSBob3ZlcmluZyBvdmVyXG4gIHJlYWRvbmx5IGhvdmVyZWRSZWN0YW5nbGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgcmVjdGFuZ2xlOiBSb3dSZWN0YW5nbGU7XG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQ7XG4gIH0gfCBudWxsPihudWxsKTtcblxuICAvLyBXaGF0IGJhbmQgd2UgYXJlIGN1cnJlbnRseSBob3ZlcmluZyBvdmVyXG4gIHJlYWRvbmx5IGhvdmVyZWRCYW5kJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIHJvd05hbWU6IHN0cmluZztcbiAgICBldmVudDogTW91c2VFdmVudDtcbiAgfSB8IG51bGw+KG51bGwpO1xuXG4gIC8vIENyZWF0ZSB0aGUgbWV0cmljIHRvIGRpc3BsYXkgYmFzZWQgb24gdGhlIGN1cnJlbnRseSBob3ZlcmVkIHJlY3RhbmdsZVxuICByZWFkb25seSBjYWxsb3V0JCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaG92ZXJlZEJhbmQkLCB0aGlzLmRyYXdEYXRhJF0pLnBpcGUoXG4gICAgbWFwKChbaG92ZXJlZEJhbmQsIGRyYXdEYXRhXSkgPT4ge1xuICAgICAgaWYgKCFob3ZlcmVkQmFuZCB8fCAhZHJhd0RhdGEpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCB7IHRhcmdldCB9ID0gaG92ZXJlZEJhbmQuZXZlbnQ7XG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBhbmNob3IgPSAoPFNWR1JlY3RFbGVtZW50PnRhcmdldCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIHR5cGUgTWV0cmljID0geyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH07XG4gICAgICBjb25zdCBtZXRyaWNzOiBNZXRyaWNbXSA9IGRyYXdEYXRhLnJlY3RzXG4gICAgICAgIC5maWx0ZXIocmVjdCA9PiByZWN0LnJvd05hbWUgPT09IGhvdmVyZWRCYW5kLnJvd05hbWUpXG4gICAgICAgIC5tYXAocmVjdCA9PiAoe1xuICAgICAgICAgIGxhYmVsOiByZWN0LnN0YWNrZWRSb3dFbGVtZW50LmxhYmVsLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlRm9ybWF0dGVyKHJlY3Quc3RhY2tlZFJvd0VsZW1lbnQudmFsdWUpLFxuICAgICAgICB9KSk7XG5cbiAgICAgIHJldHVybiB7IGFuY2hvciwgbWV0cmljcyB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RhY2tlZFJvd0NvbXBvbmVudCB7XG4gIC8vIEEgc3BlY2lmaWNhbGx5IGNvbG9yZWQgc2VjdGlvbiBvZiBvbmUgcm93LlxuICBleHBvcnQgdHlwZSBSb3dFbGVtZW50ID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7IC8vIExlZ2VuZCBlbGVtZW50IG5hbWVcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGNvbG9yVG9rZW46IHN0cmluZztcbiAgICBzdHlsZT86ICdzb2xpZCcgfCAnc3RyaXBlZCc7XG4gIH07XG4gIC8vIFRoZSBpbnB1dCB0aGF0IGRldGVybWluZXMgb25lIHJvdy5cbiAgZXhwb3J0IHR5cGUgUm93U3RhY2sgPSB7XG4gICAgcm93TmFtZTogc3RyaW5nO1xuICAgIGRhdGE6IFJvd0VsZW1lbnRbXTtcbiAgfTtcbn1cbiIsIjxkaXYgKm5nSWY9XCIhKGVtcHR5JCB8IGFzeW5jKTsgZWxzZSB6ZXJvU3RhdGVcIiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICA8c3ZnXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgKm5nSWY9XCJkcmF3RGF0YSQgfCBhc3luYzsgbGV0IGRyYXdcIlxuICAgIFthdHRyLnZpZXdCb3hdPVwiZHJhdy52aWV3Qm94XCJcbiAgPlxuICAgIDxkZWZzPlxuICAgICAgPHBhdHRlcm5cbiAgICAgICAgaWQ9XCJzdHJpcGVzXCJcbiAgICAgICAgeD1cIjBcIlxuICAgICAgICB5PVwiMFwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cImRyYXcucm93SGVpZ2h0XCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImRyYXcucm93SGVpZ2h0XCJcbiAgICAgICAgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICAgICAgPlxuICAgICAgICA8bGluZVxuICAgICAgICAgIFthdHRyLngxXT1cIjBcIlxuICAgICAgICAgIFthdHRyLnkxXT1cIjBcIlxuICAgICAgICAgIFthdHRyLngyXT1cImRyYXcucm93SGVpZ2h0XCJcbiAgICAgICAgICBbYXR0ci55Ml09XCJkcmF3LnJvd0hlaWdodFwiXG4gICAgICAgICAgc3Ryb2tlPVwidmFyKC0td2hpdGUtMTAwKVwiXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMVwiXG4gICAgICAgID48L2xpbmU+XG4gICAgICA8L3BhdHRlcm4+XG4gICAgPC9kZWZzPlxuICAgIDxnICpuZ0Zvcj1cImxldCByb3dOYW1lVG9EcmF3IG9mIGRyYXcucm93TmFtZXNcIj5cbiAgICAgIDx0ZXh0XG4gICAgICAgIHJpdlNWR1RleHRUcnVuY2F0ZVxuICAgICAgICBbdGV4dF09XCJyb3dOYW1lVG9EcmF3LmxhYmVsXCJcbiAgICAgICAgW3dpZHRoXT1cIlNFQ1RJT05fV0lEVEhTLlJPV19OQU1FXCJcbiAgICAgICAgY2xhc3M9XCJyb3ctdGl0bGVcIlxuICAgICAgICBbYXR0ci54XT1cInJvd05hbWVUb0RyYXcueFwiXG4gICAgICAgIFthdHRyLnldPVwicm93TmFtZVRvRHJhdy55XCJcbiAgICAgID48L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGRyYXcueFRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2tcIlxuICAgICAgICBbYXR0ci54XT1cImRyYXcueFNjYWxlKHRpY2spXCJcbiAgICAgICAgeT1cIjBcIlxuICAgICAgICB3aWR0aD1cIjFcIlxuICAgICAgICBoZWlnaHQ9XCIxMDAlXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8dGV4dFxuICAgICAgICBjbGFzcz1cInRpY2stbGFiZWxcIlxuICAgICAgICBbYXR0ci54XT1cImRyYXcueFNjYWxlKHRpY2spXCJcbiAgICAgICAgW2F0dHIueV09XCJsb2NhdGlvbk9mWEF4aXNUaWNrKClcIlxuICAgICAgICBkeD1cIjRcIlxuICAgICAgICBkeT1cIi00XCJcbiAgICAgID5cbiAgICAgICAge3sgdmFsdWVGb3JtYXR0ZXIodGljaykgfX1cbiAgICAgIDwvdGV4dD5cbiAgICA8L2c+XG4gICAgPGdcbiAgICAgICpuZ0Zvcj1cImxldCByZWN0IG9mIGRyYXcucmVjdHNcIlxuICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEJhbmQkLm5leHQoeyByb3dOYW1lOiByZWN0LnJvd05hbWUsIGV2ZW50OiAkZXZlbnQgfSlcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZEJhbmQkLm5leHQobnVsbClcIlxuICAgID5cbiAgICAgIDxyZWN0XG4gICAgICAgIGNsYXNzPVwicm93XCJcbiAgICAgICAgW2F0dHIueF09XCJyZWN0LnhcIlxuICAgICAgICBbYXR0ci55XT1cInJlY3QueVwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwicmVjdC5oZWlnaHRcIlxuICAgICAgICBbYXR0ci5maWxsXT1cInJlY3QuZmlsbFwiXG4gICAgICAgIFtjbGFzcy5ibHVycmVkXT1cIlxuICAgICAgICAgIChob3ZlcmVkQmFuZCQgfCBhc3luYykgIT09IG51bGwgJiZcbiAgICAgICAgICAoaG92ZXJlZEJhbmQkIHwgYXN5bmMpPy5yb3dOYW1lICE9PSByZWN0LnJvd05hbWVcbiAgICAgICAgXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8cmVjdFxuICAgICAgICAqbmdJZj1cInJlY3Quc3RyaXBlZFwiXG4gICAgICAgIFthdHRyLnhdPVwicmVjdC54XCJcbiAgICAgICAgW2F0dHIueV09XCJyZWN0LnlcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJyZWN0LndpZHRoXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInJlY3QuaGVpZ2h0XCJcbiAgICAgICAgZmlsbD1cInVybCgjc3RyaXBlcylcIlxuICAgICAgPjwvcmVjdD5cbiAgICA8L2c+XG4gICAgPGcgKm5nRm9yPVwibGV0IHJvd1RvdGFsVG9EcmF3IG9mIGRyYXcucm93VG90YWxzXCI+XG4gICAgICA8dGV4dFxuICAgICAgICBjbGFzcz1cInJvdy10b3RhbFwiXG4gICAgICAgIFthdHRyLnhdPVwicm93VG90YWxUb0RyYXcueFwiXG4gICAgICAgIFthdHRyLnldPVwicm93VG90YWxUb0RyYXcueVwiXG4gICAgICAgIHRleHQtYW5jaG9yPVwiZW5kXCJcbiAgICAgID5cbiAgICAgICAge3sgcm93VG90YWxUb0RyYXcubGFiZWwgfX1cbiAgICAgIDwvdGV4dD5cbiAgICA8L2c+XG4gIDwvc3ZnPlxuICA8bGVnZW5kICpuZ0lmPVwiZHJhd0RhdGEkIHwgYXN5bmM7IGxldCBkcmF3XCI+XG4gICAgPHJpdi1sZWdlbmQtaXRlbVxuICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZHJhdy5sZWdlbmRJdGVtc1wiXG4gICAgICBbbGFiZWxdPVwiaXRlbS5sYWJlbFwiXG4gICAgICBbY29sb3JUb2tlbl09XCJpdGVtLmNvbG9yVG9rZW5cIlxuICAgICAgW3N0eWxlXT1cIml0ZW0uc3R5bGUgPyBpdGVtLnN0eWxlIDogJ3NvbGlkJ1wiXG4gICAgPjwvcml2LWxlZ2VuZC1pdGVtPlxuICA8L2xlZ2VuZD5cbjwvZGl2PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiY2FsbG91dCQgfCBhc3luYzsgbGV0IGNhbGxvdXRcIj5cbiAgPHJpdi1jYWxsb3V0XG4gICAgKnJpdi1jYWxsb3V0XG4gICAgW2FuY2hvcl09XCJjYWxsb3V0LmFuY2hvclwiXG4gICAgW2lzTW9kYWxdPVwiZmFsc2VcIlxuICAgIFtwcmVmZXJyZWRQb3NpdGlvbl09XCInYm90dG9tLWNlbnRlcidcIlxuICAgIFthbGxvd2VkUG9zaXRpb25zXT1cIltcbiAgICAgICdjZW50ZXItcmlnaHQnLFxuICAgICAgJ2NlbnRlci1sZWZ0JyxcbiAgICAgICd0b3AtY2VudGVyJyxcbiAgICAgICdib3R0b20tY2VudGVyJ1xuICAgIF1cIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtbWV0cmljXCIgKm5nRm9yPVwibGV0IG1ldHJpYyBvZiBjYWxsb3V0Lm1ldHJpY3NcIj5cbiAgICAgICAgPGRpdj57eyBtZXRyaWMubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtbWV0cmljLXZhbHVlXCI+e3sgbWV0cmljLnZhbHVlIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3plcm9TdGF0ZT5cbiAgPHJpdi16ZXJvLXN0YXRlIFttZXNzYWdlXT1cInplcm9TdGF0ZU1lc3NhZ2VcIj48L3Jpdi16ZXJvLXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|