@oneteme/jquery-table 0.0.5 → 0.0.7
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/component/slice-panel/slice-panel.component.mjs +34 -1
- package/esm2022/lib/component/table.component.mjs +42 -11
- package/esm2022/lib/jqt-i18n.token.mjs +5 -5
- package/esm2022/lib/jquery-table.model.mjs +1 -1
- package/fesm2022/oneteme-jquery-table.mjs +78 -14
- package/fesm2022/oneteme-jquery-table.mjs.map +1 -1
- package/lib/component/slice-panel/slice-panel.component.d.ts +1 -0
- package/lib/component/table.component.d.ts +8 -2
- package/lib/jquery-table.model.d.ts +6 -0
- package/package.json +1 -1
|
@@ -296,6 +296,8 @@ export class SlicePanelComponent {
|
|
|
296
296
|
return true;
|
|
297
297
|
return [...activeKeys].some((key) => {
|
|
298
298
|
const category = (slice.categories || []).find((c) => c.key === key);
|
|
299
|
+
if (!category)
|
|
300
|
+
return false;
|
|
299
301
|
// Si pas de filter défini (usage chart), on ne filtre pas en mémoire
|
|
300
302
|
if (!category?.filter)
|
|
301
303
|
return true;
|
|
@@ -308,6 +310,16 @@ export class SlicePanelComponent {
|
|
|
308
310
|
const dynamicIndex = sliceIndex - this.staticSliceCount;
|
|
309
311
|
return this._dynamicSlices[dynamicIndex]?.key ?? null;
|
|
310
312
|
}
|
|
313
|
+
_getSliceIdentity(slice, fallbackIndex) {
|
|
314
|
+
if (slice.columnKey) {
|
|
315
|
+
return `column:${slice.columnKey}`;
|
|
316
|
+
}
|
|
317
|
+
if (slice.title) {
|
|
318
|
+
return `title:${slice.title}`;
|
|
319
|
+
}
|
|
320
|
+
const categoryKeys = (slice.categories || []).map((category) => category.key).join('|');
|
|
321
|
+
return `index:${fallbackIndex}|categories:${categoryKeys}`;
|
|
322
|
+
}
|
|
311
323
|
_materializeSlice(slice) {
|
|
312
324
|
if (!slice.columnKey || (slice.categories && slice.categories.length > 0)) {
|
|
313
325
|
return slice;
|
|
@@ -373,8 +385,29 @@ export class SlicePanelComponent {
|
|
|
373
385
|
return row[columnKey];
|
|
374
386
|
}
|
|
375
387
|
_rebuildCache() {
|
|
388
|
+
const previousSlices = this._cachedSlices;
|
|
389
|
+
const previousActiveKeys = this.activeKeysBySlice;
|
|
376
390
|
const allSlices = [...(this.sliceConfigs || []), ...this._dynamicSlices.map((d) => d.slice)];
|
|
377
391
|
this._cachedSlices = allSlices.map((slice) => this._materializeSlice(slice));
|
|
392
|
+
const previousKeysByIdentity = new Map();
|
|
393
|
+
previousSlices.forEach((slice, index) => {
|
|
394
|
+
const activeKeys = previousActiveKeys.get(index);
|
|
395
|
+
if (!activeKeys || activeKeys.size === 0)
|
|
396
|
+
return;
|
|
397
|
+
previousKeysByIdentity.set(this._getSliceIdentity(slice, index), new Set(activeKeys));
|
|
398
|
+
});
|
|
399
|
+
const nextActiveKeys = new Map();
|
|
400
|
+
this._cachedSlices.forEach((slice, index) => {
|
|
401
|
+
const previousKeys = previousKeysByIdentity.get(this._getSliceIdentity(slice, index));
|
|
402
|
+
if (!previousKeys || previousKeys.size === 0)
|
|
403
|
+
return;
|
|
404
|
+
const availableKeys = new Set((slice.categories || []).map((category) => category.key));
|
|
405
|
+
const matchingKeys = [...previousKeys].filter((key) => availableKeys.has(key));
|
|
406
|
+
if (matchingKeys.length > 0) {
|
|
407
|
+
nextActiveKeys.set(index, new Set(matchingKeys));
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
this.activeKeysBySlice = nextActiveKeys;
|
|
378
411
|
this._countCache.clear();
|
|
379
412
|
}
|
|
380
413
|
_refreshDynamicSlices() {
|
|
@@ -436,4 +469,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
436
469
|
type: ViewChild,
|
|
437
470
|
args: ['slicePanelBody']
|
|
438
471
|
}] } });
|
|
439
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUNyRCxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUMzQyxTQUFTLEVBQUUsTUFBTSxFQUNqQyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQVcsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7QUFFNUUsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUM7QUFDdkMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUM7QUFVcEMsTUFBTSxPQUFPLG1CQUFtQjtJQVJoQztRQVVXLGlCQUFZLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUNsQyxTQUFJLEdBQVEsRUFBRSxDQUFDO1FBQ2YsYUFBUSxHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pELGVBQVUsR0FBeUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM3RSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsdUJBQWtC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RSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQzsrR0F4YVUsbUJBQW1CO21HQUFuQixtQkFBbUIsNG1CQ3JCaEMsaTdGQStEQSwwaUxEL0NZLFlBQVksK1BBQUUsYUFBYTs7NEZBSzFCLG1CQUFtQjtrQkFSL0IsU0FBUztpQ0FDSSxJQUFJLFlBQ04sYUFBYSxXQUNkLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxtQkFHckIsdUJBQXVCLENBQUMsTUFBTTs4QkFJdEMsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRXNCLGlCQUFpQjtzQkFBN0MsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCwgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2xpY2VDb2x1bW5EZWYsIFNsaWNlQ29uZmlnIH0gZnJvbSAnLi9zbGljZS1wYW5lbC5tb2RlbCc7XG5pbXBvcnQgeyBKcXRJMThuLCBKUVRfSTE4TiwgSlFUX0kxOE5fREVGQVVMVFMgfSBmcm9tICcuLi8uLi9qcXQtaTE4bi50b2tlbic7XG5cbmNvbnN0IEVNUFRZX0NBVEVHT1JZX0tFWSA9ICdfX2VtcHR5X18nO1xuY29uc3QgRU1QVFlfQ0FURUdPUllfTEFCRUwgPSAnVmlkZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3NsaWNlLXBhbmVsJyxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0SWNvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zbGljZS1wYW5lbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NsaWNlLXBhbmVsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTbGljZVBhbmVsQ29tcG9uZW50PFQgPSBhbnk+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHNsaWNlQ29uZmlnczogU2xpY2VDb25maWc8VD5bXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBTbGljZUNvbHVtbkRlZjxUPltdID0gW107XG4gIEBJbnB1dCgpIGRhdGE6IFRbXSA9IFtdO1xuICBASW5wdXQoKSBsYXp5RGF0YTogTWFwPHN0cmluZywgTWFwPGFueSwgYW55Pj4gPSBuZXcgTWFwKCk7XG4gIEBJbnB1dCgpIGxhenlTdGF0dXM6IE1hcDxzdHJpbmcsICdpZGxlJyB8ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgJ2Vycm9yJz4gPSBuZXcgTWFwKCk7XG4gIEBJbnB1dCgpIHNob3dUb2dnbGUgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Q291bnRzID0gdHJ1ZTtcbiAgQElucHV0KCkgY29sbGFwc2VkQnlEZWZhdWx0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsd2F5c1Nob3cgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjwocm93OiBUKSA9PiBib29sZWFuPigpO1xuICBAT3V0cHV0KCkgYWN0aXZlS2V5c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW11bXT4oKTtcbiAgQE91dHB1dCgpIGR5bmFtaWNTbGljZUtleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuICBAT3V0cHV0KCkgY29sbGFwc2VkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3NsaWNlUGFuZWxCb2R5Jykgc2xpY2VQYW5lbEJvZHlSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBwcml2YXRlIF9jZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIF9pMThuUmF3ID0gaW5qZWN0KEpRVF9JMThOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICByZWFkb25seSBpMThuOiBKcXRJMThuID0geyAuLi5KUVRfSTE4Tl9ERUZBVUxUUywgLi4uKHRoaXMuX2kxOG5SYXcgPz8ge30pIH07XG5cbiAgaXNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgYWN0aXZlS2V5c0J5U2xpY2U6IE1hcDxudW1iZXIsIFNldDxzdHJpbmc+PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBfZXhwYW5kZWRTbGljZXMgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgX2R5bmFtaWNTbGljZXM6IEFycmF5PHsga2V5OiBzdHJpbmc7IHNsaWNlOiBTbGljZUNvbmZpZzxUPiB9PiA9IFtdO1xuXG4gIC8vIOKUgOKUgCBDYWNoZVxuICBfY2FjaGVkU2xpY2VzOiBTbGljZUNvbmZpZzxUPltdID0gW107XG4gIHByaXZhdGUgX2NvdW50Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gIHJlYWRvbmx5IHRyYWNrQnlTbGljZUluZGV4ID0gKGluZGV4OiBudW1iZXIsIF86IGFueSk6IG51bWJlciA9PiBpbmRleDtcbiAgcmVhZG9ubHkgdHJhY2tCeUNhdGVnb3J5S2V5ID0gKF86IG51bWJlciwgY2F0OiBhbnkpOiBzdHJpbmcgPT4gY2F0LmtleTtcblxuICAvLyDilIDilIAgTGlmZWN5Y2xlXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9IHRoaXMuY29sbGFwc2VkQnlEZWZhdWx0O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzbGljZUNvbmZpZ3MnXSB8fCBjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snY29sdW1ucyddIHx8IGNoYW5nZXNbJ2xhenlEYXRhJ10gfHwgY2hhbmdlc1snbGF6eVN0YXR1cyddKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoRHluYW1pY1NsaWNlcygpO1xuICAgICAgdGhpcy5fcmVidWlsZENhY2hlKCk7XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIENvbXB1dGVkXG5cbiAgZ2V0IHNob3dQYW5lbCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNDZmcgPSAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pLmxlbmd0aCA+IDAgfHwgdGhpcy5fZHluYW1pY1NsaWNlcy5sZW5ndGggPiAwO1xuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHJldHVybiBoYXNDZmc7XG4gICAgcmV0dXJuIGhhc0NmZyAmJiAodGhpcy5kYXRhPy5sZW5ndGggPz8gMCkgPiAwO1xuICB9XG5cbiAgZ2V0IHNsaWNlcygpOiBTbGljZUNvbmZpZzxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU2xpY2VzO1xuICB9XG5cbiAgZ2V0IHN0YXRpY1NsaWNlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuc2xpY2VDb25maWdzIHx8IFtdKS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc3RhdGljU2xpY2VzRm9yTWVudSgpOiBBcnJheTx7IGtleTogc3RyaW5nOyB0aXRsZTogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gKHRoaXMuc2xpY2VDb25maWdzIHx8IFtdKVxuICAgICAgLmZpbHRlcigocykgPT4gISFzLmNvbHVtbktleSlcbiAgICAgIC5tYXAoKHMpID0+ICh7IGtleTogcy5jb2x1bW5LZXkhLCB0aXRsZTogcy50aXRsZSB8fCBzLmNvbHVtbktleSEgfSkpO1xuICB9XG5cbiAgZ2V0IGFjdGl2ZUR5bmFtaWNTbGljZUNvbHVtbnMoKTogU2xpY2VDb2x1bW5EZWY8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2R5bmFtaWNTbGljZXNcbiAgICAgIC5tYXAoKGQpID0+ICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbmQoKGMpID0+IGMua2V5ID09PSBkLmtleSkpXG4gICAgICAuZmlsdGVyKChjKTogYyBpcyBTbGljZUNvbHVtbkRlZjxUPiA9PiAhIWMpO1xuICB9XG5cbiAgZ2V0IGF2YWlsYWJsZUNvbHVtbnNGb3JEeW5hbWljU2xpY2UoKTogU2xpY2VDb2x1bW5EZWY8VD5bXSB7XG4gICAgY29uc3QgZHluYW1pY0tleXMgPSBuZXcgU2V0KHRoaXMuX2R5bmFtaWNTbGljZXMubWFwKChkKSA9PiBkLmtleSkpO1xuICAgIGNvbnN0IHN0YXRpY0tleXMgPSBuZXcgU2V0KFxuICAgICAgKHRoaXMuc2xpY2VDb25maWdzIHx8IFtdKS5tYXAoKHMpID0+IHMuY29sdW1uS2V5KS5maWx0ZXIoKGspOiBrIGlzIHN0cmluZyA9PiAhIWspXG4gICAgKTtcbiAgICBjb25zdCBleGlzdGluZ0tleXMgPSBuZXcgU2V0KFsuLi5keW5hbWljS2V5cywgLi4uc3RhdGljS2V5c10pO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICByZXR1cm4gKHRoaXMuY29sdW1ucyB8fCBbXSkuZmlsdGVyKChjKSA9PiB7XG4gICAgICBpZiAoZXhpc3RpbmdLZXlzLmhhcyhjLmtleSkgfHwgc2Vlbi5oYXMoYy5rZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICBzZWVuLmFkZChjLmtleSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBhY3RpdmVTbGljZUJ5TGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0aWNBY3RpdmVDb3VudCA9ICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSkubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsID0gc3RhdGljQWN0aXZlQ291bnQgKyB0aGlzLl9keW5hbWljU2xpY2VzLmxlbmd0aDtcbiAgICBpZiAodG90YWwgPT09IDApIHJldHVybiAnQXVjdW4nO1xuICAgIGlmICh0b3RhbCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3QgPSAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pWzBdO1xuICAgICAgaWYgKGZpcnN0KSByZXR1cm4gZmlyc3QudGl0bGUgfHwgZmlyc3QuY29sdW1uS2V5IHx8ICcxJztcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUR5bmFtaWNTbGljZUNvbHVtbnNbMF0/LmhlYWRlciB8fCAnMSc7XG4gICAgfVxuICAgIHJldHVybiBgJHt0b3RhbH0gYWN0aWZzYDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBVSSBzdGF0ZVxuXG4gIGlzU2xpY2VDb2xsYXBzZWQoc2xpY2VJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2NhY2hlZFNsaWNlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9leHBhbmRlZFNsaWNlcy5oYXMoLTEgLSBzbGljZUluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuICF0aGlzLl9leHBhbmRlZFNsaWNlcy5oYXMoc2xpY2VJbmRleCk7XG4gIH1cblxuICB0b2dnbGVTbGljZUNvbGxhcHNlKHNsaWNlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNsaWNlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNsb3NlZEtleSA9IC0xIC0gc2xpY2VJbmRleDtcbiAgICAgIGlmICh0aGlzLl9leHBhbmRlZFNsaWNlcy5oYXMoY2xvc2VkS2V5KSkge1xuICAgICAgICB0aGlzLl9leHBhbmRlZFNsaWNlcy5kZWxldGUoY2xvc2VkS2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmFkZChjbG9zZWRLZXkpO1xuICAgICAgICB0aGlzLl9zY3JvbGxTbGljZVRpdGxlSW50b1ZpZXcoc2xpY2VJbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9leHBhbmRlZFNsaWNlcy5oYXMoc2xpY2VJbmRleCkpIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRTbGljZXMuZGVsZXRlKHNsaWNlSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRTbGljZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRTbGljZXMuYWRkKHNsaWNlSW5kZXgpO1xuICAgICAgICB0aGlzLl9zY3JvbGxTbGljZVRpdGxlSW50b1ZpZXcoc2xpY2VJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHRvZ2dsZVBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSAhdGhpcy5pc0NvbGxhcHNlZDtcbiAgICB0aGlzLmNvbGxhcHNlZENoYW5nZS5lbWl0KHRoaXMuaXNDb2xsYXBzZWQpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGlzU2xpY2VEeW5hbWljKHNsaWNlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzbGljZUluZGV4ID49IHRoaXMuc3RhdGljU2xpY2VDb3VudDtcbiAgfVxuXG4gIGlzU2xpY2VMb2FkaW5nKHNsaWNlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXRpY1NsaWNlID0gKHRoaXMuc2xpY2VDb25maWdzIHx8IFtdKVtzbGljZUluZGV4XTtcbiAgICBpZiAoc3RhdGljU2xpY2U/LmNvbHVtbktleSkge1xuICAgICAgY29uc3QgY29sRGVmID0gKHRoaXMuY29sdW1ucyB8fCBbXSkuZmluZChjID0+IGMua2V5ID09PSBzdGF0aWNTbGljZS5jb2x1bW5LZXkpO1xuICAgICAgaWYgKGNvbERlZj8ubGF6eSkge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmxhenlTdGF0dXMuZ2V0KHN0YXRpY1NsaWNlLmNvbHVtbktleSEpID8/ICdpZGxlJztcbiAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gJ2xvYWRpbmcnIHx8IHN0YXR1cyA9PT0gJ2lkbGUnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSB0aGlzLl9nZXREeW5hbWljU2xpY2VDb2x1bW5LZXkoc2xpY2VJbmRleCk7XG4gICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb2xEZWYgPSAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKGMgPT4gYy5rZXkgPT09IGtleSk7XG4gICAgaWYgKCFjb2xEZWY/LmxhenkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmxhenlTdGF0dXMuZ2V0KGtleSkgPz8gJ2lkbGUnO1xuICAgIHJldHVybiBzdGF0dXMgPT09ICdsb2FkaW5nJyB8fCBzdGF0dXMgPT09ICdpZGxlJztcbiAgfVxuXG4gIGlzU3RhdGljU2xpY2VWaXNpYmxlKF9jb2x1bW5LZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdG9nZ2xlU3RhdGljU2xpY2UoX2NvbHVtbktleTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gRMOpbMOpZ3XDqSDDoCB0YWJsZS5jb21wb25lbnQgdmlhIF9zdGF0aWNTbGljZUhpZGRlbktleXMg4oCUIG5lIHJpZW4gZmFpcmUgaWNpLlxuICB9XG5cbiAgLy8g4pSA4pSAIFNlbGVjdGlvblxuICBnZXRTbGljZUljb24oc2xpY2U6IFNsaWNlQ29uZmlnPFQ+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc2xpY2UuaWNvbikgcmV0dXJuIHNsaWNlLmljb247XG4gICAgaWYgKHNsaWNlLmNvbHVtbktleSkge1xuICAgICAgcmV0dXJuICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbmQoYyA9PiBjLmtleSA9PT0gc2xpY2UuY29sdW1uS2V5KT8uaWNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpc1NsaWNlQ2F0ZWdvcnlBY3RpdmUoc2xpY2VJbmRleDogbnVtYmVyLCBjYXRlZ29yeUtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UuZ2V0KHNsaWNlSW5kZXgpPy5oYXMoY2F0ZWdvcnlLZXkpID8/IGZhbHNlO1xuICB9XG5cbiAgaXNTbGljZUFsbEFjdGl2ZShzbGljZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuYWN0aXZlS2V5c0J5U2xpY2UuaGFzKHNsaWNlSW5kZXgpIHx8IHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UuZ2V0KHNsaWNlSW5kZXgpIS5zaXplID09PSAwO1xuICB9XG5cbiAgc2xpY2VDYXRlZ29yeUNvdW50KHNsaWNlSW5kZXg6IG51bWJlciwgY2F0ZWdvcnlLZXk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBgJHtzbGljZUluZGV4fToke2NhdGVnb3J5S2V5fWA7XG4gICAgaWYgKHRoaXMuX2NvdW50Q2FjaGUuaGFzKGNhY2hlS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvdW50Q2FjaGUuZ2V0KGNhY2hlS2V5KSE7XG4gICAgfVxuICAgIGNvbnN0IHNsaWNlID0gdGhpcy5fY2FjaGVkU2xpY2VzW3NsaWNlSW5kZXhdO1xuICAgIGlmICghc2xpY2UpIHJldHVybiAwO1xuICAgIGNvbnN0IGNhdGVnb3J5ID0gKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLmZpbmQoKGMpID0+IGMua2V5ID09PSBjYXRlZ29yeUtleSk7XG4gICAgY29uc3QgY291bnQgPSBjYXRlZ29yeSA/ICh0aGlzLmRhdGEgfHwgW10pLmZpbHRlcigocm93KSA9PiBjYXRlZ29yeS5maWx0ZXIocm93KSkubGVuZ3RoIDogMDtcbiAgICB0aGlzLl9jb3VudENhY2hlLnNldChjYWNoZUtleSwgY291bnQpO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIGlzU2xpY2VFbXB0eShzbGljZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBzbGljZSA9IHRoaXMuX2NhY2hlZFNsaWNlc1tzbGljZUluZGV4XTtcbiAgICBpZiAoIXNsaWNlKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLmV2ZXJ5KGMgPT4gdGhpcy5zbGljZUNhdGVnb3J5Q291bnQoc2xpY2VJbmRleCwgYy5rZXkpID09PSAwKTtcbiAgfVxuXG4gIG9uU2xpY2VDYXRlZ29yeVNlbGVjdGVkKHNsaWNlSW5kZXg6IG51bWJlciwgY2F0ZWdvcnlLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNsaWNlID0gdGhpcy5zbGljZXNbc2xpY2VJbmRleF07XG4gICAgaWYgKCFzbGljZSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5oYXMoc2xpY2VJbmRleCkpIHtcbiAgICAgIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2Uuc2V0KHNsaWNlSW5kZXgsIG5ldyBTZXQoKSk7XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUtleXMgPSB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KSE7XG4gICAgaWYgKHNsaWNlLm11bHRpU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgaWYgKGFjdGl2ZUtleXMuaGFzKGNhdGVnb3J5S2V5KSkge1xuICAgICAgICBhY3RpdmVLZXlzLmNsZWFyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmVLZXlzLmNsZWFyKCk7XG4gICAgICAgIGFjdGl2ZUtleXMuYWRkKGNhdGVnb3J5S2V5KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGFjdGl2ZUtleXMuaGFzKGNhdGVnb3J5S2V5KSkge1xuICAgICAgICBhY3RpdmVLZXlzLmRlbGV0ZShjYXRlZ29yeUtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmVLZXlzLmFkZChjYXRlZ29yeUtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblNsaWNlQWxsU2VsZWN0ZWQoc2xpY2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UuaGFzKHNsaWNlSW5kZXgpKSB7XG4gICAgICB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KSEuY2xlYXIoKTtcbiAgICB9XG4gICAgdGhpcy5fZW1pdEZpbHRlcigpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBSZXRvdXJuZSBsJ8OpdGF0IGRlcyBmaWx0cmVzIGFjdGlmcyBzb3VzIGZvcm1lIHPDqXJpYWxpc2FibGUgKHNsaWNlSW5kZXgg4oaSIHRhYmxlYXUgZGUgY2zDqXMpLlxuICAgKiBJbmNsdXQgbGVzIHNsaWNlcyBzYW5zIHPDqWxlY3Rpb24gKHRhYmxlYXUgdmlkZSkgcG91ciBkaXN0aW5ndWVyIFwiYXVjdW5lIHRyYW5jaGUgc8OpbGVjdGlvbm7DqWVcIlxuICAgKiAoPSBmaWx0cmUgb3V2ZXJ0LCByaWVuIGNvY2jDqSkgZGUgXCJzbGljZSBhYnNlbnRlXCIuICovXG4gIGdldEFjdGl2ZUZpbHRlcnMoKTogUmVjb3JkPG51bWJlciwgc3RyaW5nW10+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxudW1iZXIsIHN0cmluZ1tdPiA9IHt9O1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcy5mb3JFYWNoKChfLCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChpZHgpO1xuICAgICAgcmVzdWx0W2lkeF0gPSBrZXlzID8gWy4uLmtleXNdIDogW107XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKiBSZXN0YXVyZSBsZXMgZmlsdHJlcyBhY3RpZnMgZGVwdWlzIHVuIHNuYXBzaG90IHPDqXJpYWxpc8OpIGV0IHLDqcOpbWV0IGxlIGZpbHRyZS4gKi9cbiAgcmVzdG9yZUZpbHRlcnMoZmlsdGVyczogUmVjb3JkPG51bWJlciwgc3RyaW5nW10+KTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVLZXlzQnlTbGljZSA9IG5ldyBNYXAoXG4gICAgICBPYmplY3QuZW50cmllcyhmaWx0ZXJzKS5tYXAoKFtpZHgsIGtleXNdKSA9PiBbTnVtYmVyKGlkeCksIG5ldyBTZXQoa2V5cyldKVxuICAgICk7XG4gICAgdGhpcy5fZW1pdEZpbHRlcigpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBEeW5hbWljIHNsaWNlIG1hbmFnZW1lbnRcblxuICBhZGREeW5hbWljU2xpY2UoY29sdW1uOiBTbGljZUNvbHVtbkRlZjxUPik6IHZvaWQge1xuICAgIGNvbnN0IGRpc3RpbmN0VmFsdWVzID0gdGhpcy5fY29tcHV0ZURpc3RpbmN0VmFsdWVzKGNvbHVtbi5rZXkpO1xuICAgIGNvbnN0IG5ld1NsaWNlOiBTbGljZUNvbmZpZzxUPiA9IHtcbiAgICAgIHRpdGxlOiBjb2x1bW4uaGVhZGVyLFxuICAgICAgY29sdW1uS2V5OiBjb2x1bW4ua2V5LFxuICAgICAgY2F0ZWdvcmllczogZGlzdGluY3RWYWx1ZXMubWFwKCh2KSA9PiB0aGlzLl9idWlsZENhdGVnb3J5RnJvbVZhbHVlKGNvbHVtbi5rZXksIHYpKSxcbiAgICB9O1xuICAgIHRoaXMuX2R5bmFtaWNTbGljZXMgPSBbLi4udGhpcy5fZHluYW1pY1NsaWNlcywgeyBrZXk6IGNvbHVtbi5rZXksIHNsaWNlOiBuZXdTbGljZSB9XTtcbiAgICB0aGlzLl9yZWJ1aWxkQ2FjaGUoKTtcbiAgICB0aGlzLmR5bmFtaWNTbGljZUtleXNDaGFuZ2UuZW1pdCh0aGlzLl9keW5hbWljU2xpY2VzLm1hcChkID0+IGQua2V5KSk7XG4gICAgdGhpcy5fZW1pdEZpbHRlcigpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlbW92ZUR5bmFtaWNTbGljZShzbGljZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBkeW5hbWljSW5kZXggPSBzbGljZUluZGV4IC0gdGhpcy5zdGF0aWNTbGljZUNvdW50O1xuICAgIGlmIChkeW5hbWljSW5kZXggPCAwKSByZXR1cm47XG4gICAgY29uc3QgbmV3QWN0aXZlS2V5cyA9IG5ldyBNYXA8bnVtYmVyLCBTZXQ8c3RyaW5nPj4oKTtcbiAgICB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmZvckVhY2goKGtleXMsIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA8IHNsaWNlSW5kZXgpIG5ld0FjdGl2ZUtleXMuc2V0KGlkeCwga2V5cyk7XG4gICAgICBlbHNlIGlmIChpZHggPiBzbGljZUluZGV4KSBuZXdBY3RpdmVLZXlzLnNldChpZHggLSAxLCBrZXlzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlID0gbmV3QWN0aXZlS2V5cztcbiAgICB0aGlzLl9keW5hbWljU2xpY2VzID0gdGhpcy5fZHluYW1pY1NsaWNlcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGR5bmFtaWNJbmRleCk7XG4gICAgdGhpcy5fcmVidWlsZENhY2hlKCk7XG4gICAgdGhpcy5keW5hbWljU2xpY2VLZXlzQ2hhbmdlLmVtaXQodGhpcy5fZHluYW1pY1NsaWNlcy5tYXAoZCA9PiBkLmtleSkpO1xuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZW1vdmVEeW5hbWljU2xpY2VCeUtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGR5bmFtaWNJbmRleCA9IHRoaXMuX2R5bmFtaWNTbGljZXMuZmluZEluZGV4KChkKSA9PiBkLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoZHluYW1pY0luZGV4IDwgMCkgcmV0dXJuO1xuICAgIGNvbnN0IHNsaWNlSW5kZXggPSB0aGlzLnN0YXRpY1NsaWNlQ291bnQgKyBkeW5hbWljSW5kZXg7XG4gICAgdGhpcy5yZW1vdmVEeW5hbWljU2xpY2Uoc2xpY2VJbmRleCk7XG4gIH1cblxuICAvLyDilIDilIAgUHJpdmF0ZSBoZWxwZXJzXG5cbiAgcHJpdmF0ZSBfZW1pdEZpbHRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBzbGljZXMgPSB0aGlzLnNsaWNlcztcbiAgICBjb25zdCBhY3RpdmVLZXlzQnlTbGljZSA9IHRoaXMuYWN0aXZlS2V5c0J5U2xpY2U7XG5cbiAgICB0aGlzLmFjdGl2ZUtleXNDaGFuZ2UuZW1pdChcbiAgICAgIHNsaWNlcy5tYXAoKF8sIGkpID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGFjdGl2ZUtleXNCeVNsaWNlLmdldChpKTtcbiAgICAgICAgcmV0dXJuIGtleXMgPyBbLi4ua2V5c10gOiBbXTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHByZWQgPSAocm93OiBUKTogYm9vbGVhbiA9PlxuICAgICAgc2xpY2VzLmV2ZXJ5KChzbGljZSwgc2xpY2VJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBhY3RpdmVLZXlzID0gYWN0aXZlS2V5c0J5U2xpY2UuZ2V0KHNsaWNlSW5kZXgpO1xuICAgICAgICBpZiAoIWFjdGl2ZUtleXMgfHwgYWN0aXZlS2V5cy5zaXplID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFsuLi5hY3RpdmVLZXlzXS5zb21lKChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IChzbGljZS5jYXRlZ29yaWVzIHx8IFtdKS5maW5kKChjKSA9PiBjLmtleSA9PT0ga2V5KTtcbiAgICAgICAgICAvLyBTaSBwYXMgZGUgZmlsdGVyIGTDqWZpbmkgKHVzYWdlIGNoYXJ0KSwgb24gbmUgZmlsdHJlIHBhcyBlbiBtw6ltb2lyZVxuICAgICAgICAgIGlmICghY2F0ZWdvcnk/LmZpbHRlcikgcmV0dXJuIHRydWU7XG4gICAgICAgICAgcmV0dXJuIGNhdGVnb3J5LmZpbHRlcihyb3cpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQocHJlZCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXREeW5hbWljU2xpY2VDb2x1bW5LZXkoc2xpY2VJbmRleDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgZHluYW1pY0luZGV4ID0gc2xpY2VJbmRleCAtIHRoaXMuc3RhdGljU2xpY2VDb3VudDtcbiAgICByZXR1cm4gdGhpcy5fZHluYW1pY1NsaWNlc1tkeW5hbWljSW5kZXhdPy5rZXkgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX21hdGVyaWFsaXplU2xpY2Uoc2xpY2U6IFNsaWNlQ29uZmlnPFQ+KTogU2xpY2VDb25maWc8VD4ge1xuICAgIGlmICghc2xpY2UuY29sdW1uS2V5IHx8IChzbGljZS5jYXRlZ29yaWVzICYmIHNsaWNlLmNhdGVnb3JpZXMubGVuZ3RoID4gMCkpIHtcbiAgICAgIHJldHVybiBzbGljZTtcbiAgICB9XG4gICAgY29uc3QgY29sID0gKHRoaXMuY29sdW1ucyB8fCBbXSkuZmluZChjID0+IGMua2V5ID09PSBzbGljZS5jb2x1bW5LZXkpO1xuICAgIGNvbnN0IGlzTGF6eSA9ICEhY29sPy5sYXp5O1xuICAgIGlmIChpc0xhenkgJiYgdGhpcy5sYXp5U3RhdHVzLmdldChzbGljZS5jb2x1bW5LZXkhKSAhPT0gJ2xvYWRlZCcpIHtcbiAgICAgIHJldHVybiB7IC4uLnNsaWNlLCBjYXRlZ29yaWVzOiBbXSB9O1xuICAgIH1cbiAgICBpZiAoc2xpY2UuYnVja2V0KSB7XG4gICAgICBjb25zdCBkaXN0aW5jdFZhbHVlcyA9IFsuLi5uZXcgU2V0KCh0aGlzLmRhdGEgfHwgW10pLm1hcChzbGljZS5idWNrZXQpKV0uc29ydCgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc2xpY2UsXG4gICAgICAgIGNhdGVnb3JpZXM6IGRpc3RpbmN0VmFsdWVzLm1hcCgodikgPT4gKHtcbiAgICAgICAgICBrZXk6IHYsXG4gICAgICAgICAgbGFiZWw6IHYsXG4gICAgICAgICAgZmlsdGVyOiAocm93OiBUKSA9PiBzbGljZS5idWNrZXQhKHJvdykgPT09IHYsXG4gICAgICAgIH0pKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGRpc3RpbmN0VmFsdWVzID0gdGhpcy5fY29tcHV0ZURpc3RpbmN0VmFsdWVzKHNsaWNlLmNvbHVtbktleSEpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zbGljZSxcbiAgICAgIGNhdGVnb3JpZXM6IGRpc3RpbmN0VmFsdWVzLm1hcCgodikgPT4gdGhpcy5fYnVpbGRDYXRlZ29yeUZyb21WYWx1ZShzbGljZS5jb2x1bW5LZXkhLCB2KSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkQ2F0ZWdvcnlGcm9tVmFsdWUoY29sdW1uS2V5OiBzdHJpbmcsIHY6IHN0cmluZyk6IHsga2V5OiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGZpbHRlcjogKHJvdzogVCkgPT4gYm9vbGVhbiB9IHtcbiAgICBpZiAodiA9PT0gRU1QVFlfQ0FURUdPUllfS0VZKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IEVNUFRZX0NBVEVHT1JZX0tFWSxcbiAgICAgICAgbGFiZWw6IEVNUFRZX0NBVEVHT1JZX0xBQkVMLFxuICAgICAgICBmaWx0ZXI6IChyb3c6IFQpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLl9nZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXksIHJvdyk7XG4gICAgICAgICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gJyc7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB2LFxuICAgICAgbGFiZWw6IHYsXG4gICAgICBmaWx0ZXI6IChyb3c6IFQpID0+IFN0cmluZyh0aGlzLl9nZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXksIHJvdykgPz8gJycpID09PSB2LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9jb21wdXRlRGlzdGluY3RWYWx1ZXMoY29sdW1uS2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmF3VmFsdWVzID0gKHRoaXMuZGF0YSB8fCBbXSkubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMuX2dldExhenlBd2FyZVZhbHVlKGNvbHVtbktleSwgcm93KTtcbiAgICAgIHJldHVybiB2YWwgIT0gbnVsbCAmJiB2YWwgIT09ICcnID8gU3RyaW5nKHZhbCkgOiBudWxsO1xuICAgIH0pO1xuICAgIGNvbnN0IGRpc3RpbmN0ID0gWy4uLm5ldyBTZXQocmF3VmFsdWVzLmZpbHRlcigodik6IHYgaXMgc3RyaW5nID0+IHYgIT09IG51bGwpKV0uc29ydCgpO1xuICAgIGlmIChyYXdWYWx1ZXMuc29tZSh2ID0+IHYgPT09IG51bGwpKSB7XG4gICAgICBkaXN0aW5jdC5wdXNoKEVNUFRZX0NBVEVHT1JZX0tFWSk7XG4gICAgfVxuICAgIHJldHVybiBkaXN0aW5jdDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldExhenlBd2FyZVZhbHVlKGNvbHVtbktleTogc3RyaW5nLCByb3c6IFQpOiBhbnkge1xuICAgIGNvbnN0IGNvbERlZiA9ICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbmQoYyA9PiBjLmtleSA9PT0gY29sdW1uS2V5KTtcbiAgICBpZiAoY29sRGVmPy5sYXp5KSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXp5RGF0YS5nZXQoY29sdW1uS2V5KT8uZ2V0KHJvdykgPz8gbnVsbDtcbiAgICB9XG4gICAgaWYgKGNvbERlZj8udmFsdWUpIHtcbiAgICAgIHJldHVybiBjb2xEZWYudmFsdWUocm93LCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIChyb3cgYXMgYW55KVtjb2x1bW5LZXldO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVidWlsZENhY2hlKCk6IHZvaWQge1xuICAgIGNvbnN0IGFsbFNsaWNlcyA9IFsuLi4odGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pLCAuLi50aGlzLl9keW5hbWljU2xpY2VzLm1hcCgoZCkgPT4gZC5zbGljZSldO1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcyA9IGFsbFNsaWNlcy5tYXAoKHNsaWNlKSA9PiB0aGlzLl9tYXRlcmlhbGl6ZVNsaWNlKHNsaWNlKSk7XG4gICAgdGhpcy5fY291bnRDYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVmcmVzaER5bmFtaWNTbGljZXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZHluYW1pY1NsaWNlcyA9IHRoaXMuX2R5bmFtaWNTbGljZXMubWFwKCh7IGtleSwgc2xpY2UgfSkgPT4ge1xuICAgICAgY29uc3QgZGlzdGluY3RWYWx1ZXMgPSB0aGlzLl9jb21wdXRlRGlzdGluY3RWYWx1ZXMoa2V5KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleSxcbiAgICAgICAgc2xpY2U6IHtcbiAgICAgICAgICAuLi5zbGljZSxcbiAgICAgICAgICBjYXRlZ29yaWVzOiBkaXN0aW5jdFZhbHVlcy5tYXAoKHYpID0+IHRoaXMuX2J1aWxkQ2F0ZWdvcnlGcm9tVmFsdWUoa2V5LCB2KSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2Nyb2xsU2xpY2VUaXRsZUludG9WaWV3KHNsaWNlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zbGljZVBhbmVsQm9keVJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG4gICAgICBjb25zdCByb3cgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihgW2RhdGEtc2xpY2UtaW5kZXg9XCIke3NsaWNlSW5kZXh9XCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoIXJvdykgcmV0dXJuO1xuICAgICAgcm93LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnIH0pO1xuICAgIH0sIDApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2xpY2UtcGFuZWwtd3JhcHBlclwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiaXNDb2xsYXBzZWRcIj5cbiAgPGFzaWRlIGNsYXNzPVwic2xpY2UtcGFuZWxcIiBbY2xhc3MuY29sbGFwc2VkXT1cImlzQ29sbGFwc2VkXCI+XG4gICAgPGRpdiBjbGFzcz1cInNsaWNlLXBhbmVsLWhlYWRlclwiPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhaXNDb2xsYXBzZWRcIiBjbGFzcz1cInNsaWNlLXBhbmVsLXRpdGxlXCI+XG4gICAgICAgIHt7IGkxOG4uZmlsdGVyUGFuZWxUaXRsZShzbGljZXMubGVuZ3RoKSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dUb2dnbGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJzbGljZS10b2dnbGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzQ29sbGFwc2VkID8gaTE4bi5leHBhbmRGaWx0ZXJUaXRsZSA6IGkxOG4uY29sbGFwc2VGaWx0ZXJUaXRsZVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lbCgpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2xpY2UtdG9nZ2xlLW1hdC1pY29uXCI+e3sgaXNDb2xsYXBzZWQgPyAnZmlsdGVyX2xpc3QnIDogJ2ZpbHRlcl9saXN0X29mZicgfX08L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2xpY2UtcGFuZWwtYm9keVwiICpuZ0lmPVwiIWlzQ29sbGFwc2VkXCIgI3NsaWNlUGFuZWxCb2R5PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2xpY2Ugb2Ygc2xpY2VzOyBsZXQgc2kgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVNsaWNlSW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNsaWNlLXRpdGxlLXJvd1wiIFthdHRyLmRhdGEtc2xpY2UtaW5kZXhdPVwic2lcIiAoY2xpY2spPVwidG9nZ2xlU2xpY2VDb2xsYXBzZShzaSlcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNsaWNlLXRpdGxlLWNoZXZyb25cIiBbY2xhc3MuZXhwYW5kZWRdPVwiIWlzU2xpY2VDb2xsYXBzZWQoc2kpXCI+4oC6PC9zcGFuPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImdldFNsaWNlSWNvbihzbGljZSlcIiBjbGFzcz1cInNsaWNlLXRpdGxlLWljb25cIj57eyBnZXRTbGljZUljb24oc2xpY2UpIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICA8cCBjbGFzcz1cInNsaWNlLXRpdGxlXCI+e3sgc2xpY2UudGl0bGUgfHwgaTE4bi5maWx0ZXJCbG9ja0RlZmF1bHRUaXRsZSB9fTwvcD5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImlzU2xpY2VEeW5hbWljKHNpKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2xpY2UtcmVtb3ZlLWJ0blwiXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZW1vdmVEeW5hbWljU2xpY2Uoc2kpXCJcbiAgICAgICAgICA+w5c8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNsaWNlLXNlY3Rpb24taXRlbXNcIiAqbmdJZj1cIiFpc1NsaWNlQ29sbGFwc2VkKHNpKVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1NsaWNlTG9hZGluZyhzaSk7IGVsc2Ugc2xpY2VDb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xpY2UtbGF6eS1sb2FkaW5nXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1za2VsZXRvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYXp5LXNrZWxldG9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhenktc2tlbGV0b25cIj48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3NsaWNlQ29udGVudD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIHNsaWNlLmNhdGVnb3JpZXM7IHRyYWNrQnk6IHRyYWNrQnlDYXRlZ29yeUtleVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzbGljZUNhdGVnb3J5Q291bnQoc2ksIGNhdGVnb3J5LmtleSkgPiAwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNsaWNlLWl0ZW1cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNTbGljZUNhdGVnb3J5QWN0aXZlKHNpLCBjYXRlZ29yeS5rZXkpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNhdGVnb3J5LWtleV09XCJjYXRlZ29yeS5rZXlcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjYXRlZ29yeS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2xpY2VDYXRlZ29yeVNlbGVjdGVkKHNpLCBjYXRlZ29yeS5rZXkpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNhdGVnb3J5LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0NvdW50c1wiPnt7IHNsaWNlQ2F0ZWdvcnlDb3VudChzaSwgY2F0ZWdvcnkua2V5KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1NsaWNlRW1wdHkoc2kpXCIgY2xhc3M9XCJzbGljZS1lbXB0eS1zdGF0ZVwiPnt7IGkxOG4uZmlsdGVyRW1wdHlTdGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxociAqbmdJZj1cInNpIDwgc2xpY2VzLmxlbmd0aCAtIDFcIiBjbGFzcz1cInNsaWNlLWRpdmlkZXJcIiAvPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvYXNpZGU+XG48L2Rpdj5cbiJdfQ==
|
|
472
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktdGFibGUvc3JjL2xpYi9jb21wb25lbnQvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUNyRCxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUMzQyxTQUFTLEVBQUUsTUFBTSxFQUNqQyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQVcsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7QUFFNUUsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUM7QUFDdkMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUM7QUFVcEMsTUFBTSxPQUFPLG1CQUFtQjtJQVJoQztRQVVXLGlCQUFZLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUNsQyxTQUFJLEdBQVEsRUFBRSxDQUFDO1FBQ2YsYUFBUSxHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pELGVBQVUsR0FBeUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM3RSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsdUJBQWtC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R3JCLHVCQUF1QixDQUFDLE1BQU07OEJBSXRDLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVzQixpQkFBaUI7c0JBQTdDLFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsaWNlQ29sdW1uRGVmLCBTbGljZUNvbmZpZyB9IGZyb20gJy4vc2xpY2UtcGFuZWwubW9kZWwnO1xuaW1wb3J0IHsgSnF0STE4biwgSlFUX0kxOE4sIEpRVF9JMThOX0RFRkFVTFRTIH0gZnJvbSAnLi4vLi4vanF0LWkxOG4udG9rZW4nO1xuXG5jb25zdCBFTVBUWV9DQVRFR09SWV9LRVkgPSAnX19lbXB0eV9fJztcbmNvbnN0IEVNUFRZX0NBVEVHT1JZX0xBQkVMID0gJ1ZpZGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdzbGljZS1wYW5lbCcsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEljb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2xpY2UtcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zbGljZS1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2xpY2VQYW5lbENvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcblxuICBASW5wdXQoKSBzbGljZUNvbmZpZ3M6IFNsaWNlQ29uZmlnPFQ+W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogU2xpY2VDb2x1bW5EZWY8VD5bXSA9IFtdO1xuICBASW5wdXQoKSBkYXRhOiBUW10gPSBbXTtcbiAgQElucHV0KCkgbGF6eURhdGE6IE1hcDxzdHJpbmcsIE1hcDxhbnksIGFueT4+ID0gbmV3IE1hcCgpO1xuICBASW5wdXQoKSBsYXp5U3RhdHVzOiBNYXA8c3RyaW5nLCAnaWRsZScgfCAnbG9hZGluZycgfCAnbG9hZGVkJyB8ICdlcnJvcic+ID0gbmV3IE1hcCgpO1xuICBASW5wdXQoKSBzaG93VG9nZ2xlID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0NvdW50cyA9IHRydWU7XG4gIEBJbnB1dCgpIGNvbGxhcHNlZEJ5RGVmYXVsdCA9IGZhbHNlO1xuICBASW5wdXQoKSBhbHdheXNTaG93ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8KHJvdzogVCkgPT4gYm9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZUtleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdW10+KCk7XG4gIEBPdXRwdXQoKSBkeW5hbWljU2xpY2VLZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIGNvbGxhcHNlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAVmlld0NoaWxkKCdzbGljZVBhbmVsQm9keScpIHNsaWNlUGFuZWxCb2R5UmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfaTE4blJhdyA9IGluamVjdChKUVRfSTE4TiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaTE4bjogSnF0STE4biA9IHsgLi4uSlFUX0kxOE5fREVGQVVMVFMsIC4uLih0aGlzLl9pMThuUmF3ID8/IHt9KSB9O1xuXG4gIGlzQ29sbGFwc2VkID0gZmFsc2U7XG4gIGFjdGl2ZUtleXNCeVNsaWNlOiBNYXA8bnVtYmVyLCBTZXQ8c3RyaW5nPj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgX2V4cGFuZGVkU2xpY2VzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIF9keW5hbWljU2xpY2VzOiBBcnJheTx7IGtleTogc3RyaW5nOyBzbGljZTogU2xpY2VDb25maWc8VD4gfT4gPSBbXTtcblxuICAvLyDilIDilIAgQ2FjaGVcbiAgX2NhY2hlZFNsaWNlczogU2xpY2VDb25maWc8VD5bXSA9IFtdO1xuICBwcml2YXRlIF9jb3VudENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICByZWFkb25seSB0cmFja0J5U2xpY2VJbmRleCA9IChpbmRleDogbnVtYmVyLCBfOiBhbnkpOiBudW1iZXIgPT4gaW5kZXg7XG4gIHJlYWRvbmx5IHRyYWNrQnlDYXRlZ29yeUtleSA9IChfOiBudW1iZXIsIGNhdDogYW55KTogc3RyaW5nID0+IGNhdC5rZXk7XG5cbiAgLy8g4pSA4pSAIExpZmVjeWNsZVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLmNvbGxhcHNlZEJ5RGVmYXVsdDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc2xpY2VDb25maWdzJ10gfHwgY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2NvbHVtbnMnXSB8fCBjaGFuZ2VzWydsYXp5RGF0YSddIHx8IGNoYW5nZXNbJ2xhenlTdGF0dXMnXSkge1xuICAgICAgdGhpcy5fcmVmcmVzaER5bmFtaWNTbGljZXMoKTtcbiAgICAgIHRoaXMuX3JlYnVpbGRDYWNoZSgpO1xuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBDb21wdXRlZFxuXG4gIGdldCBzaG93UGFuZWwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzQ2ZnID0gKHRoaXMuc2xpY2VDb25maWdzIHx8IFtdKS5sZW5ndGggPiAwIHx8IHRoaXMuX2R5bmFtaWNTbGljZXMubGVuZ3RoID4gMDtcbiAgICBpZiAodGhpcy5hbHdheXNTaG93KSByZXR1cm4gaGFzQ2ZnO1xuICAgIHJldHVybiBoYXNDZmcgJiYgKHRoaXMuZGF0YT8ubGVuZ3RoID8/IDApID4gMDtcbiAgfVxuXG4gIGdldCBzbGljZXMoKTogU2xpY2VDb25maWc8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNsaWNlcztcbiAgfVxuXG4gIGdldCBzdGF0aWNTbGljZUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRpY1NsaWNlc0Zvck1lbnUoKTogQXJyYXk8eyBrZXk6IHN0cmluZzsgdGl0bGU6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSlcbiAgICAgIC5maWx0ZXIoKHMpID0+ICEhcy5jb2x1bW5LZXkpXG4gICAgICAubWFwKChzKSA9PiAoeyBrZXk6IHMuY29sdW1uS2V5ISwgdGl0bGU6IHMudGl0bGUgfHwgcy5jb2x1bW5LZXkhIH0pKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVEeW5hbWljU2xpY2VDb2x1bW5zKCk6IFNsaWNlQ29sdW1uRGVmPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9keW5hbWljU2xpY2VzXG4gICAgICAubWFwKChkKSA9PiAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKChjKSA9PiBjLmtleSA9PT0gZC5rZXkpKVxuICAgICAgLmZpbHRlcigoYyk6IGMgaXMgU2xpY2VDb2x1bW5EZWY8VD4gPT4gISFjKTtcbiAgfVxuXG4gIGdldCBhdmFpbGFibGVDb2x1bW5zRm9yRHluYW1pY1NsaWNlKCk6IFNsaWNlQ29sdW1uRGVmPFQ+W10ge1xuICAgIGNvbnN0IGR5bmFtaWNLZXlzID0gbmV3IFNldCh0aGlzLl9keW5hbWljU2xpY2VzLm1hcCgoZCkgPT4gZC5rZXkpKTtcbiAgICBjb25zdCBzdGF0aWNLZXlzID0gbmV3IFNldChcbiAgICAgICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSkubWFwKChzKSA9PiBzLmNvbHVtbktleSkuZmlsdGVyKChrKTogayBpcyBzdHJpbmcgPT4gISFrKVxuICAgICk7XG4gICAgY29uc3QgZXhpc3RpbmdLZXlzID0gbmV3IFNldChbLi4uZHluYW1pY0tleXMsIC4uLnN0YXRpY0tleXNdKTtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcmV0dXJuICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbHRlcigoYykgPT4ge1xuICAgICAgaWYgKGV4aXN0aW5nS2V5cy5oYXMoYy5rZXkpIHx8IHNlZW4uaGFzKGMua2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc2Vlbi5hZGQoYy5rZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgYWN0aXZlU2xpY2VCeUxhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhdGljQWN0aXZlQ291bnQgPSAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pLmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbCA9IHN0YXRpY0FjdGl2ZUNvdW50ICsgdGhpcy5fZHluYW1pY1NsaWNlcy5sZW5ndGg7XG4gICAgaWYgKHRvdGFsID09PSAwKSByZXR1cm4gJ0F1Y3VuJztcbiAgICBpZiAodG90YWwgPT09IDEpIHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gKHRoaXMuc2xpY2VDb25maWdzIHx8IFtdKVswXTtcbiAgICAgIGlmIChmaXJzdCkgcmV0dXJuIGZpcnN0LnRpdGxlIHx8IGZpcnN0LmNvbHVtbktleSB8fCAnMSc7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVEeW5hbWljU2xpY2VDb2x1bW5zWzBdPy5oZWFkZXIgfHwgJzEnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dG90YWx9IGFjdGlmc2A7XG4gIH1cblxuICAvLyDilIDilIAgVUkgc3RhdGVcblxuICBpc1NsaWNlQ29sbGFwc2VkKHNsaWNlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9jYWNoZWRTbGljZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWRTbGljZXMuaGFzKC0xIC0gc2xpY2VJbmRleCk7XG4gICAgfVxuICAgIHJldHVybiAhdGhpcy5fZXhwYW5kZWRTbGljZXMuaGFzKHNsaWNlSW5kZXgpO1xuICB9XG5cbiAgdG9nZ2xlU2xpY2VDb2xsYXBzZShzbGljZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zbGljZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjbG9zZWRLZXkgPSAtMSAtIHNsaWNlSW5kZXg7XG4gICAgICBpZiAodGhpcy5fZXhwYW5kZWRTbGljZXMuaGFzKGNsb3NlZEtleSkpIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRTbGljZXMuZGVsZXRlKGNsb3NlZEtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9leHBhbmRlZFNsaWNlcy5hZGQoY2xvc2VkS2V5KTtcbiAgICAgICAgdGhpcy5fc2Nyb2xsU2xpY2VUaXRsZUludG9WaWV3KHNsaWNlSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZXhwYW5kZWRTbGljZXMuaGFzKHNsaWNlSW5kZXgpKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmRlbGV0ZShzbGljZUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmFkZChzbGljZUluZGV4KTtcbiAgICAgICAgdGhpcy5fc2Nyb2xsU2xpY2VUaXRsZUludG9WaWV3KHNsaWNlSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0b2dnbGVQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gIXRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgdGhpcy5jb2xsYXBzZWRDaGFuZ2UuZW1pdCh0aGlzLmlzQ29sbGFwc2VkKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBpc1NsaWNlRHluYW1pYyhzbGljZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2xpY2VJbmRleCA+PSB0aGlzLnN0YXRpY1NsaWNlQ291bnQ7XG4gIH1cblxuICBpc1NsaWNlTG9hZGluZyhzbGljZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGF0aWNTbGljZSA9ICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSlbc2xpY2VJbmRleF07XG4gICAgaWYgKHN0YXRpY1NsaWNlPy5jb2x1bW5LZXkpIHtcbiAgICAgIGNvbnN0IGNvbERlZiA9ICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbmQoYyA9PiBjLmtleSA9PT0gc3RhdGljU2xpY2UuY29sdW1uS2V5KTtcbiAgICAgIGlmIChjb2xEZWY/LmxhenkpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5sYXp5U3RhdHVzLmdldChzdGF0aWNTbGljZS5jb2x1bW5LZXkhKSA/PyAnaWRsZSc7XG4gICAgICAgIHJldHVybiBzdGF0dXMgPT09ICdsb2FkaW5nJyB8fCBzdGF0dXMgPT09ICdpZGxlJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gdGhpcy5fZ2V0RHluYW1pY1NsaWNlQ29sdW1uS2V5KHNsaWNlSW5kZXgpO1xuICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY29sRGVmID0gKHRoaXMuY29sdW1ucyB8fCBbXSkuZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgIGlmICghY29sRGVmPy5sYXp5KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5sYXp5U3RhdHVzLmdldChrZXkpID8/ICdpZGxlJztcbiAgICByZXR1cm4gc3RhdHVzID09PSAnbG9hZGluZycgfHwgc3RhdHVzID09PSAnaWRsZSc7XG4gIH1cblxuICBpc1N0YXRpY1NsaWNlVmlzaWJsZShfY29sdW1uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRvZ2dsZVN0YXRpY1NsaWNlKF9jb2x1bW5LZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIETDqWzDqWd1w6kgw6AgdGFibGUuY29tcG9uZW50IHZpYSBfc3RhdGljU2xpY2VIaWRkZW5LZXlzIOKAlCBuZSByaWVuIGZhaXJlIGljaS5cbiAgfVxuXG4gIC8vIOKUgOKUgCBTZWxlY3Rpb25cbiAgZ2V0U2xpY2VJY29uKHNsaWNlOiBTbGljZUNvbmZpZzxUPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHNsaWNlLmljb24pIHJldHVybiBzbGljZS5pY29uO1xuICAgIGlmIChzbGljZS5jb2x1bW5LZXkpIHtcbiAgICAgIHJldHVybiAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKGMgPT4gYy5rZXkgPT09IHNsaWNlLmNvbHVtbktleSk/Lmljb247XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaXNTbGljZUNhdGVnb3J5QWN0aXZlKHNsaWNlSW5kZXg6IG51bWJlciwgY2F0ZWdvcnlLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KT8uaGFzKGNhdGVnb3J5S2V5KSA/PyBmYWxzZTtcbiAgfVxuXG4gIGlzU2xpY2VBbGxBY3RpdmUoc2xpY2VJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmhhcyhzbGljZUluZGV4KSB8fCB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KSEuc2l6ZSA9PT0gMDtcbiAgfVxuXG4gIHNsaWNlQ2F0ZWdvcnlDb3VudChzbGljZUluZGV4OiBudW1iZXIsIGNhdGVnb3J5S2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gYCR7c2xpY2VJbmRleH06JHtjYXRlZ29yeUtleX1gO1xuICAgIGlmICh0aGlzLl9jb3VudENhY2hlLmhhcyhjYWNoZUtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb3VudENhY2hlLmdldChjYWNoZUtleSkhO1xuICAgIH1cbiAgICBjb25zdCBzbGljZSA9IHRoaXMuX2NhY2hlZFNsaWNlc1tzbGljZUluZGV4XTtcbiAgICBpZiAoIXNsaWNlKSByZXR1cm4gMDtcbiAgICBjb25zdCBjYXRlZ29yeSA9IChzbGljZS5jYXRlZ29yaWVzIHx8IFtdKS5maW5kKChjKSA9PiBjLmtleSA9PT0gY2F0ZWdvcnlLZXkpO1xuICAgIGNvbnN0IGNvdW50ID0gY2F0ZWdvcnkgPyAodGhpcy5kYXRhIHx8IFtdKS5maWx0ZXIoKHJvdykgPT4gY2F0ZWdvcnkuZmlsdGVyKHJvdykpLmxlbmd0aCA6IDA7XG4gICAgdGhpcy5fY291bnRDYWNoZS5zZXQoY2FjaGVLZXksIGNvdW50KTtcbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBpc1NsaWNlRW1wdHkoc2xpY2VJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2xpY2UgPSB0aGlzLl9jYWNoZWRTbGljZXNbc2xpY2VJbmRleF07XG4gICAgaWYgKCFzbGljZSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIChzbGljZS5jYXRlZ29yaWVzIHx8IFtdKS5ldmVyeShjID0+IHRoaXMuc2xpY2VDYXRlZ29yeUNvdW50KHNsaWNlSW5kZXgsIGMua2V5KSA9PT0gMCk7XG4gIH1cblxuICBvblNsaWNlQ2F0ZWdvcnlTZWxlY3RlZChzbGljZUluZGV4OiBudW1iZXIsIGNhdGVnb3J5S2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzbGljZSA9IHRoaXMuc2xpY2VzW3NsaWNlSW5kZXhdO1xuICAgIGlmICghc2xpY2UpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuYWN0aXZlS2V5c0J5U2xpY2UuaGFzKHNsaWNlSW5kZXgpKSB7XG4gICAgICB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLnNldChzbGljZUluZGV4LCBuZXcgU2V0KCkpO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVLZXlzID0gdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5nZXQoc2xpY2VJbmRleCkhO1xuICAgIGlmIChzbGljZS5tdWx0aVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChhY3RpdmVLZXlzLmhhcyhjYXRlZ29yeUtleSkpIHtcbiAgICAgICAgYWN0aXZlS2V5cy5jbGVhcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZlS2V5cy5jbGVhcigpO1xuICAgICAgICBhY3RpdmVLZXlzLmFkZChjYXRlZ29yeUtleSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChhY3RpdmVLZXlzLmhhcyhjYXRlZ29yeUtleSkpIHtcbiAgICAgICAgYWN0aXZlS2V5cy5kZWxldGUoY2F0ZWdvcnlLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZlS2V5cy5hZGQoY2F0ZWdvcnlLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9lbWl0RmlsdGVyKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25TbGljZUFsbFNlbGVjdGVkKHNsaWNlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmhhcyhzbGljZUluZGV4KSkge1xuICAgICAgdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5nZXQoc2xpY2VJbmRleCkhLmNsZWFyKCk7XG4gICAgfVxuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogUmV0b3VybmUgbCfDqXRhdCBkZXMgZmlsdHJlcyBhY3RpZnMgc291cyBmb3JtZSBzw6lyaWFsaXNhYmxlIChzbGljZUluZGV4IOKGkiB0YWJsZWF1IGRlIGNsw6lzKS5cbiAgICogSW5jbHV0IGxlcyBzbGljZXMgc2FucyBzw6lsZWN0aW9uICh0YWJsZWF1IHZpZGUpIHBvdXIgZGlzdGluZ3VlciBcImF1Y3VuZSB0cmFuY2hlIHPDqWxlY3Rpb25uw6llXCJcbiAgICogKD0gZmlsdHJlIG91dmVydCwgcmllbiBjb2Now6kpIGRlIFwic2xpY2UgYWJzZW50ZVwiLiAqL1xuICBnZXRBY3RpdmVGaWx0ZXJzKCk6IFJlY29yZDxudW1iZXIsIHN0cmluZ1tdPiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmdbXT4gPSB7fTtcbiAgICB0aGlzLl9jYWNoZWRTbGljZXMuZm9yRWFjaCgoXywgaWR4KSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5nZXQoaWR4KTtcbiAgICAgIHJlc3VsdFtpZHhdID0ga2V5cyA/IFsuLi5rZXlzXSA6IFtdO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKiogUmVzdGF1cmUgbGVzIGZpbHRyZXMgYWN0aWZzIGRlcHVpcyB1biBzbmFwc2hvdCBzw6lyaWFsaXPDqSBldCByw6nDqW1ldCBsZSBmaWx0cmUuICovXG4gIHJlc3RvcmVGaWx0ZXJzKGZpbHRlcnM6IFJlY29yZDxudW1iZXIsIHN0cmluZ1tdPik6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UgPSBuZXcgTWFwKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZmlsdGVycykubWFwKChbaWR4LCBrZXlzXSkgPT4gW051bWJlcihpZHgpLCBuZXcgU2V0KGtleXMpXSlcbiAgICApO1xuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyDilIDilIAgRHluYW1pYyBzbGljZSBtYW5hZ2VtZW50XG5cbiAgYWRkRHluYW1pY1NsaWNlKGNvbHVtbjogU2xpY2VDb2x1bW5EZWY8VD4pOiB2b2lkIHtcbiAgICBjb25zdCBkaXN0aW5jdFZhbHVlcyA9IHRoaXMuX2NvbXB1dGVEaXN0aW5jdFZhbHVlcyhjb2x1bW4ua2V5KTtcbiAgICBjb25zdCBuZXdTbGljZTogU2xpY2VDb25maWc8VD4gPSB7XG4gICAgICB0aXRsZTogY29sdW1uLmhlYWRlcixcbiAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgIGNhdGVnb3JpZXM6IGRpc3RpbmN0VmFsdWVzLm1hcCgodikgPT4gdGhpcy5fYnVpbGRDYXRlZ29yeUZyb21WYWx1ZShjb2x1bW4ua2V5LCB2KSksXG4gICAgfTtcbiAgICB0aGlzLl9keW5hbWljU2xpY2VzID0gWy4uLnRoaXMuX2R5bmFtaWNTbGljZXMsIHsga2V5OiBjb2x1bW4ua2V5LCBzbGljZTogbmV3U2xpY2UgfV07XG4gICAgdGhpcy5fcmVidWlsZENhY2hlKCk7XG4gICAgdGhpcy5keW5hbWljU2xpY2VLZXlzQ2hhbmdlLmVtaXQodGhpcy5fZHluYW1pY1NsaWNlcy5tYXAoZCA9PiBkLmtleSkpO1xuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZW1vdmVEeW5hbWljU2xpY2Uoc2xpY2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZHluYW1pY0luZGV4ID0gc2xpY2VJbmRleCAtIHRoaXMuc3RhdGljU2xpY2VDb3VudDtcbiAgICBpZiAoZHluYW1pY0luZGV4IDwgMCkgcmV0dXJuO1xuICAgIGNvbnN0IG5ld0FjdGl2ZUtleXMgPSBuZXcgTWFwPG51bWJlciwgU2V0PHN0cmluZz4+KCk7XG4gICAgdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5mb3JFYWNoKChrZXlzLCBpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPCBzbGljZUluZGV4KSBuZXdBY3RpdmVLZXlzLnNldChpZHgsIGtleXMpO1xuICAgICAgZWxzZSBpZiAoaWR4ID4gc2xpY2VJbmRleCkgbmV3QWN0aXZlS2V5cy5zZXQoaWR4IC0gMSwga2V5cyk7XG4gICAgfSk7XG4gICAgdGhpcy5hY3RpdmVLZXlzQnlTbGljZSA9IG5ld0FjdGl2ZUtleXM7XG4gICAgdGhpcy5fZHluYW1pY1NsaWNlcyA9IHRoaXMuX2R5bmFtaWNTbGljZXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBkeW5hbWljSW5kZXgpO1xuICAgIHRoaXMuX3JlYnVpbGRDYWNoZSgpO1xuICAgIHRoaXMuZHluYW1pY1NsaWNlS2V5c0NoYW5nZS5lbWl0KHRoaXMuX2R5bmFtaWNTbGljZXMubWFwKGQgPT4gZC5rZXkpKTtcbiAgICB0aGlzLl9lbWl0RmlsdGVyKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkeW5hbWljSW5kZXggPSB0aGlzLl9keW5hbWljU2xpY2VzLmZpbmRJbmRleCgoZCkgPT4gZC5rZXkgPT09IGtleSk7XG4gICAgaWYgKGR5bmFtaWNJbmRleCA8IDApIHJldHVybjtcbiAgICBjb25zdCBzbGljZUluZGV4ID0gdGhpcy5zdGF0aWNTbGljZUNvdW50ICsgZHluYW1pY0luZGV4O1xuICAgIHRoaXMucmVtb3ZlRHluYW1pY1NsaWNlKHNsaWNlSW5kZXgpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFByaXZhdGUgaGVscGVyc1xuXG4gIHByaXZhdGUgX2VtaXRGaWx0ZXIoKTogdm9pZCB7XG4gICAgY29uc3Qgc2xpY2VzID0gdGhpcy5zbGljZXM7XG4gICAgY29uc3QgYWN0aXZlS2V5c0J5U2xpY2UgPSB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlO1xuXG4gICAgdGhpcy5hY3RpdmVLZXlzQ2hhbmdlLmVtaXQoXG4gICAgICBzbGljZXMubWFwKChfLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhY3RpdmVLZXlzQnlTbGljZS5nZXQoaSk7XG4gICAgICAgIHJldHVybiBrZXlzID8gWy4uLmtleXNdIDogW107XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBwcmVkID0gKHJvdzogVCk6IGJvb2xlYW4gPT5cbiAgICAgIHNsaWNlcy5ldmVyeSgoc2xpY2UsIHNsaWNlSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aXZlS2V5cyA9IGFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KTtcbiAgICAgICAgaWYgKCFhY3RpdmVLZXlzIHx8IGFjdGl2ZUtleXMuc2l6ZSA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBbLi4uYWN0aXZlS2V5c10uc29tZSgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSAoc2xpY2UuY2F0ZWdvcmllcyB8fCBbXSkuZmluZCgoYykgPT4gYy5rZXkgPT09IGtleSk7XG4gICAgICAgICAgaWYgKCFjYXRlZ29yeSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIC8vIFNpIHBhcyBkZSBmaWx0ZXIgZMOpZmluaSAodXNhZ2UgY2hhcnQpLCBvbiBuZSBmaWx0cmUgcGFzIGVuIG3DqW1vaXJlXG4gICAgICAgICAgaWYgKCFjYXRlZ29yeT8uZmlsdGVyKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gY2F0ZWdvcnkuZmlsdGVyKHJvdyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdChwcmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldER5bmFtaWNTbGljZUNvbHVtbktleShzbGljZUluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBkeW5hbWljSW5kZXggPSBzbGljZUluZGV4IC0gdGhpcy5zdGF0aWNTbGljZUNvdW50O1xuICAgIHJldHVybiB0aGlzLl9keW5hbWljU2xpY2VzW2R5bmFtaWNJbmRleF0/LmtleSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U2xpY2VJZGVudGl0eShzbGljZTogU2xpY2VDb25maWc8VD4sIGZhbGxiYWNrSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKHNsaWNlLmNvbHVtbktleSkge1xuICAgICAgcmV0dXJuIGBjb2x1bW46JHtzbGljZS5jb2x1bW5LZXl9YDtcbiAgICB9XG4gICAgaWYgKHNsaWNlLnRpdGxlKSB7XG4gICAgICByZXR1cm4gYHRpdGxlOiR7c2xpY2UudGl0bGV9YDtcbiAgICB9XG4gICAgY29uc3QgY2F0ZWdvcnlLZXlzID0gKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLm1hcCgoY2F0ZWdvcnkpID0+IGNhdGVnb3J5LmtleSkuam9pbignfCcpO1xuICAgIHJldHVybiBgaW5kZXg6JHtmYWxsYmFja0luZGV4fXxjYXRlZ29yaWVzOiR7Y2F0ZWdvcnlLZXlzfWA7XG4gIH1cblxuICBwcml2YXRlIF9tYXRlcmlhbGl6ZVNsaWNlKHNsaWNlOiBTbGljZUNvbmZpZzxUPik6IFNsaWNlQ29uZmlnPFQ+IHtcbiAgICBpZiAoIXNsaWNlLmNvbHVtbktleSB8fCAoc2xpY2UuY2F0ZWdvcmllcyAmJiBzbGljZS5jYXRlZ29yaWVzLmxlbmd0aCA+IDApKSB7XG4gICAgICByZXR1cm4gc2xpY2U7XG4gICAgfVxuICAgIGNvbnN0IGNvbCA9ICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbmQoYyA9PiBjLmtleSA9PT0gc2xpY2UuY29sdW1uS2V5KTtcbiAgICBjb25zdCBpc0xhenkgPSAhIWNvbD8ubGF6eTtcbiAgICBpZiAoaXNMYXp5ICYmIHRoaXMubGF6eVN0YXR1cy5nZXQoc2xpY2UuY29sdW1uS2V5ISkgIT09ICdsb2FkZWQnKSB7XG4gICAgICByZXR1cm4geyAuLi5zbGljZSwgY2F0ZWdvcmllczogW10gfTtcbiAgICB9XG4gICAgaWYgKHNsaWNlLmJ1Y2tldCkge1xuICAgICAgY29uc3QgZGlzdGluY3RWYWx1ZXMgPSBbLi4ubmV3IFNldCgodGhpcy5kYXRhIHx8IFtdKS5tYXAoc2xpY2UuYnVja2V0KSldLnNvcnQoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnNsaWNlLFxuICAgICAgICBjYXRlZ29yaWVzOiBkaXN0aW5jdFZhbHVlcy5tYXAoKHYpID0+ICh7XG4gICAgICAgICAga2V5OiB2LFxuICAgICAgICAgIGxhYmVsOiB2LFxuICAgICAgICAgIGZpbHRlcjogKHJvdzogVCkgPT4gc2xpY2UuYnVja2V0IShyb3cpID09PSB2LFxuICAgICAgICB9KSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBkaXN0aW5jdFZhbHVlcyA9IHRoaXMuX2NvbXB1dGVEaXN0aW5jdFZhbHVlcyhzbGljZS5jb2x1bW5LZXkhKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc2xpY2UsXG4gICAgICBjYXRlZ29yaWVzOiBkaXN0aW5jdFZhbHVlcy5tYXAoKHYpID0+IHRoaXMuX2J1aWxkQ2F0ZWdvcnlGcm9tVmFsdWUoc2xpY2UuY29sdW1uS2V5ISwgdikpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9idWlsZENhdGVnb3J5RnJvbVZhbHVlKGNvbHVtbktleTogc3RyaW5nLCB2OiBzdHJpbmcpOiB7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBmaWx0ZXI6IChyb3c6IFQpID0+IGJvb2xlYW4gfSB7XG4gICAgaWYgKHYgPT09IEVNUFRZX0NBVEVHT1JZX0tFWSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBFTVBUWV9DQVRFR09SWV9LRVksXG4gICAgICAgIGxhYmVsOiBFTVBUWV9DQVRFR09SWV9MQUJFTCxcbiAgICAgICAgZmlsdGVyOiAocm93OiBUKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5fZ2V0TGF6eUF3YXJlVmFsdWUoY29sdW1uS2V5LCByb3cpO1xuICAgICAgICAgIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09ICcnO1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogdixcbiAgICAgIGxhYmVsOiB2LFxuICAgICAgZmlsdGVyOiAocm93OiBUKSA9PiBTdHJpbmcodGhpcy5fZ2V0TGF6eUF3YXJlVmFsdWUoY29sdW1uS2V5LCByb3cpID8/ICcnKSA9PT0gdixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tcHV0ZURpc3RpbmN0VmFsdWVzKGNvbHVtbktleTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJhd1ZhbHVlcyA9ICh0aGlzLmRhdGEgfHwgW10pLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLl9nZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXksIHJvdyk7XG4gICAgICByZXR1cm4gdmFsICE9IG51bGwgJiYgdmFsICE9PSAnJyA/IFN0cmluZyh2YWwpIDogbnVsbDtcbiAgICB9KTtcbiAgICBjb25zdCBkaXN0aW5jdCA9IFsuLi5uZXcgU2V0KHJhd1ZhbHVlcy5maWx0ZXIoKHYpOiB2IGlzIHN0cmluZyA9PiB2ICE9PSBudWxsKSldLnNvcnQoKTtcbiAgICBpZiAocmF3VmFsdWVzLnNvbWUodiA9PiB2ID09PSBudWxsKSkge1xuICAgICAgZGlzdGluY3QucHVzaChFTVBUWV9DQVRFR09SWV9LRVkpO1xuICAgIH1cbiAgICByZXR1cm4gZGlzdGluY3Q7XG4gIH1cblxuICBwcml2YXRlIF9nZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXk6IHN0cmluZywgcm93OiBUKTogYW55IHtcbiAgICBjb25zdCBjb2xEZWYgPSAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKGMgPT4gYy5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgaWYgKGNvbERlZj8ubGF6eSkge1xuICAgICAgcmV0dXJuIHRoaXMubGF6eURhdGEuZ2V0KGNvbHVtbktleSk/LmdldChyb3cpID8/IG51bGw7XG4gICAgfVxuICAgIGlmIChjb2xEZWY/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gY29sRGVmLnZhbHVlKHJvdywgMCk7XG4gICAgfVxuICAgIHJldHVybiAocm93IGFzIGFueSlbY29sdW1uS2V5XTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYnVpbGRDYWNoZSgpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91c1NsaWNlcyA9IHRoaXMuX2NhY2hlZFNsaWNlcztcbiAgICBjb25zdCBwcmV2aW91c0FjdGl2ZUtleXMgPSB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlO1xuICAgIGNvbnN0IGFsbFNsaWNlcyA9IFsuLi4odGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pLCAuLi50aGlzLl9keW5hbWljU2xpY2VzLm1hcCgoZCkgPT4gZC5zbGljZSldO1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcyA9IGFsbFNsaWNlcy5tYXAoKHNsaWNlKSA9PiB0aGlzLl9tYXRlcmlhbGl6ZVNsaWNlKHNsaWNlKSk7XG5cbiAgICBjb25zdCBwcmV2aW91c0tleXNCeUlkZW50aXR5ID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICAgIHByZXZpb3VzU2xpY2VzLmZvckVhY2goKHNsaWNlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlS2V5cyA9IHByZXZpb3VzQWN0aXZlS2V5cy5nZXQoaW5kZXgpO1xuICAgICAgaWYgKCFhY3RpdmVLZXlzIHx8IGFjdGl2ZUtleXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgcHJldmlvdXNLZXlzQnlJZGVudGl0eS5zZXQodGhpcy5fZ2V0U2xpY2VJZGVudGl0eShzbGljZSwgaW5kZXgpLCBuZXcgU2V0KGFjdGl2ZUtleXMpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG5leHRBY3RpdmVLZXlzID0gbmV3IE1hcDxudW1iZXIsIFNldDxzdHJpbmc+PigpO1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcy5mb3JFYWNoKChzbGljZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHByZXZpb3VzS2V5cyA9IHByZXZpb3VzS2V5c0J5SWRlbnRpdHkuZ2V0KHRoaXMuX2dldFNsaWNlSWRlbnRpdHkoc2xpY2UsIGluZGV4KSk7XG4gICAgICBpZiAoIXByZXZpb3VzS2V5cyB8fCBwcmV2aW91c0tleXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBhdmFpbGFibGVLZXlzID0gbmV3IFNldCgoc2xpY2UuY2F0ZWdvcmllcyB8fCBbXSkubWFwKChjYXRlZ29yeSkgPT4gY2F0ZWdvcnkua2V5KSk7XG4gICAgICBjb25zdCBtYXRjaGluZ0tleXMgPSBbLi4ucHJldmlvdXNLZXlzXS5maWx0ZXIoKGtleSkgPT4gYXZhaWxhYmxlS2V5cy5oYXMoa2V5KSk7XG4gICAgICBpZiAobWF0Y2hpbmdLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV4dEFjdGl2ZUtleXMuc2V0KGluZGV4LCBuZXcgU2V0KG1hdGNoaW5nS2V5cykpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hY3RpdmVLZXlzQnlTbGljZSA9IG5leHRBY3RpdmVLZXlzO1xuICAgIHRoaXMuX2NvdW50Q2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZnJlc2hEeW5hbWljU2xpY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2R5bmFtaWNTbGljZXMgPSB0aGlzLl9keW5hbWljU2xpY2VzLm1hcCgoeyBrZXksIHNsaWNlIH0pID0+IHtcbiAgICAgIGNvbnN0IGRpc3RpbmN0VmFsdWVzID0gdGhpcy5fY29tcHV0ZURpc3RpbmN0VmFsdWVzKGtleSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksXG4gICAgICAgIHNsaWNlOiB7XG4gICAgICAgICAgLi4uc2xpY2UsXG4gICAgICAgICAgY2F0ZWdvcmllczogZGlzdGluY3RWYWx1ZXMubWFwKCh2KSA9PiB0aGlzLl9idWlsZENhdGVnb3J5RnJvbVZhbHVlKGtleSwgdikpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3Njcm9sbFNsaWNlVGl0bGVJbnRvVmlldyhzbGljZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2xpY2VQYW5lbEJvZHlSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuICAgICAgY29uc3Qgcm93ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXNsaWNlLWluZGV4PVwiJHtzbGljZUluZGV4fVwiXWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKCFyb3cpIHJldHVybjtcbiAgICAgIHJvdy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9KTtcbiAgICB9LCAwKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNsaWNlLXBhbmVsLXdyYXBwZXJcIiBbY2xhc3MuY29sbGFwc2VkXT1cImlzQ29sbGFwc2VkXCI+XG4gIDxhc2lkZSBjbGFzcz1cInNsaWNlLXBhbmVsXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJpc0NvbGxhcHNlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzbGljZS1wYW5lbC1oZWFkZXJcIj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiIWlzQ29sbGFwc2VkXCIgY2xhc3M9XCJzbGljZS1wYW5lbC10aXRsZVwiPlxuICAgICAgICB7eyBpMThuLmZpbHRlclBhbmVsVGl0bGUoc2xpY2VzLmxlbmd0aCkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93VG9nZ2xlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwic2xpY2UtdG9nZ2xlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpc0NvbGxhcHNlZCA/IGkxOG4uZXhwYW5kRmlsdGVyVGl0bGUgOiBpMThuLmNvbGxhcHNlRmlsdGVyVGl0bGVcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFuZWwoKVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInNsaWNlLXRvZ2dsZS1tYXQtaWNvblwiPnt7IGlzQ29sbGFwc2VkID8gJ2ZpbHRlcl9saXN0JyA6ICdmaWx0ZXJfbGlzdF9vZmYnIH19PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInNsaWNlLXBhbmVsLWJvZHlcIiAqbmdJZj1cIiFpc0NvbGxhcHNlZFwiICNzbGljZVBhbmVsQm9keT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNsaWNlIG9mIHNsaWNlczsgbGV0IHNpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlTbGljZUluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbGljZS10aXRsZS1yb3dcIiBbYXR0ci5kYXRhLXNsaWNlLWluZGV4XT1cInNpXCIgKGNsaWNrKT1cInRvZ2dsZVNsaWNlQ29sbGFwc2Uoc2kpXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbGljZS10aXRsZS1jaGV2cm9uXCIgW2NsYXNzLmV4cGFuZGVkXT1cIiFpc1NsaWNlQ29sbGFwc2VkKHNpKVwiPuKAujwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJnZXRTbGljZUljb24oc2xpY2UpXCIgY2xhc3M9XCJzbGljZS10aXRsZS1pY29uXCI+e3sgZ2V0U2xpY2VJY29uKHNsaWNlKSB9fTwvbWF0LWljb24+XG4gICAgICAgICAgPHAgY2xhc3M9XCJzbGljZS10aXRsZVwiPnt7IHNsaWNlLnRpdGxlIHx8IGkxOG4uZmlsdGVyQmxvY2tEZWZhdWx0VGl0bGUgfX08L3A+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJpc1NsaWNlRHluYW1pYyhzaSlcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInNsaWNlLXJlbW92ZS1idG5cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlRHluYW1pY1NsaWNlKHNpKVwiXG4gICAgICAgICAgPsOXPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbGljZS1zZWN0aW9uLWl0ZW1zXCIgKm5nSWY9XCIhaXNTbGljZUNvbGxhcHNlZChzaSlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTbGljZUxvYWRpbmcoc2kpOyBlbHNlIHNsaWNlQ29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNsaWNlLWxhenktbG9hZGluZ1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhenktc2tlbGV0b25cIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1za2VsZXRvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYXp5LXNrZWxldG9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzbGljZUNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBzbGljZS5jYXRlZ29yaWVzOyB0cmFja0J5OiB0cmFja0J5Q2F0ZWdvcnlLZXlcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2xpY2VDYXRlZ29yeUNvdW50KHNpLCBjYXRlZ29yeS5rZXkpID4gMFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzbGljZS1pdGVtXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzU2xpY2VDYXRlZ29yeUFjdGl2ZShzaSwgY2F0ZWdvcnkua2V5KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1jYXRlZ29yeS1rZXldPVwiY2F0ZWdvcnkua2V5XCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY2F0ZWdvcnkubGFiZWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNsaWNlQ2F0ZWdvcnlTZWxlY3RlZChzaSwgY2F0ZWdvcnkua2V5KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBjYXRlZ29yeS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNob3dDb3VudHNcIj57eyBzbGljZUNhdGVnb3J5Q291bnQoc2ksIGNhdGVnb3J5LmtleSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNTbGljZUVtcHR5KHNpKVwiIGNsYXNzPVwic2xpY2UtZW1wdHktc3RhdGVcIj57eyBpMThuLmZpbHRlckVtcHR5U3RhdGUgfX08L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8aHIgKm5nSWY9XCJzaSA8IHNsaWNlcy5sZW5ndGggLSAxXCIgY2xhc3M9XCJzbGljZS1kaXZpZGVyXCIgLz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2FzaWRlPlxuPC9kaXY+XG4iXX0=
|