@sumaris-net/ngx-components 1.8.1 → 1.9.2

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.
Files changed (34) hide show
  1. package/bundles/sumaris-net.ngx-components.umd.js +208 -197
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +1 -1
  4. package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
  5. package/doc/changelog.md +5 -1
  6. package/esm2015/public_api.js +2 -1
  7. package/esm2015/src/app/admin/users/list/users.js +5 -22
  8. package/esm2015/src/app/core/home/home.js +3 -3
  9. package/esm2015/src/app/core/register/confirm/confirm.js +1 -1
  10. package/esm2015/src/app/core/services/account.service.js +38 -27
  11. package/esm2015/src/app/core/services/local-settings.service.js +18 -14
  12. package/esm2015/src/app/core/services/model/settings.model.js +1 -1
  13. package/esm2015/src/app/core/services/platform.service.js +35 -31
  14. package/esm2015/src/app/core/table/memory-table.class.js +2 -7
  15. package/esm2015/src/app/core/table/table.class.js +21 -24
  16. package/esm2015/src/app/shared/directives/autofocus.directive.js +15 -24
  17. package/esm2015/src/app/shared/platforms.js +36 -0
  18. package/esm2015/src/app/shared/services/progress-bar.service.js +1 -1
  19. package/esm2015/src/app/social/list/user-events.table.js +3 -8
  20. package/fesm2015/sumaris-net.ngx-components.js +162 -136
  21. package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
  22. package/package.json +1 -1
  23. package/public_api.d.ts +1 -0
  24. package/src/app/admin/users/list/users.d.ts +1 -12
  25. package/src/app/core/services/account.service.d.ts +2 -0
  26. package/src/app/core/services/local-settings.service.d.ts +0 -2
  27. package/src/app/core/services/model/settings.model.d.ts +0 -1
  28. package/src/app/core/services/platform.service.d.ts +8 -5
  29. package/src/app/core/table/memory-table.class.d.ts +0 -1
  30. package/src/app/core/table/table.class.d.ts +8 -10
  31. package/src/app/shared/directives/autofocus.directive.d.ts +4 -5
  32. package/src/app/shared/platforms.d.ts +13 -0
  33. package/src/app/social/list/user-events.table.d.ts +0 -1
  34. package/sumaris-net.ngx-components.metadata.json +1 -1
