@wemake4u/form-player-se 1.0.19 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/controls/chart.mjs +10 -0
- package/esm2022/lib/controls/factory.mjs +4 -1
- package/esm2022/lib/dialog/dialog.component.mjs +6 -5
- package/esm2022/lib/directives/change.directive.mjs +27 -0
- package/esm2022/lib/directives/dropdown.directive.mjs +14 -1
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +33 -15
- package/esm2022/lib/services/chart.service.mjs +304 -0
- package/esm2022/lib/services/dialog.service.mjs +4 -2
- package/esm2022/lib/services/grid.service.mjs +14 -14
- package/esm2022/lib/services/programmability.service.mjs +26 -6
- package/esm2022/lib/services/weak.service.mjs +1 -2
- package/esm2022/lib/utils/observableAll.mjs +26 -0
- package/fesm2022/wemake4u-form-player-se.mjs +449 -41
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
- package/lib/controls/chart.d.ts +4 -0
- package/lib/dialog/dialog.component.d.ts +1 -0
- package/lib/directives/change.directive.d.ts +9 -0
- package/lib/directives/dropdown.directive.d.ts +5 -2
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +7 -1
- package/lib/services/chart.service.d.ts +37 -0
- package/lib/services/grid.service.d.ts +8 -8
- package/lib/services/programmability.service.d.ts +3 -2
- package/lib/utils/observableAll.d.ts +2 -0
- package/package.json +4 -2
|
@@ -18,7 +18,7 @@ export class GridService {
|
|
|
18
18
|
this.formatter = formatter;
|
|
19
19
|
this.programmability = programmability;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
getModules() {
|
|
22
22
|
return [
|
|
23
23
|
ClientSideRowModelModule,
|
|
24
24
|
InfiniteRowModelModule,
|
|
@@ -36,13 +36,13 @@ export class GridService {
|
|
|
36
36
|
];
|
|
37
37
|
}
|
|
38
38
|
;
|
|
39
|
-
|
|
40
|
-
const columnDefs = this.
|
|
39
|
+
getOptions(component, formGroup, language) {
|
|
40
|
+
const columnDefs = this.getColumns(component, formGroup, language);
|
|
41
41
|
const selection = this.getRowSelection(component, formGroup);
|
|
42
|
-
const pagination = this.
|
|
43
|
-
const pageSize = this.
|
|
44
|
-
const texts = this.
|
|
45
|
-
const theme = this.
|
|
42
|
+
const pagination = this.getPaginable(component);
|
|
43
|
+
const pageSize = this.getPageSize(component);
|
|
44
|
+
const texts = this.getTexts(language);
|
|
45
|
+
const theme = this.getTheme();
|
|
46
46
|
return {
|
|
47
47
|
defaultColDef: {
|
|
48
48
|
floatingFilter: (component.floatingFilter === true),
|
|
@@ -67,7 +67,7 @@ export class GridService {
|
|
|
67
67
|
},
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
|
-
|
|
70
|
+
onSelectionChanged(component, formGroup, event) {
|
|
71
71
|
if (component.selectionChanged) {
|
|
72
72
|
return this.programmability.evaluate(formGroup, component.selectionChanged, {
|
|
73
73
|
cacheable: false,
|
|
@@ -82,7 +82,7 @@ export class GridService {
|
|
|
82
82
|
locale(component, key, language) {
|
|
83
83
|
return localize(language, component, key);
|
|
84
84
|
}
|
|
85
|
-
|
|
85
|
+
getColumns(component, formGroup, language) {
|
|
86
86
|
if (Array.isArray(component.columns)) {
|
|
87
87
|
const columns = component.columns.map((column) => {
|
|
88
88
|
const colDef = {
|
|
@@ -313,15 +313,15 @@ export class GridService {
|
|
|
313
313
|
});
|
|
314
314
|
return result === true;
|
|
315
315
|
}
|
|
316
|
-
|
|
316
|
+
getPaginable(component) {
|
|
317
317
|
return (typeof component.rowCount === 'number' && component.rowCount > 0);
|
|
318
318
|
}
|
|
319
|
-
|
|
319
|
+
getPageSize(component) {
|
|
320
320
|
if (typeof component.rowCount === 'number') {
|
|
321
321
|
return component.rowCount;
|
|
322
322
|
}
|
|
323
323
|
}
|
|
324
|
-
|
|
324
|
+
getTexts(language) {
|
|
325
325
|
if (language === 'it') {
|
|
326
326
|
return AG_GRID_LOCALE_IT;
|
|
327
327
|
}
|
|
@@ -347,7 +347,7 @@ export class GridService {
|
|
|
347
347
|
return AG_GRID_LOCALE_EN; // fallback
|
|
348
348
|
}
|
|
349
349
|
}
|
|
350
|
-
|
|
350
|
+
getTheme() {
|
|
351
351
|
return themeQuartz
|
|
352
352
|
.withPart(iconSetAlpine)
|
|
353
353
|
.withParams({
|
|
@@ -555,4 +555,4 @@ export class GridService {
|
|
|
555
555
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GridService, decorators: [{
|
|
556
556
|
type: Injectable
|
|
557
557
|
}], ctorParameters: () => [{ type: i1.FormatterService }, { type: i2.ProgrammabilityService }] });
|
|
558
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNHLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUN4RSxZQUFZLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUMvQyxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQzlDLFdBQVcsRUFBRSxhQUFhLEVBQ2xDLDJCQUEyQixFQUNMLG9CQUFvQixFQUFFLGVBQWUsRUFFOUQsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUc1RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNsQixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFLOUMsTUFBTSxPQUFPLFdBQVc7SUFFRjtJQUNW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bXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgTW9kdWxlLCBQYWdpbmF0aW9uTW9kdWxlLCBDbGllbnRTaWRlUm93TW9kZWxNb2R1bGUsIEluZmluaXRlUm93TW9kZWxNb2R1bGVcclxuICAsIExvY2FsZU1vZHVsZSwgQ2VsbFN0eWxlTW9kdWxlLCBWYWxpZGF0aW9uTW9kdWxlXHJcbiAgLCBSb3dTZWxlY3Rpb25Nb2R1bGUsIFJvd1NlbGVjdGlvbk9wdGlvbnMgXHJcbiAgLCBUZXh0RmlsdGVyTW9kdWxlLCBOdW1iZXJGaWx0ZXJNb2R1bGUsIERhdGVGaWx0ZXJNb2R1bGVcclxuICAsIENvbERlZiwgdGhlbWVRdWFydHosIGljb25TZXRBbHBpbmUsIEdyaWRPcHRpb25zLCBEYXRhVHlwZURlZmluaXRpb25cclxuICAsIENsaWVudFNpZGVSb3dNb2RlbEFwaU1vZHVsZVxyXG4gICwgR3JpZFNpemVDaGFuZ2VkRXZlbnQsIENvbHVtbkF1dG9TaXplTW9kdWxlLCBDb2x1bW5BcGlNb2R1bGVcclxuICAsIFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtc1xyXG59IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYmplY3RVUkxSZW5kZXJlckNvbXBvbmVudCwgRGVsZXRlUm93Q2VsbFJlbmRlcmVyLCBBY3Rpb25zQ2VsbFJlbmRlcmVyIH0gZnJvbSAnLi4vdXRpbHMvZ3JpZENlbGxzJztcclxuaW1wb3J0IHsgRm9ybWF0dGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm1hdHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2V0RmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2V0RmlsdGVyJztcclxuaW1wb3J0IHsgZ2V0Rm9jdXNhYmxlcyB9IGZyb20gJy4uL3V0aWxzL2ZvY3VzYWJsZSc7XHJcbmltcG9ydCB7IGlzUmVjb3JkLCBpc0xhYmVsZWRSZWNvcmQsIGlzTnVtZXJpY0tleSB9IGZyb20gJy4uL2NvbW1vbi9yZWNvcmQnO1xyXG5pbXBvcnQgeyBnZXRMYWJlbFN5bWJvbCB9IGZyb20gJy4uL2NvbW1vbi9zeW1ib2xzJztcclxuaW1wb3J0IHtcclxuICBBR19HUklEX0xPQ0FMRV9JVCxcclxuICBBR19HUklEX0xPQ0FMRV9FTixcclxuICBBR19HUklEX0xPQ0FMRV9ERSxcclxuICBBR19HUklEX0xPQ0FMRV9GUixcclxuICBBR19HUklEX0xPQ0FMRV9FUyxcclxuICBBR19HUklEX0xPQ0FMRV9QVCAgXHJcbn0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2xvY2FsZSc7XHJcblxyXG5pbXBvcnQgeyBUZXh0cyB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGUnO1xyXG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGl6ZSc7XHJcblxyXG50eXBlIE1hcFR5cGUgPSBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+IHwgbnVsbDtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtYXR0ZXI6IEZvcm1hdHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZE1vZHVsZXMoKTogTW9kdWxlW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlXHJcbiAgICAgICwgSW5maW5pdGVSb3dNb2RlbE1vZHVsZVxyXG4gICAgICAsIFBhZ2luYXRpb25Nb2R1bGVcclxuICAgICAgLCBMb2NhbGVNb2R1bGVcclxuICAgICAgLCBDZWxsU3R5bGVNb2R1bGVcclxuICAgICAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGVcclxuICAgICAgLCBUZXh0RmlsdGVyTW9kdWxlXHJcbiAgICAgICwgTnVtYmVyRmlsdGVyTW9kdWxlXHJcbiAgICAgICwgRGF0ZUZpbHRlck1vZHVsZVxyXG4gICAgICAsIENvbHVtbkF1dG9TaXplTW9kdWxlXHJcbiAgICAgICwgQ29sdW1uQXBpTW9kdWxlXHJcbiAgICAgICwgUm93U2VsZWN0aW9uTW9kdWxlXHJcbiAgICAgICwgVmFsaWRhdGlvbk1vZHVsZVxyXG4gICAgXTtcclxuICB9O1xyXG5cclxuICBnZXRHcmlkT3B0aW9ucyhjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGxhbmd1YWdlOiBzdHJpbmcpOiBHcmlkT3B0aW9ucyB7XHJcbiAgICBjb25zdCBjb2x1bW5EZWZzID0gdGhpcy5nZXRHcmlkQ29sdW1ucyhjb21wb25lbnQsIGZvcm1Hcm91cCwgbGFuZ3VhZ2UpO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRSb3dTZWxlY3Rpb24oY29tcG9uZW50LCBmb3JtR3JvdXApO1xyXG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHRoaXMuZ2V0R3JpZFBhZ2luYWJsZShjb21wb25lbnQpO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdldEdyaWRQYWdlU2l6ZShjb21wb25lbnQpO1xyXG4gICAgY29uc3QgdGV4dHMgPSB0aGlzLmdldEdyaWRUZXh0cyhsYW5ndWFnZSk7XHJcbiAgICBjb25zdCB0aGVtZSA9IHRoaXMuZ2V0R3JpZFRoZW1lKCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkZWZhdWx0Q29sRGVmOiB7XHJcbiAgICAgICAgZmxvYXRpbmdGaWx0ZXI6IChjb21wb25lbnQuZmxvYXRpbmdGaWx0ZXIgPT09IHRydWUpLFxyXG4gICAgICAgIGhlYWRlckNsYXNzOiAoY29tcG9uZW50LmZsb2F0aW5nRmlsdGVyID09PSB0cnVlKVxyXG4gICAgICAgICAgPyAnc2hvdy1maWx0ZXInIDogJ2hpZGUtZmlsdGVyJ1xyXG4gICAgICB9LFxyXG4gICAgICBzZWxlY3Rpb25Db2x1bW5EZWY6IHtcclxuICAgICAgICBwaW5uZWQ6ICdsZWZ0J1xyXG4gICAgICB9LFxyXG4gICAgICBkYXRhVHlwZURlZmluaXRpb25zOiB0aGlzLmdldERhdGFUeXBlRGVmaW5pdGlvbnMoKSxcclxuICAgICAgY29sdW1uRGVmczogY29sdW1uRGVmcyxcclxuICAgICAgcm93U2VsZWN0aW9uOiBzZWxlY3Rpb24sXHJcbiAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24sXHJcbiAgICAgIHBhZ2luYXRpb25QYWdlU2l6ZTogcGFnZVNpemUsXHJcbiAgICAgIGNhY2hlQmxvY2tTaXplOiBwYWdlU2l6ZSxcclxuICAgICAgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IFs1LCAxMCwgMjAsIDUwXSxcclxuICAgICAgbG9jYWxlVGV4dDogdGV4dHMsXHJcbiAgICAgIGVuYWJsZUNlbGxUZXh0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICB0aGVtZTogdGhlbWUsICAgICAgXHJcbiAgICAgIG9uR3JpZFNpemVDaGFuZ2VkOiAocGFyYW1zOiBHcmlkU2l6ZUNoYW5nZWRFdmVudCkgPT4ge1xyXG4gICAgICAgIHBhcmFtcy5hcGkuYXV0b1NpemVDb2x1bW5zKFtcImFjdGlvbnNcIl0pO1xyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG9uR3JpZFNlbGVjdGlvbkNoYW5nZWQoY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBldmVudDogYW55KSB7XHJcbiAgICBpZiAoY29tcG9uZW50LnNlbGVjdGlvbkNoYW5nZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlKGZvcm1Hcm91cCwgY29tcG9uZW50LnNlbGVjdGlvbkNoYW5nZWQsIHtcclxuICAgICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV4dGVuZENvbnRleHQ6ICgpID0+ICh7XHJcbiAgICAgICAgICBcImV2ZW50XCI6IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzOiBldmVudC5hcGkuZ2V0U2VsZWN0ZWRSb3dzKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9jYWxlKGNvbXBvbmVudDogYW55LCBrZXk6IHN0cmluZywgbGFuZ3VhZ2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxpemUobGFuZ3VhZ2UsIGNvbXBvbmVudCwga2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZENvbHVtbnMoY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBsYW5ndWFnZTogc3RyaW5nKTogQ29sRGVmW10ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29tcG9uZW50LmNvbHVtbnMpKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBjb21wb25lbnQuY29sdW1ucy5tYXAoKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sRGVmOiBDb2xEZWYgPSB7XHJcbiAgICAgICAgICBmaWVsZDogY29sdW1uLmtleSxcclxuICAgICAgICAgIGhlYWRlck5hbWU6IHRoaXMubG9jYWxlKGNvbHVtbiwgJ2xhYmVsJywgbGFuZ3VhZ2UpLFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRDZWxsRGF0YVR5cGUoY29sdW1uLCBjb2xEZWYpO1xyXG5cclxuICAgICAgICBjb25zdCBtYXAgPSB0aGlzLmdldE1hcChjb2x1bW4sIGNvbERlZiwgZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXRDZWxsUmVuZGVyZXIoY29sdW1uLCBjb2xEZWYsIG1hcCk7XHJcbiAgICAgICAgdGhpcy5zZXRSZXNpemFibGUoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0U29ydGFibGUoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0RmlsdGVyKGNvbHVtbiwgY29sRGVmLCBtYXApO1xyXG4gICAgICAgIHRoaXMuc2V0RmlsdGVyUGFyYW1zKGNvbHVtbiwgY29sRGVmLCBtYXApO1xyXG4gICAgICAgIHRoaXMuc2V0U3VwcHJlc3NNb3ZhYmxlKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldEZsZXgoY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0QWxpZ24oY29sdW1uLCBjb2xEZWYpO1xyXG4gICAgICAgIHRoaXMuc2V0UGlubmVkKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldFdpZHRoKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldFZhbHVlRm9ybWF0dGVyKGNvbHVtbiwgY29sRGVmLCBtYXApOyAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGNvbERlZjtcclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29tcG9uZW50LmFjdGlvbnMpICYmIGNvbXBvbmVudC5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb2x1bW5zLnB1c2goe1xyXG4gICAgICAgICAgY29sSWQ6ICdhY3Rpb25zJyxcclxuICAgICAgICAgIGhlYWRlck5hbWU6IHRoaXMubG9jYWxlKFRleHRzLCAnQWN0aW9ucycsIGxhbmd1YWdlKSxcclxuICAgICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgY2VsbERhdGFUeXBlOiBmYWxzZSxcclxuICAgICAgICAgIHBpbm5lZDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxyXG4gICAgICAgICAgICBmb3JtR3JvdXA6IGZvcm1Hcm91cFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNlbGxSZW5kZXJlcjogQWN0aW9uc0NlbGxSZW5kZXJlcixcclxuICAgICAgICAgIHN1cHByZXNzS2V5Ym9hcmRFdmVudDogdGhpcy5uYXZpZ2F0ZUluc2lkZUNlbGwuYmluZCh0aGlzKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY29sdW1ucztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENlbGxEYXRhVHlwZShjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGlmICh0eXBlb2YgY29sdW1uLmRhdGFUeXBlID09PSBcInN0cmluZ1wiXHJcbiAgICAgICYmIGNvbHVtbi5kYXRhVHlwZS50cmltKCkgIT09IFwiXCJcclxuICAgICAgJiYgY29sdW1uLmRhdGFUeXBlICE9PSBcImF1dG9cIikge1xyXG4gICAgICBjb2xEZWYuY2VsbERhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDZWxsUmVuZGVyZXIoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBtYXA6IE1hcFR5cGUpIHtcclxuICAgIGlmIChjb2x1bW4uZm9ybWF0ID09PSBcIm9iamVjdFVSTFwiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSBPYmplY3RVUkxSZW5kZXJlckNvbXBvbmVudDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sdW1uLmZvcm1hdCA9PT0gXCJkZWxldGVSb3dcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gRGVsZXRlUm93Q2VsbFJlbmRlcmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2xEZWYuY2VsbERhdGFUeXBlID09PSBcImJvb2xlYW5cIiAmJiBtYXApIHtcclxuICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IChwYXJhbXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdE1hcChwYXJhbXMudmFsdWUsIG1hcCk7IFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJlc2l6YWJsZShjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYgKSB7XHJcbiAgICBjb2xEZWYucmVzaXphYmxlID0gKGNvbHVtbi5yZXNpemUgPT09IHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTb3J0YWJsZShjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGNvbERlZi5zb3J0YWJsZSA9IChjb2x1bW4uc29ydCA9PT0gdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlcihjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYsIG1hcDogTWFwVHlwZSkge1xyXG4gICAgaWYgKGNvbHVtbi5maWx0ZXIgPT09IHRydWUpIHtcclxuICAgICAgY29sRGVmLmZpbHRlciA9IHRydWU7XHJcbiAgICAgIGlmIChtYXApIHtcclxuICAgICAgICBjb2xEZWYuZmlsdGVyID0gU2V0RmlsdGVyQ29tcG9uZW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlclBhcmFtcyhjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYsIG1hcDogTWFwVHlwZSkge1xyXG5cclxuICAgIGNvbnN0IGZpbHRlclBhcmFtczogYW55ID0ge307XHJcblxyXG4gICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3V1aWQnKSB7XHJcbiAgICAgIHRoaXMuc2V0VXVpZEZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnaW50ZWdlcicpIHtcclxuICAgICAgdGhpcy5zZXRJbnRlZ2VyRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICB0aGlzLnNldERhdGVGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHRoaXMuc2V0Qm9vbGVhbkZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAobWFwKSB7XHJcbiAgICAgIGZpbHRlclBhcmFtcy5tYXAgPSBtYXA7XHJcbiAgICB9XHJcblxyXG4gICAgY29sRGVmLmZpbHRlclBhcmFtcyA9IGZpbHRlclBhcmFtcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXVpZEZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IGFueSkge1xyXG4gICAgZmlsdGVyUGFyYW1zLmZpbHRlck9wdGlvbnMgPSBbJ2VxdWFscycsICdub3RFcXVhbCddO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRJbnRlZ2VyRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtczogYW55KSB7XHJcbiAgICBmaWx0ZXJQYXJhbXMuYWxsb3dlZENoYXJQYXR0ZXJuID0gJ1xcXFxkJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0ZUZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IGFueSkge1xyXG4gICAgZmlsdGVyUGFyYW1zLmNvbXBhcmF0b3IgPSAoZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodDogRGF0ZSwgY2VsbFZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCFjZWxsVmFsdWUpIHJldHVybiAtMTtcclxuICAgICAgY29uc3QgY2VsbERhdGUgPSBuZXcgRGF0ZShjZWxsVmFsdWUpO1xyXG4gICAgICBpZiAoaXNOYU4oY2VsbERhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgY29uc3QgY2VsbERhdGVOb1RpbWUgPSBuZXcgRGF0ZShjZWxsRGF0ZS5nZXRGdWxsWWVhcigpLCBjZWxsRGF0ZS5nZXRNb250aCgpLCBjZWxsRGF0ZS5nZXREYXRlKCkpO1xyXG5cclxuICAgICAgaWYgKGNlbGxEYXRlTm9UaW1lIDwgZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodCkgcmV0dXJuIC0xO1xyXG4gICAgICBpZiAoY2VsbERhdGVOb1RpbWUgPiBmaWx0ZXJMb2NhbERhdGVBdE1pZG5pZ2h0KSByZXR1cm4gMTtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEJvb2xlYW5GaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcclxuICAgIGZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgZGlzcGxheUtleTogJ2luY2x1ZGVBbGwnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5DaG9vc2VPbmUsXHJcbiAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDAsXHJcbiAgICAgICAgcHJlZGljYXRlOiAoW2ZpbHRlcl06IFthbnldLCB2YWx1ZTogYW55KSA9PiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAndHJ1ZScsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFRleHRzLlRydWUsXHJcbiAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDAsXHJcbiAgICAgICAgcHJlZGljYXRlOiAoW2ZpbHRlcl06IFthbnldLCB2YWx1ZTogYW55KSA9PiB2YWx1ZSA9PT0gdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZGlzcGxheUtleTogJ2ZhbHNlJyxcclxuICAgICAgICBkaXNwbGF5TmFtZTogVGV4dHMuRmFsc2UsXHJcbiAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDAsXHJcbiAgICAgICAgcHJlZGljYXRlOiAoW2ZpbHRlcl06IFthbnldLCB2YWx1ZTogYW55KSA9PiB2YWx1ZSA9PT0gZmFsc2VcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICdibGFuaycsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFRleHRzLkJsYW5rLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdmFsdWUgPT09IG51bGxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICdub3RCbGFuaycsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFRleHRzLk5vdEJsYW5rLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdmFsdWUgIT09IG51bGxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICBmaWx0ZXJQYXJhbXMuc3VwcHJlc3NBbmRPckNvbmRpdGlvbiA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFN1cHByZXNzTW92YWJsZShjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGlmICghKGNvbHVtbi5tb3ZlID09PSB0cnVlKSkgeyBcclxuICAgICAgY29sRGVmLnN1cHByZXNzTW92YWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZsZXgoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAoY29sdW1uLmZsZXggPT09IHRydWUpIHsgXHJcbiAgICAgIGNvbERlZi5mbGV4ID0gMTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0QWxpZ24oY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAoY29sdW1uLmFsaWduID09PSBcImxlZnRcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbFN0eWxlID0geyB0ZXh0QWxpZ246ICdsZWZ0JyB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sdW1uLmFsaWduID09PSBcImNlbnRlclwiKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsU3R5bGUgPSB7IHRleHRBbGlnbjogJ2NlbnRlcicgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5hbGlnbiA9PT0gXCJyaWdodFwiKSB7IFxyXG4gICAgICBjb2xEZWYuY2VsbFN0eWxlID0geyB0ZXh0QWxpZ246ICdyaWdodCcgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UGlubmVkKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4ucGlubmVkID09PSBcInN0cmluZ1wiKSB7IFxyXG4gICAgICBjb2xEZWYucGlubmVkID0gY29sdW1uLnBpbm5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0V2lkdGgoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbHVtbi53aWR0aCA9PT0gXCJudW1iZXJcIikgeyBcclxuICAgICAgY29sRGVmLndpZHRoID0gY29sdW1uLndpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgY29sdW1uLm1pbldpZHRoID09PSBcIm51bWJlclwiKSB7IFxyXG4gICAgICBjb2xEZWYubWluV2lkdGggPSBjb2x1bW4ubWluV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4ubWF4V2lkdGggPT09IFwibnVtYmVyXCIpIHsgXHJcbiAgICAgIGNvbERlZi5tYXhXaWR0aCA9IGNvbHVtbi5tYXhXaWR0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VmFsdWVGb3JtYXR0ZXIoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBtYXA6IE1hcFR5cGUpIHtcclxuICAgIGlmIChtYXApIHtcclxuICAgICAgY29sRGVmLnZhbHVlRm9ybWF0dGVyID0gKHBhcmFtcykgPT4gdGhpcy5mb3JtYXRNYXAocGFyYW1zLnZhbHVlLCBtYXApOyAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSb3dTZWxlY3Rpb24oY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKTogUm93U2VsZWN0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCAge1xyXG4gICAgaWYgKGNvbXBvbmVudC5zZWxlY3Rpb24gPT09IFwic2luZ2xlUm93XCIpIHtcclxuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzaW5nbGVSb3dcIiB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29tcG9uZW50LnNlbGVjdGlvbiA9PT0gXCJtdWx0aVJvd1wiKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnM6IFJvd1NlbGVjdGlvbk9wdGlvbnMgPSB7XHJcbiAgICAgICAgbW9kZTogXCJtdWx0aVJvd1wiLFxyXG4gICAgICAgIHNlbGVjdEFsbDogJ2ZpbHRlcmVkJyxcclxuICAgICAgICBoaWRlRGlzYWJsZWRDaGVja2JveGVzOiB0cnVlXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoY29tcG9uZW50LmlzU2VsZWN0YWJsZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgICAgaXNSb3dTZWxlY3RhYmxlOiAocm93Tm9kZSkgPT4gdGhpcy5vblJvd1NlbGVjdGFibGUoY29tcG9uZW50LCBmb3JtR3JvdXAsIHJvd05vZGUuZGF0YSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblJvd1NlbGVjdGFibGUoY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBkYXRhOiBhbnkpIDogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWRhdGEpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGNvbXBvbmVudC5pc1NlbGVjdGFibGUsIHtcclxuICAgICAgY2FjaGVhYmxlOiBmYWxzZSxcclxuICAgICAgZXh0ZW5kQ29udGV4dDogKCkgPT4gKHtcclxuICAgICAgICBcImV2ZW50XCI6IHtcclxuICAgICAgICAgIGRhdGE6IGRhdGFcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0ID09PSB0cnVlOyBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFBhZ2luYWJsZShjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0eXBlb2YgY29tcG9uZW50LnJvd0NvdW50ID09PSAnbnVtYmVyJyAmJiBjb21wb25lbnQucm93Q291bnQgPiAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFBhZ2VTaXplKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIGNvbXBvbmVudC5yb3dDb3VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFRleHRzKGxhbmd1YWdlOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgaWYgKGxhbmd1YWdlID09PSAnaXQnKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9JVDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGxhbmd1YWdlID09PSAnZW4nKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9FTjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGxhbmd1YWdlID09PSAnZGUnKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9ERTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGxhbmd1YWdlID09PSAnZnInKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9GUjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGxhbmd1YWdlID09PSAnZXMnKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9FUztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGxhbmd1YWdlID09PSAncHQnKSB7XHJcbiAgICAgIHJldHVybiBBR19HUklEX0xPQ0FMRV9QVDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGxhbmd1YWdlID09PSAnJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfSVQ7IC8vIG5ldXRyYWxcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfRU47IC8vIGZhbGxiYWNrXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdyaWRUaGVtZSgpIHtcclxuICAgIHJldHVybiB0aGVtZVF1YXJ0elxyXG4gICAgICAud2l0aFBhcnQoaWNvblNldEFscGluZSlcclxuICAgICAgLndpdGhQYXJhbXMoe1xyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjRkFGQUZBXCIsXHJcbiAgICAgICAgYm9yZGVyQ29sb3I6IFwiI0Q5RTRGN1wiLFxyXG4gICAgICAgIGJyb3dzZXJDb2xvclNjaGVtZTogXCJsaWdodFwiLFxyXG4gICAgICAgIGNlbGxUZXh0Q29sb3I6IFwiIzAwMTIxQVwiLFxyXG4gICAgICAgIGNvbHVtbkJvcmRlcjogdHJ1ZSxcclxuICAgICAgICBmb250RmFtaWx5OiBcImluaGVyaXRcIixcclxuICAgICAgICBmb250U2l6ZTogMTYsXHJcbiAgICAgICAgaGVhZGVyQmFja2dyb3VuZENvbG9yOiBcIiMwMDI0NjBcIixcclxuICAgICAgICBoZWFkZXJDb2x1bW5Cb3JkZXI6IHRydWUsXHJcbiAgICAgICAgaGVhZGVyQ29sdW1uUmVzaXplSGFuZGxlQ29sb3I6IFwiI0YyRjZGQ1wiLFxyXG4gICAgICAgIGhlYWRlckNvbHVtblJlc2l6ZUhhbmRsZVdpZHRoOiAyLFxyXG4gICAgICAgIGhlYWRlckZvbnRTaXplOiAxNixcclxuICAgICAgICBoZWFkZXJGb250V2VpZ2h0OiA2MDAsXHJcbiAgICAgICAgaGVhZGVyUm93Qm9yZGVyOiBmYWxzZSxcclxuICAgICAgICBoZWFkZXJUZXh0Q29sb3I6IFwiI0YyRjZGQ1wiLFxyXG4gICAgICAgIHJvd0JvcmRlcjogdHJ1ZVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YVR5cGVEZWZpbml0aW9ucygpOiB7IFtjZWxsRGF0YVR5cGU6IHN0cmluZ106IERhdGFUeXBlRGVmaW5pdGlvbjxhbnk+OyB9IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHV1aWQ6IHtcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICd0ZXh0JyxcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICd0ZXh0J1xyXG4gICAgICB9LFxyXG4gICAgICBkYXRlOiB7XHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnZGF0ZVN0cmluZycsXHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAnZGF0ZVN0cmluZycsXHJcbiAgICAgICAgZGF0ZVBhcnNlcjogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiBwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVyLmZvcm1hdERhdGUocGFyYW1zLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGRhdGVUaW1lOiB7XHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnZGF0ZVN0cmluZycsXHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAnZGF0ZVN0cmluZycsXHJcbiAgICAgICAgZGF0ZVBhcnNlcjogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiBwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVyLmZvcm1hdERhdGVUaW1lKHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjdXJyZW5jeToge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEN1cnJlbmN5KHBhcmFtcy52YWx1ZSlcclxuICAgICAgfSxcclxuICAgICAgaW50ZWdlcjoge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEludGVnZXIocGFyYW1zLnZhbHVlKVxyXG4gICAgICB9LFxyXG4gICAgICBwZXJjZW50YWdlOiB7XHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiBwYXJhbXMgPT4gcGFyYW1zLnZhbHVlID09IG51bGxcclxuICAgICAgICAgID8gJydcclxuICAgICAgICAgIDogYCR7TWF0aC5yb3VuZChwYXJhbXMudmFsdWUgKiAxMDApfSVgLFxyXG4gICAgICB9LFxyXG4gICAgICBmbGFnczoge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJ1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXAoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IE1hcFR5cGUge1xyXG5cclxuICAgIGNvbnN0IGFsbG93ZWQgPSAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJib29sZWFuXCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJ0ZXh0XCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJudW1iZXJcIlxyXG4gICAgICB8fCBjb2xEZWYuY2VsbERhdGFUeXBlID09PSBcImZsYWdzXCIpO1xyXG5cclxuICAgIGlmIChhbGxvd2VkICYmIGNvbHVtbi5tYXApIHtcclxuICAgICAgY29uc3QgbWFwID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb2x1bW4ubWFwVmFsdWVzKTtcclxuXHJcbiAgICAgIGNvbnN0IHZhbGlkID0gaXNSZWNvcmQoXHJcbiAgICAgICAgbWFwLFxyXG4gICAgICAgIGtleSA9PiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyxcclxuICAgICAgICB2YWwgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZydcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghdmFsaWQpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICBpZiAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJmbGFnc1wiKSB7XHJcbiAgICAgICAgKG1hcCBhcyBhbnkpW2dldExhYmVsU3ltYm9sXSA9IChrZXk6IGFueSkgPT4gdGhpcy5mb3JtYXRGbGFncyhrZXksIG1hcCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtYXA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE1hcCh2YWx1ZTogYW55LCBtYXA6IE1hcFR5cGUpXHJcbiAge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXApIHtcclxuICAgICAgdmFyIHJlc3VsdCA9IG1hcFt2YWx1ZV07XHJcblxyXG4gICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBsYWJlbGVkID0gaXNMYWJlbGVkUmVjb3JkKFxyXG4gICAgICAgICAgbWFwLFxyXG4gICAgICAgICAga2V5ID0+IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBrZXkgPT09ICdudW1iZXInLFxyXG4gICAgICAgICAgdmFsID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnLFxyXG4gICAgICAgICAgZ2V0TGFiZWxTeW1ib2xcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAobGFiZWxlZCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gbWFwW2dldExhYmVsU3ltYm9sXSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gcmVzdWx0ID8/IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdEZsYWdzKHZhbHVlOiBhbnksIG1hcDogTWFwVHlwZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcclxuICAgICAgaXNSZWNvcmQobWFwLCBpc051bWVyaWNLZXksIHZhbCA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcclxuICAgICkge1xyXG4gICAgICBpZiAodmFsdWUgPT0gMCkge1xyXG4gICAgICAgIHJldHVybiBtYXBbMF0gPz8gXCIwXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUZsYWdzID0gT2JqZWN0LmtleXMobWFwKVxyXG4gICAgICAgIC5tYXAoTnVtYmVyKVxyXG4gICAgICAgIC5maWx0ZXIoZmxhZyA9PiBmbGFnICE9PSAwKTtcclxuXHJcbiAgICAgIGNvbnN0IGZsYWdzID0gYXZhaWxhYmxlRmxhZ3MuZmlsdGVyKGZsYWcgPT4gKHZhbHVlICYgZmxhZykgPT09IGZsYWcpO1xyXG5cclxuICAgICAgY29uc3Qgc3VtRmxhZ3MgPSBmbGFncy5yZWR1Y2UoKHN1bSwgZikgPT4gc3VtIHwgZiwgMCk7XHJcblxyXG4gICAgICBpZiAoKHZhbHVlICYgc3VtRmxhZ3MpICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZmxhZ3NcclxuICAgICAgICAubWFwKGZsYWcgPT4gbWFwW2ZsYWddKVxyXG4gICAgICAgIC5maWx0ZXIoKGxhYmVsKTogbGFiZWwgaXMgc3RyaW5nID0+ICEhbGFiZWwpXHJcbiAgICAgICAgLmpvaW4oJywgJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGVJbnNpZGVDZWxsKHsgZXZlbnQgfTogU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zPGFueT4pIHtcclxuICAgIGNvbnN0IEdSSURfQ0VMTF9DTEFTU05BTUUgPSBcImFnLWNlbGxcIjtcclxuICAgIGNvbnN0IHsga2V5LCBzaGlmdEtleSB9ID0gZXZlbnQ7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRFdmVudFBhdGgoZXZlbnQpO1xyXG4gICAgY29uc3QgaXNUYWJGb3J3YXJkID0ga2V5ID09PSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSBmYWxzZTtcclxuICAgIGNvbnN0IGlzVGFiQmFja3dhcmQgPSBrZXkgPT09IFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU7XHJcbiAgICBsZXQgc3VwcHJlc3NFdmVudCA9IGZhbHNlO1xyXG4gICAgLy8gSGFuZGxlIGNlbGwgY2hpbGRyZW4gdGFiYmluZ1xyXG4gICAgaWYgKGlzVGFiRm9yd2FyZCB8fCBpc1RhYkJhY2t3YXJkKSB7XHJcbiAgICAgIGNvbnN0IGVHcmlkQ2VsbCA9IHBhdGguZmluZCgoZWwpID0+IHtcclxuICAgICAgICBpZiAoZWwuY2xhc3NMaXN0ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKEdSSURfQ0VMTF9DTEFTU05BTUUpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFlR3JpZENlbGwpIHtcclxuICAgICAgICByZXR1cm4gc3VwcHJlc3NFdmVudDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlcyhlR3JpZENlbGwpO1xyXG4gICAgICBjb25zdCBsYXN0Q2VsbENoaWxkRWwgPVxyXG4gICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50cy5sZW5ndGggLSAxXTtcclxuICAgICAgY29uc3QgZmlyc3RDZWxsQ2hpbGRFbCA9IGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbMF07XHJcbiAgICAgIC8vIFN1cHByZXNzIGtleWJvYXJkIGV2ZW50IGlmIHRhYmJpbmcgZm9yd2FyZCB3aXRoaW4gdGhlIGNlbGwgYW5kIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCBpcyBub3QgdGhlIGxhc3QgY2hpbGRcclxuICAgICAgaWYgKGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHMuaW5kZXhPZihcclxuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaXNUYWJGb3J3YXJkKSB7XHJcbiAgICAgICAgY29uc3QgaXNMYXN0Q2hpbGRGb2N1c2VkID1cclxuICAgICAgICAgIGxhc3RDZWxsQ2hpbGRFbCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0Q2VsbENoaWxkRWw7XHJcbiAgICAgICAgaWYgKCFpc0xhc3RDaGlsZEZvY3VzZWQpIHtcclxuICAgICAgICAgIHN1cHByZXNzRXZlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZUdyaWRDZWxsKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbY3VycmVudEluZGV4ICsgMV0uZm9jdXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gU3VwcHJlc3Mga2V5Ym9hcmQgZXZlbnQgaWYgdGFiYmluZyBiYWNrd2FyZHMgd2l0aGluIHRoZSBjZWxsLCBhbmQgdGhlIGN1cnJlbnQgZm9jdXNlZCBlbGVtZW50IGlzIG5vdCB0aGUgZmlyc3QgY2hpbGRcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY2VsbEhhc0ZvY3VzZWRDaGlsZHJlbiA9XHJcbiAgICAgICAgICBlR3JpZENlbGwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgJiZcclxuICAgICAgICAgIGVHcmlkQ2VsbCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgICAgICAvLyBNYW51YWxseSBzZXQgZm9jdXMgdG8gdGhlIGxhc3QgY2hpbGQgZWxlbWVudCBpZiBjZWxsIGRvZXNuJ3QgaGF2ZSBmb2N1c2VkIGNoaWxkcmVuXHJcbiAgICAgICAgaWYgKCFjZWxsSGFzRm9jdXNlZENoaWxkcmVuKSB7XHJcbiAgICAgICAgICBsYXN0Q2VsbENoaWxkRWwuZm9jdXMoKTtcclxuICAgICAgICAgIC8vIENhbmNlbCBrZXlib2FyZCBwcmVzcywgc28gdGhhdCBpdCBkb2Vzbid0IGZvY3VzIG9uIHRoZSBsYXN0IGNoaWxkIGFuZCB0aGVuIHBhc3MgdGhyb3VnaCB0aGUga2V5Ym9hcmQgcHJlc3MgdG9cclxuICAgICAgICAgIC8vIG1vdmUgdG8gdGhlIDJuZCBsYXN0IGNoaWxkIGVsZW1lbnRcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzRmlyc3RDaGlsZEZvY3VzZWQgPVxyXG4gICAgICAgICAgZmlyc3RDZWxsQ2hpbGRFbCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdENlbGxDaGlsZEVsO1xyXG4gICAgICAgIGlmICghaXNGaXJzdENoaWxkRm9jdXNlZCkge1xyXG4gICAgICAgICAgc3VwcHJlc3NFdmVudCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9PSAtMSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlR3JpZENlbGwpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50c1tjdXJyZW50SW5kZXggLSAxXS5mb2N1cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cHByZXNzRXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV2ZW50UGF0aChldmVudDogRXZlbnQpOiBIVE1MRWxlbWVudFtdIHtcclxuICAgIGNvbnN0IHBhdGg6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuICAgIGxldCBjdXJyZW50VGFyZ2V0OiBhbnkgPSBldmVudC50YXJnZXQ7XHJcbiAgICB3aGlsZSAoY3VycmVudFRhcmdldCkge1xyXG4gICAgICBwYXRoLnB1c2goY3VycmVudFRhcmdldCk7XHJcbiAgICAgIGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcbn1cclxuIl19
|
|
558
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvZ3JpZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNHLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUN4RSxZQUFZLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUMvQyxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQzlDLFdBQVcsRUFBRSxhQUFhLEVBQ2xDLDJCQUEyQixFQUNMLG9CQUFvQixFQUFFLGVBQWUsRUFFOUQsTUFBTSxtQkFBbUIsQ0FBQztBQUUzQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUc1RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNsQixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFLOUMsTUFBTSxPQUFPLFdBQVc7SUFFRjtJQUNW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IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIE1vZHVsZSwgUGFnaW5hdGlvbk1vZHVsZSwgQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlLCBJbmZpbml0ZVJvd01vZGVsTW9kdWxlXHJcbiAgLCBMb2NhbGVNb2R1bGUsIENlbGxTdHlsZU1vZHVsZSwgVmFsaWRhdGlvbk1vZHVsZVxyXG4gICwgUm93U2VsZWN0aW9uTW9kdWxlLCBSb3dTZWxlY3Rpb25PcHRpb25zIFxyXG4gICwgVGV4dEZpbHRlck1vZHVsZSwgTnVtYmVyRmlsdGVyTW9kdWxlLCBEYXRlRmlsdGVyTW9kdWxlXHJcbiAgLCBDb2xEZWYsIHRoZW1lUXVhcnR6LCBpY29uU2V0QWxwaW5lLCBHcmlkT3B0aW9ucywgRGF0YVR5cGVEZWZpbml0aW9uXHJcbiAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGVcclxuICAsIEdyaWRTaXplQ2hhbmdlZEV2ZW50LCBDb2x1bW5BdXRvU2l6ZU1vZHVsZSwgQ29sdW1uQXBpTW9kdWxlXHJcbiAgLCBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXNcclxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JqZWN0VVJMUmVuZGVyZXJDb21wb25lbnQsIERlbGV0ZVJvd0NlbGxSZW5kZXJlciwgQWN0aW9uc0NlbGxSZW5kZXJlciB9IGZyb20gJy4uL3V0aWxzL2dyaWRDZWxscyc7XHJcbmltcG9ydCB7IEZvcm1hdHRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtYXR0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IFNldEZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NldEZpbHRlcic7XHJcbmltcG9ydCB7IGdldEZvY3VzYWJsZXMgfSBmcm9tICcuLi91dGlscy9mb2N1c2FibGUnO1xyXG5pbXBvcnQgeyBpc1JlY29yZCwgaXNMYWJlbGVkUmVjb3JkLCBpc051bWVyaWNLZXkgfSBmcm9tICcuLi9jb21tb24vcmVjb3JkJztcclxuaW1wb3J0IHsgZ2V0TGFiZWxTeW1ib2wgfSBmcm9tICcuLi9jb21tb24vc3ltYm9scyc7XHJcbmltcG9ydCB7XHJcbiAgQUdfR1JJRF9MT0NBTEVfSVQsXHJcbiAgQUdfR1JJRF9MT0NBTEVfRU4sXHJcbiAgQUdfR1JJRF9MT0NBTEVfREUsXHJcbiAgQUdfR1JJRF9MT0NBTEVfRlIsXHJcbiAgQUdfR1JJRF9MT0NBTEVfRVMsXHJcbiAgQUdfR1JJRF9MT0NBTEVfUFQgIFxyXG59IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9sb2NhbGUnO1xyXG5cclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlJztcclxuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxpemUnO1xyXG5cclxudHlwZSBNYXBUeXBlID0gUmVjb3JkPHN0cmluZyB8IG51bWJlciwgc3RyaW5nPiB8IG51bGw7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBHcmlkU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybWF0dGVyOiBGb3JtYXR0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGdldE1vZHVsZXMoKTogTW9kdWxlW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgQ2xpZW50U2lkZVJvd01vZGVsTW9kdWxlXHJcbiAgICAgICwgSW5maW5pdGVSb3dNb2RlbE1vZHVsZVxyXG4gICAgICAsIFBhZ2luYXRpb25Nb2R1bGVcclxuICAgICAgLCBMb2NhbGVNb2R1bGVcclxuICAgICAgLCBDZWxsU3R5bGVNb2R1bGVcclxuICAgICAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGVcclxuICAgICAgLCBUZXh0RmlsdGVyTW9kdWxlXHJcbiAgICAgICwgTnVtYmVyRmlsdGVyTW9kdWxlXHJcbiAgICAgICwgRGF0ZUZpbHRlck1vZHVsZVxyXG4gICAgICAsIENvbHVtbkF1dG9TaXplTW9kdWxlXHJcbiAgICAgICwgQ29sdW1uQXBpTW9kdWxlXHJcbiAgICAgICwgUm93U2VsZWN0aW9uTW9kdWxlXHJcbiAgICAgICwgVmFsaWRhdGlvbk1vZHVsZVxyXG4gICAgXTtcclxuICB9O1xyXG5cclxuICBnZXRPcHRpb25zKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgbGFuZ3VhZ2U6IHN0cmluZyk6IEdyaWRPcHRpb25zIHtcclxuICAgIGNvbnN0IGNvbHVtbkRlZnMgPSB0aGlzLmdldENvbHVtbnMoY29tcG9uZW50LCBmb3JtR3JvdXAsIGxhbmd1YWdlKTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0Um93U2VsZWN0aW9uKGNvbXBvbmVudCwgZm9ybUdyb3VwKTtcclxuICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldFBhZ2luYWJsZShjb21wb25lbnQpO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTaXplKGNvbXBvbmVudCk7XHJcbiAgICBjb25zdCB0ZXh0cyA9IHRoaXMuZ2V0VGV4dHMobGFuZ3VhZ2UpO1xyXG4gICAgY29uc3QgdGhlbWUgPSB0aGlzLmdldFRoZW1lKCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkZWZhdWx0Q29sRGVmOiB7XHJcbiAgICAgICAgZmxvYXRpbmdGaWx0ZXI6IChjb21wb25lbnQuZmxvYXRpbmdGaWx0ZXIgPT09IHRydWUpLFxyXG4gICAgICAgIGhlYWRlckNsYXNzOiAoY29tcG9uZW50LmZsb2F0aW5nRmlsdGVyID09PSB0cnVlKVxyXG4gICAgICAgICAgPyAnc2hvdy1maWx0ZXInIDogJ2hpZGUtZmlsdGVyJ1xyXG4gICAgICB9LFxyXG4gICAgICBzZWxlY3Rpb25Db2x1bW5EZWY6IHtcclxuICAgICAgICBwaW5uZWQ6ICdsZWZ0J1xyXG4gICAgICB9LFxyXG4gICAgICBkYXRhVHlwZURlZmluaXRpb25zOiB0aGlzLmdldERhdGFUeXBlRGVmaW5pdGlvbnMoKSxcclxuICAgICAgY29sdW1uRGVmczogY29sdW1uRGVmcyxcclxuICAgICAgcm93U2VsZWN0aW9uOiBzZWxlY3Rpb24sXHJcbiAgICAgIHBhZ2luYXRpb246IHBhZ2luYXRpb24sXHJcbiAgICAgIHBhZ2luYXRpb25QYWdlU2l6ZTogcGFnZVNpemUsXHJcbiAgICAgIGNhY2hlQmxvY2tTaXplOiBwYWdlU2l6ZSxcclxuICAgICAgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IFs1LCAxMCwgMjAsIDUwXSxcclxuICAgICAgbG9jYWxlVGV4dDogdGV4dHMsXHJcbiAgICAgIGVuYWJsZUNlbGxUZXh0U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICB0aGVtZTogdGhlbWUsICAgICAgXHJcbiAgICAgIG9uR3JpZFNpemVDaGFuZ2VkOiAocGFyYW1zOiBHcmlkU2l6ZUNoYW5nZWRFdmVudCkgPT4ge1xyXG4gICAgICAgIHBhcmFtcy5hcGkuYXV0b1NpemVDb2x1bW5zKFtcImFjdGlvbnNcIl0pO1xyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZChjb21wb25lbnQ6IGFueSwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChjb21wb25lbnQuc2VsZWN0aW9uQ2hhbmdlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb21wb25lbnQuc2VsZWN0aW9uQ2hhbmdlZCwge1xyXG4gICAgICAgIGNhY2hlYWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXh0ZW5kQ29udGV4dDogKCkgPT4gKHtcclxuICAgICAgICAgIFwiZXZlbnRcIjoge1xyXG4gICAgICAgICAgICBzZWxlY3RlZFJvd3M6IGV2ZW50LmFwaS5nZXRTZWxlY3RlZFJvd3MoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbGUoY29tcG9uZW50OiBhbnksIGtleTogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBsb2NhbGl6ZShsYW5ndWFnZSwgY29tcG9uZW50LCBrZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb2x1bW5zKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgbGFuZ3VhZ2U6IHN0cmluZyk6IENvbERlZltdIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBvbmVudC5jb2x1bW5zKSkge1xyXG4gICAgICBjb25zdCBjb2x1bW5zID0gY29tcG9uZW50LmNvbHVtbnMubWFwKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbERlZjogQ29sRGVmID0ge1xyXG4gICAgICAgICAgZmllbGQ6IGNvbHVtbi5rZXksXHJcbiAgICAgICAgICBoZWFkZXJOYW1lOiB0aGlzLmxvY2FsZShjb2x1bW4sICdsYWJlbCcsIGxhbmd1YWdlKSxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Q2VsbERhdGFUeXBlKGNvbHVtbiwgY29sRGVmKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5nZXRNYXAoY29sdW1uLCBjb2xEZWYsIGZvcm1Hcm91cCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Q2VsbFJlbmRlcmVyKGNvbHVtbiwgY29sRGVmLCBtYXApO1xyXG4gICAgICAgIHRoaXMuc2V0UmVzaXphYmxlKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldFNvcnRhYmxlKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldEZpbHRlcihjb2x1bW4sIGNvbERlZiwgbWFwKTtcclxuICAgICAgICB0aGlzLnNldEZpbHRlclBhcmFtcyhjb2x1bW4sIGNvbERlZiwgbWFwKTtcclxuICAgICAgICB0aGlzLnNldFN1cHByZXNzTW92YWJsZShjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRGbGV4KGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldEFsaWduKGNvbHVtbiwgY29sRGVmKTtcclxuICAgICAgICB0aGlzLnNldFBpbm5lZChjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRXaWR0aChjb2x1bW4sIGNvbERlZik7XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZUZvcm1hdHRlcihjb2x1bW4sIGNvbERlZiwgbWFwKTsgICAgICAgIFxyXG4gICAgICAgIHJldHVybiBjb2xEZWY7XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBvbmVudC5hY3Rpb25zKSAmJiBjb21wb25lbnQuYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29sdW1ucy5wdXNoKHtcclxuICAgICAgICAgIGNvbElkOiAnYWN0aW9ucycsXHJcbiAgICAgICAgICBoZWFkZXJOYW1lOiB0aGlzLmxvY2FsZShUZXh0cywgJ0FjdGlvbnMnLCBsYW5ndWFnZSksXHJcbiAgICAgICAgICByZXNpemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZmlsdGVyOiBmYWxzZSxcclxuICAgICAgICAgIGNlbGxEYXRhVHlwZTogZmFsc2UsXHJcbiAgICAgICAgICBwaW5uZWQ6IFwicmlnaHRcIixcclxuICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xyXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcclxuICAgICAgICAgICAgZm9ybUdyb3VwOiBmb3JtR3JvdXBcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjZWxsUmVuZGVyZXI6IEFjdGlvbnNDZWxsUmVuZGVyZXIsXHJcbiAgICAgICAgICBzdXBwcmVzc0tleWJvYXJkRXZlbnQ6IHRoaXMubmF2aWdhdGVJbnNpZGVDZWxsLmJpbmQodGhpcylcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDZWxsRGF0YVR5cGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJzdHJpbmdcIlxyXG4gICAgICAmJiBjb2x1bW4uZGF0YVR5cGUudHJpbSgpICE9PSBcIlwiXHJcbiAgICAgICYmIGNvbHVtbi5kYXRhVHlwZSAhPT0gXCJhdXRvXCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxEYXRhVHlwZSA9IGNvbHVtbi5kYXRhVHlwZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2VsbFJlbmRlcmVyKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiwgbWFwOiBNYXBUeXBlKSB7XHJcbiAgICBpZiAoY29sdW1uLmZvcm1hdCA9PT0gXCJvYmplY3RVUkxcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbFJlbmRlcmVyID0gT2JqZWN0VVJMUmVuZGVyZXJDb21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbHVtbi5mb3JtYXQgPT09IFwiZGVsZXRlUm93XCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxSZW5kZXJlciA9IERlbGV0ZVJvd0NlbGxSZW5kZXJlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJib29sZWFuXCIgJiYgbWFwKSB7XHJcbiAgICAgIGNvbERlZi5jZWxsUmVuZGVyZXIgPSAocGFyYW1zOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRNYXAocGFyYW1zLnZhbHVlLCBtYXApOyBcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRSZXNpemFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmICkge1xyXG4gICAgY29sRGVmLnJlc2l6YWJsZSA9IChjb2x1bW4ucmVzaXplID09PSB0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U29ydGFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBjb2xEZWYuc29ydGFibGUgPSAoY29sdW1uLnNvcnQgPT09IHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWx0ZXIoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBtYXA6IE1hcFR5cGUpIHtcclxuICAgIGlmIChjb2x1bW4uZmlsdGVyID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbERlZi5maWx0ZXIgPSB0cnVlO1xyXG4gICAgICBpZiAobWFwKSB7XHJcbiAgICAgICAgY29sRGVmLmZpbHRlciA9IFNldEZpbHRlckNvbXBvbmVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGaWx0ZXJQYXJhbXMoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBtYXA6IE1hcFR5cGUpIHtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJQYXJhbXM6IGFueSA9IHt9O1xyXG5cclxuICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICd1dWlkJykge1xyXG4gICAgICB0aGlzLnNldFV1aWRGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2ludGVnZXInKSB7XHJcbiAgICAgIHRoaXMuc2V0SW50ZWdlckZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgdGhpcy5zZXREYXRlRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICB0aGlzLnNldEJvb2xlYW5GaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKG1hcCkge1xyXG4gICAgICBmaWx0ZXJQYXJhbXMubWFwID0gbWFwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbERlZi5maWx0ZXJQYXJhbXMgPSBmaWx0ZXJQYXJhbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFV1aWRGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcclxuICAgIGZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gWydlcXVhbHMnLCAnbm90RXF1YWwnXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW50ZWdlckZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IGFueSkge1xyXG4gICAgZmlsdGVyUGFyYW1zLmFsbG93ZWRDaGFyUGF0dGVybiA9ICdcXFxcZCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGVGaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcclxuICAgIGZpbHRlclBhcmFtcy5jb21wYXJhdG9yID0gKGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQ6IERhdGUsIGNlbGxWYWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghY2VsbFZhbHVlKSByZXR1cm4gLTE7XHJcbiAgICAgIGNvbnN0IGNlbGxEYXRlID0gbmV3IERhdGUoY2VsbFZhbHVlKTtcclxuICAgICAgaWYgKGlzTmFOKGNlbGxEYXRlLmdldFRpbWUoKSkpIHJldHVybiAtMTtcclxuXHJcbiAgICAgIGNvbnN0IGNlbGxEYXRlTm9UaW1lID0gbmV3IERhdGUoY2VsbERhdGUuZ2V0RnVsbFllYXIoKSwgY2VsbERhdGUuZ2V0TW9udGgoKSwgY2VsbERhdGUuZ2V0RGF0ZSgpKTtcclxuXHJcbiAgICAgIGlmIChjZWxsRGF0ZU5vVGltZSA8IGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQpIHJldHVybiAtMTtcclxuICAgICAgaWYgKGNlbGxEYXRlTm9UaW1lID4gZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodCkgcmV0dXJuIDE7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRCb29sZWFuRmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtczogYW55KSB7XHJcbiAgICBmaWx0ZXJQYXJhbXMuZmlsdGVyT3B0aW9ucyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICdpbmNsdWRlQWxsJyxcclxuICAgICAgICBkaXNwbGF5TmFtZTogVGV4dHMuQ2hvb3NlT25lLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZGlzcGxheUtleTogJ3RydWUnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5UcnVlLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdmFsdWUgPT09IHRydWVcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGRpc3BsYXlLZXk6ICdmYWxzZScsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFRleHRzLkZhbHNlLFxyXG4gICAgICAgIG51bWJlck9mSW5wdXRzOiAwLFxyXG4gICAgICAgIHByZWRpY2F0ZTogKFtmaWx0ZXJdOiBbYW55XSwgdmFsdWU6IGFueSkgPT4gdmFsdWUgPT09IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAnYmxhbmsnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5CbGFuayxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHZhbHVlID09PSBudWxsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBkaXNwbGF5S2V5OiAnbm90QmxhbmsnLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBUZXh0cy5Ob3RCbGFuayxcclxuICAgICAgICBudW1iZXJPZklucHV0czogMCxcclxuICAgICAgICBwcmVkaWNhdGU6IChbZmlsdGVyXTogW2FueV0sIHZhbHVlOiBhbnkpID0+IHZhbHVlICE9PSBudWxsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgZmlsdGVyUGFyYW1zLnN1cHByZXNzQW5kT3JDb25kaXRpb24gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTdXBwcmVzc01vdmFibGUoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmKSB7XHJcbiAgICBpZiAoIShjb2x1bW4ubW92ZSA9PT0gdHJ1ZSkpIHsgXHJcbiAgICAgIGNvbERlZi5zdXBwcmVzc01vdmFibGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRGbGV4KGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5mbGV4ID09PSB0cnVlKSB7IFxyXG4gICAgICBjb2xEZWYuZmxleCA9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEFsaWduKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKGNvbHVtbi5hbGlnbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgY29sRGVmLmNlbGxTdHlsZSA9IHsgdGV4dEFsaWduOiAnbGVmdCcgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbHVtbi5hbGlnbiA9PT0gXCJjZW50ZXJcIikge1xyXG4gICAgICBjb2xEZWYuY2VsbFN0eWxlID0geyB0ZXh0QWxpZ246ICdjZW50ZXInIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb2x1bW4uYWxpZ24gPT09IFwicmlnaHRcIikgeyBcclxuICAgICAgY29sRGVmLmNlbGxTdHlsZSA9IHsgdGV4dEFsaWduOiAncmlnaHQnIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFBpbm5lZChjb2x1bW46IGFueSwgY29sRGVmOiBDb2xEZWYpIHtcclxuICAgIGlmICh0eXBlb2YgY29sdW1uLnBpbm5lZCA9PT0gXCJzdHJpbmdcIikgeyBcclxuICAgICAgY29sRGVmLnBpbm5lZCA9IGNvbHVtbi5waW5uZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdpZHRoKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZikge1xyXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4ud2lkdGggPT09IFwibnVtYmVyXCIpIHsgXHJcbiAgICAgIGNvbERlZi53aWR0aCA9IGNvbHVtbi53aWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5taW5XaWR0aCA9PT0gXCJudW1iZXJcIikgeyBcclxuICAgICAgY29sRGVmLm1pbldpZHRoID0gY29sdW1uLm1pbldpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgY29sdW1uLm1heFdpZHRoID09PSBcIm51bWJlclwiKSB7IFxyXG4gICAgICBjb2xEZWYubWF4V2lkdGggPSBjb2x1bW4ubWF4V2lkdGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZhbHVlRm9ybWF0dGVyKGNvbHVtbjogYW55LCBjb2xEZWY6IENvbERlZiwgbWFwOiBNYXBUeXBlKSB7XHJcbiAgICBpZiAobWFwKSB7XHJcbiAgICAgIGNvbERlZi52YWx1ZUZvcm1hdHRlciA9IChwYXJhbXMpID0+IHRoaXMuZm9ybWF0TWFwKHBhcmFtcy52YWx1ZSwgbWFwKTsgICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Um93U2VsZWN0aW9uKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IFJvd1NlbGVjdGlvbk9wdGlvbnMgfCB1bmRlZmluZWQgIHtcclxuICAgIGlmIChjb21wb25lbnQuc2VsZWN0aW9uID09PSBcInNpbmdsZVJvd1wiKSB7XHJcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2luZ2xlUm93XCIgfTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbXBvbmVudC5zZWxlY3Rpb24gPT09IFwibXVsdGlSb3dcIikge1xyXG4gICAgICBjb25zdCBvcHRpb25zOiBSb3dTZWxlY3Rpb25PcHRpb25zID0ge1xyXG4gICAgICAgIG1vZGU6IFwibXVsdGlSb3dcIixcclxuICAgICAgICBzZWxlY3RBbGw6ICdmaWx0ZXJlZCcsXHJcbiAgICAgICAgaGlkZURpc2FibGVkQ2hlY2tib3hlczogdHJ1ZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKGNvbXBvbmVudC5pc1NlbGVjdGFibGUpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgIGlzUm93U2VsZWN0YWJsZTogKHJvd05vZGUpID0+IHRoaXMub25Sb3dTZWxlY3RhYmxlKGNvbXBvbmVudCwgZm9ybUdyb3VwLCByb3dOb2RlLmRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBvcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Sb3dTZWxlY3RhYmxlKGNvbXBvbmVudDogYW55LCBmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZGF0YTogYW55KSA6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFkYXRhKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb21wb25lbnQuaXNTZWxlY3RhYmxlLCB7XHJcbiAgICAgIGNhY2hlYWJsZTogZmFsc2UsXHJcbiAgICAgIGV4dGVuZENvbnRleHQ6ICgpID0+ICh7XHJcbiAgICAgICAgXCJldmVudFwiOiB7XHJcbiAgICAgICAgICBkYXRhOiBkYXRhXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gdHJ1ZTsgXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhZ2luYWJsZShjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0eXBlb2YgY29tcG9uZW50LnJvd0NvdW50ID09PSAnbnVtYmVyJyAmJiBjb21wb25lbnQucm93Q291bnQgPiAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFnZVNpemUoY29tcG9uZW50OiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2YgY29tcG9uZW50LnJvd0NvdW50ID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gY29tcG9uZW50LnJvd0NvdW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUZXh0cyhsYW5ndWFnZTogc3RyaW5nKTogYW55IHtcclxuICAgIGlmIChsYW5ndWFnZSA9PT0gJ2l0Jykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfSVQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsYW5ndWFnZSA9PT0gJ2VuJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfRU47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsYW5ndWFnZSA9PT0gJ2RlJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfREU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsYW5ndWFnZSA9PT0gJ2ZyJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfRlI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsYW5ndWFnZSA9PT0gJ2VzJykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfRVM7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsYW5ndWFnZSA9PT0gJ3B0Jykge1xyXG4gICAgICByZXR1cm4gQUdfR1JJRF9MT0NBTEVfUFQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChsYW5ndWFnZSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0lUOyAvLyBuZXV0cmFsXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIEFHX0dSSURfTE9DQUxFX0VOOyAvLyBmYWxsYmFja1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUaGVtZSgpIHtcclxuICAgIHJldHVybiB0aGVtZVF1YXJ0elxyXG4gICAgICAud2l0aFBhcnQoaWNvblNldEFscGluZSlcclxuICAgICAgLndpdGhQYXJhbXMoe1xyXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjRkFGQUZBXCIsXHJcbiAgICAgICAgYm9yZGVyQ29sb3I6IFwiI0Q5RTRGN1wiLFxyXG4gICAgICAgIGJyb3dzZXJDb2xvclNjaGVtZTogXCJsaWdodFwiLFxyXG4gICAgICAgIGNlbGxUZXh0Q29sb3I6IFwiIzAwMTIxQVwiLFxyXG4gICAgICAgIGNvbHVtbkJvcmRlcjogdHJ1ZSxcclxuICAgICAgICBmb250RmFtaWx5OiBcImluaGVyaXRcIixcclxuICAgICAgICBmb250U2l6ZTogMTYsXHJcbiAgICAgICAgaGVhZGVyQmFja2dyb3VuZENvbG9yOiBcIiMwMDI0NjBcIixcclxuICAgICAgICBoZWFkZXJDb2x1bW5Cb3JkZXI6IHRydWUsXHJcbiAgICAgICAgaGVhZGVyQ29sdW1uUmVzaXplSGFuZGxlQ29sb3I6IFwiI0YyRjZGQ1wiLFxyXG4gICAgICAgIGhlYWRlckNvbHVtblJlc2l6ZUhhbmRsZVdpZHRoOiAyLFxyXG4gICAgICAgIGhlYWRlckZvbnRTaXplOiAxNixcclxuICAgICAgICBoZWFkZXJGb250V2VpZ2h0OiA2MDAsXHJcbiAgICAgICAgaGVhZGVyUm93Qm9yZGVyOiBmYWxzZSxcclxuICAgICAgICBoZWFkZXJUZXh0Q29sb3I6IFwiI0YyRjZGQ1wiLFxyXG4gICAgICAgIHJvd0JvcmRlcjogdHJ1ZVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YVR5cGVEZWZpbml0aW9ucygpOiB7IFtjZWxsRGF0YVR5cGU6IHN0cmluZ106IERhdGFUeXBlRGVmaW5pdGlvbjxhbnk+OyB9IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHV1aWQ6IHtcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICd0ZXh0JyxcclxuICAgICAgICBleHRlbmRzRGF0YVR5cGU6ICd0ZXh0J1xyXG4gICAgICB9LFxyXG4gICAgICBkYXRlOiB7XHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnZGF0ZVN0cmluZycsXHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAnZGF0ZVN0cmluZycsXHJcbiAgICAgICAgZGF0ZVBhcnNlcjogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiBwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVyLmZvcm1hdERhdGUocGFyYW1zLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGRhdGVUaW1lOiB7XHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnZGF0ZVN0cmluZycsXHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAnZGF0ZVN0cmluZycsXHJcbiAgICAgICAgZGF0ZVBhcnNlcjogKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiBwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVyLmZvcm1hdERhdGVUaW1lKHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjdXJyZW5jeToge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEN1cnJlbmN5KHBhcmFtcy52YWx1ZSlcclxuICAgICAgfSxcclxuICAgICAgaW50ZWdlcjoge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogcGFyYW1zID0+IHBhcmFtcy52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICA6IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEludGVnZXIocGFyYW1zLnZhbHVlKVxyXG4gICAgICB9LFxyXG4gICAgICBwZXJjZW50YWdlOiB7XHJcbiAgICAgICAgZXh0ZW5kc0RhdGFUeXBlOiAnbnVtYmVyJyxcclxuICAgICAgICBiYXNlRGF0YVR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiBwYXJhbXMgPT4gcGFyYW1zLnZhbHVlID09IG51bGxcclxuICAgICAgICAgID8gJydcclxuICAgICAgICAgIDogYCR7TWF0aC5yb3VuZChwYXJhbXMudmFsdWUgKiAxMDApfSVgLFxyXG4gICAgICB9LFxyXG4gICAgICBmbGFnczoge1xyXG4gICAgICAgIGV4dGVuZHNEYXRhVHlwZTogJ251bWJlcicsXHJcbiAgICAgICAgYmFzZURhdGFUeXBlOiAnbnVtYmVyJ1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRNYXAoY29sdW1uOiBhbnksIGNvbERlZjogQ29sRGVmLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IE1hcFR5cGUge1xyXG5cclxuICAgIGNvbnN0IGFsbG93ZWQgPSAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJib29sZWFuXCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJ0ZXh0XCJcclxuICAgICAgfHwgY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJudW1iZXJcIlxyXG4gICAgICB8fCBjb2xEZWYuY2VsbERhdGFUeXBlID09PSBcImZsYWdzXCIpO1xyXG5cclxuICAgIGlmIChhbGxvd2VkICYmIGNvbHVtbi5tYXApIHtcclxuICAgICAgY29uc3QgbWFwID0gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUoZm9ybUdyb3VwLCBjb2x1bW4ubWFwVmFsdWVzKTtcclxuXHJcbiAgICAgIGNvbnN0IHZhbGlkID0gaXNSZWNvcmQoXHJcbiAgICAgICAgbWFwLFxyXG4gICAgICAgIGtleSA9PiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyxcclxuICAgICAgICB2YWwgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZydcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghdmFsaWQpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICBpZiAoY29sRGVmLmNlbGxEYXRhVHlwZSA9PT0gXCJmbGFnc1wiKSB7XHJcbiAgICAgICAgKG1hcCBhcyBhbnkpW2dldExhYmVsU3ltYm9sXSA9IChrZXk6IGFueSkgPT4gdGhpcy5mb3JtYXRGbGFncyhrZXksIG1hcCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtYXA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdE1hcCh2YWx1ZTogYW55LCBtYXA6IE1hcFR5cGUpXHJcbiAge1xyXG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXApIHtcclxuICAgICAgdmFyIHJlc3VsdCA9IG1hcFt2YWx1ZV07XHJcblxyXG4gICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBsYWJlbGVkID0gaXNMYWJlbGVkUmVjb3JkKFxyXG4gICAgICAgICAgbWFwLFxyXG4gICAgICAgICAga2V5ID0+IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBrZXkgPT09ICdudW1iZXInLFxyXG4gICAgICAgICAgdmFsID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnLFxyXG4gICAgICAgICAgZ2V0TGFiZWxTeW1ib2xcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAobGFiZWxlZCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gbWFwW2dldExhYmVsU3ltYm9sXSh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gcmVzdWx0ID8/IHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcm1hdEZsYWdzKHZhbHVlOiBhbnksIG1hcDogTWFwVHlwZSkge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcclxuICAgICAgaXNSZWNvcmQobWFwLCBpc051bWVyaWNLZXksIHZhbCA9PiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJylcclxuICAgICkge1xyXG4gICAgICBpZiAodmFsdWUgPT0gMCkge1xyXG4gICAgICAgIHJldHVybiBtYXBbMF0gPz8gXCIwXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUZsYWdzID0gT2JqZWN0LmtleXMobWFwKVxyXG4gICAgICAgIC5tYXAoTnVtYmVyKVxyXG4gICAgICAgIC5maWx0ZXIoZmxhZyA9PiBmbGFnICE9PSAwKTtcclxuXHJcbiAgICAgIGNvbnN0IGZsYWdzID0gYXZhaWxhYmxlRmxhZ3MuZmlsdGVyKGZsYWcgPT4gKHZhbHVlICYgZmxhZykgPT09IGZsYWcpO1xyXG5cclxuICAgICAgY29uc3Qgc3VtRmxhZ3MgPSBmbGFncy5yZWR1Y2UoKHN1bSwgZikgPT4gc3VtIHwgZiwgMCk7XHJcblxyXG4gICAgICBpZiAoKHZhbHVlICYgc3VtRmxhZ3MpICE9PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZmxhZ3NcclxuICAgICAgICAubWFwKGZsYWcgPT4gbWFwW2ZsYWddKVxyXG4gICAgICAgIC5maWx0ZXIoKGxhYmVsKTogbGFiZWwgaXMgc3RyaW5nID0+ICEhbGFiZWwpXHJcbiAgICAgICAgLmpvaW4oJywgJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGVJbnNpZGVDZWxsKHsgZXZlbnQgfTogU3VwcHJlc3NLZXlib2FyZEV2ZW50UGFyYW1zPGFueT4pIHtcclxuICAgIGNvbnN0IEdSSURfQ0VMTF9DTEFTU05BTUUgPSBcImFnLWNlbGxcIjtcclxuICAgIGNvbnN0IHsga2V5LCBzaGlmdEtleSB9ID0gZXZlbnQ7XHJcbiAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRFdmVudFBhdGgoZXZlbnQpO1xyXG4gICAgY29uc3QgaXNUYWJGb3J3YXJkID0ga2V5ID09PSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSBmYWxzZTtcclxuICAgIGNvbnN0IGlzVGFiQmFja3dhcmQgPSBrZXkgPT09IFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU7XHJcbiAgICBsZXQgc3VwcHJlc3NFdmVudCA9IGZhbHNlO1xyXG4gICAgLy8gSGFuZGxlIGNlbGwgY2hpbGRyZW4gdGFiYmluZ1xyXG4gICAgaWYgKGlzVGFiRm9yd2FyZCB8fCBpc1RhYkJhY2t3YXJkKSB7XHJcbiAgICAgIGNvbnN0IGVHcmlkQ2VsbCA9IHBhdGguZmluZCgoZWwpID0+IHtcclxuICAgICAgICBpZiAoZWwuY2xhc3NMaXN0ID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKEdSSURfQ0VMTF9DTEFTU05BTUUpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCFlR3JpZENlbGwpIHtcclxuICAgICAgICByZXR1cm4gc3VwcHJlc3NFdmVudDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBmb2N1c2FibGVDaGlsZHJlbkVsZW1lbnRzID0gZ2V0Rm9jdXNhYmxlcyhlR3JpZENlbGwpO1xyXG4gICAgICBjb25zdCBsYXN0Q2VsbENoaWxkRWwgPVxyXG4gICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50cy5sZW5ndGggLSAxXTtcclxuICAgICAgY29uc3QgZmlyc3RDZWxsQ2hpbGRFbCA9IGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbMF07XHJcbiAgICAgIC8vIFN1cHByZXNzIGtleWJvYXJkIGV2ZW50IGlmIHRhYmJpbmcgZm9yd2FyZCB3aXRoaW4gdGhlIGNlbGwgYW5kIHRoZSBjdXJyZW50IGZvY3VzZWQgZWxlbWVudCBpcyBub3QgdGhlIGxhc3QgY2hpbGRcclxuICAgICAgaWYgKGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHMuaW5kZXhPZihcclxuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaXNUYWJGb3J3YXJkKSB7XHJcbiAgICAgICAgY29uc3QgaXNMYXN0Q2hpbGRGb2N1c2VkID1cclxuICAgICAgICAgIGxhc3RDZWxsQ2hpbGRFbCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0Q2VsbENoaWxkRWw7XHJcbiAgICAgICAgaWYgKCFpc0xhc3RDaGlsZEZvY3VzZWQpIHtcclxuICAgICAgICAgIHN1cHByZXNzRXZlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAhPT0gLTEgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZUdyaWRDZWxsKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGZvY3VzYWJsZUNoaWxkcmVuRWxlbWVudHNbY3VycmVudEluZGV4ICsgMV0uZm9jdXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gU3VwcHJlc3Mga2V5Ym9hcmQgZXZlbnQgaWYgdGFiYmluZyBiYWNrd2FyZHMgd2l0aGluIHRoZSBjZWxsLCBhbmQgdGhlIGN1cnJlbnQgZm9jdXNlZCBlbGVtZW50IGlzIG5vdCB0aGUgZmlyc3QgY2hpbGRcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY2VsbEhhc0ZvY3VzZWRDaGlsZHJlbiA9XHJcbiAgICAgICAgICBlR3JpZENlbGwuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgJiZcclxuICAgICAgICAgIGVHcmlkQ2VsbCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgICAgICAvLyBNYW51YWxseSBzZXQgZm9jdXMgdG8gdGhlIGxhc3QgY2hpbGQgZWxlbWVudCBpZiBjZWxsIGRvZXNuJ3QgaGF2ZSBmb2N1c2VkIGNoaWxkcmVuXHJcbiAgICAgICAgaWYgKCFjZWxsSGFzRm9jdXNlZENoaWxkcmVuKSB7XHJcbiAgICAgICAgICBsYXN0Q2VsbENoaWxkRWwuZm9jdXMoKTtcclxuICAgICAgICAgIC8vIENhbmNlbCBrZXlib2FyZCBwcmVzcywgc28gdGhhdCBpdCBkb2Vzbid0IGZvY3VzIG9uIHRoZSBsYXN0IGNoaWxkIGFuZCB0aGVuIHBhc3MgdGhyb3VnaCB0aGUga2V5Ym9hcmQgcHJlc3MgdG9cclxuICAgICAgICAgIC8vIG1vdmUgdG8gdGhlIDJuZCBsYXN0IGNoaWxkIGVsZW1lbnRcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzRmlyc3RDaGlsZEZvY3VzZWQgPVxyXG4gICAgICAgICAgZmlyc3RDZWxsQ2hpbGRFbCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdENlbGxDaGlsZEVsO1xyXG4gICAgICAgIGlmICghaXNGaXJzdENoaWxkRm9jdXNlZCkge1xyXG4gICAgICAgICAgc3VwcHJlc3NFdmVudCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAoY3VycmVudEluZGV4ICE9PSAtMSB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlR3JpZENlbGwpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZm9jdXNhYmxlQ2hpbGRyZW5FbGVtZW50c1tjdXJyZW50SW5kZXggLSAxXS5mb2N1cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1cHByZXNzRXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEV2ZW50UGF0aChldmVudDogRXZlbnQpOiBIVE1MRWxlbWVudFtdIHtcclxuICAgIGNvbnN0IHBhdGg6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuICAgIGxldCBjdXJyZW50VGFyZ2V0OiBhbnkgPSBldmVudC50YXJnZXQ7XHJcbiAgICB3aGlsZSAoY3VycmVudFRhcmdldCkge1xyXG4gICAgICBwYXRoLnB1c2goY3VycmVudFRhcmdldCk7XHJcbiAgICAgIGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGF0aDtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Injectable, Optional } from '@angular/core';
|
|
2
2
|
import { FormArray } from '@angular/forms';
|
|
3
3
|
import { ToProxy } from '../utils/functions';
|
|
4
|
-
import { Subject, takeUntil } from "rxjs";
|
|
4
|
+
import { Subject, takeUntil, isObservable, take } from "rxjs";
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "../services/feel.service";
|
|
7
7
|
import * as i2 from "../services/weak.service";
|
|
@@ -44,6 +44,26 @@ export class ProgrammabilityService {
|
|
|
44
44
|
return "";
|
|
45
45
|
}
|
|
46
46
|
;
|
|
47
|
+
watchExpression(formGroup, value, callback) {
|
|
48
|
+
if (this.isExpression(value) && callback) {
|
|
49
|
+
const expression = this.getExpression(value);
|
|
50
|
+
const evaluateAndCall = () => {
|
|
51
|
+
const result = this.evalExpression(formGroup, expression, { cacheable: false });
|
|
52
|
+
if (isObservable(result)) {
|
|
53
|
+
result.pipe(take(1)).subscribe((data) => {
|
|
54
|
+
callback(data);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
callback(result);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
this.watchingExpression(formGroup, expression, () => {
|
|
62
|
+
evaluateAndCall();
|
|
63
|
+
});
|
|
64
|
+
evaluateAndCall();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
47
67
|
evaluateString(formGroup, value) {
|
|
48
68
|
if (this.isExpression(value)) {
|
|
49
69
|
return this.evalExpression(formGroup, this.getExpression(value));
|
|
@@ -125,7 +145,7 @@ export class ProgrammabilityService {
|
|
|
125
145
|
if (cacheable) {
|
|
126
146
|
const watchKey = `:watch(${expression})`;
|
|
127
147
|
this.weakService.call(this, watchKey, () => {
|
|
128
|
-
this.
|
|
148
|
+
this.watchingExpression(formGroup, expression, () => this.weakService.invalidate(this, expression));
|
|
129
149
|
return true;
|
|
130
150
|
});
|
|
131
151
|
return this.weakService.call(this, expression, evaluate);
|
|
@@ -198,13 +218,13 @@ export class ProgrammabilityService {
|
|
|
198
218
|
}
|
|
199
219
|
return context;
|
|
200
220
|
}
|
|
201
|
-
|
|
221
|
+
watchingExpression(formGroup, expression, callback) {
|
|
202
222
|
const context = this.getContext(formGroup);
|
|
203
223
|
const dependencies = this.feelService.getDependencies(expression, context);
|
|
204
|
-
this.
|
|
224
|
+
this.watchingDependencies(formGroup, dependencies, callback);
|
|
205
225
|
}
|
|
206
226
|
;
|
|
207
|
-
|
|
227
|
+
watchingDependencies(formGroup, dependencies, callback) {
|
|
208
228
|
const parentName = "parent";
|
|
209
229
|
const subscribe = (control) => {
|
|
210
230
|
control.valueChanges
|
|
@@ -250,4 +270,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
250
270
|
}] }, { type: i7.ScopeService, decorators: [{
|
|
251
271
|
type: Optional
|
|
252
272
|
}] }] });
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQW1CLFNBQVMsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBUXZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBRzFDLE1BQU0sT0FBTyxzQkFBc0I7SUFFYjtJQUNSO0lBQ0E7SUFDQTtJQUNBO0lBQ1k7SUFDQTtJQU54QixZQUFvQixXQUF3QixFQUNoQyxXQUF3QixFQUN4QixZQUEwQixFQUMxQixhQUE0QixFQUM1QixlQUFnQyxFQUNwQixRQUF5QixFQUN6QixLQUFtQjtRQU52QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUd6QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVnQixtQkFBbUIsQ0FBc0I7SUFFbEQsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdkMsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFD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Q0FBQztRQUNILENBQUM7SUFDSCxDQUFDO3dHQTVRVSxzQkFBc0I7NEdBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVTs7MEJBUUosUUFBUTs7MEJBQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRmVlbFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mZWVsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTY29wZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY29wZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVnaXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcmVnaXN0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mdW5jdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2Vha1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy93ZWFrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb1Byb3h5IH0gZnJvbSAnLi4vdXRpbHMvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFByb2dyYW1tYWJpbGl0eVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZlZWxTZXJ2aWNlOiBGZWVsU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHdlYWtTZXJ2aWNlOiBXZWFrU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZ1bmN0aW9uU2VydmljZTogRnVuY3Rpb25TZXJ2aWNlXHJcbiAgICAsIEBPcHRpb25hbCgpIHByaXZhdGUgcmVnaXN0ZXI6IFJlZ2lzdGVyU2VydmljZVxyXG4gICAgLCBAT3B0aW9uYWwoKSBwcml2YXRlIHNjb3BlOiBTY29wZVNlcnZpY2VcclxuICApIHtcclxuXHJcbiAgICB0aGlzLnByZWRlZmluZWRGdW5jdGlvbnMgPSB0aGlzLmdldFByZWRlZmluZWRGdW5jdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlZGVmaW5lZEZ1bmN0aW9uczogUmVjb3JkPHN0cmluZywgYW55PjtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBpc0V4cHJlc3Npb24odGV4dDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRleHQgIT0gbnVsbCAmJiB0ZXh0LnN0YXJ0c1dpdGgoXCI9XCIpO1xyXG4gIH07XHJcblxyXG4gIGdldEV4cHJlc3Npb24odGV4dDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odGV4dCkpXHJcbiAgICAgIHJldHVybiB0ZXh0IS5zdWJzdHJpbmcoMSk7XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9O1xyXG5cclxuICBldmFsdWF0ZVN0cmluZyhmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuaXNFeHByZXNzaW9uKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ldmFsRXhwcmVzc2lvbihmb3JtR3JvdXAsIHRoaXMuZ2V0RXhwcmVzc2lvbih2YWx1ZSkpIGFzIHN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZSA/PyBcIlwiO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVCb29sZWFuKGZvcm1Hcm91cDogRm9ybUdyb3VwLCB2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyB8IG51bGwsIG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyA9IHt9KTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgY29uc3Qgc3RyVmFsdWU6IHN0cmluZyA9IHZhbHVlO1xyXG4gICAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24oc3RyVmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24oc3RyVmFsdWUpLCBvcHRpb25zKSBhcyBib29sZWFuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlTnVtYmVyKGZvcm1Hcm91cDogRm9ybUdyb3VwLCB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjb25zdCBzdHJWYWx1ZTogc3RyaW5nID0gdmFsdWU7XHJcbiAgICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbihzdHJWYWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ldmFsRXhwcmVzc2lvbihmb3JtR3JvdXAsIHRoaXMuZ2V0RXhwcmVzc2lvbihzdHJWYWx1ZSkpIGFzIG51bWJlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IHN0cmluZyB8IG51bGwsIG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyA9IHsgfSk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV2YWxFeHByZXNzaW9uKGZvcm1Hcm91cCwgdGhpcy5nZXRFeHByZXNzaW9uKHZhbHVlKSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVGVtcGxhdGUoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHZhbHVlOiBzdHJpbmcgfCBudWxsKTogYW55IHtcclxuXHJcbiAgICBsZXQgdGVtcGxhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgdGVtcGxhdGUgPSB0aGlzLmV2YWxFeHByZXNzaW9uKGZvcm1Hcm91cCwgdGhpcy5nZXRFeHByZXNzaW9uKHZhbHVlKSkgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRlbXBsYXRlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZXZhbFRlbXBsYXRlKGZvcm1Hcm91cCwgdGVtcGxhdGUgPz8gXCJcIik7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZVVuYXJ5KGZvcm1Hcm91cDogRm9ybUdyb3VwLCB2YWx1ZTogc3RyaW5nIHwgbnVsbCwgaW5wdXQ6IGFueSk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV2YWxVbmFyeVRlc3QoZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBpbnB1dCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGludmFsaWRhdGUodmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgdGhpcy53ZWFrU2VydmljZS5pbnZhbGlkYXRlKHRoaXMsIHRoaXMuZ2V0RXhwcmVzc2lvbih2YWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWNoZWFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIGV2YWxVbmFyeVRlc3QoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGV4cHJlc3Npb246IHN0cmluZywgaW5wdXQ6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmVlbFNlcnZpY2UuZXZhbFVuYXJ5VGVzdChleHByZXNzaW9uXHJcbiAgICAgICAgLCB0aGlzLmdldENvbnRleHQoZm9ybUdyb3VwKVxyXG4gICAgICAgICwgaW5wdXQpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhleHByZXNzaW9uLCBlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxFeHByZXNzaW9uKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBleHByZXNzaW9uOiBzdHJpbmcsIG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyA9IHt9KTogYW55IHtcclxuICAgIGNvbnN0IGV2YWx1YXRlID0gKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZlZWxTZXJ2aWNlLmV2YWxFeHByZXNzaW9uKGV4cHJlc3Npb25cclxuICAgICAgICAgICwgdGhpcy5nZXRDb250ZXh0KGZvcm1Hcm91cCwgb3B0aW9ucykpXHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhleHByZXNzaW9uLCBlKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjYWNoZWFibGUgPSBvcHRpb25zLmNhY2hlYWJsZSA/PyB0aGlzLmNhY2hlYWJsZTtcclxuXHJcbiAgICBpZiAoY2FjaGVhYmxlKSB7XHJcbiAgICAgIGNvbnN0IHdhdGNoS2V5ID0gYDp3YXRjaCgke2V4cHJlc3Npb259KWA7XHJcblxyXG4gICAgICB0aGlzLndlYWtTZXJ2aWNlLmNhbGwodGhpcywgd2F0Y2hLZXksICgpID0+IHtcclxuICAgICAgICB0aGlzLndhdGNoRXhwcmVzc2lvbihmb3JtR3JvdXAsIGV4cHJlc3Npb25cclxuICAgICAgICAgICwgKCkgPT4gdGhpcy53ZWFrU2VydmljZS5pbnZhbGlkYXRlKHRoaXMsIGV4cHJlc3Npb24pKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy53ZWFrU2VydmljZS5jYWxsKHRoaXMsIGV4cHJlc3Npb24sIGV2YWx1YXRlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZXZhbHVhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbFRlbXBsYXRlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBleHByZXNzaW9uOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmVlbFNlcnZpY2UuZXZhbFRlbXBsYXRlKGV4cHJlc3Npb25cclxuICAgICAgICAsIHRoaXMuZ2V0Q29udGV4dChmb3JtR3JvdXApKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByZWRlZmluZWRGdW5jdGlvbnMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcblxyXG4gICAgY29uc3QgcHJvdmlkZXJzOiBJRXZhbHVhdG9yUHJvdmlkZXJbXSA9IFtcclxuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZSxcclxuICAgICAgdGhpcy5mdW5jdGlvblNlcnZpY2UsXHJcbiAgICAgIHRoaXMucmVnaXN0ZXIgICAgICBcclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIHByb3ZpZGVycy5yZWR1Y2UoKGFjYywgcHJvdmlkZXIpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5hY2MsXHJcbiAgICAgICAgLi4ucHJvdmlkZXIuZ2V0Q29udGV4dCgpXHJcbiAgICAgIH07XHJcbiAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhcmVudENvbnRleHQoZm9ybUdyb3VwOiBGb3JtR3JvdXAgfCBudWxsKTogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwge1xyXG4gICAgaWYgKGZvcm1Hcm91cCA9PT0gbnVsbCkgeyBcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoZm9ybUdyb3VwKTtcclxuXHJcbiAgICBpZiAoIXBhcmVudCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5wYXJlbnQudmFsdWUsXHJcbiAgICAgIGZvcm1Hcm91cDogKCkgPT4gcGFyZW50LFxyXG4gICAgICBwYXJlbnQ6ICgpID0+IHRoaXMuZ2V0UGFyZW50Q29udGV4dChwYXJlbnQpXHJcbiAgICB9OyAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyZW50KGZvcm1Hcm91cDogRm9ybUdyb3VwKSA6IEZvcm1Hcm91cCB8IG51bGwge1xyXG4gICAgbGV0IHBhcmVudCA9IGZvcm1Hcm91cC5wYXJlbnQ7XHJcblxyXG4gICAgd2hpbGUgKHBhcmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICBwYXJlbnQgPSBwYXJlbnQ/LnBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFyZW50IGFzIEZvcm1Hcm91cCB8IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbnRleHQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG5cclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwIHwgbnVsbDtcclxuXHJcbiAgICBjb25zdCBiYXNlQ29udGV4dCA9IGZvcm1Hcm91cD8udmFsdWUgPz8geyB9O1xyXG5cclxuICAgIGxldCBjb250ZXh0ID0ge1xyXG4gICAgICAuLi5iYXNlQ29udGV4dCxcclxuICAgICAgcGFyZW50OiAoKSA9PiB0aGlzLmdldFBhcmVudENvbnRleHQoZm9ybUdyb3VwKSxcclxuICAgICAgZm9ybUdyb3VwOiAoKSA9PiBUb1Byb3h5KGZvcm1Hcm91cCksXHJcbiAgICAgIF86IHRoaXMuc2NvcGU/LmdldENvbnRleHQoKSxcclxuICAgICAgZm46IHRoaXMucHJlZGVmaW5lZEZ1bmN0aW9uc1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zLmV4dGVuZENvbnRleHQpIHtcclxuICAgICAgY29uc3QgZXh0ZW5kZWQgPSBvcHRpb25zLmV4dGVuZENvbnRleHQoKTtcclxuICAgICAgaWYgKGV4dGVuZGVkKSB7XHJcbiAgICAgICAgY29udGV4dCA9IHtcclxuICAgICAgICAgIC4uLmNvbnRleHQsXHJcbiAgICAgICAgICAuLi5leHRlbmRlZFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXRjaEV4cHJlc3Npb24oZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGV4cHJlc3Npb246IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoZm9ybUdyb3VwKTtcclxuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMuZmVlbFNlcnZpY2UuZ2V0RGVwZW5kZW5jaWVzKGV4cHJlc3Npb24sIGNvbnRleHQpO1xyXG4gICAgdGhpcy53YXRjaERlcGVuZGVuY2llcyhmb3JtR3JvdXAsIGRlcGVuZGVuY2llcywgY2FsbGJhY2spO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgd2F0Y2hEZXBlbmRlbmNpZXMoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGRlcGVuZGVuY2llczogKHN0cmluZyB8IHN0cmluZ1tdKVtdLCBjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFyZW50TmFtZTogc3RyaW5nID0gXCJwYXJlbnRcIjtcclxuXHJcbiAgICBjb25zdCBzdWJzY3JpYmUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY2Ugb2YgZGVwZW5kZW5jaWVzKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlcGVuZGVuY2UpKSB7XHJcbiAgICAgICAgbGV0IHRhcmdldEZvcm06IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBmb3JtR3JvdXA7XHJcbiAgICAgICAgbGV0IGNvbnRyb2xQYXRoID0gZGVwZW5kZW5jZTtcclxuXHJcbiAgICAgICAgd2hpbGUgKGNvbnRyb2xQYXRoLmxlbmd0aCA+IDAgJiYgY29udHJvbFBhdGhbMF0gPT09IHBhcmVudE5hbWUpIHtcclxuICAgICAgICAgIGlmICghdGFyZ2V0Rm9ybS5wYXJlbnQpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgdGFyZ2V0Rm9ybSA9IHRhcmdldEZvcm0ucGFyZW50O1xyXG4gICAgICAgICAgY29udHJvbFBhdGggPSBjb250cm9sUGF0aC5zbGljZSgxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb250cm9sUGF0aC5sZW5ndGggPiAwICYmIHRhcmdldEZvcm0pIHtcclxuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0YXJnZXRGb3JtLmdldChjb250cm9sUGF0aCk7XHJcbiAgICAgICAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICAgICAgICBzdWJzY3JpYmUoY29udHJvbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGRlcGVuZGVuY2UpO1xyXG4gICAgICAgIGlmIChjb250cm9sKSB7XHJcbiAgICAgICAgICBzdWJzY3JpYmUoY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9ICAgIFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRXZhbHVhdG9yUHJvdmlkZXIge1xyXG4gIGdldENvbnRleHQoKTogUmVjb3JkPHN0cmluZywgYW55PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZU9wdGlvbnMge1xyXG4gIGNhY2hlYWJsZT86IGJvb2xlYW47XHJcbiAgZXh0ZW5kQ29udGV4dD86IEV4dGVuZENvbnRleHRGbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRXh0ZW5kQ29udGV4dEZuID0gKCkgPT4gUmVjb3JkPHN0cmluZywgYW55PjtcclxuIl19
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQW1CLFNBQVMsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBUXZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFHOUQsTUFBTSxPQUFPLHNCQUFzQjtJQUViO0lBQ1I7SUFDQTtJQUNBO0lBQ0E7SUFDWTtJQUNBO0lBTnhCLFlBQW9CLFdBQXdCLEVBQ2hDLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLGVBQWdDLEVBQ3BCLFFBQXlCLEVBQ3pCLEtBQW1CO1FBTnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBR3pDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRWdCLG1CQUFtQixDQUFzQjtJQUVsRCxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV2QyxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUs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QU0sVUFBVSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3RDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLFVBQVUsR0FBMkIsU0FBUyxDQUFDO2dCQUNuRCxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBRTdCLE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUMvRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07d0JBQ3BCLE1BQU07b0JBQ1IsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7b0JBQy9CLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO2dCQUVELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ3pDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzVDLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQ1osU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNyQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7d0dBdFNVLHNCQUFzQjs0R0FBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQURsQyxVQUFVOzswQkFRSixRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGZWVsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZlZWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjb3BlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Njb3BlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWdpc3RlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZWdpc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEZ1bmN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Z1bmN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZWFrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dlYWsuc2VydmljZSc7XHJcbmltcG9ydCB7IFRvUHJveHkgfSBmcm9tICcuLi91dGlscy9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwsIGlzT2JzZXJ2YWJsZSwgdGFrZSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmZWVsU2VydmljZTogRmVlbFNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSB3ZWFrU2VydmljZTogV2Vha1NlcnZpY2VcclxuICAgICwgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBmdW5jdGlvblNlcnZpY2U6IEZ1bmN0aW9uU2VydmljZVxyXG4gICAgLCBAT3B0aW9uYWwoKSBwcml2YXRlIHJlZ2lzdGVyOiBSZWdpc3RlclNlcnZpY2VcclxuICAgICwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzY29wZTogU2NvcGVTZXJ2aWNlXHJcbiAgKSB7XHJcblxyXG4gICAgdGhpcy5wcmVkZWZpbmVkRnVuY3Rpb25zID0gdGhpcy5nZXRQcmVkZWZpbmVkRnVuY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHByZWRlZmluZWRGdW5jdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT47XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgaXNFeHByZXNzaW9uKHRleHQ6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0ZXh0ICE9IG51bGwgJiYgdGV4dC5zdGFydHNXaXRoKFwiPVwiKTtcclxuICB9O1xyXG5cclxuICBnZXRFeHByZXNzaW9uKHRleHQ6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuaXNFeHByZXNzaW9uKHRleHQpKVxyXG4gICAgICByZXR1cm4gdGV4dCEuc3Vic3RyaW5nKDEpO1xyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfTtcclxuXHJcbiAgd2F0Y2hFeHByZXNzaW9uKGZvcm1Hcm91cDogRm9ybUdyb3VwLCB2YWx1ZTogc3RyaW5nIHwgbnVsbCwgY2FsbGJhY2s6ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odmFsdWUpICYmIGNhbGxiYWNrKSB7XHJcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpO1xyXG5cclxuICAgICAgY29uc3QgZXZhbHVhdGVBbmRDYWxsID0gKCkgPT4geyAgICAgICAgXHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ldmFsRXhwcmVzc2lvbihmb3JtR3JvdXAsIGV4cHJlc3Npb24sIHsgY2FjaGVhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICAgIHJlc3VsdC5waXBlKFxyXG4gICAgICAgICAgICB0YWtlKDEpXHJcbiAgICAgICAgICApLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY2FsbGJhY2socmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMud2F0Y2hpbmdFeHByZXNzaW9uKGZvcm1Hcm91cCwgZXhwcmVzc2lvbiwgKCkgPT4ge1xyXG4gICAgICAgIGV2YWx1YXRlQW5kQ2FsbCgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGV2YWx1YXRlQW5kQ2FsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVTdHJpbmcoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHZhbHVlOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpKSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUgPz8gXCJcIjtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsLCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGNvbnN0IHN0clZhbHVlOiBzdHJpbmcgPSB2YWx1ZTtcclxuICAgICAgaWYgKHRoaXMuaXNFeHByZXNzaW9uKHN0clZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmV2YWxFeHByZXNzaW9uKGZvcm1Hcm91cCwgdGhpcy5nZXRFeHByZXNzaW9uKHN0clZhbHVlKSwgb3B0aW9ucykgYXMgYm9vbGVhbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZU51bWJlcihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgY29uc3Qgc3RyVmFsdWU6IHN0cmluZyA9IHZhbHVlO1xyXG4gICAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24oc3RyVmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24oc3RyVmFsdWUpKSBhcyBudW1iZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGUoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHZhbHVlOiBzdHJpbmcgfCBudWxsLCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7IH0pOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuaXNFeHByZXNzaW9uKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ldmFsRXhwcmVzc2lvbihmb3JtR3JvdXAsIHRoaXMuZ2V0RXhwcmVzc2lvbih2YWx1ZSksIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZVRlbXBsYXRlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCB2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IGFueSB7XHJcblxyXG4gICAgbGV0IHRlbXBsYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odmFsdWUpKSB7XHJcbiAgICAgIHRlbXBsYXRlID0gdGhpcy5ldmFsRXhwcmVzc2lvbihmb3JtR3JvdXAsIHRoaXMuZ2V0RXhwcmVzc2lvbih2YWx1ZSkpIGFzIHN0cmluZztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0ZW1wbGF0ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmV2YWxUZW1wbGF0ZShmb3JtR3JvdXAsIHRlbXBsYXRlID8/IFwiXCIpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVVbmFyeShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IHN0cmluZyB8IG51bGwsIGlucHV0OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuaXNFeHByZXNzaW9uKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ldmFsVW5hcnlUZXN0KGZvcm1Hcm91cCwgdGhpcy5nZXRFeHByZXNzaW9uKHZhbHVlKSwgaW5wdXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBpbnZhbGlkYXRlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odmFsdWUpKSB7XHJcbiAgICAgIHRoaXMud2Vha1NlcnZpY2UuaW52YWxpZGF0ZSh0aGlzLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FjaGVhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBldmFsVW5hcnlUZXN0KGZvcm1Hcm91cDogRm9ybUdyb3VwLCBleHByZXNzaW9uOiBzdHJpbmcsIGlucHV0OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZlZWxTZXJ2aWNlLmV2YWxVbmFyeVRlc3QoZXhwcmVzc2lvblxyXG4gICAgICAgICwgdGhpcy5nZXRDb250ZXh0KGZvcm1Hcm91cClcclxuICAgICAgICAsIGlucHV0KTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coZXhwcmVzc2lvbiwgZSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsRXhwcmVzc2lvbihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZXhwcmVzc2lvbjogc3RyaW5nLCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IGFueSB7XHJcbiAgICBjb25zdCBldmFsdWF0ZSA9ICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mZWVsU2VydmljZS5ldmFsRXhwcmVzc2lvbihleHByZXNzaW9uXHJcbiAgICAgICAgICAsIHRoaXMuZ2V0Q29udGV4dChmb3JtR3JvdXAsIG9wdGlvbnMpKVxyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXhwcmVzc2lvbiwgZSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgY2FjaGVhYmxlID0gb3B0aW9ucy5jYWNoZWFibGUgPz8gdGhpcy5jYWNoZWFibGU7XHJcblxyXG4gICAgaWYgKGNhY2hlYWJsZSkge1xyXG4gICAgICBjb25zdCB3YXRjaEtleSA9IGA6d2F0Y2goJHtleHByZXNzaW9ufSlgO1xyXG5cclxuICAgICAgdGhpcy53ZWFrU2VydmljZS5jYWxsKHRoaXMsIHdhdGNoS2V5LCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy53YXRjaGluZ0V4cHJlc3Npb24oZm9ybUdyb3VwLCBleHByZXNzaW9uXHJcbiAgICAgICAgICAsICgpID0+IHRoaXMud2Vha1NlcnZpY2UuaW52YWxpZGF0ZSh0aGlzLCBleHByZXNzaW9uKSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMud2Vha1NlcnZpY2UuY2FsbCh0aGlzLCBleHByZXNzaW9uLCBldmFsdWF0ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIGV2YWx1YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxUZW1wbGF0ZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZXhwcmVzc2lvbjogc3RyaW5nKTogYW55IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZlZWxTZXJ2aWNlLmV2YWxUZW1wbGF0ZShleHByZXNzaW9uXHJcbiAgICAgICAgLCB0aGlzLmdldENvbnRleHQoZm9ybUdyb3VwKSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQcmVkZWZpbmVkRnVuY3Rpb25zKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG5cclxuICAgIGNvbnN0IHByb3ZpZGVyczogSUV2YWx1YXRvclByb3ZpZGVyW10gPSBbXHJcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZSxcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UsXHJcbiAgICAgIHRoaXMuZnVuY3Rpb25TZXJ2aWNlLFxyXG4gICAgICB0aGlzLnJlZ2lzdGVyICAgICAgXHJcbiAgICBdO1xyXG5cclxuICAgIHJldHVybiBwcm92aWRlcnMucmVkdWNlKChhY2MsIHByb3ZpZGVyKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uYWNjLFxyXG4gICAgICAgIC4uLnByb3ZpZGVyLmdldENvbnRleHQoKVxyXG4gICAgICB9O1xyXG4gICAgfSwge30pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJlbnRDb250ZXh0KGZvcm1Hcm91cDogRm9ybUdyb3VwIHwgbnVsbCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsIHtcclxuICAgIGlmIChmb3JtR3JvdXAgPT09IG51bGwpIHsgXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KGZvcm1Hcm91cCk7XHJcblxyXG4gICAgaWYgKCFwYXJlbnQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4ucGFyZW50LnZhbHVlLFxyXG4gICAgICBmb3JtR3JvdXA6ICgpID0+IHBhcmVudCxcclxuICAgICAgcGFyZW50OiAoKSA9PiB0aGlzLmdldFBhcmVudENvbnRleHQocGFyZW50KVxyXG4gICAgfTsgICAgXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhcmVudChmb3JtR3JvdXA6IEZvcm1Hcm91cCkgOiBGb3JtR3JvdXAgfCBudWxsIHtcclxuICAgIGxldCBwYXJlbnQgPSBmb3JtR3JvdXAucGFyZW50O1xyXG5cclxuICAgIHdoaWxlIChwYXJlbnQgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgcGFyZW50ID0gcGFyZW50Py5wYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmVudCBhcyBGb3JtR3JvdXAgfCBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb250ZXh0KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgb3B0aW9uczogRXZhbHVhdGVPcHRpb25zID0ge30pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuXHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cCB8IG51bGw7XHJcblxyXG4gICAgY29uc3QgYmFzZUNvbnRleHQgPSBmb3JtR3JvdXA/LnZhbHVlID8/IHsgfTtcclxuXHJcbiAgICBsZXQgY29udGV4dCA9IHtcclxuICAgICAgLi4uYmFzZUNvbnRleHQsXHJcbiAgICAgIHBhcmVudDogKCkgPT4gdGhpcy5nZXRQYXJlbnRDb250ZXh0KGZvcm1Hcm91cCksXHJcbiAgICAgIGZvcm1Hcm91cDogKCkgPT4gVG9Qcm94eShmb3JtR3JvdXApLFxyXG4gICAgICBfOiB0aGlzLnNjb3BlPy5nZXRDb250ZXh0KCksXHJcbiAgICAgIGZuOiB0aGlzLnByZWRlZmluZWRGdW5jdGlvbnNcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucy5leHRlbmRDb250ZXh0KSB7XHJcbiAgICAgIGNvbnN0IGV4dGVuZGVkID0gb3B0aW9ucy5leHRlbmRDb250ZXh0KCk7XHJcbiAgICAgIGlmIChleHRlbmRlZCkge1xyXG4gICAgICAgIGNvbnRleHQgPSB7XHJcbiAgICAgICAgICAuLi5jb250ZXh0LFxyXG4gICAgICAgICAgLi4uZXh0ZW5kZWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29udGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgd2F0Y2hpbmdFeHByZXNzaW9uKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBleHByZXNzaW9uOiBzdHJpbmcsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KGZvcm1Hcm91cCk7XHJcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLmZlZWxTZXJ2aWNlLmdldERlcGVuZGVuY2llcyhleHByZXNzaW9uLCBjb250ZXh0KTtcclxuICAgIHRoaXMud2F0Y2hpbmdEZXBlbmRlbmNpZXMoZm9ybUdyb3VwLCBkZXBlbmRlbmNpZXMsIGNhbGxiYWNrKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHdhdGNoaW5nRGVwZW5kZW5jaWVzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBkZXBlbmRlbmNpZXM6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSwgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhcmVudE5hbWU6IHN0cmluZyA9IFwicGFyZW50XCI7XHJcblxyXG4gICAgY29uc3Qgc3Vic2NyaWJlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBjb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmNlIG9mIGRlcGVuZGVuY2llcykge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXBlbmRlbmNlKSkge1xyXG4gICAgICAgIGxldCB0YXJnZXRGb3JtOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gZm9ybUdyb3VwO1xyXG4gICAgICAgIGxldCBjb250cm9sUGF0aCA9IGRlcGVuZGVuY2U7XHJcblxyXG4gICAgICAgIHdoaWxlIChjb250cm9sUGF0aC5sZW5ndGggPiAwICYmIGNvbnRyb2xQYXRoWzBdID09PSBwYXJlbnROYW1lKSB7XHJcbiAgICAgICAgICBpZiAoIXRhcmdldEZvcm0ucGFyZW50KVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIHRhcmdldEZvcm0gPSB0YXJnZXRGb3JtLnBhcmVudDtcclxuICAgICAgICAgIGNvbnRyb2xQYXRoID0gY29udHJvbFBhdGguc2xpY2UoMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29udHJvbFBhdGgubGVuZ3RoID4gMCAmJiB0YXJnZXRGb3JtKSB7XHJcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gdGFyZ2V0Rm9ybS5nZXQoY29udHJvbFBhdGgpO1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgICAgc3Vic2NyaWJlKGNvbnRyb2wpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChkZXBlbmRlbmNlKTtcclxuICAgICAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICAgICAgc3Vic2NyaWJlKGNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSAgICBcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV2YWx1YXRvclByb3ZpZGVyIHtcclxuICBnZXRDb250ZXh0KCk6IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdGVPcHRpb25zIHtcclxuICBjYWNoZWFibGU/OiBib29sZWFuO1xyXG4gIGV4dGVuZENvbnRleHQ/OiBFeHRlbmRDb250ZXh0Rm47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEV4dGVuZENvbnRleHRGbiA9ICgpID0+IFJlY29yZDxzdHJpbmcsIGFueT47XHJcbiJdfQ==
|
|
@@ -28,7 +28,6 @@ export class WeakService {
|
|
|
28
28
|
}
|
|
29
29
|
const observable = isObservable(result);
|
|
30
30
|
if (observable) {
|
|
31
|
-
result = result.pipe(shareReplay(1));
|
|
32
31
|
result = result.pipe(take(1), tap((res) => {
|
|
33
32
|
cachedObject[key] = of(res);
|
|
34
33
|
}), shareReplay(1));
|
|
@@ -51,4 +50,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
51
50
|
providedIn: 'root'
|
|
52
51
|
}]
|
|
53
52
|
}], ctorParameters: () => [] });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vhay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvd2Vhay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBSzdDLE1BQU0sT0FBTyxXQUFXO0lBRXRCLGdCQUFnQixDQUFDO0lBRVQsS0FBSyxHQUFHLElBQUksT0FBTyxFQUErQixDQUFDO0lBRTNELE1BQU0sQ0FBQyxNQUFjLEVBQUUsR0FBVztRQUNoQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFFLENBQUM7WUFDN0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxDQUFJLE1BQWMsRUFBRSxHQUFXLEVBQUUsSUFBYSxFQUM5QyxXQUEyQyxJQUFJLEVBQy9DLFFBQW9DLElBQUk7UUFFMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUUsQ0FBQztRQUU3QyxJQUFJLEdBQUcsSUFBSSxZQUFZO2VBQ2xCLENBQUMsUUFBUSxJQUFJLElBQUk7bUJBQ2YsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ25DLENBQUM7WUFDQyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxNQUFNLEdBQVEsSUFBSSxFQUFFLENBQUM7UUFFekIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7UUFDSixDQUFDO1FBRUQsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUUzQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWMsRUFBRSxHQUFXO1FBQ3BDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUUsQ0FBQztZQUM3QyxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQzt3R0EzRFUsV0FBVzs0R0FBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgb2YsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFdlYWtTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBXZWFrTWFwPG9iamVjdCwgUmVjb3JkPHN0cmluZywgYW55Pj4oKTtcclxuXHJcbiAgZXhpc3RzKHNvdXJjZTogb2JqZWN0LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuY2FjaGUuaGFzKHNvdXJjZSkpIHtcclxuICAgICAgY29uc3QgY2FjaGVkT2JqZWN0ID0gdGhpcy5jYWNoZS5nZXQoc291cmNlKSE7XHJcbiAgICAgIHJldHVybiAoa2V5IGluIGNhY2hlZE9iamVjdCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjYWxsPFQ+KHNvdXJjZTogb2JqZWN0LCBrZXk6IHN0cmluZywgZnVuYzogKCkgPT4gVFxyXG4gICAgLCByZXVzYWJsZTogKCh2YWx1ZTogVCkgPT4gYm9vbGVhbikgfCBudWxsID0gbnVsbFxyXG4gICAgLCBzdG9yZTogKCh2YWx1ZTogVCkgPT4gYW55KSB8IG51bGwgPSBudWxsXHJcbiAgICApOiBUIHtcclxuICAgIGlmICghdGhpcy5jYWNoZS5oYXMoc291cmNlKSkge1xyXG4gICAgICB0aGlzLmNhY2hlLnNldChzb3VyY2UsIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjYWNoZWRPYmplY3QgPSB0aGlzLmNhY2hlLmdldChzb3VyY2UpITtcclxuXHJcbiAgICBpZiAoa2V5IGluIGNhY2hlZE9iamVjdFxyXG4gICAgICAmJiAocmV1c2FibGUgPT0gbnVsbFxyXG4gICAgICAgIHx8IHJldXNhYmxlKGNhY2hlZE9iamVjdFtrZXldKSkpXHJcbiAgICB7XHJcbiAgICAgIHJldHVybiBjYWNoZWRPYmplY3Rba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVzdWx0OiBhbnkgPSBmdW5jKCk7XHJcblxyXG4gICAgaWYgKHN0b3JlICE9IG51bGwpIHtcclxuICAgICAgcmVzdWx0ID0gc3RvcmUocmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnNlcnZhYmxlID0gaXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcblxyXG4gICAgaWYgKG9ic2VydmFibGUpIHtcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0LnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICB0YXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBjYWNoZWRPYmplY3Rba2V5XSA9IG9mKHJlcyk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjYWNoZWRPYmplY3Rba2V5XSA9IHJlc3VsdDtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaW52YWxpZGF0ZShzb3VyY2U6IG9iamVjdCwga2V5OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhzb3VyY2UpKSB7XHJcbiAgICAgIGNvbnN0IGNhY2hlZE9iamVjdCA9IHRoaXMuY2FjaGUuZ2V0KHNvdXJjZSkhO1xyXG4gICAgICBkZWxldGUgY2FjaGVkT2JqZWN0W2tleV07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { isObservable, combineLatest, of } from 'rxjs';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
export function observableAll(obj) {
|
|
4
|
+
function collect(value) {
|
|
5
|
+
if (isObservable(value)) {
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
if (Array.isArray(value)) {
|
|
9
|
+
return combineLatest(value.map(collect));
|
|
10
|
+
}
|
|
11
|
+
if (typeof value === 'object' && value !== null) {
|
|
12
|
+
const keys = Object.keys(value);
|
|
13
|
+
const observables = keys.map(k => collect(value[k]));
|
|
14
|
+
return combineLatest(observables).pipe(map(resolvedValues => {
|
|
15
|
+
const resolvedObject = {};
|
|
16
|
+
resolvedValues.forEach((v, i) => {
|
|
17
|
+
resolvedObject[keys[i]] = v;
|
|
18
|
+
});
|
|
19
|
+
return resolvedObject;
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
return of(value);
|
|
23
|
+
}
|
|
24
|
+
return collect(obj);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZUFsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3V0aWxzL29ic2VydmFibGVBbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxNQUFNLFVBQVUsYUFBYSxDQUFtQixHQUFNO0lBQ3BELFNBQVMsT0FBTyxDQUFDLEtBQVU7UUFDekIsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNoRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxPQUFPLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ3BDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDbkIsTUFBTSxjQUFjLEdBQVEsRUFBRSxDQUFDO2dCQUMvQixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM5QixjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLGNBQWMsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBvZiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2YWJsZUFsbDxUIGV4dGVuZHMgb2JqZWN0PihvYmo6IFQpOiBPYnNlcnZhYmxlPFQ+IHtcclxuICBmdW5jdGlvbiBjb2xsZWN0KHZhbHVlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHZhbHVlLm1hcChjb2xsZWN0KSk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xyXG4gICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IGtleXMubWFwKGsgPT4gY29sbGVjdCh2YWx1ZVtrXSkpO1xyXG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChvYnNlcnZhYmxlcykucGlwZShcclxuICAgICAgICBtYXAocmVzb2x2ZWRWYWx1ZXMgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRPYmplY3Q6IGFueSA9IHt9O1xyXG4gICAgICAgICAgcmVzb2x2ZWRWYWx1ZXMuZm9yRWFjaCgodiwgaSkgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlZE9iamVjdFtrZXlzW2ldXSA9IHY7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiByZXNvbHZlZE9iamVjdDtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBjb2xsZWN0KG9iaik7XHJcbn1cclxuIl19
|