@churchillliving/se-ui-toolkit 6.53.39 → 6.53.41
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/bundles/churchillliving-se-ui-toolkit.umd.js +7 -1
- package/bundles/churchillliving-se-ui-toolkit.umd.js.map +1 -1
- package/esm2015/lib/components/base/grid/grid.component.js +3 -1
- package/esm2015/lib/components/shared/global-filters/global-filters.component.js +6 -2
- package/fesm2015/churchillliving-se-ui-toolkit.js +7 -1
- package/fesm2015/churchillliving-se-ui-toolkit.js.map +1 -1
- package/package.json +1 -1
|
@@ -1803,10 +1803,12 @@ export class GridComponent {
|
|
|
1803
1803
|
setFilterFocusOut(col, filter, event) {
|
|
1804
1804
|
this.gridFilterObj = { column: col, filter: filter, event: event };
|
|
1805
1805
|
const newColumn = Object.assign({}, col);
|
|
1806
|
+
console.log('BBBBBBBB: ', newColumn);
|
|
1806
1807
|
//change filter calender format
|
|
1807
1808
|
if (newColumn.type === 'date' && newColumn.value) {
|
|
1808
1809
|
newColumn.value = this.datePipe.transform(col.value.toString().trim(), 'yyyy-MM-dd');
|
|
1809
1810
|
}
|
|
1811
|
+
console.log('AAAA: ', this.globalFiltersArray);
|
|
1810
1812
|
setTimeout(() => {
|
|
1811
1813
|
this.filterObj(newColumn);
|
|
1812
1814
|
}, newColumn.type === EGridColumnType.LOOKUP_INPUT ? 250 : 0);
|
|
@@ -2216,4 +2218,4 @@ GridComponent.propDecorators = {
|
|
|
2216
2218
|
onGridRowAdd: [{ type: Output }],
|
|
2217
2219
|
beforeunloadHandler: [{ type: HostListener, args: ['window:beforeunload', ['$event'],] }]
|
|
2218
2220
|
};
|
|
2219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUVqQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFHWixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixhQUFhLEdBQ2QsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQVNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2Ysa0JBQWtCLEVBRWxCLGNBQWMsRUFFZCxlQUFlLEdBRWhCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEtBQUssU0FBUyxNQUFNLHFD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Z0IsdUJBNlpiLFFBQVE7OztzQkFsWFYsWUFBWSxTQUFDLFNBQVM7OEJBQ3RCLE1BQU07NkJBQ04sS0FBSztvQkEyREwsU0FBUyxTQUFDLElBQUk7MkJBR2QsS0FBSzs4QkFFTCxLQUFLOytCQVVMLEtBQUs7c0JBR0wsS0FBSzsyQkFHTCxLQUFLOzZCQUdMLEtBQUs7bUNBR0wsS0FBSzs4QkFHTCxLQUFLOytCQUdMLEtBQUs7aUNBR0wsS0FBSztxQ0FHTCxLQUFLOzRCQUdMLEtBQUs7eUJBR0wsS0FBSzs0QkFHTCxLQUFLO3NCQUdMLEtBQUs7OEJBR0wsS0FBSzsrQkFHTCxLQUFLO3lCQUdMLEtBQUs7MkJBR0wsS0FBSzt1QkFHTCxLQUFLO3lCQUVMLEtBQUs7d0JBRUwsS0FBSzt1QkFFTCxLQUFLO2dDQUVMLEtBQUs7a0NBR0wsS0FBSzt5QkFHTCxNQUFNO21CQU9OLEtBQUs7K0JBdUNMLEtBQUs7c0JBMEVMLEtBQUs7MEJBRUwsS0FBSztnQ0FHTCxLQUFLO3lCQUdMLEtBQUs7NEJBR0wsS0FBSzt5QkFHTCxLQUFLO29DQUdMLEtBQUs7MkJBR0wsS0FBSztnQ0FFTCxLQUFLOzBCQUdMLEtBQUs7NEJBRUwsS0FBSztrQ0FHTCxLQUFLO3lCQUdMLE1BQU07b0NBR04sTUFBTTs0QkFHTixNQUFNOzJCQUdOLE1BQU07NkJBR04sTUFBTTtxQ0FHTixNQUFNOzRCQUdOLE1BQU07bUNBR04sTUFBTTtzQ0FHTixNQUFNOzJCQUtOLE1BQU07MEJBSU4sTUFBTTs4QkFHTixNQUFNOzBCQUdOLE1BQU07dUJBR04sTUFBTTsrQkFHTixNQUFNOzJCQUdOLEtBQUs7MEJBR0wsS0FBSzswQkFFTCxLQUFLOzRCQUdMLE1BQU07MkJBR04sTUFBTTtrQ0E2Qk4sWUFBWSxTQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9wdGlvbmFsLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBIb3N0TGlzdGVuZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7XHJcbiAgRHluYW1pY0RpYWxvZ1JlZixcclxuICBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gIERpYWxvZ1NlcnZpY2UsXHJcbn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBJR3JpZENvbHVtbixcclxuICBJR3JpZFNvcnQsXHJcbiAgSUdyaWRTZXJ2ZXJTaWRlRXZlbnQsXHJcbiAgSUdyaWRQYWdpbmF0aW9uRXZlbnQsXHJcbiAgSUdsb2JhbEZpbHRlcixcclxuICBJR3JpZEZpbHRlcixcclxuICBJR3JpZENvbHVtbkFjdGlvbixcclxuICBJR3JpZFJvd0FjdGlvbixcclxuICBFR3JpZFNlbGVjdGlvblR5cGUsXHJcbiAgRUdyaWRDb2x1bW5UeXBlLFxyXG4gIEVHcmlkU29ydERpcmVjdGlvbixcclxuICBJR3JpZERhdGFFeHBvcnQsXHJcbiAgRUdyaWRBZ2dyZWdhdGUsXHJcbiAgSUxvb2t1cFZhbHVlLFxyXG4gIEVHcmlkRm9ybWF0VHlwZSxcclxuICBJR3JpZEZpbHRlckluZm8sXHJcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xyXG5pbXBvcnQgeyBFUGVybWlzc2lvblR5cGUsIElQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3VzZXItaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSWZyYW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vaWZyYW1lL2lmcmFtZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBXb3JrU2hlZXQgfSBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgRGF0ZVBpcGUsIERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgRUZvcm1hdFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NlLWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2dyaWRSb3cnKSBncmlkUm93OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgQE91dHB1dCgpIGlubGluZVJvd0NhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBzZXQgYWN0aXZlVGVzdE1vZGUodmFsOiBhbnkpIHtcclxuICAgIGlmICh2YWwgPT09IHRydWUpIHtcclxuICAgICAgZGVidWdnZXI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlcnZlckZpbHRlcnM6IElHcmlkU2VydmVyU2lkZUV2ZW50ID0ge307XHJcbiAgcm93c0RhdGE6IGFueVtdO1xyXG4gIHJvd3NEYXRhQ29weTogYW55W10gPSBbXTtcclxuICByb2xlczogc3RyaW5nW10gPSBbXTtcclxuICBpc0NvbHVtbkhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHJvd0NsaWNrRGF0YTogSUdyaWRDb2x1bW47XHJcbiAgY29tcG9uZW50VGFibGVSZWY6IGFueTtcclxuICBsb29rdXBPYmplY3Q6IElMb29rdXBWYWx1ZTtcclxuICBsb29rdXBGaWx0ZXJPYmo6IGFueTtcclxuICBsb29rdXBCbHVyOiBib29sZWFuID0gdHJ1ZTtcclxuICBnbG9iYWxGaWx0ZXJzQXJyYXk6IGFueVtdID0gW107XHJcbiAgY2hlY2tBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYWxlbmRlclByZXZpb3VzVmFsdWU6IHN0cmluZyA9ICcnO1xyXG4gIGdyaWRGaWx0ZXJPYmo6IElHcmlkRmlsdGVySW5mbztcclxuICBkZWZhdWx0RGF0ZTogYW55O1xyXG4gIGRyb3BEb3duRmlsdGVyOiBhbnkgPSB7fTtcclxuICBkcm9wZG93bklucHV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2F2ZUFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVkaXRBbGxSZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYW5jZWxBbGxSZWNvcmRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWRkTmV3Um93Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbkVkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2F2ZVJlY29yZEFycmF5OiBhbnlbXSA9IFtdO1xyXG4gIGRpc2FibGVkU2F2ZUJ0bjpib29sZWFuID0gZmFsc2U7XHJcbiAgc2V0RGlhbG9nRGF0YTpib29sZWFuID0gdHJ1ZTtcclxuICBzZXREaWFsb2dGaWVsZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIGVkaXRNb2RlQ2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgZWRpdE1vZGV1bkNrZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYWxlbmRhckZvcm1hdDogc3RyaW5nID0gJ21tL2RkL3knO1xyXG4gIHNldERyb3Bkb3duRmlsdGVyOmJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBhcHBseSBjaGVja2VkL3VuQ2hlY2tlZCBwcm9wIGZvciBDaGVja0JveCBvZiB0aGUgVGFibGVcclxuICBjaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuICB1bkNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoaWRlRWRpdEFsbFJvd3NCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvL2FwcGx5IEFkZC9EZWxldGUvRWRpdCBwcm9wIGZvciB0aGUgZ3JpZCBwZXJtaXNzaW9uXHJcbiAgYWRkUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgZGVsZXRlUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgZWRpdFJvd1Blcm1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBBcHBseSBwcm9wIHNldEFnZ3JlZ2F0ZUZvb3RlciBvbiBGb290ZXIgb2YgdGhlIFRhYmxlIGZvciBhZ2dyZWdhdGUuXHJcbiAgc2V0QWdncmVnYXRlRm9vdGVyOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IEhpZGUgQWdncmVnYXRlIEZvb3RlciBXaGVuIEFnZ3JlZ2F0ZSBub3QgQXBwbHkgb24gVGFibGUuXHJcbiAgYWdncmVnYXRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIE1haW50YWlucyBwcmV2aW91cyBzdGF0ZSBvZiByb3dzIGJlaW5nIGVkaXRlZFxyXG4gIGVkaXRSb3dzUmVjb3JkczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cclxuICAvLyBNYWludGFpbnMgcmVjb3JkIG9mIHJvd3MgYmVpbmcgZWRpdGVkXHJcbiAgZWRpdGluZ1Jvd0tleXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZTogVGFibGU7XHJcblxyXG4gIC8vIFNlbGVjdHMgaXRlbXMgaW4gdGhlIGdyaWQgYmFzZWQgb24gcGFzc2VkIG9uIGRhdGFcclxuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IGFueSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBhZGREYXRhS2V5VmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XHJcblxyXG4gIHNvcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBTdG9yZXMgc2VsZWN0ZWQgY29sdW1uc1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xyXG5cclxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgaG9yaXpvbnRhbCBTY3JvbGwgb24gVGFibGUuXHJcbiAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBQcm9wIHRvIGhhbmRsZSBsb2FkZXIgb2YgZ3JpZFxyXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGhhbmRsZSBzZXJ2ZXIgc2lkZSBldmVudCBieSBkZWZhdWx0IGl0IGlzIHRydWUgd2hlbiBpdCBmYWxzZSBzZXJ2ZXIgc2lkZSBldmVudCB3aWxsIG5vdCBiZSBjYWxsZWRcclxuICBASW5wdXQoKSBhdXRvTG9hZERhdGE6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBCb29sZWFuIHByb3AgdG8gY2hlY2sgd2hlcmUgc2VsZWN0ZWQgaXMgYWxsb3dlZCBvciBub3QuXHJcbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgLy8gU2V0IGNvbHVtbiB3aWR0aCBvZiBzZWxlY3RlZCByb3cuXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uQ29sdW1uV2lkdGg6IHN0cmluZyA9ICc4MHB4JztcclxuICBcclxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgYWRkIHJvdyBidXR0b24uXHJcbiAgQElucHV0KCkgaGlkZU9uUm93QWRkQnRuID0gZmFsc2U7XHJcblxyXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gcGRmLlxyXG4gIEBJbnB1dCgpIGFsbG93RXhwb3J0VG9QZGYgPSBmYWxzZTtcclxuXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBleGNlbC5cclxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvRXhjZWwgPSBmYWxzZTtcclxuICBcclxuICAvLyBCb29sZWFuIHByb3AgdG8gc2V0IHRoZSBhY3Rpb24gY29sdW1uIGFzIGZpcnN0IGNvbHVtbi5cclxuICBASW5wdXQoKSBzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ID0gZmFsc2U7XHJcblxyXG4gIC8vIElmIHRydWUsIGVuYWJsZXMgb3B0aW9ucyB0byBwZXJmb3JtIENSVUQgdXNpbmcgaW5saW5lIHJvdyBmdW5jdGlvbmFsaXR5XHJcbiAgQElucHV0KCkgdXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xyXG5cclxuICAvLyBBcnJheSBvZiByb3cgYWN0aW9uc1xyXG4gIEBJbnB1dCgpIHJvd0FjdGlvbnM6IElHcmlkUm93QWN0aW9uW10gPSBbXTtcclxuXHJcbiAgLy8gU2V0cyBzZWxlY3Rpb24gdHlwZSBpLmU6IHNpbmdsZS9tdWx0aXBsZSBzZWxlY3Rpb25cclxuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiBFR3JpZFNlbGVjdGlvblR5cGUgPSBFR3JpZFNlbGVjdGlvblR5cGUuU0lOR0xFO1xyXG5cclxuICAvLyBVbmlxdWUga2V5IHJlcXVpcmVzIGZvciBidWlsdC1pbiByb3cgc2VsZWN0aW9uIG9mIHByaW1lTmcgZ3JpZFxyXG4gIEBJbnB1dCgpIGRhdGFLZXk6IHN0cmluZyA9ICdpZCc7XHJcblxyXG4gIC8vIEZsYWcgZm9yIGNsZWFyIGZpbHRlciB2YWx1ZXMgYnV0dG9uXHJcbiAgQElucHV0KCkgY2xlYXJHcmlkRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgLy8gRmxhZyBmb3Igc2VhcmNoIGZpbHRlciB2YWx1ZXMgYnV0dG9uXHJcbiAgQElucHV0KCkgc2VhcmNoR3JpZEZpbHRlciA9IHRydWU7XHJcblxyXG4gIC8vIEZsYWcgaW4gY2FzZSB0YWJsZSBpcyBzY3JvbGxhYmxlXHJcbiAgQElucHV0KCkgc2Nyb2xsYWJsZSA9IHRydWU7XHJcblxyXG4gIC8vIFNldHMgc2Nyb2xsIGhlaWdodCBmb3IgdGhlIHRhYmxlXHJcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJzY4MHB4JztcclxuXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IHRvIHdyYXAgb3IgdW5XcmFwIHRoZSBncmlkLlxyXG4gIEBJbnB1dCgpIHdvcmRXcmFwOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIG5ld0dyaWRSb3c6IGFueSA9IHt9O1xyXG5cclxuICBASW5wdXQoKSBmaWx0ZXJpbmcgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBoaWRlRmlsdGVyT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBTZXRzIHBhZ2VuYXRpb24gZm9yIHRoZSB0YWJsZSBEYXRhLlxyXG4gIEBJbnB1dCgpIHNldFBhZ2luYXRpb25MZW5ndGg6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcclxuXHJcbiAgLy8gc2V0IHRoZSBjaGFuZ2UgaW4gdGhlIHJvd0RhdGFcclxuICBAT3V0cHV0KCkgcm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3BzIHRoZSBsb2FkZXIgYW5kIHNldHMgdGhlIGRhdGEgdG8gZ3JpZFxyXG4gICAqIENsZWFycyB0aGUgZWRpdGluZyBzdGFja1xyXG4gICAqIFNjcm9sbHMgdG8gc2VsZWN0ZWQgZWxlbWVudCBpZiBzZWxlY3Rpb24gZm91bmRcclxuICAgKi9cclxuICBASW5wdXQoKSBzZXQgcm93cyhkYXRhOiBhbnlbXSkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKCF0aGlzLmRhdGFLZXkpIHtcclxuICAgICAgICB0aGlzLmRhdGFLZXkgPSAnaWQnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMoZGF0YSwgdGhpcy5kYXRhS2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm93c0RhdGEgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDbGVhbmluZyB0aGUgZWRpdGluZyBzdGFja1xyXG4gICAgdGhpcy5lZGl0aW5nUm93S2V5cyA9IHt9O1xyXG4gICAgdGhpcy5lZGl0Um93c1JlY29yZHMgPSB7fTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRSb3dzKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50UmVmID0gdGhpcy5ncmlkUm93LmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC5uYXRpdmVFbGVtZW50LmlkID09PSB0aGlzLnNlbGVjdGVkUm93c1t0aGlzLmRhdGFLZXldXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYgJiZcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlUm93RWxlbWVudFxyXG4gICAgICAgICAgKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcclxuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHt9LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vbWFuaXB1bGF0ZSBjaGVja2JveCBzdHJpbmcgdmFsdWUgdG8gdHJ1ZSBhbmQgZmFsc2UuXHJcbiAgICB0aGlzLmNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8vIEdsb2JhbCBmaWx0ZXIgc2VydmVyIHJlcXVlc3RcclxuICBASW5wdXQoKSBzZXQgZ2xvYmFsRmlsdGVyRGF0YShnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10pIHtcclxuICAgIHRoaXMuZ2xvYmFsRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2VcclxuICAgICAgLnByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnMpXHJcbiAgICAgID8uZmlsdGVyKCh4KSA9PiB4Py52YWx1ZSAhPT0gZmFsc2UpO1xyXG4gICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcclxuICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnNcclxuICAgICAgPyB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycy5jb25jYXQodGhpcy5nbG9iYWxEYXRhKVxyXG4gICAgICA6IHRoaXMuZ2xvYmFsRGF0YTtcclxuXHJcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICdmYWxzZScpIHtcclxuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheT8ubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuY29uY2F0KFsuLi5zZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVyc10pXHJcbiAgICAgICAgOiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheTtcclxuICAgIH1cclxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgIGdsb2JhbEZpbHRlcnMuZm9yRWFjaCgoZ2xvYmFsRmlsdGVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZm9yRWFjaCgoZmlsdGVyQXJyYXkpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZmlsdGVyQXJyYXkuZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJlxyXG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgJiZcclxuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgIT09IGdsb2JhbEZpbHRlci52YWx1ZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlID0gZ2xvYmFsRmlsdGVyLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAoaW5kZXgpID0+IGluZGV4LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiYgIWdsb2JhbEZpbHRlci52YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChmaW5kSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnNwbGljZShmaW5kSW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZih0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEpe1xyXG4gICAgICAgICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ICYmIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuY29uY2F0KFxyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgICAgbmV3IFNldChcclxuICAgICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNcclxuICAgICAgICAgICAgICAucmV2ZXJzZSgpXHJcbiAgICAgICAgICAgICAgLm1hcCgoZmlsdGVyOiBhbnkpID0+IGZpbHRlci5maWVsZClcclxuICAgICAgICAgIClcclxuICAgICAgICApLm1hcCgoZmllbGQpID0+IHtcclxuICAgICAgICAgIHJldHVybiBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maW5kKCh4OiBhbnkpID0+IHguZmllbGQgPT09IGZpZWxkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbHRlcihcclxuICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgb2JqPy52YWx1ZSAmJiBvYmoudmFsdWU/LnRvU3RyaW5nKCk/Lmxlbmd0aCA+IDAgJiYgb2JqLmZpZWxkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBhcyBmaXJzdFxyXG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2UgPSAxO1xyXG4gICAgICAgICAgaWYodGhpcy5kZWZhdWx0Um93cyAmJiB0aGlzLnBhZ2luYXRpb24peyBcclxuICAgICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2VTaXplID0gdGhpcy5kZWZhdWx0Um93cztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgaWYodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50KXtcclxuICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpXHJcbiAgICAgICAgIH1cclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdhcHBseUZpbHRlcicpO1xyXG4gICAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgbnVtYmVyIFVJXHJcbiAgICAgICAgICB0aGlzLnRhYmxlLl9maXJzdCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSW5wdXQgZGVjb3JhdG9yIHRvIHJlY2VpdmUgY29sdW1ucyB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXHJcbiAgQElucHV0KCkgY29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IFtdO1xyXG5cclxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSB0b2dnbGluZyBvZiBjb2x1bW5zXHJcbiAgQElucHV0KCkgYWxsb3dDb2x1bW5Ub2dnbGUgPSBmYWxzZTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoaWRlIGZpbHRlcmluZyBvZiBjb2x1bW5zXHJcbiAgQElucHV0KCkgaGlkZUZpbHRlciA9IGZhbHNlO1xyXG5cclxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBsb29rdXAgZmlsdGVyc1xyXG4gIEBJbnB1dCgpIGxvb2t1cEZpbHRlcnMgPSBmYWxzZTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgcGFnaW5hdGlvblxyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgc2hvdyBDdXJyZW50UGFnZSBSZXBvcnRcclxuICBASW5wdXQoKSBzaG93Q3VycmVudFBhZ2VSZXBvcnQgPSBmYWxzZTtcclxuXHJcbiAgLy8gRGlzcGxheXMgdG90YWwgbnVtYmVyIG9mIHJlY29yZHNcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xyXG5cclxuICBASW5wdXQoKSBzaG93Y29uZmlybURpYWxvZzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFNldHMgbnVtYmVyIG9mIHJvd3MgdG8gYmUgc2hvd24gdGhlIGdyaWRcclxuICBASW5wdXQoKSBkZWZhdWx0Um93czogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKSBjb2x1bW5BY3Rpb25zOiBJR3JpZENvbHVtbkFjdGlvbltdID0gW107XHJcblxyXG4gIC8vIERlY2lkZXMgdGhlIGdyaWQncyBiZWhhdmlvciBlaXRoZXIgZm9yIGNsaWVudCBzaWRlIG9yIHNlcnZlciBzaWRlIGV2ZW50c1xyXG4gIEBJbnB1dCgpIHVzZVNlcnZlclNpZGVFdmVudHMgPSBmYWxzZTtcclxuXHJcbiAgLy8gT3V0cHV0IGV2ZW50IHRvIGhhbmRsZSByb3cgY2xpY2tcclxuICBAT3V0cHV0KCkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIE91dHB1dCBldmVudCBlbWl0IHdoZW4gY2xpY2sgb24gZ3JpZCBjaGVja2JveCBmaWx0ZXJcclxuICBAT3V0cHV0KCkgb25DaGVja0JveEZpbHRlckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55Pj0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBDaGVja0JveFxyXG4gIEBPdXRwdXQoKSBvblJvd0NoZWNrQm94OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gc29ydCBjaGFuZ2VcclxuICBAT3V0cHV0KCkgb25Tb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gZmlsdGVyIGNoYW5nZVxyXG4gIEBPdXRwdXQoKSBvbkZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIE91dHB1dCBldmVudCB0byBpbnZva2UgdGhlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XHJcbiAgQE91dHB1dCgpIG9uTXVsdGlTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBDYWxscyB3aGVuZXZlciBhIGdyaWQgYW5kIGdsb2JhbEZpbHRlcnMgY2FsbGVkXHJcbiAgQE91dHB1dCgpIG9uQXBwbHlGaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxyXG4gIEBPdXRwdXQoKSBpc0luY2x1ZGVkQWxsQ29sdW1uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgbGF6eSBldmVudCBpcyBkaXNwYXRjaGVkXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJR3JpZFNlcnZlclNpZGVFdmVudD4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBwYWdpbmF0aW9uXHJcbiAgQE91dHB1dCgpXHJcbiAgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRQYWdpbmF0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBlZGl0IHJvd1xyXG4gIEBPdXRwdXQoKSBvblJvd1VwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgY2FuY2VsIGFsbCByb3dzXHJcbiAgQE91dHB1dCgpIG9uQ2FuY2VsQWxsUm93cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZGVsZXRlIHJvd1xyXG4gIEBPdXRwdXQoKSBvblJvd0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQgcm93XHJcbiAgQE91dHB1dCgpIG9uUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCwgdXBkYXRlIGFuZCBkZWxldGUgcm93XHJcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0FjdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIHNldCBwcm9wZXJ0eSBhbGxvd0NhY2hpbmcgZm9yIExvY2FsU3RvcmFnZVxyXG4gIEBJbnB1dCgpIGFsbG93Q2FjaGluZzogYm9vbGVhbjtcclxuXHJcbiAgLy8gc2V0IHByb3BlcnR5IHNvZnRDYWNoaW5nIGZvciBzZXR0aW5nIHRoZSB2YWx1ZXMgb2YgZ3JpZEZpbHRlclxyXG4gIEBJbnB1dCgpIHNvZnRDYWNoaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBcclxuICBASW5wdXQoKSBlZGl0QWxsUm93czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIEVkaXQgdGhlIHJvdyBvbiBHcmlkXHJcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIHNldCB0aGUgcm93IFdoZW4gYWRkaW5nIHRoZSBuZXcgUm93IG9uIEdyaWRcclxuICBAT3V0cHV0KCkgb25HcmlkUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBpc0dyaWRIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHB1YmxpYyBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXHJcbiAgICBwcml2YXRlIHBhZ2VMb2dnZXJTZXJ2aWNlOiBQYWdlTG9nZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHVibGljIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZlxyXG4gICkge31cclxuXHJcbiAgZ2V0IHNlbGVjdGVkQ29sdW1ucygpOiBJR3JpZENvbHVtbltdIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWRDb2x1bW5zKHZhbDogSUdyaWRDb2x1bW5bXSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT4gdmFsLmluY2x1ZGVzKGNvbCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gYnJvd3NlciBjbG9zZSBldmVudFxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnLCBbJyRldmVudCddKVxyXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6YW55KSB7XHJcbiAgICBpZih0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpe1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBc3NpZ25tZW50IG9mIHNlbGVjdGVkIGNvbHVtbnMgb24gcGFnZSBsb2FkXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZih0aGlzLmVkaXRBbGxSb3dzKXtcclxuICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdG4gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZ3JpZCBjb2x1bW5zXHJcbiAgYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKSB7XHJcbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XHJcbiAgICAgIGxldCB0b3RhbEZpZWxkczogbnVtYmVyID0gMDtcclxuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IGNvbHVtbi5wZXJtaXNzaW9ucztcclxuICAgICAgICAvLyBpZiAoIXBlcm1pc3Npb25zKSBwZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnM7XHJcbiAgICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gICBsZXQgaW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIChpKSA9PiBpLmZpZWxkID09PSBjb2x1bW4uZmllbGRcclxuICAgICAgICAgICAgICAgIC8vICAgKTtcclxuICAgICAgICAgICAgICAgIC8vICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxyXG4gICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0b3RhbEZpZWxkcysrO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uLmhpZGRlbikge1xyXG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuaXNDb2x1bW5IaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFwcGx5IGdsb2JhbCBwZXJtaXNzaW9ucyBvbiBlbnRpcmUgZ3JpZFxyXG4gIGFwcGx5R3JpZFBlcm1pc3Npb25zKCkge1xyXG4gICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAvLyBjaGVjayBpZiBhbnkgY29sdW1uIGhhcyBhbnkgcGVybWlzc2lvblxyXG4gICAgICBsZXQgaGFzQ29sdW1uUGVybWlzc2lvbnMgPSB0aGlzLmNvbHVtbnM/LnNvbWUoXHJcbiAgICAgICAgKHgpID0+IHg/LnBlcm1pc3Npb25zICYmIHgucGVybWlzc2lvbnMubGVuZ3RoID4gMFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXHJcbiAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiAhaGFzQ29sdW1uUGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQgJiYgIWlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZWRpdFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkRFTEVURSAmJiAhaXNWYWxpZCkge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5BRERST1cgJiYgIWlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vblJvd0FkZC5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMub25Sb3dEZWxldGUub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dDYWNoaW5nICE9PSBmYWxzZSAmJiB0aGlzLnBhZ2luYXRpb24pIHtcclxuICAgICAgdGhpcy5hbGxvd0NhY2hpbmcgPSB0aGlzLnBhZ2luYXRpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSk7XHJcbiAgICB9XHJcbiAgICAvLyBhZGQgZGVmYXVsdFJvdyBpbiBwYWdpbmF0aW9uIGFycmF5XHJcbiAgICBpZiAoIXRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC5pbmNsdWRlcyh0aGlzLmRlZmF1bHRSb3dzKSkge1xyXG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25MZW5ndGgudW5zaGlmdCh0aGlzLmRlZmF1bHRSb3dzKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGhhc0NvbHVtbnM6IGJvb2xlYW4gPSB0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDA7XHJcbiAgICBpZiAoaGFzQ29sdW1ucykge1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldENvbHVtbkZpZWxkcyh0aGlzLmNvbHVtbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm9sZXMgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJSb2xlcygpO1xyXG5cclxuICAgIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcclxuICAgIHRoaXMuYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKTtcclxuXHJcbiAgICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcclxuICAgIHRoaXMuYXBwbHlHcmlkUGVybWlzc2lvbnMoKTtcclxuXHJcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gIXguaGlkZGVuKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIGlmIChoYXNDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmllbGRzKHRoaXMuY29sdW1ucyk7XHJcbiAgICAgIC8vIGNoZWNraW5nIGZpbHRlciBleGlzdCBvciBub3RcclxuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnNvbWUoXHJcbiAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKGZpbHRlciA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLmhpZGVGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aW1lIGludG8gdGhlIGRhdGVcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIGNvbHVtbi50aW1lT25seSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXHJcbiAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykgfHxcclxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGZpbHRlciB2YWx1ZVxyXG4gICAgICAgIGlmIChjb2x1bW4uZmlsdGVyICYmIGNvbHVtbi52YWx1ZSAmJiBjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhZGQgXCJmbGV4LXNocmluazogMFwiIGZvciBmbGV4LWJhc2lzIFN0eWxlXHJcbiAgICAgICAgaWYgKGNvbHVtbi5zdHlsZSAmJiBjb2x1bW4uc3R5bGUuaW5jbHVkZXMoJ2ZsZXgtYmFzaXMnKSkge1xyXG4gICAgICAgICAgbGV0IHN0eWxlID0gY29sdW1uLnN0eWxlICsgJyAhaW1wb3J0YW50OyBmbGV4LXNocmluazogMCAhaW1wb3J0YW50JztcclxuICAgICAgICAgIGNvbHVtbi5zdHlsZSA9IHN0eWxlLmluY2x1ZGVzKCc7OycpXHJcbiAgICAgICAgICAgID8gc3R5bGUucmVwbGFjZSgnOzsnLCAnOycpXHJcbiAgICAgICAgICAgIDogc3R5bGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cclxuICAgICAgICB0aGlzLnNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uKTtcclxuXHJcbiAgICAgICAgLy9BZ2dyZWdhdGUgc2NlbmFyaW9cclxuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XHJcbiAgICAgICAgaWYoIXRoaXMuc29mdENhY2hpbmcpe1xyXG4gICAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSkgYXMgYW55XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLmhpZGVGaWx0ZXIgJiZcclxuICAgICAgICAgIHNlYXJjaEZpbHRlcnMgJiZcclxuICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycyAmJlxyXG4gICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHgudmFsdWUgJiYgeC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgaWYoY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicpe1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlID0gbmV3IERhdGUodGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oeC52YWx1ZSwgJ01NLWRkLVlZJykgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZSA9IHgudmFsdWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29udmVydGluZyBkaXNwbGF5RmllbGQgdG9Mb3dlcmNhc2VcclxuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xyXG4gICAgICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCA9IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IEF1dG9Db21wbGV0ZSBEYXRhXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEgJiZcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGhhdCBjb250YWlucyBjb21tYSBpbnRvIGFycmF5c1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKS5pbmNsdWRlcygnLCcpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cclxuICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgID8ubWFwKCh2YWx1ZTogYW55KSA9PiAoeyBbY29sdW1uLmRpc3BsYXlGaWVsZF06IHZhbHVlIH0pKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qga2V5OiBhbnkgPSBPYmplY3Qua2V5cyhyb3cpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKHgpID0+IHggPT09IGNvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgc2ltcGxlIHN0cmluZyBpbnRvIGFycmF5XHJcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dba2V5XSkgJiYgcm93W2tleV0pIHtcclxuICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZGlzcGxheUZpZWxkXTogcm93W2tleV0gfV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy93aGVuIHdlIGFkZCBhIG5ldyByb3csIGl0IHNldCB0aGUgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAgIGlmIChjb2x1bW4udmFsdWUgJiYgT2JqZWN0LmtleXModGhpcy5uZXdHcmlkUm93KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyh0aGlzLm5ld0dyaWRSb3cpLmZpbmQoXHJcbiAgICAgICAgICAgICh4KSA9PiB4ID09PSBjb2x1bW4uZmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoa2V5ICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICB0aGlzLm5ld0dyaWRSb3dba2V5XSA9IGNvbHVtbi52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gU2VhcmNoaW5nIHNjZW5hcmlvXHJcbiAgICAgIGlmIChjaGFuZ2Uucm93cz8uY3VycmVudFZhbHVlICYmIGNoYW5nZS5jb2x1bW5zPy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAvLyBDaGVja3MgZWl0aGVyIGNvbHVtbiB2YWx1ZSBpcyBjaGFuZ2VzIChpLmUuLCBjb2x1bW4gaGlkZGVuIHNjZW5hcmlvKVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZSkudG9Mb3dlckNhc2UoKSAhPT1cclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuY29sdW1ucykudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoeCwgaSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXguaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldKSB7XHJcbiAgICAgICAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5wdXNoKHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKHgsIGkpID0+IHtcclxuICAgICAgICAgIGlmICgheC5oaWRkZW4pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldKSB7XHJcbiAgICAgICAgICAgICAgeC52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5wdXNoKHgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBjbGFzc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoaWdobGlnaHRlZC1yb3cnKTtcclxuICAgICAgICBpZiAoY2xhc3NFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNsYXNzRWxlbWVudFswXS5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCl7IFxyXG4gICAgICAgICB0aGlzLmVkaXRBbGxSb3dzQXRPbmNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dsb2JhbFNlYXJjaGJ0bicpO1xyXG4gICAgaWYgKGdsb2JhbFNlYXJjaGJ0bikge1xyXG4gICAgICB0aGlzLnNlYXJjaEdyaWRGaWx0ZXIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApe1xyXG4gICAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc2V0IERpc3BsYXlUZXh0IHdoZW4gdmFsdWUgaXMgaW4gY3VybHkgYnJhY2tldHMuXHJcbiAgc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uKSB7XHJcbiAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxyXG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcclxuICAgICAgICBFR3JpZENvbHVtblR5cGUuSUZSQU1FXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ107XHJcbiAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBjb2x1bW4uZGlzcGxheVRleHQuaW5jbHVkZXMoJ3snKSkge1xyXG4gICAgICAgICAgY29uc3QgZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHRcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICBpZiAoZGlzcGxheVRleHQgJiYgZmllbGQpIHtcclxuICAgICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSByb3dbZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgZmllbGQpIHtcclxuICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gY29sdW1uLmRpc3BsYXlUZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBjaGFuZ2Ugcm93IGtleSBhbmQgdmFsdWUgd2hlbiB1c2luZyBzZXRHcmlkUm93UHJvcFZhbHVlIGZ1bmN0aW9uXHJcbiAgc2V0Um93VmFsdWUocm93RGF0YTogYW55KSB7XHJcbiAgICBPYmplY3Qua2V5cyhyb3dEYXRhKT8uZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByb3dEYXRhW3Jvd10gJiZcclxuICAgICAgICB0aGlzLnR5cGVPZihyb3dEYXRhW3Jvd10pID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgIHJvd0RhdGFbcm93XT8uYWN0aW9uPy5maWVsZFxyXG4gICAgICApIHtcclxuICAgICAgICBpZihyb3dEYXRhW3Jvd10/LmV4dHJhRmllbGQpe1xyXG4gICAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcm93RGF0YVtyb3ddID0gcm93RGF0YVtyb3ddPy50ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXROdW1lcmljTWluTXhGcmFjdGlvbihjb2x1bW46IGFueSkge1xyXG4gICAgbGV0IGRpZ2l0SW5mbyA9ICcyJztcclxuICAgIGlmKGNvbHVtbj8uZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pe1xyXG4gICAgICBkaWdpdEluZm8gPSAnMCdcclxuICAgIH1lbHNlIGlmKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pe1xyXG4gICAgICAgIGRpZ2l0SW5mbyA9IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm87XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlnaXRJbmZvO1xyXG4gIH1cclxuXHJcbiAgLy8gc2V0IHRoZSBmb3JtYXQgb2YgY3VycmVuY3kgJiYgbnVtYmVyICYmIGRlY2ltYWwgJiYgcGVyY2VudFxyXG4gIHNldE51bWVyaWNGb3JtYXQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICByb3cgPSB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIocm93KTtcclxuICAgIGxldCB2YWx1ZTogYW55ID0gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcclxuICAgICAgPyByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxyXG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxyXG4gICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXHJcbiAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXHJcbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV1cclxuICAgICAgOiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgPT09IDAgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgPT09IG51bGwpIFxyXG4gICAgICA/IHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKV0/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgaWYgKHRoaXMudHlwZU9mKHZhbHVlKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPT09IDApIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgbGV0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcclxuICAgIGxldCBkaWdpdHNJbmZvID0gZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xyXG4gICAgaWYgKGNvbHVtbi5mb3JtYXQgJiYgdmFsdWUpIHtcclxuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0Py50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuQ1VSUkVOQ1k6XHJcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcclxuICAgICAgICAgICAgZm9ybWF0UGFyYW1zPy5sb2NhbGUgPyBmb3JtYXRQYXJhbXMubG9jYWxlIDogJ2VuLVVTJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxyXG4gICAgICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRQYXJhbXM/LmN1cnJlbmN5ID8gZm9ybWF0UGFyYW1zLmN1cnJlbmN5IDogJ1VTRCcsXHJcbiAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6ICcyJyxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKT8uZm9ybWF0KHZhbHVlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkRFQ0lNQUw6XHJcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAnMicpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSQ0VOVDpcclxuICAgICAgICBpZighY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSl7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlKyclJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vQ2hhbmdlIGRyb3Bkb3duIHZsdWUgYmFzZWQgb24gb3B0aW9uIGxhYmVsIGFuZCBvcHRpb252YWx1ZVxyXG4gIHNldERyb3Bkb3duVmFsdWUoY29sdW1uOiBhbnksIHNlbGVjdGVkUm93PzogYW55LCBjaGFuZ2U/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXkgPT09IGNvbHVtbi5maWVsZCkpIHtcclxuICAgICAgICAgIGlmIChjb2x1bW4pIHtcclxuICAgICAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsID0gY29sdW1uLm9wdGlvbkxhYmVsXHJcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uTGFiZWxcclxuICAgICAgICAgICAgICA6ICdsYWJlbCc7XHJcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZSA9IGNvbHVtbi5vcHRpb25WYWx1ZVxyXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvblZhbHVlXHJcbiAgICAgICAgICAgICAgOiAndmFsdWUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZGF0YT8uZmluZChcclxuICAgICAgICAgICAgKHJlY29yZDogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZWRpdGVkUm93ID0gc2VsZWN0ZWRSb3cgJiYgT2JqZWN0LmtleXMoc2VsZWN0ZWRSb3cpLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFJvd1t0aGlzLmRhdGFLZXldID09PSByb3dbdGhpcy5kYXRhS2V5XSA6IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHZhbHVlICYmIGVkaXRlZFJvdykge1xyXG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV07XHJcbiAgICAgICAgICB9ZWxzZSBpZih2YWx1ZSAmJiBjaGFuZ2UgPT09IGZhbHNlKXtcclxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uTGFiZWxdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxyXG4gIGNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29sdW1ucyAmJlxyXG4gICAgICB0aGlzLnJvd3NEYXRhICYmXHJcbiAgICAgIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gJ3N0cmluZycpICYmXHJcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzAnKSkgfHxcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ1knIHx8XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdOJ1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9XHJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzEnIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnWSdcclxuICAgICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dEYXRhXHJcbiAgICogUGFzc2VzIGRhdGEgb2YgY2xpY2tlZCByb3cgdG8gcGFyZW50XHJcbiAgICovXHJcbiAgaGFuZGxlUm93Q2xpY2socm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvd0RhdGE7XHJcbiAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbHVtbkRhdGFcclxuICAgKiBQYXNzZXMgc29ydGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgb24gc29ydCBjaGFuZ2VcclxuICAgKi9cclxuICBoYW5kbGVTb3J0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBzb3J0RGlyZWN0aW9uID0gbnVsbDtcclxuICAgIGxldCBzb3J0RmllbGQ6IHN0cmluZyA9ICcnO1xyXG4gICAgaWYgKGV2ZW50Lm11bHRpc29ydG1ldGEgJiYgZXZlbnQubXVsdGlzb3J0bWV0YVswXS5vcmRlcikge1xyXG4gICAgICBzb3J0RGlyZWN0aW9uID1cclxuICAgICAgICBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyID09IDFcclxuICAgICAgICAgID8gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQ1xyXG4gICAgICAgICAgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQztcclxuICAgICAgc29ydEZpZWxkID0gZXZlbnQubXVsdGlzb3J0bWV0YVswXS5maWVsZDtcclxuICAgIH1cclxuICAgIGxldCBzb3J0czogSUdyaWRTb3J0ID0ge1xyXG4gICAgICBmaWVsZDogc29ydEZpZWxkLFxyXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gYXMgRUdyaWRTb3J0RGlyZWN0aW9uLFxyXG4gICAgICBwcmlvcml0eTogMCxcclxuICAgIH07XHJcbiAgICB0aGlzLm9uU29ydENoYW5nZS5lbWl0KHNvcnRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICogUGFzc2VzIGFwcGxpZWQgZmlsdGVycyB0byBwYXJlbnQgb24gZmlsdGVyIGNoYW5nZVxyXG4gICAqL1xyXG4gIGhhbmRsZUZpbHRlckNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFldmVudC5maWx0ZXJzW2ZpbHRlci5maWVsZF0/LnZhbHVlKSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50IDogRXZlbnRcclxuICAgKiBAcGFyYW0gY29sdW1uQWN0aW9uIDogSUdyaWRDb2x1bW5BY3Rpb25cclxuICAgKiBAcGFyYW0gcm93IDogYW55XHJcbiAgICogU3RvcCB0aGUgY2xpY2sgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50XHJcbiAgICogQ2FsbGJhY2tzIHRoZSByb3cgZGF0YSB0byBwYXJlbnRcclxuICAgKi9cclxuXHJcbiAgLyoqXHJcbiAgICogaW52b2tlIG9uQ2xpY2sgZXZlbnQgJiBvcGVuIElmcmFtZSBpbiBncmlkXHJcbiAgICovXHJcbiAgZ3JpZElGcmFtZShjb2x1bW46IGFueSwgcm93czogYW55LCByb3c6IGFueSkge1xyXG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xyXG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XHJcbiAgICAgIGhlYWRlcjogY29sdW1uLmhlYWRlcixcclxuICAgICAgd2lkdGg6ICc4MCUnLFxyXG4gICAgICBoZWlnaHQ6ICc4MCUnLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgdmFsdWU6IHJvd3MsXHJcbiAgICAgICAgaUZyYW1lSWQ6IGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IGNvbHVtbi5maWVsZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGNvbHVtbi5jb21wb25lbnQ/Lm5hbWU7XHJcbiAgICBpZihjb21wb25lbnROYW1lKXtcclxuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcclxuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcclxuICAgICAgfSBlbHNlIGlmIChyZXMgJiYgY29sdW1uLm9uQ2hhbmdlKSB7XHJcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3Um93KHJvdzogYW55LCBhZGRSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4uZmlsdGVyICYmXHJcbiAgICAgICAgY29sdW1uLmNvbXBvbmVudCAmJlxyXG4gICAgICAgIGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2NhbGVuZGFyJ1xyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoYWRkUm93KSB7XHJcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhWzBdW2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX3NlY29uZFR5cGUnXSA9IEVHcmlkQ29sdW1uVHlwZS5EQVRFO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcclxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSB0cnVlO1xyXG4gICAgdGhpcy5kcm9wZG93bklucHV0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLm9uR3JpZFJvd0FkZC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvcGVuIERpYWxvZyBpbiBncmlkXHJcbiAgICovXHJcbiAgb3BlbkdyaWREaWFsb2coY29sdW1uOiBJR3JpZENvbHVtbiB8IGFueSwgcm93OiBhbnkpIHtcclxuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcclxuICAgICAgaWYodGhpcy5zZXREaWFsb2dEYXRhIHx8IHRoaXMuc2V0RGlhbG9nRmllbGQgIT09IGNvbHVtbi5maWVsZCl7XHJcbiAgICAgICAgY29sdW1uWydwYXJlbnREaWFsb2dEYXRhJ10gPSBjb2x1bW4uZGF0YT8uZGF0YTtcclxuICAgICAgICB0aGlzLnNldERpYWxvZ0RhdGEgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldERpYWxvZ0ZpZWxkID0gY29sdW1uLmZpZWxkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGNvbHVtbi5kYXRhICYmIGNvbHVtbi5kYXRhLmRhdGEgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pe1xyXG4gICAgICAgIGNvbHVtbi5kYXRhLmRhdGEgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlhbG9nRGF0YTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sdW1uLmNvbXBvbmVudCAmJiBjb2x1bW4uZGF0YSAmJiB0aGlzLnJvd0NsaWNrRGF0YSkge1xyXG4gICAgICAgIGNvbHVtbi5kYXRhLmRhdGEgPSB1dGlsaXRpZXMuYXV0b1NldExvb2t1cERhdGEoXHJcbiAgICAgICAgICBjb2x1bW4ucGFyZW50RGlhbG9nRGF0YSxcclxuICAgICAgICAgIHRoaXMucm93Q2xpY2tEYXRhXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCBjb2x1bW4uZGF0YSk7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGNvbHVtbi5jb21wb25lbnQ/Lm5hbWU7XHJcbiAgICAgICAgaWYoY29tcG9uZW50TmFtZSl7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YSAmJiBjb2x1bW4ub25SZXR1cm4pIHtcclxuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGRhdGEsIHRoaXMucm93Q2xpY2tEYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xyXG4gICAgICAgICAgICBpZihjb2x1bW4ub25DaGFuZ2Upe1xyXG4gICAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBicm93c2VyQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKXtcclxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgc2V0TXVsdGlTZWxlY3REYXRhKGNvbHVtbjogSUdyaWRDb2x1bW4sIHNlbGVjdGVkVmFsdWU6YW55KXtcclxuICAgIGlmKHNlbGVjdGVkVmFsdWUgJiYgY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKXtcclxuICAgICAgaWYoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKXtcclxuICAgICAgICBzZWxlY3RlZFZhbHVlID0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJywnKT8ubWFwKCh2YWx1ZSk9PiBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKT0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gdmFsdWU/LnRvU3RyaW5nKCkpPy5sYWJlbCk/LnRvU3RyaW5nKCk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKT0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybiBjb25kaXRpb25hbCBiYXNlIHZhbHVlIGFuZCB0aXRsZVxyXG4gICAqL1xyXG4gIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGRlbGV0ZSByb3dbJ3VuZGVmaW5lZCddO1xyXG4gICAgbGV0IHZhbHVlOmFueTtcclxuICAgIGlmKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKXtcclxuICAgICAgbGV0IG5ld1ZhbHVlOmFueTtcclxuICAgICAgaWYodHlwZW9mKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uKXtcclxuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XHJcbiAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxyXG4gICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxyXG4gICAgICAgIDogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHRcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihuZXdWYWx1ZSl7XHJcbiAgICAgICAgaWYoY29sdW1uLnRpbWVPbmx5KXtcclxuICAgICAgICAgIHZhbHVlID0gdGhpcy5zZXRUaW1lRm9ybWF0KG5ld1ZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGZvcm1hdCA9ICcnO1xyXG4gICAgICAgICAgaWYoY29sdW1uLmZvcm1hdCl7XHJcbiAgICAgICAgICAgIGlmKGNvbHVtbi5mb3JtYXQgPT09IEVHcmlkRm9ybWF0VHlwZS5TTUFMTERBVEUpe1xyXG4gICAgICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGNvbHVtbi5mb3JtYXQgPT09IEVHcmlkRm9ybWF0VHlwZS5TSE9SVERBVEUpe1xyXG4gICAgICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eXl5JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShuZXdWYWx1ZT8udG9TdHJpbmcoKSA9PT0gXCJJbnZhbGlkIERhdGVcIiA/IG51bGwgOiBuZXdWYWx1ZSwgZm9ybWF0ID8gZm9ybWF0IDogJ01NL2RkL3l5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxyXG4gICAgICA/IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XHJcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cclxuICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cclxuICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cclxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJlxyXG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsXHJcbiAgICAgID8gJydcclxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcclxuICAgICAgPyBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiBjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgPyBcclxuICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkgPyBcclxuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCwgJ2hoOm1tIGEnKVxyXG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XHJcbiAgICAgIDogY29sdW1uLmRpc3BsYXlUZXh0XHJcbiAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XHJcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0RHJvcGR3b25SZWFkT25seVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSl7XHJcbiAgICBkZWxldGUgcm93Wyd1bmRlZmluZWQnXTtcclxuICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXHJcbiAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxyXG4gICAgOiByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIG9wZW4gRGVsZXRlIENvbmZpcm1hdGlvbiBkaWFsb2cgd2hlbiBjbGljayBvbiBkZWxldGUgaWNvbiBpbiBBY3Rpb24gY29sdW1uXHJcbiAgICovXHJcbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW5BY3Rpb246IElHcmlkQ29sdW1uQWN0aW9uLCByb3c6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAoY29sdW1uQWN0aW9uLnRvb2x0aXAudG9Mb3dlckNhc2UoKSA9PT0gJ2RlbGV0ZScpIHtcclxuICAgICAgaWYgKGNvbHVtbkFjdGlvbi5jb25maXJtRGlhbG9nID09PSBmYWxzZSkge1xyXG4gICAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxyXG4gICAgICAgICAgaGVhZGVyOiAnRGVsZXRlIENvbmZpcm1hdGlvbicsXHJcbiAgICAgICAgICBpY29uOiAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxyXG4gICAgICAgICAga2V5OiAnaGFuZGxlY29sdW1uQWN0aW9ucycsXHJcbiAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50IDogTGF6eUxvYWRFdmVudFxyXG4gICAqIFRyaWdnZXJzIGV2ZXJ5dGltZSBhIHNlcnZlciBzaWRlIGZpbHRlciBpcyB0cmlnZ2VyXHJcbiAgICovXHJcbiAgaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudDogYW55KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZXZlbnQuZmlsdGVyc1t4LmZpZWxkXSkge1xyXG4gICAgICAgICAgICBldmVudC5maWx0ZXJzW3guZmllbGRdLnZhbHVlID0geC52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICBcclxuICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xyXG4gICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzID0ge1xyXG4gICAgICBmaWx0ZXJzOiB0aGlzLmxvb2t1cEZpbHRlcnNcclxuICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZEZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKVxyXG4gICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5wcmVwYXJlQmFzaWNGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXHJcbiAgICAgIHNvcnRzOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTb3J0cyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxyXG4gICAgICAuLi4odGhpcy5wYWdpbmF0aW9uICYmIHtcclxuICAgICAgICBwYWdlOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRQYWdpbmF0aW9uKGV2ZW50KSxcclxuICAgICAgICBwYWdlU2l6ZTogZXZlbnQucm93cyB8fCAxMCxcclxuICAgICAgfSksXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzICYmXHJcbiAgICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycy5sZW5ndGggPiAwICYmXHJcbiAgICAgICh0aGlzLmFsbG93Q2FjaGluZyB8fCB0aGlzLnNvZnRDYWNoaW5nKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmKCF0aGlzLnNvZnRDYWNoaW5nKXtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSxKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV0gPSB0aGlzLnNlcnZlckZpbHRlcnM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZXJ2ZXJGaWx0ZXJWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xyXG4gICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSAodGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMgfHwgW10pLmNvbmNhdChcclxuICAgICAgdGhpcy5nbG9iYWxEYXRhXHJcbiAgICApO1xyXG4gICAgdGhpcy5vblNlcnZlclNpZGVFdmVudENoYW5nZS5lbWl0KHNlcnZlckZpbHRlclZhbHVlcyk7XHJcbiAgICB9LCA5NTApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICogUGFzc2VzIGFwcGxpZWQgcGFnaW5hdGlvbiB0byBwYXJlbnQgb24gcGFnZSBjaGFuZ2VcclxuICAgKi9cclxuICBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbihldmVudDogSUdyaWRQYWdpbmF0aW9uRXZlbnQpIHtcclxuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcclxuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgdGltZSBmb3JtYXRcclxuICBzZXRUaW1lRm9ybWF0KGRhdGU6IGFueSkge1xyXG4gICAgbGV0IHZhbHVlOiBhbnkgPSAnJztcclxuICAgIGlmIChkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpIHx8IGRhdGU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpIHtcclxuICAgICAgdmFsdWUgPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShkYXRlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2hoOm1tIGEnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vb3BlbiBoeXBlcmxpbmsgaW4gZWRpdCBjYXNlXHJcbiAgb3BlbkxpbmsodXJsOiBhbnkpIHtcclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XHJcbiAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEZvcm1hdChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIGxldCB2YWx1ZTogYW55ID0gJyc7XHJcbiAgICBpZiAoY29sdW1uLmZvcm1hdCkge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxyXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IHJvd1tjb2x1bW4uZmllbGRdLFxyXG4gICAgICAgIGNvbHVtbi5mb3JtYXRcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhbHVlID0gY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBTZXRzIHZhbHVlcyB0byBlZGl0YWJsZSByb3dcclxuICAgKiBSb3cncyBkYXRhIGlzIHByZXNldmVkIHRvIHByZXZlbnQgbXV0YXRpb25cclxuICAgKiBSb3cgZGF0YUtleSBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCB0aGUgcm93IHVuaXF1ZSBhbmQgaW4gZWRpdGFibGUgc3RhdGUgYXMgbG9uZyBhcyBub3Qgc2F2ZWRcclxuICAgKi9cclxuXHJcbiAgb25Sb3dFZGl0SW5pdChyb3c6IGFueSkge1xyXG4gICAgbGV0IHNlbGVjdGVkUm93ID0geyAuLi5yb3cgfTtcclxuICAgIE9iamVjdC5lbnRyaWVzKHNlbGVjdGVkUm93KS5mb3JFYWNoKChba2V5LCB2YWx1ZV06IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgICBpZih0aGlzLnNldERyb3Bkb3duRmlsdGVyKXtcclxuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25GaWx0ZXJWYWx1ZShjb2wsIHJvdywga2V5KTtcclxuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IHRoZSBhdXRvQ29tcGxldGUgVmFsdWUgaW4gZWRpdCBtb2RlXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcclxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICB2YWx1ZSAmJlxyXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWUubWFwKCh4OiBhbnkpID0+IHhbY29sLmRpc3BsYXlGaWVsZF0pO1xyXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XHJcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gbmV3VmFsdWVcclxuICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXHJcbiAgICAgICAgICAgICAgPy5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAgICAgPy5tYXAoKHg6IGFueSkgPT4gKHsgW2NvbC5kaXNwbGF5RmllbGRdOiB4IH0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNldCBsb29rdXAgY29udHJvbCBmaWVsZCBiYXNlZCBvbiBkaXNwbGF5IGZpZWxkLlxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2wuZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSBrZXkpIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgICAgdGV4dDogcm93W2NvbC5kaXNwbGF5RmllbGRdLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiByb3dbY29sLmZpZWxkXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XHJcbiAgICAgICAgICBsZXQgb3B0aW9uID0gY29sPy5kYXRhPy5maW5kKFxyXG4gICAgICAgICAgICAoeDogYW55KSA9PiB4LmxhYmVsID09PSByb3dbY29sLmZpZWxkXT8udG9TdHJpbmcoKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChvcHRpb24pIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHZhbHVlID0gdmFsdWU/LmFjdGlvbiA/IHZhbHVlLnRleHQgOiB2YWx1ZTtcclxuICAgICAgICAgIGlmIChyb3dbY29sLmZpZWxkXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZihyb3dba2V5XT8uYWN0aW9uICYmIE9iamVjdC5rZXlzKHJvd1trZXldPy5hY3Rpb24pPy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICByb3dba2V5XS50ZXh0ID0gbmV3IERhdGUodmFsdWUgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gY2hlY2sgdGhlIE1pbnV0ZXMgcGF0dGVyblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcclxuICAgICAgICAgICAgY29sLm1pbnV0ZXNJbnRlcnZhbCAmJlxyXG4gICAgICAgICAgICByb3dba2V5XVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJvd1trZXldID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxyXG4gICAgICAgICAgY29sLmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJlxyXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJlxyXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChjb2wuZWRpdExpbmsgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgcm93W2tleV0gPSByb3dbY29sLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJvd1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHsgLi4ucm93IH07XHJcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XHJcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IHRydWU7XHJcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcclxuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5vbkdyaWRSb3dFZGl0LmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0IGRyb3Bkb3duIGZpbHRlciB2YWx1ZVxyXG4gICAqL1xyXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sLmRyb3BEb3duUHJvcCkge1xyXG4gICAgICBpZiAoT2JqZWN0LnZhbHVlcyhjb2wpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSA9PSBrZXkpKSB7ICAgICAgICBcclxuICAgICAgICBsZXQgb2JqID0gY29sLmRyb3BEb3duUHJvcDtcclxuICAgICAgICBsZXQgbmV3RmlsdGVyczogYW55ID0gW107XHJcblxyXG4gICAgICAgIGlmIChvYmouZmlsdGVycyAmJiBvYmouZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbmV3RmlsdGVyID0geyAuLi5maWx0ZXIgfTtcclxuICAgICAgICAgICAgbGV0IGZpbHRlcktleSA9IE9iamVjdC5rZXlzKHJvdykuZmluZCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWU/LmluY2x1ZGVzKCd7JykgJiZcclxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoS2V5O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGZpbHRlcktleSkge1xyXG4gICAgICAgICAgICAgIG5ld0ZpbHRlci52YWx1ZSA9IHJvd1tmaWx0ZXJLZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5ld0ZpbHRlcnMucHVzaChuZXdGaWx0ZXIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldERyb3Bkb3duRGF0YShcclxuICAgICAgICAgIGNvbCxcclxuICAgICAgICAgIG9iai51bmlxdWVLZXksXHJcbiAgICAgICAgICBvYmoudmFsdWVQcm9wLFxyXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcclxuICAgICAgICAgIG5ld0ZpbHRlcnMsXHJcbiAgICAgICAgICByb3dcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgb3B0aW9uID0gY29sLmRhdGEuZmluZChcclxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAob3B0aW9uKSB7XHJcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd1xyXG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcclxuICAgKiBJbiBjYXNlIG9mIG5ld2x5IGNyZWF0ZWQgZGF0YSwgZGF0YUtleSBhbmQgaXNOZXcgcHJvcCBpcyByZW1vdmVkXHJcbiAgICovXHJcbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ107XHJcbiAgICAgIGRlbGV0ZSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX3NlY29uZFR5cGUnXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXHJcbiAgICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCAmJlxyXG4gICAgICAgIHRoaXMubG9va3VwT2JqZWN0XHJcbiAgICAgICkge1xyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmxvb2t1cE9iamVjdC52YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcclxuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdjaGFyJykge1xyXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICdZJyA6ICdOJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdudW1lcmljJykge1xyXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICcxJyA6ICcwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZWN0ZWRSb3cgPSB7IC4uLnNlbGVjdGVkUm93LCBbY29sdW1uLmZpZWxkXTogdmFsdWUgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGZvcm1hdFxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmKCBjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZyl7XHJcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZighY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zaG93VGltZSl7XHJcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy9jb252ZXJ0IG11bHRpc2VsZWN0IGFycmF5IGludG8gc3RyaW5nXHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cclxuICAgICAgKSB7XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9ICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTYXZpbmcgQXV0b0NvbXBsZXRlIERhdGFcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXHJcbiAgICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCAmJlxyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IGFycjogYW55ID0gW107XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xyXG4gICAgICAgICAgICBhcnIucHVzaChyb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBhcnIudG9TdHJpbmcoKT8ucmVwbGFjZUFsbCgnLCcsICc7Jyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCByb3c6IGFueSA9IHsgLi4uc2VsZWN0ZWRSb3cgfTtcclxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcclxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmxvb2t1cE9iamVjdCAmJiB0aGlzLmxvb2t1cE9iamVjdC5maWVsZCkge1xyXG4gICAgICAgIHJvd1t0aGlzLmxvb2t1cE9iamVjdC5maWVsZF0gPSB0aGlzLmxvb2t1cE9iamVjdC52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja0FjdGlvbiA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xyXG4gICAgICAgICAgdGhpcy5jaGVja0FjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvYmo6IGFueSA9IHJvd1trZXldO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIG9iaiAmJlxyXG4gICAgICAgICAgKG9iai50eXBlID09PSAnbGluaycgfHxcclxuICAgICAgICAgICAgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8XHJcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnZGlhbG9nJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBqdXN0IGVtaXQgdGhvc2UgZmllbGRzIHdobyBleGlzdCBpbiB0aGUgdGFiZWxcclxuICAgICAqL1xyXG4gICAgdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xyXG4gICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXHJcbiAgICAgICAgY29sdW1uLmZpZWxkICYmXHJcbiAgICAgICAgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0J1xyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xyXG4gICAgICAgIG5ld1Jvd1tjb2x1bW4uZmllbGRdID0gbmV3Um93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xyXG4gICAgICAgIHJvdyA9IHsgLi4ubmV3Um93IH07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcclxuICAgICAgKSB7XHJcbiAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxyXG4gICAgICAgICAgY29sdW1uLmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0sXHJcbiAgICAgICAgICAgICd5eXl5LU1NLWRkVDAwOjAwOjAwLjAwMFonXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcclxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxyXG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcclxuICAgICAgICAgICFyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCcuJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGxldCBkaWdpdHNJbmZvID0gJy4wMCc7XHJcbiAgICAgICAgICBsZXQgemVybyA9ICcwJztcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcclxuICAgICAgICAgIGNvbnN0IGZyYWNEaWdpdHMgPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xyXG4gICAgICAgICAgaWYgKGZyYWNEaWdpdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcclxuICAgICAgICAgICAgICB6ZXJvID0gemVybyArICcwJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKyBkaWdpdHNJbmZvO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICByb3cuaXNOZXcgJiZcclxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGRlbGV0ZSBzZWxlY3RlZFJvd1sndW5kZWZpbmVkJ107XHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkodGhpcy5jb2x1bW5zLCByb3cpO1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZ3JpZFZhbGlkYXRpb24odGhpcy5jb2x1bW5zLCByb3cpO1xyXG4gICAgaWYgKGlzVmFsaWQpIHtcclxuICAgIC8vIHNldCB0aGUgZ3JpZCB1cGRhdGVkL2luc2VydGVkIGRhdGFcclxuICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMoc2VsZWN0ZWRSb3cpO1xyXG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KGZhbHNlKTtcclxuICAgICAgaWYgKHJvdy5pc05ldykge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHsgaXNOZXcsIC4uLm5ld1Jvd09iaiB9ID0gcm93O1xyXG4gICAgICAgIGlmKCF0aGlzLmFkZERhdGFLZXlWYWx1ZSl7XHJcbiAgICAgICAgICBkZWxldGUgbmV3Um93T2JqW3RoaXMuZGF0YUtleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xyXG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChuZXdSb3dPYmopO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5vblJvd0FkZC5lbWl0KG5ld1Jvd09iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLnNhdmVBbGxSZWNvcmQpIHtcclxuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gob2JqKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdChvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRoaXMuZWRpdEFsbFJvd3M7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICAvLyBpZiBhbGwgcm93cyBpbiByZWFkIG9ubHkgbW9kZSB0aGVuIHNob3cgZWRpdEFsbFJvd3MgYnV0dG9uLiAgICBcclxuICAgIGlmKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKT0+ICF2YWx1ZSkpe1xyXG4gICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XHJcbiAgICAgICB0aGlzLmhpZGVFZGl0QWxsUm93c0J0biA9IHRydWU7XHJcbiAgICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgLy8gY29udmVydCBkYXRlIGludG8gdGltZVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJlxyXG4gICAgICAgIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnUE0nKSB8fFxyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdBTScpKVxyXG4gICAgICApIHtcclxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXHJcbiAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsICYmXHJcbiAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHNlbGVjdGVkUm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBjaGVjayB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRcclxuICBncmlkVmFsaWRhdGlvbihjb2x1bW5zOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShjb2x1bW5zLCByb3cpKSB7XHJcbiAgICAgIGxldCBpc1JlcXVpcmVkID0gY29sdW1ucy5zb21lKFxyXG4gICAgICAgIChjb2x1bW46IGFueSkgPT4gY29sdW1uLmVycm9yTWVzc2FnZSAmJiAhcm93W2NvbHVtbi5maWVsZF1cclxuICAgICAgKTtcclxuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICdSZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmcnLFxyXG4gICAgICAgICAgJ1JFUVVJUkVEIEZJRUxEJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoJ1NvbWUgZmllbGRzIGFyZSBpbnZhbGlkJywgJ0lOVkFMSUQgRklFTEQnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvdyA6IGFueVxyXG4gICAqIEBwYXJhbSBpbmRleCA6IG51bWJlclxyXG4gICAqIENsZWFycyBvdXQgdGhlIGVkaXQgcm93IGFuZCByZXBsYWNlIHdpdGggcmVhZGFibGUgb25lXHJcbiAgICovXHJcbiAgb25Sb3dFZGl0Q2FuY2VsKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAocm93LmlzTmV3KSB7XHJcbiAgICAgIHRoaXMucm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdID0gdGhpcy5lZGl0Um93c1JlY29yZHNbcm93W3RoaXMuZGF0YUtleV1dO1xyXG4gICAgICBkZWxldGUgdGhpcy5lZGl0Um93c1JlY29yZHNbcm93W3RoaXMuZGF0YUtleV1dO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dO1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xyXG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XHJcbiAgICBpZihPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSk9PiAhdmFsdWUpKXtcclxuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSBmYWxzZTtcclxuICAgfSAgXHJcbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gZmFsc2U7XHJcbiAgICB0aGlzLmlubGluZVJvd0NhbmNlbC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBTZW5kcyB0aGUgcm93IHBheWxvYWQgdG8gcGFyZW50IGZvciBkZWxldGlvblxyXG4gICAqL1xyXG5cclxuICAgLyoqXHJcbiAgICpzZXQgdGhlIGdyaWREYXRhIG9uIHJvdyBhY3Rpb25zIGV2ZW50c1xyXG4gICAqL1xyXG4gICByb3dBY3Rpb25FdmVudHMocm93SW5mbywgZGVsZXRlUm93OiBib29sZWFuID0gZmFsc2Upe1xyXG4gICAgbGV0IGFjdGlvbjogc3RyaW5nID0gJyc7XHJcbiAgICBsZXQgZ3JpZFJvd3NEYXRhOiBhbnlbXSA9IFsuLi50aGlzLnJvd3NEYXRhXTtcclxuICAgIGNvbnN0IGluZGV4ID0gZ3JpZFJvd3NEYXRhLmZpbmRJbmRleCgocm93RGF0YSk9PiByb3dJbmZvW3RoaXMuZGF0YUtleV0gPT09IHJvd0RhdGFbdGhpcy5kYXRhS2V5XSk7XHJcbiAgICBpZihpbmRleCA+IC0xKXtcclxuICAgICAgaWYoZGVsZXRlUm93KXsgXHJcbiAgICAgICAgZ3JpZFJvd3NEYXRhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi5ncmlkUm93c0RhdGFdO1xyXG4gICAgICAgIGFjdGlvbiA9ICdkZWxldGUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmKHRoaXMuYWRkTmV3Um93Q2hlY2spe1xyXG4gICAgICAgICAgYWN0aW9uID0gJ2luc2VydCc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBhY3Rpb24gPSAndXBkYXRlJztcclxuICAgICAgICB9XHJcbiAgICAgIGlmKHRoaXMub25HcmlkUm93QWN0aW9ucy5vYnNlcnZlcnMubGVuZ3RoICE9PSAwKXtcclxuICAgICAgICByb3dJbmZvWydyb3dBY3Rpb24nXT0gYWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGdyaWRSb3dzRGF0YVtpbmRleF0gPSByb3dJbmZvO1xyXG4gICAgfVxyXG4gIH1cclxuICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcclxuICB0aGlzLm9uR3JpZFJvd0FjdGlvbnMuZW1pdChncmlkUm93c0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbiBEZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIHRyeWluZyB0byBkZWxldGUgcm93XHJcbiAgICovXHJcbiAgZGVsZXRlUmVjb3JkKHJvdzogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcclxuICAgICAgaGVhZGVyOiAnRGVsZXRlIENvbmZpcm1hdGlvbicsXHJcbiAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXHJcbiAgICAgIGtleTogJ2hhbmRsZUlubGluZUNSVUQnLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgdGhlIGdyaWQgZGVsZXRlZCBkYXRhIFxyXG4gICAgICAgIHRoaXMucm93QWN0aW9uRXZlbnRzKHJvdywgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vblJvd0RlbGV0ZS5lbWl0KHJvdyk7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHJlamVjdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUbyBzZXQgZGlzYWJsZWQgdGhlIGNvbnRyb2xcclxuICAgKi9cclxuICBhbGxvd0Rpc2FibGVkKGNvbHVtbjogYW55LCByb3c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnICYmIHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24pIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24gJiZcclxuICAgICAgICBPYmplY3Qua2V5cyhyb3dbY29sdW1uLmZpZWxkXS5hY3Rpb24pPy5pbmNsdWRlcygnZGlzYWJsZWQnKSAmJiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNhYmxlZCA9PT0gdHJ1ZVxyXG4gICAgICApIHtcclxuICAgICAgICB2YWx1ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc2FibGVkIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgdmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG8gc2V0IGFnZ3JlZ2F0ZSBpbiBncmlkIGZvb3RlclxyXG4gICAqL1xyXG4gIHNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBJR3JpZENvbHVtbikge1xyXG4gICAgaWYgKGNvbHVtbj8uYWdncmVnYXRlKSB7XHJcbiAgICAgIGNvbHVtbi5hZ2dyZWdhdGUuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCBjb2x1bW5UeXBlOiBFR3JpZEFnZ3JlZ2F0ZSA9IGNvbC50eXBlO1xyXG4gICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkNPVU5UKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5yb3dzRGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sLCBjb3VudCwgJ0NvdW50Jyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5TVU0gfHxcclxuICAgICAgICAgICAgY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQVZFUkFHRVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlczogbnVtYmVyW10gPSB0aGlzLmdldENvbHVtblZhbHVlcyhjb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAoY29sVmFsdWVzICYmIGNvbFZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3VtID0gY29sVmFsdWVzLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArIGN1ciwgMCk7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLlNVTSkge1xyXG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIHN1bSwgJ1N1bScpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQVZFUkFHRSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXZlcmFnZSA9IHN1bSAvIGNvbFZhbHVlcy5sZW5ndGggfHwgMDtcclxuICAgICAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoXHJcbiAgICAgICAgICAgICAgICAgIGNvbCxcclxuICAgICAgICAgICAgICAgICAgYXZlcmFnZSxcclxuICAgICAgICAgICAgICAgICAgJ0F2ZydcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0IGdyaWQgQWdncmVnYXRlIHZhbHVlc1xyXG4gICAqL1xyXG4gIHNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sdW1uOiBhbnksIHZhbHVlOiBudW1iZXIsIGRlZmF1bHRDYXB0aW9uOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGlzRGVjaW1hbEZvcm1hdDogYm9vbGVhbiA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJztcclxuICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4uZm9ybWF0Py5kaWdpdHNJbmZvO1xyXG4gICAgY29uc3QgY2FwdGlvbjogc3RyaW5nID1cclxuICAgICAgY29sdW1uLmNhcHRpb24/Lmxlbmd0aCA+IDAgPyBjb2x1bW4uY2FwdGlvbiA6IGRlZmF1bHRDYXB0aW9uO1xyXG5cclxuICAgIGNvbnN0IGRlY2ltYWxQb2ludCA9IGlzRGVjaW1hbEZvcm1hdFxyXG4gICAgICA/IHZhbHVlPy50b0ZpeGVkKGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogMilcclxuICAgICAgOiB2YWx1ZT8udG9GaXhlZCgwKTtcclxuICAgIHJldHVybiBgJHtjYXB0aW9ufSAke2RlY2ltYWxQb2ludFxyXG4gICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKX0gPC9icj5gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0IGRlY2ltYXQgYW5kIG51bWVyaWMgdmFsdWVzXHJcbiAgICovXHJcbiAgc2V0TnVtZXJpY1ZhbHVlcygpIHtcclxuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XHJcbiAgICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgocm93W2NvbHVtbi5maWVsZF0gLyAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSAvIDEwMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcclxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJykge1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6IDIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgY29sdW1uIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiBmaWVsZFxyXG4gICAqL1xyXG4gIGdldENvbHVtblZhbHVlcyhjb2x1bW46IElHcmlkQ29sdW1uKSB7XHJcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcclxuICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcclxuICAgICAga2V5cy5tYXAoKGtleSkgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgPT09IGtleSkge1xyXG4gICAgICAgICAgYXJyLnB1c2gocm93W2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhcnI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEV4cG9ydCB0byBQREZcclxuICAgKi9cclxuICBleHBvcnRQZGYoKSB7XHJcbiAgICB2YXIgZXhwb3J0RGF0YSA9IHRoaXMuc2V0RXhwb3J0RGF0YShbLi4udGhpcy5yb3dzRGF0YV0sIHRydWUpO1xyXG4gICAgbGV0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcpO1xyXG4gICAgZG9jLnRhYmxlKDEsIDEsIGV4cG9ydERhdGEucm93cywgZXhwb3J0RGF0YS5oZWFkaW5ncywgeyBhdXRvU2l6ZTogdHJ1ZSB9KTtcclxuICAgIGRvYy5zYXZlKCdFeHBvcnQucGRmJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAgU3ViLWZ1bmN0aW9uIHRvIHNldCByb3dzIGZvciBleHBvcnQgdG8gUGRmLCBhbmQgRXhjZWxcclxuICAgKiBAcm93cyBwYXJhbSBmb3Igcm93c1xyXG4gICAqIEBpc0V4Y2VsIHBhcmFtIGZvciBleHBvcnQgdG8gZXhjZWwgaW5kaWNhdGlvblxyXG4gICAqL1xyXG4gIHNldEV4cG9ydERhdGEocm93czogYW55W10gPSBbXSwgaXNQZGY6IGJvb2xlYW4gPSBmYWxzZSk6IElHcmlkRGF0YUV4cG9ydCB7XHJcbiAgICBjb25zdCBoZWFkaW5nczogYW55ID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQpO1xyXG4gICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgZm9yICh2YXIgcHJvcCBpbiByb3cpIHtcclxuICAgICAgICBpZiAoIWhlYWRpbmdzLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICBkZWxldGUgcm93W3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNQZGYpIHtcclxuICAgICAgICAgIHJvd1twcm9wXSA9XHJcbiAgICAgICAgICAgICFyb3dbcHJvcF0gJiYgdHlwZW9mIHJvd1twcm9wXSAhPT0gJ2Jvb2xlYW4nXHJcbiAgICAgICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgICAgIDogcm93W3Byb3BdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IHJvd3MsIGhlYWRpbmdzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEV4cG9ydCB0byBFeGNlbFxyXG4gICAqL1xyXG4gIGV4cG9ydEV4Y2VsKCkge1xyXG4gICAgbGV0IGV4cG9ydERhdGE6IGFueSA9IHRoaXMuZXhwb3J0RGF0YVRvRXhjZWwoKTtcclxuICAgIGltcG9ydCgneGxzeCcpLnRoZW4oKHhsc3gpID0+IHtcclxuICAgICAgY29uc3Qgd29ya3NoZWV0OiBXb3JrU2hlZXQgPSB4bHN4LnV0aWxzLmpzb25fdG9fc2hlZXQoZXhwb3J0RGF0YSk7XHJcblxyXG4gICAgICBsZXQgcm93SW5kZXggPSAwO1xyXG4gICAgICBleHBvcnREYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbEluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2VsbFZhbHVlOiBzdHJpbmcgPSByb3dbY29sLmhlYWRlcl07XHJcbiAgICAgICAgICBpZiAoY2VsbFZhbHVlICYmIGNlbGxWYWx1ZS5sZW5ndGggPiAwICYmIGNlbGxWYWx1ZS5pbmRleE9mKCd8JykgPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUZXh0OiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVswXTtcclxuICAgICAgICAgICAgbGV0IGxpbmtVcmw6IHN0cmluZyA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpWzFdO1xyXG4gICAgICAgICAgICBpZiAobGlua1VybCAmJiAhbGlua1VybC5zdGFydHNXaXRoKCdodHRwJykpIHtcclxuICAgICAgICAgICAgICBpZiAoIWxpbmtVcmwuc3RhcnRzV2l0aCgnLycpKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5rVXJsID0gJy8nICsgbGlua1VybDtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGxpbmtVcmwgPVxyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICtcclxuICAgICAgICAgICAgICAgICcvLycgK1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICtcclxuICAgICAgICAgICAgICAgIGxpbmtVcmw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGxBZGRyZXNzID0geGxzeC51dGlscy5lbmNvZGVfY2VsbCh7XHJcbiAgICAgICAgICAgICAgYzogY29sSW5kZXgsXHJcbiAgICAgICAgICAgICAgcjogcm93SW5kZXggKyAxLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHdvcmtzaGVldFtjZWxsQWRkcmVzc10gPSB7XHJcbiAgICAgICAgICAgICAgZjogYD1IWVBFUkxJTksoXCIke2xpbmtVcmx9XCIsIFwiJHtsaW5rVGV4dH1cIilgLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbEluZGV4Kys7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJvd0luZGV4Kys7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3Qgd29ya2Jvb2sgPSB7XHJcbiAgICAgICAgU2hlZXRzOiB7IHNoZWV0MTogd29ya3NoZWV0IH0sXHJcbiAgICAgICAgU2hlZXROYW1lczogWydzaGVldDEnXSxcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgZXhjZWxCdWZmZXI6IGFueSA9IHhsc3gud3JpdGUod29ya2Jvb2ssIHtcclxuICAgICAgICBib29rVHlwZTogJ3hsc3gnLFxyXG4gICAgICAgIHR5cGU6ICdhcnJheScsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNhdmVBc0V4Y2VsRmlsZShleGNlbEJ1ZmZlciwgJ0V4cG9ydC54bHN4Jyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydERhdGFUb0V4Y2VsKCkge1xyXG4gICAgbGV0IGFycjogYW55ID0gW107XHJcbiAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyaWRIZWFkZXIgPSBjb2x1bW4uaGVhZGVyO1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcclxuICAgICAgICAgIGNvbnN0IGxpbmtPYmogPSByb3dbY29sdW1uLmRpc3BsYXlUZXh0Py50b0xvd2VyQ2FzZSgpICsgJ19vYmonXTtcclxuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdICsgJ3wnICsgbGlua09iaj8uaHlwZXJsaW5rO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYmpbZ3JpZEhlYWRlcl0gPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgYXJyLnB1c2gob2JqKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFycjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChzdWItbWV0aG9kKVxyXG4gICAqL1xyXG4gIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaW1wb3J0KCdmaWxlLXNhdmVyJykudGhlbigoRmlsZVNhdmVyKSA9PiB7XHJcbiAgICAgIGxldCBFWENFTF9UWVBFID1cclxuICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XHJcbiAgICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiBFWENFTF9UWVBFIH0pO1xyXG4gICAgICBzYXZlQXMoZGF0YSwgZmlsZU5hbWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKnNldCBjb25maWcgZGF0YSBvZiBsb29rdXAgY29udHJvbCBkaWFsb2dcclxuICAgKi9cclxuICBzZXRMb29rdXBEaWFsb2dDb25maWcocm93OiBhbnksIGNvbHVtbjogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIGxldCBzZWxlY3Rpb246IHN0cmluZyA9ICcnO1xyXG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF0udGV4dDtcclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCAmJiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pIHtcclxuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbHVtbi5maWVsZCAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XHJcbiAgICAgIG5ld1Jvd1tjb2x1bW4uZmllbGRdID0gbmV3Um93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xyXG4gICAgICByb3cgPSB7IC4uLm5ld1JvdyB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBkYXRhKSB7XHJcbiAgICAgIGxldCBvYmogPSB1dGlsaXRpZXMuYXV0b1NldExvb2t1cERhdGEoZGF0YSwgcm93KTtcclxuICAgICAgcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddID0gb2JqO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcm93RGF0YTogcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddLFxyXG4gICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcclxuICAgICAgY29sdW1uOiBjb2x1bW4sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbiBsaW5rIG9uIGxvb2t1cENvbnRyb2wgY29udHJvbCBpbiByZWFkIG9ubHkgbW9kZSB3aGVuIGVkaXRMaW5rIHNldCB0cnVlXHJcbiAgICovXHJcbiAgb3Blbkxvb2t1cEh5cGVybGluayhjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xyXG4gICAgaWYgKGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSAmJiBjb2x1bW4uY29tcG9uZW50KSB7XHJcbiAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKHJvdywgY29sdW1uLCBjb2x1bW4uZGF0YT8uZGF0YSk7XHJcbiAgICAgIG9ialsnY29tcG9uZW50J10gPSBjb2x1bW4uY29tcG9uZW50O1xyXG4gICAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqKTtcclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xyXG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIG9wZW4gbG9va3VwIERpYWxvZ1xyXG4gICAqL1xyXG4gIG9wZW5Mb29rdXBEaWFsb2coY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBjb2x1bW4uY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhID8gIGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhIDogY29sdW1uLmNvbHVtbi5kYXRhXHJcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCB7XHJcbiAgICAgIC4uLmNvbHVtbkRhdGEsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBzZWxlY3Rpb246IGNvbHVtbi5zZWxlY3Rpb24sXHJcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2x1bW4uZmllbGQsXHJcbiAgICAgICAgdmFsdWVGaWVsZDogY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZUZpZWxkLFxyXG4gICAgICAgIC4uLmNvbHVtbi5yb3dEYXRhLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcclxuICAgIGlmKGNvbXBvbmVudE5hbWUpe1xyXG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVmO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbiBkaWFsb2cgb24gbG9va3VwQ29udHJvbCBmaWVsZFxyXG4gICAqL1xyXG4gIHNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbjogYW55LCByb3c/OiBhbnkpIHtcclxuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcclxuICAgIHRoaXMubG9va3VwT2JqZWN0ID0geyB0ZXh0OiAnJywgdmFsdWU6ICcnLCBmaWVsZDogJycgfTtcclxuICAgIGlmIChjb2x1bW4ubG9va3VwQ29udHJvbCkge1xyXG4gICAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhcclxuICAgICAgICByb3csXHJcbiAgICAgICAgY29sdW1uLFxyXG4gICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLmRhdGE/LmRhdGFcclxuICAgICAgKTtcclxuICAgICAgb2JqWydjb21wb25lbnQnXSA9IGNvbHVtbi5sb29rdXBDb250cm9sLmNvbXBvbmVudDtcclxuICAgICAgY29uc3QgcmVmID0gdGhpcy5vcGVuTG9va3VwRGlhbG9nKG9iaik7XHJcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcclxuICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMsIHJvdyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcclxuICAgICAgICAgICAgICBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wsXHJcbiAgICAgICAgICAgICAgcmVzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCldLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgdGhpcy5sb29rdXBPYmplY3QgPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHZhbHVlWydmaWVsZCddID0gY29sdW1uLmZpZWxkO1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByZXNbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gIT09IG9iai5zZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcclxuICAgICAgICAgICAgaWYoY29sdW1uLm9uQ2hhbmdlKXtcclxuICAgICAgICAgICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKHsgZXJyb3IgfSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEZpbHRlckxvb2t1cChjb2x1bW46IGFueSkge1xyXG4gICAgdGhpcy5ncmlkU2VydmljZS5zZXRMb29rVXBGaWx0ZXIoY29sdW1uLCB0aGlzLmRpYWxvZ1NlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgY2FsZW5kZXIgdmFsdWUgaXMgY2hhbmdlZCBvciBub3RcclxuICBjYWxlbmRlckNoYW5nZUV2ZW50KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgbGV0IHZhbHVlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNvbHVtbi50aW1lT25seSAmJlxyXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tJykgIT09XHJcbiAgICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUsICdoaDptbScpXHJcbiAgICApIHtcclxuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgY29sdW1uLnNob3dUaW1lICYmXHJcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBoaDptbScpICE9PVxyXG4gICAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kZXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCBoaDptbScpXHJcbiAgICApIHtcclxuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkJykgIT09XHJcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kZXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCcpXHJcbiAgICApIHtcclxuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYodmFsdWVDaGFuZ2Upe1xyXG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xyXG4gICAgICBpZihjb2x1bW4ub25DaGFuZ2Upe1xyXG4gICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbGVuZGVyUHJldmlvdXNWYWx1ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1c091dEV2ZW50KGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2NvbHVtbl0sIHJvdyk7XHJcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XHJcbiAgICAgIHRoaXMuY2FsZW5kZXJDaGFuZ2VFdmVudChjb2x1bW4sIHJvdyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29sdW1uLm9uRm9jdXNPdXQpIHtcclxuICAgICAgY29sdW1uLm9uRm9jdXNPdXQocm93KTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGNvbHVtbi5vblJldHVybiAmJlxyXG4gICAgICBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbHVtbi5vblJldHVybihyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RmlsdGVyRm9jdXNPdXQoY29sOiBhbnksIGZpbHRlcj86IGFueSwgZXZlbnQ/OiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZEZpbHRlck9iaiA9IHsgY29sdW1uOiBjb2wsIGZpbHRlcjogZmlsdGVyLCBldmVudDogZXZlbnQgfTtcclxuICAgIGNvbnN0IG5ld0NvbHVtbjogYW55ID0geyAuLi5jb2wgfTtcclxuICAgIC8vY2hhbmdlIGZpbHRlciBjYWxlbmRlciBmb3JtYXRcclxuICAgIGlmIChuZXdDb2x1bW4udHlwZSA9PT0gJ2RhdGUnICYmIG5ld0NvbHVtbi52YWx1ZSkge1xyXG4gICAgICBuZXdDb2x1bW4udmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICBjb2wudmFsdWUudG9TdHJpbmcoKS50cmltKCksXHJcbiAgICAgICAgJ3l5eXktTU0tZGQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPYmoobmV3Q29sdW1uKTtcclxuICAgICAgfSxcclxuICAgICAgbmV3Q29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgPyAyNTAgOiAwXHJcbiAgICApO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcclxuICB9XHJcblxyXG4gIGZpbHRlck9iaihjb2w6IGFueSkge1xyXG4gICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICBmaWVsZDogY29sLmZpZWxkLFxyXG4gICAgICBtYXRjaE1vZGU6IGNvbC5tYXRjaE1vZGUgPyBjb2wubWF0Y2hNb2RlIDogJ3N0YXJ0c1dpdGgnLFxyXG4gICAgICBvcGVyYXRvcjogY29sLm9wZXJhdG9yID8gY29sLm9wZXJhdG9yIDogJ2FuZCcsXHJcbiAgICAgIHRhYmxlQWxpYXM6IGNvbC50YWJsZUFsaWFzID8gY29sLnRhYmxlQWxpYXMgOiAnJyxcclxuICAgICAgdmFsdWU6IGNvbC52YWx1ZSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5wdXNoKG9iaik7XHJcbiAgfVxyXG5cclxuICBhcHBseUVudGVyRXZlbnQoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgPSB0cnVlO1xyXG4gICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xyXG4gICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcclxuICAgIHRoaXMuZmlsdGVyT2JqKGNvbHVtbik7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeSh0cnVlKSk7XHJcbiAgICBpZiAoY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09IHRoaXMuZHJvcERvd25GaWx0ZXI/LmNvbHVtbj8uZmlsdGVyPy50eXBlKSB7XHJcbiAgICAgIHRoaXMuZHJvcERvd25GaWx0ZXIuZmlsdGVyKHRoaXMuZHJvcERvd25GaWx0ZXIuZXZlbnQudGFyZ2V0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbHRlcihldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTnVsbENhbGVuZGFyKGNvbHVtbjogSUdyaWRDb2x1bW4sIGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XHJcbiAgICBpZiAoY29sdW1uLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcclxuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmFja3NwYWNlRXZlbnQoZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGlmIChcclxuICAgICAgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJlxyXG4gICAgICAoY29sdW1uLnZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMSB8fFxyXG4gICAgICAgIGNvbHVtbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gJycgfHxcclxuICAgICAgICBjb2x1bW4udmFsdWUgPT09IG51bGwpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgY29sdW1uLnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbjogYW55KSB7XHJcbiAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgYXJyID0gWy4uLnRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5XTtcclxuICAgICAgbGV0IGluZGV4ID0gYXJyLmZpbmRJbmRleCgoaSkgPT4gaS5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcclxuICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gYXJyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUmVtb3ZpbmcgSGVhZGVyIEZpbHRlciBWYWx1ZSB1c2luZyBCYWNrc3BhY2Uga2V5IEV2ZW50IG9yIERlbGV0ZSBrZXkgRXZlbnQuXHJcbiAgcmVtb3ZpbmdGaWx0ZXJzKGV2ZW50OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcclxuICAgIGlmIChcclxuICAgICAgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZXZlbnQua2V5ID09PSAnRGVsZXRlJykgJiZcclxuICAgICAgY29sdW1uLnZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIGxldCBzZWFyY2hGaWx0ZXJzO1xyXG4gICAgICBpZighdGhpcy5zb2Z0Q2FjaGluZyl7XHJcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHV0aWxpdGllcy5jdXJyZW50VXJsKCkpIGFzIGFueSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t1dGlsaXRpZXMuY3VycmVudFVybCgpXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VhcmNoRmlsdGVycyAmJiBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMpIHtcclxuICAgICAgICBpZiAoc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCBpbmRleCA9IHNlYXJjaEZpbHRlcnMuZmlsdGVycy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHguZmllbGQgPT09IGNvbHVtbi5maWVsZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgaWYgKHNlYXJjaEZpbHRlcnMuZmlsdGVycy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgaWYoIXRoaXMuc29mdENhY2hpbmcpe1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHV0aWxpdGllcy5jdXJyZW50VXJsKCksSlNPTi5zdHJpbmdpZnkoc2VhcmNoRmlsdGVycykpO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3V0aWxpdGllcy5jdXJyZW50VXJsKCldID0gc2VhcmNoRmlsdGVycztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEFkZCBDbGljayBCdXR0b24gRXZlbnQgb24gR3JpZC5cclxuICBvbkNsaWNrQnV0dG9uKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgdGhpcy5vcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdyk7XHJcbiAgfVxyXG5cclxuICAvLyBJbnZva2Ugb25DbGljayBFdmVudC5cclxuICBvbkNsaWNrRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgIHRoaXMuY2FsZW5kZXJQcmV2aW91c1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAhcm93W2NvbHVtbi5maWVsZF0gJiZcclxuICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmXHJcbiAgICAgIChjb2x1bW4uc2hvd1RpbWUgfHwgY29sdW1uLnRpbWVPbmx5KSAmJlxyXG4gICAgICBjb2x1bW4ubWludXRlc0ludGVydmFsXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5kZWZhdWx0RGF0ZSA9IG5ldyBEYXRlKHV0aWxpdGllcy5zZXRNaW51dGVzSW50ZXJ2YWwobmV3IERhdGUoKSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ub25DbGljaykge1xyXG4gICAgICBjb2x1bW4ub25DbGljayhyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc2V0IHRoZSBzZWxlY3QgdmFsdWUgb2YgbXVsdGktc2VsZWN0XHJcbiAgc2hvd09wdGlvbihjb2x1bW4sIHJvdyl7XHJcbiAgICBpZihyb3dbY29sdW1uLmZpZWxkXSl7XHJcbiAgICAgIGlmKHR5cGVvZihyb3dbY29sdW1uLmZpZWxkXSkgPT09IFwic3RyaW5nXCIgJiYgIXJvd1tjb2x1bW4uZmllbGRdLmluY2x1ZGVzKCcsJykpe1xyXG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gW3Jvd1tjb2x1bW4uZmllbGRdXTtcclxuICAgICB9IGVsc2UgaWYocm93W2NvbHVtbi5maWVsZF0uaW5jbHVkZXMoJywnKSl7XHJcbiAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdLnNwbGl0KCcsJyk7XHJcbiAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGVhclZhbHVlKGNvbHVtbiwgcm93KXtcclxuICAgIGlmKGNvbHVtbj8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmICFyb3dbY29sdW1uLmZpZWxkXSl7XHJcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEludm9rZSBvbkNoYW5nZSBFdmVudFxyXG4gIG9uQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICAvLyBzZXQgZHJvcGRvd24gZGlzcGxheUZpZWxkIHZhbHVlIGJhc2Ugb24gb3B0aW9uTGFiZWwgJiBvcHRpb25WYWx1ZS5cclxuICAgIHRoaXMuZGlzcGxheUZpZWxkRHJvcGRvd25WYWx1ZShjb2x1bW4sIHJvdyk7XHJcbiAgICB0aGlzLm9uQ2xlYXJWYWx1ZShjb2x1bW4sIHJvdyk7XHJcbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xyXG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xyXG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrQm94Q2hhbmdlRXZlbnQoZXZlbnQ6YW55LGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdyl7XHJcbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXHJcbiAgZGlzcGxheUZpZWxkRHJvcGRvd25WYWx1ZShjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIGlmIChcclxuICAgICAgY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcclxuICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCAmJlxyXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkPy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgY29uc3Qga2V5OiBhbnkgPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKFxyXG4gICAgICAgIChyb3dJbmZvKSA9PlxyXG4gICAgICAgICAgcm93SW5mbz8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZFZhbHVlID0gY29sdW1uLmRhdGEuZmluZChcclxuICAgICAgICAocmVjb3JkOiBhbnkpID0+XHJcbiAgICAgICAgICByZWNvcmRbY29sdW1uLm9wdGlvblZhbHVlXT8udG9TdHJpbmcoKSA9PT1cclxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChrZXkgJiYgZGlzcGxheUZpZWxkVmFsdWUpIHtcclxuICAgICAgICByb3dba2V5XSA9IGRpc3BsYXlGaWVsZFZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEFkZCBhdXRvU2VhcmNoIG9uIEdyaWQuXHJcbiAgYXV0b1NlYXJjaChldmVudDogYW55LCBjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIGlmIChldmVudCAmJiBjb2x1bW4gJiYgcm93KSB7XHJcbiAgICAgIGNvbHVtbi5vblJldHVybihldmVudC5xdWVyeSwgY29sdW1uLCByb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gUmVtb3ZlIEZpbHRlclZhbHVlc1xyXG4gIGNsZWFyZ3JpZEZpbHRlcnNWYWx1ZSgpIHtcclxuICAgIGNvbnN0IGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ2NsZWFyR2xvYmFsRmlsdGVyQnRuJ1xyXG4gICAgKTtcclxuICAgIGlmIChnbG9iYWxGaWx0ZXJDbGVhclZhbHVlQnRuKSB7XHJcbiAgICAgIGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4uY2xpY2soKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xyXG4gICAgICAgIGNvbC52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJPYmooY29sKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0QWxsUm93c0F0T25jZSgpIHtcclxuICAgIGlmKHRoaXMuZWRpdFJvd1Blcm1pc3Npb24pe1xyXG4gICAgaWYgKHRoaXMuZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cygnZWRpdFJvdycpKSB7XHJcbiAgICAgIGlmKHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNvbWUoKGNvbHVtbik9PiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgKGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkKSkpe1xyXG4gICAgICAgIHRoaXMuZWRpdEFsbFJlY29yZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5oaWRlRWRpdEFsbFJvd3NCdG4gPSBmYWxzZTtcclxuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICB9XHJcblxyXG4gIHNhdmVBbGxSb3dzQXRPbmNlKCkge1xyXG4gICAgdGhpcy5nZXRDbGFzc0ZvckVkaXRBbGxSb3dzKCdzYXZlUm93Jyk7XHJcbiAgfVxyXG5cclxuICAvLyByZXNldCB0aGUgZ3JpZCByb3dzVmFsdWUgdG8gb3JpZ25hbCB2YWx1ZXNcclxuICBjYW5jZWxBbGxSb3dzQXRPbmNlKCkge1xyXG4gICAgdGhpcy5yb3dzRGF0YSA9IFsuLi50aGlzLnJvd3NEYXRhQ29weV07XHJcbiAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnM/LmZvckVhY2goKGNvbHVtbik9PntcclxuICAgICAgaWYoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKXtcclxuICAgICAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpPT57XHJcbiAgICAgICAgICBpZihyb3dbY29sdW1uLmZpZWxkXSl7XHJcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPSBuZXcgRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkNhbmNlbEFsbFJvd3MuZW1pdCh0aGlzLnJvd3NEYXRhKTtcclxuICB9XHJcblxyXG4gIGdldENsYXNzRm9yRWRpdEFsbFJvd3MoY2xhc3NOYW1lOiBzdHJpbmcgPSAnJykge1xyXG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGNvbnN0IGdldEJ0bnM6IGFueSA9XHJcbiAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xyXG4gICAgaWYgKGdldEJ0bnMgJiYgZ2V0QnRucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgICBpZiAoY2xhc3NOYW1lID09PSAnc2F2ZVJvdycpIHtcclxuICAgICAgICB0aGlzLmVkaXRBbGxSZWNvcmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHJlY29yZHMkID0gW107XHJcbiAgICAgICAgc2V0VGltZW91dCgoKT0+e1xyXG4gICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBnZXRCdG5zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd1NhdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7ICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICBpdGVtLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZShpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJlY29yZHMkLnB1c2gocm93U2F2ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBQcm9taXNlLmFsbChyZWNvcmRzJCkudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJBQUFBXCIpO1xyXG4gICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5zYXZlUmVjb3JkQXJyYXkpO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheSA9IFtdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSwyMClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGdldEJ0bnMpIHtcclxuICAgICAgICAgIGlmKGNsYXNzTmFtZSA9PSAnY2FuY2VsUm93Jyl7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcclxuICAgICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdWNjZXNzO1xyXG4gIH1cclxuXHJcbiAgLy9Gb2N1c2VkIGNhbGVuZGVyIGlucHV0IG9uIHNlbGVjdCBkYXRlXHJcbiAgc2VsZWN0RGF0ZShjb2x1bW46IGFueSkge1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkKT8uZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIC8vYXBwbHkgZmlsdGVyIG9uIGdyaWQgd2hlbiBzZWFyY2ggYnRuIGNsaWNrZWRcclxuICBhcHBseUdpcmRGaWx0ZXJCdG4oKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkRmlsdGVyT2JqICYmIE9iamVjdC5rZXlzKHRoaXMuZ3JpZEZpbHRlck9iaikubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmFwcGx5RW50ZXJFdmVudChcclxuICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouZmlsdGVyLFxyXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5ldmVudCxcclxuICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouY29sdW1uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpbnZva2UgbXVsdGlTZWxlY3Rpb24gY2xpY2sgZXZlbnRcclxuICBtdWx0aUNoZWNrQm94T25jbGljayhyb3dJbmZvOiBhbnkpIHtcclxuICAgIGlmIChyb3dJbmZvKSB7XHJcbiAgICAgIHRoaXMub25NdWx0aVNlbGVjdGlvbkNoYW5nZS5lbWl0KHJvd0luZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgZmlsdGVyKGV2ZW50LnRhcmdldCk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsIGV2ZW50KTtcclxuICAgIHRoaXMuZHJvcERvd25GaWx0ZXIgPSB7IGZpbHRlcjogZmlsdGVyLCBldmVudDogZXZlbnQsIGNvbHVtbjogY29sdW1uIH07XHJcbiAgICBpZiAoY29sdW1uLmFsbG93U2VhcmNoICE9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXIsIGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvb2t1cENsZWFyVmFsdWUoY29sdW1uOiBhbnksIHJvdz86IGFueSkge1xyXG4gICAgaWYgKHJvdykge1xyXG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29sdW1uLnZhbHVlID0gJyc7XHJcbiAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcclxuICAgIH1cclxuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XHJcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XHJcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gaW52b2tlIHdoZW4gY2xpY2sgaGVhZGVyIGNoZWNrYm94IGZpbHRlclxyXG4gIGNsaWNrQ2hlY2tCb3hGaWx0ZXIoY29sdW1uOiBJR3JpZENvbHVtbikge1xyXG4gICAgaWYgKHRoaXMuZWRpdEFsbFJlY29yZCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiBcclxuICAgICAgICAgICYmXHJcbiAgICAgICAgICBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBjb2x1bW4uZmlsdGVyaW5nICE9IGZhbHNlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi52YWx1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy90aGlzLm9uQ2hlY2tCb3hGaWx0ZXJDbGljay5lbWl0KGNvbHVtbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vdGhpcy5vbkNoZWNrQm94RmlsdGVyQ2xpY2suZW1pdChjb2x1bW4pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoZWNrQm94RmlsdGVyQ2xpY2suZW1pdChjb2x1bW4pO1xyXG4gIH1cclxuICAgIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXHJcbiAgICBzZXRIZWFkZXJDaGVja0JveFZhbHVlKHZhbHVlOiBhbnkpe1xyXG4gICAgICB0aGlzLmlzSW5jbHVkZWRBbGxDb2x1bW5zLmVtaXQodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgLy8gc2V0IGNhbGVuZGVyIDIgT3IgNCBkaWdpdCB5ZWFyIGZvcm1hdFxyXG4gIGNhbGVuZGVySW5wdXRWYWx1ZShjb2x1bW46IGFueSwgcm93OiBhbnkpe1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjb2x1bW4uZmllbGQgKyByb3dbdGhpcy5kYXRhS2V5XSlbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHllYXIgPSB2YWw/LnRhcmdldD8udmFsdWU/LnRvU3RyaW5nKCk/LnNwbGl0KCcvJylbMl07XHJcbiAgICAgIGlmKCB5ZWFyICYmIHllYXIubGVuZ3RoID09PSA0KXtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0PSAnbW0vZGQveXknO1xyXG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKT8udG9Mb2NhbGVEYXRlU3RyaW5nKFwiZW4tVVNcIik7XHJcbiAgICAgIH0gZWxzZSBpZih5ZWFyICYmIHllYXIubGVuZ3RoKXtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxuIl19
|
|
2221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUVqQixRQUFRLEVBQ1IsVUFBVSxFQUNWLFlBQVksRUFHWixTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixhQUFhLEdBQ2QsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQVNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2Ysa0JBQWtCLEVBRWxCLGNBQWMsRUFFZCxlQUFlLEdBRWhCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEtBQUssU0FBUyxNQUFNLHFD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QUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9wdGlvbmFsLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxuICBIb3N0TGlzdGVuZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7XHJcbiAgRHluYW1pY0RpYWxvZ1JlZixcclxuICBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gIERpYWxvZ1NlcnZpY2UsXHJcbn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBJR3JpZENvbHVtbixcclxuICBJR3JpZFNvcnQsXHJcbiAgSUdyaWRTZXJ2ZXJTaWRlRXZlbnQsXHJcbiAgSUdyaWRQYWdpbmF0aW9uRXZlbnQsXHJcbiAgSUdsb2JhbEZpbHRlcixcclxuICBJR3JpZEZpbHRlcixcclxuICBJR3JpZENvbHVtbkFjdGlvbixcclxuICBJR3JpZFJvd0FjdGlvbixcclxuICBFR3JpZFNlbGVjdGlvblR5cGUsXHJcbiAgRUdyaWRDb2x1bW5UeXBlLFxyXG4gIEVHcmlkU29ydERpcmVjdGlvbixcclxuICBJR3JpZERhdGFFeHBvcnQsXHJcbiAgRUdyaWRBZ2dyZWdhdGUsXHJcbiAgSUxvb2t1cFZhbHVlLFxyXG4gIEVHcmlkRm9ybWF0VHlwZSxcclxuICBJR3JpZEZpbHRlckluZm8sXHJcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xyXG5pbXBvcnQgeyBFUGVybWlzc2lvblR5cGUsIElQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3VzZXItaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSWZyYW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vaWZyYW1lL2lmcmFtZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBXb3JrU2hlZXQgfSBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgRGF0ZVBpcGUsIERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgRUZvcm1hdFR5cGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NlLWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2dyaWRSb3cnKSBncmlkUm93OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcbiAgQE91dHB1dCgpIGlubGluZVJvd0NhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBzZXQgYWN0aXZlVGVzdE1vZGUodmFsOiBhbnkpIHtcclxuICAgIGlmICh2YWwgPT09IHRydWUpIHtcclxuICAgICAgZGVidWdnZXI7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlcnZlckZpbHRlcnM6IElHcmlkU2VydmVyU2lkZUV2ZW50ID0ge307XHJcbiAgcm93c0RhdGE6IGFueVtdO1xyXG4gIHJvd3NEYXRhQ29weTogYW55W10gPSBbXTtcclxuICByb2xlczogc3RyaW5nW10gPSBbXTtcclxuICBpc0NvbHVtbkhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHJvd0NsaWNrRGF0YTogSUdyaWRDb2x1bW47XHJcbiAgY29tcG9uZW50VGFibGVSZWY6IGFueTtcclxuICBsb29rdXBPYmplY3Q6IElMb29rdXBWYWx1ZTtcclxuICBsb29rdXBGaWx0ZXJPYmo6IGFueTtcclxuICBsb29rdXBCbHVyOiBib29sZWFuID0gdHJ1ZTtcclxuICBnbG9iYWxGaWx0ZXJzQXJyYXk6IGFueVtdID0gW107XHJcbiAgY2hlY2tBY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYWxlbmRlclByZXZpb3VzVmFsdWU6IHN0cmluZyA9ICcnO1xyXG4gIGdyaWRGaWx0ZXJPYmo6IElHcmlkRmlsdGVySW5mbztcclxuICBkZWZhdWx0RGF0ZTogYW55O1xyXG4gIGRyb3BEb3duRmlsdGVyOiBhbnkgPSB7fTtcclxuICBkcm9wZG93bklucHV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2F2ZUFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVkaXRBbGxSZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYW5jZWxBbGxSZWNvcmRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWRkTmV3Um93Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbkVkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2F2ZVJlY29yZEFycmF5OiBhbnlbXSA9IFtdO1xyXG4gIGRpc2FibGVkU2F2ZUJ0bjpib29sZWFuID0gZmFsc2U7XHJcbiAgc2V0RGlhbG9nRGF0YTpib29sZWFuID0gdHJ1ZTtcclxuICBzZXREaWFsb2dGaWVsZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIGVkaXRNb2RlQ2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgZWRpdE1vZGV1bkNrZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYWxlbmRhckZvcm1hdDogc3RyaW5nID0gJ21tL2RkL3knO1xyXG4gIHNldERyb3Bkb3duRmlsdGVyOmJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBhcHBseSBjaGVja2VkL3VuQ2hlY2tlZCBwcm9wIGZvciBDaGVja0JveCBvZiB0aGUgVGFibGVcclxuICBjaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuICB1bkNoZWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoaWRlRWRpdEFsbFJvd3NCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvL2FwcGx5IEFkZC9EZWxldGUvRWRpdCBwcm9wIGZvciB0aGUgZ3JpZCBwZXJtaXNzaW9uXHJcbiAgYWRkUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgZGVsZXRlUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgZWRpdFJvd1Blcm1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBBcHBseSBwcm9wIHNldEFnZ3JlZ2F0ZUZvb3RlciBvbiBGb290ZXIgb2YgdGhlIFRhYmxlIGZvciBhZ2dyZWdhdGUuXHJcbiAgc2V0QWdncmVnYXRlRm9vdGVyOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IEhpZGUgQWdncmVnYXRlIEZvb3RlciBXaGVuIEFnZ3JlZ2F0ZSBub3QgQXBwbHkgb24gVGFibGUuXHJcbiAgYWdncmVnYXRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIE1haW50YWlucyBwcmV2aW91cyBzdGF0ZSBvZiByb3dzIGJlaW5nIGVkaXRlZFxyXG4gIGVkaXRSb3dzUmVjb3JkczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cclxuICAvLyBNYWludGFpbnMgcmVjb3JkIG9mIHJvd3MgYmVpbmcgZWRpdGVkXHJcbiAgZWRpdGluZ1Jvd0tleXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZTogVGFibGU7XHJcblxyXG4gIC8vIFNlbGVjdHMgaXRlbXMgaW4gdGhlIGdyaWQgYmFzZWQgb24gcGFzc2VkIG9uIGRhdGFcclxuICBASW5wdXQoKSBzZWxlY3RlZFJvd3M6IGFueSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBhZGREYXRhS2V5VmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XHJcblxyXG4gIHNvcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBTdG9yZXMgc2VsZWN0ZWQgY29sdW1uc1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xyXG5cclxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgaG9yaXpvbnRhbCBTY3JvbGwgb24gVGFibGUuXHJcbiAgQElucHV0KCkgaG9yaXpvbnRhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBQcm9wIHRvIGhhbmRsZSBsb2FkZXIgb2YgZ3JpZFxyXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vdGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGhhbmRsZSBzZXJ2ZXIgc2lkZSBldmVudCBieSBkZWZhdWx0IGl0IGlzIHRydWUgd2hlbiBpdCBmYWxzZSBzZXJ2ZXIgc2lkZSBldmVudCB3aWxsIG5vdCBiZSBjYWxsZWRcclxuICBASW5wdXQoKSBhdXRvTG9hZERhdGE6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBCb29sZWFuIHByb3AgdG8gY2hlY2sgd2hlcmUgc2VsZWN0ZWQgaXMgYWxsb3dlZCBvciBub3QuXHJcbiAgQElucHV0KCkgYWxsb3dTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgLy8gU2V0IGNvbHVtbiB3aWR0aCBvZiBzZWxlY3RlZCByb3cuXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uQ29sdW1uV2lkdGg6IHN0cmluZyA9ICc4MHB4JztcclxuICBcclxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgYWRkIHJvdyBidXR0b24uXHJcbiAgQElucHV0KCkgaGlkZU9uUm93QWRkQnRuID0gZmFsc2U7XHJcblxyXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gcGRmLlxyXG4gIEBJbnB1dCgpIGFsbG93RXhwb3J0VG9QZGYgPSBmYWxzZTtcclxuXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IGV4cG9ydCB0byBleGNlbC5cclxuICBASW5wdXQoKSBhbGxvd0V4cG9ydFRvRXhjZWwgPSBmYWxzZTtcclxuICBcclxuICAvLyBCb29sZWFuIHByb3AgdG8gc2V0IHRoZSBhY3Rpb24gY29sdW1uIGFzIGZpcnN0IGNvbHVtbi5cclxuICBASW5wdXQoKSBzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ID0gZmFsc2U7XHJcblxyXG4gIC8vIElmIHRydWUsIGVuYWJsZXMgb3B0aW9ucyB0byBwZXJmb3JtIENSVUQgdXNpbmcgaW5saW5lIHJvdyBmdW5jdGlvbmFsaXR5XHJcbiAgQElucHV0KCkgdXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xyXG5cclxuICAvLyBBcnJheSBvZiByb3cgYWN0aW9uc1xyXG4gIEBJbnB1dCgpIHJvd0FjdGlvbnM6IElHcmlkUm93QWN0aW9uW10gPSBbXTtcclxuXHJcbiAgLy8gU2V0cyBzZWxlY3Rpb24gdHlwZSBpLmU6IHNpbmdsZS9tdWx0aXBsZSBzZWxlY3Rpb25cclxuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiBFR3JpZFNlbGVjdGlvblR5cGUgPSBFR3JpZFNlbGVjdGlvblR5cGUuU0lOR0xFO1xyXG5cclxuICAvLyBVbmlxdWUga2V5IHJlcXVpcmVzIGZvciBidWlsdC1pbiByb3cgc2VsZWN0aW9uIG9mIHByaW1lTmcgZ3JpZFxyXG4gIEBJbnB1dCgpIGRhdGFLZXk6IHN0cmluZyA9ICdpZCc7XHJcblxyXG4gIC8vIEZsYWcgZm9yIGNsZWFyIGZpbHRlciB2YWx1ZXMgYnV0dG9uXHJcbiAgQElucHV0KCkgY2xlYXJHcmlkRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgLy8gRmxhZyBmb3Igc2VhcmNoIGZpbHRlciB2YWx1ZXMgYnV0dG9uXHJcbiAgQElucHV0KCkgc2VhcmNoR3JpZEZpbHRlciA9IHRydWU7XHJcblxyXG4gIC8vIEZsYWcgaW4gY2FzZSB0YWJsZSBpcyBzY3JvbGxhYmxlXHJcbiAgQElucHV0KCkgc2Nyb2xsYWJsZSA9IHRydWU7XHJcblxyXG4gIC8vIFNldHMgc2Nyb2xsIGhlaWdodCBmb3IgdGhlIHRhYmxlXHJcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJzY4MHB4JztcclxuXHJcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IHRvIHdyYXAgb3IgdW5XcmFwIHRoZSBncmlkLlxyXG4gIEBJbnB1dCgpIHdvcmRXcmFwOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIG5ld0dyaWRSb3c6IGFueSA9IHt9O1xyXG5cclxuICBASW5wdXQoKSBmaWx0ZXJpbmcgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBoaWRlRmlsdGVyT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBTZXRzIHBhZ2VuYXRpb24gZm9yIHRoZSB0YWJsZSBEYXRhLlxyXG4gIEBJbnB1dCgpIHNldFBhZ2luYXRpb25MZW5ndGg6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcclxuXHJcbiAgLy8gc2V0IHRoZSBjaGFuZ2UgaW4gdGhlIHJvd0RhdGFcclxuICBAT3V0cHV0KCkgcm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3BzIHRoZSBsb2FkZXIgYW5kIHNldHMgdGhlIGRhdGEgdG8gZ3JpZFxyXG4gICAqIENsZWFycyB0aGUgZWRpdGluZyBzdGFja1xyXG4gICAqIFNjcm9sbHMgdG8gc2VsZWN0ZWQgZWxlbWVudCBpZiBzZWxlY3Rpb24gZm91bmRcclxuICAgKi9cclxuICBASW5wdXQoKSBzZXQgcm93cyhkYXRhOiBhbnlbXSkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKCF0aGlzLmRhdGFLZXkpIHtcclxuICAgICAgICB0aGlzLmRhdGFLZXkgPSAnaWQnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMoZGF0YSwgdGhpcy5kYXRhS2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm93c0RhdGEgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDbGVhbmluZyB0aGUgZWRpdGluZyBzdGFja1xyXG4gICAgdGhpcy5lZGl0aW5nUm93S2V5cyA9IHt9O1xyXG4gICAgdGhpcy5lZGl0Um93c1JlY29yZHMgPSB7fTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRSb3dzKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50UmVmID0gdGhpcy5ncmlkUm93LmZpbmQoXHJcbiAgICAgICAgICAoeCkgPT4geC5uYXRpdmVFbGVtZW50LmlkID09PSB0aGlzLnNlbGVjdGVkUm93c1t0aGlzLmRhdGFLZXldXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYgJiZcclxuICAgICAgICAgIChcclxuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlUm93RWxlbWVudFxyXG4gICAgICAgICAgKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcclxuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHt9LCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vbWFuaXB1bGF0ZSBjaGVja2JveCBzdHJpbmcgdmFsdWUgdG8gdHJ1ZSBhbmQgZmFsc2UuXHJcbiAgICB0aGlzLmNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8vIEdsb2JhbCBmaWx0ZXIgc2VydmVyIHJlcXVlc3RcclxuICBASW5wdXQoKSBzZXQgZ2xvYmFsRmlsdGVyRGF0YShnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10pIHtcclxuICAgIHRoaXMuZ2xvYmFsRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2VcclxuICAgICAgLnByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnMpXHJcbiAgICAgID8uZmlsdGVyKCh4KSA9PiB4Py52YWx1ZSAhPT0gZmFsc2UpO1xyXG4gICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcclxuICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnNcclxuICAgICAgPyB0aGlzLnNlcnZlckZpbHRlcnMuZmlsdGVycy5jb25jYXQodGhpcy5nbG9iYWxEYXRhKVxyXG4gICAgICA6IHRoaXMuZ2xvYmFsRGF0YTtcclxuXHJcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICdmYWxzZScpIHtcclxuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheT8ubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuY29uY2F0KFsuLi5zZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVyc10pXHJcbiAgICAgICAgOiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheTtcclxuICAgIH1cclxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgIGdsb2JhbEZpbHRlcnMuZm9yRWFjaCgoZ2xvYmFsRmlsdGVyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZm9yRWFjaCgoZmlsdGVyQXJyYXkpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZmlsdGVyQXJyYXkuZmllbGQgPT09IGdsb2JhbEZpbHRlci5maWVsZCAmJlxyXG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgJiZcclxuICAgICAgICAgICAgZmlsdGVyQXJyYXkudmFsdWUgIT09IGdsb2JhbEZpbHRlci52YWx1ZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlID0gZ2xvYmFsRmlsdGVyLnZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAoaW5kZXgpID0+IGluZGV4LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiYgIWdsb2JhbEZpbHRlci52YWx1ZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChmaW5kSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnNwbGljZShmaW5kSW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZih0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEpe1xyXG4gICAgICAgICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ICYmIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMuY29uY2F0KFxyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBBcnJheS5mcm9tKFxyXG4gICAgICAgICAgbmV3IFNldChcclxuICAgICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNcclxuICAgICAgICAgICAgICAucmV2ZXJzZSgpXHJcbiAgICAgICAgICAgICAgLm1hcCgoZmlsdGVyOiBhbnkpID0+IGZpbHRlci5maWVsZClcclxuICAgICAgICAgIClcclxuICAgICAgICApLm1hcCgoZmllbGQpID0+IHtcclxuICAgICAgICAgIHJldHVybiBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5maW5kKCh4OiBhbnkpID0+IHguZmllbGQgPT09IGZpZWxkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbHRlcihcclxuICAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgICAgb2JqPy52YWx1ZSAmJiBvYmoudmFsdWU/LnRvU3RyaW5nKCk/Lmxlbmd0aCA+IDAgJiYgb2JqLmZpZWxkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAvLyBzZXR0aW5nIHBhZ2luYXRpb24gcGFnZSBhcyBmaXJzdFxyXG4gICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2UgPSAxO1xyXG4gICAgICAgICAgaWYodGhpcy5kZWZhdWx0Um93cyAmJiB0aGlzLnBhZ2luYXRpb24peyBcclxuICAgICAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2VTaXplID0gdGhpcy5kZWZhdWx0Um93cztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgaWYodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50KXtcclxuICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpXHJcbiAgICAgICAgIH1cclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdhcHBseUZpbHRlcicpO1xyXG4gICAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgbnVtYmVyIFVJXHJcbiAgICAgICAgICB0aGlzLnRhYmxlLl9maXJzdCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSW5wdXQgZGVjb3JhdG9yIHRvIHJlY2VpdmUgY29sdW1ucyB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXHJcbiAgQElucHV0KCkgY29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IFtdO1xyXG5cclxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSB0b2dnbGluZyBvZiBjb2x1bW5zXHJcbiAgQElucHV0KCkgYWxsb3dDb2x1bW5Ub2dnbGUgPSBmYWxzZTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoaWRlIGZpbHRlcmluZyBvZiBjb2x1bW5zXHJcbiAgQElucHV0KCkgaGlkZUZpbHRlciA9IGZhbHNlO1xyXG5cclxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBsb29rdXAgZmlsdGVyc1xyXG4gIEBJbnB1dCgpIGxvb2t1cEZpbHRlcnMgPSBmYWxzZTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgcGFnaW5hdGlvblxyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgc2hvdyBDdXJyZW50UGFnZSBSZXBvcnRcclxuICBASW5wdXQoKSBzaG93Q3VycmVudFBhZ2VSZXBvcnQgPSBmYWxzZTtcclxuXHJcbiAgLy8gRGlzcGxheXMgdG90YWwgbnVtYmVyIG9mIHJlY29yZHNcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHMgPSAwO1xyXG5cclxuICBASW5wdXQoKSBzaG93Y29uZmlybURpYWxvZzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFNldHMgbnVtYmVyIG9mIHJvd3MgdG8gYmUgc2hvd24gdGhlIGdyaWRcclxuICBASW5wdXQoKSBkZWZhdWx0Um93czogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKSBjb2x1bW5BY3Rpb25zOiBJR3JpZENvbHVtbkFjdGlvbltdID0gW107XHJcblxyXG4gIC8vIERlY2lkZXMgdGhlIGdyaWQncyBiZWhhdmlvciBlaXRoZXIgZm9yIGNsaWVudCBzaWRlIG9yIHNlcnZlciBzaWRlIGV2ZW50c1xyXG4gIEBJbnB1dCgpIHVzZVNlcnZlclNpZGVFdmVudHMgPSBmYWxzZTtcclxuXHJcbiAgLy8gT3V0cHV0IGV2ZW50IHRvIGhhbmRsZSByb3cgY2xpY2tcclxuICBAT3V0cHV0KCkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIE91dHB1dCBldmVudCBlbWl0IHdoZW4gY2xpY2sgb24gZ3JpZCBjaGVja2JveCBmaWx0ZXJcclxuICBAT3V0cHV0KCkgb25DaGVja0JveEZpbHRlckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55Pj0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBDaGVja0JveFxyXG4gIEBPdXRwdXQoKSBvblJvd0NoZWNrQm94OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gc29ydCBjaGFuZ2VcclxuICBAT3V0cHV0KCkgb25Tb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gZmlsdGVyIGNoYW5nZVxyXG4gIEBPdXRwdXQoKSBvbkZpbHRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIE91dHB1dCBldmVudCB0byBpbnZva2UgdGhlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XHJcbiAgQE91dHB1dCgpIG9uTXVsdGlTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBDYWxscyB3aGVuZXZlciBhIGdyaWQgYW5kIGdsb2JhbEZpbHRlcnMgY2FsbGVkXHJcbiAgQE91dHB1dCgpIG9uQXBwbHlGaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxyXG4gIEBPdXRwdXQoKSBpc0luY2x1ZGVkQWxsQ29sdW1uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgbGF6eSBldmVudCBpcyBkaXNwYXRjaGVkXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJR3JpZFNlcnZlclNpZGVFdmVudD4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBPdXRwdXQgZXZlbnQgdG8gdHJpZ2dlciBvbiBwYWdpbmF0aW9uXHJcbiAgQE91dHB1dCgpXHJcbiAgb25QYWdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUdyaWRQYWdpbmF0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBlZGl0IHJvd1xyXG4gIEBPdXRwdXQoKSBvblJvd1VwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgY2FuY2VsIGFsbCByb3dzXHJcbiAgQE91dHB1dCgpIG9uQ2FuY2VsQWxsUm93cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy8gRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gZGVsZXRlIHJvd1xyXG4gIEBPdXRwdXQoKSBvblJvd0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQgcm93XHJcbiAgQE91dHB1dCgpIG9uUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvL0Rpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGFkZCwgdXBkYXRlIGFuZCBkZWxldGUgcm93XHJcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0FjdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIHNldCBwcm9wZXJ0eSBhbGxvd0NhY2hpbmcgZm9yIExvY2FsU3RvcmFnZVxyXG4gIEBJbnB1dCgpIGFsbG93Q2FjaGluZzogYm9vbGVhbjtcclxuXHJcbiAgLy8gc2V0IHByb3BlcnR5IHNvZnRDYWNoaW5nIGZvciBzZXR0aW5nIHRoZSB2YWx1ZXMgb2YgZ3JpZEZpbHRlclxyXG4gIEBJbnB1dCgpIHNvZnRDYWNoaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBcclxuICBASW5wdXQoKSBlZGl0QWxsUm93czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBzZXQgdGhlIHJvdyBXaGVuIEVkaXQgdGhlIHJvdyBvbiBHcmlkXHJcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8vIHNldCB0aGUgcm93IFdoZW4gYWRkaW5nIHRoZSBuZXcgUm93IG9uIEdyaWRcclxuICBAT3V0cHV0KCkgb25HcmlkUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBpc0dyaWRIaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IEdyaWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHB1YmxpYyBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXHJcbiAgICBwcml2YXRlIHBhZ2VMb2dnZXJTZXJ2aWNlOiBQYWdlTG9nZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHVibGljIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxyXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIHJlZjogRHluYW1pY0RpYWxvZ1JlZlxyXG4gICkge31cclxuXHJcbiAgZ2V0IHNlbGVjdGVkQ29sdW1ucygpOiBJR3JpZENvbHVtbltdIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZENvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBzZXQgc2VsZWN0ZWRDb2x1bW5zKHZhbDogSUdyaWRDb2x1bW5bXSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT4gdmFsLmluY2x1ZGVzKGNvbCkpO1xyXG4gIH1cclxuXHJcbiAgLy8gYnJvd3NlciBjbG9zZSBldmVudFxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpiZWZvcmV1bmxvYWQnLCBbJyRldmVudCddKVxyXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6YW55KSB7XHJcbiAgICBpZih0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQpe1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBc3NpZ25tZW50IG9mIHNlbGVjdGVkIGNvbHVtbnMgb24gcGFnZSBsb2FkXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZih0aGlzLmVkaXRBbGxSb3dzKXtcclxuICAgICAgdGhpcy5kaXNhYmxlZFNhdmVCdG4gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZ3JpZCBjb2x1bW5zXHJcbiAgYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKSB7XHJcbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XHJcbiAgICAgIGxldCB0b3RhbEZpZWxkczogbnVtYmVyID0gMDtcclxuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBwZXJtaXNzaW9uczogSVBlcm1pc3Npb25bXSA9IGNvbHVtbi5wZXJtaXNzaW9ucztcclxuICAgICAgICAvLyBpZiAoIXBlcm1pc3Npb25zKSBwZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnM7XHJcbiAgICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHBlcm1pc3Npb25zICYmIHBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goKHBlcm1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24ucm9sZXMgJiYgcGVybWlzc2lvbi5yb2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gICBsZXQgaW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIChpKSA9PiBpLmZpZWxkID09PSBjb2x1bW4uZmllbGRcclxuICAgICAgICAgICAgICAgIC8vICAgKTtcclxuICAgICAgICAgICAgICAgIC8vICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxyXG4gICAgICAgICAgICAgICAgIWhhc1ZhbGlkRWRpdFBlcm1pc3Npb25cclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0b3RhbEZpZWxkcysrO1xyXG5cclxuICAgICAgICBpZiAoY29sdW1uLmhpZGRlbikge1xyXG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuaXNDb2x1bW5IaWRkZW4gPSB0b3RhbEZpZWxkcyA+IDAgJiYgdG90YWxGaWVsZHMgPT09IGhpZGRlbkZpZWxkcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFwcGx5IGdsb2JhbCBwZXJtaXNzaW9ucyBvbiBlbnRpcmUgZ3JpZFxyXG4gIGFwcGx5R3JpZFBlcm1pc3Npb25zKCkge1xyXG4gICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAvLyBjaGVjayBpZiBhbnkgY29sdW1uIGhhcyBhbnkgcGVybWlzc2lvblxyXG4gICAgICBsZXQgaGFzQ29sdW1uUGVybWlzc2lvbnMgPSB0aGlzLmNvbHVtbnM/LnNvbWUoXHJcbiAgICAgICAgKHgpID0+IHg/LnBlcm1pc3Npb25zICYmIHgucGVybWlzc2lvbnMubGVuZ3RoID4gMFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5WSUVXICYmXHJcbiAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy51c2VJbmxpbmVDUlVEID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiAhaGFzQ29sdW1uUGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkVESVQgJiYgIWlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZWRpdFJvd1Blcm1pc3Npb24gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLkRFTEVURSAmJiAhaXNWYWxpZCkge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5BRERST1cgJiYgIWlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vblJvd0FkZC5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMub25Sb3dEZWxldGUub2JzZXJ2ZXJzLmxlbmd0aCA9PSAwKSB0aGlzLmRlbGV0ZVJvd1Blcm1pc3Npb24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dDYWNoaW5nICE9PSBmYWxzZSAmJiB0aGlzLnBhZ2luYXRpb24pIHtcclxuICAgICAgdGhpcy5hbGxvd0NhY2hpbmcgPSB0aGlzLnBhZ2luYXRpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSk7XHJcbiAgICB9XHJcbiAgICAvLyBhZGQgZGVmYXVsdFJvdyBpbiBwYWdpbmF0aW9uIGFycmF5XHJcbiAgICBpZiAoIXRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC5pbmNsdWRlcyh0aGlzLmRlZmF1bHRSb3dzKSkge1xyXG4gICAgICB0aGlzLnNldFBhZ2luYXRpb25MZW5ndGgudW5zaGlmdCh0aGlzLmRlZmF1bHRSb3dzKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGhhc0NvbHVtbnM6IGJvb2xlYW4gPSB0aGlzLmNvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA+IDA7XHJcbiAgICBpZiAoaGFzQ29sdW1ucykge1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldENvbHVtbkZpZWxkcyh0aGlzLmNvbHVtbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm9sZXMgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJSb2xlcygpO1xyXG5cclxuICAgIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcclxuICAgIHRoaXMuYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKTtcclxuXHJcbiAgICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcclxuICAgIHRoaXMuYXBwbHlHcmlkUGVybWlzc2lvbnMoKTtcclxuXHJcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gIXguaGlkZGVuKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIGlmIChoYXNDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmllbGRzKHRoaXMuY29sdW1ucyk7XHJcbiAgICAgIC8vIGNoZWNraW5nIGZpbHRlciBleGlzdCBvciBub3RcclxuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnNvbWUoXHJcbiAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKGZpbHRlciA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLmhpZGVGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBjb252ZXJ0IHN0cmluZyB0aW1lIGludG8gdGhlIGRhdGVcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIGNvbHVtbi50aW1lT25seSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXHJcbiAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykgfHxcclxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGZpbHRlciB2YWx1ZVxyXG4gICAgICAgIGlmIChjb2x1bW4uZmlsdGVyICYmIGNvbHVtbi52YWx1ZSAmJiBjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBhZGQgXCJmbGV4LXNocmluazogMFwiIGZvciBmbGV4LWJhc2lzIFN0eWxlXHJcbiAgICAgICAgaWYgKGNvbHVtbi5zdHlsZSAmJiBjb2x1bW4uc3R5bGUuaW5jbHVkZXMoJ2ZsZXgtYmFzaXMnKSkge1xyXG4gICAgICAgICAgbGV0IHN0eWxlID0gY29sdW1uLnN0eWxlICsgJyAhaW1wb3J0YW50OyBmbGV4LXNocmluazogMCAhaW1wb3J0YW50JztcclxuICAgICAgICAgIGNvbHVtbi5zdHlsZSA9IHN0eWxlLmluY2x1ZGVzKCc7OycpXHJcbiAgICAgICAgICAgID8gc3R5bGUucmVwbGFjZSgnOzsnLCAnOycpXHJcbiAgICAgICAgICAgIDogc3R5bGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cclxuICAgICAgICB0aGlzLnNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uKTtcclxuXHJcbiAgICAgICAgLy9BZ2dyZWdhdGUgc2NlbmFyaW9cclxuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XHJcbiAgICAgICAgaWYoIXRoaXMuc29mdENhY2hpbmcpe1xyXG4gICAgICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSkgYXMgYW55XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLmhpZGVGaWx0ZXIgJiZcclxuICAgICAgICAgIHNlYXJjaEZpbHRlcnMgJiZcclxuICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycyAmJlxyXG4gICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHgudmFsdWUgJiYgeC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgaWYoY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicpe1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlID0gbmV3IERhdGUodGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oeC52YWx1ZSwgJ01NLWRkLVlZJykgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZSA9IHgudmFsdWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29udmVydGluZyBkaXNwbGF5RmllbGQgdG9Mb3dlcmNhc2VcclxuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xyXG4gICAgICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCA9IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IEF1dG9Db21wbGV0ZSBEYXRhXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEgJiZcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGhhdCBjb250YWlucyBjb21tYSBpbnRvIGFycmF5c1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKS5pbmNsdWRlcygnLCcpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cclxuICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgICAgICAgICAgID8ubWFwKCh2YWx1ZTogYW55KSA9PiAoeyBbY29sdW1uLmRpc3BsYXlGaWVsZF06IHZhbHVlIH0pKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qga2V5OiBhbnkgPSBPYmplY3Qua2V5cyhyb3cpLmZpbmQoXHJcbiAgICAgICAgICAgICAgKHgpID0+IHggPT09IGNvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgc2ltcGxlIHN0cmluZyBpbnRvIGFycmF5XHJcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dba2V5XSkgJiYgcm93W2tleV0pIHtcclxuICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZGlzcGxheUZpZWxkXTogcm93W2tleV0gfV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy93aGVuIHdlIGFkZCBhIG5ldyByb3csIGl0IHNldCB0aGUgZGVmYXVsdCB2YWx1ZVxyXG4gICAgICAgIGlmIChjb2x1bW4udmFsdWUgJiYgT2JqZWN0LmtleXModGhpcy5uZXdHcmlkUm93KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyh0aGlzLm5ld0dyaWRSb3cpLmZpbmQoXHJcbiAgICAgICAgICAgICh4KSA9PiB4ID09PSBjb2x1bW4uZmllbGRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoa2V5ICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICB0aGlzLm5ld0dyaWRSb3dba2V5XSA9IGNvbHVtbi52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gU2VhcmNoaW5nIHNjZW5hcmlvXHJcbiAgICAgIGlmIChjaGFuZ2Uucm93cz8uY3VycmVudFZhbHVlICYmIGNoYW5nZS5jb2x1bW5zPy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAvLyBDaGVja3MgZWl0aGVyIGNvbHVtbiB2YWx1ZSBpcyBjaGFuZ2VzIChpLmUuLCBjb2x1bW4gaGlkZGVuIHNjZW5hcmlvKVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGNoYW5nZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZSkudG9Mb3dlckNhc2UoKSAhPT1cclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuY29sdW1ucykudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XHJcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoeCwgaSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXguaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldKSB7XHJcbiAgICAgICAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5wdXNoKHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gW107XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKHgsIGkpID0+IHtcclxuICAgICAgICAgIGlmICgheC5oaWRkZW4pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldKSB7XHJcbiAgICAgICAgICAgICAgeC52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ldLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5wdXNoKHgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBjbGFzc0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoaWdobGlnaHRlZC1yb3cnKTtcclxuICAgICAgICBpZiAoY2xhc3NFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNsYXNzRWxlbWVudFswXS5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCl7IFxyXG4gICAgICAgICB0aGlzLmVkaXRBbGxSb3dzQXRPbmNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ2xvYmFsU2VhcmNoYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dsb2JhbFNlYXJjaGJ0bicpO1xyXG4gICAgaWYgKGdsb2JhbFNlYXJjaGJ0bikge1xyXG4gICAgICB0aGlzLnNlYXJjaEdyaWRGaWx0ZXIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApe1xyXG4gICAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc2V0IERpc3BsYXlUZXh0IHdoZW4gdmFsdWUgaXMgaW4gY3VybHkgYnJhY2tldHMuXHJcbiAgc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uKSB7XHJcbiAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxyXG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcclxuICAgICAgICBFR3JpZENvbHVtblR5cGUuSUZSQU1FXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ107XHJcbiAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5VGV4dCAmJiBjb2x1bW4uZGlzcGxheVRleHQuaW5jbHVkZXMoJ3snKSkge1xyXG4gICAgICAgICAgY29uc3QgZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHRcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJyk7XHJcbiAgICAgICAgICBpZiAoZGlzcGxheVRleHQgJiYgZmllbGQpIHtcclxuICAgICAgICAgICAgZmllbGQuZGlzcGxheVRleHQgPSByb3dbZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgZmllbGQpIHtcclxuICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gY29sdW1uLmRpc3BsYXlUZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBjaGFuZ2Ugcm93IGtleSBhbmQgdmFsdWUgd2hlbiB1c2luZyBzZXRHcmlkUm93UHJvcFZhbHVlIGZ1bmN0aW9uXHJcbiAgc2V0Um93VmFsdWUocm93RGF0YTogYW55KSB7XHJcbiAgICBPYmplY3Qua2V5cyhyb3dEYXRhKT8uZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICByb3dEYXRhW3Jvd10gJiZcclxuICAgICAgICB0aGlzLnR5cGVPZihyb3dEYXRhW3Jvd10pID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgIHJvd0RhdGFbcm93XT8uYWN0aW9uPy5maWVsZFxyXG4gICAgICApIHtcclxuICAgICAgICBpZihyb3dEYXRhW3Jvd10/LmV4dHJhRmllbGQpe1xyXG4gICAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcm93RGF0YVtyb3ddID0gcm93RGF0YVtyb3ddPy50ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXROdW1lcmljTWluTXhGcmFjdGlvbihjb2x1bW46IGFueSkge1xyXG4gICAgbGV0IGRpZ2l0SW5mbyA9ICcyJztcclxuICAgIGlmKGNvbHVtbj8uZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pe1xyXG4gICAgICBkaWdpdEluZm8gPSAnMCdcclxuICAgIH1lbHNlIGlmKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pe1xyXG4gICAgICAgIGRpZ2l0SW5mbyA9IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmRpZ2l0c0luZm87XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGlnaXRJbmZvO1xyXG4gIH1cclxuXHJcbiAgLy8gc2V0IHRoZSBmb3JtYXQgb2YgY3VycmVuY3kgJiYgbnVtYmVyICYmIGRlY2ltYWwgJiYgcGVyY2VudFxyXG4gIHNldE51bWVyaWNGb3JtYXQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICByb3cgPSB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIocm93KTtcclxuICAgIGxldCB2YWx1ZTogYW55ID0gcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheVRleHRcclxuICAgICAgPyByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxyXG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKVxyXG4gICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXHJcbiAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXHJcbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV1cclxuICAgICAgOiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgPT09IDAgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHQgPT09IG51bGwpIFxyXG4gICAgICA/IHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKV0/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgaWYgKHRoaXMudHlwZU9mKHZhbHVlKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPT09IDApIHtcclxuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgbGV0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcclxuICAgIGxldCBkaWdpdHNJbmZvID0gZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xyXG4gICAgaWYgKGNvbHVtbi5mb3JtYXQgJiYgdmFsdWUpIHtcclxuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0Py50eXBlKSB7XHJcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuQ1VSUkVOQ1k6XHJcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcclxuICAgICAgICAgICAgZm9ybWF0UGFyYW1zPy5sb2NhbGUgPyBmb3JtYXRQYXJhbXMubG9jYWxlIDogJ2VuLVVTJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxyXG4gICAgICAgICAgICAgIGN1cnJlbmN5OiBmb3JtYXRQYXJhbXM/LmN1cnJlbmN5ID8gZm9ybWF0UGFyYW1zLmN1cnJlbmN5IDogJ1VTRCcsXHJcbiAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6ICcyJyxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKT8uZm9ybWF0KHZhbHVlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLkRFQ0lNQUw6XHJcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoZGlnaXRzSW5mbyA/IGRpZ2l0c0luZm8gOiAnMicpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSQ0VOVDpcclxuICAgICAgICBpZighY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSl7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlKyclJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vQ2hhbmdlIGRyb3Bkb3duIHZsdWUgYmFzZWQgb24gb3B0aW9uIGxhYmVsIGFuZCBvcHRpb252YWx1ZVxyXG4gIHNldERyb3Bkb3duVmFsdWUoY29sdW1uOiBhbnksIHNlbGVjdGVkUm93PzogYW55LCBjaGFuZ2U/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXkgPT09IGNvbHVtbi5maWVsZCkpIHtcclxuICAgICAgICAgIGlmIChjb2x1bW4pIHtcclxuICAgICAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsID0gY29sdW1uLm9wdGlvbkxhYmVsXHJcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uTGFiZWxcclxuICAgICAgICAgICAgICA6ICdsYWJlbCc7XHJcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25WYWx1ZSA9IGNvbHVtbi5vcHRpb25WYWx1ZVxyXG4gICAgICAgICAgICAgID8gY29sdW1uLm9wdGlvblZhbHVlXHJcbiAgICAgICAgICAgICAgOiAndmFsdWUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjb2x1bW4uZGF0YT8uZmluZChcclxuICAgICAgICAgICAgKHJlY29yZDogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZWRpdGVkUm93ID0gc2VsZWN0ZWRSb3cgJiYgT2JqZWN0LmtleXMoc2VsZWN0ZWRSb3cpLmxlbmd0aCA+IDAgPyBzZWxlY3RlZFJvd1t0aGlzLmRhdGFLZXldID09PSByb3dbdGhpcy5kYXRhS2V5XSA6IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHZhbHVlICYmIGVkaXRlZFJvdykge1xyXG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV07XHJcbiAgICAgICAgICB9ZWxzZSBpZih2YWx1ZSAmJiBjaGFuZ2UgPT09IGZhbHNlKXtcclxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uTGFiZWxdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxyXG4gIGNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY29sdW1ucyAmJlxyXG4gICAgICB0aGlzLnJvd3NEYXRhICYmXHJcbiAgICAgIHRoaXMucm93c0RhdGEubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gJ3N0cmluZycpICYmXHJcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzAnKSkgfHxcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ1knIHx8XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdOJ1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9XHJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzEnIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnWSdcclxuICAgICAgICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dEYXRhXHJcbiAgICogUGFzc2VzIGRhdGEgb2YgY2xpY2tlZCByb3cgdG8gcGFyZW50XHJcbiAgICovXHJcbiAgaGFuZGxlUm93Q2xpY2socm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvd0RhdGE7XHJcbiAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbHVtbkRhdGFcclxuICAgKiBQYXNzZXMgc29ydGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgb24gc29ydCBjaGFuZ2VcclxuICAgKi9cclxuICBoYW5kbGVTb3J0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGxldCBzb3J0RGlyZWN0aW9uID0gbnVsbDtcclxuICAgIGxldCBzb3J0RmllbGQ6IHN0cmluZyA9ICcnO1xyXG4gICAgaWYgKGV2ZW50Lm11bHRpc29ydG1ldGEgJiYgZXZlbnQubXVsdGlzb3J0bWV0YVswXS5vcmRlcikge1xyXG4gICAgICBzb3J0RGlyZWN0aW9uID1cclxuICAgICAgICBldmVudC5tdWx0aXNvcnRtZXRhWzBdLm9yZGVyID09IDFcclxuICAgICAgICAgID8gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQ1xyXG4gICAgICAgICAgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQztcclxuICAgICAgc29ydEZpZWxkID0gZXZlbnQubXVsdGlzb3J0bWV0YVswXS5maWVsZDtcclxuICAgIH1cclxuICAgIGxldCBzb3J0czogSUdyaWRTb3J0ID0ge1xyXG4gICAgICBmaWVsZDogc29ydEZpZWxkLFxyXG4gICAgICBkaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gYXMgRUdyaWRTb3J0RGlyZWN0aW9uLFxyXG4gICAgICBwcmlvcml0eTogMCxcclxuICAgIH07XHJcbiAgICB0aGlzLm9uU29ydENoYW5nZS5lbWl0KHNvcnRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICogUGFzc2VzIGFwcGxpZWQgZmlsdGVycyB0byBwYXJlbnQgb24gZmlsdGVyIGNoYW5nZVxyXG4gICAqL1xyXG4gIGhhbmRsZUZpbHRlckNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFldmVudC5maWx0ZXJzW2ZpbHRlci5maWVsZF0/LnZhbHVlKSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkZpbHRlckNoYW5nZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50IDogRXZlbnRcclxuICAgKiBAcGFyYW0gY29sdW1uQWN0aW9uIDogSUdyaWRDb2x1bW5BY3Rpb25cclxuICAgKiBAcGFyYW0gcm93IDogYW55XHJcbiAgICogU3RvcCB0aGUgY2xpY2sgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50XHJcbiAgICogQ2FsbGJhY2tzIHRoZSByb3cgZGF0YSB0byBwYXJlbnRcclxuICAgKi9cclxuXHJcbiAgLyoqXHJcbiAgICogaW52b2tlIG9uQ2xpY2sgZXZlbnQgJiBvcGVuIElmcmFtZSBpbiBncmlkXHJcbiAgICovXHJcbiAgZ3JpZElGcmFtZShjb2x1bW46IGFueSwgcm93czogYW55LCByb3c6IGFueSkge1xyXG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xyXG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XHJcbiAgICAgIGhlYWRlcjogY29sdW1uLmhlYWRlcixcclxuICAgICAgd2lkdGg6ICc4MCUnLFxyXG4gICAgICBoZWlnaHQ6ICc4MCUnLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgdmFsdWU6IHJvd3MsXHJcbiAgICAgICAgaUZyYW1lSWQ6IGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IGNvbHVtbi5maWVsZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGNvbHVtbi5jb21wb25lbnQ/Lm5hbWU7XHJcbiAgICBpZihjb21wb25lbnROYW1lKXtcclxuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcclxuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcclxuICAgICAgfSBlbHNlIGlmIChyZXMgJiYgY29sdW1uLm9uQ2hhbmdlKSB7XHJcbiAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3Um93KHJvdzogYW55LCBhZGRSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4uZmlsdGVyICYmXHJcbiAgICAgICAgY29sdW1uLmNvbXBvbmVudCAmJlxyXG4gICAgICAgIGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2NhbGVuZGFyJ1xyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoYWRkUm93KSB7XHJcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhWzBdW2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX3NlY29uZFR5cGUnXSA9IEVHcmlkQ29sdW1uVHlwZS5EQVRFO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcclxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSB0cnVlO1xyXG4gICAgdGhpcy5kcm9wZG93bklucHV0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLm9uR3JpZFJvd0FkZC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvcGVuIERpYWxvZyBpbiBncmlkXHJcbiAgICovXHJcbiAgb3BlbkdyaWREaWFsb2coY29sdW1uOiBJR3JpZENvbHVtbiB8IGFueSwgcm93OiBhbnkpIHtcclxuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcclxuICAgICAgaWYodGhpcy5zZXREaWFsb2dEYXRhIHx8IHRoaXMuc2V0RGlhbG9nRmllbGQgIT09IGNvbHVtbi5maWVsZCl7XHJcbiAgICAgICAgY29sdW1uWydwYXJlbnREaWFsb2dEYXRhJ10gPSBjb2x1bW4uZGF0YT8uZGF0YTtcclxuICAgICAgICB0aGlzLnNldERpYWxvZ0RhdGEgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldERpYWxvZ0ZpZWxkID0gY29sdW1uLmZpZWxkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGNvbHVtbi5kYXRhICYmIGNvbHVtbi5kYXRhLmRhdGEgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pe1xyXG4gICAgICAgIGNvbHVtbi5kYXRhLmRhdGEgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlhbG9nRGF0YTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sdW1uLmNvbXBvbmVudCAmJiBjb2x1bW4uZGF0YSAmJiB0aGlzLnJvd0NsaWNrRGF0YSkge1xyXG4gICAgICAgIGNvbHVtbi5kYXRhLmRhdGEgPSB1dGlsaXRpZXMuYXV0b1NldExvb2t1cERhdGEoXHJcbiAgICAgICAgICBjb2x1bW4ucGFyZW50RGlhbG9nRGF0YSxcclxuICAgICAgICAgIHRoaXMucm93Q2xpY2tEYXRhXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCBjb2x1bW4uZGF0YSk7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IGNvbHVtbi5jb21wb25lbnQ/Lm5hbWU7XHJcbiAgICAgICAgaWYoY29tcG9uZW50TmFtZSl7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YSAmJiBjb2x1bW4ub25SZXR1cm4pIHtcclxuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGRhdGEsIHRoaXMucm93Q2xpY2tEYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xyXG4gICAgICAgICAgICBpZihjb2x1bW4ub25DaGFuZ2Upe1xyXG4gICAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBicm93c2VyQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKXtcclxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgc2V0TXVsdGlTZWxlY3REYXRhKGNvbHVtbjogSUdyaWRDb2x1bW4sIHNlbGVjdGVkVmFsdWU6YW55KXtcclxuICAgIGlmKHNlbGVjdGVkVmFsdWUgJiYgY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKXtcclxuICAgICAgaWYoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKXtcclxuICAgICAgICBzZWxlY3RlZFZhbHVlID0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJywnKT8ubWFwKCh2YWx1ZSk9PiBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKT0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gdmFsdWU/LnRvU3RyaW5nKCkpPy5sYWJlbCk/LnRvU3RyaW5nKCk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKT0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybiBjb25kaXRpb25hbCBiYXNlIHZhbHVlIGFuZCB0aXRsZVxyXG4gICAqL1xyXG4gIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGRlbGV0ZSByb3dbJ3VuZGVmaW5lZCddO1xyXG4gICAgbGV0IHZhbHVlOmFueTtcclxuICAgIGlmKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKXtcclxuICAgICAgbGV0IG5ld1ZhbHVlOmFueTtcclxuICAgICAgaWYodHlwZW9mKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uKXtcclxuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XHJcbiAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxyXG4gICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxyXG4gICAgICAgIDogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0/LnRleHRcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihuZXdWYWx1ZSl7XHJcbiAgICAgICAgaWYoY29sdW1uLnRpbWVPbmx5KXtcclxuICAgICAgICAgIHZhbHVlID0gdGhpcy5zZXRUaW1lRm9ybWF0KG5ld1ZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGZvcm1hdCA9ICcnO1xyXG4gICAgICAgICAgaWYoY29sdW1uLmZvcm1hdCl7XHJcbiAgICAgICAgICAgIGlmKGNvbHVtbi5mb3JtYXQgPT09IEVHcmlkRm9ybWF0VHlwZS5TTUFMTERBVEUpe1xyXG4gICAgICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGNvbHVtbi5mb3JtYXQgPT09IEVHcmlkRm9ybWF0VHlwZS5TSE9SVERBVEUpe1xyXG4gICAgICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eXl5JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShuZXdWYWx1ZT8udG9TdHJpbmcoKSA9PT0gXCJJbnZhbGlkIERhdGVcIiA/IG51bGwgOiBuZXdWYWx1ZSwgZm9ybWF0ID8gZm9ybWF0IDogJ01NL2RkL3l5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNwbGF5VGV4dFxyXG4gICAgICA/IHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlUZXh0XHJcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZF0/LmFjdGlvbj8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cclxuICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cclxuICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cclxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJlxyXG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsXHJcbiAgICAgID8gJydcclxuICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcclxuICAgICAgPyBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiBjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgPyBcclxuICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkgPyBcclxuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCwgJ2hoOm1tIGEnKVxyXG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XHJcbiAgICAgIDogY29sdW1uLmRpc3BsYXlUZXh0XHJcbiAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XHJcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0RHJvcGR3b25SZWFkT25seVZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSl7XHJcbiAgICBkZWxldGUgcm93Wyd1bmRlZmluZWQnXTtcclxuICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXHJcbiAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxyXG4gICAgOiByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIG9wZW4gRGVsZXRlIENvbmZpcm1hdGlvbiBkaWFsb2cgd2hlbiBjbGljayBvbiBkZWxldGUgaWNvbiBpbiBBY3Rpb24gY29sdW1uXHJcbiAgICovXHJcbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW5BY3Rpb246IElHcmlkQ29sdW1uQWN0aW9uLCByb3c6IGFueSkge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZiAoY29sdW1uQWN0aW9uLnRvb2x0aXAudG9Mb3dlckNhc2UoKSA9PT0gJ2RlbGV0ZScpIHtcclxuICAgICAgaWYgKGNvbHVtbkFjdGlvbi5jb25maXJtRGlhbG9nID09PSBmYWxzZSkge1xyXG4gICAgICAgIGNvbHVtbkFjdGlvbi5vbkNsaWNrKHJvdyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xyXG4gICAgICAgICAgbWVzc2FnZTogJ0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxyXG4gICAgICAgICAgaGVhZGVyOiAnRGVsZXRlIENvbmZpcm1hdGlvbicsXHJcbiAgICAgICAgICBpY29uOiAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxyXG4gICAgICAgICAga2V5OiAnaGFuZGxlY29sdW1uQWN0aW9ucycsXHJcbiAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50IDogTGF6eUxvYWRFdmVudFxyXG4gICAqIFRyaWdnZXJzIGV2ZXJ5dGltZSBhIHNlcnZlciBzaWRlIGZpbHRlciBpcyB0cmlnZ2VyXHJcbiAgICovXHJcbiAgaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudDogYW55KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZXZlbnQuZmlsdGVyc1t4LmZpZWxkXSkge1xyXG4gICAgICAgICAgICBldmVudC5maWx0ZXJzW3guZmllbGRdLnZhbHVlID0geC52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICBcclxuICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xyXG4gICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzID0ge1xyXG4gICAgICBmaWx0ZXJzOiB0aGlzLmxvb2t1cEZpbHRlcnNcclxuICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZEZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKVxyXG4gICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5wcmVwYXJlQmFzaWNGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXHJcbiAgICAgIHNvcnRzOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTb3J0cyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxyXG4gICAgICAuLi4odGhpcy5wYWdpbmF0aW9uICYmIHtcclxuICAgICAgICBwYWdlOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRQYWdpbmF0aW9uKGV2ZW50KSxcclxuICAgICAgICBwYWdlU2l6ZTogZXZlbnQucm93cyB8fCAxMCxcclxuICAgICAgfSksXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzICYmXHJcbiAgICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycy5sZW5ndGggPiAwICYmXHJcbiAgICAgICh0aGlzLmFsbG93Q2FjaGluZyB8fCB0aGlzLnNvZnRDYWNoaW5nKVxyXG4gICAgKSB7XHJcbiAgICAgIGlmKCF0aGlzLnNvZnRDYWNoaW5nKXtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSxKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV0gPSB0aGlzLnNlcnZlckZpbHRlcnM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZXJ2ZXJGaWx0ZXJWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xyXG4gICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSAodGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMgfHwgW10pLmNvbmNhdChcclxuICAgICAgdGhpcy5nbG9iYWxEYXRhXHJcbiAgICApO1xyXG4gICAgdGhpcy5vblNlcnZlclNpZGVFdmVudENoYW5nZS5lbWl0KHNlcnZlckZpbHRlclZhbHVlcyk7XHJcbiAgICB9LCA5NTApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICogUGFzc2VzIGFwcGxpZWQgcGFnaW5hdGlvbiB0byBwYXJlbnQgb24gcGFnZSBjaGFuZ2VcclxuICAgKi9cclxuICBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbihldmVudDogSUdyaWRQYWdpbmF0aW9uRXZlbnQpIHtcclxuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRSb3cocm93OiBhbnkpIHtcclxuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgdGltZSBmb3JtYXRcclxuICBzZXRUaW1lRm9ybWF0KGRhdGU6IGFueSkge1xyXG4gICAgbGV0IHZhbHVlOiBhbnkgPSAnJztcclxuICAgIGlmIChkYXRlPy50b1N0cmluZygpLmluY2x1ZGVzKCdBTScpIHx8IGRhdGU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykpIHtcclxuICAgICAgdmFsdWUgPSB1dGlsaXRpZXMuc2V0VGltZUluRGF0ZShkYXRlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2hoOm1tIGEnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vb3BlbiBoeXBlcmxpbmsgaW4gZWRpdCBjYXNlXHJcbiAgb3BlbkxpbmsodXJsOiBhbnkpIHtcclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XHJcbiAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICAgIGxpbmsuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEZvcm1hdChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIGxldCB2YWx1ZTogYW55ID0gJyc7XHJcbiAgICBpZiAoY29sdW1uLmZvcm1hdCkge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxyXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IHJvd1tjb2x1bW4uZmllbGRdLFxyXG4gICAgICAgIGNvbHVtbi5mb3JtYXRcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhbHVlID0gY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBTZXRzIHZhbHVlcyB0byBlZGl0YWJsZSByb3dcclxuICAgKiBSb3cncyBkYXRhIGlzIHByZXNldmVkIHRvIHByZXZlbnQgbXV0YXRpb25cclxuICAgKiBSb3cgZGF0YUtleSBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCB0aGUgcm93IHVuaXF1ZSBhbmQgaW4gZWRpdGFibGUgc3RhdGUgYXMgbG9uZyBhcyBub3Qgc2F2ZWRcclxuICAgKi9cclxuXHJcbiAgb25Sb3dFZGl0SW5pdChyb3c6IGFueSkge1xyXG4gICAgbGV0IHNlbGVjdGVkUm93ID0geyAuLi5yb3cgfTtcclxuICAgIE9iamVjdC5lbnRyaWVzKHNlbGVjdGVkUm93KS5mb3JFYWNoKChba2V5LCB2YWx1ZV06IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgICBpZih0aGlzLnNldERyb3Bkb3duRmlsdGVyKXtcclxuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25GaWx0ZXJWYWx1ZShjb2wsIHJvdywga2V5KTtcclxuICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IHRoZSBhdXRvQ29tcGxldGUgVmFsdWUgaW4gZWRpdCBtb2RlXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcclxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICB2YWx1ZSAmJlxyXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWUubWFwKCh4OiBhbnkpID0+IHhbY29sLmRpc3BsYXlGaWVsZF0pO1xyXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XHJcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGRdID0gbmV3VmFsdWVcclxuICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXHJcbiAgICAgICAgICAgICAgPy5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAgICAgPy5tYXAoKHg6IGFueSkgPT4gKHsgW2NvbC5kaXNwbGF5RmllbGRdOiB4IH0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNldCBsb29rdXAgY29udHJvbCBmaWVsZCBiYXNlZCBvbiBkaXNwbGF5IGZpZWxkLlxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2wuZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSBrZXkpIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgICAgdGV4dDogcm93W2NvbC5kaXNwbGF5RmllbGRdLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiByb3dbY29sLmZpZWxkXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XHJcbiAgICAgICAgICBsZXQgb3B0aW9uID0gY29sPy5kYXRhPy5maW5kKFxyXG4gICAgICAgICAgICAoeDogYW55KSA9PiB4LmxhYmVsID09PSByb3dbY29sLmZpZWxkXT8udG9TdHJpbmcoKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChvcHRpb24pIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpICYmXHJcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHZhbHVlID0gdmFsdWU/LmFjdGlvbiA/IHZhbHVlLnRleHQgOiB2YWx1ZTtcclxuICAgICAgICAgIGlmIChyb3dbY29sLmZpZWxkXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZihyb3dba2V5XT8uYWN0aW9uICYmIE9iamVjdC5rZXlzKHJvd1trZXldPy5hY3Rpb24pPy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICByb3dba2V5XS50ZXh0ID0gbmV3IERhdGUodmFsdWUgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gY2hlY2sgdGhlIE1pbnV0ZXMgcGF0dGVyblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcclxuICAgICAgICAgICAgY29sLm1pbnV0ZXNJbnRlcnZhbCAmJlxyXG4gICAgICAgICAgICByb3dba2V5XVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJvd1trZXldID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxyXG4gICAgICAgICAgY29sLmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJlxyXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJlxyXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcclxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChjb2wuZWRpdExpbmsgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgcm93W2tleV0gPSByb3dbY29sLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJvd1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHsgLi4ucm93IH07XHJcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XHJcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IHRydWU7XHJcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvdztcclxuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5vbkdyaWRSb3dFZGl0LmVtaXQocm93KTtcclxuICB9XHJcblxyXG4gIHR5cGVPZih2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0IGRyb3Bkb3duIGZpbHRlciB2YWx1ZVxyXG4gICAqL1xyXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sLmRyb3BEb3duUHJvcCkge1xyXG4gICAgICBpZiAoT2JqZWN0LnZhbHVlcyhjb2wpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSA9PSBrZXkpKSB7ICAgICAgICBcclxuICAgICAgICBsZXQgb2JqID0gY29sLmRyb3BEb3duUHJvcDtcclxuICAgICAgICBsZXQgbmV3RmlsdGVyczogYW55ID0gW107XHJcblxyXG4gICAgICAgIGlmIChvYmouZmlsdGVycyAmJiBvYmouZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbmV3RmlsdGVyID0geyAuLi5maWx0ZXIgfTtcclxuICAgICAgICAgICAgbGV0IGZpbHRlcktleSA9IE9iamVjdC5rZXlzKHJvdykuZmluZCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWU/LmluY2x1ZGVzKCd7JykgJiZcclxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoS2V5O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGZpbHRlcktleSkge1xyXG4gICAgICAgICAgICAgIG5ld0ZpbHRlci52YWx1ZSA9IHJvd1tmaWx0ZXJLZXldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5ld0ZpbHRlcnMucHVzaChuZXdGaWx0ZXIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldERyb3Bkb3duRGF0YShcclxuICAgICAgICAgIGNvbCxcclxuICAgICAgICAgIG9iai51bmlxdWVLZXksXHJcbiAgICAgICAgICBvYmoudmFsdWVQcm9wLFxyXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcclxuICAgICAgICAgIG5ld0ZpbHRlcnMsXHJcbiAgICAgICAgICByb3dcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgb3B0aW9uID0gY29sLmRhdGEuZmluZChcclxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAob3B0aW9uKSB7XHJcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd1xyXG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcclxuICAgKiBJbiBjYXNlIG9mIG5ld2x5IGNyZWF0ZWQgZGF0YSwgZGF0YUtleSBhbmQgaXNOZXcgcHJvcCBpcyByZW1vdmVkXHJcbiAgICovXHJcbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ107XHJcbiAgICAgIGRlbGV0ZSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX3NlY29uZFR5cGUnXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXHJcbiAgICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCAmJlxyXG4gICAgICAgIHRoaXMubG9va3VwT2JqZWN0XHJcbiAgICAgICkge1xyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmxvb2t1cE9iamVjdC52YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcclxuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdjaGFyJykge1xyXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICdZJyA6ICdOJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdudW1lcmljJykge1xyXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICcxJyA6ICcwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZWN0ZWRSb3cgPSB7IC4uLnNlbGVjdGVkUm93LCBbY29sdW1uLmZpZWxkXTogdmFsdWUgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGZvcm1hdFxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmKCBjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZyl7XHJcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZighY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zaG93VGltZSl7XHJcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy9jb252ZXJ0IG11bHRpc2VsZWN0IGFycmF5IGludG8gc3RyaW5nXHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cclxuICAgICAgKSB7XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9ICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTYXZpbmcgQXV0b0NvbXBsZXRlIERhdGFcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXHJcbiAgICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCAmJlxyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IGFycjogYW55ID0gW107XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xyXG4gICAgICAgICAgICBhcnIucHVzaChyb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBhcnIudG9TdHJpbmcoKT8ucmVwbGFjZUFsbCgnLCcsICc7Jyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCByb3c6IGFueSA9IHsgLi4uc2VsZWN0ZWRSb3cgfTtcclxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcclxuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmxvb2t1cE9iamVjdCAmJiB0aGlzLmxvb2t1cE9iamVjdC5maWVsZCkge1xyXG4gICAgICAgIHJvd1t0aGlzLmxvb2t1cE9iamVjdC5maWVsZF0gPSB0aGlzLmxvb2t1cE9iamVjdC52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja0FjdGlvbiA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xyXG4gICAgICAgICAgdGhpcy5jaGVja0FjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvYmo6IGFueSA9IHJvd1trZXldO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIG9iaiAmJlxyXG4gICAgICAgICAgKG9iai50eXBlID09PSAnbGluaycgfHxcclxuICAgICAgICAgICAgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8XHJcbiAgICAgICAgICAgIG9iai50eXBlID09PSAnZGlhbG9nJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBqdXN0IGVtaXQgdGhvc2UgZmllbGRzIHdobyBleGlzdCBpbiB0aGUgdGFiZWxcclxuICAgICAqL1xyXG4gICAgdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xyXG4gICAgbGV0IG9iajogYW55ID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXHJcbiAgICAgICAgY29sdW1uLmZpZWxkICYmXHJcbiAgICAgICAgdHlwZW9mIHJvd1tjb2x1bW4uZmllbGRdID09PSAnb2JqZWN0J1xyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xyXG4gICAgICAgIG5ld1Jvd1tjb2x1bW4uZmllbGRdID0gbmV3Um93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xyXG4gICAgICAgIHJvdyA9IHsgLi4ubmV3Um93IH07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcclxuICAgICAgKSB7XHJcbiAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxyXG4gICAgICAgICAgY29sdW1uLmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0sXHJcbiAgICAgICAgICAgICd5eXl5LU1NLWRkVDAwOjAwOjAwLjAwMFonXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcclxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxyXG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gJiZcclxuICAgICAgICAgICFyb3dbY29sdW1uLmZpZWxkXS50b1N0cmluZygpLmluY2x1ZGVzKCcuJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGxldCBkaWdpdHNJbmZvID0gJy4wMCc7XHJcbiAgICAgICAgICBsZXQgemVybyA9ICcwJztcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcclxuICAgICAgICAgIGNvbnN0IGZyYWNEaWdpdHMgPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xyXG4gICAgICAgICAgaWYgKGZyYWNEaWdpdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcclxuICAgICAgICAgICAgICB6ZXJvID0gemVybyArICcwJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKyBkaWdpdHNJbmZvO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICByb3cuaXNOZXcgJiZcclxuICAgICAgICAoY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGRdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGRlbGV0ZSBzZWxlY3RlZFJvd1sndW5kZWZpbmVkJ107XHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkodGhpcy5jb2x1bW5zLCByb3cpO1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMuZ3JpZFZhbGlkYXRpb24odGhpcy5jb2x1bW5zLCByb3cpO1xyXG4gICAgaWYgKGlzVmFsaWQpIHtcclxuICAgIC8vIHNldCB0aGUgZ3JpZCB1cGRhdGVkL2luc2VydGVkIGRhdGFcclxuICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMoc2VsZWN0ZWRSb3cpO1xyXG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KGZhbHNlKTtcclxuICAgICAgaWYgKHJvdy5pc05ldykge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHsgaXNOZXcsIC4uLm5ld1Jvd09iaiB9ID0gcm93O1xyXG4gICAgICAgIGlmKCF0aGlzLmFkZERhdGFLZXlWYWx1ZSl7XHJcbiAgICAgICAgICBkZWxldGUgbmV3Um93T2JqW3RoaXMuZGF0YUtleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuc2F2ZUFsbFJlY29yZCkge1xyXG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChuZXdSb3dPYmopO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5vblJvd0FkZC5lbWl0KG5ld1Jvd09iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLnNhdmVBbGxSZWNvcmQpIHtcclxuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LnB1c2gob2JqKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdChvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRoaXMuZWRpdEFsbFJvd3M7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICAvLyBpZiBhbGwgcm93cyBpbiByZWFkIG9ubHkgbW9kZSB0aGVuIHNob3cgZWRpdEFsbFJvd3MgYnV0dG9uLiAgICBcclxuICAgIGlmKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKT0+ICF2YWx1ZSkpe1xyXG4gICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XHJcbiAgICAgICB0aGlzLmhpZGVFZGl0QWxsUm93c0J0biA9IHRydWU7XHJcbiAgICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgLy8gY29udmVydCBkYXRlIGludG8gdGltZVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJlxyXG4gICAgICAgIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnUE0nKSB8fFxyXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdBTScpKVxyXG4gICAgICApIHtcclxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdXRpbGl0aWVzLnNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXHJcbiAgICAgICAgY29sdW1uLm9wdGlvbkxhYmVsICYmXHJcbiAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHNlbGVjdGVkUm93KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBjaGVjayB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRcclxuICBncmlkVmFsaWRhdGlvbihjb2x1bW5zOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShjb2x1bW5zLCByb3cpKSB7XHJcbiAgICAgIGxldCBpc1JlcXVpcmVkID0gY29sdW1ucy5zb21lKFxyXG4gICAgICAgIChjb2x1bW46IGFueSkgPT4gY29sdW1uLmVycm9yTWVzc2FnZSAmJiAhcm93W2NvbHVtbi5maWVsZF1cclxuICAgICAgKTtcclxuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICdSZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3NpbmcnLFxyXG4gICAgICAgICAgJ1JFUVVJUkVEIEZJRUxEJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoJ1NvbWUgZmllbGRzIGFyZSBpbnZhbGlkJywgJ0lOVkFMSUQgRklFTEQnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvdyA6IGFueVxyXG4gICAqIEBwYXJhbSBpbmRleCA6IG51bWJlclxyXG4gICAqIENsZWFycyBvdXQgdGhlIGVkaXQgcm93IGFuZCByZXBsYWNlIHdpdGggcmVhZGFibGUgb25lXHJcbiAgICovXHJcbiAgb25Sb3dFZGl0Q2FuY2VsKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAocm93LmlzTmV3KSB7XHJcbiAgICAgIHRoaXMucm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdID0gdGhpcy5lZGl0Um93c1JlY29yZHNbcm93W3RoaXMuZGF0YUtleV1dO1xyXG4gICAgICBkZWxldGUgdGhpcy5lZGl0Um93c1JlY29yZHNbcm93W3RoaXMuZGF0YUtleV1dO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dO1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xyXG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XHJcbiAgICBpZihPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSk9PiAhdmFsdWUpKXtcclxuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSBmYWxzZTtcclxuICAgfSAgXHJcbiAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gZmFsc2U7XHJcbiAgICB0aGlzLmlubGluZVJvd0NhbmNlbC5lbWl0KHJvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSByb3dcclxuICAgKiBTZW5kcyB0aGUgcm93IHBheWxvYWQgdG8gcGFyZW50IGZvciBkZWxldGlvblxyXG4gICAqL1xyXG5cclxuICAgLyoqXHJcbiAgICpzZXQgdGhlIGdyaWREYXRhIG9uIHJvdyBhY3Rpb25zIGV2ZW50c1xyXG4gICAqL1xyXG4gICByb3dBY3Rpb25FdmVudHMocm93SW5mbywgZGVsZXRlUm93OiBib29sZWFuID0gZmFsc2Upe1xyXG4gICAgbGV0IGFjdGlvbjogc3RyaW5nID0gJyc7XHJcbiAgICBsZXQgZ3JpZFJvd3NEYXRhOiBhbnlbXSA9IFsuLi50aGlzLnJvd3NEYXRhXTtcclxuICAgIGNvbnN0IGluZGV4ID0gZ3JpZFJvd3NEYXRhLmZpbmRJbmRleCgocm93RGF0YSk9PiByb3dJbmZvW3RoaXMuZGF0YUtleV0gPT09IHJvd0RhdGFbdGhpcy5kYXRhS2V5XSk7XHJcbiAgICBpZihpbmRleCA+IC0xKXtcclxuICAgICAgaWYoZGVsZXRlUm93KXsgXHJcbiAgICAgICAgZ3JpZFJvd3NEYXRhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi5ncmlkUm93c0RhdGFdO1xyXG4gICAgICAgIGFjdGlvbiA9ICdkZWxldGUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmKHRoaXMuYWRkTmV3Um93Q2hlY2spe1xyXG4gICAgICAgICAgYWN0aW9uID0gJ2luc2VydCc7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBhY3Rpb24gPSAndXBkYXRlJztcclxuICAgICAgICB9XHJcbiAgICAgIGlmKHRoaXMub25HcmlkUm93QWN0aW9ucy5vYnNlcnZlcnMubGVuZ3RoICE9PSAwKXtcclxuICAgICAgICByb3dJbmZvWydyb3dBY3Rpb24nXT0gYWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGdyaWRSb3dzRGF0YVtpbmRleF0gPSByb3dJbmZvO1xyXG4gICAgfVxyXG4gIH1cclxuICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcclxuICB0aGlzLm9uR3JpZFJvd0FjdGlvbnMuZW1pdChncmlkUm93c0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbiBEZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIHRyeWluZyB0byBkZWxldGUgcm93XHJcbiAgICovXHJcbiAgZGVsZXRlUmVjb3JkKHJvdzogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcbiAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcclxuICAgICAgaGVhZGVyOiAnRGVsZXRlIENvbmZpcm1hdGlvbicsXHJcbiAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXHJcbiAgICAgIGtleTogJ2hhbmRsZUlubGluZUNSVUQnLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgdGhlIGdyaWQgZGVsZXRlZCBkYXRhIFxyXG4gICAgICAgIHRoaXMucm93QWN0aW9uRXZlbnRzKHJvdywgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5vblJvd0RlbGV0ZS5lbWl0KHJvdyk7XHJcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIHJlamVjdDogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUbyBzZXQgZGlzYWJsZWQgdGhlIGNvbnRyb2xcclxuICAgKi9cclxuICBhbGxvd0Rpc2FibGVkKGNvbHVtbjogYW55LCByb3c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnICYmIHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24pIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy5hY3Rpb24gJiZcclxuICAgICAgICBPYmplY3Qua2V5cyhyb3dbY29sdW1uLmZpZWxkXS5hY3Rpb24pPy5pbmNsdWRlcygnZGlzYWJsZWQnKSAmJiByb3dbY29sdW1uLmZpZWxkXT8uYWN0aW9uPy5kaXNhYmxlZCA9PT0gdHJ1ZVxyXG4gICAgICApIHtcclxuICAgICAgICB2YWx1ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc2FibGVkIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgdmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG8gc2V0IGFnZ3JlZ2F0ZSBpbiBncmlkIGZvb3RlclxyXG4gICAqL1xyXG4gIHNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBJR3JpZENvbHVtbikge1xyXG4gICAgaWYgKGNvbHVtbj8uYWdncmVnYXRlKSB7XHJcbiAgICAgIGNvbHVtbi5hZ2dyZWdhdGUuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCBjb2x1bW5UeXBlOiBFR3JpZEFnZ3JlZ2F0ZSA9IGNvbC50eXBlO1xyXG4gICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkNPVU5UKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gdGhpcy5yb3dzRGF0YS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sLCBjb3VudCwgJ0NvdW50Jyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5TVU0gfHxcclxuICAgICAgICAgICAgY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQVZFUkFHRVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlczogbnVtYmVyW10gPSB0aGlzLmdldENvbHVtblZhbHVlcyhjb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAoY29sVmFsdWVzICYmIGNvbFZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3VtID0gY29sVmFsdWVzLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArIGN1ciwgMCk7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLlNVTSkge1xyXG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIHN1bSwgJ1N1bScpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQVZFUkFHRSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXZlcmFnZSA9IHN1bSAvIGNvbFZhbHVlcy5sZW5ndGggfHwgMDtcclxuICAgICAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoXHJcbiAgICAgICAgICAgICAgICAgIGNvbCxcclxuICAgICAgICAgICAgICAgICAgYXZlcmFnZSxcclxuICAgICAgICAgICAgICAgICAgJ0F2ZydcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0IGdyaWQgQWdncmVnYXRlIHZhbHVlc1xyXG4gICAqL1xyXG4gIHNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sdW1uOiBhbnksIHZhbHVlOiBudW1iZXIsIGRlZmF1bHRDYXB0aW9uOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGlzRGVjaW1hbEZvcm1hdDogYm9vbGVhbiA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJztcclxuICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4uZm9ybWF0Py5kaWdpdHNJbmZvO1xyXG4gICAgY29uc3QgY2FwdGlvbjogc3RyaW5nID1cclxuICAgICAgY29sdW1uLmNhcHRpb24/Lmxlbmd0aCA+IDAgPyBjb2x1bW4uY2FwdGlvbiA6IGRlZmF1bHRDYXB0aW9uO1xyXG5cclxuICAgIGNvbnN0IGRlY2ltYWxQb2ludCA9IGlzRGVjaW1hbEZvcm1hdFxyXG4gICAgICA/IHZhbHVlPy50b0ZpeGVkKGRpZ2l0c0luZm8gPyBkaWdpdHNJbmZvIDogMilcclxuICAgICAgOiB2YWx1ZT8udG9GaXhlZCgwKTtcclxuICAgIHJldHVybiBgJHtjYXB0aW9ufSAke2RlY2ltYWxQb2ludFxyXG4gICAgICAudG9TdHJpbmcoKVxyXG4gICAgICAucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKX0gPC9icj5gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2V0IGRlY2ltYXQgYW5kIG51bWVyaWMgdmFsdWVzXHJcbiAgICovXHJcbiAgc2V0TnVtZXJpY1ZhbHVlcygpIHtcclxuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XHJcbiAgICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgocm93W2NvbHVtbi5maWVsZF0gLyAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSAvIDEwMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcclxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJykge1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvID8gZGlnaXRzSW5mbyA6IDIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgY29sdW1uIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiBmaWVsZFxyXG4gICAqL1xyXG4gIGdldENvbHVtblZhbHVlcyhjb2x1bW46IElHcmlkQ29sdW1uKSB7XHJcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcclxuICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcclxuICAgICAga2V5cy5tYXAoKGtleSkgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgPT09IGtleSkge1xyXG4gICAgICAgICAgYXJyLnB1c2gocm93W2tleV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhcnI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEV4cG9ydCB0byBQREZcclxuICAgKi9cclxuICBleHBvcnRQZGYoKSB7XHJcbiAgICB2YXIgZXhwb3J0RGF0YSA9IHRoaXMuc2V0RXhwb3J0RGF0YShbLi4udGhpcy5yb3dzRGF0YV0sIHRydWUpO1xyXG4gICAgbGV0IGRvYyA9IG5ldyBqc1BERigncCcsICdwdCcpO1xyXG4gICAgZG9jLnRhYmxlKDEsIDEsIGV4cG9ydERhdGEucm93cywgZXhwb3J0RGF0YS5oZWFkaW5ncywgeyBhdXRvU2l6ZTogdHJ1ZSB9KTtcclxuICAgIGRvYy5zYXZlKCdFeHBvcnQucGRmJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAgU3ViLWZ1bmN0aW9uIHRvIHNldCByb3dzIGZvciBleHBvcnQgdG8gUGRmLCBhbmQgRXhjZWxcclxuICAgKiBAcm93cyBwYXJhbSBmb3Igcm93c1xyXG4gICAqIEBpc0V4Y2VsIHBhcmFtIGZvciBleHBvcnQgdG8gZXhjZWwgaW5kaWNhdGlvblxyXG4gICAqL1xyXG4gIHNldEV4cG9ydERhdGEocm93czogYW55W10gPSBbXSwgaXNQZGY6IGJvb2xlYW4gPSBmYWxzZSk6IElHcmlkRGF0YUV4cG9ydCB7XHJcbiAgICBjb25zdCBoZWFkaW5nczogYW55ID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQpO1xyXG4gICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgZm9yICh2YXIgcHJvcCBpbiByb3cpIHtcclxuICAgICAgICBpZiAoIWhlYWRpbmdzLmluY2x1ZGVzKHByb3ApKSB7XHJcbiAgICAgICAgICBkZWxldGUgcm93W3Byb3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNQZGYpIHtcclxuICAgICAgICAgIHJvd1twcm9wXSA9XHJcbiAgICAgICAgICAgICFyb3dbcHJvcF0gJiYgdHlwZW9mIHJvd1twcm9wXSAhPT0gJ2Jvb2xlYW4nXHJcbiAgICAgICAgICAgICAgPyAnJ1xyXG4gICAgICAgICAgICAgIDogcm93W3Byb3BdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IHJvd3MsIGhlYWRpbmdzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEV4cG9ydCB0byBFeGNlbFxyXG4gICAqL1xyXG4gIGV4cG9ydEV4Y2VsKCkge1xyXG4gICAgbGV0IGV4cG9ydERhdGE6IGFueSA9IHRoaXMuZXhwb3J0RGF0YVRvRXhjZWwoKTtcclxuICAgIGltcG9ydCgneGxzeCcpLnRoZW4oKHhsc3gpID0+IHtcclxuICAgICAgY29uc3Qgd29ya3NoZWV0OiBXb3JrU2hlZXQgPSB4bHN4LnV0aWxzLmpzb25fdG9fc2hlZXQoZXhwb3J0RGF0YSk7XHJcblxyXG4gICAgICBsZXQgcm93SW5kZXggPSAwO1xyXG4gICAgICBleHBvcnREYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbEluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2VsbFZhbHVlOiBzdHJpbmcgPSByb3dbY29sLmhlYWRlcl07XHJcbiAgICAgICAgICBpZiAoY2VsbFZhbHVlICYmIGNlbGxWYWx1ZS5sZW5ndGggPiAwICYmIGNlbGxWYWx1ZS5pbmRleE9mKCd8JykgPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUZXh0OiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVswXTtcclxuICAgICAgICAgICAgbGV0IGxpbmtVcmw6IHN0cmluZyA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpWzFdO1xyXG4gICAgICAgICAgICBpZiAobGlua1VybCAmJiAhbGlua1VybC5zdGFydHNXaXRoKCdodHRwJykpIHtcclxuICAgICAgICAgICAgICBpZiAoIWxpbmtVcmwuc3RhcnRzV2l0aCgnLycpKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5rVXJsID0gJy8nICsgbGlua1VybDtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGxpbmtVcmwgPVxyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICtcclxuICAgICAgICAgICAgICAgICcvLycgK1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICtcclxuICAgICAgICAgICAgICAgIGxpbmtVcmw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGxBZGRyZXNzID0geGxzeC51dGlscy5lbmNvZGVfY2VsbCh7XHJcbiAgICAgICAgICAgICAgYzogY29sSW5kZXgsXHJcbiAgICAgICAgICAgICAgcjogcm93SW5kZXggKyAxLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHdvcmtzaGVldFtjZWxsQWRkcmVzc10gPSB7XHJcbiAgICAgICAgICAgICAgZjogYD1IWVBFUkxJTksoXCIke2xpbmtVcmx9XCIsIFwiJHtsaW5rVGV4dH1cIilgLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbEluZGV4Kys7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJvd0luZGV4Kys7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3Qgd29ya2Jvb2sgPSB7XHJcbiAgICAgICAgU2hlZXRzOiB7IHNoZWV0MTogd29ya3NoZWV0IH0sXHJcbiAgICAgICAgU2hlZXROYW1lczogWydzaGVldDEnXSxcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgZXhjZWxCdWZmZXI6IGFueSA9IHhsc3gud3JpdGUod29ya2Jvb2ssIHtcclxuICAgICAgICBib29rVHlwZTogJ3hsc3gnLFxyXG4gICAgICAgIHR5cGU6ICdhcnJheScsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNhdmVBc0V4Y2VsRmlsZShleGNlbEJ1ZmZlciwgJ0V4cG9ydC54bHN4Jyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydERhdGFUb0V4Y2VsKCkge1xyXG4gICAgbGV0IGFycjogYW55ID0gW107XHJcbiAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyaWRIZWFkZXIgPSBjb2x1bW4uaGVhZGVyO1xyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcclxuICAgICAgICAgIGNvbnN0IGxpbmtPYmogPSByb3dbY29sdW1uLmRpc3BsYXlUZXh0Py50b0xvd2VyQ2FzZSgpICsgJ19vYmonXTtcclxuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdICsgJ3wnICsgbGlua09iaj8uaHlwZXJsaW5rO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYmpbZ3JpZEhlYWRlcl0gPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgYXJyLnB1c2gob2JqKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGFycjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChzdWItbWV0aG9kKVxyXG4gICAqL1xyXG4gIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaW1wb3J0KCdmaWxlLXNhdmVyJykudGhlbigoRmlsZVNhdmVyKSA9PiB7XHJcbiAgICAgIGxldCBFWENFTF9UWVBFID1cclxuICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XHJcbiAgICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiBFWENFTF9UWVBFIH0pO1xyXG4gICAgICBzYXZlQXMoZGF0YSwgZmlsZU5hbWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKnNldCBjb25maWcgZGF0YSBvZiBsb29rdXAgY29udHJvbCBkaWFsb2dcclxuICAgKi9cclxuICBzZXRMb29rdXBEaWFsb2dDb25maWcocm93OiBhbnksIGNvbHVtbjogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIGxldCBzZWxlY3Rpb246IHN0cmluZyA9ICcnO1xyXG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF0udGV4dDtcclxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCAmJiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pIHtcclxuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbHVtbi5maWVsZCAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XHJcbiAgICAgIG5ld1Jvd1tjb2x1bW4uZmllbGRdID0gbmV3Um93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xyXG4gICAgICByb3cgPSB7IC4uLm5ld1JvdyB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBkYXRhKSB7XHJcbiAgICAgIGxldCBvYmogPSB1dGlsaXRpZXMuYXV0b1NldExvb2t1cERhdGEoZGF0YSwgcm93KTtcclxuICAgICAgcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddID0gb2JqO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcm93RGF0YTogcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddLFxyXG4gICAgICBzZWxlY3Rpb246IHNlbGVjdGlvbixcclxuICAgICAgY29sdW1uOiBjb2x1bW4sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbiBsaW5rIG9uIGxvb2t1cENvbnRyb2wgY29udHJvbCBpbiByZWFkIG9ubHkgbW9kZSB3aGVuIGVkaXRMaW5rIHNldCB0cnVlXHJcbiAgICovXHJcbiAgb3Blbkxvb2t1cEh5cGVybGluayhjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xyXG4gICAgaWYgKGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSAmJiBjb2x1bW4uY29tcG9uZW50KSB7XHJcbiAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKHJvdywgY29sdW1uLCBjb2x1bW4uZGF0YT8uZGF0YSk7XHJcbiAgICAgIG9ialsnY29tcG9uZW50J10gPSBjb2x1bW4uY29tcG9uZW50O1xyXG4gICAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqKTtcclxuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIGNvbHVtbi5vblJldHVybikge1xyXG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIG9wZW4gbG9va3VwIERpYWxvZ1xyXG4gICAqL1xyXG4gIG9wZW5Mb29rdXBEaWFsb2coY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBjb2x1bW4uY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhID8gIGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhIDogY29sdW1uLmNvbHVtbi5kYXRhXHJcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCB7XHJcbiAgICAgIC4uLmNvbHVtbkRhdGEsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBzZWxlY3Rpb246IGNvbHVtbi5zZWxlY3Rpb24sXHJcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2x1bW4uZmllbGQsXHJcbiAgICAgICAgdmFsdWVGaWVsZDogY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZUZpZWxkLFxyXG4gICAgICAgIC4uLmNvbHVtbi5yb3dEYXRhLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcclxuICAgIGlmKGNvbXBvbmVudE5hbWUpe1xyXG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVmO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbiBkaWFsb2cgb24gbG9va3VwQ29udHJvbCBmaWVsZFxyXG4gICAqL1xyXG4gIHNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbjogYW55LCByb3c/OiBhbnkpIHtcclxuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcclxuICAgIHRoaXMubG9va3VwT2JqZWN0ID0geyB0ZXh0OiAnJywgdmFsdWU6ICcnLCBmaWVsZDogJycgfTtcclxuICAgIGlmIChjb2x1bW4ubG9va3VwQ29udHJvbCkge1xyXG4gICAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhcclxuICAgICAgICByb3csXHJcbiAgICAgICAgY29sdW1uLFxyXG4gICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLmRhdGE/LmRhdGFcclxuICAgICAgKTtcclxuICAgICAgb2JqWydjb21wb25lbnQnXSA9IGNvbHVtbi5sb29rdXBDb250cm9sLmNvbXBvbmVudDtcclxuICAgICAgY29uc3QgcmVmID0gdGhpcy5vcGVuTG9va3VwRGlhbG9nKG9iaik7XHJcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcclxuICAgICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMsIHJvdyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcclxuICAgICAgICAgICAgICBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wsXHJcbiAgICAgICAgICAgICAgcmVzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCldLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgdGhpcy5sb29rdXBPYmplY3QgPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHZhbHVlWydmaWVsZCddID0gY29sdW1uLmZpZWxkO1xyXG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWUudmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByZXNbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gIT09IG9iai5zZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcclxuICAgICAgICAgICAgaWYoY29sdW1uLm9uQ2hhbmdlKXtcclxuICAgICAgICAgICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKHsgZXJyb3IgfSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEZpbHRlckxvb2t1cChjb2x1bW46IGFueSkge1xyXG4gICAgdGhpcy5ncmlkU2VydmljZS5zZXRMb29rVXBGaWx0ZXIoY29sdW1uLCB0aGlzLmRpYWxvZ1NlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2sgY2FsZW5kZXIgdmFsdWUgaXMgY2hhbmdlZCBvciBub3RcclxuICBjYWxlbmRlckNoYW5nZUV2ZW50KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgbGV0IHZhbHVlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNvbHVtbi50aW1lT25seSAmJlxyXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tJykgIT09XHJcbiAgICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUsICdoaDptbScpXHJcbiAgICApIHtcclxuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgY29sdW1uLnNob3dUaW1lICYmXHJcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBoaDptbScpICE9PVxyXG4gICAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kZXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCBoaDptbScpXHJcbiAgICApIHtcclxuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkJykgIT09XHJcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kZXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCcpXHJcbiAgICApIHtcclxuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYodmFsdWVDaGFuZ2Upe1xyXG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xyXG4gICAgICBpZihjb2x1bW4ub25DaGFuZ2Upe1xyXG4gICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbGVuZGVyUHJldmlvdXNWYWx1ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1c091dEV2ZW50KGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XHJcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2NvbHVtbl0sIHJvdyk7XHJcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XHJcbiAgICAgIHRoaXMuY2FsZW5kZXJDaGFuZ2VFdmVudChjb2x1bW4sIHJvdyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29sdW1uLm9uRm9jdXNPdXQpIHtcclxuICAgICAgY29sdW1uLm9uRm9jdXNPdXQocm93KTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGNvbHVtbi5vblJldHVybiAmJlxyXG4gICAgICBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbHVtbi5vblJldHVybihyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RmlsdGVyRm9jdXNPdXQoY29sOiBhbnksIGZpbHRlcj86IGFueSwgZXZlbnQ/OiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZEZpbHRlck9iaiA9IHsgY29sdW1uOiBjb2wsIGZpbHRlcjogZmlsdGVyLCBldmVudDogZXZlbnQgfTtcclxuICAgIGNvbnN0IG5ld0NvbHVtbjogYW55ID0geyAuLi5jb2wgfTtcclxuICAgIGNvbnNvbGUubG9nKCdCQkJCQkJCQjogJywgbmV3Q29sdW1uKTtcclxuICAgIC8vY2hhbmdlIGZpbHRlciBjYWxlbmRlciBmb3JtYXRcclxuICAgIGlmIChuZXdDb2x1bW4udHlwZSA9PT0gJ2RhdGUnICYmIG5ld0NvbHVtbi52YWx1ZSkge1xyXG4gICAgICBuZXdDb2x1bW4udmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICBjb2wudmFsdWUudG9TdHJpbmcoKS50cmltKCksXHJcbiAgICAgICAgJ3l5eXktTU0tZGQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnQUFBQTogJywgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkpO1xyXG4gICAgc2V0VGltZW91dChcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuZmlsdGVyT2JqKG5ld0NvbHVtbik7XHJcbiAgICAgIH0sXHJcbiAgICAgIG5ld0NvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUID8gMjUwIDogMFxyXG4gICAgKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJPYmooY29sOiBhbnkpIHtcclxuICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgZmllbGQ6IGNvbC5maWVsZCxcclxuICAgICAgbWF0Y2hNb2RlOiBjb2wubWF0Y2hNb2RlID8gY29sLm1hdGNoTW9kZSA6ICdzdGFydHNXaXRoJyxcclxuICAgICAgb3BlcmF0b3I6IGNvbC5vcGVyYXRvciA/IGNvbC5vcGVyYXRvciA6ICdhbmQnLFxyXG4gICAgICB0YWJsZUFsaWFzOiBjb2wudGFibGVBbGlhcyA/IGNvbC50YWJsZUFsaWFzIDogJycsXHJcbiAgICAgIHZhbHVlOiBjb2wudmFsdWUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkucHVzaChvYmopO1xyXG4gICBcclxuICB9XHJcblxyXG4gIGFwcGx5RW50ZXJFdmVudChmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCA9IHRydWU7XHJcbiAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XHJcbiAgICB0aGlzLm9uQXBwbHlGaWx0ZXIuZW1pdCgpO1xyXG4gICAgdGhpcy5maWx0ZXJPYmooY29sdW1uKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcclxuICAgIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gdGhpcy5kcm9wRG93bkZpbHRlcj8uY29sdW1uPy5maWx0ZXI/LnR5cGUpIHtcclxuICAgICAgdGhpcy5kcm9wRG93bkZpbHRlci5maWx0ZXIodGhpcy5kcm9wRG93bkZpbHRlci5ldmVudC50YXJnZXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmlsdGVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChjb2x1bW4udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xyXG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiYWNrc3BhY2VFdmVudChldmVudDogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmXHJcbiAgICAgIChjb2x1bW4udmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAxIHx8XHJcbiAgICAgICAgY29sdW1uLnZhbHVlPy50b1N0cmluZygpID09PSAnJyB8fFxyXG4gICAgICAgIGNvbHVtbi52YWx1ZSA9PT0gbnVsbClcclxuICAgICkge1xyXG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XHJcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiBjb2x1bW4udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBhcnIgPSBbLi4udGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXldO1xyXG4gICAgICBsZXQgaW5kZXggPSBhcnIuZmluZEluZGV4KChpKSA9PiBpLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xyXG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSBhcnI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZW1vdmluZyBIZWFkZXIgRmlsdGVyIFZhbHVlIHVzaW5nIEJhY2tzcGFjZSBrZXkgRXZlbnQgb3IgRGVsZXRlIGtleSBFdmVudC5cclxuICByZW1vdmluZ0ZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbikge1xyXG4gICAgaWYgKFxyXG4gICAgICAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSAmJlxyXG4gICAgICBjb2x1bW4udmFsdWU/LnRvU3RyaW5nKCkubGVuZ3RoID09PSAwXHJcbiAgICApIHtcclxuICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XHJcbiAgICAgIGlmKCF0aGlzLnNvZnRDYWNoaW5nKXtcclxuICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSkgYXMgYW55KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3V0aWxpdGllcy5jdXJyZW50VXJsKCldO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzZWFyY2hGaWx0ZXJzICYmIHNlYXJjaEZpbHRlcnMuZmlsdGVycykge1xyXG4gICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGluZGV4ID0gc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKHg6IGFueSkgPT4geC5maWVsZCA9PT0gY29sdW1uLmZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBpZiAoc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyB1dGlsaXRpZXMuY3VycmVudFVybCgpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICBpZighdGhpcy5zb2Z0Q2FjaGluZyl7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdXRpbGl0aWVzLmN1cnJlbnRVcmwoKSxKU09OLnN0cmluZ2lmeShzZWFyY2hGaWx0ZXJzKSk7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdXRpbGl0aWVzLmN1cnJlbnRVcmwoKV0gPSBzZWFyY2hGaWx0ZXJzO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQWRkIENsaWNrIEJ1dHRvbiBFdmVudCBvbiBHcmlkLlxyXG4gIG9uQ2xpY2tCdXR0b24oY29sdW1uOiBhbnksIHJvdzogYW55KSB7XHJcbiAgICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93KTtcclxuICB9XHJcblxyXG4gIC8vIEludm9rZSBvbkNsaWNrIEV2ZW50LlxyXG4gIG9uQ2xpY2tFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgcm93W2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgdGhpcy5jYWxlbmRlclByZXZpb3VzVmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICFyb3dbY29sdW1uLmZpZWxkXSAmJlxyXG4gICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiZcclxuICAgICAgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4udGltZU9ubHkpICYmXHJcbiAgICAgIGNvbHVtbi5taW51dGVzSW50ZXJ2YWxcclxuICAgICkge1xyXG4gICAgICB0aGlzLmRlZmF1bHREYXRlID0gbmV3IERhdGUodXRpbGl0aWVzLnNldE1pbnV0ZXNJbnRlcnZhbChuZXcgRGF0ZSgpKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5vbkNsaWNrKSB7XHJcbiAgICAgIGNvbHVtbi5vbkNsaWNrKHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgdGhlIHNlbGVjdCB2YWx1ZSBvZiBtdWx0aS1zZWxlY3RcclxuICBzaG93T3B0aW9uKGNvbHVtbiwgcm93KXtcclxuICAgIGlmKHJvd1tjb2x1bW4uZmllbGRdKXtcclxuICAgICAgaWYodHlwZW9mKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJzdHJpbmdcIiAmJiAhcm93W2NvbHVtbi5maWVsZF0uaW5jbHVkZXMoJywnKSl7XHJcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbcm93W2NvbHVtbi5maWVsZF1dO1xyXG4gICAgIH0gZWxzZSBpZihyb3dbY29sdW1uLmZpZWxkXS5pbmNsdWRlcygnLCcpKXtcclxuICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0uc3BsaXQoJywnKTtcclxuICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpe1xyXG4gICAgaWYoY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgIXJvd1tjb2x1bW4uZmllbGRdKXtcclxuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSW52b2tlIG9uQ2hhbmdlIEV2ZW50XHJcbiAgb25DaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcclxuICAgIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxyXG4gICAgdGhpcy5kaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbiwgcm93KTtcclxuICAgIHRoaXMub25DbGVhclZhbHVlKGNvbHVtbiwgcm93KTtcclxuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XHJcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XHJcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tCb3hDaGFuZ2VFdmVudChldmVudDphbnksY29sdW1uOiBJR3JpZENvbHVtbiwgcm93KXtcclxuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvLyBzZXQgZHJvcGRvd24gZGlzcGxheUZpZWxkIHZhbHVlIGJhc2Ugb24gb3B0aW9uTGFiZWwgJiBvcHRpb25WYWx1ZS5cclxuICBkaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBjb2x1bW4/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJlxyXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXHJcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQ/Lmxlbmd0aCA+IDBcclxuICAgICkge1xyXG4gICAgICBjb25zdCBrZXk6IGFueSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoXHJcbiAgICAgICAgKHJvd0luZm8pID0+XHJcbiAgICAgICAgICByb3dJbmZvPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKClcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZGlzcGxheUZpZWxkVmFsdWUgPSBjb2x1bW4uZGF0YS5maW5kKFxyXG4gICAgICAgIChyZWNvcmQ6IGFueSkgPT5cclxuICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxyXG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcclxuICAgICAgKTtcclxuICAgICAgaWYgKGtleSAmJiBkaXNwbGF5RmllbGRWYWx1ZSkge1xyXG4gICAgICAgIHJvd1trZXldID0gZGlzcGxheUZpZWxkVmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQWRkIGF1dG9TZWFyY2ggb24gR3JpZC5cclxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGNvbHVtbjogYW55LCByb3c6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50ICYmIGNvbHVtbiAmJiByb3cpIHtcclxuICAgICAgY29sdW1uLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBjb2x1bW4sIHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZW1vdmUgRmlsdGVyVmFsdWVzXHJcbiAgY2xlYXJncmlkRmlsdGVyc1ZhbHVlKCkge1xyXG4gICAgY29uc3QgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAnY2xlYXJHbG9iYWxGaWx0ZXJCdG4nXHJcbiAgICApO1xyXG4gICAgaWYgKGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4pIHtcclxuICAgICAgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bi5jbGljaygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgICAgY29sLnZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRBbGxSb3dzQXRPbmNlKCkge1xyXG4gICAgaWYodGhpcy5lZGl0Um93UGVybWlzc2lvbil7XHJcbiAgICBpZiAodGhpcy5nZXRDbGFzc0ZvckVkaXRBbGxSb3dzKCdlZGl0Um93JykpIHtcclxuICAgICAgaWYodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKT0+IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiAmJiAoY29sdW1uLmZpbHRlcmluZyA9PT0gdHJ1ZSB8fCBjb2x1bW4uZmlsdGVyaW5nID09PSB1bmRlZmluZWQpKSl7XHJcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhpZGVFZGl0QWxsUm93c0J0biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUFsbFJvd3NBdE9uY2UoKSB7XHJcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcclxuICB9XHJcblxyXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xyXG4gIGNhbmNlbEFsbFJvd3NBdE9uY2UoKSB7XHJcbiAgICB0aGlzLnJvd3NEYXRhID0gWy4uLnRoaXMucm93c0RhdGFDb3B5XTtcclxuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKT0+e1xyXG4gICAgICBpZihjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpe1xyXG4gICAgICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdyk9PntcclxuICAgICAgICAgIGlmKHJvd1tjb2x1bW4uZmllbGRdKXtcclxuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF09IG5ldyBEYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9uQ2FuY2VsQWxsUm93cy5lbWl0KHRoaXMucm93c0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cyhjbGFzc05hbWU6IHN0cmluZyA9ICcnKSB7XHJcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgY29uc3QgZ2V0QnRuczogYW55ID1cclxuICAgICAgdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XHJcbiAgICBpZiAoZ2V0QnRucyAmJiBnZXRCdG5zLmxlbmd0aCA+IDApIHtcclxuICAgICAgc3VjY2VzcyA9IHRydWU7XHJcbiAgICAgIGlmIChjbGFzc05hbWUgPT09ICdzYXZlUm93Jykge1xyXG4gICAgICAgIHRoaXMuZWRpdEFsbFJlY29yZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgcmVjb3JkcyQgPSBbXTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIGdldEJ0bnMpIHtcclxuICAgICAgICAgICAgY29uc3Qgcm93U2F2ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcclxuICAgICAgICAgICAgICByZXNvbHZlKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmVjb3JkcyQucHVzaChyb3dTYXZlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFByb21pc2UuYWxsKHJlY29yZHMkKS50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFBQUFcIik7XHJcbiAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnNhdmVSZWNvcmRBcnJheSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5ID0gW107XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LDIwKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZ2V0QnRucykge1xyXG4gICAgICAgICAgaWYoY2xhc3NOYW1lID09ICdjYW5jZWxSb3cnKXtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaXRlbS5jbGljaygpO1xyXG4gICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaXRlbS5jbGljaygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbiAgfVxyXG5cclxuICAvL0ZvY3VzZWQgY2FsZW5kZXIgaW5wdXQgb24gc2VsZWN0IGRhdGVcclxuICBzZWxlY3REYXRlKGNvbHVtbjogYW55KSB7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQpPy5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgLy9hcHBseSBmaWx0ZXIgb24gZ3JpZCB3aGVuIHNlYXJjaCBidG4gY2xpY2tlZFxyXG4gIGFwcGx5R2lyZEZpbHRlckJ0bigpIHtcclxuICAgIGlmICh0aGlzLmdyaWRGaWx0ZXJPYmogJiYgT2JqZWN0LmtleXModGhpcy5ncmlkRmlsdGVyT2JqKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlFbnRlckV2ZW50KFxyXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5maWx0ZXIsXHJcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmV2ZW50LFxyXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5jb2x1bW5cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGludm9rZSBtdWx0aVNlbGVjdGlvbiBjbGljayBldmVudFxyXG4gIG11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvd0luZm86IGFueSkge1xyXG4gICAgaWYgKHJvd0luZm8pIHtcclxuICAgICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93SW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XHJcbiAgICBmaWx0ZXIoZXZlbnQudGFyZ2V0KTtcclxuICB9XHJcblxyXG4gIHNlYXJjaERyb3Bkb3duRmlsdGVyKGZpbHRlcjogYW55LCBldmVudDogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xyXG4gICAgdGhpcy5kcm9wRG93bkZpbHRlciA9IHsgZmlsdGVyOiBmaWx0ZXIsIGV2ZW50OiBldmVudCwgY29sdW1uOiBjb2x1bW4gfTtcclxuICAgIGlmIChjb2x1bW4uYWxsb3dTZWFyY2ggIT09IHRydWUpIHtcclxuICAgICAgdGhpcy5hcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlciwgZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9va3VwQ2xlYXJWYWx1ZShjb2x1bW46IGFueSwgcm93PzogYW55KSB7XHJcbiAgICBpZiAocm93KSB7XHJcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb2x1bW4udmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcclxuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcclxuICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBpbnZva2Ugd2hlbiBjbGljayBoZWFkZXIgY2hlY2tib3ggZmlsdGVyXHJcbiAgY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW46IElHcmlkQ29sdW1uKSB7XHJcbiAgICBpZiAodGhpcy5lZGl0QWxsUmVjb3JkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOIFxyXG4gICAgICAgICAgJiZcclxuICAgICAgICAgIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2hlY2tib3gnICYmIGNvbHVtbi5maWx0ZXJpbmcgIT0gZmFsc2VcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gY29sdW1uLnZhbHVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvL3RoaXMub25DaGVja0JveEZpbHRlckNsaWNrLmVtaXQoY29sdW1uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy90aGlzLm9uQ2hlY2tCb3hGaWx0ZXJDbGljay5lbWl0KGNvbHVtbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hlY2tCb3hGaWx0ZXJDbGljay5lbWl0KGNvbHVtbik7XHJcbiAgfVxyXG4gICAgLy9zZXQgaGVhZGVyIGNoZWNrYm94IHZhbHVlIGZvciBnZXR0aW5nIGFsbCBjb2x1bW5zIG9uIHN0YXkgYWRtaW5cclxuICAgIHNldEhlYWRlckNoZWNrQm94VmFsdWUodmFsdWU6IGFueSl7XHJcbiAgICAgIHRoaXMuaXNJbmNsdWRlZEFsbENvbHVtbnMuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAvLyBzZXQgY2FsZW5kZXIgMiBPciA0IGRpZ2l0IHllYXIgZm9ybWF0XHJcbiAgY2FsZW5kZXJJbnB1dFZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSl7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNvbHVtbi5maWVsZCArIHJvd1t0aGlzLmRhdGFLZXldKVswXT8uYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCAodmFsOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeWVhciA9IHZhbD8udGFyZ2V0Py52YWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJy8nKVsyXTtcclxuICAgICAgaWYoIHllYXIgJiYgeWVhci5sZW5ndGggPT09IDQpe1xyXG4gICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQ9ICdtbS9kZC95eSc7XHJcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZSh2YWw/LnRhcmdldD8udmFsdWUpPy50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKTtcclxuICAgICAgfSBlbHNlIGlmKHllYXIgJiYgeWVhci5sZW5ndGgpe1xyXG4gICAgICAgIHRoaXMuY2FsZW5kYXJGb3JtYXQgPSAnbW0vZGQveSc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG4iXX0=
|