@sumaris-net/ngx-components 0.24.2 → 0.25.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 (48) hide show
  1. package/bundles/{ngx-sumaris-components.umd.js → sumaris-net.ngx-components.umd.js} +1038 -926
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -0
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +25 -0
  4. package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -0
  5. package/doc/changelog.md +4 -0
  6. package/esm2015/public_api.js +2 -1
  7. package/esm2015/src/app/admin/users/list/users.js +6 -4
  8. package/esm2015/src/app/core/graphql/graphql.service.js +25 -72
  9. package/esm2015/src/app/core/graphql/graphql.utils.js +1 -1
  10. package/esm2015/src/app/core/install/install-upgrade-card.component.js +105 -46
  11. package/esm2015/src/app/core/services/account.service.js +146 -149
  12. package/esm2015/src/app/core/services/config.service.js +21 -14
  13. package/esm2015/src/app/core/services/local-settings.service.js +72 -87
  14. package/esm2015/src/app/core/services/network.service.js +136 -171
  15. package/esm2015/src/app/core/services/platform.service.js +34 -17
  16. package/esm2015/src/app/core/services/storage/entities-storage.service.js +59 -63
  17. package/esm2015/src/app/shared/audio/audio.js +10 -39
  18. package/esm2015/src/app/shared/material/boolean/material.boolean.js +1 -1
  19. package/esm2015/src/app/shared/services/startable-service.class.js +77 -0
  20. package/esm2015/src/environments/environment.class.js +1 -1
  21. package/esm2015/src/environments/environment.js +5 -1
  22. package/esm2015/sumaris-net.ngx-components.js +13 -0
  23. package/fesm2015/{ngx-sumaris-components.js → sumaris-net.ngx-components.js} +669 -646
  24. package/fesm2015/sumaris-net.ngx-components.js.map +1 -0
  25. package/package.json +13 -9
  26. package/public_api.d.ts +1 -0
  27. package/src/app/admin/users/list/users.d.ts +1 -0
  28. package/src/app/core/graphql/graphql.service.d.ts +5 -13
  29. package/src/app/core/graphql/graphql.utils.d.ts +2 -1
  30. package/src/app/core/install/install-upgrade-card.component.d.ts +12 -7
  31. package/src/app/core/services/account.service.d.ts +11 -10
  32. package/src/app/core/services/config.service.d.ts +6 -5
  33. package/src/app/core/services/local-settings.service.d.ts +4 -9
  34. package/src/app/core/services/network.service.d.ts +27 -38
  35. package/src/app/core/services/platform.service.d.ts +2 -1
  36. package/src/app/core/services/storage/entities-storage.service.d.ts +13 -13
  37. package/src/app/shared/audio/audio.d.ts +4 -8
  38. package/src/app/shared/services/startable-service.class.d.ts +26 -0
  39. package/src/assets/i18n/fr.json +2 -0
  40. package/src/environments/environment.class.d.ts +1 -0
  41. package/{ngx-sumaris-components.d.ts → sumaris-net.ngx-components.d.ts} +0 -0
  42. package/sumaris-net.ngx-components.metadata.json +1 -0
  43. package/bundles/ngx-sumaris-components.umd.js.map +0 -1
  44. package/bundles/ngx-sumaris-components.umd.min.js +0 -25
  45. package/bundles/ngx-sumaris-components.umd.min.js.map +0 -1
  46. package/esm2015/ngx-sumaris-components.js +0 -13
  47. package/fesm2015/ngx-sumaris-components.js.map +0 -1
  48. package/ngx-sumaris-components.metadata.json +0 -1
@@ -113,9 +113,8 @@ export class ConfigService extends BaseGraphqlService {
113
113
  }
114
114
  get config() {
115
115
  // If first call: start loading
116
- if (!this._started) {
116
+ if (!this._started)
117
117
  this.start();
118
- }
119
118
  return this.$data.pipe(filter(isNotNil));
120
119
  }
121
120
  start() {
@@ -126,30 +125,38 @@ export class ConfigService extends BaseGraphqlService {
126
125
  console.info('[config] Starting configuration...');
127
126
  this._startPromise = this.graphql.ready()
128
127
  .then(() => this.loadOrRestoreLocally())
129
- .then(() => {
128
+ .then((data) => {
130
129
  this._started = true;
131
130
  this._startPromise = undefined;
131
+ this.$data.next(data);
132
+ return data;
132
133
  })
133
134
  .catch((err) => {
134
135
  console.error(err && err.message || err, err);
136
+ this._started = false;
135
137
  this._startPromise = undefined;
138
+ return null;
136
139
  });
137
140
  return this._startPromise;
138
141
  }
139
142
  stop() {
140
- this._subscription.unsubscribe();
141
- this._subscription = new Subscription();
142
- this._started = false;
143
- this._startPromise = undefined;
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ this._subscription.unsubscribe();
145
+ this._subscription = new Subscription();
146
+ this._started = false;
147
+ this._startPromise = undefined;
148
+ });
144
149
  }
145
150
  restart() {
146
- if (this.started)
147
- this.stop();
148
- return this.start();
151
+ return __awaiter(this, void 0, void 0, function* () {
152
+ if (this.started)
153
+ yield this.stop();
154
+ return this.start();
155
+ });
149
156
  }
150
157
  ready() {
151
158
  if (this._started)
152
- return Promise.resolve();
159
+ return Promise.resolve(this.$data.value);
153
160
  if (this._startPromise)
154
161
  return this._startPromise;
155
162
  return this.start();
@@ -204,7 +211,7 @@ export class ConfigService extends BaseGraphqlService {
204
211
  console.debug('[config] Pod configuration saved!');
205
212
  const reloadedConfig = yield this.loadDefault({ fetchPolicy: 'network-only' });
206
213
  // If this is the default config
207
- const defaultConfig = this.$data.getValue();
214
+ const defaultConfig = this.$data.value;
208
215
  if (isNotNil(defaultConfig) && reloadedConfig.label === defaultConfig.label) {
209
216
  // Emit update event when is default config
210
217
  this.$data.next(reloadedConfig);
@@ -281,7 +288,7 @@ export class ConfigService extends BaseGraphqlService {
281
288
  if (wasJustLoaded) {
282
289
  // TODO
283
290
  }
284
- this.$data.next(data);
291
+ return data;
285
292
  });
286
293
  }
287
294
  restoreLocally() {
@@ -412,4 +419,4 @@ ConfigService.ctorParameters = () => [
412
419
  { type: undefined, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
413
420
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_CONFIG_OPTIONS,] }] }
414
421
  ];
