@cqa-lib/cqa-ui 1.1.528 → 1.1.529

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.
@@ -1078,6 +1078,8 @@ export class ModularTableTemplateComponent {
1078
1078
  folders: this.folders,
1079
1079
  labels: this.modularLabels,
1080
1080
  currentFolderId: this.selectedFolderId,
1081
+ // When moving FROM Unorganised, disable the Unorganised destination row.
1082
+ rootDisabled: this.selectedFolderId == null,
1081
1083
  },
1082
1084
  },
1083
1085
  buttons: [
@@ -1472,4 +1474,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
1472
1474
  }], columnVisibility: [{
1473
1475
  type: Input
1474
1476
  }] } });
1475
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxhci10YWJsZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RlbXBsYXRlcy9tb2R1bGFyLXRhYmxlLXRlbXBsYXRlL21vZHVsYXItdGFibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvbW9kdWxhci10YWJsZS10ZW1wbGF0ZS9tb2R1bGFyLXRhYmxlLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBS1osdUJBQXVCLEVBR3ZCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFCLHNCQUFzQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFLbEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFaEYsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsc0JBQXNCLEdBaUJ2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTdkYsTUFBTSxPQUFPLDZCQUE2QjtJQXFVeEMsWUFBb0IsR0FBc0IsRUFBVSxhQUE0QjtRQUE1RCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBcFVoRixvQkFBb0I7UUFDWCxzQkFBaUIsR0FBVyxtQkFBbUIsQ0FBQztRQUNoRCxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixjQUFT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QUFhO3NCQUF6QixLQUFLO2dCQVNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFTRyxXQUFXO3NCQUFwQixNQUFNO2dCQWtCRyxhQUFhO3NCQUF0QixNQUFNO2dCQVFHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFRRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBT0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUcsd0JBQXdCO3NCQUFqQyxNQUFNO2dCQU1HLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQzRCLHNCQUFzQjtzQkFBeEQsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBMkJwQixnQkFBZ0I7c0JBQTVCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNGaWx0ZXJJdGVtLCBEeW5hbWljRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZmlsdGVycy9keW5hbWljLWZpbHRlci9keW5hbWljLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY1RhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vdGFibGUvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29sdW1uLXZpc2liaWxpdHkvY29sdW1uLXZpc2liaWxpdHkuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlQWN0aW9uIH0gZnJvbSAnLi4vLi4vdGFibGUtYWN0aW9uLXRvb2xiYXIvdGFibGUtYWN0aW9uLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb25maWcgfSBmcm9tICcuLi8uLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVNUFRZX1NUQVRFX0lNQUdFUyB9IGZyb20gJy4uLy4uL2Fzc2V0cy9pbWFnZXMvaW1hZ2UtYXNzZXRzLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERFRkFVTFRfTU9EVUxBUl9DT05GSUcsXG4gIERFRkFVTFRfTU9EVUxBUl9MQUJFTFMsXG4gIERFRkFVTFRfUkVPUkRFUl9MQUJFTFMsXG4gIEZvbGRlckNyZWF0ZWRQYXlsb2FkLFxuICBGb2xkZXJEZWxldGVSZXF1ZXN0ZWRQYXlsb2FkLFxuICBGb2xkZXJEZWxldGVTdHJhdGVneSxcbiAgRm9sZGVyRGVsZXRlZFBheWxvYWQsXG4gIEZvbGRlcklkQWNjZXNzb3IsXG4gIEZvbGRlck5vZGUsXG4gIEZvbGRlclJlbmFtZWRQYXlsb2FkLFxuICBGb2xkZXJNb3ZlUmVxdWVzdGVkUGF5bG9hZCxcbiAgRm9sZGVyTW92ZWRQYXlsb2FkLFxuICBGb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWRQYXlsb2FkLFxuICBNb2R1bGFyQ29uZmlnLFxuICBNb2R1bGFyTGFiZWxzLFxuICBSZW9yZGVyTGFiZWxzLFxuICBSZW9yZGVyU2F2ZVBheWxvYWQsXG4gIFRlc3RzTW92ZWRQYXlsb2FkLFxuICBCdWxrQWN0aW9uSW52b2tlZFBheWxvYWQsXG59IGZyb20gJy4vbW9kdWxhci10YWJsZS10ZW1wbGF0ZS5tb2RlbHMnO1xuaW1wb3J0IHsgTW92ZVRvRm9sZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2dzL21vdmUtdG8tZm9sZGVyLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmV3Rm9sZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2dzL25ldy1mb2xkZXItZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWxldGVGb2xkZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2RpYWxvZ3MvZGVsZXRlLWZvbGRlci1kaWFsb2cuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLW1vZHVsYXItdGFibGUtdGVtcGxhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kdWxhci10YWJsZS10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW9kdWxhclRhYmxlVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLy8gU2VhcmNoIGJhciBpbnB1dHNcbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWFyY2ggY29tcG9uZW50cyc7XG4gIEBJbnB1dCgpIHNlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2hvd0NsZWFyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1NlYXJjaEJhcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNFeHBvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gU2VhcmNoIGJhciBvdXRwdXRzXG4gIEBPdXRwdXQoKSBvblNlYXJjaENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25FeHBvcnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0eXBlOiAnbG9jYWwnIHwgJ2VtYWlsJzsgZW1haWxzPzogc3RyaW5nW107IGZyYW1ld29yaz86ICdXRUJEUklWRVJfSU8nIHwgJ1NFTEVOSVVNX0pBVkEnOyBzZWxlY3RlZEl0ZW1zOiBhbnlbXSB9IHwgdm9pZD4oKTtcbiAgLy8gRmlsdGVyIG91dHB1dHNcbiAgQE91dHB1dCgpIG9uQXBwbHlGaWx0ZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25SZXNldEZpbHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25DbGVhckFsbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZUNoaXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvLyBGaWx0ZXIgaW5wdXRzXG4gIEBJbnB1dCgpIGZpbHRlckNvbmZpZzogRHluYW1pY0ZpbHRlckl0ZW1bXSA9IFtdO1xuICBASW5wdXQoKSBmaWx0ZXJNb2RlbDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBASW5wdXQoKSBzaG93RmlsdGVyUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0ZpbHRlckJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gT3RoZXIgYnV0dG9ucyBpbnB1dCAoYXJyYXkgb2YgYnV0dG9uIHRlbXBsYXRlcy9jb21wb25lbnRzKVxuICBASW5wdXQoKSBvdGhlckJ1dHRvbnM6IFRlbXBsYXRlUmVmPGFueT5bXSA9IFtdO1xuICBcbiAgLy8gT3RoZXIgZHJvcGRvd24gYnV0dG9ucyBpbnB1dCAoYXJyYXkgb2YgZHJvcGRvd24gYnV0dG9uIHRlbXBsYXRlcy9jb21wb25lbnRzKVxuICBASW5wdXQoKSBvdGhlckRyb3BEb3duQnV0dG9uczogVGVtcGxhdGVSZWY8YW55PltdID0gW107XG4gIFxuICAvLyBPdGhlciBzZWxlY3QgZHJvcGRvd24gYnV0dG9ucyBpbnB1dCAoYXJyYXkgb2Ygc2VsZWN0IGRyb3Bkb3duIGJ1dHRvbiB0ZW1wbGF0ZXMvY29tcG9uZW50cylcbiAgQElucHV0KCkgb3RoZXJTZWxlY3REcm9wRG93bkJ1dHRvbnM6IFRlbXBsYXRlUmVmPGFueT5bXSA9IFtdO1xuICBcbiAgLy8gTGVnYWN5IHNpbmdsZSBidXR0b24gaW5wdXRzIChkZXByZWNhdGVkLCBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAvKiogQGRlcHJlY2F0ZWQgVXNlIG90aGVyQnV0dG9ucyBhcnJheSBpbnN0ZWFkICovXG4gIEBJbnB1dCgpIG90aGVyQnV0dG9uTGFiZWw6IHN0cmluZyA9ICdPdGhlciBCdXR0b24nO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIG90aGVyQnV0dG9ucyBhcnJheSBpbnN0ZWFkICovXG4gIEBJbnB1dCgpIG90aGVyQnV0dG9uVmFyaWFudDogJ2ZpbGxlZCcgfCAnb3V0bGluZWQnIHwgJ3RleHQnIHwgJ2VsZXZhdGVkJyB8ICd0b25hbCcgfCAnZ3JleS1zb2xpZCcgPSAnZmlsbGVkJztcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBvdGhlckJ1dHRvbnMgYXJyYXkgaW5zdGVhZCAqL1xuICBASW5wdXQoKSBzaG93T3RoZXJCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBcbiAgLy8gQWN0aW9uIG1lbnUgYnV0dG9uICh0aHJlZS1kb3QgbWVudSBpbiB0YWJsZSByb3dzKVxuICBASW5wdXQoKSBzaG93QWN0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBTZXR0aW5ncyBhbmQgcmVmcmVzaCBidXR0b25zXG4gIEBJbnB1dCgpIHNob3dTZXR0aW5nc0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBdXRvUmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gVmlldy1tb2RlIHRvZ2dsZSAoTGlzdCB8IE1vZHVsYXIpLiBIaWRkZW4gYnkgZGVmYXVsdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgQElucHV0KCkgc2hvd1ZpZXdNb2RlVG9nZ2xlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZpZXdNb2RlOiAnbGlzdCcgfCAnbW9kdWxhcicgPSAnbGlzdCc7XG4gIEBJbnB1dCgpIHZpZXdNb2RlTGFiZWxzOiB7IGxpc3Q6IHN0cmluZzsgbW9kdWxhcjogc3RyaW5nIH0gPSB7IGxpc3Q6ICdMaXN0JywgbW9kdWxhcjogJ01vZHVsYXInIH07XG4gIEBPdXRwdXQoKSB2aWV3TW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8J2xpc3QnIHwgJ21vZHVsYXInPigpO1xuXG4gIGdldCB2aWV3TW9kZVNlZ21lbnRzKCk6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgaWNvbj86IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgbGFiZWw6IHRoaXMudmlld01vZGVMYWJlbHMubGlzdCwgdmFsdWU6ICdsaXN0JywgaWNvbjogJ3ZpZXdfbGlzdCcgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudmlld01vZGVMYWJlbHMubW9kdWxhciwgdmFsdWU6ICdtb2R1bGFyJywgaWNvbjogJ2ZvbGRlcicgfSxcbiAgICBdO1xuICB9XG5cbiAgb25WaWV3TW9kZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHZhbHVlID09PSAnbW9kdWxhcicgPyAnbW9kdWxhcicgOiAnbGlzdCc7XG4gICAgaWYgKG5leHQgIT09IHRoaXMudmlld01vZGUpIHtcbiAgICAgIHRoaXMudmlld01vZGUgPSBuZXh0O1xuICAgICAgdGhpcy52aWV3TW9kZUNoYW5nZS5lbWl0KG5leHQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERhdGEgaW5wdXRcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcblxuICAvLyBFbXB0eSBzdGF0ZSBpbnB1dHNcbiAgQElucHV0KCkgaXNFbXB0eVN0YXRlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVtcHR5U3RhdGVDb25maWc6IEVtcHR5U3RhdGVDb25maWcgPSB7XG4gICAgdGl0bGU6ICdObyBEYXRhIEF2YWlsYWJsZSBZZXQnLFxuICAgIGRlc2NyaXB0aW9uOiAnUnVuIG9yIHVwbG9hZCB5b3VyIGZpcnN0IHRlc3QgdG8gc2VlIHlvdXIgYW5hbHl0aWNzIGFuZCB0cmVuZHMgaGVyZS4gV2F0Y2ggeW91ciBxdWFsaXR5IG1ldHJpY3MgY29tZSB0byBsaWZlIHdpdGggcmVhbC10aW1lIGluc2lnaHRzLicsXG4gICAgaW1hZ2VVcmw6IEVNUFRZX1NUQVRFX0lNQUdFUy5EQVNIQk9BUkQsXG4gICAgYWN0aW9uczogW3sgbGFiZWw6ICdSdW4gVGVzdCBTdWl0ZScsIHZhcmlhbnQ6ICdmaWxsZWQnIH1dLFxuICB9O1xuXG4gIC8vIEFjdGlvbiBiYXIgaW5wdXRzXG4gIEBJbnB1dCgpIGFjdGlvbnM6IFRhYmxlQWN0aW9uW10gPSBbXG4gICAgeyBcbiAgICAgIGlkOiAnZGVsZXRlJywgXG4gICAgICBsYWJlbDogJ0RlbGV0ZScsIFxuICAgICAgaWNvbjogJ2RlbGV0ZScsIFxuICAgICAgdG9vbHRpcDogJ0RlbGV0ZSBzZWxlY3RlZCcsXG4gICAgICBvbkNsaWNrOiAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnRGVsZXRlIGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBcbiAgICAgIGlkOiAnZWRpdCcsIFxuICAgICAgbGFiZWw6ICdFZGl0JywgXG4gICAgICBpY29uOiAnZWRpdCcsIFxuICAgICAgdG9vbHRpcDogJ0VkaXQgc2VsZWN0ZWQnLFxuICAgICAgb25DbGljazogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0VkaXQgYWN0aW9uIGNsaWNrZWQ6JywgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IFxuICAgICAgaWQ6ICdhZGQtdGFnJywgXG4gICAgICBsYWJlbDogJ0FkZCBUYWcnLCBcbiAgICAgIGljb246ICdsb2NhbF9vZmZlcicsIFxuICAgICAgdG9vbHRpcDogJ0FkZCB0YWdzJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBZGQgdGFnIGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBcbiAgICAgIGlkOiAncmVtb3ZlLXRhZycsIFxuICAgICAgbGFiZWw6ICdSZW1vdmUgVGFnJywgXG4gICAgICBpY29uOiAnbGFiZWxfb2ZmJywgXG4gICAgICB0b29sdGlwOiAnUmVtb3ZlIHRhZ3MnLFxuICAgICAgb25DbGljazogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZSB0YWcgYWN0aW9uIGNsaWNrZWQ6JywgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSxcbiAgXTtcblxuICAvLyBDaGlwcyBpbnB1dHNcbiAgQElucHV0KCkgY2hpcHM6IEFycmF5PHsga2V5Pzogc3RyaW5nOyBsYWJlbD86IHN0cmluZzsgdGV4dDogc3RyaW5nOyBmdWxsVGV4dD86IHN0cmluZzsgaGFzTW9yZT86IGJvb2xlYW4gfT4gPSBbXTtcbiAgQElucHV0KCkgZmlsdGVyQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFRhYmxlIGlucHV0c1xuICBASW5wdXQoKSBjb2x1bW5zOiBEeW5hbWljVGFibGVDb2x1bW5bXSA9IFtdO1xuICBASW5wdXQoKSByb3dTZWxlY3RhYmxlPzogKHJvdzogYW55KSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWw6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWzEwLCAyMCwgNDAsIDYwLCA4MF07XG4gIEBJbnB1dCgpIHBhZ2VTaXplTWVudURpcmVjdGlvbjogJ2F1dG8nIHwgJ3VwJyB8ICdkb3duJyA9ICdhdXRvJztcbiAgLy8gU2VydmVyLXNpZGUgcGFnaW5hdGlvbiBjb250cm9sc1xuICBASW5wdXQoKSBzZXJ2ZXJTaWRlUGFnaW5hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0b3RhbEVsZW1lbnRzOiBudW1iZXIgPSAwO1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PigpO1xuICAvKipcbiAgICogV2hlbiBmYWxzZSwgaGVhZGVyIHNvcnQgZG9lcyBub3QgcmVvcmRlciByb3dzIGxvY2FsbHkgKHVzZSB3aXRoIHNlcnZlclNpZGVQYWdpbmF0aW9uICsgc29ydENoYW5nZSkuXG4gICAqIERlZmF1bHQgdHJ1ZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZUxvY2FsU29ydDogYm9vbGVhbiA9IHRydWU7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgZmllbGRJZDogc3RyaW5nO1xuICAgIGZpZWxkVmFsdWU/OiBzdHJpbmc7XG4gICAgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB8IG51bGw7XG4gIH0+KCk7XG4gIC8vIExvYWRlciBjb250cm9scyAocGFzc2VkIGRvd24gdG8gZHluYW1pYyB0YWJsZSlcbiAgQElucHV0KCkgaXNUYWJsZUxvYWRpbmc/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc1RhYmxlRGF0YUxvYWRpbmc/OiBib29sZWFuO1xuICAvLyBCYWNrd2FyZC1jb21wYXRpYmlsaXR5IGZsYWc7IGlmIHByb3ZpZGVkLCBkeW5hbWljIHRhYmxlIHdpbGwgdXNlIGl0IHdoZW4gc3BlY2lmaWMgZmxhZ3MgYXJlIHVuZGVmaW5lZFxuXG4gIC8vIE9wdGlvbmFsIGdldHRlciBmb3IgSlNPTiBwYXRoIHBlciBjZWxsLiBXaGVuIHByb3ZpZGVkLCBkb3VibGUtY2xpY2tpbmcgYSBjZWxsIGNvcGllcyB0aGUgcGF0aC5cbiAgQElucHV0KCkgY2VsbEpzb25QYXRoR2V0dGVyPzogKHJvd0luZGV4OiBudW1iZXIsIGNvbElkOiBzdHJpbmcsIHJvdzogYW55KSA9PiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWwgaGFuZGxlciBjYWxsZWQgd2hlbiBhIEpTT04gcGF0aCBpcyBjb3BpZWQgZnJvbSBhIHRhYmxlIGNlbGxcbiAgQElucHV0KCkgb25Kc29uUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgcGF0aDogc3RyaW5nOyBzb3VyY2U6IHN0cmluZyB9KSA9PiB2b2lkO1xuXG4gIC8vIFNlbGVjdGVkIGl0ZW1zIChmdWxsIG9iamVjdHMpIGZvciBtYWludGFpbmluZyBzZWxlY3Rpb24gYWNyb3NzIHBhZ2luYXRpb24gKHNlcnZlci1zaWRlKVxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBhY3Rpb24gdG9vbGJhciByZW5kZXJzIHRoZSBcIlNlbGVjdCBhbGxcIiBhZmZvcmRhbmNlLiBEZWZhdWx0cyB0byBmYWxzZVxuICAgKiBmb3Igbm93IOKAlCBob3N0IG9wdHMgaW4uIE1hdGNoZXMgdGhlIGN1cnJlbnQgcHJvZHVjdCByZXF1aXJlbWVudCB0byBoaWRlIFNlbGVjdCBBbGwuXG4gICAqL1xuICBASW5wdXQoKSBzaG93U2VsZWN0QWxsSW5Ub29sYmFyOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBhY3Rpb24gdG9vbGJhciByZW5kZXJzIHRoZSBkaXNtaXNzICjDlykgYWZmb3JkYW5jZS4gRGVmYXVsdHMgdG8gZmFsc2VcbiAgICogZm9yIG5vdyDigJQgaG9zdCBvcHRzIGluLiBNYXRjaGVzIHRoZSBjdXJyZW50IHByb2R1Y3QgcmVxdWlyZW1lbnQgdG8gaGlkZSBDYW5jZWwuXG4gICAqL1xuICBASW5wdXQoKSBzaG93RGlzbWlzc0luVG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogQm91bmQgdG8gdGhlIHRvb2xiYXIncyBcIlNlbGVjdCBhbGxcIiBjaGVja2JveCDigJQgZHJpdmVzIHRoZSBjaGVja2VkIHN0YXRlLiAqL1xuICBASW5wdXQoKSBhbGxTZWxlY3RlZEluVG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEludGVybmFsIHN0YXRlIGZvciBjb2x1bW4gdmlzaWJpbGl0eVxuICBwcml2YXRlIF9jb2x1bW5WaXNpYmlsaXR5OiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnID0ge307XG4gIHByaXZhdGUgX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4gPSBbXTtcbiAgZmlsdGVyZWRSb3dzOiBhbnlbXSA9IFtdO1xuICBwYWdlZFJvd3M6IGFueVtdID0gW107XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGb2xkZXIgLyBtb2R1bGFyIGlucHV0c1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIEBJbnB1dCgpIGZvbGRlcnM6IEZvbGRlck5vZGVbXSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3RlZEZvbGRlcklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgZXhwYW5kZWRGb2xkZXJJZHM6IG51bWJlcltdID0gW107XG4gIEBJbnB1dCgpIHVub3JnYW5pc2VkQ291bnQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGZvbGRlcklkQWNjZXNzb3I6IEZvbGRlcklkQWNjZXNzb3IgPSAocm93OiBhbnkpID0+IHJvdz8uZm9sZGVySWQgPz8gbnVsbDtcbiAgQElucHV0KCkgbW9kdWxhckNvbmZpZzogTW9kdWxhckNvbmZpZyA9IHsgLi4uREVGQVVMVF9NT0RVTEFSX0NPTkZJRyB9O1xuICBASW5wdXQoKSBtb2R1bGFyTGFiZWxzOiBNb2R1bGFyTGFiZWxzID0geyAuLi5ERUZBVUxUX01PRFVMQVJfTEFCRUxTIH07XG4gIEBJbnB1dCgpIGJ1bGtBY3Rpb25zOiBUYWJsZUFjdGlvbltdID0gW107XG4gIEBJbnB1dCgpIHNpZGViYXJDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGxpYnJhcnkgb3BlbnMgaXRzIG93biBNb3ZlIGRpYWxvZyBmb3IgY29udmVuaWVuY2VcbiAgICogZHVyaW5nIHRlc3RpbmcuIEhvc3RzIHRha2luZyBvdmVyIEFQSSArIFVYIHNob3VsZCBzZXQgdGhpcyB0byBgZmFsc2VgIGFuZFxuICAgKiBsaXN0ZW4gb24gYG1vdmVSZXF1ZXN0ZWRgIHRvIHJlbmRlciB0aGVpciBvd24uXG4gICAqL1xuICBASW5wdXQoKSB1c2VJbnRlcm5hbERpYWxvZ3M6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRm9sZGVyIC8gbW9kdWxhciBvdXRwdXRzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgQE91dHB1dCgpIGZvbGRlclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgZm9sZGVyRXhwYW5zaW9uVG9nZ2xlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogbnVtYmVyOyBleHBhbmRlZDogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgZm9sZGVyQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9sZGVyQ3JlYXRlZFBheWxvYWQ+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiKyBOZXcgZm9sZGVyXCI7IGhvc3Qgc2hvdWxkIG9wZW4gYSBjcmVhdGlvbiBtb2RhbC4gKi9cbiAgQE91dHB1dCgpIGZvbGRlckNyZWF0ZVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCB9PigpO1xuICBAT3V0cHV0KCkgZm9sZGVyUmVuYW1lZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9sZGVyUmVuYW1lZFBheWxvYWQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyBhZnRlciB0aGUgdXNlciBjb25maXJtcyBmb2xkZXIgZGVsZXRpb24gdmlhIHRoZSBpbnRlcm5hbCBkaWFsb2cgKG9yXG4gICAqIGltbWVkaWF0ZWx5LCB3aGVuIGB1c2VJbnRlcm5hbERpYWxvZ3NgIGlzIGZhbHNlIGFuZCB0aGUgaG9zdCBkcml2ZXMgdGhlIFVYKS5cbiAgICogUGF5bG9hZCBub3cgaW5jbHVkZXMgdGhlIHVzZXIncyBjaG9zZW4gYHN0cmF0ZWd5YCBmb3Igd2hhdCBoYXBwZW5zIHRvIHRoZVxuICAgKiBmb2xkZXIncyB0ZXN0IGNhc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvbGRlckRlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlckRlbGV0ZWRQYXlsb2FkPigpO1xuICBAT3V0cHV0KCkgdGVzdHNNb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdHNNb3ZlZFBheWxvYWQ+KCk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEJ1bGsgYWN0aW9uIHRvb2xiYXIgc3VyZmFjZSDigJQgbmFtaW5nIG1pcnJvcnMgY3FhLXRhYmxlLXRlbXBsYXRlIHNvIGNvbnN1bWVyc1xuICAvLyBnZXQgdGhlIHNhbWUgZXZlbnRzIGZyb20gZWl0aGVyIGNvbXBvbmVudCAocGx1cyB0aGUgZm9sZGVyIGV2ZW50cyBiZWxvdykuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBGaXJlcyBvbiByYXcgdG9vbGJhciBhY3Rpb24gY2xpY2sg4oCUICpiZWZvcmUqIGFueSBpbnRlcm5hbCBkaWFsb2cgb3BlbnMuICovXG4gIEBPdXRwdXQoKSBidWxrQWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZzsgc2VsZWN0ZWQ6IGFueVtdIH0+KCk7XG4gIC8qKiBGaXJlcyB3aGVuIHRoZSB0b29sYmFyJ3MgXCJTZWxlY3QgYWxsXCIgaXMgdG9nZ2xlZC4gKi9cbiAgQE91dHB1dCgpIGJ1bGtTZWxlY3RBbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIC8qKiBGaXJlcyB3aGVuIHRoZSB0b29sYmFyJ3MgZGlzbWlzcyAow5cpIGlzIGNsaWNrZWQuICovXG4gIEBPdXRwdXQoKSBidWxrRGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgKmFmdGVyKiB0aGUgbGlicmFyeS1pbnRlcm5hbCBtb3ZlLXRvLWZvbGRlciBkaWFsb2cgcmVzb2x2ZXMgd2l0aCBhXG4gICAqIHVzZXIgY29uZmlybWF0aW9uLCBPUiBpbW1lZGlhdGVseSBmb3Igbm9uLWRpYWxvZyBidWxrIGFjdGlvbnMgc3VwcGxpZWQgYnlcbiAgICogdGhlIGhvc3QuIEhvc3RzIHdpdGggdGhlaXIgb3duIFVYIHNob3VsZCBsaXN0ZW4gb24gYGJ1bGtBY3Rpb25DbGlja2AgK1xuICAgKiBgbW92ZVJlcXVlc3RlZGAgYW5kIHRyZWF0IHRoaXMgYXMgdGhlIFwiY29uZmlybWVkXCIgc2lnbmFsLlxuICAgKi9cbiAgQE91dHB1dCgpIGJ1bGtBY3Rpb25JbnZva2VkID0gbmV3IEV2ZW50RW1pdHRlcjxCdWxrQWN0aW9uSW52b2tlZFBheWxvYWQ+KCk7XG5cbiAgQE91dHB1dCgpIHNpZGViYXJDb2xsYXBzZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSb3ctcmVvcmRlciBzdXJmYWNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqIFdoZW4gdHJ1ZSwgcmVuZGVycyBhIFwiUmVvcmRlclwiIGJ1dHRvbiBpbiB0aGUgdG9vbGJhci4gSG9zdC1kcml2ZW4uICovXG4gIEBJbnB1dCgpIHNob3dSZW9yZGVyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBIb3N0IGZsaXBzIHRoaXMgdHJ1ZSB3aGlsZSBpdHMgYnVsay11cGRhdGUgQVBJIGNhbGwgaXMgaW4tZmxpZ2h0LiBUaGVcbiAgICogY29tcG9uZW50IGtlZXBzIHRoZSByZW9yZGVyIFVJIHBpbm5lZCAoXCJTYXZpbmcuLi5cIikgd2hpbGUgdHJ1ZSBhbmQgZXhpdHNcbiAgICogcmVvcmRlciBtb2RlIHdoZW4gaXQgZmxpcHMgYmFjayB0byBmYWxzZSAodGhlIFwiZnV0dXJlIEFQSSBjYWxsXCIgaG9vaykuXG4gICAqL1xuICBASW5wdXQoKSByZW9yZGVyU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBQYXJ0aWFsIG92ZXJyaWRlIGZvciB0aGUgZGVmYXVsdCByZW9yZGVyIGxhYmVscyAoXCJSZW9yZGVyXCIsIFwiRG9uZVwiLCBldGMuKS4gKi9cbiAgQElucHV0KCkgc2V0IHJlb3JkZXJMYWJlbHMocGFydGlhbDogUGFydGlhbDxSZW9yZGVyTGFiZWxzPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Jlb3JkZXJMYWJlbHMgPSB7IC4uLkRFRkFVTFRfUkVPUkRFUl9MQUJFTFMsIC4uLihwYXJ0aWFsIHx8IHt9KSB9O1xuICB9XG4gIGdldCByZW9yZGVyTGFiZWxzKCk6IFJlb3JkZXJMYWJlbHMge1xuICAgIHJldHVybiB0aGlzLl9yZW9yZGVyTGFiZWxzO1xuICB9XG4gIHByaXZhdGUgX3Jlb3JkZXJMYWJlbHM6IFJlb3JkZXJMYWJlbHMgPSB7IC4uLkRFRkFVTFRfUkVPUkRFUl9MQUJFTFMgfTtcblxuICAvKiogRmlyZXMgd2hlbiB0aGUgdXNlciBjbGlja3MgXCJSZW9yZGVyXCIgYW5kIHRoZSBjb21wb25lbnQgZW50ZXJzIHJlb3JkZXIgbW9kZS4gKi9cbiAgQE91dHB1dCgpIHJlb3JkZXJTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiQ2FuY2VsXCIg4oCUIHRoZSBvcmlnaW5hbCBvcmRlciBpcyBhbHJlYWR5IHJlc3RvcmVkLiAqL1xuICBAT3V0cHV0KCkgcmVvcmRlckNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiRG9uZVwiLiBIb3N0IHNob3VsZCB0YWtlIGBvcmRlcmVkSXRlbXNgLCBjYWxsIGl0c1xuICAgKiBidWxrLXVwZGF0ZSBBUEksIHJlZnJlc2ggYFtkYXRhXWAsIGFuZCBmbGlwIGByZW9yZGVyU2F2aW5nYCBiYWNrIHRvIGBmYWxzZWAg4oCUXG4gICAqIHRoZSBjb21wb25lbnQgd2lsbCB0aGVuIGV4aXQgcmVvcmRlciBtb2RlLlxuICAgKlxuICAgKiBOb3RlOiBmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbiwgYG9yZGVyZWRJdGVtc2AgaXMgdGhlICpjdXJyZW50IHBhZ2Ugc2xpY2UqLFxuICAgKiBub3QgdGhlIGZ1bGwgZGF0YXNldCDigJQgc2FtZSBhcyB0aGUgaW4tbWVtb3J5IHZpZXcgdGhlIHVzZXIgd2FzIGRyYWdnaW5nLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlb3JkZXJTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxSZW9yZGVyU2F2ZVBheWxvYWQ+KCk7XG5cbiAgLyoqIEludGVybmFsIOKAlCB0cnVlIHdoaWxlIHRoZSB1c2VyIGlzIGluIHJlb3JkZXIgbW9kZS4gKi9cbiAgaXNSZW9yZGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBTbmFwc2hvdCBvZiBgcGFnZWRSb3dzYCB0YWtlbiBvbiBlbnRlcjsgdXNlZCB0byByZXZlcnQgb24gY2FuY2VsLiAqL1xuICBwcml2YXRlIHJlb3JkZXJTbmFwc2hvdDogYW55W10gfCBudWxsID0gbnVsbDtcbiAgLyoqIERyYWZ0IG9mIHRoZSByZW9yZGVyZWQgcm93cyAoY3VycmVudCB3b3JraW5nIHN0YXRlKS4gKi9cbiAgcHJpdmF0ZSByZW9yZGVyRHJhZnQ6IGFueVtdIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBBdXRvLXJlZnJlc2ggaW50ZXJ2YWwgY2FwdHVyZWQgb24gZW50ZXIsIHNvIHdlIGNhbiByZXN0b3JlIG9uIGNhbmNlbC9kb25lLiAqL1xuICBwcml2YXRlIHJlb3JkZXJTYXZlZEF1dG9SZWZyZXNoOiBudW1iZXIgPSAwO1xuICAvKiogVHJ1ZSBhZnRlciBEb25lIGhhcyBiZWVuIGNsaWNrZWQsIGF3YWl0aW5nIHRoZSBob3N0J3MgYHJlb3JkZXJTYXZpbmdgIOKGkiBmYWxzZSBmbGlwLiAqL1xuICBwcml2YXRlIHJlb3JkZXJBd2FpdGluZ1NhdmVGbGlwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBcIk1vdmUgdG8gZm9sZGVyXCIgYnVsayBhY3Rpb24g4oCUICpiZWZvcmUqIHRoZVxuICAgKiBpbnRlcm5hbCBkaWFsb2cgb3BlbnMuIEhvc3RzIHRoYXQgd2FudCB0byByZW5kZXIgdGhlaXIgb3duIG1vZGFsIHNob3VsZFxuICAgKiBzZXQgYHVzZUludGVybmFsRGlhbG9ncyA9IGZhbHNlYCBhbmQgbGlzdGVuIGhlcmUuXG4gICAqL1xuICBAT3V0cHV0KCkgbW92ZVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHRlc3RJZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj47XG4gICAgc2VsZWN0ZWQ6IGFueVtdO1xuICAgIGN1cnJlbnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbDtcbiAgICBmb2xkZXJzOiBGb2xkZXJOb2RlW107XG4gIH0+KCk7XG5cbiAgLyoqIEZpcmVzIHdoZW5ldmVyIHRoZSBjb21wb25lbnQncyBgc2VsZWN0ZWRJdGVtc2AgY2hhbmdlcyBmcm9tIHdpdGhpbiAoU2VsZWN0IEFsbCAvIERpc21pc3MpLiAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGEgZm9sZGVyJ3MgZGVsZXRlIGFmZm9yZGFuY2Ug4oCUICpiZWZvcmUqIHRoZVxuICAgKiBpbnRlcm5hbCBjb25maXJtYXRpb24gZGlhbG9nIG9wZW5zLiBIb3N0cyBvd25pbmcgdGhlIFVYIGxpc3RlbiBoZXJlLlxuICAgKiBQYXlsb2FkIGluY2x1ZGVzIGB0ZXN0Q291bnRgICsgYGhhc1BhcmVudGAgc28gaG9zdHMgY2FuIHJlbmRlciB0aGUgcmlnaHRcbiAgICogb3B0aW9ucyBpbiB0aGVpciBvd24gbW9kYWwuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9sZGVyRGVsZXRlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2xkZXJEZWxldGVSZXF1ZXN0ZWRQYXlsb2FkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIHBpY2tzIFwiTW92ZSBmb2xkZXJcIiBmcm9tIGEgZm9sZGVyIHJvdydzIGNvbnRleHQgbWVudSDigJRcbiAgICogKmJlZm9yZSogYW55IGRpYWxvZyBvcGVucy4gSG9zdHMgb3duaW5nIHRoZSBVWCBsaXN0ZW4gaGVyZSB3aXRoXG4gICAqIGB1c2VJbnRlcm5hbERpYWxvZ3MgPSBmYWxzZWAgYW5kIG9wZW4gdGhlaXIgb3duIGZvbGRlciBwaWNrZXIuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9sZGVyTW92ZVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9sZGVyTW92ZVJlcXVlc3RlZFBheWxvYWQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyBhZnRlciB0aGUgdXNlciBjb25maXJtcyBhIGZvbGRlciBtb3ZlIHZpYSB0aGUgaW50ZXJuYWwgcGlja2VyXG4gICAqIChvciBpbW1lZGlhdGVseSB3aGVuIGB1c2VJbnRlcm5hbERpYWxvZ3MgPSBmYWxzZWAgYW5kIHRoZSBob3N0IGRyaXZlcyBpdCkuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9sZGVyTW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlck1vdmVkUGF5bG9hZD4oKTtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgcGlja3MgXCJEdXBsaWNhdGUgZm9sZGVyXCIgZnJvbSBhIGZvbGRlciByb3cncyBjb250ZXh0IG1lbnUuXG4gICAqIFRoZSBsaWJyYXJ5IGRvZXNuJ3Qgb3duIHBlcnNpc3RlbmNlLCBzbyB0aGUgaG9zdCBpcyBleHBlY3RlZCB0byBjbG9uZSB0aGVcbiAgICogZm9sZGVyJ3Mgc3VidHJlZSBzZXJ2ZXItc2lkZSBhbmQgKnJlZmVyZW5jZSogKG5vdCBjb3B5KSB0aGUgdGVzdCBjYXNlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlckR1cGxpY2F0ZVJlcXVlc3RlZFBheWxvYWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHt9XG4gIHByaXZhdGUgcGVuZGluZ0ZpbHRlcnM6IGFueTtcbiAgcHJpdmF0ZSBhcHBsaWVkRmlsdGVyczogYW55O1xuICBwcml2YXRlIGF1dG9SZWZyZXNoVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG4gIEBPdXRwdXQoKSBvblJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uQXV0b1JlZnJlc2hDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNvbHVtblZpc2liaWxpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtblZpc2liaWxpdHlDb25maWc+KCk7XG4gIEBPdXRwdXQoKSBhdXRvUmVmcmVzaEludGVydmFsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBWaWV3Q2hpbGQoRHluYW1pY0ZpbHRlckNvbXBvbmVudCkgZHluYW1pY0ZpbHRlckNvbXBvbmVudD86IER5bmFtaWNGaWx0ZXJDb21wb25lbnQ7XG5cbiAgLy8gRGVyaXZlZCBjb2x1bW5zIHdpdGggdmlzaWJpbGl0eSBhcHBsaWVkLlxuICBjb21wdXRlZENvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIC8vIEF1dG8tZ2VuZXJhdGVkIHZpc2liaWxpdHkgY29sdW1ucyBmcm9tIGNvbHVtbnMgaW5wdXRcbiAgdmlzaWJpbGl0eUNvbHVtbnM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiA9IFtdO1xuXG4gIHByaXZhdGUgdXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpc2liaWxpdHkgPSB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5IHx8IHt9O1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29sdW1ucyB8fCBbXTtcbiAgICB0aGlzLmNvbXB1dGVkQ29sdW1ucyA9IHNvdXJjZS5tYXAoY29sID0+IHtcbiAgICAgIGlmIChbJ2NoZWNrYm94JywgJ2FjdGlvbnMnXS5pbmNsdWRlcyhjb2wuZmllbGRJZCkpIHtcbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNob3cgPSB2aXNpYmlsaXR5W2NvbC5maWVsZElkXTtcbiAgICAgIHJldHVybiB7IC4uLmNvbCwgaXNTaG93OiBzaG93ICE9PSBmYWxzZSB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5Q29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Q29sdW1ucyA9IHRoaXMubWFwVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgICB0aGlzLnZpc2liaWxpdHlDb2x1bW5zID0gdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnM7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBDb250cm9sbGVkIGNvbHVtbiB2aXNpYmlsaXR5OiBwYXJlbnQgY2FuIHNlZWQgYW5kIHB1c2ggdXBkYXRlcy5cbiAgQElucHV0KCkgc2V0IGNvbHVtblZpc2liaWxpdHkoY2ZnOiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNmZykge1xuICAgICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eSA9IHsgLi4uY2ZnIH07XG4gICAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIGdldCBjb2x1bW5WaXNpYmlsaXR5KCk6IENvbHVtblZpc2liaWxpdHlDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5O1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbXBvbmVudCgpO1xuICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5Q29sdW1ucygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snaXNFbXB0eVN0YXRlJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbXBvbmVudCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5Q29sdW1ucygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWRGb2xkZXJJZCddICYmICFjaGFuZ2VzWydzZWxlY3RlZEZvbGRlcklkJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIC8vIFBlciB0aGUgYXBwcm92ZWQgcGxhbjogY2xlYXIgc2VsZWN0aW9uIGFuZCByZXNldCBwYWdpbmF0aW9uIG9uIGZvbGRlciBjaGFuZ2UuXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICAgIHRoaXMucmVidWlsZEZpbHRlcmVkUm93cygpO1xuICAgICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3ZpZXdNb2RlJ10gJiYgIWNoYW5nZXNbJ3ZpZXdNb2RlJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIC8vIFN3aXRjaGluZyBiZXR3ZWVuIGxpc3QgYW5kIG1vZHVsYXIgY2hhbmdlcyB3aGV0aGVyIHRoZSBmb2xkZXIgZmlsdGVyIGFwcGxpZXMuXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZW1zJ10gfHwgY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sncmVvcmRlclNhdmluZyddICYmICFjaGFuZ2VzWydyZW9yZGVyU2F2aW5nJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IG5vd1NhdmluZyA9ICEhY2hhbmdlc1sncmVvcmRlclNhdmluZyddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIC8vIEhvc3QgZmluaXNoZWQgaXRzIGJ1bGstdXBkYXRlIGNhbGwg4oCUIGV4aXQgcmVvcmRlciBtb2RlLlxuICAgICAgaWYgKCFub3dTYXZpbmcgJiYgdGhpcy5yZW9yZGVyQXdhaXRpbmdTYXZlRmxpcCkge1xuICAgICAgICB0aGlzLmV4aXRSZW9yZGVyTW9kZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5U3RhdGUpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gW107XG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluIHNlcnZlci1zaWRlIG1vZGUsIGFzc3VtZSBpbmNvbWluZyBkYXRhIGlzIGFscmVhZHkgYSBwYWdlIHNsaWNlXG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFsuLi50aGlzLmZpbHRlcmVkUm93c107XG4gICAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVidWlsZEZpbHRlcmVkUm93cygpO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBgZmlsdGVyZWRSb3dzYCBmcm9tIGBkYXRhYCBieSBhcHBseWluZyAoYSkgdGhlIGZpZWxkIGZpbHRlcnMgKHN0YXR1cy9wcmlvcml0eS9ldGMuKVxuICAgKiBhbmQgKGIpIHRoZSBmb2xkZXIgZmlsdGVyIGRlcml2ZWQgZnJvbSBgc2VsZWN0ZWRGb2xkZXJJZGAgKyBgZm9sZGVySWRBY2Nlc3NvcmAuXG4gICAqL1xuICBwcml2YXRlIHJlYnVpbGRGaWx0ZXJlZFJvd3MoKTogdm9pZCB7XG4gICAgY29uc3QgZWZmZWN0aXZlID0gdGhpcy5hcHBsaWVkRmlsdGVycyA/PyB7fTtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IHRoaXMuZGF0YS5maWx0ZXIociA9PiB0aGlzLnBhc3NGaWx0ZXJzKGVmZmVjdGl2ZSwgcikgJiYgdGhpcy5wYXNzRm9sZGVyKHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFzc0ZvbGRlcihyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIExpc3QgdmlldyBpZ25vcmVzIGZvbGRlciBmaWx0ZXJpbmcgZW50aXJlbHkg4oCUIGJlaGF2ZXMgbGlrZSB0aGUgdHJhZGl0aW9uYWwgZmxhdCB0YWJsZS5cbiAgICBpZiAoIXRoaXMuaXNNb2R1bGFyVmlldykgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgZm9sZGVySWQgPSB0aGlzLmZvbGRlcklkQWNjZXNzb3IgPyB0aGlzLmZvbGRlcklkQWNjZXNzb3Iocm93KSA6IHJvdz8uZm9sZGVySWQ7XG4gICAgLy8gUm9vdCB2aWV3OiBzaG93IG9ubHkgcm93cyB0aGF0IGRvIG5vdCBiZWxvbmcgdG8gYW55IGZvbGRlciAodGhlIFwiVW5vcmdhbmlzZWRcIiBidWNrZXQpLlxuICAgIC8vIEZvbGRlciB0aWxlcyBhYm92ZSB0aGUgdGFibGUgYXJlIHRoZSBlbnRyeSBwb2ludCB0byBwZXItZm9sZGVyIGNvbnRlbnRzLlxuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvbGRlcklkID09IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmb2xkZXJJZCAhPSBudWxsICYmIFN0cmluZyhmb2xkZXJJZCkgPT09IFN0cmluZyh0aGlzLnNlbGVjdGVkRm9sZGVySWQpO1xuICB9XG5cbiAgLyoqIFRydWUgd2hlbiB0aGUgY29tcG9uZW50IHNob3VsZCByZW5kZXIgdGhlIG1vZHVsYXIgKGZvbGRlci1hd2FyZSkgVUkuICovXG4gIGdldCBpc01vZHVsYXJWaWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpZXdNb2RlID09PSAnbW9kdWxhcic7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlbGVjdGVkIElEcyBmcm9tIHNlbGVjdGVkSXRlbXMgKG9iamVjdHMpXG4gICAqL1xuICBwcml2YXRlIGdldFNlbGVjdGVkSWRzKCk6IFNldDxudW1iZXI+IHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbmV3IFNldCh0aGlzLnNlbGVjdGVkSXRlbXMubWFwKGl0ZW0gPT4gTnVtYmVyKGl0ZW0uaWQpKS5maWx0ZXIoaWQgPT4gIWlzTmFOKGlkKSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZHNTZXQgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XG5cbiAgICBpZiAoc2VsZWN0ZWRJZHNTZXQuc2l6ZSA9PT0gMCkge1xuICAgICAgLy8gSWYgbm8gc2VsZWN0ZWQgSURzLCBjbGVhciBhbGwgc2VsZWN0aW9uIHN0YXRlc1xuICAgICAgaWYgKHRoaXMucGFnZWRSb3dzKSB7XG4gICAgICAgIHRoaXMucGFnZWRSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICAocm93IGFzIGFueSkuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBzZWxlY3Rpb24gc3RhdGUgYmFzZWQgb24gc2VsZWN0ZWRJdGVtc1xuICAgIGlmICh0aGlzLnBhZ2VkUm93cykge1xuICAgICAgdGhpcy5wYWdlZFJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAocm93ICYmIHJvdy5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgKHJvdyBhcyBhbnkpLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZElkc1NldC5oYXMoTnVtYmVyKHJvdy5pZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBbHNvIHVwZGF0ZSBmaWx0ZXJlZFJvd3MgZm9yIGNvbnNpc3RlbmN5XG4gICAgaWYgKHRoaXMuZmlsdGVyZWRSb3dzKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgIGlmIChyb3cgJiYgcm93LmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAocm93IGFzIGFueSkuaXNTZWxlY3RlZCA9IHNlbGVjdGVkSWRzU2V0LmhhcyhOdW1iZXIocm93LmlkKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAvLyBDYWNoZSB2aXNpYmlsaXR5IGNvbHVtbnMgdG8gYXZvaWQgY3JlYXRpbmcgbmV3IGFycmF5cyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnMgPSB0aGlzLm1hcFZpc2liaWxpdHlDb2x1bW5zKCk7XG4gICAgLy8gU2VlZCB2aXNpYmlsaXR5IHN0YXRlIGZyb20gZWFjaCBjb2x1bW4ncyBpc1Nob3cgKGRlZmF1bHQgdG8gdHJ1ZSkgc28gY29uc3VtZXJzXG4gICAgLy8gY2FuIHByZS1hcHBseSBwZXJzaXN0ZWQgcHJlZmVyZW5jZXMgdmlhIGNvbHVtbnNbaV0uaXNTaG93LlxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29sdW1ucyB8fCBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Q29sdW1ucykge1xuICAgICAgaWYgKHRoaXMuX2NvbHVtblZpc2liaWxpdHlbY29sLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNyY0NvbCA9IHNvdXJjZS5maW5kKGMgPT4gYy5maWVsZElkID09PSBjb2wuaWQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5W2NvbC5pZF0gPSBzcmNDb2wgJiYgc3JjQ29sLmlzU2hvdyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFueVJvd1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2VsZWN0ZWQgaXRlbXMgKGVpdGhlciBvbiBjdXJyZW50IHBhZ2Ugb3IgYWNyb3NzIGFsbCBwYWdlcyB2aWEgc2VsZWN0ZWRJdGVtcylcbiAgICBjb25zdCBoYXNTZWxlY3RlZE9uUGFnZSA9ICEhKHRoaXMucGFnZWRSb3dzICYmIHRoaXMucGFnZWRSb3dzLnNvbWUociA9PiAhIShyIGFzIGFueSkuaXNTZWxlY3RlZCkpO1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzU2V0ID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xuICAgIGNvbnN0IGhhc1NlbGVjdGVkQWNyb3NzUGFnZXMgPSBzZWxlY3RlZElkc1NldC5zaXplID4gMDtcbiAgICByZXR1cm4gaGFzU2VsZWN0ZWRPblBhZ2UgfHwgaGFzU2VsZWN0ZWRBY3Jvc3NQYWdlcztcbiAgfVxuXG4gIGdldCBjdXJyZW50U2VsZWN0ZWRJdGVtcygpOiBhbnlbXSB7XG4gICAgLy8gSWYgc2VsZWN0ZWRJdGVtcyAoZnVsbCBvYmplY3RzKSBhcmUgcHJvdmlkZWQsIHVzZSB0aGVtIGRpcmVjdGx5XG4gICAgLy8gVGhpcyBlbnN1cmVzIGFsbCBzZWxlY3RlZCBpdGVtcyBhcmUgcmV0dXJuZWQsIGluY2x1ZGluZyB0aG9zZSBmcm9tIG90aGVyIHBhZ2VzXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcztcbiAgICB9XG4gICAgLy8gRmFsbGJhY2s6IEZvciBjbGllbnQtc2lkZSBwYWdpbmF0aW9uIG9yIHdoZW4gc2VsZWN0ZWRJdGVtcyBpcyBub3QgcHJvdmlkZWQsXG4gICAgLy8gZmlsdGVyIHBhZ2VkUm93cyB0byBnZXQgc2VsZWN0ZWQgaXRlbXMgZnJvbSBjdXJyZW50IHBhZ2Ugb25seVxuICAgIGlmICghdGhpcy5wYWdlZFJvd3MgfHwgdGhpcy5wYWdlZFJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRJZHNTZXQgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XG4gICAgXG4gICAgLy8gRmlsdGVyIHJvd3MgdGhhdCBhcmUgc2VsZWN0ZWRcbiAgICByZXR1cm4gdGhpcy5wYWdlZFJvd3NcbiAgICAgIC5maWx0ZXIociA9PiB7XG4gICAgICAgIGlmICghciB8fCByLmlkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3Qgcm93SWQgPSBOdW1iZXIoci5pZCk7XG4gICAgICAgIC8vIEluY2x1ZGUgaWYgZWl0aGVyOlxuICAgICAgICAvLyAxLiBUaGUgcm93IGhhcyBpc1NlbGVjdGVkID0gdHJ1ZSAoY3VycmVudCBwYWdlIHNlbGVjdGlvbilcbiAgICAgICAgLy8gMi4gVGhlIHJvdydzIElEIGlzIGluIHNlbGVjdGVkSXRlbXMgKHNlbGVjdGVkIG9uIG90aGVyIHBhZ2VzIG9yIHJlc3RvcmVkIHNlbGVjdGlvbilcbiAgICAgICAgcmV0dXJuICEhKHIgYXMgYW55KS5pc1NlbGVjdGVkIHx8IHNlbGVjdGVkSWRzU2V0Lmhhcyhyb3dJZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFjdGlvbkNsaWNrKGRhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdhY3Rpb24gdG9vbGJhcicsIGRhdGEpO1xuICB9XG5cbiAgdmlldyhpZDogbnVtYmVyIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1ZpZXcnLCBpZCk7XG4gIH1cblxuICBlZGl0KHJvdzogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0VkaXQnLCByb3cpO1xuICB9XG5cbiAgZGVsZXRlKHJvdzogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0RlbGV0ZScsIHJvdyk7XG4gIH1cblxuICB0b2dnbGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RmlsdGVyUGFuZWwgPSAhdGhpcy5zaG93RmlsdGVyUGFuZWw7XG4gIH1cblxuICBvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UoY2ZnOiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eSA9IHsgLi4uY2ZnIH07XG4gICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmNvbHVtblZpc2liaWxpdHlDaGFuZ2UuZW1pdCh7IC4uLmNmZyB9KTtcbiAgfVxuXG4gIG9uQXV0b1JlZnJlc2hDaGFuZ2UoaW50ZXJ2YWxNczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWwgPSBpbnRlcnZhbE1zO1xuICAgIHRoaXMuc2V0dXBBdXRvUmVmcmVzaChpbnRlcnZhbE1zKTtcbiAgICB0aGlzLmF1dG9SZWZyZXNoSW50ZXJ2YWxDaGFuZ2UuZW1pdChpbnRlcnZhbE1zKTtcbiAgICB0aGlzLnRyaWdnZXJSZWxvYWQoKTtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnVmFsdWUgY2hhbmdlZCcsIHZhbHVlKTtcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgc2VhcmNoKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU2VhcmNoJywgdmFsdWUpO1xuICB9XG5cbiAgY2xlYXJlZCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnQ2xlYXJlZCcpO1xuICB9XG5cbiAgb25FbXB0eUFjdGlvbihhY3Rpb246IGFueSkge1xuICAgIGlmIChhY3Rpb24/LmxhYmVsID09PSAnU2hvdyBmaWx0ZXJzJykge1xuICAgICAgdGhpcy50b2dnbGVGaWx0ZXIoKTtcbiAgICB9XG4gIH1cblxuICBvbkZpbHRlcnNDaGFuZ2VkKGN1cnJlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8vIERlZmVyIGFwcGx5aW5nIGZpbHRlcnMgYW5kIHVwZGF0aW5nIGNoaXBzIHVudGlsIEFwcGx5IEZpbHRlciBpcyBjbGlja2VkXG4gICAgdGhpcy5wZW5kaW5nRmlsdGVycyA9IGN1cnJlbnQ7XG4gIH1cblxuICBvbkZpbHRlcnNBcHBsaWVkKGFwcGxpZWQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZpbHRlclBhbmVsID0gZmFsc2U7XG4gICAgY29uc3QgZWZmZWN0aXZlID0gYXBwbGllZCA/PyB0aGlzLnBlbmRpbmdGaWx0ZXJzID8/IHt9O1xuICAgIHRoaXMuYXBwbGllZEZpbHRlcnMgPSBlZmZlY3RpdmU7XG4gICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRSb3dzKCk7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgY29uc3QgY2hpcHM6IEFycmF5PHsga2V5Pzogc3RyaW5nOyBsYWJlbD86IHN0cmluZzsgdGV4dDogc3RyaW5nOyBmdWxsVGV4dD86IHN0cmluZzsgaGFzTW9yZT86IGJvb2xlYW4gfT4gPSBbXTtcbiAgICBpZiAoZWZmZWN0aXZlKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlZmZlY3RpdmUpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZWZmZWN0aXZlW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJyB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSkgY29udGludWU7XG4gICAgICAgIFxuICAgICAgICAvLyBGaW5kIHRoZSBmaWx0ZXIgY29uZmlnIGl0ZW0gZm9yIHRoaXMga2V5XG4gICAgICAgIGNvbnN0IGZpbHRlckNvbmZpZ0l0ZW0gPSB0aGlzLmZpbHRlckNvbmZpZz8uZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZmlsdGVyQ29uZmlnSXRlbT8ub3B0aW9ucyB8fCBbXTtcbiAgICAgICAgXG4gICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRpc3BsYXkgdGV4dCBmcm9tIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZ2V0RGlzcGxheVRleHQgPSAodmFsOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGFscmVhZHkgYW4gb2JqZWN0IHdpdGggbmFtZS9sYWJlbCwgdXNlIGl0XG4gICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAodmFsLm5hbWUgfHwgdmFsLmxhYmVsIHx8IHZhbC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwubmFtZSA/PyB2YWwubGFiZWwgPz8gU3RyaW5nKHZhbC52YWx1ZSA/PyB2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBMb29rIHVwIHRoZSBvcHRpb24gaW4gdGhlIGNvbmZpZ1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wdElkID0gb3B0LmlkID8/IG9wdC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG9wdFZhbHVlID0gb3B0LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgdmFsU3RyID0gU3RyaW5nKHZhbCk7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdElkKSA9PT0gdmFsU3RyIHx8IFN0cmluZyhvcHRWYWx1ZSkgPT09IHZhbFN0cjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLm5hbWUgPz8gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUgPz8gdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gdGhlIHJhdyB2YWx1ZVxuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgICAgIGxldCBsYWJlbCA9IGZpbHRlckNvbmZpZ0l0ZW0/LmxhYmVsO1xuICAgICAgICBcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdGV4dCA9IHZhbHVlLm1hcCgodjogYW55KSA9PiBnZXREaXNwbGF5VGV4dCh2KSkuam9pbignLCAnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKCdzdGFydCcgaW4gdmFsdWUgfHwgJ2VuZCcgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSB2YWx1ZS5zdGFydCA/IG5ldyBEYXRlKHZhbHVlLnN0YXJ0KS50b0xvY2FsZURhdGVTdHJpbmcoKSA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZSA9IHZhbHVlLmVuZCA/IG5ldyBEYXRlKHZhbHVlLmVuZCkudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOiAnJztcbiAgICAgICAgICAgIHRleHQgPSBbcywgZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAtICcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0ID0gZ2V0RGlzcGxheVRleHQodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gZ2V0RGlzcGxheVRleHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNoaXBzLnB1c2goeyBrZXksIGxhYmVsLCB0ZXh0LCBmdWxsVGV4dDogdGV4dCwgaGFzTW9yZTogdGV4dC5sZW5ndGggPiAzMCB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGlwcyA9IGNoaXBzO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZCA9IHRoaXMuY2hpcHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGhhbmRsZVJlc2V0RmlsdGVyQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgY2hpcHMgYW5kIHJlc2V0IGZpbHRlcmVkIGRhdGEgd2hlbiByZXNldCBpcyBjbGlja2VkXG4gICAgdGhpcy5wZW5kaW5nRmlsdGVycyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2hpcHMgPSBbXTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLm9uUmVzZXRGaWx0ZXJDbGljay5lbWl0KCk7XG4gIH1cblxuICBoYW5kbGVSZWZyZXNoQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkF1dG9SZWZyZXNoQ2xpY2suZW1pdCgpO1xuICAgIHRoaXMudHJpZ2dlclJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyUmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucmVidWlsZEZpbHRlcmVkUm93cygpO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIHRoaXMub25SZWxvYWQuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEF1dG9SZWZyZXNoKGludGVydmFsTXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJBdXRvUmVmcmVzaCgpO1xuICAgIGlmIChpbnRlcnZhbE1zICYmIGludGVydmFsTXMgPiAwKSB7XG4gICAgICB0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpZ2dlclJlbG9hZCgpO1xuICAgICAgfSwgaW50ZXJ2YWxNcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckF1dG9SZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9SZWZyZXNoVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvUmVmcmVzaFRpbWVyKTtcbiAgICAgIHRoaXMuYXV0b1JlZnJlc2hUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQXV0b1JlZnJlc2goKTtcbiAgfVxuXG4gIG9uUGFnaW5hdGUoZTogeyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9KTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBlLnBhZ2VJbmRleDtcbiAgICB0aGlzLnBhZ2VTaXplID0gZS5wYWdlU2l6ZTtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeyBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2Uoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHNpemU7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICB9XG5cbiAgb25SZW1vdmVDaGlwKGNoaXA6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2hpcHMgPSB0aGlzLmNoaXBzLmZpbHRlcihjID0+IGMgIT09IGNoaXApO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZCA9IHRoaXMuY2hpcHMubGVuZ3RoID4gMDtcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCBjb21wb25lbnQgKHNhbWUgcGF0dGVybiBhcyBleGVjdXRpb24gdGFiKVxuICAgIHRoaXMucmVtb3ZlQ2hpcC5lbWl0KGNoaXApO1xuICB9XG5cbiAgb25DbGVhckFsbENoaXBzKCk6IHZvaWQge1xuICAgIHRoaXMuY2hpcHMgPSBbXTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSBmYWxzZTtcbiAgICAvLyBSZXNldCB0aGUgZHluYW1pYy1maWx0ZXIgY29tcG9uZW50IGZvcm0gd2hlbiBjbGVhcmluZyBhbGwgY2hpcHNcbiAgICBpZiAodGhpcy5keW5hbWljRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLmR5bmFtaWNGaWx0ZXJDb21wb25lbnQucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgLy8gU2VydmVyIG1vZGU6IHBhcmVudCBzdXBwbGllcyBhbHJlYWR5LXBhZ2luYXRlZCBkYXRhXG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFsuLi50aGlzLmZpbHRlcmVkUm93c107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wYWdlSW5kZXggKiB0aGlzLnBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcbiAgICB0aGlzLnBhZ2VkUm93cyA9IHRoaXMuZmlsdGVyZWRSb3dzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBWaXNpYmlsaXR5Q29sdW1ucygpOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiAodGhpcy5jb2x1bW5zIHx8IFtdKVxuICAgICAgLmZpbHRlcihjID0+IGMuaXNEZWZhdWx0ID09PSBmYWxzZSlcbiAgICAgIC5tYXAoYyA9PiAoeyBpZDogYy5maWVsZElkLCBsYWJlbDogYy5maWVsZE5hbWUgfHwgYy5maWVsZElkIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplRGF0ZShkOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAoIWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHRzID0gRGF0ZS5wYXJzZShkKTtcbiAgICByZXR1cm4gaXNOYU4odHMpID8gbnVsbCA6IHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXNzRmlsdGVycyhmaWx0ZXJzOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWx0ZXJzKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZmlsdGVycy5zdGF0dXMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJzLnN0YXR1cykgJiYgZmlsdGVycy5zdGF0dXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMuc3RhdHVzLmluY2x1ZGVzKHJvdy5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJzLnByaW9yaXR5ICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycy5wcmlvcml0eSkgJiYgZmlsdGVycy5wcmlvcml0eS5sZW5ndGgpIHtcbiAgICAgIGlmICghZmlsdGVycy5wcmlvcml0eS5pbmNsdWRlcyhyb3cucHJpb3JpdHlOYW1lKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy50ZXN0VHlwZSAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMudGVzdFR5cGUpICYmIGZpbHRlcnMudGVzdFR5cGUubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMudGVzdFR5cGUuaW5jbHVkZXMocm93LnRlc3RUeXBlKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy5jcmVhdGVkX2RhdGUgJiYgKGZpbHRlcnMuY3JlYXRlZF9kYXRlLnN0YXJ0IHx8IGZpbHRlcnMuY3JlYXRlZF9kYXRlLmVuZCkpIHtcbiAgICAgIGNvbnN0IHN0YXJ0VHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZmlsdGVycy5jcmVhdGVkX2RhdGUuc3RhcnQpO1xuICAgICAgY29uc3QgZW5kVHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZmlsdGVycy5jcmVhdGVkX2RhdGUuZW5kKTtcbiAgICAgIGNvbnN0IHJvd1RzID0gdGhpcy5ub3JtYWxpemVEYXRlKHJvdy5jcmVhdGVkQXQpO1xuICAgICAgaWYgKHJvd1RzICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHN0YXJ0VHMgIT0gbnVsbCAmJiByb3dUcyA8IHN0YXJ0VHMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGVuZFRzICE9IG51bGwgJiYgcm93VHMgPiBlbmRUcykgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyYWNrQnlUZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5RHJvcGRvd25UZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5U2VsZWN0RHJvcGRvd25UZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvLyBFeHBvcnQgbW9kYWwgc3RhdGVcbiAgaXNFeHBvcnRNb2RhbE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBleHBvcnRDb2RlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gR2V0IHNlbGVjdGVkIGl0ZW1zXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXM7XG4gICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWRcbiAgICAgIHRoaXMub25FeHBvcnRDbGljay5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VFeHBvcnRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwb3J0TW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvbkV4cG9ydE1vZGFsRXhwb3J0KHJlc3VsdDogeyB0eXBlOiAnbG9jYWwnIHwgJ2VtYWlsJzsgZW1haWxzPzogc3RyaW5nW107IGZyYW1ld29yazogJ1dFQkRSSVZFUl9JTycgfCAnU0VMRU5JVU1fSkFWQScgfSk6IHZvaWQge1xuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCB3aXRoIGV4cG9ydCByZXN1bHRcbiAgICB0aGlzLm9uRXhwb3J0Q2xpY2suZW1pdCh7XG4gICAgICB0eXBlOiByZXN1bHQudHlwZSxcbiAgICAgIGVtYWlsczogcmVzdWx0LmVtYWlscyxcbiAgICAgIGZyYW1ld29yazogcmVzdWx0LmZyYW1ld29yayxcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXNcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZENhc2VzRm9yRXhwb3J0KCk6IEFycmF5PHsgaWQ/OiBudW1iZXI7IG5hbWU/OiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTZWxlY3RlZEl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICBpZDogaXRlbS5pZCxcbiAgICAgIG5hbWU6IGl0ZW0ubmFtZSB8fCBpdGVtLnRpdGxlIHx8ICdVbm5hbWVkJ1xuICAgIH0pKTtcbiAgfVxuICBnZXQgYXJyb3dDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZUNsYXNzZXMgPSBbXG4gICAgICAnY3FhLXctNCcsXG4gICAgICAnY3FhLWgtNCcsXG4gICAgICAnY3FhLXJlbGF0aXZlJyxcbiAgICAgICdjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm0nXG4gICAgXTtcblxuICAgIGlmICh0aGlzLnNob3dGaWx0ZXJQYW5lbCkge1xuICAgICAgYmFzZUNsYXNzZXMucHVzaCgnY3FhLXJvdGF0ZS0xODAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZUNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGb2xkZXIgLyBtb2R1bGFyIGhlbHBlcnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBGbGF0IGxpc3Qgb2Ygcm9vdC1sZXZlbCBmb2xkZXJzIGZvciB0aGUgXCJPcmdhbmlzZWRcIiBncmlkIG9uIHRoZSByb290IHZpZXcuXG4gICAqL1xuICBnZXQgcm9vdEZvbGRlclRpbGVzKCk6IEZvbGRlck5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZm9sZGVycyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJmb2xkZXJzIG9mIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgZm9sZGVyIChmb3IgdGhlIFwiU3ViZm9sZGVycyBpbiAuLi5cIiBncmlkKS5cbiAgICovXG4gIGdldCBzdWJmb2xkZXJUaWxlcygpOiBGb2xkZXJOb2RlW10ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmRGb2xkZXIodGhpcy5mb2xkZXJzLCB0aGlzLnNlbGVjdGVkRm9sZGVySWQpO1xuICAgIHJldHVybiBub2RlPy5jaGlsZHJlbiA/PyBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCcmVhZGNydW1iIHRyYWlsIGZyb20gXCJBbGwgZm9sZGVyc1wiIGRvd24gdG8gdGhlIGN1cnJlbnRseS1zZWxlY3RlZCBmb2xkZXIuXG4gICAqL1xuICBnZXQgYnJlYWRjcnVtYlRyYWlsKCk6IEZvbGRlck5vZGVbXSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCA9PSBudWxsKSByZXR1cm4gW107XG4gICAgY29uc3QgdHJhaWw6IEZvbGRlck5vZGVbXSA9IFtdO1xuICAgIHRoaXMuYnVpbGRUcmFpbCh0aGlzLmZvbGRlcnMsIHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCwgdHJhaWwpO1xuICAgIHJldHVybiB0cmFpbDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRUcmFpbChub2RlczogRm9sZGVyTm9kZVtdLCB0YXJnZXRJZDogbnVtYmVyLCBhY2M6IEZvbGRlck5vZGVbXSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgbiBvZiBub2RlcyB8fCBbXSkge1xuICAgICAgYWNjLnB1c2gobik7XG4gICAgICAvLyBVc2UgU3RyaW5nKCkgY29lcmNpb24gZm9yIHNhZmV0eSBpbiBjYXNlIGlkcyBhcnJpdmUgYXMgZWl0aGVyIG51bWJlciBvclxuICAgICAgLy8gc3RyaW5nIGZyb20gZGlmZmVyZW50IEFQSS90ZXN0IGRhdGEgc2hhcGVzIChlLmcuIHJhdyBKU09OIHBhcnNlIHJlc3VsdHMpLlxuICAgICAgaWYgKFN0cmluZyhuLmlkKSA9PT0gU3RyaW5nKHRhcmdldElkKSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAobi5jaGlsZHJlbiAmJiB0aGlzLmJ1aWxkVHJhaWwobi5jaGlsZHJlbiwgdGFyZ2V0SWQsIGFjYykpIHJldHVybiB0cnVlO1xuICAgICAgYWNjLnBvcCgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGZpbmRGb2xkZXIobm9kZXM6IEZvbGRlck5vZGVbXSwgdGFyZ2V0SWQ6IG51bWJlcik6IEZvbGRlck5vZGUgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IG4gb2Ygbm9kZXMgfHwgW10pIHtcbiAgICAgIGlmIChTdHJpbmcobi5pZCkgPT09IFN0cmluZyh0YXJnZXRJZCkpIHJldHVybiBuO1xuICAgICAgY29uc3QgZm91bmQgPSBuLmNoaWxkcmVuID8gdGhpcy5maW5kRm9sZGVyKG4uY2hpbGRyZW4sIHRhcmdldElkKSA6IG51bGw7XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGluIFwicm9vdFwiIHZpZXcgKG5vIGZvbGRlciBzZWxlY3RlZCkuIENvbnRyb2xzIHdoaWNoXG4gICAqIHNlY3Rpb25zIHJlbmRlciBvbiB0aGUgcmlnaHQtaGFuZCBwYW5lLlxuICAgKi9cbiAgZ2V0IGlzUm9vdFZpZXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCA9PSBudWxsO1xuICB9XG5cbiAgLyoqIFRoZSBjdXJyZW50bHktc2VsZWN0ZWQgZm9sZGVyIG5vZGUgKG9yIG51bGwgYXQgcm9vdCkuICovXG4gIGdldCBjdXJyZW50Rm9sZGVyTm9kZSgpOiBGb2xkZXJOb2RlIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5maW5kRm9sZGVyKHRoaXMuZm9sZGVycywgdGhpcy5zZWxlY3RlZEZvbGRlcklkKTtcbiAgfVxuXG4gIC8qKiBDb3VudCBvZiB0ZXN0IGNhc2VzIGRpcmVjdGx5IHVuZGVyIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgZm9sZGVyIChleGNsdWRpbmcgZGVzY2VuZGFudHMpLiAqL1xuICBnZXQgY3VycmVudEZvbGRlckRpcmVjdENvdW50KCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZFJvd3MubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGVtcHR5LXN0YXRlIHNsb3Qgd2hlbiB0aGUgaG9zdCBleHBsaWNpdGx5IG9wdHMgaW4sIE9SIHdoZW4gdGhlXG4gICAqIHRhYmxlIHdvdWxkIG90aGVyd2lzZSByZW5kZXIgYmxhbmsgKG5vIGxvYWRpbmcgKyBubyByb3dzKS4gVXNpbmcgYSBkZXJpdmVkXG4gICAqIGZsYWcga2VlcHMgdGhlIGhvc3QgY29udHJhY3QgaWRlbnRpY2FsIHRvIGBjcWEtdGFibGUtdGVtcGxhdGVgIHdoaWxlIGxldHRpbmdcbiAgICogdGhlIG1vZHVsYXIgdmlldyBzaG93IFwiTm8gVGVzdCBDYXNlIEZvdW5kXCIgb3V0IG9mIHRoZSBib3gg4oCUIHRoZSBlYXJsaWVyIGFzay5cbiAgICovXG4gIGdldCBlZmZlY3RpdmVJc0VtcHR5U3RhdGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eVN0YXRlKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc1RhYmxlTG9hZGluZyB8fCB0aGlzLmlzVGFibGVEYXRhTG9hZGluZykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhdGhpcy5wYWdlZFJvd3MgfHwgdGhpcy5wYWdlZFJvd3MubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFBpY2tzIHRoZSBob3N0LXByb3ZpZGVkIGBlbXB0eVN0YXRlQ29uZmlnYCB3aGVuIHRoZSBob3N0IGZsYWdnZWQgdGhlIHN0YXRlXG4gICAqIGl0c2VsZjsgb3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gYSBsaWJyYXJ5LW93bmVkIFwiTm8gVGVzdCBDYXNlIEZvdW5kXCIgY29uZmlnXG4gICAqIGRyaXZlbiBieSBgbW9kdWxhckxhYmVsc2AuXG4gICAqL1xuICBnZXQgZWZmZWN0aXZlRW1wdHlTdGF0ZUNvbmZpZygpOiBFbXB0eVN0YXRlQ29uZmlnIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5U3RhdGUpIHJldHVybiB0aGlzLmVtcHR5U3RhdGVDb25maWc7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiB0aGlzLm1vZHVsYXJMYWJlbHMuZW1wdHlOb1Rlc3RzSW5Gb2xkZXJUaXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLm1vZHVsYXJMYWJlbHMuZW1wdHlOb1Rlc3RzSW5Gb2xkZXJEZXNjcmlwdGlvbixcbiAgICAgIGltYWdlVXJsOiBFTVBUWV9TVEFURV9JTUFHRVMuVEVTVF9DQVNFLFxuICAgICAgYWN0aW9uczogW10sXG4gICAgfTtcbiAgfVxuXG4gIG9uRm9sZGVyU2VsZWN0ZWQoaWQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRm9sZGVySWQgPSBpZDtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRSb3dzKCk7XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLmZvbGRlclNlbGVjdGVkLmVtaXQoaWQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25Gb2xkZXJFeHBhbnNpb25Ub2dnbGVkKGV2ZW50OiB7IGlkOiBudW1iZXI7IGV4cGFuZGVkOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBjb25zdCBzZXQgPSBuZXcgU2V0KHRoaXMuZXhwYW5kZWRGb2xkZXJJZHMgfHwgW10pO1xuICAgIGlmIChldmVudC5leHBhbmRlZCkge1xuICAgICAgc2V0LmFkZChldmVudC5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldC5kZWxldGUoZXZlbnQuaWQpO1xuICAgIH1cbiAgICB0aGlzLmV4cGFuZGVkRm9sZGVySWRzID0gQXJyYXkuZnJvbShzZXQpO1xuICAgIHRoaXMuZm9sZGVyRXhwYW5zaW9uVG9nZ2xlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRm9sZGVyQ3JlYXRlZChwYXlsb2FkOiBGb2xkZXJDcmVhdGVkUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMuZm9sZGVyQ3JlYXRlZC5lbWl0KHBheWxvYWQpO1xuICB9XG5cbiAgb25Gb2xkZXJDcmVhdGVSZXF1ZXN0ZWQocGF5bG9hZDogeyBwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCB9KTogdm9pZCB7XG4gICAgLy8gRW1pdCB0aGUgXCJyZXF1ZXN0ZWRcIiBldmVudCBmaXJzdCBzbyBhIGhvc3QgY2FuIGludGVyY2VwdCB3aGVuIGl0IG93bnMgdGhlIFVYLlxuICAgIHRoaXMuZm9sZGVyQ3JlYXRlUmVxdWVzdGVkLmVtaXQocGF5bG9hZCk7XG4gICAgaWYgKCF0aGlzLnVzZUludGVybmFsRGlhbG9ncykgcmV0dXJuO1xuICAgIHRoaXMub3BlbkNyZWF0ZUZvbGRlckRpYWxvZyhwYXlsb2FkLnBhcmVudElkKTtcbiAgfVxuXG4gIG9uRm9sZGVyUmVuYW1lZChwYXlsb2FkOiBGb2xkZXJSZW5hbWVkUGF5bG9hZCk6IHZvaWQge1xuICAgIHRoaXMuZm9sZGVyUmVuYW1lZC5lbWl0KHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdpcmVkIHRvIHRoZSBzaWRlYmFyJ3MgYGZvbGRlckRlbGV0ZWRgIG91dHB1dCDigJQgd2hpY2ggZmlyZXMgb24gZGVsZXRlLWljb25cbiAgICogKmNsaWNrKiwgbm90IG9uIGNvbmZpcm1hdGlvbi4gV2UgcmUtZW1pdCBhIGBmb2xkZXJEZWxldGVSZXF1ZXN0ZWRgIGV2ZW50XG4gICAqIGZpcnN0IChzbyBob3N0cyBjYW4gaW50ZXJjZXB0KSBhbmQsIHdoZW4gYHVzZUludGVybmFsRGlhbG9nc2AgaXMgZW5hYmxlZCxcbiAgICogb3BlbiB0aGUgY29uZmlybWF0aW9uIGRpYWxvZy4gYGZvbGRlckRlbGV0ZWRgIG5vdyBvbmx5IGZpcmVzIGFmdGVyIGNvbmZpcm0uXG4gICAqL1xuICBvbkZvbGRlckRlbGV0ZWQocGF5bG9hZDogeyBpZDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmJ1aWxkRGVsZXRlQ29udGV4dChwYXlsb2FkLmlkKTtcbiAgICB0aGlzLmZvbGRlckRlbGV0ZVJlcXVlc3RlZC5lbWl0KGN0eCk7XG4gICAgaWYgKCF0aGlzLnVzZUludGVybmFsRGlhbG9ncykgcmV0dXJuO1xuICAgIHRoaXMub3BlbkRlbGV0ZUZvbGRlckRpYWxvZyhjdHgpO1xuICB9XG5cbiAgLyoqIEJ1aWxkcyB0aGUgeyBpZCwgbmFtZSwgdGVzdENvdW50LCBoYXNQYXJlbnQgfSBwYXlsb2FkIHVzZWQgYnkgZGVsZXRlIGV2ZW50cy9kaWFsb2dzLiAqL1xuICBwcml2YXRlIGJ1aWxkRGVsZXRlQ29udGV4dChmb2xkZXJJZDogbnVtYmVyKTogRm9sZGVyRGVsZXRlUmVxdWVzdGVkUGF5bG9hZCB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZEZvbGRlcih0aGlzLmZvbGRlcnMsIGZvbGRlcklkKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGZvbGRlcklkLFxuICAgICAgbmFtZTogbm9kZT8ubmFtZSA/PyAnJyxcbiAgICAgIHRlc3RDb3VudDogdGhpcy5jb3VudFRlc3RzSW5Gb2xkZXIoZm9sZGVySWQpLFxuICAgICAgaGFzUGFyZW50OiB0aGlzLmZvbGRlckhhc1BhcmVudChmb2xkZXJJZCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY291bnRUZXN0c0luRm9sZGVyKGZvbGRlcklkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGFjY2Vzc29yID0gdGhpcy5mb2xkZXJJZEFjY2Vzc29yID8/ICgocjogYW55KSA9PiByPy5mb2xkZXJJZCk7XG4gICAgcmV0dXJuICh0aGlzLmRhdGEgfHwgW10pLmZpbHRlcihyID0+IHtcbiAgICAgIGNvbnN0IGlkID0gYWNjZXNzb3Iocik7XG4gICAgICByZXR1cm4gaWQgIT0gbnVsbCAmJiBOdW1iZXIoaWQpID09PSBOdW1iZXIoZm9sZGVySWQpO1xuICAgIH0pLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgZm9sZGVyIGlzIG5lc3RlZCAoaS5lLiBub3QgYSByb290LWxldmVsIGZvbGRlcikuICovXG4gIHByaXZhdGUgZm9sZGVySGFzUGFyZW50KGZvbGRlcklkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISh0aGlzLmZvbGRlcnMgfHwgW10pLnNvbWUobiA9PiBuLmlkID09PSBmb2xkZXJJZCk7XG4gIH1cblxuICBvblRlc3RzRHJvcHBlZChldmVudDogeyB0ZXN0SWRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+OyB0YXJnZXRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbCB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1vZHVsYXJDb25maWcuYWxsb3dUZXN0RHJhZ0Ryb3ApIHJldHVybjtcbiAgICB0aGlzLnRlc3RzTW92ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogRm9sZGVyLXRvLWZvbGRlciBkcmFnLWRyb3AuIFRoZSBzaWRlYmFyIGhhcyBhbHJlYWR5IHZhbGlkYXRlZCBhZ2FpbnN0IHNlbGYvZGVzY2VuZGFudFxuICAgKiBjeWNsZXMsIHNvIHRoZSBkcm9wIGlzIGl0cyBvd24gY29uZmlybWF0aW9uIOKAlCB3ZSBlbWl0IGBmb2xkZXJNb3ZlZGAgZGlyZWN0bHkgd2l0aG91dFxuICAgKiBvcGVuaW5nIHRoZSBtb3ZlIGRpYWxvZy4gR2F0ZWQgb24gYGFsbG93VGVzdERyYWdEcm9wYCAoc2FtZSBmbGFnIGFzIHRlc3QgZHJhZy1kcm9wKS5cbiAgICovXG4gIG9uRm9sZGVyRHJvcHBlZChldmVudDogeyBpZDogbnVtYmVyOyBuZXdQYXJlbnRJZDogbnVtYmVyIHwgbnVsbCB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1vZHVsYXJDb25maWcuYWxsb3dUZXN0RHJhZ0Ryb3ApIHJldHVybjtcbiAgICB0aGlzLmZvbGRlck1vdmVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZGViYXIgZW1pdHRlZCBgZm9sZGVyTW92ZVJlcXVlc3RlZGAgKHVzZXIgcGlja2VkIFwiTW92ZSBmb2xkZXJcIiBmcm9tIHRoZSBjb250ZXh0IG1lbnUpLlxuICAgKiBXZSByZS1lbWl0IGEgcmljaGVyIHBheWxvYWQgZm9yIGhvc3RzLCBhbmQg4oCUIHdoZW4gcnVubmluZyB3aXRoIGludGVybmFsIGRpYWxvZ3Mg4oCUXG4gICAqIG9wZW4gdGhlIGV4aXN0aW5nIG1vdmUtdG8tZm9sZGVyIHBpY2tlciBjb25maWd1cmVkIGZvciBhIGZvbGRlci1tb3ZlIChzZWxmIGFuZFxuICAgKiBkZXNjZW5kYW50cyBhcmUgZGlzYWJsZWQgdG8gcHJldmVudCBjeWNsZXMpLlxuICAgKi9cbiAgb25Gb2xkZXJNb3ZlUmVxdWVzdGVkKHBheWxvYWQ6IHsgaWQ6IG51bWJlciB9KTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZEZvbGRlcih0aGlzLmZvbGRlcnMsIHBheWxvYWQuaWQpO1xuICAgIGNvbnN0IGN0eDogRm9sZGVyTW92ZVJlcXVlc3RlZFBheWxvYWQgPSB7XG4gICAgICBpZDogcGF5bG9hZC5pZCxcbiAgICAgIG5hbWU6IG5vZGU/Lm5hbWUgPz8gJycsXG4gICAgICBoYXNQYXJlbnQ6IHRoaXMuZm9sZGVySGFzUGFyZW50KHBheWxvYWQuaWQpLFxuICAgIH07XG4gICAgdGhpcy5mb2xkZXJNb3ZlUmVxdWVzdGVkLmVtaXQoY3R4KTtcbiAgICBpZiAoIXRoaXMudXNlSW50ZXJuYWxEaWFsb2dzKSByZXR1cm47XG4gICAgdGhpcy5vcGVuTW92ZUZvbGRlckRpYWxvZyhjdHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZGViYXIgZW1pdHRlZCBgZm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkYC4gVGhlIGxpYnJhcnkgY2FuJ3QgcGVyc2lzdCDigJRcbiAgICogZW1pdCB0aGUgaG9zdC1sZXZlbCBldmVudCBzbyB0aGUgaG9zdCBjbG9uZXMgdGhlIHN1YnRyZWUgc2VydmVyLXNpZGUuXG4gICAqIFRlc3QgY2FzZXMgc2hvdWxkIGJlICpyZWZlcmVuY2VkKiBmcm9tIHRoZSBuZXcgZm9sZGVycywgbm90IGR1cGxpY2F0ZWQuXG4gICAqL1xuICBvbkZvbGRlckR1cGxpY2F0ZVJlcXVlc3RlZChwYXlsb2FkOiB7IGlkOiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmRGb2xkZXIodGhpcy5mb2xkZXJzLCBwYXlsb2FkLmlkKTtcbiAgICB0aGlzLmZvbGRlckR1cGxpY2F0ZVJlcXVlc3RlZC5lbWl0KHtcbiAgICAgIGlkOiBwYXlsb2FkLmlkLFxuICAgICAgbmFtZTogbm9kZT8ubmFtZSA/PyAnJyxcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2lkZWJhckNvbGxhcHNlZENoYW5nZShjb2xsYXBzZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNpZGViYXJDb2xsYXBzZWQgPSBjb2xsYXBzZWQ7XG4gICAgdGhpcy5zaWRlYmFyQ29sbGFwc2VkQ2hhbmdlLmVtaXQoY29sbGFwc2VkKTtcbiAgfVxuXG4gIHRvZ2dsZVNpZGViYXIoKTogdm9pZCB7XG4gICAgdGhpcy5vblNpZGViYXJDb2xsYXBzZWRDaGFuZ2UoIXRoaXMuc2lkZWJhckNvbGxhcHNlZCk7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBidWxrIGFjdGlvbnMgc2hvd24gaW4gdGhlIHRvb2xiYXIgbWVyZ2VkIHdpdGggYW55IGhvc3Qtc3VwcGxpZWRcbiAgICogYGJ1bGtBY3Rpb25zYC4gQ3VycmVudGx5IG9ubHkgXCJNb3ZlIHRvIGZvbGRlclwiIHNoaXBzIGJ5IGRlZmF1bHQg4oCUXG4gICAqIERlbGV0ZSAvIEFkZCBUYWcgYXJlIG9wdC1pbiBwZXIgdGhlIGN1cnJlbnQgcHJvZHVjdCByZXF1aXJlbWVudC4gSG9zdHNcbiAgICogdGhhdCB3YW50IHRoZW0gYmFjayBwYXNzIHRoZW0gdmlhIGBidWxrQWN0aW9uc2AuXG4gICAqL1xuICBnZXQgZWZmZWN0aXZlQnVsa0FjdGlvbnMoKTogVGFibGVBY3Rpb25bXSB7XG4gICAgY29uc3QgZGVmYXVsdHM6IFRhYmxlQWN0aW9uW10gPSBbXG4gICAgICB7IGlkOiAnbW92ZScsIGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZVRvRm9sZGVyLCBpY29uOiAnZHJpdmVfZmlsZV9tb3ZlJywgdG9vbHRpcDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVUb0ZvbGRlciB9LFxuICAgIF07XG4gICAgY29uc3Qgb3ZlcnJpZGVzID0gbmV3IE1hcCgodGhpcy5idWxrQWN0aW9ucyB8fCBbXSkubWFwKGEgPT4gW2EuaWQsIGFdIGFzIGNvbnN0KSk7XG4gICAgY29uc3QgbWVyZ2VkID0gZGVmYXVsdHMubWFwKGQgPT4gb3ZlcnJpZGVzLmdldChkLmlkKSA/PyBkKTtcbiAgICBmb3IgKGNvbnN0IGV4dHJhIG9mIHRoaXMuYnVsa0FjdGlvbnMgfHwgW10pIHtcbiAgICAgIGlmICghZGVmYXVsdHMuc29tZShkID0+IGQuaWQgPT09IGV4dHJhLmlkKSkge1xuICAgICAgICBtZXJnZWQucHVzaChleHRyYSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXJnZWQ7XG4gIH1cblxuICBvbkJ1bGtBY3Rpb24oZXZlbnQ6IHsgaWQ6IHN0cmluZzsgc2VsZWN0ZWQ6IGFueVtdIH0pOiB2b2lkIHtcbiAgICAvLyBBbHdheXMgZW1pdCB0aGUgcmF3IGNsaWNrIHNvIGhvc3RzIG93bmluZyB0aGUgVVggY2FuIGludGVyY2VwdCBlYXJseS5cbiAgICB0aGlzLmJ1bGtBY3Rpb25DbGljay5lbWl0KHsgaWQ6IGV2ZW50LmlkLCBzZWxlY3RlZDogZXZlbnQuc2VsZWN0ZWQgfSk7XG5cbiAgICBjb25zdCBzZWxlY3RlZElkcyA9IChldmVudC5zZWxlY3RlZCB8fCBbXSkubWFwKHIgPT4gcj8uaWQpLmZpbHRlcih2ID0+IHYgIT0gbnVsbCk7XG4gICAgaWYgKGV2ZW50LmlkID09PSAnbW92ZScpIHtcbiAgICAgIHRoaXMub3Blbk1vdmVEaWFsb2coc2VsZWN0ZWRJZHMsIGV2ZW50LnNlbGVjdGVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRm9yIG5vbi1kaWFsb2cgYWN0aW9ucyAoY3VzdG9tIGVudHJpZXMgZnJvbSBob3N0LXN1cHBsaWVkIGBidWxrQWN0aW9uc2ApLCBpbnZva2UgaW1tZWRpYXRlbHkuXG4gICAgdGhpcy5idWxrQWN0aW9uSW52b2tlZC5lbWl0KHsgaWQ6IGV2ZW50LmlkLCBzZWxlY3RlZDogZXZlbnQuc2VsZWN0ZWQgfSk7XG4gIH1cblxuICBvbkJ1bGtTZWxlY3RBbGwoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIEFwcGx5IHRoZSBhY3Rpb24gbG9jYWxseSBzbyB0aGUgYWN0aW9uIHRvb2xiYXIncyBcIlNlbGVjdCBhbGxcIiB3b3JrcyBvdXQtb2YtdGhlLWJveC5cbiAgICAvLyBXaGVuIGNoZWNrZWQsIHNlbGVjdCBldmVyeSByb3cgaW4gdGhlICpjdXJyZW50KiBmaWx0ZXJlZCBzZXQgKGkuZS4gYWxsIHRlc3RzIGluXG4gICAgLy8gdGhlIHNlbGVjdGVkIGZvbGRlcikuIFdoZW4gdW5jaGVja2VkLCBjbGVhciBzZWxlY3Rpb24uXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gY2hlY2tlZCA/IFsuLi50aGlzLmZpbHRlcmVkUm93c10gOiBbXTtcbiAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KFsuLi50aGlzLnNlbGVjdGVkSXRlbXNdKTtcbiAgICB0aGlzLmJ1bGtTZWxlY3RBbGxDaGFuZ2UuZW1pdChjaGVja2VkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQnVsa0Rpc21pc3MoKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgc2VsZWN0aW9uIEFORCB0aGUgcGVyLXJvdyBpc1NlbGVjdGVkIGZsYWdzIHNvIHRoZSBhY3Rpb24gdG9vbGJhciBjbG9zZXNcbiAgICAvLyAoaXQncyBnYXRlZCBvbiBgYW55Um93U2VsZWN0ZWRgLCB3aGljaCByZWFkcyBib3RoIHNlbGVjdGVkSXRlbXMgYW5kIHJvdyBmbGFncykuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdChbXSk7XG4gICAgdGhpcy5idWxrRGlzbWlzcy5lbWl0KCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Nb3ZlRGlhbG9nKHRlc3RJZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj4sIHNlbGVjdGVkOiBhbnlbXSk6IHZvaWQge1xuICAgIC8vIEZpcmUgdGhlIFwicmVxdWVzdGVkXCIgZXZlbnQgZmlyc3Qgc28gYSBob3N0IGNhbiBpbnRlcmNlcHQgd2hlbiBpdCBvd25zIHRoZSBVWC5cbiAgICB0aGlzLm1vdmVSZXF1ZXN0ZWQuZW1pdCh7XG4gICAgICB0ZXN0SWRzLFxuICAgICAgc2VsZWN0ZWQsXG4gICAgICBjdXJyZW50Rm9sZGVySWQ6IHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCxcbiAgICAgIGZvbGRlcnM6IHRoaXMuZm9sZGVycyxcbiAgICB9KTtcbiAgICBpZiAoIXRoaXMudXNlSW50ZXJuYWxEaWFsb2dzKSByZXR1cm47XG5cbiAgICBjb25zdCBjb3VudCA9IHRlc3RJZHMubGVuZ3RoO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gKGNvdW50ID09PSAxXG4gICAgICA/IHRoaXMubW9kdWxhckxhYmVscy5tb3ZlRGlhbG9nRGVzY3JpcHRpb25TaW5ndWxhclxuICAgICAgOiB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZURpYWxvZ0Rlc2NyaXB0aW9uUGx1cmFsXG4gICAgKS5yZXBsYWNlKCd7bn0nLCAnJyArIGNvdW50KTtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbjxhbnksIG51bWJlciB8IG51bGw+KHtcbiAgICAgIHRpdGxlOiB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZURpYWxvZ1RpdGxlLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdHlwZTogJ2NvbXBvbmVudCcsXG4gICAgICAgIGNvbXBvbmVudDogTW92ZVRvRm9sZGVyRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBmb2xkZXJzOiB0aGlzLmZvbGRlcnMsXG4gICAgICAgICAgbGFiZWxzOiB0aGlzLm1vZHVsYXJMYWJlbHMsXG4gICAgICAgICAgY3VycmVudEZvbGRlcklkOiB0aGlzLnNlbGVjdGVkRm9sZGVySWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7IGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZURpYWxvZ0NhbmNlbCwgcm9sZTogJ3NlY29uZGFyeScsIGhhbmRsZXI6IHIgPT4gci5jbG9zZSh1bmRlZmluZWQgYXMgYW55KSB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubW9kdWxhckxhYmVscy5tb3ZlRGlhbG9nQ29uZmlybSxcbiAgICAgICAgICByb2xlOiAncHJpbWFyeScsXG4gICAgICAgICAgaGFuZGxlcjogciA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHIuZ2V0Q29tcG9uZW50SW5zdGFuY2U8TW92ZVRvRm9sZGVyRGlhbG9nQ29tcG9uZW50PigpO1xuICAgICAgICAgICAgci5jbG9zZShpbnN0YW5jZSA/IGluc3RhbmNlLnBpY2tlZEZvbGRlcklkIDogbnVsbCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBidXR0b25BbGlnbm1lbnQ6ICdyaWdodCcsXG4gICAgfSk7XG4gICAgcmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHRhcmdldEZvbGRlcklkID0+IHtcbiAgICAgIGlmICh0YXJnZXRGb2xkZXJJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIGNhbmNlbGxlZFxuICAgICAgdGhpcy50ZXN0c01vdmVkLmVtaXQoeyB0ZXN0SWRzLCB0YXJnZXRGb2xkZXJJZDogdGFyZ2V0Rm9sZGVySWQgPz8gbnVsbCB9KTtcbiAgICAgIHRoaXMuYnVsa0FjdGlvbkludm9rZWQuZW1pdCh7IGlkOiAnbW92ZScsIHNlbGVjdGVkIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBmb2xkZXItcGlja2VyIGRpYWxvZyBjb25maWd1cmVkIGZvciBtb3ZpbmcgYSBmb2xkZXIgKHJhdGhlciB0aGFuIHRlc3RzKS5cbiAgICogVGhlIHNvdXJjZSBmb2xkZXIgaXRzZWxmIGlzIG1hcmtlZCBhcyB0aGUgXCJjdXJyZW50XCIgZm9sZGVyIHNvIGl0J3MgcmVuZGVyZWQgYXNcbiAgICogZGlzYWJsZWQgaW4gdGhlIHBpY2tlci4gT24gY29uZmlybSwgZW1pdHMgYGZvbGRlck1vdmVkYCB3aXRoIHRoZSBjaG9zZW4gcGFyZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBvcGVuTW92ZUZvbGRlckRpYWxvZyhjdHg6IEZvbGRlck1vdmVSZXF1ZXN0ZWRQYXlsb2FkKTogdm9pZCB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW48YW55LCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkPih7XG4gICAgICB0aXRsZTogdGhpcy5tb2R1bGFyTGFiZWxzLmZvbGRlck1lbnVNb3ZlLFxuICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICBjb250ZW50OiB7XG4gICAgICAgIHR5cGU6ICdjb21wb25lbnQnLFxuICAgICAgICBjb21wb25lbnQ6IE1vdmVUb0ZvbGRlckRpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgZm9sZGVyczogdGhpcy5mb2xkZXJzLFxuICAgICAgICAgIGxhYmVsczogdGhpcy5tb2R1bGFyTGFiZWxzLFxuICAgICAgICAgIC8vIFJldXNlIHRoZSBcImRpc2FibGVkXCIgdHJlYXRtZW50OiB0aGUgZm9sZGVyIGJlaW5nIG1vdmVkIGNhbid0IGJlIGl0cyBvd24gZGVzdGluYXRpb24uXG4gICAgICAgICAgY3VycmVudEZvbGRlcklkOiBjdHguaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7IGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZURpYWxvZ0NhbmNlbCwgcm9sZTogJ3NlY29uZGFyeScsIGhhbmRsZXI6IHIgPT4gci5jbG9zZSh1bmRlZmluZWQgYXMgYW55KSB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubW9kdWxhckxhYmVscy5tb3ZlRGlhbG9nQ29uZmlybSxcbiAgICAgICAgICByb2xlOiAncHJpbWFyeScsXG4gICAgICAgICAgaGFuZGxlcjogciA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHIuZ2V0Q29tcG9uZW50SW5zdGFuY2U8TW92ZVRvRm9sZGVyRGlhbG9nQ29tcG9uZW50PigpO1xuICAgICAgICAgICAgci5jbG9zZShpbnN0YW5jZSA/IGluc3RhbmNlLnBpY2tlZEZvbGRlcklkIDogbnVsbCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBidXR0b25BbGlnbm1lbnQ6ICdyaWdodCcsXG4gICAgfSk7XG4gICAgcmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHRhcmdldEZvbGRlcklkID0+IHtcbiAgICAgIGlmICh0YXJnZXRGb2xkZXJJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIGNhbmNlbGxlZFxuICAgICAgdGhpcy5mb2xkZXJNb3ZlZC5lbWl0KHsgaWQ6IGN0eC5pZCwgbmV3UGFyZW50SWQ6IHRhcmdldEZvbGRlcklkID8/IG51bGwgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5DcmVhdGVGb2xkZXJEaWFsb2coaW5pdGlhbFBhcmVudElkOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW48YW55LCB7IG5hbWU6IHN0cmluZzsgcGFyZW50SWQ6IG51bWJlciB8IG51bGw7IGNvbG9yOiBzdHJpbmcgfSB8IGZhbHNlPih7XG4gICAgICB0aXRsZTogdGhpcy5tb2R1bGFyTGFiZWxzLm5ld0ZvbGRlckRpYWxvZ1RpdGxlLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMubW9kdWxhckxhYmVscy5uZXdGb2xkZXJEaWFsb2dEZXNjcmlwdGlvbixcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgY29udGVudDoge1xuICAgICAgICB0eXBlOiAnY29tcG9uZW50JyxcbiAgICAgICAgY29tcG9uZW50OiBOZXdGb2xkZXJEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGZvbGRlcnM6IHRoaXMuZm9sZGVycyxcbiAgICAgICAgICBsYWJlbHM6IHRoaXMubW9kdWxhckxhYmVscyxcbiAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICBwYXJlbnRJZDogaW5pdGlhbFBhcmVudElkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm5ld0ZvbGRlckRpYWxvZ0NhbmNlbCwgcm9sZTogJ3NlY29uZGFyeScsIGhhbmRsZXI6IHIgPT4gci5jbG9zZShmYWxzZSkgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMubmV3Rm9sZGVyRGlhbG9nQ29uZmlybSxcbiAgICAgICAgICByb2xlOiAncHJpbWFyeScsXG4gICAgICAgICAgaGFuZGxlcjogciA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0ID0gci5nZXRDb21wb25lbnRJbnN0YW5jZTxOZXdGb2xkZXJEaWFsb2dDb21wb25lbnQ+KCk7XG4gICAgICAgICAgICBpZiAoIWluc3QgfHwgIWluc3QuaXNWYWxpZCkgcmV0dXJuIGZhbHNlOyAvLyBrZWVwIHRoZSBkaWFsb2cgb3BlbiBvbiBpbnZhbGlkIHN1Ym1pdFxuICAgICAgICAgICAgci5jbG9zZSh7IG5hbWU6IChpbnN0Lm5hbWUgfHwgJycpLnRyaW0oKSwgcGFyZW50SWQ6IGluc3QucGFyZW50SWQsIGNvbG9yOiBpbnN0LmNvbG9yIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnV0dG9uQWxpZ25tZW50OiAncmlnaHQnLFxuICAgIH0pO1xuICAgIHJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmZvbGRlckNyZWF0ZWQuZW1pdCh7IHBhcmVudElkOiByZXN1bHQucGFyZW50SWQsIG5hbWU6IHJlc3VsdC5uYW1lLCBjb2xvcjogcmVzdWx0LmNvbG9yIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRGVsZXRlRm9sZGVyRGlhbG9nKGN0eDogRm9sZGVyRGVsZXRlUmVxdWVzdGVkUGF5bG9hZCk6IHZvaWQge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuPGFueSwgeyBzdHJhdGVneTogRm9sZGVyRGVsZXRlU3RyYXRlZ3kgfSB8IGZhbHNlPih7XG4gICAgICB0aXRsZTogdGhpcy5tb2R1bGFyTGFiZWxzLmRlbGV0ZUZvbGRlckRpYWxvZ1RpdGxlLFxuICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICBjb250ZW50OiB7XG4gICAgICAgIHR5cGU6ICdjb21wb25lbnQnLFxuICAgICAgICBjb21wb25lbnQ6IERlbGV0ZUZvbGRlckRpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgZm9sZGVyTmFtZTogY3R4Lm5hbWUsXG4gICAgICAgICAgdGVzdENvdW50OiBjdHgudGVzdENvdW50LFxuICAgICAgICAgIGhhc1BhcmVudDogY3R4Lmhhc1BhcmVudCxcbiAgICAgICAgICBsYWJlbHM6IHRoaXMubW9kdWxhckxhYmVscyxcbiAgICAgICAgICBzdHJhdGVneTogY3R4Lmhhc1BhcmVudCA/ICdtb3ZlLXRvLXBhcmVudCcgOiAnbW92ZS10by11bm9yZ2FuaXNlZCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7IGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMuZGVsZXRlRm9sZGVyRGlhbG9nQ2FuY2VsLCByb2xlOiAnc2Vjb25kYXJ5JywgaGFuZGxlcjogciA9PiByLmNsb3NlKGZhbHNlKSB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubW9kdWxhckxhYmVscy5kZWxldGVGb2xkZXJEaWFsb2dDb25maXJtLFxuICAgICAgICAgIHJvbGU6ICd3YXJuJyxcbiAgICAgICAgICBoYW5kbGVyOiByID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3QgPSByLmdldENvbXBvbmVudEluc3RhbmNlPERlbGV0ZUZvbGRlckRpYWxvZ0NvbXBvbmVudD4oKTtcbiAgICAgICAgICAgIHIuY2xvc2UoaW5zdCA/IHsgc3RyYXRlZ3k6IGluc3Quc3RyYXRlZ3kgfSA6IGZhbHNlKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGJ1dHRvbkFsaWdubWVudDogJ3JpZ2h0JyxcbiAgICB9KTtcbiAgICByZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5mb2xkZXJEZWxldGVkLmVtaXQoeyBpZDogY3R4LmlkLCBzdHJhdGVneTogcmVzdWx0LnN0cmF0ZWd5IH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSb3ctcmVvcmRlciBoYW5kbGVyc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgc3RhcnRSZW9yZGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVvcmRlcmluZykgcmV0dXJuO1xuICAgIHRoaXMucmVvcmRlclNuYXBzaG90ID0gWy4uLih0aGlzLnBhZ2VkUm93cyB8fCBbXSldO1xuICAgIHRoaXMucmVvcmRlckRyYWZ0ID0gWy4uLih0aGlzLnBhZ2VkUm93cyB8fCBbXSldO1xuICAgIC8vIFBhdXNlIGF1dG8tcmVmcmVzaCB3aGlsZSByZW9yZGVyaW5nIOKAlCBhdm9pZHMgdGhlIHRpbWVyIGNsb2JiZXJpbmcgdGhlIGRyYWZ0LlxuICAgIHRoaXMucmVvcmRlclNhdmVkQXV0b1JlZnJlc2ggPSB0aGlzLnNlbGVjdGVkQXV0b1JlZnJlc2hJbnRlcnZhbDtcbiAgICBpZiAodGhpcy5yZW9yZGVyU2F2ZWRBdXRvUmVmcmVzaCA+IDApIHtcbiAgICAgIHRoaXMuc2V0dXBBdXRvUmVmcmVzaCgwKTtcbiAgICB9XG4gICAgdGhpcy5pc1Jlb3JkZXJpbmcgPSB0cnVlO1xuICAgIHRoaXMucmVvcmRlckF3YWl0aW5nU2F2ZUZsaXAgPSBmYWxzZTtcbiAgICB0aGlzLnJlb3JkZXJTdGFydC5lbWl0KCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjYW5jZWxSZW9yZGVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlb3JkZXJpbmcpIHJldHVybjtcbiAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwYWdlIG9yZGVyIHNvIHRoZSB1c2VyIHNlZXMgdGhlIHByZS1kcmFnIHN0YXRlLlxuICAgIGlmICh0aGlzLnJlb3JkZXJTbmFwc2hvdCkge1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbLi4udGhpcy5yZW9yZGVyU25hcHNob3RdO1xuICAgIH1cbiAgICB0aGlzLmV4aXRSZW9yZGVyTW9kZSgpO1xuICAgIHRoaXMucmVvcmRlckNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBzYXZlUmVvcmRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZW9yZGVyaW5nKSByZXR1cm47XG4gICAgY29uc3Qgb3JkZXJlZCA9IHRoaXMucmVvcmRlckRyYWZ0ID8gWy4uLnRoaXMucmVvcmRlckRyYWZ0XSA6IFsuLi4odGhpcy5wYWdlZFJvd3MgfHwgW10pXTtcbiAgICB0aGlzLnJlb3JkZXJBd2FpdGluZ1NhdmVGbGlwID0gdHJ1ZTtcbiAgICB0aGlzLnJlb3JkZXJTYXZlLmVtaXQoeyBvcmRlcmVkSXRlbXM6IG9yZGVyZWQgfSk7XG4gICAgLy8gSWYgdGhlIGhvc3QgbmV2ZXIgZmxpcHMgYHJlb3JkZXJTYXZpbmdgIChlLmcuIHN5bmNocm9ub3VzIG5vLW9wKSwgZXhpdFxuICAgIC8vIGltbWVkaWF0ZWx5IHNvIHRoZSBVSSBkb2Vzbid0IGdldCBzdHVjayBpbiBcIlNhdmluZy4uLlwiIHN0YXRlLlxuICAgIGlmICghdGhpcy5yZW9yZGVyU2F2aW5nKSB7XG4gICAgICAvLyBHaXZlIHRoZSBob3N0IGEgbWljcm90YXNrIHRvIGZsaXAgYHJlb3JkZXJTYXZpbmdgIHRvIHRydWUg4oCUIGlmIGl0XG4gICAgICAvLyBoYXNuJ3QsIGFzc3VtZSBubyBhc3luYyB3b3JrIGFuZCBleGl0LlxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnJlb3JkZXJBd2FpdGluZ1NhdmVGbGlwICYmICF0aGlzLnJlb3JkZXJTYXZpbmcpIHtcbiAgICAgICAgICB0aGlzLmV4aXRSZW9yZGVyTW9kZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblJvd1Jlb3JkZXIoZXZlbnQ6IHsgcHJldmlvdXNJbmRleDogbnVtYmVyOyBjdXJyZW50SW5kZXg6IG51bWJlcjsgb3JkZXJlZERhdGE6IGFueVtdIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZW9yZGVyaW5nKSByZXR1cm47XG4gICAgdGhpcy5yZW9yZGVyRHJhZnQgPSBbLi4uZXZlbnQub3JkZXJlZERhdGFdO1xuICAgIHRoaXMucGFnZWRSb3dzID0gdGhpcy5yZW9yZGVyRHJhZnQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGV4aXRSZW9yZGVyTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVvcmRlcmluZyA9IGZhbHNlO1xuICAgIHRoaXMucmVvcmRlclNuYXBzaG90ID0gbnVsbDtcbiAgICB0aGlzLnJlb3JkZXJEcmFmdCA9IG51bGw7XG4gICAgdGhpcy5yZW9yZGVyQXdhaXRpbmdTYXZlRmxpcCA9IGZhbHNlO1xuICAgIC8vIFJlc3RvcmUgcHJldmlvdXNseS1zZWxlY3RlZCBhdXRvLXJlZnJlc2ggaW50ZXJ2YWwgKGlmIGFueSkuXG4gICAgaWYgKHRoaXMucmVvcmRlclNhdmVkQXV0b1JlZnJlc2ggPiAwKSB7XG4gICAgICB0aGlzLnNldHVwQXV0b1JlZnJlc2godGhpcy5yZW9yZGVyU2F2ZWRBdXRvUmVmcmVzaCk7XG4gICAgICB0aGlzLnJlb3JkZXJTYXZlZEF1dG9SZWZyZXNoID0gMDtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogUm93LWRyYWcgcGF5bG9hZCBidWlsZGVyIHVzZWQgYnkgdGhlIFtjcWFSb3dEcmFnXSBkaXJlY3RpdmUgdmlhIChidWlsZFBheWxvYWQpLlxuICAgKi9cbiAgYnVpbGRSb3dEcmFnUGF5bG9hZCA9IChyb3c6IGFueSk6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5jdXJyZW50U2VsZWN0ZWRJdGVtcztcbiAgICAvLyBJZiB0aGUgZHJhZ2dlZCByb3cgaXMgcGFydCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24sIGRyYWcgdGhlIHdob2xlIHNlbGVjdGlvbi5cbiAgICBjb25zdCByb3dJZCA9IHJvdz8uaWQ7XG4gICAgY29uc3QgaW5TZWxlY3Rpb24gPSByb3dJZCAhPSBudWxsICYmIHNlbGVjdGVkLnNvbWUocyA9PiBzPy5pZCA9PT0gcm93SWQpO1xuICAgIGNvbnN0IGlkcyA9IChpblNlbGVjdGlvbiA/IHNlbGVjdGVkIDogW3Jvd10pLm1hcChyID0+IHI/LmlkKS5maWx0ZXIodiA9PiB2ICE9IG51bGwpO1xuICAgIHJldHVybiBpZHM7XG4gIH07XG59XG4iLCI8IS0tIFJldXNhYmxlIGZvbGRlci1pY29uIGNoaXAuIFJlbmRlciB2aWEgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvbGRlckljb25DaGlwXCI+PC9uZy1jb250YWluZXI+LiAtLT5cbjxuZy10ZW1wbGF0ZSAjZm9sZGVySWNvbkNoaXA+XG4gIDxzcGFuIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTEwIGNxYS1oLTEwIGNxYS1yb3VuZGVkLVsxMHB4XSBjcWEtYmctbmV1dHJhbC0xMDAgY3FhLXNocmluay0wXCI+XG4gICAgPHN2ZyB3aWR0aD1cIjE3XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDE3IDE1XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICA8cGF0aCBkPVwiTTE1LjYzNzUgMTIuNjM3N0MxNS42Mzc1IDEzLjAzNTUgMTUuNDc5NCAxMy40MTcxIDE1LjE5ODEgMTMuNjk4NEMxNC45MTY4IDEzLjk3OTcgMTQuNTM1MyAxNC4xMzc3IDE0LjEzNzUgMTQuMTM3N0gyLjEzNzQ1QzEuNzM5NjMgMTQuMTM3NyAxLjM1ODEgMTMuOTc5NyAxLjA3Njc5IDEzLjY5ODRDMC43OTU0ODYgMTMuNDE3MSAwLjYzNzQ1MSAxMy4wMzU1IDAuNjM3NDUxIDEyLjYzNzdWMi4xMzc3QzAuNjM3NDUxIDEuNzM5ODcgMC43OTU0ODYgMS4zNTgzNCAxLjA3Njc5IDEuMDc3MDRDMS4zNTgxIDAuNzk1NzMxIDEuNzM5NjMgMC42Mzc2OTUgMi4xMzc0NSAwLjYzNzY5NUg1Ljg4NzQ1TDcuMzg3NDUgMi44ODc3SDE0LjEzNzVDMTQuNTM1MyAyLjg4NzcgMTQuOTE2OCAzLjA0NTczIDE1LjE5ODEgMy4zMjcwNEMxNS40Nzk0IDMuNjA4MzQgMTUuNjM3NSAzLjk4OTg3IDE1LjYzNzUgNC4zODc3VjEyLjYzNzdaXCIgc3Ryb2tlPVwiIzZENkQ3NFwiIHN0cm9rZS13aWR0aD1cIjEuMjc1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgIDwvc3ZnPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFJldXNhYmxlIFwiK1wiIGNoaXAgdXNlZCBieSB0aGUgXCJOZXcgZm9sZGVyXCIgdGlsZS4gLS0+XG48bmctdGVtcGxhdGUgI2FkZEljb25DaGlwPlxuICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy0xMCBjcWEtaC0xMCBjcWEtcm91bmRlZC1bMTBweF0gY3FhLWJnLW5ldXRyYWwtMTAwIGNxYS1zaHJpbmstMFwiPlxuICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgPHBhdGggZD1cIk04IDNWMTNNMyA4SDEzXCIgc3Ryb2tlPVwiIzZENkQ3NFwiIHN0cm9rZS13aWR0aD1cIjEuMjc1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICA8L3N2Zz5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cImNxYS11aS1yb290XCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtcmVsYXRpdmVcIj5cbiAgICA8ZGl2IFtjbGFzc109XCIhc2hvd1NlYXJjaEJhciA/ICdjcWEtanVzdGlmeS1lbmQnIDogJ2NxYS1qdXN0aWZ5LWJldHdlZW4nXCIgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1mbGV4LXdyYXAgY3FhLW1iLTNcIj5cbiAgICAgIDxjcWEtc2VhcmNoLWJhclxuICAgICAgICAqbmdJZj1cInNob3dTZWFyY2hCYXJcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICBbdmFsdWVdPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICBbc2hvd0NsZWFyXT1cInNob3dDbGVhclwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ2YWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKHNlYXJjaCk9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgIChjbGVhcmVkKT1cImNsZWFyZWQoKVwiXG4gICAgICA+PC9jcWEtc2VhcmNoLWJhcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtZmxleC13cmFwXCI+XG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd0V4cG9ydEJ1dHRvblwiXG4gICAgICAgIHZhcmlhbnQ9XCJncmV5LXNvbGlkXCJcbiAgICAgICAgaWNvbj1cIm9wZW5faW5fbmV3XCJcbiAgICAgICAgW3RleHRdPVwiaXNFeHBvcnRpbmcgPyAnRXhwb3J0aW5nLi4uJyA6ICdFeHBvcnQnXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRXhwb3J0aW5nXCJcbiAgICAgICAgKGNsaWNrZWQpPVwiZXhwb3J0Q29kZUNsaWNrKClcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj57eyBpc0V4cG9ydGluZyA/ICdFeHBvcnRpbmcuLi4nIDogJ0V4cG9ydCcgfX08L3NwYW4+XG4gICAgICA8L2NxYS1idXR0b24+XG4gICAgICBcbiAgICAgIDwhLS0gRXhwb3J0IENvZGUgTW9kYWwgLS0+XG4gICAgICA8Y3FhLWV4cG9ydC1jb2RlLW1vZGFsXG4gICAgICAgICpuZ0lmPVwic2hvd0V4cG9ydEJ1dHRvblwiXG4gICAgICAgIFtpc09wZW5dPVwiaXNFeHBvcnRNb2RhbE9wZW5cIlxuICAgICAgICBbY2FzZXNdPVwic2VsZWN0ZWRDYXNlc0ZvckV4cG9ydFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgIChjbG9zZU1vZGFsKT1cImNsb3NlRXhwb3J0TW9kYWwoKVwiXG4gICAgICAgIChleHBvcnQpPVwib25FeHBvcnRNb2RhbEV4cG9ydCgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1leHBvcnQtY29kZS1tb2RhbD5cbiAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRyb3Bkb3duVGVtcGxhdGUgb2Ygb3RoZXJEcm9wRG93bkJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlEcm9wZG93blRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VsZWN0RHJvcGRvd25UZW1wbGF0ZSBvZiBvdGhlclNlbGVjdERyb3BEb3duQnV0dG9uczsgdHJhY2tCeTogdHJhY2tCeVNlbGVjdERyb3Bkb3duVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0RHJvcGRvd25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93RmlsdGVyQnV0dG9uXCJcbiAgICAgICAgICB2YXJpYW50PVwiZ3JleS1zb2xpZFwiXG4gICAgICAgICAgaWNvbj1cImFkZFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVvcmRlcmluZ1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwidG9nZ2xlRmlsdGVyKClcIlxuICAgICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgICAgICBGaWx0ZXIgICAgICAgICAgXG4gICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImFycm93Q2xhc3Nlc1wiPlxuICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICBjbGFzcz1cImNxYS13LTIgY3FhLWgtMSBjcWEtYWJzb2x1dGUgY3FhLWxlZnQtWzRweF0gY3FhLXRvcC1bNnB4XVwiXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgOCA0XCJcbiAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICBkPVwiTTAgMEw0IDRMOCAwXCJcbiAgICAgICAgICAgICAgICBzdHJva2U9XCIjMEIwQjBDXCJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICAgIDxjcWEtY29sdW1uLXZpc2liaWxpdHlcbiAgICAgICAgICAqbmdJZj1cInNob3dTZXR0aW5nc0J1dHRvblwiXG4gICAgICAgICAgW2NvbHVtbnNdPVwidmlzaWJpbGl0eUNvbHVtbnNcIlxuICAgICAgICAgIFtjb2x1bW5WaXNpYmlsaXR5XT1cImNvbHVtblZpc2liaWxpdHlcIlxuICAgICAgICAgIFtzZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWxdPVwic2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgICAoY29sdW1uVmlzaWJpbGl0eUNoYW5nZSk9XCJvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgKGF1dG9SZWZyZXNoQ2hhbmdlKT1cIm9uQXV0b1JlZnJlc2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2NxYS1jb2x1bW4tdmlzaWJpbGl0eT5cbiAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dBdXRvUmVmcmVzaEJ1dHRvblwiXG4gICAgICAgICAgdmFyaWFudD1cImdyZXktc29saWRcIlxuICAgICAgICAgIGljb249XCJyZWZyZXNoXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJoYW5kbGVSZWZyZXNoQ2xpY2soKVwiXG4gICAgICAgICAgW3Rvb2x0aXBdPVwiJ1JlZnJlc2gnXCJcbiAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVvcmRlcmluZ1wiXG4gICAgICAgID48L2NxYS1idXR0b24+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvblRlbXBsYXRlIG9mIG90aGVyQnV0dG9uczsgdHJhY2tCeTogdHJhY2tCeVRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8Y3FhLXNlZ21lbnQtY29udHJvbFxuICAgICAgICAgICpuZ0lmPVwic2hvd1ZpZXdNb2RlVG9nZ2xlXCJcbiAgICAgICAgICBzaXplPVwibGdcIlxuICAgICAgICAgIFtzZWdtZW50c109XCJ2aWV3TW9kZVNlZ21lbnRzXCJcbiAgICAgICAgICBbdmFsdWVdPVwidmlld01vZGVcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblZpZXdNb2RlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9jcWEtc2VnbWVudC1jb250cm9sPlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd1Jlb3JkZXJCdXR0b24gJiYgIWlzUmVvcmRlcmluZ1wiXG4gICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICBpY29uPVwiZHJhZ19pbmRpY2F0b3JcIlxuICAgICAgICAgIFt0ZXh0XT1cInJlb3JkZXJMYWJlbHMucmVvcmRlckJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFwYWdlZFJvd3MgfHwgcGFnZWRSb3dzLmxlbmd0aCA9PT0gMCB8fCBpc1RhYmxlTG9hZGluZyB8fCBpc1RhYmxlRGF0YUxvYWRpbmdcIlxuICAgICAgICAgIChjbGlja2VkKT1cInN0YXJ0UmVvcmRlcigpXCJcbiAgICAgICAgPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dSZW9yZGVyQnV0dG9uICYmIGlzUmVvcmRlcmluZ1wiPlxuICAgICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgW3RleHRdPVwicmVvcmRlckxhYmVscy5jYW5jZWxCdXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlb3JkZXJTYXZpbmdcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwiY2FuY2VsUmVvcmRlcigpXCJcbiAgICAgICAgICA+PC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwiZmlsbGVkXCJcbiAgICAgICAgICAgIFtpY29uXT1cInJlb3JkZXJTYXZpbmcgPyAnaG91cmdsYXNzX2VtcHR5JyA6ICcnXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cInJlb3JkZXJTYXZpbmcgPyByZW9yZGVyTGFiZWxzLnNhdmluZ0J1dHRvbiA6IHJlb3JkZXJMYWJlbHMuZG9uZUJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVvcmRlclNhdmluZ1wiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJzYXZlUmVvcmRlcigpXCJcbiAgICAgICAgICA+PC9jcWEtYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSZW9yZGVyIG1vZGUgYmFubmVyIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc1Jlb3JkZXJpbmdcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1tYi0zIGNxYS1weC0zIGNxYS1weS0yIGNxYS1yb3VuZGVkLW1kIGNxYS1iZy1bI0ZGRkJFQl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRkRFNjhBXVwiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCIzXCIgcj1cIjEuNVwiIGZpbGw9XCIjOTI0MDBFXCI+PC9jaXJjbGU+XG4gICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCIzXCIgcj1cIjEuNVwiIGZpbGw9XCIjOTI0MDBFXCI+PC9jaXJjbGU+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxM1wiIGN5PVwiM1wiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiOFwiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiMTNcIiBjeT1cIjhcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjEzXCIgcj1cIjEuNVwiIGZpbGw9XCIjOTI0MDBFXCI+PC9jaXJjbGU+XG4gICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCIxM1wiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiMTNcIiBjeT1cIjEzXCIgcj1cIjEuNVwiIGZpbGw9XCIjOTI0MDBFXCI+PC9jaXJjbGU+XG4gICAgICA8L3N2Zz5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyM5MjQwMEVdXCI+e3sgcmVvcmRlckxhYmVscy5iYW5uZXJUaXRsZSB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtWyM5MjQwMEVdXCI+e3sgcmVvcmRlckxhYmVscy5iYW5uZXJEZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxjcWEtc2VsZWN0ZWQtZmlsdGVyc1xuICAgICAgW2ZpbHRlckFwcGxpZWRdPVwiZmlsdGVyQXBwbGllZFwiXG4gICAgICBbY2hpcHNdPVwiY2hpcHNcIlxuICAgICAgKHJlbW92ZUNoaXApPVwib25SZW1vdmVDaGlwKCRldmVudClcIlxuICAgICAgKGNsZWFyQWxsKT1cIm9uQ2xlYXJBbGxDaGlwcygpXCJcbiAgICAgIChvbkNsZWFyQWxsKT1cIm9uQ2xlYXJBbGwuZW1pdCgpXCJcbiAgICA+XG4gICAgPC9jcWEtc2VsZWN0ZWQtZmlsdGVycz5cblxuICAgIDxjcWEtZHluYW1pYy1maWx0ZXJcbiAgICAgICpuZ0lmPVwic2hvd0ZpbHRlclBhbmVsXCJcbiAgICAgIFtjb25maWddPVwiZmlsdGVyQ29uZmlnXCJcbiAgICAgIFttb2RlbF09XCJmaWx0ZXJNb2RlbFwiXG4gICAgICBbc2hvd0ZpbHRlclBhbmVsXT1cInNob3dGaWx0ZXJQYW5lbFwiXG4gICAgICAoZmlsdGVyc0NoYW5nZWQpPVwib25GaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChmaWx0ZXJzQXBwbGllZCk9XCJvbkZpbHRlcnNBcHBsaWVkKCRldmVudClcIlxuICAgICAgKG9uQXBwbHlGaWx0ZXJDbGljayk9XCJvbkFwcGx5RmlsdGVyQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgIChvblJlc2V0RmlsdGVyQ2xpY2spPVwiaGFuZGxlUmVzZXRGaWx0ZXJDbGljaygpXCJcbiAgICA+XG4gICAgPC9jcWEtZHluYW1pYy1maWx0ZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0cmV0Y2ggY3FhLWdhcC0zIGNxYS1taW4taC0wXCI+XG4gICAgICA8IS0tIFNpZGViYXIgKG9ubHkgc2hvd24gaW4gbW9kdWxhciB2aWV3KSAtLT5cbiAgICAgIDxjcWEtZm9sZGVyLXNpZGViYXJcbiAgICAgICAgKm5nSWY9XCJpc01vZHVsYXJWaWV3ICYmIG1vZHVsYXJDb25maWcuc2hvd1NpZGViYXJcIlxuICAgICAgICBbZm9sZGVyc109XCJmb2xkZXJzXCJcbiAgICAgICAgW3NlbGVjdGVkRm9sZGVySWRdPVwic2VsZWN0ZWRGb2xkZXJJZFwiXG4gICAgICAgIFtleHBhbmRlZEZvbGRlcklkc109XCJleHBhbmRlZEZvbGRlcklkc1wiXG4gICAgICAgIFt1bm9yZ2FuaXNlZENvdW50XT1cInVub3JnYW5pc2VkQ291bnRcIlxuICAgICAgICBbYWxsb3dDcmVhdGVdPVwibW9kdWxhckNvbmZpZy5hbGxvd0NyZWF0ZUZvbGRlclwiXG4gICAgICAgIFthbGxvd1JlbmFtZV09XCJtb2R1bGFyQ29uZmlnLmFsbG93UmVuYW1lRm9sZGVyXCJcbiAgICAgICAgW2FsbG93RGVsZXRlXT1cIm1vZHVsYXJDb25maWcuYWxsb3dEZWxldGVGb2xkZXJcIlxuICAgICAgICBbYWxsb3dEcm9wXT1cIm1vZHVsYXJDb25maWcuYWxsb3dUZXN0RHJhZ0Ryb3BcIlxuICAgICAgICBbc2hvd0NvdW50c109XCJtb2R1bGFyQ29uZmlnLnNob3dDb3VudHNcIlxuICAgICAgICBbY29sbGFwc2VkXT1cInNpZGViYXJDb2xsYXBzZWRcIlxuICAgICAgICBbbGFiZWxzXT1cIm1vZHVsYXJMYWJlbHNcIlxuICAgICAgICAoZm9sZGVyU2VsZWN0ZWQpPVwib25Gb2xkZXJTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZvbGRlckV4cGFuc2lvblRvZ2dsZWQpPVwib25Gb2xkZXJFeHBhbnNpb25Ub2dnbGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyQ3JlYXRlZCk9XCJvbkZvbGRlckNyZWF0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmb2xkZXJDcmVhdGVSZXF1ZXN0ZWQpPVwib25Gb2xkZXJDcmVhdGVSZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmb2xkZXJSZW5hbWVkKT1cIm9uRm9sZGVyUmVuYW1lZCgkZXZlbnQpXCJcbiAgICAgICAgKGZvbGRlckRlbGV0ZWQpPVwib25Gb2xkZXJEZWxldGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyTW92ZVJlcXVlc3RlZCk9XCJvbkZvbGRlck1vdmVSZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWQpPVwib25Gb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICh0ZXN0c0Ryb3BwZWQpPVwib25UZXN0c0Ryb3BwZWQoJGV2ZW50KVwiXG4gICAgICAgIChmb2xkZXJEcm9wcGVkKT1cIm9uRm9sZGVyRHJvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNvbGxhcHNlZENoYW5nZSk9XCJvblNpZGViYXJDb2xsYXBzZWRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC9jcWEtZm9sZGVyLXNpZGViYXI+XG5cbiAgICAgIDwhLS0gUmlnaHQgcGFuZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWluLXctMFwiPlxuICAgICAgICA8IS0tIEJyZWFkY3J1bWIgKG1vZHVsYXIgdmlldywgZm9sZGVyIGRyaWxsZWQtaW4pIC0tPlxuICAgICAgICA8bmF2XG4gICAgICAgICAgKm5nSWY9XCJpc01vZHVsYXJWaWV3ICYmIG1vZHVsYXJDb25maWcuc2hvd0JyZWFkY3J1bWIgJiYgIWlzUm9vdFZpZXdcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJGb2xkZXIgcGF0aFwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtdGV4dC1zbSBjcWEtdGV4dC1uZXV0cmFsLTYwMCBjcWEtbWItM1wiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImhvdmVyOmNxYS10ZXh0LWluZGlnby02MDBcIiAoY2xpY2spPVwib25Gb2xkZXJTZWxlY3RlZChudWxsKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLWFsaWduLW1pZGRsZVwiIHN0eWxlPVwiZm9udC1zaXplOjE2cHg7d2lkdGg6MTZweDtoZWlnaHQ6MTZweFwiPmZvbGRlcl9vcGVuPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFsaWduLW1pZGRsZSBjcWEtbWwtMVwiPnt7IG1vZHVsYXJMYWJlbHMuYWxsRm9sZGVycyB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjcnVtYiBvZiBicmVhZGNydW1iVHJhaWw7IGxldCBsYXN0ID0gbGFzdFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1uZXV0cmFsLTQwMFwiPi88L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImhvdmVyOmNxYS10ZXh0LWluZGlnby02MDBcIlxuICAgICAgICAgICAgICBbY2xhc3MuY3FhLXRleHQtbmV1dHJhbC05MDBdPVwibGFzdFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5jcWEtZm9udC1zZW1pYm9sZF09XCJsYXN0XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxhc3RcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiIWxhc3QgJiYgb25Gb2xkZXJTZWxlY3RlZChjcnVtYi5pZClcIlxuICAgICAgICAgICAgPnt7IGNydW1iLm5hbWUgfX08L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uYXY+XG5cbiAgICAgICAgPCEtLSBGb2xkZXIgZ3JpZDogbW9kdWxhciArIHJvb3QgdmlldyAtLT5cbiAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAqbmdJZj1cImlzTW9kdWxhclZpZXcgJiYgaXNSb290VmlldyAmJiBtb2R1bGFyQ29uZmlnLnNob3dGb2xkZXJHcmlkICYmIHJvb3RGb2xkZXJUaWxlcy5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLW1iLTRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1tYi0yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1uZXV0cmFsLTYwMFwiIHN0eWxlPVwiZm9udC1zaXplOjE2cHg7d2lkdGg6MTZweDtoZWlnaHQ6MTZweFwiPmZvbGRlcjwvbWF0LWljb24+XG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1uZXV0cmFsLTgwMFwiPnt7IG1vZHVsYXJMYWJlbHMub3JnYW5pc2VkIH19PC9oMz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtbmV1dHJhbC01MDBcIj5cbiAgICAgICAgICAgICAge3sgcm9vdEZvbGRlclRpbGVzLmxlbmd0aCA9PT0gMSA/IG1vZHVsYXJMYWJlbHMuZm9sZGVyc0NvdW50U2luZ3VsYXIgOiBtb2R1bGFyTGFiZWxzLmZvbGRlcnNDb3VudFBsdXJhbC5yZXBsYWNlKCd7bn0nLCAnJyArIHJvb3RGb2xkZXJUaWxlcy5sZW5ndGgpIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LW5vd3JhcCBjcWEtZ2FwLTMgY3FhLW92ZXJmbG93LXgtYXV0byBjcWEtc2Nyb2xsYmFyLXRoaW4gY3FhLXBiLTJcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGYgb2Ygcm9vdEZvbGRlclRpbGVzXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtjcWFGb2xkZXJEcm9wXT1cImYuaWRcIlxuICAgICAgICAgICAgICBbZHJvcEVuYWJsZWRdPVwibW9kdWxhckNvbmZpZy5hbGxvd1Rlc3REcmFnRHJvcFwiXG4gICAgICAgICAgICAgICh0ZXN0c0Ryb3BwZWQpPVwib25UZXN0c0Ryb3BwZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkZvbGRlclNlbGVjdGVkKGYuaWQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtc2hyaW5rLTAgY3FhLXctWzI0MHB4XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0zIGNxYS10ZXh0LWxlZnQgY3FhLXAtMyBjcWEtcm91bmRlZC1bMTBweF0gY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVswLjVweF0gY3FhLWJvcmRlci1bI0UyRTJFM10gY3FhLWJnLXdoaXRlIGhvdmVyOmNxYS1ib3JkZXItWyNEOEQ5RkNdIGhvdmVyOmNxYS1zaGFkb3ctc20gY3FhLXRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1taW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvbGRlckljb25DaGlwXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1iYXNlIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LW5ldXRyYWwtOTAwIGNxYS10cnVuY2F0ZSBjcWEtbGVhZGluZy10aWdodFwiPnt7IGYubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibW9kdWxhckNvbmZpZy5zaG93Q291bnRzXCIgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1uZXV0cmFsLTUwMCBjcWEtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgKGYuY291bnQgPz8gMCkgPT09IDEgPyBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRTaW5ndWxhciA6IG1vZHVsYXJMYWJlbHMudGVzdHNDb3VudFBsdXJhbC5yZXBsYWNlKCd7bn0nLCAnJyArIChmLmNvdW50ID8/IDApKSB9fTxuZy1jb250YWluZXIgKm5nSWY9XCJmLmNoaWxkcmVuPy5sZW5ndGhcIj4gwrcge3sgZi5jaGlsZHJlbiEubGVuZ3RoID09PSAxID8gbW9kdWxhckxhYmVscy5vbmVTdWJmb2xkZXIgOiBtb2R1bGFyTGFiZWxzLnN1YmZvbGRlcnNDb3VudC5yZXBsYWNlKCd7bn0nLCAnJyArIGYuY2hpbGRyZW4hLmxlbmd0aCkgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LW5ldXRyYWwtNDAwIGNxYS1zaHJpbmstMFwiIHN0eWxlPVwiZm9udC1zaXplOjIwcHg7d2lkdGg6MjBweDtoZWlnaHQ6MjBweFwiPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDwhLS0gXCIrIE5ldyBmb2xkZXJcIiB0aWxlIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIm1vZHVsYXJDb25maWcuYWxsb3dDcmVhdGVGb2xkZXJcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9sZGVyQ3JlYXRlUmVxdWVzdGVkKHsgcGFyZW50SWQ6IG51bGwgfSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1zaHJpbmstMCBjcWEtdy1bMjQwcHhdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS10ZXh0LWxlZnQgY3FhLXAtMyBjcWEtcm91bmRlZC1bMTBweF0gY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVswLjVweF0gY3FhLWJvcmRlci1bI0UyRTJFM10gY3FhLWJnLW5ldXRyYWwtNTAgaG92ZXI6Y3FhLWJvcmRlci1bI0Q4RDlGQ10gaG92ZXI6Y3FhLWJnLXdoaXRlIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRJY29uQ2hpcFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1taW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1iYXNlIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LW5ldXRyYWwtNjAwIGNxYS10cnVuY2F0ZSBjcWEtbGVhZGluZy10aWdodFwiPnt7IG1vZHVsYXJMYWJlbHMubmV3Rm9sZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC00MDBcIj57eyBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJzAnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwhLS0gU3ViZm9sZGVyIHNlY3Rpb246IG1vZHVsYXIgKyBmb2xkZXIgdmlldy4gU2hvd24gd2hlbmV2ZXIgZHJpbGxlZCBpbiAoZXZlbiBpZiBubyBzdWJmb2xkZXJzLCBzbyB0aGUgXCIrIE5ldyBmb2xkZXJcIiB0aWxlIHJlbWFpbnMgcmVhY2hhYmxlKS4gLS0+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgKm5nSWY9XCJpc01vZHVsYXJWaWV3ICYmICFpc1Jvb3RWaWV3ICYmIG1vZHVsYXJDb25maWcuc2hvd1N1YmZvbGRlclNlY3Rpb24gJiYgc3ViZm9sZGVyVGlsZXMubGVuZ3RoXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1tYi00XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdWJmb2xkZXJUaWxlcy5sZW5ndGggfHwgbW9kdWxhckNvbmZpZy5hbGxvd0NyZWF0ZUZvbGRlclwiIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC02MDAgY3FhLW1iLTJcIj5cbiAgICAgICAgICAgIHt7IG1vZHVsYXJMYWJlbHMuc3ViZm9sZGVyc0luIH19IHt7IGJyZWFkY3J1bWJUcmFpbC5sZW5ndGggPyBicmVhZGNydW1iVHJhaWxbYnJlYWRjcnVtYlRyYWlsLmxlbmd0aCAtIDFdLm5hbWUgOiAnJyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1ub3dyYXAgY3FhLWdhcC0zIGNxYS1vdmVyZmxvdy14LWF1dG8gY3FhLXNjcm9sbGJhci10aGluIGNxYS1wYi0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmIG9mIHN1YmZvbGRlclRpbGVzXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtjcWFGb2xkZXJEcm9wXT1cImYuaWRcIlxuICAgICAgICAgICAgICBbZHJvcEVuYWJsZWRdPVwibW9kdWxhckNvbmZpZy5hbGxvd1Rlc3REcmFnRHJvcFwiXG4gICAgICAgICAgICAgICh0ZXN0c0Ryb3BwZWQpPVwib25UZXN0c0Ryb3BwZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkZvbGRlclNlbGVjdGVkKGYuaWQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtc2hyaW5rLTAgY3FhLXctWzI0MHB4XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0zIGNxYS10ZXh0LWxlZnQgY3FhLXAtMyBjcWEtcm91bmRlZC1bMTBweF0gY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVswLjVweF0gY3FhLWJvcmRlci1bI0UyRTJFM10gY3FhLWJnLXdoaXRlIGhvdmVyOmNxYS1ib3JkZXItWyNEOEQ5RkNdIGhvdmVyOmNxYS1zaGFkb3ctc20gY3FhLXRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1taW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvbGRlckljb25DaGlwXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1iYXNlIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LW5ldXRyYWwtOTAwIGNxYS10cnVuY2F0ZSBjcWEtbGVhZGluZy10aWdodFwiPnt7IGYubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibW9kdWxhckNvbmZpZy5zaG93Q291bnRzXCIgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1uZXV0cmFsLTUwMCBjcWEtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgKGYuY291bnQgPz8gMCkgPT09IDEgPyBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRTaW5ndWxhciA6IG1vZHVsYXJMYWJlbHMudGVzdHNDb3VudFBsdXJhbC5yZXBsYWNlKCd7bn0nLCAnJyArIChmLmNvdW50ID8/IDApKSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtbmV1dHJhbC00MDAgY3FhLXNocmluay0wXCIgc3R5bGU9XCJmb250LXNpemU6MjBweDt3aWR0aDoyMHB4O2hlaWdodDoyMHB4XCI+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBcIisgTmV3IGZvbGRlclwiIHRpbGUgLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwibW9kdWxhckNvbmZpZy5hbGxvd0NyZWF0ZUZvbGRlclwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb2xkZXJDcmVhdGVSZXF1ZXN0ZWQoeyBwYXJlbnRJZDogc2VsZWN0ZWRGb2xkZXJJZCB9KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXNocmluay0wIGNxYS13LVsyNDBweF0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLXRleHQtbGVmdCBjcWEtcC0zIGNxYS1yb3VuZGVkLVsxMHB4XSBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWzAuNXB4XSBjcWEtYm9yZGVyLVsjRTJFMkUzXSBjcWEtYmctbmV1dHJhbC01MCBob3ZlcjpjcWEtYm9yZGVyLVsjRDhEOUZDXSBob3ZlcjpjcWEtYmctd2hpdGUgY3FhLXRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkZEljb25DaGlwXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWJhc2UgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtbmV1dHJhbC02MDAgY3FhLXRydW5jYXRlIGNxYS1sZWFkaW5nLXRpZ2h0XCI+e3sgbW9kdWxhckxhYmVscy5uZXdGb2xkZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1uZXV0cmFsLTQwMFwiPnt7IG1vZHVsYXJMYWJlbHMudGVzdHNDb3VudFBsdXJhbC5yZXBsYWNlKCd7bn0nLCAnMCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPCEtLSBGb2xkZXIgcGFuZWwgaGVhZGVyIGFib3ZlIHRoZSB0YWJsZTogXCJIb3RlbCBTZWFyY2ggKDMpXCIgKyBDbGVhciBmaWx0ZXIgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImlzTW9kdWxhclZpZXcgJiYgIWlzUm9vdFZpZXcgJiYgbW9kdWxhckNvbmZpZy5zaG93VW5vcmdhbmlzZWRTZWN0aW9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1tYi0xIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtcHgtNCBjcWEtcHktMyBjcWEtcm91bmRlZC10LWxnIGNxYS1iZy1pbmRpZ28tNTAgY3FhLWJvcmRlciBjcWEtYm9yZGVyLWluZGlnby0xMDBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1pbmRpZ28tNTAwXCIgc3R5bGU9XCJmb250LXNpemU6MThweDt3aWR0aDoxOHB4O2hlaWdodDoxOHB4XCI+Zm9sZGVyX29wZW48L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1pbmRpZ28tNzAwXCI+XG4gICAgICAgICAgICAgIHt7IGN1cnJlbnRGb2xkZXJOb2RlPy5uYW1lIH19ICh7eyBjdXJyZW50Rm9sZGVyRGlyZWN0Q291bnQgfX0pXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS1weC0zIGNxYS1weS0xIGNxYS10ZXh0LXhzIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1pbmRpZ28tNzAwIGNxYS1iZy13aGl0ZSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItaW5kaWdvLTIwMCBjcWEtcm91bmRlZCBob3ZlcjpjcWEtYmctaW5kaWdvLTUwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkZvbGRlclNlbGVjdGVkKG51bGwpXCJcbiAgICAgICAgICA+e3sgbW9kdWxhckxhYmVscy5jbGVhckZpbHRlciB9fTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFVub3JnYW5pc2VkIHNlY3Rpb24gaGVhZGVyIGF0IHJvb3QgdmlldyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiaXNNb2R1bGFyVmlldyAmJiBpc1Jvb3RWaWV3ICYmIG1vZHVsYXJDb25maWcuc2hvd1Vub3JnYW5pc2VkU2VjdGlvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbWItMiBjcWEtbXQtMlwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1uZXV0cmFsLTYwMFwiIHN0eWxlPVwiZm9udC1zaXplOjE2cHg7d2lkdGg6MTZweDtoZWlnaHQ6MTZweFwiPmluYm94PC9tYXQtaWNvbj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1uZXV0cmFsLTgwMFwiPnt7IG1vZHVsYXJMYWJlbHMudW5vcmdhbmlzZWQgfX08L2gzPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtbmV1dHJhbC01MDBcIj5cbiAgICAgICAgICAgIHt7IHVub3JnYW5pc2VkQ291bnQgPT09IDEgPyBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRTaW5ndWxhciA6IG1vZHVsYXJMYWJlbHMudGVzdHNDb3VudFBsdXJhbC5yZXBsYWNlKCd7bn0nLCAnJyArIHVub3JnYW5pc2VkQ291bnQpIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXJvdW5kZWQtWzdweF0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1sIGNxYS1ib3JkZXItciBjcWEtYm9yZGVyLWdyZXktMjAwIGNxYS1yZWxhdGl2ZSBjcWEtb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpc1RhYmxlTG9hZGluZyB8fCBpc1RhYmxlRGF0YUxvYWRpbmcpIHx8ICghZWZmZWN0aXZlSXNFbXB0eVN0YXRlICYmIHBhZ2VkUm93cyAmJiBwYWdlZFJvd3MubGVuZ3RoID4gMCk7IGVsc2Ugc3RvcnlFbXB0eVRwbFwiPlxuICAgICAgICAgICAgPGFwcC1keW5hbWljLXRhYmxlXG4gICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbXB1dGVkQ29sdW1uc1wiXG4gICAgICAgICAgICAgIFtkYXRhXT1cInBhZ2VkUm93c1wiXG4gICAgICAgICAgICAgIFtyb3dTZWxlY3RhYmxlXT1cInJvd1NlbGVjdGFibGVcIlxuICAgICAgICAgICAgICBbZW5hYmxlTG9jYWxTb3J0XT1cImVuYWJsZUxvY2FsU29ydCAmJiAhaXNSZW9yZGVyaW5nXCJcbiAgICAgICAgICAgICAgW2lzVGFibGVMb2FkaW5nXT1cImlzVGFibGVMb2FkaW5nXCJcbiAgICAgICAgICAgICAgW2lzVGFibGVEYXRhTG9hZGluZ109XCJpc1RhYmxlRGF0YUxvYWRpbmdcIlxuICAgICAgICAgICAgICBbY2VsbEpzb25QYXRoR2V0dGVyXT1cImNlbGxKc29uUGF0aEdldHRlclwiXG4gICAgICAgICAgICAgIFtvbkpzb25QYXRoQ29waWVkSGFuZGxlcl09XCJvbkpzb25QYXRoQ29waWVkSGFuZGxlclwiXG4gICAgICAgICAgICAgIFtlbmFibGVSb3dSZW9yZGVyXT1cImlzUmVvcmRlcmluZ1wiXG4gICAgICAgICAgICAgIChyb3dSZW9yZGVyKT1cIm9uUm93UmVvcmRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHNvcnRDaGFuZ2UpPVwic29ydENoYW5nZS5lbWl0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlVHBsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXB5LThcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbGx1c3RyYXRpb25zL2VtcHR5LXN0YXRlLnN2Z1wiIGFsdD1cIk5vIGRhdGFcIiBjbGFzcz1cImNxYS13LTMyIGNxYS1oLTMyIGNxYS1tYi00XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LWxnIGNxYS1mb250LXNlbWlib2xkIGNxYS1tYi0yXCI+Tm8gdGVzdCBjYXNlczwvaDM+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LW5ldXRyYWwtNTAwIGNxYS1tYi00XCI+VHJ5IGFkanVzdGluZyBmaWx0ZXJzIG9yIGNyZWF0ZSBhIG5ldyB0ZXN0IGNhc2UuPC9wPlxuICAgICAgICAgICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cImZpbGxlZFwiIChjbGlja2VkKT1cInRvZ2dsZUZpbHRlcigpXCI+U2hvdyBGaWx0ZXJzPC9jcWEtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9hcHAtZHluYW1pYy10YWJsZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RvcnlFbXB0eVRwbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcC02IGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICA8Y3FhLWVtcHR5LXN0YXRlXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJlZmZlY3RpdmVJc0VtcHR5U3RhdGVcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJlZmZlY3RpdmVFbXB0eVN0YXRlQ29uZmlnLnRpdGxlXCJcbiAgICAgICAgICAgICAgICBbZGVzY3JpcHRpb25dPVwiZWZmZWN0aXZlRW1wdHlTdGF0ZUNvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgW2ltYWdlVXJsXT1cImVmZmVjdGl2ZUVtcHR5U3RhdGVDb25maWcuaW1hZ2VVcmxcIlxuICAgICAgICAgICAgICAgIFthY3Rpb25zXT1cImVmZmVjdGl2ZUVtcHR5U3RhdGVDb25maWcuYWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uRW1wdHlBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9jcWEtZW1wdHktc3RhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8Y3FhLXBhZ2luYXRpb25cbiAgICAgICAgICBbdG90YWxFbGVtZW50c109XCJzZXJ2ZXJTaWRlUGFnaW5hdGlvbiA/IHRvdGFsRWxlbWVudHMgOiBmaWx0ZXJlZFJvd3MubGVuZ3RoXCJcbiAgICAgICAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgICAgW3BhZ2VTaXplTWVudURpcmVjdGlvbl09XCJwYWdlU2l6ZU1lbnVEaXJlY3Rpb25cIlxuICAgICAgICAgIFtwYWdlSXRlbUNvdW50XT1cInBhZ2VkUm93cy5sZW5ndGhcIlxuICAgICAgICAgIChwYWdpbmF0ZSk9XCJvblBhZ2luYXRlKCRldmVudClcIlxuICAgICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvY3FhLXBhZ2luYXRpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmV1c2VkIGJ1bGsgYWN0aW9uIHRvb2xiYXIgLS0+XG4gICAgPGRpdiAqbmdJZj1cImFueVJvd1NlbGVjdGVkICYmIG1vZHVsYXJDb25maWcuYWxsb3dCdWxrU2VsZWN0aW9uICYmICFpc1Jlb3JkZXJpbmdcIiBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtYm90dG9tLVsxOC43NXB4XSBjcWEtbGVmdC1bNTAlXSBjcWEtdHJhbnNsYXRlLXgtWy01MCVdIGNxYS13LWZ1bGwgbGc6Y3FhLW1heC13LVs2OCVdIGNxYS1zbTptYXgtdy1bNzUlXSBjcWEtbWF4LXctWzkwJV0gY3FhLXotWzFdXCI+XG4gICAgICA8Y3FhLXRhYmxlLWFjdGlvbi10b29sYmFyXG4gICAgICAgIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkSXRlbXMgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJdGVtcyA6IGN1cnJlbnRTZWxlY3RlZEl0ZW1zXCJcbiAgICAgICAgW2FjdGlvbnNdPVwiZWZmZWN0aXZlQnVsa0FjdGlvbnNcIlxuICAgICAgICBbc2hvd1NlbGVjdEFsbF09XCJzaG93U2VsZWN0QWxsSW5Ub29sYmFyXCJcbiAgICAgICAgW2FsbFNlbGVjdGVkXT1cImFsbFNlbGVjdGVkSW5Ub29sYmFyXCJcbiAgICAgICAgW3Nob3dEaXNtaXNzXT1cInNob3dEaXNtaXNzSW5Ub29sYmFyXCJcbiAgICAgICAgKGFjdGlvbkNsaWNrKT1cIm9uQnVsa0FjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdEFsbENoYW5nZSk9XCJvbkJ1bGtTZWxlY3RBbGwoJGV2ZW50KVwiXG4gICAgICAgIChkaXNtaXNzKT1cIm9uQnVsa0Rpc21pc3MoKVwiXG4gICAgICA+PC9jcWEtdGFibGUtYWN0aW9uLXRvb2xiYXI+XG4gICAgPC9kaXY+XG5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
1477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxhci10YWJsZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RlbXBsYXRlcy9tb2R1bGFyLXRhYmxlLXRlbXBsYXRlL21vZHVsYXItdGFibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvbW9kdWxhci10YWJsZS10ZW1wbGF0ZS9tb2R1bGFyLXRhYmxlLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBS1osdUJBQXVCLEVBR3ZCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFCLHNCQUFzQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFLbEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFaEYsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsc0JBQXNCLEdBaUJ2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTdkYsTUFBTSxPQUFPLDZCQUE2QjtJQXFVeEMsWUFBb0IsR0FBc0IsRUFBVSxhQUE0QjtRQUE1RCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBcFVoRixvQkFBb0I7UUFDWCxzQkFBaUIsR0FBVyxtQkFBbUIsQ0FBQztRQUNoRCxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixjQUFT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QU07Z0JBTUUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRU8sYUFBYTtzQkFBekIsS0FBSztnQkFTSSxZQUFZO3NCQUFyQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBU0csV0FBVztzQkFBcEIsTUFBTTtnQkFrQkcsYUFBYTtzQkFBdEIsTUFBTTtnQkFRRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBUUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQU9HLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQU1HLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFNRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0cseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUM0QixzQkFBc0I7c0JBQXhELFNBQVM7dUJBQUMsc0JBQXNCO2dCQTJCcEIsZ0JBQWdCO3NCQUE1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljRmlsdGVySXRlbSwgRHluYW1pY0ZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ZpbHRlcnMvZHluYW1pYy1maWx0ZXIvZHluYW1pYy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbHVtbi12aXNpYmlsaXR5L2NvbHVtbi12aXNpYmlsaXR5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUFjdGlvbiB9IGZyb20gJy4uLy4uL3RhYmxlLWFjdGlvbi10b29sYmFyL3RhYmxlLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29uZmlnIH0gZnJvbSAnLi4vLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFTVBUWV9TVEFURV9JTUFHRVMgfSBmcm9tICcuLi8uLi9hc3NldHMvaW1hZ2VzL2ltYWdlLWFzc2V0cy5jb25zdGFudHMnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQge1xuICBERUZBVUxUX01PRFVMQVJfQ09ORklHLFxuICBERUZBVUxUX01PRFVMQVJfTEFCRUxTLFxuICBERUZBVUxUX1JFT1JERVJfTEFCRUxTLFxuICBGb2xkZXJDcmVhdGVkUGF5bG9hZCxcbiAgRm9sZGVyRGVsZXRlUmVxdWVzdGVkUGF5bG9hZCxcbiAgRm9sZGVyRGVsZXRlU3RyYXRlZ3ksXG4gIEZvbGRlckRlbGV0ZWRQYXlsb2FkLFxuICBGb2xkZXJJZEFjY2Vzc29yLFxuICBGb2xkZXJOb2RlLFxuICBGb2xkZXJSZW5hbWVkUGF5bG9hZCxcbiAgRm9sZGVyTW92ZVJlcXVlc3RlZFBheWxvYWQsXG4gIEZvbGRlck1vdmVkUGF5bG9hZCxcbiAgRm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkUGF5bG9hZCxcbiAgTW9kdWxhckNvbmZpZyxcbiAgTW9kdWxhckxhYmVscyxcbiAgUmVvcmRlckxhYmVscyxcbiAgUmVvcmRlclNhdmVQYXlsb2FkLFxuICBUZXN0c01vdmVkUGF5bG9hZCxcbiAgQnVsa0FjdGlvbkludm9rZWRQYXlsb2FkLFxufSBmcm9tICcuL21vZHVsYXItdGFibGUtdGVtcGxhdGUubW9kZWxzJztcbmltcG9ydCB7IE1vdmVUb0ZvbGRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9ncy9tb3ZlLXRvLWZvbGRlci1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE5ld0ZvbGRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9ncy9uZXctZm9sZGVyLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVsZXRlRm9sZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2dzL2RlbGV0ZS1mb2xkZXItZGlhbG9nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1tb2R1bGFyLXRhYmxlLXRlbXBsYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZHVsYXItdGFibGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1vZHVsYXJUYWJsZVRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8vIFNlYXJjaCBiYXIgaW5wdXRzXG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VhcmNoIGNvbXBvbmVudHMnO1xuICBASW5wdXQoKSBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNob3dDbGVhcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCYXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93RXhwb3J0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzRXhwb3J0aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIFNlYXJjaCBiYXIgb3V0cHV0c1xuICBAT3V0cHV0KCkgb25TZWFyY2hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9uRXhwb3J0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdHlwZTogJ2xvY2FsJyB8ICdlbWFpbCc7IGVtYWlscz86IHN0cmluZ1tdOyBmcmFtZXdvcms/OiAnV0VCRFJJVkVSX0lPJyB8ICdTRUxFTklVTV9KQVZBJzsgc2VsZWN0ZWRJdGVtczogYW55W10gfSB8IHZvaWQ+KCk7XG4gIC8vIEZpbHRlciBvdXRwdXRzXG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uUmVzZXRGaWx0ZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uQ2xlYXJBbGwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVDaGlwID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLy8gRmlsdGVyIGlucHV0c1xuICBASW5wdXQoKSBmaWx0ZXJDb25maWc6IER5bmFtaWNGaWx0ZXJJdGVtW10gPSBbXTtcbiAgQElucHV0KCkgZmlsdGVyTW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgQElucHV0KCkgc2hvd0ZpbHRlclBhbmVsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIE90aGVyIGJ1dHRvbnMgaW5wdXQgKGFycmF5IG9mIGJ1dHRvbiB0ZW1wbGF0ZXMvY29tcG9uZW50cylcbiAgQElucHV0KCkgb3RoZXJCdXR0b25zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcbiAgXG4gIC8vIE90aGVyIGRyb3Bkb3duIGJ1dHRvbnMgaW5wdXQgKGFycmF5IG9mIGRyb3Bkb3duIGJ1dHRvbiB0ZW1wbGF0ZXMvY29tcG9uZW50cylcbiAgQElucHV0KCkgb3RoZXJEcm9wRG93bkJ1dHRvbnM6IFRlbXBsYXRlUmVmPGFueT5bXSA9IFtdO1xuICBcbiAgLy8gT3RoZXIgc2VsZWN0IGRyb3Bkb3duIGJ1dHRvbnMgaW5wdXQgKGFycmF5IG9mIHNlbGVjdCBkcm9wZG93biBidXR0b24gdGVtcGxhdGVzL2NvbXBvbmVudHMpXG4gIEBJbnB1dCgpIG90aGVyU2VsZWN0RHJvcERvd25CdXR0b25zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcbiAgXG4gIC8vIExlZ2FjeSBzaW5nbGUgYnV0dG9uIGlucHV0cyAoZGVwcmVjYXRlZCwga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBvdGhlckJ1dHRvbnMgYXJyYXkgaW5zdGVhZCAqL1xuICBASW5wdXQoKSBvdGhlckJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnT3RoZXIgQnV0dG9uJztcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBvdGhlckJ1dHRvbnMgYXJyYXkgaW5zdGVhZCAqL1xuICBASW5wdXQoKSBvdGhlckJ1dHRvblZhcmlhbnQ6ICdmaWxsZWQnIHwgJ291dGxpbmVkJyB8ICd0ZXh0JyB8ICdlbGV2YXRlZCcgfCAndG9uYWwnIHwgJ2dyZXktc29saWQnID0gJ2ZpbGxlZCc7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Ugb3RoZXJCdXR0b25zIGFycmF5IGluc3RlYWQgKi9cbiAgQElucHV0KCkgc2hvd090aGVyQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgXG4gIC8vIEFjdGlvbiBtZW51IGJ1dHRvbiAodGhyZWUtZG90IG1lbnUgaW4gdGFibGUgcm93cylcbiAgQElucHV0KCkgc2hvd0FjdGlvbkJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU2V0dGluZ3MgYW5kIHJlZnJlc2ggYnV0dG9uc1xuICBASW5wdXQoKSBzaG93U2V0dGluZ3NCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93QXV0b1JlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFZpZXctbW9kZSB0b2dnbGUgKExpc3QgfCBNb2R1bGFyKS4gSGlkZGVuIGJ5IGRlZmF1bHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gIEBJbnB1dCgpIHNob3dWaWV3TW9kZVRvZ2dsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB2aWV3TW9kZTogJ2xpc3QnIHwgJ21vZHVsYXInID0gJ2xpc3QnO1xuICBASW5wdXQoKSB2aWV3TW9kZUxhYmVsczogeyBsaXN0OiBzdHJpbmc7IG1vZHVsYXI6IHN0cmluZyB9ID0geyBsaXN0OiAnTGlzdCcsIG1vZHVsYXI6ICdNb2R1bGFyJyB9O1xuICBAT3V0cHV0KCkgdmlld01vZGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPCdsaXN0JyB8ICdtb2R1bGFyJz4oKTtcblxuICBnZXQgdmlld01vZGVTZWdtZW50cygpOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IGljb24/OiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7IGxhYmVsOiB0aGlzLnZpZXdNb2RlTGFiZWxzLmxpc3QsIHZhbHVlOiAnbGlzdCcsIGljb246ICd2aWV3X2xpc3QnIH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnZpZXdNb2RlTGFiZWxzLm1vZHVsYXIsIHZhbHVlOiAnbW9kdWxhcicsIGljb246ICdmb2xkZXInIH0sXG4gICAgXTtcbiAgfVxuXG4gIG9uVmlld01vZGVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB2YWx1ZSA9PT0gJ21vZHVsYXInID8gJ21vZHVsYXInIDogJ2xpc3QnO1xuICAgIGlmIChuZXh0ICE9PSB0aGlzLnZpZXdNb2RlKSB7XG4gICAgICB0aGlzLnZpZXdNb2RlID0gbmV4dDtcbiAgICAgIHRoaXMudmlld01vZGVDaGFuZ2UuZW1pdChuZXh0KTtcbiAgICB9XG4gIH1cblxuICAvLyBEYXRhIGlucHV0XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG5cbiAgLy8gRW1wdHkgc3RhdGUgaW5wdXRzXG4gIEBJbnB1dCgpIGlzRW1wdHlTdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlbXB0eVN0YXRlQ29uZmlnOiBFbXB0eVN0YXRlQ29uZmlnID0ge1xuICAgIHRpdGxlOiAnTm8gRGF0YSBBdmFpbGFibGUgWWV0JyxcbiAgICBkZXNjcmlwdGlvbjogJ1J1biBvciB1cGxvYWQgeW91ciBmaXJzdCB0ZXN0IHRvIHNlZSB5b3VyIGFuYWx5dGljcyBhbmQgdHJlbmRzIGhlcmUuIFdhdGNoIHlvdXIgcXVhbGl0eSBtZXRyaWNzIGNvbWUgdG8gbGlmZSB3aXRoIHJlYWwtdGltZSBpbnNpZ2h0cy4nLFxuICAgIGltYWdlVXJsOiBFTVBUWV9TVEFURV9JTUFHRVMuREFTSEJPQVJELFxuICAgIGFjdGlvbnM6IFt7IGxhYmVsOiAnUnVuIFRlc3QgU3VpdGUnLCB2YXJpYW50OiAnZmlsbGVkJyB9XSxcbiAgfTtcblxuICAvLyBBY3Rpb24gYmFyIGlucHV0c1xuICBASW5wdXQoKSBhY3Rpb25zOiBUYWJsZUFjdGlvbltdID0gW1xuICAgIHsgXG4gICAgICBpZDogJ2RlbGV0ZScsIFxuICAgICAgbGFiZWw6ICdEZWxldGUnLCBcbiAgICAgIGljb246ICdkZWxldGUnLCBcbiAgICAgIHRvb2x0aXA6ICdEZWxldGUgc2VsZWN0ZWQnLFxuICAgICAgb25DbGljazogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ2VkaXQnLCBcbiAgICAgIGxhYmVsOiAnRWRpdCcsIFxuICAgICAgaWNvbjogJ2VkaXQnLCBcbiAgICAgIHRvb2x0aXA6ICdFZGl0IHNlbGVjdGVkJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdFZGl0IGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBcbiAgICAgIGlkOiAnYWRkLXRhZycsIFxuICAgICAgbGFiZWw6ICdBZGQgVGFnJywgXG4gICAgICBpY29uOiAnbG9jYWxfb2ZmZXInLCBcbiAgICAgIHRvb2x0aXA6ICdBZGQgdGFncycsXG4gICAgICBvbkNsaWNrOiAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQWRkIHRhZyBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ3JlbW92ZS10YWcnLCBcbiAgICAgIGxhYmVsOiAnUmVtb3ZlIFRhZycsIFxuICAgICAgaWNvbjogJ2xhYmVsX29mZicsIFxuICAgICAgdG9vbHRpcDogJ1JlbW92ZSB0YWdzJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmUgdGFnIGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gIF07XG5cbiAgLy8gQ2hpcHMgaW5wdXRzXG4gIEBJbnB1dCgpIGNoaXBzOiBBcnJheTx7IGtleT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgZnVsbFRleHQ/OiBzdHJpbmc7IGhhc01vcmU/OiBib29sZWFuIH0+ID0gW107XG4gIEBJbnB1dCgpIGZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBUYWJsZSBpbnB1dHNcbiAgQElucHV0KCkgY29sdW1uczogRHluYW1pY1RhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KCkgcm93U2VsZWN0YWJsZT86IChyb3c6IGFueSkgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBwYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDQwLCA2MCwgODBdO1xuICBASW5wdXQoKSBwYWdlU2l6ZU1lbnVEaXJlY3Rpb246ICdhdXRvJyB8ICd1cCcgfCAnZG93bicgPSAnYXV0byc7XG4gIC8vIFNlcnZlci1zaWRlIHBhZ2luYXRpb24gY29udHJvbHNcbiAgQElucHV0KCkgc2VydmVyU2lkZVBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdG90YWxFbGVtZW50czogbnVtYmVyID0gMDtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfT4oKTtcbiAgLyoqXG4gICAqIFdoZW4gZmFsc2UsIGhlYWRlciBzb3J0IGRvZXMgbm90IHJlb3JkZXIgcm93cyBsb2NhbGx5ICh1c2Ugd2l0aCBzZXJ2ZXJTaWRlUGFnaW5hdGlvbiArIHNvcnRDaGFuZ2UpLlxuICAgKiBEZWZhdWx0IHRydWUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVMb2NhbFNvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAT3V0cHV0KCkgc29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGZpZWxkSWQ6IHN0cmluZztcbiAgICBmaWVsZFZhbHVlPzogc3RyaW5nO1xuICAgIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCBudWxsO1xuICB9PigpO1xuICAvLyBMb2FkZXIgY29udHJvbHMgKHBhc3NlZCBkb3duIHRvIGR5bmFtaWMgdGFibGUpXG4gIEBJbnB1dCgpIGlzVGFibGVMb2FkaW5nPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNUYWJsZURhdGFMb2FkaW5nPzogYm9vbGVhbjtcbiAgLy8gQmFja3dhcmQtY29tcGF0aWJpbGl0eSBmbGFnOyBpZiBwcm92aWRlZCwgZHluYW1pYyB0YWJsZSB3aWxsIHVzZSBpdCB3aGVuIHNwZWNpZmljIGZsYWdzIGFyZSB1bmRlZmluZWRcblxuICAvLyBPcHRpb25hbCBnZXR0ZXIgZm9yIEpTT04gcGF0aCBwZXIgY2VsbC4gV2hlbiBwcm92aWRlZCwgZG91YmxlLWNsaWNraW5nIGEgY2VsbCBjb3BpZXMgdGhlIHBhdGguXG4gIEBJbnB1dCgpIGNlbGxKc29uUGF0aEdldHRlcj86IChyb3dJbmRleDogbnVtYmVyLCBjb2xJZDogc3RyaW5nLCByb3c6IGFueSkgPT4gc3RyaW5nO1xuXG4gIC8vIE9wdGlvbmFsIGhhbmRsZXIgY2FsbGVkIHdoZW4gYSBKU09OIHBhdGggaXMgY29waWVkIGZyb20gYSB0YWJsZSBjZWxsXG4gIEBJbnB1dCgpIG9uSnNvblBhdGhDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IHBhdGg6IHN0cmluZzsgc291cmNlOiBzdHJpbmcgfSkgPT4gdm9pZDtcblxuICAvLyBTZWxlY3RlZCBpdGVtcyAoZnVsbCBvYmplY3RzKSBmb3IgbWFpbnRhaW5pbmcgc2VsZWN0aW9uIGFjcm9zcyBwYWdpbmF0aW9uIChzZXJ2ZXItc2lkZSlcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCB0aGUgYWN0aW9uIHRvb2xiYXIgcmVuZGVycyB0aGUgXCJTZWxlY3QgYWxsXCIgYWZmb3JkYW5jZS4gRGVmYXVsdHMgdG8gZmFsc2VcbiAgICogZm9yIG5vdyDigJQgaG9zdCBvcHRzIGluLiBNYXRjaGVzIHRoZSBjdXJyZW50IHByb2R1Y3QgcmVxdWlyZW1lbnQgdG8gaGlkZSBTZWxlY3QgQWxsLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1NlbGVjdEFsbEluVG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCB0aGUgYWN0aW9uIHRvb2xiYXIgcmVuZGVycyB0aGUgZGlzbWlzcyAow5cpIGFmZm9yZGFuY2UuIERlZmF1bHRzIHRvIGZhbHNlXG4gICAqIGZvciBub3cg4oCUIGhvc3Qgb3B0cyBpbi4gTWF0Y2hlcyB0aGUgY3VycmVudCBwcm9kdWN0IHJlcXVpcmVtZW50IHRvIGhpZGUgQ2FuY2VsLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd0Rpc21pc3NJblRvb2xiYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIEJvdW5kIHRvIHRoZSB0b29sYmFyJ3MgXCJTZWxlY3QgYWxsXCIgY2hlY2tib3gg4oCUIGRyaXZlcyB0aGUgY2hlY2tlZCBzdGF0ZS4gKi9cbiAgQElucHV0KCkgYWxsU2VsZWN0ZWRJblRvb2xiYXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBJbnRlcm5hbCBzdGF0ZSBmb3IgY29sdW1uIHZpc2liaWxpdHlcbiAgcHJpdmF0ZSBfY29sdW1uVmlzaWJpbGl0eTogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyA9IHt9O1xuICBwcml2YXRlIF9jYWNoZWRWaXNpYmlsaXR5Q29sdW1uczogQXJyYXk8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+ID0gW107XG4gIGZpbHRlcmVkUm93czogYW55W10gPSBbXTtcbiAgcGFnZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRm9sZGVyIC8gbW9kdWxhciBpbnB1dHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBASW5wdXQoKSBmb2xkZXJzOiBGb2xkZXJOb2RlW10gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGV4cGFuZGVkRm9sZGVySWRzOiBudW1iZXJbXSA9IFtdO1xuICBASW5wdXQoKSB1bm9yZ2FuaXNlZENvdW50OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBmb2xkZXJJZEFjY2Vzc29yOiBGb2xkZXJJZEFjY2Vzc29yID0gKHJvdzogYW55KSA9PiByb3c/LmZvbGRlcklkID8/IG51bGw7XG4gIEBJbnB1dCgpIG1vZHVsYXJDb25maWc6IE1vZHVsYXJDb25maWcgPSB7IC4uLkRFRkFVTFRfTU9EVUxBUl9DT05GSUcgfTtcbiAgQElucHV0KCkgbW9kdWxhckxhYmVsczogTW9kdWxhckxhYmVscyA9IHsgLi4uREVGQVVMVF9NT0RVTEFSX0xBQkVMUyB9O1xuICBASW5wdXQoKSBidWxrQWN0aW9uczogVGFibGVBY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBzaWRlYmFyQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIHRoZSBsaWJyYXJ5IG9wZW5zIGl0cyBvd24gTW92ZSBkaWFsb2cgZm9yIGNvbnZlbmllbmNlXG4gICAqIGR1cmluZyB0ZXN0aW5nLiBIb3N0cyB0YWtpbmcgb3ZlciBBUEkgKyBVWCBzaG91bGQgc2V0IHRoaXMgdG8gYGZhbHNlYCBhbmRcbiAgICogbGlzdGVuIG9uIGBtb3ZlUmVxdWVzdGVkYCB0byByZW5kZXIgdGhlaXIgb3duLlxuICAgKi9cbiAgQElucHV0KCkgdXNlSW50ZXJuYWxEaWFsb2dzOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZvbGRlciAvIG1vZHVsYXIgb3V0cHV0c1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIEBPdXRwdXQoKSBmb2xkZXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGZvbGRlckV4cGFuc2lvblRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IG51bWJlcjsgZXhwYW5kZWQ6IGJvb2xlYW4gfT4oKTtcbiAgQE91dHB1dCgpIGZvbGRlckNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlckNyZWF0ZWRQYXlsb2FkPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBcIisgTmV3IGZvbGRlclwiOyBob3N0IHNob3VsZCBvcGVuIGEgY3JlYXRpb24gbW9kYWwuICovXG4gIEBPdXRwdXQoKSBmb2xkZXJDcmVhdGVSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGFyZW50SWQ6IG51bWJlciB8IG51bGwgfT4oKTtcbiAgQE91dHB1dCgpIGZvbGRlclJlbmFtZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlclJlbmFtZWRQYXlsb2FkPigpO1xuICAvKipcbiAgICogRmlyZXMgYWZ0ZXIgdGhlIHVzZXIgY29uZmlybXMgZm9sZGVyIGRlbGV0aW9uIHZpYSB0aGUgaW50ZXJuYWwgZGlhbG9nIChvclxuICAgKiBpbW1lZGlhdGVseSwgd2hlbiBgdXNlSW50ZXJuYWxEaWFsb2dzYCBpcyBmYWxzZSBhbmQgdGhlIGhvc3QgZHJpdmVzIHRoZSBVWCkuXG4gICAqIFBheWxvYWQgbm93IGluY2x1ZGVzIHRoZSB1c2VyJ3MgY2hvc2VuIGBzdHJhdGVneWAgZm9yIHdoYXQgaGFwcGVucyB0byB0aGVcbiAgICogZm9sZGVyJ3MgdGVzdCBjYXNlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2xkZXJEZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2xkZXJEZWxldGVkUGF5bG9hZD4oKTtcbiAgQE91dHB1dCgpIHRlc3RzTW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRlc3RzTW92ZWRQYXlsb2FkPigpO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBCdWxrIGFjdGlvbiB0b29sYmFyIHN1cmZhY2Ug4oCUIG5hbWluZyBtaXJyb3JzIGNxYS10YWJsZS10ZW1wbGF0ZSBzbyBjb25zdW1lcnNcbiAgLy8gZ2V0IHRoZSBzYW1lIGV2ZW50cyBmcm9tIGVpdGhlciBjb21wb25lbnQgKHBsdXMgdGhlIGZvbGRlciBldmVudHMgYmVsb3cpLlxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogRmlyZXMgb24gcmF3IHRvb2xiYXIgYWN0aW9uIGNsaWNrIOKAlCAqYmVmb3JlKiBhbnkgaW50ZXJuYWwgZGlhbG9nIG9wZW5zLiAqL1xuICBAT3V0cHV0KCkgYnVsa0FjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBzdHJpbmc7IHNlbGVjdGVkOiBhbnlbXSB9PigpO1xuICAvKiogRmlyZXMgd2hlbiB0aGUgdG9vbGJhcidzIFwiU2VsZWN0IGFsbFwiIGlzIHRvZ2dsZWQuICovXG4gIEBPdXRwdXQoKSBidWxrU2VsZWN0QWxsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAvKiogRmlyZXMgd2hlbiB0aGUgdG9vbGJhcidzIGRpc21pc3MgKMOXKSBpcyBjbGlja2VkLiAqL1xuICBAT3V0cHV0KCkgYnVsa0Rpc21pc3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzICphZnRlciogdGhlIGxpYnJhcnktaW50ZXJuYWwgbW92ZS10by1mb2xkZXIgZGlhbG9nIHJlc29sdmVzIHdpdGggYVxuICAgKiB1c2VyIGNvbmZpcm1hdGlvbiwgT1IgaW1tZWRpYXRlbHkgZm9yIG5vbi1kaWFsb2cgYnVsayBhY3Rpb25zIHN1cHBsaWVkIGJ5XG4gICAqIHRoZSBob3N0LiBIb3N0cyB3aXRoIHRoZWlyIG93biBVWCBzaG91bGQgbGlzdGVuIG9uIGBidWxrQWN0aW9uQ2xpY2tgICtcbiAgICogYG1vdmVSZXF1ZXN0ZWRgIGFuZCB0cmVhdCB0aGlzIGFzIHRoZSBcImNvbmZpcm1lZFwiIHNpZ25hbC5cbiAgICovXG4gIEBPdXRwdXQoKSBidWxrQWN0aW9uSW52b2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QnVsa0FjdGlvbkludm9rZWRQYXlsb2FkPigpO1xuXG4gIEBPdXRwdXQoKSBzaWRlYmFyQ29sbGFwc2VkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUm93LXJlb3JkZXIgc3VyZmFjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKiBXaGVuIHRydWUsIHJlbmRlcnMgYSBcIlJlb3JkZXJcIiBidXR0b24gaW4gdGhlIHRvb2xiYXIuIEhvc3QtZHJpdmVuLiAqL1xuICBASW5wdXQoKSBzaG93UmVvcmRlckJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogSG9zdCBmbGlwcyB0aGlzIHRydWUgd2hpbGUgaXRzIGJ1bGstdXBkYXRlIEFQSSBjYWxsIGlzIGluLWZsaWdodC4gVGhlXG4gICAqIGNvbXBvbmVudCBrZWVwcyB0aGUgcmVvcmRlciBVSSBwaW5uZWQgKFwiU2F2aW5nLi4uXCIpIHdoaWxlIHRydWUgYW5kIGV4aXRzXG4gICAqIHJlb3JkZXIgbW9kZSB3aGVuIGl0IGZsaXBzIGJhY2sgdG8gZmFsc2UgKHRoZSBcImZ1dHVyZSBBUEkgY2FsbFwiIGhvb2spLlxuICAgKi9cbiAgQElucHV0KCkgcmVvcmRlclNhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogUGFydGlhbCBvdmVycmlkZSBmb3IgdGhlIGRlZmF1bHQgcmVvcmRlciBsYWJlbHMgKFwiUmVvcmRlclwiLCBcIkRvbmVcIiwgZXRjLikuICovXG4gIEBJbnB1dCgpIHNldCByZW9yZGVyTGFiZWxzKHBhcnRpYWw6IFBhcnRpYWw8UmVvcmRlckxhYmVscz4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yZW9yZGVyTGFiZWxzID0geyAuLi5ERUZBVUxUX1JFT1JERVJfTEFCRUxTLCAuLi4ocGFydGlhbCB8fCB7fSkgfTtcbiAgfVxuICBnZXQgcmVvcmRlckxhYmVscygpOiBSZW9yZGVyTGFiZWxzIHtcbiAgICByZXR1cm4gdGhpcy5fcmVvcmRlckxhYmVscztcbiAgfVxuICBwcml2YXRlIF9yZW9yZGVyTGFiZWxzOiBSZW9yZGVyTGFiZWxzID0geyAuLi5ERUZBVUxUX1JFT1JERVJfTEFCRUxTIH07XG5cbiAgLyoqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiUmVvcmRlclwiIGFuZCB0aGUgY29tcG9uZW50IGVudGVycyByZW9yZGVyIG1vZGUuICovXG4gIEBPdXRwdXQoKSByZW9yZGVyU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBcIkNhbmNlbFwiIOKAlCB0aGUgb3JpZ2luYWwgb3JkZXIgaXMgYWxyZWFkeSByZXN0b3JlZC4gKi9cbiAgQE91dHB1dCgpIHJlb3JkZXJDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBcIkRvbmVcIi4gSG9zdCBzaG91bGQgdGFrZSBgb3JkZXJlZEl0ZW1zYCwgY2FsbCBpdHNcbiAgICogYnVsay11cGRhdGUgQVBJLCByZWZyZXNoIGBbZGF0YV1gLCBhbmQgZmxpcCBgcmVvcmRlclNhdmluZ2AgYmFjayB0byBgZmFsc2VgIOKAlFxuICAgKiB0aGUgY29tcG9uZW50IHdpbGwgdGhlbiBleGl0IHJlb3JkZXIgbW9kZS5cbiAgICpcbiAgICogTm90ZTogZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24sIGBvcmRlcmVkSXRlbXNgIGlzIHRoZSAqY3VycmVudCBwYWdlIHNsaWNlKixcbiAgICogbm90IHRoZSBmdWxsIGRhdGFzZXQg4oCUIHNhbWUgYXMgdGhlIGluLW1lbW9yeSB2aWV3IHRoZSB1c2VyIHdhcyBkcmFnZ2luZy5cbiAgICovXG4gIEBPdXRwdXQoKSByZW9yZGVyU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmVvcmRlclNhdmVQYXlsb2FkPigpO1xuXG4gIC8qKiBJbnRlcm5hbCDigJQgdHJ1ZSB3aGlsZSB0aGUgdXNlciBpcyBpbiByZW9yZGVyIG1vZGUuICovXG4gIGlzUmVvcmRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogU25hcHNob3Qgb2YgYHBhZ2VkUm93c2AgdGFrZW4gb24gZW50ZXI7IHVzZWQgdG8gcmV2ZXJ0IG9uIGNhbmNlbC4gKi9cbiAgcHJpdmF0ZSByZW9yZGVyU25hcHNob3Q6IGFueVtdIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBEcmFmdCBvZiB0aGUgcmVvcmRlcmVkIHJvd3MgKGN1cnJlbnQgd29ya2luZyBzdGF0ZSkuICovXG4gIHByaXZhdGUgcmVvcmRlckRyYWZ0OiBhbnlbXSB8IG51bGwgPSBudWxsO1xuICAvKiogQXV0by1yZWZyZXNoIGludGVydmFsIGNhcHR1cmVkIG9uIGVudGVyLCBzbyB3ZSBjYW4gcmVzdG9yZSBvbiBjYW5jZWwvZG9uZS4gKi9cbiAgcHJpdmF0ZSByZW9yZGVyU2F2ZWRBdXRvUmVmcmVzaDogbnVtYmVyID0gMDtcbiAgLyoqIFRydWUgYWZ0ZXIgRG9uZSBoYXMgYmVlbiBjbGlja2VkLCBhd2FpdGluZyB0aGUgaG9zdCdzIGByZW9yZGVyU2F2aW5nYCDihpIgZmFsc2UgZmxpcC4gKi9cbiAgcHJpdmF0ZSByZW9yZGVyQXdhaXRpbmdTYXZlRmxpcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgXCJNb3ZlIHRvIGZvbGRlclwiIGJ1bGsgYWN0aW9uIOKAlCAqYmVmb3JlKiB0aGVcbiAgICogaW50ZXJuYWwgZGlhbG9nIG9wZW5zLiBIb3N0cyB0aGF0IHdhbnQgdG8gcmVuZGVyIHRoZWlyIG93biBtb2RhbCBzaG91bGRcbiAgICogc2V0IGB1c2VJbnRlcm5hbERpYWxvZ3MgPSBmYWxzZWAgYW5kIGxpc3RlbiBoZXJlLlxuICAgKi9cbiAgQE91dHB1dCgpIG1vdmVSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICB0ZXN0SWRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+O1xuICAgIHNlbGVjdGVkOiBhbnlbXTtcbiAgICBjdXJyZW50Rm9sZGVySWQ6IG51bWJlciB8IG51bGw7XG4gICAgZm9sZGVyczogRm9sZGVyTm9kZVtdO1xuICB9PigpO1xuXG4gIC8qKiBGaXJlcyB3aGVuZXZlciB0aGUgY29tcG9uZW50J3MgYHNlbGVjdGVkSXRlbXNgIGNoYW5nZXMgZnJvbSB3aXRoaW4gKFNlbGVjdCBBbGwgLyBEaXNtaXNzKS4gKi9cbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBhIGZvbGRlcidzIGRlbGV0ZSBhZmZvcmRhbmNlIOKAlCAqYmVmb3JlKiB0aGVcbiAgICogaW50ZXJuYWwgY29uZmlybWF0aW9uIGRpYWxvZyBvcGVucy4gSG9zdHMgb3duaW5nIHRoZSBVWCBsaXN0ZW4gaGVyZS5cbiAgICogUGF5bG9hZCBpbmNsdWRlcyBgdGVzdENvdW50YCArIGBoYXNQYXJlbnRgIHNvIGhvc3RzIGNhbiByZW5kZXIgdGhlIHJpZ2h0XG4gICAqIG9wdGlvbnMgaW4gdGhlaXIgb3duIG1vZGFsLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvbGRlckRlbGV0ZVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9sZGVyRGVsZXRlUmVxdWVzdGVkUGF5bG9hZD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBwaWNrcyBcIk1vdmUgZm9sZGVyXCIgZnJvbSBhIGZvbGRlciByb3cncyBjb250ZXh0IG1lbnUg4oCUXG4gICAqICpiZWZvcmUqIGFueSBkaWFsb2cgb3BlbnMuIEhvc3RzIG93bmluZyB0aGUgVVggbGlzdGVuIGhlcmUgd2l0aFxuICAgKiBgdXNlSW50ZXJuYWxEaWFsb2dzID0gZmFsc2VgIGFuZCBvcGVuIHRoZWlyIG93biBmb2xkZXIgcGlja2VyLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvbGRlck1vdmVSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlck1vdmVSZXF1ZXN0ZWRQYXlsb2FkPigpO1xuICAvKipcbiAgICogRmlyZXMgYWZ0ZXIgdGhlIHVzZXIgY29uZmlybXMgYSBmb2xkZXIgbW92ZSB2aWEgdGhlIGludGVybmFsIHBpY2tlclxuICAgKiAob3IgaW1tZWRpYXRlbHkgd2hlbiBgdXNlSW50ZXJuYWxEaWFsb2dzID0gZmFsc2VgIGFuZCB0aGUgaG9zdCBkcml2ZXMgaXQpLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvbGRlck1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2xkZXJNb3ZlZFBheWxvYWQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIHBpY2tzIFwiRHVwbGljYXRlIGZvbGRlclwiIGZyb20gYSBmb2xkZXIgcm93J3MgY29udGV4dCBtZW51LlxuICAgKiBUaGUgbGlicmFyeSBkb2Vzbid0IG93biBwZXJzaXN0ZW5jZSwgc28gdGhlIGhvc3QgaXMgZXhwZWN0ZWQgdG8gY2xvbmUgdGhlXG4gICAqIGZvbGRlcidzIHN1YnRyZWUgc2VydmVyLXNpZGUgYW5kICpyZWZlcmVuY2UqIChub3QgY29weSkgdGhlIHRlc3QgY2FzZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWRQYXlsb2FkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7fVxuICBwcml2YXRlIHBlbmRpbmdGaWx0ZXJzOiBhbnk7XG4gIHByaXZhdGUgYXBwbGllZEZpbHRlcnM6IGFueTtcbiAgcHJpdmF0ZSBhdXRvUmVmcmVzaFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuICBAT3V0cHV0KCkgb25SZWxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkF1dG9SZWZyZXNoQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5WaXNpYmlsaXR5Q29uZmlnPigpO1xuICBAT3V0cHV0KCkgYXV0b1JlZnJlc2hJbnRlcnZhbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAVmlld0NoaWxkKER5bmFtaWNGaWx0ZXJDb21wb25lbnQpIGR5bmFtaWNGaWx0ZXJDb21wb25lbnQ/OiBEeW5hbWljRmlsdGVyQ29tcG9uZW50O1xuXG4gIC8vIERlcml2ZWQgY29sdW1ucyB3aXRoIHZpc2liaWxpdHkgYXBwbGllZC5cbiAgY29tcHV0ZWRDb2x1bW5zOiBEeW5hbWljVGFibGVDb2x1bW5bXSA9IFtdO1xuICAvLyBBdXRvLWdlbmVyYXRlZCB2aXNpYmlsaXR5IGNvbHVtbnMgZnJvbSBjb2x1bW5zIGlucHV0XG4gIHZpc2liaWxpdHlDb2x1bW5zOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4gPSBbXTtcblxuICBwcml2YXRlIHVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCB2aXNpYmlsaXR5ID0gdGhpcy5fY29sdW1uVmlzaWJpbGl0eSB8fCB7fTtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNvbHVtbnMgfHwgW107XG4gICAgdGhpcy5jb21wdXRlZENvbHVtbnMgPSBzb3VyY2UubWFwKGNvbCA9PiB7XG4gICAgICBpZiAoWydjaGVja2JveCcsICdhY3Rpb25zJ10uaW5jbHVkZXMoY29sLmZpZWxkSWQpKSB7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9XG4gICAgICBjb25zdCBzaG93ID0gdmlzaWJpbGl0eVtjb2wuZmllbGRJZF07XG4gICAgICByZXR1cm4geyAuLi5jb2wsIGlzU2hvdzogc2hvdyAhPT0gZmFsc2UgfTtcbiAgICB9KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnMgPSB0aGlzLm1hcFZpc2liaWxpdHlDb2x1bW5zKCk7XG4gICAgdGhpcy52aXNpYmlsaXR5Q29sdW1ucyA9IHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gQ29udHJvbGxlZCBjb2x1bW4gdmlzaWJpbGl0eTogcGFyZW50IGNhbiBzZWVkIGFuZCBwdXNoIHVwZGF0ZXMuXG4gIEBJbnB1dCgpIHNldCBjb2x1bW5WaXNpYmlsaXR5KGNmZzogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChjZmcpIHtcbiAgICAgIHRoaXMuX2NvbHVtblZpc2liaWxpdHkgPSB7IC4uLmNmZyB9O1xuICAgICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuICBnZXQgY29sdW1uVmlzaWJpbGl0eSgpOiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uVmlzaWJpbGl0eTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2lzRW1wdHlTdGF0ZSddKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3NlbGVjdGVkRm9sZGVySWQnXSAmJiAhY2hhbmdlc1snc2VsZWN0ZWRGb2xkZXJJZCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAvLyBQZXIgdGhlIGFwcHJvdmVkIHBsYW46IGNsZWFyIHNlbGVjdGlvbiBhbmQgcmVzZXQgcGFnaW5hdGlvbiBvbiBmb2xkZXIgY2hhbmdlLlxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd2aWV3TW9kZSddICYmICFjaGFuZ2VzWyd2aWV3TW9kZSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAvLyBTd2l0Y2hpbmcgYmV0d2VlbiBsaXN0IGFuZCBtb2R1bGFyIGNoYW5nZXMgd2hldGhlciB0aGUgZm9sZGVyIGZpbHRlciBhcHBsaWVzLlxuICAgICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRSb3dzKCk7XG4gICAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWRJdGVtcyddIHx8IGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3Jlb3JkZXJTYXZpbmcnXSAmJiAhY2hhbmdlc1sncmVvcmRlclNhdmluZyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCBub3dTYXZpbmcgPSAhIWNoYW5nZXNbJ3Jlb3JkZXJTYXZpbmcnXS5jdXJyZW50VmFsdWU7XG4gICAgICAvLyBIb3N0IGZpbmlzaGVkIGl0cyBidWxrLXVwZGF0ZSBjYWxsIOKAlCBleGl0IHJlb3JkZXIgbW9kZS5cbiAgICAgIGlmICghbm93U2F2aW5nICYmIHRoaXMucmVvcmRlckF3YWl0aW5nU2F2ZUZsaXApIHtcbiAgICAgICAgdGhpcy5leGl0UmVvcmRlck1vZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDb21wb25lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eVN0YXRlKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFtdO1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbiBzZXJ2ZXItc2lkZSBtb2RlLCBhc3N1bWUgaW5jb21pbmcgZGF0YSBpcyBhbHJlYWR5IGEgcGFnZSBzbGljZVxuICAgIGlmICh0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbLi4udGhpcy5maWx0ZXJlZFJvd3NdO1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtblZpc2liaWxpdHkoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgIHRoaXMucmVzdG9yZVNlbGVjdGlvblN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYGZpbHRlcmVkUm93c2AgZnJvbSBgZGF0YWAgYnkgYXBwbHlpbmcgKGEpIHRoZSBmaWVsZCBmaWx0ZXJzIChzdGF0dXMvcHJpb3JpdHkvZXRjLilcbiAgICogYW5kIChiKSB0aGUgZm9sZGVyIGZpbHRlciBkZXJpdmVkIGZyb20gYHNlbGVjdGVkRm9sZGVySWRgICsgYGZvbGRlcklkQWNjZXNzb3JgLlxuICAgKi9cbiAgcHJpdmF0ZSByZWJ1aWxkRmlsdGVyZWRSb3dzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVmZmVjdGl2ZSA9IHRoaXMuYXBwbGllZEZpbHRlcnMgPz8ge307XG4gICAgdGhpcy5maWx0ZXJlZFJvd3MgPSB0aGlzLmRhdGEuZmlsdGVyKHIgPT4gdGhpcy5wYXNzRmlsdGVycyhlZmZlY3RpdmUsIHIpICYmIHRoaXMucGFzc0ZvbGRlcihyKSk7XG4gIH1cblxuICBwcml2YXRlIHBhc3NGb2xkZXIocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBMaXN0IHZpZXcgaWdub3JlcyBmb2xkZXIgZmlsdGVyaW5nIGVudGlyZWx5IOKAlCBiZWhhdmVzIGxpa2UgdGhlIHRyYWRpdGlvbmFsIGZsYXQgdGFibGUuXG4gICAgaWYgKCF0aGlzLmlzTW9kdWxhclZpZXcpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGZvbGRlcklkID0gdGhpcy5mb2xkZXJJZEFjY2Vzc29yID8gdGhpcy5mb2xkZXJJZEFjY2Vzc29yKHJvdykgOiByb3c/LmZvbGRlcklkO1xuICAgIC8vIFJvb3Qgdmlldzogc2hvdyBvbmx5IHJvd3MgdGhhdCBkbyBub3QgYmVsb25nIHRvIGFueSBmb2xkZXIgKHRoZSBcIlVub3JnYW5pc2VkXCIgYnVja2V0KS5cbiAgICAvLyBGb2xkZXIgdGlsZXMgYWJvdmUgdGhlIHRhYmxlIGFyZSB0aGUgZW50cnkgcG9pbnQgdG8gcGVyLWZvbGRlciBjb250ZW50cy5cbiAgICBpZiAodGhpcy5zZWxlY3RlZEZvbGRlcklkID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb2xkZXJJZCA9PSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZm9sZGVySWQgIT0gbnVsbCAmJiBTdHJpbmcoZm9sZGVySWQpID09PSBTdHJpbmcodGhpcy5zZWxlY3RlZEZvbGRlcklkKTtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmVuZGVyIHRoZSBtb2R1bGFyIChmb2xkZXItYXdhcmUpIFVJLiAqL1xuICBnZXQgaXNNb2R1bGFyVmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aWV3TW9kZSA9PT0gJ21vZHVsYXInO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZWxlY3RlZCBJRHMgZnJvbSBzZWxlY3RlZEl0ZW1zIChvYmplY3RzKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZElkcygpOiBTZXQ8bnVtYmVyPiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodGhpcy5zZWxlY3RlZEl0ZW1zLm1hcChpdGVtID0+IE51bWJlcihpdGVtLmlkKSkuZmlsdGVyKGlkID0+ICFpc05hTihpZCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzdG9yZVNlbGVjdGlvblN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzU2V0ID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xuXG4gICAgaWYgKHNlbGVjdGVkSWRzU2V0LnNpemUgPT09IDApIHtcbiAgICAgIC8vIElmIG5vIHNlbGVjdGVkIElEcywgY2xlYXIgYWxsIHNlbGVjdGlvbiBzdGF0ZXNcbiAgICAgIGlmICh0aGlzLnBhZ2VkUm93cykge1xuICAgICAgICB0aGlzLnBhZ2VkUm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgKHJvdyBhcyBhbnkpLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgc2VsZWN0aW9uIHN0YXRlIGJhc2VkIG9uIHNlbGVjdGVkSXRlbXNcbiAgICBpZiAodGhpcy5wYWdlZFJvd3MpIHtcbiAgICAgIHRoaXMucGFnZWRSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChyb3cgYXMgYW55KS5pc1NlbGVjdGVkID0gc2VsZWN0ZWRJZHNTZXQuaGFzKE51bWJlcihyb3cuaWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWxzbyB1cGRhdGUgZmlsdGVyZWRSb3dzIGZvciBjb25zaXN0ZW5jeVxuICAgIGlmICh0aGlzLmZpbHRlcmVkUm93cykge1xuICAgICAgdGhpcy5maWx0ZXJlZFJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAocm93ICYmIHJvdy5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgKHJvdyBhcyBhbnkpLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZElkc1NldC5oYXMoTnVtYmVyKHJvdy5pZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbHVtblZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgLy8gQ2FjaGUgdmlzaWJpbGl0eSBjb2x1bW5zIHRvIGF2b2lkIGNyZWF0aW5nIG5ldyBhcnJheXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvblxuICAgIHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zID0gdGhpcy5tYXBWaXNpYmlsaXR5Q29sdW1ucygpO1xuICAgIC8vIFNlZWQgdmlzaWJpbGl0eSBzdGF0ZSBmcm9tIGVhY2ggY29sdW1uJ3MgaXNTaG93IChkZWZhdWx0IHRvIHRydWUpIHNvIGNvbnN1bWVyc1xuICAgIC8vIGNhbiBwcmUtYXBwbHkgcGVyc2lzdGVkIHByZWZlcmVuY2VzIHZpYSBjb2x1bW5zW2ldLmlzU2hvdy5cbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNvbHVtbnMgfHwgW107XG4gICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnMpIHtcbiAgICAgIGlmICh0aGlzLl9jb2x1bW5WaXNpYmlsaXR5W2NvbC5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzcmNDb2wgPSBzb3VyY2UuZmluZChjID0+IGMuZmllbGRJZCA9PT0gY29sLmlkKTtcbiAgICAgICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eVtjb2wuaWRdID0gc3JjQ29sICYmIHNyY0NvbC5pc1Nob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBhbnlSb3dTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNlbGVjdGVkIGl0ZW1zIChlaXRoZXIgb24gY3VycmVudCBwYWdlIG9yIGFjcm9zcyBhbGwgcGFnZXMgdmlhIHNlbGVjdGVkSXRlbXMpXG4gICAgY29uc3QgaGFzU2VsZWN0ZWRPblBhZ2UgPSAhISh0aGlzLnBhZ2VkUm93cyAmJiB0aGlzLnBhZ2VkUm93cy5zb21lKHIgPT4gISEociBhcyBhbnkpLmlzU2VsZWN0ZWQpKTtcbiAgICBjb25zdCBzZWxlY3RlZElkc1NldCA9IHRoaXMuZ2V0U2VsZWN0ZWRJZHMoKTtcbiAgICBjb25zdCBoYXNTZWxlY3RlZEFjcm9zc1BhZ2VzID0gc2VsZWN0ZWRJZHNTZXQuc2l6ZSA+IDA7XG4gICAgcmV0dXJuIGhhc1NlbGVjdGVkT25QYWdlIHx8IGhhc1NlbGVjdGVkQWNyb3NzUGFnZXM7XG4gIH1cblxuICBnZXQgY3VycmVudFNlbGVjdGVkSXRlbXMoKTogYW55W10ge1xuICAgIC8vIElmIHNlbGVjdGVkSXRlbXMgKGZ1bGwgb2JqZWN0cykgYXJlIHByb3ZpZGVkLCB1c2UgdGhlbSBkaXJlY3RseVxuICAgIC8vIFRoaXMgZW5zdXJlcyBhbGwgc2VsZWN0ZWQgaXRlbXMgYXJlIHJldHVybmVkLCBpbmNsdWRpbmcgdGhvc2UgZnJvbSBvdGhlciBwYWdlc1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrOiBGb3IgY2xpZW50LXNpZGUgcGFnaW5hdGlvbiBvciB3aGVuIHNlbGVjdGVkSXRlbXMgaXMgbm90IHByb3ZpZGVkLFxuICAgIC8vIGZpbHRlciBwYWdlZFJvd3MgdG8gZ2V0IHNlbGVjdGVkIGl0ZW1zIGZyb20gY3VycmVudCBwYWdlIG9ubHlcbiAgICBpZiAoIXRoaXMucGFnZWRSb3dzIHx8IHRoaXMucGFnZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkSWRzU2V0ID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xuICAgIFxuICAgIC8vIEZpbHRlciByb3dzIHRoYXQgYXJlIHNlbGVjdGVkXG4gICAgcmV0dXJuIHRoaXMucGFnZWRSb3dzXG4gICAgICAuZmlsdGVyKHIgPT4ge1xuICAgICAgICBpZiAoIXIgfHwgci5pZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJvd0lkID0gTnVtYmVyKHIuaWQpO1xuICAgICAgICAvLyBJbmNsdWRlIGlmIGVpdGhlcjpcbiAgICAgICAgLy8gMS4gVGhlIHJvdyBoYXMgaXNTZWxlY3RlZCA9IHRydWUgKGN1cnJlbnQgcGFnZSBzZWxlY3Rpb24pXG4gICAgICAgIC8vIDIuIFRoZSByb3cncyBJRCBpcyBpbiBzZWxlY3RlZEl0ZW1zIChzZWxlY3RlZCBvbiBvdGhlciBwYWdlcyBvciByZXN0b3JlZCBzZWxlY3Rpb24pXG4gICAgICAgIHJldHVybiAhIShyIGFzIGFueSkuaXNTZWxlY3RlZCB8fCBzZWxlY3RlZElkc1NldC5oYXMocm93SWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBhY3Rpb25DbGljayhkYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnYWN0aW9uIHRvb2xiYXInLCBkYXRhKTtcbiAgfVxuXG4gIHZpZXcoaWQ6IG51bWJlciB8IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdWaWV3JywgaWQpO1xuICB9XG5cbiAgZWRpdChyb3c6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdFZGl0Jywgcm93KTtcbiAgfVxuXG4gIGRlbGV0ZShyb3c6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdEZWxldGUnLCByb3cpO1xuICB9XG5cbiAgdG9nZ2xlRmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZpbHRlclBhbmVsID0gIXRoaXMuc2hvd0ZpbHRlclBhbmVsO1xuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlKGNmZzogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuX2NvbHVtblZpc2liaWxpdHkgPSB7IC4uLmNmZyB9O1xuICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlLmVtaXQoeyAuLi5jZmcgfSk7XG4gIH1cblxuICBvbkF1dG9SZWZyZXNoQ2hhbmdlKGludGVydmFsTXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsID0gaW50ZXJ2YWxNcztcbiAgICB0aGlzLnNldHVwQXV0b1JlZnJlc2goaW50ZXJ2YWxNcyk7XG4gICAgdGhpcy5hdXRvUmVmcmVzaEludGVydmFsQ2hhbmdlLmVtaXQoaW50ZXJ2YWxNcyk7XG4gICAgdGhpcy50cmlnZ2VyUmVsb2FkKCk7XG4gIH1cblxuICB2YWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1ZhbHVlIGNoYW5nZWQnLCB2YWx1ZSk7XG4gICAgdGhpcy5vblNlYXJjaENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHNlYXJjaCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1NlYXJjaCcsIHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyZWQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0NsZWFyZWQnKTtcbiAgfVxuXG4gIG9uRW1wdHlBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICBpZiAoYWN0aW9uPy5sYWJlbCA9PT0gJ1Nob3cgZmlsdGVycycpIHtcbiAgICAgIHRoaXMudG9nZ2xlRmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgb25GaWx0ZXJzQ2hhbmdlZChjdXJyZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBEZWZlciBhcHBseWluZyBmaWx0ZXJzIGFuZCB1cGRhdGluZyBjaGlwcyB1bnRpbCBBcHBseSBGaWx0ZXIgaXMgY2xpY2tlZFxuICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSBjdXJyZW50O1xuICB9XG5cbiAgb25GaWx0ZXJzQXBwbGllZChhcHBsaWVkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGaWx0ZXJQYW5lbCA9IGZhbHNlO1xuICAgIGNvbnN0IGVmZmVjdGl2ZSA9IGFwcGxpZWQgPz8gdGhpcy5wZW5kaW5nRmlsdGVycyA/PyB7fTtcbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzID0gZWZmZWN0aXZlO1xuICAgIHRoaXMucmVidWlsZEZpbHRlcmVkUm93cygpO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IGNoaXBzOiBBcnJheTx7IGtleT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgZnVsbFRleHQ/OiBzdHJpbmc7IGhhc01vcmU/OiBib29sZWFuIH0+ID0gW107XG4gICAgaWYgKGVmZmVjdGl2ZSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZWZmZWN0aXZlKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGVmZmVjdGl2ZVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpIGNvbnRpbnVlO1xuICAgICAgICBcbiAgICAgICAgLy8gRmluZCB0aGUgZmlsdGVyIGNvbmZpZyBpdGVtIGZvciB0aGlzIGtleVxuICAgICAgICBjb25zdCBmaWx0ZXJDb25maWdJdGVtID0gdGhpcy5maWx0ZXJDb25maWc/LmZpbmQoYyA9PiBjLmtleSA9PT0ga2V5KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGZpbHRlckNvbmZpZ0l0ZW0/Lm9wdGlvbnMgfHwgW107XG4gICAgICAgIFxuICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkaXNwbGF5IHRleHQgZnJvbSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGdldERpc3BsYXlUZXh0ID0gKHZhbDogYW55KTogc3RyaW5nID0+IHtcbiAgICAgICAgICAvLyBJZiB2YWx1ZSBpcyBhbHJlYWR5IGFuIG9iamVjdCB3aXRoIG5hbWUvbGFiZWwsIHVzZSBpdFxuICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgKHZhbC5uYW1lIHx8IHZhbC5sYWJlbCB8fCB2YWwudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLm5hbWUgPz8gdmFsLmxhYmVsID8/IFN0cmluZyh2YWwudmFsdWUgPz8gdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9vayB1cCB0aGUgb3B0aW9uIGluIHRoZSBjb25maWdcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcHRJZCA9IG9wdC5pZCA/PyBvcHQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcHRWYWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbFN0ciA9IFN0cmluZyh2YWwpO1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRJZCkgPT09IHZhbFN0ciB8fCBTdHJpbmcob3B0VmFsdWUpID09PSB2YWxTdHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5uYW1lID8/IG9wdGlvbi5sYWJlbCA/PyBTdHJpbmcob3B0aW9uLnZhbHVlID8/IHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHRoZSByYXcgdmFsdWVcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbCk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgICBsZXQgbGFiZWwgPSBmaWx0ZXJDb25maWdJdGVtPy5sYWJlbDtcbiAgICAgICAgXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHRleHQgPSB2YWx1ZS5tYXAoKHY6IGFueSkgPT4gZ2V0RGlzcGxheVRleHQodikpLmpvaW4oJywgJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGlmICgnc3RhcnQnIGluIHZhbHVlIHx8ICdlbmQnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBzID0gdmFsdWUuc3RhcnQgPyBuZXcgRGF0ZSh2YWx1ZS5zdGFydCkudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGUgPSB2YWx1ZS5lbmQgPyBuZXcgRGF0ZSh2YWx1ZS5lbmQpLnRvTG9jYWxlRGF0ZVN0cmluZygpIDogJyc7XG4gICAgICAgICAgICB0ZXh0ID0gW3MsIGVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgLSAnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dCA9IGdldERpc3BsYXlUZXh0KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGdldERpc3BsYXlUZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjaGlwcy5wdXNoKHsga2V5LCBsYWJlbCwgdGV4dCwgZnVsbFRleHQ6IHRleHQsIGhhc01vcmU6IHRleHQubGVuZ3RoID4gMzAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hpcHMgPSBjaGlwcztcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSB0aGlzLmNoaXBzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBoYW5kbGVSZXNldEZpbHRlckNsaWNrKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIGNoaXBzIGFuZCByZXNldCBmaWx0ZXJlZCBkYXRhIHdoZW4gcmVzZXQgaXMgY2xpY2tlZFxuICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNoaXBzID0gW107XG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRSb3dzKCk7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5vblJlc2V0RmlsdGVyQ2xpY2suZW1pdCgpO1xuICB9XG5cbiAgaGFuZGxlUmVmcmVzaENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub25BdXRvUmVmcmVzaENsaWNrLmVtaXQoKTtcbiAgICB0aGlzLnRyaWdnZXJSZWxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlclJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLm9uUmVsb2FkLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBBdXRvUmVmcmVzaChpbnRlcnZhbE1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQXV0b1JlZnJlc2goKTtcbiAgICBpZiAoaW50ZXJ2YWxNcyAmJiBpbnRlcnZhbE1zID4gMCkge1xuICAgICAgdGhpcy5hdXRvUmVmcmVzaFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICB0aGlzLnRyaWdnZXJSZWxvYWQoKTtcbiAgICAgIH0sIGludGVydmFsTXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJBdXRvUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuYXV0b1JlZnJlc2hUaW1lcik7XG4gICAgICB0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckF1dG9SZWZyZXNoKCk7XG4gIH1cblxuICBvblBhZ2luYXRlKGU6IHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfSk6IHZvaWQge1xuICAgIHRoaXMucGFnZUluZGV4ID0gZS5wYWdlSW5kZXg7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGUucGFnZVNpemU7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHsgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwgcGFnZVNpemU6IHRoaXMucGFnZVNpemUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gIH1cblxuICBvblBhZ2VTaXplQ2hhbmdlKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZVNpemUgPSBzaXplO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeyBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgfVxuXG4gIG9uUmVtb3ZlQ2hpcChjaGlwOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoaXBzID0gdGhpcy5jaGlwcy5maWx0ZXIoYyA9PiBjICE9PSBjaGlwKTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSB0aGlzLmNoaXBzLmxlbmd0aCA+IDA7XG4gICAgLy8gRW1pdCBldmVudCB0byBwYXJlbnQgY29tcG9uZW50IChzYW1lIHBhdHRlcm4gYXMgZXhlY3V0aW9uIHRhYilcbiAgICB0aGlzLnJlbW92ZUNoaXAuZW1pdChjaGlwKTtcbiAgfVxuXG4gIG9uQ2xlYXJBbGxDaGlwcygpOiB2b2lkIHtcbiAgICB0aGlzLmNoaXBzID0gW107XG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkID0gZmFsc2U7XG4gICAgLy8gUmVzZXQgdGhlIGR5bmFtaWMtZmlsdGVyIGNvbXBvbmVudCBmb3JtIHdoZW4gY2xlYXJpbmcgYWxsIGNoaXBzXG4gICAgaWYgKHRoaXMuZHluYW1pY0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgdGhpcy5keW5hbWljRmlsdGVyQ29tcG9uZW50LnJlc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBhZ2luYXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24pIHtcbiAgICAgIC8vIFNlcnZlciBtb2RlOiBwYXJlbnQgc3VwcGxpZXMgYWxyZWFkeS1wYWdpbmF0ZWQgZGF0YVxuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbLi4udGhpcy5maWx0ZXJlZFJvd3NdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IHRoaXMucGFnZUluZGV4ICogdGhpcy5wYWdlU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucGFnZVNpemU7XG4gICAgdGhpcy5wYWdlZFJvd3MgPSB0aGlzLmZpbHRlcmVkUm93cy5zbGljZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwVmlzaWJpbGl0eUNvbHVtbnMoKTogQXJyYXk8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gKHRoaXMuY29sdW1ucyB8fCBbXSlcbiAgICAgIC5maWx0ZXIoYyA9PiBjLmlzRGVmYXVsdCA9PT0gZmFsc2UpXG4gICAgICAubWFwKGMgPT4gKHsgaWQ6IGMuZmllbGRJZCwgbGFiZWw6IGMuZmllbGROYW1lIHx8IGMuZmllbGRJZCB9KSk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGUoZDogYW55KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKCFkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0cyA9IERhdGUucGFyc2UoZCk7XG4gICAgcmV0dXJuIGlzTmFOKHRzKSA/IG51bGwgOiB0cztcbiAgfVxuXG4gIHByaXZhdGUgcGFzc0ZpbHRlcnMoZmlsdGVyczogYW55LCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghZmlsdGVycykgcmV0dXJuIHRydWU7XG4gICAgaWYgKGZpbHRlcnMuc3RhdHVzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycy5zdGF0dXMpICYmIGZpbHRlcnMuc3RhdHVzLmxlbmd0aCkge1xuICAgICAgaWYgKCFmaWx0ZXJzLnN0YXR1cy5pbmNsdWRlcyhyb3cuc3RhdHVzKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy5wcmlvcml0eSAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMucHJpb3JpdHkpICYmIGZpbHRlcnMucHJpb3JpdHkubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMucHJpb3JpdHkuaW5jbHVkZXMocm93LnByaW9yaXR5TmFtZSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlcnMudGVzdFR5cGUgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJzLnRlc3RUeXBlKSAmJiBmaWx0ZXJzLnRlc3RUeXBlLmxlbmd0aCkge1xuICAgICAgaWYgKCFmaWx0ZXJzLnRlc3RUeXBlLmluY2x1ZGVzKHJvdy50ZXN0VHlwZSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlcnMuY3JlYXRlZF9kYXRlICYmIChmaWx0ZXJzLmNyZWF0ZWRfZGF0ZS5zdGFydCB8fCBmaWx0ZXJzLmNyZWF0ZWRfZGF0ZS5lbmQpKSB7XG4gICAgICBjb25zdCBzdGFydFRzID0gdGhpcy5ub3JtYWxpemVEYXRlKGZpbHRlcnMuY3JlYXRlZF9kYXRlLnN0YXJ0KTtcbiAgICAgIGNvbnN0IGVuZFRzID0gdGhpcy5ub3JtYWxpemVEYXRlKGZpbHRlcnMuY3JlYXRlZF9kYXRlLmVuZCk7XG4gICAgICBjb25zdCByb3dUcyA9IHRoaXMubm9ybWFsaXplRGF0ZShyb3cuY3JlYXRlZEF0KTtcbiAgICAgIGlmIChyb3dUcyAhPSBudWxsKSB7XG4gICAgICAgIGlmIChzdGFydFRzICE9IG51bGwgJiYgcm93VHMgPCBzdGFydFRzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChlbmRUcyAhPSBudWxsICYmIHJvd1RzID4gZW5kVHMpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cmFja0J5VGVtcGxhdGVSZWYoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgdHJhY2tCeURyb3Bkb3duVGVtcGxhdGVSZWYoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgdHJhY2tCeVNlbGVjdERyb3Bkb3duVGVtcGxhdGVSZWYoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLy8gRXhwb3J0IG1vZGFsIHN0YXRlXG4gIGlzRXhwb3J0TW9kYWxPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZXhwb3J0Q29kZUNsaWNrKCk6IHZvaWQge1xuICAgIC8vIEdldCBzZWxlY3RlZCBpdGVtc1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmN1cnJlbnRTZWxlY3RlZEl0ZW1zO1xuICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gRW1pdCBldmVudCB0byBwYXJlbnQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW4gbm8gaXRlbXMgYXJlIHNlbGVjdGVkXG4gICAgICB0aGlzLm9uRXhwb3J0Q2xpY2suZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzRXhwb3J0TW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlRXhwb3J0TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0V4cG9ydE1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgb25FeHBvcnRNb2RhbEV4cG9ydChyZXN1bHQ6IHsgdHlwZTogJ2xvY2FsJyB8ICdlbWFpbCc7IGVtYWlscz86IHN0cmluZ1tdOyBmcmFtZXdvcms6ICdXRUJEUklWRVJfSU8nIHwgJ1NFTEVOSVVNX0pBVkEnIH0pOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwb3J0TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgLy8gRW1pdCBldmVudCB0byBwYXJlbnQgd2l0aCBleHBvcnQgcmVzdWx0XG4gICAgdGhpcy5vbkV4cG9ydENsaWNrLmVtaXQoe1xuICAgICAgdHlwZTogcmVzdWx0LnR5cGUsXG4gICAgICBlbWFpbHM6IHJlc3VsdC5lbWFpbHMsXG4gICAgICBmcmFtZXdvcms6IHJlc3VsdC5mcmFtZXdvcmssXG4gICAgICBzZWxlY3RlZEl0ZW1zOiB0aGlzLmN1cnJlbnRTZWxlY3RlZEl0ZW1zXG4gICAgfSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDYXNlc0ZvckV4cG9ydCgpOiBBcnJheTx7IGlkPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0ZWRJdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICBuYW1lOiBpdGVtLm5hbWUgfHwgaXRlbS50aXRsZSB8fCAnVW5uYW1lZCdcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IGFycm93Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gW1xuICAgICAgJ2NxYS13LTQnLFxuICAgICAgJ2NxYS1oLTQnLFxuICAgICAgJ2NxYS1yZWxhdGl2ZScsXG4gICAgICAnY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtJ1xuICAgIF07XG5cbiAgICBpZiAodGhpcy5zaG93RmlsdGVyUGFuZWwpIHtcbiAgICAgIGJhc2VDbGFzc2VzLnB1c2goJ2NxYS1yb3RhdGUtMTgwJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VDbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRm9sZGVyIC8gbW9kdWxhciBoZWxwZXJzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogRmxhdCBsaXN0IG9mIHJvb3QtbGV2ZWwgZm9sZGVycyBmb3IgdGhlIFwiT3JnYW5pc2VkXCIgZ3JpZCBvbiB0aGUgcm9vdCB2aWV3LlxuICAgKi9cbiAgZ2V0IHJvb3RGb2xkZXJUaWxlcygpOiBGb2xkZXJOb2RlW10ge1xuICAgIHJldHVybiB0aGlzLmZvbGRlcnMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogU3ViZm9sZGVycyBvZiB0aGUgY3VycmVudGx5LXNlbGVjdGVkIGZvbGRlciAoZm9yIHRoZSBcIlN1YmZvbGRlcnMgaW4gLi4uXCIgZ3JpZCkuXG4gICAqL1xuICBnZXQgc3ViZm9sZGVyVGlsZXMoKTogRm9sZGVyTm9kZVtdIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZvbGRlcklkID09IG51bGwpIHJldHVybiBbXTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kRm9sZGVyKHRoaXMuZm9sZGVycywgdGhpcy5zZWxlY3RlZEZvbGRlcklkKTtcbiAgICByZXR1cm4gbm9kZT8uY2hpbGRyZW4gPz8gW107XG4gIH1cblxuICAvKipcbiAgICogQnJlYWRjcnVtYiB0cmFpbCBmcm9tIFwiQWxsIGZvbGRlcnNcIiBkb3duIHRvIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgZm9sZGVyLlxuICAgKi9cbiAgZ2V0IGJyZWFkY3J1bWJUcmFpbCgpOiBGb2xkZXJOb2RlW10ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHRyYWlsOiBGb2xkZXJOb2RlW10gPSBbXTtcbiAgICB0aGlzLmJ1aWxkVHJhaWwodGhpcy5mb2xkZXJzLCB0aGlzLnNlbGVjdGVkRm9sZGVySWQsIHRyYWlsKTtcbiAgICByZXR1cm4gdHJhaWw7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVHJhaWwobm9kZXM6IEZvbGRlck5vZGVbXSwgdGFyZ2V0SWQ6IG51bWJlciwgYWNjOiBGb2xkZXJOb2RlW10pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IG4gb2Ygbm9kZXMgfHwgW10pIHtcbiAgICAgIGFjYy5wdXNoKG4pO1xuICAgICAgLy8gVXNlIFN0cmluZygpIGNvZXJjaW9uIGZvciBzYWZldHkgaW4gY2FzZSBpZHMgYXJyaXZlIGFzIGVpdGhlciBudW1iZXIgb3JcbiAgICAgIC8vIHN0cmluZyBmcm9tIGRpZmZlcmVudCBBUEkvdGVzdCBkYXRhIHNoYXBlcyAoZS5nLiByYXcgSlNPTiBwYXJzZSByZXN1bHRzKS5cbiAgICAgIGlmIChTdHJpbmcobi5pZCkgPT09IFN0cmluZyh0YXJnZXRJZCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKG4uY2hpbGRyZW4gJiYgdGhpcy5idWlsZFRyYWlsKG4uY2hpbGRyZW4sIHRhcmdldElkLCBhY2MpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGFjYy5wb3AoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRm9sZGVyKG5vZGVzOiBGb2xkZXJOb2RlW10sIHRhcmdldElkOiBudW1iZXIpOiBGb2xkZXJOb2RlIHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBuIG9mIG5vZGVzIHx8IFtdKSB7XG4gICAgICBpZiAoU3RyaW5nKG4uaWQpID09PSBTdHJpbmcodGFyZ2V0SWQpKSByZXR1cm4gbjtcbiAgICAgIGNvbnN0IGZvdW5kID0gbi5jaGlsZHJlbiA/IHRoaXMuZmluZEZvbGRlcihuLmNoaWxkcmVuLCB0YXJnZXRJZCkgOiBudWxsO1xuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBpbiBcInJvb3RcIiB2aWV3IChubyBmb2xkZXIgc2VsZWN0ZWQpLiBDb250cm9scyB3aGljaFxuICAgKiBzZWN0aW9ucyByZW5kZXIgb24gdGhlIHJpZ2h0LWhhbmQgcGFuZS5cbiAgICovXG4gIGdldCBpc1Jvb3RWaWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbDtcbiAgfVxuXG4gIC8qKiBUaGUgY3VycmVudGx5LXNlbGVjdGVkIGZvbGRlciBub2RlIChvciBudWxsIGF0IHJvb3QpLiAqL1xuICBnZXQgY3VycmVudEZvbGRlck5vZGUoKTogRm9sZGVyTm9kZSB8IG51bGwge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZmluZEZvbGRlcih0aGlzLmZvbGRlcnMsIHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCk7XG4gIH1cblxuICAvKiogQ291bnQgb2YgdGVzdCBjYXNlcyBkaXJlY3RseSB1bmRlciB0aGUgY3VycmVudGx5LXNlbGVjdGVkIGZvbGRlciAoZXhjbHVkaW5nIGRlc2NlbmRhbnRzKS4gKi9cbiAgZ2V0IGN1cnJlbnRGb2xkZXJEaXJlY3RDb3VudCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBlbXB0eS1zdGF0ZSBzbG90IHdoZW4gdGhlIGhvc3QgZXhwbGljaXRseSBvcHRzIGluLCBPUiB3aGVuIHRoZVxuICAgKiB0YWJsZSB3b3VsZCBvdGhlcndpc2UgcmVuZGVyIGJsYW5rIChubyBsb2FkaW5nICsgbm8gcm93cykuIFVzaW5nIGEgZGVyaXZlZFxuICAgKiBmbGFnIGtlZXBzIHRoZSBob3N0IGNvbnRyYWN0IGlkZW50aWNhbCB0byBgY3FhLXRhYmxlLXRlbXBsYXRlYCB3aGlsZSBsZXR0aW5nXG4gICAqIHRoZSBtb2R1bGFyIHZpZXcgc2hvdyBcIk5vIFRlc3QgQ2FzZSBGb3VuZFwiIG91dCBvZiB0aGUgYm94IOKAlCB0aGUgZWFybGllciBhc2suXG4gICAqL1xuICBnZXQgZWZmZWN0aXZlSXNFbXB0eVN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRW1wdHlTdGF0ZSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuaXNUYWJsZUxvYWRpbmcgfHwgdGhpcy5pc1RhYmxlRGF0YUxvYWRpbmcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIXRoaXMucGFnZWRSb3dzIHx8IHRoaXMucGFnZWRSb3dzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaWNrcyB0aGUgaG9zdC1wcm92aWRlZCBgZW1wdHlTdGF0ZUNvbmZpZ2Agd2hlbiB0aGUgaG9zdCBmbGFnZ2VkIHRoZSBzdGF0ZVxuICAgKiBpdHNlbGY7IG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGEgbGlicmFyeS1vd25lZCBcIk5vIFRlc3QgQ2FzZSBGb3VuZFwiIGNvbmZpZ1xuICAgKiBkcml2ZW4gYnkgYG1vZHVsYXJMYWJlbHNgLlxuICAgKi9cbiAgZ2V0IGVmZmVjdGl2ZUVtcHR5U3RhdGVDb25maWcoKTogRW1wdHlTdGF0ZUNvbmZpZyB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eVN0YXRlKSByZXR1cm4gdGhpcy5lbXB0eVN0YXRlQ29uZmlnO1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogdGhpcy5tb2R1bGFyTGFiZWxzLmVtcHR5Tm9UZXN0c0luRm9sZGVyVGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5tb2R1bGFyTGFiZWxzLmVtcHR5Tm9UZXN0c0luRm9sZGVyRGVzY3JpcHRpb24sXG4gICAgICBpbWFnZVVybDogRU1QVFlfU1RBVEVfSU1BR0VTLlRFU1RfQ0FTRSxcbiAgICAgIGFjdGlvbnM6IFtdLFxuICAgIH07XG4gIH1cblxuICBvbkZvbGRlclNlbGVjdGVkKGlkOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlcklkID0gaWQ7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIHRoaXMucmVidWlsZEZpbHRlcmVkUm93cygpO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5mb2xkZXJTZWxlY3RlZC5lbWl0KGlkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uRm9sZGVyRXhwYW5zaW9uVG9nZ2xlZChldmVudDogeyBpZDogbnVtYmVyOyBleHBhbmRlZDogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldCh0aGlzLmV4cGFuZGVkRm9sZGVySWRzIHx8IFtdKTtcbiAgICBpZiAoZXZlbnQuZXhwYW5kZWQpIHtcbiAgICAgIHNldC5hZGQoZXZlbnQuaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXQuZGVsZXRlKGV2ZW50LmlkKTtcbiAgICB9XG4gICAgdGhpcy5leHBhbmRlZEZvbGRlcklkcyA9IEFycmF5LmZyb20oc2V0KTtcbiAgICB0aGlzLmZvbGRlckV4cGFuc2lvblRvZ2dsZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkZvbGRlckNyZWF0ZWQocGF5bG9hZDogRm9sZGVyQ3JlYXRlZFBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLmZvbGRlckNyZWF0ZWQuZW1pdChwYXlsb2FkKTtcbiAgfVxuXG4gIG9uRm9sZGVyQ3JlYXRlUmVxdWVzdGVkKHBheWxvYWQ6IHsgcGFyZW50SWQ6IG51bWJlciB8IG51bGwgfSk6IHZvaWQge1xuICAgIC8vIEVtaXQgdGhlIFwicmVxdWVzdGVkXCIgZXZlbnQgZmlyc3Qgc28gYSBob3N0IGNhbiBpbnRlcmNlcHQgd2hlbiBpdCBvd25zIHRoZSBVWC5cbiAgICB0aGlzLmZvbGRlckNyZWF0ZVJlcXVlc3RlZC5lbWl0KHBheWxvYWQpO1xuICAgIGlmICghdGhpcy51c2VJbnRlcm5hbERpYWxvZ3MpIHJldHVybjtcbiAgICB0aGlzLm9wZW5DcmVhdGVGb2xkZXJEaWFsb2cocGF5bG9hZC5wYXJlbnRJZCk7XG4gIH1cblxuICBvbkZvbGRlclJlbmFtZWQocGF5bG9hZDogRm9sZGVyUmVuYW1lZFBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLmZvbGRlclJlbmFtZWQuZW1pdChwYXlsb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXJlZCB0byB0aGUgc2lkZWJhcidzIGBmb2xkZXJEZWxldGVkYCBvdXRwdXQg4oCUIHdoaWNoIGZpcmVzIG9uIGRlbGV0ZS1pY29uXG4gICAqICpjbGljayosIG5vdCBvbiBjb25maXJtYXRpb24uIFdlIHJlLWVtaXQgYSBgZm9sZGVyRGVsZXRlUmVxdWVzdGVkYCBldmVudFxuICAgKiBmaXJzdCAoc28gaG9zdHMgY2FuIGludGVyY2VwdCkgYW5kLCB3aGVuIGB1c2VJbnRlcm5hbERpYWxvZ3NgIGlzIGVuYWJsZWQsXG4gICAqIG9wZW4gdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cuIGBmb2xkZXJEZWxldGVkYCBub3cgb25seSBmaXJlcyBhZnRlciBjb25maXJtLlxuICAgKi9cbiAgb25Gb2xkZXJEZWxldGVkKHBheWxvYWQ6IHsgaWQ6IG51bWJlciB9KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5idWlsZERlbGV0ZUNvbnRleHQocGF5bG9hZC5pZCk7XG4gICAgdGhpcy5mb2xkZXJEZWxldGVSZXF1ZXN0ZWQuZW1pdChjdHgpO1xuICAgIGlmICghdGhpcy51c2VJbnRlcm5hbERpYWxvZ3MpIHJldHVybjtcbiAgICB0aGlzLm9wZW5EZWxldGVGb2xkZXJEaWFsb2coY3R4KTtcbiAgfVxuXG4gIC8qKiBCdWlsZHMgdGhlIHsgaWQsIG5hbWUsIHRlc3RDb3VudCwgaGFzUGFyZW50IH0gcGF5bG9hZCB1c2VkIGJ5IGRlbGV0ZSBldmVudHMvZGlhbG9ncy4gKi9cbiAgcHJpdmF0ZSBidWlsZERlbGV0ZUNvbnRleHQoZm9sZGVySWQ6IG51bWJlcik6IEZvbGRlckRlbGV0ZVJlcXVlc3RlZFBheWxvYWQge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmRGb2xkZXIodGhpcy5mb2xkZXJzLCBmb2xkZXJJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBmb2xkZXJJZCxcbiAgICAgIG5hbWU6IG5vZGU/Lm5hbWUgPz8gJycsXG4gICAgICB0ZXN0Q291bnQ6IHRoaXMuY291bnRUZXN0c0luRm9sZGVyKGZvbGRlcklkKSxcbiAgICAgIGhhc1BhcmVudDogdGhpcy5mb2xkZXJIYXNQYXJlbnQoZm9sZGVySWQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvdW50VGVzdHNJbkZvbGRlcihmb2xkZXJJZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBhY2Nlc3NvciA9IHRoaXMuZm9sZGVySWRBY2Nlc3NvciA/PyAoKHI6IGFueSkgPT4gcj8uZm9sZGVySWQpO1xuICAgIHJldHVybiAodGhpcy5kYXRhIHx8IFtdKS5maWx0ZXIociA9PiB7XG4gICAgICBjb25zdCBpZCA9IGFjY2Vzc29yKHIpO1xuICAgICAgcmV0dXJuIGlkICE9IG51bGwgJiYgTnVtYmVyKGlkKSA9PT0gTnVtYmVyKGZvbGRlcklkKTtcbiAgICB9KS5sZW5ndGg7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIHdoZW4gdGhlIGZvbGRlciBpcyBuZXN0ZWQgKGkuZS4gbm90IGEgcm9vdC1sZXZlbCBmb2xkZXIpLiAqL1xuICBwcml2YXRlIGZvbGRlckhhc1BhcmVudChmb2xkZXJJZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodGhpcy5mb2xkZXJzIHx8IFtdKS5zb21lKG4gPT4gbi5pZCA9PT0gZm9sZGVySWQpO1xuICB9XG5cbiAgb25UZXN0c0Ryb3BwZWQoZXZlbnQ6IHsgdGVzdElkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjsgdGFyZ2V0Rm9sZGVySWQ6IG51bWJlciB8IG51bGwgfSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tb2R1bGFyQ29uZmlnLmFsbG93VGVzdERyYWdEcm9wKSByZXR1cm47XG4gICAgdGhpcy50ZXN0c01vdmVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvbGRlci10by1mb2xkZXIgZHJhZy1kcm9wLiBUaGUgc2lkZWJhciBoYXMgYWxyZWFkeSB2YWxpZGF0ZWQgYWdhaW5zdCBzZWxmL2Rlc2NlbmRhbnRcbiAgICogY3ljbGVzLCBzbyB0aGUgZHJvcCBpcyBpdHMgb3duIGNvbmZpcm1hdGlvbiDigJQgd2UgZW1pdCBgZm9sZGVyTW92ZWRgIGRpcmVjdGx5IHdpdGhvdXRcbiAgICogb3BlbmluZyB0aGUgbW92ZSBkaWFsb2cuIEdhdGVkIG9uIGBhbGxvd1Rlc3REcmFnRHJvcGAgKHNhbWUgZmxhZyBhcyB0ZXN0IGRyYWctZHJvcCkuXG4gICAqL1xuICBvbkZvbGRlckRyb3BwZWQoZXZlbnQ6IHsgaWQ6IG51bWJlcjsgbmV3UGFyZW50SWQ6IG51bWJlciB8IG51bGwgfSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tb2R1bGFyQ29uZmlnLmFsbG93VGVzdERyYWdEcm9wKSByZXR1cm47XG4gICAgdGhpcy5mb2xkZXJNb3ZlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWRlYmFyIGVtaXR0ZWQgYGZvbGRlck1vdmVSZXF1ZXN0ZWRgICh1c2VyIHBpY2tlZCBcIk1vdmUgZm9sZGVyXCIgZnJvbSB0aGUgY29udGV4dCBtZW51KS5cbiAgICogV2UgcmUtZW1pdCBhIHJpY2hlciBwYXlsb2FkIGZvciBob3N0cywgYW5kIOKAlCB3aGVuIHJ1bm5pbmcgd2l0aCBpbnRlcm5hbCBkaWFsb2dzIOKAlFxuICAgKiBvcGVuIHRoZSBleGlzdGluZyBtb3ZlLXRvLWZvbGRlciBwaWNrZXIgY29uZmlndXJlZCBmb3IgYSBmb2xkZXItbW92ZSAoc2VsZiBhbmRcbiAgICogZGVzY2VuZGFudHMgYXJlIGRpc2FibGVkIHRvIHByZXZlbnQgY3ljbGVzKS5cbiAgICovXG4gIG9uRm9sZGVyTW92ZVJlcXVlc3RlZChwYXlsb2FkOiB7IGlkOiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmRGb2xkZXIodGhpcy5mb2xkZXJzLCBwYXlsb2FkLmlkKTtcbiAgICBjb25zdCBjdHg6IEZvbGRlck1vdmVSZXF1ZXN0ZWRQYXlsb2FkID0ge1xuICAgICAgaWQ6IHBheWxvYWQuaWQsXG4gICAgICBuYW1lOiBub2RlPy5uYW1lID8/ICcnLFxuICAgICAgaGFzUGFyZW50OiB0aGlzLmZvbGRlckhhc1BhcmVudChwYXlsb2FkLmlkKSxcbiAgICB9O1xuICAgIHRoaXMuZm9sZGVyTW92ZVJlcXVlc3RlZC5lbWl0KGN0eCk7XG4gICAgaWYgKCF0aGlzLnVzZUludGVybmFsRGlhbG9ncykgcmV0dXJuO1xuICAgIHRoaXMub3Blbk1vdmVGb2xkZXJEaWFsb2coY3R4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWRlYmFyIGVtaXR0ZWQgYGZvbGRlckR1cGxpY2F0ZVJlcXVlc3RlZGAuIFRoZSBsaWJyYXJ5IGNhbid0IHBlcnNpc3Qg4oCUXG4gICAqIGVtaXQgdGhlIGhvc3QtbGV2ZWwgZXZlbnQgc28gdGhlIGhvc3QgY2xvbmVzIHRoZSBzdWJ0cmVlIHNlcnZlci1zaWRlLlxuICAgKiBUZXN0IGNhc2VzIHNob3VsZCBiZSAqcmVmZXJlbmNlZCogZnJvbSB0aGUgbmV3IGZvbGRlcnMsIG5vdCBkdXBsaWNhdGVkLlxuICAgKi9cbiAgb25Gb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWQocGF5bG9hZDogeyBpZDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kRm9sZGVyKHRoaXMuZm9sZGVycywgcGF5bG9hZC5pZCk7XG4gICAgdGhpcy5mb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWQuZW1pdCh7XG4gICAgICBpZDogcGF5bG9hZC5pZCxcbiAgICAgIG5hbWU6IG5vZGU/Lm5hbWUgPz8gJycsXG4gICAgfSk7XG4gIH1cblxuICBvblNpZGViYXJDb2xsYXBzZWRDaGFuZ2UoY29sbGFwc2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaWRlYmFyQ29sbGFwc2VkID0gY29sbGFwc2VkO1xuICAgIHRoaXMuc2lkZWJhckNvbGxhcHNlZENoYW5nZS5lbWl0KGNvbGxhcHNlZCk7XG4gIH1cblxuICB0b2dnbGVTaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMub25TaWRlYmFyQ29sbGFwc2VkQ2hhbmdlKCF0aGlzLnNpZGViYXJDb2xsYXBzZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgYnVsayBhY3Rpb25zIHNob3duIGluIHRoZSB0b29sYmFyIG1lcmdlZCB3aXRoIGFueSBob3N0LXN1cHBsaWVkXG4gICAqIGBidWxrQWN0aW9uc2AuIEN1cnJlbnRseSBvbmx5IFwiTW92ZSB0byBmb2xkZXJcIiBzaGlwcyBieSBkZWZhdWx0IOKAlFxuICAgKiBEZWxldGUgLyBBZGQgVGFnIGFyZSBvcHQtaW4gcGVyIHRoZSBjdXJyZW50IHByb2R1Y3QgcmVxdWlyZW1lbnQuIEhvc3RzXG4gICAqIHRoYXQgd2FudCB0aGVtIGJhY2sgcGFzcyB0aGVtIHZpYSBgYnVsa0FjdGlvbnNgLlxuICAgKi9cbiAgZ2V0IGVmZmVjdGl2ZUJ1bGtBY3Rpb25zKCk6IFRhYmxlQWN0aW9uW10ge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBUYWJsZUFjdGlvbltdID0gW1xuICAgICAgeyBpZDogJ21vdmUnLCBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVUb0ZvbGRlciwgaWNvbjogJ2RyaXZlX2ZpbGVfbW92ZScsIHRvb2x0aXA6IHRoaXMubW9kdWxhckxhYmVscy5tb3ZlVG9Gb2xkZXIgfSxcbiAgICBdO1xuICAgIGNvbnN0IG92ZXJyaWRlcyA9IG5ldyBNYXAoKHRoaXMuYnVsa0FjdGlvbnMgfHwgW10pLm1hcChhID0+IFthLmlkLCBhXSBhcyBjb25zdCkpO1xuICAgIGNvbnN0IG1lcmdlZCA9IGRlZmF1bHRzLm1hcChkID0+IG92ZXJyaWRlcy5nZXQoZC5pZCkgPz8gZCk7XG4gICAgZm9yIChjb25zdCBleHRyYSBvZiB0aGlzLmJ1bGtBY3Rpb25zIHx8IFtdKSB7XG4gICAgICBpZiAoIWRlZmF1bHRzLnNvbWUoZCA9PiBkLmlkID09PSBleHRyYS5pZCkpIHtcbiAgICAgICAgbWVyZ2VkLnB1c2goZXh0cmEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG5cbiAgb25CdWxrQWN0aW9uKGV2ZW50OiB7IGlkOiBzdHJpbmc7IHNlbGVjdGVkOiBhbnlbXSB9KTogdm9pZCB7XG4gICAgLy8gQWx3YXlzIGVtaXQgdGhlIHJhdyBjbGljayBzbyBob3N0cyBvd25pbmcgdGhlIFVYIGNhbiBpbnRlcmNlcHQgZWFybHkuXG4gICAgdGhpcy5idWxrQWN0aW9uQ2xpY2suZW1pdCh7IGlkOiBldmVudC5pZCwgc2VsZWN0ZWQ6IGV2ZW50LnNlbGVjdGVkIH0pO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSAoZXZlbnQuc2VsZWN0ZWQgfHwgW10pLm1hcChyID0+IHI/LmlkKS5maWx0ZXIodiA9PiB2ICE9IG51bGwpO1xuICAgIGlmIChldmVudC5pZCA9PT0gJ21vdmUnKSB7XG4gICAgICB0aGlzLm9wZW5Nb3ZlRGlhbG9nKHNlbGVjdGVkSWRzLCBldmVudC5zZWxlY3RlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEZvciBub24tZGlhbG9nIGFjdGlvbnMgKGN1c3RvbSBlbnRyaWVzIGZyb20gaG9zdC1zdXBwbGllZCBgYnVsa0FjdGlvbnNgKSwgaW52b2tlIGltbWVkaWF0ZWx5LlxuICAgIHRoaXMuYnVsa0FjdGlvbkludm9rZWQuZW1pdCh7IGlkOiBldmVudC5pZCwgc2VsZWN0ZWQ6IGV2ZW50LnNlbGVjdGVkIH0pO1xuICB9XG5cbiAgb25CdWxrU2VsZWN0QWxsKGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBBcHBseSB0aGUgYWN0aW9uIGxvY2FsbHkgc28gdGhlIGFjdGlvbiB0b29sYmFyJ3MgXCJTZWxlY3QgYWxsXCIgd29ya3Mgb3V0LW9mLXRoZS1ib3guXG4gICAgLy8gV2hlbiBjaGVja2VkLCBzZWxlY3QgZXZlcnkgcm93IGluIHRoZSAqY3VycmVudCogZmlsdGVyZWQgc2V0IChpLmUuIGFsbCB0ZXN0cyBpblxuICAgIC8vIHRoZSBzZWxlY3RlZCBmb2xkZXIpLiBXaGVuIHVuY2hlY2tlZCwgY2xlYXIgc2VsZWN0aW9uLlxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGNoZWNrZWQgPyBbLi4udGhpcy5maWx0ZXJlZFJvd3NdIDogW107XG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdChbLi4udGhpcy5zZWxlY3RlZEl0ZW1zXSk7XG4gICAgdGhpcy5idWxrU2VsZWN0QWxsQ2hhbmdlLmVtaXQoY2hlY2tlZCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkJ1bGtEaXNtaXNzKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIHNlbGVjdGlvbiBBTkQgdGhlIHBlci1yb3cgaXNTZWxlY3RlZCBmbGFncyBzbyB0aGUgYWN0aW9uIHRvb2xiYXIgY2xvc2VzXG4gICAgLy8gKGl0J3MgZ2F0ZWQgb24gYGFueVJvd1NlbGVjdGVkYCwgd2hpY2ggcmVhZHMgYm90aCBzZWxlY3RlZEl0ZW1zIGFuZCByb3cgZmxhZ3MpLlxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMucmVzdG9yZVNlbGVjdGlvblN0YXRlKCk7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoW10pO1xuICAgIHRoaXMuYnVsa0Rpc21pc3MuZW1pdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuTW92ZURpYWxvZyh0ZXN0SWRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+LCBzZWxlY3RlZDogYW55W10pOiB2b2lkIHtcbiAgICAvLyBGaXJlIHRoZSBcInJlcXVlc3RlZFwiIGV2ZW50IGZpcnN0IHNvIGEgaG9zdCBjYW4gaW50ZXJjZXB0IHdoZW4gaXQgb3ducyB0aGUgVVguXG4gICAgdGhpcy5tb3ZlUmVxdWVzdGVkLmVtaXQoe1xuICAgICAgdGVzdElkcyxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgY3VycmVudEZvbGRlcklkOiB0aGlzLnNlbGVjdGVkRm9sZGVySWQsXG4gICAgICBmb2xkZXJzOiB0aGlzLmZvbGRlcnMsXG4gICAgfSk7XG4gICAgaWYgKCF0aGlzLnVzZUludGVybmFsRGlhbG9ncykgcmV0dXJuO1xuXG4gICAgY29uc3QgY291bnQgPSB0ZXN0SWRzLmxlbmd0aDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IChjb3VudCA9PT0gMVxuICAgICAgPyB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZURpYWxvZ0Rlc2NyaXB0aW9uU2luZ3VsYXJcbiAgICAgIDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dEZXNjcmlwdGlvblBsdXJhbFxuICAgICkucmVwbGFjZSgne259JywgJycgKyBjb3VudCk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW48YW55LCBudW1iZXIgfCBudWxsPih7XG4gICAgICB0aXRsZTogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dUaXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICBjb250ZW50OiB7XG4gICAgICAgIHR5cGU6ICdjb21wb25lbnQnLFxuICAgICAgICBjb21wb25lbnQ6IE1vdmVUb0ZvbGRlckRpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgZm9sZGVyczogdGhpcy5mb2xkZXJzLFxuICAgICAgICAgIGxhYmVsczogdGhpcy5tb2R1bGFyTGFiZWxzLFxuICAgICAgICAgIGN1cnJlbnRGb2xkZXJJZDogdGhpcy5zZWxlY3RlZEZvbGRlcklkLFxuICAgICAgICAgIC8vIFdoZW4gbW92aW5nIEZST00gVW5vcmdhbmlzZWQsIGRpc2FibGUgdGhlIFVub3JnYW5pc2VkIGRlc3RpbmF0aW9uIHJvdy5cbiAgICAgICAgICByb290RGlzYWJsZWQ6IHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCA9PSBudWxsLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dDYW5jZWwsIHJvbGU6ICdzZWNvbmRhcnknLCBoYW5kbGVyOiByID0+IHIuY2xvc2UodW5kZWZpbmVkIGFzIGFueSkgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZURpYWxvZ0NvbmZpcm0sXG4gICAgICAgICAgcm9sZTogJ3ByaW1hcnknLFxuICAgICAgICAgIGhhbmRsZXI6IHIgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSByLmdldENvbXBvbmVudEluc3RhbmNlPE1vdmVUb0ZvbGRlckRpYWxvZ0NvbXBvbmVudD4oKTtcbiAgICAgICAgICAgIHIuY2xvc2UoaW5zdGFuY2UgPyBpbnN0YW5jZS5waWNrZWRGb2xkZXJJZCA6IG51bGwpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnV0dG9uQWxpZ25tZW50OiAncmlnaHQnLFxuICAgIH0pO1xuICAgIHJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSh0YXJnZXRGb2xkZXJJZCA9PiB7XG4gICAgICBpZiAodGFyZ2V0Rm9sZGVySWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBjYW5jZWxsZWRcbiAgICAgIHRoaXMudGVzdHNNb3ZlZC5lbWl0KHsgdGVzdElkcywgdGFyZ2V0Rm9sZGVySWQ6IHRhcmdldEZvbGRlcklkID8/IG51bGwgfSk7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25JbnZva2VkLmVtaXQoeyBpZDogJ21vdmUnLCBzZWxlY3RlZCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgZm9sZGVyLXBpY2tlciBkaWFsb2cgY29uZmlndXJlZCBmb3IgbW92aW5nIGEgZm9sZGVyIChyYXRoZXIgdGhhbiB0ZXN0cykuXG4gICAqIFRoZSBzb3VyY2UgZm9sZGVyIGl0c2VsZiBpcyBtYXJrZWQgYXMgdGhlIFwiY3VycmVudFwiIGZvbGRlciBzbyBpdCdzIHJlbmRlcmVkIGFzXG4gICAqIGRpc2FibGVkIGluIHRoZSBwaWNrZXIuIE9uIGNvbmZpcm0sIGVtaXRzIGBmb2xkZXJNb3ZlZGAgd2l0aCB0aGUgY2hvc2VuIHBhcmVudC5cbiAgICovXG4gIHByaXZhdGUgb3Blbk1vdmVGb2xkZXJEaWFsb2coY3R4OiBGb2xkZXJNb3ZlUmVxdWVzdGVkUGF5bG9hZCk6IHZvaWQge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuPGFueSwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZD4oe1xuICAgICAgdGl0bGU6IHRoaXMubW9kdWxhckxhYmVscy5mb2xkZXJNZW51TW92ZSxcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgY29udGVudDoge1xuICAgICAgICB0eXBlOiAnY29tcG9uZW50JyxcbiAgICAgICAgY29tcG9uZW50OiBNb3ZlVG9Gb2xkZXJEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGZvbGRlcnM6IHRoaXMuZm9sZGVycyxcbiAgICAgICAgICBsYWJlbHM6IHRoaXMubW9kdWxhckxhYmVscyxcbiAgICAgICAgICAvLyBSZXVzZSB0aGUgXCJkaXNhYmxlZFwiIHRyZWF0bWVudDogdGhlIGZvbGRlciBiZWluZyBtb3ZlZCBjYW4ndCBiZSBpdHMgb3duIGRlc3RpbmF0aW9uLlxuICAgICAgICAgIGN1cnJlbnRGb2xkZXJJZDogY3R4LmlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dDYW5jZWwsIHJvbGU6ICdzZWNvbmRhcnknLCBoYW5kbGVyOiByID0+IHIuY2xvc2UodW5kZWZpbmVkIGFzIGFueSkgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZURpYWxvZ0NvbmZpcm0sXG4gICAgICAgICAgcm9sZTogJ3ByaW1hcnknLFxuICAgICAgICAgIGhhbmRsZXI6IHIgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSByLmdldENvbXBvbmVudEluc3RhbmNlPE1vdmVUb0ZvbGRlckRpYWxvZ0NvbXBvbmVudD4oKTtcbiAgICAgICAgICAgIHIuY2xvc2UoaW5zdGFuY2UgPyBpbnN0YW5jZS5waWNrZWRGb2xkZXJJZCA6IG51bGwpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnV0dG9uQWxpZ25tZW50OiAncmlnaHQnLFxuICAgIH0pO1xuICAgIHJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSh0YXJnZXRGb2xkZXJJZCA9PiB7XG4gICAgICBpZiAodGFyZ2V0Rm9sZGVySWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBjYW5jZWxsZWRcbiAgICAgIHRoaXMuZm9sZGVyTW92ZWQuZW1pdCh7IGlkOiBjdHguaWQsIG5ld1BhcmVudElkOiB0YXJnZXRGb2xkZXJJZCA/PyBudWxsIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ3JlYXRlRm9sZGVyRGlhbG9nKGluaXRpYWxQYXJlbnRJZDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuPGFueSwgeyBuYW1lOiBzdHJpbmc7IHBhcmVudElkOiBudW1iZXIgfCBudWxsOyBjb2xvcjogc3RyaW5nIH0gfCBmYWxzZT4oe1xuICAgICAgdGl0bGU6IHRoaXMubW9kdWxhckxhYmVscy5uZXdGb2xkZXJEaWFsb2dUaXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLm1vZHVsYXJMYWJlbHMubmV3Rm9sZGVyRGlhbG9nRGVzY3JpcHRpb24sXG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdHlwZTogJ2NvbXBvbmVudCcsXG4gICAgICAgIGNvbXBvbmVudDogTmV3Rm9sZGVyRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBmb2xkZXJzOiB0aGlzLmZvbGRlcnMsXG4gICAgICAgICAgbGFiZWxzOiB0aGlzLm1vZHVsYXJMYWJlbHMsXG4gICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgcGFyZW50SWQ6IGluaXRpYWxQYXJlbnRJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgbGFiZWw6IHRoaXMubW9kdWxhckxhYmVscy5uZXdGb2xkZXJEaWFsb2dDYW5jZWwsIHJvbGU6ICdzZWNvbmRhcnknLCBoYW5kbGVyOiByID0+IHIuY2xvc2UoZmFsc2UpIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm5ld0ZvbGRlckRpYWxvZ0NvbmZpcm0sXG4gICAgICAgICAgcm9sZTogJ3ByaW1hcnknLFxuICAgICAgICAgIGhhbmRsZXI6IHIgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IHIuZ2V0Q29tcG9uZW50SW5zdGFuY2U8TmV3Rm9sZGVyRGlhbG9nQ29tcG9uZW50PigpO1xuICAgICAgICAgICAgaWYgKCFpbnN0IHx8ICFpbnN0LmlzVmFsaWQpIHJldHVybiBmYWxzZTsgLy8ga2VlcCB0aGUgZGlhbG9nIG9wZW4gb24gaW52YWxpZCBzdWJtaXRcbiAgICAgICAgICAgIHIuY2xvc2UoeyBuYW1lOiAoaW5zdC5uYW1lIHx8ICcnKS50cmltKCksIHBhcmVudElkOiBpbnN0LnBhcmVudElkLCBjb2xvcjogaW5zdC5jb2xvciB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGJ1dHRvbkFsaWdubWVudDogJ3JpZ2h0JyxcbiAgICB9KTtcbiAgICByZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5mb2xkZXJDcmVhdGVkLmVtaXQoeyBwYXJlbnRJZDogcmVzdWx0LnBhcmVudElkLCBuYW1lOiByZXN1bHQubmFtZSwgY29sb3I6IHJlc3VsdC5jb2xvciB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRlbGV0ZUZvbGRlckRpYWxvZyhjdHg6IEZvbGRlckRlbGV0ZVJlcXVlc3RlZFBheWxvYWQpOiB2b2lkIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbjxhbnksIHsgc3RyYXRlZ3k6IEZvbGRlckRlbGV0ZVN0cmF0ZWd5IH0gfCBmYWxzZT4oe1xuICAgICAgdGl0bGU6IHRoaXMubW9kdWxhckxhYmVscy5kZWxldGVGb2xkZXJEaWFsb2dUaXRsZSxcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgY29udGVudDoge1xuICAgICAgICB0eXBlOiAnY29tcG9uZW50JyxcbiAgICAgICAgY29tcG9uZW50OiBEZWxldGVGb2xkZXJEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGZvbGRlck5hbWU6IGN0eC5uYW1lLFxuICAgICAgICAgIHRlc3RDb3VudDogY3R4LnRlc3RDb3VudCxcbiAgICAgICAgICBoYXNQYXJlbnQ6IGN0eC5oYXNQYXJlbnQsXG4gICAgICAgICAgbGFiZWxzOiB0aGlzLm1vZHVsYXJMYWJlbHMsXG4gICAgICAgICAgc3RyYXRlZ3k6IGN0eC5oYXNQYXJlbnQgPyAnbW92ZS10by1wYXJlbnQnIDogJ21vdmUtdG8tdW5vcmdhbmlzZWQnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLmRlbGV0ZUZvbGRlckRpYWxvZ0NhbmNlbCwgcm9sZTogJ3NlY29uZGFyeScsIGhhbmRsZXI6IHIgPT4gci5jbG9zZShmYWxzZSkgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMuZGVsZXRlRm9sZGVyRGlhbG9nQ29uZmlybSxcbiAgICAgICAgICByb2xlOiAnd2FybicsXG4gICAgICAgICAgaGFuZGxlcjogciA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0ID0gci5nZXRDb21wb25lbnRJbnN0YW5jZTxEZWxldGVGb2xkZXJEaWFsb2dDb21wb25lbnQ+KCk7XG4gICAgICAgICAgICByLmNsb3NlKGluc3QgPyB7IHN0cmF0ZWd5OiBpbnN0LnN0cmF0ZWd5IH0gOiBmYWxzZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBidXR0b25BbGlnbm1lbnQ6ICdyaWdodCcsXG4gICAgfSk7XG4gICAgcmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMuZm9sZGVyRGVsZXRlZC5lbWl0KHsgaWQ6IGN0eC5pZCwgc3RyYXRlZ3k6IHJlc3VsdC5zdHJhdGVneSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUm93LXJlb3JkZXIgaGFuZGxlcnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHN0YXJ0UmVvcmRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Jlb3JkZXJpbmcpIHJldHVybjtcbiAgICB0aGlzLnJlb3JkZXJTbmFwc2hvdCA9IFsuLi4odGhpcy5wYWdlZFJvd3MgfHwgW10pXTtcbiAgICB0aGlzLnJlb3JkZXJEcmFmdCA9IFsuLi4odGhpcy5wYWdlZFJvd3MgfHwgW10pXTtcbiAgICAvLyBQYXVzZSBhdXRvLXJlZnJlc2ggd2hpbGUgcmVvcmRlcmluZyDigJQgYXZvaWRzIHRoZSB0aW1lciBjbG9iYmVyaW5nIHRoZSBkcmFmdC5cbiAgICB0aGlzLnJlb3JkZXJTYXZlZEF1dG9SZWZyZXNoID0gdGhpcy5zZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWw7XG4gICAgaWYgKHRoaXMucmVvcmRlclNhdmVkQXV0b1JlZnJlc2ggPiAwKSB7XG4gICAgICB0aGlzLnNldHVwQXV0b1JlZnJlc2goMCk7XG4gICAgfVxuICAgIHRoaXMuaXNSZW9yZGVyaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlb3JkZXJBd2FpdGluZ1NhdmVGbGlwID0gZmFsc2U7XG4gICAgdGhpcy5yZW9yZGVyU3RhcnQuZW1pdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY2FuY2VsUmVvcmRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZW9yZGVyaW5nKSByZXR1cm47XG4gICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcGFnZSBvcmRlciBzbyB0aGUgdXNlciBzZWVzIHRoZSBwcmUtZHJhZyBzdGF0ZS5cbiAgICBpZiAodGhpcy5yZW9yZGVyU25hcHNob3QpIHtcbiAgICAgIHRoaXMucGFnZWRSb3dzID0gWy4uLnRoaXMucmVvcmRlclNuYXBzaG90XTtcbiAgICB9XG4gICAgdGhpcy5leGl0UmVvcmRlck1vZGUoKTtcbiAgICB0aGlzLnJlb3JkZXJDYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgc2F2ZVJlb3JkZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVvcmRlcmluZykgcmV0dXJuO1xuICAgIGNvbnN0IG9yZGVyZWQgPSB0aGlzLnJlb3JkZXJEcmFmdCA/IFsuLi50aGlzLnJlb3JkZXJEcmFmdF0gOiBbLi4uKHRoaXMucGFnZWRSb3dzIHx8IFtdKV07XG4gICAgdGhpcy5yZW9yZGVyQXdhaXRpbmdTYXZlRmxpcCA9IHRydWU7XG4gICAgdGhpcy5yZW9yZGVyU2F2ZS5lbWl0KHsgb3JkZXJlZEl0ZW1zOiBvcmRlcmVkIH0pO1xuICAgIC8vIElmIHRoZSBob3N0IG5ldmVyIGZsaXBzIGByZW9yZGVyU2F2aW5nYCAoZS5nLiBzeW5jaHJvbm91cyBuby1vcCksIGV4aXRcbiAgICAvLyBpbW1lZGlhdGVseSBzbyB0aGUgVUkgZG9lc24ndCBnZXQgc3R1Y2sgaW4gXCJTYXZpbmcuLi5cIiBzdGF0ZS5cbiAgICBpZiAoIXRoaXMucmVvcmRlclNhdmluZykge1xuICAgICAgLy8gR2l2ZSB0aGUgaG9zdCBhIG1pY3JvdGFzayB0byBmbGlwIGByZW9yZGVyU2F2aW5nYCB0byB0cnVlIOKAlCBpZiBpdFxuICAgICAgLy8gaGFzbid0LCBhc3N1bWUgbm8gYXN5bmMgd29yayBhbmQgZXhpdC5cbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yZW9yZGVyQXdhaXRpbmdTYXZlRmxpcCAmJiAhdGhpcy5yZW9yZGVyU2F2aW5nKSB7XG4gICAgICAgICAgdGhpcy5leGl0UmVvcmRlck1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25Sb3dSZW9yZGVyKGV2ZW50OiB7IHByZXZpb3VzSW5kZXg6IG51bWJlcjsgY3VycmVudEluZGV4OiBudW1iZXI7IG9yZGVyZWREYXRhOiBhbnlbXSB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVvcmRlcmluZykgcmV0dXJuO1xuICAgIHRoaXMucmVvcmRlckRyYWZ0ID0gWy4uLmV2ZW50Lm9yZGVyZWREYXRhXTtcbiAgICB0aGlzLnBhZ2VkUm93cyA9IHRoaXMucmVvcmRlckRyYWZ0O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGl0UmVvcmRlck1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Jlb3JkZXJpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlb3JkZXJTbmFwc2hvdCA9IG51bGw7XG4gICAgdGhpcy5yZW9yZGVyRHJhZnQgPSBudWxsO1xuICAgIHRoaXMucmVvcmRlckF3YWl0aW5nU2F2ZUZsaXAgPSBmYWxzZTtcbiAgICAvLyBSZXN0b3JlIHByZXZpb3VzbHktc2VsZWN0ZWQgYXV0by1yZWZyZXNoIGludGVydmFsIChpZiBhbnkpLlxuICAgIGlmICh0aGlzLnJlb3JkZXJTYXZlZEF1dG9SZWZyZXNoID4gMCkge1xuICAgICAgdGhpcy5zZXR1cEF1dG9SZWZyZXNoKHRoaXMucmVvcmRlclNhdmVkQXV0b1JlZnJlc2gpO1xuICAgICAgdGhpcy5yZW9yZGVyU2F2ZWRBdXRvUmVmcmVzaCA9IDA7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdy1kcmFnIHBheWxvYWQgYnVpbGRlciB1c2VkIGJ5IHRoZSBbY3FhUm93RHJhZ10gZGlyZWN0aXZlIHZpYSAoYnVpbGRQYXlsb2FkKS5cbiAgICovXG4gIGJ1aWxkUm93RHJhZ1BheWxvYWQgPSAocm93OiBhbnkpOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXM7XG4gICAgLy8gSWYgdGhlIGRyYWdnZWQgcm93IGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBkcmFnIHRoZSB3aG9sZSBzZWxlY3Rpb24uXG4gICAgY29uc3Qgcm93SWQgPSByb3c/LmlkO1xuICAgIGNvbnN0IGluU2VsZWN0aW9uID0gcm93SWQgIT0gbnVsbCAmJiBzZWxlY3RlZC5zb21lKHMgPT4gcz8uaWQgPT09IHJvd0lkKTtcbiAgICBjb25zdCBpZHMgPSAoaW5TZWxlY3Rpb24gPyBzZWxlY3RlZCA6IFtyb3ddKS5tYXAociA9PiByPy5pZCkuZmlsdGVyKHYgPT4gdiAhPSBudWxsKTtcbiAgICByZXR1cm4gaWRzO1xuICB9O1xufVxuIiwiPCEtLSBSZXVzYWJsZSBmb2xkZXItaWNvbiBjaGlwLiBSZW5kZXIgdmlhIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb2xkZXJJY29uQ2hpcFwiPjwvbmctY29udGFpbmVyPi4gLS0+XG48bmctdGVtcGxhdGUgI2ZvbGRlckljb25DaGlwPlxuICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy0xMCBjcWEtaC0xMCBjcWEtcm91bmRlZC1bMTBweF0gY3FhLWJnLW5ldXRyYWwtMTAwIGNxYS1zaHJpbmstMFwiPlxuICAgIDxzdmcgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE1XCIgdmlld0JveD1cIjAgMCAxNyAxNVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgPHBhdGggZD1cIk0xNS42Mzc1IDEyLjYzNzdDMTUuNjM3NSAxMy4wMzU1IDE1LjQ3OTQgMTMuNDE3MSAxNS4xOTgxIDEzLjY5ODRDMTQuOTE2OCAxMy45Nzk3IDE0LjUzNTMgMTQuMTM3NyAxNC4xMzc1IDE0LjEzNzdIMi4xMzc0NUMxLjczOTYzIDE0LjEzNzcgMS4zNTgxIDEzLjk3OTcgMS4wNzY3OSAxMy42OTg0QzAuNzk1NDg2IDEzLjQxNzEgMC42Mzc0NTEgMTMuMDM1NSAwLjYzNzQ1MSAxMi42Mzc3VjIuMTM3N0MwLjYzNzQ1MSAxLjczOTg3IDAuNzk1NDg2IDEuMzU4MzQgMS4wNzY3OSAxLjA3NzA0QzEuMzU4MSAwLjc5NTczMSAxLjczOTYzIDAuNjM3Njk1IDIuMTM3NDUgMC42Mzc2OTVINS44ODc0NUw3LjM4NzQ1IDIuODg3N0gxNC4xMzc1QzE0LjUzNTMgMi44ODc3IDE0LjkxNjggMy4wNDU3MyAxNS4xOTgxIDMuMzI3MDRDMTUuNDc5NCAzLjYwODM0IDE1LjYzNzUgMy45ODk4NyAxNS42Mzc1IDQuMzg3N1YxMi42Mzc3WlwiIHN0cm9rZT1cIiM2RDZENzRcIiBzdHJva2Utd2lkdGg9XCIxLjI3NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICA8L3N2Zz5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBSZXVzYWJsZSBcIitcIiBjaGlwIHVzZWQgYnkgdGhlIFwiTmV3IGZvbGRlclwiIHRpbGUuIC0tPlxuPG5nLXRlbXBsYXRlICNhZGRJY29uQ2hpcD5cbiAgPHNwYW4gY2xhc3M9XCJjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctMTAgY3FhLWgtMTAgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1iZy1uZXV0cmFsLTEwMCBjcWEtc2hyaW5rLTBcIj5cbiAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgIDxwYXRoIGQ9XCJNOCAzVjEzTTMgOEgxM1wiIHN0cm9rZT1cIiM2RDZENzRcIiBzdHJva2Utd2lkdGg9XCIxLjI3NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgPC9zdmc+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLXJlbGF0aXZlXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwiIXNob3dTZWFyY2hCYXIgPyAnY3FhLWp1c3RpZnktZW5kJyA6ICdjcWEtanVzdGlmeS1iZXR3ZWVuJ1wiIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC13cmFwIGNxYS1tYi0zXCI+XG4gICAgICA8Y3FhLXNlYXJjaC1iYXJcbiAgICAgICAgKm5nSWY9XCJzaG93U2VhcmNoQmFyXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgW3Nob3dDbGVhcl09XCJzaG93Q2xlYXJcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWFyY2gpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAoY2xlYXJlZCk9XCJjbGVhcmVkKClcIlxuICAgICAgPjwvY3FhLXNlYXJjaC1iYXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLWZsZXgtd3JhcFwiPlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgICAgICB2YXJpYW50PVwiZ3JleS1zb2xpZFwiXG4gICAgICAgIGljb249XCJvcGVuX2luX25ld1wiXG4gICAgICAgIFt0ZXh0XT1cImlzRXhwb3J0aW5nID8gJ0V4cG9ydGluZy4uLicgOiAnRXhwb3J0J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0V4cG9ydGluZ1wiXG4gICAgICAgIChjbGlja2VkKT1cImV4cG9ydENvZGVDbGljaygpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3sgaXNFeHBvcnRpbmcgPyAnRXhwb3J0aW5nLi4uJyA6ICdFeHBvcnQnIH19PC9zcGFuPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgXG4gICAgICA8IS0tIEV4cG9ydCBDb2RlIE1vZGFsIC0tPlxuICAgICAgPGNxYS1leHBvcnQtY29kZS1tb2RhbFxuICAgICAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgICAgICBbaXNPcGVuXT1cImlzRXhwb3J0TW9kYWxPcGVuXCJcbiAgICAgICAgW2Nhc2VzXT1cInNlbGVjdGVkQ2FzZXNGb3JFeHBvcnRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUV4cG9ydE1vZGFsKClcIlxuICAgICAgICAoZXhwb3J0KT1cIm9uRXhwb3J0TW9kYWxFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtZXhwb3J0LWNvZGUtbW9kYWw+XG4gICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkcm9wZG93blRlbXBsYXRlIG9mIG90aGVyRHJvcERvd25CdXR0b25zOyB0cmFja0J5OiB0cmFja0J5RHJvcGRvd25UZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93blRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlbGVjdERyb3Bkb3duVGVtcGxhdGUgb2Ygb3RoZXJTZWxlY3REcm9wRG93bkJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlTZWxlY3REcm9wZG93blRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdERyb3Bkb3duVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlckJ1dHRvblwiXG4gICAgICAgICAgdmFyaWFudD1cImdyZXktc29saWRcIlxuICAgICAgICAgIGljb249XCJhZGRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1Jlb3JkZXJpbmdcIlxuICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZUZpbHRlcigpXCJcbiAgICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgRmlsdGVyICAgICAgICAgIFxuICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJhcnJvd0NsYXNzZXNcIj5cbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy0yIGNxYS1oLTEgY3FhLWFic29sdXRlIGNxYS1sZWZ0LVs0cHhdIGNxYS10b3AtWzZweF1cIlxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDggNFwiXG4gICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk0wIDBMNCA0TDggMFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzBCMEIwQ1wiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zM1wiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICA8Y3FhLWNvbHVtbi12aXNpYmlsaXR5XG4gICAgICAgICAgKm5nSWY9XCJzaG93U2V0dGluZ3NCdXR0b25cIlxuICAgICAgICAgIFtjb2x1bW5zXT1cInZpc2liaWxpdHlDb2x1bW5zXCJcbiAgICAgICAgICBbY29sdW1uVmlzaWJpbGl0eV09XCJjb2x1bW5WaXNpYmlsaXR5XCJcbiAgICAgICAgICBbc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsXT1cInNlbGVjdGVkQXV0b1JlZnJlc2hJbnRlcnZhbFwiXG4gICAgICAgICAgKGNvbHVtblZpc2liaWxpdHlDaGFuZ2UpPVwib25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIChhdXRvUmVmcmVzaENoYW5nZSk9XCJvbkF1dG9SZWZyZXNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9jcWEtY29sdW1uLXZpc2liaWxpdHk+XG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93QXV0b1JlZnJlc2hCdXR0b25cIlxuICAgICAgICAgIHZhcmlhbnQ9XCJncmV5LXNvbGlkXCJcbiAgICAgICAgICBpY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiaGFuZGxlUmVmcmVzaENsaWNrKClcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidSZWZyZXNoJ1wiXG4gICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1Jlb3JkZXJpbmdcIlxuICAgICAgICA+PC9jcWEtYnV0dG9uPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b25UZW1wbGF0ZSBvZiBvdGhlckJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGNxYS1zZWdtZW50LWNvbnRyb2xcbiAgICAgICAgICAqbmdJZj1cInNob3dWaWV3TW9kZVRvZ2dsZVwiXG4gICAgICAgICAgc2l6ZT1cImxnXCJcbiAgICAgICAgICBbc2VnbWVudHNdPVwidmlld01vZGVTZWdtZW50c1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInZpZXdNb2RlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WaWV3TW9kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvY3FhLXNlZ21lbnQtY29udHJvbD5cbiAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dSZW9yZGVyQnV0dG9uICYmICFpc1Jlb3JkZXJpbmdcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgaWNvbj1cImRyYWdfaW5kaWNhdG9yXCJcbiAgICAgICAgICBbdGV4dF09XCJyZW9yZGVyTGFiZWxzLnJlb3JkZXJCdXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhcGFnZWRSb3dzIHx8IHBhZ2VkUm93cy5sZW5ndGggPT09IDAgfHwgaXNUYWJsZUxvYWRpbmcgfHwgaXNUYWJsZURhdGFMb2FkaW5nXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJzdGFydFJlb3JkZXIoKVwiXG4gICAgICAgID48L2NxYS1idXR0b24+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UmVvcmRlckJ1dHRvbiAmJiBpc1Jlb3JkZXJpbmdcIj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cInJlb3JkZXJMYWJlbHMuY2FuY2VsQnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZW9yZGVyU2F2aW5nXCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cImNhbmNlbFJlb3JkZXIoKVwiXG4gICAgICAgICAgPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICAgICAgICBbaWNvbl09XCJyZW9yZGVyU2F2aW5nID8gJ2hvdXJnbGFzc19lbXB0eScgOiAnJ1wiXG4gICAgICAgICAgICBbdGV4dF09XCJyZW9yZGVyU2F2aW5nID8gcmVvcmRlckxhYmVscy5zYXZpbmdCdXR0b24gOiByZW9yZGVyTGFiZWxzLmRvbmVCdXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlb3JkZXJTYXZpbmdcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwic2F2ZVJlb3JkZXIoKVwiXG4gICAgICAgICAgPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVvcmRlciBtb2RlIGJhbm5lciAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNSZW9yZGVyaW5nXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbWItMyBjcWEtcHgtMyBjcWEtcHktMiBjcWEtcm91bmRlZC1tZCBjcWEtYmctWyNGRkZCRUJdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0ZERTY4QV1cIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiM1wiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiM1wiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiMTNcIiBjeT1cIjNcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjhcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjEzXCIgY3k9XCI4XCIgcj1cIjEuNVwiIGZpbGw9XCIjOTI0MDBFXCI+PC9jaXJjbGU+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCIxM1wiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiMTNcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjEzXCIgY3k9XCIxM1wiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgPC9zdmc+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjOTI0MDBFXVwiPnt7IHJlb3JkZXJMYWJlbHMuYmFubmVyVGl0bGUgfX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjOTI0MDBFXVwiPnt7IHJlb3JkZXJMYWJlbHMuYmFubmVyRGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8Y3FhLXNlbGVjdGVkLWZpbHRlcnNcbiAgICAgIFtmaWx0ZXJBcHBsaWVkXT1cImZpbHRlckFwcGxpZWRcIlxuICAgICAgW2NoaXBzXT1cImNoaXBzXCJcbiAgICAgIChyZW1vdmVDaGlwKT1cIm9uUmVtb3ZlQ2hpcCgkZXZlbnQpXCJcbiAgICAgIChjbGVhckFsbCk9XCJvbkNsZWFyQWxsQ2hpcHMoKVwiXG4gICAgICAob25DbGVhckFsbCk9XCJvbkNsZWFyQWxsLmVtaXQoKVwiXG4gICAgPlxuICAgIDwvY3FhLXNlbGVjdGVkLWZpbHRlcnM+XG5cbiAgICA8Y3FhLWR5bmFtaWMtZmlsdGVyXG4gICAgICAqbmdJZj1cInNob3dGaWx0ZXJQYW5lbFwiXG4gICAgICBbY29uZmlnXT1cImZpbHRlckNvbmZpZ1wiXG4gICAgICBbbW9kZWxdPVwiZmlsdGVyTW9kZWxcIlxuICAgICAgW3Nob3dGaWx0ZXJQYW5lbF09XCJzaG93RmlsdGVyUGFuZWxcIlxuICAgICAgKGZpbHRlcnNDaGFuZ2VkKT1cIm9uRmlsdGVyc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAoZmlsdGVyc0FwcGxpZWQpPVwib25GaWx0ZXJzQXBwbGllZCgkZXZlbnQpXCJcbiAgICAgIChvbkFwcGx5RmlsdGVyQ2xpY2spPVwib25BcHBseUZpbHRlckNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAob25SZXNldEZpbHRlckNsaWNrKT1cImhhbmRsZVJlc2V0RmlsdGVyQ2xpY2soKVwiXG4gICAgPlxuICAgIDwvY3FhLWR5bmFtaWMtZmlsdGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdHJldGNoIGNxYS1nYXAtMyBjcWEtbWluLWgtMFwiPlxuICAgICAgPCEtLSBTaWRlYmFyIChvbmx5IHNob3duIGluIG1vZHVsYXIgdmlldykgLS0+XG4gICAgICA8Y3FhLWZvbGRlci1zaWRlYmFyXG4gICAgICAgICpuZ0lmPVwiaXNNb2R1bGFyVmlldyAmJiBtb2R1bGFyQ29uZmlnLnNob3dTaWRlYmFyXCJcbiAgICAgICAgW2ZvbGRlcnNdPVwiZm9sZGVyc1wiXG4gICAgICAgIFtzZWxlY3RlZEZvbGRlcklkXT1cInNlbGVjdGVkRm9sZGVySWRcIlxuICAgICAgICBbZXhwYW5kZWRGb2xkZXJJZHNdPVwiZXhwYW5kZWRGb2xkZXJJZHNcIlxuICAgICAgICBbdW5vcmdhbmlzZWRDb3VudF09XCJ1bm9yZ2FuaXNlZENvdW50XCJcbiAgICAgICAgW2FsbG93Q3JlYXRlXT1cIm1vZHVsYXJDb25maWcuYWxsb3dDcmVhdGVGb2xkZXJcIlxuICAgICAgICBbYWxsb3dSZW5hbWVdPVwibW9kdWxhckNvbmZpZy5hbGxvd1JlbmFtZUZvbGRlclwiXG4gICAgICAgIFthbGxvd0RlbGV0ZV09XCJtb2R1bGFyQ29uZmlnLmFsbG93RGVsZXRlRm9sZGVyXCJcbiAgICAgICAgW2FsbG93RHJvcF09XCJtb2R1bGFyQ29uZmlnLmFsbG93VGVzdERyYWdEcm9wXCJcbiAgICAgICAgW3Nob3dDb3VudHNdPVwibW9kdWxhckNvbmZpZy5zaG93Q291bnRzXCJcbiAgICAgICAgW2NvbGxhcHNlZF09XCJzaWRlYmFyQ29sbGFwc2VkXCJcbiAgICAgICAgW2xhYmVsc109XCJtb2R1bGFyTGFiZWxzXCJcbiAgICAgICAgKGZvbGRlclNlbGVjdGVkKT1cIm9uRm9sZGVyU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmb2xkZXJFeHBhbnNpb25Ub2dnbGVkKT1cIm9uRm9sZGVyRXhwYW5zaW9uVG9nZ2xlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZvbGRlckNyZWF0ZWQpPVwib25Gb2xkZXJDcmVhdGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyQ3JlYXRlUmVxdWVzdGVkKT1cIm9uRm9sZGVyQ3JlYXRlUmVxdWVzdGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyUmVuYW1lZCk9XCJvbkZvbGRlclJlbmFtZWQoJGV2ZW50KVwiXG4gICAgICAgIChmb2xkZXJEZWxldGVkKT1cIm9uRm9sZGVyRGVsZXRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZvbGRlck1vdmVSZXF1ZXN0ZWQpPVwib25Gb2xkZXJNb3ZlUmVxdWVzdGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkKT1cIm9uRm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkKCRldmVudClcIlxuICAgICAgICAodGVzdHNEcm9wcGVkKT1cIm9uVGVzdHNEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyRHJvcHBlZCk9XCJvbkZvbGRlckRyb3BwZWQoJGV2ZW50KVwiXG4gICAgICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwib25TaWRlYmFyQ29sbGFwc2VkQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvY3FhLWZvbGRlci1zaWRlYmFyPlxuXG4gICAgICA8IS0tIFJpZ2h0IHBhbmUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgPCEtLSBCcmVhZGNydW1iIChtb2R1bGFyIHZpZXcsIGZvbGRlciBkcmlsbGVkLWluKSAtLT5cbiAgICAgICAgPG5hdlxuICAgICAgICAgICpuZ0lmPVwiaXNNb2R1bGFyVmlldyAmJiBtb2R1bGFyQ29uZmlnLnNob3dCcmVhZGNydW1iICYmICFpc1Jvb3RWaWV3XCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRm9sZGVyIHBhdGhcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC02MDAgY3FhLW1iLTNcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJob3ZlcjpjcWEtdGV4dC1pbmRpZ28tNjAwXCIgKGNsaWNrKT1cIm9uRm9sZGVyU2VsZWN0ZWQobnVsbClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS1hbGlnbi1taWRkbGVcIiBzdHlsZT1cImZvbnQtc2l6ZToxNnB4O3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHhcIj5mb2xkZXJfb3BlbjwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hbGlnbi1taWRkbGUgY3FhLW1sLTFcIj57eyBtb2R1bGFyTGFiZWxzLmFsbEZvbGRlcnMgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3J1bWIgb2YgYnJlYWRjcnVtYlRyYWlsOyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtbmV1dHJhbC00MDBcIj4vPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJob3ZlcjpjcWEtdGV4dC1pbmRpZ28tNjAwXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNxYS10ZXh0LW5ldXRyYWwtOTAwXT1cImxhc3RcIlxuICAgICAgICAgICAgICBbY2xhc3MuY3FhLWZvbnQtc2VtaWJvbGRdPVwibGFzdFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsYXN0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiFsYXN0ICYmIG9uRm9sZGVyU2VsZWN0ZWQoY3J1bWIuaWQpXCJcbiAgICAgICAgICAgID57eyBjcnVtYi5uYW1lIH19PC9idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmF2PlxuXG4gICAgICAgIDwhLS0gRm9sZGVyIGdyaWQ6IG1vZHVsYXIgKyByb290IHZpZXcgLS0+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgKm5nSWY9XCJpc01vZHVsYXJWaWV3ICYmIGlzUm9vdFZpZXcgJiYgbW9kdWxhckNvbmZpZy5zaG93Rm9sZGVyR3JpZCAmJiByb290Rm9sZGVyVGlsZXMubGVuZ3RoXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1tYi00XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbWItMlwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtbmV1dHJhbC02MDBcIiBzdHlsZT1cImZvbnQtc2l6ZToxNnB4O3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHhcIj5mb2xkZXI8L21hdC1pY29uPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtbmV1dHJhbC04MDBcIj57eyBtb2R1bGFyTGFiZWxzLm9yZ2FuaXNlZCB9fTwvaDM+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LW5ldXRyYWwtNTAwXCI+XG4gICAgICAgICAgICAgIHt7IHJvb3RGb2xkZXJUaWxlcy5sZW5ndGggPT09IDEgPyBtb2R1bGFyTGFiZWxzLmZvbGRlcnNDb3VudFNpbmd1bGFyIDogbW9kdWxhckxhYmVscy5mb2xkZXJzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJycgKyByb290Rm9sZGVyVGlsZXMubGVuZ3RoKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1ub3dyYXAgY3FhLWdhcC0zIGNxYS1vdmVyZmxvdy14LWF1dG8gY3FhLXNjcm9sbGJhci10aGluIGNxYS1wYi0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmIG9mIHJvb3RGb2xkZXJUaWxlc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbY3FhRm9sZGVyRHJvcF09XCJmLmlkXCJcbiAgICAgICAgICAgICAgW2Ryb3BFbmFibGVkXT1cIm1vZHVsYXJDb25maWcuYWxsb3dUZXN0RHJhZ0Ryb3BcIlxuICAgICAgICAgICAgICAodGVzdHNEcm9wcGVkKT1cIm9uVGVzdHNEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb2xkZXJTZWxlY3RlZChmLmlkKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXNocmluay0wIGNxYS13LVsyNDBweF0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMyBjcWEtdGV4dC1sZWZ0IGNxYS1wLTMgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bMC41cHhdIGNxYS1ib3JkZXItWyNFMkUyRTNdIGNxYS1iZy13aGl0ZSBob3ZlcjpjcWEtYm9yZGVyLVsjRDhEOUZDXSBob3ZlcjpjcWEtc2hhZG93LXNtIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb2xkZXJJY29uQ2hpcFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtYmFzZSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1uZXV0cmFsLTkwMCBjcWEtdHJ1bmNhdGUgY3FhLWxlYWRpbmctdGlnaHRcIj57eyBmLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1vZHVsYXJDb25maWcuc2hvd0NvdW50c1wiIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC01MDAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IChmLmNvdW50ID8/IDApID09PSAxID8gbW9kdWxhckxhYmVscy50ZXN0c0NvdW50U2luZ3VsYXIgOiBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJycgKyAoZi5jb3VudCA/PyAwKSkgfX08bmctY29udGFpbmVyICpuZ0lmPVwiZi5jaGlsZHJlbj8ubGVuZ3RoXCI+IMK3IHt7IGYuY2hpbGRyZW4hLmxlbmd0aCA9PT0gMSA/IG1vZHVsYXJMYWJlbHMub25lU3ViZm9sZGVyIDogbW9kdWxhckxhYmVscy5zdWJmb2xkZXJzQ291bnQucmVwbGFjZSgne259JywgJycgKyBmLmNoaWxkcmVuIS5sZW5ndGgpIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1uZXV0cmFsLTQwMCBjcWEtc2hyaW5rLTBcIiBzdHlsZT1cImZvbnQtc2l6ZToyMHB4O3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHhcIj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIFwiKyBOZXcgZm9sZGVyXCIgdGlsZSAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJtb2R1bGFyQ29uZmlnLmFsbG93Q3JlYXRlRm9sZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkZvbGRlckNyZWF0ZVJlcXVlc3RlZCh7IHBhcmVudElkOiBudWxsIH0pXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtc2hyaW5rLTAgY3FhLXctWzI0MHB4XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtdGV4dC1sZWZ0IGNxYS1wLTMgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bMC41cHhdIGNxYS1ib3JkZXItWyNFMkUyRTNdIGNxYS1iZy1uZXV0cmFsLTUwIGhvdmVyOmNxYS1ib3JkZXItWyNEOEQ5RkNdIGhvdmVyOmNxYS1iZy13aGl0ZSBjcWEtdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWRkSWNvbkNoaXBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtYmFzZSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1uZXV0cmFsLTYwMCBjcWEtdHJ1bmNhdGUgY3FhLWxlYWRpbmctdGlnaHRcIj57eyBtb2R1bGFyTGFiZWxzLm5ld0ZvbGRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LW5ldXRyYWwtNDAwXCI+e3sgbW9kdWxhckxhYmVscy50ZXN0c0NvdW50UGx1cmFsLnJlcGxhY2UoJ3tufScsICcwJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tIFN1YmZvbGRlciBzZWN0aW9uOiBtb2R1bGFyICsgZm9sZGVyIHZpZXcuIFNob3duIHdoZW5ldmVyIGRyaWxsZWQgaW4gKGV2ZW4gaWYgbm8gc3ViZm9sZGVycywgc28gdGhlIFwiKyBOZXcgZm9sZGVyXCIgdGlsZSByZW1haW5zIHJlYWNoYWJsZSkuIC0tPlxuICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICpuZ0lmPVwiaXNNb2R1bGFyVmlldyAmJiAhaXNSb290VmlldyAmJiBtb2R1bGFyQ29uZmlnLnNob3dTdWJmb2xkZXJTZWN0aW9uICYmIHN1YmZvbGRlclRpbGVzLmxlbmd0aFwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtbWItNFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3ViZm9sZGVyVGlsZXMubGVuZ3RoIHx8IG1vZHVsYXJDb25maWcuYWxsb3dDcmVhdGVGb2xkZXJcIiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LW5ldXRyYWwtNjAwIGNxYS1tYi0yXCI+XG4gICAgICAgICAgICB7eyBtb2R1bGFyTGFiZWxzLnN1YmZvbGRlcnNJbiB9fSB7eyBicmVhZGNydW1iVHJhaWwubGVuZ3RoID8gYnJlYWRjcnVtYlRyYWlsW2JyZWFkY3J1bWJUcmFpbC5sZW5ndGggLSAxXS5uYW1lIDogJycgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtbm93cmFwIGNxYS1nYXAtMyBjcWEtb3ZlcmZsb3cteC1hdXRvIGNxYS1zY3JvbGxiYXItdGhpbiBjcWEtcGItMlwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZiBvZiBzdWJmb2xkZXJUaWxlc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbY3FhRm9sZGVyRHJvcF09XCJmLmlkXCJcbiAgICAgICAgICAgICAgW2Ryb3BFbmFibGVkXT1cIm1vZHVsYXJDb25maWcuYWxsb3dUZXN0RHJhZ0Ryb3BcIlxuICAgICAgICAgICAgICAodGVzdHNEcm9wcGVkKT1cIm9uVGVzdHNEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb2xkZXJTZWxlY3RlZChmLmlkKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXNocmluay0wIGNxYS13LVsyNDBweF0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMyBjcWEtdGV4dC1sZWZ0IGNxYS1wLTMgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bMC41cHhdIGNxYS1ib3JkZXItWyNFMkUyRTNdIGNxYS1iZy13aGl0ZSBob3ZlcjpjcWEtYm9yZGVyLVsjRDhEOUZDXSBob3ZlcjpjcWEtc2hhZG93LXNtIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb2xkZXJJY29uQ2hpcFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtYmFzZSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1uZXV0cmFsLTkwMCBjcWEtdHJ1bmNhdGUgY3FhLWxlYWRpbmctdGlnaHRcIj57eyBmLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1vZHVsYXJDb25maWcuc2hvd0NvdW50c1wiIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC01MDAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IChmLmNvdW50ID8/IDApID09PSAxID8gbW9kdWxhckxhYmVscy50ZXN0c0NvdW50U2luZ3VsYXIgOiBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJycgKyAoZi5jb3VudCA/PyAwKSkgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LW5ldXRyYWwtNDAwIGNxYS1zaHJpbmstMFwiIHN0eWxlPVwiZm9udC1zaXplOjIwcHg7d2lkdGg6MjBweDtoZWlnaHQ6MjBweFwiPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDwhLS0gXCIrIE5ldyBmb2xkZXJcIiB0aWxlIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIm1vZHVsYXJDb25maWcuYWxsb3dDcmVhdGVGb2xkZXJcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9sZGVyQ3JlYXRlUmVxdWVzdGVkKHsgcGFyZW50SWQ6IHNlbGVjdGVkRm9sZGVySWQgfSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1zaHJpbmstMCBjcWEtdy1bMjQwcHhdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS10ZXh0LWxlZnQgY3FhLXAtMyBjcWEtcm91bmRlZC1bMTBweF0gY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVswLjVweF0gY3FhLWJvcmRlci1bI0UyRTJFM10gY3FhLWJnLW5ldXRyYWwtNTAgaG92ZXI6Y3FhLWJvcmRlci1bI0Q4RDlGQ10gaG92ZXI6Y3FhLWJnLXdoaXRlIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRJY29uQ2hpcFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1taW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1iYXNlIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LW5ldXRyYWwtNjAwIGNxYS10cnVuY2F0ZSBjcWEtbGVhZGluZy10aWdodFwiPnt7IG1vZHVsYXJMYWJlbHMubmV3Rm9sZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC00MDBcIj57eyBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJzAnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwhLS0gRm9sZGVyIHBhbmVsIGhlYWRlciBhYm92ZSB0aGUgdGFibGU6IFwiSG90ZWwgU2VhcmNoICgzKVwiICsgQ2xlYXIgZmlsdGVyIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJpc01vZHVsYXJWaWV3ICYmICFpc1Jvb3RWaWV3ICYmIG1vZHVsYXJDb25maWcuc2hvd1Vub3JnYW5pc2VkU2VjdGlvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtbWItMSBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXB4LTQgY3FhLXB5LTMgY3FhLXJvdW5kZWQtdC1sZyBjcWEtYmctaW5kaWdvLTUwIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1pbmRpZ28tMTAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtaW5kaWdvLTUwMFwiIHN0eWxlPVwiZm9udC1zaXplOjE4cHg7d2lkdGg6MThweDtoZWlnaHQ6MThweFwiPmZvbGRlcl9vcGVuPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtaW5kaWdvLTcwMFwiPlxuICAgICAgICAgICAgICB7eyBjdXJyZW50Rm9sZGVyTm9kZT8ubmFtZSB9fSAoe3sgY3VycmVudEZvbGRlckRpcmVjdENvdW50IH19KVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtcHgtMyBjcWEtcHktMSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtaW5kaWdvLTcwMCBjcWEtYmctd2hpdGUgY3FhLWJvcmRlciBjcWEtYm9yZGVyLWluZGlnby0yMDAgY3FhLXJvdW5kZWQgaG92ZXI6Y3FhLWJnLWluZGlnby01MFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Gb2xkZXJTZWxlY3RlZChudWxsKVwiXG4gICAgICAgICAgPnt7IG1vZHVsYXJMYWJlbHMuY2xlYXJGaWx0ZXIgfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBVbm9yZ2FuaXNlZCBzZWN0aW9uIGhlYWRlciBhdCByb290IHZpZXcgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImlzTW9kdWxhclZpZXcgJiYgaXNSb290VmlldyAmJiBtb2R1bGFyQ29uZmlnLnNob3dVbm9yZ2FuaXNlZFNlY3Rpb25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1iLTIgY3FhLW10LTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtbmV1dHJhbC02MDBcIiBzdHlsZT1cImZvbnQtc2l6ZToxNnB4O3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHhcIj5pbmJveDwvbWF0LWljb24+XG4gICAgICAgICAgPGgzIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtbmV1dHJhbC04MDBcIj57eyBtb2R1bGFyTGFiZWxzLnVub3JnYW5pc2VkIH19PC9oMz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LW5ldXRyYWwtNTAwXCI+XG4gICAgICAgICAgICB7eyB1bm9yZ2FuaXNlZENvdW50ID09PSAxID8gbW9kdWxhckxhYmVscy50ZXN0c0NvdW50U2luZ3VsYXIgOiBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJycgKyB1bm9yZ2FuaXNlZENvdW50KSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBUYWJsZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1yb3VuZGVkLVs3cHhdIGNxYS1vdmVyZmxvdy1oaWRkZW4gY3FhLWJvcmRlci10IGNxYS1ib3JkZXItbCBjcWEtYm9yZGVyLXIgY3FhLWJvcmRlci1ncmV5LTIwMCBjcWEtcmVsYXRpdmUgY3FhLW92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoaXNUYWJsZUxvYWRpbmcgfHwgaXNUYWJsZURhdGFMb2FkaW5nKSB8fCAoIWVmZmVjdGl2ZUlzRW1wdHlTdGF0ZSAmJiBwYWdlZFJvd3MgJiYgcGFnZWRSb3dzLmxlbmd0aCA+IDApOyBlbHNlIHN0b3J5RW1wdHlUcGxcIj5cbiAgICAgICAgICAgIDxhcHAtZHluYW1pYy10YWJsZVxuICAgICAgICAgICAgICBbY29sdW1uc109XCJjb21wdXRlZENvbHVtbnNcIlxuICAgICAgICAgICAgICBbZGF0YV09XCJwYWdlZFJvd3NcIlxuICAgICAgICAgICAgICBbcm93U2VsZWN0YWJsZV09XCJyb3dTZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgW2VuYWJsZUxvY2FsU29ydF09XCJlbmFibGVMb2NhbFNvcnQgJiYgIWlzUmVvcmRlcmluZ1wiXG4gICAgICAgICAgICAgIFtpc1RhYmxlTG9hZGluZ109XCJpc1RhYmxlTG9hZGluZ1wiXG4gICAgICAgICAgICAgIFtpc1RhYmxlRGF0YUxvYWRpbmddPVwiaXNUYWJsZURhdGFMb2FkaW5nXCJcbiAgICAgICAgICAgICAgW2NlbGxKc29uUGF0aEdldHRlcl09XCJjZWxsSnNvblBhdGhHZXR0ZXJcIlxuICAgICAgICAgICAgICBbb25Kc29uUGF0aENvcGllZEhhbmRsZXJdPVwib25Kc29uUGF0aENvcGllZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbZW5hYmxlUm93UmVvcmRlcl09XCJpc1Jlb3JkZXJpbmdcIlxuICAgICAgICAgICAgICAocm93UmVvcmRlcik9XCJvblJvd1Jlb3JkZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlUYWJsZVRwbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1weS04XCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaWxsdXN0cmF0aW9ucy9lbXB0eS1zdGF0ZS5zdmdcIiBhbHQ9XCJObyBkYXRhXCIgY2xhc3M9XCJjcWEtdy0zMiBjcWEtaC0zMiBjcWEtbWItNFwiIC8+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1sZyBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbWItMlwiPk5vIHRlc3QgY2FzZXM8L2gzPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1uZXV0cmFsLTUwMCBjcWEtbWItNFwiPlRyeSBhZGp1c3RpbmcgZmlsdGVycyBvciBjcmVhdGUgYSBuZXcgdGVzdCBjYXNlLjwvcD5cbiAgICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiAoY2xpY2tlZCk9XCJ0b2dnbGVGaWx0ZXIoKVwiPlNob3cgRmlsdGVyczwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYXBwLWR5bmFtaWMtdGFibGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3N0b3J5RW1wdHlUcGw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXAtNiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGNxYS1lbXB0eS1zdGF0ZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZWZmZWN0aXZlSXNFbXB0eVN0YXRlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZWZmZWN0aXZlRW1wdHlTdGF0ZUNvbmZpZy50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImVmZmVjdGl2ZUVtcHR5U3RhdGVDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtpbWFnZVVybF09XCJlZmZlY3RpdmVFbXB0eVN0YXRlQ29uZmlnLmltYWdlVXJsXCJcbiAgICAgICAgICAgICAgICBbYWN0aW9uc109XCJlZmZlY3RpdmVFbXB0eVN0YXRlQ29uZmlnLmFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkVtcHR5QWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvY3FhLWVtcHR5LXN0YXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGNxYS1wYWdpbmF0aW9uXG4gICAgICAgICAgW3RvdGFsRWxlbWVudHNdPVwic2VydmVyU2lkZVBhZ2luYXRpb24gPyB0b3RhbEVsZW1lbnRzIDogZmlsdGVyZWRSb3dzLmxlbmd0aFwiXG4gICAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuICAgICAgICAgIFtwYWdlU2l6ZU1lbnVEaXJlY3Rpb25dPVwicGFnZVNpemVNZW51RGlyZWN0aW9uXCJcbiAgICAgICAgICBbcGFnZUl0ZW1Db3VudF09XCJwYWdlZFJvd3MubGVuZ3RoXCJcbiAgICAgICAgICAocGFnaW5hdGUpPVwib25QYWdpbmF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2NxYS1wYWdpbmF0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJldXNlZCBidWxrIGFjdGlvbiB0b29sYmFyIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJhbnlSb3dTZWxlY3RlZCAmJiBtb2R1bGFyQ29uZmlnLmFsbG93QnVsa1NlbGVjdGlvbiAmJiAhaXNSZW9yZGVyaW5nXCIgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLWJvdHRvbS1bMTguNzVweF0gY3FhLWxlZnQtWzUwJV0gY3FhLXRyYW5zbGF0ZS14LVstNTAlXSBjcWEtdy1mdWxsIGxnOmNxYS1tYXgtdy1bNjglXSBjcWEtc206bWF4LXctWzc1JV0gY3FhLW1heC13LVs5MCVdIGNxYS16LVsxXVwiPlxuICAgICAgPGNxYS10YWJsZS1hY3Rpb24tdG9vbGJhclxuICAgICAgICBbc2VsZWN0ZWRJdGVtc109XCJzZWxlY3RlZEl0ZW1zICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSXRlbXMgOiBjdXJyZW50U2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgIFthY3Rpb25zXT1cImVmZmVjdGl2ZUJ1bGtBY3Rpb25zXCJcbiAgICAgICAgW3Nob3dTZWxlY3RBbGxdPVwic2hvd1NlbGVjdEFsbEluVG9vbGJhclwiXG4gICAgICAgIFthbGxTZWxlY3RlZF09XCJhbGxTZWxlY3RlZEluVG9vbGJhclwiXG4gICAgICAgIFtzaG93RGlzbWlzc109XCJzaG93RGlzbWlzc0luVG9vbGJhclwiXG4gICAgICAgIChhY3Rpb25DbGljayk9XCJvbkJ1bGtBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwib25CdWxrU2VsZWN0QWxsKCRldmVudClcIlxuICAgICAgICAoZGlzbWlzcyk9XCJvbkJ1bGtEaXNtaXNzKClcIlxuICAgICAgPjwvY3FhLXRhYmxlLWFjdGlvbi10b29sYmFyPlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==