@datorama/core 22.0.5-rc.1 → 22.0.5
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/bundle.scss +13 -13
- package/bundles/datorama-core.umd.js +78 -90
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +14 -14
- package/bundles/datorama-core.umd.min.js.map +1 -1
- package/datorama-core.d.ts +0 -1
- package/datorama-core.metadata.json +1 -1
- package/esm2015/datorama-core.js +1 -2
- package/esm2015/lib/breadcrumbs/breadcrumbs.component.js +2 -4
- package/esm2015/lib/grid-v2/grid/grid-v2.types.js +1 -1
- package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +8 -6
- package/esm2015/lib/grid-v2/grid-filter/filter-validator.js +3 -1
- package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +12 -4
- package/esm2015/lib/grid-v2/grid-filter/grid-filter.types.js +3 -1
- package/esm2015/lib/grid-v2/grid-settings.js +2 -2
- package/esm2015/lib/grid-v2/grid-store/grid.service.js +9 -3
- package/esm2015/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +1 -7
- package/esm2015/lib/icon/icon.types.js +1 -1
- package/esm2015/lib/rich-text/rich-text.directive.js +33 -15
- package/esm2015/lib/select/select.component.js +16 -16
- package/esm2015/lib/version.js +2 -2
- package/esm5/datorama-core.js +1 -2
- package/esm5/lib/breadcrumbs/breadcrumbs.component.js +2 -4
- package/esm5/lib/grid-v2/grid/grid-v2.types.js +1 -1
- package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +8 -6
- package/esm5/lib/grid-v2/grid-filter/filter-validator.js +3 -1
- package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +12 -4
- package/esm5/lib/grid-v2/grid-filter/grid-filter.types.js +3 -1
- package/esm5/lib/grid-v2/grid-settings.js +2 -2
- package/esm5/lib/grid-v2/grid-store/grid.service.js +9 -3
- package/esm5/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +1 -13
- package/esm5/lib/icon/icon.types.js +1 -1
- package/esm5/lib/rich-text/rich-text.directive.js +34 -16
- package/esm5/lib/select/select.component.js +16 -17
- package/esm5/lib/version.js +2 -2
- package/fesm2015/datorama-core.js +78 -81
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +79 -90
- package/fesm5/datorama-core.js.map +1 -1
- package/i18n/locale-en_US.json +2 -0
- package/lib/grid-v2/grid/grid-v2.types.d.ts +0 -1
- package/lib/grid-v2/grid-filter/grid-filter.types.d.ts +3 -1
- package/lib/grid-v2/grid-settings.d.ts +2 -2
- package/lib/grid-v2/grid-toolbar/grid-toolbar.component.d.ts +0 -2
- package/lib/icon/icon.types.d.ts +1 -1
- package/lib/rich-text/rich-text.directive.d.ts +6 -4
- package/lib/select/select.component.d.ts +0 -1
- package/package.json +2 -2
- package/esm2015/lib/rich-text/rich-text.service.js +0 -50
- package/esm5/lib/rich-text/rich-text.service.js +0 -51
- package/lib/rich-text/rich-text.service.d.ts +0 -10
|
@@ -113,10 +113,11 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
|
|
|
113
113
|
}
|
|
114
114
|
ngOnInit() {
|
|
115
115
|
const { gridService, gridQuery } = this.popover.data;
|
|
116
|
-
const { filter,
|
|
116
|
+
const { filter, pivotValueColumn, pivotKeys } = this.colDef;
|
|
117
117
|
const colDefs = gridQuery.api.columns.getAllColumns().map(column => column.getColDef());
|
|
118
118
|
this.colField = getColField(this.colDef);
|
|
119
119
|
const colDef = colDefs.find(colDef => colDef.field === this.colField);
|
|
120
|
+
const filtersConfig = colDef.filtersConfig || this.colDef.filtersConfig || {};
|
|
120
121
|
const colFilter = filter || colDef.filter;
|
|
121
122
|
const filterOptions = DatoGridFilterOptionsMap[colFilter];
|
|
122
123
|
this.pivotColumn = gridQuery.api.columns.getSecondaryPivotColumn(pivotKeys, pivotValueColumn);
|
|
@@ -138,7 +139,11 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
|
|
|
138
139
|
if (this.filterSections.Conditional) {
|
|
139
140
|
let filterConditions = filterOptions || DatoGridStringFilterOptions;
|
|
140
141
|
if (filtersConfig.showEmptyConditions) {
|
|
141
|
-
|
|
142
|
+
let emptyConditions = [DatoFilterConditions.IS_EMPTY, DatoFilterConditions.NOT_EMPTY];
|
|
143
|
+
if (this.filterType === DatoGridFilterTypes.Number) {
|
|
144
|
+
emptyConditions = [DatoFilterConditions.IS_NULL, DatoFilterConditions.NOT_NULL];
|
|
145
|
+
}
|
|
146
|
+
filterConditions = [...filterConditions, ...emptyConditions];
|
|
142
147
|
}
|
|
143
148
|
this.conditionalFilterOptions = filterConditions.map((operand, id) => ({
|
|
144
149
|
id,
|
|
@@ -501,7 +506,10 @@ let DatoGridFilterComponent = class DatoGridFilterComponent {
|
|
|
501
506
|
valueControl.updateValueAndValidity();
|
|
502
507
|
}
|
|
503
508
|
isEmptyOperand(operand) {
|
|
504
|
-
return operand === DatoFilterConditions.IS_EMPTY ||
|
|
509
|
+
return (operand === DatoFilterConditions.IS_EMPTY ||
|
|
510
|
+
operand === DatoFilterConditions.NOT_EMPTY ||
|
|
511
|
+
operand === DatoFilterConditions.IS_NULL ||
|
|
512
|
+
operand === DatoFilterConditions.NOT_NULL);
|
|
505
513
|
}
|
|
506
514
|
isStringArray(value) {
|
|
507
515
|
return isString(value[0]);
|
|
@@ -599,4 +607,4 @@ DatoGridFilterComponent = __decorate([
|
|
|
599
607
|
], DatoGridFilterComponent);
|
|
600
608
|
export { DatoGridFilterComponent };
|
|
601
609
|
export { ɵ0, ɵ1, ɵ2 };
|
|
602
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFFakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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LFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRixDQUFBOztZQW5uQmlCLFVBQVU7WUFDUCxVQUFVO1lBQ2YsV0FBVztZQUNKLG9CQUFvQjtZQUMxQixpQkFBaUI7O0FBeENyQix1QkFBdUI7SUFObkMsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QixtdGFBQTJDO1FBRTNDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOztLQUNoRCxDQUFDO3FDQXFDZ0IsVUFBVTtRQUNQLFVBQVU7UUFDZixXQUFXO1FBQ0osb0JBQW9CO1FBQzFCLGlCQUFpQjtHQXhDckIsdUJBQXVCLENBdXBCbkM7U0F2cEJZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLFxuICBEYXRvR3JpZEZpbHRlcixcbiAgRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24sXG4gIERhdG9HcmlkRmlsdGVyT3B0aW9uc01hcCxcbiAgRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucyxcbiAgRGF0b0dyaWRGaWx0ZXJUeXBlcyxcbiAgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRTdHJpbmdGaWx0ZXJPcHRpb25zLFxuICBpc1JhbmdlQ29uZGl0aW9uLFxuICBMaXN0SXRlbVxufSBmcm9tICcuL2dyaWQtZmlsdGVyLnR5cGVzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBvcG92ZXJSZWYgfSBmcm9tICcuLi8uLi9wb3BvdmVyL3BvcG92ZXItcmVmJztcbmltcG9ydCB7IEdyaWRRdWVyeSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5xdWVyeSc7XG5pbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBwYWlyd2lzZSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBkaWZmZXJlbmNlLCBpc0FycmF5VmFsdWVzRXF1YWwsIHVuaXFCeSB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5JztcbmltcG9ydCB7IGlzRW1wdHksIGlzTmlsLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uL29wZXJhdG9yLXRvZ2dsZXIvb3BlcmF0b3ItdG9nZ2xlci50eXBlcyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsdGVyIH0gZnJvbSAnLi9maWx0ZXItdmFsaWRhdG9yJztcbmltcG9ydCB7IERhdG9HcmlkQ29sdW1uRGVmLCBEYXRvR3JpZEdldFJvd3NQYXJhbXMgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IERhdG9Db2x1bW5NZW51RGF0YSB9IGZyb20gJy4uL2dyaWQtY29sdW1uLWhlYWRlci9ncmlkLWNvbHVtbi1oZWFkZXIudHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uLCBDb2x1bW5Hcm91cCwgR3JpZEFwaSwgUm93Tm9kZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IERhdGVSYW5nZSB9IGZyb20gJy4uLy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLnR5cGVzJztcbmltcG9ydCB7IGN1cnJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZnVuY3Rpb24nO1xuaW1wb3J0IHsgU29ydExhYmVsVHlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NlYXJjaC1yZXN1bHRzLnBpcGUnO1xuaW1wb3J0IHsgSG90S2V5Q29uZmlnIH0gZnJvbSAnLi4vLi4vaG90a2V5cy9ob3RrZXkudHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0S2V5cyB9IGZyb20gJy4uLy4uL2hvdGtleXMvaG90a2V5cy1mb3JtYXR0ZXInO1xuaW1wb3J0IHsgZ2V0Q29sRmllbGQgfSBmcm9tICcuLi9ncmlkLXN0b3JlL3V0aWwnO1xuXG5jb25zdCBtYXBUb1ZhbHVlID0gKHsgdmFsdWUgfSkgPT4gdmFsdWU7XG5jb25zdCBtYXBUb0xpc3RJdGVtID0gdmFsID0+ICh7IGlkOiB2YWwsIGxhYmVsOiBpc05pbCh2YWwpID8gYChFbXB0eSlgIDogYCR7dmFsfWAudHJpbSgpLCB2YWx1ZTogdmFsIH0pO1xuY29uc3QgbWFwVG9MaXN0SXRlbVdpdGhGb3JtYXR0ZWQgPSAoeyB2YWx1ZSwgZm9ybWF0dGVkVmFsdWUgfSwga2V5PykgPT4gKHtcbiAgaWQ6IGtleSAmJiB2YWx1ZSA/IHZhbHVlW2tleV0gOiB2YWx1ZSxcbiAgbGFiZWw6IGlzTmlsKGZvcm1hdHRlZFZhbHVlKSA/IGAoRW1wdHkpYCA6IGAke2tleSA/IGZvcm1hdHRlZFZhbHVlW2tleV0gOiBmb3JtYXR0ZWRWYWx1ZX1gLnRyaW0oKSxcbiAgdmFsdWU6IGtleSAmJiB2YWx1ZSA/IHZhbHVlW2tleV0gOiB2YWx1ZVxufSk7XG5cbnR5cGUgQ29uZGl0aW9ucyA9IHtcbiAgdHlwZToge1xuICAgIG9wZXJhbmQ6IEV4Y2x1ZGU8RGF0b0ZpbHRlckNvbmRpdGlvbnMsIERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgfCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVD47XG4gIH07XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG4gIHJhbmdlRW5kOiBzdHJpbmcgfCBudW1iZXI7XG59W107XG5cbnR5cGUgQ29uZGl0aW9uT3B0aW9uID0geyBpZDogbnVtYmVyOyBsYWJlbDogc3RyaW5nOyBvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyB9O1xuXG50eXBlIFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUgPSB7IHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7IGZvcm1hdHRlZFZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1ncmlkLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dyaWQtZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERhdG9HcmlkRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgZ3JpZEZpbHRlclR5cGVzID0gRGF0b0dyaWRGaWx0ZXJUeXBlcztcbiAgZmlsdGVyVHlwZTogRGF0b0dyaWRGaWx0ZXJUeXBlcztcbiAgY29sdW1uVmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW107XG4gIGxpc3RPcHRpb25zOiBMaXN0SXRlbVtdID0gW107XG4gIGNvbmRpdGlvbmFsRmlsdGVyT3B0aW9uczogQ29uZGl0aW9uT3B0aW9uW107XG4gIGhhc0ZpbHRlciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGZpbHRlckZvcm06IEZvcm1Hcm91cDtcbiAgZmlsdGVyU2VjdGlvbnM6IHsgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQnlfVmFsdWVdPzogYm9vbGVhbjsgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWxdPzogYm9vbGVhbiB9ID0ge1xuICAgIFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlXTogdHJ1ZSxcbiAgICBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbF06IHRydWVcbiAgfTtcbiAgcmFuZ2VPcGVyYW5kID0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0U7XG4gIGxpc3RMYWJlbFR5cGU6IFNvcnRMYWJlbFR5cGU7XG4gIGxpc3RTb3J0QnlLZXk6IHN0cmluZztcbiAgaXNDbGllbnRTaWRlR3JpZCA9IGZhbHNlO1xuICBsaXN0U2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBsb2FkaW5nTGlzdCA9IGZhbHNlO1xuICBzZXJ2ZXJTZWFyY2hFcnJvcmVkID0gZmFsc2U7XG4gIGFwcGx5SG90S2V5Q29uZmlnOiBIb3RLZXlDb25maWcgPSB7XG4gICAga2V5czogJ21ldGEuZW50ZXInLFxuICAgIGhhbmRsZXI6ICgpID0+IHRoaXMuY2xvc2VQb3BVcCgpLFxuICAgIGRlc2NyaXB0aW9uOiAnY29yZS5hcHBseS1maWx0ZXJzJ1xuICB9O1xuICBob3RLZXlUb29sdGlwID0gZm9ybWF0S2V5cyh0aGlzLmFwcGx5SG90S2V5Q29uZmlnLmtleXMpO1xuICBhY3RpdmVBY2NvcmRpb25JZCA9IDA7XG4gIGtlZXBQcmVkZWZpbmVkTGlzdE9yaWdpbmFsT3JkZXI6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBncmlkUXVlcnk6IEdyaWRRdWVyeTtcbiAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZFNlcnZpY2U7XG4gIHByaXZhdGUgY29sRmllbGQ6IHN0cmluZztcbiAgcHJpdmF0ZSBleGNsdWRlZFZhbHVlcyA9IG5ldyBTZXQ8c3RyaW5nIHwgbnVtYmVyPigpO1xuICBwcml2YXRlIGJ5VmFsdWVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwaXZvdENvbHVtbjogQ29sdW1uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaG9zdDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHBvcG92ZXI6IFBvcG92ZXJSZWY8RGF0b0NvbHVtbk1lbnVEYXRhPixcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogRGF0b1RyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBnZXQgYnlWYWx1ZUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnYnlWYWx1ZScpO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNDb250cm9scygpOiBBYnN0cmFjdENvbnRyb2xbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9ucy5jb250cm9scztcbiAgfVxuXG4gIGdldCBjb25kaXRpb25zT3BlcmF0b3IoKTogT3BlcmF0b3JUeXBlcyB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsLm9wZXJhdG9yJykudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0T3BlcmFuZCgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHR5cGU6IFt0aGlzLmNvbmRpdGlvbmFsRmlsdGVyT3B0aW9uc1swXV0sXG4gICAgICB2YWx1ZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcmFuZ2VFbmQ6IFtudWxsXVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNQcmVkZWZpbmVkTGlzdEl0ZW1zKCkge1xuICAgIGNvbnN0IHsgZmlsdGVyc0NvbmZpZyA9IHt9IH0gPSB0aGlzLmNvbERlZjtcbiAgICByZXR1cm4gZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlcyAmJiB0eXBlb2YgZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlc1swXSA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Q29uZGl0aW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgb3BlcmF0b3I6IFtPcGVyYXRvclR5cGVzLkFORF0sXG4gICAgICBjb25kaXRpb25zOiB0aGlzLmZiLmFycmF5KFt0aGlzLmRlZmF1bHRPcGVyYW5kXSlcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCeVZhbHVlKCkge1xuICAgIHJldHVybiBbdGhpcy5jb2x1bW5WYWx1ZXNdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmaWx0ZXJzOiB7IGJ5VmFsdWU/OyBjb25kaXRpb25hbD8gfSA9IHt9O1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBmaWx0ZXJzLmJ5VmFsdWUgPSB0aGlzLmRlZmF1bHRCeVZhbHVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgZmlsdGVycy5jb25kaXRpb25hbCA9IHRoaXMuZGVmYXVsdENvbmRpdGlvbmFsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cChmaWx0ZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbmRpdGlvbnMoKTogRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwuY29uZGl0aW9ucycpIGFzIEZvcm1BcnJheTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNvbEZpbHRlcigpOiBEYXRvR3JpZEZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKClbdGhpcy5jb2xGaWVsZF07XG5cbiAgICByZXR1cm4gZmlsdGVyICYmIGlzQXJyYXlWYWx1ZXNFcXVhbCh0aGlzLnBpdm90S2V5cywgZmlsdGVyLnBpdm90S2V5cykgPyBmaWx0ZXIgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29sRGVmKCk6IERhdG9HcmlkQ29sdW1uRGVmIHtcbiAgICByZXR1cm4gdGhpcy5wb3BvdmVyLmRhdGEuY29sdW1uLmdldENvbERlZigpIGFzIERhdG9HcmlkQ29sdW1uRGVmO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcGl2b3RLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jb2xEZWYucGl2b3RLZXlzIHx8IFtdO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgeyBncmlkU2VydmljZSwgZ3JpZFF1ZXJ5IH0gPSB0aGlzLnBvcG92ZXIuZGF0YTtcbiAgICBjb25zdCB7IGZpbHRlciwgZmlsdGVyc0NvbmZpZyA9IHt9LCBwaXZvdFZhbHVlQ29sdW1uLCBwaXZvdEtleXMgfSA9IHRoaXMuY29sRGVmO1xuICAgIGNvbnN0IGNvbERlZnMgPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0QWxsQ29sdW1ucygpLm1hcChjb2x1bW4gPT4gY29sdW1uLmdldENvbERlZigpKTtcblxuICAgIHRoaXMuY29sRmllbGQgPSBnZXRDb2xGaWVsZCh0aGlzLmNvbERlZik7XG5cbiAgICBjb25zdCBjb2xEZWYgPSBjb2xEZWZzLmZpbmQoY29sRGVmID0+IGNvbERlZi5maWVsZCA9PT0gdGhpcy5jb2xGaWVsZCk7XG4gICAgY29uc3QgY29sRmlsdGVyID0gZmlsdGVyIHx8IGNvbERlZi5maWx0ZXI7XG4gICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IERhdG9HcmlkRmlsdGVyT3B0aW9uc01hcFtjb2xGaWx0ZXIgYXMgc3RyaW5nXTtcblxuICAgIHRoaXMucGl2b3RDb2x1bW4gPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0U2Vjb25kYXJ5UGl2b3RDb2x1bW4ocGl2b3RLZXlzLCBwaXZvdFZhbHVlQ29sdW1uKTtcblxuICAgIGlmIChmaWx0ZXJzQ29uZmlnLnNlY3Rpb25zKSB7XG4gICAgICB0aGlzLmZpbHRlclNlY3Rpb25zID0geyBbZmlsdGVyc0NvbmZpZy5zZWN0aW9uc106IHRydWUgfTtcbiAgICB9XG5cbiAgICB0aGlzLmtlZXBQcmVkZWZpbmVkTGlzdE9yaWdpbmFsT3JkZXIgPVxuICAgICAgZmlsdGVyc0NvbmZpZy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyICYmICFpc0VtcHR5KGZpbHRlcnNDb25maWcucHJlZGVmaW5lZExpc3RWYWx1ZXMpO1xuXG4gICAgdGhpcy5maWx0ZXJUeXBlID0gZmlsdGVyT3B0aW9ucyA/IChjb2xGaWx0ZXIgYXMgRGF0b0dyaWRGaWx0ZXJUeXBlcykgOiBEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZztcbiAgICB0aGlzLmxpc3RMYWJlbFR5cGUgPSB0aGlzLmZpbHRlclR5cGUudG9Mb3dlckNhc2UoKSBhcyBTb3J0TGFiZWxUeXBlO1xuICAgIHRoaXMubGlzdFNvcnRCeUtleSA9IHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5OdW1iZXIgJiYgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIgPyAnaWQnIDogJ2xhYmVsJztcbiAgICB0aGlzLmdyaWRRdWVyeSA9IGdyaWRRdWVyeTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlID0gZ3JpZFNlcnZpY2U7XG4gICAgdGhpcy5oYXNGaWx0ZXIkID0gdGhpcy5ncmlkUXVlcnlcbiAgICAgIC5zZWxlY3Qoc3RhdGUgPT4gc3RhdGUuc2V0dGluZ3MuZmlsdGVyW3RoaXMuY29sRmllbGRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgIHJldHVybiAhaXNOaWwoZmlsdGVyKSAmJiBpc0FycmF5VmFsdWVzRXF1YWwoZmlsdGVyLnBpdm90S2V5cywgdGhpcy5waXZvdEtleXMpO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBsZXQgZmlsdGVyQ29uZGl0aW9uczogRGF0b0ZpbHRlckNvbmRpdGlvbnNbXSA9IGZpbHRlck9wdGlvbnMgfHwgRGF0b0dyaWRTdHJpbmdGaWx0ZXJPcHRpb25zO1xuICAgICAgaWYgKGZpbHRlcnNDb25maWcuc2hvd0VtcHR5Q29uZGl0aW9ucykge1xuICAgICAgICBmaWx0ZXJDb25kaXRpb25zID0gWy4uLmZpbHRlckNvbmRpdGlvbnMsIERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfRU1QVFldO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnMgPSBmaWx0ZXJDb25kaXRpb25zLm1hcCgob3BlcmFuZCwgaWQpID0+ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBvcGVyYW5kLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGBjb3JlLiR7dGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLkRhdGUgPyAnREFURV8nIDogJyd9JHtvcGVyYW5kfWApXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgbGV0IG9yaWdpbmFsT3B0aW9ucztcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBjb25zdCB7IHByZWRlZmluZWRMaXN0VmFsdWVzIH0gPSBmaWx0ZXJzQ29uZmlnO1xuICAgICAgdGhpcy5pc0NsaWVudFNpZGVHcmlkID0gIWlzTmlsKHByZWRlZmluZWRMaXN0VmFsdWVzKSB8fCAhZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZTtcbiAgICAgIGlmICghcHJlZGVmaW5lZExpc3RWYWx1ZXMgfHwgdGhpcy5pc1N0cmluZ0FycmF5KHByZWRlZmluZWRMaXN0VmFsdWVzKSkge1xuICAgICAgICBjb25zdCByYXdWYWx1ZXMgPSBwcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKHJhd1ZhbHVlcykge1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSByYXdWYWx1ZXMubWFwKG1hcFRvTGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbHVtblZhbHVlcyA9IHRoaXMuZ2V0Q29sdW1uVmFsdWVzKCk7XG4gICAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSBjb2x1bW5WYWx1ZXMubWFwKCh7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhaXNOaWwodGhpcy5waXZvdENvbHVtbikgJiYgdmFsdWUgPyB2YWx1ZVt0aGlzLmNvbEZpZWxkXSA6IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBjb2x1bW5WYWx1ZXMubWFwKGNvbFZhbHVlID0+XG4gICAgICAgICAgICBtYXBUb0xpc3RJdGVtV2l0aEZvcm1hdHRlZChjb2xWYWx1ZSwgIWlzTmlsKHRoaXMucGl2b3RDb2x1bW4pICYmIHRoaXMuY29sRmllbGQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgTGlzdEl0ZW1bXTtcbiAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZXMgPSByYXdWYWx1ZXMubWFwKG1hcFRvVmFsdWUpO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzO1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5hbE9wdGlvbnMgPSB0aGlzLmxpc3RPcHRpb25zO1xuXG4gICAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgICB0aGlzLmxpc3RTZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUoKHNlYXJjaFRlcm06IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuc2VydmVyU2VhcmNoRXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChzZWFyY2hUZXJtLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBvcmlnaW5hbE9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLnBhdGNoQW5kUmVSZWdpc3Rlcih0aGlzLmNvbHVtblZhbHVlcyk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzRnJvbVNlcnZlcihzZWFyY2hUZXJtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIGNsb3NlUG9wVXAoKSB7XG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB0aGlzLnBvcG92ZXIuY2xvc2UoKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycygpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0udmFsaWQgJiYgdGhpcy5maWx0ZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICBpZiAodGhpcy5maWx0ZXJGb3JtLmRpcnR5ICYmICh0aGlzLmZpbHRlckZvcm0udmFsaWQgfHwgdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwnKS5wcmlzdGluZSkpIHtcbiAgICAgIGNvbnN0IHsgY29sdW1uIH0gPSB0aGlzLnBvcG92ZXIuZGF0YTtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIoKTtcbiAgICAgIGlzRW1wdHkoZmlsdGVyKVxuICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuY2xlYXJDb2x1bW5GaWx0ZXIodGhpcy5jb2xGaWVsZClcbiAgICAgICAgOiB0aGlzLmdyaWRTZXJ2aWNlLnNldENvbHVtbkZpbHRlcihjb2x1bW4sIGZpbHRlcik7XG5cbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJGaWx0ZXJzKCkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2xlYXJDb2x1bW5GaWx0ZXIodGhpcy5jb2xGaWVsZCk7XG4gICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgfVxuXG4gIHJlbW92ZUNvbmRpdGlvbihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jb25kaXRpb25zLnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIGFkZENvbmRpdGlvbigpIHtcbiAgICB0aGlzLmZpbHRlckZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICB0aGlzLmNvbmRpdGlvbnMucHVzaCh0aGlzLmRlZmF1bHRPcGVyYW5kKTtcbiAgfVxuXG4gIGdldE9wZXJhbmRUeXBlKGk6IG51bWJlcikge1xuICAgIGNvbnN0IGNvbmRpdGlvblR5cGUgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaSkudmFsdWUudHlwZTtcbiAgICByZXR1cm4gY29uZGl0aW9uVHlwZSA/IGNvbmRpdGlvblR5cGUub3BlcmFuZCA6IG51bGw7XG4gIH1cblxuICBpc0NvbmRpdGlvbmFsRW1wdHkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMgPVxuICAgICAgY29udHJvbCAmJiBjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUudHlwZSA/IGNvbnRyb2wudmFsdWUudHlwZS5vcGVyYW5kIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5pc0VtcHR5T3BlcmFuZChvcGVyYW5kKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYnlWYWx1ZVN1YnNjcmlwdGlvbiAmJiB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdHlwZTogXCJFeGNsdWRlXCJcbiAgICogU2VsZWN0ZWQgdmFsdWVzOiBBLCBDLCBEXG4gICAqIEFsbCBsaXN0OiBBLCBCLCBDLCBEXG4gICAqIFJlc3VsdDogQlxuICAgKiBAcGFyYW0gaW5jbHVkZWRBcnIgLVRoZSBsaXN0IG9mIHZhbHVlcyB0byBpbmNsdWRlXG4gICAqIEBwYXJhbSBhc0xpc3RJdGVtIC1JbmRpY2F0ZXMgaWYgdGhlIHJlc3BvbnNlIG5lZWRzIHRvIGJlIGFzIHN0cmluZyBvciBhcyBMaXN0SXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhpbmNsdWRlZEFycjogKExpc3RJdGVtIHwgc3RyaW5nIHwgbnVtYmVyKVtdLCBhc0xpc3RJdGVtOiB0cnVlKTogTGlzdEl0ZW1bXTtcbiAgcHJpdmF0ZSBnZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhpbmNsdWRlZEFycjogKExpc3RJdGVtIHwgc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXTtcbiAgcHJpdmF0ZSBnZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhcbiAgICBpbmNsdWRlZEFycjogKExpc3RJdGVtIHwgc3RyaW5nIHwgbnVtYmVyKVtdLFxuICAgIGFzTGlzdEl0ZW0gPSBmYWxzZVxuICApOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgTGlzdEl0ZW1bXSB7XG4gICAgbGV0IGluY2x1ZGVkU2V0O1xuICAgIGlmICh0aGlzLmlzUHJlZGVmaW5lZExpc3RJdGVtcykge1xuICAgICAgY29uc3QgcHJlZGVmaW5lZExpc3QgPSB0aGlzLmNvbERlZi5maWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzIGFzIExpc3RJdGVtW107XG4gICAgICBpbmNsdWRlZFNldCA9IG5ldyBTZXQoXG4gICAgICAgIGluY2x1ZGVkQXJyLm1hcCh2YWwgPT4ge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwcmVkZWZpbmVkTGlzdC5maW5kKCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSB2YWwpO1xuICAgICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5jbHVkZWRTZXQgPSBuZXcgU2V0KGluY2x1ZGVkQXJyLm1hcCh2YWwgPT4gKGlzT2JqZWN0PExpc3RJdGVtPih2YWwpID8gdmFsLnZhbHVlIDogdmFsKSkpO1xuICAgIH1cbiAgICBpZiAoYXNMaXN0SXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMubGlzdE9wdGlvbnMuZmlsdGVyKCh7IHZhbHVlIH0pID0+ICFpbmNsdWRlZFNldC5oYXModmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVmFsdWVzLmZpbHRlcih2YWx1ZSA9PiAhaW5jbHVkZWRTZXQuaGFzKHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmlsdGVyKCk6IERhdG9HcmlkRmlsdGVyIHtcbiAgICBjb25zdCB7IGJ5VmFsdWUsIGNvbmRpdGlvbmFsIH0gPSB0aGlzLmZpbHRlckZvcm0udmFsdWU7XG4gICAgY29uc3QgZmlsdGVyOiBEYXRvR3JpZEZpbHRlciA9IHt9O1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxGaWx0ZXIoZmlsdGVyLCBjb25kaXRpb25hbCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICB0aGlzLnNldEJ5VmFsdWVGaWx0ZXIoZmlsdGVyLCBieVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogSWYgZmlsdGVycyBhcHBsaWVkLCBhZGQgdGhlIGV4dHJhIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBieSBwaXZvdCBtb2RlICovXG4gICAgaWYgKGZpbHRlci5ieVZhbHVlIHx8IGZpbHRlci5jb25kaXRpb25hbCkge1xuICAgICAgZmlsdGVyLmNvbElkID0gdGhpcy5jb2xEZWYuY29sSWQ7XG4gICAgICBmaWx0ZXIucGl2b3RLZXlzID0gdGhpcy5waXZvdEtleXM7XG5cbiAgICAgIGlmICh0aGlzLnBpdm90Q29sdW1uKSB7XG4gICAgICAgIGZpbHRlci5waXZvdEZpZWxkc01hcCA9IHRoaXMuZ2V0UGl2b3RGaWVsZHModGhpcy5waXZvdENvbHVtbi5nZXRQYXJlbnQoKSkucmVkdWNlKChmaWVsZE1hcCwgZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMucGl2b3RLZXlzW2luZGV4XSkge1xuICAgICAgICAgICAgZmllbGRNYXBbZmllbGRdID0gdGhpcy5waXZvdEtleXNbaW5kZXhdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWVsZE1hcDtcbiAgICAgICAgfSwge30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtKCkge1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5jb2xGaWx0ZXI7XG4gICAgdGhpcy5maWx0ZXJGb3JtID0gZmlsdGVyVmFsdWUgPyB0aGlzLmJ1aWxkRm9ybUZyb21GaWx0ZXIoZmlsdGVyVmFsdWUpIDogdGhpcy5kZWZhdWx0Rm9ybTtcbiAgICB0aGlzLnJlZ2lzdGVyT3BlcmFuZExpc3RlbmVycygpO1xuICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkICYmIHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGZpbHRlciB2aWV3IGZyb20gYSBnaXZlbiBmaWx0ZXJcbiAgICovXG4gIHByaXZhdGUgYnVpbGRGb3JtRnJvbUZpbHRlcihmaWx0ZXI6IERhdG9HcmlkRmlsdGVyKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmaWx0ZXJHcm91cCA9IHt9O1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBmaWx0ZXJHcm91cFsnY29uZGl0aW9uYWwnXSA9IHRoaXMuYnVpbGRDb25kaXRpb25hbEZpbHRlcihmaWx0ZXIuY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgZmlsdGVyR3JvdXBbJ2J5VmFsdWUnXSA9IHRoaXMuYnVpbGRCeVZhbHVlRmlsdGVyKGZpbHRlci5ieVZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZmlsdGVyR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBmaWx0ZXIgdmlld1xuICAgKi9cbiAgcHJpdmF0ZSByZXNldEZvcm0oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnNldEVycm9ycyhudWxsKTtcbiAgICBsZXQgb3JpZ2luYWxTdGF0ZSA9IHt9O1xuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICBvcmlnaW5hbFN0YXRlID0geyBieVZhbHVlOiB0aGlzLmNvbHVtblZhbHVlcyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgb3JpZ2luYWxTdGF0ZSA9IHtcbiAgICAgICAgLi4ub3JpZ2luYWxTdGF0ZSxcbiAgICAgICAgY29uZGl0aW9uYWw6IHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgY29uZGl0aW9uczogW3sgdHlwZTogdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnNbMF0sIHZhbHVlOiBudWxsLCByYW5nZUVuZDogbnVsbCB9XVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgY29uZGl0aW9uYWwgPSB0aGlzLmZpbHRlckZvcm0uY29udHJvbHMuY29uZGl0aW9uYWwgYXMgRm9ybUdyb3VwO1xuICAgICAgY29uZGl0aW9uYWwucmVtb3ZlQ29udHJvbCgnY29uZGl0aW9ucycpO1xuICAgICAgY29uZGl0aW9uYWwuYWRkQ29udHJvbCgnY29uZGl0aW9ucycsIHRoaXMuZmIuYXJyYXkoW3RoaXMuZGVmYXVsdE9wZXJhbmRdKSk7XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyRm9ybS5yZXNldChvcmlnaW5hbFN0YXRlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBjb2x1bW4gdmFsdWVzIHRvIGRpc3BsYXkgb24gdGhlIGxpc3QuXG4gICAqIDEuIEl0ZXJhdGUgb3ZlciB0aGUgcm93cyBhZnRlciBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgd2FzIGFwcGxpZWRcbiAgICogMi4gU2luY2Ugd2UgYWxzbyB3YW50IHRvIHNob3cgdmFsdWVzIHRoYXQgd2VyZSBmaWx0ZXJlZCBieSB0aGlzIGNvbHVtbiBmaWx0ZXIgd2UgYXJlIGl0ZXJhdGluZyBhbGwgdGhlIHJvd3NcbiAgICogKGJlZm9yZSB0aGUgZmlsdGVyaW5nKSwgZmluZGluZyB3aGljaCB3ZXJlIHJlbW92ZWQgYnkgdGhpcyBjb2x1bW4ncyBmaWx0ZXIgYW5kIGFkZGluZyB0aGVtIGJhY2suXG4gICAqL1xuICBwcml2YXRlIGdldENvbHVtblZhbHVlcygpOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlW10ge1xuICAgIGxldCB2YWx1ZXM6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWVbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdGhpcy5jb2xGaWx0ZXI7XG4gICAgY29uc3QgZGlzcGxheWVkUm93ID0ge307XG4gICAgY29uc3QgYnlWYWx1ZVR5cGUgPSBmaWx0ZXJWYWx1ZSAmJiBmaWx0ZXJWYWx1ZS5ieVZhbHVlICYmIGZpbHRlclZhbHVlLmJ5VmFsdWUuY29uZGl0aW9uO1xuICAgIGNvbnN0IGFwaSA9IHRoaXMuZ3JpZFF1ZXJ5LmFwaS5ncmlkO1xuICAgIGNvbnN0IGdldFZhbHVlQ3VycmllZCA9IGN1cnJ5KHRoaXMuZ2V0VmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSkodGhpcy5jb2xGaWVsZCwgYXBpLCB0aGlzLmNvbERlZi52YWx1ZUZvcm1hdHRlcik7XG4gICAgLyoqIDEuIEl0ZXJhdGUgb3ZlciB0aGUgcm93cyBhZnRlciBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgd2FzIGFwcGxpZWQgKi9cbiAgICBpZiAodGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICBhcGkuZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQocm93ID0+IHtcbiAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVDdXJyaWVkKHJvdykpO1xuICAgICAgICBkaXNwbGF5ZWRSb3dbcm93LmlkXSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogV2Ugb25seSBkaXNwbGF5IHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIGxpc3QgKi9cbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gYXBpLnBhZ2luYXRpb25HZXRQYWdlU2l6ZSgpO1xuICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSBhcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCk7XG4gICAgICBjb25zdCBzdGFydEluZGV4ID0gcGFnZVNpemUgKiBjdXJyZW50UGFnZTtcbiAgICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHBhZ2VTaXplO1xuICAgICAgYXBpLmZvckVhY2hOb2RlKHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IHsgcm93SW5kZXggfSA9IHJvdztcbiAgICAgICAgaWYgKHJvd0luZGV4ID49IHN0YXJ0SW5kZXggJiYgcm93SW5kZXggPCBlbmRJbmRleCkge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIDIuIEFkZCBiYWNrIHZhbHVlcyB0aGF0IHdlcmUgZmlsdGVyZWQgYnkgdGhpcyBjb2x1bW4gKi9cbiAgICBpZiAoYnlWYWx1ZVR5cGUpIHtcbiAgICAgIGlmIChieVZhbHVlVHlwZSA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIgYXMgKHBhcmFtczogYW55KSA9PiBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGN1cnJGaWx0ZXJWYWx1ZXMgPSBmaWx0ZXJWYWx1ZS5ieVZhbHVlLnZhbHVlcy5tYXAoKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdHRlciA/IGZvcm1hdHRlcih7IHZhbHVlIH0pIDogdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuY29uY2F0KGN1cnJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBjb25kaXRpb25hbCB9ID0gdGhpcy5jb2xGaWx0ZXI7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB7XG4gICAgICAgICAgLi4udGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCksXG4gICAgICAgICAgW3RoaXMuY29sRmllbGRdOiB7IGNvbmRpdGlvbmFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgYXBpLmZvckVhY2hMZWFmTm9kZShyb3cgPT4ge1xuICAgICAgICAgIGlmICghZGlzcGxheWVkUm93Lmhhc093blByb3BlcnR5KHJvdy5pZCkgJiYgdmFsaWRhdGVGaWx0ZXIoeyByb3csIGFwaSB9LCBhY3RpdmVGaWx0ZXJzKSkge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVDdXJyaWVkKHJvdykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmlxQnkodmFsdWVzLCAndmFsdWUnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZShcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIGFwaTogR3JpZEFwaSxcbiAgICAvLyBUT0RPOiBmb2xsb3d1cDogaHR0cHM6Ly9hZy1ncmlkLnplbmRlc2suY29tL2hjL2VuLXVzL3JlcXVlc3RzLzExMDE5XG4gICAgZm9ybWF0dGVyOiAocGFyYW1zOiBhbnkpID0+IHN0cmluZyxcbiAgICByb3c6IFJvd05vZGVcbiAgKTogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSB7XG4gICAgY29uc3QgdmFsdWUgPSBhcGkuZ2V0VmFsdWUoZmllbGQsIHJvdyk7XG4gICAgLy8gVE9ETzogZm9sbG93dXA6IGh0dHBzOi8vYWctZ3JpZC56ZW5kZXNrLmNvbS9oYy9lbi11cy9yZXF1ZXN0cy8xMDk2Mz9wYWdlPTFcbiAgICByZXR1cm4geyB2YWx1ZSwgZm9ybWF0dGVkVmFsdWU6IGZvcm1hdHRlciA/IGZvcm1hdHRlcih7IHZhbHVlIH0gYXMgYW55KSA6IHZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIHNldENvbmRpdGlvbmFsRmlsdGVyKFxuICAgIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsXG4gICAgeyBvcGVyYXRvciwgY29uZGl0aW9ucyB9OiB7IG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzOyBjb25kaXRpb25zOiBDb25kaXRpb25zIH1cbiAgKSB7XG4gICAgY29uc3QgdmFsaWRDb25kaXRpb25zID0gY29uZGl0aW9ucy5maWx0ZXIoKHsgdmFsdWUsIHR5cGUgfSkgPT4gIWlzTmlsKHZhbHVlKSB8fCB0aGlzLmlzRW1wdHlPcGVyYW5kKHR5cGUub3BlcmFuZCkpO1xuICAgIGlmICh2YWxpZENvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICBmaWx0ZXIuY29uZGl0aW9uYWwgPSB7XG4gICAgICAgIHR5cGU6ICh0aGlzLmNvbERlZi5maWx0ZXIgYXMgRGF0b0dyaWRGaWx0ZXJUeXBlcykgfHwgRGF0b0dyaWRGaWx0ZXJUeXBlcy5TdHJpbmcsXG4gICAgICAgIG9wZXJhdG9yLFxuICAgICAgICBjb25kaXRpb25zOiBjb25kaXRpb25zLm1hcCgoeyB2YWx1ZSwgdHlwZSwgcmFuZ2VFbmQgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2UgPSB7IGNvbmRpdGlvbjogdHlwZS5vcGVyYW5kLCB2YWx1ZSB9O1xuICAgICAgICAgIGlmICh0eXBlLm9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0geyAuLi5iYXNlLCByYW5nZUVuZCB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgZnJvbSwgdG8gfSA9IHZhbHVlIGFzIERhdGVSYW5nZTtcbiAgICAgICAgICAgICAgcmVzdWx0ID0geyBjb25kaXRpb246IHR5cGUub3BlcmFuZCwgdmFsdWU6IGZyb20gYXMgc3RyaW5nLCByYW5nZUVuZDogdG8gYXMgc3RyaW5nIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBiYXNlIGFzIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEJ5VmFsdWVGaWx0ZXIoZmlsdGVyOiBEYXRvR3JpZEZpbHRlciwgYnlWYWx1ZTogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgIGlmICh0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlc0NvdW50ID0gdGhpcy5jb2x1bW5WYWx1ZXMubGVuZ3RoO1xuICAgICAgaWYgKGJ5VmFsdWUubGVuZ3RoICE9PSB2YWx1ZXNDb3VudCkge1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPVxuICAgICAgICAgIGJ5VmFsdWUubGVuZ3RoIDwgdmFsdWVzQ291bnQgLyAyID8gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCA6IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUO1xuICAgICAgICBmaWx0ZXIuYnlWYWx1ZSA9IHtcbiAgICAgICAgICBjb25kaXRpb24sXG4gICAgICAgICAgdmFsdWVzOiBjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgPyBieVZhbHVlIDogdGhpcy5nZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhieVZhbHVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMuZXhjbHVkZWRWYWx1ZXMudmFsdWVzKCkpO1xuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZpbHRlci5ieVZhbHVlID0ge1xuICAgICAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QsXG4gICAgICAgICAgdmFsdWVzXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEJ5VmFsdWVGaWx0ZXIoYnlWYWx1ZTogRGF0b0dyaWRGaWx0ZXJbJ2J5VmFsdWUnXSk6IChzdHJpbmcgfCBudW1iZXIpW11bXSB7XG4gICAgaWYgKCFieVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0QnlWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGJ5VmFsdWUudmFsdWVzLmxlbmd0aCAmJiB0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLmFjdGl2ZUFjY29yZGlvbklkID0gMTtcbiAgICB9XG4gICAgaWYgKGJ5VmFsdWUuY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVCkge1xuICAgICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgICAgdGhpcy5leGNsdWRlZFZhbHVlcyA9IG5ldyBTZXQoYnlWYWx1ZS52YWx1ZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFt0aGlzLmdldEJ5VmFsdWVFeGNsdWRlVmFsdWVzKGJ5VmFsdWUudmFsdWVzKV07XG4gICAgfVxuICAgIHJldHVybiBbYnlWYWx1ZS52YWx1ZXNdO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmRpdGlvbmFsRmlsdGVyKGNvbmRpdGlvbmFsOiBEYXRvR3JpZEZpbHRlclsnY29uZGl0aW9uYWwnXSk6IEZvcm1Hcm91cCB7XG4gICAgaWYgKCFjb25kaXRpb25hbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdENvbmRpdGlvbmFsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBvcGVyYXRvcjogW2NvbmRpdGlvbmFsLm9wZXJhdG9yXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkodGhpcy5idWlsZENvbmRpdGlvbnMoY29uZGl0aW9uYWwuY29uZGl0aW9ucykpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ29uZGl0aW9ucyhjb25kaXRpb25zOiAoRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gfCBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKVtdKTogRm9ybUdyb3VwW10ge1xuICAgIHJldHVybiBjb25kaXRpb25zLm1hcChjb25kaXRpb24gPT4ge1xuICAgICAgY29uc3QgeyBjb25kaXRpb246IGN1cnJlbnRPcGVyYW5kLCB2YWx1ZSB9ID0gY29uZGl0aW9uO1xuICAgICAgY29uc3QgZ3JvdXAgPSB7XG4gICAgICAgIHR5cGU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogdGhpcy5jb25kaXRpb25hbEZpbHRlck9wdGlvbnMuZmluZEluZGV4KCh7IG9wZXJhbmQgfSkgPT4gb3BlcmFuZCA9PT0gY3VycmVudE9wZXJhbmQpLFxuICAgICAgICAgICAgb3BlcmFuZDogY3VycmVudE9wZXJhbmQsXG4gICAgICAgICAgICBsYWJlbDogYGNvcmUuJHtjdXJyZW50T3BlcmFuZH1gXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICB2YWx1ZTogW3ZhbHVlLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgcmFuZ2VFbmQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAoaXNSYW5nZUNvbmRpdGlvbjxEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uPihjb25kaXRpb24pKSB7XG4gICAgICAgIGdyb3VwLnJhbmdlRW5kID0gW2NvbmRpdGlvbi5yYW5nZUVuZCwgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgIGdyb3VwLnZhbHVlID0gW3sgZnJvbTogY29uZGl0aW9uLnZhbHVlIGFzIHN0cmluZywgdG86IGNvbmRpdGlvbi5yYW5nZUVuZCBhcyBzdHJpbmcgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mYi5ncm91cChncm91cCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW4gcmFuZ2UgaXMgbm90IHJlcXVpcmVkIGJ5IGRlZmF1bHQsIHdlIHdhbnQgdG8gbWFrZSBpdCByZXF1aXJlZCBvbmNlIHRoaXMgb3BlcmFuZCBpcyBzZWxlY3RlZC5cbiAgICogKi9cbiAgcHJpdmF0ZSByZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb25kaXRpb25zLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLmNvbmRpdGlvbnMubGVuZ3RoKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY29uZGl0aW9ucy5sZW5ndGgpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlcyA9IHRoaXMuY29uZGl0aW9ucy5jb250cm9scy5tYXAoKGdyb3VwOiBGb3JtR3JvdXAsIGluZGV4KSA9PlxuICAgICAgICAgICAgZ3JvdXAuZ2V0KCd0eXBlJykudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCh2YWx1ZTogQ29uZGl0aW9uT3B0aW9uKSA9PiAoeyB2YWx1ZSwgaW5kZXggfSkpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG1lcmdlKC4uLnZhbHVlQ2hhbmdlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyB2YWx1ZTogeyBvcGVyYW5kIH0sIGluZGV4IH0pID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBpbmRleCwgaW5SYW5nZTogb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UgfTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVEYXRlSW5wdXQocGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVOdW1iZXJJbnB1dChwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVDb250cm9sVmFsaWRhdG9yKG9wZXJhbmQsIGluZGV4KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlSW5wdXQoeyBpblJhbmdlLCBpbmRleCB9KSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpO1xuICAgIGlmIChjb250cm9sLmRpcnR5KSB7XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSBjb250cm9sO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBpblJhbmdlID8geyBmcm9tOiB2YWx1ZSwgdG86IHZhbHVlIH0gOiB2YWx1ZS5mcm9tO1xuICAgICAgY29udHJvbC5wYXRjaFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU51bWJlcklucHV0KHsgaW5SYW5nZSwgaW5kZXggfSkge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IGluUmFuZ2UgPyBWYWxpZGF0b3JzLnJlcXVpcmVkIDogbnVsbDtcbiAgICBjb25zdCByYW5nZUVuZCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCdyYW5nZUVuZCcpO1xuICAgIHJhbmdlRW5kLnNldFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICByYW5nZUVuZC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlQ29udHJvbFZhbGlkYXRvcihvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucywgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IHZhbGlkYXRvciA9ICF0aGlzLmlzRW1wdHlPcGVyYW5kKG9wZXJhbmQpID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGw7XG4gICAgY29uc3QgdmFsdWVDb250cm9sID0gdGhpcy5jb25kaXRpb25zLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgdmFsdWVDb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9yKTtcbiAgICB2YWx1ZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0VtcHR5T3BlcmFuZChvcGVyYW5kOiBEYXRvRmlsdGVyQ29uZGl0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fCBvcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfRU1QVFk7XG4gIH1cblxuICBwcml2YXRlIGlzU3RyaW5nQXJyYXkodmFsdWU6IChzdHJpbmcgfCBMaXN0SXRlbSlbXSk6IHZhbHVlIGlzIHN0cmluZ1tdIHtcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsdWVbMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWYWx1ZXNGcm9tU2VydmVyKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZ0xpc3QgPSB0cnVlO1xuICAgIHRoaXMubGlzdE9wdGlvbnMgPSBbXTtcbiAgICBjb25zdCBwYXJhbXM6IFBhcnRpYWw8RGF0b0dyaWRHZXRSb3dzUGFyYW1zPiA9IHtcbiAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VydmVyU2VhcmNoRXJyb3JlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIHN1Y2Nlc3NDYWxsYmFjazogZGF0YSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ0xpc3QgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmxhdERhdGEgPSBkYXRhLm1hcCh2YWx1ZSA9PiB2YWx1ZVt0aGlzLmNvbEZpZWxkXSk7XG4gICAgICAgIHRoaXMubGlzdE9wdGlvbnMgPSBmbGF0RGF0YS5tYXAobWFwVG9MaXN0SXRlbSk7XG4gICAgICAgIHRoaXMucGF0Y2hBbmRSZVJlZ2lzdGVyKGZsYXREYXRhKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIHNlcnZlckNvbmZpZzoge1xuICAgICAgICBwYWdlU2l6ZTogMzAsXG4gICAgICAgIHBhZ2VOdW1iZXI6IDEsXG4gICAgICAgIGNvbHVtbkZpbHRlcnM6IHtcbiAgICAgICAgICBbdGhpcy5jb2xGaWVsZF06IHtcbiAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuQ09OVEFJTlMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHNlYXJjaFRlcm1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc29ydDogW10sXG4gICAgICAgIGNvbHVtbnNUb1JldHVybjogW3RoaXMuY29sRmllbGRdLFxuICAgICAgICBkaXN0aW5jdFJlc3VsdHM6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuX29yaWdpbmFsR2V0Um93cyhwYXJhbXMgYXMgYW55KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiBXaGVuIHNlYXJjaGluZyB0aGUgYnkgdmFsdWUgZmlsdGVyIG9uIHNlcnZlciBzaWRlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb250cm9sIHdpdGggdGhlIG5ldyB2YWx1ZXMgYW5kIHJlLXJlZ2lzdGVyIHRvIHRoZSBjaGFuZ2VzICovXG4gIHByaXZhdGUgcGF0Y2hBbmRSZVJlZ2lzdGVyKGRhdGE6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJ5VmFsdWVDb250cm9sLnBhdGNoVmFsdWUodGhpcy5nZXROb25FeGNsdWRlZFZhbHVlcyhkYXRhKSk7XG4gICAgdGhpcy5yZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckJ5VmFsdWVMaXN0ZW5lcigpIHtcbiAgICBjb25zdCBieVZhbHVlID0gdGhpcy5ieVZhbHVlQ29udHJvbDtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gPSBieVZhbHVlLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChieVZhbHVlLnZhbHVlKSxcbiAgICAgICAgcGFpcndpc2UoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoW3ByZXYsIGN1cnJlbnRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZFRvRXhjbHVkZWQgPSBjdXJyZW50Lmxlbmd0aCA8IHByZXYubGVuZ3RoO1xuICAgICAgICBjb25zdCBkaWZmID0gYWRkVG9FeGNsdWRlZCA/IGRpZmZlcmVuY2UocHJldiwgY3VycmVudCkgOiBkaWZmZXJlbmNlKGN1cnJlbnQsIHByZXYpO1xuICAgICAgICBkaWZmLmZvckVhY2godiA9PiAoYWRkVG9FeGNsdWRlZCA/IHRoaXMuZXhjbHVkZWRWYWx1ZXMuYWRkKHYpIDogdGhpcy5leGNsdWRlZFZhbHVlcy5kZWxldGUodikpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb25FeGNsdWRlZFZhbHVlcyhkYXRhOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKHYgPT4gIXRoaXMuZXhjbHVkZWRWYWx1ZXMuaGFzKHYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGl2b3QgZGltZW5zaW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwYXJlbnQgZ3JvdXAgY29sdW1uIGhlYWRlciBjbGFzcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGl2b3RGaWVsZHMocGFyZW50OiBDb2x1bW5Hcm91cCwgZmllbGRzID0gW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZ3JhbmRQYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG4gICAgY29uc3QgaGVhZGVyQ2xhc3MgPSBwYXJlbnQuZ2V0T3JpZ2luYWxDb2x1bW5Hcm91cCgpLmdldENvbEdyb3VwRGVmKCkuaGVhZGVyQ2xhc3M7XG5cbiAgICBpZiAoZ3JhbmRQYXJlbnQpIHtcbiAgICAgIHRoaXMuZ2V0UGl2b3RGaWVsZHMoZ3JhbmRQYXJlbnQsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgaGVhZGVyQ2xhc3MgJiYgZmllbGRzLnB1c2goaGVhZGVyQ2xhc3NbMF0pO1xuXG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxufVxuIl19
|
|
610
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsb0JBQW9CLEVBR3BCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRW5CLDJCQUEyQixFQUMzQixnQkFBZ0IsRUFFakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0s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QUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLE1BQW1CLEVBQUUsTUFBTSxHQUFHLEVBQUU7UUFDckQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUVqRixJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzFDO1FBRUQsV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0MsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGLENBQUE7O1lBaG9CaUIsVUFBVTtZQUNQLFVBQVU7WUFDZixXQUFXO1lBQ0osb0JBQW9CO1lBQzFCLGlCQUFpQjs7QUF4Q3JCLHVCQUF1QjtJQU5uQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLG10YUFBMkM7UUFFM0MsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O0tBQ2hELENBQUM7cUNBcUNnQixVQUFVO1FBQ1AsVUFBVTtRQUNmLFdBQVc7UUFDSixvQkFBb0I7UUFDMUIsaUJBQWlCO0dBeENyQix1QkFBdUIsQ0FvcUJuQztTQXBxQlksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMsXG4gIERhdG9HcmlkRmlsdGVyLFxuICBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRGaWx0ZXJPcHRpb25zTWFwLFxuICBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLFxuICBEYXRvR3JpZEZpbHRlclR5cGVzLFxuICBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZFN0cmluZ0ZpbHRlck9wdGlvbnMsXG4gIGlzUmFuZ2VDb25kaXRpb24sXG4gIExpc3RJdGVtXG59IGZyb20gJy4vZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUG9wb3ZlclJlZiB9IGZyb20gJy4uLy4uL3BvcG92ZXIvcG9wb3Zlci1yZWYnO1xuaW1wb3J0IHsgR3JpZFF1ZXJ5IH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5JztcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHBhaXJ3aXNlLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRpZmZlcmVuY2UsIGlzQXJyYXlWYWx1ZXNFcXVhbCwgdW5pcUJ5IH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXknO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBPcGVyYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vb3BlcmF0b3ItdG9nZ2xlci9vcGVyYXRvci10b2dnbGVyLnR5cGVzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgdmFsaWRhdGVGaWx0ZXIgfSBmcm9tICcuL2ZpbHRlci12YWxpZGF0b3InO1xuaW1wb3J0IHsgRGF0b0dyaWRDb2x1bW5EZWYsIERhdG9HcmlkR2V0Um93c1BhcmFtcyB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi50eXBlcyc7XG5pbXBvcnQgeyB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ25neC10YWtlLXVudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgRGF0b0NvbHVtbk1lbnVEYXRhIH0gZnJvbSAnLi4vZ3JpZC1jb2x1bW4taGVhZGVyL2dyaWQtY29sdW1uLWhlYWRlci50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW4sIENvbHVtbkdyb3VwLCBHcmlkQXBpLCBSb3dOb2RlIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgRGF0ZVJhbmdlIH0gZnJvbSAnLi4vLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIudHlwZXMnO1xuaW1wb3J0IHsgY3VycnkgfSBmcm9tICcuLi8uLi91dGlscy9mdW5jdGlvbic7XG5pbXBvcnQgeyBTb3J0TGFiZWxUeXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2VhcmNoLXJlc3VsdHMucGlwZSc7XG5pbXBvcnQgeyBIb3RLZXlDb25maWcgfSBmcm9tICcuLi8uLi9ob3RrZXlzL2hvdGtleS50eXBlcyc7XG5pbXBvcnQgeyBmb3JtYXRLZXlzIH0gZnJvbSAnLi4vLi4vaG90a2V5cy9ob3RrZXlzLWZvcm1hdHRlcic7XG5pbXBvcnQgeyBnZXRDb2xGaWVsZCB9IGZyb20gJy4uL2dyaWQtc3RvcmUvdXRpbCc7XG5cbmNvbnN0IG1hcFRvVmFsdWUgPSAoeyB2YWx1ZSB9KSA9PiB2YWx1ZTtcbmNvbnN0IG1hcFRvTGlzdEl0ZW0gPSB2YWwgPT4gKHsgaWQ6IHZhbCwgbGFiZWw6IGlzTmlsKHZhbCkgPyBgKEVtcHR5KWAgOiBgJHt2YWx9YC50cmltKCksIHZhbHVlOiB2YWwgfSk7XG5jb25zdCBtYXBUb0xpc3RJdGVtV2l0aEZvcm1hdHRlZCA9ICh7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSB9LCBrZXk/KSA9PiAoe1xuICBpZDoga2V5ICYmIHZhbHVlID8gdmFsdWVba2V5XSA6IHZhbHVlLFxuICBsYWJlbDogaXNOaWwoZm9ybWF0dGVkVmFsdWUpID8gYChFbXB0eSlgIDogYCR7a2V5ID8gZm9ybWF0dGVkVmFsdWVba2V5XSA6IGZvcm1hdHRlZFZhbHVlfWAudHJpbSgpLFxuICB2YWx1ZToga2V5ICYmIHZhbHVlID8gdmFsdWVba2V5XSA6IHZhbHVlXG59KTtcblxudHlwZSBDb25kaXRpb25zID0ge1xuICB0eXBlOiB7XG4gICAgb3BlcmFuZDogRXhjbHVkZTxEYXRvRmlsdGVyQ29uZGl0aW9ucywgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fTElTVCB8IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUPjtcbiAgfTtcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgcmFuZ2VFbmQ6IHN0cmluZyB8IG51bWJlcjtcbn1bXTtcblxudHlwZSBDb25kaXRpb25PcHRpb24gPSB7IGlkOiBudW1iZXI7IGxhYmVsOiBzdHJpbmc7IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zIH07XG5cbnR5cGUgVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZSA9IHsgdmFsdWU6IHN0cmluZyB8IG51bWJlcjsgZm9ybWF0dGVkVmFsdWU6IHN0cmluZyB8IG51bWJlciB9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0b0dyaWRGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBncmlkRmlsdGVyVHlwZXMgPSBEYXRvR3JpZEZpbHRlclR5cGVzO1xuICBmaWx0ZXJUeXBlOiBEYXRvR3JpZEZpbHRlclR5cGVzO1xuICBjb2x1bW5WYWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXTtcbiAgbGlzdE9wdGlvbnM6IExpc3RJdGVtW10gPSBbXTtcbiAgY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zOiBDb25kaXRpb25PcHRpb25bXTtcbiAgaGFzRmlsdGVyJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgZmlsdGVyRm9ybTogRm9ybUdyb3VwO1xuICBmaWx0ZXJTZWN0aW9uczogeyBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZV0/OiBib29sZWFuOyBbRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbF0/OiBib29sZWFuIH0gPSB7XG4gICAgW0RhdG9HcmlkRmlsdGVyU2VjdGlvbnMuQnlfVmFsdWVdOiB0cnVlLFxuICAgIFtEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsXTogdHJ1ZVxuICB9O1xuICByYW5nZU9wZXJhbmQgPSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRTtcbiAgbGlzdExhYmVsVHlwZTogU29ydExhYmVsVHlwZTtcbiAgbGlzdFNvcnRCeUtleTogc3RyaW5nO1xuICBpc0NsaWVudFNpZGVHcmlkID0gZmFsc2U7XG4gIGxpc3RTZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIGxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gIHNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgYXBwbHlIb3RLZXlDb25maWc6IEhvdEtleUNvbmZpZyA9IHtcbiAgICBrZXlzOiAnbWV0YS5lbnRlcicsXG4gICAgaGFuZGxlcjogKCkgPT4gdGhpcy5jbG9zZVBvcFVwKCksXG4gICAgZGVzY3JpcHRpb246ICdjb3JlLmFwcGx5LWZpbHRlcnMnXG4gIH07XG4gIGhvdEtleVRvb2x0aXAgPSBmb3JtYXRLZXlzKHRoaXMuYXBwbHlIb3RLZXlDb25maWcua2V5cyk7XG4gIGFjdGl2ZUFjY29yZGlvbklkID0gMDtcbiAga2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlcjogYm9vbGVhbjtcblxuICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5O1xuICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZTtcbiAgcHJpdmF0ZSBjb2xGaWVsZDogc3RyaW5nO1xuICBwcml2YXRlIGV4Y2x1ZGVkVmFsdWVzID0gbmV3IFNldDxzdHJpbmcgfCBudW1iZXI+KCk7XG4gIHByaXZhdGUgYnlWYWx1ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBpdm90Q29sdW1uOiBDb2x1bW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBob3N0OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcG9wb3ZlcjogUG9wb3ZlclJlZjxEYXRvQ29sdW1uTWVudURhdGE+LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIGdldCBieVZhbHVlQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdieVZhbHVlJyk7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uc0NvbnRyb2xzKCk6IEFic3RyYWN0Q29udHJvbFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25zLmNvbnRyb2xzO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbnNPcGVyYXRvcigpOiBPcGVyYXRvclR5cGVzIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtLmdldCgnY29uZGl0aW9uYWwub3BlcmF0b3InKS52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRPcGVyYW5kKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgdHlwZTogW3RoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdXSxcbiAgICAgIHZhbHVlOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICByYW5nZUVuZDogW251bGxdXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1ByZWRlZmluZWRMaXN0SXRlbXMoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzQ29uZmlnID0ge30gfSA9IHRoaXMuY29sRGVmO1xuICAgIHJldHVybiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzICYmIHR5cGVvZiBmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzWzBdID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRDb25kaXRpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBvcGVyYXRvcjogW09wZXJhdG9yVHlwZXMuQU5EXSxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZmIuYXJyYXkoW3RoaXMuZGVmYXVsdE9wZXJhbmRdKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdEJ5VmFsdWUoKSB7XG4gICAgcmV0dXJuIFt0aGlzLmNvbHVtblZhbHVlc107XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Rm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZpbHRlcnM6IHsgYnlWYWx1ZT87IGNvbmRpdGlvbmFsPyB9ID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlcnMuYnlWYWx1ZSA9IHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICBmaWx0ZXJzLmNvbmRpdGlvbmFsID0gdGhpcy5kZWZhdWx0Q29uZGl0aW9uYWw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29uZGl0aW9ucygpOiBGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KCdjb25kaXRpb25hbC5jb25kaXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY29sRmlsdGVyKCk6IERhdG9HcmlkRmlsdGVyIHtcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKVt0aGlzLmNvbEZpZWxkXTtcblxuICAgIHJldHVybiBmaWx0ZXIgJiYgaXNBcnJheVZhbHVlc0VxdWFsKHRoaXMucGl2b3RLZXlzLCBmaWx0ZXIucGl2b3RLZXlzKSA/IGZpbHRlciA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb2xEZWYoKTogRGF0b0dyaWRDb2x1bW5EZWYge1xuICAgIHJldHVybiB0aGlzLnBvcG92ZXIuZGF0YS5jb2x1bW4uZ2V0Q29sRGVmKCkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gIH1cblxuICBwcml2YXRlIGdldCBwaXZvdEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmNvbERlZi5waXZvdEtleXMgfHwgW107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCB7IGdyaWRTZXJ2aWNlLCBncmlkUXVlcnkgfSA9IHRoaXMucG9wb3Zlci5kYXRhO1xuICAgIGNvbnN0IHsgZmlsdGVyLCBwaXZvdFZhbHVlQ29sdW1uLCBwaXZvdEtleXMgfSA9IHRoaXMuY29sRGVmO1xuICAgIGNvbnN0IGNvbERlZnMgPSBncmlkUXVlcnkuYXBpLmNvbHVtbnMuZ2V0QWxsQ29sdW1ucygpLm1hcChjb2x1bW4gPT4gY29sdW1uLmdldENvbERlZigpKTtcblxuICAgIHRoaXMuY29sRmllbGQgPSBnZXRDb2xGaWVsZCh0aGlzLmNvbERlZik7XG5cbiAgICBjb25zdCBjb2xEZWY6IERhdG9HcmlkQ29sdW1uRGVmID0gY29sRGVmcy5maW5kKGNvbERlZiA9PiBjb2xEZWYuZmllbGQgPT09IHRoaXMuY29sRmllbGQpO1xuICAgIGNvbnN0IGZpbHRlcnNDb25maWcgPSBjb2xEZWYuZmlsdGVyc0NvbmZpZyB8fCB0aGlzLmNvbERlZi5maWx0ZXJzQ29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IGNvbEZpbHRlciA9IGZpbHRlciB8fCBjb2xEZWYuZmlsdGVyO1xuICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXBbY29sRmlsdGVyIGFzIHN0cmluZ107XG5cbiAgICB0aGlzLnBpdm90Q29sdW1uID0gZ3JpZFF1ZXJ5LmFwaS5jb2x1bW5zLmdldFNlY29uZGFyeVBpdm90Q29sdW1uKHBpdm90S2V5cywgcGl2b3RWYWx1ZUNvbHVtbik7XG5cbiAgICBpZiAoZmlsdGVyc0NvbmZpZy5zZWN0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJTZWN0aW9ucyA9IHsgW2ZpbHRlcnNDb25maWcuc2VjdGlvbnNdOiB0cnVlIH07XG4gICAgfVxuXG4gICAgdGhpcy5rZWVwUHJlZGVmaW5lZExpc3RPcmlnaW5hbE9yZGVyID1cbiAgICAgIGZpbHRlcnNDb25maWcua2VlcFByZWRlZmluZWRMaXN0T3JpZ2luYWxPcmRlciAmJiAhaXNFbXB0eShmaWx0ZXJzQ29uZmlnLnByZWRlZmluZWRMaXN0VmFsdWVzKTtcblxuICAgIHRoaXMuZmlsdGVyVHlwZSA9IGZpbHRlck9wdGlvbnMgPyAoY29sRmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIDogRGF0b0dyaWRGaWx0ZXJUeXBlcy5TdHJpbmc7XG4gICAgdGhpcy5saXN0TGFiZWxUeXBlID0gdGhpcy5maWx0ZXJUeXBlLnRvTG93ZXJDYXNlKCkgYXMgU29ydExhYmVsVHlwZTtcbiAgICB0aGlzLmxpc3RTb3J0QnlLZXkgPSB0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyICYmIHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyID8gJ2lkJyA6ICdsYWJlbCc7XG4gICAgdGhpcy5ncmlkUXVlcnkgPSBncmlkUXVlcnk7XG4gICAgdGhpcy5ncmlkU2VydmljZSA9IGdyaWRTZXJ2aWNlO1xuICAgIHRoaXMuaGFzRmlsdGVyJCA9IHRoaXMuZ3JpZFF1ZXJ5XG4gICAgICAuc2VsZWN0KHN0YXRlID0+IHN0YXRlLnNldHRpbmdzLmZpbHRlclt0aGlzLmNvbEZpZWxkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoZmlsdGVyID0+IHtcbiAgICAgICAgICByZXR1cm4gIWlzTmlsKGZpbHRlcikgJiYgaXNBcnJheVZhbHVlc0VxdWFsKGZpbHRlci5waXZvdEtleXMsIHRoaXMucGl2b3RLZXlzKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IERhdG9GaWx0ZXJDb25kaXRpb25zW10gPSBmaWx0ZXJPcHRpb25zIHx8IERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucztcblxuICAgICAgaWYgKGZpbHRlcnNDb25maWcuc2hvd0VtcHR5Q29uZGl0aW9ucykge1xuICAgICAgICBsZXQgZW1wdHlDb25kaXRpb25zID0gW0RhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfRU1QVFldO1xuXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyKSB7XG4gICAgICAgICAgZW1wdHlDb25kaXRpb25zID0gW0RhdG9GaWx0ZXJDb25kaXRpb25zLklTX05VTEwsIERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9OVUxMXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSBbLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZW1wdHlDb25kaXRpb25zXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zID0gZmlsdGVyQ29uZGl0aW9ucy5tYXAoKG9wZXJhbmQsIGlkKSA9PiAoe1xuICAgICAgICBpZCxcbiAgICAgICAgb3BlcmFuZCxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybShgY29yZS4ke3RoaXMuZmlsdGVyVHlwZSA9PT0gRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlID8gJ0RBVEVfJyA6ICcnfSR7b3BlcmFuZH1gKVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGxldCBvcmlnaW5hbE9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgY29uc3QgeyBwcmVkZWZpbmVkTGlzdFZhbHVlcyB9ID0gZmlsdGVyc0NvbmZpZztcbiAgICAgIHRoaXMuaXNDbGllbnRTaWRlR3JpZCA9ICFpc05pbChwcmVkZWZpbmVkTGlzdFZhbHVlcykgfHwgIWdyaWRRdWVyeS5pc1NlcnZlclNpZGU7XG4gICAgICBpZiAoIXByZWRlZmluZWRMaXN0VmFsdWVzIHx8IHRoaXMuaXNTdHJpbmdBcnJheShwcmVkZWZpbmVkTGlzdFZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWVzID0gcHJlZGVmaW5lZExpc3RWYWx1ZXMgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChyYXdWYWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtblZhbHVlcyA9IHJhd1ZhbHVlcztcbiAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gcmF3VmFsdWVzLm1hcChtYXBUb0xpc3RJdGVtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZXMgPSB0aGlzLmdldENvbHVtblZhbHVlcygpO1xuICAgICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gY29sdW1uVmFsdWVzLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gIWlzTmlsKHRoaXMucGl2b3RDb2x1bW4pICYmIHZhbHVlID8gdmFsdWVbdGhpcy5jb2xGaWVsZF0gOiB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gY29sdW1uVmFsdWVzLm1hcChjb2xWYWx1ZSA9PlxuICAgICAgICAgICAgbWFwVG9MaXN0SXRlbVdpdGhGb3JtYXR0ZWQoY29sVmFsdWUsICFpc05pbCh0aGlzLnBpdm90Q29sdW1uKSAmJiB0aGlzLmNvbEZpZWxkKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlcyA9IHByZWRlZmluZWRMaXN0VmFsdWVzIGFzIExpc3RJdGVtW107XG4gICAgICAgIHRoaXMuY29sdW1uVmFsdWVzID0gcmF3VmFsdWVzLm1hcChtYXBUb1ZhbHVlKTtcbiAgICAgICAgdGhpcy5saXN0T3B0aW9ucyA9IHJhd1ZhbHVlcztcbiAgICAgIH1cblxuICAgICAgb3JpZ2luYWxPcHRpb25zID0gdGhpcy5saXN0T3B0aW9ucztcblxuICAgICAgaWYgKCF0aGlzLmlzQ2xpZW50U2lkZUdyaWQpIHtcbiAgICAgICAgdGhpcy5saXN0U2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKChzZWFyY2hUZXJtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnNlcnZlclNlYXJjaEVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoc2VhcmNoVGVybS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gb3JpZ2luYWxPcHRpb25zO1xuICAgICAgICAgICAgdGhpcy5wYXRjaEFuZFJlUmVnaXN0ZXIodGhpcy5jb2x1bW5WYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldFZhbHVlc0Zyb21TZXJ2ZXIoc2VhcmNoVGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gIH1cblxuICBjbG9zZVBvcFVwKCkge1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbGlkICYmIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybS5kaXJ0eSAmJiAodGhpcy5maWx0ZXJGb3JtLnZhbGlkIHx8IHRoaXMuZmlsdGVyRm9ybS5nZXQoJ2NvbmRpdGlvbmFsJykucHJpc3RpbmUpKSB7XG4gICAgICBjb25zdCB7IGNvbHVtbiB9ID0gdGhpcy5wb3BvdmVyLmRhdGE7XG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKCk7XG4gICAgICBpc0VtcHR5KGZpbHRlcilcbiAgICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpXG4gICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5zZXRDb2x1bW5GaWx0ZXIoY29sdW1uLCBmaWx0ZXIpO1xuXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKHRoaXMuY29sRmllbGQpO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gIH1cblxuICByZW1vdmVDb25kaXRpb24oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY29uZGl0aW9ucy5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBhZGRDb25kaXRpb24oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5jb25kaXRpb25zLnB1c2godGhpcy5kZWZhdWx0T3BlcmFuZCk7XG4gIH1cblxuICBnZXRPcGVyYW5kVHlwZShpOiBudW1iZXIpIHtcbiAgICBjb25zdCBjb25kaXRpb25UeXBlID0gdGhpcy5jb25kaXRpb25zLmF0KGkpLnZhbHVlLnR5cGU7XG4gICAgcmV0dXJuIGNvbmRpdGlvblR5cGUgPyBjb25kaXRpb25UeXBlLm9wZXJhbmQgOiBudWxsO1xuICB9XG5cbiAgaXNDb25kaXRpb25hbEVtcHR5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9wZXJhbmQ6IERhdG9GaWx0ZXJDb25kaXRpb25zID1cbiAgICAgIGNvbnRyb2wgJiYgY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLnR5cGUgPyBjb250cm9sLnZhbHVlLnR5cGUub3BlcmFuZCA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuaXNFbXB0eU9wZXJhbmQob3BlcmFuZCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmJ5VmFsdWVTdWJzY3JpcHRpb24gJiYgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHR5cGU6IFwiRXhjbHVkZVwiXG4gICAqIFNlbGVjdGVkIHZhbHVlczogQSwgQywgRFxuICAgKiBBbGwgbGlzdDogQSwgQiwgQywgRFxuICAgKiBSZXN1bHQ6IEJcbiAgICogQHBhcmFtIGluY2x1ZGVkQXJyIC1UaGUgbGlzdCBvZiB2YWx1ZXMgdG8gaW5jbHVkZVxuICAgKiBAcGFyYW0gYXNMaXN0SXRlbSAtSW5kaWNhdGVzIGlmIHRoZSByZXNwb25zZSBuZWVkcyB0byBiZSBhcyBzdHJpbmcgb3IgYXMgTGlzdEl0ZW1cbiAgICovXG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSwgYXNMaXN0SXRlbTogdHJ1ZSk6IExpc3RJdGVtW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW107XG4gIHByaXZhdGUgZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoXG4gICAgaW5jbHVkZWRBcnI6IChMaXN0SXRlbSB8IHN0cmluZyB8IG51bWJlcilbXSxcbiAgICBhc0xpc3RJdGVtID0gZmFsc2VcbiAgKTogKHN0cmluZyB8IG51bWJlcilbXSB8IExpc3RJdGVtW10ge1xuICAgIGxldCBpbmNsdWRlZFNldDtcbiAgICBpZiAodGhpcy5pc1ByZWRlZmluZWRMaXN0SXRlbXMpIHtcbiAgICAgIGNvbnN0IHByZWRlZmluZWRMaXN0ID0gdGhpcy5jb2xEZWYuZmlsdGVyc0NvbmZpZy5wcmVkZWZpbmVkTGlzdFZhbHVlcyBhcyBMaXN0SXRlbVtdO1xuICAgICAgaW5jbHVkZWRTZXQgPSBuZXcgU2V0KFxuICAgICAgICBpbmNsdWRlZEFyci5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gcHJlZGVmaW5lZExpc3QuZmluZCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gdmFsKTtcbiAgICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluY2x1ZGVkU2V0ID0gbmV3IFNldChpbmNsdWRlZEFyci5tYXAodmFsID0+IChpc09iamVjdDxMaXN0SXRlbT4odmFsKSA/IHZhbC52YWx1ZSA6IHZhbCkpKTtcbiAgICB9XG4gICAgaWYgKGFzTGlzdEl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmxpc3RPcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiAhaW5jbHVkZWRTZXQuaGFzKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlcy5maWx0ZXIodmFsdWUgPT4gIWluY2x1ZGVkU2V0Lmhhcyh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlcigpOiBEYXRvR3JpZEZpbHRlciB7XG4gICAgY29uc3QgeyBieVZhbHVlLCBjb25kaXRpb25hbCB9ID0gdGhpcy5maWx0ZXJGb3JtLnZhbHVlO1xuICAgIGNvbnN0IGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIgPSB7fTtcblxuICAgIGlmICh0aGlzLmZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsKSB7XG4gICAgICB0aGlzLnNldENvbmRpdGlvbmFsRmlsdGVyKGZpbHRlciwgY29uZGl0aW9uYWwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgdGhpcy5zZXRCeVZhbHVlRmlsdGVyKGZpbHRlciwgYnlWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIElmIGZpbHRlcnMgYXBwbGllZCwgYWRkIHRoZSBleHRyYSBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgYnkgcGl2b3QgbW9kZSAqL1xuICAgIGlmIChmaWx0ZXIuYnlWYWx1ZSB8fCBmaWx0ZXIuY29uZGl0aW9uYWwpIHtcbiAgICAgIGZpbHRlci5jb2xJZCA9IHRoaXMuY29sRGVmLmNvbElkO1xuICAgICAgZmlsdGVyLnBpdm90S2V5cyA9IHRoaXMucGl2b3RLZXlzO1xuXG4gICAgICBpZiAodGhpcy5waXZvdENvbHVtbikge1xuICAgICAgICBmaWx0ZXIucGl2b3RGaWVsZHNNYXAgPSB0aGlzLmdldFBpdm90RmllbGRzKHRoaXMucGl2b3RDb2x1bW4uZ2V0UGFyZW50KCkpLnJlZHVjZSgoZmllbGRNYXAsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnBpdm90S2V5c1tpbmRleF0pIHtcbiAgICAgICAgICAgIGZpZWxkTWFwW2ZpZWxkXSA9IHRoaXMucGl2b3RLZXlzW2luZGV4XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmllbGRNYXA7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IGZpbHRlclZhbHVlID8gdGhpcy5idWlsZEZvcm1Gcm9tRmlsdGVyKGZpbHRlclZhbHVlKSA6IHRoaXMuZGVmYXVsdEZvcm07XG4gICAgdGhpcy5yZWdpc3Rlck9wZXJhbmRMaXN0ZW5lcnMoKTtcbiAgICBpZiAoIXRoaXMuaXNDbGllbnRTaWRlR3JpZCAmJiB0aGlzLmZpbHRlclNlY3Rpb25zLkJ5X1ZhbHVlKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQnlWYWx1ZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBmaWx0ZXIgdmlldyBmcm9tIGEgZ2l2ZW4gZmlsdGVyXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkRm9ybUZyb21GaWx0ZXIoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcik6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZmlsdGVyR3JvdXAgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgZmlsdGVyR3JvdXBbJ2NvbmRpdGlvbmFsJ10gPSB0aGlzLmJ1aWxkQ29uZGl0aW9uYWxGaWx0ZXIoZmlsdGVyLmNvbmRpdGlvbmFsKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQnlfVmFsdWUpIHtcbiAgICAgIGZpbHRlckdyb3VwWydieVZhbHVlJ10gPSB0aGlzLmJ1aWxkQnlWYWx1ZUZpbHRlcihmaWx0ZXIuYnlWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGZpbHRlckdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgZmlsdGVyIHZpZXdcbiAgICovXG4gIHByaXZhdGUgcmVzZXRGb3JtKCkge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5zZXRFcnJvcnMobnVsbCk7XG4gICAgbGV0IG9yaWdpbmFsU3RhdGUgPSB7fTtcbiAgICBpZiAodGhpcy5maWx0ZXJTZWN0aW9ucy5CeV9WYWx1ZSkge1xuICAgICAgb3JpZ2luYWxTdGF0ZSA9IHsgYnlWYWx1ZTogdGhpcy5jb2x1bW5WYWx1ZXMgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VjdGlvbnMuQ29uZGl0aW9uYWwpIHtcbiAgICAgIG9yaWdpbmFsU3RhdGUgPSB7XG4gICAgICAgIC4uLm9yaWdpbmFsU3RhdGUsXG4gICAgICAgIGNvbmRpdGlvbmFsOiB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGNvbmRpdGlvbnM6IFt7IHR5cGU6IHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zWzBdLCB2YWx1ZTogbnVsbCwgcmFuZ2VFbmQ6IG51bGwgfV1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbmRpdGlvbmFsID0gdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzLmNvbmRpdGlvbmFsIGFzIEZvcm1Hcm91cDtcbiAgICAgIGNvbmRpdGlvbmFsLnJlbW92ZUNvbnRyb2woJ2NvbmRpdGlvbnMnKTtcbiAgICAgIGNvbmRpdGlvbmFsLmFkZENvbnRyb2woJ2NvbmRpdGlvbnMnLCB0aGlzLmZiLmFycmF5KFt0aGlzLmRlZmF1bHRPcGVyYW5kXSkpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckZvcm0ucmVzZXQob3JpZ2luYWxTdGF0ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgY29sdW1uIHZhbHVlcyB0byBkaXNwbGF5IG9uIHRoZSBsaXN0LlxuICAgKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkXG4gICAqIDIuIFNpbmNlIHdlIGFsc28gd2FudCB0byBzaG93IHZhbHVlcyB0aGF0IHdlcmUgZmlsdGVyZWQgYnkgdGhpcyBjb2x1bW4gZmlsdGVyIHdlIGFyZSBpdGVyYXRpbmcgYWxsIHRoZSByb3dzXG4gICAqIChiZWZvcmUgdGhlIGZpbHRlcmluZyksIGZpbmRpbmcgd2hpY2ggd2VyZSByZW1vdmVkIGJ5IHRoaXMgY29sdW1uJ3MgZmlsdGVyIGFuZCBhZGRpbmcgdGhlbSBiYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb2x1bW5WYWx1ZXMoKTogVmFsdWVBbmRGb3JtYXR0ZWRWYWx1ZVtdIHtcbiAgICBsZXQgdmFsdWVzOiBWYWx1ZUFuZEZvcm1hdHRlZFZhbHVlW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuY29sRmlsdGVyO1xuICAgIGNvbnN0IGRpc3BsYXllZFJvdyA9IHt9O1xuICAgIGNvbnN0IGJ5VmFsdWVUeXBlID0gZmlsdGVyVmFsdWUgJiYgZmlsdGVyVmFsdWUuYnlWYWx1ZSAmJiBmaWx0ZXJWYWx1ZS5ieVZhbHVlLmNvbmRpdGlvbjtcbiAgICBjb25zdCBhcGkgPSB0aGlzLmdyaWRRdWVyeS5hcGkuZ3JpZDtcbiAgICBjb25zdCBnZXRWYWx1ZUN1cnJpZWQgPSBjdXJyeSh0aGlzLmdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUpKHRoaXMuY29sRmllbGQsIGFwaSwgdGhpcy5jb2xEZWYudmFsdWVGb3JtYXR0ZXIpO1xuICAgIC8qKiAxLiBJdGVyYXRlIG92ZXIgdGhlIHJvd3MgYWZ0ZXIgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIHdhcyBhcHBsaWVkICovXG4gICAgaWYgKHRoaXMuaXNDbGllbnRTaWRlR3JpZCkge1xuICAgICAgYXBpLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KHJvdyA9PiB7XG4gICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgZGlzcGxheWVkUm93W3Jvdy5pZF0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIFdlIG9ubHkgZGlzcGxheSB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBsaXN0ICovXG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IGFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gYXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VTaXplICogY3VycmVudFBhZ2U7XG4gICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICAgIGFwaS5mb3JFYWNoTm9kZShyb3cgPT4ge1xuICAgICAgICBjb25zdCB7IHJvd0luZGV4IH0gPSByb3c7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSBzdGFydEluZGV4ICYmIHJvd0luZGV4IDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICB2YWx1ZXMucHVzaChnZXRWYWx1ZUN1cnJpZWQocm93KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiAyLiBBZGQgYmFjayB2YWx1ZXMgdGhhdCB3ZXJlIGZpbHRlcmVkIGJ5IHRoaXMgY29sdW1uICovXG4gICAgaWYgKGJ5VmFsdWVUeXBlKSB7XG4gICAgICBpZiAoYnlWYWx1ZVR5cGUgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNUKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuY29sRGVmLnZhbHVlRm9ybWF0dGVyIGFzIChwYXJhbXM6IGFueSkgPT4gc3RyaW5nO1xuICAgICAgICBjb25zdCBjdXJyRmlsdGVyVmFsdWVzID0gZmlsdGVyVmFsdWUuYnlWYWx1ZS52YWx1ZXMubWFwKCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9KSA6IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlLCBmb3JtYXR0ZWRWYWx1ZSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzLmNvbmNhdChjdXJyRmlsdGVyVmFsdWVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uYWwgfSA9IHRoaXMuY29sRmlsdGVyO1xuICAgICAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpLFxuICAgICAgICAgIFt0aGlzLmNvbEZpZWxkXTogeyBjb25kaXRpb25hbCB9XG4gICAgICAgIH07XG4gICAgICAgIGFwaS5mb3JFYWNoTGVhZk5vZGUocm93ID0+IHtcbiAgICAgICAgICBpZiAoIWRpc3BsYXllZFJvdy5oYXNPd25Qcm9wZXJ0eShyb3cuaWQpICYmIHZhbGlkYXRlRmlsdGVyKHsgcm93LCBhcGkgfSwgYWN0aXZlRmlsdGVycykpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlQ3VycmllZChyb3cpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5pcUJ5KHZhbHVlcywgJ3ZhbHVlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUoXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBhcGk6IEdyaWRBcGksXG4gICAgLy8gVE9ETzogZm9sbG93dXA6IGh0dHBzOi8vYWctZ3JpZC56ZW5kZXNrLmNvbS9oYy9lbi11cy9yZXF1ZXN0cy8xMTAxOVxuICAgIGZvcm1hdHRlcjogKHBhcmFtczogYW55KSA9PiBzdHJpbmcsXG4gICAgcm93OiBSb3dOb2RlXG4gICk6IFZhbHVlQW5kRm9ybWF0dGVkVmFsdWUge1xuICAgIGNvbnN0IHZhbHVlID0gYXBpLmdldFZhbHVlKGZpZWxkLCByb3cpO1xuICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTA5NjM/cGFnZT0xXG4gICAgcmV0dXJuIHsgdmFsdWUsIGZvcm1hdHRlZFZhbHVlOiBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIoeyB2YWx1ZSB9IGFzIGFueSkgOiB2YWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbEZpbHRlcihcbiAgICBmaWx0ZXI6IERhdG9HcmlkRmlsdGVyLFxuICAgIHsgb3BlcmF0b3IsIGNvbmRpdGlvbnMgfTogeyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlczsgY29uZGl0aW9uczogQ29uZGl0aW9ucyB9XG4gICkge1xuICAgIGNvbnN0IHZhbGlkQ29uZGl0aW9ucyA9IGNvbmRpdGlvbnMuZmlsdGVyKCh7IHZhbHVlLCB0eXBlIH0pID0+ICFpc05pbCh2YWx1ZSkgfHwgdGhpcy5pc0VtcHR5T3BlcmFuZCh0eXBlLm9wZXJhbmQpKTtcbiAgICBpZiAodmFsaWRDb25kaXRpb25zLmxlbmd0aCkge1xuICAgICAgZmlsdGVyLmNvbmRpdGlvbmFsID0ge1xuICAgICAgICB0eXBlOiAodGhpcy5jb2xEZWYuZmlsdGVyIGFzIERhdG9HcmlkRmlsdGVyVHlwZXMpIHx8IERhdG9HcmlkRmlsdGVyVHlwZXMuU3RyaW5nLFxuICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9ucy5tYXAoKHsgdmFsdWUsIHR5cGUsIHJhbmdlRW5kIH0pID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlID0geyBjb25kaXRpb246IHR5cGUub3BlcmFuZCwgdmFsdWUgfTtcbiAgICAgICAgICBpZiAodHlwZS5vcGVyYW5kID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHsgLi4uYmFzZSwgcmFuZ2VFbmQgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGZyb20sIHRvIH0gPSB2YWx1ZSBhcyBEYXRlUmFuZ2U7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHsgY29uZGl0aW9uOiB0eXBlLm9wZXJhbmQsIHZhbHVlOiBmcm9tIGFzIHN0cmluZywgcmFuZ2VFbmQ6IHRvIGFzIHN0cmluZyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYmFzZSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgfSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRCeVZhbHVlRmlsdGVyKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsIGJ5VmFsdWU6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICBpZiAodGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICBjb25zdCB2YWx1ZXNDb3VudCA9IHRoaXMuY29sdW1uVmFsdWVzLmxlbmd0aDtcbiAgICAgIGlmIChieVZhbHVlLmxlbmd0aCAhPT0gdmFsdWVzQ291bnQpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID1cbiAgICAgICAgICBieVZhbHVlLmxlbmd0aCA8IHZhbHVlc0NvdW50IC8gMiA/IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVDtcbiAgICAgICAgZmlsdGVyLmJ5VmFsdWUgPSB7XG4gICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgIHZhbHVlczogY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUID8gYnlWYWx1ZSA6IHRoaXMuZ2V0QnlWYWx1ZUV4Y2x1ZGVWYWx1ZXMoYnlWYWx1ZSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLmV4Y2x1ZGVkVmFsdWVzLnZhbHVlcygpKTtcbiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXIuYnlWYWx1ZSA9IHtcbiAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgICAgIHZhbHVlc1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCeVZhbHVlRmlsdGVyKGJ5VmFsdWU6IERhdG9HcmlkRmlsdGVyWydieVZhbHVlJ10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdW10ge1xuICAgIGlmICghYnlWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEJ5VmFsdWU7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLnZhbHVlcy5sZW5ndGggJiYgdGhpcy5maWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCkge1xuICAgICAgdGhpcy5hY3RpdmVBY2NvcmRpb25JZCA9IDE7XG4gICAgfVxuICAgIGlmIChieVZhbHVlLmNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1QpIHtcbiAgICAgIGlmICghdGhpcy5pc0NsaWVudFNpZGVHcmlkKSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZWRWYWx1ZXMgPSBuZXcgU2V0KGJ5VmFsdWUudmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbdGhpcy5nZXRCeVZhbHVlRXhjbHVkZVZhbHVlcyhieVZhbHVlLnZhbHVlcyldO1xuICAgIH1cbiAgICByZXR1cm4gW2J5VmFsdWUudmFsdWVzXTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25kaXRpb25hbEZpbHRlcihjb25kaXRpb25hbDogRGF0b0dyaWRGaWx0ZXJbJ2NvbmRpdGlvbmFsJ10pOiBGb3JtR3JvdXAge1xuICAgIGlmICghY29uZGl0aW9uYWwpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRDb25kaXRpb25hbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgb3BlcmF0b3I6IFtjb25kaXRpb25hbC5vcGVyYXRvcl0sXG4gICAgICBjb25kaXRpb25zOiB0aGlzLmZiLmFycmF5KHRoaXMuYnVpbGRDb25kaXRpb25zKGNvbmRpdGlvbmFsLmNvbmRpdGlvbnMpKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmRpdGlvbnMoY29uZGl0aW9uczogKERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uIHwgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbilbXSk6IEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gY29uZGl0aW9ucy5tYXAoY29uZGl0aW9uID0+IHtcbiAgICAgIGNvbnN0IHsgY29uZGl0aW9uOiBjdXJyZW50T3BlcmFuZCwgdmFsdWUgfSA9IGNvbmRpdGlvbjtcbiAgICAgIGNvbnN0IGdyb3VwID0ge1xuICAgICAgICB0eXBlOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IHRoaXMuY29uZGl0aW9uYWxGaWx0ZXJPcHRpb25zLmZpbmRJbmRleCgoeyBvcGVyYW5kIH0pID0+IG9wZXJhbmQgPT09IGN1cnJlbnRPcGVyYW5kKSxcbiAgICAgICAgICAgIG9wZXJhbmQ6IGN1cnJlbnRPcGVyYW5kLFxuICAgICAgICAgICAgbGFiZWw6IGBjb3JlLiR7Y3VycmVudE9wZXJhbmR9YFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdmFsdWU6IFt2YWx1ZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHJhbmdlRW5kOiBudWxsXG4gICAgICB9O1xuICAgICAgaWYgKGlzUmFuZ2VDb25kaXRpb248RGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbj4oY29uZGl0aW9uKSkge1xuICAgICAgICBncm91cC5yYW5nZUVuZCA9IFtjb25kaXRpb24ucmFuZ2VFbmQsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICBncm91cC52YWx1ZSA9IFt7IGZyb206IGNvbmRpdGlvbi52YWx1ZSBhcyBzdHJpbmcsIHRvOiBjb25kaXRpb24ucmFuZ2VFbmQgYXMgc3RyaW5nIH0sIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoZ3JvdXApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIHJhbmdlIGlzIG5vdCByZXF1aXJlZCBieSBkZWZhdWx0LCB3ZSB3YW50IHRvIG1ha2UgaXQgcmVxdWlyZWQgb25jZSB0aGlzIG9wZXJhbmQgaXMgc2VsZWN0ZWQuXG4gICAqICovXG4gIHByaXZhdGUgcmVnaXN0ZXJPcGVyYW5kTGlzdGVuZXJzKCkge1xuICAgIGlmICghdGhpcy5jb25kaXRpb25zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29uZGl0aW9ucy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGhpcy5jb25kaXRpb25zLmxlbmd0aCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmNvbmRpdGlvbnMubGVuZ3RoKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZXMgPSB0aGlzLmNvbmRpdGlvbnMuY29udHJvbHMubWFwKChncm91cDogRm9ybUdyb3VwLCBpbmRleCkgPT5cbiAgICAgICAgICAgIGdyb3VwLmdldCgndHlwZScpLnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgodmFsdWU6IENvbmRpdGlvbk9wdGlvbikgPT4gKHsgdmFsdWUsIGluZGV4IH0pKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBtZXJnZSguLi52YWx1ZUNoYW5nZXMpO1xuICAgICAgICB9KSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgdmFsdWU6IHsgb3BlcmFuZCB9LCBpbmRleCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgaW5kZXgsIGluUmFuZ2U6IG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFIH07XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclR5cGUgPT09IERhdG9HcmlkRmlsdGVyVHlwZXMuRGF0ZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRGF0ZUlucHV0KHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJUeXBlID09PSBEYXRvR3JpZEZpbHRlclR5cGVzLk51bWJlcikge1xuICAgICAgICAgIHRoaXMudXBkYXRlTnVtYmVySW5wdXQocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQ29udHJvbFZhbGlkYXRvcihvcGVyYW5kLCBpbmRleCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZUlucHV0KHsgaW5SYW5nZSwgaW5kZXggfSkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgndmFsdWUnKTtcbiAgICBpZiAoY29udHJvbC5kaXJ0eSkge1xuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gY29udHJvbDtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaW5SYW5nZSA/IHsgZnJvbTogdmFsdWUsIHRvOiB2YWx1ZSB9IDogdmFsdWUuZnJvbTtcbiAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVOdW1iZXJJbnB1dCh7IGluUmFuZ2UsIGluZGV4IH0pIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBpblJhbmdlID8gVmFsaWRhdG9ycy5yZXF1aXJlZCA6IG51bGw7XG4gICAgY29uc3QgcmFuZ2VFbmQgPSB0aGlzLmNvbmRpdGlvbnMuYXQoaW5kZXgpLmdldCgncmFuZ2VFbmQnKTtcbiAgICByYW5nZUVuZC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgcmFuZ2VFbmQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZUNvbnRyb2xWYWxpZGF0b3Iob3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSAhdGhpcy5pc0VtcHR5T3BlcmFuZChvcGVyYW5kKSA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsO1xuICAgIGNvbnN0IHZhbHVlQ29udHJvbCA9IHRoaXMuY29uZGl0aW9ucy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpIGFzIEZvcm1Db250cm9sO1xuICAgIHZhbHVlQ29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgdmFsdWVDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbXB0eU9wZXJhbmQob3BlcmFuZDogRGF0b0ZpbHRlckNvbmRpdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgfHxcbiAgICAgIG9wZXJhbmQgPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWSB8fFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfTlVMTCB8fFxuICAgICAgb3BlcmFuZCA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX05VTExcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmluZ0FycmF5KHZhbHVlOiAoc3RyaW5nIHwgTGlzdEl0ZW0pW10pOiB2YWx1ZSBpcyBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlWzBdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVzRnJvbVNlcnZlcihzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWRpbmdMaXN0ID0gdHJ1ZTtcbiAgICB0aGlzLmxpc3RPcHRpb25zID0gW107XG4gICAgY29uc3QgcGFyYW1zOiBQYXJ0aWFsPERhdG9HcmlkR2V0Um93c1BhcmFtcz4gPSB7XG4gICAgICBmYWlsQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTGlzdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlcnZlclNlYXJjaEVycm9yZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBzdWNjZXNzQ2FsbGJhY2s6IGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdMaXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZsYXREYXRhID0gZGF0YS5tYXAodmFsdWUgPT4gdmFsdWVbdGhpcy5jb2xGaWVsZF0pO1xuICAgICAgICB0aGlzLmxpc3RPcHRpb25zID0gZmxhdERhdGEubWFwKG1hcFRvTGlzdEl0ZW0pO1xuICAgICAgICB0aGlzLnBhdGNoQW5kUmVSZWdpc3RlcihmbGF0RGF0YSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBzZXJ2ZXJDb25maWc6IHtcbiAgICAgICAgcGFnZVNpemU6IDMwLFxuICAgICAgICBwYWdlTnVtYmVyOiAxLFxuICAgICAgICBjb2x1bW5GaWx0ZXJzOiB7XG4gICAgICAgICAgW3RoaXMuY29sRmllbGRdOiB7XG4gICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgICBmaWx0ZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLkNPTlRBSU5TLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hUZXJtXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNvcnQ6IFtdLFxuICAgICAgICBjb2x1bW5zVG9SZXR1cm46IFt0aGlzLmNvbEZpZWxkXSxcbiAgICAgICAgZGlzdGluY3RSZXN1bHRzOiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLl9vcmlnaW5hbEdldFJvd3MocGFyYW1zIGFzIGFueSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyogV2hlbiBzZWFyY2hpbmcgdGhlIGJ5IHZhbHVlIGZpbHRlciBvbiBzZXJ2ZXIgc2lkZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29udHJvbCB3aXRoIHRoZSBuZXcgdmFsdWVzIGFuZCByZS1yZWdpc3RlciB0byB0aGUgY2hhbmdlcyAqL1xuICBwcml2YXRlIHBhdGNoQW5kUmVSZWdpc3RlcihkYXRhOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5ieVZhbHVlQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMuZ2V0Tm9uRXhjbHVkZWRWYWx1ZXMoZGF0YSkpO1xuICAgIHRoaXMucmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJCeVZhbHVlTGlzdGVuZXIoKSB7XG4gICAgY29uc3QgYnlWYWx1ZSA9IHRoaXMuYnlWYWx1ZUNvbnRyb2w7XG4gICAgdGhpcy5ieVZhbHVlU3Vic2NyaXB0aW9uID0gYnlWYWx1ZS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgoYnlWYWx1ZS52YWx1ZSksXG4gICAgICAgIHBhaXJ3aXNlKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKFtwcmV2LCBjdXJyZW50XSkgPT4ge1xuICAgICAgICBjb25zdCBhZGRUb0V4Y2x1ZGVkID0gY3VycmVudC5sZW5ndGggPCBwcmV2Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGlmZiA9IGFkZFRvRXhjbHVkZWQgPyBkaWZmZXJlbmNlKHByZXYsIGN1cnJlbnQpIDogZGlmZmVyZW5jZShjdXJyZW50LCBwcmV2KTtcbiAgICAgICAgZGlmZi5mb3JFYWNoKHYgPT4gKGFkZFRvRXhjbHVkZWQgPyB0aGlzLmV4Y2x1ZGVkVmFsdWVzLmFkZCh2KSA6IHRoaXMuZXhjbHVkZWRWYWx1ZXMuZGVsZXRlKHYpKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Tm9uRXhjbHVkZWRWYWx1ZXMoZGF0YTogKHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcih2ID0+ICF0aGlzLmV4Y2x1ZGVkVmFsdWVzLmhhcyh2KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBpdm90IGRpbWVuc2lvbnMgYXMgZGVmaW5lZCBpbiB0aGUgcGFyZW50IGdyb3VwIGNvbHVtbiBoZWFkZXIgY2xhc3MuXG4gICAqL1xuICBwcml2YXRlIGdldFBpdm90RmllbGRzKHBhcmVudDogQ29sdW1uR3JvdXAsIGZpZWxkcyA9IFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGdyYW5kUGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuICAgIGNvbnN0IGhlYWRlckNsYXNzID0gcGFyZW50LmdldE9yaWdpbmFsQ29sdW1uR3JvdXAoKS5nZXRDb2xHcm91cERlZigpLmhlYWRlckNsYXNzO1xuXG4gICAgaWYgKGdyYW5kUGFyZW50KSB7XG4gICAgICB0aGlzLmdldFBpdm90RmllbGRzKGdyYW5kUGFyZW50LCBmaWVsZHMpO1xuICAgIH1cblxuICAgIGhlYWRlckNsYXNzICYmIGZpZWxkcy5wdXNoKGhlYWRlckNsYXNzWzBdKTtcblxuICAgIHJldHVybiBmaWVsZHM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -34,6 +34,8 @@ export var DatoFilterConditions;
|
|
|
34
34
|
DatoFilterConditions["NOT_IN_LIST"] = "NOT_IN_LIST";
|
|
35
35
|
DatoFilterConditions["IS_EMPTY"] = "IS_EMPTY";
|
|
36
36
|
DatoFilterConditions["NOT_EMPTY"] = "NOT_EMPTY";
|
|
37
|
+
DatoFilterConditions["IS_NULL"] = "IS_NULL";
|
|
38
|
+
DatoFilterConditions["NOT_NULL"] = "NOT_NULL";
|
|
37
39
|
})(DatoFilterConditions || (DatoFilterConditions = {}));
|
|
38
40
|
export const DatoGridDateFilterOptions = [
|
|
39
41
|
DatoFilterConditions.IN_RANGE,
|
|
@@ -66,4 +68,4 @@ export const DatoGridFilterOptionsMap = {
|
|
|
66
68
|
export function isRangeCondition(item) {
|
|
67
69
|
return item.condition === DatoFilterConditions.IN_RANGE;
|
|
68
70
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1maWx0ZXIudHlwZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZGF0b3JhbWEvY29yZS8iLCJzb3VyY2VzIjpbImxpYi9ncmlkLXYyL2dyaWQtZmlsdGVyL2dyaWQtZmlsdGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQU9ILE1BQU0sQ0FBTixJQUFZLG1CQUtYO0FBTEQsV0FBWSxtQkFBbUI7SUFDN0Isd0NBQWlCLENBQUE7SUFDakIsd0NBQWlCLENBQUE7SUFDakIsb0NBQWEsQ0FBQTtJQUNiLG9DQUFhLENBQUE7QUFDZixDQUFDLEVBTFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUs5QjtBQUVELE1BQU0sQ0FBTixJQUFZLHNCQUdYO0FBSEQsV0FBWSxzQkFBc0I7SUFDaEMsK0NBQXFCLENBQUE7SUFDckIscURBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQUhXLHNCQUFzQixLQUF0QixzQkFBc0IsUUFHakM7QUFFRCxNQUFNLENBQU4sSUFBWSxvQkFrQlg7QUFsQkQsV0FBWSxvQkFBb0I7SUFDOUIseUNBQWlCLENBQUE7SUFDakIsaURBQXlCLENBQUE7SUFDekIscURBQTZCLENBQUE7SUFDN0IseURBQWlDLENBQUE7SUFDakMsK0NBQXVCLENBQUE7SUFDdkIsbURBQTJCLENBQUE7SUFDM0IsNkNBQXFCLENBQUE7SUFDckIsNkNBQXFCLENBQUE7SUFDckIscURBQTZCLENBQUE7SUFDN0IsbURBQTJCLENBQUE7SUFDM0IsK0NBQXVCLENBQUE7SUFDdkIsMkNBQW1CLENBQUE7SUFDbkIsbURBQTJCLENBQUE7SUFDM0IsNkNBQXFCLENBQUE7SUFDckIsK0NBQXVCLENBQUE7SUFDdkIsMkNBQW1CLENBQUE7SUFDbkIsNkNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQWxCVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBa0IvQjtBQU9ELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHO0lBQ3ZDLG9CQUFvQixDQUFDLFFBQVE7SUFDN0Isb0JBQW9CLENBQUMsTUFBTTtJQUMzQixvQkFBb0IsQ0FBQyxTQUFTO0lBQzlCLG9CQUFvQixDQUFDLFlBQVk7Q0FDbEMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHO0lBQ3pDLG9CQUFvQixDQUFDLFFBQVE7SUFDN0Isb0JBQW9CLENBQUMsWUFBWTtJQUNqQyxvQkFBb0IsQ0FBQyxNQUFNO0lBQzNCLG9CQUFvQixDQUFDLFVBQVU7SUFDL0Isb0JBQW9CLENBQUMsV0FBVztJQUNoQyxvQkFBb0IsQ0FBQyxTQUFTO0NBQy9CLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRztJQUN6QyxvQkFBb0IsQ0FBQyxNQUFNO0lBQzNCLG9CQUFvQixDQUFDLFVBQVU7SUFDL0Isb0JBQW9CLENBQUMsU0FBUztJQUM5QixvQkFBb0IsQ0FBQyxXQUFXO0lBQ2hDLG9CQUFvQixDQUFDLFlBQVk7SUFDakMsb0JBQW9CLENBQUMsY0FBYztJQUNuQyxvQkFBb0IsQ0FBQyxRQUFRO0NBQzlCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0QyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLDJCQUEyQjtJQUN6RCxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLDJCQUEyQjtJQUN6RCxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLHlCQUF5QjtDQUN0RCxDQUFDO0FBRUYsTUFBTSxVQUFVLGdCQUFnQixDQUFJLElBQUk7SUFDdEMsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgSGFzaE1hcCB9IGZyb20gJ0BkYXRvcmFtYS9ha2l0YSc7XG5pbXBvcnQgeyBPcGVyYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vb3BlcmF0b3ItdG9nZ2xlci9vcGVyYXRvci10b2dnbGVyLnR5cGVzJztcblxudHlwZSBTdHJpbmdPck51bWJlciA9IHN0cmluZyB8IG51bWJlcjtcblxuZXhwb3J0IGVudW0gRGF0b0dyaWRGaWx0ZXJUeXBlcyB7XG4gIFN0cmluZyA9ICdTdHJpbmcnLFxuICBOdW1iZXIgPSAnTnVtYmVyJyxcbiAgRGF0ZSA9ICdEYXRlJyxcbiAgTm9uZSA9ICdOb25lJ1xufVxuXG5leHBvcnQgZW51bSBEYXRvR3JpZEZpbHRlclNlY3Rpb25zIHtcbiAgQnlfVmFsdWUgPSAnQnlfVmFsdWUnLFxuICBDb25kaXRpb25hbCA9ICdDb25kaXRpb25hbCdcbn1cblxuZXhwb3J0IGVudW0gRGF0b0ZpbHRlckNvbmRpdGlvbnMge1xuICBFUVVBTFMgPSAnRVFVQUxTJyxcbiAgTk9UX0VRVUFMUyA9ICdOT1RfRVFVQUxTJyxcbiAgR1JFQVRFUl9USEFOID0gJ0dSRUFURVJfVEhBTicsXG4gIEdSRUFURVJfRVFVQUxTID0gJ0dSRUFURVJfRVFVQUxTJyxcbiAgTEVTU19USEFOID0gJ0xFU1NfVEhBTicsXG4gIExFU1NfRVFVQUxTID0gJ0xFU1NfRVFVQUxTJyxcbiAgSU5fUkFOR0UgPSAnSU5fUkFOR0UnLFxuICBDT05UQUlOUyA9ICdDT05UQUlOUycsXG4gIE5PVF9DT05UQUlOUyA9ICdOT1RfQ09OVEFJTlMnLFxuICBTVEFSVFNfV0lUSCA9ICdTVEFSVFNfV0lUSCcsXG4gIEVORFNfV0lUSCA9ICdFTkRTX1dJVEgnLFxuICBJTl9MSVNUID0gJ0lOX0xJU1QnLFxuICBOT1RfSU5fTElTVCA9ICdOT1RfSU5fTElTVCcsXG4gIElTX0VNUFRZID0gJ0lTX0VNUFRZJyxcbiAgTk9UX0VNUFRZID0gJ05PVF9FTVBUWScsXG4gIElTX05VTEwgPSAnSVNfTlVMTCcsXG4gIE5PVF9OVUxMID0gJ05PVF9OVUxMJ1xufVxuXG5leHBvcnQgdHlwZSBTaW5nbGVWYWx1ZUNvbmRpdGlvbnMgPSBFeGNsdWRlPFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UgfCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIHwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Rcbj47XG5cbmV4cG9ydCBjb25zdCBEYXRvR3JpZERhdGVGaWx0ZXJPcHRpb25zID0gW1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuRVFVQUxTLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5MRVNTX1RIQU4sXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkdSRUFURVJfVEhBTlxuXTtcbmV4cG9ydCBjb25zdCBEYXRvR3JpZFN0cmluZ0ZpbHRlck9wdGlvbnMgPSBbXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkNPTlRBSU5TLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfQ09OVEFJTlMsXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkVRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuU1RBUlRTX1dJVEgsXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkVORFNfV0lUSFxuXTtcbmV4cG9ydCBjb25zdCBEYXRvR3JpZE51bWJlckZpbHRlck9wdGlvbnMgPSBbXG4gIERhdG9GaWx0ZXJDb25kaXRpb25zLkVRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTEVTU19USEFOLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5MRVNTX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuR1JFQVRFUl9USEFOLFxuICBEYXRvRmlsdGVyQ29uZGl0aW9ucy5HUkVBVEVSX0VRVUFMUyxcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0Vcbl07XG5cbmV4cG9ydCBjb25zdCBEYXRvR3JpZEZpbHRlck9wdGlvbnNNYXAgPSB7XG4gIFtEYXRvR3JpZEZpbHRlclR5cGVzLlN0cmluZ106IERhdG9HcmlkU3RyaW5nRmlsdGVyT3B0aW9ucyxcbiAgW0RhdG9HcmlkRmlsdGVyVHlwZXMuTnVtYmVyXTogRGF0b0dyaWROdW1iZXJGaWx0ZXJPcHRpb25zLFxuICBbRGF0b0dyaWRGaWx0ZXJUeXBlcy5EYXRlXTogRGF0b0dyaWREYXRlRmlsdGVyT3B0aW9uc1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmFuZ2VDb25kaXRpb248VD4oaXRlbSk6IGl0ZW0gaXMgVCB7XG4gIHJldHVybiBpdGVtLmNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0U7XG59XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24gPSB7XG4gIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0U7XG4gIHZhbHVlOiBTdHJpbmdPck51bWJlciB8IGFueTtcbiAgcmFuZ2VFbmQ6IFN0cmluZ09yTnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gPSB7XG4gIGNvbmRpdGlvbjogU2luZ2xlVmFsdWVDb25kaXRpb25zO1xuICB2YWx1ZTogU3RyaW5nT3JOdW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBEYXRvR3JpZEZpbHRlciA9IHtcbiAgY29sSWQ/OiBzdHJpbmc7XG4gIGJ5VmFsdWU/OiB7XG4gICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9MSVNUIHwgRGF0b0ZpbHRlckNvbmRpdGlvbnMuTk9UX0lOX0xJU1Q7XG4gICAgdmFsdWVzOiBTdHJpbmdPck51bWJlcltdO1xuICB9O1xuICBjb25kaXRpb25hbD86IERhdG9HcmlkQ29uZGl0aW9uYWxGaWx0ZXI7XG4gIHBpdm90S2V5cz86IHN0cmluZ1tdO1xuICBwaXZvdEZpZWxkc01hcD86IEhhc2hNYXA8c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkQ29uZGl0aW9uYWxGaWx0ZXIgPSB7XG4gIHR5cGU6IERhdG9HcmlkRmlsdGVyVHlwZXM7XG4gIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzO1xuICBjb25kaXRpb25zOiAoRGF0b0dyaWRGaWx0ZXJDb25kaXRpb24gfCBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKVtdO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0b0dyaWRFeHRlcm5hbEZpbHRlciA9IHtcbiAgZmllbGQ6IHN0cmluZztcbiAgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcjtcbiAgcGl2b3RGaWVsZHNNYXA/OiBIYXNoTWFwPHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBEYXRvR3JpZEZpbHRlcnNNYXAgPSBIYXNoTWFwPERhdG9HcmlkRmlsdGVyPjtcblxuZXhwb3J0IHR5cGUgU2VydmVyU2lkZVBhZ2luYXRpb25SYW5nZUNvbmRpdGlvbiA9IHtcbiAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRTtcbiAgc3RhcnQ6IFN0cmluZ09yTnVtYmVyO1xuICBlbmQ6IFN0cmluZ09yTnVtYmVyO1xuICBjb2x1bW4/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU2VydmVyU2lkZVBhZ2luYXRpb25MaXN0Q29uZGl0aW9uID0ge1xuICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX0xJU1QgfCBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVDtcbiAgdmFsdWVzOiBTdHJpbmdPck51bWJlcltdO1xuICBjb2x1bW4/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbiA9IHtcbiAgY29uZGl0aW9uOiBTaW5nbGVWYWx1ZUNvbmRpdGlvbnM7XG4gIHZhbHVlOiBTdHJpbmdPck51bWJlcjtcbiAgY29sdW1uPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzQXJyYXkgPSAoXG4gIHwgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJcbiAgfCBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvblxuICB8IFNlcnZlclNpZGVQYWdpbmF0aW9uUmFuZ2VDb25kaXRpb25cbiAgfCBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24pW107XG5cbmV4cG9ydCB0eXBlIFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID0ge1xuICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcztcbiAgZmlsdGVyczogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzQXJyYXk7XG59O1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMgPSBIYXNoTWFwPFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyPjtcbmV4cG9ydCB0eXBlIExpc3RJdGVtID0geyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH07XG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
|
-
export const DATO_GRID_STORAGE_API = new InjectionToken('
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const DATO_GRID_STORAGE_API = new InjectionToken('DATO_GRID_STORAGE_API');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFpQix1QkFBdUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdG9HcmlkU2V0dGluZ3MgfSBmcm9tICcuL2dyaWQtc3RvcmUvZ3JpZC5zdG9yZS50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFN0b3JhZ2VBUEkge1xuICBnZXQoZ3JpZE5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8UGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPj47XG4gIHNldChncmlkTmFtZTogc3RyaW5nLCBzdGF0ZTogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPik6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBEQVRPX0dSSURfU1RPUkFHRV9BUEkgPSBuZXcgSW5qZWN0aW9uVG9rZW48R3JpZFN0b3JhZ2VBUEk+KCdEQVRPX0dSSURfU1RPUkFHRV9BUEknKTtcbiJdfQ==
|