basesite-shared-grid-lib 15.2.6 → 15.4.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/basesite-shared-grid-lib-15.4.6.tgz +0 -0
- package/esm2020/lib/grid-library.component.mjs +9 -1
- package/esm2020/lib/helpers/oDataProvider.mjs +4 -2
- package/fesm2015/basesite-shared-grid-lib.mjs +11 -1
- package/fesm2015/basesite-shared-grid-lib.mjs.map +1 -1
- package/fesm2020/basesite-shared-grid-lib.mjs +11 -1
- package/fesm2020/basesite-shared-grid-lib.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/styles/styles.scss +13 -0
- package/basesite-shared-grid-lib-15.2.6.tgz +0 -0
|
Binary file
|
|
@@ -212,6 +212,14 @@ export class GridLibraryComponent {
|
|
|
212
212
|
Accept: 'application/json',
|
|
213
213
|
},
|
|
214
214
|
}).then((response) => response.json()),
|
|
215
|
+
afterLoadData: (options, rowData, totalCount) => {
|
|
216
|
+
if (!rowData || rowData.length <= 0) {
|
|
217
|
+
this.agGrid.api.showNoRowsOverlay();
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
this.agGrid.api.hideOverlay();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
215
223
|
}));
|
|
216
224
|
}
|
|
217
225
|
}
|
|
@@ -381,4 +389,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImpor
|
|
|
381
389
|
type: ViewChild,
|
|
382
390
|
args: [AgGridAngular]
|
|
383
391
|
}] } });
|
|
384
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1saWJyYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Jhc2VzaXRlLXNoYXJlZC1ncmlkLWxpYi9zcmMvbGliL2dyaWQtbGlicmFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBWWhELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7O0FBbUNuRixNQUFNLE9BQU8sb0JBQW9CO0lBMkIvQixZQUNVLFdBQStCLEVBQy9CLFFBQWtCO1FBRGxCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBekJuQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVEsVUFBVSxDQUFDO1FBRy9CLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUd4QyxtQkFBYyxHQUFXLENBQUMsQ0FBQztRQUMzQiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFDekMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDekMsZ0JBQWdCO1FBQ04sb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBTzdDLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsaUJBQVksR0FBaUIsWUFBWSxDQUFDO1FBQzFDLGlCQUFZ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c0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xyXG5pbXBvcnQge1xyXG4gIENvbERlZixcclxuICBHZXRSb3dJZEZ1bmMsXHJcbiAgR2V0Um93SWRQYXJhbXMsXHJcbiAgR3JpZFJlYWR5RXZlbnQsXHJcbiAgUGFnaW5hdGlvbk51bWJlckZvcm1hdHRlclBhcmFtcyxcclxuICBSb3dNb2RlbFR5cGUsXHJcbiAgUm93Tm9kZSxcclxuICBWYWx1ZUZvcm1hdHRlclBhcmFtcyxcclxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IEdyaWRMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4vZ3JpZC1saWJyYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPZGF0YVNlcnZlclNpZGVQcm92aWRlciB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IEJ1dHRvblJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9yZW5kZXJlci9idXR0b24tcmVuZGVyZXIvYnV0dG9uLXJlbmRlcmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEN1c3RvbVRvb2x0aXAgfSBmcm9tICcuL3JlbmRlcmVyL3Rvb2x0aXAtcmVuZGVyZXIvY3VzdG9tLXRvb2x0aXAtcmVuZGVyZXInO1xyXG5pbXBvcnQgeyBEcm9wZG93blJlbmRlcmVyIH0gZnJvbSAnLi9yZW5kZXJlci9kcm9wZG93bi1yZW5kZXJlci9kcm9wLWRvd24tcmVuZGVyZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYmFzZXNpdGUtc2hhcmVkLWdyaWQtbGliJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFnLWdyaWQtYW5ndWxhclxyXG4gICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO2hlaWdodDo5OC4ydmhcIlxyXG4gICAgICBjbGFzcz1cImFnLXRoZW1lLWJhbGhhbSBzaGFyZWQtZ3JpZC1saWJcIlxyXG4gICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCJcclxuICAgICAgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiXHJcbiAgICAgIFtyb3dEYXRhXT1cInJvd0RhdGFcIlxyXG4gICAgICBbcm93U2VsZWN0aW9uXT1cInJvd1NlbGVjdGlvblwiXHJcbiAgICAgIFthbmltYXRlUm93c109XCJ0cnVlXCJcclxuICAgICAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQpXCJcclxuICAgICAgW3BhZ2luYXRpb25dPVwidHJ1ZVwiXHJcbiAgICAgIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwiZ3JpZFBhZ2VTaXplXCJcclxuICAgICAgW3BhZ2luYXRpb25OdW1iZXJGb3JtYXR0ZXJdPVwicGFnaW5hdGlvbk51bWJlckZvcm1hdHRlclwiXHJcbiAgICAgIChtb2RlbFVwZGF0ZWQpPVwib25Nb2RlbFVwZGF0ZWQoKVwiXHJcbiAgICAgIFt0b29sdGlwU2hvd0RlbGF5XT1cInRvb2x0aXBTaG93RGVsYXlcIlxyXG4gICAgICBbdG9vbHRpcEhpZGVEZWxheV09XCJ0b29sdGlwSGlkZURlbGF5XCJcclxuICAgICAgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIlxyXG4gICAgICBbY2FjaGVCbG9ja1NpemVdPVwiY2FjaGVCbG9ja1NpemVcIlxyXG4gICAgICBbbWF4Q29uY3VycmVudERhdGFzb3VyY2VSZXF1ZXN0c109XCIxXCJcclxuICAgICAgW2Jsb2NrTG9hZERlYm91bmNlTWlsbGlzXT1cIjEwMFwiXHJcbiAgICAgIChjb2x1bW5WaXNpYmxlKT1cIm9uU2F2ZUdyaWRDb2x1bW5TdGF0ZSgkZXZlbnQpXCJcclxuICAgICAgKGNvbHVtblBpbm5lZCk9XCJvblNhdmVHcmlkQ29sdW1uU3RhdGUoJGV2ZW50KVwiXHJcbiAgICAgIChjb2x1bW5SZXNpemVkKT1cIm9uU2F2ZUdyaWRDb2x1bW5TdGF0ZSgkZXZlbnQpXCJcclxuICAgICAgKGNvbHVtbk1vdmVkKT1cIm9uU2F2ZUdyaWRDb2x1bW5TdGF0ZSgkZXZlbnQpXCJcclxuICAgICAgKHNvcnRDaGFuZ2VkKT1cIm9uU29ydENoYW5nZWRFdmVudCgpXCJcclxuICAgICAgW3Jvd011bHRpU2VsZWN0V2l0aENsaWNrXT1cInJvd011bHRpU2VsZWN0V2l0aENsaWNrXCJcclxuICAgID5cclxuICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRMaWJyYXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL2lucHV0IHBhcmFtc1xyXG4gIEBJbnB1dCgpIGNvbHVtbkRlZnM6IGFueTtcclxuICBASW5wdXQoKSByb3dEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDIwO1xyXG4gIEBJbnB1dCgpIHJvd1NlbGVjdGlvbjogYW55ID0gJ211bHRpcGxlJztcclxuICBASW5wdXQoKSBncmlkSWQ6IGFueTtcclxuICBASW5wdXQoKSBsb2dnZWRJblVzZXI6IGFueTtcclxuICBASW5wdXQoKSBlbmFibGVTZXJ2ZXJTaWRlUGFnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VydmVyRGF0YVVybCE6IHN0cmluZztcclxuICBASW5wdXQoKSBlbnZpcm9ubWVudCE6IHN0cmluZztcclxuICBASW5wdXQoKSBjYWNoZUJsb2NrU2l6ZTogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSByb3dNdWx0aVNlbGVjdFdpdGhDbGljazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZsb2F0aW5nRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy9ldmVudCBlbWl0dGVyc1xyXG4gIEBPdXRwdXQoKSBidG5DbGlja0hhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgLy92aWV3Q2hpbGRzXHJcbiAgQFZpZXdDaGlsZChBZ0dyaWRBbmd1bGFyKSBhZ0dyaWQhOiBBZ0dyaWRBbmd1bGFyO1xyXG5cclxuICAvL3BhcmFtdGVyc1xyXG4gIGdyaWRDb2x1bW5TdGF0ZTogYW55O1xyXG4gIHB1YmxpYyB0b29sdGlwU2hvd0RlbGF5ID0gMDtcclxuICBwdWJsaWMgdG9vbHRpcEhpZGVEZWxheSA9IDIwMDA7XHJcbiAgcHVibGljIHJvd01vZGVsVHlwZTogUm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xyXG4gIHB1YmxpYyBncmlkUGFnZVNpemU6IG51bWJlciA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZExpYnJhcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcclxuICApIHt9XHJcblxyXG4gIG9uU29ydENoYW5nZWRFdmVudCgpIHtcclxuICAgIHRoaXMuZ3JpZENvbHVtblN0YXRlID0gdGhpcy5hZ0dyaWQuY29sdW1uQXBpLmdldENvbHVtblN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xyXG4gICAgc29ydGFibGU6IHRydWUsXHJcbiAgICBmaWx0ZXI6IHRydWUsXHJcbiAgICB0b29sdGlwQ29tcG9uZW50OiBDdXN0b21Ub29sdGlwLFxyXG4gIH07XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5ncmlkUGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5jYWNoZUJsb2NrU2l6ZSA9IHRoaXMuY2FjaGVCbG9ja1NpemUgPSAwXHJcbiAgICAgID8gdGhpcy5wYWdlU2l6ZVxyXG4gICAgICA6IHRoaXMuY2FjaGVCbG9ja1NpemU7XHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldEJhc2VVcmwodGhpcy5lbnZpcm9ubWVudCk7XHJcbiAgICB0aGlzLmdldEdyaWRTdGF0ZSgpO1xyXG4gICAgdGhpcy5nZXRDb2xEZWYoKTtcclxuICAgIGlmICh0aGlzLmVuYWJsZVNlcnZlclNpZGVQYWdpbmcgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLnJvd01vZGVsVHlwZSA9ICdzZXJ2ZXJTaWRlJztcclxuICAgICAgdGhpcy5yb3dEYXRhID0gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvd01vZGVsVHlwZSA9ICdjbGllbnRTaWRlJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdpbmF0aW9uTnVtYmVyRm9ybWF0dGVyOiAoXHJcbiAgICBwYXJhbXM6IFBhZ2luYXRpb25OdW1iZXJGb3JtYXR0ZXJQYXJhbXNcclxuICApID0+IHN0cmluZyA9IChwYXJhbXM6IFBhZ2luYXRpb25OdW1iZXJGb3JtYXR0ZXJQYXJhbXMpID0+IHtcclxuICAgIHJldHVybiAnWycgKyBwYXJhbXMudmFsdWUudG9Mb2NhbGVTdHJpbmcoKSArICddJztcclxuICB9O1xyXG5cclxuICBvbk1vZGVsVXBkYXRlZCgpIHtcclxuICAgIHRoaXMuc2V0R3JpZFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xEZWYoKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkSWQgJiYgdGhpcy5sb2dnZWRJblVzZXIpIHtcclxuICAgICAgdGhpcy5ncmlkU2VydmljZS5nZXRDb2xEZWYodGhpcy5ncmlkSWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMSkge1xyXG4gICAgICAgICAgbGV0IGNvbGRlZjogQ29sRGVmW10gPSByZXNwb25zZS5saXN0Lm1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0J1dHRvbiA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICBpZiAocmVzLmNvbHVtblR5cGUgPT09ICdjaGVja2JveCcpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiByZXMuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IHJlcy50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwRmllbGQ6IHJlcy5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBoZWFkZXJDaGVja2JveFNlbGVjdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBjaGVja2JveFNlbGVjdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgc2hvd0Rpc2FibGVkQ2hlY2tib3hlczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgc3VwcHJlc3NGaWx0ZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHN1cHByZXNzU29ydGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgc3VwcHJlc3NNZW51OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICB3aWR0aDogMjAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmNvbHVtblR5cGUgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiByZXMuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IHJlcy50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIHN1cHByZXNzRmlsdGVyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBzdXBwcmVzc1NvcnRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHN1cHByZXNzTWVudTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgdG9vbHRpcEZpZWxkOiByZXMuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogRHJvcGRvd25SZW5kZXJlcixcclxuICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogdGhpcy5vbkJ0bkNsaWNrLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcDogcmVzLnRvb2x0aXAsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcERvd25EYXRhOiByZXMuZHJvcERvd25EYXRhLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBvbkNlbGxDbGlja2VkOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5ub2RlLnNldFNlbGVjdGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwLFxyXG4gICAgICAgICAgICAgICAgICBwaW5uZWQ6IHJlcy5waW5Qb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgbG9ja1Bpbm5lZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiByZXMuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IHJlcy50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBoaWRlOiAhcmVzLnZpc2libGUsXHJcbiAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwRmllbGQ6IHJlcy5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgZmxvYXRpbmdGaWx0ZXI6IHRoaXMuZmxvYXRpbmdGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmNvbFZhbHVlRm9ybWF0dGVyLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcmFibGU6IHJlcy5maWx0ZXJhYmxlLFxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLmNvbHVtblR5cGUgPT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgICAgICAgID8gJ2FnVGV4dENvbHVtbkZpbHRlcidcclxuICAgICAgICAgICAgICAgICAgICAgIDogcmVzLmNvbHVtblR5cGUgPT0gJ251bWJlcidcclxuICAgICAgICAgICAgICAgICAgICAgID8gJ2FnTnVtYmVyQ29sdW1uRmlsdGVyJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYWdEYXRlQ29sdW1uRmlsdGVyJyxcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyYXRvcjogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodDogYW55LFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2VsbFZhbHVlOiBhbnlcclxuICAgICAgICAgICAgICAgICAgICApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVBc1N0cmluZyA9IGNlbGxWYWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZUFzU3RyaW5nID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmNvbHVtblR5cGUgPT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRlID0gbmV3IERhdGUoZGF0ZUFzU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxEYXRlIDwgZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjZWxsRGF0ZSA+IGZpbHRlckxvY2FsRGF0ZUF0TWlkbmlnaHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogcmVzLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogcmVzLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaGlkZTogIXJlcy52aXNpYmxlLFxyXG4gICAgICAgICAgICAgICAgc3VwcHJlc3NGaWx0ZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzdXBwcmVzc1NvcnRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzdXBwcmVzc01lbnU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0b29sdGlwRmllbGQ6IHJlcy5maWVsZCxcclxuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogQnV0dG9uUmVuZGVyZXJDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgICAgb25DbGljazogdGhpcy5vbkJ0bkNsaWNrLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsOiByZXMubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgIGljb246IHJlcy5pY29uLFxyXG4gICAgICAgICAgICAgICAgICBidXR0b25OYW1lOiByZXMuYnV0dG9uTmFtZSxcclxuICAgICAgICAgICAgICAgICAgdG9vbHRpcDogcmVzLnRvb2x0aXAsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgdmFsdWVHZXR0ZXI6IChwYXJhbXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gcmVzLnRvb2x0aXAgfHwgcmVzLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAyMCxcclxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ2FjdGlvbi1idXR0b24nLFxyXG4gICAgICAgICAgICAgICAgcGlubmVkOiByZXMucGluUG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICBsb2NrUGlubmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5jb2x1bW5EZWZzID0gY29sZGVmO1xyXG4gICAgICAgICAgdGhpcy5hZ0dyaWQuZ3JpZE9wdGlvbnM/LmFwaT8uc2V0Q29sdW1uRGVmcyhjb2xkZWYpO1xyXG4gICAgICAgICAgdGhpcy5nZXRHcmlkU3RhdGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0NvbERlZiBSZWFkIEVycm9yPT4nLCByZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ1BsZWFzZSBwYXNzIHZhbGlkIEdyaWRJZCBhbmQgbG9nZ2VkSW4gdXNlciBJZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RXh0ZXJuYWxGaWx0ZXJzKG9wdGlvbnM6IGFueSkge1xyXG4gICAgdmFyIHNlcnZlclVybCA9ICcnO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlcnZlckRhdGFVcmwuaW5kZXhPZignZmlsdGVyJykgPj0gMCAmJlxyXG4gICAgICBvcHRpb25zLmluZGV4T2YoJ2ZpbHRlcicpID49IDBcclxuICAgICkge1xyXG4gICAgICBsZXQgc2x1ZyA9IHRoaXMuc2VydmVyRGF0YVVybC5zcGxpdCgnPyRmaWx0ZXI9Jyk7XHJcbiAgICAgIGlmIChzbHVnICYmIHNsdWcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zICsgJyBhbmQgJyArIHNsdWdbMV07XHJcbiAgICAgICAgc2VydmVyVXJsID0gc2x1Z1swXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlcnZlckRhdGFVcmwuaW5kZXhPZignPycpID49IDApIHtcclxuICAgICAgc2VydmVyVXJsID0gdGhpcy5zZXJ2ZXJEYXRhVXJsO1xyXG4gICAgICBvcHRpb25zID0gb3B0aW9ucy5yZXBsYWNlKCc/JywgJyYnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHtzZXJ2ZXJVcmx9JHtvcHRpb25zfWA7XHJcbiAgfVxyXG5cclxuICBvbkdyaWRSZWFkeShwYXJhbXM6IEdyaWRSZWFkeUV2ZW50KSB7XHJcbiAgICB0aGlzLmdyaWRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XHJcbiAgICBpZiAodGhpcy5lbmFibGVTZXJ2ZXJTaWRlUGFnaW5nID09IHRydWUpIHtcclxuICAgICAgcGFyYW1zLmFwaS5zZXRTZXJ2ZXJTaWRlRGF0YXNvdXJjZShcclxuICAgICAgICBuZXcgT2RhdGFTZXJ2ZXJTaWRlUHJvdmlkZXIoe1xyXG4gICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBmYWxzZSxcclxuICAgICAgICAgIGNhbGxBcGk6IChvcHRpb25zKSA9PlxyXG4gICAgICAgICAgICBmZXRjaChgJHt0aGlzLnNldEV4dGVybmFsRmlsdGVycyhvcHRpb25zKX1gLCB7XHJcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRHcmlkU3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkQ29sdW1uU3RhdGUpIHtcclxuICAgICAgdGhpcy5hZ0dyaWQuY29sdW1uQXBpLmFwcGx5Q29sdW1uU3RhdGUoe1xyXG4gICAgICAgIHN0YXRlOiB0aGlzLmdyaWRDb2x1bW5TdGF0ZSxcclxuICAgICAgICBhcHBseU9yZGVyOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBjb2x1bW5zID0gdGhpcy5hZ0dyaWQuY29sdW1uQXBpLmdldENvbHVtbnMoKTtcclxuICAgICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gaWYgKGNvbHVtbnMubGVuZ3RoID4gMTApIHtcclxuICAgICAgICAvLyAgIHRoaXMuYWdHcmlkLmNvbHVtbkFwaS5hdXRvU2l6ZUFsbENvbHVtbnMoKTtcclxuICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgdGhpcy5hZ0dyaWQuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgY29uc3QgYWxsQ29sdW1uSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYWdHcmlkLmNvbHVtbkFwaSEuZ2V0Q29sdW1ucygpIS5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICAgIGFsbENvbHVtbklkcy5wdXNoKGNvbHVtbi5nZXRJZCgpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFnR3JpZC5jb2x1bW5BcGkhLmF1dG9TaXplQ29sdW1ucyhhbGxDb2x1bW5JZHMsIGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZElkICYmIHRoaXMubG9nZ2VkSW5Vc2VyKSB7XHJcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2VcclxuICAgICAgICAuZ2V0R3JpZFN0YXRlKHRoaXMuZ3JpZElkLCB0aGlzLmxvZ2dlZEluVXNlcilcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyA9PSAxICYmXHJcbiAgICAgICAgICAgIHJlc3BvbnNlLm9iamVjdCAmJlxyXG4gICAgICAgICAgICByZXNwb25zZS5vYmplY3QuZ3JpZENvbmZpZ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JpZENvbHVtblN0YXRlID0gSlNPTi5wYXJzZShyZXNwb25zZS5vYmplY3QuZ3JpZENvbmZpZyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0R3JpZFN0YXRlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igd2hpbGUgbG9hZGluZyBncmlkIHN0YXRlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJ0bkNsaWNrKGU6IGFueSkge1xyXG4gICAgY29uc29sZS5sb2coJ2J0biBjbGljaz0+JywgZSk7XHJcbiAgICB0aGlzLmJ0bkNsaWNrSGFuZGxlci5lbWl0KGUucm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICBvblNhdmVHcmlkQ29sdW1uU3RhdGUoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IGNvbHVtblN0YXRlID0gdGhpcy5hZ0dyaWQuY29sdW1uQXBpPy5nZXRDb2x1bW5TdGF0ZSgpO1xyXG4gICAgbGV0IGNvbHVtbkRhdGEgPSB7XHJcbiAgICAgIGdyaWRDb25maWc6IEpTT04uc3RyaW5naWZ5KGNvbHVtblN0YXRlKSxcclxuICAgICAgdWlHcmlkSWQ6IHRoaXMuZ3JpZElkLFxyXG4gICAgICB1c2VySWQ6IHRoaXMubG9nZ2VkSW5Vc2VyLFxyXG4gICAgfTtcclxuICAgIGlmIChldmVudC5maW5pc2hlZCA9PSB0cnVlIHx8IGV2ZW50LnR5cGUgPT09ICdjb2x1bW5QaW5uZWQnKSB7XHJcbiAgICAgIHRoaXMuZ3JpZENvbHVtblN0YXRlID0gY29sdW1uU3RhdGU7XHJcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2F2ZUNvbHVtbkNvbmZpZyhjb2x1bW5EYXRhKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRHcmlkU3RhdGUoKTtcclxuICAgICAgICBpZiAocmVzLnN0YXR1cyA9PSAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igd2hpbGUgc2F2aW5nIGNvbHVtbiBjb25maWd1cmF0aW9uOicsIHJlcy5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Um93QnlJZDogR2V0Um93SWRGdW5jID0gKHBhcmFtczogR2V0Um93SWRQYXJhbXMpID0+IHtcclxuICAgIHZhciBkYXRhID0gcGFyYW1zLmRhdGE7XHJcbiAgICByZXR1cm4gZGF0YS5pZCA/PyAwO1xyXG4gIH07XHJcblxyXG4gIGNvbFZhbHVlRm9ybWF0dGVyKHBhcmFtczogVmFsdWVGb3JtYXR0ZXJQYXJhbXMpIHtcclxuICAgIGlmIChpc05hTigrcGFyYW1zLnZhbHVlKSkge1xyXG4gICAgICB2YXIgZGF0ZVdyYXBwZXIgPSBuZXcgRGF0ZShwYXJhbXMudmFsdWUpO1xyXG4gICAgICBsZXQgaXNWYWxpZERhdGUgPSAhaXNOYU4oZGF0ZVdyYXBwZXIuZ2V0RGF0ZSgpKTtcclxuICAgICAgaWYgKGlzVmFsaWREYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHBhcmFtcy52YWx1ZSwgJ01NLWRkLXl5eXknKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gcGFyYW1zLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFyYW1zLnZhbHVlO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
392
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1saWJyYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Jhc2VzaXRlLXNoYXJlZC1ncmlkLWxpYi9zcmMvbGliL2dyaWQtbGlicmFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBWWhELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7O0FBbUNuRixNQUFNLE9BQU8sb0JBQW9CO0lBMkIvQixZQUNVLFdBQStCLEVBQy9CLFFBQWtCO1FBRGxCLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBekJuQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVEsVUFBVSxDQUFDO1FBRy9CLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUd4QyxtQkFBYyxHQUFXLENBQUMsQ0FBQztRQUMzQiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFDekMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDekMsZ0JBQWdCO1FBQ04sb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBTzdDLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsaUJBQVksR0FBaUIsWUFBWSxDQUFDO1FBQzFDLGlCQUFZ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RyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFHbUIsTUFBTTtzQkFBL0IsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFnR3JpZEFuZ3VsYXIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xyXG5pbXBvcnQge1xyXG4gIENvbERlZixcclxuICBHZXRSb3dJZEZ1bmMsXHJcbiAgR2V0Um93SWRQYXJhbXMsXHJcbiAgR3JpZFJlYWR5RXZlbnQsXHJcbiAgUGFnaW5hdGlvbk51bWJlckZvcm1hdHRlclBhcmFtcyxcclxuICBSb3dNb2RlbFR5cGUsXHJcbiAgUm93Tm9kZSxcclxuICBWYWx1ZUZvcm1hdHRlclBhcmFtcyxcclxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcbmltcG9ydCB7IEdyaWRMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4vZ3JpZC1saWJyYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPZGF0YVNlcnZlclNpZGVQcm92aWRlciB9IGZyb20gJy4vaGVscGVycyc7XHJcbmltcG9ydCB7IEJ1dHRvblJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9yZW5kZXJlci9idXR0b24tcmVuZGVyZXIvYnV0dG9uLXJlbmRlcmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEN1c3RvbVRvb2x0aXAgfSBmcm9tICcuL3JlbmRlcmVyL3Rvb2x0aXAtcmVuZGVyZXIvY3VzdG9tLXRvb2x0aXAtcmVuZGVyZXInO1xyXG5pbXBvcnQgeyBEcm9wZG93blJlbmRlcmVyIH0gZnJvbSAnLi9yZW5kZXJlci9kcm9wZG93bi1yZW5kZXJlci9kcm9wLWRvd24tcmVuZGVyZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYmFzZXNpdGUtc2hhcmVkLWdyaWQtbGliJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFnLWdyaWQtYW5ndWxhclxyXG4gICAgICBzdHlsZT1cIndpZHRoOiAxMDAlO2hlaWdodDo5OC4ydmhcIlxyXG4gICAgICBjbGFzcz1cImFnLXRoZW1lLWJhbGhhbSBzaGFyZWQtZ3JpZC1saWJcIlxyXG4gICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCJcclxuICAgICAgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiXHJcbiAgICAgIFtyb3dEYXRhXT1cInJvd0RhdGFcIlxyXG4gICAgICBbcm93U2VsZWN0aW9uXT1cInJvd1NlbGVjdGlvblwiXHJcbiAgICAgIFthbmltYXRlUm93c109XCJ0cnVlXCJcclxuICAgICAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQpXCJcclxuICAgICAgW3BhZ2luYXRpb25dPVwidHJ1ZVwiXHJcbiAgICAgIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwiZ3JpZFBhZ2VTaXplXCJcclxuICAgICAgW3BhZ2luYXRpb25OdW1iZXJGb3JtYXR0ZXJdPVwicGFnaW5hdGlvbk51bWJlckZvcm1hdHRlclwiXHJcbiAgICAgIChtb2RlbFVwZGF0ZWQpPVwib25Nb2RlbFVwZGF0ZWQoKVwiXHJcbiAgICAgIFt0b29sdGlwU2hvd0RlbGF5XT1cInRvb2x0aXBTaG93RGVsYXlcIlxyXG4gICAgICBbdG9vbHRpcEhpZGVEZWxheV09XCJ0b29sdGlwSGlkZURlbGF5XCJcclxuICAgICAgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIlxyXG4gICAgICBbY2FjaGVCbG9ja1NpemVdPVwiY2FjaGVCbG9ja1NpemVcIlxyXG4gICAgICBbbWF4Q29uY3VycmVudERhdGFzb3VyY2VSZXF1ZXN0c109XCIxXCJcclxuICAgICAgW2Jsb2NrTG9hZERlYm91bmNlTWlsbGlzXT1cIjEwMFwiXHJcbiAgICAgIChjb2x1bW5WaXNpYmxlKT1cIm9uU2F2ZUdyaWRDb2x1bW5TdGF0ZSgkZXZlbnQpXCJcclxuICAgICAgKGNvbHVtblBpbm5lZCk9XCJvblNhdmVHcmlkQ29sdW1uU3RhdGUoJGV2ZW50KVwiXHJcbiAgICAgIChjb2x1bW5SZXNpemVkKT1cIm9uU2F2ZUdyaWRDb2x1bW5TdGF0ZSgkZXZlbnQpXCJcclxuICAgICAgKGNvbHVtbk1vdmVkKT1cIm9uU2F2ZUdyaWRDb2x1bW5TdGF0ZSgkZXZlbnQpXCJcclxuICAgICAgKHNvcnRDaGFuZ2VkKT1cIm9uU29ydENoYW5nZWRFdmVudCgpXCJcclxuICAgICAgW3Jvd011bHRpU2VsZWN0V2l0aENsaWNrXT1cInJvd011bHRpU2VsZWN0V2l0aENsaWNrXCJcclxuICAgID5cclxuICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRMaWJyYXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL2lucHV0IHBhcmFtc1xyXG4gIEBJbnB1dCgpIGNvbHVtbkRlZnM6IGFueTtcclxuICBASW5wdXQoKSByb3dEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDIwO1xyXG4gIEBJbnB1dCgpIHJvd1NlbGVjdGlvbjogYW55ID0gJ211bHRpcGxlJztcclxuICBASW5wdXQoKSBncmlkSWQ6IGFueTtcclxuICBASW5wdXQoKSBsb2dnZWRJblVzZXI6IGFueTtcclxuICBASW5wdXQoKSBlbmFibGVTZXJ2ZXJTaWRlUGFnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VydmVyRGF0YVVybCE6IHN0cmluZztcclxuICBASW5wdXQoKSBlbnZpcm9ubWVudCE6IHN0cmluZztcclxuICBASW5wdXQoKSBjYWNoZUJsb2NrU2l6ZTogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSByb3dNdWx0aVNlbGVjdFdpdGhDbGljazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZsb2F0aW5nRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy9ldmVudCBlbWl0dGVyc1xyXG4gIEBPdXRwdXQoKSBidG5DbGlja0hhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgLy92aWV3Q2hpbGRzXHJcbiAgQFZpZXdDaGlsZChBZ0dyaWRBbmd1bGFyKSBhZ0dyaWQhOiBBZ0dyaWRBbmd1bGFyO1xyXG5cclxuICAvL3BhcmFtdGVyc1xyXG4gIGdyaWRDb2x1bW5TdGF0ZTogYW55O1xyXG4gIHB1YmxpYyB0b29sdGlwU2hvd0RlbGF5ID0gMDtcclxuICBwdWJsaWMgdG9vbHRpcEhpZGVEZWxheSA9IDIwMDA7XHJcbiAgcHVibGljIHJvd01vZGVsVHlwZTogUm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xyXG4gIHB1YmxpYyBncmlkUGFnZVNpemU6IG51bWJlciA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogR3JpZExpYnJhcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGVcclxuICApIHsgIH1cclxuXHJcbiAgb25Tb3J0Q2hhbmdlZEV2ZW50KCkge1xyXG4gICAgdGhpcy5ncmlkQ29sdW1uU3RhdGUgPSB0aGlzLmFnR3JpZC5jb2x1bW5BcGkuZ2V0Q29sdW1uU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWZhdWx0Q29sRGVmOiBDb2xEZWYgPSB7XHJcbiAgICBzb3J0YWJsZTogdHJ1ZSxcclxuICAgIGZpbHRlcjogdHJ1ZSxcclxuICAgIHRvb2x0aXBDb21wb25lbnQ6IEN1c3RvbVRvb2x0aXAsXHJcbiAgfTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdyaWRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemU7XHJcbiAgICB0aGlzLmNhY2hlQmxvY2tTaXplID0gdGhpcy5jYWNoZUJsb2NrU2l6ZSA9IDBcclxuICAgICAgPyB0aGlzLnBhZ2VTaXplXHJcbiAgICAgIDogdGhpcy5jYWNoZUJsb2NrU2l6ZTtcclxuICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0QmFzZVVybCh0aGlzLmVudmlyb25tZW50KTtcclxuICAgIHRoaXMuZ2V0R3JpZFN0YXRlKCk7XHJcbiAgICB0aGlzLmdldENvbERlZigpO1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlU2VydmVyU2lkZVBhZ2luZyA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMucm93TW9kZWxUeXBlID0gJ3NlcnZlclNpZGUnO1xyXG4gICAgICB0aGlzLnJvd0RhdGEgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhZ2luYXRpb25OdW1iZXJGb3JtYXR0ZXI6IChcclxuICAgIHBhcmFtczogUGFnaW5hdGlvbk51bWJlckZvcm1hdHRlclBhcmFtc1xyXG4gICkgPT4gc3RyaW5nID0gKHBhcmFtczogUGFnaW5hdGlvbk51bWJlckZvcm1hdHRlclBhcmFtcykgPT4ge1xyXG4gICAgcmV0dXJuICdbJyArIHBhcmFtcy52YWx1ZS50b0xvY2FsZVN0cmluZygpICsgJ10nO1xyXG4gIH07XHJcblxyXG4gIG9uTW9kZWxVcGRhdGVkKCkge1xyXG4gICAgdGhpcy5zZXRHcmlkU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIGdldENvbERlZigpIHtcclxuICAgIGlmICh0aGlzLmdyaWRJZCAmJiB0aGlzLmxvZ2dlZEluVXNlcikge1xyXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLmdldENvbERlZih0aGlzLmdyaWRJZCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAxKSB7XHJcbiAgICAgICAgICBsZXQgY29sZGVmOiBDb2xEZWZbXSA9IHJlc3BvbnNlLmxpc3QubWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzQnV0dG9uID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuY29sdW1uVHlwZSA9PT0gJ2NoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgZmllbGQ6IHJlcy5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogcmVzLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBGaWVsZDogcmVzLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGNoZWNrYm94U2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBzaG93RGlzYWJsZWRDaGVja2JveGVzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBzdXBwcmVzc0ZpbHRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgc3VwcHJlc3NTb3J0aW5nOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBzdXBwcmVzc01lbnU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAyMCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuY29sdW1uVHlwZSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgZmllbGQ6IHJlcy5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogcmVzLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgc3VwcHJlc3NGaWx0ZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHN1cHByZXNzU29ydGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgc3VwcHJlc3NNZW51OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwRmllbGQ6IHJlcy5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBEcm9wZG93blJlbmRlcmVyLFxyXG4gICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQnRuQ2xpY2suYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwOiByZXMudG9vbHRpcCxcclxuICAgICAgICAgICAgICAgICAgICBkcm9wRG93bkRhdGE6IHJlcy5kcm9wRG93bkRhdGEsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIG9uQ2VsbENsaWNrZWQ6IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLm5vZGUuc2V0U2VsZWN0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB3aWR0aDogMjAsXHJcbiAgICAgICAgICAgICAgICAgIHBpbm5lZDogcmVzLnBpblBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICBsb2NrUGlubmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgZmllbGQ6IHJlcy5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogcmVzLnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGhpZGU6ICFyZXMudmlzaWJsZSxcclxuICAgICAgICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBGaWVsZDogcmVzLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICBmbG9hdGluZ0ZpbHRlcjogdGhpcy5mbG9hdGluZ0ZpbHRlcixcclxuICAgICAgICAgICAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY29sVmFsdWVGb3JtYXR0ZXIuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyYWJsZTogcmVzLmZpbHRlcmFibGUsXHJcbiAgICAgICAgICAgICAgICAgIGZpbHRlcjpcclxuICAgICAgICAgICAgICAgICAgICByZXMuY29sdW1uVHlwZSA9PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYWdUZXh0Q29sdW1uRmlsdGVyJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiByZXMuY29sdW1uVHlwZSA9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICdhZ0RhdGVDb2x1bW5GaWx0ZXInLFxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wYXJhdG9yOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMb2NhbERhdGVBdE1pZG5pZ2h0OiBhbnksXHJcbiAgICAgICAgICAgICAgICAgICAgICBjZWxsVmFsdWU6IGFueVxyXG4gICAgICAgICAgICAgICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUFzU3RyaW5nID0gY2VsbFZhbHVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlQXNTdHJpbmcgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuY29sdW1uVHlwZSA9PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbERhdGUgPSBuZXcgRGF0ZShkYXRlQXNTdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbERhdGUgPCBmaWx0ZXJMb2NhbERhdGVBdE1pZG5pZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNlbGxEYXRlID4gZmlsdGVyTG9jYWxEYXRlQXRNaWRuaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiByZXMuZmllbGQsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiByZXMudGl0bGUsXHJcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBoaWRlOiAhcmVzLnZpc2libGUsXHJcbiAgICAgICAgICAgICAgICBzdXBwcmVzc0ZpbHRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHN1cHByZXNzU29ydGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHN1cHByZXNzTWVudTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBGaWVsZDogcmVzLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBCdXR0b25SZW5kZXJlckNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQnRuQ2xpY2suYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHJlcy5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgaWNvbjogcmVzLmljb24sXHJcbiAgICAgICAgICAgICAgICAgIGJ1dHRvbk5hbWU6IHJlcy5idXR0b25OYW1lLFxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwOiByZXMudG9vbHRpcCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZUdldHRlcjogKHBhcmFtczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXMudG9vbHRpcCB8fCByZXMudGl0bGU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6IDIwLFxyXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnYWN0aW9uLWJ1dHRvbicsXHJcbiAgICAgICAgICAgICAgICBwaW5uZWQ6IHJlcy5waW5Qb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIGxvY2tQaW5uZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMgPSBjb2xkZWY7XHJcbiAgICAgICAgICB0aGlzLmFnR3JpZC5ncmlkT3B0aW9ucz8uYXBpPy5zZXRDb2x1bW5EZWZzKGNvbGRlZik7XHJcbiAgICAgICAgICB0aGlzLmdldEdyaWRTdGF0ZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ29sRGVmIFJlYWQgRXJyb3I9PicsIHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnUGxlYXNlIHBhc3MgdmFsaWQgR3JpZElkIGFuZCBsb2dnZWRJbiB1c2VyIElkJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRFeHRlcm5hbEZpbHRlcnMob3B0aW9uczogYW55KSB7XHJcbiAgICB2YXIgc2VydmVyVXJsID0gJyc7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VydmVyRGF0YVVybC5pbmRleE9mKCdmaWx0ZXInKSA+PSAwICYmXHJcbiAgICAgIG9wdGlvbnMuaW5kZXhPZignZmlsdGVyJykgPj0gMFxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBzbHVnID0gdGhpcy5zZXJ2ZXJEYXRhVXJsLnNwbGl0KCc/JGZpbHRlcj0nKTtcclxuICAgICAgaWYgKHNsdWcgJiYgc2x1Zy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgKyAnIGFuZCAnICsgc2x1Z1sxXTtcclxuICAgICAgICBzZXJ2ZXJVcmwgPSBzbHVnWzBdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VydmVyRGF0YVVybC5pbmRleE9mKCc/JykgPj0gMCkge1xyXG4gICAgICBzZXJ2ZXJVcmwgPSB0aGlzLnNlcnZlckRhdGFVcmw7XHJcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlcGxhY2UoJz8nLCAnJicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke3NlcnZlclVybH0ke29wdGlvbnN9YDtcclxuICB9XHJcblxyXG4gIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQpIHtcclxuICAgIHRoaXMuZ3JpZFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcclxuICAgIGlmICh0aGlzLmVuYWJsZVNlcnZlclNpZGVQYWdpbmcgPT0gdHJ1ZSkge1xyXG4gICAgICBwYXJhbXMuYXBpLnNldFNlcnZlclNpZGVEYXRhc291cmNlKFxyXG4gICAgICAgIG5ldyBPZGF0YVNlcnZlclNpZGVQcm92aWRlcih7XHJcbiAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgY2FsbEFwaTogKG9wdGlvbnMpID0+XHJcbiAgICAgICAgICAgIGZldGNoKGAke3RoaXMuc2V0RXh0ZXJuYWxGaWx0ZXJzKG9wdGlvbnMpfWAsIHtcclxuICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAnQ29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSksXHJcbiAgICAgICAgICAgIGFmdGVyTG9hZERhdGE6IChvcHRpb25zLCByb3dEYXRhLCB0b3RhbENvdW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYoIXJvd0RhdGEgfHwgcm93RGF0YS5sZW5ndGg8PTApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZ0dyaWQuYXBpLnNob3dOb1Jvd3NPdmVybGF5KCk7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFnR3JpZC5hcGkuaGlkZU92ZXJsYXkoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0R3JpZFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZENvbHVtblN0YXRlKSB7XHJcbiAgICAgIHRoaXMuYWdHcmlkLmNvbHVtbkFwaS5hcHBseUNvbHVtblN0YXRlKHtcclxuICAgICAgICBzdGF0ZTogdGhpcy5ncmlkQ29sdW1uU3RhdGUsXHJcbiAgICAgICAgYXBwbHlPcmRlcjogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgY29sdW1ucyA9IHRoaXMuYWdHcmlkLmNvbHVtbkFwaS5nZXRDb2x1bW5zKCk7XHJcbiAgICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIGlmIChjb2x1bW5zLmxlbmd0aCA+IDEwKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLmFnR3JpZC5jb2x1bW5BcGkuYXV0b1NpemVBbGxDb2x1bW5zKCk7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgIHRoaXMuYWdHcmlkLmFwaS5zaXplQ29sdW1uc1RvRml0KCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGNvbnN0IGFsbENvbHVtbklkczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB0aGlzLmFnR3JpZC5jb2x1bW5BcGkhLmdldENvbHVtbnMoKSEuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICBhbGxDb2x1bW5JZHMucHVzaChjb2x1bW4uZ2V0SWQoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hZ0dyaWQuY29sdW1uQXBpIS5hdXRvU2l6ZUNvbHVtbnMoYWxsQ29sdW1uSWRzLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEdyaWRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmdyaWRJZCAmJiB0aGlzLmxvZ2dlZEluVXNlcikge1xyXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlXHJcbiAgICAgICAgLmdldEdyaWRTdGF0ZSh0aGlzLmdyaWRJZCwgdGhpcy5sb2dnZWRJblVzZXIpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICByZXNwb25zZS5zdGF0dXMgPT0gMSAmJlxyXG4gICAgICAgICAgICByZXNwb25zZS5vYmplY3QgJiZcclxuICAgICAgICAgICAgcmVzcG9uc2Uub2JqZWN0LmdyaWRDb25maWdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmdyaWRDb2x1bW5TdGF0ZSA9IEpTT04ucGFyc2UocmVzcG9uc2Uub2JqZWN0LmdyaWRDb25maWcpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEdyaWRTdGF0ZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoaWxlIGxvYWRpbmcgZ3JpZCBzdGF0ZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25CdG5DbGljayhlOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKCdidG4gY2xpY2s9PicsIGUpO1xyXG4gICAgdGhpcy5idG5DbGlja0hhbmRsZXIuZW1pdChlLnJvd0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgb25TYXZlR3JpZENvbHVtblN0YXRlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBjb2x1bW5TdGF0ZSA9IHRoaXMuYWdHcmlkLmNvbHVtbkFwaT8uZ2V0Q29sdW1uU3RhdGUoKTtcclxuICAgIGxldCBjb2x1bW5EYXRhID0ge1xyXG4gICAgICBncmlkQ29uZmlnOiBKU09OLnN0cmluZ2lmeShjb2x1bW5TdGF0ZSksXHJcbiAgICAgIHVpR3JpZElkOiB0aGlzLmdyaWRJZCxcclxuICAgICAgdXNlcklkOiB0aGlzLmxvZ2dlZEluVXNlcixcclxuICAgIH07XHJcbiAgICBpZiAoZXZlbnQuZmluaXNoZWQgPT0gdHJ1ZSB8fCBldmVudC50eXBlID09PSAnY29sdW1uUGlubmVkJykge1xyXG4gICAgICB0aGlzLmdyaWRDb2x1bW5TdGF0ZSA9IGNvbHVtblN0YXRlO1xyXG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNhdmVDb2x1bW5Db25maWcoY29sdW1uRGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0R3JpZFN0YXRlKCk7XHJcbiAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMCkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoaWxlIHNhdmluZyBjb2x1bW4gY29uZmlndXJhdGlvbjonLCByZXMubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJvd0J5SWQ6IEdldFJvd0lkRnVuYyA9IChwYXJhbXM6IEdldFJvd0lkUGFyYW1zKSA9PiB7XHJcbiAgICB2YXIgZGF0YSA9IHBhcmFtcy5kYXRhO1xyXG4gICAgcmV0dXJuIGRhdGEuaWQgPz8gMDtcclxuICB9O1xyXG5cclxuICBjb2xWYWx1ZUZvcm1hdHRlcihwYXJhbXM6IFZhbHVlRm9ybWF0dGVyUGFyYW1zKSB7XHJcbiAgICBpZiAoaXNOYU4oK3BhcmFtcy52YWx1ZSkpIHtcclxuICAgICAgdmFyIGRhdGVXcmFwcGVyID0gbmV3IERhdGUocGFyYW1zLnZhbHVlKTtcclxuICAgICAgbGV0IGlzVmFsaWREYXRlID0gIWlzTmFOKGRhdGVXcmFwcGVyLmdldERhdGUoKSk7XHJcbiAgICAgIGlmIChpc1ZhbGlkRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShwYXJhbXMudmFsdWUsICdNTS1kZC15eXl5Jyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcmFtcy52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcmFtcy52YWx1ZTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -26,6 +26,8 @@ export class OdataProvider {
|
|
|
26
26
|
this.odataOperator = {
|
|
27
27
|
// Logical
|
|
28
28
|
equals: (col, value1) => `${col} eq ${value1}`,
|
|
29
|
+
blank: (col, value1) => `${col} eq ${value1}`,
|
|
30
|
+
notBlank: (col, value1) => `${col} ne ${value1}`,
|
|
29
31
|
notEqual: (col, value1) => `${col} ne ${value1}`,
|
|
30
32
|
lessThan: (col, value1) => `${col} lt ${value1}`,
|
|
31
33
|
lessThanOrEqual: (col, value1) => `${col} le ${value1}`,
|
|
@@ -177,7 +179,7 @@ export class OdataProvider {
|
|
|
177
179
|
return me.odataOperator[col.type](colName, col.filter, col.filterTo);
|
|
178
180
|
case 'text': {
|
|
179
181
|
let operatorName = col.type;
|
|
180
|
-
const filter = me.encode(col.filter);
|
|
182
|
+
const filter = me.encode(col.filter) || '';
|
|
181
183
|
// let filterTo = me.encode(col.filterTo);
|
|
182
184
|
if ((operatorName === 'equals' || operatorName === 'notEqual') &&
|
|
183
185
|
!isCaseSensitiveStringFilter) {
|
|
@@ -782,4 +784,4 @@ export class OdataServerSideProvider extends OdataProvider {
|
|
|
782
784
|
super.getRows(params);
|
|
783
785
|
}
|
|
784
786
|
}
|
|
785
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib0RhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jhc2VzaXRlLXNoYXJlZC1ncmlkLWxpYi9zcmMvbGliL2hlbHBlcnMvb0RhdGFQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQXNHckMsTUFBTSxPQUFPLGFBQWE7SUFtR3hCLFlBQVksT0FBNkI7UUE5RnpDOzs7V0FHRztRQUNILHdCQUFtQixHQUFXLFlBQVksQ0FBQztRQUMzQzs7O1dBR0c7UUFDSCxnQ0FBMkIsR0FBWSxLQUFLLENBQUM7UUErRzdDLGtDQUFrQztRQUNsQyw0QkFBdUIsR0FBRyxHQUFzQixFQUFFO1lBQ2hELElBQUksTUFBVyxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNuQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztZQUNuQixPQUFPO2dCQUNMLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE1BQU07YUFDUCxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBQ0YsNEJBQTRCO1FBQzVCLGtCQUFhLEdBQVE7WUFDbkIsVUFBVTtZQUNWLE1BQU0sRUFBRSxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQVUsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLE1BQU0sRUFBRTtZQUN0RSxRQUFRLEVBQUUsQ0FBQyxHQUFXLEVBQUUsTUFBYyxFQUFVLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxNQUFNLEVBQUU7WUFDeEUsUUFBUSxFQUFFLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBVSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sTUFBTSxFQUFFO1lBQ3hFLGVBQWUs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Q0QsSUFBSSxFQUFFLEdBQUksTUFBYyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDekQsSUFBSSxFQUFFLEVBQUU7NEJBQ0wsTUFBYyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FDN0MsZ0JBQWdCLENBQ2pCLENBQUM7eUJBQ0g7NkJBQU07NEJBQ0osTUFBYyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO3lCQUNqRTtxQkFDRjtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0E2TEY7QUFFRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsYUFBYTtJQUNwQyxPQUFPLENBQUMsTUFBZ0M7UUFDdEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFDRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsYUFBYTtJQUN4QyxPQUFPLENBQUMsTUFBZ0M7UUFDdEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIElHZXRSb3dzUGFyYW1zLFxyXG4gIENvbERlZixcclxuICBDb2xHcm91cERlZixcclxuICBDb2x1bW5WTyxcclxuICBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0LFxyXG4gIElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyxcclxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIE9kYXRhUXVlcnlFeHRlbmRGdWxsLFxyXG4gIE9kYXRhUXVlcnlFeHRlbmRPcHRpb25zLFxyXG4gIE9kYXRhUXVlcnlPcHRpb25zLFxyXG4gIFBpdm90UmVzdWx0RGF0LFxyXG59IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJy4vdXRpbHMnO1xyXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBPZGF0YVByb3ZpZGVyT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gZm9yIGNhbGwgb2RhdGEgYXBpXHJcbiAgICovXHJcbiAgY2FsbEFwaTogKHF1ZXJ5OiBzdHJpbmcpID0+IFByb21pc2U8YW55PjtcclxuICAvKipcclxuICAgKiBOYW1lIG9mIGZpZWxkIGNvbnRhaW4gY291bnQgb2YgcmVjb3JkIHJlc3VsdHMgaW4gZ3JvdXBpbmcgb2RhdGEgcXVlcnlcclxuICAgKiBAZGVmYXVsdCBjaGlsZENvdW50XHJcbiAgICovXHJcbiAgZ3JvdXBDb3VudEZpZWxkTmFtZT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBVc2UgaW4gb2RhdGEgYnVpbGQgcXVlcnlcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcj86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgZm9yIGV4dGVuZCBvZGF0YSBxdWVyeSBvcHRpb25zIGZvciBpbXBsZW1lbnQgdXNlciBsb2dpY1xyXG4gICAqL1xyXG4gIGJlZm9yZVJlcXVlc3Q/OiAoXHJcbiAgICBvcHRpb25zOiBPZGF0YVF1ZXJ5T3B0aW9ucyxcclxuICAgIHByb3ZpZGVyOiBPZGF0YVByb3ZpZGVyLFxyXG4gICAgcmVxdWVzdDogSUdldFJvd3NQYXJhbXMgfCBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0XHJcbiAgKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAgKiBDYWxsYmFjayBmb3IgcGl2b3Qgb3IgZ3JvdXAgZm9yIGFwbGx5IGNvbHVtbiBhZy1ncmlkIHNldHRpbmdzXHJcbiAgICAqIEBleGFtcGxlXHJcbiAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAqIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnMgPSBzZWNvbmRhcnlDb2x1bW5zID0+IHtcclxuICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY29uZGFyeUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgIGNvbnN0IGNvbCA9IHNlY29uZGFyeUNvbHVtbnNbaV1cclxuICAgICAgIGlmIChjb2wuY2hpbGRyZW4pIHtcclxuICAgICAgICAgYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucyhjb2wuY2hpbGRyZW4pXHJcbiAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAvL0FwbGx5IG5ldyBzZXR0aW5nIGZvciBncm91cCBkeW5jYW1pYyBjcmVhdGVkIGNvbHVtblxyXG4gICAgICAgICAvLyBjb2wuY2VsbENsYXNzUnVsZXMgPSBcclxuICAgICAgICAgLy8gY29sLnZhbHVlRm9ybWF0dGVyID0gXHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICB9XHJcbiAgICAqIDwvcHJlPjwvY29kZT5cclxuICAgICovXHJcbiAgYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucz86IChcclxuICAgIHNlY29uZGFyeUNvbERlZnM6IChDb2xEZWYgfCBDb2xHcm91cERlZilbXVxyXG4gICkgPT4gdm9pZDtcclxuICAvKipcclxuICAgICogQ2FsbGJhY2sgaW52b2tlZCBhZnRlciBsb2FkIGRhdGFcclxuICAgICogQHBhcmFtIG9wdGlvbnMgb2RhdGEgcHJvdmlkZXIgb3B0aW9uc1xyXG4gICAgKiBAcGFyYW0gcm93RGF0YSBkYXRhIGZvciBhZy1ncmlkXHJcbiAgICAqIEBwYXJhbSB0b3RhbENvdW50IHRvdGFsIGNvdW50IHJlY29yZHNcclxuICAgICogXHJcbiAgICAqIEBleGFtcGxlXHJcbiAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAgIGFmdGVyTG9hZERhdGEgPSAob3B0aW9ucywgcm93RGF0YSwgdG90YWxDb3VudCkgPT4ge1xyXG4gICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2tpcCA9PT0gMCAmJiByb3dEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgIGdyaWRBcGkuY29sdW1uQ29udHJvbGxlci5hdXRvU2l6ZUFsbENvbHVtbnMoKVxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAqIDwvY29kZT48L3ByZT5cclxuICAgICovXHJcbiAgYWZ0ZXJMb2FkRGF0YT86IChcclxuICAgIG9wdGlvbnM6IE9kYXRhUXVlcnlFeHRlbmRPcHRpb25zLFxyXG4gICAgcm93RGF0YTogYW55W10sXHJcbiAgICB0b3RhbENvdW50OiBudW1iZXJcclxuICApID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgZm9yIGNhdGNoIGVycm9yXHJcbiAgICovXHJcbiAgc2V0RXJyb3I/OiAoXHJcbiAgICBlcnJvcjogYW55LFxyXG4gICAgcGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtc1xyXG4gICkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBMaXN0IG9mIGNvbHVtbnMgYnkgaWQvZmllbGQgYXJlIGNhc2Ugc2Vuc2l0aXZlIGZvciBidWlsZCBvZGF0YSBxdWVyeVxyXG4gICAqL1xyXG4gIGNhc2VTZW5zaXRpdmVDb2x1bW5zPzogc3RyaW5nW107XHJcbiAgLyoqXHJcbiAgICAgKiBVc2UgZm9yIHNwZWNpZmllZCBjb2x1bW4gY3VzdG9tIGZpbHRlciBpbXBsZW1lbnRhdGlvblxyXG4gICAgICogPHByZT48Y29kZT5cclxuICAgICAgICAgY3VzdG9tRmlsdGVyczoge1xyXG4gICAgICAgICAgICAgXCJjdXN0b21lclwiOiAoY29sTmFtZSxjb2wsaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyLHByb3ZpZGVyKSA9PntcclxuICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLm9kYXRhT3BlcmF0b3IuaW4oXHJcbiAgICAgICAgICAgICAgICBjb2xOYW1lLFxyXG4gICAgICAgICAgICAgICAgY29sLnZhbHVlc1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICovXHJcbiAgY3VzdG9tRmlsdGVycz86IHtcclxuICAgIFtpbmRleDogc3RyaW5nXTogKFxyXG4gICAgICBjb2xOYW1lOiBzdHJpbmcsXHJcbiAgICAgIGNvbDogYW55LFxyXG4gICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW4sXHJcbiAgICAgIHByb3ZpZGVyOiBPZGF0YVByb3ZpZGVyXHJcbiAgICApID0+IHN0cmluZztcclxuICB9O1xyXG59XHJcblxyXG5kZWNsYXJlIGludGVyZmFjZSBDYW5jZWxhYmxlUHJvbWlzZSB7XHJcbiAgcHJvbWlzZTogUHJvbWlzZTxhbnk+O1xyXG4gIGNhbmNlbDogKCkgPT4gdm9pZDtcclxufVxyXG5leHBvcnQgY2xhc3MgT2RhdGFQcm92aWRlciBpbXBsZW1lbnRzIE9kYXRhUHJvdmlkZXJPcHRpb25zIHtcclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBmb3IgY2FsbCBvZGF0YSBhcGlcclxuICAgKi9cclxuICBjYWxsQXBpITogKHF1ZXJ5OiBzdHJpbmcpID0+IFByb21pc2U8YW55PjtcclxuICAvKipcclxuICAgKiBOYW1lIG9mIGZpZWxkIGNvbnRhaW4gY291bnQgb2YgcmVjb3JkIHJlc3VsdHMgaW4gZ3JvdXBpbmcgb2RhdGEgcXVlcnlcclxuICAgKiBAZGVmYXVsdCBjaGlsZENvdW50XHJcbiAgICovXHJcbiAgZ3JvdXBDb3VudEZpZWxkTmFtZTogc3RyaW5nID0gJ2NoaWxkQ291bnQnO1xyXG4gIC8qKlxyXG4gICAqIFVzZSBpbiBvZGF0YSBidWlsZCBxdWVyeVxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgZm9yIGV4dGVuZCBvZGF0YSBxdWVyeSBvcHRpb25zIGZvciBpbXBsZW1lbnQgdXNlciBsb2dpY1xyXG4gICAqL1xyXG4gIGJlZm9yZVJlcXVlc3Q6XHJcbiAgICB8ICgoXHJcbiAgICAgICAgb3B0aW9uczogT2RhdGFRdWVyeU9wdGlvbnMsXHJcbiAgICAgICAgcHJvdmlkZXI6IE9kYXRhUHJvdmlkZXIsXHJcbiAgICAgICAgcmVxdWVzdDogSUdldFJvd3NQYXJhbXMgfCBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0XHJcbiAgICAgICkgPT4gdm9pZClcclxuICAgIHwgdW5kZWZpbmVkO1xyXG4gIC8qKlxyXG4gICAgICAqIENhbGxiYWNrIGZvciBwaXZvdCBvciBncm91cCBmb3IgYXBsbHkgY29sdW1uIGFnLWdyaWQgc2V0dGluZ3NcclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICogYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucyA9IHNlY29uZGFyeUNvbHVtbnMgPT4ge1xyXG4gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgIGNvbnN0IGNvbCA9IHNlY29uZGFyeUNvbHVtbnNbaV1cclxuICAgICAgICAgaWYgKGNvbC5jaGlsZHJlbikge1xyXG4gICAgICAgICAgIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnMoY29sLmNoaWxkcmVuKVxyXG4gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgIC8vQXBsbHkgbmV3IHNldHRpbmcgZm9yIGdyb3VwIGR5bmNhbWljIGNyZWF0ZWQgY29sdW1uXHJcbiAgICAgICAgICAgLy8gY29sLmNlbGxDbGFzc1J1bGVzID0gXHJcbiAgICAgICAgICAgLy8gY29sLnZhbHVlRm9ybWF0dGVyID0gXHJcbiAgICAgICAgIH1cclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgICAgICogPC9wcmU+PC9jb2RlPlxyXG4gICAgICAqL1xyXG4gIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnM6XHJcbiAgICB8ICgoc2Vjb25kYXJ5Q29sRGVmczogKENvbERlZiB8IENvbEdyb3VwRGVmKVtdKSA9PiB2b2lkKVxyXG4gICAgfCB1bmRlZmluZWQ7XHJcbiAgLyoqXHJcbiAgICAgICogQ2FsbGJhY2sgaW52b2tlZCBhZnRlciBsb2FkIGRhdGFcclxuICAgICAgKiBAcGFyYW0gb3B0aW9ucyBvZGF0YSBwcm92aWRlciBvcHRpb25zXHJcbiAgICAgICogQHBhcmFtIHJvd0RhdGEgZGF0YSBmb3IgYWctZ3JpZFxyXG4gICAgICAqIEBwYXJhbSB0b3RhbENvdW50IHRvdGFsIGNvdW50IHJlY29yZHNcclxuICAgICAgKiBcclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAgICAgYWZ0ZXJMb2FkRGF0YSA9IChvcHRpb25zLCByb3dEYXRhLCB0b3RhbENvdW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNraXAgPT09IDAgJiYgcm93RGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgIGdyaWRBcGkuY29sdW1uQ29udHJvbGxlci5hdXRvU2l6ZUFsbENvbHVtbnMoKVxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAqIDwvY29kZT48L3ByZT5cclxuICAgICAgKi9cclxuICBhZnRlckxvYWREYXRhOlxyXG4gICAgfCAoKFxyXG4gICAgICAgIG9wdGlvbnM6IE9kYXRhUXVlcnlFeHRlbmRPcHRpb25zLFxyXG4gICAgICAgIHJvd0RhdGE6IGFueVtdLFxyXG4gICAgICAgIHRvdGFsQ291bnQ6IG51bWJlclxyXG4gICAgICApID0+IHZvaWQpXHJcbiAgICB8IHVuZGVmaW5lZDtcclxuICAvKipcclxuICAgKiBDYWxsYmFjayBmb3IgY2F0Y2ggZXJyb3JcclxuICAgKi9cclxuICBzZXRFcnJvcjpcclxuICAgIHwgKChlcnJvcjogYW55LCBwYXJhbXM6IElHZXRSb3dzUGFyYW1zIHwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKSA9PiB2b2lkKVxyXG4gICAgfCB1bmRlZmluZWQ7XHJcbiAgLyoqXHJcbiAgICogTGlzdCBvZiBjb2x1bW5zIGJ5IGlkL2ZpZWxkIGFyZSBjYXNlIHNlbnNpdGl2ZSBmb3IgYnVpbGQgb2RhdGEgcXVlcnlcclxuICAgKi9cclxuICBjYXNlU2Vuc2l0aXZlQ29sdW1ucz86IHN0cmluZ1tdO1xyXG4gIC8qKlxyXG4gICAgICogVXNlIGZvciBzcGVjaWZpZWQgY29sdW1uIGN1c3RvbSBmaWx0ZXIgaW1wbGVtZW50YXRpb25cclxuICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAgIGN1c3RvbUZpbHRlcnM6IHtcclxuICAgICAgICAgICAgIFwiY3VzdG9tZXJcIjogKGNvbE5hbWUsY29sLGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcixwcm92aWRlcikgPT57XHJcbiAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlci5vZGF0YU9wZXJhdG9yLmluKFxyXG4gICAgICAgICAgICAgICAgY29sTmFtZSxcclxuICAgICAgICAgICAgICAgIGNvbC52YWx1ZXNcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAqL1xyXG4gIGN1c3RvbUZpbHRlcnM/OiB7XHJcbiAgICBbaW5kZXg6IHN0cmluZ106IChcclxuICAgICAgY29sTmFtZTogc3RyaW5nLFxyXG4gICAgICBjb2w6IGFueSxcclxuICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuLFxyXG4gICAgICBwcm92aWRlcjogT2RhdGFQcm92aWRlclxyXG4gICAgKSA9PiBzdHJpbmc7XHJcbiAgfTtcclxuICBjYW5jZWxQcm9taWNlOiBDYW5jZWxhYmxlUHJvbWlzZTtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPZGF0YVByb3ZpZGVyT3B0aW9ucykge1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBvcHRpb25zKTtcclxuICAgIGlmICh0aGlzLmNhbGxBcGkgPT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxBcGkgbXVzdCBiZSBzcGVjaWZpZWQnKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdGhpcy5jYWxsQXBpICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2FsbEFwaSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5iZWZvcmVSZXF1ZXN0ICE9IG51bGwgJiZcclxuICAgICAgdHlwZW9mIHRoaXMuYmVmb3JlUmVxdWVzdCAhPT0gJ2Z1bmN0aW9uJ1xyXG4gICAgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignYmVmb3JlUmVxdWVzdCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5hZnRlckxvYWREYXRhICE9IG51bGwgJiZcclxuICAgICAgdHlwZW9mIHRoaXMuYWZ0ZXJMb2FkRGF0YSAhPT0gJ2Z1bmN0aW9uJ1xyXG4gICAgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignYWZ0ZXJMb2FkRGF0YSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNldEVycm9yICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuc2V0RXJyb3IgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRFcnJvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FuY2VsUHJvbWljZSA9IHRoaXMuY3JlYXRlQ2FuY2VsYWJsZVByb21pc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKkNyZWF0b3IgYSBjYW5jZWxhYmxlIFByb21pc2UgKi9cclxuICBjcmVhdGVDYW5jZWxhYmxlUHJvbWlzZSA9ICgpOiBDYW5jZWxhYmxlUHJvbWlzZSA9PiB7XHJcbiAgICBsZXQgY2FuY2VsOiBhbnk7XHJcbiAgICBjb25zdCBwciA9IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcclxuICAgICAgY2FuY2VsID0gcmVqZWN0O1xyXG4gICAgfSkuY2F0Y2goKCkgPT4ge30pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcHJvbWlzZTogcHIsXHJcbiAgICAgIGNhbmNlbCxcclxuICAgIH07XHJcbiAgfTtcclxuICAvKipPZGF0YSBxdWVyeSBvcGVyYXRpb25zICovXHJcbiAgb2RhdGFPcGVyYXRvcjogYW55ID0ge1xyXG4gICAgLy8gTG9naWNhbFxyXG4gICAgZXF1YWxzOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gZXEgJHt2YWx1ZTF9YCxcclxuICAgIG5vdEVxdWFsOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gbmUgJHt2YWx1ZTF9YCxcclxuICAgIGxlc3NUaGFuOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gbHQgJHt2YWx1ZTF9YCxcclxuICAgIGxlc3NUaGFuT3JFcXVhbDogKGNvbDogc3RyaW5nLCB2YWx1ZTE6IHN0cmluZyk6IHN0cmluZyA9PlxyXG4gICAgICBgJHtjb2x9IGxlICR7dmFsdWUxfWAsXHJcbiAgICBncmVhdGVyVGhhbjogKGNvbDogc3RyaW5nLCB2YWx1ZTE6IHN0cmluZyk6IHN0cmluZyA9PiBgJHtjb2x9IGd0ICR7dmFsdWUxfWAsXHJcbiAgICBncmVhdGVyVGhhbk9yRXF1YWw6IChjb2w6IHN0cmluZywgdmFsdWUxOiBzdHJpbmcpOiBzdHJpbmcgPT5cclxuICAgICAgYCR7Y29sfSBnZSAke3ZhbHVlMX1gLFxyXG4gICAgaW5SYW5nZTogKGNvbDogc3RyaW5nLCB2YWx1ZTE6IHN0cmluZywgdmFsdWUyOiBhbnkpOiBzdHJpbmcgPT5cclxuICAgICAgYCgke2NvbH0gZ2UgJHt2YWx1ZTF9IGFuZCAke2NvbH0gbGUgJHt2YWx1ZTJ9KWAsXHJcbiAgICAvLyBTdHJpbmdcclxuICAgIGVxdWFsc1N0cjogKFxyXG4gICAgICBjb2w6IHN0cmluZyxcclxuICAgICAgdmFsdWUxOiBzdHJpbmcsXHJcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhblxyXG4gICAgKTogc3RyaW5nID0+XHJcbiAgICAgIGAke3RoaXMuaWZUb2xvd2VyQ29sKFxyXG4gICAgICAgIGNvbCxcclxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgKX0gZXEgJHt0aGlzLmlmVG9sb3dlcih2YWx1ZTEsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcil9YCxcclxuICAgIG5vdEVxdWFsU3RyOiAoXHJcbiAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICB2YWx1ZTE6IHN0cmluZyxcclxuICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuXHJcbiAgICApOiBzdHJpbmcgPT5cclxuICAgICAgYCR7dGhpcy5pZlRvbG93ZXJDb2woXHJcbiAgICAgICAgY29sLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICApfSBuZSAke3RoaXMuaWZUb2xvd2VyKHZhbHVlMSwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX1gLFxyXG4gICAgY29udGFpbnM6IChcclxuICAgICAgY29sOiBzdHJpbmcsXHJcbiAgICAgIHZhbHVlMTogc3RyaW5nLFxyXG4gICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW5cclxuICAgICk6IHN0cmluZyA9PlxyXG4gICAgICBgY29udGFpbnMoJHt0aGlzLmlmVG9sb3dlckNvbChcclxuICAgICAgICBjb2wsXHJcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICAgICl9LCR7dGhpcy5pZlRvbG93ZXIodmFsdWUxLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSlgLFxyXG4gICAgbm90Q29udGFpbnM6IChcclxuICAgICAgY29sOiBzdHJpbmcsXHJcbiAgICAgIHZhbHVlMTogc3RyaW5nLFxyXG4gICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW5cclxuICAgICk6IHN0cmluZyA9PlxyXG4gICAgICBgY29udGFpbnMoJHt0aGlzLmlmVG9sb3dlckNvbChcclxuICAgICAgICBjb2wsXHJcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICAgICl9LCR7dGhpcy5pZlRvbG93ZXIodmFsdWUxLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSkgZXEgZmFsc2VgLFxyXG4gICAgc3RhcnRzV2l0aDogKFxyXG4gICAgICBjb2w6IHN0cmluZyxcclxuICAgICAgdmFsdWUxOiBzdHJpbmcsXHJcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhblxyXG4gICAgKTogc3RyaW5nID0+XHJcbiAgICAgIGBzdGFydHN3aXRoKCR7dGhpcy5pZlRvbG93ZXJDb2woXHJcbiAgICAgICAgY29sLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICApfSwke3RoaXMuaWZUb2xvd2VyKHZhbHVlMSwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX0pICBlcSB0cnVlYCxcclxuICAgIGVuZHNXaXRoOiAoXHJcbiAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICB2YWx1ZTE6IHN0cmluZyxcclxuICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuXHJcbiAgICApOiBzdHJpbmcgPT5cclxuICAgICAgYGVuZHN3aXRoKCR7dGhpcy5pZlRvbG93ZXJDb2woXHJcbiAgICAgICAgY29sLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICApfSwke3RoaXMuaWZUb2xvd2VyKHZhbHVlMSwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX0pICBlcSB0cnVlYCxcclxuICAgIGluU3RyOiAoXHJcbiAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICB2YWx1ZXM6IHN0cmluZ1tdLFxyXG4gICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW5cclxuICAgICk6IHN0cmluZyA9PlxyXG4gICAgICBgJHt0aGlzLmlmVG9sb3dlckNvbChjb2wsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcil9IGluICgke3ZhbHVlc1xyXG4gICAgICAgIC5tYXAoXHJcbiAgICAgICAgICAoeCkgPT5cclxuICAgICAgICAgICAgYCcke3RoaXMuaWZUb2xvd2VyKHRoaXMuZW5jb2RlKHgpLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSdgXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5qb2luKCl9KWAsXHJcbiAgICBpbjogKGNvbDogc3RyaW5nLCB2YWx1ZXM6IHN0cmluZ1tdKSA9PlxyXG4gICAgICBgJHtjb2x9IGluICgke3ZhbHVlcy5tYXAoKHgpID0+IGAke3RoaXMuZW5jb2RlKHgpfWApLmpvaW4oKX0pYCxcclxuICAgIG5vdEluOiAoY29sOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pID0+XHJcbiAgICAgIGBub3QgKCR7Y29sfSBpbiAoJHt2YWx1ZXMubWFwKCh4KSA9PiBgJHt4fWApLmpvaW4oKX0pKWAsXHJcbiAgICAvLyBEYXRlXHJcbiAgICB0cnVuYzogKGNvbDogc3RyaW5nKTogc3RyaW5nID0+IGBkYXRlKCR7Y29sfSlgLFxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IHRvbG93ZXIgZm9yIGNvbHVtbiBpbiBvZGF0YSBzeW50YXhcclxuICAgKiBAcGFyYW0gY29sIGNvbHVtbiBuYW1lXHJcbiAgICogQHBhcmFtIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciBuZWVkIGFwcGx5IHRvbG93ZXJcclxuICAgKi9cclxuICBpZlRvbG93ZXJDb2wgPSAoY29sOiBzdHJpbmcsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhbik6IHN0cmluZyA9PlxyXG4gICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyID8gY29sIDogYHRvbG93ZXIoJHtjb2x9KWA7XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIgIG5lZWQgYXBwbHkgdG9sb3dlclxyXG4gICAqL1xyXG4gIGlmVG9sb3dlciA9ICh2YWx1ZTogc3RyaW5nLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW4pOiBzdHJpbmcgPT5cclxuICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciA/IHZhbHVlIDogdmFsdWUgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XHJcbiAgLyoqXHJcbiAgICogT2RhdGEgYWdncmVnYXRpb24gb3BlcmF0aW9uc1xyXG4gICAqL1xyXG4gIG9kYXRhQWdncmVnYXRpb246IGFueSA9IHtcclxuICAgIC8vIExvZ2ljYWxcclxuICAgIHN1bTogKGNvbDogc3RyaW5nLCBhc0ZpZWxkPzogYW55KTogc3RyaW5nID0+XHJcbiAgICAgIGAke2NvbH0gd2l0aCBzdW0gYXMgJHtjb2wgfHwgYXNGaWVsZH1gLFxyXG4gICAgbWluOiAoY29sOiBzdHJpbmcsIGFzRmllbGQ/OiBhbnkpOiBzdHJpbmcgPT5cclxuICAgICAgYCR7Y29sfSB3aXRoIG1pbiBhcyAke2NvbCB8fCBhc0ZpZWxkfWAsXHJcbiAgICBtYXg6IChjb2w6IHN0cmluZywgYXNGaWVsZD86IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICBgJHtjb2x9IHdpdGggbWF4IGFzICR7Y29sIHx8IGFzRmllbGR9YCxcclxuICAgIGF2ZzogKGNvbDogc3RyaW5nLCBhc0ZpZWxkPzogYW55KTogc3RyaW5nID0+XHJcbiAgICAgIGAke2NvbH0gd2l0aCBhdmVyYWdlIGFzICR7Y29sIHx8IGFzRmllbGR9YCxcclxuICAgIGNvdW50OiAoY29sOiBzdHJpbmcsIGFzRmllbGQ/OiBhbnkpOiBzdHJpbmcgPT5cclxuICAgICAgYCRjb3VudCBhcyAke2NvbCB8fCBhc0ZpZWxkfWAsXHJcbiAgfTtcclxuICAvKipcclxuICAgKiBPZGF0YSBxdWVyeSBidWlsZGVyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgcGFyYW1ldGVyIGZvciBvZGF0YSBxdWVyeVxyXG4gICAqL1xyXG4gIHRvUXVlcnkgPSAob3B0aW9uczogT2RhdGFRdWVyeUV4dGVuZEZ1bGwpOiBzdHJpbmcgPT4ge1xyXG4gICAgbGV0IHBhdGg6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICBwYXRoLnB1c2goJyRjb3VudD10cnVlJyk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5za2lwKSB7XHJcbiAgICAgIHBhdGgucHVzaChgJHNraXA9JHtvcHRpb25zLnNraXB9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy50b3ApIHtcclxuICAgICAgcGF0aC5wdXNoKGAkdG9wPSR7b3B0aW9ucy50b3B9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5zb3J0ICYmIG9wdGlvbnMuc29ydC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHBhdGgucHVzaCgnJG9yZGVyYnk9JyArIG9wdGlvbnMuc29ydC5qb2luKCcsJykpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuZmlsdGVyICYmIG9wdGlvbnMuZmlsdGVyLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGF0aC5wdXNoKCckZmlsdGVyPScgKyBvcHRpb25zLmZpbHRlci5qb2luKCcgYW5kICcpKTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmFwcGx5ICYmIG9wdGlvbnMuYXBwbHkubGVuZ3RoID4gMCkge1xyXG4gICAgICBwYXRoLnB1c2goJyRhcHBseT0nICsgb3B0aW9ucy5hcHBseS5qb2luKCcvJykpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuZXhwYW5kICYmIG9wdGlvbnMuZXhwYW5kLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGF0aC5wdXNoKCckZXhwYW5kPScgKyBvcHRpb25zLmV4cGFuZC5qb2luKCcsJykpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIG9wdGlvbnMuc2VsZWN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgcGF0aC5wdXNoKCckc2VsZWN0PScgKyBvcHRpb25zLnNlbGVjdC5qb2luKCcsJykpO1xyXG4gICAgfVxyXG4gICAgbGV0IHF1ZXJ5OiBzdHJpbmcgPSAnJztcclxuICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcclxuICAgICAgdmFyIGRlZmF1bHRGaWx0ZXJzID0gcGF0aC5maWx0ZXIoKHg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHguaW5kZXhPZignJGNvdW50JykgPj0gMCB8fFxyXG4gICAgICAgICAgeC5pbmRleE9mKCckdG9wJykgPj0gMCB8fFxyXG4gICAgICAgICAgeC5pbmRleE9mKCckb3JkZXJieScpID49IDAgfHxcclxuICAgICAgICAgIHguaW5kZXhPZignJGFwcGx5JykgPj0gMCB8fFxyXG4gICAgICAgICAgeC5pbmRleE9mKCckZXhwYW5kJykgPj0gMCB8fFxyXG4gICAgICAgICAgeC5pbmRleE9mKCckc2VsZWN0JykgPj0gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJzICYmIGRlZmF1bHRGaWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBxdWVyeSA9ICc/JyArIGRlZmF1bHRGaWx0ZXJzLmpvaW4oJyYnKTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgY3VzdG9tRmlsdGVycyA9IHBhdGguZmlsdGVyKGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcnMuaW5kZXhPZihvYmopID09IC0xO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGN1c3RvbUZpbHRlcnMgJiYgY3VzdG9tRmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKGN1c3RvbUZpbHRlcnMubGVuZ3RoID09IDEpIHF1ZXJ5ID0gcXVlcnkgKyAnJicgKyBjdXN0b21GaWx0ZXJzO1xyXG4gICAgICAgIGVsc2UgcXVlcnkgPSBxdWVyeSArIGN1c3RvbUZpbHRlcnMuam9pbignYW5kJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZSgnYW5kJGZpbHRlcj0nLCAnJmZpbHRlcj0nKTtcclxuICAgIHJldHVybiBxdWVyeTtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIEFkZCBxdW90ZXMgZm9yIHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSBzdHJpbmcgdmFsdWVcclxuICAgKi9cclxuICBlbmNvZGUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PlxyXG4gICAgdGhpcy5pc1N0clZhbCh2YWx1ZSkgPyByZXBsYWNlQWxsKHZhbHVlLCBcIidcIiwgXCInJ1wiKSA6IHZhbHVlO1xyXG4gIC8qKlxyXG4gICAqIENvbmN0YXQgdG8gZGF0ZSBhIHRpbWUgZm9yIGNyZWF0ZSBkYXRldGltZSBmb3JtYXQgZm9yIG9kYXRhIHF1ZXJ5XHJcbiAgICogQHBhcmFtIHZhbHVlIGRhdGUgc3RyaW5nXHJcbiAgICovXHJcbiAgdG9EYXRlVGltZSA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICBjb25zdCBkdCA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgIGlmIChpc05hTihkdC5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGR0MSA9IG5ldyBEYXRlKFxyXG4gICAgICBEYXRlLlVUQyhkdC5nZXRGdWxsWWVhcigpLCBkdC5nZXRNb250aCgpLCBkdC5nZXREYXRlKCkpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIGR0MS50b0lTT1N0cmluZygpO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29sTmFtZSBjb2x1bW5OYW1lXHJcbiAgICogQHJldHVybnMgaXMgQ2FzZVNlbnNpdGl2ZSBmb3IgY29sdW1uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRJc05lZWRDYXNlU2Vuc2l0aXZlID0gKGNvbE5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5pc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIgJiZcclxuICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlQ29sdW1ucyAmJlxyXG4gICAgICB0aGlzLmNhc2VTZW5zaXRpdmVDb2x1bW5zLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jYXNlU2Vuc2l0aXZlQ29sdW1ucy5pbmRleE9mKGNvbE5hbWUpID49IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI7XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBDb252ZXJ0IGFnLWdyaWQgY29sdW1uIGZpbHRlciB0byBvZGF0YSBxdWVyeVxyXG4gICAqIEBwYXJhbSBjb2xOYW1lIGNvbHVtbk5hbWVcclxuICAgKiBAcGFyYW0gY29sIGFnLWdyaWQgY29sdW1uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRGaWx0ZXJPZGF0YSA9IChjb2xOYW1lOiBzdHJpbmcsIGNvbDogYW55KTogc3RyaW5nID0+IHtcclxuICAgIGNvbnN0IG1lID0gdGhpcztcclxuICAgIGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciA9IG1lLmdldElzTmVlZENhc2VTZW5zaXRpdmUoY29sTmFtZSk7XHJcbiAgICBjb25zdCBjdXN0b21GaWx0ZXIgPSBtZS5jdXN0b21GaWx0ZXJzICYmIG1lLmN1c3RvbUZpbHRlcnNbY29sTmFtZV07XHJcbiAgICBjb2xOYW1lID0gcmVwbGFjZUFsbChjb2xOYW1lLCAnLicsICcvJyk7XHJcbiAgICBjb2xOYW1lID0gbWUuZ2V0V3JhcENvbHVtbk5hbWUoY29sTmFtZSk7XHJcbiAgICBpZiAoY3VzdG9tRmlsdGVyKSB7XHJcbiAgICAgIHJldHVybiBjdXN0b21GaWx0ZXIoY29sTmFtZSwgY29sLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIsIG1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN3aXRjaCAoY29sLmZpbHRlclR5cGUpIHtcclxuICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgcmV0dXJuIG1lLm9kYXRhT3BlcmF0b3JbY29sLnR5cGVdKGNvbE5hbWUsIGNvbC5maWx0ZXIsIGNvbC5maWx0ZXJUbyk7XHJcbiAgICAgICAgY2FzZSAndGV4dCc6IHtcclxuICAgICAgICAgIGxldCBvcGVyYXRvck5hbWUgPSBjb2wudHlwZTtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG1lLmVuY29kZShjb2wuZmlsdGVyKTtcclxuICAgICAgICAgIC8vIGxldCBmaWx0ZXJUbyA9IG1lLmVuY29kZShjb2wuZmlsdGVyVG8pO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAob3BlcmF0b3JOYW1lID09PSAnZXF1YWxzJyB8fCBvcGVyYXRvck5hbWUgPT09ICdub3RFcXVhbCcpICYmXHJcbiAgICAgICAgICAgICFpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBvcGVyYXRvck5hbWUgKz0gJ1N0cic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbWUub2RhdGFPcGVyYXRvcltvcGVyYXRvck5hbWVdKFxyXG4gICAgICAgICAgICBjb2xOYW1lLFxyXG4gICAgICAgICAgICBgJyR7ZmlsdGVyfSdgLFxyXG4gICAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjb2wuZGF0ZUZyb20gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBtZS50b0RhdGVUaW1lKGNvbC5kYXRlRnJvbSkgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAoY29sLmRhdGVUbyA9PSBudWxsIHx8XHJcbiAgICAgICAgICAgICAgKGNvbC5kYXRlVG8gIT0gbnVsbCAmJiBtZS50b0RhdGVUaW1lKGNvbC5kYXRlVG8pICE9IG51bGwpKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZS5vZGF0YU9wZXJhdG9yW2NvbC50eXBlXShcclxuICAgICAgICAgICAgICBjb2xOYW1lLFxyXG4gICAgICAgICAgICAgIGAke21lLnRvRGF0ZVRpbWUoY29sLmRhdGVGcm9tKX1gLFxyXG4gICAgICAgICAgICAgIGAke21lLnRvRGF0ZVRpbWUoY29sLmRhdGVUbyl9YFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnc2V0JzpcclxuICAgICAgICAgIHJldHVybiBjb2wudmFsdWVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyBtZS5vZGF0YU9wZXJhdG9yLmluU3RyKFxyXG4gICAgICAgICAgICAgICAgY29sTmFtZSxcclxuICAgICAgICAgICAgICAgIGNvbC52YWx1ZXMsXHJcbiAgICAgICAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCB2YWx1ZSBmcm9tIHJlY29yZCBieSBwYXRoIHRvIGZpZWxkXHJcbiAgICogQHBhcmFtIGZpZWxkIHBhdGggdG8gY29sdW1uIHZhbHVlXHJcbiAgICogQHBhcmFtIG9iaiAgcmVjb3JkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRWYWx1ZShmaWVsZDogc3RyaW5nLCBvYmo6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBwYXRocyA9IGZpZWxkLnNwbGl0KCcuJyk7XHJcbiAgICBpZiAocGF0aHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHJldHVybiBvYmpbZmllbGRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHBhdGhzLnJlZHVjZSgob2JqZWN0LCBwYXRoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChvYmplY3QgfHwge30pW3BhdGhdOyAvLyBPbGl2ZXIgU3RlZWxlJ3MgcGF0dGVyblxyXG4gICAgICB9LCBvYmopO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FjbHVsYXRlIHBpdm90IGRhdGEgZm9yIGFnLWdyaWQgZnJvbSBvZGF0YVxyXG4gICAqIEBwYXJhbSBwaXZvdENvbHMgcGl2b3QgY29sdW1uc1xyXG4gICAqIEBwYXJhbSByb3dHcm91cENvbHMgcm93IGdyb3VwIGNvbHVtbnNcclxuICAgKiBAcGFyYW0gdmFsdWVDb2xzIHZhbHVlIGNvbHVtbnNcclxuICAgKiBAcGFyYW0gZGF0YSBvZGF0YSByZXN1bHRcclxuICAgKiBAcGFyYW0gY291bnRGaWVsZCBjb3VudCBmaWVsZCBuYW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRQaXZvdCA9IChcclxuICAgIHBpdm90Q29sczogQ29sdW1uVk9bXSxcclxuICAgIHJvd0dyb3VwQ29sczogQ29sdW1uVk9bXSxcclxuICAgIHZhbHVlQ29sczogQ29sdW1uVk9bXSxcclxuICAgIGRhdGE6IGFueVtdLFxyXG4gICAgY291bnRGaWVsZDogc3RyaW5nXHJcbiAgKTogUGl2b3RSZXN1bHREYXQgPT4ge1xyXG4gICAgLy8gYXNzdW1lIDEgcGl2b3QgY29sIGFuZCAxIHZhbHVlIGNvbCBmb3IgdGhpcyBleGFtcGxlXHJcbiAgICBjb25zdCBtZSA9IHRoaXM7XHJcbiAgICBjb25zdCBwaXZvdERhdGE6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBhZ2dDb2xzTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBjb2xLZXlFeGlzdHNNYXA6IGFueSA9IHt9O1xyXG5cclxuICAgIGNvbnN0IHNlY29uZGFyeUNvbERlZnM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBzZWNvbmRhcnlDb2xEZWZzTWFwOiBhbnkgPSB7fTtcclxuXHJcbiAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgdmFyIHBpdm90VmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICBwaXZvdENvbHMuZm9yRWFjaChmdW5jdGlvbiAocGl2b3RDb2wpIHtcclxuICAgICAgICB2YXIgcGl2b3RGaWVsZCA9IHBpdm90Q29sLmlkO1xyXG4gICAgICAgIHZhciBwaXZvdFZhbHVlID0gbWUuZ2V0VmFsdWUocGl2b3RGaWVsZCwgaXRlbSk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcGl2b3RWYWx1ZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgcGl2b3RWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICBwaXZvdFZhbHVlLnRvU3RyaW5nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBwaXZvdFZhbHVlcy5wdXNoKHBpdm90VmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBpdm90VmFsdWVzLnB1c2goJy0nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gdmFyIHBpdm90VmFsdWUgPSBpdGVtW3Bpdm90RmllbGRdLnRvU3RyaW5nKCk7XHJcbiAgICAgIHZhciBwaXZvdEl0ZW06IGFueSA9IHt9O1xyXG5cclxuICAgICAgdmFsdWVDb2xzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlQ29sKSB7XHJcbiAgICAgICAgdmFyIHZhbEZpZWxkID0gdmFsdWVDb2wuaWQ7XHJcbiAgICAgICAgdmFyIGNvbEtleSA9IGNyZWF0ZUNvbEtleShwaXZvdFZhbHVlcywgdmFsRmllbGQpO1xyXG5cclxuICAgICAgICB2YXIgdmFsdWUgPSBtZS5nZXRWYWx1ZSh2YWxGaWVsZCwgaXRlbSk7XHJcbiAgICAgICAgcGl2b3RJdGVtW2NvbEtleV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCFjb2xLZXlFeGlzdHNNYXBbY29sS2V5XSkge1xyXG4gICAgICAgICAgYWRkTmV3QWdnQ29sKGNvbEtleSwgdmFsdWVDb2wpO1xyXG4gICAgICAgICAgYWRkTmV3U2Vjb25kYXJ5Q29sRGVmKGNvbEtleSwgcGl2b3RWYWx1ZXMsIHZhbHVlQ29sKTtcclxuICAgICAgICAgIGNvbEtleUV4aXN0c01hcFtjb2xLZXldID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoY291bnRGaWVsZCkge1xyXG4gICAgICAgIHBpdm90SXRlbVtjb3VudEZpZWxkXSA9IG1lLmdldFZhbHVlKGNvdW50RmllbGQsIGl0ZW0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByb3dHcm91cENvbHMuZm9yRWFjaChmdW5jdGlvbiAocm93R3JvdXBDb2wpIHtcclxuICAgICAgICB2YXIgcm93R3JvdXBGaWVsZCA9IHJvd0dyb3VwQ29sLmlkLnNwbGl0KCcuJylbMF07XHJcbiAgICAgICAgcGl2b3RJdGVtW3Jvd0dyb3VwRmllbGRdID0gaXRlbVtyb3dHcm91cEZpZWxkXTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBwaXZvdERhdGEucHVzaChwaXZvdEl0ZW0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZnVuY3Rpb24gYWRkTmV3QWdnQ29sKGNvbEtleTogc3RyaW5nLCB2YWx1ZUNvbDogQ29sdW1uVk8pOiB2b2lkIHtcclxuICAgICAgdmFyIG5ld0NvbCA9IHtcclxuICAgICAgICBpZDogY29sS2V5LFxyXG4gICAgICAgIGZpZWxkOiBjb2xLZXksXHJcbiAgICAgICAgYWdnRnVuYzogdmFsdWVDb2wuYWdnRnVuYyxcclxuICAgICAgfTtcclxuICAgICAgYWdnQ29sc0xpc3QucHVzaChuZXdDb2wpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGFkZE5ld1NlY29uZGFyeUNvbERlZihcclxuICAgICAgY29sS2V5OiBhbnksXHJcbiAgICAgIHBpdm90VmFsdWVzOiBhbnksXHJcbiAgICAgIHZhbHVlQ29sOiBhbnlcclxuICAgICkge1xyXG4gICAgICB2YXIgcGFyZW50R3JvdXA6IGFueSA9IG51bGw7XHJcblxyXG4gICAgICB2YXIga2V5UGFydHM6IGFueSA9IFtdO1xyXG5cclxuICAgICAgcGl2b3RWYWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAocGl2b3RWYWx1ZTogYW55KSB7XHJcbiAgICAgICAga2V5UGFydHMucHVzaChwaXZvdFZhbHVlKTtcclxuICAgICAgICB2YXIgY29sS2V5ID0gY3JlYXRlQ29sS2V5KGtleVBhcnRzKTtcclxuICAgICAgICB2YXIgZ3JvdXBDb2xEZWY6IGFueSA9IHNlY29uZGFyeUNvbERlZnNNYXBbY29sS2V5XTtcclxuICAgICAgICBpZiAoIWdyb3VwQ29sRGVmKSB7XHJcbiAgICAgICAgICBncm91cENvbERlZiA9IHtcclxuICAgICAgICAgICAgZ3JvdXBJZDogY29sS2V5LFxyXG4gICAgICAgICAgICBoZWFkZXJOYW1lOiBwaXZvdFZhbHVlLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgc2Vjb25kYXJ5Q29sRGVmc01hcFtjb2xLZXldID0gZ3JvdXBDb2xEZWY7XHJcbiAgICAgICAgICBpZiAocGFyZW50R3JvdXApIHtcclxuICAgICAgICAgICAgcGFyZW50R3JvdXAuY2hpbGRyZW4ucHVzaChncm91cENvbERlZik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWNvbmRhcnlDb2xEZWZzLnB1c2goZ3JvdXBDb2xEZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJlbnRHcm91cCA9IGdyb3VwQ29sRGVmO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHBhcmVudEdyb3VwLmNoaWxkcmVuLnB1c2goe1xyXG4gICAgICAgIGNvbElkOiBjb2xLZXksXHJcbiAgICAgICAgaGVhZGVyTmFtZTogdmFsdWVDb2wuYWdnRnVuYyArICcoJyArIHZhbHVlQ29sLmRpc3BsYXlOYW1lICsgJyknLFxyXG4gICAgICAgIGZpZWxkOiBjb2xLZXksXHJcbiAgICAgICAgc3VwcHJlc3NNZW51OiB0cnVlLFxyXG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sS2V5KHBpdm90VmFsdWVzOiBzdHJpbmdbXSwgdmFsdWVGaWVsZD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgIHZhciByZXN1bHQgPSBwaXZvdFZhbHVlcy5qb2luKCd8Jyk7XHJcbiAgICAgIGlmICh2YWx1ZUZpZWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXN1bHQgKz0gJ3wnICsgdmFsdWVGaWVsZDtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSByZXBsYWNlQWxsKHJlc3VsdCwgJy4nLCAnKicpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGRhdGE6IHBpdm90RGF0YSxcclxuICAgICAgYWdnQ29sczogYWdnQ29sc0xpc3QsXHJcbiAgICAgIHNlY29uZGFyeUNvbERlZnM6IHNlY29uZGFyeUNvbERlZnMsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd0RhdGEgYXJyYXkgb2RhdGEgcmVzdWx0XHJcbiAgICogQHBhcmFtIHJvd0dyb3VwQ29scyByb3cgZ3JvdXAgY29sdW1uc1xyXG4gICAqIEBwYXJhbSBncm91cEtleXMgd2hhdCBncm91cHMgdGhlIHVzZXIgaXMgdmlld2luZ1xyXG4gICAqIEBwYXJhbSBjb3VudEZpZWxkIGNvdW50IGZpZWxkIG5hbWVcclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkR3JvdXBzRnJvbURhdGEgPSAoXHJcbiAgICByb3dEYXRhOiBhbnlbXSxcclxuICAgIHJvd0dyb3VwQ29sczogQ29sdW1uVk9bXSxcclxuICAgIGdyb3VwS2V5czogc3RyaW5nW10sXHJcbiAgICBjb3VudEZpZWxkOiBzdHJpbmdcclxuICApOiBhbnlbXSA9PiB7XHJcbiAgICBjb25zdCBtZSA9IHRoaXM7XHJcbiAgICBsZXQgcm93R3JvdXBDb2wgPSByb3dHcm91cENvbHNbZ3JvdXBLZXlzLmxlbmd0aF07XHJcbiAgICBsZXQgZmllbGQgPSByb3dHcm91cENvbC5pZDtcclxuICAgIGxldCBtYXBwZWRSb3dEYXRhID0gbWUuZ3JvdXBCeShyb3dEYXRhLCBmaWVsZCk7XHJcbiAgICBsZXQgZ3JvdXBzOiBhbnkgPSBbXTtcclxuXHJcbiAgICBtZS5pdGVyYXRlT2JqZWN0KG1hcHBlZFJvd0RhdGEsIGZ1bmN0aW9uIChrZXksIHJvd0RhdGEpIHtcclxuICAgICAgdmFyIGdyb3VwSXRlbSA9IG1lLmFnZ3JlZ2F0ZUxpc3Qocm93RGF0YSwgY291bnRGaWVsZCk7XHJcbiAgICAgIGdyb3VwSXRlbVtmaWVsZF0gPSBrZXk7XHJcbiAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwSXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gZm9yIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggcHJvcGVydHkgb2Ygb2JqZWN0XHJcbiAgICogQHBhcmFtIG9iamVjdCBvYmplY3QgY29udGFpbmVkIG9kYXRhIGdyb3VwZWQgcmVzdWx0XHJcbiAgICogQHBhcmFtIGNhbGxiYWNrIGZ1bmN0aW9uIGRvIHNvbXRoaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpdGVyYXRlT2JqZWN0ID0gKFxyXG4gICAgb2JqZWN0OiBhbnksXHJcbiAgICBjYWxsYmFjazogKGtleTogc3RyaW5nLCByb3dEYXRhOiBhbnlbXSkgPT4gdm9pZFxyXG4gICk6IHZvaWQgPT4ge1xyXG4gICAgaWYgKCFvYmplY3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcclxuICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XTtcclxuICAgICAgY2FsbGJhY2soa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUHJlcGVhcmUgZ3JvdXBlZCBkYXRhXHJcbiAgICogQHBhcmFtIHJvd0RhdGEgYXJyYXkgb2RhdGEgcmVzdWx0XHJcbiAgICogQHBhcmFtIGZpZWxkIGdyb3VwaW5nIGZpZWxkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBncm91cEJ5ID0gKHJvd0RhdGE6IGFueVtdLCBmaWVsZDogc3RyaW5nKTogYW55ID0+IHtcclxuICAgIHZhciByZXN1bHQ6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgbWUgPSB0aGlzO1xyXG4gICAgcm93RGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgIHZhciBrZXkgPSBtZS5nZXRWYWx1ZShmaWVsZCwgaXRlbSk7XHJcbiAgICAgIHZhciBsaXN0Rm9yVGhpc0tleSA9IHJlc3VsdFtrZXldO1xyXG4gICAgICBpZiAoIWxpc3RGb3JUaGlzS2V5KSB7XHJcbiAgICAgICAgbGlzdEZvclRoaXNLZXkgPSBbXTtcclxuICAgICAgICByZXN1bHRba2V5XSA9IGxpc3RGb3JUaGlzS2V5O1xyXG4gICAgICB9XHJcbiAgICAgIGxpc3RGb3JUaGlzS2V5LnB1c2goaXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsY3VsYXRlIHRvdGFsIGNvdW50IHJlY29yZHMgaW4gZ3JvdXBcclxuICAgKiBAcGFyYW0gcm93RGF0YSBhcnJheSBvZGF0YSByZXN1bHQgZGF0YVxyXG4gICAqIEBwYXJhbSBjb3VudEZpZWxkIGZpZWxkIGNvbnRhaW5lZCBjb3VudCBvZiBhbGwgcmVjb3Jkc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYWdncmVnYXRlTGlzdCA9IChyb3dEYXRhOiBhbnlbXSwgY291bnRGaWVsZDogc3RyaW5nKTogYW55ID0+IHtcclxuICAgIHZhciByZXN1bHQ6IGFueSA9IHt9O1xyXG4gICAgcm93RGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgaWYgKGNvdW50RmllbGQgJiYgcm93W2NvdW50RmllbGRdICE9IG51bGwpIHtcclxuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gKHJlc3VsdFtjb3VudEZpZWxkXSB8fCAwKSArIChyb3dbY291bnRGaWVsZF0gfHwgMCk7XHJcbiAgICAgICAgZGVsZXRlIHJvd1tjb3VudEZpZWxkXTtcclxuICAgICAgICByZXN1bHRbY291bnRGaWVsZF0gPSB0b3RhbENvdW50O1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24ocmVzdWx0LCByb3cpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAgICAgKiBDYWxjdWxhdGUgZGlzdGluY3QgdmFsdWVzIGZvciBpbnB1dCBmaWVsZCBmcm9tIE9kYXRhIGFwaVxyXG4gICAgICAgKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkIG9mIHRoZSByb3cgdG8gZ2V0IHRoZSBjZWxscyBkYXRhIGZyb20gXHJcbiAgICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gZm9yIHJldHVybiBkaXN0aW5jdCB2YWx1ZXMgZm9yIGlucHV0IGZpZWxkXHJcbiAgICAgICAqIEBwYXJhbSBiZWZvcmVSZXF1ZXN0IFRoZSBmdW5jdGlvbiBmb3IgY3VzdG9taXplIHJlcXVlc3RcclxuICAgICAgICogQGV4YW1wbGUgXHJcbiAgICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAqICBjb25zdCBzZXRGaWx0ZXJWYWx1ZXNGdW5jUGFyYW1zID0gcGFyYW1zID0+IHtcclxuICAgICAgICogICAgY29uc3QgbWUgPSB0aGlzXHJcbiAgICAgICAqICAgIGNvbnN0IGNvbCA9IHBhcmFtcy5jb2xEZWYuZmllbGRcclxuICAgICAgICogICAgY29uc3Qgc3RvcmVOYW1lID0gbWUuZ2V0U3RvcmVOYW1lKGNvbClcclxuICAgICAgICogICAgY29uc3QgY2FsbGJhY2sgPSBkYXRhID0+IHtcclxuICAgICAgICogICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgKiAgICAgICAgbWUuc2V0U3RhdGUoeyBbc3RvcmVOYW1lXTogZGF0YSB9KVxyXG4gICAgICAgKiAgICAgICAgcGFyYW1zLnN1Y2Nlc3MoZGF0YSlcclxuICAgICAgICogICAgICB9XHJcbiAgICAgICAqICAgIH1cclxuICAgICAgICogICAgb2RhdGFQcm92aWRlckluc3RhbmNlLmdldEZpbHRlclZhbHVlc1BhcmFtcyhwYXJhbXMuY29sRGVmLmZpZWxkLCBjYWxsYmFjaylcclxuICAgICAgICogIH1cclxuICAgICAgICogXHJcbiAgICAgICAqIC8vLy4uLi5cclxuICAgICAgICogICAgICA8QWdHcmlkQ29sdW1uXHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ9XCJwcm9kdWN0XCJcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lPXsnUFJPRFVDVCd9XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyPVwiYWdTZXRDb2x1bW5GaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJvd0dyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5hYmxlUGl2b3RcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVSb3dHcm91cFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcz17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBzZXRGaWx0ZXJWYWx1ZXNGdW5jUGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3Um93c0FjdGlvbjogJ2tlZXAnXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXJQYXJhbXM9e3tjYXNlU2Vuc2l0aXZlOiB0cnVlfX1cclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICogPC9jb2RlPjwvcHJlPlxyXG4gICAgICAgKi9cclxuICBnZXRGaWx0ZXJWYWx1ZXNQYXJhbXMgPSAoXHJcbiAgICBmaWVsZDogc3RyaW5nLFxyXG4gICAgY2FsbGJhY2s6IChkYXRhOiBhbnlbXSkgPT4gdm9pZCxcclxuICAgIGJlZm9yZVJlcXVlc3Q6IChvcHRpb25zOiBPZGF0YVF1ZXJ5RXh0ZW5kRnVsbCkgPT4gdm9pZCB8IHVuZGVmaW5lZFxyXG4gICk6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgbWUgPSB0aGlzO1xyXG4gICAgY29uc3Qgb3B0aW9uczogT2RhdGFRdWVyeUV4dGVuZEZ1bGwgPSB7XHJcbiAgICAgIGFwcGx5OiBbYGdyb3VwYnkoKCR7bWUuZ2V0V3JhcENvbHVtbk5hbWUoZmllbGQpfSkpYF0sXHJcbiAgICB9O1xyXG4gICAgaWYgKGJlZm9yZVJlcXVlc3QpIHtcclxuICAgICAgYmVmb3JlUmVxdWVzdChvcHRpb25zKTtcclxuICAgIH1cclxuICAgIG1lLmNhbGxBcGkobWUudG9RdWVyeShvcHRpb25zKSkudGhlbigoeCkgPT4ge1xyXG4gICAgICBpZiAoeCkge1xyXG4gICAgICAgIGxldCB2YWx1ZXMgPSBtZS5nZXRPZGF0YVJlc3VsdCh4KTtcclxuICAgICAgICBjYWxsYmFjayh2YWx1ZXMubWFwKCh5OiBhbnkpID0+IHlbZmllbGRdKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogRGV0ZWN0IGlzIHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZVxyXG4gICAqL1xyXG4gIGlzU3RyVmFsID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XHJcbiAgLyoqXHJcbiAgICogRXh0YXJ0YyB2YWx1ZXMgZnJvbSBvZGF0YSByZXNwb25zZVxyXG4gICAqIEBwYXJhbSByZXNwb25zZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0T2RhdGFSZXN1bHQgPSAocmVzcG9uc2U6IGFueSk6IGFueSA9PlxyXG4gICAgQXJyYXkuaXNBcnJheShyZXNwb25zZSkgPyByZXNwb25zZSA6IHJlc3BvbnNlLnZhbHVlO1xyXG4gIC8qKlxyXG4gICAqIEVuZG9jaW5nIGNvbHVtbiBuYW1lIHRvIG9kYXRhIG5vdGF0aW9uXHJcbiAgICogQHBhcmFtIGNvbE5hbWUgY29sdW1uIG5hbWVcclxuICAgKi9cclxuICBwcml2YXRlIGdldFdyYXBDb2x1bW5OYW1lID0gKGNvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PlxyXG4gICAgY29sTmFtZSA/IHJlcGxhY2VBbGwoY29sTmFtZSwgJy4nLCAnLycpIDogJyc7XHJcbiAgLyoqXHJcbiAgICogZ3JpZCBjYWxscyB0aGlzIHRvIGdldCByb3dzIGZvciBJU2VydmVyU2lkZURhdGFzb3VyY2VcclxuICAgKiBAcGFyYW0gcGFyYW1zIGFnLWdyaWQgZGV0YWlscyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKi9cclxuICAvKipcclxuICAgKiBncmlkIGNhbGxzIHRoaXMgdG8gZ2V0IHJvd3MgaW1wbGVtZW50XHJcbiAgICogQHBhcmFtIHBhcmFtcyBhZy1ncmlkIGRldGFpbHMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICovXHJcbiAgcHVibGljIGdldFJvd3MocGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyk6IHZvaWQge1xyXG4gICAgY29uc3QgbWUgPSB0aGlzO1xyXG4gICAgY29uc3QgY2hpbGRDb3VudCA9IG1lLmdyb3VwQ291bnRGaWVsZE5hbWU7XHJcbiAgICBjb25zdCBpc1NlcnZlck1vZGUgPSAncmVxdWVzdCcgaW4gcGFyYW1zO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IGlzU2VydmVyTW9kZVxyXG4gICAgICA/IChwYXJhbXMgYXMgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKS5yZXF1ZXN0XHJcbiAgICAgIDogKHBhcmFtcyBhcyBJR2V0Um93c1BhcmFtcyk7XHJcbiAgICBjb25zdCByZXF1ZXN0U3J2ID0gcmVxdWVzdCBhcyBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0O1xyXG5cclxuICAgIGNvbnN0IHBpdm90QWN0aXZlID0gIWlzU2VydmVyTW9kZVxyXG4gICAgICA/IGZhbHNlXHJcbiAgICAgIDogcmVxdWVzdFNydi5waXZvdE1vZGUgJiZcclxuICAgICAgICByZXF1ZXN0U3J2LnBpdm90Q29scy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgcmVxdWVzdFNydi52YWx1ZUNvbHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAoIXBpdm90QWN0aXZlKSB7XHJcbiAgICAgIGxldCBmbiA9IChwYXJhbXMgYXMgYW55KS5jb2x1bW5BcGkuc2V0UGl2b3RSZXN1bHRDb2x1bW5zO1xyXG4gICAgICBpZiAoZm4gIT0gbnVsbCkge1xyXG4gICAgICAgIC8vIGlmICgocGFyYW1zIGFzIGFueSkuY29sdW1uQXBpLmlzUGl2b3RNb2RlKCkpIHtcclxuICAgICAgICAocGFyYW1zIGFzIGFueSkuY29sdW1uQXBpLnNldFBpdm90UmVzdWx0Q29sdW1ucyhbXSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIChwYXJhbXMgYXMgYW55KS5jb2x1bW5BcGkuc2V0U2Vjb25kYXJ5Q29sdW1ucyhbXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IG9wdGlvbnMgPSBtZS5nZXRPZGF0YU9wdGlvbnMocGFyYW1zKTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gbWUudG9RdWVyeShvcHRpb25zKTtcclxuICAgIGlmIChcclxuICAgICAgb3B0aW9ucy5za2lwID09PSAwICYmXHJcbiAgICAgICghaXNTZXJ2ZXJNb2RlIHx8XHJcbiAgICAgICAgKGlzU2VydmVyTW9kZSAmJlxyXG4gICAgICAgICAgKHBhcmFtcyBhcyBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpLnBhcmVudE5vZGUubGV2ZWwgPT09IC0xKSlcclxuICAgICkge1xyXG4gICAgICBtZS5jYW5jZWxQcm9taWNlLmNhbmNlbCgpO1xyXG4gICAgICBtZS5jYW5jZWxQcm9taWNlID0gbWUuY3JlYXRlQ2FuY2VsYWJsZVByb21pc2UoKTtcclxuICAgIH1cclxuICAgIFByb21pc2UucmFjZShbbWUuY2FuY2VsUHJvbWljZS5wcm9taXNlLCBtZS5jYWxsQXBpKHF1ZXJ5KV0pLnRoZW4oXHJcbiAgICAgIGFzeW5jICh4KSA9PiB7XHJcbiAgICAgICAgaWYgKCF4KSB7XHJcbiAgICAgICAgICBwYXJhbXMuZmFpbENhbGxiYWNrKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG1lLmdldE9kYXRhUmVzdWx0KHgpO1xyXG4gICAgICAgICAgaWYgKCFwaXZvdEFjdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYXBwbHkpIHtcclxuICAgICAgICAgICAgICBtZS5zZXRSZXN1bHQoXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBpc1NlcnZlck1vZGUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXMsXHJcbiAgICAgICAgICAgICAgICB4WydAb2RhdGEuY291bnQnXSB8fCB4WzBdPy50b3RhbENvdW50XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5hZnRlckxvYWREYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyTG9hZERhdGEoXHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlcyxcclxuICAgICAgICAgICAgICAgICAgeFsnQG9kYXRhLmNvdW50J10gfHwgeFswXT8udG90YWxDb3VudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNvdW50ID0gdmFsdWVzLmxlbmd0aDtcclxuICAgICAgICAgICAgICBpZiAoY291bnQgPT09IG9wdGlvbnMudG9wICYmIG9wdGlvbnMuc2tpcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgcmVjZWl2ZWQgZ3JvdXBlZCBjb3VudCBvZiB2YWx1ZSBsYXJnZSB0aGFuIHJlcXVlc3RlZCB0aGVuIHJlcXVlc3QgdG90YWwgY291bnQgb2YgdmFsdWVzXHJcbiAgICAgICAgICAgICAgICBtZS5jYWxsQXBpKHF1ZXJ5ICsgJy9hZ2dyZWdhdGUoJGNvdW50IGFzIGNvdW50KScpLnRoZW4oKHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY291bnQgPSBtZS5nZXRPZGF0YVJlc3VsdCh5KVswXS5jb3VudDtcclxuICAgICAgICAgICAgICAgICAgbWUuc2V0UmVzdWx0KHBhcmFtcywgaXNTZXJ2ZXJNb2RlLCB2YWx1ZXMsIGNvdW50KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5za2lwICE9IG51bGwgJiYgb3B0aW9ucy5za2lwID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICBjb3VudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBtZS5zZXRSZXN1bHQocGFyYW1zLCBpc1NlcnZlck1vZGUsIHZhbHVlcywgY291bnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWZ0ZXJMb2FkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFmdGVyTG9hZERhdGEob3B0aW9ucywgdmFsdWVzLCBjb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcm93RGF0YSA9IG1lLmdldE9kYXRhUmVzdWx0KHgpO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBjb3VudFxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgcm93RGF0YS5sZW5ndGggPT09IG9wdGlvbnMudG9wICYmXHJcbiAgICAgICAgICAgICAgb3B0aW9ucy5za2lwID09PSAwICYmXHJcbiAgICAgICAgICAgICAgcmVxdWVzdFNydi5ncm91cEtleXMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGxldCBlb2YgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB3aGlsZSAoIWVvZikge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5za2lwICs9IG9wdGlvbnMudG9wIHx8IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJRdWVyeSA9IG1lLnRvUXVlcnkob3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSb3dEYXRhID0gYXdhaXQgbWUuY2FsbEFwaShzdWJRdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5ld1Jvd0RhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLmZhaWxDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlb2YgPSBuZXdSb3dEYXRhLmxlbmd0aCAhPT0gb3B0aW9ucy50b3A7XHJcbiAgICAgICAgICAgICAgICByb3dEYXRhID0gcm93RGF0YS5jb25jYXQobmV3Um93RGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHBpdm90UmVzdWx0ID0gbWUuZ2V0UGl2b3QoXHJcbiAgICAgICAgICAgICAgcmVxdWVzdFNydi5waXZvdENvbHMsXHJcbiAgICAgICAgICAgICAgcmVxdWVzdFNydi5yb3dHcm91cENvbHMsXHJcbiAgICAgICAgICAgICAgcmVxdWVzdFNydi52YWx1ZUNvbHMsXHJcbiAgICAgICAgICAgICAgcm93RGF0YSxcclxuICAgICAgICAgICAgICBjaGlsZENvdW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJvd0RhdGEgPSBwaXZvdFJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmRhcnlDb2xEZWZzID0gcGl2b3RSZXN1bHQuc2Vjb25kYXJ5Q29sRGVmcztcclxuICAgICAgICAgICAgcm93RGF0YSA9IG1lLmJ1aWxkR3JvdXBzRnJvbURhdGEoXHJcbiAgICAgICAgICAgICAgcm93RGF0YSxcclxuICAgICAgICAgICAgICByZXF1ZXN0U3J2LnJvd0dyb3VwQ29scyxcclxuICAgICAgICAgICAgICByZXF1ZXN0U3J2Lmdyb3VwS2V5cyxcclxuICAgICAgICAgICAgICBjaGlsZENvdW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPVxyXG4gICAgICAgICAgICAgIHJlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICAgICAgPyByb3dEYXRhLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgOiByb3dEYXRhLmxlbmd0aCA9PT0gb3B0aW9ucy50b3BcclxuICAgICAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICAgICAgOiByb3dEYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgLy8gaWYgKHRvdGFsQ291bnQgPiAob3B0aW9ucy50b3AgfHwgMCkpIHtcclxuICAgICAgICAgICAgLy8gICBjb25zdCBzZXJ2ZXJTaWRlQmxvY2sgPSAocGFyYW1zIGFzIGFueSkucGFyZW50Tm9kZS5yb3dNb2RlbFxyXG4gICAgICAgICAgICAvLyAgICAgLnJvd05vZGVCbG9ja0xvYWRlci5ibG9ja3NbMF07XHJcbiAgICAgICAgICAgIC8vICAgc2VydmVyU2lkZUJsb2NrLnJvd05vZGVDYWNoZVBhcmFtcy5ibG9ja1NpemUgPSB0b3RhbENvdW50O1xyXG4gICAgICAgICAgICAvLyAgIHNlcnZlclNpZGVCbG9jay5lbmRSb3cgPSBzZXJ2ZXJTaWRlQmxvY2suc3RhcnRSb3cgKyB0b3RhbENvdW50O1xyXG4gICAgICAgICAgICAvLyAgIHNlcnZlclNpZGVCbG9jay5jcmVhdGVSb3dOb2RlcygpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIG1lLnNldFJlc3VsdChwYXJhbXMsIGlzU2VydmVyTW9kZSwgcm93RGF0YSwgdG90YWxDb3VudCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFmdGVyTG9hZERhdGEpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFmdGVyTG9hZERhdGEob3B0aW9ucywgcm93RGF0YSwgdG90YWxDb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucyhzZWNvbmRhcnlDb2xEZWZzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGV0IGZuID0gKHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRQaXZvdFJlc3VsdENvbHVtbnM7XHJcbiAgICAgICAgICAgICAgaWYgKGZuKSB7XHJcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIGFueSkuY29sdW1uQXBpLnNldFBpdm90UmVzdWx0Q29sdW1ucyhcclxuICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sRGVmc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRTZWNvbmRhcnlDb2x1bW5zKHNlY29uZGFyeUNvbERlZnMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIG1lLnNldFJlc3VsdChwYXJhbXMsIGlzU2VydmVyTW9kZSwgW10sIDApO1xyXG4gICAgICAgIGlmICh0aGlzLnNldEVycm9yKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEVycm9yKGVyciwgcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldCByZXN1bHRcclxuICAgKiBAcGFyYW0gcGFyYW1zIGFnLWdyaWQgZGV0YWlscyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gaXNTZXJ2ZXJNb2RlIGRldGVjdCB0eXBlIG9mIHBhcmFtc1xyXG4gICAqIEBwYXJhbSByb3dzVGhpc0Jsb2NrIGRhdGEgb2YgdGhlIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gcm93Q291bnQgY291bnQgb2YgdG90YWwgcmVzdWx0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRSZXN1bHQgPSAoXHJcbiAgICBwYXJhbXM6IElHZXRSb3dzUGFyYW1zIHwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zLFxyXG4gICAgaXNTZXJ2ZXJNb2RlOiBib29sZWFuLFxyXG4gICAgcm93c1RoaXNCbG9jazogYW55W10sXHJcbiAgICByb3dDb3VudD86IG51bWJlclxyXG4gICk6IHZvaWQgPT4ge1xyXG4gICAgaWYgKGlzU2VydmVyTW9kZSkge1xyXG4gICAgICAocGFyYW1zIGFzIElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcykuc3VjY2Vzcyh7XHJcbiAgICAgICAgcm93RGF0YTogcm93c1RoaXNCbG9jayxcclxuICAgICAgICByb3dDb3VudDogcm93Q291bnQsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgKHBhcmFtcyBhcyBJR2V0Um93c1BhcmFtcykuc3VjY2Vzc0NhbGxiYWNrKHJvd3NUaGlzQmxvY2ssIHJvd0NvdW50KTtcclxuICAgIH1cclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIG9kYXRhIG9wdGlvbnMgZm9yIGJ1aWxkIHF1ZXJ5IGZyb20gYWctZ3JpZCByZXF1ZXN0XHJcbiAgICogQHBhcmFtIHBhcmFtcyBhZy1ncmlkIGRldGFpbHMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICovXHJcbiAgZ2V0T2RhdGFPcHRpb25zID0gKFxyXG4gICAgcGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtc1xyXG4gICk6IE9kYXRhUXVlcnlFeHRlbmRGdWxsID0+IHtcclxuICAgIGNvbnN0IG1lID0gdGhpcztcclxuICAgIGNvbnN0IG9wdGlvbnM6IE9kYXRhUXVlcnlFeHRlbmRGdWxsID0ge307XHJcbiAgICBjb25zdCBpc1NlcnZlck1vZGUgPSAncmVxdWVzdCcgaW4gcGFyYW1zO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IGlzU2VydmVyTW9kZVxyXG4gICAgICA/IChwYXJhbXMgYXMgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKS5yZXF1ZXN0XHJcbiAgICAgIDogKHBhcmFtcyBhcyBJR2V0Um93c1BhcmFtcyk7XHJcbiAgICBjb25zdCBjaGlsZENvdW50ID0gbWUuZ3JvdXBDb3VudEZpZWxkTmFtZTtcclxuICAgIGlmICh0aGlzLmJlZm9yZVJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5iZWZvcmVSZXF1ZXN0KG9wdGlvbnMsIHRoaXMsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlcXVlc3Quc29ydE1vZGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3Qgc29ydCA9IG9wdGlvbnMuc29ydCB8fCBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0LnNvcnRNb2RlbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNvbCA9IHJlcXVlc3Quc29ydE1vZGVsW2ldO1xyXG4gICAgICAgIGxldCBjb2xOYW1lID0gbWUuZ2V0V3JhcENvbHVtbk5hbWUoY29sLmNvbElkKTtcclxuICAgICAgICBpZiAoY29sLnNvcnQgIT09ICdhc2MnKSB7XHJcbiAgICAgICAgICBjb2xOYW1lICs9ICcgZGVzYyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNvcnQucHVzaChjb2xOYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBvcHRpb25zLnNvcnQgPSBzb3J0O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyIHx8IFtdO1xyXG4gICAgZm9yIChjb25zdCBjb2xOYW1lIGluIHJlcXVlc3QuZmlsdGVyTW9kZWwpIHtcclxuICAgICAgaWYgKHJlcXVlc3QuZmlsdGVyTW9kZWwuaGFzT3duUHJvcGVydHkoY29sTmFtZSkpIHtcclxuICAgICAgICBjb25zdCBjb2wgPSByZXF1ZXN0LmZpbHRlck1vZGVsW2NvbE5hbWVdO1xyXG4gICAgICAgIGxldCBjb2xGaWx0ZXIgPSAnJztcclxuICAgICAgICBpZiAoIWNvbC5vcGVyYXRvcikge1xyXG4gICAgICAgICAgY29sRmlsdGVyID0gbWUuZ2V0RmlsdGVyT2RhdGEoY29sTmFtZSwgY29sKTtcclxuICAgICAgICAgIGlmIChjb2xGaWx0ZXIpIHtcclxuICAgICAgICAgICAgZmlsdGVyLnB1c2goY29sRmlsdGVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uMSA9IG1lLmdldEZpbHRlck9kYXRhKGNvbE5hbWUsIGNvbC5jb25kaXRpb24xKTtcclxuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbjIgPSBtZS5nZXRGaWx0ZXJPZGF0YShjb2xOYW1lLCBjb2wuY29uZGl0aW9uMik7XHJcbiAgICAgICAgICBpZiAoY29uZGl0aW9uMSAmJiBjb25kaXRpb24yKSB7XHJcbiAgICAgICAgICAgIGNvbEZpbHRlciA9IGAoJHtjb25kaXRpb24xfSAke2NvbC5vcGVyYXRvci50b0xvd2VyQ2FzZSgpfSAke2NvbmRpdGlvbjJ9KWA7XHJcbiAgICAgICAgICAgIGZpbHRlci5wdXNoKGNvbEZpbHRlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBpdm90QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYXBwbHkgPSBvcHRpb25zLmFwcGx5IHx8IFtdO1xyXG4gICAgaWYgKGlzU2VydmVyTW9kZSkge1xyXG4gICAgICBjb25zdCByZXF1ZXN0U3J2ID0gcmVxdWVzdCBhcyBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0O1xyXG4gICAgICBwaXZvdEFjdGl2ZSA9XHJcbiAgICAgICAgcmVxdWVzdFNydi5waXZvdE1vZGUgJiZcclxuICAgICAgICByZXF1ZXN0U3J2LnBpdm90Q29scy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgcmVxdWVzdFNydi52YWx1ZUNvbHMubGVuZ3RoID4gMDtcclxuICAgICAgaWYgKHJlcXVlc3RTcnYucm93R3JvdXBDb2xzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJHcm91cEJ5OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmIChyZXF1ZXN0U3J2Lmdyb3VwS2V5cy5sZW5ndGggPCByZXF1ZXN0U3J2LnJvd0dyb3VwQ29scy5sZW5ndGgpIHtcclxuICAgICAgICAgIC8vIElmIHJlcXVlc3Qgb25seSBncm91cHNcclxuICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHJlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgY29sVmFsdWUgPSByZXF1ZXN0U3J2Lmdyb3VwS2V5c1tpZHhdO1xyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb24gPSBgJHttZS5nZXRXcmFwQ29sdW1uTmFtZShcclxuICAgICAgICAgICAgICByZXF1ZXN0U3J2LnJvd0dyb3VwQ29sc1tpZHhdLmZpZWxkXHJcbiAgICAgICAgICAgICl9IGVxICR7XHJcbiAgICAgICAgICAgICAgKG1lLmlzU3RyVmFsKGNvbFZhbHVlKSA/IFwiJ1wiIDogJycpICtcclxuICAgICAgICAgICAgICBtZS5lbmNvZGUoY29sVmFsdWUpICtcclxuICAgICAgICAgICAgICAobWUuaXNTdHJWYWwoY29sVmFsdWUpID8gXCInXCIgOiAnJylcclxuICAgICAgICAgICAgfWA7XHJcbiAgICAgICAgICAgIGZpbHRlckdyb3VwQnkucHVzaChjb25kaXRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGZpbHRlckdyb3VwQnkubGVuZ3RoID4gMCB8fCBmaWx0ZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBGaWx0ZXJzIG11c3QgYnkgZmlyc3RcclxuICAgICAgICAgICAgYXBwbHkucHVzaChgZmlsdGVyKCR7ZmlsdGVyR3JvdXBCeS5jb25jYXQoZmlsdGVyKS5qb2luKCcgYW5kICcpfSlgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBhZ2dyZWdhdGU6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICBpZiAoY2hpbGRDb3VudCkge1xyXG4gICAgICAgICAgICBhZ2dyZWdhdGUucHVzaChtZS5vZGF0YUFnZ3JlZ2F0aW9uLmNvdW50KGNoaWxkQ291bnQpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXF1ZXN0U3J2LnZhbHVlQ29scy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHJlcXVlc3RTcnYudmFsdWVDb2xzLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBjb2xWYWx1ZSA9IHJlcXVlc3RTcnYudmFsdWVDb2xzW2lkeF07XHJcbiAgICAgICAgICAgICAgY29sVmFsdWUuYWdnRnVuYyAmJlxyXG4gICAgICAgICAgICAgICAgYWdncmVnYXRlLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgIG1lLm9kYXRhQWdncmVnYXRpb25bY29sVmFsdWUuYWdnRnVuY10oXHJcbiAgICAgICAgICAgICAgICAgICAgbWUuZ2V0V3JhcENvbHVtbk5hbWUoY29sVmFsdWUuZmllbGQpXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBncm91cHMgPSBbXHJcbiAgICAgICAgICAgIG1lLmdldFdyYXBDb2x1bW5OYW1lKFxyXG4gICAgICAgICAgICAgIHJlcXVlc3RTcnYucm93R3JvdXBDb2xzW3JlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aF0uZmllbGRcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBjb25zdCBzb3J0ID0gb3B0aW9ucy5zb3J0IHx8IFtdO1xyXG4gICAgICAgICAgY29uc3Qgc29ydENvbE9ubHkgPSBzb3J0Lm1hcCgoeCkgPT4geC5zcGxpdCgnICcpWzBdKTtcclxuICAgICAgICAgIGlmIChwaXZvdEFjdGl2ZSkge1xyXG4gICAgICAgICAgICBncm91cHMgPSBncm91cHMuY29uY2F0KFxyXG4gICAgICAgICAgICAgIHJlcXVlc3RTcnYucGl2b3RDb2xzLm1hcCgoeCkgPT4gbWUuZ2V0V3JhcENvbHVtbk5hbWUoeC5maWVsZCkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGdyb3Vwcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHNvcnRDb2xPbmx5LmluZGV4T2YoeCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBzb3J0LnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9wdGlvbnMuc29ydCA9IHNvcnQ7XHJcbiAgICAgICAgICBhcHBseS5wdXNoKFxyXG4gICAgICAgICAgICBgZ3JvdXBieSgoJHtncm91cHMuam9pbignLCcpfSkke1xyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZS5sZW5ndGggPiAwID8gYCxhZ2dyZWdhdGUoJHthZ2dyZWdhdGUuam9pbignLCcpfSlgIDogJydcclxuICAgICAgICAgICAgfSlgXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIG9wdGlvbnMuYXBwbHkgPSBhcHBseTtcclxuICAgICAgICAgIGlmIChvcHRpb25zLnNvcnQgJiYgb3B0aW9ucy5zb3J0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5zb3J0ID0gb3B0aW9ucy5zb3J0LmZpbHRlcihcclxuICAgICAgICAgICAgICAoeCkgPT4gZ3JvdXBzLmluZGV4T2YoeC5zcGxpdCgnICcpWzBdKSA+PSAwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBkZWxldGUgb3B0aW9ucy5zb3J0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBJZiByZXF1ZXN0IHJvd0RhdGEgYnkgZ3JvdXAgZmlsdGVyXHJcbiAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXF1ZXN0U3J2Lmdyb3VwS2V5cy5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlID0gcmVxdWVzdFNydi5ncm91cEtleXNbaWR4XTtcclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYCR7bWUuZ2V0V3JhcENvbHVtbk5hbWUoXHJcbiAgICAgICAgICAgICAgcmVxdWVzdFNydi5yb3dHcm91cENvbHNbaWR4XS5maWVsZFxyXG4gICAgICAgICAgICApfSBlcSAke1xyXG4gICAgICAgICAgICAgIChtZS5pc1N0clZhbChjb2xWYWx1ZSkgPyBcIidcIiA6ICcnKSArXHJcbiAgICAgICAgICAgICAgbWUuZW5jb2RlKGNvbFZhbHVlKSArXHJcbiAgICAgICAgICAgICAgKG1lLmlzU3RyVmFsKGNvbFZhbHVlKSA/IFwiJ1wiIDogJycpXHJcbiAgICAgICAgICAgIH1gO1xyXG4gICAgICAgICAgICBmaWx0ZXIucHVzaChjb25kaXRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGZpbHRlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG9wdGlvbnMuZmlsdGVyID0gZmlsdGVyO1xyXG4gICAgfVxyXG4gICAgaWYgKGFwcGx5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgb3B0aW9ucy5hcHBseSA9IGFwcGx5O1xyXG4gICAgICBkZWxldGUgb3B0aW9ucy5maWx0ZXI7XHJcbiAgICAgIGRlbGV0ZSBvcHRpb25zLmV4cGFuZDtcclxuICAgICAgZGVsZXRlIG9wdGlvbnMuc2VsZWN0O1xyXG4gICAgICAvLyBvcHRpb25zLnNvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgb3B0aW9ucy5za2lwID0gcmVxdWVzdC5zdGFydFJvdztcclxuICAgIG9wdGlvbnMudG9wID0gKHJlcXVlc3QuZW5kUm93IHx8IDApIC0gKHJlcXVlc3Quc3RhcnRSb3cgfHwgMCk7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLmFwcGx5ICYmIG9wdGlvbnMuc2tpcCA9PT0gMCkge1xyXG4gICAgICBvcHRpb25zLmNvdW50ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcHRpb25zO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgb2RhdGEgcXVlcnkgZnJvbSBhZy1ncmlkIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gcGFyYW1zIGFnLWdyaWQgZGV0YWlscyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKi9cclxuICBnZXRPZGF0YVF1ZXJ5ID0gKHBhcmFtczogSUdldFJvd3NQYXJhbXMgfCBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpOiBzdHJpbmcgPT5cclxuICAgIHRoaXMudG9RdWVyeSh0aGlzLmdldE9kYXRhT3B0aW9ucyhwYXJhbXMpKTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE9kYXRhUHJvdmlkZXJDbGllbnQgZXh0ZW5kcyBPZGF0YVByb3ZpZGVyIHtcclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0Um93cyhwYXJhbXM6IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcykge1xyXG4gICAgc3VwZXIuZ2V0Um93cyhwYXJhbXMpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgY2xhc3MgT2RhdGFTZXJ2ZXJTaWRlUHJvdmlkZXIgZXh0ZW5kcyBPZGF0YVByb3ZpZGVyIHtcclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0Um93cyhwYXJhbXM6IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyk6IHZvaWQge1xyXG4gICAgc3VwZXIuZ2V0Um93cyhwYXJhbXMpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
787
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib0RhdGFQcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jhc2VzaXRlLXNoYXJlZC1ncmlkLWxpYi9zcmMvbGliL2hlbHBlcnMvb0RhdGFQcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQXNHckMsTUFBTSxPQUFPLGFBQWE7SUFtR3hCLFlBQVksT0FBNkI7UUE5RnpDOzs7V0FHRztRQUNILHdCQUFtQixHQUFXLFlBQVksQ0FBQztRQUMzQzs7O1dBR0c7UUFDSCxnQ0FBMkIsR0FBWSxLQUFLLENBQUM7UUErRzdDLGtDQUFrQztRQUNsQyw0QkFBdUIsR0FBRyxHQUFzQixFQUFFO1lBQ2hELElBQUksTUFBVyxDQUFDO1lBQ2hCLE1BQU0sRUFBRSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNuQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztZQUNuQixPQUFPO2dCQUNMLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE1BQU07YUFDUCxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBQ0YsNEJBQTRCO1FBQzVCLGtCQUFhLEdBQVE7WUFDbkIsVUFBVTtZQUNWLE1BQU0sRUFBRSxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQVUsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLE1BQU0sRUFBRTtZQUN0RSxLQUFLLEVBQUUsQ0FBQyxHQUFXLEVBQUUsTUFBYyxFQUFVLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxNQUFNLEVBQUU7WUFDckUsUUFBUSxFQUFFLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBVSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sTUFBTSxFQUFFO1lBQ3hFLFFBQVEs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ICBDb2xHcm91cERlZixcclxuICBDb2x1bW5WTyxcclxuICBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0LFxyXG4gIElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyxcclxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIE9kYXRhUXVlcnlFeHRlbmRGdWxsLFxyXG4gIE9kYXRhUXVlcnlFeHRlbmRPcHRpb25zLFxyXG4gIE9kYXRhUXVlcnlPcHRpb25zLFxyXG4gIFBpdm90UmVzdWx0RGF0LFxyXG59IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJy4vdXRpbHMnO1xyXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBPZGF0YVByb3ZpZGVyT3B0aW9ucyB7XHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gZm9yIGNhbGwgb2RhdGEgYXBpXHJcbiAgICovXHJcbiAgY2FsbEFwaTogKHF1ZXJ5OiBzdHJpbmcpID0+IFByb21pc2U8YW55PjtcclxuICAvKipcclxuICAgKiBOYW1lIG9mIGZpZWxkIGNvbnRhaW4gY291bnQgb2YgcmVjb3JkIHJlc3VsdHMgaW4gZ3JvdXBpbmcgb2RhdGEgcXVlcnlcclxuICAgKiBAZGVmYXVsdCBjaGlsZENvdW50XHJcbiAgICovXHJcbiAgZ3JvdXBDb3VudEZpZWxkTmFtZT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBVc2UgaW4gb2RhdGEgYnVpbGQgcXVlcnlcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcj86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgZm9yIGV4dGVuZCBvZGF0YSBxdWVyeSBvcHRpb25zIGZvciBpbXBsZW1lbnQgdXNlciBsb2dpY1xyXG4gICAqL1xyXG4gIGJlZm9yZVJlcXVlc3Q/OiAoXHJcbiAgICBvcHRpb25zOiBPZGF0YVF1ZXJ5T3B0aW9ucyxcclxuICAgIHByb3ZpZGVyOiBPZGF0YVByb3ZpZGVyLFxyXG4gICAgcmVxdWVzdDogSUdldFJvd3NQYXJhbXMgfCBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0XHJcbiAgKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAgKiBDYWxsYmFjayBmb3IgcGl2b3Qgb3IgZ3JvdXAgZm9yIGFwbGx5IGNvbHVtbiBhZy1ncmlkIHNldHRpbmdzXHJcbiAgICAqIEBleGFtcGxlXHJcbiAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAqIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnMgPSBzZWNvbmRhcnlDb2x1bW5zID0+IHtcclxuICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY29uZGFyeUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgIGNvbnN0IGNvbCA9IHNlY29uZGFyeUNvbHVtbnNbaV1cclxuICAgICAgIGlmIChjb2wuY2hpbGRyZW4pIHtcclxuICAgICAgICAgYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucyhjb2wuY2hpbGRyZW4pXHJcbiAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAvL0FwbGx5IG5ldyBzZXR0aW5nIGZvciBncm91cCBkeW5jYW1pYyBjcmVhdGVkIGNvbHVtblxyXG4gICAgICAgICAvLyBjb2wuY2VsbENsYXNzUnVsZXMgPSBcclxuICAgICAgICAgLy8gY29sLnZhbHVlRm9ybWF0dGVyID0gXHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICB9XHJcbiAgICAqIDwvcHJlPjwvY29kZT5cclxuICAgICovXHJcbiAgYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucz86IChcclxuICAgIHNlY29uZGFyeUNvbERlZnM6IChDb2xEZWYgfCBDb2xHcm91cERlZilbXVxyXG4gICkgPT4gdm9pZDtcclxuICAvKipcclxuICAgICogQ2FsbGJhY2sgaW52b2tlZCBhZnRlciBsb2FkIGRhdGFcclxuICAgICogQHBhcmFtIG9wdGlvbnMgb2RhdGEgcHJvdmlkZXIgb3B0aW9uc1xyXG4gICAgKiBAcGFyYW0gcm93RGF0YSBkYXRhIGZvciBhZy1ncmlkXHJcbiAgICAqIEBwYXJhbSB0b3RhbENvdW50IHRvdGFsIGNvdW50IHJlY29yZHNcclxuICAgICogXHJcbiAgICAqIEBleGFtcGxlXHJcbiAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAgIGFmdGVyTG9hZERhdGEgPSAob3B0aW9ucywgcm93RGF0YSwgdG90YWxDb3VudCkgPT4ge1xyXG4gICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2tpcCA9PT0gMCAmJiByb3dEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgIGdyaWRBcGkuY29sdW1uQ29udHJvbGxlci5hdXRvU2l6ZUFsbENvbHVtbnMoKVxyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAqIDwvY29kZT48L3ByZT5cclxuICAgICovXHJcbiAgYWZ0ZXJMb2FkRGF0YT86IChcclxuICAgIG9wdGlvbnM6IE9kYXRhUXVlcnlFeHRlbmRPcHRpb25zLFxyXG4gICAgcm93RGF0YTogYW55W10sXHJcbiAgICB0b3RhbENvdW50OiBudW1iZXJcclxuICApID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgZm9yIGNhdGNoIGVycm9yXHJcbiAgICovXHJcbiAgc2V0RXJyb3I/OiAoXHJcbiAgICBlcnJvcjogYW55LFxyXG4gICAgcGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtc1xyXG4gICkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBMaXN0IG9mIGNvbHVtbnMgYnkgaWQvZmllbGQgYXJlIGNhc2Ugc2Vuc2l0aXZlIGZvciBidWlsZCBvZGF0YSBxdWVyeVxyXG4gICAqL1xyXG4gIGNhc2VTZW5zaXRpdmVDb2x1bW5zPzogc3RyaW5nW107XHJcbiAgLyoqXHJcbiAgICAgKiBVc2UgZm9yIHNwZWNpZmllZCBjb2x1bW4gY3VzdG9tIGZpbHRlciBpbXBsZW1lbnRhdGlvblxyXG4gICAgICogPHByZT48Y29kZT5cclxuICAgICAgICAgY3VzdG9tRmlsdGVyczoge1xyXG4gICAgICAgICAgICAgXCJjdXN0b21lclwiOiAoY29sTmFtZSxjb2wsaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyLHByb3ZpZGVyKSA9PntcclxuICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLm9kYXRhT3BlcmF0b3IuaW4oXHJcbiAgICAgICAgICAgICAgICBjb2xOYW1lLFxyXG4gICAgICAgICAgICAgICAgY29sLnZhbHVlc1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICovXHJcbiAgY3VzdG9tRmlsdGVycz86IHtcclxuICAgIFtpbmRleDogc3RyaW5nXTogKFxyXG4gICAgICBjb2xOYW1lOiBzdHJpbmcsXHJcbiAgICAgIGNvbDogYW55LFxyXG4gICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW4sXHJcbiAgICAgIHByb3ZpZGVyOiBPZGF0YVByb3ZpZGVyXHJcbiAgICApID0+IHN0cmluZztcclxuICB9O1xyXG59XHJcblxyXG5kZWNsYXJlIGludGVyZmFjZSBDYW5jZWxhYmxlUHJvbWlzZSB7XHJcbiAgcHJvbWlzZTogUHJvbWlzZTxhbnk+O1xyXG4gIGNhbmNlbDogKCkgPT4gdm9pZDtcclxufVxyXG5leHBvcnQgY2xhc3MgT2RhdGFQcm92aWRlciBpbXBsZW1lbnRzIE9kYXRhUHJvdmlkZXJPcHRpb25zIHtcclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBmb3IgY2FsbCBvZGF0YSBhcGlcclxuICAgKi9cclxuICBjYWxsQXBpITogKHF1ZXJ5OiBzdHJpbmcpID0+IFByb21pc2U8YW55PjtcclxuICAvKipcclxuICAgKiBOYW1lIG9mIGZpZWxkIGNvbnRhaW4gY291bnQgb2YgcmVjb3JkIHJlc3VsdHMgaW4gZ3JvdXBpbmcgb2RhdGEgcXVlcnlcclxuICAgKiBAZGVmYXVsdCBjaGlsZENvdW50XHJcbiAgICovXHJcbiAgZ3JvdXBDb3VudEZpZWxkTmFtZTogc3RyaW5nID0gJ2NoaWxkQ291bnQnO1xyXG4gIC8qKlxyXG4gICAqIFVzZSBpbiBvZGF0YSBidWlsZCBxdWVyeVxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgZm9yIGV4dGVuZCBvZGF0YSBxdWVyeSBvcHRpb25zIGZvciBpbXBsZW1lbnQgdXNlciBsb2dpY1xyXG4gICAqL1xyXG4gIGJlZm9yZVJlcXVlc3Q6XHJcbiAgICB8ICgoXHJcbiAgICAgICAgb3B0aW9uczogT2RhdGFRdWVyeU9wdGlvbnMsXHJcbiAgICAgICAgcHJvdmlkZXI6IE9kYXRhUHJvdmlkZXIsXHJcbiAgICAgICAgcmVxdWVzdDogSUdldFJvd3NQYXJhbXMgfCBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0XHJcbiAgICAgICkgPT4gdm9pZClcclxuICAgIHwgdW5kZWZpbmVkO1xyXG4gIC8qKlxyXG4gICAgICAqIENhbGxiYWNrIGZvciBwaXZvdCBvciBncm91cCBmb3IgYXBsbHkgY29sdW1uIGFnLWdyaWQgc2V0dGluZ3NcclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICogYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucyA9IHNlY29uZGFyeUNvbHVtbnMgPT4ge1xyXG4gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWNvbmRhcnlDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgIGNvbnN0IGNvbCA9IHNlY29uZGFyeUNvbHVtbnNbaV1cclxuICAgICAgICAgaWYgKGNvbC5jaGlsZHJlbikge1xyXG4gICAgICAgICAgIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnMoY29sLmNoaWxkcmVuKVxyXG4gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgIC8vQXBsbHkgbmV3IHNldHRpbmcgZm9yIGdyb3VwIGR5bmNhbWljIGNyZWF0ZWQgY29sdW1uXHJcbiAgICAgICAgICAgLy8gY29sLmNlbGxDbGFzc1J1bGVzID0gXHJcbiAgICAgICAgICAgLy8gY29sLnZhbHVlRm9ybWF0dGVyID0gXHJcbiAgICAgICAgIH1cclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgICAgICogPC9wcmU+PC9jb2RlPlxyXG4gICAgICAqL1xyXG4gIGJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnM6XHJcbiAgICB8ICgoc2Vjb25kYXJ5Q29sRGVmczogKENvbERlZiB8IENvbEdyb3VwRGVmKVtdKSA9PiB2b2lkKVxyXG4gICAgfCB1bmRlZmluZWQ7XHJcbiAgLyoqXHJcbiAgICAgICogQ2FsbGJhY2sgaW52b2tlZCBhZnRlciBsb2FkIGRhdGFcclxuICAgICAgKiBAcGFyYW0gb3B0aW9ucyBvZGF0YSBwcm92aWRlciBvcHRpb25zXHJcbiAgICAgICogQHBhcmFtIHJvd0RhdGEgZGF0YSBmb3IgYWctZ3JpZFxyXG4gICAgICAqIEBwYXJhbSB0b3RhbENvdW50IHRvdGFsIGNvdW50IHJlY29yZHNcclxuICAgICAgKiBcclxuICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAgICAgYWZ0ZXJMb2FkRGF0YSA9IChvcHRpb25zLCByb3dEYXRhLCB0b3RhbENvdW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNraXAgPT09IDAgJiYgcm93RGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgIGdyaWRBcGkuY29sdW1uQ29udHJvbGxlci5hdXRvU2l6ZUFsbENvbHVtbnMoKVxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAqIDwvY29kZT48L3ByZT5cclxuICAgICAgKi9cclxuICBhZnRlckxvYWREYXRhOlxyXG4gICAgfCAoKFxyXG4gICAgICAgIG9wdGlvbnM6IE9kYXRhUXVlcnlFeHRlbmRPcHRpb25zLFxyXG4gICAgICAgIHJvd0RhdGE6IGFueVtdLFxyXG4gICAgICAgIHRvdGFsQ291bnQ6IG51bWJlclxyXG4gICAgICApID0+IHZvaWQpXHJcbiAgICB8IHVuZGVmaW5lZDtcclxuICAvKipcclxuICAgKiBDYWxsYmFjayBmb3IgY2F0Y2ggZXJyb3JcclxuICAgKi9cclxuICBzZXRFcnJvcjpcclxuICAgIHwgKChlcnJvcjogYW55LCBwYXJhbXM6IElHZXRSb3dzUGFyYW1zIHwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKSA9PiB2b2lkKVxyXG4gICAgfCB1bmRlZmluZWQ7XHJcbiAgLyoqXHJcbiAgICogTGlzdCBvZiBjb2x1bW5zIGJ5IGlkL2ZpZWxkIGFyZSBjYXNlIHNlbnNpdGl2ZSBmb3IgYnVpbGQgb2RhdGEgcXVlcnlcclxuICAgKi9cclxuICBjYXNlU2Vuc2l0aXZlQ29sdW1ucz86IHN0cmluZ1tdO1xyXG4gIC8qKlxyXG4gICAgICogVXNlIGZvciBzcGVjaWZpZWQgY29sdW1uIGN1c3RvbSBmaWx0ZXIgaW1wbGVtZW50YXRpb25cclxuICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAgIGN1c3RvbUZpbHRlcnM6IHtcclxuICAgICAgICAgICAgIFwiY3VzdG9tZXJcIjogKGNvbE5hbWUsY29sLGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcixwcm92aWRlcikgPT57XHJcbiAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlci5vZGF0YU9wZXJhdG9yLmluKFxyXG4gICAgICAgICAgICAgICAgY29sTmFtZSxcclxuICAgICAgICAgICAgICAgIGNvbC52YWx1ZXNcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAqL1xyXG4gIGN1c3RvbUZpbHRlcnM/OiB7XHJcbiAgICBbaW5kZXg6IHN0cmluZ106IChcclxuICAgICAgY29sTmFtZTogc3RyaW5nLFxyXG4gICAgICBjb2w6IGFueSxcclxuICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuLFxyXG4gICAgICBwcm92aWRlcjogT2RhdGFQcm92aWRlclxyXG4gICAgKSA9PiBzdHJpbmc7XHJcbiAgfTtcclxuICBjYW5jZWxQcm9taWNlOiBDYW5jZWxhYmxlUHJvbWlzZTtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPZGF0YVByb3ZpZGVyT3B0aW9ucykge1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBvcHRpb25zKTtcclxuICAgIGlmICh0aGlzLmNhbGxBcGkgPT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxBcGkgbXVzdCBiZSBzcGVjaWZpZWQnKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdGhpcy5jYWxsQXBpICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2FsbEFwaSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5iZWZvcmVSZXF1ZXN0ICE9IG51bGwgJiZcclxuICAgICAgdHlwZW9mIHRoaXMuYmVmb3JlUmVxdWVzdCAhPT0gJ2Z1bmN0aW9uJ1xyXG4gICAgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignYmVmb3JlUmVxdWVzdCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5hZnRlckxvYWREYXRhICE9IG51bGwgJiZcclxuICAgICAgdHlwZW9mIHRoaXMuYWZ0ZXJMb2FkRGF0YSAhPT0gJ2Z1bmN0aW9uJ1xyXG4gICAgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignYWZ0ZXJMb2FkRGF0YSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNldEVycm9yICE9IG51bGwgJiYgdHlwZW9mIHRoaXMuc2V0RXJyb3IgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRFcnJvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FuY2VsUHJvbWljZSA9IHRoaXMuY3JlYXRlQ2FuY2VsYWJsZVByb21pc2UoKTtcclxuICB9XHJcblxyXG4gIC8qKkNyZWF0b3IgYSBjYW5jZWxhYmxlIFByb21pc2UgKi9cclxuICBjcmVhdGVDYW5jZWxhYmxlUHJvbWlzZSA9ICgpOiBDYW5jZWxhYmxlUHJvbWlzZSA9PiB7XHJcbiAgICBsZXQgY2FuY2VsOiBhbnk7XHJcbiAgICBjb25zdCBwciA9IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcclxuICAgICAgY2FuY2VsID0gcmVqZWN0O1xyXG4gICAgfSkuY2F0Y2goKCkgPT4ge30pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcHJvbWlzZTogcHIsXHJcbiAgICAgIGNhbmNlbCxcclxuICAgIH07XHJcbiAgfTtcclxuICAvKipPZGF0YSBxdWVyeSBvcGVyYXRpb25zICovXHJcbiAgb2RhdGFPcGVyYXRvcjogYW55ID0ge1xyXG4gICAgLy8gTG9naWNhbFxyXG4gICAgZXF1YWxzOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gZXEgJHt2YWx1ZTF9YCxcclxuICAgIGJsYW5rOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gZXEgJHt2YWx1ZTF9YCxcclxuICAgIG5vdEJsYW5rOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gbmUgJHt2YWx1ZTF9YCxcclxuICAgIG5vdEVxdWFsOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gbmUgJHt2YWx1ZTF9YCxcclxuICAgIGxlc3NUaGFuOiAoY29sOiBzdHJpbmcsIHZhbHVlMTogc3RyaW5nKTogc3RyaW5nID0+IGAke2NvbH0gbHQgJHt2YWx1ZTF9YCxcclxuICAgIGxlc3NUaGFuT3JFcXVhbDogKGNvbDogc3RyaW5nLCB2YWx1ZTE6IHN0cmluZyk6IHN0cmluZyA9PlxyXG4gICAgICBgJHtjb2x9IGxlICR7dmFsdWUxfWAsXHJcbiAgICBncmVhdGVyVGhhbjogKGNvbDogc3RyaW5nLCB2YWx1ZTE6IHN0cmluZyk6IHN0cmluZyA9PiBgJHtjb2x9IGd0ICR7dmFsdWUxfWAsXHJcbiAgICBncmVhdGVyVGhhbk9yRXF1YWw6IChjb2w6IHN0cmluZywgdmFsdWUxOiBzdHJpbmcpOiBzdHJpbmcgPT5cclxuICAgICAgYCR7Y29sfSBnZSAke3ZhbHVlMX1gLFxyXG4gICAgaW5SYW5nZTogKGNvbDogc3RyaW5nLCB2YWx1ZTE6IHN0cmluZywgdmFsdWUyOiBhbnkpOiBzdHJpbmcgPT5cclxuICAgICAgYCgke2NvbH0gZ2UgJHt2YWx1ZTF9IGFuZCAke2NvbH0gbGUgJHt2YWx1ZTJ9KWAsXHJcbiAgICAvLyBTdHJpbmdcclxuICAgIGVxdWFsc1N0cjogKFxyXG4gICAgICBjb2w6IHN0cmluZyxcclxuICAgICAgdmFsdWUxOiBzdHJpbmcsXHJcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhblxyXG4gICAgKTogc3RyaW5nID0+XHJcbiAgICAgIGAke3RoaXMuaWZUb2xvd2VyQ29sKFxyXG4gICAgICAgIGNvbCxcclxuICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgKX0gZXEgJHt0aGlzLmlmVG9sb3dlcih2YWx1ZTEsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcil9YCxcclxuICAgIG5vdEVxdWFsU3RyOiAoXHJcbiAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICB2YWx1ZTE6IHN0cmluZyxcclxuICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuXHJcbiAgICApOiBzdHJpbmcgPT5cclxuICAgICAgYCR7dGhpcy5pZlRvbG93ZXJDb2woXHJcbiAgICAgICAgY29sLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICApfSBuZSAke3RoaXMuaWZUb2xvd2VyKHZhbHVlMSwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX1gLFxyXG4gICAgY29udGFpbnM6IChcclxuICAgICAgY29sOiBzdHJpbmcsXHJcbiAgICAgIHZhbHVlMTogc3RyaW5nLFxyXG4gICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW5cclxuICAgICk6IHN0cmluZyA9PlxyXG4gICAgICBgY29udGFpbnMoJHt0aGlzLmlmVG9sb3dlckNvbChcclxuICAgICAgICBjb2wsXHJcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICAgICl9LCR7dGhpcy5pZlRvbG93ZXIodmFsdWUxLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSlgLFxyXG4gICAgbm90Q29udGFpbnM6IChcclxuICAgICAgY29sOiBzdHJpbmcsXHJcbiAgICAgIHZhbHVlMTogc3RyaW5nLFxyXG4gICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW5cclxuICAgICk6IHN0cmluZyA9PlxyXG4gICAgICBgY29udGFpbnMoJHt0aGlzLmlmVG9sb3dlckNvbChcclxuICAgICAgICBjb2wsXHJcbiAgICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyXHJcbiAgICAgICl9LCR7dGhpcy5pZlRvbG93ZXIodmFsdWUxLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSkgZXEgZmFsc2VgLFxyXG4gICAgc3RhcnRzV2l0aDogKFxyXG4gICAgICBjb2w6IHN0cmluZyxcclxuICAgICAgdmFsdWUxOiBzdHJpbmcsXHJcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhblxyXG4gICAgKTogc3RyaW5nID0+XHJcbiAgICAgIGBzdGFydHN3aXRoKCR7dGhpcy5pZlRvbG93ZXJDb2woXHJcbiAgICAgICAgY29sLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICApfSwke3RoaXMuaWZUb2xvd2VyKHZhbHVlMSwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX0pICBlcSB0cnVlYCxcclxuICAgIGVuZHNXaXRoOiAoXHJcbiAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICB2YWx1ZTE6IHN0cmluZyxcclxuICAgICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyOiBib29sZWFuXHJcbiAgICApOiBzdHJpbmcgPT5cclxuICAgICAgYGVuZHN3aXRoKCR7dGhpcy5pZlRvbG93ZXJDb2woXHJcbiAgICAgICAgY29sLFxyXG4gICAgICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlclxyXG4gICAgICApfSwke3RoaXMuaWZUb2xvd2VyKHZhbHVlMSwgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyKX0pICBlcSB0cnVlYCxcclxuICAgIGluU3RyOiAoXHJcbiAgICAgIGNvbDogc3RyaW5nLFxyXG4gICAgICB2YWx1ZXM6IHN0cmluZ1tdLFxyXG4gICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW5cclxuICAgICk6IHN0cmluZyA9PlxyXG4gICAgICBgJHt0aGlzLmlmVG9sb3dlckNvbChjb2wsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcil9IGluICgke3ZhbHVlc1xyXG4gICAgICAgIC5tYXAoXHJcbiAgICAgICAgICAoeCkgPT5cclxuICAgICAgICAgICAgYCcke3RoaXMuaWZUb2xvd2VyKHRoaXMuZW5jb2RlKHgpLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIpfSdgXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5qb2luKCl9KWAsXHJcbiAgICBpbjogKGNvbDogc3RyaW5nLCB2YWx1ZXM6IHN0cmluZ1tdKSA9PlxyXG4gICAgICBgJHtjb2x9IGluICgke3ZhbHVlcy5tYXAoKHgpID0+IGAke3RoaXMuZW5jb2RlKHgpfWApLmpvaW4oKX0pYCxcclxuICAgIG5vdEluOiAoY29sOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pID0+XHJcbiAgICAgIGBub3QgKCR7Y29sfSBpbiAoJHt2YWx1ZXMubWFwKCh4KSA9PiBgJHt4fWApLmpvaW4oKX0pKWAsXHJcbiAgICAvLyBEYXRlXHJcbiAgICB0cnVuYzogKGNvbDogc3RyaW5nKTogc3RyaW5nID0+IGBkYXRlKCR7Y29sfSlgLFxyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGx5IHRvbG93ZXIgZm9yIGNvbHVtbiBpbiBvZGF0YSBzeW50YXhcclxuICAgKiBAcGFyYW0gY29sIGNvbHVtbiBuYW1lXHJcbiAgICogQHBhcmFtIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciBuZWVkIGFwcGx5IHRvbG93ZXJcclxuICAgKi9cclxuICBpZlRvbG93ZXJDb2wgPSAoY29sOiBzdHJpbmcsIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlcjogYm9vbGVhbik6IHN0cmluZyA9PlxyXG4gICAgaXNDYXNlU2Vuc2l0aXZlU3RyaW5nRmlsdGVyID8gY29sIDogYHRvbG93ZXIoJHtjb2x9KWA7XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIgIG5lZWQgYXBwbHkgdG9sb3dlclxyXG4gICAqL1xyXG4gIGlmVG9sb3dlciA9ICh2YWx1ZTogc3RyaW5nLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI6IGJvb2xlYW4pOiBzdHJpbmcgPT5cclxuICAgIGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciA/IHZhbHVlIDogdmFsdWUgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XHJcbiAgLyoqXHJcbiAgICogT2RhdGEgYWdncmVnYXRpb24gb3BlcmF0aW9uc1xyXG4gICAqL1xyXG4gIG9kYXRhQWdncmVnYXRpb246IGFueSA9IHtcclxuICAgIC8vIExvZ2ljYWxcclxuICAgIHN1bTogKGNvbDogc3RyaW5nLCBhc0ZpZWxkPzogYW55KTogc3RyaW5nID0+XHJcbiAgICAgIGAke2NvbH0gd2l0aCBzdW0gYXMgJHtjb2wgfHwgYXNGaWVsZH1gLFxyXG4gICAgbWluOiAoY29sOiBzdHJpbmcsIGFzRmllbGQ/OiBhbnkpOiBzdHJpbmcgPT5cclxuICAgICAgYCR7Y29sfSB3aXRoIG1pbiBhcyAke2NvbCB8fCBhc0ZpZWxkfWAsXHJcbiAgICBtYXg6IChjb2w6IHN0cmluZywgYXNGaWVsZD86IGFueSk6IHN0cmluZyA9PlxyXG4gICAgICBgJHtjb2x9IHdpdGggbWF4IGFzICR7Y29sIHx8IGFzRmllbGR9YCxcclxuICAgIGF2ZzogKGNvbDogc3RyaW5nLCBhc0ZpZWxkPzogYW55KTogc3RyaW5nID0+XHJcbiAgICAgIGAke2NvbH0gd2l0aCBhdmVyYWdlIGFzICR7Y29sIHx8IGFzRmllbGR9YCxcclxuICAgIGNvdW50OiAoY29sOiBzdHJpbmcsIGFzRmllbGQ/OiBhbnkpOiBzdHJpbmcgPT5cclxuICAgICAgYCRjb3VudCBhcyAke2NvbCB8fCBhc0ZpZWxkfWAsXHJcbiAgfTtcclxuICAvKipcclxuICAgKiBPZGF0YSBxdWVyeSBidWlsZGVyXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgcGFyYW1ldGVyIGZvciBvZGF0YSBxdWVyeVxyXG4gICAqL1xyXG4gIHRvUXVlcnkgPSAob3B0aW9uczogT2RhdGFRdWVyeUV4dGVuZEZ1bGwpOiBzdHJpbmcgPT4ge1xyXG4gICAgbGV0IHBhdGg6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICBwYXRoLnB1c2goJyRjb3VudD10cnVlJyk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5za2lwKSB7XHJcbiAgICAgIHBhdGgucHVzaChgJHNraXA9JHtvcHRpb25zLnNraXB9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy50b3ApIHtcclxuICAgICAgcGF0aC5wdXNoKGAkdG9wPSR7b3B0aW9ucy50b3B9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5zb3J0ICYmIG9wdGlvbnMuc29ydC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHBhdGgucHVzaCgnJG9yZGVyYnk9JyArIG9wdGlvbnMuc29ydC5qb2luKCcsJykpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuZmlsdGVyICYmIG9wdGlvbnMuZmlsdGVyLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGF0aC5wdXNoKCckZmlsdGVyPScgKyBvcHRpb25zLmZpbHRlci5qb2luKCcgYW5kICcpKTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmFwcGx5ICYmIG9wdGlvbnMuYXBwbHkubGVuZ3RoID4gMCkge1xyXG4gICAgICBwYXRoLnB1c2goJyRhcHBseT0nICsgb3B0aW9ucy5hcHBseS5qb2luKCcvJykpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuZXhwYW5kICYmIG9wdGlvbnMuZXhwYW5kLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGF0aC5wdXNoKCckZXhwYW5kPScgKyBvcHRpb25zLmV4cGFuZC5qb2luKCcsJykpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuc2VsZWN0ICYmIG9wdGlvbnMuc2VsZWN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgcGF0aC5wdXNoKCckc2VsZWN0PScgKyBvcHRpb25zLnNlbGVjdC5qb2luKCcsJykpO1xyXG4gICAgfVxyXG4gICAgbGV0IHF1ZXJ5OiBzdHJpbmcgPSAnJztcclxuICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcclxuICAgICAgdmFyIGRlZmF1bHRGaWx0ZXJzID0gcGF0aC5maWx0ZXIoKHg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHguaW5kZXhPZignJGNvdW50JykgPj0gMCB8fFxyXG4gICAgICAgICAgeC5pbmRleE9mKCckdG9wJykgPj0gMCB8fFxyXG4gICAgICAgICAgeC5pbmRleE9mKCckb3JkZXJieScpID49IDAgfHxcclxuICAgICAgICAgIHguaW5kZXhPZignJGFwcGx5JykgPj0gMCB8fFxyXG4gICAgICAgICAgeC5pbmRleE9mKCckZXhwYW5kJykgPj0gMCB8fFxyXG4gICAgICAgICAgeC5pbmRleE9mKCckc2VsZWN0JykgPj0gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJzICYmIGRlZmF1bHRGaWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBxdWVyeSA9ICc/JyArIGRlZmF1bHRGaWx0ZXJzLmpvaW4oJyYnKTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgY3VzdG9tRmlsdGVycyA9IHBhdGguZmlsdGVyKGZ1bmN0aW9uIChvYmopIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdEZpbHRlcnMuaW5kZXhPZihvYmopID09IC0xO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGN1c3RvbUZpbHRlcnMgJiYgY3VzdG9tRmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKGN1c3RvbUZpbHRlcnMubGVuZ3RoID09IDEpIHF1ZXJ5ID0gcXVlcnkgKyAnJicgKyBjdXN0b21GaWx0ZXJzO1xyXG4gICAgICAgIGVsc2UgcXVlcnkgPSBxdWVyeSArIGN1c3RvbUZpbHRlcnMuam9pbignYW5kJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHF1ZXJ5ID0gcXVlcnkucmVwbGFjZSgnYW5kJGZpbHRlcj0nLCAnJmZpbHRlcj0nKTtcclxuICAgIHJldHVybiBxdWVyeTtcclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIEFkZCBxdW90ZXMgZm9yIHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSBzdHJpbmcgdmFsdWVcclxuICAgKi9cclxuICBlbmNvZGUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PlxyXG4gICAgdGhpcy5pc1N0clZhbCh2YWx1ZSkgPyByZXBsYWNlQWxsKHZhbHVlLCBcIidcIiwgXCInJ1wiKSA6IHZhbHVlO1xyXG4gIC8qKlxyXG4gICAqIENvbmN0YXQgdG8gZGF0ZSBhIHRpbWUgZm9yIGNyZWF0ZSBkYXRldGltZSBmb3JtYXQgZm9yIG9kYXRhIHF1ZXJ5XHJcbiAgICogQHBhcmFtIHZhbHVlIGRhdGUgc3RyaW5nXHJcbiAgICovXHJcbiAgdG9EYXRlVGltZSA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICBjb25zdCBkdCA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgIGlmIChpc05hTihkdC5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGR0MSA9IG5ldyBEYXRlKFxyXG4gICAgICBEYXRlLlVUQyhkdC5nZXRGdWxsWWVhcigpLCBkdC5nZXRNb250aCgpLCBkdC5nZXREYXRlKCkpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIGR0MS50b0lTT1N0cmluZygpO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29sTmFtZSBjb2x1bW5OYW1lXHJcbiAgICogQHJldHVybnMgaXMgQ2FzZVNlbnNpdGl2ZSBmb3IgY29sdW1uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRJc05lZWRDYXNlU2Vuc2l0aXZlID0gKGNvbE5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5pc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIgJiZcclxuICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlQ29sdW1ucyAmJlxyXG4gICAgICB0aGlzLmNhc2VTZW5zaXRpdmVDb2x1bW5zLmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jYXNlU2Vuc2l0aXZlQ29sdW1ucy5pbmRleE9mKGNvbE5hbWUpID49IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXI7XHJcbiAgfTtcclxuICAvKipcclxuICAgKiBDb252ZXJ0IGFnLWdyaWQgY29sdW1uIGZpbHRlciB0byBvZGF0YSBxdWVyeVxyXG4gICAqIEBwYXJhbSBjb2xOYW1lIGNvbHVtbk5hbWVcclxuICAgKiBAcGFyYW0gY29sIGFnLWdyaWQgY29sdW1uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRGaWx0ZXJPZGF0YSA9IChjb2xOYW1lOiBzdHJpbmcsIGNvbDogYW55KTogc3RyaW5nID0+IHtcclxuICAgIGNvbnN0IG1lID0gdGhpcztcclxuICAgIGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZVN0cmluZ0ZpbHRlciA9IG1lLmdldElzTmVlZENhc2VTZW5zaXRpdmUoY29sTmFtZSk7XHJcbiAgICBjb25zdCBjdXN0b21GaWx0ZXIgPSBtZS5jdXN0b21GaWx0ZXJzICYmIG1lLmN1c3RvbUZpbHRlcnNbY29sTmFtZV07XHJcbiAgICBjb2xOYW1lID0gcmVwbGFjZUFsbChjb2xOYW1lLCAnLicsICcvJyk7XHJcbiAgICBjb2xOYW1lID0gbWUuZ2V0V3JhcENvbHVtbk5hbWUoY29sTmFtZSk7XHJcbiAgICBpZiAoY3VzdG9tRmlsdGVyKSB7XHJcbiAgICAgIHJldHVybiBjdXN0b21GaWx0ZXIoY29sTmFtZSwgY29sLCBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXIsIG1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN3aXRjaCAoY29sLmZpbHRlclR5cGUpIHtcclxuICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgcmV0dXJuIG1lLm9kYXRhT3BlcmF0b3JbY29sLnR5cGVdKGNvbE5hbWUsIGNvbC5maWx0ZXIsIGNvbC5maWx0ZXJUbyk7XHJcbiAgICAgICAgY2FzZSAndGV4dCc6IHtcclxuICAgICAgICAgIGxldCBvcGVyYXRvck5hbWUgPSBjb2wudHlwZTtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG1lLmVuY29kZShjb2wuZmlsdGVyKSB8fCAnJztcclxuICAgICAgICAgIC8vIGxldCBmaWx0ZXJUbyA9IG1lLmVuY29kZShjb2wuZmlsdGVyVG8pO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAob3BlcmF0b3JOYW1lID09PSAnZXF1YWxzJyB8fCBvcGVyYXRvck5hbWUgPT09ICdub3RFcXVhbCcpICYmXHJcbiAgICAgICAgICAgICFpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBvcGVyYXRvck5hbWUgKz0gJ1N0cic7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbWUub2RhdGFPcGVyYXRvcltvcGVyYXRvck5hbWVdKFxyXG4gICAgICAgICAgICBjb2xOYW1lLFxyXG4gICAgICAgICAgICBgJyR7ZmlsdGVyfSdgLFxyXG4gICAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjb2wuZGF0ZUZyb20gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICBtZS50b0RhdGVUaW1lKGNvbC5kYXRlRnJvbSkgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAoY29sLmRhdGVUbyA9PSBudWxsIHx8XHJcbiAgICAgICAgICAgICAgKGNvbC5kYXRlVG8gIT0gbnVsbCAmJiBtZS50b0RhdGVUaW1lKGNvbC5kYXRlVG8pICE9IG51bGwpKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZS5vZGF0YU9wZXJhdG9yW2NvbC50eXBlXShcclxuICAgICAgICAgICAgICBjb2xOYW1lLFxyXG4gICAgICAgICAgICAgIGAke21lLnRvRGF0ZVRpbWUoY29sLmRhdGVGcm9tKX1gLFxyXG4gICAgICAgICAgICAgIGAke21lLnRvRGF0ZVRpbWUoY29sLmRhdGVUbyl9YFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnc2V0JzpcclxuICAgICAgICAgIHJldHVybiBjb2wudmFsdWVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyBtZS5vZGF0YU9wZXJhdG9yLmluU3RyKFxyXG4gICAgICAgICAgICAgICAgY29sTmFtZSxcclxuICAgICAgICAgICAgICAgIGNvbC52YWx1ZXMsXHJcbiAgICAgICAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmVTdHJpbmdGaWx0ZXJcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCB2YWx1ZSBmcm9tIHJlY29yZCBieSBwYXRoIHRvIGZpZWxkXHJcbiAgICogQHBhcmFtIGZpZWxkIHBhdGggdG8gY29sdW1uIHZhbHVlXHJcbiAgICogQHBhcmFtIG9iaiAgcmVjb3JkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRWYWx1ZShmaWVsZDogc3RyaW5nLCBvYmo6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBwYXRocyA9IGZpZWxkLnNwbGl0KCcuJyk7XHJcbiAgICBpZiAocGF0aHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHJldHVybiBvYmpbZmllbGRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHBhdGhzLnJlZHVjZSgob2JqZWN0LCBwYXRoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChvYmplY3QgfHwge30pW3BhdGhdOyAvLyBPbGl2ZXIgU3RlZWxlJ3MgcGF0dGVyblxyXG4gICAgICB9LCBvYmopO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FjbHVsYXRlIHBpdm90IGRhdGEgZm9yIGFnLWdyaWQgZnJvbSBvZGF0YVxyXG4gICAqIEBwYXJhbSBwaXZvdENvbHMgcGl2b3QgY29sdW1uc1xyXG4gICAqIEBwYXJhbSByb3dHcm91cENvbHMgcm93IGdyb3VwIGNvbHVtbnNcclxuICAgKiBAcGFyYW0gdmFsdWVDb2xzIHZhbHVlIGNvbHVtbnNcclxuICAgKiBAcGFyYW0gZGF0YSBvZGF0YSByZXN1bHRcclxuICAgKiBAcGFyYW0gY291bnRGaWVsZCBjb3VudCBmaWVsZCBuYW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRQaXZvdCA9IChcclxuICAgIHBpdm90Q29sczogQ29sdW1uVk9bXSxcclxuICAgIHJvd0dyb3VwQ29sczogQ29sdW1uVk9bXSxcclxuICAgIHZhbHVlQ29sczogQ29sdW1uVk9bXSxcclxuICAgIGRhdGE6IGFueVtdLFxyXG4gICAgY291bnRGaWVsZDogc3RyaW5nXHJcbiAgKTogUGl2b3RSZXN1bHREYXQgPT4ge1xyXG4gICAgLy8gYXNzdW1lIDEgcGl2b3QgY29sIGFuZCAxIHZhbHVlIGNvbCBmb3IgdGhpcyBleGFtcGxlXHJcbiAgICBjb25zdCBtZSA9IHRoaXM7XHJcbiAgICBjb25zdCBwaXZvdERhdGE6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBhZ2dDb2xzTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBjb2xLZXlFeGlzdHNNYXA6IGFueSA9IHt9O1xyXG5cclxuICAgIGNvbnN0IHNlY29uZGFyeUNvbERlZnM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBzZWNvbmRhcnlDb2xEZWZzTWFwOiBhbnkgPSB7fTtcclxuXHJcbiAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgdmFyIHBpdm90VmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICBwaXZvdENvbHMuZm9yRWFjaChmdW5jdGlvbiAocGl2b3RDb2wpIHtcclxuICAgICAgICB2YXIgcGl2b3RGaWVsZCA9IHBpdm90Q29sLmlkO1xyXG4gICAgICAgIHZhciBwaXZvdFZhbHVlID0gbWUuZ2V0VmFsdWUocGl2b3RGaWVsZCwgaXRlbSk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcGl2b3RWYWx1ZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgcGl2b3RWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICBwaXZvdFZhbHVlLnRvU3RyaW5nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBwaXZvdFZhbHVlcy5wdXNoKHBpdm90VmFsdWUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBpdm90VmFsdWVzLnB1c2goJy0nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gdmFyIHBpdm90VmFsdWUgPSBpdGVtW3Bpdm90RmllbGRdLnRvU3RyaW5nKCk7XHJcbiAgICAgIHZhciBwaXZvdEl0ZW06IGFueSA9IHt9O1xyXG5cclxuICAgICAgdmFsdWVDb2xzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlQ29sKSB7XHJcbiAgICAgICAgdmFyIHZhbEZpZWxkID0gdmFsdWVDb2wuaWQ7XHJcbiAgICAgICAgdmFyIGNvbEtleSA9IGNyZWF0ZUNvbEtleShwaXZvdFZhbHVlcywgdmFsRmllbGQpO1xyXG5cclxuICAgICAgICB2YXIgdmFsdWUgPSBtZS5nZXRWYWx1ZSh2YWxGaWVsZCwgaXRlbSk7XHJcbiAgICAgICAgcGl2b3RJdGVtW2NvbEtleV0gPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCFjb2xLZXlFeGlzdHNNYXBbY29sS2V5XSkge1xyXG4gICAgICAgICAgYWRkTmV3QWdnQ29sKGNvbEtleSwgdmFsdWVDb2wpO1xyXG4gICAgICAgICAgYWRkTmV3U2Vjb25kYXJ5Q29sRGVmKGNvbEtleSwgcGl2b3RWYWx1ZXMsIHZhbHVlQ29sKTtcclxuICAgICAgICAgIGNvbEtleUV4aXN0c01hcFtjb2xLZXldID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoY291bnRGaWVsZCkge1xyXG4gICAgICAgIHBpdm90SXRlbVtjb3VudEZpZWxkXSA9IG1lLmdldFZhbHVlKGNvdW50RmllbGQsIGl0ZW0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByb3dHcm91cENvbHMuZm9yRWFjaChmdW5jdGlvbiAocm93R3JvdXBDb2wpIHtcclxuICAgICAgICB2YXIgcm93R3JvdXBGaWVsZCA9IHJvd0dyb3VwQ29sLmlkLnNwbGl0KCcuJylbMF07XHJcbiAgICAgICAgcGl2b3RJdGVtW3Jvd0dyb3VwRmllbGRdID0gaXRlbVtyb3dHcm91cEZpZWxkXTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBwaXZvdERhdGEucHVzaChwaXZvdEl0ZW0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZnVuY3Rpb24gYWRkTmV3QWdnQ29sKGNvbEtleTogc3RyaW5nLCB2YWx1ZUNvbDogQ29sdW1uVk8pOiB2b2lkIHtcclxuICAgICAgdmFyIG5ld0NvbCA9IHtcclxuICAgICAgICBpZDogY29sS2V5LFxyXG4gICAgICAgIGZpZWxkOiBjb2xLZXksXHJcbiAgICAgICAgYWdnRnVuYzogdmFsdWVDb2wuYWdnRnVuYyxcclxuICAgICAgfTtcclxuICAgICAgYWdnQ29sc0xpc3QucHVzaChuZXdDb2wpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGFkZE5ld1NlY29uZGFyeUNvbERlZihcclxuICAgICAgY29sS2V5OiBhbnksXHJcbiAgICAgIHBpdm90VmFsdWVzOiBhbnksXHJcbiAgICAgIHZhbHVlQ29sOiBhbnlcclxuICAgICkge1xyXG4gICAgICB2YXIgcGFyZW50R3JvdXA6IGFueSA9IG51bGw7XHJcblxyXG4gICAgICB2YXIga2V5UGFydHM6IGFueSA9IFtdO1xyXG5cclxuICAgICAgcGl2b3RWYWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAocGl2b3RWYWx1ZTogYW55KSB7XHJcbiAgICAgICAga2V5UGFydHMucHVzaChwaXZvdFZhbHVlKTtcclxuICAgICAgICB2YXIgY29sS2V5ID0gY3JlYXRlQ29sS2V5KGtleVBhcnRzKTtcclxuICAgICAgICB2YXIgZ3JvdXBDb2xEZWY6IGFueSA9IHNlY29uZGFyeUNvbERlZnNNYXBbY29sS2V5XTtcclxuICAgICAgICBpZiAoIWdyb3VwQ29sRGVmKSB7XHJcbiAgICAgICAgICBncm91cENvbERlZiA9IHtcclxuICAgICAgICAgICAgZ3JvdXBJZDogY29sS2V5LFxyXG4gICAgICAgICAgICBoZWFkZXJOYW1lOiBwaXZvdFZhbHVlLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgc2Vjb25kYXJ5Q29sRGVmc01hcFtjb2xLZXldID0gZ3JvdXBDb2xEZWY7XHJcbiAgICAgICAgICBpZiAocGFyZW50R3JvdXApIHtcclxuICAgICAgICAgICAgcGFyZW50R3JvdXAuY2hpbGRyZW4ucHVzaChncm91cENvbERlZik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWNvbmRhcnlDb2xEZWZzLnB1c2goZ3JvdXBDb2xEZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXJlbnRHcm91cCA9IGdyb3VwQ29sRGVmO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHBhcmVudEdyb3VwLmNoaWxkcmVuLnB1c2goe1xyXG4gICAgICAgIGNvbElkOiBjb2xLZXksXHJcbiAgICAgICAgaGVhZGVyTmFtZTogdmFsdWVDb2wuYWdnRnVuYyArICcoJyArIHZhbHVlQ29sLmRpc3BsYXlOYW1lICsgJyknLFxyXG4gICAgICAgIGZpZWxkOiBjb2xLZXksXHJcbiAgICAgICAgc3VwcHJlc3NNZW51OiB0cnVlLFxyXG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sS2V5KHBpdm90VmFsdWVzOiBzdHJpbmdbXSwgdmFsdWVGaWVsZD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgIHZhciByZXN1bHQgPSBwaXZvdFZhbHVlcy5qb2luKCd8Jyk7XHJcbiAgICAgIGlmICh2YWx1ZUZpZWxkICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXN1bHQgKz0gJ3wnICsgdmFsdWVGaWVsZDtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQgPSByZXBsYWNlQWxsKHJlc3VsdCwgJy4nLCAnKicpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGRhdGE6IHBpdm90RGF0YSxcclxuICAgICAgYWdnQ29sczogYWdnQ29sc0xpc3QsXHJcbiAgICAgIHNlY29uZGFyeUNvbERlZnM6IHNlY29uZGFyeUNvbERlZnMsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd0RhdGEgYXJyYXkgb2RhdGEgcmVzdWx0XHJcbiAgICogQHBhcmFtIHJvd0dyb3VwQ29scyByb3cgZ3JvdXAgY29sdW1uc1xyXG4gICAqIEBwYXJhbSBncm91cEtleXMgd2hhdCBncm91cHMgdGhlIHVzZXIgaXMgdmlld2luZ1xyXG4gICAqIEBwYXJhbSBjb3VudEZpZWxkIGNvdW50IGZpZWxkIG5hbWVcclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkR3JvdXBzRnJvbURhdGEgPSAoXHJcbiAgICByb3dEYXRhOiBhbnlbXSxcclxuICAgIHJvd0dyb3VwQ29sczogQ29sdW1uVk9bXSxcclxuICAgIGdyb3VwS2V5czogc3RyaW5nW10sXHJcbiAgICBjb3VudEZpZWxkOiBzdHJpbmdcclxuICApOiBhbnlbXSA9PiB7XHJcbiAgICBjb25zdCBtZSA9IHRoaXM7XHJcbiAgICBsZXQgcm93R3JvdXBDb2wgPSByb3dHcm91cENvbHNbZ3JvdXBLZXlzLmxlbmd0aF07XHJcbiAgICBsZXQgZmllbGQgPSByb3dHcm91cENvbC5pZDtcclxuICAgIGxldCBtYXBwZWRSb3dEYXRhID0gbWUuZ3JvdXBCeShyb3dEYXRhLCBmaWVsZCk7XHJcbiAgICBsZXQgZ3JvdXBzOiBhbnkgPSBbXTtcclxuXHJcbiAgICBtZS5pdGVyYXRlT2JqZWN0KG1hcHBlZFJvd0RhdGEsIGZ1bmN0aW9uIChrZXksIHJvd0RhdGEpIHtcclxuICAgICAgdmFyIGdyb3VwSXRlbSA9IG1lLmFnZ3JlZ2F0ZUxpc3Qocm93RGF0YSwgY291bnRGaWVsZCk7XHJcbiAgICAgIGdyb3VwSXRlbVtmaWVsZF0gPSBrZXk7XHJcbiAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwSXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gZm9yIGV4ZWN1dGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggcHJvcGVydHkgb2Ygb2JqZWN0XHJcbiAgICogQHBhcmFtIG9iamVjdCBvYmplY3QgY29udGFpbmVkIG9kYXRhIGdyb3VwZWQgcmVzdWx0XHJcbiAgICogQHBhcmFtIGNhbGxiYWNrIGZ1bmN0aW9uIGRvIHNvbXRoaW5nXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpdGVyYXRlT2JqZWN0ID0gKFxyXG4gICAgb2JqZWN0OiBhbnksXHJcbiAgICBjYWxsYmFjazogKGtleTogc3RyaW5nLCByb3dEYXRhOiBhbnlbXSkgPT4gdm9pZFxyXG4gICk6IHZvaWQgPT4ge1xyXG4gICAgaWYgKCFvYmplY3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcclxuICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XTtcclxuICAgICAgY2FsbGJhY2soa2V5LCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogUHJlcGVhcmUgZ3JvdXBlZCBkYXRhXHJcbiAgICogQHBhcmFtIHJvd0RhdGEgYXJyYXkgb2RhdGEgcmVzdWx0XHJcbiAgICogQHBhcmFtIGZpZWxkIGdyb3VwaW5nIGZpZWxkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBncm91cEJ5ID0gKHJvd0RhdGE6IGFueVtdLCBmaWVsZDogc3RyaW5nKTogYW55ID0+IHtcclxuICAgIHZhciByZXN1bHQ6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgbWUgPSB0aGlzO1xyXG4gICAgcm93RGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgIHZhciBrZXkgPSBtZS5nZXRWYWx1ZShmaWVsZCwgaXRlbSk7XHJcbiAgICAgIHZhciBsaXN0Rm9yVGhpc0tleSA9IHJlc3VsdFtrZXldO1xyXG4gICAgICBpZiAoIWxpc3RGb3JUaGlzS2V5KSB7XHJcbiAgICAgICAgbGlzdEZvclRoaXNLZXkgPSBbXTtcclxuICAgICAgICByZXN1bHRba2V5XSA9IGxpc3RGb3JUaGlzS2V5O1xyXG4gICAgICB9XHJcbiAgICAgIGxpc3RGb3JUaGlzS2V5LnB1c2goaXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsY3VsYXRlIHRvdGFsIGNvdW50IHJlY29yZHMgaW4gZ3JvdXBcclxuICAgKiBAcGFyYW0gcm93RGF0YSBhcnJheSBvZGF0YSByZXN1bHQgZGF0YVxyXG4gICAqIEBwYXJhbSBjb3VudEZpZWxkIGZpZWxkIGNvbnRhaW5lZCBjb3VudCBvZiBhbGwgcmVjb3Jkc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYWdncmVnYXRlTGlzdCA9IChyb3dEYXRhOiBhbnlbXSwgY291bnRGaWVsZDogc3RyaW5nKTogYW55ID0+IHtcclxuICAgIHZhciByZXN1bHQ6IGFueSA9IHt9O1xyXG4gICAgcm93RGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgaWYgKGNvdW50RmllbGQgJiYgcm93W2NvdW50RmllbGRdICE9IG51bGwpIHtcclxuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gKHJlc3VsdFtjb3VudEZpZWxkXSB8fCAwKSArIChyb3dbY291bnRGaWVsZF0gfHwgMCk7XHJcbiAgICAgICAgZGVsZXRlIHJvd1tjb3VudEZpZWxkXTtcclxuICAgICAgICByZXN1bHRbY291bnRGaWVsZF0gPSB0b3RhbENvdW50O1xyXG4gICAgICB9XHJcbiAgICAgIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24ocmVzdWx0LCByb3cpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gICAgICAgKiBDYWxjdWxhdGUgZGlzdGluY3QgdmFsdWVzIGZvciBpbnB1dCBmaWVsZCBmcm9tIE9kYXRhIGFwaVxyXG4gICAgICAgKiBAcGFyYW0gZmllbGQgVGhlIGZpZWxkIG9mIHRoZSByb3cgdG8gZ2V0IHRoZSBjZWxscyBkYXRhIGZyb20gXHJcbiAgICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gZm9yIHJldHVybiBkaXN0aW5jdCB2YWx1ZXMgZm9yIGlucHV0IGZpZWxkXHJcbiAgICAgICAqIEBwYXJhbSBiZWZvcmVSZXF1ZXN0IFRoZSBmdW5jdGlvbiBmb3IgY3VzdG9taXplIHJlcXVlc3RcclxuICAgICAgICogQGV4YW1wbGUgXHJcbiAgICAgICAqIDxwcmU+PGNvZGU+XHJcbiAgICAgICAqICBjb25zdCBzZXRGaWx0ZXJWYWx1ZXNGdW5jUGFyYW1zID0gcGFyYW1zID0+IHtcclxuICAgICAgICogICAgY29uc3QgbWUgPSB0aGlzXHJcbiAgICAgICAqICAgIGNvbnN0IGNvbCA9IHBhcmFtcy5jb2xEZWYuZmllbGRcclxuICAgICAgICogICAgY29uc3Qgc3RvcmVOYW1lID0gbWUuZ2V0U3RvcmVOYW1lKGNvbClcclxuICAgICAgICogICAgY29uc3QgY2FsbGJhY2sgPSBkYXRhID0+IHtcclxuICAgICAgICogICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgKiAgICAgICAgbWUuc2V0U3RhdGUoeyBbc3RvcmVOYW1lXTogZGF0YSB9KVxyXG4gICAgICAgKiAgICAgICAgcGFyYW1zLnN1Y2Nlc3MoZGF0YSlcclxuICAgICAgICogICAgICB9XHJcbiAgICAgICAqICAgIH1cclxuICAgICAgICogICAgb2RhdGFQcm92aWRlckluc3RhbmNlLmdldEZpbHRlclZhbHVlc1BhcmFtcyhwYXJhbXMuY29sRGVmLmZpZWxkLCBjYWxsYmFjaylcclxuICAgICAgICogIH1cclxuICAgICAgICogXHJcbiAgICAgICAqIC8vLy4uLi5cclxuICAgICAgICogICAgICA8QWdHcmlkQ29sdW1uXHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ9XCJwcm9kdWN0XCJcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lPXsnUFJPRFVDVCd9XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyPVwiYWdTZXRDb2x1bW5GaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJvd0dyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5hYmxlUGl2b3RcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVSb3dHcm91cFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcz17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBzZXRGaWx0ZXJWYWx1ZXNGdW5jUGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3Um93c0FjdGlvbjogJ2tlZXAnXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAvLyBmaWx0ZXJQYXJhbXM9e3tjYXNlU2Vuc2l0aXZlOiB0cnVlfX1cclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICogPC9jb2RlPjwvcHJlPlxyXG4gICAgICAgKi9cclxuICBnZXRGaWx0ZXJWYWx1ZXNQYXJhbXMgPSAoXHJcbiAgICBmaWVsZDogc3RyaW5nLFxyXG4gICAgY2FsbGJhY2s6IChkYXRhOiBhbnlbXSkgPT4gdm9pZCxcclxuICAgIGJlZm9yZVJlcXVlc3Q6IChvcHRpb25zOiBPZGF0YVF1ZXJ5RXh0ZW5kRnVsbCkgPT4gdm9pZCB8IHVuZGVmaW5lZFxyXG4gICk6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgbWUgPSB0aGlzO1xyXG4gICAgY29uc3Qgb3B0aW9uczogT2RhdGFRdWVyeUV4dGVuZEZ1bGwgPSB7XHJcbiAgICAgIGFwcGx5OiBbYGdyb3VwYnkoKCR7bWUuZ2V0V3JhcENvbHVtbk5hbWUoZmllbGQpfSkpYF0sXHJcbiAgICB9O1xyXG4gICAgaWYgKGJlZm9yZVJlcXVlc3QpIHtcclxuICAgICAgYmVmb3JlUmVxdWVzdChvcHRpb25zKTtcclxuICAgIH1cclxuICAgIG1lLmNhbGxBcGkobWUudG9RdWVyeShvcHRpb25zKSkudGhlbigoeCkgPT4ge1xyXG4gICAgICBpZiAoeCkge1xyXG4gICAgICAgIGxldCB2YWx1ZXMgPSBtZS5nZXRPZGF0YVJlc3VsdCh4KTtcclxuICAgICAgICBjYWxsYmFjayh2YWx1ZXMubWFwKCh5OiBhbnkpID0+IHlbZmllbGRdKSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogRGV0ZWN0IGlzIHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZVxyXG4gICAqL1xyXG4gIGlzU3RyVmFsID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XHJcbiAgLyoqXHJcbiAgICogRXh0YXJ0YyB2YWx1ZXMgZnJvbSBvZGF0YSByZXNwb25zZVxyXG4gICAqIEBwYXJhbSByZXNwb25zZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0T2RhdGFSZXN1bHQgPSAocmVzcG9uc2U6IGFueSk6IGFueSA9PlxyXG4gICAgQXJyYXkuaXNBcnJheShyZXNwb25zZSkgPyByZXNwb25zZSA6IHJlc3BvbnNlLnZhbHVlO1xyXG4gIC8qKlxyXG4gICAqIEVuZG9jaW5nIGNvbHVtbiBuYW1lIHRvIG9kYXRhIG5vdGF0aW9uXHJcbiAgICogQHBhcmFtIGNvbE5hbWUgY29sdW1uIG5hbWVcclxuICAgKi9cclxuICBwcml2YXRlIGdldFdyYXBDb2x1bW5OYW1lID0gKGNvbE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PlxyXG4gICAgY29sTmFtZSA/IHJlcGxhY2VBbGwoY29sTmFtZSwgJy4nLCAnLycpIDogJyc7XHJcbiAgLyoqXHJcbiAgICogZ3JpZCBjYWxscyB0aGlzIHRvIGdldCByb3dzIGZvciBJU2VydmVyU2lkZURhdGFzb3VyY2VcclxuICAgKiBAcGFyYW0gcGFyYW1zIGFnLWdyaWQgZGV0YWlscyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKi9cclxuICAvKipcclxuICAgKiBncmlkIGNhbGxzIHRoaXMgdG8gZ2V0IHJvd3MgaW1wbGVtZW50XHJcbiAgICogQHBhcmFtIHBhcmFtcyBhZy1ncmlkIGRldGFpbHMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICovXHJcbiAgcHVibGljIGdldFJvd3MocGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyk6IHZvaWQge1xyXG4gICAgY29uc3QgbWUgPSB0aGlzO1xyXG4gICAgY29uc3QgY2hpbGRDb3VudCA9IG1lLmdyb3VwQ291bnRGaWVsZE5hbWU7XHJcbiAgICBjb25zdCBpc1NlcnZlck1vZGUgPSAncmVxdWVzdCcgaW4gcGFyYW1zO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IGlzU2VydmVyTW9kZVxyXG4gICAgICA/IChwYXJhbXMgYXMgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKS5yZXF1ZXN0XHJcbiAgICAgIDogKHBhcmFtcyBhcyBJR2V0Um93c1BhcmFtcyk7XHJcbiAgICBjb25zdCByZXF1ZXN0U3J2ID0gcmVxdWVzdCBhcyBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0O1xyXG5cclxuICAgIGNvbnN0IHBpdm90QWN0aXZlID0gIWlzU2VydmVyTW9kZVxyXG4gICAgICA/IGZhbHNlXHJcbiAgICAgIDogcmVxdWVzdFNydi5waXZvdE1vZGUgJiZcclxuICAgICAgICByZXF1ZXN0U3J2LnBpdm90Q29scy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgcmVxdWVzdFNydi52YWx1ZUNvbHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAoIXBpdm90QWN0aXZlKSB7XHJcbiAgICAgIGxldCBmbiA9IChwYXJhbXMgYXMgYW55KS5jb2x1bW5BcGkuc2V0UGl2b3RSZXN1bHRDb2x1bW5zO1xyXG4gICAgICBpZiAoZm4gIT0gbnVsbCkge1xyXG4gICAgICAgIC8vIGlmICgocGFyYW1zIGFzIGFueSkuY29sdW1uQXBpLmlzUGl2b3RNb2RlKCkpIHtcclxuICAgICAgICAocGFyYW1zIGFzIGFueSkuY29sdW1uQXBpLnNldFBpdm90UmVzdWx0Q29sdW1ucyhbXSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIChwYXJhbXMgYXMgYW55KS5jb2x1bW5BcGkuc2V0U2Vjb25kYXJ5Q29sdW1ucyhbXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IG9wdGlvbnMgPSBtZS5nZXRPZGF0YU9wdGlvbnMocGFyYW1zKTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gbWUudG9RdWVyeShvcHRpb25zKTtcclxuICAgIGlmIChcclxuICAgICAgb3B0aW9ucy5za2lwID09PSAwICYmXHJcbiAgICAgICghaXNTZXJ2ZXJNb2RlIHx8XHJcbiAgICAgICAgKGlzU2VydmVyTW9kZSAmJlxyXG4gICAgICAgICAgKHBhcmFtcyBhcyBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpLnBhcmVudE5vZGUubGV2ZWwgPT09IC0xKSlcclxuICAgICkge1xyXG4gICAgICBtZS5jYW5jZWxQcm9taWNlLmNhbmNlbCgpO1xyXG4gICAgICBtZS5jYW5jZWxQcm9taWNlID0gbWUuY3JlYXRlQ2FuY2VsYWJsZVByb21pc2UoKTtcclxuICAgIH1cclxuICAgIFByb21pc2UucmFjZShbbWUuY2FuY2VsUHJvbWljZS5wcm9taXNlLCBtZS5jYWxsQXBpKHF1ZXJ5KV0pLnRoZW4oXHJcbiAgICAgIGFzeW5jICh4KSA9PiB7XHJcbiAgICAgICAgaWYgKCF4KSB7XHJcbiAgICAgICAgICBwYXJhbXMuZmFpbENhbGxiYWNrKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG1lLmdldE9kYXRhUmVzdWx0KHgpO1xyXG4gICAgICAgICAgaWYgKCFwaXZvdEFjdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuYXBwbHkpIHtcclxuICAgICAgICAgICAgICBtZS5zZXRSZXN1bHQoXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBpc1NlcnZlck1vZGUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXMsXHJcbiAgICAgICAgICAgICAgICB4WydAb2RhdGEuY291bnQnXSB8fCB4WzBdPy50b3RhbENvdW50XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5hZnRlckxvYWREYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyTG9hZERhdGEoXHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgIHZhbHVlcyxcclxuICAgICAgICAgICAgICAgICAgeFsnQG9kYXRhLmNvdW50J10gfHwgeFswXT8udG90YWxDb3VudFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNvdW50ID0gdmFsdWVzLmxlbmd0aDtcclxuICAgICAgICAgICAgICBpZiAoY291bnQgPT09IG9wdGlvbnMudG9wICYmIG9wdGlvbnMuc2tpcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgcmVjZWl2ZWQgZ3JvdXBlZCBjb3VudCBvZiB2YWx1ZSBsYXJnZSB0aGFuIHJlcXVlc3RlZCB0aGVuIHJlcXVlc3QgdG90YWwgY291bnQgb2YgdmFsdWVzXHJcbiAgICAgICAgICAgICAgICBtZS5jYWxsQXBpKHF1ZXJ5ICsgJy9hZ2dyZWdhdGUoJGNvdW50IGFzIGNvdW50KScpLnRoZW4oKHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY291bnQgPSBtZS5nZXRPZGF0YVJlc3VsdCh5KVswXS5jb3VudDtcclxuICAgICAgICAgICAgICAgICAgbWUuc2V0UmVzdWx0KHBhcmFtcywgaXNTZXJ2ZXJNb2RlLCB2YWx1ZXMsIGNvdW50KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5za2lwICE9IG51bGwgJiYgb3B0aW9ucy5za2lwID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICBjb3VudCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBtZS5zZXRSZXN1bHQocGFyYW1zLCBpc1NlcnZlck1vZGUsIHZhbHVlcywgY291bnQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWZ0ZXJMb2FkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFmdGVyTG9hZERhdGEob3B0aW9ucywgdmFsdWVzLCBjb3VudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcm93RGF0YSA9IG1lLmdldE9kYXRhUmVzdWx0KHgpO1xyXG4gICAgICAgICAgICAvLyBDaGVjayBjb3VudFxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgcm93RGF0YS5sZW5ndGggPT09IG9wdGlvbnMudG9wICYmXHJcbiAgICAgICAgICAgICAgb3B0aW9ucy5za2lwID09PSAwICYmXHJcbiAgICAgICAgICAgICAgcmVxdWVzdFNydi5ncm91cEtleXMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGxldCBlb2YgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB3aGlsZSAoIWVvZikge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5za2lwICs9IG9wdGlvbnMudG9wIHx8IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJRdWVyeSA9IG1lLnRvUXVlcnkob3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSb3dEYXRhID0gYXdhaXQgbWUuY2FsbEFwaShzdWJRdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5ld1Jvd0RhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLmZhaWxDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlb2YgPSBuZXdSb3dEYXRhLmxlbmd0aCAhPT0gb3B0aW9ucy50b3A7XHJcbiAgICAgICAgICAgICAgICByb3dEYXRhID0gcm93RGF0YS5jb25jYXQobmV3Um93RGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHBpdm90UmVzdWx0ID0gbWUuZ2V0UGl2b3QoXHJcbiAgICAgICAgICAgICAgcmVxdWVzdFNydi5waXZvdENvbHMsXHJcbiAgICAgICAgICAgICAgcmVxdWVzdFNydi5yb3dHcm91cENvbHMsXHJcbiAgICAgICAgICAgICAgcmVxdWVzdFNydi52YWx1ZUNvbHMsXHJcbiAgICAgICAgICAgICAgcm93RGF0YSxcclxuICAgICAgICAgICAgICBjaGlsZENvdW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJvd0RhdGEgPSBwaXZvdFJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmRhcnlDb2xEZWZzID0gcGl2b3RSZXN1bHQuc2Vjb25kYXJ5Q29sRGVmcztcclxuICAgICAgICAgICAgcm93RGF0YSA9IG1lLmJ1aWxkR3JvdXBzRnJvbURhdGEoXHJcbiAgICAgICAgICAgICAgcm93RGF0YSxcclxuICAgICAgICAgICAgICByZXF1ZXN0U3J2LnJvd0dyb3VwQ29scyxcclxuICAgICAgICAgICAgICByZXF1ZXN0U3J2Lmdyb3VwS2V5cyxcclxuICAgICAgICAgICAgICBjaGlsZENvdW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPVxyXG4gICAgICAgICAgICAgIHJlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICAgICAgPyByb3dEYXRhLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgOiByb3dEYXRhLmxlbmd0aCA9PT0gb3B0aW9ucy50b3BcclxuICAgICAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICAgICAgOiByb3dEYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgLy8gaWYgKHRvdGFsQ291bnQgPiAob3B0aW9ucy50b3AgfHwgMCkpIHtcclxuICAgICAgICAgICAgLy8gICBjb25zdCBzZXJ2ZXJTaWRlQmxvY2sgPSAocGFyYW1zIGFzIGFueSkucGFyZW50Tm9kZS5yb3dNb2RlbFxyXG4gICAgICAgICAgICAvLyAgICAgLnJvd05vZGVCbG9ja0xvYWRlci5ibG9ja3NbMF07XHJcbiAgICAgICAgICAgIC8vICAgc2VydmVyU2lkZUJsb2NrLnJvd05vZGVDYWNoZVBhcmFtcy5ibG9ja1NpemUgPSB0b3RhbENvdW50O1xyXG4gICAgICAgICAgICAvLyAgIHNlcnZlclNpZGVCbG9jay5lbmRSb3cgPSBzZXJ2ZXJTaWRlQmxvY2suc3RhcnRSb3cgKyB0b3RhbENvdW50O1xyXG4gICAgICAgICAgICAvLyAgIHNlcnZlclNpZGVCbG9jay5jcmVhdGVSb3dOb2RlcygpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIG1lLnNldFJlc3VsdChwYXJhbXMsIGlzU2VydmVyTW9kZSwgcm93RGF0YSwgdG90YWxDb3VudCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFmdGVyTG9hZERhdGEpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFmdGVyTG9hZERhdGEob3B0aW9ucywgcm93RGF0YSwgdG90YWxDb3VudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmJlZm9yZVNldFNlY29uZGFyeUNvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmVmb3JlU2V0U2Vjb25kYXJ5Q29sdW1ucyhzZWNvbmRhcnlDb2xEZWZzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGV0IGZuID0gKHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRQaXZvdFJlc3VsdENvbHVtbnM7XHJcbiAgICAgICAgICAgICAgaWYgKGZuKSB7XHJcbiAgICAgICAgICAgICAgICAocGFyYW1zIGFzIGFueSkuY29sdW1uQXBpLnNldFBpdm90UmVzdWx0Q29sdW1ucyhcclxuICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5Q29sRGVmc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgKHBhcmFtcyBhcyBhbnkpLmNvbHVtbkFwaS5zZXRTZWNvbmRhcnlDb2x1bW5zKHNlY29uZGFyeUNvbERlZnMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIG1lLnNldFJlc3VsdChwYXJhbXMsIGlzU2VydmVyTW9kZSwgW10sIDApO1xyXG4gICAgICAgIGlmICh0aGlzLnNldEVycm9yKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEVycm9yKGVyciwgcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldCByZXN1bHRcclxuICAgKiBAcGFyYW0gcGFyYW1zIGFnLWdyaWQgZGV0YWlscyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gaXNTZXJ2ZXJNb2RlIGRldGVjdCB0eXBlIG9mIHBhcmFtc1xyXG4gICAqIEBwYXJhbSByb3dzVGhpc0Jsb2NrIGRhdGEgb2YgdGhlIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gcm93Q291bnQgY291bnQgb2YgdG90YWwgcmVzdWx0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRSZXN1bHQgPSAoXHJcbiAgICBwYXJhbXM6IElHZXRSb3dzUGFyYW1zIHwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zLFxyXG4gICAgaXNTZXJ2ZXJNb2RlOiBib29sZWFuLFxyXG4gICAgcm93c1RoaXNCbG9jazogYW55W10sXHJcbiAgICByb3dDb3VudD86IG51bWJlclxyXG4gICk6IHZvaWQgPT4ge1xyXG4gICAgaWYgKGlzU2VydmVyTW9kZSkge1xyXG4gICAgICAocGFyYW1zIGFzIElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcykuc3VjY2Vzcyh7XHJcbiAgICAgICAgcm93RGF0YTogcm93c1RoaXNCbG9jayxcclxuICAgICAgICByb3dDb3VudDogcm93Q291bnQsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgKHBhcmFtcyBhcyBJR2V0Um93c1BhcmFtcykuc3VjY2Vzc0NhbGxiYWNrKHJvd3NUaGlzQmxvY2ssIHJvd0NvdW50KTtcclxuICAgIH1cclxuICB9O1xyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIG9kYXRhIG9wdGlvbnMgZm9yIGJ1aWxkIHF1ZXJ5IGZyb20gYWctZ3JpZCByZXF1ZXN0XHJcbiAgICogQHBhcmFtIHBhcmFtcyBhZy1ncmlkIGRldGFpbHMgZm9yIHRoZSByZXF1ZXN0XHJcbiAgICovXHJcbiAgZ2V0T2RhdGFPcHRpb25zID0gKFxyXG4gICAgcGFyYW1zOiBJR2V0Um93c1BhcmFtcyB8IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtc1xyXG4gICk6IE9kYXRhUXVlcnlFeHRlbmRGdWxsID0+IHtcclxuICAgIGNvbnN0IG1lID0gdGhpcztcclxuICAgIGNvbnN0IG9wdGlvbnM6IE9kYXRhUXVlcnlFeHRlbmRGdWxsID0ge307XHJcbiAgICBjb25zdCBpc1NlcnZlck1vZGUgPSAncmVxdWVzdCcgaW4gcGFyYW1zO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IGlzU2VydmVyTW9kZVxyXG4gICAgICA/IChwYXJhbXMgYXMgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zKS5yZXF1ZXN0XHJcbiAgICAgIDogKHBhcmFtcyBhcyBJR2V0Um93c1BhcmFtcyk7XHJcbiAgICBjb25zdCBjaGlsZENvdW50ID0gbWUuZ3JvdXBDb3VudEZpZWxkTmFtZTtcclxuICAgIGlmICh0aGlzLmJlZm9yZVJlcXVlc3QpIHtcclxuICAgICAgdGhpcy5iZWZvcmVSZXF1ZXN0KG9wdGlvbnMsIHRoaXMsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJlcXVlc3Quc29ydE1vZGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3Qgc29ydCA9IG9wdGlvbnMuc29ydCB8fCBbXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0LnNvcnRNb2RlbC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNvbCA9IHJlcXVlc3Quc29ydE1vZGVsW2ldO1xyXG4gICAgICAgIGxldCBjb2xOYW1lID0gbWUuZ2V0V3JhcENvbHVtbk5hbWUoY29sLmNvbElkKTtcclxuICAgICAgICBpZiAoY29sLnNvcnQgIT09ICdhc2MnKSB7XHJcbiAgICAgICAgICBjb2xOYW1lICs9ICcgZGVzYyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNvcnQucHVzaChjb2xOYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBvcHRpb25zLnNvcnQgPSBzb3J0O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyIHx8IFtdO1xyXG4gICAgZm9yIChjb25zdCBjb2xOYW1lIGluIHJlcXVlc3QuZmlsdGVyTW9kZWwpIHtcclxuICAgICAgaWYgKHJlcXVlc3QuZmlsdGVyTW9kZWwuaGFzT3duUHJvcGVydHkoY29sTmFtZSkpIHtcclxuICAgICAgICBjb25zdCBjb2wgPSByZXF1ZXN0LmZpbHRlck1vZGVsW2NvbE5hbWVdO1xyXG4gICAgICAgIGxldCBjb2xGaWx0ZXIgPSAnJztcclxuICAgICAgICBpZiAoIWNvbC5vcGVyYXRvcikge1xyXG4gICAgICAgICAgY29sRmlsdGVyID0gbWUuZ2V0RmlsdGVyT2RhdGEoY29sTmFtZSwgY29sKTtcclxuICAgICAgICAgIGlmIChjb2xGaWx0ZXIpIHtcclxuICAgICAgICAgICAgZmlsdGVyLnB1c2goY29sRmlsdGVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uMSA9IG1lLmdldEZpbHRlck9kYXRhKGNvbE5hbWUsIGNvbC5jb25kaXRpb24xKTtcclxuICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbjIgPSBtZS5nZXRGaWx0ZXJPZGF0YShjb2xOYW1lLCBjb2wuY29uZGl0aW9uMik7XHJcbiAgICAgICAgICBpZiAoY29uZGl0aW9uMSAmJiBjb25kaXRpb24yKSB7XHJcbiAgICAgICAgICAgIGNvbEZpbHRlciA9IGAoJHtjb25kaXRpb24xfSAke2NvbC5vcGVyYXRvci50b0xvd2VyQ2FzZSgpfSAke2NvbmRpdGlvbjJ9KWA7XHJcbiAgICAgICAgICAgIGZpbHRlci5wdXNoKGNvbEZpbHRlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBpdm90QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYXBwbHkgPSBvcHRpb25zLmFwcGx5IHx8IFtdO1xyXG4gICAgaWYgKGlzU2VydmVyTW9kZSkge1xyXG4gICAgICBjb25zdCByZXF1ZXN0U3J2ID0gcmVxdWVzdCBhcyBJU2VydmVyU2lkZUdldFJvd3NSZXF1ZXN0O1xyXG4gICAgICBwaXZvdEFjdGl2ZSA9XHJcbiAgICAgICAgcmVxdWVzdFNydi5waXZvdE1vZGUgJiZcclxuICAgICAgICByZXF1ZXN0U3J2LnBpdm90Q29scy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgcmVxdWVzdFNydi52YWx1ZUNvbHMubGVuZ3RoID4gMDtcclxuICAgICAgaWYgKHJlcXVlc3RTcnYucm93R3JvdXBDb2xzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJHcm91cEJ5OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmIChyZXF1ZXN0U3J2Lmdyb3VwS2V5cy5sZW5ndGggPCByZXF1ZXN0U3J2LnJvd0dyb3VwQ29scy5sZW5ndGgpIHtcclxuICAgICAgICAgIC8vIElmIHJlcXVlc3Qgb25seSBncm91cHNcclxuICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHJlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgY29sVmFsdWUgPSByZXF1ZXN0U3J2Lmdyb3VwS2V5c1tpZHhdO1xyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb24gPSBgJHttZS5nZXRXcmFwQ29sdW1uTmFtZShcclxuICAgICAgICAgICAgICByZXF1ZXN0U3J2LnJvd0dyb3VwQ29sc1tpZHhdLmZpZWxkXHJcbiAgICAgICAgICAgICl9IGVxICR7XHJcbiAgICAgICAgICAgICAgKG1lLmlzU3RyVmFsKGNvbFZhbHVlKSA/IFwiJ1wiIDogJycpICtcclxuICAgICAgICAgICAgICBtZS5lbmNvZGUoY29sVmFsdWUpICtcclxuICAgICAgICAgICAgICAobWUuaXNTdHJWYWwoY29sVmFsdWUpID8gXCInXCIgOiAnJylcclxuICAgICAgICAgICAgfWA7XHJcbiAgICAgICAgICAgIGZpbHRlckdyb3VwQnkucHVzaChjb25kaXRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGZpbHRlckdyb3VwQnkubGVuZ3RoID4gMCB8fCBmaWx0ZXIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBGaWx0ZXJzIG11c3QgYnkgZmlyc3RcclxuICAgICAgICAgICAgYXBwbHkucHVzaChgZmlsdGVyKCR7ZmlsdGVyR3JvdXBCeS5jb25jYXQoZmlsdGVyKS5qb2luKCcgYW5kICcpfSlgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBhZ2dyZWdhdGU6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICBpZiAoY2hpbGRDb3VudCkge1xyXG4gICAgICAgICAgICBhZ2dyZWdhdGUucHVzaChtZS5vZGF0YUFnZ3JlZ2F0aW9uLmNvdW50KGNoaWxkQ291bnQpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXF1ZXN0U3J2LnZhbHVlQ29scy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHJlcXVlc3RTcnYudmFsdWVDb2xzLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBjb2xWYWx1ZSA9IHJlcXVlc3RTcnYudmFsdWVDb2xzW2lkeF07XHJcbiAgICAgICAgICAgICAgY29sVmFsdWUuYWdnRnVuYyAmJlxyXG4gICAgICAgICAgICAgICAgYWdncmVnYXRlLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgIG1lLm9kYXRhQWdncmVnYXRpb25bY29sVmFsdWUuYWdnRnVuY10oXHJcbiAgICAgICAgICAgICAgICAgICAgbWUuZ2V0V3JhcENvbHVtbk5hbWUoY29sVmFsdWUuZmllbGQpXHJcbiAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBncm91cHMgPSBbXHJcbiAgICAgICAgICAgIG1lLmdldFdyYXBDb2x1bW5OYW1lKFxyXG4gICAgICAgICAgICAgIHJlcXVlc3RTcnYucm93R3JvdXBDb2xzW3JlcXVlc3RTcnYuZ3JvdXBLZXlzLmxlbmd0aF0uZmllbGRcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBjb25zdCBzb3J0ID0gb3B0aW9ucy5zb3J0IHx8IFtdO1xyXG4gICAgICAgICAgY29uc3Qgc29ydENvbE9ubHkgPSBzb3J0Lm1hcCgoeCkgPT4geC5zcGxpdCgnICcpWzBdKTtcclxuICAgICAgICAgIGlmIChwaXZvdEFjdGl2ZSkge1xyXG4gICAgICAgICAgICBncm91cHMgPSBncm91cHMuY29uY2F0KFxyXG4gICAgICAgICAgICAgIHJlcXVlc3RTcnYucGl2b3RDb2xzLm1hcCgoeCkgPT4gbWUuZ2V0V3JhcENvbHVtbk5hbWUoeC5maWVsZCkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGdyb3Vwcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHNvcnRDb2xPbmx5LmluZGV4T2YoeCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBzb3J0LnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9wdGlvbnMuc29ydCA9IHNvcnQ7XHJcbiAgICAgICAgICBhcHBseS5wdXNoKFxyXG4gICAgICAgICAgICBgZ3JvdXBieSgoJHtncm91cHMuam9pbignLCcpfSkke1xyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZS5sZW5ndGggPiAwID8gYCxhZ2dyZWdhdGUoJHthZ2dyZWdhdGUuam9pbignLCcpfSlgIDogJydcclxuICAgICAgICAgICAgfSlgXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIG9wdGlvbnMuYXBwbHkgPSBhcHBseTtcclxuICAgICAgICAgIGlmIChvcHRpb25zLnNvcnQgJiYgb3B0aW9ucy5zb3J0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5zb3J0ID0gb3B0aW9ucy5zb3J0LmZpbHRlcihcclxuICAgICAgICAgICAgICAoeCkgPT4gZ3JvdXBzLmluZGV4T2YoeC5zcGxpdCgnICcpWzBdKSA+PSAwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBkZWxldGUgb3B0aW9ucy5zb3J0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBJZiByZXF1ZXN0IHJvd0RhdGEgYnkgZ3JvdXAgZmlsdGVyXHJcbiAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXF1ZXN0U3J2Lmdyb3VwS2V5cy5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlID0gcmVxdWVzdFNydi5ncm91cEtleXNbaWR4XTtcclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYCR7bWUuZ2V0V3JhcENvbHVtbk5hbWUoXHJcbiAgICAgICAgICAgICAgcmVxdWVzdFNydi5yb3dHcm91cENvbHNbaWR4XS5maWVsZFxyXG4gICAgICAgICAgICApfSBlcSAke1xyXG4gICAgICAgICAgICAgIChtZS5pc1N0clZhbChjb2xWYWx1ZSkgPyBcIidcIiA6ICcnKSArXHJcbiAgICAgICAgICAgICAgbWUuZW5jb2RlKGNvbFZhbHVlKSArXHJcbiAgICAgICAgICAgICAgKG1lLmlzU3RyVmFsKGNvbFZhbHVlKSA/IFwiJ1wiIDogJycpXHJcbiAgICAgICAgICAgIH1gO1xyXG4gICAgICAgICAgICBmaWx0ZXIucHVzaChjb25kaXRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGZpbHRlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG9wdGlvbnMuZmlsdGVyID0gZmlsdGVyO1xyXG4gICAgfVxyXG4gICAgaWYgKGFwcGx5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgb3B0aW9ucy5hcHBseSA9IGFwcGx5O1xyXG4gICAgICBkZWxldGUgb3B0aW9ucy5maWx0ZXI7XHJcbiAgICAgIGRlbGV0ZSBvcHRpb25zLmV4cGFuZDtcclxuICAgICAgZGVsZXRlIG9wdGlvbnMuc2VsZWN0O1xyXG4gICAgICAvLyBvcHRpb25zLnNvcnQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgb3B0aW9ucy5za2lwID0gcmVxdWVzdC5zdGFydFJvdztcclxuICAgIG9wdGlvbnMudG9wID0gKHJlcXVlc3QuZW5kUm93IHx8IDApIC0gKHJlcXVlc3Quc3RhcnRSb3cgfHwgMCk7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLmFwcGx5ICYmIG9wdGlvbnMuc2tpcCA9PT0gMCkge1xyXG4gICAgICBvcHRpb25zLmNvdW50ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBvcHRpb25zO1xyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgb2RhdGEgcXVlcnkgZnJvbSBhZy1ncmlkIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gcGFyYW1zIGFnLWdyaWQgZGV0YWlscyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKi9cclxuICBnZXRPZGF0YVF1ZXJ5ID0gKHBhcmFtczogSUdldFJvd3NQYXJhbXMgfCBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpOiBzdHJpbmcgPT5cclxuICAgIHRoaXMudG9RdWVyeSh0aGlzLmdldE9kYXRhT3B0aW9ucyhwYXJhbXMpKTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE9kYXRhUHJvdmlkZXJDbGllbnQgZXh0ZW5kcyBPZGF0YVByb3ZpZGVyIHtcclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0Um93cyhwYXJhbXM6IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcykge1xyXG4gICAgc3VwZXIuZ2V0Um93cyhwYXJhbXMpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgY2xhc3MgT2RhdGFTZXJ2ZXJTaWRlUHJvdmlkZXIgZXh0ZW5kcyBPZGF0YVByb3ZpZGVyIHtcclxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0Um93cyhwYXJhbXM6IElTZXJ2ZXJTaWRlR2V0Um93c1BhcmFtcyk6IHZvaWQge1xyXG4gICAgc3VwZXIuZ2V0Um93cyhwYXJhbXMpO1xyXG4gIH1cclxufVxyXG4iXX0=
|