@onecx/angular-accelerator 5.23.4 → 5.23.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/data-sort-base/data-sort-base.mjs +18 -8
- package/esm2022/lib/components/filter-view/filter-view.component.mjs +18 -7
- package/esm2022/lib/components/interactive-data-view/interactive-data-view.component.mjs +8 -2
- package/esm2022/lib/directives/if-permission.directive.mjs +15 -15
- package/fesm2022/onecx-angular-accelerator.mjs +55 -28
- package/fesm2022/onecx-angular-accelerator.mjs.map +1 -1
- package/lib/components/filter-view/filter-view.component.d.ts +3 -2
- package/package.json +1 -1
|
@@ -65,15 +65,25 @@ export class DataSortBase {
|
|
|
65
65
|
if (!clientSideSorting || sortColumn === '') {
|
|
66
66
|
return [items, filters, sortColumn, sortDirection, translations];
|
|
67
67
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
const column = columns.find((h) => h.id === sortColumn);
|
|
69
|
+
let colValues;
|
|
70
|
+
if (column?.columnType === ColumnType.DATE || column?.columnType === ColumnType.RELATIVE_DATE) {
|
|
71
|
+
colValues = Object.fromEntries(items.map((i) => [
|
|
72
|
+
ObjectUtils.resolveFieldData(i, sortColumn),
|
|
73
|
+
ObjectUtils.resolveFieldData(i, sortColumn),
|
|
74
|
+
]));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
colValues = Object.fromEntries(items.map((i) => [
|
|
78
|
+
ObjectUtils.resolveFieldData(i, sortColumn)?.toString(),
|
|
79
|
+
ObjectUtils.resolveFieldData(i, sortColumn)?.toString(),
|
|
80
|
+
]));
|
|
81
|
+
}
|
|
82
|
+
if (column?.columnType === ColumnType.TRANSLATION_KEY) {
|
|
83
|
+
colValues = translations[sortColumn];
|
|
74
84
|
}
|
|
75
85
|
return [
|
|
76
|
-
[...items].sort(this.createCompareFunction(
|
|
86
|
+
[...items].sort(this.createCompareFunction(colValues, sortColumn, sortDirection)),
|
|
77
87
|
filters,
|
|
78
88
|
sortColumn,
|
|
79
89
|
sortDirection,
|
|
@@ -121,4 +131,4 @@ export class DataSortBase {
|
|
|
121
131
|
};
|
|
122
132
|
}
|
|
123
133
|
}
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3J0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtc29ydC1iYXNlL2RhdGEtc29ydC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFLMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3JELE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUk3RCxNQUFNLE9BQU8sWUFBWTtJQUN2QixZQUNZLE1BQWMsRUFDZCxnQkFBa0M7UUFEbEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFDM0MsQ0FBQztJQUVKLGNBQWMsQ0FDWixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBMkQsRUFDckcsT0FBMEIsRUFDMUIsbUJBQTRCLEVBQzVCLGlCQUEwQjtRQUUxQixJQUFJLG1CQUFtQixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDN0MsSUFBSSxlQUFlLEdBQWEsRUFBRSxDQUFBO1lBQ2xDLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDNUYsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlCLGVBQWUsR0FBRztvQkFDaEIsR0FBRyxlQUFlO29CQUNs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Q0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtZQUVuRixJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUk7Z0JBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO2lCQUM1QyxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUk7Z0JBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQTtpQkFDaEQsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJO2dCQUFFLE1BQU0sR0FBRyxDQUFDLENBQUE7aUJBQ2hELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7Z0JBQy9ELE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7aUJBQ2hGLENBQUM7Z0JBQ0osSUFBSSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtnQkFDYixDQUFDO3FCQUFNLElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO29CQUMzQixNQUFNLEdBQUcsQ0FBQyxDQUFBO2dCQUNaLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLEdBQUcsQ0FBQyxDQUFBO2dCQUNaLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxTQUFTLEdBQUcsTUFBTSxDQUFBO1FBQzNCLENBQUMsQ0FBQTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCBvZiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBmbGF0dGVuT2JqZWN0IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL2ZsYXR0ZW4tb2JqZWN0J1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2NvbHVtbi10eXBlLm1vZGVsJ1xuaW1wb3J0IHsgRGF0YVNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXNvcnQtZGlyZWN0aW9uJ1xuaW1wb3J0IHsgRGF0YVRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS10YWJsZS1jb2x1bW4ubW9kZWwnXG5pbXBvcnQgeyBMaXN0R3JpZERhdGEgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2RhdGEtbGlzdC1ncmlkL2RhdGEtbGlzdC1ncmlkLmNvbXBvbmVudCdcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudCdcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvb2JqZWN0dXRpbHMnXG5pbXBvcnQgeyBGaWx0ZXIsIEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbC9maWx0ZXIubW9kZWwnXG5cbnR5cGUgUm93TGlzdEdyaWREYXRhID0gTGlzdEdyaWREYXRhIHwgUm93XG5cbmV4cG9ydCBjbGFzcyBEYXRhU29ydEJhc2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgbG9jYWxlOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIHRyYW5zbGF0ZUl0ZW1zKFxuICAgIFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbl06IFtSb3dMaXN0R3JpZERhdGFbXSwgRmlsdGVyW10sIHN0cmluZywgRGF0YVNvcnREaXJlY3Rpb25dLFxuICAgIGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdLFxuICAgIGNsaWVudFNpZGVGaWx0ZXJpbmc6IGJvb2xlYW4sXG4gICAgY2xpZW50U2lkZVNvcnRpbmc6IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxbUm93TGlzdEdyaWREYXRhW10sIEZpbHRlcltdLCBzdHJpbmcsIERhdGFTb3J0RGlyZWN0aW9uLCBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pl0+IHtcbiAgICBpZiAoY2xpZW50U2lkZUZpbHRlcmluZyB8fCBjbGllbnRTaWRlU29ydGluZykge1xuICAgICAgbGV0IHRyYW5zbGF0aW9uS2V5czogc3RyaW5nW10gPSBbXVxuICAgICAgY29uc3QgdHJhbnNsYXRlZENvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoYykgPT4gYy5jb2x1bW5UeXBlID09PSBDb2x1bW5UeXBlLlRSQU5TTEFUSU9OX0tFWSlcbiAgICAgIHRyYW5zbGF0ZWRDb2x1bW5zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgdHJhbnNsYXRpb25LZXlzID0gW1xuICAgICAgICAgIC4uLnRyYW5zbGF0aW9uS2V5cyxcbiAgICAgICAgICAuLi5pdGVtcy5tYXAoKGkpID0+IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoaSwgYy5pZCk/LnRvU3RyaW5nKCkpLmZpbHRlcigodikgPT4gISF2KSxcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICAgIGlmICh0cmFuc2xhdGlvbktleXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRyYW5zbGF0aW9uS2V5cykucGlwZShcbiAgICAgICAgICBtYXAoKHRyYW5zbGF0ZWRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fVxuICAgICAgICAgICAgdHJhbnNsYXRlZENvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICB0cmFuc2xhdGlvbnNbYy5pZF0gPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgICAgaXRlbXMubWFwKChpKSA9PiBbXG4gICAgICAgICAgICAgICAgICBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGksIGMuaWQpPy50b1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFZhbHVlc1tPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGksIGMuaWQpPy50b1N0cmluZygpXSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbiwgdHJhbnNsYXRpb25zXVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9mKFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbiwge31dKVxuICB9XG5cbiAgZmlsdGVySXRlbXMoXG4gICAgW2l0ZW1zLCBmaWx0ZXJzLCBzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uLCB0cmFuc2xhdGlvbnNdOiBbXG4gICAgICBSb3dMaXN0R3JpZERhdGFbXSxcbiAgICAgIEZpbHRlcltdLFxuICAgICAgc3RyaW5nLFxuICAgICAgRGF0YVNvcnREaXJlY3Rpb24sXG4gICAgICBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PixcbiAgICBdLFxuICAgIGNsaWVudFNpZGVGaWx0ZXJpbmc6IGJvb2xlYW5cbiAgKTogW1Jvd0xpc3RHcmlkRGF0YVtdLCBGaWx0ZXJbXSwgc3RyaW5nLCBEYXRhU29ydERpcmVjdGlvbiwgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj5dIHtcbiAgICBpZiAoIWNsaWVudFNpZGVGaWx0ZXJpbmcpIHtcbiAgICAgIHJldHVybiBbaXRlbXMsIGZpbHRlcnMsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24sIHRyYW5zbGF0aW9uc11cbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgZmlsdGVyc1xuICAgICAgICAgIC5tYXAoKGZpbHRlcikgPT4gZmlsdGVyLmNvbHVtbklkKVxuICAgICAgICAgIC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXggJiYgdmFsdWUgIT0gbnVsbClcbiAgICAgICAgICAuZXZlcnkoKGZpbHRlckNvbHVtbklkKSA9PlxuICAgICAgICAgICAgZmlsdGVyc1xuICAgICAgICAgICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IGZpbHRlci5jb2x1bW5JZCA9PT0gZmlsdGVyQ29sdW1uSWQpXG4gICAgICAgICAgICAgIC5zb21lKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IChcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uc1tmaWx0ZXIuY29sdW1uSWRdPy5bT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpdGVtLCBmaWx0ZXIuY29sdW1uSWQpPy50b1N0cmluZygpXSB8fFxuICAgICAgICAgICAgICAgICAgT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpdGVtLCBmaWx0ZXIuY29sdW1uSWQpXG4gICAgICAgICAgICAgICAgKT8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmlsdGVyLmZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLkVRVUFMOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IFN0cmluZyhmaWx0ZXIudmFsdWUpXG4gICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGUuVFJVVEhZOiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgPyAhIXZhbHVlIDogIXZhbHVlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWx0ZXJzLFxuICAgICAgc29ydENvbHVtbixcbiAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICB0cmFuc2xhdGlvbnMsXG4gICAgXVxuICB9XG5cbiAgc29ydEl0ZW1zKFxuICAgIFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbiwgdHJhbnNsYXRpb25zXTogW1xuICAgICAgUm93TGlzdEdyaWREYXRhW10sXG4gICAgICBGaWx0ZXJbXSxcbiAgICAgIHN0cmluZyxcbiAgICAgIERhdGFTb3J0RGlyZWN0aW9uLFxuICAgICAgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4sXG4gICAgXSxcbiAgICBjb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSxcbiAgICBjbGllbnRTaWRlU29ydGluZzogYm9vbGVhblxuICApOiBbUm93TGlzdEdyaWREYXRhW10sIEZpbHRlcltdLCBzdHJpbmcsIERhdGFTb3J0RGlyZWN0aW9uLCBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pl0ge1xuICAgIGlmICghY2xpZW50U2lkZVNvcnRpbmcgfHwgc29ydENvbHVtbiA9PT0gJycpIHtcbiAgICAgIHJldHVybiBbaXRlbXMsIGZpbHRlcnMsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24sIHRyYW5zbGF0aW9uc11cbiAgICB9XG4gICAgbGV0IHRyYW5zbGF0ZWRDb2xWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBpdGVtcy5tYXAoKGkpID0+IFtcbiAgICAgICAgT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpLCBzb3J0Q29sdW1uKT8udG9TdHJpbmcoKSxcbiAgICAgICAgT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpLCBzb3J0Q29sdW1uKT8udG9TdHJpbmcoKSxcbiAgICAgIF0pXG4gICAgKVxuICAgIGlmIChjb2x1bW5zLmZpbmQoKGgpID0+IGguaWQgPT09IHNvcnRDb2x1bW4pPy5jb2x1bW5UeXBlID09PSBDb2x1bW5UeXBlLlRSQU5TTEFUSU9OX0tFWSkge1xuICAgICAgdHJhbnNsYXRlZENvbFZhbHVlcyA9IHRyYW5zbGF0aW9uc1tzb3J0Q29sdW1uXVxuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgWy4uLml0ZW1zXS5zb3J0KHRoaXMuY3JlYXRlQ29tcGFyZUZ1bmN0aW9uKHRyYW5zbGF0ZWRDb2xWYWx1ZXMsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24pKSxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBzb3J0Q29sdW1uLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICBdXG4gIH1cblxuICBmbGF0dGVuSXRlbXMoaXRlbXM6IFJvd0xpc3RHcmlkRGF0YVtdKSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaSkgPT4gZmxhdHRlbk9iamVjdChpKSlcbiAgfVxuXG4gIGNyZWF0ZUNvbXBhcmVGdW5jdGlvbihcbiAgICB0cmFuc2xhdGVkQ29sVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHNvcnRDb2x1bW46IHN0cmluZyxcbiAgICBzb3J0RGlyZWN0aW9uOiBEYXRhU29ydERpcmVjdGlvblxuICApOiAoYTogUmVjb3JkPHN0cmluZywgYW55PiwgYjogUmVjb3JkPHN0cmluZywgYW55PikgPT4gbnVtYmVyIHtcbiAgICBsZXQgZGlyZWN0aW9uID0gMFxuICAgIGlmIChzb3J0RGlyZWN0aW9uID09PSBEYXRhU29ydERpcmVjdGlvbi5BU0NFTkRJTkcpIHtcbiAgICAgIGRpcmVjdGlvbiA9IDFcbiAgICB9IGVsc2UgaWYgKHNvcnREaXJlY3Rpb24gPT09IERhdGFTb3J0RGlyZWN0aW9uLkRFU0NFTkRJTkcpIHtcbiAgICAgIGRpcmVjdGlvbiA9IC0xXG4gICAgfVxuICAgIHJldHVybiAoZGF0YTEsIGRhdGEyKSA9PiB7XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG4gICAgICBsZXQgcmVzdWx0XG4gICAgICBjb25zdCB2YWx1ZTEgPSB0cmFuc2xhdGVkQ29sVmFsdWVzW09iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoZGF0YTEsIHNvcnRDb2x1bW4pXVxuICAgICAgY29uc3QgdmFsdWUyID0gdHJhbnNsYXRlZENvbFZhbHVlc1tPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGRhdGEyLCBzb3J0Q29sdW1uKV1cblxuICAgICAgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiAhPSBudWxsKSByZXN1bHQgPSAtMVxuICAgICAgZWxzZSBpZiAodmFsdWUxICE9IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHJlc3VsdCA9IDFcbiAgICAgIGVsc2UgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAwXG4gICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUxID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUyID09PSAnc3RyaW5nJylcbiAgICAgICAgcmVzdWx0ID0gdmFsdWUxLmxvY2FsZUNvbXBhcmUodmFsdWUyLCBbdGhpcy5sb2NhbGUsICdlbicsICdkZSddLCB7IG51bWVyaWM6IHRydWUgfSlcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUxIDwgdmFsdWUyKSB7XG4gICAgICAgICAgcmVzdWx0ID0gLTFcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTEgPiB2YWx1ZTIpIHtcbiAgICAgICAgICByZXN1bHQgPSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gMFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGlyZWN0aW9uICogcmVzdWx0XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3J0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtc29ydC1iYXNlL2RhdGEtc29ydC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFLMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3JELE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUk3RCxNQUFNLE9BQU8sWUFBWTtJQUN2QixZQUNZLE1BQWMsRUFDZCxnQkFBa0M7UUFEbEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFDM0MsQ0FBQztJQUVKLGNBQWMsQ0FDWixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBMkQsRUFDckcsT0FBMEIsRUFDMUIsbUJBQTRCLEVBQzVCLGlCQUEwQjtRQUUxQixJQUFJLG1CQUFtQixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDN0MsSUFBSSxlQUFlLEdBQWEsRUFBRSxDQUFBO1lBQ2xDLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDNUYsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlCLGVBQWUsR0FBRztvQkFDaEIsR0FBRyxlQUFlO29CQUNs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LENBQUM7cUJBQU0sSUFBSSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7b0JBQzNCLE1BQU0sR0FBRyxDQUFDLENBQUE7Z0JBQ1osQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sR0FBRyxDQUFDLENBQUE7Z0JBQ1osQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLFNBQVMsR0FBRyxNQUFNLENBQUE7UUFDM0IsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIG9mIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGZsYXR0ZW5PYmplY3QgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMvZmxhdHRlbi1vYmplY3QnXG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWwvY29sdW1uLXR5cGUubW9kZWwnXG5pbXBvcnQgeyBEYXRhU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtc29ydC1kaXJlY3Rpb24nXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXRhYmxlLWNvbHVtbi5tb2RlbCdcbmltcG9ydCB7IExpc3RHcmlkRGF0YSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZGF0YS1saXN0LWdyaWQvZGF0YS1saXN0LWdyaWQuY29tcG9uZW50J1xuaW1wb3J0IHsgUm93IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50J1xuaW1wb3J0IHsgT2JqZWN0VXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy9vYmplY3R1dGlscydcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2ZpbHRlci5tb2RlbCdcblxudHlwZSBSb3dMaXN0R3JpZERhdGEgPSBMaXN0R3JpZERhdGEgfCBSb3dcblxuZXhwb3J0IGNsYXNzIERhdGFTb3J0QmFzZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBsb2NhbGU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICApIHt9XG5cbiAgdHJhbnNsYXRlSXRlbXMoXG4gICAgW2l0ZW1zLCBmaWx0ZXJzLCBzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uXTogW1Jvd0xpc3RHcmlkRGF0YVtdLCBGaWx0ZXJbXSwgc3RyaW5nLCBEYXRhU29ydERpcmVjdGlvbl0sXG4gICAgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10sXG4gICAgY2xpZW50U2lkZUZpbHRlcmluZzogYm9vbGVhbixcbiAgICBjbGllbnRTaWRlU29ydGluZzogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPFtSb3dMaXN0R3JpZERhdGFbXSwgRmlsdGVyW10sIHN0cmluZywgRGF0YVNvcnREaXJlY3Rpb24sIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+XT4ge1xuICAgIGlmIChjbGllbnRTaWRlRmlsdGVyaW5nIHx8IGNsaWVudFNpZGVTb3J0aW5nKSB7XG4gICAgICBsZXQgdHJhbnNsYXRpb25LZXlzOiBzdHJpbmdbXSA9IFtdXG4gICAgICBjb25zdCB0cmFuc2xhdGVkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLmNvbHVtblR5cGUgPT09IENvbHVtblR5cGUuVFJBTlNMQVRJT05fS0VZKVxuICAgICAgdHJhbnNsYXRlZENvbHVtbnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICB0cmFuc2xhdGlvbktleXMgPSBbXG4gICAgICAgICAgLi4udHJhbnNsYXRpb25LZXlzLFxuICAgICAgICAgIC4uLml0ZW1zLm1hcCgoaSkgPT4gT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpLCBjLmlkKT8udG9TdHJpbmcoKSkuZmlsdGVyKCh2KSA9PiAhIXYpLFxuICAgICAgICBdXG4gICAgICB9KVxuICAgICAgaWYgKHRyYW5zbGF0aW9uS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodHJhbnNsYXRpb25LZXlzKS5waXBlKFxuICAgICAgICAgIG1hcCgodHJhbnNsYXRlZFZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9XG4gICAgICAgICAgICB0cmFuc2xhdGVkQ29sdW1ucy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgIHRyYW5zbGF0aW9uc1tjLmlkXSA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGkpID0+IFtcbiAgICAgICAgICAgICAgICAgIE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoaSwgYy5pZCk/LnRvU3RyaW5nKCkgfHwgJycsXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkVmFsdWVzW09iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoaSwgYy5pZCk/LnRvU3RyaW5nKCldLFxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gW2l0ZW1zLCBmaWx0ZXJzLCBzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uLCB0cmFuc2xhdGlvbnNdXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2YoW2l0ZW1zLCBmaWx0ZXJzLCBzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uLCB7fV0pXG4gIH1cblxuICBmaWx0ZXJJdGVtcyhcbiAgICBbaXRlbXMsIGZpbHRlcnMsIHNvcnRDb2x1bW4sIHNvcnREaXJlY3Rpb24sIHRyYW5zbGF0aW9uc106IFtcbiAgICAgIFJvd0xpc3RHcmlkRGF0YVtdLFxuICAgICAgRmlsdGVyW10sXG4gICAgICBzdHJpbmcsXG4gICAgICBEYXRhU29ydERpcmVjdGlvbixcbiAgICAgIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+LFxuICAgIF0sXG4gICAgY2xpZW50U2lkZUZpbHRlcmluZzogYm9vbGVhblxuICApOiBbUm93TGlzdEdyaWREYXRhW10sIEZpbHRlcltdLCBzdHJpbmcsIERhdGFTb3J0RGlyZWN0aW9uLCBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pl0ge1xuICAgIGlmICghY2xpZW50U2lkZUZpbHRlcmluZykge1xuICAgICAgcmV0dXJuIFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbiwgdHJhbnNsYXRpb25zXVxuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgaXRlbXMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBmaWx0ZXJzXG4gICAgICAgICAgLm1hcCgoZmlsdGVyKSA9PiBmaWx0ZXIuY29sdW1uSWQpXG4gICAgICAgICAgLmZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleCAmJiB2YWx1ZSAhPSBudWxsKVxuICAgICAgICAgIC5ldmVyeSgoZmlsdGVyQ29sdW1uSWQpID0+XG4gICAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGZpbHRlcikgPT4gZmlsdGVyLmNvbHVtbklkID09PSBmaWx0ZXJDb2x1bW5JZClcbiAgICAgICAgICAgICAgLnNvbWUoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKFxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zW2ZpbHRlci5jb2x1bW5JZF0/LltPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGl0ZW0sIGZpbHRlci5jb2x1bW5JZCk/LnRvU3RyaW5nKCldIHx8XG4gICAgICAgICAgICAgICAgICBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGl0ZW0sIGZpbHRlci5jb2x1bW5JZClcbiAgICAgICAgICAgICAgICApPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXIuZmlsdGVyVHlwZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGUuRVFVQUw6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gU3RyaW5nKGZpbHRlci52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZS5UUlVUSFk6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZSA/ICEhdmFsdWUgOiAhdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBzb3J0Q29sdW1uLFxuICAgICAgc29ydERpcmVjdGlvbixcbiAgICAgIHRyYW5zbGF0aW9ucyxcbiAgICBdXG4gIH1cblxuICBzb3J0SXRlbXMoXG4gICAgW2l0ZW1zLCBmaWx0ZXJzLCBzb3J0Q29sdW1uLCBzb3J0RGlyZWN0aW9uLCB0cmFuc2xhdGlvbnNdOiBbXG4gICAgICBSb3dMaXN0R3JpZERhdGFbXSxcbiAgICAgIEZpbHRlcltdLFxuICAgICAgc3RyaW5nLFxuICAgICAgRGF0YVNvcnREaXJlY3Rpb24sXG4gICAgICBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PixcbiAgICBdLFxuICAgIGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdLFxuICAgIGNsaWVudFNpZGVTb3J0aW5nOiBib29sZWFuXG4gICk6IFtSb3dMaXN0R3JpZERhdGFbXSwgRmlsdGVyW10sIHN0cmluZywgRGF0YVNvcnREaXJlY3Rpb24sIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+XSB7XG4gICAgaWYgKCFjbGllbnRTaWRlU29ydGluZyB8fCBzb3J0Q29sdW1uID09PSAnJykge1xuICAgICAgcmV0dXJuIFtpdGVtcywgZmlsdGVycywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbiwgdHJhbnNsYXRpb25zXVxuICAgIH1cbiAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoKGgpID0+IGguaWQgPT09IHNvcnRDb2x1bW4pXG4gICAgbGV0IGNvbFZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIGlmIChjb2x1bW4/LmNvbHVtblR5cGUgPT09IENvbHVtblR5cGUuREFURSB8fCBjb2x1bW4/LmNvbHVtblR5cGUgPT09IENvbHVtblR5cGUuUkVMQVRJVkVfREFURSkge1xuICAgICAgY29sVmFsdWVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBpdGVtcy5tYXAoKGkpID0+IFtcbiAgICAgICAgICBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGksIHNvcnRDb2x1bW4pIGFzIERhdGUsXG4gICAgICAgICAgT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpLCBzb3J0Q29sdW1uKSBhcyBEYXRlLFxuICAgICAgICBdKVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2xWYWx1ZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIGl0ZW1zLm1hcCgoaSkgPT4gW1xuICAgICAgICAgIE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoaSwgc29ydENvbHVtbik/LnRvU3RyaW5nKCksXG4gICAgICAgICAgT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShpLCBzb3J0Q29sdW1uKT8udG9TdHJpbmcoKSxcbiAgICAgICAgXSlcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKGNvbHVtbj8uY29sdW1uVHlwZSA9PT0gQ29sdW1uVHlwZS5UUkFOU0xBVElPTl9LRVkpIHtcbiAgICAgIGNvbFZhbHVlcyA9IHRyYW5zbGF0aW9uc1tzb3J0Q29sdW1uXVxuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgWy4uLml0ZW1zXS5zb3J0KHRoaXMuY3JlYXRlQ29tcGFyZUZ1bmN0aW9uKGNvbFZhbHVlcywgc29ydENvbHVtbiwgc29ydERpcmVjdGlvbikpLFxuICAgICAgZmlsdGVycyxcbiAgICAgIHNvcnRDb2x1bW4sXG4gICAgICBzb3J0RGlyZWN0aW9uLFxuICAgICAgdHJhbnNsYXRpb25zLFxuICAgIF1cbiAgfVxuXG4gIGZsYXR0ZW5JdGVtcyhpdGVtczogUm93TGlzdEdyaWREYXRhW10pIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpKSA9PiBmbGF0dGVuT2JqZWN0KGkpKVxuICB9XG5cbiAgY3JlYXRlQ29tcGFyZUZ1bmN0aW9uKFxuICAgIHRyYW5zbGF0ZWRDb2xWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgc29ydENvbHVtbjogc3RyaW5nLFxuICAgIHNvcnREaXJlY3Rpb246IERhdGFTb3J0RGlyZWN0aW9uXG4gICk6IChhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBiOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBudW1iZXIge1xuICAgIGxldCBkaXJlY3Rpb24gPSAwXG4gICAgaWYgKHNvcnREaXJlY3Rpb24gPT09IERhdGFTb3J0RGlyZWN0aW9uLkFTQ0VORElORykge1xuICAgICAgZGlyZWN0aW9uID0gMVxuICAgIH0gZWxzZSBpZiAoc29ydERpcmVjdGlvbiA9PT0gRGF0YVNvcnREaXJlY3Rpb24uREVTQ0VORElORykge1xuICAgICAgZGlyZWN0aW9uID0gLTFcbiAgICB9XG4gICAgcmV0dXJuIChkYXRhMSwgZGF0YTIpID0+IHtcbiAgICAgIGlmIChkaXJlY3Rpb24gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH1cbiAgICAgIGxldCByZXN1bHRcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHRyYW5zbGF0ZWRDb2xWYWx1ZXNbT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShkYXRhMSwgc29ydENvbHVtbildXG4gICAgICBjb25zdCB2YWx1ZTIgPSB0cmFuc2xhdGVkQ29sVmFsdWVzW09iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoZGF0YTIsIHNvcnRDb2x1bW4pXVxuXG4gICAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpIHJlc3VsdCA9IC0xXG4gICAgICBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMVxuICAgICAgZWxzZSBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHJlc3VsdCA9IDBcbiAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZTIgPT09ICdzdHJpbmcnKVxuICAgICAgICByZXN1bHQgPSB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIsIFt0aGlzLmxvY2FsZSwgJ2VuJywgJ2RlJ10sIHsgbnVtZXJpYzogdHJ1ZSB9KVxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZTEgPCB2YWx1ZTIpIHtcbiAgICAgICAgICByZXN1bHQgPSAtMVxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlMSA+IHZhbHVlMikge1xuICAgICAgICAgIHJlc3VsdCA9IDFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkaXJlY3Rpb24gKiByZXN1bHRcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -117,14 +117,16 @@ export class FilterViewComponent {
|
|
|
117
117
|
id: `${f.columnId}-${f.value}`,
|
|
118
118
|
column: filterColumn.nameKey,
|
|
119
119
|
value: f.value,
|
|
120
|
-
|
|
121
|
-
columnFilterType: filterColumn.filterType,
|
|
120
|
+
valueColumnId: filterColumn.id,
|
|
122
121
|
};
|
|
123
122
|
})
|
|
124
123
|
.filter((v) => v !== undefined)
|
|
125
124
|
.slice()
|
|
126
|
-
.sort((a, b) => columnIds.indexOf(a.
|
|
125
|
+
.sort((a, b) => columnIds.indexOf(a.valueColumnId) - columnIds.indexOf(b.valueColumnId));
|
|
127
126
|
}));
|
|
127
|
+
this.componentStateChanged.emit({
|
|
128
|
+
filters: this.filters,
|
|
129
|
+
});
|
|
128
130
|
}
|
|
129
131
|
get _fitlerViewNoSelection() {
|
|
130
132
|
return this.fitlerViewNoSelection;
|
|
@@ -183,7 +185,7 @@ export class FilterViewComponent {
|
|
|
183
185
|
});
|
|
184
186
|
}
|
|
185
187
|
onFilterDelete(row) {
|
|
186
|
-
const filters = this.filters.filter((f) => !(f.columnId === row['
|
|
188
|
+
const filters = this.filters.filter((f) => !(f.columnId === row['valueColumnId'] && f.value === row['value']));
|
|
187
189
|
this.filters = filters;
|
|
188
190
|
this.filtered.emit(filters);
|
|
189
191
|
this.componentStateChanged.emit({
|
|
@@ -205,6 +207,9 @@ export class FilterViewComponent {
|
|
|
205
207
|
getColumnForFilter(filter, columns) {
|
|
206
208
|
return columns.find((c) => c.id === filter.columnId);
|
|
207
209
|
}
|
|
210
|
+
getColumn(colId, columns) {
|
|
211
|
+
return columns.find((c) => c.id === colId);
|
|
212
|
+
}
|
|
208
213
|
resolveFieldData(object, key) {
|
|
209
214
|
return ObjectUtils.resolveFieldData(object, key);
|
|
210
215
|
}
|
|
@@ -213,12 +218,18 @@ export class FilterViewComponent {
|
|
|
213
218
|
[filter.columnId]: filter.value,
|
|
214
219
|
};
|
|
215
220
|
}
|
|
221
|
+
getRowForValueColumn(row) {
|
|
222
|
+
return {
|
|
223
|
+
id: row.id,
|
|
224
|
+
[row['valueColumnId']]: row['value'],
|
|
225
|
+
};
|
|
226
|
+
}
|
|
216
227
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FilterViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
217
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: FilterViewComponent, selector: "ocx-filter-view", inputs: { filters: "filters", columns: "columns", displayMode: "displayMode", selectDisplayedChips: "selectDisplayedChips", chipStyleClass: "chipStyleClass", tableStyle: "tableStyle", panelStyle: "panelStyle", templates: "templates" }, outputs: { filtered: "filtered", componentStateChanged: "componentStateChanged" }, viewQueries: [{ propertyName: "panel", first: true, predicate: OverlayPanel, descendants: true }, { propertyName: "manageButton", first: true, predicate: ["manageButton"], descendants: true }, { propertyName: "defaultTemplates", predicate: PrimeTemplate, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"columns$ | async as columns\">\n <div *ngIf=\"filters$ | async as filters\" class=\"flex flex-wrap align-items-center gap-2\">\n <ng-container *ngIf=\"displayMode === 'chips'; else noChipsContent\">\n <ng-container *ocxIfBreakpoint=\"'desktop'; elseTemplate: noChipsContent\">\n <ng-container *ngIf=\"selectDisplayedChips(filters, columns) as selectedFilters\">\n <p-button\n #chipFilterResetButton\n id=\"ocxFilterViewReset\"\n (onClick)=\"onResetFilersClick()\"\n icon=\"pi pi-eraser\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n <ng-container *ngIf=\"filters.length <= 0\">\n <ng-container\n *ngIf=\"_fitlerViewNoSelection; else defaultNoFilters\"\n [ngTemplateOutlet]=\"_fitlerViewNoSelection\"\n >\n </ng-container>\n <ng-template #defaultNoFilters>\n <span id=\"ocxFilterViewNoFilters\">{{ 'OCX_FILTER_VIEW.NO_FILTERS' | translate }}</span>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"(chipTemplates$ | async) ?? {} as templates\">\n <ng-container *ngFor=\"let filter of selectedFilters\">\n <ng-container *ngIf=\"getColumnForFilter(filter, columns) as column\">\n <p-chip [removable]=\"true\" (onRemove)=\"onChipRemove(filter)\" [styleClass]=\"chipStyleClass\">\n <ng-container\n *ngIf=\"_filterViewChipContent; else chipContentTemplate\"\n [ngTemplateOutlet]=\"_filterViewChipContent\"\n [ngTemplateOutletContext]=\"{\n filter: filter,\n column: column,\n filterValueTemplates: templates,\n truthyTemplate: truthyTemplate,\n filterValueTemplate: chipTemplate\n }\"\n >\n </ng-container>\n <ng-template #chipContentTemplate>\n <span\n *ngIf=\"columns$ | async as columns\"\n style=\"white-space: nowrap\"\n class=\"p-chip-text flex flex-nowrap\"\n >{{column?.nameKey ?? '' | translate }}:<ng-container\n *ngIf=\"filter.filterType === FilterType.EQUAL || !filter.filterType\"\n [ngTemplateOutlet]=\"chipTemplate\"\n [ngTemplateOutletContext]=\"{\n templates: templates,\n filter: filter,\n column: column\n }\"\n ></ng-container>\n <ng-container *ngIf=\"filter.filterType === FilterType.TRUTHY\">\n <ng-container\n [ngTemplateOutlet]=\"truthyTemplate\"\n [ngTemplateOutletContext]=\"{\n value: filter.value\n }\"\n ></ng-container>\n </ng-container>\n </span>\n </ng-template>\n </p-chip>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"selectedFilters.length < filters.length\">\n <p-chip\n #showMoreChip\n id=\"ocxFilterViewShowMore\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"showPanel($event)\"\n class=\"cursor-pointer filter-view-focusable\"\n (keydown.enter)=\"showPanel($event)\"\n (keydown.space)=\"showPanel($event)\"\n >\n <ng-container\n *ngIf=\"_filterViewShowMoreChip; else showMoreChipTemplate\"\n [ngTemplateOutlet]=\"_filterViewShowMoreChip\"\n [ngTemplateOutletContext]=\"{\n $implicit: filters.length - selectedFilters.length\n }\"\n >\n </ng-container>\n <ng-template #showMoreChipTemplate>\n <span class=\"p-chip-text flex flex-nowrap\"> +{{filters.length - selectedFilters.length}} </span>\n </ng-template>\n <ng-container [ngTemplateOutlet]=\"filterTablePanel\"></ng-container>\n </p-chip>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-template #noChipsContent>\n <p-button\n #manageButton\n id=\"ocxFilterViewManage\"\n (onClick)=\"showPanel($event)\"\n icon=\"pi pi-sliders-h\"\n label=\"{{ 'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.LABEL' | translate }}\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [badge]=\"filters.length.toString()\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n <ng-container [ngTemplateOutlet]=\"filterTablePanel\"></ng-container>\n </ng-template>\n\n <ng-template #filterTablePanel>\n <p-overlayPanel *ngIf=\"tableTemplates$ | async as templates\" #op [style]=\"panelStyle\" (onHide)=\"focusTrigger()\">\n <ng-template pTemplate=\"content\">\n <div pFocusTrap>\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <span class=\"text-2xl font-medium\">{{'OCX_FILTER_VIEW.PANEL_TITLE' | translate}}</span>\n <div>\n <p-button\n pAutoFocus\n [autofocus]=\"true\"\n id=\"ocxFilterViewOverlayReset\"\n (onClick)=\"onResetFilersClick()\"\n icon=\"pi pi-eraser\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n </div>\n </div>\n <ocx-data-table\n id=\"ocxFilterViewDataTable\"\n [rows]=\"(columnFilterDataRows$ | async) ?? []\"\n [columns]=\"columnFilterTableColumns\"\n [emptyResultsMessage]=\"'OCX_FILTER_VIEW.NO_FILTERS' | translate\"\n [paginator]=\"false\"\n [tableStyle]=\"tableStyle\"\n >\n <ng-template pTemplate=\"columnIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n [ngTemplateOutlet]=\"tableValueTemplate\"\n [ngTemplateOutletContext]=\"{\n templates: templates,\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"valueIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n [ngTemplateOutlet]=\"tableValueTemplate\"\n [ngTemplateOutletContext]=\"{\n templates: templates,\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"actionsIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <div>\n <button\n pButton\n class=\"p-button-rounded p-button-danger p-button-text\"\n title=\"{{ 'OCX_FILTER_VIEW.TABLE.REMOVE_FILTER_TITLE' | translate }}\"\n [attr.aria-label]=\"'OCX_FILTER_VIEW.TABLE.REMOVE_FILTER_ARIA_LABEL' | translate\"\n icon=\"pi pi-trash\"\n (click)=\"onFilterDelete(rowObject)\"\n ></button>\n </div>\n </ng-template>\n </ocx-data-table>\n </div>\n </ng-template>\n </p-overlayPanel>\n </ng-template>\n </div>\n</ng-container>\n\n<ng-template #tableValueTemplate let-templates=\"templates\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"column.id !== 'value'\"\n [ngTemplateOutlet]=\"templates[column.id]\"\n [ngTemplateOutletContext]=\"{\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n <ng-container *ngIf=\"column.id === 'value'\">\n <ng-container\n *ngIf=\"!rowObject['columnFilterType'] || rowObject['columnFilterType'] === FilterType.EQUAL\"\n [ngTemplateOutlet]=\"templates[rowObject['columnId']]\"\n [ngTemplateOutletContext]=\"{\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n <ng-container\n *ngIf=\"rowObject['columnFilterType'] === FilterType.TRUTHY\"\n [ngTemplateOutlet]=\"truthyTemplate\"\n [ngTemplateOutletContext]=\"{\n value: resolveFieldData(rowObject, column.id)\n }\"\n >\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #chipTemplate let-templates=\"templates\" let-filter=\"filter\" let-column=\"column\">\n <ng-container\n *ngIf=\"templates[column.id] as template\"\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n rowObject: getRowObjectFromFiterData(filter),\n column: column\n }\"\n >\n </ng-container>\n</ng-template>\n\n<ng-template #truthyTemplate let-value=\"value\">\n <ng-container *ngIf=\"value\"> {{'OCX_FILTER_VIEW.FILTER_YES' | translate}} </ng-container>\n <ng-container *ngIf=\"!value\"> {{'OCX_FILTER_VIEW.FILTER_NO' | translate}} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultStringValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id)}} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultNumberValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | number }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultCustomValue\" let-rowObject=\"rowObject\" let-column=\"column\"> </ng-template>\n\n<ng-template pTemplate=\"defaultDateValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | date: column.dateFormat ?? 'medium' }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultRelativeDateValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container>\n {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ resolveFieldData(rowObject, column.id) | timeago }}\n </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultTranslationKeyValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | translate }}</ng-container>\n</ng-template>\n", styles: [".filter-view-focusable:focus{outline:1px solid var(--primary-color);outline-offset:2px;box-shadow:none;border-radius:var(--chip-border-radius)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "style", "styleClass", "removable", "removeIcon"], outputs: ["onRemove", "onImageError"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i6.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i7.FocusTrap, selector: "[pFocusTrap]", inputs: ["pFocusTrapDisabled"] }, { kind: "component", type: i8.DataTableComponent, selector: "ocx-data-table", inputs: ["rows", "selectedRows", "filters", "sortDirection", "sortColumn", "columns", "clientSideFiltering", "clientSideSorting", "sortStates", "pageSizes", "pageSize", "emptyResultsMessage", "name", "deletePermission", "viewPermission", "editPermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "selectionEnabledField", "allowSelectAll", "paginator", "page", "tableStyle", "totalRecordsOnServer", "currentPageShowingKey", "currentPageShowingWithTotalOnServerKey", "stringCellTemplate", "numberCellTemplate", "customCellTemplate", "dateCellTemplate", "relativeDateCellTemplate", "cellTemplate", "translationKeyCellTemplate", "stringFilterCellTemplate", "numberFilterCellTemplate", "customFilterCellTemplate", "dateFilterCellTemplate", "relativeDateFilterCellTemplate", "filterCellTemplate", "translationKeyFilterCellTemplate", "additionalActions", "frozenActionColumn", "actionColumnPosition", "parentTemplates"], outputs: ["filtered", "sorted", "viewTableRow", "editTableRow", "deleteTableRow", "selectionChanged", "pageChanged", "pageSizeChanged", "componentStateChanged"] }, { kind: "directive", type: i9.IfBreakpointDirective, selector: "[ocxIfBreakpoint]", inputs: ["ocxIfBreakpoint", "ocxIfBreakpointElseTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }, { kind: "pipe", type: i11.OcxTimeAgoPipe, name: "timeago" }] }); }
|
|
228
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: FilterViewComponent, selector: "ocx-filter-view", inputs: { filters: "filters", columns: "columns", displayMode: "displayMode", selectDisplayedChips: "selectDisplayedChips", chipStyleClass: "chipStyleClass", tableStyle: "tableStyle", panelStyle: "panelStyle", templates: "templates" }, outputs: { filtered: "filtered", componentStateChanged: "componentStateChanged" }, viewQueries: [{ propertyName: "panel", first: true, predicate: OverlayPanel, descendants: true }, { propertyName: "manageButton", first: true, predicate: ["manageButton"], descendants: true }, { propertyName: "defaultTemplates", predicate: PrimeTemplate, descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"columns$ | async as columns\">\n <div *ngIf=\"filters$ | async as filters\" class=\"flex flex-wrap align-items-center gap-2\">\n <ng-container *ngIf=\"displayMode === 'chips'; else noChipsContent\">\n <ng-container *ocxIfBreakpoint=\"'desktop'; elseTemplate: noChipsContent\">\n <ng-container *ngIf=\"selectDisplayedChips(filters, columns) as selectedFilters\">\n <p-button\n #chipFilterResetButton\n id=\"ocxFilterViewReset\"\n (onClick)=\"onResetFilersClick()\"\n icon=\"pi pi-eraser\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n <ng-container *ngIf=\"filters.length <= 0\">\n <ng-container\n *ngIf=\"_fitlerViewNoSelection; else defaultNoFilters\"\n [ngTemplateOutlet]=\"_fitlerViewNoSelection\"\n >\n </ng-container>\n <ng-template #defaultNoFilters>\n <span id=\"ocxFilterViewNoFilters\">{{ 'OCX_FILTER_VIEW.NO_FILTERS' | translate }}</span>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"(chipTemplates$ | async) ?? {} as templates\">\n <ng-container *ngFor=\"let filter of selectedFilters\">\n <ng-container *ngIf=\"getColumnForFilter(filter, columns) as column\">\n <p-chip [removable]=\"true\" (onRemove)=\"onChipRemove(filter)\" [styleClass]=\"chipStyleClass\">\n <ng-container\n *ngIf=\"_filterViewChipContent; else chipContentTemplate\"\n [ngTemplateOutlet]=\"_filterViewChipContent\"\n [ngTemplateOutletContext]=\"{\n filter: filter,\n column: column,\n filterValueTemplates: templates,\n truthyTemplate: truthyTemplate,\n filterValueTemplate: chipTemplate\n }\"\n >\n </ng-container>\n <ng-template #chipContentTemplate>\n <span\n *ngIf=\"columns$ | async as columns\"\n style=\"white-space: nowrap\"\n class=\"p-chip-text flex flex-nowrap\"\n >{{column?.nameKey ?? '' | translate }}:<ng-container\n *ngIf=\"filter.filterType === FilterType.EQUAL || !filter.filterType\"\n [ngTemplateOutlet]=\"chipTemplate\"\n [ngTemplateOutletContext]=\"{\n templates: templates,\n filter: filter,\n column: column\n }\"\n ></ng-container>\n <ng-container *ngIf=\"filter.filterType === FilterType.TRUTHY\">\n <ng-container\n [ngTemplateOutlet]=\"truthyTemplate\"\n [ngTemplateOutletContext]=\"{\n value: filter.value\n }\"\n ></ng-container>\n </ng-container>\n </span>\n </ng-template>\n </p-chip>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"selectedFilters.length < filters.length\">\n <p-chip\n #showMoreChip\n id=\"ocxFilterViewShowMore\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"showPanel($event)\"\n class=\"cursor-pointer filter-view-focusable\"\n (keydown.enter)=\"showPanel($event)\"\n (keydown.space)=\"showPanel($event)\"\n >\n <ng-container\n *ngIf=\"_filterViewShowMoreChip; else showMoreChipTemplate\"\n [ngTemplateOutlet]=\"_filterViewShowMoreChip\"\n [ngTemplateOutletContext]=\"{\n $implicit: filters.length - selectedFilters.length\n }\"\n >\n </ng-container>\n <ng-template #showMoreChipTemplate>\n <span class=\"p-chip-text flex flex-nowrap\"> +{{filters.length - selectedFilters.length}} </span>\n </ng-template>\n <ng-container [ngTemplateOutlet]=\"filterTablePanel\"></ng-container>\n </p-chip>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-template #noChipsContent>\n <p-button\n #manageButton\n id=\"ocxFilterViewManage\"\n (onClick)=\"showPanel($event)\"\n icon=\"pi pi-sliders-h\"\n label=\"{{ 'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.LABEL' | translate }}\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [badge]=\"filters.length.toString()\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n <ng-container [ngTemplateOutlet]=\"filterTablePanel\"></ng-container>\n </ng-template>\n\n <ng-template #filterTablePanel>\n <p-overlayPanel *ngIf=\"tableTemplates$ | async as templates\" #op [style]=\"panelStyle\" (onHide)=\"focusTrigger()\">\n <ng-template pTemplate=\"content\">\n <div pFocusTrap>\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <span class=\"text-2xl font-medium\">{{'OCX_FILTER_VIEW.PANEL_TITLE' | translate}}</span>\n <div>\n <p-button\n pAutoFocus\n [autofocus]=\"true\"\n id=\"ocxFilterViewOverlayReset\"\n (onClick)=\"onResetFilersClick()\"\n icon=\"pi pi-eraser\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n </div>\n </div>\n <ocx-data-table\n id=\"ocxFilterViewDataTable\"\n [rows]=\"(columnFilterDataRows$ | async) ?? []\"\n [columns]=\"columnFilterTableColumns\"\n [emptyResultsMessage]=\"'OCX_FILTER_VIEW.NO_FILTERS' | translate\"\n [paginator]=\"false\"\n [tableStyle]=\"tableStyle\"\n >\n <ng-template pTemplate=\"columnIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n [ngTemplateOutlet]=\"templates[column.id]\"\n [ngTemplateOutletContext]=\"{\n rowObject: rowObject,\n column: column,\n }\"\n >\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"valueIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container *ngIf=\"getColumn(rowObject['valueColumnId'], columns) as valueColumn\">\n <ng-container\n *ngIf=\"!valueColumn.filterType || valueColumn.filterType === FilterType.EQUAL\"\n [ngTemplateOutlet]=\"templates[valueColumn.id]\"\n [ngTemplateOutletContext]=\"{\n rowObject: getRowForValueColumn(rowObject),\n column: valueColumn\n }\"\n >\n </ng-container>\n <ng-container\n *ngIf=\"valueColumn.filterType === FilterType.TRUTHY\"\n [ngTemplateOutlet]=\"truthyTemplate\"\n [ngTemplateOutletContext]=\"{\n value: resolveFieldData(rowObject, column.id)\n }\"\n >\n </ng-container>\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"actionsIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <div>\n <button\n pButton\n class=\"p-button-rounded p-button-danger p-button-text\"\n title=\"{{ 'OCX_FILTER_VIEW.TABLE.REMOVE_FILTER_TITLE' | translate }}\"\n [attr.aria-label]=\"'OCX_FILTER_VIEW.TABLE.REMOVE_FILTER_ARIA_LABEL' | translate\"\n icon=\"pi pi-trash\"\n (click)=\"onFilterDelete(rowObject)\"\n ></button>\n </div>\n </ng-template>\n </ocx-data-table>\n </div>\n </ng-template>\n </p-overlayPanel>\n </ng-template>\n </div>\n</ng-container>\n\n<ng-template #chipTemplate let-templates=\"templates\" let-filter=\"filter\" let-column=\"column\">\n <ng-container\n *ngIf=\"templates[column.id] as template\"\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n rowObject: getRowObjectFromFiterData(filter),\n column: column\n }\"\n >\n </ng-container>\n</ng-template>\n\n<ng-template #truthyTemplate let-value=\"value\">\n <ng-container *ngIf=\"value\"> {{'OCX_FILTER_VIEW.FILTER_YES' | translate}} </ng-container>\n <ng-container *ngIf=\"!value\"> {{'OCX_FILTER_VIEW.FILTER_NO' | translate}} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultStringValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id)}} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultNumberValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | number }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultCustomValue\" let-rowObject=\"rowObject\" let-column=\"column\"> </ng-template>\n\n<ng-template pTemplate=\"defaultDateValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | date: column.dateFormat ?? 'medium' }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultRelativeDateValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container>\n {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ resolveFieldData(rowObject, column.id) | timeago }}\n </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultTranslationKeyValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | translate }}</ng-container>\n</ng-template>\n", styles: [".filter-view-focusable:focus{outline:1px solid var(--primary-color);outline-offset:2px;box-shadow:none;border-radius:var(--chip-border-radius)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.Chip, selector: "p-chip", inputs: ["label", "icon", "image", "alt", "style", "styleClass", "removable", "removeIcon"], outputs: ["onRemove", "onImageError"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i6.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i7.FocusTrap, selector: "[pFocusTrap]", inputs: ["pFocusTrapDisabled"] }, { kind: "component", type: i8.DataTableComponent, selector: "ocx-data-table", inputs: ["rows", "selectedRows", "filters", "sortDirection", "sortColumn", "columns", "clientSideFiltering", "clientSideSorting", "sortStates", "pageSizes", "pageSize", "emptyResultsMessage", "name", "deletePermission", "viewPermission", "editPermission", "deleteActionVisibleField", "deleteActionEnabledField", "viewActionVisibleField", "viewActionEnabledField", "editActionVisibleField", "editActionEnabledField", "selectionEnabledField", "allowSelectAll", "paginator", "page", "tableStyle", "totalRecordsOnServer", "currentPageShowingKey", "currentPageShowingWithTotalOnServerKey", "stringCellTemplate", "numberCellTemplate", "customCellTemplate", "dateCellTemplate", "relativeDateCellTemplate", "cellTemplate", "translationKeyCellTemplate", "stringFilterCellTemplate", "numberFilterCellTemplate", "customFilterCellTemplate", "dateFilterCellTemplate", "relativeDateFilterCellTemplate", "filterCellTemplate", "translationKeyFilterCellTemplate", "additionalActions", "frozenActionColumn", "actionColumnPosition", "parentTemplates"], outputs: ["filtered", "sorted", "viewTableRow", "editTableRow", "deleteTableRow", "selectionChanged", "pageChanged", "pageSizeChanged", "componentStateChanged"] }, { kind: "directive", type: i9.IfBreakpointDirective, selector: "[ocxIfBreakpoint]", inputs: ["ocxIfBreakpoint", "ocxIfBreakpointElseTemplate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }, { kind: "pipe", type: i11.OcxTimeAgoPipe, name: "timeago" }] }); }
|
|
218
229
|
}
|
|
219
230
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: FilterViewComponent, decorators: [{
|
|
220
231
|
type: Component,
|
|
221
|
-
args: [{ selector: 'ocx-filter-view', template: "<ng-container *ngIf=\"columns$ | async as columns\">\n <div *ngIf=\"filters$ | async as filters\" class=\"flex flex-wrap align-items-center gap-2\">\n <ng-container *ngIf=\"displayMode === 'chips'; else noChipsContent\">\n <ng-container *ocxIfBreakpoint=\"'desktop'; elseTemplate: noChipsContent\">\n <ng-container *ngIf=\"selectDisplayedChips(filters, columns) as selectedFilters\">\n <p-button\n #chipFilterResetButton\n id=\"ocxFilterViewReset\"\n (onClick)=\"onResetFilersClick()\"\n icon=\"pi pi-eraser\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n <ng-container *ngIf=\"filters.length <= 0\">\n <ng-container\n *ngIf=\"_fitlerViewNoSelection; else defaultNoFilters\"\n [ngTemplateOutlet]=\"_fitlerViewNoSelection\"\n >\n </ng-container>\n <ng-template #defaultNoFilters>\n <span id=\"ocxFilterViewNoFilters\">{{ 'OCX_FILTER_VIEW.NO_FILTERS' | translate }}</span>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"(chipTemplates$ | async) ?? {} as templates\">\n <ng-container *ngFor=\"let filter of selectedFilters\">\n <ng-container *ngIf=\"getColumnForFilter(filter, columns) as column\">\n <p-chip [removable]=\"true\" (onRemove)=\"onChipRemove(filter)\" [styleClass]=\"chipStyleClass\">\n <ng-container\n *ngIf=\"_filterViewChipContent; else chipContentTemplate\"\n [ngTemplateOutlet]=\"_filterViewChipContent\"\n [ngTemplateOutletContext]=\"{\n filter: filter,\n column: column,\n filterValueTemplates: templates,\n truthyTemplate: truthyTemplate,\n filterValueTemplate: chipTemplate\n }\"\n >\n </ng-container>\n <ng-template #chipContentTemplate>\n <span\n *ngIf=\"columns$ | async as columns\"\n style=\"white-space: nowrap\"\n class=\"p-chip-text flex flex-nowrap\"\n >{{column?.nameKey ?? '' | translate }}:<ng-container\n *ngIf=\"filter.filterType === FilterType.EQUAL || !filter.filterType\"\n [ngTemplateOutlet]=\"chipTemplate\"\n [ngTemplateOutletContext]=\"{\n templates: templates,\n filter: filter,\n column: column\n }\"\n ></ng-container>\n <ng-container *ngIf=\"filter.filterType === FilterType.TRUTHY\">\n <ng-container\n [ngTemplateOutlet]=\"truthyTemplate\"\n [ngTemplateOutletContext]=\"{\n value: filter.value\n }\"\n ></ng-container>\n </ng-container>\n </span>\n </ng-template>\n </p-chip>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"selectedFilters.length < filters.length\">\n <p-chip\n #showMoreChip\n id=\"ocxFilterViewShowMore\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"showPanel($event)\"\n class=\"cursor-pointer filter-view-focusable\"\n (keydown.enter)=\"showPanel($event)\"\n (keydown.space)=\"showPanel($event)\"\n >\n <ng-container\n *ngIf=\"_filterViewShowMoreChip; else showMoreChipTemplate\"\n [ngTemplateOutlet]=\"_filterViewShowMoreChip\"\n [ngTemplateOutletContext]=\"{\n $implicit: filters.length - selectedFilters.length\n }\"\n >\n </ng-container>\n <ng-template #showMoreChipTemplate>\n <span class=\"p-chip-text flex flex-nowrap\"> +{{filters.length - selectedFilters.length}} </span>\n </ng-template>\n <ng-container [ngTemplateOutlet]=\"filterTablePanel\"></ng-container>\n </p-chip>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-template #noChipsContent>\n <p-button\n #manageButton\n id=\"ocxFilterViewManage\"\n (onClick)=\"showPanel($event)\"\n icon=\"pi pi-sliders-h\"\n label=\"{{ 'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.LABEL' | translate }}\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [badge]=\"filters.length.toString()\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n <ng-container [ngTemplateOutlet]=\"filterTablePanel\"></ng-container>\n </ng-template>\n\n <ng-template #filterTablePanel>\n <p-overlayPanel *ngIf=\"tableTemplates$ | async as templates\" #op [style]=\"panelStyle\" (onHide)=\"focusTrigger()\">\n <ng-template pTemplate=\"content\">\n <div pFocusTrap>\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <span class=\"text-2xl font-medium\">{{'OCX_FILTER_VIEW.PANEL_TITLE' | translate}}</span>\n <div>\n <p-button\n pAutoFocus\n [autofocus]=\"true\"\n id=\"ocxFilterViewOverlayReset\"\n (onClick)=\"onResetFilersClick()\"\n icon=\"pi pi-eraser\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n </div>\n </div>\n <ocx-data-table\n id=\"ocxFilterViewDataTable\"\n [rows]=\"(columnFilterDataRows$ | async) ?? []\"\n [columns]=\"columnFilterTableColumns\"\n [emptyResultsMessage]=\"'OCX_FILTER_VIEW.NO_FILTERS' | translate\"\n [paginator]=\"false\"\n [tableStyle]=\"tableStyle\"\n >\n <ng-template pTemplate=\"columnIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n [ngTemplateOutlet]=\"tableValueTemplate\"\n [ngTemplateOutletContext]=\"{\n templates: templates,\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"valueIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n [ngTemplateOutlet]=\"tableValueTemplate\"\n [ngTemplateOutletContext]=\"{\n templates: templates,\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"actionsIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <div>\n <button\n pButton\n class=\"p-button-rounded p-button-danger p-button-text\"\n title=\"{{ 'OCX_FILTER_VIEW.TABLE.REMOVE_FILTER_TITLE' | translate }}\"\n [attr.aria-label]=\"'OCX_FILTER_VIEW.TABLE.REMOVE_FILTER_ARIA_LABEL' | translate\"\n icon=\"pi pi-trash\"\n (click)=\"onFilterDelete(rowObject)\"\n ></button>\n </div>\n </ng-template>\n </ocx-data-table>\n </div>\n </ng-template>\n </p-overlayPanel>\n </ng-template>\n </div>\n</ng-container>\n\n<ng-template #tableValueTemplate let-templates=\"templates\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n *ngIf=\"column.id !== 'value'\"\n [ngTemplateOutlet]=\"templates[column.id]\"\n [ngTemplateOutletContext]=\"{\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n <ng-container *ngIf=\"column.id === 'value'\">\n <ng-container\n *ngIf=\"!rowObject['columnFilterType'] || rowObject['columnFilterType'] === FilterType.EQUAL\"\n [ngTemplateOutlet]=\"templates[rowObject['columnId']]\"\n [ngTemplateOutletContext]=\"{\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n <ng-container\n *ngIf=\"rowObject['columnFilterType'] === FilterType.TRUTHY\"\n [ngTemplateOutlet]=\"truthyTemplate\"\n [ngTemplateOutletContext]=\"{\n value: resolveFieldData(rowObject, column.id)\n }\"\n >\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #chipTemplate let-templates=\"templates\" let-filter=\"filter\" let-column=\"column\">\n <ng-container\n *ngIf=\"templates[column.id] as template\"\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n rowObject: getRowObjectFromFiterData(filter),\n column: column\n }\"\n >\n </ng-container>\n</ng-template>\n\n<ng-template #truthyTemplate let-value=\"value\">\n <ng-container *ngIf=\"value\"> {{'OCX_FILTER_VIEW.FILTER_YES' | translate}} </ng-container>\n <ng-container *ngIf=\"!value\"> {{'OCX_FILTER_VIEW.FILTER_NO' | translate}} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultStringValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id)}} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultNumberValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | number }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultCustomValue\" let-rowObject=\"rowObject\" let-column=\"column\"> </ng-template>\n\n<ng-template pTemplate=\"defaultDateValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | date: column.dateFormat ?? 'medium' }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultRelativeDateValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container>\n {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ resolveFieldData(rowObject, column.id) | timeago }}\n </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultTranslationKeyValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | translate }}</ng-container>\n</ng-template>\n", styles: [".filter-view-focusable:focus{outline:1px solid var(--primary-color);outline-offset:2px;box-shadow:none;border-radius:var(--chip-border-radius)}\n"] }]
|
|
232
|
+
args: [{ selector: 'ocx-filter-view', template: "<ng-container *ngIf=\"columns$ | async as columns\">\n <div *ngIf=\"filters$ | async as filters\" class=\"flex flex-wrap align-items-center gap-2\">\n <ng-container *ngIf=\"displayMode === 'chips'; else noChipsContent\">\n <ng-container *ocxIfBreakpoint=\"'desktop'; elseTemplate: noChipsContent\">\n <ng-container *ngIf=\"selectDisplayedChips(filters, columns) as selectedFilters\">\n <p-button\n #chipFilterResetButton\n id=\"ocxFilterViewReset\"\n (onClick)=\"onResetFilersClick()\"\n icon=\"pi pi-eraser\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n <ng-container *ngIf=\"filters.length <= 0\">\n <ng-container\n *ngIf=\"_fitlerViewNoSelection; else defaultNoFilters\"\n [ngTemplateOutlet]=\"_fitlerViewNoSelection\"\n >\n </ng-container>\n <ng-template #defaultNoFilters>\n <span id=\"ocxFilterViewNoFilters\">{{ 'OCX_FILTER_VIEW.NO_FILTERS' | translate }}</span>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"(chipTemplates$ | async) ?? {} as templates\">\n <ng-container *ngFor=\"let filter of selectedFilters\">\n <ng-container *ngIf=\"getColumnForFilter(filter, columns) as column\">\n <p-chip [removable]=\"true\" (onRemove)=\"onChipRemove(filter)\" [styleClass]=\"chipStyleClass\">\n <ng-container\n *ngIf=\"_filterViewChipContent; else chipContentTemplate\"\n [ngTemplateOutlet]=\"_filterViewChipContent\"\n [ngTemplateOutletContext]=\"{\n filter: filter,\n column: column,\n filterValueTemplates: templates,\n truthyTemplate: truthyTemplate,\n filterValueTemplate: chipTemplate\n }\"\n >\n </ng-container>\n <ng-template #chipContentTemplate>\n <span\n *ngIf=\"columns$ | async as columns\"\n style=\"white-space: nowrap\"\n class=\"p-chip-text flex flex-nowrap\"\n >{{column?.nameKey ?? '' | translate }}:<ng-container\n *ngIf=\"filter.filterType === FilterType.EQUAL || !filter.filterType\"\n [ngTemplateOutlet]=\"chipTemplate\"\n [ngTemplateOutletContext]=\"{\n templates: templates,\n filter: filter,\n column: column\n }\"\n ></ng-container>\n <ng-container *ngIf=\"filter.filterType === FilterType.TRUTHY\">\n <ng-container\n [ngTemplateOutlet]=\"truthyTemplate\"\n [ngTemplateOutletContext]=\"{\n value: filter.value\n }\"\n ></ng-container>\n </ng-container>\n </span>\n </ng-template>\n </p-chip>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"selectedFilters.length < filters.length\">\n <p-chip\n #showMoreChip\n id=\"ocxFilterViewShowMore\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"showPanel($event)\"\n class=\"cursor-pointer filter-view-focusable\"\n (keydown.enter)=\"showPanel($event)\"\n (keydown.space)=\"showPanel($event)\"\n >\n <ng-container\n *ngIf=\"_filterViewShowMoreChip; else showMoreChipTemplate\"\n [ngTemplateOutlet]=\"_filterViewShowMoreChip\"\n [ngTemplateOutletContext]=\"{\n $implicit: filters.length - selectedFilters.length\n }\"\n >\n </ng-container>\n <ng-template #showMoreChipTemplate>\n <span class=\"p-chip-text flex flex-nowrap\"> +{{filters.length - selectedFilters.length}} </span>\n </ng-template>\n <ng-container [ngTemplateOutlet]=\"filterTablePanel\"></ng-container>\n </p-chip>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-template #noChipsContent>\n <p-button\n #manageButton\n id=\"ocxFilterViewManage\"\n (onClick)=\"showPanel($event)\"\n icon=\"pi pi-sliders-h\"\n label=\"{{ 'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.LABEL' | translate }}\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [badge]=\"filters.length.toString()\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.MANAGE_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n <ng-container [ngTemplateOutlet]=\"filterTablePanel\"></ng-container>\n </ng-template>\n\n <ng-template #filterTablePanel>\n <p-overlayPanel *ngIf=\"tableTemplates$ | async as templates\" #op [style]=\"panelStyle\" (onHide)=\"focusTrigger()\">\n <ng-template pTemplate=\"content\">\n <div pFocusTrap>\n <div class=\"flex justify-content-between align-items-center mb-2\">\n <span class=\"text-2xl font-medium\">{{'OCX_FILTER_VIEW.PANEL_TITLE' | translate}}</span>\n <div>\n <p-button\n pAutoFocus\n [autofocus]=\"true\"\n id=\"ocxFilterViewOverlayReset\"\n (onClick)=\"onResetFilersClick()\"\n icon=\"pi pi-eraser\"\n pTooltip=\"{{ 'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.DETAIL' | translate }}\"\n tooltipPosition=\"top\"\n tooltipEvent=\"hover\"\n [ariaLabel]=\"'OCX_FILTER_VIEW.RESET_FILTERS_BUTTON.ARIA_LABEL' | translate\"\n ></p-button>\n </div>\n </div>\n <ocx-data-table\n id=\"ocxFilterViewDataTable\"\n [rows]=\"(columnFilterDataRows$ | async) ?? []\"\n [columns]=\"columnFilterTableColumns\"\n [emptyResultsMessage]=\"'OCX_FILTER_VIEW.NO_FILTERS' | translate\"\n [paginator]=\"false\"\n [tableStyle]=\"tableStyle\"\n >\n <ng-template pTemplate=\"columnIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container\n [ngTemplateOutlet]=\"templates[column.id]\"\n [ngTemplateOutletContext]=\"{\n rowObject: rowObject,\n column: column,\n }\"\n >\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"valueIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container *ngIf=\"getColumn(rowObject['valueColumnId'], columns) as valueColumn\">\n <ng-container\n *ngIf=\"!valueColumn.filterType || valueColumn.filterType === FilterType.EQUAL\"\n [ngTemplateOutlet]=\"templates[valueColumn.id]\"\n [ngTemplateOutletContext]=\"{\n rowObject: getRowForValueColumn(rowObject),\n column: valueColumn\n }\"\n >\n </ng-container>\n <ng-container\n *ngIf=\"valueColumn.filterType === FilterType.TRUTHY\"\n [ngTemplateOutlet]=\"truthyTemplate\"\n [ngTemplateOutletContext]=\"{\n value: resolveFieldData(rowObject, column.id)\n }\"\n >\n </ng-container>\n </ng-container>\n </ng-template>\n <ng-template pTemplate=\"actionsIdCell\" let-rowObject=\"rowObject\" let-column=\"column\">\n <div>\n <button\n pButton\n class=\"p-button-rounded p-button-danger p-button-text\"\n title=\"{{ 'OCX_FILTER_VIEW.TABLE.REMOVE_FILTER_TITLE' | translate }}\"\n [attr.aria-label]=\"'OCX_FILTER_VIEW.TABLE.REMOVE_FILTER_ARIA_LABEL' | translate\"\n icon=\"pi pi-trash\"\n (click)=\"onFilterDelete(rowObject)\"\n ></button>\n </div>\n </ng-template>\n </ocx-data-table>\n </div>\n </ng-template>\n </p-overlayPanel>\n </ng-template>\n </div>\n</ng-container>\n\n<ng-template #chipTemplate let-templates=\"templates\" let-filter=\"filter\" let-column=\"column\">\n <ng-container\n *ngIf=\"templates[column.id] as template\"\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{\n rowObject: getRowObjectFromFiterData(filter),\n column: column\n }\"\n >\n </ng-container>\n</ng-template>\n\n<ng-template #truthyTemplate let-value=\"value\">\n <ng-container *ngIf=\"value\"> {{'OCX_FILTER_VIEW.FILTER_YES' | translate}} </ng-container>\n <ng-container *ngIf=\"!value\"> {{'OCX_FILTER_VIEW.FILTER_NO' | translate}} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultStringValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id)}} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultNumberValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | number }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultCustomValue\" let-rowObject=\"rowObject\" let-column=\"column\"> </ng-template>\n\n<ng-template pTemplate=\"defaultDateValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | date: column.dateFormat ?? 'medium' }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultRelativeDateValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container>\n {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ resolveFieldData(rowObject, column.id) | timeago }}\n </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultTranslationKeyValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | translate }}</ng-container>\n</ng-template>\n", styles: [".filter-view-focusable:focus{outline:1px solid var(--primary-color);outline-offset:2px;box-shadow:none;border-radius:var(--chip-border-radius)}\n"] }]
|
|
222
233
|
}], propDecorators: { filters: [{
|
|
223
234
|
type: Input
|
|
224
235
|
}], columns: [{
|
|
@@ -249,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
|
|
|
249
260
|
}], templates: [{
|
|
250
261
|
type: Input
|
|
251
262
|
}] } });
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWFjY2VsZXJhdG9yL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXItdmlldy9maWx0ZXItdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci12aWV3L2ZpbHRlci12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7Ozs7Ozs7Ozs7O0FBc0J2QyxNQUFNLE9BQU8sbUJBQW1CO0lBTGhDO1FBTUUsZUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUN2QixlQUFVLEdBQUcsVUFBVSxD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QUNsRCxDQUFDO0lBRUQseUJBQXlCLENBQUMsTUFBYztRQUN0QyxPQUFPO1lBQ0wsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUs7U0FDaEMsQ0FBQTtJQUNILENBQUM7OEdBelBVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDZaQWdGbkIsWUFBWSxxS0FzQlQsYUFBYSxnRENqSjdCLHd0V0E4UEE7OzJGRG5OYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCOzhCQVN2QixPQUFPO3NCQURWLEtBQUs7Z0JBU0YsT0FBTztzQkFEVixLQUFLO2dCQXFCRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkF1Q2tCLEtBQUs7c0JBQTdCLFNBQVM7dUJBQUMsWUFBWTtnQkFDSSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBc0JyQixnQkFBZ0I7c0JBRG5CLFlBQVk7dUJBQUMsYUFBYTtnQkFTdkIsU0FBUztzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBGaWx0ZXIsIEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbC9maWx0ZXIubW9kZWwnXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXRhYmxlLWNvbHVtbi5tb2RlbCdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBtYXAgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2NvbHVtbi10eXBlLm1vZGVsJ1xuaW1wb3J0IHsgUHJpbWVUZW1wbGF0ZSB9IGZyb20gJ3ByaW1lbmcvYXBpJ1xuaW1wb3J0IHsgZmluZFRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGVtcGxhdGUudXRpbHMnXG5pbXBvcnQgeyBPYmplY3RVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL29iamVjdHV0aWxzJ1xuaW1wb3J0IHsgbGltaXQgfSBmcm9tICcuLi8uLi91dGlscy9maWx0ZXIudXRpbHMnXG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCdcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdwcmltZW5nL2J1dHRvbidcblxuZXhwb3J0IHR5cGUgRmlsdGVyVmlld0Rpc3BsYXlNb2RlID0gJ2NoaXBzJyB8ICdidXR0b24nXG5leHBvcnQgdHlwZSBGaWx0ZXJWaWV3Um93RGlzcGxheURhdGEgPSB7XG4gIGlkOiBzdHJpbmdcbiAgY29sdW1uOiBzdHJpbmdcbiAgdmFsdWU6IHVua25vd25cbn1cbmV4cG9ydCB0eXBlIEZpbHRlclZpZXdSb3dEZXRhaWxEYXRhID0gRmlsdGVyVmlld1Jvd0Rpc3BsYXlEYXRhICYge1xuICBjb2x1bW5JZDogc3RyaW5nXG4gIGNvbHVtbkZpbHRlclR5cGU6IEZpbHRlclR5cGUgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJWaWV3Q29tcG9uZW50U3RhdGUge1xuICBmaWx0ZXJzPzogRmlsdGVyW11cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2N4LWZpbHRlci12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIENvbHVtblR5cGUgPSBDb2x1bW5UeXBlXG4gIEZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlXG4gIGZpbHRlcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJbXT4oW10pXG4gIEBJbnB1dCgpXG4gIGdldCBmaWx0ZXJzKCk6IEZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGZpbHRlcnModmFsdWU6IEZpbHRlcltdKSB7XG4gICAgdGhpcy5maWx0ZXJzJC5uZXh0KHZhbHVlKVxuICB9XG4gIGNvbHVtbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhVGFibGVDb2x1bW5bXT4oW10pXG4gIEBJbnB1dCgpXG4gIGdldCBjb2x1bW5zKCk6IERhdGFUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGNvbHVtbnModmFsdWU6IERhdGFUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5jb2x1bW5zJC5uZXh0KHZhbHVlKVxuICAgIGNvbnN0IGNoaXBPYnMgPSB2YWx1ZS5tYXAoKGMpID0+IHRoaXMuZ2V0VGVtcGxhdGUoYywgdGhpcy5jaGlwVGVtcGxhdGVOYW1lcywgdGhpcy5jaGlwVGVtcGxhdGVzLCB0aGlzLmNoaXBJZFN1ZmZpeCkpXG4gICAgdGhpcy5jaGlwVGVtcGxhdGVzJCA9IGNvbWJpbmVMYXRlc3QoY2hpcE9icykucGlwZShcbiAgICAgIG1hcCgodmFsdWVzKSA9PiBPYmplY3QuZnJvbUVudHJpZXModmFsdWUubWFwKChjLCBpKSA9PiBbYy5pZCwgdmFsdWVzW2ldXSkpKVxuICAgIClcblxuICAgIGNvbnN0IHRhYmxlVGVtcGxhdGVDb2x1bW5zID0gdmFsdWUuY29uY2F0KHRoaXMuY29sdW1uRmlsdGVyVGFibGVDb2x1bW5zKVxuICAgIHRoaXMudGFibGVUZW1wbGF0ZXMkID0gY29tYmluZUxhdGVzdChcbiAgICAgIHRhYmxlVGVtcGxhdGVDb2x1bW5zLm1hcCgoYykgPT5cbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZShjLCB0aGlzLnRhYmxlVGVtcGxhdGVOYW1lcywgdGhpcy50YWJsZVRlbXBsYXRlcywgdGhpcy50YWJsZUlkU3VmZml4KVxuICAgICAgKVxuICAgICkucGlwZShtYXAoKHZhbHVlcykgPT4gT2JqZWN0LmZyb21FbnRyaWVzKHRhYmxlVGVtcGxhdGVDb2x1bW5zLm1hcCgoYywgaSkgPT4gW2MuaWQsIHZhbHVlc1tpXV0pKSkpXG4gIH1cblxuICBjb2x1bW5GaWx0ZXJEYXRhUm93cyQ6IE9ic2VydmFibGU8RmlsdGVyVmlld1Jvd0Rpc3BsYXlEYXRhW10+IHwgdW5kZWZpbmVkXG5cbiAgQElucHV0KCkgZGlzcGxheU1vZGU6IEZpbHRlclZpZXdEaXNwbGF5TW9kZSA9ICdidXR0b24nXG4gIEBJbnB1dCgpIHNlbGVjdERpc3BsYXllZENoaXBzOiAoZmlsdGVyczogRmlsdGVyW10sIGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdKSA9PiBGaWx0ZXJbXSA9IChmaWx0ZXJzKSA9PlxuICAgIGxpbWl0KGZpbHRlcnMsIDMsIHsgcmV2ZXJzZTogdHJ1ZSB9KVxuICBASW5wdXQoKSBjaGlwU3R5bGVDbGFzcyA9ICcnXG4gIEBJbnB1dCgpIHRhYmxlU3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSA9IHsgJ21heC1oZWlnaHQnOiAnNTB2aCcgfVxuICBASW5wdXQoKSBwYW5lbFN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gPSB7ICdtYXgtd2lkdGgnOiAnOTAlJyB9XG5cbiAgQE91dHB1dCgpIGZpbHRlcmVkOiBFdmVudEVtaXR0ZXI8RmlsdGVyW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBjb21wb25lbnRTdGF0ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxGaWx0ZXJWaWV3Q29tcG9uZW50U3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgY29sdW1uRmlsdGVyVGFibGVDb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSA9IFtcbiAgICB7XG4gICAgICBpZDogJ2NvbHVtbicsXG4gICAgICBjb2x1bW5UeXBlOiBDb2x1bW5UeXBlLlRSQU5TTEFUSU9OX0tFWSxcbiAgICAgIG5hbWVLZXk6ICdPQ1hfRklMVEVSX1ZJRVcuVEFCTEUuQ09MVU1OX05BTUUnLFxuICAgIH0sXG4gICAgeyBpZDogJ3ZhbHVlJywgY29sdW1uVHlwZTogQ29sdW1uVHlwZS5TVFJJTkcsIG5hbWVLZXk6ICdPQ1hfRklMVEVSX1ZJRVcuVEFCTEUuVkFMVUUnIH0sXG4gICAge1xuICAgICAgaWQ6ICdhY3Rpb25zJyxcbiAgICAgIGNvbHVtblR5cGU6IENvbHVtblR5cGUuU1RSSU5HLFxuICAgICAgbmFtZUtleTogJ09DWF9GSUxURVJfVklFVy5UQUJMRS5BQ1RJT05TJyxcbiAgICB9LFxuICBdXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJEYXRhUm93cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbHRlcnMkLCB0aGlzLmNvbHVtbnMkXSkucGlwZShcbiAgICAgIG1hcCgoW2ZpbHRlcnMsIGNvbHVtbnNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbklkcyA9IGNvbHVtbnMubWFwKChjKSA9PiBjLmlkKVxuICAgICAgICByZXR1cm4gZmlsdGVyc1xuICAgICAgICAgIC5tYXAoKGYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uRm9yRmlsdGVyKGYsIGNvbHVtbnMpXG4gICAgICAgICAgICBpZiAoIWZpbHRlckNvbHVtbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IGAke2YuY29sdW1uSWR9LSR7Zi52YWx1ZX1gLFxuICAgICAgICAgICAgICBjb2x1bW46IGZpbHRlckNvbHVtbi5uYW1lS2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogZi52YWx1ZSxcbiAgICAgICAgICAgICAgY29sdW1uSWQ6IGZpbHRlckNvbHVtbi5pZCxcbiAgICAgICAgICAgICAgY29sdW1uRmlsdGVyVHlwZTogZmlsdGVyQ29sdW1uLmZpbHRlclR5cGUsXG4gICAgICAgICAgICB9IHNhdGlzZmllcyBGaWx0ZXJWaWV3Um93RGV0YWlsRGF0YVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigodik6IHYgaXMgRmlsdGVyVmlld1Jvd0RldGFpbERhdGEgPT4gdiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5zbGljZSgpXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbHVtbklkcy5pbmRleE9mKGEuY29sdW1uSWQpIC0gY29sdW1uSWRzLmluZGV4T2YoYi5jb2x1bW5JZCkpXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoT3ZlcmxheVBhbmVsKSBwYW5lbCE6IE92ZXJsYXlQYW5lbFxuICBAVmlld0NoaWxkKCdtYW5hZ2VCdXR0b24nKSBtYW5hZ2VCdXR0b24hOiBCdXR0b25cbiAgdHJpZ2dlcjogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWRcblxuICBmaXRsZXJWaWV3Tm9TZWxlY3Rpb246IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9maXRsZXJWaWV3Tm9TZWxlY3Rpb24oKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZml0bGVyVmlld05vU2VsZWN0aW9uXG4gIH1cblxuICBmaWx0ZXJWaWV3Q2hpcENvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9maWx0ZXJWaWV3Q2hpcENvbnRlbnQoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyVmlld0NoaXBDb250ZW50XG4gIH1cblxuICBmaWx0ZXJWaWV3U2hvd01vcmVDaGlwOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfZmlsdGVyVmlld1Nob3dNb3JlQ2hpcCgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJWaWV3U2hvd01vcmVDaGlwXG4gIH1cblxuICBkZWZhdWx0VGVtcGxhdGVzJDogQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZClcbiAgQFZpZXdDaGlsZHJlbihQcmltZVRlbXBsYXRlKVxuICBzZXQgZGVmYXVsdFRlbXBsYXRlcyh2YWx1ZTogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5kZWZhdWx0VGVtcGxhdGVzJC5uZXh0KHZhbHVlKVxuICB9XG5cbiAgcGFyZW50VGVtcGxhdGVzJDogQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IG51bGwgfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCBudWxsIHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKVxuICBASW5wdXQoKVxuICBzZXQgdGVtcGxhdGVzKHZhbHVlOiBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5wYXJlbnRUZW1wbGF0ZXMkLm5leHQodmFsdWUpXG4gICAgdmFsdWU/LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgY2FzZSAnZml0bGVyVmlld05vU2VsZWN0aW9uJzpcbiAgICAgICAgICB0aGlzLmZpdGxlclZpZXdOb1NlbGVjdGlvbiA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdmaWx0ZXJWaWV3Q2hpcENvbnRlbnQnOlxuICAgICAgICAgIHRoaXMuZmlsdGVyVmlld0NoaXBDb250ZW50ID0gaXRlbS50ZW1wbGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2ZpbHRlclZpZXdTaG93TW9yZUNoaXAnOlxuICAgICAgICAgIHRoaXMuZmlsdGVyVmlld1Nob3dNb3JlQ2hpcCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjaGlwVGVtcGxhdGVzJDogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4+IHwgdW5kZWZpbmVkXG4gIHRhYmxlVGVtcGxhdGVzJDogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4+IHwgdW5kZWZpbmVkXG5cbiAgY2hpcElkU3VmZml4OiBBcnJheTxzdHJpbmc+ID0gWydJZEZpbHRlckNoaXAnLCAnSWRUYWJsZUZpbHRlckNlbGwnLCAnSWRUYWJsZUNlbGwnXVxuICBjaGlwVGVtcGxhdGVOYW1lczogUmVjb3JkPENvbHVtblR5cGUsIEFycmF5PHN0cmluZz4+ID0ge1xuICAgIFtDb2x1bW5UeXBlLkRBVEVdOiBbJ2RhdGVGaWx0ZXJDaGlwVmFsdWUnLCAnZGF0ZVRhYmxlRmlsdGVyQ2VsbCcsICdkYXRlVGFibGVDZWxsJywgJ2RlZmF1bHREYXRlVmFsdWUnXSxcbiAgICBbQ29sdW1uVHlwZS5OVU1CRVJdOiBbJ251bWJlckZpbHRlckNoaXBWYWx1ZScsICdudW1iZXJUYWJsZUZpbHRlckNlbGwnLCAnbnVtYmVyVGFibGVDZWxsJywgJ2RlZmF1bHROdW1iZXJWYWx1ZSddLFxuICAgIFtDb2x1bW5UeXBlLlJFTEFUSVZFX0RBVEVdOiBbXG4gICAgICAncmVsYXRpdmVEYXRlRmlsdGVyQ2hpcFZhbHVlJyxcbiAgICAgICdyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwnLFxuICAgICAgJ3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCcsXG4gICAgICAnZGVmYXVsdFJlbGF0aXZlRGF0ZVZhbHVlJyxcbiAgICBdLFxuICAgIFtDb2x1bW5UeXBlLlRSQU5TTEFUSU9OX0tFWV06IFtcbiAgICAgICd0cmFuc2xhdGlvbktleUZpbHRlckNoaXBWYWx1ZScsXG4gICAgICAndHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwnLFxuICAgICAgJ3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsJyxcbiAgICAgICdkZWZhdWx0VHJhbnNsYXRpb25LZXlWYWx1ZScsXG4gICAgXSxcbiAgICBbQ29sdW1uVHlwZS5DVVNUT01dOiBbJ2N1c3RvbUZpbHRlckNoaXBWYWx1ZScsICdjdXN0b21UYWJsZUZpbHRlckNlbGwnLCAnY3VzdG9tVGFibGVDZWxsJywgJ2RlZmF1bHRDdXN0b21WYWx1ZSddLFxuICAgIFtDb2x1bW5UeXBlLlNUUklOR106IFsnc3RyaW5nRmlsdGVyQ2hpcFZhbHVlJywgJ3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCcsICdzdHJpbmdUYWJsZUNlbGwnLCAnZGVmYXVsdFN0cmluZ1ZhbHVlJ10sXG4gIH1cbiAgY2hpcFRlbXBsYXRlczogUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4+ID0ge31cblxuICB0YWJsZUlkU3VmZml4OiBBcnJheTxzdHJpbmc+ID0gWydJZEZpbHRlclZpZXdDZWxsJywgJ0lkVGFibGVGaWx0ZXJDZWxsJywgJ0lkVGFibGVDZWxsJ11cbiAgdGFibGVUZW1wbGF0ZU5hbWVzOiBSZWNvcmQ8Q29sdW1uVHlwZSwgQXJyYXk8c3RyaW5nPj4gPSB7XG4gICAgW0NvbHVtblR5cGUuREFURV06IFsnZGF0ZUZpbHRlclZpZXdDZWxsJywgJ2RhdGVUYWJsZUZpbHRlckNlbGwnLCAnZGF0ZVRhYmxlQ2VsbCcsICdkZWZhdWx0RGF0ZVZhbHVlJ10sXG4gICAgW0NvbHVtblR5cGUuTlVNQkVSXTogWydudW1iZXJGaWx0ZXJWaWV3Q2VsbCcsICdudW1iZXJUYWJsZUZpbHRlckNlbGwnLCAnbnVtYmVyVGFibGVDZWxsJywgJ2RlZmF1bHROdW1iZXJWYWx1ZSddLFxuICAgIFtDb2x1bW5UeXBlLlJFTEFUSVZFX0RBVEVdOiBbXG4gICAgICAncmVsYXRpdmVEYXRlRmlsdGVyVmlld0NlbGwnLFxuICAgICAgJ3JlbGF0aXZlRGF0ZVRhYmxlRmlsdGVyQ2VsbCcsXG4gICAgICAncmVsYXRpdmVEYXRlVGFibGVDZWxsJyxcbiAgICAgICdkZWZhdWx0UmVsYXRpdmVEYXRlVmFsdWUnLFxuICAgIF0sXG4gICAgW0NvbHVtblR5cGUuVFJBTlNMQVRJT05fS0VZXTogW1xuICAgICAgJ3RyYW5zbGF0aW9uS2V5JyxcbiAgICAgICd0cmFuc2xhdGlvbktleVRhYmxlRmlsdGVyQ2VsbCcsXG4gICAgICAndHJhbnNsYXRpb25LZXlUYWJsZUNlbGwnLFxuICAgICAgJ2RlZmF1bHRUcmFuc2xhdGlvbktleVZhbHVlJyxcbiAgICBdLFxuICAgIFtDb2x1bW5UeXBlLkNVU1RPTV06IFsnY3VzdG9tRmlsdGVyVmlld0NlbGwnLCAnY3VzdG9tVGFibGVGaWx0ZXJDZWxsJywgJ2N1c3RvbVRhYmxlQ2VsbCcsICdkZWZhdWx0Q3VzdG9tVmFsdWUnXSxcbiAgICBbQ29sdW1uVHlwZS5TVFJJTkddOiBbJ3N0cmluZ0ZpbHRlclZpZXdDZWxsJywgJ3N0cmluZ1RhYmxlRmlsdGVyQ2VsbCcsICdzdHJpbmdUYWJsZUNlbGwnLCAnZGVmYXVsdFN0cmluZ1ZhbHVlJ10sXG4gIH1cbiAgdGFibGVUZW1wbGF0ZXM6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+PiA9IHt9XG5cbiAgZ2V0VGVtcGxhdGUoXG4gICAgY29sdW1uOiBEYXRhVGFibGVDb2x1bW4sXG4gICAgdGVtcGxhdGVOYW1lczogUmVjb3JkPENvbHVtblR5cGUsIEFycmF5PHN0cmluZz4+LFxuICAgIHRlbXBsYXRlczogUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4+LFxuICAgIGlkU3VmZml4OiBBcnJheTxzdHJpbmc+XG4gICk6IE9ic2VydmFibGU8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+IHtcbiAgICBpZiAoIXRlbXBsYXRlc1tjb2x1bW4uaWRdKSB7XG4gICAgICB0ZW1wbGF0ZXNbY29sdW1uLmlkXSA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGVmYXVsdFRlbXBsYXRlcyQsIHRoaXMucGFyZW50VGVtcGxhdGVzJF0pLnBpcGUoXG4gICAgICAgIG1hcCgoW2R0LCB0XSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IFsuLi4oZHQgPz8gW10pLCAuLi4odCA/PyBbXSldXG4gICAgICAgICAgY29uc3QgY29sdW1uVGVtcGxhdGUgPSBmaW5kVGVtcGxhdGUoXG4gICAgICAgICAgICB0ZW1wbGF0ZXMsXG4gICAgICAgICAgICBpZFN1ZmZpeC5tYXAoKHN1ZmZpeCkgPT4gY29sdW1uLmlkICsgc3VmZml4KVxuICAgICAgICAgICk/LnRlbXBsYXRlXG4gICAgICAgICAgaWYgKGNvbHVtblRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uVGVtcGxhdGVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZpbmRUZW1wbGF0ZSh0ZW1wbGF0ZXMsIHRlbXBsYXRlTmFtZXNbY29sdW1uLmNvbHVtblR5cGVdKT8udGVtcGxhdGUgPz8gbnVsbFxuICAgICAgICB9KSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDUwKVxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGVzW2NvbHVtbi5pZF1cbiAgfVxuXG4gIG9uUmVzZXRGaWxlcnNDbGljaygpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSBbXVxuICAgIHRoaXMuZmlsdGVyZWQuZW1pdChbXSlcbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlQ2hhbmdlZC5lbWl0KHtcbiAgICAgIGZpbHRlcnM6IFtdLFxuICAgIH0pXG4gIH1cblxuICBvbkNoaXBSZW1vdmUoZmlsdGVyOiBGaWx0ZXIpIHtcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5maWx0ZXJzLmZpbHRlcigoZikgPT4gZi52YWx1ZSAhPT0gZmlsdGVyLnZhbHVlKVxuICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnNcbiAgICB0aGlzLmZpbHRlcmVkLmVtaXQoZmlsdGVycylcbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlQ2hhbmdlZC5lbWl0KHtcbiAgICAgIGZpbHRlcnM6IGZpbHRlcnMsXG4gICAgfSlcbiAgfVxuXG4gIG9uRmlsdGVyRGVsZXRlKHJvdzogUm93KSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZmlsdGVycy5maWx0ZXIoKGYpID0+ICEoZi5jb2x1bW5JZCA9PT0gcm93Wydjb2x1bW5JZCddICYmIGYudmFsdWUgPT09IHJvd1sndmFsdWUnXSkpXG4gICAgdGhpcy5maWx0ZXJzID0gZmlsdGVyc1xuICAgIHRoaXMuZmlsdGVyZWQuZW1pdChmaWx0ZXJzKVxuICAgIHRoaXMuY29tcG9uZW50U3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgZmlsdGVyczogZmlsdGVycyxcbiAgICB9KVxuICB9XG5cbiAgZm9jdXNUcmlnZ2VyKCkge1xuICAgIGlmICh0aGlzLnRyaWdnZXI/LmlkID09PSAnb2N4RmlsdGVyVmlld1Nob3dNb3JlJykge1xuICAgICAgdGhpcy50cmlnZ2VyPy5mb2N1cygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFuYWdlQnV0dG9uLmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBzaG93UGFuZWwoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudHJpZ2dlciA9IGV2ZW50LnNyY0VsZW1lbnRcbiAgICB0aGlzLnBhbmVsLnRvZ2dsZShldmVudClcbiAgfVxuXG4gIGdldENvbHVtbkZvckZpbHRlcihmaWx0ZXI6IEZpbHRlciwgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10pIHtcbiAgICByZXR1cm4gY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09PSBmaWx0ZXIuY29sdW1uSWQpXG4gIH1cblxuICByZXNvbHZlRmllbGREYXRhKG9iamVjdDogYW55LCBrZXk6IGFueSkge1xuICAgIHJldHVybiBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKG9iamVjdCwga2V5KVxuICB9XG5cbiAgZ2V0Um93T2JqZWN0RnJvbUZpdGVyRGF0YShmaWx0ZXI6IEZpbHRlcikge1xuICAgIHJldHVybiB7XG4gICAgICBbZmlsdGVyLmNvbHVtbklkXTogZmlsdGVyLnZhbHVlLFxuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbnMkIHwgYXN5bmMgYXMgY29sdW1uc1wiPlxuICA8ZGl2ICpuZ0lmPVwiZmlsdGVycyQgfCBhc3luYyBhcyBmaWx0ZXJzXCIgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheU1vZGUgPT09ICdjaGlwcyc7IGVsc2Ugbm9DaGlwc0NvbnRlbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm9jeElmQnJlYWtwb2ludD1cIidkZXNrdG9wJzsgZWxzZVRlbXBsYXRlOiBub0NoaXBzQ29udGVudFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0RGlzcGxheWVkQ2hpcHMoZmlsdGVycywgY29sdW1ucykgYXMgc2VsZWN0ZWRGaWx0ZXJzXCI+XG4gICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAjY2hpcEZpbHRlclJlc2V0QnV0dG9uXG4gICAgICAgICAgICBpZD1cIm9jeEZpbHRlclZpZXdSZXNldFwiXG4gICAgICAgICAgICAob25DbGljayk9XCJvblJlc2V0RmlsZXJzQ2xpY2soKVwiXG4gICAgICAgICAgICBpY29uPVwicGkgcGktZXJhc2VyXCJcbiAgICAgICAgICAgIHBUb29sdGlwPVwie3sgJ09DWF9GSUxURVJfVklFVy5SRVNFVF9GSUxURVJTX0JVVFRPTi5ERVRBSUwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICB0b29sdGlwRXZlbnQ9XCJob3ZlclwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidPQ1hfRklMVEVSX1ZJRVcuUkVTRVRfRklMVEVSU19CVVRUT04uQVJJQV9MQUJFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJzLmxlbmd0aCA8PSAwXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiX2ZpdGxlclZpZXdOb1NlbGVjdGlvbjsgZWxzZSBkZWZhdWx0Tm9GaWx0ZXJzXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2ZpdGxlclZpZXdOb1NlbGVjdGlvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE5vRmlsdGVycz5cbiAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJvY3hGaWx0ZXJWaWV3Tm9GaWx0ZXJzXCI+e3sgJ09DWF9GSUxURVJfVklFVy5OT19GSUxURVJTJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjaGlwVGVtcGxhdGVzJCB8IGFzeW5jKSA/PyB7fSBhcyB0ZW1wbGF0ZXNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBzZWxlY3RlZEZpbHRlcnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtbkZvckZpbHRlcihmaWx0ZXIsIGNvbHVtbnMpIGFzIGNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxwLWNoaXAgW3JlbW92YWJsZV09XCJ0cnVlXCIgKG9uUmVtb3ZlKT1cIm9uQ2hpcFJlbW92ZShmaWx0ZXIpXCIgW3N0eWxlQ2xhc3NdPVwiY2hpcFN0eWxlQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJfZmlsdGVyVmlld0NoaXBDb250ZW50OyBlbHNlIGNoaXBDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfZmlsdGVyVmlld0NoaXBDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZVRlbXBsYXRlczogdGVtcGxhdGVzLFxuICAgICAgICAgICAgICAgIHRydXRoeVRlbXBsYXRlOiB0cnV0aHlUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZVRlbXBsYXRlOiBjaGlwVGVtcGxhdGVcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hpcENvbnRlbnRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbnMkIHwgYXN5bmMgYXMgY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtY2hpcC10ZXh0IGZsZXggZmxleC1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgID57e2NvbHVtbj8ubmFtZUtleSA/PyAnJyB8IHRyYW5zbGF0ZSB9fTo8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLkVRVUFMIHx8ICFmaWx0ZXIuZmlsdGVyVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczogdGVtcGxhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGUuVFJVVEhZXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRydXRoeVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvcC1jaGlwPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkRmlsdGVycy5sZW5ndGggPCBmaWx0ZXJzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8cC1jaGlwXG4gICAgICAgICAgICAgICAgI3Nob3dNb3JlQ2hpcFxuICAgICAgICAgICAgICAgIGlkPVwib2N4RmlsdGVyVmlld1Nob3dNb3JlXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93UGFuZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBmaWx0ZXItdmlldy1mb2N1c2FibGVcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNob3dQYW5lbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJzaG93UGFuZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIl9maWx0ZXJWaWV3U2hvd01vcmVDaGlwOyBlbHNlIHNob3dNb3JlQ2hpcFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9maWx0ZXJWaWV3U2hvd01vcmVDaGlwXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IGZpbHRlcnMubGVuZ3RoIC0gc2VsZWN0ZWRGaWx0ZXJzLmxlbmd0aFxuICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dNb3JlQ2hpcFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNoaXAtdGV4dCBmbGV4IGZsZXgtbm93cmFwXCI+ICt7e2ZpbHRlcnMubGVuZ3RoIC0gc2VsZWN0ZWRGaWx0ZXJzLmxlbmd0aH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGFibGVQYW5lbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3AtY2hpcD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjbm9DaGlwc0NvbnRlbnQ+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgI21hbmFnZUJ1dHRvblxuICAgICAgICBpZD1cIm9jeEZpbHRlclZpZXdNYW5hZ2VcIlxuICAgICAgICAob25DbGljayk9XCJzaG93UGFuZWwoJGV2ZW50KVwiXG4gICAgICAgIGljb249XCJwaSBwaS1zbGlkZXJzLWhcIlxuICAgICAgICBsYWJlbD1cInt7ICdPQ1hfRklMVEVSX1ZJRVcuTUFOQUdFX0ZJTFRFUlNfQlVUVE9OLkxBQkVMJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHBUb29sdGlwPVwie3sgJ09DWF9GSUxURVJfVklFVy5NQU5BR0VfRklMVEVSU19CVVRUT04uREVUQUlMJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgIHRvb2x0aXBFdmVudD1cImhvdmVyXCJcbiAgICAgICAgW2JhZGdlXT1cImZpbHRlcnMubGVuZ3RoLnRvU3RyaW5nKClcIlxuICAgICAgICBbYXJpYUxhYmVsXT1cIidPQ1hfRklMVEVSX1ZJRVcuTUFOQUdFX0ZJTFRFUlNfQlVUVE9OLkFSSUFfTEFCRUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgID48L3AtYnV0dG9uPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUYWJsZVBhbmVsXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjZmlsdGVyVGFibGVQYW5lbD5cbiAgICAgIDxwLW92ZXJsYXlQYW5lbCAqbmdJZj1cInRhYmxlVGVtcGxhdGVzJCB8IGFzeW5jIGFzIHRlbXBsYXRlc1wiICNvcCBbc3R5bGVdPVwicGFuZWxTdHlsZVwiIChvbkhpZGUpPVwiZm9jdXNUcmlnZ2VyKClcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IHBGb2N1c1RyYXA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtMnhsIGZvbnQtbWVkaXVtXCI+e3snT0NYX0ZJTFRFUl9WSUVXLlBBTkVMX1RJVExFJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xuICAgICAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwib2N4RmlsdGVyVmlld092ZXJsYXlSZXNldFwiXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvblJlc2V0RmlsZXJzQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktZXJhc2VyXCJcbiAgICAgICAgICAgICAgICAgIHBUb29sdGlwPVwie3sgJ09DWF9GSUxURVJfVklFVy5SRVNFVF9GSUxURVJTX0JVVFRPTi5ERVRBSUwnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgICB0b29sdGlwRXZlbnQ9XCJob3ZlclwiXG4gICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidPQ1hfRklMVEVSX1ZJRVcuUkVTRVRfRklMVEVSU19CVVRUT04uQVJJQV9MQUJFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG9jeC1kYXRhLXRhYmxlXG4gICAgICAgICAgICAgIGlkPVwib2N4RmlsdGVyVmlld0RhdGFUYWJsZVwiXG4gICAgICAgICAgICAgIFtyb3dzXT1cIihjb2x1bW5GaWx0ZXJEYXRhUm93cyQgfCBhc3luYykgPz8gW11cIlxuICAgICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5GaWx0ZXJUYWJsZUNvbHVtbnNcIlxuICAgICAgICAgICAgICBbZW1wdHlSZXN1bHRzTWVzc2FnZV09XCInT0NYX0ZJTFRFUl9WSUVXLk5PX0ZJTFRFUlMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3BhZ2luYXRvcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFt0YWJsZVN0eWxlXT1cInRhYmxlU3R5bGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29sdW1uSWRDZWxsXCIgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJsZVZhbHVlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB0ZW1wbGF0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHJvd09iamVjdDogcm93T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwidmFsdWVJZENlbGxcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRhYmxlVmFsdWVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHRlbXBsYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgcm93T2JqZWN0OiByb3dPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJhY3Rpb25zSWRDZWxsXCIgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1kYW5nZXIgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ09DWF9GSUxURVJfVklFVy5UQUJMRS5SRU1PVkVfRklMVEVSX1RJVExFJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09DWF9GSUxURVJfVklFVy5UQUJMRS5SRU1PVkVfRklMVEVSX0FSSUFfTEFCRUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmlsdGVyRGVsZXRlKHJvd09iamVjdClcIlxuICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9vY3gtZGF0YS10YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvcC1vdmVybGF5UGFuZWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICN0YWJsZVZhbHVlVGVtcGxhdGUgbGV0LXRlbXBsYXRlcz1cInRlbXBsYXRlc1wiIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cImNvbHVtbi5pZCAhPT0gJ3ZhbHVlJ1wiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVzW2NvbHVtbi5pZF1cIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICByb3dPYmplY3Q6IHJvd09iamVjdCxcbiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgICAgfVwiXG4gID5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uaWQgPT09ICd2YWx1ZSdcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIiFyb3dPYmplY3RbJ2NvbHVtbkZpbHRlclR5cGUnXSB8fCByb3dPYmplY3RbJ2NvbHVtbkZpbHRlclR5cGUnXSA9PT0gRmlsdGVyVHlwZS5FUVVBTFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZXNbcm93T2JqZWN0Wydjb2x1bW5JZCddXVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3dPYmplY3Q6IHJvd09iamVjdCxcbiAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW5cbiAgICAgICAgICAgIH1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cInJvd09iamVjdFsnY29sdW1uRmlsdGVyVHlwZSddID09PSBGaWx0ZXJUeXBlLlRSVVRIWVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cnV0aHlUZW1wbGF0ZVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICB2YWx1ZTogcmVzb2x2ZUZpZWxkRGF0YShyb3dPYmplY3QsIGNvbHVtbi5pZClcbiAgICAgIH1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NoaXBUZW1wbGF0ZSBsZXQtdGVtcGxhdGVzPVwidGVtcGxhdGVzXCIgbGV0LWZpbHRlcj1cImZpbHRlclwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwidGVtcGxhdGVzW2NvbHVtbi5pZF0gYXMgdGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgcm93T2JqZWN0OiBnZXRSb3dPYmplY3RGcm9tRml0ZXJEYXRhKGZpbHRlciksXG4gICAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICAgIH1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cnV0aHlUZW1wbGF0ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVcIj4ge3snT0NYX0ZJTFRFUl9WSUVXLkZJTFRFUl9ZRVMnIHwgdHJhbnNsYXRlfX0gPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdmFsdWVcIj4ge3snT0NYX0ZJTFRFUl9WSUVXLkZJTFRFUl9OTycgfCB0cmFuc2xhdGV9fSA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0U3RyaW5nVmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyPiB7eyByZXNvbHZlRmllbGREYXRhKHJvd09iamVjdCwgY29sdW1uLmlkKX19IDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImRlZmF1bHROdW1iZXJWYWx1ZVwiIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXI+IHt7IHJlc29sdmVGaWVsZERhdGEocm93T2JqZWN0LCBjb2x1bW4uaWQpIHwgbnVtYmVyIH19IDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImRlZmF1bHRDdXN0b21WYWx1ZVwiIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+IDwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0RGF0ZVZhbHVlXCIgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lcj4ge3sgcmVzb2x2ZUZpZWxkRGF0YShyb3dPYmplY3QsIGNvbHVtbi5pZCkgfCBkYXRlOiBjb2x1bW4uZGF0ZUZvcm1hdCA/PyAnbWVkaXVtJyB9fSA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0UmVsYXRpdmVEYXRlVmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyPlxuICAgIHt7ICdPQ1hfREFUQV9UQUJMRS5FRElURUQnIHwgdHJhbnNsYXRlIH19IHt7IHJlc29sdmVGaWVsZERhdGEocm93T2JqZWN0LCBjb2x1bW4uaWQpIHwgdGltZWFnbyB9fVxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0VHJhbnNsYXRpb25LZXlWYWx1ZVwiIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXI+IHt7IHJlc29sdmVGaWVsZERhdGEocm93T2JqZWN0LCBjb2x1bW4uaWQpIHwgdHJhbnNsYXRlIH19PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWFjY2VsZXJhdG9yL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXItdmlldy9maWx0ZXItdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci12aWV3L2ZpbHRlci12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7Ozs7Ozs7Ozs7O0FBcUJ2QyxNQUFNLE9BQU8sbUJBQW1CO0lBTGhDO1FBTUUsZUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUN2QixlQUFVLEdBQUcsVUFBVSxDQUFBO1FBQ3ZCLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVyxFQUFFLENBQUMsQ0FBQTtRQVE1QyxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQW9CLEVBQUUsQ0FBQyxDQUFBO1FBc0I1QyxnQkFBVyxHQUEwQixRQUFRLENBQUE7UUFDN0MseUJBQW9CLEdBQWdFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDdkcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM3QixtQkFBYyxHQUFHLEVBQUUsQ0FBQTtRQUNuQixlQUFVLEdBQTZCLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFBO1FBQy9ELGVBQVUsR0FBNkIsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUE7UUFFNUQsYUFBUSxHQUEyQixJQUFJLFlBQVksRUFBRSxDQUFBO1FBQ3JELDBCQUFxQixHQUEyQyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBRTVGLDZCQUF3QixHQUFzQjtZQUM1QztnQkFDRSxFQUFFLEVBQUUsUUFBUTtnQkFDWixVQUFVLEVBQUUsVUFBVSxDQUFDLGVBQWU7Z0JBQ3RDLE9BQU8sRUFBRSxtQ0FBbUM7YUFDN0M7WUFDRCxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFO1lBQ3RGO2dCQUNFLEVBQUUsRUFBRSxTQUFTO2dCQUNiLFVBQVUsRUFBRSxVQUFVLENBQUMsTUFBTTtnQkFDN0IsT0FBTyxFQUFFLCtCQUErQjthQUN6QztTQUNGLENBQUE7UUE4Q0Qsc0JBQWlCLEdBQTBELElBQUksZUFBZSxDQUU1RixTQUFTLENBQUMsQ0FBQTtRQU1aLHFCQUFnQixHQUFpRSxJQUFJLGVBQWUsQ0FFbEcsU0FBUyxDQUFDLENBQUE7UUFzQlosaUJBQVksR0FBa0IsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDbEYsc0JBQWlCLEdBQXNDO1lBQ3JELENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixDQUFDO1lBQ3RHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUM7WUFDaEgsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQzFCLDZCQUE2QjtnQkFDN0IsNkJBQTZCO2dCQUM3Qix1QkFBdUI7Z0JBQ3ZCLDBCQUEwQjthQUMzQjtZQUNELENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUM1QiwrQkFBK0I7Z0JBQy9CLCtCQUErQjtnQkFDL0IseUJBQXlCO2dCQUN6Qiw0QkFBNEI7YUFDN0I7WUFDRCxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixDQUFDO1lBQ2hILENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUM7U0FDakgsQ0FBQTtRQUNELGtCQUFhLEdBQXdELEVBQUUsQ0FBQTtRQUV2RSxrQkFBYSxHQUFrQixDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ3ZGLHVCQUFrQixHQUFzQztZQUN0RCxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQztZQUNyRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixDQUFDO1lBQy9HLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUMxQiw0QkFBNEI7Z0JBQzVCLDZCQUE2QjtnQkFDN0IsdUJBQXVCO2dCQUN2QiwwQkFBMEI7YUFDM0I7WUFDRCxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRTtnQkFDNUIsZ0JBQWdCO2dCQUNoQiwrQkFBK0I7Z0JBQy9CLHlCQUF5QjtnQkFDekIsNEJBQTRCO2FBQzdCO1lBQ0QsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQztZQUMvRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixDQUFDO1NBQ2hILENBQUE7UUFDRCxtQkFBYyxHQUF3RCxFQUFFLENBQUE7S0EwRnpFO0lBblFDLElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBZTtRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBRUQsSUFDSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUF3QjtRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN6QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQTtRQUNwSCxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQy9DLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1RSxDQUFBO1FBRUQsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQ3hFLElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUNsQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQ3RGLENBQ0YsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BHLENBQUM7SUE0QkQsUUFBUTtRQUNOLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDN0UsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUN6QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDMUMsT0FBTyxPQUFPO2lCQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNULE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBQ3hELElBQUksQ0FBQyxZQUFZO29CQUFFLE9BQU8sU0FBUyxDQUFBO2dCQUNuQyxPQUFPO29CQUNMLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDOUIsTUFBTSxFQUFFLFlBQVksQ0FBQyxPQUFPO29CQUM1QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7b0JBQ2QsYUFBYSxFQUFFLFlBQVksQ0FBQyxFQUFFO2lCQUNHLENBQUE7WUFDckMsQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBZ0MsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUM7aUJBQzVELEtBQUssRUFBRTtpQkFDUCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO1FBQzVGLENBQUMsQ0FBQyxDQUNILENBQUE7UUFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN0QixDQUFDLENBQUE7SUFDSixDQUFDO0lBT0QsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUE7SUFDbkMsQ0FBQztJQUdELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFBO0lBQ25DLENBQUM7SUFHRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQTtJQUNwQyxDQUFDO0lBS0QsSUFDSSxnQkFBZ0IsQ0FBQyxLQUEyQztRQUM5RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFLRCxJQUNJLFNBQVMsQ0FBQyxLQUFrRDtRQUM5RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2pDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN0QixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUN2QixLQUFLLHVCQUF1QjtvQkFDMUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUE7b0JBQzFDLE1BQUs7Z0JBQ1AsS0FBSyx1QkFBdUI7b0JBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFBO29CQUMxQyxNQUFLO2dCQUNQLEtBQUssd0JBQXdCO29CQUMzQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQTtvQkFDM0MsTUFBSztZQUNULENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUErQ0QsV0FBVyxDQUNULE1BQXVCLEVBQ3ZCLGFBQWdELEVBQ2hELFNBQThELEVBQzlELFFBQXVCO1FBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDMUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3hGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDL0MsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUNqQyxTQUFTLEVBQ1QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FDN0MsRUFBRSxRQUFRLENBQUE7Z0JBQ1gsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsT0FBTyxjQUFjLENBQUE7Z0JBQ3ZCLENBQUM7Z0JBQ0QsT0FBTyxZQUFZLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFBO1lBQ3BGLENBQUMsQ0FBQyxFQUNGLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FDakIsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxPQUFPO1NBQ2pCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBUTtRQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5RyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxPQUFPO1NBQ2pCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUE7UUFDdkIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVU7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFBO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzFCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFjLEVBQUUsT0FBMEI7UUFDM0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWEsRUFBRSxPQUEwQjtRQUNqRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUVELGdCQUFnQixDQUFDLE1BQVcsRUFBRSxHQUFRO1FBQ3BDLE9BQU8sV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQseUJBQXlCLENBQUMsTUFBYztRQUN0QyxPQUFPO1lBQ0wsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUs7U0FDaEMsQ0FBQTtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFRO1FBQzNCLE9BQU87WUFDTCxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDVixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQVcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUM7U0FDL0MsQ0FBQTtJQUNILENBQUM7OEdBdFFVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLDZaQWtGbkIsWUFBWSxxS0FzQlQsYUFBYSxnRENsSjdCLDhyVkF3T0E7OzJGRDlMYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCOzhCQVN2QixPQUFPO3NCQURWLEtBQUs7Z0JBU0YsT0FBTztzQkFEVixLQUFLO2dCQXFCRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkF5Q2tCLEtBQUs7c0JBQTdCLFNBQVM7dUJBQUMsWUFBWTtnQkFDSSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBc0JyQixnQkFBZ0I7c0JBRG5CLFlBQVk7dUJBQUMsYUFBYTtnQkFTdkIsU0FBUztzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBGaWx0ZXIsIEZpbHRlclR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbC9maWx0ZXIubW9kZWwnXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXRhYmxlLWNvbHVtbi5tb2RlbCdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBtYXAgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gJy4uLy4uL21vZGVsL2NvbHVtbi10eXBlLm1vZGVsJ1xuaW1wb3J0IHsgUHJpbWVUZW1wbGF0ZSB9IGZyb20gJ3ByaW1lbmcvYXBpJ1xuaW1wb3J0IHsgZmluZFRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGVtcGxhdGUudXRpbHMnXG5pbXBvcnQgeyBPYmplY3RVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL29iamVjdHV0aWxzJ1xuaW1wb3J0IHsgbGltaXQgfSBmcm9tICcuLi8uLi91dGlscy9maWx0ZXIudXRpbHMnXG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCdcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdwcmltZW5nL2J1dHRvbidcblxuZXhwb3J0IHR5cGUgRmlsdGVyVmlld0Rpc3BsYXlNb2RlID0gJ2NoaXBzJyB8ICdidXR0b24nXG5leHBvcnQgdHlwZSBGaWx0ZXJWaWV3Um93RGlzcGxheURhdGEgPSB7XG4gIGlkOiBzdHJpbmdcbiAgY29sdW1uOiBzdHJpbmdcbiAgdmFsdWU6IHVua25vd25cbn1cbmV4cG9ydCB0eXBlIEZpbHRlclZpZXdSb3dEZXRhaWxEYXRhID0gRmlsdGVyVmlld1Jvd0Rpc3BsYXlEYXRhICYge1xuICB2YWx1ZUNvbHVtbklkOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJWaWV3Q29tcG9uZW50U3RhdGUge1xuICBmaWx0ZXJzPzogRmlsdGVyW11cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2N4LWZpbHRlci12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIENvbHVtblR5cGUgPSBDb2x1bW5UeXBlXG4gIEZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlXG4gIGZpbHRlcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJbXT4oW10pXG4gIEBJbnB1dCgpXG4gIGdldCBmaWx0ZXJzKCk6IEZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGZpbHRlcnModmFsdWU6IEZpbHRlcltdKSB7XG4gICAgdGhpcy5maWx0ZXJzJC5uZXh0KHZhbHVlKVxuICB9XG4gIGNvbHVtbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhVGFibGVDb2x1bW5bXT4oW10pXG4gIEBJbnB1dCgpXG4gIGdldCBjb2x1bW5zKCk6IERhdGFUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGNvbHVtbnModmFsdWU6IERhdGFUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5jb2x1bW5zJC5uZXh0KHZhbHVlKVxuICAgIGNvbnN0IGNoaXBPYnMgPSB2YWx1ZS5tYXAoKGMpID0+IHRoaXMuZ2V0VGVtcGxhdGUoYywgdGhpcy5jaGlwVGVtcGxhdGVOYW1lcywgdGhpcy5jaGlwVGVtcGxhdGVzLCB0aGlzLmNoaXBJZFN1ZmZpeCkpXG4gICAgdGhpcy5jaGlwVGVtcGxhdGVzJCA9IGNvbWJpbmVMYXRlc3QoY2hpcE9icykucGlwZShcbiAgICAgIG1hcCgodmFsdWVzKSA9PiBPYmplY3QuZnJvbUVudHJpZXModmFsdWUubWFwKChjLCBpKSA9PiBbYy5pZCwgdmFsdWVzW2ldXSkpKVxuICAgIClcblxuICAgIGNvbnN0IHRhYmxlVGVtcGxhdGVDb2x1bW5zID0gdmFsdWUuY29uY2F0KHRoaXMuY29sdW1uRmlsdGVyVGFibGVDb2x1bW5zKVxuICAgIHRoaXMudGFibGVUZW1wbGF0ZXMkID0gY29tYmluZUxhdGVzdChcbiAgICAgIHRhYmxlVGVtcGxhdGVDb2x1bW5zLm1hcCgoYykgPT5cbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZShjLCB0aGlzLnRhYmxlVGVtcGxhdGVOYW1lcywgdGhpcy50YWJsZVRlbXBsYXRlcywgdGhpcy50YWJsZUlkU3VmZml4KVxuICAgICAgKVxuICAgICkucGlwZShtYXAoKHZhbHVlcykgPT4gT2JqZWN0LmZyb21FbnRyaWVzKHRhYmxlVGVtcGxhdGVDb2x1bW5zLm1hcCgoYywgaSkgPT4gW2MuaWQsIHZhbHVlc1tpXV0pKSkpXG4gIH1cblxuICBjb2x1bW5GaWx0ZXJEYXRhUm93cyQ6IE9ic2VydmFibGU8RmlsdGVyVmlld1Jvd0Rpc3BsYXlEYXRhW10+IHwgdW5kZWZpbmVkXG5cbiAgQElucHV0KCkgZGlzcGxheU1vZGU6IEZpbHRlclZpZXdEaXNwbGF5TW9kZSA9ICdidXR0b24nXG4gIEBJbnB1dCgpIHNlbGVjdERpc3BsYXllZENoaXBzOiAoZmlsdGVyczogRmlsdGVyW10sIGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtbltdKSA9PiBGaWx0ZXJbXSA9IChmaWx0ZXJzKSA9PlxuICAgIGxpbWl0KGZpbHRlcnMsIDMsIHsgcmV2ZXJzZTogdHJ1ZSB9KVxuICBASW5wdXQoKSBjaGlwU3R5bGVDbGFzcyA9ICcnXG4gIEBJbnB1dCgpIHRhYmxlU3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSA9IHsgJ21heC1oZWlnaHQnOiAnNTB2aCcgfVxuICBASW5wdXQoKSBwYW5lbFN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gPSB7ICdtYXgtd2lkdGgnOiAnOTAlJyB9XG5cbiAgQE91dHB1dCgpIGZpbHRlcmVkOiBFdmVudEVtaXR0ZXI8RmlsdGVyW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBjb21wb25lbnRTdGF0ZUNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxGaWx0ZXJWaWV3Q29tcG9uZW50U3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgY29sdW1uRmlsdGVyVGFibGVDb2x1bW5zOiBEYXRhVGFibGVDb2x1bW5bXSA9IFtcbiAgICB7XG4gICAgICBpZDogJ2NvbHVtbicsXG4gICAgICBjb2x1bW5UeXBlOiBDb2x1bW5UeXBlLlRSQU5TTEFUSU9OX0tFWSxcbiAgICAgIG5hbWVLZXk6ICdPQ1hfRklMVEVSX1ZJRVcuVEFCTEUuQ09MVU1OX05BTUUnLFxuICAgIH0sXG4gICAgeyBpZDogJ3ZhbHVlJywgY29sdW1uVHlwZTogQ29sdW1uVHlwZS5TVFJJTkcsIG5hbWVLZXk6ICdPQ1hfRklMVEVSX1ZJRVcuVEFCTEUuVkFMVUUnIH0sXG4gICAge1xuICAgICAgaWQ6ICdhY3Rpb25zJyxcbiAgICAgIGNvbHVtblR5cGU6IENvbHVtblR5cGUuU1RSSU5HLFxuICAgICAgbmFtZUtleTogJ09DWF9GSUxURVJfVklFVy5UQUJMRS5BQ1RJT05TJyxcbiAgICB9LFxuICBdXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJEYXRhUm93cyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbHRlcnMkLCB0aGlzLmNvbHVtbnMkXSkucGlwZShcbiAgICAgIG1hcCgoW2ZpbHRlcnMsIGNvbHVtbnNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbklkcyA9IGNvbHVtbnMubWFwKChjKSA9PiBjLmlkKVxuICAgICAgICByZXR1cm4gZmlsdGVyc1xuICAgICAgICAgIC5tYXAoKGYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uRm9yRmlsdGVyKGYsIGNvbHVtbnMpXG4gICAgICAgICAgICBpZiAoIWZpbHRlckNvbHVtbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IGAke2YuY29sdW1uSWR9LSR7Zi52YWx1ZX1gLFxuICAgICAgICAgICAgICBjb2x1bW46IGZpbHRlckNvbHVtbi5uYW1lS2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogZi52YWx1ZSxcbiAgICAgICAgICAgICAgdmFsdWVDb2x1bW5JZDogZmlsdGVyQ29sdW1uLmlkLFxuICAgICAgICAgICAgfSBzYXRpc2ZpZXMgRmlsdGVyVmlld1Jvd0RldGFpbERhdGFcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIoKHYpOiB2IGlzIEZpbHRlclZpZXdSb3dEZXRhaWxEYXRhID0+IHYgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAuc2xpY2UoKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBjb2x1bW5JZHMuaW5kZXhPZihhLnZhbHVlQ29sdW1uSWQpIC0gY29sdW1uSWRzLmluZGV4T2YoYi52YWx1ZUNvbHVtbklkKSlcbiAgICAgIH0pXG4gICAgKVxuICAgIHRoaXMuY29tcG9uZW50U3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgZmlsdGVyczogdGhpcy5maWx0ZXJzLFxuICAgIH0pXG4gIH1cblxuICBAVmlld0NoaWxkKE92ZXJsYXlQYW5lbCkgcGFuZWwhOiBPdmVybGF5UGFuZWxcbiAgQFZpZXdDaGlsZCgnbWFuYWdlQnV0dG9uJykgbWFuYWdlQnV0dG9uITogQnV0dG9uXG4gIHRyaWdnZXI6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkXG5cbiAgZml0bGVyVmlld05vU2VsZWN0aW9uOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfZml0bGVyVmlld05vU2VsZWN0aW9uKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpdGxlclZpZXdOb1NlbGVjdGlvblxuICB9XG5cbiAgZmlsdGVyVmlld0NoaXBDb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfZmlsdGVyVmlld0NoaXBDb250ZW50KCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclZpZXdDaGlwQ29udGVudFxuICB9XG5cbiAgZmlsdGVyVmlld1Nob3dNb3JlQ2hpcDogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX2ZpbHRlclZpZXdTaG93TW9yZUNoaXAoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyVmlld1Nob3dNb3JlQ2hpcFxuICB9XG5cbiAgZGVmYXVsdFRlbXBsYXRlcyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpXG4gIEBWaWV3Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSlcbiAgc2V0IGRlZmF1bHRUZW1wbGF0ZXModmFsdWU6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlcyQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIHBhcmVudFRlbXBsYXRlcyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCBudWxsIHwgdW5kZWZpbmVkPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgbnVsbCB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZClcbiAgQElucHV0KClcbiAgc2V0IHRlbXBsYXRlcyh2YWx1ZTogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucGFyZW50VGVtcGxhdGVzJC5uZXh0KHZhbHVlKVxuICAgIHZhbHVlPy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBzd2l0Y2ggKGl0ZW0uZ2V0VHlwZSgpKSB7XG4gICAgICAgIGNhc2UgJ2ZpdGxlclZpZXdOb1NlbGVjdGlvbic6XG4gICAgICAgICAgdGhpcy5maXRsZXJWaWV3Tm9TZWxlY3Rpb24gPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZmlsdGVyVmlld0NoaXBDb250ZW50JzpcbiAgICAgICAgICB0aGlzLmZpbHRlclZpZXdDaGlwQ29udGVudCA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdmaWx0ZXJWaWV3U2hvd01vcmVDaGlwJzpcbiAgICAgICAgICB0aGlzLmZpbHRlclZpZXdTaG93TW9yZUNoaXAgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgY2hpcFRlbXBsYXRlcyQ6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgVGVtcGxhdGVSZWY8YW55PiB8IG51bGw+PiB8IHVuZGVmaW5lZFxuICB0YWJsZVRlbXBsYXRlcyQ6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgVGVtcGxhdGVSZWY8YW55PiB8IG51bGw+PiB8IHVuZGVmaW5lZFxuXG4gIGNoaXBJZFN1ZmZpeDogQXJyYXk8c3RyaW5nPiA9IFsnSWRGaWx0ZXJDaGlwJywgJ0lkVGFibGVGaWx0ZXJDZWxsJywgJ0lkVGFibGVDZWxsJ11cbiAgY2hpcFRlbXBsYXRlTmFtZXM6IFJlY29yZDxDb2x1bW5UeXBlLCBBcnJheTxzdHJpbmc+PiA9IHtcbiAgICBbQ29sdW1uVHlwZS5EQVRFXTogWydkYXRlRmlsdGVyQ2hpcFZhbHVlJywgJ2RhdGVUYWJsZUZpbHRlckNlbGwnLCAnZGF0ZVRhYmxlQ2VsbCcsICdkZWZhdWx0RGF0ZVZhbHVlJ10sXG4gICAgW0NvbHVtblR5cGUuTlVNQkVSXTogWydudW1iZXJGaWx0ZXJDaGlwVmFsdWUnLCAnbnVtYmVyVGFibGVGaWx0ZXJDZWxsJywgJ251bWJlclRhYmxlQ2VsbCcsICdkZWZhdWx0TnVtYmVyVmFsdWUnXSxcbiAgICBbQ29sdW1uVHlwZS5SRUxBVElWRV9EQVRFXTogW1xuICAgICAgJ3JlbGF0aXZlRGF0ZUZpbHRlckNoaXBWYWx1ZScsXG4gICAgICAncmVsYXRpdmVEYXRlVGFibGVGaWx0ZXJDZWxsJyxcbiAgICAgICdyZWxhdGl2ZURhdGVUYWJsZUNlbGwnLFxuICAgICAgJ2RlZmF1bHRSZWxhdGl2ZURhdGVWYWx1ZScsXG4gICAgXSxcbiAgICBbQ29sdW1uVHlwZS5UUkFOU0xBVElPTl9LRVldOiBbXG4gICAgICAndHJhbnNsYXRpb25LZXlGaWx0ZXJDaGlwVmFsdWUnLFxuICAgICAgJ3RyYW5zbGF0aW9uS2V5VGFibGVGaWx0ZXJDZWxsJyxcbiAgICAgICd0cmFuc2xhdGlvbktleVRhYmxlQ2VsbCcsXG4gICAgICAnZGVmYXVsdFRyYW5zbGF0aW9uS2V5VmFsdWUnLFxuICAgIF0sXG4gICAgW0NvbHVtblR5cGUuQ1VTVE9NXTogWydjdXN0b21GaWx0ZXJDaGlwVmFsdWUnLCAnY3VzdG9tVGFibGVGaWx0ZXJDZWxsJywgJ2N1c3RvbVRhYmxlQ2VsbCcsICdkZWZhdWx0Q3VzdG9tVmFsdWUnXSxcbiAgICBbQ29sdW1uVHlwZS5TVFJJTkddOiBbJ3N0cmluZ0ZpbHRlckNoaXBWYWx1ZScsICdzdHJpbmdUYWJsZUZpbHRlckNlbGwnLCAnc3RyaW5nVGFibGVDZWxsJywgJ2RlZmF1bHRTdHJpbmdWYWx1ZSddLFxuICB9XG4gIGNoaXBUZW1wbGF0ZXM6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+PiA9IHt9XG5cbiAgdGFibGVJZFN1ZmZpeDogQXJyYXk8c3RyaW5nPiA9IFsnSWRGaWx0ZXJWaWV3Q2VsbCcsICdJZFRhYmxlRmlsdGVyQ2VsbCcsICdJZFRhYmxlQ2VsbCddXG4gIHRhYmxlVGVtcGxhdGVOYW1lczogUmVjb3JkPENvbHVtblR5cGUsIEFycmF5PHN0cmluZz4+ID0ge1xuICAgIFtDb2x1bW5UeXBlLkRBVEVdOiBbJ2RhdGVGaWx0ZXJWaWV3Q2VsbCcsICdkYXRlVGFibGVGaWx0ZXJDZWxsJywgJ2RhdGVUYWJsZUNlbGwnLCAnZGVmYXVsdERhdGVWYWx1ZSddLFxuICAgIFtDb2x1bW5UeXBlLk5VTUJFUl06IFsnbnVtYmVyRmlsdGVyVmlld0NlbGwnLCAnbnVtYmVyVGFibGVGaWx0ZXJDZWxsJywgJ251bWJlclRhYmxlQ2VsbCcsICdkZWZhdWx0TnVtYmVyVmFsdWUnXSxcbiAgICBbQ29sdW1uVHlwZS5SRUxBVElWRV9EQVRFXTogW1xuICAgICAgJ3JlbGF0aXZlRGF0ZUZpbHRlclZpZXdDZWxsJyxcbiAgICAgICdyZWxhdGl2ZURhdGVUYWJsZUZpbHRlckNlbGwnLFxuICAgICAgJ3JlbGF0aXZlRGF0ZVRhYmxlQ2VsbCcsXG4gICAgICAnZGVmYXVsdFJlbGF0aXZlRGF0ZVZhbHVlJyxcbiAgICBdLFxuICAgIFtDb2x1bW5UeXBlLlRSQU5TTEFUSU9OX0tFWV06IFtcbiAgICAgICd0cmFuc2xhdGlvbktleScsXG4gICAgICAndHJhbnNsYXRpb25LZXlUYWJsZUZpbHRlckNlbGwnLFxuICAgICAgJ3RyYW5zbGF0aW9uS2V5VGFibGVDZWxsJyxcbiAgICAgICdkZWZhdWx0VHJhbnNsYXRpb25LZXlWYWx1ZScsXG4gICAgXSxcbiAgICBbQ29sdW1uVHlwZS5DVVNUT01dOiBbJ2N1c3RvbUZpbHRlclZpZXdDZWxsJywgJ2N1c3RvbVRhYmxlRmlsdGVyQ2VsbCcsICdjdXN0b21UYWJsZUNlbGwnLCAnZGVmYXVsdEN1c3RvbVZhbHVlJ10sXG4gICAgW0NvbHVtblR5cGUuU1RSSU5HXTogWydzdHJpbmdGaWx0ZXJWaWV3Q2VsbCcsICdzdHJpbmdUYWJsZUZpbHRlckNlbGwnLCAnc3RyaW5nVGFibGVDZWxsJywgJ2RlZmF1bHRTdHJpbmdWYWx1ZSddLFxuICB9XG4gIHRhYmxlVGVtcGxhdGVzOiBSZWNvcmQ8c3RyaW5nLCBPYnNlcnZhYmxlPFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPj4gPSB7fVxuXG4gIGdldFRlbXBsYXRlKFxuICAgIGNvbHVtbjogRGF0YVRhYmxlQ29sdW1uLFxuICAgIHRlbXBsYXRlTmFtZXM6IFJlY29yZDxDb2x1bW5UeXBlLCBBcnJheTxzdHJpbmc+PixcbiAgICB0ZW1wbGF0ZXM6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+PixcbiAgICBpZFN1ZmZpeDogQXJyYXk8c3RyaW5nPlxuICApOiBPYnNlcnZhYmxlPFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPiB7XG4gICAgaWYgKCF0ZW1wbGF0ZXNbY29sdW1uLmlkXSkge1xuICAgICAgdGVtcGxhdGVzW2NvbHVtbi5pZF0gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRlZmF1bHRUZW1wbGF0ZXMkLCB0aGlzLnBhcmVudFRlbXBsYXRlcyRdKS5waXBlKFxuICAgICAgICBtYXAoKFtkdCwgdF0pID0+IHtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBbLi4uKGR0ID8/IFtdKSwgLi4uKHQgPz8gW10pXVxuICAgICAgICAgIGNvbnN0IGNvbHVtblRlbXBsYXRlID0gZmluZFRlbXBsYXRlKFxuICAgICAgICAgICAgdGVtcGxhdGVzLFxuICAgICAgICAgICAgaWRTdWZmaXgubWFwKChzdWZmaXgpID0+IGNvbHVtbi5pZCArIHN1ZmZpeClcbiAgICAgICAgICApPy50ZW1wbGF0ZVxuICAgICAgICAgIGlmIChjb2x1bW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtblRlbXBsYXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaW5kVGVtcGxhdGUodGVtcGxhdGVzLCB0ZW1wbGF0ZU5hbWVzW2NvbHVtbi5jb2x1bW5UeXBlXSk/LnRlbXBsYXRlID8/IG51bGxcbiAgICAgICAgfSksXG4gICAgICAgIGRlYm91bmNlVGltZSg1MClcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlc1tjb2x1bW4uaWRdXG4gIH1cblxuICBvblJlc2V0RmlsZXJzQ2xpY2soKSB7XG4gICAgdGhpcy5maWx0ZXJzID0gW11cbiAgICB0aGlzLmZpbHRlcmVkLmVtaXQoW10pXG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICBmaWx0ZXJzOiBbXSxcbiAgICB9KVxuICB9XG5cbiAgb25DaGlwUmVtb3ZlKGZpbHRlcjogRmlsdGVyKSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZmlsdGVycy5maWx0ZXIoKGYpID0+IGYudmFsdWUgIT09IGZpbHRlci52YWx1ZSlcbiAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzXG4gICAgdGhpcy5maWx0ZXJlZC5lbWl0KGZpbHRlcnMpXG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICBmaWx0ZXJzOiBmaWx0ZXJzLFxuICAgIH0pXG4gIH1cblxuICBvbkZpbHRlckRlbGV0ZShyb3c6IFJvdykge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmZpbHRlcnMuZmlsdGVyKChmKSA9PiAhKGYuY29sdW1uSWQgPT09IHJvd1sndmFsdWVDb2x1bW5JZCddICYmIGYudmFsdWUgPT09IHJvd1sndmFsdWUnXSkpXG4gICAgdGhpcy5maWx0ZXJzID0gZmlsdGVyc1xuICAgIHRoaXMuZmlsdGVyZWQuZW1pdChmaWx0ZXJzKVxuICAgIHRoaXMuY29tcG9uZW50U3RhdGVDaGFuZ2VkLmVtaXQoe1xuICAgICAgZmlsdGVyczogZmlsdGVycyxcbiAgICB9KVxuICB9XG5cbiAgZm9jdXNUcmlnZ2VyKCkge1xuICAgIGlmICh0aGlzLnRyaWdnZXI/LmlkID09PSAnb2N4RmlsdGVyVmlld1Nob3dNb3JlJykge1xuICAgICAgdGhpcy50cmlnZ2VyPy5mb2N1cygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFuYWdlQnV0dG9uLmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBzaG93UGFuZWwoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudHJpZ2dlciA9IGV2ZW50LnNyY0VsZW1lbnRcbiAgICB0aGlzLnBhbmVsLnRvZ2dsZShldmVudClcbiAgfVxuXG4gIGdldENvbHVtbkZvckZpbHRlcihmaWx0ZXI6IEZpbHRlciwgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10pIHtcbiAgICByZXR1cm4gY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09PSBmaWx0ZXIuY29sdW1uSWQpXG4gIH1cblxuICBnZXRDb2x1bW4oY29sSWQ6IHN0cmluZywgY29sdW1uczogRGF0YVRhYmxlQ29sdW1uW10pIHtcbiAgICByZXR1cm4gY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09PSBjb2xJZClcbiAgfVxuXG4gIHJlc29sdmVGaWVsZERhdGEob2JqZWN0OiBhbnksIGtleTogYW55KSB7XG4gICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEob2JqZWN0LCBrZXkpXG4gIH1cblxuICBnZXRSb3dPYmplY3RGcm9tRml0ZXJEYXRhKGZpbHRlcjogRmlsdGVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtmaWx0ZXIuY29sdW1uSWRdOiBmaWx0ZXIudmFsdWUsXG4gICAgfVxuICB9XG5cbiAgZ2V0Um93Rm9yVmFsdWVDb2x1bW4ocm93OiBSb3cpOiBSb3cge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcm93LmlkLFxuICAgICAgW3Jvd1sndmFsdWVDb2x1bW5JZCddIGFzIHN0cmluZ106IHJvd1sndmFsdWUnXSxcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zJCB8IGFzeW5jIGFzIGNvbHVtbnNcIj5cbiAgPGRpdiAqbmdJZj1cImZpbHRlcnMkIHwgYXN5bmMgYXMgZmlsdGVyc1wiIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlNb2RlID09PSAnY2hpcHMnOyBlbHNlIG5vQ2hpcHNDb250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpvY3hJZkJyZWFrcG9pbnQ9XCInZGVza3RvcCc7IGVsc2VUZW1wbGF0ZTogbm9DaGlwc0NvbnRlbnRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdERpc3BsYXllZENoaXBzKGZpbHRlcnMsIGNvbHVtbnMpIGFzIHNlbGVjdGVkRmlsdGVyc1wiPlxuICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgI2NoaXBGaWx0ZXJSZXNldEJ1dHRvblxuICAgICAgICAgICAgaWQ9XCJvY3hGaWx0ZXJWaWV3UmVzZXRcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwib25SZXNldEZpbGVyc0NsaWNrKClcIlxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLWVyYXNlclwiXG4gICAgICAgICAgICBwVG9vbHRpcD1cInt7ICdPQ1hfRklMVEVSX1ZJRVcuUkVTRVRfRklMVEVSU19CVVRUT04uREVUQUlMJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgdG9vbHRpcEV2ZW50PVwiaG92ZXJcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInT0NYX0ZJTFRFUl9WSUVXLlJFU0VUX0ZJTFRFUlNfQlVUVE9OLkFSSUFfTEFCRUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVycy5sZW5ndGggPD0gMFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdJZj1cIl9maXRsZXJWaWV3Tm9TZWxlY3Rpb247IGVsc2UgZGVmYXVsdE5vRmlsdGVyc1wiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9maXRsZXJWaWV3Tm9TZWxlY3Rpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHROb0ZpbHRlcnM+XG4gICAgICAgICAgICAgIDxzcGFuIGlkPVwib2N4RmlsdGVyVmlld05vRmlsdGVyc1wiPnt7ICdPQ1hfRklMVEVSX1ZJRVcuTk9fRklMVEVSUycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY2hpcFRlbXBsYXRlcyQgfCBhc3luYykgPz8ge30gYXMgdGVtcGxhdGVzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2Ygc2VsZWN0ZWRGaWx0ZXJzXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDb2x1bW5Gb3JGaWx0ZXIoZmlsdGVyLCBjb2x1bW5zKSBhcyBjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8cC1jaGlwIFtyZW1vdmFibGVdPVwidHJ1ZVwiIChvblJlbW92ZSk9XCJvbkNoaXBSZW1vdmUoZmlsdGVyKVwiIFtzdHlsZUNsYXNzXT1cImNoaXBTdHlsZUNsYXNzXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiX2ZpbHRlclZpZXdDaGlwQ29udGVudDsgZWxzZSBjaGlwQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2ZpbHRlclZpZXdDaGlwQ29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgZmlsdGVyVmFsdWVUZW1wbGF0ZXM6IHRlbXBsYXRlcyxcbiAgICAgICAgICAgICAgICB0cnV0aHlUZW1wbGF0ZTogdHJ1dGh5VGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgZmlsdGVyVmFsdWVUZW1wbGF0ZTogY2hpcFRlbXBsYXRlXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NoaXBDb250ZW50VGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW5zJCB8IGFzeW5jIGFzIGNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWNoaXAtdGV4dCBmbGV4IGZsZXgtbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICA+e3tjb2x1bW4/Lm5hbWVLZXkgPz8gJycgfCB0cmFuc2xhdGUgfX06PG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXIuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5FUVVBTCB8fCAhZmlsdGVyLmZpbHRlclR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpcFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHRlbXBsYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLlRSVVRIWVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cnV0aHlUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3AtY2hpcD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZEZpbHRlcnMubGVuZ3RoIDwgZmlsdGVycy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPHAtY2hpcFxuICAgICAgICAgICAgICAgICNzaG93TW9yZUNoaXBcbiAgICAgICAgICAgICAgICBpZD1cIm9jeEZpbHRlclZpZXdTaG93TW9yZVwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1BhbmVsKCRldmVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZmlsdGVyLXZpZXctZm9jdXNhYmxlXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzaG93UGFuZWwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwic2hvd1BhbmVsKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJfZmlsdGVyVmlld1Nob3dNb3JlQ2hpcDsgZWxzZSBzaG93TW9yZUNoaXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfZmlsdGVyVmlld1Nob3dNb3JlQ2hpcFwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgJGltcGxpY2l0OiBmaWx0ZXJzLmxlbmd0aCAtIHNlbGVjdGVkRmlsdGVycy5sZW5ndGhcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93TW9yZUNoaXBUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jaGlwLXRleHQgZmxleCBmbGV4LW5vd3JhcFwiPiAre3tmaWx0ZXJzLmxlbmd0aCAtIHNlbGVjdGVkRmlsdGVycy5sZW5ndGh9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRhYmxlUGFuZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9wLWNoaXA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI25vQ2hpcHNDb250ZW50PlxuICAgICAgPHAtYnV0dG9uXG4gICAgICAgICNtYW5hZ2VCdXR0b25cbiAgICAgICAgaWQ9XCJvY3hGaWx0ZXJWaWV3TWFuYWdlXCJcbiAgICAgICAgKG9uQ2xpY2spPVwic2hvd1BhbmVsKCRldmVudClcIlxuICAgICAgICBpY29uPVwicGkgcGktc2xpZGVycy1oXCJcbiAgICAgICAgbGFiZWw9XCJ7eyAnT0NYX0ZJTFRFUl9WSUVXLk1BTkFHRV9GSUxURVJTX0JVVFRPTi5MQUJFTCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICBwVG9vbHRpcD1cInt7ICdPQ1hfRklMVEVSX1ZJRVcuTUFOQUdFX0ZJTFRFUlNfQlVUVE9OLkRFVEFJTCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICB0b29sdGlwRXZlbnQ9XCJob3ZlclwiXG4gICAgICAgIFtiYWRnZV09XCJmaWx0ZXJzLmxlbmd0aC50b1N0cmluZygpXCJcbiAgICAgICAgW2FyaWFMYWJlbF09XCInT0NYX0ZJTFRFUl9WSUVXLk1BTkFHRV9GSUxURVJTX0JVVFRPTi5BUklBX0xBQkVMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGFibGVQYW5lbFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2ZpbHRlclRhYmxlUGFuZWw+XG4gICAgICA8cC1vdmVybGF5UGFuZWwgKm5nSWY9XCJ0YWJsZVRlbXBsYXRlcyQgfCBhc3luYyBhcyB0ZW1wbGF0ZXNcIiAjb3AgW3N0eWxlXT1cInBhbmVsU3R5bGVcIiAob25IaWRlKT1cImZvY3VzVHJpZ2dlcigpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBwRm9jdXNUcmFwPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LW1lZGl1bVwiPnt7J09DWF9GSUxURVJfVklFVy5QQU5FTF9USVRMRScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgIHBBdXRvRm9jdXNcbiAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBpZD1cIm9jeEZpbHRlclZpZXdPdmVybGF5UmVzZXRcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25SZXNldEZpbGVyc0NsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWVyYXNlclwiXG4gICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cInt7ICdPQ1hfRklMVEVSX1ZJRVcuUkVTRVRfRklMVEVSU19CVVRUT04uREVUQUlMJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcEV2ZW50PVwiaG92ZXJcIlxuICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInT0NYX0ZJTFRFUl9WSUVXLlJFU0VUX0ZJTFRFUlNfQlVUVE9OLkFSSUFfTEFCRUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxvY3gtZGF0YS10YWJsZVxuICAgICAgICAgICAgICBpZD1cIm9jeEZpbHRlclZpZXdEYXRhVGFibGVcIlxuICAgICAgICAgICAgICBbcm93c109XCIoY29sdW1uRmlsdGVyRGF0YVJvd3MkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uRmlsdGVyVGFibGVDb2x1bW5zXCJcbiAgICAgICAgICAgICAgW2VtcHR5UmVzdWx0c01lc3NhZ2VdPVwiJ09DWF9GSUxURVJfVklFVy5OT19GSUxURVJTJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbHVtbklkQ2VsbFwiIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVzW2NvbHVtbi5pZF1cIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgIHJvd09iamVjdDogcm93T2JqZWN0LFxuICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwidmFsdWVJZENlbGxcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDb2x1bW4ocm93T2JqZWN0Wyd2YWx1ZUNvbHVtbklkJ10sIGNvbHVtbnMpIGFzIHZhbHVlQ29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXZhbHVlQ29sdW1uLmZpbHRlclR5cGUgfHwgdmFsdWVDb2x1bW4uZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlc1t2YWx1ZUNvbHVtbi5pZF1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICByb3dPYmplY3Q6IGdldFJvd0ZvclZhbHVlQ29sdW1uKHJvd09iamVjdCksXG4gICAgICAgICAgICAgIGNvbHVtbjogdmFsdWVDb2x1bW5cbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidmFsdWVDb2x1bW4uZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5UUlVUSFlcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cnV0aHlUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgIHZhbHVlOiByZXNvbHZlRmllbGREYXRhKHJvd09iamVjdCwgY29sdW1uLmlkKVxuICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImFjdGlvbnNJZENlbGxcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLWRhbmdlciBwLWJ1dHRvbi10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnT0NYX0ZJTFRFUl9WSUVXLlRBQkxFLlJFTU9WRV9GSUxURVJfVElUTEUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInT0NYX0ZJTFRFUl9WSUVXLlRBQkxFLlJFTU9WRV9GSUxURVJfQVJJQV9MQUJFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25GaWx0ZXJEZWxldGUocm93T2JqZWN0KVwiXG4gICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L29jeC1kYXRhLXRhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9wLW92ZXJsYXlQYW5lbD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2NoaXBUZW1wbGF0ZSBsZXQtdGVtcGxhdGVzPVwidGVtcGxhdGVzXCIgbGV0LWZpbHRlcj1cImZpbHRlclwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwidGVtcGxhdGVzW2NvbHVtbi5pZF0gYXMgdGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgcm93T2JqZWN0OiBnZXRSb3dPYmplY3RGcm9tRml0ZXJEYXRhKGZpbHRlciksXG4gICAgICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgICAgIH1cIlxuICA+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0cnV0aHlUZW1wbGF0ZSBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVcIj4ge3snT0NYX0ZJTFRFUl9WSUVXLkZJTFRFUl9ZRVMnIHwgdHJhbnNsYXRlfX0gPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdmFsdWVcIj4ge3snT0NYX0ZJTFRFUl9WSUVXLkZJTFRFUl9OTycgfCB0cmFuc2xhdGV9fSA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0U3RyaW5nVmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyPiB7eyByZXNvbHZlRmllbGREYXRhKHJvd09iamVjdCwgY29sdW1uLmlkKX19IDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImRlZmF1bHROdW1iZXJWYWx1ZVwiIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXI+IHt7IHJlc29sdmVGaWVsZERhdGEocm93T2JqZWN0LCBjb2x1bW4uaWQpIHwgbnVtYmVyIH19IDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImRlZmF1bHRDdXN0b21WYWx1ZVwiIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+IDwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0RGF0ZVZhbHVlXCIgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lcj4ge3sgcmVzb2x2ZUZpZWxkRGF0YShyb3dPYmplY3QsIGNvbHVtbi5pZCkgfCBkYXRlOiBjb2x1bW4uZGF0ZUZvcm1hdCA/PyAnbWVkaXVtJyB9fSA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0UmVsYXRpdmVEYXRlVmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyPlxuICAgIHt7ICdPQ1hfREFUQV9UQUJMRS5FRElURUQnIHwgdHJhbnNsYXRlIH19IHt7IHJlc29sdmVGaWVsZERhdGEocm93T2JqZWN0LCBjb2x1bW4uaWQpIHwgdGltZWFnbyB9fVxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0VHJhbnNsYXRpb25LZXlWYWx1ZVwiIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXI+IHt7IHJlc29sdmVGaWVsZERhdGEocm93T2JqZWN0LCBjb2x1bW4uaWQpIHwgdHJhbnNsYXRlIH19PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|