@@ -37,13 +37,7 @@ export class CellValueChangeListener {
37
37
  // @dynamic
38
38
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
39
39
  export class AppTable {
40
- constructor(route, router, platform, location, modalCtrl, settings, columns, _dataSource, _filter, injector) {
41
- this.route = route;
42
- this.router = router;
43
- this.platform = platform;
44
- this.location = location;
45
- this.modalCtrl = modalCtrl;
46
- this.settings = settings;
40
+ constructor(injector, columns, _dataSource, _filter) {
47
41
  this.columns = columns;
48
42
  this._dataSource = _dataSource;
49
43
  this._filter = _filter;
@@ -86,13 +80,19 @@ export class AppTable {
86
80
  this.onDirty = new EventEmitter();
87
81
  this.onError = new EventEmitter();
88
82
  this._paginator = null;
89
- this.mobile = this.platform.is('mobile');
90
- this.translate = injector === null || injector === void 0 ? void 0 : injector.get(TranslateService);
91
- this.formErrorAdapter = injector === null || injector === void 0 ? void 0 : injector.get(FormErrorTranslator);
92
- this.alertCtrl = injector === null || injector === void 0 ? void 0 : injector.get(AlertController);
93
- this.toastController = injector === null || injector === void 0 ? void 0 : injector.get(ToastController);
83
+ this.route = injector.get(ActivatedRoute);
84
+ this.router = injector.get(Router);
85
+ this.location = injector.get(Location);
86
+ this.settings = injector.get(LocalSettingsService);
87
+ this.translate = injector.get(TranslateService);
88
+ this.modalCtrl = injector.get(ModalController);
89
+ this.alertCtrl = injector.get(AlertController);
90
+ this.toastController = injector.get(ToastController);
91
+ this.formErrorAdapter = injector.get(FormErrorTranslator);
92
+ this.mobile = this.settings.mobile;
93
+ // Autocomplete fields
94
94
  this._autocompleteConfigHolder = new MatAutocompleteConfigHolder({
95
- getUserAttributes: (a, b) => settings.getFieldDisplayAttributes(a, b)
95
+ getUserAttributes: (a, b) => this.settings.getFieldDisplayAttributes(a, b)
96
96
  });
97
97
  this.autocompleteFields = this._autocompleteConfigHolder.fields;
98
98
  }
@@ -1254,9 +1254,12 @@ export class AppTable {
1254
1254
  return (this.i18nColumnPrefix || '') + changeCaseToUnderscore(columnName).toUpperCase();
1255
1255
  }
1256
1256
  generateTableId() {
1257
- return this.location.path(true).replace(/[?].*$/g, '').replace(/\/[\d]+/g, '_id') + '_' + this.constructor.name;
1257
+ const id = this.location.path(true)
1258
+ .replace(/[?].*$/g, '')
1259
+ .replace(/\/[\d]+/g, '_id')
1260
+ + '_' + this.constructor.name;
1258
1261
  //if (this.debug) console.debug("[table] id = " + id);
1259
- //return id;
1262
+ return id;
1260
1263
  }
1261
1264
  addRowToTable(insertAt) {
1262
1265
  return __awaiter(this, void 0, void 0, function* () {
@@ -1523,16 +1526,10 @@ AppTable.decorators = [
1523
1526
  { type: Directive }
1524
1527
  ];
1525
1528
  AppTable.ctorParameters = () => [
1526
- { type: ActivatedRoute },
1527
- { type: Router },
1528
- { type: undefined },
1529
- { type: Location },
1530
- { type: ModalController },
1531
- { type: LocalSettingsService },
1529
+ { type: Injector },
1532
1530
  { type: Array },
1533
1531
  { type: EntitiesTableDataSource },
1534
- { type: undefined },
1535
- { type: Injector }
1532
+ { type: undefined }
1536
1533
  ];
1537
1534
  AppTable.propDecorators = {
1538
1535
  settingsId: [{ type: Input }],
@@ -1577,4 +1574,4 @@ AppTable.propDecorators = {
1577
1574
  childPaginator: [{ type: ViewChild, args: [MatPaginator, { static: false },] }],
1578
1575
  sort: [{ type: ViewChild, args: [MatSort, { static: false },] }]
1579
1576
  };
1580
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLHdCQUF3QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwSixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFZLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFjLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENB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OEJBQ0wsS0FBSztxQ0FDTCxLQUFLOzBCQUdMLEtBQUs7eUJBVUwsS0FBSztxQkFRTCxLQUFLO3dCQVlMLE1BQU07d0JBQ04sTUFBTTt1QkFDTixNQUFNO2dDQUNOLE1BQU07cUNBQ04sTUFBTTtrQ0FDTixNQUFNO2lDQUNOLE1BQU07aUNBQ04sTUFBTTsyQkFDTixNQUFNO2lDQUNOLE1BQU07cUJBQ04sTUFBTTtzQkFDTixNQUFNO3NCQUNOLE1BQU07dUJBaUNOLEtBQUs7d0JBZ0pMLEtBQUs7b0JBUUwsU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7NkJBQ25DLFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO21CQUN2QyxTQUFTLFNBQUMsT0FBTyxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNvcnQsIE1hdFNvcnRhYmxlLCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgRU1QVFksIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYWJsZUVsZW1lbnQgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgRW50aXRpZXNUYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuL2VudGl0aWVzLXRhYmxlLWRhdGFzb3VyY2UuY2xhc3MnO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRW50aXR5VXRpbHMsIElFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIsIFBsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbHVtbkl0ZW0sIFRhYmxlU2VsZWN0Q29sdW1uc0NvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtc2VsZWN0LWNvbHVtbnMuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEVycm9yQ29kZXMgfSBmcm9tICcuLi9zZXJ2aWNlcy9lcnJvcnMnO1xuaW1wb3J0IHsgQXBwRm9ybVV0aWxzLCBJQXBwRm9ybSwgT25SZWFkeSB9IGZyb20gJy4uL2Zvcm0vZm9ybS51dGlscyc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXIsIE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9ucywgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBDb21wbGV0YWJsZUV2ZW50LCBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyLCBlbWl0UHJvbWlzZUV2ZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2V2ZW50cyc7XG5pbXBvcnQgeyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlLCBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdE5pbCwgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmaXJzdEZhbHNlUHJvbWlzZSwgZmlyc3RUcnVlUHJvbWlzZSwgV2FpdEZvck9wdGlvbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHsgU2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0cyc7XG5pbXBvcnQgeyBBbGVydHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWxlcnRzJztcbmltcG9ydCB7IENka0NvbHVtbkRlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XG5pbXBvcnQgeyBMb2FkUmVzdWx0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEZvcm1FcnJvclRyYW5zbGF0b3IsIEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zLCBJRm9ybUNvbnRyb2xQYXRoVHJhbnNsYXRvciB9IGZyb20gJy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvZm9ybS1lcnJvci1hZGFwdGVyLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyA9ICdkaXNwbGF5Q29sdW1ucyc7XG5leHBvcnQgY29uc3QgU0VUVElOR1NfU09SVEVEX0NPTFVNTiA9ICdzb3J0ZWRDb2x1bW4nO1xuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX0ZJTFRFUiA9ICdmaWx0ZXInO1xuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1BBR0VfU0laRSA9ICdwYWdlU2l6ZSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QQUdFX1NJWkUgPSAyMDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBR0VfU0laRV9PUFRJT05TID0gWzIwLCA1MCwgMTAwLCAyMDAsIDUwMF07XG5leHBvcnQgY29uc3QgUkVTRVJWRURfU1RBUlRfQ09MVU1OUyA9IFsnc2VsZWN0JywgJ2lkJ107XG5leHBvcnQgY29uc3QgUkVTRVJWRURfRU5EX0NPTFVNTlMgPSBbJ2FjdGlvbnMnXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JFUVVJUkVEX0NPTFVNTlMgPSBbJ2lkJ107XG5cbmV4cG9ydCBjbGFzcyBDZWxsVmFsdWVDaGFuZ2VMaXN0ZW5lciB7XG4gIHN1YmplY3Q6IFN1YmplY3Q8YW55PjtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247IC8vIFRoZSByb3cgc3RhcnQgZWRpdGluZyBzdWJzY3JpcHRpb25cbiAgZm9ybVBhdGg6IHN0cmluZztcbiAgZW1pdEluaXRpYWxWYWx1ZTogYm9vbGVhbjtcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RhbERldGFpbE9wdGlvbnM8VCA9IGFueT4ge1xuICAvLyBEYXRhXG4gIGlzTmV3OiBib29sZWFuO1xuICBkYXRhOiBUO1xuICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAvLyBDYWxsYmFjayBmdW5jdGlvbnNcbiAgb25EZWxldGU/OiAoZXZlbnQ6IFVJRXZlbnQsIGRhdGE6IFQpID0+IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCB0eXBlIFNhdmVBY3Rpb25UeXBlID0gJ2RlbGV0ZScgfCAnc29ydCcgfCAnZmlsdGVyJztcblxuLy8gQGR5bmFtaWNcbkBEaXJlY3RpdmUoKVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXBwVGFibGU8XG4gIFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPixcbiAgRiA9IGFueSxcbiAgSUQgPSBudW1iZXJcbiAgPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBJQXBwRm9ybSwgSUZvcm1Db250cm9sUGF0aFRyYW5zbGF0b3Ige1xuXG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIF9jZWxsVmFsdWVDaGFuZ2VzRGVmczoge1xuICAgIFtrZXk6IHN0cmluZ106IENlbGxWYWx1ZUNoYW5nZUxpc3RlbmVyO1xuICB9ID0ge307XG5cbiAgcHJvdGVjdGVkIF9lbmFibGVkID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByb3RlY3RlZCBfYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyOiBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXI7XG4gIHByb3RlY3RlZCBhbGxvd1Jvd0RldGFpbCA9IHRydWU7XG4gIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBhbGVydEN0cmw6IEFsZXJ0Q29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgcHJldmlvdXNseUVkaXRlZFJvd0lkOiBudW1iZXI7XG4gIHByb3RlY3RlZCBmb3JtRXJyb3JBZGFwdGVyOiBGb3JtRXJyb3JUcmFuc2xhdG9yO1xuXG4gIGV4Y2x1ZGVzQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW107XG4gIHRvdGFsUm93Q291bnQ6IG51bWJlcnxudWxsID0gbnVsbDtcbiAgdmlzaWJsZVJvd0NvdW50OiBudW1iZXI7XG4gIGVycm9yVHJhbnNsYXRvck9wdGlvbnM6IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zO1xuXG4gIHJlYWR5U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHNhdmluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgZGlydHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGVycm9yU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuXG4gIGdldCBlcnJvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCBlcnJvciQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQHBhcmFtIGVycm9yXG4gICAqL1xuICBzZXQgZXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMuc2V0RXJyb3IoZXJyb3IpO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNhdmluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2aW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGlzUmF0ZUxpbWl0UmVhY2hlZCA9IGZhbHNlO1xuICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VGFibGVFbGVtZW50PFQ+Pih0cnVlLCBbXSk7XG4gIGVkaXRlZFJvdzogVGFibGVFbGVtZW50PFQ+ID0gdW5kZWZpbmVkO1xuICBhdXRvY29tcGxldGVGaWVsZHM6IHtba2V5OiBzdHJpbmddOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZ307XG4gIG1vYmlsZTogYm9vbGVhbjtcblxuICAvLyBUYWJsZSBvcHRpb25zXG4gIEBJbnB1dCgpIHNldHRpbmdzSWQ6IHN0cmluZztcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGkxOG5Db2x1bW5QcmVmaXggPSAnQ09NTU9OLic7XG4gIEBJbnB1dCgpIGkxOG5Db2x1bW5TdWZmaXg6IHN0cmluZztcbiAgQElucHV0KCkgYXV0b0xvYWQgPSB0cnVlO1xuICBASW5wdXQoKSByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5saW5lRWRpdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgZm9jdXNGaXJzdENvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maXJtQmVmb3JlRGVsZXRlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpcm1CZWZvcmVDYW5jZWwgPSBmYWxzZTtcbiAgQElucHV0KCkgdW5kb2FibGVEZWxldGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlRGVsZXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBrZWVwRWRpdGVkUm93T25TYXZlOiBib29sZWFuO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlU29ydDogYm9vbGVhbjtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZUZpbHRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgcHJvcGFnYXRlUm93RXJyb3IgPSBmYWxzZTtcblxuICBASW5wdXQoKSBkZWZhdWx0U29ydEJ5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xuICBASW5wdXQoKSBkZWZhdWx0UGFnZVNpemUgPSBERUZBVUxUX1BBR0VfU0laRTtcbiAgQElucHV0KCkgZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlM7XG5cbiAgLy8gRm9jdXMgbWFuYWdlclxuICBASW5wdXQoKSBmb2N1c0NvbHVtbjogc3RyaW5nO1xuXG4gIGdldCBmaXJzdFVzZXJDb2x1bW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW1JFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoXTtcbiAgfVxuXG4gIGdldCBsYXN0VXNlckNvbHVtbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnNbdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aCAtIFJFU0VSVkVEX0VORF9DT0xVTU5TLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEVudGl0aWVzVGFibGVEYXRhU291cmNlPFQsIEYsIElEPikge1xuICAgIHRoaXMuc2V0RGF0YXNvdXJjZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZGF0YVNvdXJjZSgpOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZpbHRlcih2YWx1ZTogRikge1xuICAgIHRoaXMuc2V0RmlsdGVyKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXIoKTogRiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgfVxuXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nIHx8IHRoaXMudG90YWxSb3dDb3VudCA9PT0gMDtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvblJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uT3BlblJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZD86IElEOyByb3c6IFRhYmxlRWxlbWVudDxUPiB9PigpO1xuICBAT3V0cHV0KCkgb25OZXdSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uU3RhcnRFZGl0aW5nUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbkNvbmZpcm1FZGl0Q3JlYXRlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbE9yRGVsZXRlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZURlbGV0ZVJvd3MgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPGJvb2xlYW4sIHtyb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXX0+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbFJvd3MgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPGJvb2xlYW4sIHtyb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXX0+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZVNhdmUgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPHtjb25maXJtZWQ6IGJvb2xlYW47IHNhdmU6IGJvb2xlYW59LCB7YWN0aW9uOiBTYXZlQWN0aW9uVHlwZTsgdmFsaWQ6IGJvb2xlYW59PigpO1xuICBAT3V0cHV0KCkgb25BZnRlckRlbGV0ZWRSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD5bXT4oKTtcbiAgQE91dHB1dCgpIG9uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25EaXJ0eSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy52YWxpZCA6IHRydWU7XG4gIH1cblxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyA/IHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8uaW52YWxpZCA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93ICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/LnBlbmRpbmcgOiBmYWxzZTtcbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICB9XG5cbiAgZW5hYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICB9XG5cbiAgLy8gRklYTUU6IG5lZWQgdG8gaGlkZGVuIGJ1dHRvbnMgKGluIEhUTUwpLCBldGMuIHdoZW4gZGlzYWJsZWRcbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgaWYgKGRpc2FibGVkICE9PSAhdGhpcy5fZW5hYmxlZCkge1xuICAgICAgaWYgKGRpc2FibGVkKSB0aGlzLmRpc2FibGUoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIGVsc2UgdGhpcy5lbmFibGUoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl9lbmFibGVkO1xuICB9XG5cbiAgbWFya0FzRGlydHkob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmRpcnR5U3ViamVjdC52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5kaXJ0eVN1YmplY3QudmFsdWUgIT09IGZhbHNlIHx8ICh0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5pZCAhPT0gdGhpcy5wcmV2aW91c2x5RWRpdGVkUm93SWQpKSB7XG4gICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgZWRpdGluZyByb3cgb25seSBpZiBlZGl0aW5nIGFuZCBpZiBpdCB3YXMgbm90IHByZXZpb3VzbHkgc2F2ZWRcbiAgICAgIHRoaXMuZGlydHlTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgaWYgKHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jYW5jZWxPckRlbGV0ZSh0aGlzLmVkaXRlZFJvdyk7XG4gICAgICB9XG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IG51bGw7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHByZWZlciB0byB1c2UgbWFya0FsbEFzVG91Y2hlZCgpXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBjb25zb2xlLndhcm4oJ1RPRE86IFJlcGxhY2UgdGhpcyBjYWxsIGJ5IG1hcmtBbGxBc1RvdWNoZWQoKSAtIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiBuZ3gtY29tcG9uZW50cyA+PSAwLjE2LjAnKTtcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/Lm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZpbmcob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuc2F2aW5nU3ViamVjdC52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IHVuZGVmaW5lZDsgLy8gdW5zZWxlY3QgZm9jdXMgY29sdW1uXG4gICAgICB0aGlzLnNhdmluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSkge1xuICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBvcHRzKTtcbiAgfVxuXG4gIG1hcmtBc0xvYWRlZChvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG4gICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBvcHRzKTtcbiAgfVxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5yZWFkeVN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMucmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgIC8vIElmIHN1YmNsYXNzZXMgaW1wbGVtZW50cyBPblJlYWR5XG4gICAgICBpZiAodHlwZW9mIHRoaXNbJ25nT25SZWFkeSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICh0aGlzIGFzIGFueSBhcyBPblJlYWR5KS5uZ09uUmVhZHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZW5hYmxlU29ydCgpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGRpc2FibGVTb3J0KCkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IHRydWU7XG4gIH1cblxuICBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZGVmYXVsdFBhZ2VTaXplID0gdmFsdWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRTtcbiAgfVxuXG4gIGdldCBwYWdlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplIHx8IDA7XG4gIH1cblxuICBnZXQgc29ydEFjdGl2ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvcnQgJiYgdGhpcy5zb3J0LmFjdGl2ZTtcbiAgfVxuICBnZXQgc29ydERpcmVjdGlvbigpOiAnYXNjJyB8ICdkZXNjJyB7XG4gICAgcmV0dXJuIHRoaXMuc29ydCAmJiB0aGlzLnNvcnQuZGlyZWN0aW9uICYmICh0aGlzLnNvcnQuZGlyZWN0aW9uID09PSAnZGVzYycgPyAnZGVzYycgOiAnYXNjJykgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3J8bnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvciB8fCB0aGlzLmNoaWxkUGFnaW5hdG9yO1xuICB9XG5cbiAgQFZpZXdDaGlsZChNYXRUYWJsZSwge3N0YXRpYzogZmFsc2V9KSB0YWJsZTogTWF0VGFibGU8VD47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7c3RhdGljOiBmYWxzZX0pIGNoaWxkUGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCwge3N0YXRpYzogZmFsc2V9KSBzb3J0OiBNYXRTb3J0O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtIHwgUGxhdGZvcm1TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJvdGVjdGVkIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNvbHVtbnM6IHN0cmluZ1tdLFxuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZT86IEVudGl0aWVzVGFibGVEYXRhU291cmNlPFQsIEYsIElEPixcbiAgICBwcml2YXRlIF9maWx0ZXI/OiBGLFxuICAgIGluamVjdG9yPzogSW5qZWN0b3JcbiAgKSB7XG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGUnKTtcbiAgICB0aGlzLnRyYW5zbGF0ZSA9IGluamVjdG9yPy5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgdGhpcy5mb3JtRXJyb3JBZGFwdGVyID0gaW5qZWN0b3I/LmdldChGb3JtRXJyb3JUcmFuc2xhdG9yKTtcbiAgICB0aGlzLmFsZXJ0Q3RybCA9IGluamVjdG9yPy5nZXQoQWxlcnRDb250cm9sbGVyKTtcbiAgICB0aGlzLnRvYXN0Q29udHJvbGxlciA9IGluamVjdG9yPy5nZXQoVG9hc3RDb250cm9sbGVyKTtcbiAgICB0aGlzLl9hdXRvY29tcGxldGVDb25maWdIb2xkZXIgPSBuZXcgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyKHtcbiAgICAgIGdldFVzZXJBdHRyaWJ1dGVzOiAoYSwgYikgPT4gc2V0dGluZ3MuZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhhLCBiKVxuICAgIH0pO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzID0gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmZpZWxkcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgcmV0dXJuOyAvLyBJbml0IG9ubHkgb25jZVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHRoaXMucmVhZE9ubHkgPSB0b0Jvb2xlYW4odGhpcy5yZWFkT25seSwgZmFsc2UpOyAvLyByZWFkL3dyaXRlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSAhdGhpcy5yZWFkT25seSAmJiB0b0Jvb2xlYW4odGhpcy5pbmxpbmVFZGl0aW9uLCBmYWxzZSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVEZWxldGUgPSB0b0Jvb2xlYW4odGhpcy5zYXZlQmVmb3JlRGVsZXRlLCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVTb3J0ID0gdG9Cb29sZWFuKHRoaXMuc2F2ZUJlZm9yZVNvcnQsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMuc2F2ZUJlZm9yZUZpbHRlciA9IHRvQm9vbGVhbih0aGlzLnNhdmVCZWZvcmVGaWx0ZXIsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSA9IHRvQm9vbGVhbih0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsIHRoaXMuaW5saW5lRWRpdGlvbik7XG4gICAgdGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zID0gdGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zIHx8IHsgc2VwYXJhdG9yOiAnLCAnLCBjb250cm9sUGF0aFRyYW5zbGF0b3I6IHRoaXN9OyAvLyBDYW4gYmUgb3ZlcnJpZGUgaW4gc3ViY2xhc3NlcyBjb25zdHJ1Y3RvcnNcblxuICAgIC8vIENoZWNrIGFzayB1c2VyIGNvbmZpcm1hdGlvbiBpcyBwb3NzaWJsZVxuICAgIGlmICh0aGlzLmNvbmZpcm1CZWZvcmVEZWxldGUgJiYgIXRoaXMuYWxlcnRDdHJsKSB0aHJvdyBFcnJvcignTWlzc2luZyBcXCdhbGVydEN0cmxcXCcgb3IgXFwnaW5qZWN0b3JcXCcgaW4gY29tcG9uZW50XFwncyBjb25zdHJ1Y3Rvci4nKTtcblxuICAgIC8vIERlZmluZWQgdW5pcXVlIGlkIGZvciBzZXR0aW5ncyBmb3IgdGhlIHBhZ2VcbiAgICB0aGlzLnNldHRpbmdzSWQgPSB0aGlzLnNldHRpbmdzSWQgfHwgdGhpcy5nZW5lcmF0ZVRhYmxlSWQoKTtcblxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZ2V0RGlzcGxheUNvbHVtbnMoKTtcblxuICAgIC8vIExvYWQgdGhlIHNvcnRlZCBjb2x1bW5zLCBmcm9tIHNldHRpbmdzXG4gICAge1xuICAgICAgY29uc3Qgc29ydGVkQ29sdW1uID0gdGhpcy5nZXRTb3J0ZWRDb2x1bW4oKTtcbiAgICAgIHRoaXMuZGVmYXVsdFNvcnRCeSA9IHNvcnRlZENvbHVtbi5pZDtcbiAgICAgIHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24gPSBzb3J0ZWRDb2x1bW4uc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0UGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTaXplKCk7XG5cbiAgICAvLyBQcm9wYWdhdGUgZXJyb3IgdG8gZXZlbnQgZW1pdHRlclxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5lcnJvclN1YmplY3RcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5vbkVycm9yLmVtaXQodmFsdWUpKSk7XG5cbiAgICAvLyBQcm9wYWdhdGUgZGlydHkgdG8gZXZlbnQgZW1pdHRlclxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5kaXJ0eVN1YmplY3RcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5vbkRpcnR5LmVtaXQodmFsdWUpKSk7XG5cbiAgICAvLyBQcm9wYWdhdGUgcm93IGRpcnR5IHN0YXRlIHRvIHRhYmxlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3dcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKHJvdyA9PiByb3c/LnZhbGlkYXRvciAmJiB0cnVlKSxcbiAgICAgICAgICBtZXJnZU1hcChyb3cgPT4gcm93LnZhbGlkYXRvci52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlVW50aWwoXG4gICAgICAgICAgICAgICAgLy8gU3RvcCBpZiBuZXh0IGFub3RoZXIgcm93LCBvciBkZXN0cm95aW5nXG4gICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LFxuICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveSRcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgICAgICAgLy8ucGlwZShcbiAgICAgICAgICAgICAgICAvLyAgdGFwKCgpID0+IGNvbnNvbGUuZGVidWcoJ1RPRE8gc3RvcHBpbmcgcHJldmlvdXMgcm93IGxpc3RlbmVyJykpXG4gICAgICAgICAgICAgICAgLy8pXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIG1hcCgoKSA9PiByb3cudmFsaWRhdG9yPy5kaXJ0eSksXG4gICAgICAgICAgICAgIGZpbHRlcihkaXJ0eSA9PiBkaXJ0eSA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgICAgIC8vdGFwKCgpID0+IGNvbnNvbGUuZGVidWcoXCJQcm9wYWdhdGUgcm93J3MgZGlydHkgdG8gdGFibGUuLi5cIikpXG4gICAgICAgICAgICApKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5tYXJrQXNEaXJ0eSgpKVxuICAgICk7XG5cbiAgICAvLyBDYWxsIGRhdGFzb3VyY2UgcmVmcmVzaCwgb24gZWFjaCByZWZyZXNoIGV2ZW50c1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uUmVmcmVzaFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzdGFydFdpdGg8YW55LCBhbnk+KHRoaXMuYXV0b0xvYWQgPyB7fSA6ICdza2lwJyksXG4gICAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ3NraXAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gU2tpcHBpbmcgZGF0YSBsb2FkOiBubyBkYXRhU291cmNlIGRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBDYWxsaW5nIGRhdGFTb3VyY2Uud2F0Y2hBbGwoKS4uLicpO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZS53YXRjaEFsbChcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VPZmZzZXQsXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRBY3RpdmUsXG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTsgLy8gQ29udGludWVcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHRoaXMudXBkYXRlVmlldyhyZXMpKSk7XG5cbiAgICAvLyBMaXN0ZW4gZGF0YVNvdXJjZSBldmVudHNcbiAgICBpZiAodGhpcy5fZGF0YVNvdXJjZSkgdGhpcy5saXN0ZW5EYXRhc291cmNlTG9hZGluZyh0aGlzLl9kYXRhU291cmNlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgLy8gV2FybiBpZiB0YWJsZSBub3QgZXhpc3RzXG4gICAgICBpZiAoIXRoaXMudGFibGUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFt0YWJsZV0gTWlzc2luZyA8bWF0LXRhYmxlPiBpbiB0aGUgSFRNTCB0ZW1wbGF0ZSAoYWZ0ZXIgd2FpdGluZyA1MDBtcykhIENvbXBvbmVudDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCA1MDApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZGlzcGxheWVkQ29sdW1ucykgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgJ2Rpc3BsYXllZENvbHVtbnMnLiBEaWQgeW91IGNhbGwgc3VwZXIubmdPbkluaXQoKSBpbiBjb21wb25lbnQgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9ID9gKTtcbiAgICB9XG5cbiAgICBtZXJnZShcbiAgICAgIC8vIExpc3RlbiBzb3J0IGV2ZW50c1xuICAgICAgdGhpcy5zb3J0ICYmIHRoaXMuc29ydC5zb3J0Q2hhbmdlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5zb3J0LmRpc2FibGVkKSxcbiAgICAgICAgICBtZXJnZU1hcChhc3luYyAoKSA9PiB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ3NvcnQnKSksXG4gICAgICAgICAgZmlsdGVyKHJlcyA9PiByZXMgPT09IHRydWUpLFxuICAgICAgICAgIC8vIFNhdmUgc29ydCBpbiBzZXR0aW5nc1xuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IFt0aGlzLnNvcnQuYWN0aXZlLCB0aGlzLnNvcnQuZGlyZWN0aW9uIHx8ICdhc2MnXS5qb2luKCc6Jyk7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZyh0aGlzLnNldHRpbmdzSWQsIHZhbHVlLCBTRVRUSU5HU19TT1JURURfQ09MVU1OKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB8fCBFTVBUWSxcblxuICAgICAgLy8gTGlzdGVuIHBhZ2luYXRvciBldmVudHNcbiAgICAgIHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoYXN5bmMgKCkgPT4gdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdzb3J0JykpLFxuICAgICAgICAgIGZpbHRlcihyZXMgPT4gcmVzID09PSB0cnVlKSxcbiAgICAgICAgICAvLyBTYXZlIHBhZ2Ugc2l6ZVxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZyh0aGlzLnNldHRpbmdzSWQsIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLCBTRVRUSU5HU19QQUdFX1NJWkUpKVxuICAgICAgICApIHx8IEVNUFRZXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5vblNvcnQuZW1pdCgpO1xuICAgICAgdGhpcy5vblJlZnJlc2guZW1pdCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBJZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBzb3J0IG9yZGVyLCByZXNldCBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlLlxuICAgIGlmICh0aGlzLnNvcnQgJiYgdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAvLyBVbnN1YnNjcmliZSBjb2x1bW4gdmFsdWUgY2hhbmdlc1xuICAgIE9iamVjdC5rZXlzKHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzKS5mb3JFYWNoKGNvbCA9PiB0aGlzLnN0b3BDZWxsVmFsdWVDaGFuZ2VzKGNvbCwgdHJ1ZSkpO1xuICAgIHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzID0ge307XG5cbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zYXZpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lcnJvclN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpcnR5U3ViamVjdC51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uT3BlblJvdy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25OZXdSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25CZWZvcmVTYXZlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkFmdGVyRGVsZXRlZFJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU29ydC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EaXJ0eS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25FcnJvci51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLl9kYXRhU291cmNlPy5uZ09uRGVzdHJveSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhyZXM6IExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQsIG9wdHM/OiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghcmVzKSByZXR1cm47IC8vIFNraXAgKGUuZyBlcnJvcilcbiAgICBpZiAocmVzICYmIHJlcy5kYXRhKSB7XG4gICAgICB0aGlzLmlzUmF0ZUxpbWl0UmVhY2hlZCA9ICF0aGlzLnBhZ2luYXRvciB8fCAocmVzLmRhdGEubGVuZ3RoIDwgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpO1xuICAgICAgdGhpcy52aXNpYmxlUm93Q291bnQgPSByZXMuZGF0YS5sZW5ndGg7XG4gICAgICB0aGlzLnRvdGFsUm93Q291bnQgPSBpc05vdE5pbChyZXMudG90YWwpID8gcmVzLnRvdGFsIDogKCh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiAodGhpcy5wYWdpbmF0b3IucGFnZVNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkUpIHx8IDApICsgdGhpcy52aXNpYmxlUm93Q291bnQpO1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gJHtyZXMuZGF0YS5sZW5ndGh9IHJvd3MgbG9hZGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTk8gcm93cyBsb2FkZWQnKTtcbiAgICAgIHRoaXMuaXNSYXRlTGltaXRSZWFjaGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IDA7XG4gICAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNVbnRvdWNoZWQoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMubWFya0FzTG9hZGVkKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERhdGFzb3VyY2UoZGF0YXNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRocm93IG5ldyBFcnJvcignW3RhYmxlXSBkYXRhU291cmNlIGFscmVhZHkgc2V0ICEnKTtcbiAgICBpZiAoZGF0YXNvdXJjZSAmJiB0aGlzLl9kYXRhU291cmNlICE9PSBkYXRhc291cmNlKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YXNvdXJjZTtcbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgdGhpcy5saXN0ZW5EYXRhc291cmNlTG9hZGluZyhkYXRhc291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXNldERhdGFTb3VyY2UoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbik7XG4gICAgfVxuICAgIHRoaXMuX2RhdGFTb3VyY2U/Lm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IG51bGw7XG4gIH1cblxuICBhZGRDb2x1bW5EZWYoY29sdW1uOiBDZGtDb2x1bW5EZWYpIHtcbiAgICB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZihjb2x1bW4pO1xuICB9XG5cbiAgcmVtb3ZlQ29sdW1uRGVmKGNvbHVtbjogQ2RrQ29sdW1uRGVmKSB7XG4gICAgdGhpcy50YWJsZS5yZW1vdmVDb2x1bW5EZWYoY29sdW1uKTtcbiAgfVxuXG4gIHNldEZpbHRlcihmaWx0ZXI6IEYsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IH0pIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7ZW1pdEV2ZW50OiB0cnVlfTtcblxuICAgIGlmICh0aGlzLnNhdmVCZWZvcmVGaWx0ZXIpIHtcblxuICAgICAgLy8gaWYgYSBkaXJ0eSB0YWJsZSBpcyB0byBiZSBzYXZlZCBiZWZvcmUgZmlsdGVyXG4gICAgICBpZiAodGhpcy5kaXJ0eSkge1xuXG4gICAgICAgIC8vIFNhdmVcbiAgICAgICAgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdmaWx0ZXInKS50aGVuKHNhdmVkID0+IHtcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgb25seSBpZiB1c2VyIGRpZG4ndCBjYW5jZWwgdGhlIHNhdmUgb3IgdGhlIHNhdmUgaXMgb2tcbiAgICAgICAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgb24gbm9uIGRpcnR5IHRhYmxlXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGFwcGx5IGZpbHRlciBkaXJlY3RseVxuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1BbmRBZGQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEFkZCByb3dcbiAgICByZXR1cm4gdGhpcy5hZGRSb3coZXZlbnQpO1xuICB9XG5cbiAgY29uZmlybUFuZEJhY2t3YXJkKGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuXG4gICAgLy8gRGVsZXRpbmcgZWRpdGVkIHJvdywgaWYgZW1wdHkgYW5kIG5vdCBkaXJ0eVxuICAgIGNvbnN0IHByZXZpb3VzUm93ID0gdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKHByZXZpb3VzUm93ICYmIChwcmV2aW91c1Jvdy5pZCA9PT0gLTEpICYmIHByZXZpb3VzUm93LnZhbGlkYXRvcj8uaW52YWxpZCAmJiAhKHByZXZpb3VzUm93LnZhbGlkYXRvcj8uZGlydHkpKSB7XG4gICAgICB0aGlzLmRlbGV0ZU5ld1JvdyhldmVudCwgcHJldmlvdXNSb3cpO1xuXG4gICAgICAvLyBXYWl0IGRlbGV0aW9uIGlzIGRvbmUsIHRoZW4gZWRpdCBwcmV2aW91cyByb3cgKGJ5IGlkLCBiZWNhdXNlIG9mIHJlbG9hZGluZylcbiAgICAgIHRoaXMud2FpdElkbGUoKVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLmVkaXRSb3dCeUlkKGV2ZW50LCByb3cuaWQsIHtmb2N1c0NvbHVtbjogdGhpcy5sYXN0VXNlckNvbHVtbn0pKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEVkaXQgbmV4dCByb3dcbiAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywge2ZvY3VzQ29sdW1uOiB0aGlzLmxhc3RVc2VyQ29sdW1ufSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25maXJtQW5kRm9yd2FyZChldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEVkaXQgbmV4dCByb3dcbiAgICB0aGlzLmVkaXRSb3dCeUlkKGV2ZW50LCByb3cuaWQgKyAxLCB7Zm9jdXNDb2x1bW46IHRoaXMuZmlyc3RVc2VyQ29sdW1ufSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBlZGl0Um93QnlJZChldmVudDogRXZlbnR8dW5kZWZpbmVkLCBpZDogbnVtYmVyLCBvcHRzPzoge2ZvY3VzQ29sdW1uPzogc3RyaW5nOyB9KSB7XG4gICAgaWYgKGlkIDwgMCkgcmV0dXJuO1xuICAgIGlmIChpZCA+PSB0aGlzLnZpc2libGVSb3dDb3VudCkge1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IG9wdHMgJiYgb3B0cy5mb2N1c0NvbHVtbiB8fCB0aGlzLmZpcnN0VXNlckNvbHVtbjtcbiAgICAgIHRoaXMuYWRkUm93KGV2ZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93KGlkKTtcbiAgICAgIHRoaXMuZWRpdFJvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybSB0aGUgY3JlYXRpb24gb2YgdGhlIGdpdmVuIHJvdywgb3IgaWYgbm90IHNwZWNpZmllZCB0aGUgY3VycmVudGx5IGVkaXRlZCByb3dcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIGNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhcm93LmVkaXRpbmcpIHJldHVybiB0cnVlOyAvLyBubyByb3cgdG8gY29uZmlybVxuXG4gICAgLy8gU3RvcCBldmVudFxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIENvbmZpcm1hdGlvbiBlZGl0aW9uIG9yIGNyZWF0aW9uXG4gICAgY29uc3QgY29uZmlybWVkID0gcm93LmNvbmZpcm1FZGl0Q3JlYXRlKCk7XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICAvLyBJZiBlZGl0IGZpbmlzaGVkLCBmb3JnZXQgZWRpdGVkIHJvd1xuICAgICAgaWYgKHJvdyA9PT0gdGhpcy5lZGl0ZWRSb3cpIHtcbiAgICAgICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcmsgdGFibGUgYXMgZGlydHkgKGlmIHJvdyBpcyBkaXJ0eSlcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KHtlbWl0RXZlbnQ6IGZhbHNlIC8qIGJlY2F1c2Ugb2YgcmVzZXRFcnJvcigpICovfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIGVycm9yXG4gICAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgICAgLy8gRW1pdCB0aGUgY29uZmlybSBldmVudFxuICAgICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93Lm5leHQocm93KTtcblxuICAgICAgcmV0dXJuIHRydWU7IC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKHJvdy52YWxpZGF0b3IpIHtcbiAgICAgIC8vIElmIHBlbmRpbmc6IFdhaXQgZW5kIG9mIHZhbGlkYXRpb24sIHRoZW4gbG9vcFxuICAgICAgaWYgKHJvdy52YWxpZGF0b3IucGVuZGluZykge1xuICAgICAgICBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyhyb3cudmFsaWRhdG9yKS50aGVuKCgpID0+IHRoaXMuY29uZmlybUVkaXRDcmVhdGUoZXZlbnQsIHJvdykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIE5PVCBjb25maXJtZWQgPSByb3cgaGFzIGVycm9yXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gQ2Fubm90IGNvbmZpcm0gcm93LCBiZWNhdXNlIGludmFsaWQnKTtcbiAgICAgICAgQXBwRm9ybVV0aWxzLmxvZ0Zvcm1FcnJvcnMocm93LnZhbGlkYXRvciwgJ1t0YWJsZV0gJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpeDogbWFyayBhbGwgY29udHJvbHMgYXMgdG91Y2hlZCB0byBzaG93IGVycm9yc1xuICAgICAgcm93LnZhbGlkYXRvci5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cbiAgICAgIC8vIENvbXB1dGUgcm93IGVycm9yLCBhbmQgcHJvcGFnYXRlIHRvIHRhYmxlJ3MgZXJyb3JcbiAgICAgIGlmICh0aGlzLnByb3BhZ2F0ZVJvd0Vycm9yKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5nZXRSb3dFcnJvcihyb3cpO1xuICAgICAgICB0aGlzLnNldEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjYW5jZWxPckRlbGV0ZShldmVudDogRXZlbnQsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW47IGtlZXBFZGl0aW5nPzogYm9vbGVhbjsgfSkge1xuICAgIGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICB0aGlzLmRlbGV0ZU5ld1JvdyhldmVudCwgcm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBhZGRSb3coZXZlbnQ/OiBFdmVudCwgaW5zZXJ0QXQ/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBBc2tpbmcgZm9yIG5ldyByb3cuLi4nKTtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFVzZSBtb2RhbCBpZiBpbmxpbmUgZWRpdGlvbiBpcyBkaXNhYmxlZFxuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5OZXdSb3dEZXRhaWwoZXZlbnQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBmaW5pc2ggZWRpdGVkIHJvdyBmaXJzdFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIG5ldyByb3dcbiAgICB0aGlzLmFkZFJvd1RvVGFibGUoaW5zZXJ0QXQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShvcHRzPzogeyBrZWVwRWRpdGluZz86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIG9wdHMgPSB7XG4gICAgICBrZWVwRWRpdGluZzogdGhpcy5rZWVwRWRpdGVkUm93T25TYXZlLFxuICAgICAgLi4ub3B0c1xuICAgIH07XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHRocm93IHtjb2RlOiBFcnJvckNvZGVzLlRBQkxFX1JFQURfT05MWSwgbWVzc2FnZTogJ0VSUk9SLlRBQkxFX1JFQURfT05MWSd9O1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgLy8gS2VlcCBlZGl0ZWQgcm93IGlkIChzaG91bGQgYmUgZG9uZSBCRUZPUkUgY29uZmlybUVkaXRDcmVhdGUoKSApXG4gICAgdGhpcy5wcmV2aW91c2x5RWRpdGVkUm93SWQgPSBvcHRzLmtlZXBFZGl0aW5nICYmIHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cuaWQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJldmlvdXNseUVkaXRlZERhdGEgPSBpc05vdE5pbCh0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCkgJiYgdGhpcy5lZGl0ZWRSb3cuY3VycmVudERhdGEgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdz8uY3VycmVudERhdGE7XG5cbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuVEFCTEVfSU5WQUxJRF9ST1dfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9JTlZBTElEX1JPV19FUlJPUid9O1xuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgc2F2aW5nXG4gICAgdGhpcy5tYXJrQXNTYXZpbmcoKTtcblxuICAgIHRyeSB7XG5cbiAgICAgIC8vIENhbGxpbmcgc2VydmljZSBzYXZlKClcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIENhbGxpbmcgZGF0YVNvdXJjZS5zYXZlKCkuLi4nKTtcbiAgICAgIGNvbnN0IGlzT0sgPSBhd2FpdCB0aGlzLl9kYXRhU291cmNlLnNhdmUoKTtcblxuICAgICAgaWYgKGlzT0spIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgcmV0dXJuIGlzT0s7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcblxuICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyByb3dcbiAgICAgIGlmIChpc05vdE5pbCh0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkT3JEYXRhKHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkLCBwcmV2aW91c2x5RWRpdGVkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKGV2ZW50PzogRXZlbnQsIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsgfSkge1xuXG4gICAgLy8gQ2hlY2sgY29uZmlybWF0aW9uXG4gICAgaWYgKCghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkgJiYgdGhpcy5kaXJ0eSAmJiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsIHx8IHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLm9ic2VydmVycy5sZW5ndGggPiAwKSkge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5jYW5DYW5jZWxSb3dzKCkudGhlbihjb25maXJtID0+IHtcbiAgICAgICAgLy8gSWYgY29uZmlybWVkLCBsb29wXG4gICAgICAgIGlmIChjb25maXJtKSB0aGlzLmNhbmNlbChudWxsLCB7aW50ZXJhY3RpdmU6IGZhbHNlfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVSb3coZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzoge1xuICAgIHNraXBQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gIH0pIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICByb3cgPSByb3cgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1JvdyA9IGF3YWl0IHRoaXMuYWRkUm93VG9UYWJsZShyb3cuaWQgKyAxKTtcbiAgICBjb25zdCBqc29uID0gey4uLnJvdy5jdXJyZW50RGF0YSwgaWQ6IG51bGx9O1xuXG4gICAgLy8gUmVzZXQgc29tZSBwcm9wZXJ0aWVzIChlLmcuIHJhbmtPcmRlciwgZXRjKVxuICAgIGlmIChvcHRzICYmIG9wdHMuc2tpcFByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXdSb3cuY3VycmVudERhdGE7XG4gICAgICBvcHRzLnNraXBQcm9wZXJ0aWVzLmZvckVhY2goa2V5ID0+IGpzb25ba2V5XSA9IG5ld0RhdGFba2V5XSk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Jvdy52YWxpZGF0b3IpIHtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZShqc29uKTtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IubWFya0FzRGlydHkoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAobmV3Um93LmN1cnJlbnREYXRhPy5mcm9tT2JqZWN0KSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YS5mcm9tT2JqZWN0KGpzb24pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YSA9IGpzb247XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0XG4gICAgdGhpcy5jbGlja1Jvdyh1bmRlZmluZWQsIG5ld1Jvdyk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdpc0FsbFNlbGVjdGVkLiBsZW5ndGhzJywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoLCB0aGlzLnRvdGFsUm93Q291bnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJvd0NvdW50IHx8XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPT09IHRoaXMudmlzaWJsZVJvd0NvdW50O1xuICB9XG5cbiAgLyoqIFNlbGVjdHMgYWxsIHJvd3MgaWYgdGhleSBhcmUgbm90IGFsbCBzZWxlY3RlZDsgb3RoZXJ3aXNlIGNsZWFyIHNlbGVjdGlvbi4gKi9cbiAgYXN5bmMgbWFzdGVyVG9nZ2xlKCkge1xuXG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuZ2V0Um93cygpO1xuICAgICAgcm93cy5mb3JFYWNoKHJvdyA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KSk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlU2VsZWN0aW9uKGV2ZW50OiBVSUV2ZW50KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGVSb3dzKGV2ZW50LCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIG9wdHMgVXNlIGludGVyYWN0aXZlPWZhbHNlIHRvIGF2b2lkIHVzZXIgaW50ZXJhY3Rpb24gKGUuZy4gdXNlciBjb25maXJtYXRpb24pXG4gICAqL1xuICBhc3luYyBkZWxldGVSb3coZXZlbnQ6IFVJRXZlbnR8bnVsbCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7aW50ZXJhY3RpdmU/OiBib29sZWFuO30pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IGF3YWl0IHRoaXMuZGVsZXRlUm93cyhldmVudCwgW3Jvd10sIG9wdHMpO1xuICAgIHJldHVybiBkZWxldGVDb3VudCA9PT0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIHJvd3NcbiAgICogQHBhcmFtIG9wdHMgVXNlIGludGVyYWN0aXZlPWZhbHNlIHRvIGF2b2lkIHVzZXIgaW50ZXJhY3Rpb24gKGUuZy4gdXNlciBjb25maXJtYXRpb24pXG4gICAqL1xuICBhc3luYyBkZWxldGVSb3dzKGV2ZW50OiBVSUV2ZW50fG51bGwsIHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzoge2ludGVyYWN0aXZlPzogYm9vbGVhbjt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuVEFCTEVfUkVBRF9PTkxZLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfUkVBRF9PTkxZJ307XG4gICAgfVxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIDA7IC8vIFNLaXBcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICghdGhpcy5fZW5hYmxlZCkgcmV0dXJuIDA7XG4gICAgaWYgKHRoaXMubG9hZGluZyB8fCBpc0VtcHR5QXJyYXkocm93cykpIHJldHVybiAwO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRvIGtlZXAgbmV3bHkgY3JlYXRlZCByb3dcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmlkID09PSAtMSAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nICYmICFyb3dzLmluY2x1ZGVzKHRoaXMuZWRpdGVkUm93KSkge1xuICAgICAgY29uc3QgY29uZmlybWVkID0gdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpO1xuICAgICAgaWYgKCFjb25maXJtZWQpIHJldHVybiAwOyAvLyBDYW5ub3QgZGVsZXRlIChlLmcuIGVkaXRlZCByb3cgaXMgaW52YWxpZClcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjYW4gZGVsZXRlXG4gICAgY29uc3QgY2FuRGVsZXRlID0gYXdhaXQgdGhpcy5jYW5EZWxldGVSb3dzKHJvd3MsIG9wdHMpO1xuICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gMDsgLy8gQ2Fubm90IGRlbGV0ZVxuXG4gICAgaWYgKHRoaXMuc2F2ZUJlZm9yZURlbGV0ZSkge1xuICAgICAgLy8gQ2FuY2VsIGludmFsaWQgcm93cyAoYmVjYXVzZSBvZiBzYXZlKCkgd2lsbCBmYWlsLCBpZiBpbnZhbGlkIHJvd3MgZXhpc3RzKVxuICAgICAgcm93cyA9IHJvd3MucmVkdWNlKChyZXMsIHJvdykgPT4ge1xuICAgICAgICBpZiAocm93LnZhbGlkYXRvciAmJiAhcm93LnZhbGlkYXRvci52YWxpZCkge1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSByb3cuaWQgPT09IC0xO1xuICAgICAgICAgIHJvdy5jYW5jZWxPckRlbGV0ZSgpO1xuICAgICAgICAgIC8vIFdoZW4gZGVsZXRlZCAoPSBuZXdseSBjcmVhdGVkIHJvdykgOiBkZWNyZW1lbnQgY291bnRlclxuICAgICAgICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVSb3dDb3VudC0tO1xuICAgICAgICAgICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChyb3cpO1xuICAgICAgfSwgW10pO1xuXG4gICAgICBpZiAoaXNFbXB0eUFycmF5KHJvd3MpKSByZXR1cm4gMDtcblxuICAgICAgLy8gSWYgZGF0YSBuZWVkIHRvIGJlIHNhdmVkIGZpcnN0OiBkbyBpdFxuICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ2RlbGV0ZScpO1xuICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAvLyBTdG9wIGlmIHNhdmUgY2FuY2VsbGVkIG9yIHNhdmUgZmFpbGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBEZWxldGUgc2VsZWN0aW9uLi4uJyk7XG5cbiAgICBjb25zdCByb3dzVG9EZWxldGUgPSByb3dzLnNsaWNlKClcbiAgICAgIC8vIFJldmVyc2Ugcm93IG9yZGVyXG4gICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCwgbmVlZCBiZWNhdXNlIHJvdy5kZWxldGUoKSBoYXMgYXN5bmMgZXhlY3V0aW9uXG4gICAgICAvLyBhbmQgaW5kZXggY2FjaGUgaXMgdXBkYXRlZCB3aXRoIGEgZGVsYXkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5pZCA+IGIuaWQgPyAtMSA6IDEpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gcm93c1RvRGVsZXRlLmxlbmd0aDtcbiAgICAgIGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuZGVsZXRlQWxsKHJvd3NUb0RlbGV0ZSk7XG5cbiAgICAgIC8vIERPIG5vdCB1cGRhdGUgbWFudWFsbHksIGJlY2F1c2Ugd2F0Y2hBTGwoKS5zdWJzY3JpYmUoKSB3aWxsIHVwZGF0ZSB0aGlzIGNvdW50XG4gICAgICAvL3RoaXMudG90YWxSb3dDb3VudCAtPSBkZWxldGVDb3VudDtcbiAgICAgIC8vdGhpcy52aXNpYmxlUm93Q291bnQgLT0gZGVsZXRlQ291bnQ7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KHtlbWl0RXZlbnQ6IGZhbHNlIC8qbWFya0ZvckNoZWNrKCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIqL30pO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMub25BZnRlckRlbGV0ZWRSb3dzLm5leHQocm93c1RvRGVsZXRlKTtcbiAgICAgIHJldHVybiBkZWxldGVDb3VudDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VsZWN0Um93QnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgcmV0dXJuIHRoaXMuY2xpY2tSb3cobnVsbCwgcm93KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gc2VsZWN0IHJvdyBieSBkYXRhLiBXaWxsIHVzZSBkYXRhRXF1YWxzKCkgKHRoYXQgY2FsbCBFbnRpdHlVdGlscy5lcXVhbHMoKSkgdG8gZmluZCBzYW1lIHJvdydzIGRhdGFcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIGFzeW5jIHNlbGVjdFJvd0J5RGF0YShkYXRhOiBUKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy53YWl0SWRsZSgpO1xuICAgIGNvbnN0IHJvdyA9IChhd2FpdCB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpIHx8IFtdKVxuICAgICAgLmZpbmQocm93ID0+IHRoaXMuZXF1YWxzKHJvdy5jdXJyZW50RGF0YSwgZGF0YSkpO1xuICAgIHJldHVybiByb3cgJiYgdGhpcy5jbGlja1JvdyhudWxsLCByb3cpO1xuICB9XG5cbiAgY2xpY2tSb3coZXZlbnQ6IFVJRXZlbnR8dW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIC8vIFdhaXQgd2hpbGUgbG9hZGluZywgYW5kIGxvb3BcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKFwiW3RhYmxlXSBXYWl0aW5nIGJlZm9yZSBhcHBseSBjbGlja1JvdygpIChkYXRhc291cmNlIGlzIGJ1c3kpLi4uXCIpO1xuICAgICAgdGhpcy53YWl0SWRsZSgpLnRoZW4oKCkgPT4gdGhpcy5jbGlja1JvdyhldmVudCwgcm93KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbdGFibGVdIERldGVjdCBjbGljayBvbiByb3dcIik7XG5cbiAgICBpZiAocm93LmlkID09PSAtMSB8fCByb3cuZWRpdGluZykgcmV0dXJuIHRydWU7IC8vIEFscmVhZHkgaW4gZWRpdGlvblxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIGZhbHNlOyAvLyBDYW5jZWxsZWQgYnkgZXZlbnRcblxuICAgIC8vIE9wZW4gdGhlIGRldGFpbCBwYWdlIChpZiBub3QgaW5saW5lIGVkaXRpbmcpXG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHtcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgICAgIHRoaXMub3BlblJvdyhyb3cuY3VycmVudERhdGEuaWQsIHJvdylcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5tYXJrQXNMb2FkZWQoKSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHRoaXMubWFya0FzTG9hZGVkKCkpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBlZGl0aW5nIHJvd1xuICAgIHJldHVybiB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywge2ZvY3VzQ29sdW1uOiB1bmRlZmluZWQgLypmb3JjZSB0byB1c2UgdGhlIGNsaWNrIHRhcmdldCovfSk7XG4gIH1cblxuICBtb3ZlUm93KGlkOiBudW1iZXIsIGRpcmVjdGlvbjogbnVtYmVyKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLm1vdmUoaWQsIGRpcmVjdGlvbik7XG4gIH1cblxuICBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBmaXJzdFRydWVQcm9taXNlKHRoaXMucmVhZHlTdWJqZWN0KTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGZpcnN0RmFsc2VQcm9taXNlKHRoaXMubG9hZGluZ1N1YmplY3QpO1xuICB9XG5cbiAgYXN5bmMgb3BlblNlbGVjdENvbHVtbnNNb2RhbChldmVudD86IEV2ZW50KTogUHJvbWlzZTxhbnk+IHtcblxuICAgIC8vIENvcHkgY3VycmVudCBjb2x1bW5zIChkZWVwIGNvcHkpXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q3VycmVudENvbHVtbnMoKTtcblxuICAgIGNvbnN0IGhhc1RvcE1vZGFsID0gISEoYXdhaXQgdGhpcy5tb2RhbEN0cmwuZ2V0VG9wKCkpO1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtjb2x1bW5zfSxcbiAgICAgIGNzc0NsYXNzOiBoYXNUb3BNb2RhbCAmJiAnc3RhY2stbW9kYWwnXG4gICAgfSk7XG5cbiAgICAvLyBPcGVuIHRoZSBtb2RhbFxuICAgIGF3YWl0IG1vZGFsLnByZXNlbnQoKTtcblxuICAgIC8vIE9uIGRpc21pc3NcbiAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBtb2RhbC5vbkRpZERpc21pc3MoKTtcbiAgICBpZiAoIWRhdGEpIHJldHVybjsgLy8gQ0FOQ0VMTEVEXG5cbiAgICAvLyBBcHBseSBjb2x1bW5zXG4gICAgY29uc3QgdXNlckNvbHVtbnMgPSAoZGF0YSB8fCBbXSkuZmlsdGVyKGMgPT4gYy5jYW5IaWRlID09PSBmYWxzZSB8fCBjLnZpc2libGUpLm1hcChjID0+IGMubmFtZSkgfHwgW107XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5jb25jYXQodXNlckNvbHVtbnMpLmNvbmNhdChSRVNFUlZFRF9FTkRfQ09MVU1OUyk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIC8vIFVwZGF0ZSB1c2VyIHNldHRpbmdzXG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5zYXZlUGFnZVNldHRpbmcodGhpcy5zZXR0aW5nc0lkLCB1c2VyQ29sdW1ucywgU0VUVElOR1NfRElTUExBWV9DT0xVTU5TKTtcbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIHJldHVybiByb3cuaWQ7XG4gIH1cblxuICBkb1JlZnJlc2goZXZlbnQ/OiBDb21wbGV0YWJsZUV2ZW50KSB7XG4gICAgdGhpcy5vblJlZnJlc2guZW1pdChldmVudCk7XG5cbiAgICAvLyBXaGVuIHRhcmdldCB3YWl0IGZvciBhIGNvbXBsZXRlIChlLmcuIElvblJlZnJlc2hlcilcbiAgICBpZiAoZXZlbnQ/LnRhcmdldCAmJiBldmVudC50YXJnZXQuY29tcGxldGUpIHtcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgICAgIGV2ZW50LnRhcmdldC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudENvbHVtbnMoKTogQ29sdW1uSXRlbVtdIHtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLnNsaWNlKFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoKVxuICAgICAgICAuZmlsdGVyKG5hbWUgPT4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YobmFtZSkgPT09IC0xKTtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zXG4gICAgICAgIC5jb25jYXQoaGlkZGVuQ29sdW1ucylcbiAgICAgICAgLmZpbHRlcihuYW1lID0+ICFSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmluY2x1ZGVzKG5hbWUpICYmICFSRVNFUlZFRF9FTkRfQ09MVU1OUy5pbmNsdWRlcyhuYW1lKVxuICAgICAgICAgICAgJiYgIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKG5hbWUpKVxuICAgICAgICAubWFwKG5hbWUgPT4gKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmdldEkxOG5Db2x1bW5OYW1lKG5hbWUpLFxuICAgICAgICAgIHZpc2libGU6IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKG5hbWUpICE9PSAtMSxcbiAgICAgICAgICBjYW5IaWRlOiB0aGlzLmdldFJlcXVpcmVkQ29sdW1ucygpLmluZGV4T2YobmFtZSkgPT09IC0xXG4gICAgICAgIH0pKTtcbiAgfVxuXG4gIGVzY2FwZUVkaXRpbmdSb3coZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmICghcm93IHx8ICFyb3cuZWRpdGluZykgcmV0dXJuO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ1thcHAtdGFibGVdIENhbmNlbCB0aGUgcm93IChrZXlkb3duLmVzY2FwZSknKTtcblxuICAgIGlmIChldmVudCkge1xuICAgICAgLy8gQXZvaWQgdG8gY2FuY2VsIHRoZSBlZGl0b3JcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvLyBJZiBuZXcgcm93IGlzIGludmFsaWQ6IGRlbGV0ZSBzaWxlbnRseVxuICAgIGlmIChyb3cuaWQgPT09IC0xICYmIHJvdy52YWxpZGF0b3IuaW52YWxpZCkge1xuICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHJvdyk7XG4gICAgfVxuICAgIC8vIElmIGV4aXN0c1xuICAgIGVsc2Uge1xuICAgICAgLy8gY2FuY2VsIChpZiBjb25maXJtYXRpb24pXG4gICAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywge2tlZXBFZGl0aW5nOiBmYWxzZX0pO1xuICAgICAgfVxuICAgICAgLy8gT3IgdmFsaWRhdGUsIGlmIG5vIGNvbmZpcm1hdGlvblxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlybUVkaXRDcmVhdGUoZXZlbnQsIHJvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhbnNsYXRlQ29udHJvbFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBDYW4gYmUgb3ZlcnJpZGUgYnkgc3ViY2xhc3NlcywgdG8gcmVzb2x2ZSBhbGwgZmllbGQgbmFtZVxuXG4gICAgLy8gVXNlIGNvbHVtbnMga2V5LCBoYXMgZGVmYXVsdCBuYW1lXG4gICAgY29uc3QgaTE4bkNvbHVtbktleSA9IHRoaXMuZ2V0STE4bkNvbHVtbk5hbWUocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlPy5pbnN0YW50KGkxOG5Db2x1bW5LZXkpIHx8IGkxOG5Db2x1bW5LZXk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJvdGVjdGVkIGVkaXRSb3coZXZlbnQ6IEV2ZW50fHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7Zm9jdXNDb2x1bW4/OiBzdHJpbmd9KTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3cgPT09IHJvdykgcmV0dXJuIHRydWU7IC8vIEFscmVhZHkgdGhlIGVkaXRlZCByb3dcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFyb3cuZWRpdGluZyAmJiAhdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gb3B0cyAmJiBvcHRzLmZvY3VzQ29sdW1uIHx8IHRoaXMuZm9jdXNDb2x1bW47XG4gICAgICB0aGlzLl9kYXRhU291cmNlLnN0YXJ0RWRpdChyb3cpO1xuICAgIH1cbiAgICB0aGlzLmVkaXRlZFJvdyA9IHJvdztcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LmVtaXQocm93KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gc2VsZWN0IHJvdywgYnkgcm93LmlkLCBvciBieSBkYXRhLiBXSWxsIHVzZSBFbnRpdHlVdGlscy5lcXVhbHMoKVxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHNlbGVjdFJvd0J5SWRPckRhdGEoaWQ6IG51bWJlciwgZGF0YT86IFQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIHRyeSB7XG5cbiAgICAgIC8vIFNlbGVjdCBieSByb3cgaWQgKGlmIE5PVCBhIG5ldyByb3cpXG4gICAgICBpZiAoaXNOb3ROaWwoaWQpIHx8IGlkICE9PSAtMSkge1xuICAgICAgICBkb25lID0gYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkKGlkKTtcbiAgICAgICAgaWYgKGRvbmUpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1thcHAtdGFibGVdIFNhdmU6IENhbm5vdCByZXNlbGVjdCByb3cgYnkgcm93LmlkOiAnLCBpZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyeSBieSBkYXRhXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkb25lID0gYXdhaXQgdGhpcy5zZWxlY3RSb3dCeURhdGEoZGF0YSk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTYXZlOiBDYW5ub3QgcmVzZWxlY3Qgcm93IGJ5IGRhdGE6ICcsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgLy8gTG9nLCBidXQgY29udGludWVcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgc2VsZWN0ZWQgcm93IGlmIHVuaXF1ZSBpbiBzZWxlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgc2luZ2xlU2VsZWN0ZWRSb3coKTogVGFibGVFbGVtZW50PFQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQ/Lmxlbmd0aCA9PT0gMSA/IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkWzBdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhbkRlbGV0ZVJvd3Mocm93czogVGFibGVFbGVtZW50PFQ+W10sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgLy8gQ2hlY2sgdXNpbmcgZW1pdHRlclxuICAgIGlmICh0aGlzLm9uQmVmb3JlRGVsZXRlUm93cy5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FuRGVsZXRlID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlRGVsZXRlUm93cywgJ2NhbkRlbGV0ZScsIHtcbiAgICAgICAgICBkZXRhaWw6IHtyb3dzfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYW5EZWxldGUpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWxcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGRlbGV0ZSByb3dzJywgZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgIGlmICh0aGlzLmNvbmZpcm1CZWZvcmVEZWxldGUgJiYgKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNrRGVsZXRlQ29uZmlybWF0aW9uKG51bGwsIHJvd3MpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5DYW5jZWxSb3dzKHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuOyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICAvLyBHZXQgZGlydHkgcm93c1xuICAgIHJvd3MgPSByb3dzIHx8IChhd2FpdCB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpKS5maWx0ZXIocm93ID0+IHJvdy52YWxpZGF0b3I/LmRpcnR5KTtcblxuICAgIGlmIChpc0VtcHR5QXJyYXkocm93cykpIHJldHVybiB0cnVlOyAvLyBObyBkaXJ0eTogT0tcblxuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzQ2FuY2VsID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cywgJ2NhbkNhbmNlbCcsIHtcbiAgICAgICAgICBkZXRhaWw6IHtyb3dzfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFpc0NhbmNlbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbFxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBjaGVja2luZyBpZiBjYW4gY2FuY2VsIHJvd3MnLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uXG4gICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCAmJiAoIW9wdHMgfHwgb3B0cy5pbnRlcmFjdGl2ZSAhPT0gZmFsc2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc2tDYW5jZWxDb25maXJtYXRpb24obnVsbCwgcm93cyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNhdmVCZWZvcmVBY3Rpb24oc2F2ZUFjdGlvbjogU2F2ZUFjdGlvblR5cGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgLy8gQ29udGludWUgd2l0aG91dCBzYXZlXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgc2F2ZTogYm9vbGVhbjtcbiAgICBzd2l0Y2ggKHNhdmVBY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHNhdmUgPSB0aGlzLnNhdmVCZWZvcmVEZWxldGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZUZpbHRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzb3J0JzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZVNvcnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2F2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvclxuICAgIGxldCBjb25maXJtZWQgPSB0cnVlO1xuXG4gICAgaWYgKHNhdmUpIHtcbiAgICAgIGlmICh0aGlzLm9uQmVmb3JlU2F2ZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBBc2sgY29uZmlybWF0aW9uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlU2F2ZSwgJ2JlZm9yZVNhdmUnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHthY3Rpb246IHNhdmVBY3Rpb24sIHZhbGlkOiB0aGlzLnZhbGlkfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbmZpcm1lZCA9IHJlcy5jb25maXJtZWQ7XG4gICAgICAgICAgc2F2ZSA9IHJlcy5zYXZlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBkZWxldGUgcm93cycsIGVycik7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICBpZiAoc2F2ZSkge1xuICAgICAgICAvLyBVc2VyIGNvbmZpcm1lZCBzYXZlXG4gICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKCk7XG4gICAgICAgIHRoaXMubWFya0FzRGlydHkoKTsgLy8gUmVzdG9yZSBkaXJ0eSBmbGFnXG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlOyAvLyBObyBzYXZlIGJ1dCBjb250aW51ZSBhY3Rpb25cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbCB0aGUgYWN0aW9uXG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIHJvdy4gQnkgZGVmYXVsdCwgd2lsbCB0byBvcGVuIHJvdyBkZXRhaWwgcGFnZS5cbiAgICogQ2FuIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXMsIEJVVCBwcmVmZXIgdG8gc3Vic2NyaWJlIG9uIG9uT3BlblJvd1xuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb3BlblJvdyhpZDogSUQsIHJvdzogVGFibGVFbGVtZW50PFQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYWxsb3dSb3dEZXRhaWwpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnICYmIHRoaXMuZGlydHkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIE9wZW5pbmcgcm93IGRldGFpbHMsIGJ1dCB0YWJsZSBoYXMgdW5zYXZlZCBjaGFuZ2VzIScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vbk9wZW5Sb3cub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm9uT3BlblJvdy5lbWl0KHtpZCwgcm93fSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBJRCBkZWZpbmVkOiB1bmFibGUgdG8gb3BlbiBkZXRhaWxzXG4gICAgICBpZiAoaXNOaWwoaWQpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBPcGVuaW5nIHJvdyBkZXRhaWxzLCBidXQgZGF0YSBoYXMgbm8gaWQhJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFtpZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHt9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9wZW5OZXdSb3dEZXRhaWwoZXZlbnQ/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuYWxsb3dSb3dEZXRhaWwpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICh0aGlzLm9uTmV3Um93Lm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub25OZXdSb3cuZW1pdChldmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyduZXcnXSwge1xuICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gY2FuIGJlIG92ZXJyaWRkZW4gdG8gYWRkIG1vcmUgcmVxdWlyZWQgY29sdW1uc1xuICBwcm90ZWN0ZWQgZ2V0UmVxdWlyZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiBERUZBVUxUX1JFUVVJUkVEX0NPTFVNTlM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VXNlckNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncyh0aGlzLnNldHRpbmdzSWQsIFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydGVkQ29sdW1uKCk6IE1hdFNvcnRhYmxlIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5zZXR0aW5ncy5nZXRQYWdlU2V0dGluZ3ModGhpcy5zZXR0aW5nc0lkLCBTRVRUSU5HU19TT1JURURfQ09MVU1OKTtcbiAgICBjb25zdCBwYXJ0cyA9IGRhdGEgJiYgZGF0YS5zcGxpdCgnOicpO1xuICAgIGlmIChwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPT09IDIgJiYgdGhpcy5jb2x1bW5zLmluY2x1ZGVzKHBhcnRzWzBdKSkge1xuICAgICAgcmV0dXJuIHtpZDogcGFydHNbMF0sIHN0YXJ0OiBwYXJ0c1sxXSA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2V9O1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWZhdWx0U29ydEJ5KSB7XG4gICAgICAgcmV0dXJuIHtpZDogdGhpcy5kZWZhdWx0U29ydEJ5LCBzdGFydDogdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiB8fCAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZX07XG4gICAgfVxuICAgIHJldHVybiB7aWQ6ICdpZCcsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZX07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuc2V0dGluZ3MuZ2V0UGFnZVNldHRpbmdzPG51bWJlcj4odGhpcy5zZXR0aW5nc0lkLCBTRVRUSU5HU19QQUdFX1NJWkUpO1xuICAgIHJldHVybiBwYWdlU2l6ZSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaXNwbGF5Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHVzZXJDb2x1bW5zID0gdGhpcy5nZXRVc2VyQ29sdW1ucygpO1xuXG4gICAgLy8gTm8gdXNlciBvdmVycmlkZVxuICAgIGlmICghdXNlckNvbHVtbnMpIHtcbiAgICAgIC8vIFJldHVybiBkZWZhdWx0LCB3aXRob3V0IGNvbHVtbnMgdG8gaGlkZVxuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+ICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgZml4ZWQgc3RhcnQgY29sdW1uc1xuICAgIGNvbnN0IGZpeGVkU3RhcnRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gUmVtb3ZlIGVuZCBjb2x1bW5zXG4gICAgY29uc3QgZml4ZWRFbmRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IFJFU0VSVkVEX0VORF9DT0xVTU5TLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIFJlbW92ZSBmaXhlZCBjb2x1bW5zIGZyb20gdXNlciBjb2x1bW5zXG4gICAgdXNlckNvbHVtbnMgPSB1c2VyQ29sdW1ucy5maWx0ZXIoYyA9PiAhZml4ZWRTdGFydENvbHVtbnMuaW5jbHVkZXMoYykgJiYgIWZpeGVkRW5kQ29sdW1ucy5pbmNsdWRlcyhjKSAmJiB0aGlzLmNvbHVtbnMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gQWRkIHJlcXVpcmVkIGNvbHVtbnMgaWYgbWlzc2luZ1xuICAgIHVzZXJDb2x1bW5zLnB1c2goLi4udGhpcy5nZXRSZXF1aXJlZENvbHVtbnMoKS5maWx0ZXIoYyA9PiAhZml4ZWRTdGFydENvbHVtbnMuaW5jbHVkZXMoYykgJiYgIWZpeGVkRW5kQ29sdW1ucy5pbmNsdWRlcyhjKSAmJiAhdXNlckNvbHVtbnMuaW5jbHVkZXMoYykpKTtcblxuICAgIHJldHVybiBmaXhlZFN0YXJ0Q29sdW1uc1xuICAgICAgLmNvbmNhdCh1c2VyQ29sdW1ucylcbiAgICAgIC5jb25jYXQoZml4ZWRFbmRDb2x1bW5zKVxuICAgICAgLy8gUmVtb3ZlIGNvbHVtbnMgdG8gaGlkZVxuICAgICAgLmZpbHRlcihjb2x1bW4gPT4gIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29tcHV0ZSBkaXNwbGF5IGNvbHVtbnNcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5nZXREaXNwbGF5Q29sdW1ucygpO1xuICAgIGlmICghdGhpcy5sb2FkaW5nKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YjogU3Vic2NyaXB0aW9uKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVucmVnaXN0ZXJTdWJzY3JpcHRpb24oc3ViOiBTdWJzY3JpcHRpb24pIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHN1Yik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJBdXRvY29tcGxldGVGaWVsZChmaWVsZE5hbWU6IHN0cmluZywgb3B0aW9ucz86IE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9ucyk6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmFkZChmaWVsZE5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEkxOG5Db2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiAodGhpcy5pMThuQ29sdW1uUHJlZml4IHx8ICcnKSArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUoY29sdW1uTmFtZSkudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZW5lcmF0ZVRhYmxlSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYXRpb24ucGF0aCh0cnVlKS5yZXBsYWNlKC9bP10uKiQvZywgJycpLnJlcGxhY2UoL1xcL1tcXGRdKy9nLCAnX2lkJykgKyAnXycgKyB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhcIlt0YWJsZV0gaWQgPSBcIiArIGlkKTtcbiAgICAvL3JldHVybiBpZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhZGRSb3dUb1RhYmxlKGluc2VydEF0PzogbnVtYmVyKTogUHJvbWlzZTxUYWJsZUVsZW1lbnQ8VD4+IHtcbiAgICB0aGlzLmZvY3VzRmlyc3RDb2x1bW4gPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuYXN5bmNDcmVhdGVOZXcoaW5zZXJ0QXQpO1xuICAgIHRoaXMuZWRpdGVkUm93ID0gdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3coLTEpO1xuICAgIC8vIEVtaXQgc3RhcnQgZWRpdGluZyBldmVudFxuICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3cuZW1pdCh0aGlzLmVkaXRlZFJvdyk7XG4gICAgdGhpcy50b3RhbFJvd0NvdW50Kys7XG4gICAgdGhpcy52aXNpYmxlUm93Q291bnQrKztcbiAgICB0aGlzLm1hcmtBc0RpcnR5KHtlbWl0RXZlbnQ6IGZhbHNlIC8qbWFya0ZvckNoZWNrKCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIqL30pO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93O1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyQ2VsbFZhbHVlQ2hhbmdlcyhuYW1lOiBzdHJpbmcsIGZvcm1QYXRoPzogc3RyaW5nLCBlbWl0SW5pdGlhbFZhbHVlPzogYm9vbGVhbik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgZm9ybVBhdGggPSBmb3JtUGF0aCB8fCBuYW1lO1xuICAgIGVtaXRJbml0aWFsVmFsdWUgPSBlbWl0SW5pdGlhbFZhbHVlIHx8IGZhbHNlO1xuICAgIGxldCBkZWYgPSB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXTtcbiAgICBpZiAoZGVmICYmIChkZWYuZm9ybVBhdGggIT09IGZvcm1QYXRoIHx8IGRlZi5lbWl0SW5pdGlhbFZhbHVlICE9PSBlbWl0SW5pdGlhbFZhbHVlKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FscmVhZHkgcmVnaXN0ZXIgYSBjZWxsIHZhbHVlIGNoYW5nZSBmb3IgdGhpcyBuYW1lLCB3aXRoIGRpZmZlcmVudCBcXCdmb3JtUGF0aFxcJyBvciBcXCdlbWl0SW5pdGlhbFZhbHVlXFwnLiBQbGVhc2UgdXNlIHNhbWUgYXJndW1lbnRzLicpO1xuICAgIH1cblxuICAgIC8vIE5vdCBleGlzdHM6IHJlZ2lzdGVyIG5ldyBkZWZpbml0aW9uXG4gICAgaWYgKCFkZWYpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIE5ldyBsaXN0ZW5lciB7JHtuYW1lfX0gZm9yIHZhbHVlIGNoYW5nZXMgb24gcGF0aCAke2Zvcm1QYXRofWApO1xuICAgICAgZGVmID0ge1xuICAgICAgICBzdWJqZWN0OiBuZXcgU3ViamVjdDxhbnk+KCksXG4gICAgICAgIHN1YnNjcmlwdGlvbjogbnVsbCxcbiAgICAgICAgZm9ybVBhdGgsXG4gICAgICAgIGVtaXRJbml0aWFsVmFsdWVcbiAgICAgIH07XG4gICAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VzRGVmc1tuYW1lXSA9IGRlZjtcblxuICAgICAgLy8gU3RhcnQgdGhlIGxpc3RlbmVyLCB3aGVuIGVkaXRpbmcgc3RhcnRzXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnN1YnNjcmliZShyb3cgPT4gdGhpcy5zdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZSwgcm93KSkpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWYuc3ViamVjdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgc2hvdzogYm9vbGVhbiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW5OYW1lKSAhPT0gc2hvdykge1xuICAgICAgaWYgKCFzaG93KSB7XG4gICAgICAgIHRoaXMuZXhjbHVkZXNDb2x1bW5zLnB1c2goY29sdW1uTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZXhjbHVkZXNDb2x1bW5zLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZSA9PT0gY29sdW1uTmFtZSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWNvbXB1dGUgZGlzcGxheSBjb2x1bW5zXG4gICAgICBpZiAodGhpcy5kaXNwbGF5ZWRDb2x1bW5zICYmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTaG93Q29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uTmFtZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRzV2l0aFVwcGVyQ2FzZShpbnB1dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbnB1dCAmJiBpbnB1dC50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgoc2VhcmNoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgLy8gU2hvdWxkIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXMsIGRlcGVuZGluZyBvbiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFza0RlbGV0ZUNvbmZpcm1hdGlvbihldmVudD86IFVJRXZlbnQsIHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLnVuZG9hYmxlRGVsZXRpb24pIHtcbiAgICAgIC8vIFNwZWNpYWwgbWVzc2FnZSwgZm9yIHVuZG9hYmxlIGRlbGV0aW9uXG4gICAgICByZXR1cm4gQWxlcnRzLmFza0NvbmZpcm1hdGlvbihyb3dzPy5sZW5ndGggPT09IDEgPyAnQ09ORklSTS5ERUxFVEVfUk9XJyA6ICdDT05GSVJNLkRFTEVURV9ST1dTJywgdGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCBldmVudCk7XG4gICAgfVxuICAgIC8vIEltbWVkaWF0ZSBkZWxldGlvbiBhY3Rpb25cbiAgICByZXR1cm4gQWxlcnRzLmFza0FjdGlvbkNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIHRydWUsIGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhc2tDYW5jZWxDb25maXJtYXRpb24oZXZlbnQ/OiBVSUV2ZW50LCByb3dzPzogVGFibGVFbGVtZW50PFQ+W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQWxlcnRzLmFza0NvbmZpcm1hdGlvbihyb3dzPy5sZW5ndGggPT09IDEgPyAnQ09ORklSTS5DQU5DRUxfUk9XJyA6ICdDT05GSVJNLkNBTkNFTF9ST1dTJywgdGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXNrUmVzdG9yZUNvbmZpcm1hdGlvbihldmVudD86IFVJRXZlbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gQWxlcnRzLmFza0FjdGlvbkNvbmZpcm1hdGlvbih0aGlzLmFsZXJ0Q3RybCwgdGhpcy50cmFuc2xhdGUsIGZhbHNlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMudG9hc3RDb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdG9hc3RDb250cm9sbGVyIGluIGNvbXBvbmVudFxcJ3MgY29uc3RydWN0b3InKTtcbiAgICByZXR1cm4gVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEVycm9yKG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbjt9KSB7XG4gICAgdGhpcy5zZXRFcnJvcih1bmRlZmluZWQsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFJvd0Vycm9yKHJvdz86IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zKTogc3RyaW5nIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCFyb3cgfHwgIXRoaXMuZm9ybUVycm9yQWRhcHRlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0aGlzLmZvcm1FcnJvckFkYXB0ZXIudHJhbnNsYXRlRm9ybUVycm9ycyhyb3cudmFsaWRhdG9yLCB7XG4gICAgICAuLi50aGlzLmVycm9yVHJhbnNsYXRvck9wdGlvbnMsXG4gICAgICAuLi5vcHRzXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RXJyb3IodmFsdWU6IHN0cmluZywgb3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFuO30pIHtcbiAgICBpZiAodGhpcy5lcnJvclN1YmplY3QudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmVycm9yU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBkYXRhIGVxdWFsaXR5IChkZWZhdWx0IGJ5IGlkKVxuICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiB0byBhZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtIGQxXG4gICAqIEBwYXJhbSBkMlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZXF1YWxzKGQxOiBULCBkMjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBFbnRpdHlVdGlscy5lcXVhbHMoZDEsIGQyLCAnaWQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrUm93QXNEaXJ0eShyb3c/OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEVWZW50PzogYm9vbGVhbjsgfSkge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAocm93KSByb3cudmFsaWRhdG9yPy5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgICB0aGlzLm1hcmtBc0RpcnR5KG9wdHMpO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgLS0gKi9cblxuICBwcml2YXRlIHNldExvYWRpbmcodmFsdWU6IGJvb2xlYW4sIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZSAhPT0gdmFsdWUpICB7XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodmFsdWUpO1xuXG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVOZXdSb3coZXZlbnQ6IEV2ZW50fHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4pIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIHRoaXMuZWRpdGVkUm93ID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCByb3dcbiAgICB0aGlzLl9kYXRhU291cmNlLmNhbmNlbE9yRGVsZXRlKHJvdyk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93Lm5leHQocm93KTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICB0aGlzLnRvdGFsUm93Q291bnQtLTtcbiAgICB0aGlzLnZpc2libGVSb3dDb3VudC0tO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5jZWxFeGlzdGluZ1JvdyhldmVudDogRXZlbnR8dW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPiwgb3B0cz86IHtpbnRlcmFjdGl2ZT86IGJvb2xlYW47IGtlZXBFZGl0aW5nPzogYm9vbGVhbjt9KSB7XG5cbiAgICBjb25zdCBjb25maXJtZWQgPSAoIW9wdHMgfHwgb3B0cy5pbnRlcmFjdGl2ZSAhPT0gZmFsc2UpO1xuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uLCBpZiBjYW5jZWxcbiAgICBpZiAoIWNvbmZpcm1lZCAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSAmJiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsIHx8IHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLm9ic2VydmVycy5sZW5ndGggPiAwKSkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNhbkNhbmNlbFJvd3MoW3Jvd10sIG9wdHMpXG4gICAgICAgIC50aGVuKGNvbmZpcm0gPT4ge1xuICAgICAgICAgIC8vIElmIGNvbmZpcm1lZCwgbG9vcFxuICAgICAgICAgIGlmIChjb25maXJtKSB0aGlzLmNhbmNlbEV4aXN0aW5nUm93KGV2ZW50LCByb3csIHtpbnRlcmFjdGl2ZTogZmFsc2V9KTtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qga2VlcEVkaXRpbmcgPSByb3cuZWRpdGluZyAmJiAoIW9wdHMgfHwgb3B0cy5rZWVwRWRpdGluZyAhPT0gZmFsc2UpO1xuICAgIHRoaXMuZWRpdGVkUm93ID0gdW5kZWZpbmVkOyAvLyB1bnNlbGVjdCByb3dcbiAgICB0aGlzLl9kYXRhU291cmNlLmNhbmNlbE9yRGVsZXRlKHJvdyk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93Lm5leHQocm93KTtcblxuICAgIC8vIE1hcmsgcm93IGFzIHByaXN0aW5lXG4gICAgY29uc3QgbWFya1Jvd0FzUHJpc3RpbmUgPSB0aGlzLmRhdGFTb3VyY2U/Lm9wdGlvbnMua2VlcE9yaWdpbmFsRGF0YUFmdGVyQ29uZmlybSA9PT0gdHJ1ZTtcbiAgICBpZiAobWFya1Jvd0FzUHJpc3RpbmUpIHtcbiAgICAgIHJvdy52YWxpZGF0b3I/Lm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAvLyBDaGVjayBpZiB0YWJsZSBpcyBub3cgcHJpc3RpbmVcbiAgICAgIHRoaXMuY2hlY2tJZlByaXN0aW5lKCk7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBlZGl0aW5nIHN0YXRlXG4gICAgaWYgKGtlZXBFZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRSb3codW5kZWZpbmVkLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlByaXN0aW5lKG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbjt9KSB7XG4gICAgaWYgKCF0aGlzLmRpcnR5KSByZXR1cm47IC8vIEFscmVhZHkgcHJpc3RpbmVcblxuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLl9kYXRhU291cmNlLmdldFJvd3MoKTtcbiAgICBjb25zdCBwcmlzdGluZSA9IChyb3dzIHx8IFtdKS5maW5kSW5kZXgocm93ID0+IHJvdy52YWxpZGF0b3I/LmRpcnR5KSA9PT0gLTE7XG4gICAgaWYgKHByaXN0aW5lKSB0aGlzLm1hcmtBc1ByaXN0aW5lKG9wdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZpbHRlcihmaWx0ZXI6IEYsIG9wdHM6IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgfSkge1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIEFwcGx5aW5nIGZpbHRlcicsIGZpbHRlcik7XG4gICAgdGhpcy5fZmlsdGVyID0gZmlsdGVyO1xuICAgIGlmIChvcHRzICYmIG9wdHMuZW1pdEV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID4gMCkge1xuICAgICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdGhpcy5vblJlZnJlc2guZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRGF0YXNvdXJjZUxvYWRpbmcoZGF0YVNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKCFkYXRhU291cmNlKSB0aHJvdyBuZXcgRXJyb3IoJ1t0YWJsZV0gZGF0YVNvdXJjZSBub3Qgc2V0ICEnKTtcblxuICAgIC8vIENsZWFuaW5nIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBvbiBkYXRhc291cmNlXG4gICAgaWYgKGlzTm90TmlsKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTWFueSBjYWxsIHRvIGxpc3RlbkRhdGFzb3VyY2UoKTogQ2xlYW5pbmcgcHJldmlvdXMgc3Vic2NyaXB0aW9ucy4uLicpO1xuICAgICAgdGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5yZW1vdmUodGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbiA9IHRoaXMuX2RhdGFTb3VyY2UubG9hZGluZ1N1YmplY3RcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuXG4gICAgICAgICAgICAvLyBJZiBjaGFuZ2VkIHRvIFRydWU6IHByb3BhZ2F0ZSBhcyBzb29uIGFzIHBvc3NpYmxlXG4gICAgICAgICAgICB0YXAoKGxvYWRpbmcpID0+IGxvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKHRydWUpKSxcblxuICAgICAgICAgICAgLy8gSWYgY2hhbmdlZCB0byBGYWxzZTogd2FpdCAyNTBtcyBiZWZvcmUgcHJvcGFnYXRlICh0byBtYWtlIHN1cmUgdGhlIHNwaW5uZXIgaGFzIGJlZW4gZGlzcGxheWVkKVxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgICAgICB0YXAobG9hZGluZyA9PiAhbG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcoZmFsc2UpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24pO1xuICB9XG5cblxuICBwcml2YXRlIHN0YXJ0Q2VsbFZhbHVlQ2hhbmdlcyhuYW1lOiBzdHJpbmcsIHJvdzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgY29uc3QgZGVmID0gdGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnNbbmFtZV07XG4gICAgaWYgKCFkZWYpIHtcbiAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBMaXN0ZW5lciB3aXRoIG5hbWUgeycgKyBuYW1lICsgJ30gbm90IHJlZ2lzdGVyZWQhIFBsZWFzZSBjYWxsIHJlZ2lzdGVyQ2VsbFZhbHVlQ2hhbmdlcygpIGJlZm9yZTsnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU3RvcCBwcmV2aW91cyBzdWJzY3JpcHRpb25cbiAgICBpZiAoZGVmLnN1YnNjcmlwdGlvbikge1xuICAgICAgZGVmLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgZGVmLnN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbdGFibGVdIFN0YXJ0IHZhbHVlcyBjaGFuZ2VzIG9uIHJvdyBwYXRoIHske2RlZi5mb3JtUGF0aH19YCk7XG4gICAgfVxuXG4gICAgLy8gTGlzdGVuIHZhbHVlIGNoYW5nZXMsIGFuZCByZWRpcmVjdCB0byBldmVudCBlbWl0dGVyXG4gICAgY29uc3QgY29udHJvbCA9IHJvdy52YWxpZGF0b3IgJiYgQXBwRm9ybVV0aWxzLmdldENvbnRyb2xGcm9tUGF0aChyb3cudmFsaWRhdG9yLCBkZWYuZm9ybVBhdGgpO1xuICAgIGlmICghY29udHJvbCkge1xuICAgICAgY29uc29sZS53YXJuKGBbdGFibGVdIENvdWxkIG5vdCBsaXN0ZW4gY2VsbCBjaGFuZ2VzOiBubyB2YWxpZGF0b3Igb3IgaW52YWxpZCBmb3JtIHBhdGggeyR7ZGVmLmZvcm1QYXRofX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmLnN1YnNjcmlwdGlvbiA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIGRvbid0IGVtaXQgaWYgY29udHJvbCBpcyBkaXNhYmxlZFxuICAgICAgICAgIGZpbHRlcigoKSA9PiBjb250cm9sLmVuYWJsZWQpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IGRlZi5zdWJqZWN0Lm5leHQodmFsdWUpKTtcblxuICAgICAgLy8gRW1pdCB0aGUgYWN0dWFsIHZhbHVlXG4gICAgICBpZiAoZGVmLmVtaXRJbml0aWFsVmFsdWUgIT09IGZhbHNlKSB7XG4gICAgICAgIGRlZi5zdWJqZWN0Lm5leHQoY29udHJvbC52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQ2VsbFZhbHVlQ2hhbmdlcyhuYW1lOiBzdHJpbmcsIGRlc3Ryb3k/OiBib29sZWFuKSB7XG4gICAgY29uc3QgZGVmID0gdGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnNbbmFtZV07XG4gICAgaWYgKCFkZWYpIHJldHVybjtcbiAgICBpZiAoZGVmLnN1YnNjcmlwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gU3RvcCB2YWx1ZSBjaGFuZ2VzIG9uIHJvdyBwYXRoIHsnICsgZGVmLmZvcm1QYXRoICsgJ30nKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH1cbiAgICBpZiAoZGVzdHJveSAmJiBkZWYuc3ViamVjdCkge1xuICAgICAgZGVmLnN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgIGRlZi5zdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
1577
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvdGFibGUuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLHdCQUF3QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwSixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBVyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFZLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFjLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENB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Szt5QkFVTCxLQUFLO3FCQVFMLEtBQUs7d0JBWUwsTUFBTTt3QkFDTixNQUFNO3VCQUNOLE1BQU07Z0NBQ04sTUFBTTtxQ0FDTixNQUFNO2tDQUNOLE1BQU07aUNBQ04sTUFBTTtpQ0FDTixNQUFNOzJCQUNOLE1BQU07aUNBQ04sTUFBTTtxQkFDTixNQUFNO3NCQUNOLE1BQU07c0JBQ04sTUFBTTt1QkFpQ04sS0FBSzt3QkFnSkwsS0FBSztvQkFRTCxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQzs2QkFDbkMsU0FBUyxTQUFDLFlBQVksRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7bUJBQ3ZDLFNBQVMsU0FBQyxPQUFPLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydGFibGUsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gJ0BlLWlzL25neC1tYXRlcmlhbC10YWJsZSc7XG5pbXBvcnQgeyBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4vZW50aXRpZXMtdGFibGUtZGF0YXNvdXJjZS5jbGFzcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBFbnRpdHlVdGlscywgSUVudGl0eSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIE1vZGFsQ29udHJvbGxlciwgUGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29sdW1uSXRlbSwgVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1zZWxlY3QtY29sdW1ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXJyb3JDb2RlcyB9IGZyb20gJy4uL3NlcnZpY2VzL2Vycm9ycyc7XG5pbXBvcnQgeyBBcHBGb3JtVXRpbHMsIElBcHBGb3JtLCBPblJlYWR5IH0gZnJvbSAnLi4vZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlciwgTWF0QXV0b2NvbXBsZXRlRmllbGRBZGRPcHRpb25zLCBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9hdXRvY29tcGxldGUvbWF0ZXJpYWwuYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IENvbXBsZXRhYmxlRXZlbnQsIGNyZWF0ZVByb21pc2VFdmVudEVtaXR0ZXIsIGVtaXRQcm9taXNlRXZlbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvZXZlbnRzJztcbmltcG9ydCB7IGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUsIGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90TmlsLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IGZpcnN0RmFsc2VQcm9taXNlLCBmaXJzdFRydWVQcm9taXNlLCBXYWl0Rm9yT3B0aW9ucyB9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3RzJztcbmltcG9ydCB7IEFsZXJ0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9hbGVydHMnO1xuaW1wb3J0IHsgQ2RrQ29sdW1uRGVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RhYmxlJztcbmltcG9ydCB7IExvYWRSZXN1bHQgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRm9ybUVycm9yVHJhbnNsYXRvciwgRm9ybUVycm9yVHJhbnNsYXRvck9wdGlvbnMsIElGb3JtQ29udHJvbFBhdGhUcmFuc2xhdG9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZhbGlkYXRvci9mb3JtLWVycm9yLWFkYXB0ZXIuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR1NfRElTUExBWV9DT0xVTU5TID0gJ2Rpc3BsYXlDb2x1bW5zJztcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19TT1JURURfQ09MVU1OID0gJ3NvcnRlZENvbHVtbic7XG5leHBvcnQgY29uc3QgU0VUVElOR1NfRklMVEVSID0gJ2ZpbHRlcic7XG5leHBvcnQgY29uc3QgU0VUVElOR1NfUEFHRV9TSVpFID0gJ3BhZ2VTaXplJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BBR0VfU0laRSA9IDIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlMgPSBbMjAsIDUwLCAxMDAsIDIwMCwgNTAwXTtcbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9TVEFSVF9DT0xVTU5TID0gWydzZWxlY3QnLCAnaWQnXTtcbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9FTkRfQ09MVU1OUyA9IFsnYWN0aW9ucyddO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVRVUlSRURfQ09MVU1OUyA9IFsnaWQnXTtcblxuZXhwb3J0IGNsYXNzIENlbGxWYWx1ZUNoYW5nZUxpc3RlbmVyIHtcbiAgc3ViamVjdDogU3ViamVjdDxhbnk+O1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjsgLy8gVGhlIHJvdyBzdGFydCBlZGl0aW5nIHN1YnNjcmlwdGlvblxuICBmb3JtUGF0aDogc3RyaW5nO1xuICBlbWl0SW5pdGlhbFZhbHVlOiBib29sZWFuO1xufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1vZGFsRGV0YWlsT3B0aW9uczxUID0gYW55PiB7XG4gIC8vIERhdGFcbiAgaXNOZXc6IGJvb2xlYW47XG4gIGRhdGE6IFQ7XG4gIGRpc2FibGVkOiBib29sZWFuO1xuXG4gIC8vIENhbGxiYWNrIGZ1bmN0aW9uc1xuICBvbkRlbGV0ZT86IChldmVudDogVUlFdmVudCwgZGF0YTogVCkgPT4gUHJvbWlzZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IHR5cGUgU2F2ZUFjdGlvblR5cGUgPSAnZGVsZXRlJyB8ICdzb3J0JyB8ICdmaWx0ZXInO1xuXG4vLyBAZHluYW1pY1xuQERpcmVjdGl2ZSgpXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBcHBUYWJsZTxcbiAgVCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LFxuICBGID0gYW55LFxuICBJRCA9IG51bWJlclxuICA+XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIElBcHBGb3JtLCBJRm9ybUNvbnRyb2xQYXRoVHJhbnNsYXRvciB7XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgX2NlbGxWYWx1ZUNoYW5nZXNEZWZzOiB7XG4gICAgW2tleTogc3RyaW5nXTogQ2VsbFZhbHVlQ2hhbmdlTGlzdGVuZXI7XG4gIH0gPSB7fTtcblxuICBwcm90ZWN0ZWQgX2VuYWJsZWQgPSB0cnVlO1xuICBwcm90ZWN0ZWQgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVDb25maWdIb2xkZXI6IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcjtcbiAgcHJvdGVjdGVkIGFsbG93Um93RGV0YWlsID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyO1xuICBwcm90ZWN0ZWQgbG9jYXRpb246IExvY2F0aW9uO1xuICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXI7XG4gIHByb3RlY3RlZCBhbGVydEN0cmw6IEFsZXJ0Q29udHJvbGxlcjtcbiAgcHJvdGVjdGVkIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyO1xuICBwcm90ZWN0ZWQgcHJldmlvdXNseUVkaXRlZFJvd0lkOiBudW1iZXI7XG4gIHByb3RlY3RlZCBmb3JtRXJyb3JBZGFwdGVyOiBGb3JtRXJyb3JUcmFuc2xhdG9yO1xuXG4gIGV4Y2x1ZGVzQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW107XG4gIHRvdGFsUm93Q291bnQ6IG51bWJlcnxudWxsID0gbnVsbDtcbiAgdmlzaWJsZVJvd0NvdW50OiBudW1iZXI7XG4gIGVycm9yVHJhbnNsYXRvck9wdGlvbnM6IEZvcm1FcnJvclRyYW5zbGF0b3JPcHRpb25zO1xuXG4gIHJlYWR5U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHNhdmluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgZGlydHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGVycm9yU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xuXG4gIGdldCBlcnJvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVycm9yU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCBlcnJvciQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQHBhcmFtIGVycm9yXG4gICAqL1xuICBzZXQgZXJyb3IoZXJyb3I6IHN0cmluZykge1xuICAgIHRoaXMuc2V0RXJyb3IoZXJyb3IpO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHNhdmluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2aW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGlzUmF0ZUxpbWl0UmVhY2hlZCA9IGZhbHNlO1xuICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8VGFibGVFbGVtZW50PFQ+Pih0cnVlLCBbXSk7XG4gIGVkaXRlZFJvdzogVGFibGVFbGVtZW50PFQ+ID0gdW5kZWZpbmVkO1xuICBhdXRvY29tcGxldGVGaWVsZHM6IHtba2V5OiBzdHJpbmddOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZ307XG4gIHJlYWRvbmx5IG1vYmlsZTogYm9vbGVhbjtcblxuICAvLyBUYWJsZSBvcHRpb25zXG4gIEBJbnB1dCgpIHNldHRpbmdzSWQ6IHN0cmluZztcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGkxOG5Db2x1bW5QcmVmaXggPSAnQ09NTU9OLic7XG4gIEBJbnB1dCgpIGkxOG5Db2x1bW5TdWZmaXg6IHN0cmluZztcbiAgQElucHV0KCkgYXV0b0xvYWQgPSB0cnVlO1xuICBASW5wdXQoKSByZWFkT25seTogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5saW5lRWRpdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgZm9jdXNGaXJzdENvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSBjb25maXJtQmVmb3JlRGVsZXRlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpcm1CZWZvcmVDYW5jZWwgPSBmYWxzZTtcbiAgQElucHV0KCkgdW5kb2FibGVEZWxldGlvbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlRGVsZXRlOiBib29sZWFuO1xuICBASW5wdXQoKSBrZWVwRWRpdGVkUm93T25TYXZlOiBib29sZWFuO1xuICBASW5wdXQoKSBzYXZlQmVmb3JlU29ydDogYm9vbGVhbjtcbiAgQElucHV0KCkgc2F2ZUJlZm9yZUZpbHRlcjogYm9vbGVhbjtcbiAgQElucHV0KCkgcHJvcGFnYXRlUm93RXJyb3IgPSBmYWxzZTtcblxuICBASW5wdXQoKSBkZWZhdWx0U29ydEJ5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xuICBASW5wdXQoKSBkZWZhdWx0UGFnZVNpemUgPSBERUZBVUxUX1BBR0VfU0laRTtcbiAgQElucHV0KCkgZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IERFRkFVTFRfUEFHRV9TSVpFX09QVElPTlM7XG5cbiAgLy8gRm9jdXMgbWFuYWdlclxuICBASW5wdXQoKSBmb2N1c0NvbHVtbjogc3RyaW5nO1xuXG4gIGdldCBmaXJzdFVzZXJDb2x1bW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zW1JFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoXTtcbiAgfVxuXG4gIGdldCBsYXN0VXNlckNvbHVtbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnNbdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmxlbmd0aCAtIFJFU0VSVkVEX0VORF9DT0xVTU5TLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEVudGl0aWVzVGFibGVEYXRhU291cmNlPFQsIEYsIElEPikge1xuICAgIHRoaXMuc2V0RGF0YXNvdXJjZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZGF0YVNvdXJjZSgpOiBFbnRpdGllc1RhYmxlRGF0YVNvdXJjZTxULCBGLCBJRD4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZpbHRlcih2YWx1ZTogRikge1xuICAgIHRoaXMuc2V0RmlsdGVyKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXIoKTogRiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgfVxuXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nIHx8IHRoaXMudG90YWxSb3dDb3VudCA9PT0gMDtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvblJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uT3BlblJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZD86IElEOyByb3c6IFRhYmxlRWxlbWVudDxUPiB9PigpO1xuICBAT3V0cHV0KCkgb25OZXdSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uU3RhcnRFZGl0aW5nUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbkNvbmZpcm1FZGl0Q3JlYXRlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbE9yRGVsZXRlUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD4+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZURlbGV0ZVJvd3MgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPGJvb2xlYW4sIHtyb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXX0+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZUNhbmNlbFJvd3MgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPGJvb2xlYW4sIHtyb3dzOiBUYWJsZUVsZW1lbnQ8VD5bXX0+KCk7XG4gIEBPdXRwdXQoKSBvbkJlZm9yZVNhdmUgPSBjcmVhdGVQcm9taXNlRXZlbnRFbWl0dGVyPHtjb25maXJtZWQ6IGJvb2xlYW47IHNhdmU6IGJvb2xlYW59LCB7YWN0aW9uOiBTYXZlQWN0aW9uVHlwZTsgdmFsaWQ6IGJvb2xlYW59PigpO1xuICBAT3V0cHV0KCkgb25BZnRlckRlbGV0ZWRSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVsZW1lbnQ8VD5bXT4oKTtcbiAgQE91dHB1dCgpIG9uU29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25EaXJ0eSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cudmFsaWRhdG9yPy52YWxpZCA6IHRydWU7XG4gIH1cblxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0ZWRSb3cgJiYgdGhpcy5lZGl0ZWRSb3cuZWRpdGluZyA/IHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8uaW52YWxpZCA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGVkUm93ICYmIHRoaXMuZWRpdGVkUm93LmVkaXRpbmcgPyB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/LnBlbmRpbmcgOiBmYWxzZTtcbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICB9XG5cbiAgZW5hYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICB9XG5cbiAgLy8gRklYTUU6IG5lZWQgdG8gaGlkZGVuIGJ1dHRvbnMgKGluIEhUTUwpLCBldGMuIHdoZW4gZGlzYWJsZWRcbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgaWYgKGRpc2FibGVkICE9PSAhdGhpcy5fZW5hYmxlZCkge1xuICAgICAgaWYgKGRpc2FibGVkKSB0aGlzLmRpc2FibGUoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIGVsc2UgdGhpcy5lbmFibGUoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl9lbmFibGVkO1xuICB9XG5cbiAgbWFya0FzRGlydHkob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLmRpcnR5U3ViamVjdC52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuZGlydHlTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5kaXJ0eVN1YmplY3QudmFsdWUgIT09IGZhbHNlIHx8ICh0aGlzLmVkaXRlZFJvdyAmJiB0aGlzLmVkaXRlZFJvdy5pZCAhPT0gdGhpcy5wcmV2aW91c2x5RWRpdGVkUm93SWQpKSB7XG4gICAgICAvLyBDYW5jZWwgdGhlIGN1cnJlbnQgZWRpdGluZyByb3cgb25seSBpZiBlZGl0aW5nIGFuZCBpZiBpdCB3YXMgbm90IHByZXZpb3VzbHkgc2F2ZWRcbiAgICAgIHRoaXMuZGlydHlTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgaWYgKHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jYW5jZWxPckRlbGV0ZSh0aGlzLmVkaXRlZFJvdyk7XG4gICAgICB9XG4gICAgICB0aGlzLmVkaXRlZFJvdyA9IG51bGw7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHByZWZlciB0byB1c2UgbWFya0FsbEFzVG91Y2hlZCgpXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBjb25zb2xlLndhcm4oJ1RPRE86IFJlcGxhY2UgdGhpcyBjYWxsIGJ5IG1hcmtBbGxBc1RvdWNoZWQoKSAtIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiBuZ3gtY29tcG9uZW50cyA+PSAwLjE2LjAnKTtcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdGVkUm93LnZhbGlkYXRvcj8ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRlZFJvdy52YWxpZGF0b3I/Lm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZpbmcob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMuc2F2aW5nU3ViamVjdC52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IHVuZGVmaW5lZDsgLy8gdW5zZWxlY3QgZm9jdXMgY29sdW1uXG4gICAgICB0aGlzLnNhdmluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXJrQXNTYXZlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5zYXZpbmdTdWJqZWN0LnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5zYXZpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSkge1xuICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBvcHRzKTtcbiAgfVxuXG4gIG1hcmtBc0xvYWRlZChvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG4gICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBvcHRzKTtcbiAgfVxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAodGhpcy5yZWFkeVN1YmplY3QudmFsdWUgIT09IHRydWUpIHtcbiAgICAgIHRoaXMucmVhZHlTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgIC8vIElmIHN1YmNsYXNzZXMgaW1wbGVtZW50cyBPblJlYWR5XG4gICAgICBpZiAodHlwZW9mIHRoaXNbJ25nT25SZWFkeSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICh0aGlzIGFzIGFueSBhcyBPblJlYWR5KS5uZ09uUmVhZHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIGdldCBsb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmdTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgZW5hYmxlU29ydCgpIHtcbiAgICBpZiAodGhpcy5zb3J0KSB0aGlzLnNvcnQuZGlzYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGRpc2FibGVTb3J0KCkge1xuICAgIGlmICh0aGlzLnNvcnQpIHRoaXMuc29ydC5kaXNhYmxlZCA9IHRydWU7XG4gIH1cblxuICBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuZGVmYXVsdFBhZ2VTaXplID0gdmFsdWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZSB8fCBERUZBVUxUX1BBR0VfU0laRTtcbiAgfVxuXG4gIGdldCBwYWdlT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplIHx8IDA7XG4gIH1cblxuICBnZXQgc29ydEFjdGl2ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvcnQgJiYgdGhpcy5zb3J0LmFjdGl2ZTtcbiAgfVxuICBnZXQgc29ydERpcmVjdGlvbigpOiAnYXNjJyB8ICdkZXNjJyB7XG4gICAgcmV0dXJuIHRoaXMuc29ydCAmJiB0aGlzLnNvcnQuZGlyZWN0aW9uICYmICh0aGlzLnNvcnQuZGlyZWN0aW9uID09PSAnZGVzYycgPyAnZGVzYycgOiAnYXNjJykgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3J8bnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFnaW5hdG9yKCk6IE1hdFBhZ2luYXRvciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2luYXRvciB8fCB0aGlzLmNoaWxkUGFnaW5hdG9yO1xuICB9XG5cbiAgQFZpZXdDaGlsZChNYXRUYWJsZSwge3N0YXRpYzogZmFsc2V9KSB0YWJsZTogTWF0VGFibGU8VD47XG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7c3RhdGljOiBmYWxzZX0pIGNoaWxkUGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCwge3N0YXRpYzogZmFsc2V9KSBzb3J0OiBNYXRTb3J0O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGNvbHVtbnM6IHN0cmluZ1tdLFxuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZT86IEVudGl0aWVzVGFibGVEYXRhU291cmNlPFQsIEYsIElEPixcbiAgICBwcml2YXRlIF9maWx0ZXI/OiBGXG4gICkge1xuICAgIHRoaXMucm91dGUgPSBpbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xuICAgIHRoaXMucm91dGVyID0gaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgdGhpcy5sb2NhdGlvbiA9IGluamVjdG9yLmdldChMb2NhdGlvbik7XG4gICAgdGhpcy5zZXR0aW5ncyA9IGluamVjdG9yLmdldChMb2NhbFNldHRpbmdzU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGUgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgdGhpcy5tb2RhbEN0cmwgPSBpbmplY3Rvci5nZXQoTW9kYWxDb250cm9sbGVyKTtcbiAgICB0aGlzLmFsZXJ0Q3RybCA9IGluamVjdG9yLmdldChBbGVydENvbnRyb2xsZXIpO1xuICAgIHRoaXMudG9hc3RDb250cm9sbGVyID0gaW5qZWN0b3IuZ2V0KFRvYXN0Q29udHJvbGxlcik7XG4gICAgdGhpcy5mb3JtRXJyb3JBZGFwdGVyID0gaW5qZWN0b3IuZ2V0KEZvcm1FcnJvclRyYW5zbGF0b3IpO1xuICAgIHRoaXMubW9iaWxlID0gdGhpcy5zZXR0aW5ncy5tb2JpbGU7XG5cbiAgICAvLyBBdXRvY29tcGxldGUgZmllbGRzXG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyID0gbmV3IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcih7XG4gICAgICBnZXRVc2VyQXR0cmlidXRlczogKGEsIGIpID0+IHRoaXMuc2V0dGluZ3MuZ2V0RmllbGREaXNwbGF5QXR0cmlidXRlcyhhLCBiKVxuICAgIH0pO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzID0gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmZpZWxkcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgcmV0dXJuOyAvLyBJbml0IG9ubHkgb25jZVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIC8vIFNldCBkZWZhdWx0c1xuICAgIHRoaXMucmVhZE9ubHkgPSB0b0Jvb2xlYW4odGhpcy5yZWFkT25seSwgZmFsc2UpOyAvLyByZWFkL3dyaXRlIGJ5IGRlZmF1bHRcbiAgICB0aGlzLmlubGluZUVkaXRpb24gPSAhdGhpcy5yZWFkT25seSAmJiB0b0Jvb2xlYW4odGhpcy5pbmxpbmVFZGl0aW9uLCBmYWxzZSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVEZWxldGUgPSB0b0Jvb2xlYW4odGhpcy5zYXZlQmVmb3JlRGVsZXRlLCAhdGhpcy5yZWFkT25seSk7IC8vIGZvcmNlIHRvIGZhbHNlIHdoZW4gcmVhZG9ubHlcbiAgICB0aGlzLnNhdmVCZWZvcmVTb3J0ID0gdG9Cb29sZWFuKHRoaXMuc2F2ZUJlZm9yZVNvcnQsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMuc2F2ZUJlZm9yZUZpbHRlciA9IHRvQm9vbGVhbih0aGlzLnNhdmVCZWZvcmVGaWx0ZXIsICF0aGlzLnJlYWRPbmx5KTsgLy8gZm9yY2UgdG8gZmFsc2Ugd2hlbiByZWFkb25seVxuICAgIHRoaXMua2VlcEVkaXRlZFJvd09uU2F2ZSA9IHRvQm9vbGVhbih0aGlzLmtlZXBFZGl0ZWRSb3dPblNhdmUsIHRoaXMuaW5saW5lRWRpdGlvbik7XG4gICAgdGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zID0gdGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zIHx8IHsgc2VwYXJhdG9yOiAnLCAnLCBjb250cm9sUGF0aFRyYW5zbGF0b3I6IHRoaXN9OyAvLyBDYW4gYmUgb3ZlcnJpZGUgaW4gc3ViY2xhc3NlcyBjb25zdHJ1Y3RvcnNcblxuICAgIC8vIENoZWNrIGFzayB1c2VyIGNvbmZpcm1hdGlvbiBpcyBwb3NzaWJsZVxuICAgIGlmICh0aGlzLmNvbmZpcm1CZWZvcmVEZWxldGUgJiYgIXRoaXMuYWxlcnRDdHJsKSB0aHJvdyBFcnJvcignTWlzc2luZyBcXCdhbGVydEN0cmxcXCcgb3IgXFwnaW5qZWN0b3JcXCcgaW4gY29tcG9uZW50XFwncyBjb25zdHJ1Y3Rvci4nKTtcblxuICAgIC8vIERlZmluZWQgdW5pcXVlIGlkIGZvciBzZXR0aW5ncyBmb3IgdGhlIHBhZ2VcbiAgICB0aGlzLnNldHRpbmdzSWQgPSB0aGlzLnNldHRpbmdzSWQgfHwgdGhpcy5nZW5lcmF0ZVRhYmxlSWQoKTtcblxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZ2V0RGlzcGxheUNvbHVtbnMoKTtcblxuICAgIC8vIExvYWQgdGhlIHNvcnRlZCBjb2x1bW5zLCBmcm9tIHNldHRpbmdzXG4gICAge1xuICAgICAgY29uc3Qgc29ydGVkQ29sdW1uID0gdGhpcy5nZXRTb3J0ZWRDb2x1bW4oKTtcbiAgICAgIHRoaXMuZGVmYXVsdFNvcnRCeSA9IHNvcnRlZENvbHVtbi5pZDtcbiAgICAgIHRoaXMuZGVmYXVsdFNvcnREaXJlY3Rpb24gPSBzb3J0ZWRDb2x1bW4uc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0UGFnZVNpemUgPSB0aGlzLmdldFBhZ2VTaXplKCk7XG5cbiAgICAvLyBQcm9wYWdhdGUgZXJyb3IgdG8gZXZlbnQgZW1pdHRlclxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5lcnJvclN1YmplY3RcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5vbkVycm9yLmVtaXQodmFsdWUpKSk7XG5cbiAgICAvLyBQcm9wYWdhdGUgZGlydHkgdG8gZXZlbnQgZW1pdHRlclxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24odGhpcy5kaXJ0eVN1YmplY3RcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5vbkRpcnR5LmVtaXQodmFsdWUpKSk7XG5cbiAgICAvLyBQcm9wYWdhdGUgcm93IGRpcnR5IHN0YXRlIHRvIHRhYmxlXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMub25TdGFydEVkaXRpbmdSb3dcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKHJvdyA9PiByb3c/LnZhbGlkYXRvciAmJiB0cnVlKSxcbiAgICAgICAgICBtZXJnZU1hcChyb3cgPT4gcm93LnZhbGlkYXRvci52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlVW50aWwoXG4gICAgICAgICAgICAgICAgLy8gU3RvcCBpZiBuZXh0IGFub3RoZXIgcm93LCBvciBkZXN0cm95aW5nXG4gICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LFxuICAgICAgICAgICAgICAgICAgdGhpcy5fZGVzdHJveSRcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgICAgICAgLy8ucGlwZShcbiAgICAgICAgICAgICAgICAvLyAgdGFwKCgpID0+IGNvbnNvbGUuZGVidWcoJ1RPRE8gc3RvcHBpbmcgcHJldmlvdXMgcm93IGxpc3RlbmVyJykpXG4gICAgICAgICAgICAgICAgLy8pXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIG1hcCgoKSA9PiByb3cudmFsaWRhdG9yPy5kaXJ0eSksXG4gICAgICAgICAgICAgIGZpbHRlcihkaXJ0eSA9PiBkaXJ0eSA9PT0gdHJ1ZSksXG4gICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgICAgIC8vdGFwKCgpID0+IGNvbnNvbGUuZGVidWcoXCJQcm9wYWdhdGUgcm93J3MgZGlydHkgdG8gdGFibGUuLi5cIikpXG4gICAgICAgICAgICApKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5tYXJrQXNEaXJ0eSgpKVxuICAgICk7XG5cbiAgICAvLyBDYWxsIGRhdGFzb3VyY2UgcmVmcmVzaCwgb24gZWFjaCByZWZyZXNoIGV2ZW50c1xuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLm9uUmVmcmVzaFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzdGFydFdpdGg8YW55LCBhbnk+KHRoaXMuYXV0b0xvYWQgPyB7fSA6ICdza2lwJyksXG4gICAgICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kaXJ0eVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICAgIGlmIChldmVudCA9PT0gJ3NraXAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gU2tpcHBpbmcgZGF0YSBsb2FkOiBubyBkYXRhU291cmNlIGRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBDYWxsaW5nIGRhdGFTb3VyY2Uud2F0Y2hBbGwoKS4uLicpO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZS53YXRjaEFsbChcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VPZmZzZXQsXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRBY3RpdmUsXG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTsgLy8gQ29udGludWVcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHRoaXMudXBkYXRlVmlldyhyZXMpKSk7XG5cbiAgICAvLyBMaXN0ZW4gZGF0YVNvdXJjZSBldmVudHNcbiAgICBpZiAodGhpcy5fZGF0YVNvdXJjZSkgdGhpcy5saXN0ZW5EYXRhc291cmNlTG9hZGluZyh0aGlzLl9kYXRhU291cmNlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgLy8gV2FybiBpZiB0YWJsZSBub3QgZXhpc3RzXG4gICAgICBpZiAoIXRoaXMudGFibGUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFt0YWJsZV0gTWlzc2luZyA8bWF0LXRhYmxlPiBpbiB0aGUgSFRNTCB0ZW1wbGF0ZSAoYWZ0ZXIgd2FpdGluZyA1MDBtcykhIENvbXBvbmVudDogJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCA1MDApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZGlzcGxheWVkQ29sdW1ucykgY29uc29sZS53YXJuKGBbdGFibGVdIE1pc3NpbmcgJ2Rpc3BsYXllZENvbHVtbnMnLiBEaWQgeW91IGNhbGwgc3VwZXIubmdPbkluaXQoKSBpbiBjb21wb25lbnQgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9ID9gKTtcbiAgICB9XG5cbiAgICBtZXJnZShcbiAgICAgIC8vIExpc3RlbiBzb3J0IGV2ZW50c1xuICAgICAgdGhpcy5zb3J0ICYmIHRoaXMuc29ydC5zb3J0Q2hhbmdlXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5zb3J0LmRpc2FibGVkKSxcbiAgICAgICAgICBtZXJnZU1hcChhc3luYyAoKSA9PiB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ3NvcnQnKSksXG4gICAgICAgICAgZmlsdGVyKHJlcyA9PiByZXMgPT09IHRydWUpLFxuICAgICAgICAgIC8vIFNhdmUgc29ydCBpbiBzZXR0aW5nc1xuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IFt0aGlzLnNvcnQuYWN0aXZlLCB0aGlzLnNvcnQuZGlyZWN0aW9uIHx8ICdhc2MnXS5qb2luKCc6Jyk7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZyh0aGlzLnNldHRpbmdzSWQsIHZhbHVlLCBTRVRUSU5HU19TT1JURURfQ09MVU1OKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB8fCBFTVBUWSxcblxuICAgICAgLy8gTGlzdGVuIHBhZ2luYXRvciBldmVudHNcbiAgICAgIHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoYXN5bmMgKCkgPT4gdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdzb3J0JykpLFxuICAgICAgICAgIGZpbHRlcihyZXMgPT4gcmVzID09PSB0cnVlKSxcbiAgICAgICAgICAvLyBTYXZlIHBhZ2Ugc2l6ZVxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnNldHRpbmdzLnNhdmVQYWdlU2V0dGluZyh0aGlzLnNldHRpbmdzSWQsIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplLCBTRVRUSU5HU19QQUdFX1NJWkUpKVxuICAgICAgICApIHx8IEVNUFRZXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5vblNvcnQuZW1pdCgpO1xuICAgICAgdGhpcy5vblJlZnJlc2guZW1pdCh2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBJZiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBzb3J0IG9yZGVyLCByZXNldCBiYWNrIHRvIHRoZSBmaXJzdCBwYWdlLlxuICAgIGlmICh0aGlzLnNvcnQgJiYgdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAgIHRoaXMuc29ydC5zb3J0Q2hhbmdlXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuc29ydC5kaXNhYmxlZCksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAvLyBVbnN1YnNjcmliZSBjb2x1bW4gdmFsdWUgY2hhbmdlc1xuICAgIE9iamVjdC5rZXlzKHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzKS5mb3JFYWNoKGNvbCA9PiB0aGlzLnN0b3BDZWxsVmFsdWVDaGFuZ2VzKGNvbCwgdHJ1ZSkpO1xuICAgIHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzID0ge307XG5cbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zYXZpbmdTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lcnJvclN1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpcnR5U3ViamVjdC51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlZnJlc2gudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uT3BlblJvdy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25OZXdSb3cudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkNhbmNlbE9yRGVsZXRlUm93LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkJlZm9yZURlbGV0ZVJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25CZWZvcmVTYXZlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vbkFmdGVyRGVsZXRlZFJvd3MudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU29ydC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25EaXJ0eS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25FcnJvci51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLl9kYXRhU291cmNlPy5uZ09uRGVzdHJveSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVmlldyhyZXM6IExvYWRSZXN1bHQ8VD4gfCB1bmRlZmluZWQsIG9wdHM/OiB7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghcmVzKSByZXR1cm47IC8vIFNraXAgKGUuZyBlcnJvcilcbiAgICBpZiAocmVzICYmIHJlcy5kYXRhKSB7XG4gICAgICB0aGlzLmlzUmF0ZUxpbWl0UmVhY2hlZCA9ICF0aGlzLnBhZ2luYXRvciB8fCAocmVzLmRhdGEubGVuZ3RoIDwgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpO1xuICAgICAgdGhpcy52aXNpYmxlUm93Q291bnQgPSByZXMuZGF0YS5sZW5ndGg7XG4gICAgICB0aGlzLnRvdGFsUm93Q291bnQgPSBpc05vdE5pbChyZXMudG90YWwpID8gcmVzLnRvdGFsIDogKCh0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggKiAodGhpcy5wYWdpbmF0b3IucGFnZVNpemUgfHwgREVGQVVMVF9QQUdFX1NJWkUpIHx8IDApICsgdGhpcy52aXNpYmxlUm93Q291bnQpO1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYFt0YWJsZV0gJHtyZXMuZGF0YS5sZW5ndGh9IHJvd3MgbG9hZGVkYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1t0YWJsZV0gTk8gcm93cyBsb2FkZWQnKTtcbiAgICAgIHRoaXMuaXNSYXRlTGltaXRSZWFjaGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IDA7XG4gICAgICB0aGlzLnZpc2libGVSb3dDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNVbnRvdWNoZWQoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMubWFya0FzTG9hZGVkKHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNldERhdGFzb3VyY2UoZGF0YXNvdXJjZTogRW50aXRpZXNUYWJsZURhdGFTb3VyY2U8VCwgRiwgSUQ+KSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2UpIHRocm93IG5ldyBFcnJvcignW3RhYmxlXSBkYXRhU291cmNlIGFscmVhZHkgc2V0ICEnKTtcbiAgICBpZiAoZGF0YXNvdXJjZSAmJiB0aGlzLl9kYXRhU291cmNlICE9PSBkYXRhc291cmNlKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YXNvdXJjZTtcbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkgdGhpcy5saXN0ZW5EYXRhc291cmNlTG9hZGluZyhkYXRhc291cmNlKTtcbiAgICB9XG4gIH1cblxuICByZXNldERhdGFTb3VyY2UoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbik7XG4gICAgfVxuICAgIHRoaXMuX2RhdGFTb3VyY2U/Lm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IG51bGw7XG4gIH1cblxuICBhZGRDb2x1bW5EZWYoY29sdW1uOiBDZGtDb2x1bW5EZWYpIHtcbiAgICB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZihjb2x1bW4pO1xuICB9XG5cbiAgcmVtb3ZlQ29sdW1uRGVmKGNvbHVtbjogQ2RrQ29sdW1uRGVmKSB7XG4gICAgdGhpcy50YWJsZS5yZW1vdmVDb2x1bW5EZWYoY29sdW1uKTtcbiAgfVxuXG4gIHNldEZpbHRlcihmaWx0ZXI6IEYsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IH0pIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7ZW1pdEV2ZW50OiB0cnVlfTtcblxuICAgIGlmICh0aGlzLnNhdmVCZWZvcmVGaWx0ZXIpIHtcblxuICAgICAgLy8gaWYgYSBkaXJ0eSB0YWJsZSBpcyB0byBiZSBzYXZlZCBiZWZvcmUgZmlsdGVyXG4gICAgICBpZiAodGhpcy5kaXJ0eSkge1xuXG4gICAgICAgIC8vIFNhdmVcbiAgICAgICAgdGhpcy5zYXZlQmVmb3JlQWN0aW9uKCdmaWx0ZXInKS50aGVuKHNhdmVkID0+IHtcbiAgICAgICAgICAvLyBBcHBseSBmaWx0ZXIgb25seSBpZiB1c2VyIGRpZG4ndCBjYW5jZWwgdGhlIHNhdmUgb3IgdGhlIHNhdmUgaXMgb2tcbiAgICAgICAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgb24gbm9uIGRpcnR5IHRhYmxlXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyLCBvcHRzKTtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIGFwcGx5IGZpbHRlciBkaXJlY3RseVxuICAgICAgdGhpcy5hcHBseUZpbHRlcihmaWx0ZXIsIG9wdHMpO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1BbmRBZGQoZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEFkZCByb3dcbiAgICByZXR1cm4gdGhpcy5hZGRSb3coZXZlbnQpO1xuICB9XG5cbiAgY29uZmlybUFuZEJhY2t3YXJkKGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuXG4gICAgLy8gRGVsZXRpbmcgZWRpdGVkIHJvdywgaWYgZW1wdHkgYW5kIG5vdCBkaXJ0eVxuICAgIGNvbnN0IHByZXZpb3VzUm93ID0gdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKHByZXZpb3VzUm93ICYmIChwcmV2aW91c1Jvdy5pZCA9PT0gLTEpICYmIHByZXZpb3VzUm93LnZhbGlkYXRvcj8uaW52YWxpZCAmJiAhKHByZXZpb3VzUm93LnZhbGlkYXRvcj8uZGlydHkpKSB7XG4gICAgICB0aGlzLmRlbGV0ZU5ld1JvdyhldmVudCwgcHJldmlvdXNSb3cpO1xuXG4gICAgICAvLyBXYWl0IGRlbGV0aW9uIGlzIGRvbmUsIHRoZW4gZWRpdCBwcmV2aW91cyByb3cgKGJ5IGlkLCBiZWNhdXNlIG9mIHJlbG9hZGluZylcbiAgICAgIHRoaXMud2FpdElkbGUoKVxuICAgICAgICAudGhlbigoKSA9PiB0aGlzLmVkaXRSb3dCeUlkKGV2ZW50LCByb3cuaWQsIHtmb2N1c0NvbHVtbjogdGhpcy5sYXN0VXNlckNvbHVtbn0pKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEVkaXQgbmV4dCByb3dcbiAgICB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywge2ZvY3VzQ29sdW1uOiB0aGlzLmxhc3RVc2VyQ29sdW1ufSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25maXJtQW5kRm9yd2FyZChldmVudD86IEV2ZW50LCByb3c/OiBUYWJsZUVsZW1lbnQ8VD4pOiBib29sZWFuIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50LCByb3cpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEVkaXQgbmV4dCByb3dcbiAgICB0aGlzLmVkaXRSb3dCeUlkKGV2ZW50LCByb3cuaWQgKyAxLCB7Zm9jdXNDb2x1bW46IHRoaXMuZmlyc3RVc2VyQ29sdW1ufSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBlZGl0Um93QnlJZChldmVudDogRXZlbnR8dW5kZWZpbmVkLCBpZDogbnVtYmVyLCBvcHRzPzoge2ZvY3VzQ29sdW1uPzogc3RyaW5nOyB9KSB7XG4gICAgaWYgKGlkIDwgMCkgcmV0dXJuO1xuICAgIGlmIChpZCA+PSB0aGlzLnZpc2libGVSb3dDb3VudCkge1xuICAgICAgdGhpcy5mb2N1c0NvbHVtbiA9IG9wdHMgJiYgb3B0cy5mb2N1c0NvbHVtbiB8fCB0aGlzLmZpcnN0VXNlckNvbHVtbjtcbiAgICAgIHRoaXMuYWRkUm93KGV2ZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93KGlkKTtcbiAgICAgIHRoaXMuZWRpdFJvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybSB0aGUgY3JlYXRpb24gb2YgdGhlIGdpdmVuIHJvdywgb3IgaWYgbm90IHNwZWNpZmllZCB0aGUgY3VycmVudGx5IGVkaXRlZCByb3dcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIGNvbmZpcm1FZGl0Q3JlYXRlKGV2ZW50PzogRXZlbnQsIHJvdz86IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIHJvdyA9IHJvdyB8fCB0aGlzLmVkaXRlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhcm93LmVkaXRpbmcpIHJldHVybiB0cnVlOyAvLyBubyByb3cgdG8gY29uZmlybVxuXG4gICAgLy8gU3RvcCBldmVudFxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIENvbmZpcm1hdGlvbiBlZGl0aW9uIG9yIGNyZWF0aW9uXG4gICAgY29uc3QgY29uZmlybWVkID0gcm93LmNvbmZpcm1FZGl0Q3JlYXRlKCk7XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICAvLyBJZiBlZGl0IGZpbmlzaGVkLCBmb3JnZXQgZWRpdGVkIHJvd1xuICAgICAgaWYgKHJvdyA9PT0gdGhpcy5lZGl0ZWRSb3cpIHtcbiAgICAgICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIE1hcmsgdGFibGUgYXMgZGlydHkgKGlmIHJvdyBpcyBkaXJ0eSlcbiAgICAgIGlmIChyb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICB0aGlzLm1hcmtBc0RpcnR5KHtlbWl0RXZlbnQ6IGZhbHNlIC8qIGJlY2F1c2Ugb2YgcmVzZXRFcnJvcigpICovfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIGVycm9yXG4gICAgICB0aGlzLnJlc2V0RXJyb3IoKTtcblxuICAgICAgLy8gRW1pdCB0aGUgY29uZmlybSBldmVudFxuICAgICAgdGhpcy5vbkNvbmZpcm1FZGl0Q3JlYXRlUm93Lm5leHQocm93KTtcblxuICAgICAgcmV0dXJuIHRydWU7IC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKHJvdy52YWxpZGF0b3IpIHtcbiAgICAgIC8vIElmIHBlbmRpbmc6IFdhaXQgZW5kIG9mIHZhbGlkYXRpb24sIHRoZW4gbG9vcFxuICAgICAgaWYgKHJvdy52YWxpZGF0b3IucGVuZGluZykge1xuICAgICAgICBBcHBGb3JtVXRpbHMud2FpdFdoaWxlUGVuZGluZyhyb3cudmFsaWRhdG9yKS50aGVuKCgpID0+IHRoaXMuY29uZmlybUVkaXRDcmVhdGUoZXZlbnQsIHJvdykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIE5PVCBjb25maXJtZWQgPSByb3cgaGFzIGVycm9yXG4gICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gQ2Fubm90IGNvbmZpcm0gcm93LCBiZWNhdXNlIGludmFsaWQnKTtcbiAgICAgICAgQXBwRm9ybVV0aWxzLmxvZ0Zvcm1FcnJvcnMocm93LnZhbGlkYXRvciwgJ1t0YWJsZV0gJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpeDogbWFyayBhbGwgY29udHJvbHMgYXMgdG91Y2hlZCB0byBzaG93IGVycm9yc1xuICAgICAgcm93LnZhbGlkYXRvci5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cbiAgICAgIC8vIENvbXB1dGUgcm93IGVycm9yLCBhbmQgcHJvcGFnYXRlIHRvIHRhYmxlJ3MgZXJyb3JcbiAgICAgIGlmICh0aGlzLnByb3BhZ2F0ZVJvd0Vycm9yKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5nZXRSb3dFcnJvcihyb3cpO1xuICAgICAgICB0aGlzLnNldEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjYW5jZWxPckRlbGV0ZShldmVudDogRXZlbnQsIHJvdzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBpbnRlcmFjdGl2ZT86IGJvb2xlYW47IGtlZXBFZGl0aW5nPzogYm9vbGVhbjsgfSkge1xuICAgIGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICB0aGlzLmRlbGV0ZU5ld1JvdyhldmVudCwgcm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBhZGRSb3coZXZlbnQ/OiBFdmVudCwgaW5zZXJ0QXQ/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBBc2tpbmcgZm9yIG5ldyByb3cuLi4nKTtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFVzZSBtb2RhbCBpZiBpbmxpbmUgZWRpdGlvbiBpcyBkaXNhYmxlZFxuICAgIGlmICghdGhpcy5pbmxpbmVFZGl0aW9uKSB7XG4gICAgICB0aGlzLm9wZW5OZXdSb3dEZXRhaWwoZXZlbnQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBmaW5pc2ggZWRpdGVkIHJvdyBmaXJzdFxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQWRkIG5ldyByb3dcbiAgICB0aGlzLmFkZFJvd1RvVGFibGUoaW5zZXJ0QXQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShvcHRzPzogeyBrZWVwRWRpdGluZz86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIG9wdHMgPSB7XG4gICAgICBrZWVwRWRpdGluZzogdGhpcy5rZWVwRWRpdGVkUm93T25TYXZlLFxuICAgICAgLi4ub3B0c1xuICAgIH07XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHRocm93IHtjb2RlOiBFcnJvckNvZGVzLlRBQkxFX1JFQURfT05MWSwgbWVzc2FnZTogJ0VSUk9SLlRBQkxFX1JFQURfT05MWSd9O1xuICAgIH1cblxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuXG4gICAgLy8gS2VlcCBlZGl0ZWQgcm93IGlkIChzaG91bGQgYmUgZG9uZSBCRUZPUkUgY29uZmlybUVkaXRDcmVhdGUoKSApXG4gICAgdGhpcy5wcmV2aW91c2x5RWRpdGVkUm93SWQgPSBvcHRzLmtlZXBFZGl0aW5nICYmIHRoaXMuZWRpdGVkUm93Py5lZGl0aW5nID8gdGhpcy5lZGl0ZWRSb3cuaWQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJldmlvdXNseUVkaXRlZERhdGEgPSBpc05vdE5pbCh0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCkgJiYgdGhpcy5lZGl0ZWRSb3cuY3VycmVudERhdGEgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdz8uY3VycmVudERhdGE7XG5cbiAgICBpZiAoIXRoaXMuY29uZmlybUVkaXRDcmVhdGUoKSkge1xuICAgICAgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuVEFCTEVfSU5WQUxJRF9ST1dfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5UQUJMRV9JTlZBTElEX1JPV19FUlJPUid9O1xuICAgIH1cblxuICAgIC8vIE1hcmsgYXMgc2F2aW5nXG4gICAgdGhpcy5tYXJrQXNTYXZpbmcoKTtcblxuICAgIHRyeSB7XG5cbiAgICAgIC8vIENhbGxpbmcgc2VydmljZSBzYXZlKClcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIENhbGxpbmcgZGF0YVNvdXJjZS5zYXZlKCkuLi4nKTtcbiAgICAgIGNvbnN0IGlzT0sgPSBhd2FpdCB0aGlzLl9kYXRhU291cmNlLnNhdmUoKTtcblxuICAgICAgaWYgKGlzT0spIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgcmV0dXJuIGlzT0s7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzU2F2ZWQoKTtcblxuICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyByb3dcbiAgICAgIGlmIChpc05vdE5pbCh0aGlzLnByZXZpb3VzbHlFZGl0ZWRSb3dJZCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkT3JEYXRhKHRoaXMucHJldmlvdXNseUVkaXRlZFJvd0lkLCBwcmV2aW91c2x5RWRpdGVkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKGV2ZW50PzogRXZlbnQsIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsgfSkge1xuXG4gICAgLy8gQ2hlY2sgY29uZmlybWF0aW9uXG4gICAgaWYgKCghb3B0cyB8fCBvcHRzLmludGVyYWN0aXZlICE9PSBmYWxzZSkgJiYgdGhpcy5kaXJ0eSAmJiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsIHx8IHRoaXMub25CZWZvcmVDYW5jZWxSb3dzLm9ic2VydmVycy5sZW5ndGggPiAwKSkge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5jYW5DYW5jZWxSb3dzKCkudGhlbihjb25maXJtID0+IHtcbiAgICAgICAgLy8gSWYgY29uZmlybWVkLCBsb29wXG4gICAgICAgIGlmIChjb25maXJtKSB0aGlzLmNhbmNlbChudWxsLCB7aW50ZXJhY3RpdmU6IGZhbHNlfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KCk7XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVSb3coZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzoge1xuICAgIHNraXBQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gIH0pIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICByb3cgPSByb3cgfHwgdGhpcy5zaW5nbGVTZWxlY3RlZFJvdztcbiAgICBpZiAoIXJvdyB8fCAhdGhpcy5jb25maXJtRWRpdENyZWF0ZShldmVudCwgcm93KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1JvdyA9IGF3YWl0IHRoaXMuYWRkUm93VG9UYWJsZShyb3cuaWQgKyAxKTtcbiAgICBjb25zdCBqc29uID0gey4uLnJvdy5jdXJyZW50RGF0YSwgaWQ6IG51bGx9O1xuXG4gICAgLy8gUmVzZXQgc29tZSBwcm9wZXJ0aWVzIChlLmcuIHJhbmtPcmRlciwgZXRjKVxuICAgIGlmIChvcHRzICYmIG9wdHMuc2tpcFByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBuZXdSb3cuY3VycmVudERhdGE7XG4gICAgICBvcHRzLnNraXBQcm9wZXJ0aWVzLmZvckVhY2goa2V5ID0+IGpzb25ba2V5XSA9IG5ld0RhdGFba2V5XSk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1Jvdy52YWxpZGF0b3IpIHtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IucGF0Y2hWYWx1ZShqc29uKTtcbiAgICAgIG5ld1Jvdy52YWxpZGF0b3IubWFya0FzRGlydHkoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAobmV3Um93LmN1cnJlbnREYXRhPy5mcm9tT2JqZWN0KSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YS5mcm9tT2JqZWN0KGpzb24pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG5ld1Jvdy5jdXJyZW50RGF0YSA9IGpzb247XG4gICAgICB9XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0XG4gICAgdGhpcy5jbGlja1Jvdyh1bmRlZmluZWQsIG5ld1Jvdyk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdpc0FsbFNlbGVjdGVkLiBsZW5ndGhzJywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoLCB0aGlzLnRvdGFsUm93Q291bnQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJvd0NvdW50IHx8XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPT09IHRoaXMudmlzaWJsZVJvd0NvdW50O1xuICB9XG5cbiAgLyoqIFNlbGVjdHMgYWxsIHJvd3MgaWYgdGhleSBhcmUgbm90IGFsbCBzZWxlY3RlZDsgb3RoZXJ3aXNlIGNsZWFyIHNlbGVjdGlvbi4gKi9cbiAgYXN5bmMgbWFzdGVyVG9nZ2xlKCkge1xuXG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuZ2V0Um93cygpO1xuICAgICAgcm93cy5mb3JFYWNoKHJvdyA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KSk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlU2VsZWN0aW9uKGV2ZW50OiBVSUV2ZW50KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGVSb3dzKGV2ZW50LCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIG9wdHMgVXNlIGludGVyYWN0aXZlPWZhbHNlIHRvIGF2b2lkIHVzZXIgaW50ZXJhY3Rpb24gKGUuZy4gdXNlciBjb25maXJtYXRpb24pXG4gICAqL1xuICBhc3luYyBkZWxldGVSb3coZXZlbnQ6IFVJRXZlbnR8bnVsbCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7aW50ZXJhY3RpdmU/OiBib29sZWFuO30pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBkZWxldGVDb3VudCA9IGF3YWl0IHRoaXMuZGVsZXRlUm93cyhldmVudCwgW3Jvd10sIG9wdHMpO1xuICAgIHJldHVybiBkZWxldGVDb3VudCA9PT0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIHJvd3NcbiAgICogQHBhcmFtIG9wdHMgVXNlIGludGVyYWN0aXZlPWZhbHNlIHRvIGF2b2lkIHVzZXIgaW50ZXJhY3Rpb24gKGUuZy4gdXNlciBjb25maXJtYXRpb24pXG4gICAqL1xuICBhc3luYyBkZWxldGVSb3dzKGV2ZW50OiBVSUV2ZW50fG51bGwsIHJvd3M6IFRhYmxlRWxlbWVudDxUPltdLCBvcHRzPzoge2ludGVyYWN0aXZlPzogYm9vbGVhbjt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgdGhyb3cge2NvZGU6IEVycm9yQ29kZXMuVEFCTEVfUkVBRF9PTkxZLCBtZXNzYWdlOiAnRVJST1IuVEFCTEVfUkVBRF9PTkxZJ307XG4gICAgfVxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIDA7IC8vIFNLaXBcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICghdGhpcy5fZW5hYmxlZCkgcmV0dXJuIDA7XG4gICAgaWYgKHRoaXMubG9hZGluZyB8fCBpc0VtcHR5QXJyYXkocm93cykpIHJldHVybiAwO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRvIGtlZXAgbmV3bHkgY3JlYXRlZCByb3dcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3c/LmlkID09PSAtMSAmJiB0aGlzLmVkaXRlZFJvdy5lZGl0aW5nICYmICFyb3dzLmluY2x1ZGVzKHRoaXMuZWRpdGVkUm93KSkge1xuICAgICAgY29uc3QgY29uZmlybWVkID0gdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpO1xuICAgICAgaWYgKCFjb25maXJtZWQpIHJldHVybiAwOyAvLyBDYW5ub3QgZGVsZXRlIChlLmcuIGVkaXRlZCByb3cgaXMgaW52YWxpZClcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBjYW4gZGVsZXRlXG4gICAgY29uc3QgY2FuRGVsZXRlID0gYXdhaXQgdGhpcy5jYW5EZWxldGVSb3dzKHJvd3MsIG9wdHMpO1xuICAgIGlmICghY2FuRGVsZXRlKSByZXR1cm4gMDsgLy8gQ2Fubm90IGRlbGV0ZVxuXG4gICAgaWYgKHRoaXMuc2F2ZUJlZm9yZURlbGV0ZSkge1xuICAgICAgLy8gQ2FuY2VsIGludmFsaWQgcm93cyAoYmVjYXVzZSBvZiBzYXZlKCkgd2lsbCBmYWlsLCBpZiBpbnZhbGlkIHJvd3MgZXhpc3RzKVxuICAgICAgcm93cyA9IHJvd3MucmVkdWNlKChyZXMsIHJvdykgPT4ge1xuICAgICAgICBpZiAocm93LnZhbGlkYXRvciAmJiAhcm93LnZhbGlkYXRvci52YWxpZCkge1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZWQgPSByb3cuaWQgPT09IC0xO1xuICAgICAgICAgIHJvdy5jYW5jZWxPckRlbGV0ZSgpO1xuICAgICAgICAgIC8vIFdoZW4gZGVsZXRlZCAoPSBuZXdseSBjcmVhdGVkIHJvdykgOiBkZWNyZW1lbnQgY291bnRlclxuICAgICAgICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVSb3dDb3VudC0tO1xuICAgICAgICAgICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChyb3cpO1xuICAgICAgfSwgW10pO1xuXG4gICAgICBpZiAoaXNFbXB0eUFycmF5KHJvd3MpKSByZXR1cm4gMDtcblxuICAgICAgLy8gSWYgZGF0YSBuZWVkIHRvIGJlIHNhdmVkIGZpcnN0OiBkbyBpdFxuICAgICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLnNhdmVCZWZvcmVBY3Rpb24oJ2RlbGV0ZScpO1xuICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAvLyBTdG9wIGlmIHNhdmUgY2FuY2VsbGVkIG9yIHNhdmUgZmFpbGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBEZWxldGUgc2VsZWN0aW9uLi4uJyk7XG5cbiAgICBjb25zdCByb3dzVG9EZWxldGUgPSByb3dzLnNsaWNlKClcbiAgICAgIC8vIFJldmVyc2Ugcm93IG9yZGVyXG4gICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCwgbmVlZCBiZWNhdXNlIHJvdy5kZWxldGUoKSBoYXMgYXN5bmMgZXhlY3V0aW9uXG4gICAgICAvLyBhbmQgaW5kZXggY2FjaGUgaXMgdXBkYXRlZCB3aXRoIGEgZGVsYXkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5pZCA+IGIuaWQgPyAtMSA6IDEpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gcm93c1RvRGVsZXRlLmxlbmd0aDtcbiAgICAgIGF3YWl0IHRoaXMuX2RhdGFTb3VyY2UuZGVsZXRlQWxsKHJvd3NUb0RlbGV0ZSk7XG5cbiAgICAgIC8vIERPIG5vdCB1cGRhdGUgbWFudWFsbHksIGJlY2F1c2Ugd2F0Y2hBTGwoKS5zdWJzY3JpYmUoKSB3aWxsIHVwZGF0ZSB0aGlzIGNvdW50XG4gICAgICAvL3RoaXMudG90YWxSb3dDb3VudCAtPSBkZWxldGVDb3VudDtcbiAgICAgIC8vdGhpcy52aXNpYmxlUm93Q291bnQgLT0gZGVsZXRlQ291bnQ7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgdGhpcy5lZGl0ZWRSb3cgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KHtlbWl0RXZlbnQ6IGZhbHNlIC8qbWFya0ZvckNoZWNrKCkgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIqL30pO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMub25BZnRlckRlbGV0ZWRSb3dzLm5leHQocm93c1RvRGVsZXRlKTtcbiAgICAgIHJldHVybiBkZWxldGVDb3VudDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2V0RXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VsZWN0Um93QnlJZChpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhU291cmNlLmdldFJvdyhpZCk7XG4gICAgcmV0dXJuIHRoaXMuY2xpY2tSb3cobnVsbCwgcm93KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gc2VsZWN0IHJvdyBieSBkYXRhLiBXaWxsIHVzZSBkYXRhRXF1YWxzKCkgKHRoYXQgY2FsbCBFbnRpdHlVdGlscy5lcXVhbHMoKSkgdG8gZmluZCBzYW1lIHJvdydzIGRhdGFcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIGFzeW5jIHNlbGVjdFJvd0J5RGF0YShkYXRhOiBUKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGRhdGEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgYXdhaXQgdGhpcy53YWl0SWRsZSgpO1xuICAgIGNvbnN0IHJvdyA9IChhd2FpdCB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpIHx8IFtdKVxuICAgICAgLmZpbmQocm93ID0+IHRoaXMuZXF1YWxzKHJvdy5jdXJyZW50RGF0YSwgZGF0YSkpO1xuICAgIHJldHVybiByb3cgJiYgdGhpcy5jbGlja1JvdyhudWxsLCByb3cpO1xuICB9XG5cbiAgY2xpY2tSb3coZXZlbnQ6IFVJRXZlbnR8dW5kZWZpbmVkLCByb3c6IFRhYmxlRWxlbWVudDxUPik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIC8vIFdhaXQgd2hpbGUgbG9hZGluZywgYW5kIGxvb3BcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKFwiW3RhYmxlXSBXYWl0aW5nIGJlZm9yZSBhcHBseSBjbGlja1JvdygpIChkYXRhc291cmNlIGlzIGJ1c3kpLi4uXCIpO1xuICAgICAgdGhpcy53YWl0SWRsZSgpLnRoZW4oKCkgPT4gdGhpcy5jbGlja1JvdyhldmVudCwgcm93KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbdGFibGVdIERldGVjdCBjbGljayBvbiByb3dcIik7XG5cbiAgICBpZiAocm93LmlkID09PSAtMSB8fCByb3cuZWRpdGluZykgcmV0dXJuIHRydWU7IC8vIEFscmVhZHkgaW4gZWRpdGlvblxuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIGZhbHNlOyAvLyBDYW5jZWxsZWQgYnkgZXZlbnRcblxuICAgIC8vIE9wZW4gdGhlIGRldGFpbCBwYWdlIChpZiBub3QgaW5saW5lIGVkaXRpbmcpXG4gICAgaWYgKCF0aGlzLmlubGluZUVkaXRpb24pIHtcblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgICAgIHRoaXMub3BlblJvdyhyb3cuY3VycmVudERhdGEuaWQsIHJvdylcbiAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5tYXJrQXNMb2FkZWQoKSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHRoaXMubWFya0FzTG9hZGVkKCkpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBlZGl0aW5nIHJvd1xuICAgIHJldHVybiB0aGlzLmVkaXRSb3coZXZlbnQsIHJvdywge2ZvY3VzQ29sdW1uOiB1bmRlZmluZWQgLypmb3JjZSB0byB1c2UgdGhlIGNsaWNrIHRhcmdldCovfSk7XG4gIH1cblxuICBtb3ZlUm93KGlkOiBudW1iZXIsIGRpcmVjdGlvbjogbnVtYmVyKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLm1vdmUoaWQsIGRpcmVjdGlvbik7XG4gIH1cblxuICBhc3luYyByZWFkeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBmaXJzdFRydWVQcm9taXNlKHRoaXMucmVhZHlTdWJqZWN0KTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGZpcnN0RmFsc2VQcm9taXNlKHRoaXMubG9hZGluZ1N1YmplY3QpO1xuICB9XG5cbiAgYXN5bmMgb3BlblNlbGVjdENvbHVtbnNNb2RhbChldmVudD86IEV2ZW50KTogUHJvbWlzZTxhbnk+IHtcblxuICAgIC8vIENvcHkgY3VycmVudCBjb2x1bW5zIChkZWVwIGNvcHkpXG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0Q3VycmVudENvbHVtbnMoKTtcblxuICAgIGNvbnN0IGhhc1RvcE1vZGFsID0gISEoYXdhaXQgdGhpcy5tb2RhbEN0cmwuZ2V0VG9wKCkpO1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogVGFibGVTZWxlY3RDb2x1bW5zQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtjb2x1bW5zfSxcbiAgICAgIGNzc0NsYXNzOiBoYXNUb3BNb2RhbCAmJiAnc3RhY2stbW9kYWwnXG4gICAgfSk7XG5cbiAgICAvLyBPcGVuIHRoZSBtb2RhbFxuICAgIGF3YWl0IG1vZGFsLnByZXNlbnQoKTtcblxuICAgIC8vIE9uIGRpc21pc3NcbiAgICBjb25zdCB7ZGF0YX0gPSBhd2FpdCBtb2RhbC5vbkRpZERpc21pc3MoKTtcbiAgICBpZiAoIWRhdGEpIHJldHVybjsgLy8gQ0FOQ0VMTEVEXG5cbiAgICAvLyBBcHBseSBjb2x1bW5zXG4gICAgY29uc3QgdXNlckNvbHVtbnMgPSAoZGF0YSB8fCBbXSkuZmlsdGVyKGMgPT4gYy5jYW5IaWRlID09PSBmYWxzZSB8fCBjLnZpc2libGUpLm1hcChjID0+IGMubmFtZSkgfHwgW107XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gUkVTRVJWRURfU1RBUlRfQ09MVU1OUy5jb25jYXQodXNlckNvbHVtbnMpLmNvbmNhdChSRVNFUlZFRF9FTkRfQ09MVU1OUyk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIC8vIFVwZGF0ZSB1c2VyIHNldHRpbmdzXG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5zYXZlUGFnZVNldHRpbmcodGhpcy5zZXR0aW5nc0lkLCB1c2VyQ29sdW1ucywgU0VUVElOR1NfRElTUExBWV9DT0xVTU5TKTtcbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIHJldHVybiByb3cuaWQ7XG4gIH1cblxuICBkb1JlZnJlc2goZXZlbnQ/OiBDb21wbGV0YWJsZUV2ZW50KSB7XG4gICAgdGhpcy5vblJlZnJlc2guZW1pdChldmVudCk7XG5cbiAgICAvLyBXaGVuIHRhcmdldCB3YWl0IGZvciBhIGNvbXBsZXRlIChlLmcuIElvblJlZnJlc2hlcilcbiAgICBpZiAoZXZlbnQ/LnRhcmdldCAmJiBldmVudC50YXJnZXQuY29tcGxldGUpIHtcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRJZGxlKCk7XG4gICAgICAgIGV2ZW50LnRhcmdldC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudENvbHVtbnMoKTogQ29sdW1uSXRlbVtdIHtcbiAgICBjb25zdCBoaWRkZW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLnNsaWNlKFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMubGVuZ3RoKVxuICAgICAgICAuZmlsdGVyKG5hbWUgPT4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YobmFtZSkgPT09IC0xKTtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zXG4gICAgICAgIC5jb25jYXQoaGlkZGVuQ29sdW1ucylcbiAgICAgICAgLmZpbHRlcihuYW1lID0+ICFSRVNFUlZFRF9TVEFSVF9DT0xVTU5TLmluY2x1ZGVzKG5hbWUpICYmICFSRVNFUlZFRF9FTkRfQ09MVU1OUy5pbmNsdWRlcyhuYW1lKVxuICAgICAgICAgICAgJiYgIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKG5hbWUpKVxuICAgICAgICAubWFwKG5hbWUgPT4gKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmdldEkxOG5Db2x1bW5OYW1lKG5hbWUpLFxuICAgICAgICAgIHZpc2libGU6IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKG5hbWUpICE9PSAtMSxcbiAgICAgICAgICBjYW5IaWRlOiB0aGlzLmdldFJlcXVpcmVkQ29sdW1ucygpLmluZGV4T2YobmFtZSkgPT09IC0xXG4gICAgICAgIH0pKTtcbiAgfVxuXG4gIGVzY2FwZUVkaXRpbmdSb3coZXZlbnQ/OiBFdmVudCwgcm93PzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmICghcm93IHx8ICFyb3cuZWRpdGluZykgcmV0dXJuO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ1thcHAtdGFibGVdIENhbmNlbCB0aGUgcm93IChrZXlkb3duLmVzY2FwZSknKTtcblxuICAgIGlmIChldmVudCkge1xuICAgICAgLy8gQXZvaWQgdG8gY2FuY2VsIHRoZSBlZGl0b3JcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvLyBJZiBuZXcgcm93IGlzIGludmFsaWQ6IGRlbGV0ZSBzaWxlbnRseVxuICAgIGlmIChyb3cuaWQgPT09IC0xICYmIHJvdy52YWxpZGF0b3IuaW52YWxpZCkge1xuICAgICAgdGhpcy5kZWxldGVOZXdSb3coZXZlbnQsIHJvdyk7XG4gICAgfVxuICAgIC8vIElmIGV4aXN0c1xuICAgIGVsc2Uge1xuICAgICAgLy8gY2FuY2VsIChpZiBjb25maXJtYXRpb24pXG4gICAgICBpZiAodGhpcy5jb25maXJtQmVmb3JlQ2FuY2VsKSB7XG4gICAgICAgIHRoaXMuY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQsIHJvdywge2tlZXBFZGl0aW5nOiBmYWxzZX0pO1xuICAgICAgfVxuICAgICAgLy8gT3IgdmFsaWRhdGUsIGlmIG5vIGNvbmZpcm1hdGlvblxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlybUVkaXRDcmVhdGUoZXZlbnQsIHJvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhbnNsYXRlQ29udHJvbFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBDYW4gYmUgb3ZlcnJpZGUgYnkgc3ViY2xhc3NlcywgdG8gcmVzb2x2ZSBhbGwgZmllbGQgbmFtZVxuXG4gICAgLy8gVXNlIGNvbHVtbnMga2V5LCBoYXMgZGVmYXVsdCBuYW1lXG4gICAgY29uc3QgaTE4bkNvbHVtbktleSA9IHRoaXMuZ2V0STE4bkNvbHVtbk5hbWUocGF0aCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlPy5pbnN0YW50KGkxOG5Db2x1bW5LZXkpIHx8IGkxOG5Db2x1bW5LZXk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJvdGVjdGVkIGVkaXRSb3coZXZlbnQ6IEV2ZW50fHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7Zm9jdXNDb2x1bW4/OiBzdHJpbmd9KTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5lZGl0ZWRSb3cgPT09IHJvdykgcmV0dXJuIHRydWU7IC8vIEFscmVhZHkgdGhlIGVkaXRlZCByb3dcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICghdGhpcy5jb25maXJtRWRpdENyZWF0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFyb3cuZWRpdGluZyAmJiAhdGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmZvY3VzQ29sdW1uID0gb3B0cyAmJiBvcHRzLmZvY3VzQ29sdW1uIHx8IHRoaXMuZm9jdXNDb2x1bW47XG4gICAgICB0aGlzLl9kYXRhU291cmNlLnN0YXJ0RWRpdChyb3cpO1xuICAgIH1cbiAgICB0aGlzLmVkaXRlZFJvdyA9IHJvdztcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LmVtaXQocm93KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gc2VsZWN0IHJvdywgYnkgcm93LmlkLCBvciBieSBkYXRhLiBXSWxsIHVzZSBFbnRpdHlVdGlscy5lcXVhbHMoKVxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHNlbGVjdFJvd0J5SWRPckRhdGEoaWQ6IG51bWJlciwgZGF0YT86IFQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIHRyeSB7XG5cbiAgICAgIC8vIFNlbGVjdCBieSByb3cgaWQgKGlmIE5PVCBhIG5ldyByb3cpXG4gICAgICBpZiAoaXNOb3ROaWwoaWQpIHx8IGlkICE9PSAtMSkge1xuICAgICAgICBkb25lID0gYXdhaXQgdGhpcy5zZWxlY3RSb3dCeUlkKGlkKTtcbiAgICAgICAgaWYgKGRvbmUpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1thcHAtdGFibGVdIFNhdmU6IENhbm5vdCByZXNlbGVjdCByb3cgYnkgcm93LmlkOiAnLCBpZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyeSBieSBkYXRhXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkb25lID0gYXdhaXQgdGhpcy5zZWxlY3RSb3dCeURhdGEoZGF0YSk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc29sZS53YXJuKCdbYXBwLXRhYmxlXSBTYXZlOiBDYW5ub3QgcmVzZWxlY3Qgcm93IGJ5IGRhdGE6ICcsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgLy8gTG9nLCBidXQgY29udGludWVcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgc2VsZWN0ZWQgcm93IGlmIHVuaXF1ZSBpbiBzZWxlY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgc2luZ2xlU2VsZWN0ZWRSb3coKTogVGFibGVFbGVtZW50PFQ+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQ/Lmxlbmd0aCA9PT0gMSA/IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkWzBdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhbkRlbGV0ZVJvd3Mocm93czogVGFibGVFbGVtZW50PFQ+W10sIG9wdHM/OiB7IGludGVyYWN0aXZlPzogYm9vbGVhbjsgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXG4gICAgLy8gQ2hlY2sgdXNpbmcgZW1pdHRlclxuICAgIGlmICh0aGlzLm9uQmVmb3JlRGVsZXRlUm93cy5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2FuRGVsZXRlID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlRGVsZXRlUm93cywgJ2NhbkRlbGV0ZScsIHtcbiAgICAgICAgICBkZXRhaWw6IHtyb3dzfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFjYW5EZWxldGUpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiBmYWxzZTsgLy8gVXNlciBjYW5jZWxcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgY2hlY2tpbmcgaWYgY2FuIGRlbGV0ZSByb3dzJywgZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvblxuICAgIGlmICh0aGlzLmNvbmZpcm1CZWZvcmVEZWxldGUgJiYgKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNrRGVsZXRlQ29uZmlybWF0aW9uKG51bGwsIHJvd3MpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYW5DYW5jZWxSb3dzKHJvd3M/OiBUYWJsZUVsZW1lbnQ8VD5bXSwgb3B0cz86IHsgaW50ZXJhY3RpdmU/OiBib29sZWFuOyB9KTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICAvLyBHZXQgZGlydHkgcm93c1xuICAgIHJvd3MgPSByb3dzIHx8IChhd2FpdCB0aGlzLmRhdGFTb3VyY2UuZ2V0Um93cygpKS5maWx0ZXIocm93ID0+IHJvdy52YWxpZGF0b3I/LmRpcnR5KTtcblxuICAgIGlmIChpc0VtcHR5QXJyYXkocm93cykpIHJldHVybiB0cnVlOyAvLyBObyBkaXJ0eTogT0tcblxuICAgIC8vIENoZWNrIHVzaW5nIGVtaXR0ZXJcbiAgICBpZiAodGhpcy5vbkJlZm9yZUNhbmNlbFJvd3Mub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGlzQ2FuY2VsID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cywgJ2NhbkNhbmNlbCcsIHtcbiAgICAgICAgICBkZXRhaWw6IHtyb3dzfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFpc0NhbmNlbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbFxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBjaGVja2luZyBpZiBjYW4gY2FuY2VsIHJvd3MnLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXNrIHVzZXIgY29uZmlybWF0aW9uXG4gICAgaWYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCAmJiAoIW9wdHMgfHwgb3B0cy5pbnRlcmFjdGl2ZSAhPT0gZmFsc2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc2tDYW5jZWxDb25maXJtYXRpb24obnVsbCwgcm93cyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNhdmVCZWZvcmVBY3Rpb24oc2F2ZUFjdGlvbjogU2F2ZUFjdGlvblR5cGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGlmICghdGhpcy5kaXJ0eSkge1xuICAgICAgLy8gQ29udGludWUgd2l0aG91dCBzYXZlXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgc2F2ZTogYm9vbGVhbjtcbiAgICBzd2l0Y2ggKHNhdmVBY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHNhdmUgPSB0aGlzLnNhdmVCZWZvcmVEZWxldGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZUZpbHRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzb3J0JzpcbiAgICAgICAgc2F2ZSA9IHRoaXMuc2F2ZUJlZm9yZVNvcnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc2F2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvclxuICAgIGxldCBjb25maXJtZWQgPSB0cnVlO1xuXG4gICAgaWYgKHNhdmUpIHtcbiAgICAgIGlmICh0aGlzLm9uQmVmb3JlU2F2ZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBBc2sgY29uZmlybWF0aW9uXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZW1pdFByb21pc2VFdmVudCh0aGlzLm9uQmVmb3JlU2F2ZSwgJ2JlZm9yZVNhdmUnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHthY3Rpb246IHNhdmVBY3Rpb24sIHZhbGlkOiB0aGlzLnZhbGlkfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbmZpcm1lZCA9IHJlcy5jb25maXJtZWQ7XG4gICAgICAgICAgc2F2ZSA9IHJlcy5zYXZlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGNoZWNraW5nIGlmIGNhbiBkZWxldGUgcm93cycsIGVycik7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZmlybWVkKSB7XG4gICAgICBpZiAoc2F2ZSkge1xuICAgICAgICAvLyBVc2VyIGNvbmZpcm1lZCBzYXZlXG4gICAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgdGhpcy5zYXZlKCk7XG4gICAgICAgIHRoaXMubWFya0FzRGlydHkoKTsgLy8gUmVzdG9yZSBkaXJ0eSBmbGFnXG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlOyAvLyBObyBzYXZlIGJ1dCBjb250aW51ZSBhY3Rpb25cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBVc2VyIGNhbmNlbCB0aGUgYWN0aW9uXG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIHJvdy4gQnkgZGVmYXVsdCwgd2lsbCB0byBvcGVuIHJvdyBkZXRhaWwgcGFnZS5cbiAgICogQ2FuIGJlIG92ZXJyaWRlIGJ5IHN1YmNsYXNzZXMsIEJVVCBwcmVmZXIgdG8gc3Vic2NyaWJlIG9uIG9uT3BlblJvd1xuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb3BlblJvdyhpZDogSUQsIHJvdzogVGFibGVFbGVtZW50PFQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYWxsb3dSb3dEZXRhaWwpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnICYmIHRoaXMuZGlydHkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbdGFibGVdIE9wZW5pbmcgcm93IGRldGFpbHMsIGJ1dCB0YWJsZSBoYXMgdW5zYXZlZCBjaGFuZ2VzIScpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vbk9wZW5Sb3cub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm9uT3BlblJvdy5lbWl0KHtpZCwgcm93fSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBObyBJRCBkZWZpbmVkOiB1bmFibGUgdG8gb3BlbiBkZXRhaWxzXG4gICAgICBpZiAoaXNOaWwoaWQpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW3RhYmxlXSBPcGVuaW5nIHJvdyBkZXRhaWxzLCBidXQgZGF0YSBoYXMgbm8gaWQhJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFtpZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHt9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9wZW5OZXdSb3dEZXRhaWwoZXZlbnQ/OiBhbnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuYWxsb3dSb3dEZXRhaWwpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICh0aGlzLm9uTmV3Um93Lm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub25OZXdSb3cuZW1pdChldmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWyduZXcnXSwge1xuICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gY2FuIGJlIG92ZXJyaWRkZW4gdG8gYWRkIG1vcmUgcmVxdWlyZWQgY29sdW1uc1xuICBwcm90ZWN0ZWQgZ2V0UmVxdWlyZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiBERUZBVUxUX1JFUVVJUkVEX0NPTFVNTlM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VXNlckNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmdldFBhZ2VTZXR0aW5ncyh0aGlzLnNldHRpbmdzSWQsIFNFVFRJTkdTX0RJU1BMQVlfQ09MVU1OUyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U29ydGVkQ29sdW1uKCk6IE1hdFNvcnRhYmxlIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5zZXR0aW5ncy5nZXRQYWdlU2V0dGluZ3ModGhpcy5zZXR0aW5nc0lkLCBTRVRUSU5HU19TT1JURURfQ09MVU1OKTtcbiAgICBjb25zdCBwYXJ0cyA9IGRhdGEgJiYgZGF0YS5zcGxpdCgnOicpO1xuICAgIGlmIChwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPT09IDIgJiYgdGhpcy5jb2x1bW5zLmluY2x1ZGVzKHBhcnRzWzBdKSkge1xuICAgICAgcmV0dXJuIHtpZDogcGFydHNbMF0sIHN0YXJ0OiBwYXJ0c1sxXSA9PT0gJ2Rlc2MnID8gJ2Rlc2MnIDogJ2FzYycsIGRpc2FibGVDbGVhcjogZmFsc2V9O1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWZhdWx0U29ydEJ5KSB7XG4gICAgICAgcmV0dXJuIHtpZDogdGhpcy5kZWZhdWx0U29ydEJ5LCBzdGFydDogdGhpcy5kZWZhdWx0U29ydERpcmVjdGlvbiB8fCAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZX07XG4gICAgfVxuICAgIHJldHVybiB7aWQ6ICdpZCcsIHN0YXJ0OiAnYXNjJywgZGlzYWJsZUNsZWFyOiBmYWxzZX07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuc2V0dGluZ3MuZ2V0UGFnZVNldHRpbmdzPG51bWJlcj4odGhpcy5zZXR0aW5nc0lkLCBTRVRUSU5HU19QQUdFX1NJWkUpO1xuICAgIHJldHVybiBwYWdlU2l6ZSB8fCB0aGlzLmRlZmF1bHRQYWdlU2l6ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREaXNwbGF5Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHVzZXJDb2x1bW5zID0gdGhpcy5nZXRVc2VyQ29sdW1ucygpO1xuXG4gICAgLy8gTm8gdXNlciBvdmVycmlkZVxuICAgIGlmICghdXNlckNvbHVtbnMpIHtcbiAgICAgIC8vIFJldHVybiBkZWZhdWx0LCB3aXRob3V0IGNvbHVtbnMgdG8gaGlkZVxuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+ICF0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pKTtcbiAgICB9XG5cbiAgICAvLyBHZXQgZml4ZWQgc3RhcnQgY29sdW1uc1xuICAgIGNvbnN0IGZpeGVkU3RhcnRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IFJFU0VSVkVEX1NUQVJUX0NPTFVNTlMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gUmVtb3ZlIGVuZCBjb2x1bW5zXG4gICAgY29uc3QgZml4ZWRFbmRDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjID0+IFJFU0VSVkVEX0VORF9DT0xVTU5TLmluY2x1ZGVzKGMpKTtcblxuICAgIC8vIFJlbW92ZSBmaXhlZCBjb2x1bW5zIGZyb20gdXNlciBjb2x1bW5zXG4gICAgdXNlckNvbHVtbnMgPSB1c2VyQ29sdW1ucy5maWx0ZXIoYyA9PiAhZml4ZWRTdGFydENvbHVtbnMuaW5jbHVkZXMoYykgJiYgIWZpeGVkRW5kQ29sdW1ucy5pbmNsdWRlcyhjKSAmJiB0aGlzLmNvbHVtbnMuaW5jbHVkZXMoYykpO1xuXG4gICAgLy8gQWRkIHJlcXVpcmVkIGNvbHVtbnMgaWYgbWlzc2luZ1xuICAgIHVzZXJDb2x1bW5zLnB1c2goLi4udGhpcy5nZXRSZXF1aXJlZENvbHVtbnMoKS5maWx0ZXIoYyA9PiAhZml4ZWRTdGFydENvbHVtbnMuaW5jbHVkZXMoYykgJiYgIWZpeGVkRW5kQ29sdW1ucy5pbmNsdWRlcyhjKSAmJiAhdXNlckNvbHVtbnMuaW5jbHVkZXMoYykpKTtcblxuICAgIHJldHVybiBmaXhlZFN0YXJ0Q29sdW1uc1xuICAgICAgLmNvbmNhdCh1c2VyQ29sdW1ucylcbiAgICAgIC5jb25jYXQoZml4ZWRFbmRDb2x1bW5zKVxuICAgICAgLy8gUmVtb3ZlIGNvbHVtbnMgdG8gaGlkZVxuICAgICAgLmZpbHRlcihjb2x1bW4gPT4gIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29tcHV0ZSBkaXNwbGF5IGNvbHVtbnNcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5nZXREaXNwbGF5Q29sdW1ucygpO1xuICAgIGlmICghdGhpcy5sb2FkaW5nKSB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YjogU3Vic2NyaXB0aW9uKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzdWIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVucmVnaXN0ZXJTdWJzY3JpcHRpb24oc3ViOiBTdWJzY3JpcHRpb24pIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHN1Yik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJBdXRvY29tcGxldGVGaWVsZChmaWVsZE5hbWU6IHN0cmluZywgb3B0aW9ucz86IE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9ucyk6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLmFkZChmaWVsZE5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEkxOG5Db2x1bW5OYW1lKGNvbHVtbk5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiAodGhpcy5pMThuQ29sdW1uUHJlZml4IHx8ICcnKSArIGNoYW5nZUNhc2VUb1VuZGVyc2NvcmUoY29sdW1uTmFtZSkudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZW5lcmF0ZVRhYmxlSWQoKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmxvY2F0aW9uLnBhdGgodHJ1ZSlcbiAgICAgIC5yZXBsYWNlKC9bP10uKiQvZywgJycpXG4gICAgICAucmVwbGFjZSgvXFwvW1xcZF0rL2csICdfaWQnKVxuICAgICAgKyAnXycgKyB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhcIlt0YWJsZV0gaWQgPSBcIiArIGlkKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYWRkUm93VG9UYWJsZShpbnNlcnRBdD86IG51bWJlcik6IFByb21pc2U8VGFibGVFbGVtZW50PFQ+PiB7XG4gICAgdGhpcy5mb2N1c0ZpcnN0Q29sdW1uID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLl9kYXRhU291cmNlLmFzeW5jQ3JlYXRlTmV3KGluc2VydEF0KTtcbiAgICB0aGlzLmVkaXRlZFJvdyA9IHRoaXMuX2RhdGFTb3VyY2UuZ2V0Um93KC0xKTtcbiAgICAvLyBFbWl0IHN0YXJ0IGVkaXRpbmcgZXZlbnRcbiAgICB0aGlzLm9uU3RhcnRFZGl0aW5nUm93LmVtaXQodGhpcy5lZGl0ZWRSb3cpO1xuICAgIHRoaXMudG90YWxSb3dDb3VudCsrO1xuICAgIHRoaXMudmlzaWJsZVJvd0NvdW50Kys7XG4gICAgdGhpcy5tYXJrQXNEaXJ0eSh7ZW1pdEV2ZW50OiBmYWxzZSAvKm1hcmtGb3JDaGVjaygpIGlzIGNhbGxlZCBqdXN0IGFmdGVyKi99KTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIHJldHVybiB0aGlzLmVkaXRlZFJvdztcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCBmb3JtUGF0aD86IHN0cmluZywgZW1pdEluaXRpYWxWYWx1ZT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGZvcm1QYXRoID0gZm9ybVBhdGggfHwgbmFtZTtcbiAgICBlbWl0SW5pdGlhbFZhbHVlID0gZW1pdEluaXRpYWxWYWx1ZSB8fCBmYWxzZTtcbiAgICBsZXQgZGVmID0gdGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnNbbmFtZV07XG4gICAgaWYgKGRlZiAmJiAoZGVmLmZvcm1QYXRoICE9PSBmb3JtUGF0aCB8fCBkZWYuZW1pdEluaXRpYWxWYWx1ZSAhPT0gZW1pdEluaXRpYWxWYWx1ZSkpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbHJlYWR5IHJlZ2lzdGVyIGEgY2VsbCB2YWx1ZSBjaGFuZ2UgZm9yIHRoaXMgbmFtZSwgd2l0aCBkaWZmZXJlbnQgXFwnZm9ybVBhdGhcXCcgb3IgXFwnZW1pdEluaXRpYWxWYWx1ZVxcJy4gUGxlYXNlIHVzZSBzYW1lIGFyZ3VtZW50cy4nKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgZXhpc3RzOiByZWdpc3RlciBuZXcgZGVmaW5pdGlvblxuICAgIGlmICghZGVmKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBOZXcgbGlzdGVuZXIgeyR7bmFtZX19IGZvciB2YWx1ZSBjaGFuZ2VzIG9uIHBhdGggJHtmb3JtUGF0aH1gKTtcbiAgICAgIGRlZiA9IHtcbiAgICAgICAgc3ViamVjdDogbmV3IFN1YmplY3Q8YW55PigpLFxuICAgICAgICBzdWJzY3JpcHRpb246IG51bGwsXG4gICAgICAgIGZvcm1QYXRoLFxuICAgICAgICBlbWl0SW5pdGlhbFZhbHVlXG4gICAgICB9O1xuICAgICAgdGhpcy5fY2VsbFZhbHVlQ2hhbmdlc0RlZnNbbmFtZV0gPSBkZWY7XG5cbiAgICAgIC8vIFN0YXJ0IHRoZSBsaXN0ZW5lciwgd2hlbiBlZGl0aW5nIHN0YXJ0c1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgICAgdGhpcy5vblN0YXJ0RWRpdGluZ1Jvdy5zdWJzY3JpYmUocm93ID0+IHRoaXMuc3RhcnRDZWxsVmFsdWVDaGFuZ2VzKG5hbWUsIHJvdykpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmLnN1YmplY3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U2hvd0NvbHVtbihjb2x1bW5OYW1lOiBzdHJpbmcsIHNob3c6IGJvb2xlYW4sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5leGNsdWRlc0NvbHVtbnMuaW5jbHVkZXMoY29sdW1uTmFtZSkgIT09IHNob3cpIHtcbiAgICAgIGlmICghc2hvdykge1xuICAgICAgICB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5wdXNoKGNvbHVtbk5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmV4Y2x1ZGVzQ29sdW1ucy5maW5kSW5kZXgodmFsdWUgPT4gdmFsdWUgPT09IGNvbHVtbk5hbWUpO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkgdGhpcy5leGNsdWRlc0NvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVjb21wdXRlIGRpc3BsYXkgY29sdW1uc1xuICAgICAgaWYgKHRoaXMuZGlzcGxheWVkQ29sdW1ucyAmJiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2hvd0NvbHVtbihjb2x1bW5OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZXhjbHVkZXNDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbk5hbWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0c1dpdGhVcHBlckNhc2UoaW5wdXQ6IHN0cmluZywgc2VhcmNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaW5wdXQgJiYgaW5wdXQudG9VcHBlckNhc2UoKS5zdGFydHNXaXRoKHNlYXJjaCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIC8vIFNob3VsZCBiZSBvdmVycmlkZSBieSBzdWJjbGFzc2VzLCBkZXBlbmRpbmcgb24gQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBhc2tEZWxldGVDb25maXJtYXRpb24oZXZlbnQ/OiBVSUV2ZW50LCByb3dzPzogVGFibGVFbGVtZW50PFQ+W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy51bmRvYWJsZURlbGV0aW9uKSB7XG4gICAgICAvLyBTcGVjaWFsIG1lc3NhZ2UsIGZvciB1bmRvYWJsZSBkZWxldGlvblxuICAgICAgcmV0dXJuIEFsZXJ0cy5hc2tDb25maXJtYXRpb24ocm93cz8ubGVuZ3RoID09PSAxID8gJ0NPTkZJUk0uREVMRVRFX1JPVycgOiAnQ09ORklSTS5ERUxFVEVfUk9XUycsIHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgZXZlbnQpO1xuICAgIH1cbiAgICAvLyBJbW1lZGlhdGUgZGVsZXRpb24gYWN0aW9uXG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCB0cnVlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYXNrQ2FuY2VsQ29uZmlybWF0aW9uKGV2ZW50PzogVUlFdmVudCwgcm93cz86IFRhYmxlRWxlbWVudDxUPltdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tDb25maXJtYXRpb24ocm93cz8ubGVuZ3RoID09PSAxID8gJ0NPTkZJUk0uQ0FOQ0VMX1JPVycgOiAnQ09ORklSTS5DQU5DRUxfUk9XUycsIHRoaXMuYWxlcnRDdHJsLCB0aGlzLnRyYW5zbGF0ZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFza1Jlc3RvcmVDb25maXJtYXRpb24oZXZlbnQ/OiBVSUV2ZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIEFsZXJ0cy5hc2tBY3Rpb25Db25maXJtYXRpb24odGhpcy5hbGVydEN0cmwsIHRoaXMudHJhbnNsYXRlLCBmYWxzZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLnRvYXN0Q29udHJvbGxlcikgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHRvYXN0Q29udHJvbGxlciBpbiBjb21wb25lbnRcXCdzIGNvbnN0cnVjdG9yJyk7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRFcnJvcihvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW47fSkge1xuICAgIHRoaXMuc2V0RXJyb3IodW5kZWZpbmVkLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRSb3dFcnJvcihyb3c/OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiBGb3JtRXJyb3JUcmFuc2xhdG9yT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgcm93ID0gcm93IHx8IHRoaXMuZWRpdGVkUm93O1xuICAgIGlmICghcm93IHx8ICF0aGlzLmZvcm1FcnJvckFkYXB0ZXIpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gdGhpcy5mb3JtRXJyb3JBZGFwdGVyLnRyYW5zbGF0ZUZvcm1FcnJvcnMocm93LnZhbGlkYXRvciwge1xuICAgICAgLi4udGhpcy5lcnJvclRyYW5zbGF0b3JPcHRpb25zLFxuICAgICAgLi4ub3B0c1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEVycm9yKHZhbHVlOiBzdHJpbmcsIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbjt9KSB7XG4gICAgaWYgKHRoaXMuZXJyb3JTdWJqZWN0LnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5lcnJvclN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgZGF0YSBlcXVhbGl0eSAoZGVmYXVsdCBieSBpZClcbiAgICogQ2FuIGJlIG92ZXJyaWRkZW4gdG8gYWRkIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBjb21wYXJlXG4gICAqXG4gICAqIEBwYXJhbSBkMVxuICAgKiBAcGFyYW0gZDJcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGVxdWFscyhkMTogVCwgZDI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRW50aXR5VXRpbHMuZXF1YWxzKGQxLCBkMiwgJ2lkJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya1Jvd0FzRGlydHkocm93PzogVGFibGVFbGVtZW50PFQ+LCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFVmVudD86IGJvb2xlYW47IH0pIHtcbiAgICByb3cgPSByb3cgfHwgdGhpcy5lZGl0ZWRSb3c7XG4gICAgaWYgKHJvdykgcm93LnZhbGlkYXRvcj8ubWFya0FzRGlydHkob3B0cyk7XG4gICAgdGhpcy5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nKHZhbHVlOiBib29sZWFuLCBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3QudmFsdWUgIT09IHZhbHVlKSAge1xuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcblxuICAgICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlTmV3Um93KGV2ZW50OiBFdmVudHx1bmRlZmluZWQsIHJvdzogVGFibGVFbGVtZW50PFQ+KSB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDsgLy8gdW5zZWxlY3Qgcm93XG4gICAgdGhpcy5fZGF0YVNvdXJjZS5jYW5jZWxPckRlbGV0ZShyb3cpO1xuICAgIHRoaXMub25DYW5jZWxPckRlbGV0ZVJvdy5uZXh0KHJvdyk7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgdGhpcy50b3RhbFJvd0NvdW50LS07XG4gICAgdGhpcy52aXNpYmxlUm93Q291bnQtLTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRXhpc3RpbmdSb3coZXZlbnQ6IEV2ZW50fHVuZGVmaW5lZCwgcm93OiBUYWJsZUVsZW1lbnQ8VD4sIG9wdHM/OiB7aW50ZXJhY3RpdmU/OiBib29sZWFuOyBrZWVwRWRpdGluZz86IGJvb2xlYW47fSkge1xuXG4gICAgY29uc3QgY29uZmlybWVkID0gKCFvcHRzIHx8IG9wdHMuaW50ZXJhY3RpdmUgIT09IGZhbHNlKTtcblxuICAgIC8vIEFzayB1c2VyIGNvbmZpcm1hdGlvbiwgaWYgY2FuY2VsXG4gICAgaWYgKCFjb25maXJtZWQgJiYgcm93LnZhbGlkYXRvcj8uZGlydHkgJiYgKHRoaXMuY29uZmlybUJlZm9yZUNhbmNlbCB8fCB0aGlzLm9uQmVmb3JlQ2FuY2VsUm93cy5vYnNlcnZlcnMubGVuZ3RoID4gMCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5jYW5DYW5jZWxSb3dzKFtyb3ddLCBvcHRzKVxuICAgICAgICAudGhlbihjb25maXJtID0+IHtcbiAgICAgICAgICAvLyBJZiBjb25maXJtZWQsIGxvb3BcbiAgICAgICAgICBpZiAoY29uZmlybSkgdGhpcy5jYW5jZWxFeGlzdGluZ1JvdyhldmVudCwgcm93LCB7aW50ZXJhY3RpdmU6IGZhbHNlfSk7XG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGtlZXBFZGl0aW5nID0gcm93LmVkaXRpbmcgJiYgKCFvcHRzIHx8IG9wdHMua2VlcEVkaXRpbmcgIT09IGZhbHNlKTtcbiAgICB0aGlzLmVkaXRlZFJvdyA9IHVuZGVmaW5lZDsgLy8gdW5zZWxlY3Qgcm93XG4gICAgdGhpcy5fZGF0YVNvdXJjZS5jYW5jZWxPckRlbGV0ZShyb3cpO1xuICAgIHRoaXMub25DYW5jZWxPckRlbGV0ZVJvdy5uZXh0KHJvdyk7XG5cbiAgICAvLyBNYXJrIHJvdyBhcyBwcmlzdGluZVxuICAgIGNvbnN0IG1hcmtSb3dBc1ByaXN0aW5lID0gdGhpcy5kYXRhU291cmNlPy5vcHRpb25zLmtlZXBPcmlnaW5hbERhdGFBZnRlckNvbmZpcm0gPT09IHRydWU7XG4gICAgaWYgKG1hcmtSb3dBc1ByaXN0aW5lKSB7XG4gICAgICByb3cudmFsaWRhdG9yPy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgLy8gQ2hlY2sgaWYgdGFibGUgaXMgbm93IHByaXN0aW5lXG4gICAgICB0aGlzLmNoZWNrSWZQcmlzdGluZSgpO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgZWRpdGluZyBzdGF0ZVxuICAgIGlmIChrZWVwRWRpdGluZykge1xuICAgICAgdGhpcy5lZGl0Um93KHVuZGVmaW5lZCwgcm93KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSWZQcmlzdGluZShvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW47fSkge1xuICAgIGlmICghdGhpcy5kaXJ0eSkgcmV0dXJuOyAvLyBBbHJlYWR5IHByaXN0aW5lXG5cbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5fZGF0YVNvdXJjZS5nZXRSb3dzKCk7XG4gICAgY29uc3QgcHJpc3RpbmUgPSAocm93cyB8fCBbXSkuZmluZEluZGV4KHJvdyA9PiByb3cudmFsaWRhdG9yPy5kaXJ0eSkgPT09IC0xO1xuICAgIGlmIChwcmlzdGluZSkgdGhpcy5tYXJrQXNQcmlzdGluZShvcHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXIoZmlsdGVyOiBGLCBvcHRzOiB7IGVtaXRFdmVudD86IGJvb2xlYW47IH0pIHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3RhYmxlXSBBcHBseWluZyBmaWx0ZXInLCBmaWx0ZXIpO1xuICAgIHRoaXMuX2ZpbHRlciA9IGZpbHRlcjtcbiAgICBpZiAob3B0cyAmJiBvcHRzLmVtaXRFdmVudCkge1xuICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA+IDApIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMub25SZWZyZXNoLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkRhdGFzb3VyY2VMb2FkaW5nKGRhdGFTb3VyY2U6IEVudGl0aWVzVGFibGVEYXRhU291cmNlPFQsIEYsIElEPikge1xuICAgIGlmICghZGF0YVNvdXJjZSkgdGhyb3cgbmV3IEVycm9yKCdbdGFibGVdIGRhdGFTb3VyY2Ugbm90IHNldCAhJyk7XG5cbiAgICAvLyBDbGVhbmluZyBwcmV2aW91cyBzdWJzY3JpcHRpb24gb24gZGF0YXNvdXJjZVxuICAgIGlmIChpc05vdE5pbCh0aGlzLl9kYXRhU291cmNlTG9hZGluZ1N1YnNjcmlwdGlvbikpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIE1hbnkgY2FsbCB0byBsaXN0ZW5EYXRhc291cmNlKCk6IENsZWFuaW5nIHByZXZpb3VzIHN1YnNjcmlwdGlvbnMuLi4nKTtcbiAgICAgIHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5fZGF0YVNvdXJjZUxvYWRpbmdTdWJzY3JpcHRpb24gPSB0aGlzLl9kYXRhU291cmNlLmxvYWRpbmdTdWJqZWN0XG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcblxuICAgICAgICAgICAgLy8gSWYgY2hhbmdlZCB0byBUcnVlOiBwcm9wYWdhdGUgYXMgc29vbiBhcyBwb3NzaWJsZVxuICAgICAgICAgICAgdGFwKChsb2FkaW5nKSA9PiBsb2FkaW5nICYmIHRoaXMuc2V0TG9hZGluZyh0cnVlKSksXG5cbiAgICAgICAgICAgIC8vIElmIGNoYW5nZWQgdG8gRmFsc2U6IHdhaXQgMjUwbXMgYmVmb3JlIHByb3BhZ2F0ZSAodG8gbWFrZSBzdXJlIHRoZSBzcGlubmVyIGhhcyBiZWVuIGRpc3BsYXllZClcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyNTApLFxuICAgICAgICAgICAgdGFwKGxvYWRpbmcgPT4gIWxvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuX2RhdGFTb3VyY2VMb2FkaW5nU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBzdGFydENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCByb3c6IFRhYmxlRWxlbWVudDxUPikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1t0YWJsZV0gTGlzdGVuZXIgd2l0aCBuYW1lIHsnICsgbmFtZSArICd9IG5vdCByZWdpc3RlcmVkISBQbGVhc2UgY2FsbCByZWdpc3RlckNlbGxWYWx1ZUNoYW5nZXMoKSBiZWZvcmU7Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFN0b3AgcHJldmlvdXMgc3Vic2NyaXB0aW9uXG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3RhYmxlXSBTdGFydCB2YWx1ZXMgY2hhbmdlcyBvbiByb3cgcGF0aCB7JHtkZWYuZm9ybVBhdGh9fWApO1xuICAgIH1cblxuICAgIC8vIExpc3RlbiB2YWx1ZSBjaGFuZ2VzLCBhbmQgcmVkaXJlY3QgdG8gZXZlbnQgZW1pdHRlclxuICAgIGNvbnN0IGNvbnRyb2wgPSByb3cudmFsaWRhdG9yICYmIEFwcEZvcm1VdGlscy5nZXRDb250cm9sRnJvbVBhdGgocm93LnZhbGlkYXRvciwgZGVmLmZvcm1QYXRoKTtcbiAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW3RhYmxlXSBDb3VsZCBub3QgbGlzdGVuIGNlbGwgY2hhbmdlczogbm8gdmFsaWRhdG9yIG9yIGludmFsaWQgZm9ybSBwYXRoIHske2RlZi5mb3JtUGF0aH19YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZi5zdWJzY3JpcHRpb24gPSBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBkb24ndCBlbWl0IGlmIGNvbnRyb2wgaXMgZGlzYWJsZWRcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiBkZWYuc3ViamVjdC5uZXh0KHZhbHVlKSk7XG5cbiAgICAgIC8vIEVtaXQgdGhlIGFjdHVhbCB2YWx1ZVxuICAgICAgaWYgKGRlZi5lbWl0SW5pdGlhbFZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgICBkZWYuc3ViamVjdC5uZXh0KGNvbnRyb2wudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RvcENlbGxWYWx1ZUNoYW5nZXMobmFtZTogc3RyaW5nLCBkZXN0cm95PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuX2NlbGxWYWx1ZUNoYW5nZXNEZWZzW25hbWVdO1xuICAgIGlmICghZGVmKSByZXR1cm47XG4gICAgaWYgKGRlZi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbdGFibGVdIFN0b3AgdmFsdWUgY2hhbmdlcyBvbiByb3cgcGF0aCB7JyArIGRlZi5mb3JtUGF0aCArICd9Jyk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBkZWYuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRlc3Ryb3kgJiYgZGVmLnN1YmplY3QpIHtcbiAgICAgIGRlZi5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICBkZWYuc3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuXG4iXX0=