415
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBQyxlQUFlLEVBQUUsUUFBUSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsUUFBUSxFQUFFLGVBQWUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBbUIsTUFBTSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FB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QUFDLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQzt5QkFDdkY7cUJBQ0Y7aUJBQ0Y7Z0JBRUQsMkJBQTJCO2dCQUMzQjtvQkFDRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ2hDLElBQUksSUFBSSxDQUFDLE1BQU07d0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO29CQUMvRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUNuRSxJQUFJLElBQUksQ0FBQyxNQUFNO3dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMscURBQXFELElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO2lCQUMzRzthQUNGO1FBQ0gsQ0FBQztLQUFBO0lBRWUsU0FBUyxDQUFDLElBQXNCOztZQUM5QyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLENBQUM7S0FBQTs7OztZQXhXRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDO2FBQzNCOzs7WUE5RU8sUUFBUTtZQU5SLGNBQWM7WUFIZCxPQUFPO1lBT1AsY0FBYztZQURkLFdBQVc7WUFHRCxlQUFlO1lBRXpCLGdCQUFnQjs0Q0E2R25CLE1BQU0sU0FBQyxXQUFXOzRDQUNsQixRQUFRLFlBQUksTUFBTSxTQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtncWx9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcuL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtFcnJvckNvZGVzfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQge0dyYXBocWxTZXJ2aWNlfSBmcm9tICcuLi9ncmFwaHFsL2dyYXBocWwuc2VydmljZSc7XG5pbXBvcnQge0Zvcm1GaWVsZERlZmluaXRpb24sIEZvcm1GaWVsZERlZmluaXRpb25NYXB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7aXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0ZpbGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtOZXR3b3JrU2VydmljZX0gZnJvbSAnLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtDT1JFX0NPTkZJR19PUFRJT05TfSBmcm9tICcuL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQge1BsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7U2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3RzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHlTZXJ2aWNlTG9hZE9wdGlvbnMsIElFbnRpdHlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7QmFzZUdyYXBocWxTZXJ2aWNlfSBmcm9tICcuL2Jhc2UtZ3JhcGhxbC1zZXJ2aWNlLmNsYXNzJztcblxuXG5jb25zdCBDT05GSUdVUkFUSU9OX1NUT1JBR0VfS0VZID0gJ2NvbmZpZ3VyYXRpb24nO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEdyYXBoUUwgcXVlcmllc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBjb25zdCBGcmFnbWVudHMgPSB7XG4gIGNvbmZpZzogZ3FsYFxuICAgIGZyYWdtZW50IENvbmZpZ0ZyYWdtZW50IG9uIENvbmZpZ3VyYXRpb25WTyB7XG4gICAgICBpZFxuICAgICAgbGFiZWxcbiAgICAgIG5hbWVcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgICBjb21tZW50c1xuICAgICAgcHJvcGVydGllc1xuICAgICAgc21hbGxMb2dvXG4gICAgICBsYXJnZUxvZ29cbiAgICAgIGJhY2tncm91bmRJbWFnZXNcbiAgICAgIHBhcnRuZXJzIHtcbiAgICAgICAgaWRcbiAgICAgICAgbGFiZWxcbiAgICAgICAgbmFtZVxuICAgICAgICBsb2dvXG4gICAgICAgIHNpdGVVcmxcbiAgICAgICAgX190eXBlbmFtZVxuICAgICAgfVxuICAgICAgdXBkYXRlRGF0ZVxuICAgICAgY3JlYXRpb25EYXRlXG4gICAgICBzdGF0dXNJZFxuICAgICAgX190eXBlbmFtZVxuICAgIH1cbiAgYFxufTtcblxuY29uc3QgTG9hZFF1ZXJ5OiBhbnkgPSBncWxgXG5xdWVyeSBDb25maWd1cmF0aW9ue1xuICBkYXRhOiBjb25maWd1cmF0aW9ue1xuICAgIC4uLkNvbmZpZ0ZyYWdtZW50XG4gIH1cbn1cbiAgJHtGcmFnbWVudHMuY29uZmlnfVxuYDtcblxuLy8gU2F2ZSAoY3JlYXRlIG9yIHVwZGF0ZSkgYWNjb3VudCBtdXRhdGlvblxuY29uc3QgU2F2ZU11dGF0aW9uOiBhbnkgPSBncWxgXG4gIG11dGF0aW9uIFNhdmVDb25maWd1cmF0aW9uKCRkYXRhOiBDb25maWd1cmF0aW9uVk9JbnB1dCl7XG4gICAgZGF0YTogc2F2ZUNvbmZpZ3VyYXRpb24oY29uZmlnOiAkZGF0YSl7XG4gICAgICAgLi4uQ29uZmlnRnJhZ21lbnRcbiAgICB9XG4gIH1cbiAgJHtGcmFnbWVudHMuY29uZmlnfVxuYDtcblxuY29uc3QgQ2xlYXJDYWNoZTogYW55ID0gZ3FsYFxuICBxdWVyeSBDbGVhckNhY2hlKCRuYW1lOiBTdHJpbmcpIHtcbiAgICBjbGVhckNhY2hlKG5hbWU6ICRuYW1lKVxuICB9XG5gO1xuXG5jb25zdCBDYWNoZVN0YXRpc3RpY3M6IGFueSA9IGdxbGBcbiAgcXVlcnkgQ2FjaGVTdGF0aXN0aWNzIHtcbiAgICBjYWNoZVN0YXRpc3RpY3NcbiAgfVxuYDtcblxuZXhwb3J0IGNvbnN0IEFQUF9DT05GSUdfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxGb3JtRmllbGREZWZpbml0aW9uTWFwPignZGVmYXVsdE9wdGlvbnMnKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGRlcHM6IFtBUFBfQ09ORklHX09QVElPTlNdXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpZ1NlcnZpY2VcbiAgZXh0ZW5kcyBCYXNlR3JhcGhxbFNlcnZpY2U8Q29uZmlndXJhdGlvbiwgYW55LCBudW1iZXI+XG4gIGltcGxlbWVudHMgSUVudGl0eVNlcnZpY2U8Q29uZmlndXJhdGlvbj4ge1xuXG4gIHByaXZhdGUgX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3RhcnRQcm9taXNlOiBQcm9taXNlPGFueT47XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfb3B0aW9uRGVmczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuXG4gIHByaXZhdGUgJGRhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbmZpZ3VyYXRpb24+KG51bGwpO1xuXG4gIGdldCBzdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGFydGVkO1xuICB9XG5cbiAgZ2V0IGNvbmZpZygpOiBPYnNlcnZhYmxlPENvbmZpZ3VyYXRpb24+IHtcbiAgICAvLyBJZiBmaXJzdCBjYWxsOiBzdGFydCBsb2FkaW5nXG4gICAgaWYgKCF0aGlzLl9zdGFydGVkKSB7XG4gICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuJGRhdGEucGlwZShmaWx0ZXIoaXNOb3ROaWwpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHByb3RlY3RlZCBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZmlsZTogRmlsZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0NPTkZJR19PUFRJT05TKSBkZWZhdWx0T3B0aW9uc01hcDogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcFxuICApIHtcbiAgICBzdXBlcihncmFwaHFsLCBlbnZpcm9ubWVudCk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gQ3JlYXRpbmcgc2VydmljZScpO1xuXG4gICAgdGhpcy5fb3B0aW9uRGVmcyA9IE9iamVjdC52YWx1ZXMoey4uLkNPUkVfQ09ORklHX09QVElPTlMsIC4uLmRlZmF1bHRPcHRpb25zTWFwfSk7XG5cbiAgICAvLyBSZXN0YXJ0IGlmIGdyYXBocWwgc2VydmljZSByZXN0YXJ0XG4gICAgdGhpcy5ncmFwaHFsLm9uU3RhcnQuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzdGFydCgpKTtcblxuICAgIC8vIFN0YXJ0XG4gICAgaWYgKHRoaXMuZ3JhcGhxbC5zdGFydGVkKSB7XG4gICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N0YXJ0UHJvbWlzZSkgcmV0dXJuIHRoaXMuX3N0YXJ0UHJvbWlzZTtcbiAgICBpZiAodGhpcy5fc3RhcnRlZCkgcmV0dXJuO1xuXG4gICAgY29uc29sZS5pbmZvKCdbY29uZmlnXSBTdGFydGluZyBjb25maWd1cmF0aW9uLi4uJyk7XG5cbiAgICB0aGlzLl9zdGFydFByb21pc2UgPSB0aGlzLmdyYXBocWwucmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2FkT3JSZXN0b3JlTG9jYWxseSgpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc3RhcnRQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyICYmIGVyci5tZXNzYWdlIHx8IGVyciwgZXJyKTtcbiAgICAgICAgdGhpcy5fc3RhcnRQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0UHJvbWlzZTtcblxuICB9XG5cbiAgc3RvcCgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3N0YXJ0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJlc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhcnRlZCkgdGhpcy5zdG9wKCk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHJlYWR5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGFydGVkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKHRoaXMuX3N0YXJ0UHJvbWlzZSkgcmV0dXJuIHRoaXMuX3N0YXJ0UHJvbWlzZTtcbiAgICByZXR1cm4gdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgYXN5bmMgbG9hZERlZmF1bHQoXG4gICAgb3B0cz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gTG9hZGluZyBQb2QgY29uZmlndXJhdGlvbi4uLicpO1xuXG4gICAgY29uc3QgcXVlcnkgPSBvcHRzICYmIG9wdHMucXVlcnkgfHwgTG9hZFF1ZXJ5O1xuICAgIGNvbnN0IHZhcmlhYmxlcyA9IG9wdHMgJiYgb3B0cy52YXJpYWJsZXMgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICBxdWVyeSxcbiAgICAgIHZhcmlhYmxlcyxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5MT0FEX0NPTkZJR19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfQ09ORklHX0VSUk9SJ30sXG4gICAgICBmZXRjaFBvbGljeTogb3B0cyAmJiBvcHRzLmZldGNoUG9saWN5IHx8IHVuZGVmaW5lZC8qZGVmYXVsdCovXG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhID0gcmVzICYmIHJlcy5kYXRhID8gQ29uZmlndXJhdGlvbi5mcm9tT2JqZWN0KHJlcy5kYXRhKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zb2xlLmluZm8oYFtjb25maWddIFBvZCBjb25maWd1cmF0aW9uIGxvYWRlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXM6YCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsb2FkKFxuICAgIGlkOiBudW1iZXIsXG4gICAgb3B0cz86IEVudGl0eVNlcnZpY2VMb2FkT3B0aW9ucyAmIHsgcXVlcnk/OiBhbnkgfSk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGNvbnNvbGUud2FybignW2NvbmZpZ10gSW52YWxpZCBjYWxsIG9mIGNvbmZpZ1NlcnZpY2UubG9hZChpZCkuIFBsZWFzZSB1c2UgbG9hZERlZmF1bHQoKSBpbnN0ZWFkJyk7XG5cbiAgICByZXR1cm4gdGhpcy5sb2FkRGVmYXVsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYSBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIGFzeW5jIHNhdmUoY29uZmlnOiBDb25maWd1cmF0aW9uKTogUHJvbWlzZTxDb25maWd1cmF0aW9uPiB7XG5cbiAgICBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBTYXZpbmcgUG9kIGNvbmZpZ3VyYXRpb24uLi4nLCBjb25maWcpO1xuXG4gICAgY29uc3QganNvbiA9IGNvbmZpZy5hc09iamVjdCgpO1xuXG4gICAgLy8gRXhlY3V0ZSBtdXRhdGlvblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5tdXRhdGU8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgbXV0YXRpb246IFNhdmVNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBkYXRhOiBqc29uXG4gICAgICB9LFxuICAgICAgZXJyb3I6IHtcbiAgICAgICAgY29kZTogRXJyb3JDb2Rlcy5TQVZFX0NPTkZJR19FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0VSUk9SLlNBVkVfQ09ORklHX0VSUk9SJ1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2F2ZWRDb25maWcgPSByZXMgJiYgcmVzLmRhdGE7XG5cbiAgICAvLyBDb3B5IHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgY29uZmlnLmlkID0gc2F2ZWRDb25maWcgJiYgc2F2ZWRDb25maWcuaWQgfHwgY29uZmlnLmlkO1xuICAgIGNvbmZpZy51cGRhdGVEYXRlID0gc2F2ZWRDb25maWcgJiYgc2F2ZWRDb25maWcudXBkYXRlRGF0ZSB8fCBjb25maWcudXBkYXRlRGF0ZTtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIFBvZCBjb25maWd1cmF0aW9uIHNhdmVkIScpO1xuXG4gICAgY29uc3QgcmVsb2FkZWRDb25maWcgPSBhd2FpdCB0aGlzLmxvYWREZWZhdWx0KHtmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSd9KTtcblxuICAgIC8vIElmIHRoaXMgaXMgdGhlIGRlZmF1bHQgY29uZmlnXG4gICAgY29uc3QgZGVmYXVsdENvbmZpZyA9IHRoaXMuJGRhdGEuZ2V0VmFsdWUoKTtcbiAgICBpZiAoaXNOb3ROaWwoZGVmYXVsdENvbmZpZykgJiYgcmVsb2FkZWRDb25maWcubGFiZWwgPT09IGRlZmF1bHRDb25maWcubGFiZWwpIHtcblxuICAgICAgLy8gRW1pdCB1cGRhdGUgZXZlbnQgd2hlbiBpcyBkZWZhdWx0IGNvbmZpZ1xuICAgICAgdGhpcy4kZGF0YS5uZXh0KHJlbG9hZGVkQ29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVsb2FkZWRDb25maWc7XG4gIH1cblxuICBhc3luYyBnZXRDYWNoZVN0YXRpc3RpY3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gTG9hZGluZyBzZXJ2ZXIgY2FjaGUgc3RhdGlzdGljcy4uLicpO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgY2FjaGVTdGF0aXN0aWNzOiBhbnkgfT4oe1xuICAgICAgcXVlcnk6IENhY2hlU3RhdGlzdGljcyxcbiAgICAgIHZhcmlhYmxlczogbnVsbCxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5MT0FEX0NPTkZJR19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfQ09ORklHX0VSUk9SJ30sXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSdcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSByZXMgJiYgcmVzLmNhY2hlU3RhdGlzdGljcyB8fCB1bmRlZmluZWQ7XG4gICAgY29uc29sZS5pbmZvKGBbY29uZmlnXSBTZXJ2ZXIgY2FjaGUgc3RhdGlzdGljcyBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zOmAsIGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShvcHRzPzoge2NhY2hlTmFtZT86IHN0cmluZ30pIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIENsZWFyIHNlcnZlciBjYWNoZS4uLicpO1xuXG4gICAgY29uc3QgdmFyaWFibGVzID0ge25hbWU6IG9wdHMgJiYgb3B0cy5jYWNoZU5hbWV9IHx8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGNsZWFyQ2FjaGU6IGJvb2xlYW4gfT4oe1xuICAgICAgcXVlcnk6IENsZWFyQ2FjaGUsXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBlcnJvcjoge2NvZGU6IEVycm9yQ29kZXMuTE9BRF9DT05GSUdfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5MT0FEX0NPTkZJR19FUlJPUid9LFxuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknXG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhID0gcmVzICYmIHJlcy5jbGVhckNhY2hlIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zb2xlLmluZm8oYFtjb25maWddIENsZWFyIHNlcnZlciBjYWNoZSBpbiAke0RhdGUubm93KCkgLSBub3d9bXM6YCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBkZWxldGUoZGF0YTogQ29uZmlndXJhdGlvbiwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0IScpO1xuICB9XG5cbiAgbGlzdGVuQ2hhbmdlcyhpZDogbnVtYmVyLCBvcHRpb25zPzogYW55KTogT2JzZXJ2YWJsZTxDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIG5ldyBTdWJqZWN0KCk7IC8vIFRPRE9cbiAgfVxuXG4gIGdldCBvcHRpb25EZWZzKCk6IEZvcm1GaWVsZERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkRlZnM7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkT3JSZXN0b3JlTG9jYWxseSgpIHtcbiAgICBsZXQgZGF0YTtcbiAgICBsZXQgd2FzSnVzdExvYWRlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gYXdhaXQgdGhpcy5sb2FkRGVmYXVsdCh7IGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyB9KTtcbiAgICAgIHdhc0p1c3RMb2FkZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gTG9nLCB0aGVuIGNvbnRpbnVlXG4gICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIsIGVycik7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBpdCBpbnRvIGxvY2FsIHN0b3JhZ2UsIGZvciBuZXh0IHN0YXJ0dXBcbiAgICBpZiAoZGF0YSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0b3JlTG9jYWxseShkYXRhKSwgMTAwMCk7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IGxvYWRlZCByZW1vdGVseTogdHJ5IHRvIHJlc3RvcmUgaXRcbiAgICBlbHNlIHtcbiAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLnJlc3RvcmVMb2NhbGx5KCk7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIGxhYmVsIGhhcyBiZWVuIGZpbGxlZFxuICAgIGRhdGEubGFiZWwgPSBkYXRhLmxhYmVsIHx8IHRoaXMuZW52aXJvbm1lbnQubmFtZTtcblxuICAgIC8vIFJlc2V0IG5hbWUgKGlmIHNhbWUgYXMgbGFiZWwpXG4gICAgZGF0YS5uYW1lID0gKGRhdGEubmFtZSAhPT0gZGF0YS5sYWJlbCkgPyBkYXRhLm5hbWUgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDaGVjayBjb21wYXRpYmxlIHZlcnNpb25cbiAgICBpZiAod2FzSnVzdExvYWRlZCkge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIHRoaXMuJGRhdGEubmV4dChkYXRhKTtcblxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0b3JlTG9jYWxseSgpOiBQcm9taXNlPENvbmZpZ3VyYXRpb24+IHtcbiAgICBsZXQgZGF0YTogQ29uZmlndXJhdGlvbjtcblxuICAgIC8vIFRyeSB0byBsb2FkIGZyb20gbG9jYWwgc3RvcmFnZVxuICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVkpO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gUmVzdG9yaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBsb2NhbCBzdG9yYWdlLi4uJyk7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGRhdGEgPSBDb25maWd1cmF0aW9uLmZyb21PYmplY3QoSlNPTi5wYXJzZSh2YWx1ZSkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcGFyc2UgY29uZmlnIGZvdW5kIGluIGxvY2FsIHN0b3JhZ2U6ICR7ZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGRhdGEgPSBDb25maWd1cmF0aW9uLmZyb21PYmplY3QodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBSZXN0b3JpbmcgY29uZmlndXJhdGlvbiBbT0tdJyk7XG4gICAgfVxuXG4gICAgLy8gT3IgbG9hZCBkZWZhdWx0IHZhbHVlLCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgIGlmICghZGF0YSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gTm8gY29uZmlndXJhdGlvbiBmb3VuZC4gVXNpbmcgZW52aXJvbm1lbnQuLi4nKTtcbiAgICAgIGRhdGEgPSBDb25maWd1cmF0aW9uLmZyb21PYmplY3QodGhpcy5lbnZpcm9ubWVudCBhcyBhbnkpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdG9yZUxvY2FsbHkoZGF0YT86IENvbmZpZ3VyYXRpb24pIHtcbiAgICAvLyBOb3RoaW5nIHRvIHN0b3JlIDogcmVzZXRcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmUoQ09ORklHVVJBVElPTl9TVE9SQUdFX0tFWSk7XG4gICAgfVxuICAgIC8vIENvbmZpZyBleGlzdHM6IHN0b3JlIGl0IGluIHRoZSBsb2NhbCBzdG9yYWdlXG4gICAgZWxzZSB7XG4gICAgICBsZXQgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcblxuICAgICAgLy8gQ29udmVydCBpbWFnZXMsIGZvciBvZmZsaW5lIHVzYWdlXG4gICAgICBpZiAodGhpcy5uZXR3b3JrLm9ubGluZSAmJiB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGUnKSkge1xuICAgICAgICBjb25zdCBqb2JzID0gW107XG5cbiAgICAgICAgLy8gRG93bmxvYWQgbG9nb3NcbiAgICAgICAgaWYgKGRhdGEubGFyZ2VMb2dvICYmIGRhdGEubGFyZ2VMb2dvLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgIGpvYnMucHVzaCh0aGlzLmZpbGUuZ2V0SW1hZ2UoZGF0YS5sYXJnZUxvZ28pXG4gICAgICAgICAgICAudGhlbihpbWdVcmwgPT4gZGF0YS5sYXJnZUxvZ28gPSBpbWdVcmwpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5zbWFsbExvZ28gJiYgZGF0YS5zbWFsbExvZ28uc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgam9icy5wdXNoKHRoaXMuZmlsZS5nZXRJbWFnZShkYXRhLnNtYWxsTG9nbylcbiAgICAgICAgICAgIC50aGVuKGltZ1VybCA9PiBkYXRhLnNtYWxsTG9nbyA9IGltZ1VybCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmFja2dyb3VuZCBpbWFnZXNcbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShkYXRhLmJhY2tncm91bmRJbWFnZXMpKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1heFdpZHRoOiB0aGlzLnBsYXRmb3JtLndpZHRoKCksXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IHRoaXMucGxhdGZvcm0uaGVpZ2h0KClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gQ29udmVydCB0aGUgRklSU1QgaW1hZ2UgZm91bmRcbiAgICAgICAgICAvLyBXQVJOOiBpdCdzIE5PVCBuZWNlc3NhcnkgdG8gY29udmVydCBBTCBpbWFnZSwgYnV0IG9ubHkgb25lLCBmb3Igc21hbGxlciBtZW1vcnkgZm9vdHByaW50XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhLmJhY2tncm91bmRJbWFnZXMuZmluZEluZGV4KChpbWcpID0+IGltZyAmJiBpbWcuc3RhcnRzV2l0aCgnaHR0cCcpKTtcbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBkYXRhLmJhY2tncm91bmRJbWFnZXMgPSBkYXRhLmJhY2tncm91bmRJbWFnZXMuc2xpY2UoKTsgLy8gQ29weVxuICAgICAgICAgICAgam9icy5wdXNoKFxuICAgICAgICAgICAgICB0aGlzLmZpbGUuZ2V0SW1hZ2UoZGF0YS5iYWNrZ3JvdW5kSW1hZ2VzW2luZGV4XSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAudGhlbihkYXRhVXJsID0+IGRhdGEuYmFja2dyb3VuZEltYWdlc1tpbmRleF0gPSBkYXRhVXJsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXJ0bmVyc1xuICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGRhdGEucGFydG5lcnMpKSB7XG4gICAgICAgICAgZGF0YS5wYXJ0bmVycy5mb3JFYWNoKChkZXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVwICYmIGRlcC5sb2dvICYmIGRlcC5sb2dvLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBqb2JzLnB1c2godGhpcy5maWxlLmdldEltYWdlKGRlcC5sb2dvLCB7XG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiA1MC8qc2VlIGhvbWUgcGFnZSBDU1MgKi9cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnRoZW4oaW1nID0+IGRlcC5sb2dvID0gaW1nKVxuICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkZXAubG9nbztcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGpvYnMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbY29uZmlnXSBGZXRjaGluZyAke2pvYnMubGVuZ3RofSBpbWFnZXMuLi5gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoam9icyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtjb25maWddIEZldGNoaW5nICR7am9icy5sZW5ndGh9IGltYWdlcyBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbY29uZmlnXSBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2Uocyk6ICR7ZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTYXZpbmcgY29uZmlnIHRvIHN0b3JhZ2VcbiAgICAgIHtcbiAgICAgICAgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBTYXZpbmcgY29uZmlnIGludG8gbG9jYWwgc3RvcmFnZS4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVksIGRhdGEuYXNPYmplY3QoKSk7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2NvbmZpZ10gU2F2aW5nIGNvbmZpZyBpbnRvIGxvY2FsIHN0b3JhZ2UgW09LXSBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBhd2FpdCBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG59XG4iXX0=
422
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBQyxlQUFlLEVBQUUsUUFBUSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUMsUUFBUSxFQUFFLGVBQWUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBbUIsTUFBTSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FB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QkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Z3FsfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICdAaW9uaWMvc3RvcmFnZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RXJyb3JDb2Rlc30gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHtHcmFwaHFsU2VydmljZX0gZnJvbSAnLi4vZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHtGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQge2lzTm90RW1wdHlBcnJheSwgaXNOb3ROaWx9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtGaWxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7TmV0d29ya1NlcnZpY2V9IGZyb20gJy4vbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7Q09SRV9DT05GSUdfT1BUSU9OU30gZnJvbSAnLi9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHtQbGF0Zm9ybSwgVG9hc3RDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge1Nob3dUb2FzdE9wdGlvbnMsIFRvYXN0c30gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0cyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RW50aXR5U2VydmljZUxvYWRPcHRpb25zLCBJRW50aXR5U2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7RU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge0Jhc2VHcmFwaHFsU2VydmljZX0gZnJvbSAnLi9iYXNlLWdyYXBocWwtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge0lTdGFydGFibGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuXG5cbmNvbnN0IENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVkgPSAnY29uZmlndXJhdGlvbic7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogR3JhcGhRTCBxdWVyaWVzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGNvbnN0IEZyYWdtZW50cyA9IHtcbiAgY29uZmlnOiBncWxgXG4gICAgZnJhZ21lbnQgQ29uZmlnRnJhZ21lbnQgb24gQ29uZmlndXJhdGlvblZPIHtcbiAgICAgIGlkXG4gICAgICBsYWJlbFxuICAgICAgbmFtZVxuICAgICAgZGVzY3JpcHRpb25cbiAgICAgIGNvbW1lbnRzXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgICBzbWFsbExvZ29cbiAgICAgIGxhcmdlTG9nb1xuICAgICAgYmFja2dyb3VuZEltYWdlc1xuICAgICAgcGFydG5lcnMge1xuICAgICAgICBpZFxuICAgICAgICBsYWJlbFxuICAgICAgICBuYW1lXG4gICAgICAgIGxvZ29cbiAgICAgICAgc2l0ZVVybFxuICAgICAgICBfX3R5cGVuYW1lXG4gICAgICB9XG4gICAgICB1cGRhdGVEYXRlXG4gICAgICBjcmVhdGlvbkRhdGVcbiAgICAgIHN0YXR1c0lkXG4gICAgICBfX3R5cGVuYW1lXG4gICAgfVxuICBgXG59O1xuXG5jb25zdCBMb2FkUXVlcnk6IGFueSA9IGdxbGBcbnF1ZXJ5IENvbmZpZ3VyYXRpb257XG4gIGRhdGE6IGNvbmZpZ3VyYXRpb257XG4gICAgLi4uQ29uZmlnRnJhZ21lbnRcbiAgfVxufVxuICAke0ZyYWdtZW50cy5jb25maWd9XG5gO1xuXG4vLyBTYXZlIChjcmVhdGUgb3IgdXBkYXRlKSBhY2NvdW50IG11dGF0aW9uXG5jb25zdCBTYXZlTXV0YXRpb246IGFueSA9IGdxbGBcbiAgbXV0YXRpb24gU2F2ZUNvbmZpZ3VyYXRpb24oJGRhdGE6IENvbmZpZ3VyYXRpb25WT0lucHV0KXtcbiAgICBkYXRhOiBzYXZlQ29uZmlndXJhdGlvbihjb25maWc6ICRkYXRhKXtcbiAgICAgICAuLi5Db25maWdGcmFnbWVudFxuICAgIH1cbiAgfVxuICAke0ZyYWdtZW50cy5jb25maWd9XG5gO1xuXG5jb25zdCBDbGVhckNhY2hlOiBhbnkgPSBncWxgXG4gIHF1ZXJ5IENsZWFyQ2FjaGUoJG5hbWU6IFN0cmluZykge1xuICAgIGNsZWFyQ2FjaGUobmFtZTogJG5hbWUpXG4gIH1cbmA7XG5cbmNvbnN0IENhY2hlU3RhdGlzdGljczogYW55ID0gZ3FsYFxuICBxdWVyeSBDYWNoZVN0YXRpc3RpY3Mge1xuICAgIGNhY2hlU3RhdGlzdGljc1xuICB9XG5gO1xuXG5leHBvcnQgY29uc3QgQVBQX0NPTkZJR19PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPEZvcm1GaWVsZERlZmluaXRpb25NYXA+KCdkZWZhdWx0T3B0aW9ucycpO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZGVwczogW0FQUF9DT05GSUdfT1BUSU9OU11cbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlnU2VydmljZVxuICBleHRlbmRzIEJhc2VHcmFwaHFsU2VydmljZTxDb25maWd1cmF0aW9uLCBhbnksIG51bWJlcj5cbiAgaW1wbGVtZW50cyBJRW50aXR5U2VydmljZTxDb25maWd1cmF0aW9uPiwgSVN0YXJ0YWJsZVNlcnZpY2U8Q29uZmlndXJhdGlvbj4ge1xuXG4gIHByaXZhdGUgX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc3RhcnRQcm9taXNlOiBQcm9taXNlPENvbmZpZ3VyYXRpb24+O1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX29wdGlvbkRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcblxuICBwcml2YXRlICRkYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb25maWd1cmF0aW9uPihudWxsKTtcblxuICBnZXQgc3RhcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRlZDtcbiAgfVxuXG4gIGdldCBjb25maWcoKTogT2JzZXJ2YWJsZTxDb25maWd1cmF0aW9uPiB7XG4gICAgLy8gSWYgZmlyc3QgY2FsbDogc3RhcnQgbG9hZGluZ1xuICAgIGlmICghdGhpcy5fc3RhcnRlZCkgdGhpcy5zdGFydCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuJGRhdGEucGlwZShmaWx0ZXIoaXNOb3ROaWwpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIHByb3RlY3RlZCBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZmlsZTogRmlsZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0NPTkZJR19PUFRJT05TKSBkZWZhdWx0T3B0aW9uc01hcDogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcFxuICApIHtcbiAgICBzdXBlcihncmFwaHFsLCBlbnZpcm9ubWVudCk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gQ3JlYXRpbmcgc2VydmljZScpO1xuXG4gICAgdGhpcy5fb3B0aW9uRGVmcyA9IE9iamVjdC52YWx1ZXMoey4uLkNPUkVfQ09ORklHX09QVElPTlMsIC4uLmRlZmF1bHRPcHRpb25zTWFwfSk7XG5cbiAgICAvLyBSZXN0YXJ0IGlmIGdyYXBocWwgc2VydmljZSByZXN0YXJ0XG4gICAgdGhpcy5ncmFwaHFsLm9uU3RhcnQuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzdGFydCgpKTtcblxuICAgIC8vIFN0YXJ0XG4gICAgaWYgKHRoaXMuZ3JhcGhxbC5zdGFydGVkKSB7XG4gICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgc3RhcnQoKTogUHJvbWlzZTxDb25maWd1cmF0aW9uPiB7XG4gICAgaWYgKHRoaXMuX3N0YXJ0UHJvbWlzZSkgcmV0dXJuIHRoaXMuX3N0YXJ0UHJvbWlzZTtcbiAgICBpZiAodGhpcy5fc3RhcnRlZCkgcmV0dXJuO1xuXG4gICAgY29uc29sZS5pbmZvKCdbY29uZmlnXSBTdGFydGluZyBjb25maWd1cmF0aW9uLi4uJyk7XG5cbiAgICB0aGlzLl9zdGFydFByb21pc2UgPSB0aGlzLmdyYXBocWwucmVhZHkoKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2FkT3JSZXN0b3JlTG9jYWxseSgpKVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX3N0YXJ0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4kZGF0YS5uZXh0KGRhdGEpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIsIGVycik7XG4gICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhcnRQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9zdGFydFByb21pc2U7XG5cbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9zdGFydFByb21pc2UgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyByZXN0YXJ0KCk6IFByb21pc2U8Q29uZmlndXJhdGlvbj4ge1xuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMuc3RvcCgpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICByZWFkeSgpOiBQcm9taXNlPENvbmZpZ3VyYXRpb24+IHtcbiAgICBpZiAodGhpcy5fc3RhcnRlZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLiRkYXRhLnZhbHVlKTtcbiAgICBpZiAodGhpcy5fc3RhcnRQcm9taXNlKSByZXR1cm4gdGhpcy5fc3RhcnRQcm9taXNlO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gIH1cblxuICBhc3luYyBsb2FkRGVmYXVsdChcbiAgICBvcHRzPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zKTogUHJvbWlzZTxDb25maWd1cmF0aW9uPiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBMb2FkaW5nIFBvZCBjb25maWd1cmF0aW9uLi4uJyk7XG5cbiAgICBjb25zdCBxdWVyeSA9IG9wdHMgJiYgb3B0cy5xdWVyeSB8fCBMb2FkUXVlcnk7XG4gICAgY29uc3QgdmFyaWFibGVzID0gb3B0cyAmJiBvcHRzLnZhcmlhYmxlcyB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgZGF0YTogYW55IH0+KHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmFyaWFibGVzLFxuICAgICAgZXJyb3I6IHtjb2RlOiBFcnJvckNvZGVzLkxPQURfQ09ORklHX0VSUk9SLCBtZXNzYWdlOiAnRVJST1IuTE9BRF9DT05GSUdfRVJST1InfSxcbiAgICAgIGZldGNoUG9saWN5OiBvcHRzICYmIG9wdHMuZmV0Y2hQb2xpY3kgfHwgdW5kZWZpbmVkLypkZWZhdWx0Ki9cbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSByZXMgJiYgcmVzLmRhdGEgPyBDb25maWd1cmF0aW9uLmZyb21PYmplY3QocmVzLmRhdGEpIDogdW5kZWZpbmVkO1xuICAgIGNvbnNvbGUuaW5mbyhgW2NvbmZpZ10gUG9kIGNvbmZpZ3VyYXRpb24gbG9hZGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tczpgLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoXG4gICAgaWQ6IG51bWJlcixcbiAgICBvcHRzPzogRW50aXR5U2VydmljZUxvYWRPcHRpb25zICYgeyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxDb25maWd1cmF0aW9uPiB7XG4gICAgY29uc29sZS53YXJuKCdbY29uZmlnXSBJbnZhbGlkIGNhbGwgb2YgY29uZmlnU2VydmljZS5sb2FkKGlkKS4gUGxlYXNlIHVzZSBsb2FkRGVmYXVsdCgpIGluc3RlYWQnKTtcblxuICAgIHJldHVybiB0aGlzLmxvYWREZWZhdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgYXN5bmMgc2F2ZShjb25maWc6IENvbmZpZ3VyYXRpb24pOiBQcm9taXNlPENvbmZpZ3VyYXRpb24+IHtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIFNhdmluZyBQb2QgY29uZmlndXJhdGlvbi4uLicsIGNvbmZpZyk7XG5cbiAgICBjb25zdCBqc29uID0gY29uZmlnLmFzT2JqZWN0KCk7XG5cbiAgICAvLyBFeGVjdXRlIG11dGF0aW9uXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLm11dGF0ZTx7IGRhdGE6IGFueSB9Pih7XG4gICAgICBtdXRhdGlvbjogU2F2ZU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGRhdGE6IGpzb25cbiAgICAgIH0sXG4gICAgICBlcnJvcjoge1xuICAgICAgICBjb2RlOiBFcnJvckNvZGVzLlNBVkVfQ09ORklHX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnRVJST1IuU0FWRV9DT05GSUdfRVJST1InXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzYXZlZENvbmZpZyA9IHJlcyAmJiByZXMuZGF0YTtcblxuICAgIC8vIENvcHkgdXBkYXRlIHByb3BlcnRpZXNcbiAgICBjb25maWcuaWQgPSBzYXZlZENvbmZpZyAmJiBzYXZlZENvbmZpZy5pZCB8fCBjb25maWcuaWQ7XG4gICAgY29uZmlnLnVwZGF0ZURhdGUgPSBzYXZlZENvbmZpZyAmJiBzYXZlZENvbmZpZy51cGRhdGVEYXRlIHx8IGNvbmZpZy51cGRhdGVEYXRlO1xuXG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gUG9kIGNvbmZpZ3VyYXRpb24gc2F2ZWQhJyk7XG5cbiAgICBjb25zdCByZWxvYWRlZENvbmZpZyA9IGF3YWl0IHRoaXMubG9hZERlZmF1bHQoe2ZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5J30pO1xuXG4gICAgLy8gSWYgdGhpcyBpcyB0aGUgZGVmYXVsdCBjb25maWdcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0gdGhpcy4kZGF0YS52YWx1ZTtcbiAgICBpZiAoaXNOb3ROaWwoZGVmYXVsdENvbmZpZykgJiYgcmVsb2FkZWRDb25maWcubGFiZWwgPT09IGRlZmF1bHRDb25maWcubGFiZWwpIHtcblxuICAgICAgLy8gRW1pdCB1cGRhdGUgZXZlbnQgd2hlbiBpcyBkZWZhdWx0IGNvbmZpZ1xuICAgICAgdGhpcy4kZGF0YS5uZXh0KHJlbG9hZGVkQ29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVsb2FkZWRDb25maWc7XG4gIH1cblxuICBhc3luYyBnZXRDYWNoZVN0YXRpc3RpY3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gTG9hZGluZyBzZXJ2ZXIgY2FjaGUgc3RhdGlzdGljcy4uLicpO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5ncmFwaHFsLnF1ZXJ5PHsgY2FjaGVTdGF0aXN0aWNzOiBhbnkgfT4oe1xuICAgICAgcXVlcnk6IENhY2hlU3RhdGlzdGljcyxcbiAgICAgIHZhcmlhYmxlczogbnVsbCxcbiAgICAgIGVycm9yOiB7Y29kZTogRXJyb3JDb2Rlcy5MT0FEX0NPTkZJR19FUlJPUiwgbWVzc2FnZTogJ0VSUk9SLkxPQURfQ09ORklHX0VSUk9SJ30sXG4gICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSdcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGEgPSByZXMgJiYgcmVzLmNhY2hlU3RhdGlzdGljcyB8fCB1bmRlZmluZWQ7XG4gICAgY29uc29sZS5pbmZvKGBbY29uZmlnXSBTZXJ2ZXIgY2FjaGUgc3RhdGlzdGljcyBsb2FkZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zOmAsIGRhdGEpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShvcHRzPzoge2NhY2hlTmFtZT86IHN0cmluZ30pIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnNvbGUuZGVidWcoJ1tjb25maWddIENsZWFyIHNlcnZlciBjYWNoZS4uLicpO1xuXG4gICAgY29uc3QgdmFyaWFibGVzID0ge25hbWU6IG9wdHMgJiYgb3B0cy5jYWNoZU5hbWV9IHx8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ3JhcGhxbC5xdWVyeTx7IGNsZWFyQ2FjaGU6IGJvb2xlYW4gfT4oe1xuICAgICAgcXVlcnk6IENsZWFyQ2FjaGUsXG4gICAgICB2YXJpYWJsZXMsXG4gICAgICBlcnJvcjoge2NvZGU6IEVycm9yQ29kZXMuTE9BRF9DT05GSUdfRVJST1IsIG1lc3NhZ2U6ICdFUlJPUi5MT0FEX0NPTkZJR19FUlJPUid9LFxuICAgICAgZmV0Y2hQb2xpY3k6ICduZXR3b3JrLW9ubHknXG4gICAgfSk7XG5cbiAgICBjb25zdCBkYXRhID0gcmVzICYmIHJlcy5jbGVhckNhY2hlIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zb2xlLmluZm8oYFtjb25maWddIENsZWFyIHNlcnZlciBjYWNoZSBpbiAke0RhdGUubm93KCkgLSBub3d9bXM6YCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBkZWxldGUoZGF0YTogQ29uZmlndXJhdGlvbiwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQgeWV0IScpO1xuICB9XG5cbiAgbGlzdGVuQ2hhbmdlcyhpZDogbnVtYmVyLCBvcHRpb25zPzogYW55KTogT2JzZXJ2YWJsZTxDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIG5ldyBTdWJqZWN0KCk7IC8vIFRPRE9cbiAgfVxuXG4gIGdldCBvcHRpb25EZWZzKCk6IEZvcm1GaWVsZERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkRlZnM7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkT3JSZXN0b3JlTG9jYWxseSgpOiBQcm9taXNlPENvbmZpZ3VyYXRpb24+IHtcbiAgICBsZXQgZGF0YTtcbiAgICBsZXQgd2FzSnVzdExvYWRlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gYXdhaXQgdGhpcy5sb2FkRGVmYXVsdCh7IGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyB9KTtcbiAgICAgIHdhc0p1c3RMb2FkZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gTG9nLCB0aGVuIGNvbnRpbnVlXG4gICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIsIGVycik7XG4gICAgfVxuXG4gICAgLy8gU2F2ZSBpdCBpbnRvIGxvY2FsIHN0b3JhZ2UsIGZvciBuZXh0IHN0YXJ0dXBcbiAgICBpZiAoZGF0YSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0b3JlTG9jYWxseShkYXRhKSwgMTAwMCk7XG4gICAgfVxuXG4gICAgLy8gSWYgbm90IGxvYWRlZCByZW1vdGVseTogdHJ5IHRvIHJlc3RvcmUgaXRcbiAgICBlbHNlIHtcbiAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLnJlc3RvcmVMb2NhbGx5KCk7XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIGxhYmVsIGhhcyBiZWVuIGZpbGxlZFxuICAgIGRhdGEubGFiZWwgPSBkYXRhLmxhYmVsIHx8IHRoaXMuZW52aXJvbm1lbnQubmFtZTtcblxuICAgIC8vIFJlc2V0IG5hbWUgKGlmIHNhbWUgYXMgbGFiZWwpXG4gICAgZGF0YS5uYW1lID0gKGRhdGEubmFtZSAhPT0gZGF0YS5sYWJlbCkgPyBkYXRhLm5hbWUgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDaGVjayBjb21wYXRpYmxlIHZlcnNpb25cbiAgICBpZiAod2FzSnVzdExvYWRlZCkge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXN0b3JlTG9jYWxseSgpOiBQcm9taXNlPENvbmZpZ3VyYXRpb24+IHtcbiAgICBsZXQgZGF0YTogQ29uZmlndXJhdGlvbjtcblxuICAgIC8vIFRyeSB0byBsb2FkIGZyb20gbG9jYWwgc3RvcmFnZVxuICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVkpO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gUmVzdG9yaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBsb2NhbCBzdG9yYWdlLi4uJyk7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGRhdGEgPSBDb25maWd1cmF0aW9uLmZyb21PYmplY3QoSlNPTi5wYXJzZSh2YWx1ZSkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcGFyc2UgY29uZmlnIGZvdW5kIGluIGxvY2FsIHN0b3JhZ2U6ICR7ZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGRhdGEgPSBDb25maWd1cmF0aW9uLmZyb21PYmplY3QodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBSZXN0b3JpbmcgY29uZmlndXJhdGlvbiBbT0tdJyk7XG4gICAgfVxuXG4gICAgLy8gT3IgbG9hZCBkZWZhdWx0IHZhbHVlLCBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgIGlmICghZGF0YSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2NvbmZpZ10gTm8gY29uZmlndXJhdGlvbiBmb3VuZC4gVXNpbmcgZW52aXJvbm1lbnQuLi4nKTtcbiAgICAgIGRhdGEgPSBDb25maWd1cmF0aW9uLmZyb21PYmplY3QodGhpcy5lbnZpcm9ubWVudCBhcyBhbnkpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdG9yZUxvY2FsbHkoZGF0YT86IENvbmZpZ3VyYXRpb24pIHtcbiAgICAvLyBOb3RoaW5nIHRvIHN0b3JlIDogcmVzZXRcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmUoQ09ORklHVVJBVElPTl9TVE9SQUdFX0tFWSk7XG4gICAgfVxuICAgIC8vIENvbmZpZyBleGlzdHM6IHN0b3JlIGl0IGluIHRoZSBsb2NhbCBzdG9yYWdlXG4gICAgZWxzZSB7XG4gICAgICBsZXQgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcblxuICAgICAgLy8gQ29udmVydCBpbWFnZXMsIGZvciBvZmZsaW5lIHVzYWdlXG4gICAgICBpZiAodGhpcy5uZXR3b3JrLm9ubGluZSAmJiB0aGlzLnBsYXRmb3JtLmlzKCdtb2JpbGUnKSkge1xuICAgICAgICBjb25zdCBqb2JzID0gW107XG5cbiAgICAgICAgLy8gRG93bmxvYWQgbG9nb3NcbiAgICAgICAgaWYgKGRhdGEubGFyZ2VMb2dvICYmIGRhdGEubGFyZ2VMb2dvLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgIGpvYnMucHVzaCh0aGlzLmZpbGUuZ2V0SW1hZ2UoZGF0YS5sYXJnZUxvZ28pXG4gICAgICAgICAgICAudGhlbihpbWdVcmwgPT4gZGF0YS5sYXJnZUxvZ28gPSBpbWdVcmwpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5zbWFsbExvZ28gJiYgZGF0YS5zbWFsbExvZ28uc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgam9icy5wdXNoKHRoaXMuZmlsZS5nZXRJbWFnZShkYXRhLnNtYWxsTG9nbylcbiAgICAgICAgICAgIC50aGVuKGltZ1VybCA9PiBkYXRhLnNtYWxsTG9nbyA9IGltZ1VybCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmFja2dyb3VuZCBpbWFnZXNcbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShkYXRhLmJhY2tncm91bmRJbWFnZXMpKSB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1heFdpZHRoOiB0aGlzLnBsYXRmb3JtLndpZHRoKCksXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IHRoaXMucGxhdGZvcm0uaGVpZ2h0KClcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gQ29udmVydCB0aGUgRklSU1QgaW1hZ2UgZm91bmRcbiAgICAgICAgICAvLyBXQVJOOiBpdCdzIE5PVCBuZWNlc3NhcnkgdG8gY29udmVydCBBTCBpbWFnZSwgYnV0IG9ubHkgb25lLCBmb3Igc21hbGxlciBtZW1vcnkgZm9vdHByaW50XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhLmJhY2tncm91bmRJbWFnZXMuZmluZEluZGV4KChpbWcpID0+IGltZyAmJiBpbWcuc3RhcnRzV2l0aCgnaHR0cCcpKTtcbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBkYXRhLmJhY2tncm91bmRJbWFnZXMgPSBkYXRhLmJhY2tncm91bmRJbWFnZXMuc2xpY2UoKTsgLy8gQ29weVxuICAgICAgICAgICAgam9icy5wdXNoKFxuICAgICAgICAgICAgICB0aGlzLmZpbGUuZ2V0SW1hZ2UoZGF0YS5iYWNrZ3JvdW5kSW1hZ2VzW2luZGV4XSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAudGhlbihkYXRhVXJsID0+IGRhdGEuYmFja2dyb3VuZEltYWdlc1tpbmRleF0gPSBkYXRhVXJsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXJ0bmVyc1xuICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGRhdGEucGFydG5lcnMpKSB7XG4gICAgICAgICAgZGF0YS5wYXJ0bmVycy5mb3JFYWNoKChkZXAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVwICYmIGRlcC5sb2dvICYmIGRlcC5sb2dvLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBqb2JzLnB1c2godGhpcy5maWxlLmdldEltYWdlKGRlcC5sb2dvLCB7XG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiA1MC8qc2VlIGhvbWUgcGFnZSBDU1MgKi9cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnRoZW4oaW1nID0+IGRlcC5sb2dvID0gaW1nKVxuICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkZXAubG9nbztcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGpvYnMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbY29uZmlnXSBGZXRjaGluZyAke2pvYnMubGVuZ3RofSBpbWFnZXMuLi5gKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoam9icyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtjb25maWddIEZldGNoaW5nICR7am9icy5sZW5ndGh9IGltYWdlcyBbT0tdIGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2ApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbY29uZmlnXSBGYWlsZWQgdG8gZmV0Y2ggaW1hZ2Uocyk6ICR7ZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTYXZpbmcgY29uZmlnIHRvIHN0b3JhZ2VcbiAgICAgIHtcbiAgICAgICAgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbY29uZmlnXSBTYXZpbmcgY29uZmlnIGludG8gbG9jYWwgc3RvcmFnZS4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KENPTkZJR1VSQVRJT05fU1RPUkFHRV9LRVksIGRhdGEuYXNPYmplY3QoKSk7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2NvbmZpZ10gU2F2aW5nIGNvbmZpZyBpbnRvIGxvY2FsIHN0b3JhZ2UgW09LXSBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBhd2FpdCBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG59XG4iXX0=