@sumaris-net/ngx-components 1.19.16 → 1.19.19

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.
@@ -38,6 +38,33 @@ export class EntitiesStorage extends StartableService {
38
38
  get dirty() {
39
39
  return this._dirty || Object.values(this._data).some(store => store.dirty);
40
40
  }
41
+ ngOnStart() {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ const now = Date.now();
44
+ console.info(`[entities-storage] Starting entity storage...`);
45
+ // Restore stores
46
+ yield this.restoreLocally();
47
+ // Start a save timer
48
+ this.registerSubscription(merge(this._$save, timer(this._saveTimerPeriod, this._saveTimerPeriod))
49
+ .pipe(
50
+ // Avoid to many call (e.g. when $save AND timer are triggered
51
+ throttleTime(this._saveTimerPeriod))
52
+ .subscribe(() => this.storeLocally({ skipIfPristine: true })));
53
+ // Save, when platform is in pause
54
+ this.registerSubscription(this.platform.pause.subscribe(() => __awaiter(this, void 0, void 0, function* () {
55
+ console.warn(`[entities-storage] Platform will pause: saving...`);
56
+ yield this.storeLocally({ skipIfPristine: true });
57
+ console.warn(`[entities-storage] Platform will pause: saving [OK]`);
58
+ })));
59
+ console.info(`[entities-storage] Starting [OK] in ${Date.now() - now}ms`);
60
+ return this._data;
61
+ });
62
+ }
63
+ ngOnStop() {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ yield this.storeLocally({ skipIfPristine: true });
66
+ });
67
+ }
41
68
  watchAll(entityName, variables, opts) {
42
69
  // Make sure store is ready
43
70
  if (!this.started) {
@@ -304,34 +331,8 @@ export class EntitiesStorage extends StartableService {
304
331
  });
305
332
  }
306
333
  persist(opts = { skipIfPristine: true }) {
307
- // Skip if pristine
308
- if (opts.skipIfPristine && !this._dirty)
309
- return Promise.resolve();
310
334
  return this.storeLocally(opts);
311
335
  }
312
- ngOnStart() {
313
- return __awaiter(this, void 0, void 0, function* () {
314
- const now = Date.now();
315
- console.info(`[entities-storage] Starting entity storage...`);
316
- // Restore sequences
317
- yield this.restoreLocally();
318
- // Start a save timer
319
- this.registerSubscription(merge(this._$save, timer(this._saveTimerPeriod, this._saveTimerPeriod))
320
- .pipe(
321
- // Avoid to many call (e.g. when $save AND timer are triggered
322
- throttleTime(this._saveTimerPeriod))
323
- .subscribe(() => this.storeLocally()));
324
- console.info(`[entities-storage] Starting [OK] in ${Date.now() - now}ms`);
325
- return this._data;
326
- });
327
- }
328
- ngOnStop() {
329
- return __awaiter(this, void 0, void 0, function* () {
330
- if (this.dirty) {
331
- yield this.storeLocally();
332
- }
333
- });
334
- }
335
336
  /* -- protected methods -- */
336
337
  getEntityStore(name, opts) {
337
338
  let store = this._data[name];
@@ -448,4 +449,4 @@ EntitiesStorage.ctorParameters = () => [
448
449
  { type: Environment, decorators: [{ type: Inject, args: [ENVIRONMENT,] }] },
449
450
  { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_LOCAL_STORAGE_TYPE_POLICIES,] }] }
450
451
  ];
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBYyxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBQywyQkFBMkIsRUFBNEIsV0FBVyxFQUF3QixNQUFNLHNCQUFzQixDQUFDO0FBQy9ILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxXQUFXLEVBQUUsV0FBVyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDbEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7QUFPMUQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxjQUFjLENBQThCLDBCQUEwQixDQUFDLENBQUM7QUFFaEQsQ0FBQztBQUc1RSxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBa0M7SUFpQnJFLFlBQ1UsUUFB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LEdBQUcsQ0FBQyxDQUFDO2lCQUN0RjtxQkFBTTtvQkFDTCxPQUFPLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDL0Y7Z0JBQ0QsTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7S0FBQTs7QUEzZmEsNEJBQVksR0FBRyxRQUFRLENBQUM7QUFDeEIsNkJBQWEsR0FBRyxTQUFTLENBQUM7OztZQUp6QyxVQUFVLFNBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzs7WUFwQnhCLFFBQVE7WUFNUixrQkFBa0I7WUFQbEIsT0FBTztZQVFQLFdBQVcsdUJBbUNkLE1BQU0sU0FBQyxXQUFXOzRDQUNsQixRQUFRLFlBQUksTUFBTSxTQUFDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZGVmZXIsIG1lcmdlLCBPYnNlcnZhYmxlLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTdG9yYWdlfSBmcm9tICdAaW9uaWMvc3RvcmFnZSc7XG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge2ZpcnN0LCBzd2l0Y2hNYXAsIHRocm90dGxlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFbnRpdHksIElFbnRpdHl9IGZyb20gJy4uL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOaWxPckJsYW5rfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7TG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7RU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYLCBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMsIEVudGl0eVN0b3JlLCBFbnRpdHlTdG9yZVR5cGVQb2xpY3l9IGZyb20gJy4vZW50aXR5LXN0b3JlLmNsYXNzJztcbmltcG9ydCB7UHJvZ3Jlc3NCYXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvcHJvZ3Jlc3MtYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHtFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlR9IGZyb20gJy4uLy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge1N0YXJ0YWJsZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge2NoYWluUHJvbWlzZXN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXMge1xuICBbX190eXBlbmFtZTogc3RyaW5nXTogRW50aXR5U3RvcmVUeXBlUG9saWN5O1xufVxuXG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NUT1JBR0VfVFlQRV9QT0xJQ0lFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXM+KCdsb2NhbFN0b3JhZ2VUeXBlUG9saWNpZXMnKTtcblxuZGVjbGFyZSBpbnRlcmZhY2UgRW50aXR5U3RvcmFnZU1hcCB7IFtrZXk6IHN0cmluZ106IEVudGl0eVN0b3JlPGFueSwgYW55PiB9O1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBFbnRpdGllc1N0b3JhZ2UgZXh0ZW5kcyBTdGFydGFibGVTZXJ2aWNlPEVudGl0eVN0b3JhZ2VNYXA+IHtcblxuICBwdWJsaWMgc3RhdGljIFRSQVNIX1BSRUZJWCA9ICdUcmFzaCMnO1xuICBwdWJsaWMgc3RhdGljIFJFTU9URV9QUkVGSVggPSAnUmVtb3RlIyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZVBvbGljaWVzOiBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NhdmVUaW1lclBlcmlvZDtcblxuICBwcml2YXRlIF8kc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gIHByaXZhdGUgX2RpcnR5ID0gZmFsc2U7XG4gIHByaXZhdGUgX3NhdmluZyA9IGZhbHNlO1xuXG5cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXJ0eSB8fCBPYmplY3QudmFsdWVzKHRoaXMuX2RhdGEpLnNvbWUoc3RvcmUgPT4gc3RvcmUuZGlydHkpO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgcHJvZ3Jlc3NCYXJTZXJ2aWNlOiBQcm9ncmVzc0JhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU1RPUkFHRV9UWVBFX1BPTElDSUVTKSB0eXBlUG9saWNpZXM6IEVudGl0aWVzU3RvcmFnZVR5cGVQb2xpY2llc1xuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7XG4gICAgdGhpcy5fdHlwZVBvbGljaWVzID0gdHlwZVBvbGljaWVzIHx8IHt9O1xuICAgIHRoaXMuX3NhdmVUaW1lclBlcmlvZCA9IGVudmlyb25tZW50LnN0b3JhZ2VTYXZlUGVyaW9kTXMgfHwgMTAwMDAgLyogPSAxMHMgKi87XG4gICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgLy8gRm9yIERFViBvbmx5XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdGllcy1zdG9yYWdlXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG4gIH1cblxuICB3YXRjaEFsbDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXNoPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IE9ic2VydmFibGU8TG9hZFJlc3VsdDxUPj4ge1xuICAgIC8vIE1ha2Ugc3VyZSBzdG9yZSBpcyByZWFkeVxuICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5yZWFkeSgpKVxuICAgICAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4gdGhpcy53YXRjaEFsbDxUPihlbnRpdHlOYW1lLCB2YXJpYWJsZXMsIG9wdHMpKSk7IC8vIExvb3BcbiAgICB9XG5cbiAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuICAgIGNvbnN0IHN0b3JlTmFtZSA9IHZhcmlhYmxlcyAmJiB2YXJpYWJsZXMudHJhc2ggPyAoRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIGVudGl0eU5hbWUpIDogZW50aXR5TmFtZTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KHN0b3JlTmFtZSwge2NyZWF0ZTogdHJ1ZX0pXG4gICAgICAud2F0Y2hBbGwodmFyaWFibGVzLCBvcHRzKTtcblxuICAgIHJlc3VsdC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBsb2FkQWxsPFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydEJ5Pzogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcj86IChUKSA9PiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucyk6IFByb21pc2U8TG9hZFJlc3VsdDxUPj4ge1xuXG4gICAgLy8gTWFrZSBzdXJlIHN0b3JlIGlzIHJlYWR5XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZW50aXRpZXMtc3RvcmFnZV0gTG9hZGluZyAke2VudGl0eU5hbWV9Li4uYCk7XG5cbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihlbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHtkYXRhOiBbXSwgdG90YWw6IDB9OyAvLyBObyBzdG9yZSBmb3IgdGhpcyBlbnRpdHkgbmFtZVxuXG4gICAgICByZXR1cm4gZW50aXR5U3RvcmUubG9hZEFsbCh2YXJpYWJsZXMsIG9wdHMpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZDxUIGV4dGVuZHMgRW50aXR5PFQ+PihpZDogbnVtYmVyLCBlbnRpdHlOYW1lOiBzdHJpbmcsIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcblxuICAgICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KGVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG4gICAgICBpZiAoIWVudGl0eVN0b3JlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGF3YWl0IGVudGl0eVN0b3JlLmxvYWQoaWQsIG9wdHMpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbmV4dFZhbHVlKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLmdldEVudGl0eVN0b3JlKHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWUpKS5uZXh0VmFsdWUoKTtcbiAgfVxuXG4gIGFzeW5jIG5leHRWYWx1ZXMoZW50aXR5T3JOYW1lOiBzdHJpbmcgfCBhbnksIGVudGl0eUNvdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgY29uc3QgZW50aXR5TmFtZSA9IHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWUpO1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZShlbnRpdHlOYW1lKTtcbiAgICBjb25zdCBmaXJzdFZhbHVlID0gc3RvcmUubmV4dFZhbHVlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRpdHlDb3VudCAtIDE7IGkrKykge1xuICAgICAgc3RvcmUubmV4dFZhbHVlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFJlc2VydmluZyByYW5nZSBbJHtmaXJzdFZhbHVlfSwke3N0b3JlLmN1cnJlbnRWYWx1ZSgpfV0gZm9yICR7ZW50aXR5TmFtZX0ncyBzZXF1ZW5jZWApO1xuICAgIHJldHVybiBmaXJzdFZhbHVlO1xuICB9XG5cbiAgYXN5bmMgY3VycmVudFZhbHVlKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5U3RvcmUodGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eU9yTmFtZSkpLmN1cnJlbnRWYWx1ZSgpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZTxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuXG4gICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICBjb25zdCBzdG9yZU5hbWUgPSBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KTtcbiAgICAgIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oc3RvcmVOYW1lKVxuICAgICAgICAuc2F2ZShlbnRpdHksIG9wdHMpO1xuXG4gICAgICAvLyBBc2sgdG8gc2F2ZVxuICAgICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuXG4gICAgICByZXR1cm4gZW50aXR5O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZUFsbDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdGllczogVFtdLCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gICAgcmVzZXQ/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFRbXT4ge1xuICAgIGlmIChpc0VtcHR5QXJyYXkoZW50aXRpZXMpICYmICghb3B0cyB8fCBvcHRzLnJlc2V0ICE9PSB0cnVlKSkgcmV0dXJuIGVudGl0aWVzOyAvLyBTa2lwIChub3RoaW5nIHRvIHNhdmUpXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG5cbiAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGVudGl0eU5hbWUgPSBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXRpZXNbMF0pO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oZW50aXR5TmFtZSkuc2F2ZUFsbChlbnRpdGllcywgb3B0cyk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGU8VCBleHRlbmRzIEVudGl0eTxULCBJRD4sIElEID0gbnVtYmVyPihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlQnlJZChlbnRpdHkuaWQsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBlbnRpdHlOYW1lOiBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQnlJZDxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sIElEID0gbnVtYmVyPihpZDogSUQsIG9wdHM6IHtcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBpZiAoIW9wdHMgfHwgaXNOaWxPckJsYW5rKG9wdHMuZW50aXR5TmFtZSkpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudCBcXCdvcHRzXFwnIG9yIFxcJ2VudGl0eU5hbWVcXCcnKTtcbiAgICAvL2lmIChpZCA+PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaWQgYSBsb2NhbCBlbnRpdHkgKG5vdCBhIG5lZ2F0aXZlIG51bWJlcik6ICcgKyBpZCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxULCBJRD4ob3B0cy5lbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgZGVsZXRlZEVudGl0eSA9IGVudGl0eVN0b3JlLmRlbGV0ZShpZCwgb3B0cyk7XG5cbiAgICAgIC8vIElmIHNvbWV0aGluZyBkZWxldGVkXG4gICAgICBpZiAoZGVsZXRlZEVudGl0eSkge1xuXG4gICAgICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIEFzayB0byBzYXZlXG4gICAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlbGV0ZWRFbnRpdHk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVNYW55PFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGlkczogbnVtYmVyW10sIG9wdHM6IHtcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGlmICghb3B0cyB8fCBpc05pbE9yQmxhbmsob3B0cy5lbnRpdHlOYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFxcJ29wdHNcXCcgb3IgXFwnb3B0cy5lbnRpdHlOYW1lXFwnJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihvcHRzLmVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG4gICAgICBpZiAoIWVudGl0eVN0b3JlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAvLyBEbyBkZWxldGlvblxuICAgICAgY29uc3QgZGVsZXRlZEVudGl0aWVzID0gZW50aXR5U3RvcmUuZGVsZXRlTWFueShpZHMsIG9wdHMpO1xuXG4gICAgICAvLyBJZiBzb21ldGhpbmcgZGVsZXRlZFxuICAgICAgaWYgKGRlbGV0ZWRFbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gTWFyayBhcyBzYXZlIG5lZWRcbiAgICAgICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWxldGVkRW50aXRpZXM7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZyb21UcmFzaDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlRnJvbVRyYXNoQnlJZChlbnRpdHkuaWQsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBlbnRpdHlOYW1lOiBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRnJvbVRyYXNoQnlJZDxUIGV4dGVuZHMgRW50aXR5PFQ+PihpZDogbnVtYmVyLCBvcHRzOiB7XG4gICAgZW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBpZiAoIW9wdHMgfHwgaXNOaWxPckJsYW5rKG9wdHMuZW50aXR5TmFtZSkpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudCBcXCdvcHRzXFwnIG9yIFxcJ2VudGl0eU5hbWVcXCcnKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUJ5SWQoaWQsIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBlbnRpdHlOYW1lOiBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgb3B0cy5lbnRpdHlOYW1lXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBtb3ZlVG9UcmFzaDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybiB1bmRlZmluZWQ7IC8vIHNraXBcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCBlbnRpdHlOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSk7XG5cbiAgICAvLyBEZWxldGUgZW50aXR5IGJ5IGlkLCBpZiBleGlzdHNcbiAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oZW50aXR5TmFtZSk7XG4gICAgaWYgKGVudGl0eVN0b3JlKSBlbnRpdHlTdG9yZS5kZWxldGUoZW50aXR5LmlkLCBvcHRzKTtcblxuICAgIC8vIENsZWFuIGlkIChhIG5ldyBpZCB3aWxsIGJlIHNldCBieSB0aGUgdHJhc2ggc3RvcmUpXG4gICAgZW50aXR5LmlkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gQWRkIHRvIHRyYXNoXG4gICAgY29uc3QgdHJhc2hOYW1lID0gRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIGVudGl0eU5hbWU7XG4gICAgdGhpcy5nZXRFbnRpdHlTdG9yZTxUPih0cmFzaE5hbWUpLnNhdmUoZW50aXR5LCBvcHRzKTtcblxuICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBhc3luYyBtb3ZlTWFueVRvVHJhc2g8VCBleHRlbmRzIEVudGl0eTxUPj4oaWRzOiBudW1iZXJbXSwgb3B0czoge1xuICAgIGVudGl0eU5hbWU6IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUW10+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgaWYgKCFvcHRzIHx8IGlzTmlsT3JCbGFuayhvcHRzLmVudGl0eU5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnb3B0cy5lbnRpdHlOYW1lXFwnJyk7XG5cbiAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4ob3B0cy5lbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBEbyBkZWxldGlvblxuICAgIGNvbnN0IGRlbGV0ZWRFbnRpdGllcyA9IGVudGl0eVN0b3JlLmRlbGV0ZU1hbnkoaWRzLCBvcHRzKTtcblxuICAgIC8vIElmIHNvbWV0aGluZyBkZWxldGVkXG4gICAgaWYgKGRlbGV0ZWRFbnRpdGllcy5sZW5ndGggPiAwKSB7XG5cbiAgICAgIC8vIENsZWFuIGlkcyAobmV3IGlkcyB3aWxsIGJlIHNldCBieSB0aGUgdHJhc2ggc3RvcmUpXG4gICAgICBkZWxldGVkRW50aXRpZXMuZm9yRWFjaChlID0+IGUuaWQgPSB1bmRlZmluZWQpO1xuXG4gICAgICBjb25zdCB0cmFzaE5hbWUgPSBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgb3B0cy5lbnRpdHlOYW1lO1xuICAgICAgdGhpcy5nZXRFbnRpdHlTdG9yZTxUPih0cmFzaE5hbWUsIHtjcmVhdGU6IHRydWV9KVxuICAgICAgICAuc2F2ZUFsbChkZWxldGVkRW50aXRpZXMsIG9wdHMpO1xuXG4gICAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICAgIC8vIE1hcmsgYXMgc2F2ZSBuZWVkXG4gICAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWRFbnRpdGllcztcbiAgfVxuXG4gIGFzeW5jIHNhdmVUb1RyYXNoPFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGVudGl0eTogVCwgb3B0cz86IHtcbiAgICBlbnRpdHlOYW1lPzogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IGVudGl0eU5hbWUgPSBvcHRzICYmIG9wdHMuZW50aXR5TmFtZSB8fCB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5KTtcbiAgICBjb25zdCB0cmFzaE5hbWUgPSBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgZW50aXR5TmFtZTtcbiAgICB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KHRyYXNoTmFtZSkuc2F2ZShlbnRpdHksIG9wdHMpO1xuXG4gICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyVHJhc2goZW50aXR5TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IHRyYXNoTmFtZSA9IEVudGl0aWVzU3RvcmFnZS5UUkFTSF9QUkVGSVggKyBlbnRpdHlOYW1lO1xuICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZSh0cmFzaE5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG4gICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBlbnRpdHlTdG9yZS5yZXNldCgpO1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcbiAgfVxuXG4gIHBlcnNpc3Qob3B0cyA9IHtza2lwSWZQcmlzdGluZTogdHJ1ZX0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBTa2lwIGlmIHByaXN0aW5lXG4gICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIXRoaXMuX2RpcnR5KSAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVMb2NhbGx5KG9wdHMpO1xuICB9XG5cbiAgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8RW50aXR5U3RvcmFnZU1hcD4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc29sZS5pbmZvKGBbZW50aXRpZXMtc3RvcmFnZV0gU3RhcnRpbmcgZW50aXR5IHN0b3JhZ2UuLi5gKTtcblxuICAgIC8vIFJlc3RvcmUgc2VxdWVuY2VzXG4gICAgYXdhaXQgdGhpcy5yZXN0b3JlTG9jYWxseSgpO1xuXG4gICAgLy8gU3RhcnQgYSBzYXZlIHRpbWVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLl8kc2F2ZSxcbiAgICAgICAgdGltZXIodGhpcy5fc2F2ZVRpbWVyUGVyaW9kLCB0aGlzLl9zYXZlVGltZXJQZXJpb2QpXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gQXZvaWQgdG8gbWFueSBjYWxsIChlLmcuIHdoZW4gJHNhdmUgQU5EIHRpbWVyIGFyZSB0cmlnZ2VyZWRcbiAgICAgICAgdGhyb3R0bGVUaW1lKHRoaXMuX3NhdmVUaW1lclBlcmlvZClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdG9yZUxvY2FsbHkoKSlcbiAgICApO1xuICAgIGNvbnNvbGUuaW5mbyhgW2VudGl0aWVzLXN0b3JhZ2VdIFN0YXJ0aW5nIFtPS10gaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG5cbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpIHtcbiAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgYXdhaXQgdGhpcy5zdG9yZUxvY2FsbHkoKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBnZXRFbnRpdHlTdG9yZTxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sIElEID0gbnVtYmVyPihuYW1lOiBzdHJpbmcsIG9wdHM/OiB7XG4gICAgY3JlYXRlPzogYm9vbGVhbjtcbiAgfSk6IEVudGl0eVN0b3JlPFQsIElEPiB7XG4gICAgbGV0IHN0b3JlID0gdGhpcy5fZGF0YVtuYW1lXTtcbiAgICBpZiAoIXN0b3JlICYmICghb3B0cyB8fCBvcHRzLmNyZWF0ZSAhPT0gZmFsc2UpKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy1zdG9yYWdlXSBDcmVhdGluZyBzdG9yZSAke25hbWV9YCk7XG4gICAgICBjb25zdCB0eXBlUG9saWN5ID0gdGhpcy5fdHlwZVBvbGljaWVzW25hbWVdO1xuICAgICAgc3RvcmUgPSBuZXcgRW50aXR5U3RvcmU8VCwgSUQ+KG5hbWUsIHRoaXMuc3RvcmFnZSwgdHlwZVBvbGljeSk7XG4gICAgICB0aGlzLl9kYXRhW25hbWVdID0gc3RvcmU7XG4gICAgfVxuICAgIHJldHVybiBzdG9yZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRlY3RFbnRpdHlOYW1lKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgRW50aXR5PGFueSwgYW55Pik6IHN0cmluZyB7XG4gICAgaWYgKCFlbnRpdHlPck5hbWUpIHRocm93IEVycm9yKCdVbmFibGUgdG8gZGV0ZWN0IGVudGl0eU5hbWUgb2Ygb2JqZWN0OiAnICsgZW50aXR5T3JOYW1lKTtcbiAgICBpZiAodHlwZW9mIGVudGl0eU9yTmFtZSA9PT0gJ3N0cmluZycpIHJldHVybiBlbnRpdHlPck5hbWU7XG4gICAgaWYgKGVudGl0eU9yTmFtZS5fX3R5cGVuYW1lKSB7XG4gICAgICByZXR1cm4gZW50aXR5T3JOYW1lLl9fdHlwZW5hbWU7XG4gICAgfVxuICAgIHJldHVybiBlbnRpdHlPck5hbWUuY29uc3RydWN0b3IubmFtZSArICdWTyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKSB7XG5cbiAgICBjb25zdCBlbnRpdHlOYW1lcyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoRU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYKTtcbiAgICBpZiAoIWVudGl0eU5hbWVzKSByZXR1cm47XG5cbiAgICBjb25zdCBub3cgPSB0aGlzLl9kZWJ1ZyAmJiBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5pbmZvKCdbZW50aXRpZXMtc3RvcmFnZV0gUmVzdG9yaW5nIGVudGl0aWVzLi4uJyk7XG4gICAgY29uc3QgZW50aXRpZXNDb3VudCA9IChhd2FpdCBQcm9taXNlLmFsbDxudW1iZXI+KFxuICAgICAgZW50aXR5TmFtZXNcbiAgICAgICAgLm1hcChuYW1lID0+IHRoaXMuZ2V0RW50aXR5U3RvcmU8YW55PihuYW1lKSlcbiAgICAgICAgLm1hcCgoc3RvcmU6IEVudGl0eVN0b3JlPGFueT4pID0+IHN0b3JlLnJlc3RvcmUoKSkpXG4gICAgKS5yZWR1Y2UoKHJlcywgY291bnQpID0+IChyZXMgKyBjb3VudCksIDApO1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZW50aXRpZXMtc3RvcmFnZV0gUmVzdG9yaW5nIGVudGl0aWVzIFtPS10gJHtlbnRpdGllc0NvdW50fSBlbnRpdGllcyBmb3VuZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzdG9yZUxvY2FsbHkob3B0cyA9IHtza2lwSWZQcmlzdGluZTogdHJ1ZX0pOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChvcHRzLnNraXBJZlByaXN0aW5lICYmICF0aGlzLmRpcnR5KSByZXR1cm47IC8vIHNraXBcblxuICAgIC8vIFNhdmluZyBwcm9ncmVzczogcmVwb3J0IHRoaXMgc2F2ZSBsYXRlclxuICAgIGlmICh0aGlzLl9zYXZpbmcpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2VudGl0aWVzLXN0b3JhZ2VdIFByZXZpb3VzIHBlcnNpc3Qgbm90IGZpbmlzaGVkLiBXYWl0aW5nLi4uJyk7XG4gICAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc2F2aW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9kaXJ0eSA9IGZhbHNlO1xuICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG4gICAgY29uc3QgZW50aXR5TmFtZXMgPSB0aGlzLl9kYXRhICYmIE9iamVjdC5rZXlzKHRoaXMuX2RhdGEpIHx8IFtdO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1tlbnRpdGllcy1zdG9yYWdlXSBQZXJzaXN0aW5nLi4uJyk7XG5cbiAgICBsZXQgY3VycmVudEVudGl0eU5hbWU7XG4gICAgcmV0dXJuIGNoYWluUHJvbWlzZXMoXG4gICAgICBlbnRpdHlOYW1lcy5tYXAoZW50aXR5TmFtZSA9PiAoKSA9PiB7XG4gICAgICAgICAgY3VycmVudEVudGl0eU5hbWUgPSBlbnRpdHlOYW1lO1xuICAgICAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZShlbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuXG4gICAgICAgICAgaWYgKCFlbnRpdHlTdG9yZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXRpZXMtc3RvcmFnZV0gUGVyc2lzdGluZyAke2VudGl0eU5hbWV9OiBzdG9yZSBub3QgZm91bmQhYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU0tpcCBzdG9yZSBpZiBwcmlzdGluZVxuICAgICAgICAgIGlmIChvcHRzLnNraXBJZlByaXN0aW5lICYmICFlbnRpdHlTdG9yZS5kaXJ0eSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgLy8gUGVyc2lzdCBzdG9yZVxuICAgICAgICAgIHJldHVybiBlbnRpdHlTdG9yZS5wZXJzaXN0KG9wdHMpXG4gICAgICAgICAgICAudGhlbihjb3VudCA9PiB7XG4gICAgICAgICAgICAgIC8vIElmIG5vIGVudGl0eSBmb3VuZCwgcmVtb3ZlIGZyb20gdGhlIGVudGl0eSBuYW1lcyBhcnJheVxuICAgICAgICAgICAgICBpZiAoIWNvdW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50aXR5TmFtZUluZGV4ID0gZW50aXR5TmFtZXMuZmluZEluZGV4KGUgPT4gZSA9PT0gZW50aXR5TmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGVudGl0eU5hbWVJbmRleCAhPT0gLTEpIGVudGl0eU5hbWVzLnNwbGljZShlbnRpdHlOYW1lSW5kZXgsIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgY3VycmVudEVudGl0eU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmV0dXJuIGlzRW1wdHlBcnJheShlbnRpdHlOYW1lcykgP1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZShFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVgpIDpcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5zZXQoRU5USVRJRVNfU1RPUkFHRV9LRVlfUFJFRklYLCBlbnRpdHlOYW1lcyk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy1zdG9yYWdlXSBQZXJzaXN0aW5nIFtPS10gJHtlbnRpdHlOYW1lcy5sZW5ndGh9IHN0b3JlcyBzYXZlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXMuLi5gKTtcbiAgICAgICAgdGhpcy5fc2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHRoaXMuX3NhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpO1xuICAgICAgICBpZiAoY3VycmVudEVudGl0eU5hbWUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbZW50aXRpZXMtc3RvcmFnZV0gRXJyb3Igd2hpbGUgcGVyc2lzdGluZyAke2N1cnJlbnRFbnRpdHlOYW1lfWAsIGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgW2VudGl0aWVzLXN0b3JhZ2VdIEVycm9yIHdoaWxlIHBlcnNpc3Rpbmc6ICR7ZXJyICYmIGVyci5tZXNzYWdlIHx8IGVycn1gLCBlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBYyxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUMsWUFBWSxFQUFFLFlBQVksRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBQywyQkFBMkIsRUFBNEIsV0FBVyxFQUF3QixNQUFNLHNCQUFzQixDQUFDO0FBQy9ILE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxXQUFXLEVBQUUsV0FBVyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDbEYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7QUFPMUQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxjQUFjLENBQThCLDBCQUEwQixDQUFDLENBQUM7QUFFaEQsQ0FBQztBQUc1RSxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxnQkFBa0M7SUFnQnJFLFlBQ1UsUUFB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O1lBQ3JDLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxpQkFBaUIsRUFBRTtvQkFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDdEY7cUJBQU07b0JBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQy9GO2dCQUNELE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0tBQUE7O0FBaGdCZSw0QkFBWSxHQUFHLFFBQVEsQ0FBQztBQUN4Qiw2QkFBYSxHQUFHLFNBQVMsQ0FBQzs7O1lBSjNDLFVBQVUsU0FBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OztZQXBCeEIsUUFBUTtZQU1SLGtCQUFrQjtZQVBsQixPQUFPO1lBUVAsV0FBVyx1QkFrQ2QsTUFBTSxTQUFDLFdBQVc7NENBQ2xCLFFBQVEsWUFBSSxNQUFNLFNBQUMsK0JBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkZWZlciwgbWVyZ2UsIE9ic2VydmFibGUsIHRpbWVyfSBmcm9tICdyeGpzJztcbmltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7Zmlyc3QsIHN3aXRjaE1hcCwgdGhyb3R0bGVUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0VudGl0eSwgSUVudGl0eX0gZnJvbSAnLi4vbW9kZWwvZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05pbE9yQmxhbmt9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtMb2FkUmVzdWx0fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVgsIEVudGl0eVN0b3JhZ2VMb2FkT3B0aW9ucywgRW50aXR5U3RvcmUsIEVudGl0eVN0b3JlVHlwZVBvbGljeX0gZnJvbSAnLi9lbnRpdHktc3RvcmUuY2xhc3MnO1xuaW1wb3J0IHtQcm9ncmVzc0JhclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9wcm9ncmVzcy1iYXIuc2VydmljZSc7XG5pbXBvcnQge0Vudmlyb25tZW50LCBFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7Y2hhaW5Qcm9taXNlc30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0aWVzU3RvcmFnZVR5cGVQb2xpY2llcyB7XG4gIFtfX3R5cGVuYW1lOiBzdHJpbmddOiBFbnRpdHlTdG9yZVR5cGVQb2xpY3k7XG59XG5cbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxfU1RPUkFHRV9UWVBFX1BPTElDSUVTID0gbmV3IEluamVjdGlvblRva2VuPEVudGl0aWVzU3RvcmFnZVR5cGVQb2xpY2llcz4oJ2xvY2FsU3RvcmFnZVR5cGVQb2xpY2llcycpO1xuXG5kZWNsYXJlIGludGVyZmFjZSBFbnRpdHlTdG9yYWdlTWFwIHsgW2tleTogc3RyaW5nXTogRW50aXR5U3RvcmU8YW55LCBhbnk+IH07XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEVudGl0aWVzU3RvcmFnZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8RW50aXR5U3RvcmFnZU1hcD4ge1xuXG4gIHN0YXRpYyByZWFkb25seSBUUkFTSF9QUkVGSVggPSAnVHJhc2gjJztcbiAgc3RhdGljIHJlYWRvbmx5IFJFTU9URV9QUkVGSVggPSAnUmVtb3RlIyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZVBvbGljaWVzOiBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NhdmVUaW1lclBlcmlvZDtcblxuICBwcml2YXRlIF8kc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gIHByaXZhdGUgX2RpcnR5ID0gZmFsc2U7XG4gIHByaXZhdGUgX3NhdmluZyA9IGZhbHNlO1xuXG4gIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlydHkgfHwgT2JqZWN0LnZhbHVlcyh0aGlzLl9kYXRhKS5zb21lKHN0b3JlID0+IHN0b3JlLmRpcnR5KTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIHByb2dyZXNzQmFyU2VydmljZTogUHJvZ3Jlc3NCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NUT1JBR0VfVFlQRV9QT0xJQ0lFUykgdHlwZVBvbGljaWVzOiBFbnRpdGllc1N0b3JhZ2VUeXBlUG9saWNpZXNcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuX3R5cGVQb2xpY2llcyA9IHR5cGVQb2xpY2llcyB8fCB7fTtcbiAgICB0aGlzLl9zYXZlVGltZXJQZXJpb2QgPSBlbnZpcm9ubWVudC5zdG9yYWdlU2F2ZVBlcmlvZE1zIHx8IDEwMDAwIC8qID0gMTBzICovO1xuICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbZW50aXRpZXMtc3RvcmFnZV0gQ3JlYXRpbmcgc2VydmljZScpO1xuICB9XG5cblxuICBhc3luYyBuZ09uU3RhcnQoKTogUHJvbWlzZTxFbnRpdHlTdG9yYWdlTWFwPiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zb2xlLmluZm8oYFtlbnRpdGllcy1zdG9yYWdlXSBTdGFydGluZyBlbnRpdHkgc3RvcmFnZS4uLmApO1xuXG4gICAgLy8gUmVzdG9yZSBzdG9yZXNcbiAgICBhd2FpdCB0aGlzLnJlc3RvcmVMb2NhbGx5KCk7XG5cbiAgICAvLyBTdGFydCBhIHNhdmUgdGltZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuXyRzYXZlLFxuICAgICAgICB0aW1lcih0aGlzLl9zYXZlVGltZXJQZXJpb2QsIHRoaXMuX3NhdmVUaW1lclBlcmlvZClcbiAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gQXZvaWQgdG8gbWFueSBjYWxsIChlLmcuIHdoZW4gJHNhdmUgQU5EIHRpbWVyIGFyZSB0cmlnZ2VyZWRcbiAgICAgICAgICB0aHJvdHRsZVRpbWUodGhpcy5fc2F2ZVRpbWVyUGVyaW9kKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdG9yZUxvY2FsbHkoe3NraXBJZlByaXN0aW5lOiB0cnVlfSkpXG4gICAgKTtcblxuICAgIC8vIFNhdmUsIHdoZW4gcGxhdGZvcm0gaXMgaW4gcGF1c2VcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5wbGF0Zm9ybS5wYXVzZS5zdWJzY3JpYmUoYXN5bmMgKCkgID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBbZW50aXRpZXMtc3RvcmFnZV0gUGxhdGZvcm0gd2lsbCBwYXVzZTogc2F2aW5nLi4uYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmVMb2NhbGx5KHtza2lwSWZQcmlzdGluZTogdHJ1ZX0pO1xuICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdGllcy1zdG9yYWdlXSBQbGF0Zm9ybSB3aWxsIHBhdXNlOiBzYXZpbmcgW09LXWApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc29sZS5pbmZvKGBbZW50aXRpZXMtc3RvcmFnZV0gU3RhcnRpbmcgW09LXSBpbiAke0RhdGUubm93KCkgLSBub3d9bXNgKTtcblxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdG9wKCkge1xuICAgIGF3YWl0IHRoaXMuc3RvcmVMb2NhbGx5KHtza2lwSWZQcmlzdGluZTogdHJ1ZX0pO1xuICB9XG5cbiAgd2F0Y2hBbGw8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5TmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Qnk/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcmVjdGlvbj86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFzaD86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyPzogKFQpID0+IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBPYnNlcnZhYmxlPExvYWRSZXN1bHQ8VD4+IHtcbiAgICAvLyBNYWtlIHN1cmUgc3RvcmUgaXMgcmVhZHlcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgcmV0dXJuIGRlZmVyKCgpID0+IHRoaXMucmVhZHkoKSlcbiAgICAgICAgLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMud2F0Y2hBbGw8VD4oZW50aXR5TmFtZSwgdmFyaWFibGVzLCBvcHRzKSkpOyAvLyBMb29wXG4gICAgfVxuXG4gICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSB2YXJpYWJsZXMgJiYgdmFyaWFibGVzLnRyYXNoID8gKEVudGl0aWVzU3RvcmFnZS5UUkFTSF9QUkVGSVggKyBlbnRpdHlOYW1lKSA6IGVudGl0eU5hbWU7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihzdG9yZU5hbWUsIHtjcmVhdGU6IHRydWV9KVxuICAgICAgLndhdGNoQWxsKHZhcmlhYmxlcywgb3B0cyk7XG5cbiAgICByZXN1bHQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgbG9hZEFsbDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRCeT86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb24/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI/OiAoVCkgPT4gYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiBFbnRpdHlTdG9yYWdlTG9hZE9wdGlvbnMpOiBQcm9taXNlPExvYWRSZXN1bHQ8VD4+IHtcblxuICAgIC8vIE1ha2Ugc3VyZSBzdG9yZSBpcyByZWFkeVxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIExvYWRpbmcgJHtlbnRpdHlOYW1lfS4uLmApO1xuXG4gICAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4oZW50aXR5TmFtZSwge2NyZWF0ZTogZmFsc2V9KTtcbiAgICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybiB7ZGF0YTogW10sIHRvdGFsOiAwfTsgLy8gTm8gc3RvcmUgZm9yIHRoaXMgZW50aXR5IG5hbWVcblxuICAgICAgcmV0dXJuIGVudGl0eVN0b3JlLmxvYWRBbGwodmFyaWFibGVzLCBvcHRzKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWQ8VCBleHRlbmRzIEVudGl0eTxUPj4oaWQ6IG51bWJlciwgZW50aXR5TmFtZTogc3RyaW5nLCBvcHRzPzogRW50aXR5U3RvcmFnZUxvYWRPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG5cbiAgICAgIGNvbnN0IGVudGl0eVN0b3JlID0gdGhpcy5nZXRFbnRpdHlTdG9yZTxUPihlbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBhd2FpdCBlbnRpdHlTdG9yZS5sb2FkKGlkLCBvcHRzKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5leHRWYWx1ZShlbnRpdHlPck5hbWU6IHN0cmluZyB8IGFueSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlTdG9yZSh0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5T3JOYW1lKSkubmV4dFZhbHVlKCk7XG4gIH1cblxuICBhc3luYyBuZXh0VmFsdWVzKGVudGl0eU9yTmFtZTogc3RyaW5nIHwgYW55LCBlbnRpdHlDb3VudDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgIGNvbnN0IGVudGl0eU5hbWUgPSB0aGlzLmRldGVjdEVudGl0eU5hbWUoZW50aXR5T3JOYW1lKTtcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmUoZW50aXR5TmFtZSk7XG4gICAgY29uc3QgZmlyc3RWYWx1ZSA9IHN0b3JlLm5leHRWYWx1ZSgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50aXR5Q291bnQgLSAxOyBpKyspIHtcbiAgICAgIHN0b3JlLm5leHRWYWx1ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtlbnRpdGllcy1zdG9yYWdlXSBSZXNlcnZpbmcgcmFuZ2UgWyR7Zmlyc3RWYWx1ZX0sJHtzdG9yZS5jdXJyZW50VmFsdWUoKX1dIGZvciAke2VudGl0eU5hbWV9J3Mgc2VxdWVuY2VgKTtcbiAgICByZXR1cm4gZmlyc3RWYWx1ZTtcbiAgfVxuXG4gIGFzeW5jIGN1cnJlbnRWYWx1ZShlbnRpdHlPck5hbWU6IHN0cmluZyB8IGFueSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiB0aGlzLmdldEVudGl0eVN0b3JlKHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWUpKS5jdXJyZW50VmFsdWUoKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmU8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm47IC8vIHNraXBcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcblxuICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuICAgICAgY29uc3Qgc3RvcmVOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSk7XG4gICAgICB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KHN0b3JlTmFtZSlcbiAgICAgICAgLnNhdmUoZW50aXR5LCBvcHRzKTtcblxuICAgICAgLy8gQXNrIHRvIHNhdmVcbiAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5kZWNyZWFzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVBbGw8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXRpZXM6IFRbXSwgb3B0cz86IHtcbiAgICBlbnRpdHlOYW1lPzogc3RyaW5nO1xuICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUW10+IHtcbiAgICBpZiAoaXNFbXB0eUFycmF5KGVudGl0aWVzKSAmJiAoIW9wdHMgfHwgb3B0cy5yZXNldCAhPT0gdHJ1ZSkpIHJldHVybiBlbnRpdGllczsgLy8gU2tpcCAobm90aGluZyB0byBzYXZlKVxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyU2VydmljZS5pbmNyZWFzZSgpO1xuXG4gICAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG4gICAgICBjb25zdCBlbnRpdHlOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0aWVzWzBdKTtcbiAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KGVudGl0eU5hbWUpLnNhdmVBbGwoZW50aXRpZXMsIG9wdHMpO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlPFQgZXh0ZW5kcyBFbnRpdHk8VCwgSUQ+LCBJRCA9IG51bWJlcj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUJ5SWQoZW50aXR5LmlkLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZW50aXR5TmFtZTogb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSlcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUJ5SWQ8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBJRCA9IG51bWJlcj4oaWQ6IElELCBvcHRzOiB7XG4gICAgZW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgaWYgKCFvcHRzIHx8IGlzTmlsT3JCbGFuayhvcHRzLmVudGl0eU5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnb3B0c1xcJyBvciBcXCdlbnRpdHlOYW1lXFwnJyk7XG4gICAgLy9pZiAoaWQgPj0gMCkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlkIGEgbG9jYWwgZW50aXR5IChub3QgYSBuZWdhdGl2ZSBudW1iZXIpOiAnICsgaWQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG4gICAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VCwgSUQ+KG9wdHMuZW50aXR5TmFtZSwge2NyZWF0ZTogZmFsc2V9KTtcbiAgICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGRlbGV0ZWRFbnRpdHkgPSBlbnRpdHlTdG9yZS5kZWxldGUoaWQsIG9wdHMpO1xuXG4gICAgICAvLyBJZiBzb21ldGhpbmcgZGVsZXRlZFxuICAgICAgaWYgKGRlbGV0ZWRFbnRpdHkpIHtcblxuICAgICAgICAvLyBNYXJrIGFzIGRpcnR5XG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBBc2sgdG8gc2F2ZVxuICAgICAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWxldGVkRW50aXR5O1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFueTxUIGV4dGVuZHMgRW50aXR5PFQ+PihpZHM6IG51bWJlcltdLCBvcHRzOiB7XG4gICAgZW50aXR5TmFtZTogc3RyaW5nO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFRbXT4ge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBpZiAoIW9wdHMgfHwgaXNOaWxPckJsYW5rKG9wdHMuZW50aXR5TmFtZSkpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudCBcXCdvcHRzXFwnIG9yIFxcJ29wdHMuZW50aXR5TmFtZVxcJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmluY3JlYXNlKCk7XG4gICAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4ob3B0cy5lbnRpdHlOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgICAgaWYgKCFlbnRpdHlTdG9yZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgLy8gRG8gZGVsZXRpb25cbiAgICAgIGNvbnN0IGRlbGV0ZWRFbnRpdGllcyA9IGVudGl0eVN0b3JlLmRlbGV0ZU1hbnkoaWRzLCBvcHRzKTtcblxuICAgICAgLy8gSWYgc29tZXRoaW5nIGRlbGV0ZWRcbiAgICAgIGlmIChkZWxldGVkRW50aXRpZXMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgIC8vIE1hcmsgYXMgZGlydHlcbiAgICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIE1hcmsgYXMgc2F2ZSBuZWVkXG4gICAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVsZXRlZEVudGl0aWVzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVGcm9tVHJhc2g8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gc2tpcFxuXG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIHJldHVybiB0aGlzLmRlbGV0ZUZyb21UcmFzaEJ5SWQoZW50aXR5LmlkLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZW50aXR5TmFtZTogb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSlcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUZyb21UcmFzaEJ5SWQ8VCBleHRlbmRzIEVudGl0eTxUPj4oaWQ6IG51bWJlciwgb3B0czoge1xuICAgIGVudGl0eU5hbWU6IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgaWYgKCFvcHRzIHx8IGlzTmlsT3JCbGFuayhvcHRzLmVudGl0eU5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXFwnb3B0c1xcJyBvciBcXCdlbnRpdHlOYW1lXFwnJyk7XG5cbiAgICByZXR1cm4gdGhpcy5kZWxldGVCeUlkKGlkLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgZW50aXR5TmFtZTogRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIG9wdHMuZW50aXR5TmFtZVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbW92ZVRvVHJhc2g8VCBleHRlbmRzIEVudGl0eTxUPj4oZW50aXR5OiBULCBvcHRzPzoge1xuICAgIGVudGl0eU5hbWU/OiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm4gdW5kZWZpbmVkOyAvLyBza2lwXG5cbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgZW50aXR5TmFtZSA9IG9wdHMgJiYgb3B0cy5lbnRpdHlOYW1lIHx8IHRoaXMuZGV0ZWN0RW50aXR5TmFtZShlbnRpdHkpO1xuXG4gICAgLy8gRGVsZXRlIGVudGl0eSBieSBpZCwgaWYgZXhpc3RzXG4gICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KGVudGl0eU5hbWUpO1xuICAgIGlmIChlbnRpdHlTdG9yZSkgZW50aXR5U3RvcmUuZGVsZXRlKGVudGl0eS5pZCwgb3B0cyk7XG5cbiAgICAvLyBDbGVhbiBpZCAoYSBuZXcgaWQgd2lsbCBiZSBzZXQgYnkgdGhlIHRyYXNoIHN0b3JlKVxuICAgIGVudGl0eS5pZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIEFkZCB0byB0cmFzaFxuICAgIGNvbnN0IHRyYXNoTmFtZSA9IEVudGl0aWVzU3RvcmFnZS5UUkFTSF9QUkVGSVggKyBlbnRpdHlOYW1lO1xuICAgIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4odHJhc2hOYW1lKS5zYXZlKGVudGl0eSwgb3B0cyk7XG5cbiAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgYXN5bmMgbW92ZU1hbnlUb1RyYXNoPFQgZXh0ZW5kcyBFbnRpdHk8VD4+KGlkczogbnVtYmVyW10sIG9wdHM6IHtcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VFtdPiB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGlmICghb3B0cyB8fCBpc05pbE9yQmxhbmsob3B0cy5lbnRpdHlOYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFxcJ29wdHMuZW50aXR5TmFtZVxcJycpO1xuXG4gICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlPFQ+KG9wdHMuZW50aXR5TmFtZSwge2NyZWF0ZTogZmFsc2V9KTtcbiAgICBpZiAoIWVudGl0eVN0b3JlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gRG8gZGVsZXRpb25cbiAgICBjb25zdCBkZWxldGVkRW50aXRpZXMgPSBlbnRpdHlTdG9yZS5kZWxldGVNYW55KGlkcywgb3B0cyk7XG5cbiAgICAvLyBJZiBzb21ldGhpbmcgZGVsZXRlZFxuICAgIGlmIChkZWxldGVkRW50aXRpZXMubGVuZ3RoID4gMCkge1xuXG4gICAgICAvLyBDbGVhbiBpZHMgKG5ldyBpZHMgd2lsbCBiZSBzZXQgYnkgdGhlIHRyYXNoIHN0b3JlKVxuICAgICAgZGVsZXRlZEVudGl0aWVzLmZvckVhY2goZSA9PiBlLmlkID0gdW5kZWZpbmVkKTtcblxuICAgICAgY29uc3QgdHJhc2hOYW1lID0gRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIG9wdHMuZW50aXR5TmFtZTtcbiAgICAgIHRoaXMuZ2V0RW50aXR5U3RvcmU8VD4odHJhc2hOYW1lLCB7Y3JlYXRlOiB0cnVlfSlcbiAgICAgICAgLnNhdmVBbGwoZGVsZXRlZEVudGl0aWVzLCBvcHRzKTtcblxuICAgICAgLy8gTWFyayBhcyBkaXJ0eVxuICAgICAgdGhpcy5fZGlydHkgPSB0cnVlO1xuXG4gICAgICAvLyBNYXJrIGFzIHNhdmUgbmVlZFxuICAgICAgdGhpcy5fJHNhdmUuZW1pdCgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkRW50aXRpZXM7XG4gIH1cblxuICBhc3luYyBzYXZlVG9UcmFzaDxUIGV4dGVuZHMgRW50aXR5PFQ+PihlbnRpdHk6IFQsIG9wdHM/OiB7XG4gICAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybiB1bmRlZmluZWQ7IC8vIHNraXBcblxuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCBlbnRpdHlOYW1lID0gb3B0cyAmJiBvcHRzLmVudGl0eU5hbWUgfHwgdGhpcy5kZXRlY3RFbnRpdHlOYW1lKGVudGl0eSk7XG4gICAgY29uc3QgdHJhc2hOYW1lID0gRW50aXRpZXNTdG9yYWdlLlRSQVNIX1BSRUZJWCArIGVudGl0eU5hbWU7XG4gICAgdGhpcy5nZXRFbnRpdHlTdG9yZTxUPih0cmFzaE5hbWUpLnNhdmUoZW50aXR5LCBvcHRzKTtcblxuICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBhc3luYyBjbGVhclRyYXNoKGVudGl0eU5hbWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCB0cmFzaE5hbWUgPSBFbnRpdGllc1N0b3JhZ2UuVFJBU0hfUFJFRklYICsgZW50aXR5TmFtZTtcbiAgICBjb25zdCBlbnRpdHlTdG9yZSA9IHRoaXMuZ2V0RW50aXR5U3RvcmUodHJhc2hOYW1lLCB7Y3JlYXRlOiBmYWxzZX0pO1xuICAgIGlmICghZW50aXR5U3RvcmUpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgZW50aXR5U3RvcmUucmVzZXQoKTtcbiAgICB0aGlzLl9kaXJ0eSA9IHRydWU7XG5cbiAgICB0aGlzLl8kc2F2ZS5lbWl0KCk7XG4gIH1cblxuICBwZXJzaXN0KG9wdHMgPSB7c2tpcElmUHJpc3RpbmU6IHRydWV9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmVMb2NhbGx5KG9wdHMpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZ2V0RW50aXR5U3RvcmU8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBJRCA9IG51bWJlcj4obmFtZTogc3RyaW5nLCBvcHRzPzoge1xuICAgIGNyZWF0ZT86IGJvb2xlYW47XG4gIH0pOiBFbnRpdHlTdG9yZTxULCBJRD4ge1xuICAgIGxldCBzdG9yZSA9IHRoaXMuX2RhdGFbbmFtZV07XG4gICAgaWYgKCFzdG9yZSAmJiAoIW9wdHMgfHwgb3B0cy5jcmVhdGUgIT09IGZhbHNlKSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbZW50aXRpZXMtc3RvcmFnZV0gQ3JlYXRpbmcgc3RvcmUgJHtuYW1lfWApO1xuICAgICAgY29uc3QgdHlwZVBvbGljeSA9IHRoaXMuX3R5cGVQb2xpY2llc1tuYW1lXTtcbiAgICAgIHN0b3JlID0gbmV3IEVudGl0eVN0b3JlPFQsIElEPihuYW1lLCB0aGlzLnN0b3JhZ2UsIHR5cGVQb2xpY3kpO1xuICAgICAgdGhpcy5fZGF0YVtuYW1lXSA9IHN0b3JlO1xuICAgIH1cbiAgICByZXR1cm4gc3RvcmU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZWN0RW50aXR5TmFtZShlbnRpdHlPck5hbWU6IHN0cmluZyB8IEVudGl0eTxhbnksIGFueT4pOiBzdHJpbmcge1xuICAgIGlmICghZW50aXR5T3JOYW1lKSB0aHJvdyBFcnJvcignVW5hYmxlIHRvIGRldGVjdCBlbnRpdHlOYW1lIG9mIG9iamVjdDogJyArIGVudGl0eU9yTmFtZSk7XG4gICAgaWYgKHR5cGVvZiBlbnRpdHlPck5hbWUgPT09ICdzdHJpbmcnKSByZXR1cm4gZW50aXR5T3JOYW1lO1xuICAgIGlmIChlbnRpdHlPck5hbWUuX190eXBlbmFtZSkge1xuICAgICAgcmV0dXJuIGVudGl0eU9yTmFtZS5fX3R5cGVuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gZW50aXR5T3JOYW1lLmNvbnN0cnVjdG9yLm5hbWUgKyAnVk8nO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCkge1xuXG4gICAgY29uc3QgZW50aXR5TmFtZXMgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCk7XG4gICAgaWYgKCFlbnRpdHlOYW1lcykgcmV0dXJuO1xuXG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuaW5mbygnW2VudGl0aWVzLXN0b3JhZ2VdIFJlc3RvcmluZyBlbnRpdGllcy4uLicpO1xuICAgIGNvbnN0IGVudGl0aWVzQ291bnQgPSAoYXdhaXQgUHJvbWlzZS5hbGw8bnVtYmVyPihcbiAgICAgIGVudGl0eU5hbWVzXG4gICAgICAgIC5tYXAobmFtZSA9PiB0aGlzLmdldEVudGl0eVN0b3JlPGFueT4obmFtZSkpXG4gICAgICAgIC5tYXAoKHN0b3JlOiBFbnRpdHlTdG9yZTxhbnk+KSA9PiBzdG9yZS5yZXN0b3JlKCkpKVxuICAgICkucmVkdWNlKChyZXMsIGNvdW50KSA9PiAocmVzICsgY291bnQpLCAwKTtcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFJlc3RvcmluZyBlbnRpdGllcyBbT0tdICR7ZW50aXRpZXNDb3VudH0gZW50aXRpZXMgZm91bmQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RvcmVMb2NhbGx5KG9wdHMgPSB7c2tpcElmUHJpc3RpbmU6IHRydWV9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIXRoaXMuZGlydHkpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgLy8gU2F2aW5nIHByb2dyZXNzOiByZXBvcnQgdGhpcyBzYXZlIGxhdGVyXG4gICAgaWYgKHRoaXMuX3NhdmluZykge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbZW50aXRpZXMtc3RvcmFnZV0gUHJldmlvdXMgcGVyc2lzdCBub3QgZmluaXNoZWQuIFdhaXRpbmcuLi4nKTtcbiAgICAgIHRoaXMuXyRzYXZlLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zYXZpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuaW5jcmVhc2UoKTtcbiAgICBjb25zdCBlbnRpdHlOYW1lcyA9IHRoaXMuX2RhdGEgJiYgT2JqZWN0LmtleXModGhpcy5fZGF0YSkgfHwgW107XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2VudGl0aWVzLXN0b3JhZ2VdIFBlcnNpc3RpbmcuLi4nKTtcblxuICAgIGxldCBjdXJyZW50RW50aXR5TmFtZTtcbiAgICByZXR1cm4gY2hhaW5Qcm9taXNlcyhcbiAgICAgIGVudGl0eU5hbWVzLm1hcChlbnRpdHlOYW1lID0+ICgpID0+IHtcbiAgICAgICAgICBjdXJyZW50RW50aXR5TmFtZSA9IGVudGl0eU5hbWU7XG4gICAgICAgICAgY29uc3QgZW50aXR5U3RvcmUgPSB0aGlzLmdldEVudGl0eVN0b3JlKGVudGl0eU5hbWUsIHtjcmVhdGU6IGZhbHNlfSk7XG5cbiAgICAgICAgICBpZiAoIWVudGl0eVN0b3JlKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFtlbnRpdGllcy1zdG9yYWdlXSBQZXJzaXN0aW5nICR7ZW50aXR5TmFtZX06IHN0b3JlIG5vdCBmb3VuZCFgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTS2lwIHN0b3JlIGlmIHByaXN0aW5lXG4gICAgICAgICAgaWYgKG9wdHMuc2tpcElmUHJpc3RpbmUgJiYgIWVudGl0eVN0b3JlLmRpcnR5KSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAvLyBQZXJzaXN0IHN0b3JlXG4gICAgICAgICAgcmV0dXJuIGVudGl0eVN0b3JlLnBlcnNpc3Qob3B0cylcbiAgICAgICAgICAgIC50aGVuKGNvdW50ID0+IHtcbiAgICAgICAgICAgICAgLy8gSWYgbm8gZW50aXR5IGZvdW5kLCByZW1vdmUgZnJvbSB0aGUgZW50aXR5IG5hbWVzIGFycmF5XG4gICAgICAgICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRpdHlOYW1lSW5kZXggPSBlbnRpdHlOYW1lcy5maW5kSW5kZXgoZSA9PiBlID09PSBlbnRpdHlOYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZW50aXR5TmFtZUluZGV4ICE9PSAtMSkgZW50aXR5TmFtZXMuc3BsaWNlKGVudGl0eU5hbWVJbmRleCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBjdXJyZW50RW50aXR5TmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4gaXNFbXB0eUFycmF5KGVudGl0eU5hbWVzKSA/XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlKEVOVElUSUVTX1NUT1JBR0VfS0VZX1BSRUZJWCkgOlxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldChFTlRJVElFU19TVE9SQUdFX0tFWV9QUkVGSVgsIGVudGl0eU5hbWVzKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2VudGl0aWVzLXN0b3JhZ2VdIFBlcnNpc3RpbmcgW09LXSAke2VudGl0eU5hbWVzLmxlbmd0aH0gc3RvcmVzIHNhdmVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tcy4uLmApO1xuICAgICAgICB0aGlzLl9zYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc0JhclNlcnZpY2UuZGVjcmVhc2UoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdGhpcy5fc2F2aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NCYXJTZXJ2aWNlLmRlY3JlYXNlKCk7XG4gICAgICAgIGlmIChjdXJyZW50RW50aXR5TmFtZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtlbnRpdGllcy1zdG9yYWdlXSBFcnJvciB3aGlsZSBwZXJzaXN0aW5nICR7Y3VycmVudEVudGl0eU5hbWV9YCwgZXJyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbZW50aXRpZXMtc3RvcmFnZV0gRXJyb3Igd2hpbGUgcGVyc2lzdGluZzogJHtlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyfWAsIGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfSk7XG4gIH1cblxufVxuIl19
@@ -36,9 +36,10 @@ export const isMobile = (win) => {
36
36
  if (_cache.mobile === null || _cache.mobile === undefined) {
37
37
  _cache.mobile = isCordova(window)
38
38
  || isAndroid(win) || isIOS(window)
39
+ // Workaround, for MS Windows touch screen (detected as mobile, but forced as desktop)
39
40
  || (isTouchUi(win) && !isWindows(win));
40
41
  }
41
42
  return _cache.mobile;
42
43
  };
43
44
  export { ɵ0 };
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcGxhdGZvcm1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztTQUVTO0FBRVQsTUFBTSxNQUFNLEdBQUc7SUFDYixNQUFNLEVBQUUsSUFBSTtJQUNaLE9BQU8sRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFhLEVBQVcsRUFBRSxDQUNoRSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUVoQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDekQsTUFBTSxTQUFTLEdBQVcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUssTUFBYyxDQUFDLEtBQUssQ0FBQztJQUNuRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBWSxFQUFFLEVBQUUsQ0FDeEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFZLEVBQUUsRUFBRSxDQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFFMUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUM3QixtQkFBbUI7SUFDbkIsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxVQUFVO0lBQ1YsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0RCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDbkMsYUFBYSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDdkMsYUFBYSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFRLEVBQVcsRUFBRTtJQUM3QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1FBQzNELE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUMzRTtJQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3pELE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztlQUM1QixTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztlQUMvQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIC0tLVxuICogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vaW9uaWMtdGVhbS9pb25pYy1mcmFtZXdvcmsvYmxvYi9iMGQ1M2NhNzM2MTk1ODU2NzFkOGNmNGRjMjRlNDdmODI2NDk1YTBhL2NvcmUvc3JjL3V0aWxzL3BsYXRmb3JtLnRzXG4gKiAtLS0gKi9cblxuY29uc3QgX2NhY2hlID0ge1xuICBtb2JpbGU6IG51bGwsXG4gIGNvcmRvdmE6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBtYXRjaE1lZGlhID0gKHdpbjogV2luZG93LCBxdWVyeTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICB3aW4ubWF0Y2hNZWRpYShxdWVyeSkubWF0Y2hlcztcblxuZXhwb3J0IGNvbnN0IHRlc3RVc2VyQWdlbnQgPSAod2luOiBXaW5kb3csIGV4cHI6IFJlZ0V4cCkgPT4ge1xuICBjb25zdCB1c2VyQWdlbnQ6IHN0cmluZyA9IHdpbi5uYXZpZ2F0b3IudXNlckFnZW50IHx8IHdpbi5uYXZpZ2F0b3IudmVuZG9yIHx8ICh3aW5kb3cgYXMgYW55KS5vcGVyYTtcbiAgcmV0dXJuIGV4cHIudGVzdCh1c2VyQWdlbnQpO1xufVxuXG5leHBvcnQgY29uc3QgaXNXaW5kb3dzID0gKHdpbj86IFdpbmRvdykgPT5cbiAgdGVzdFVzZXJBZ2VudCh3aW4sIC93aW5kb3dzL2kpO1xuXG5leHBvcnQgY29uc3QgaXNUb3VjaFVpID0gKHdpbj86IFdpbmRvdykgPT5cbiAgbWF0Y2hNZWRpYSh3aW4sICcoYW55LXBvaW50ZXI6Y29hcnNlKScpO1xuXG5jb25zdCBpc0lwYWQgPSAod2luOiBXaW5kb3cpID0+IHtcbiAgLy8gaU9TIDEyIGFuZCBiZWxvd1xuICBpZiAodGVzdFVzZXJBZ2VudCh3aW4sIC9pUGFkL2kpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBpT1MgMTMrXG4gIGlmICh0ZXN0VXNlckFnZW50KHdpbiwgL01hY2ludG9zaC9pKSAmJiBpc1RvdWNoVWkod2luKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSU9TID0gKHdpbjogV2luZG93KSA9PlxuICB0ZXN0VXNlckFnZW50KHdpbiwgL2lQaG9uZXxpUG9kL2kpIHx8IGlzSXBhZCh3aW4pO1xuXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkID0gKHdpbjogV2luZG93KSA9PlxuICB0ZXN0VXNlckFnZW50KHdpbiwgL2FuZHJvaWR8c2luay9pKTtcblxuZXhwb3J0IGNvbnN0IGlzQ29yZG92YSA9ICh3aW46IGFueSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoX2NhY2hlLmNvcmRvdmEgPT09IG51bGwgfHwgX2NhY2hlLmNvcmRvdmEgPT09IHVuZGVmaW5lZCkge1xuICAgIF9jYWNoZS5jb3Jkb3ZhID0gISEod2luWydjb3Jkb3ZhJ10gfHwgd2luWydwaG9uZWdhcCddIHx8IHdpblsnUGhvbmVHYXAnXSk7XG4gIH1cbiAgcmV0dXJuIF9jYWNoZS5jb3Jkb3ZhO1xufVxuXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSAod2luOiBXaW5kb3cpID0+IHtcbiAgaWYgKF9jYWNoZS5tb2JpbGUgPT09IG51bGwgfHwgX2NhY2hlLm1vYmlsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgX2NhY2hlLm1vYmlsZSA9IGlzQ29yZG92YSh3aW5kb3cpXG4gICAgICB8fCBpc0FuZHJvaWQod2luKSB8fCBpc0lPUyh3aW5kb3cpXG4gICAgICB8fCAoaXNUb3VjaFVpKHdpbikgJiYgIWlzV2luZG93cyh3aW4pKTtcbiAgfVxuICByZXR1cm4gX2NhY2hlLm1vYmlsZTtcbn1cbiJdfQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcGxhdGZvcm1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztTQUVTO0FBRVQsTUFBTSxNQUFNLEdBQUc7SUFDYixNQUFNLEVBQUUsSUFBSTtJQUNaLE9BQU8sRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFhLEVBQVcsRUFBRSxDQUNoRSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUVoQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFXLEVBQUUsSUFBWSxFQUFFLEVBQUU7SUFDekQsTUFBTSxTQUFTLEdBQVcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUssTUFBYyxDQUFDLEtBQUssQ0FBQztJQUNuRyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBWSxFQUFFLEVBQUUsQ0FDeEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUVqQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFZLEVBQUUsRUFBRSxDQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFFMUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUM3QixtQkFBbUI7SUFDbkIsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxVQUFVO0lBQ1YsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0RCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDbkMsYUFBYSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDdkMsYUFBYSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFRLEVBQVcsRUFBRTtJQUM3QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1FBQzNELE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUMzRTtJQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUN4QixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtJQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3pELE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztlQUM1QixTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxzRkFBc0Y7ZUFDbkYsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUMxQztJQUNELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiAtLS1cbiAqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2lvbmljLXRlYW0vaW9uaWMtZnJhbWV3b3JrL2Jsb2IvYjBkNTNjYTczNjE5NTg1NjcxZDhjZjRkYzI0ZTQ3ZjgyNjQ5NWEwYS9jb3JlL3NyYy91dGlscy9wbGF0Zm9ybS50c1xuICogLS0tICovXG5cbmNvbnN0IF9jYWNoZSA9IHtcbiAgbW9iaWxlOiBudWxsLFxuICBjb3Jkb3ZhOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgbWF0Y2hNZWRpYSA9ICh3aW46IFdpbmRvdywgcXVlcnk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgd2luLm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XG5cbmV4cG9ydCBjb25zdCB0ZXN0VXNlckFnZW50ID0gKHdpbjogV2luZG93LCBleHByOiBSZWdFeHApID0+IHtcbiAgY29uc3QgdXNlckFnZW50OiBzdHJpbmcgPSB3aW4ubmF2aWdhdG9yLnVzZXJBZ2VudCB8fCB3aW4ubmF2aWdhdG9yLnZlbmRvciB8fCAod2luZG93IGFzIGFueSkub3BlcmE7XG4gIHJldHVybiBleHByLnRlc3QodXNlckFnZW50KTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzV2luZG93cyA9ICh3aW4/OiBXaW5kb3cpID0+XG4gIHRlc3RVc2VyQWdlbnQod2luLCAvd2luZG93cy9pKTtcblxuZXhwb3J0IGNvbnN0IGlzVG91Y2hVaSA9ICh3aW4/OiBXaW5kb3cpID0+XG4gIG1hdGNoTWVkaWEod2luLCAnKGFueS1wb2ludGVyOmNvYXJzZSknKTtcblxuY29uc3QgaXNJcGFkID0gKHdpbjogV2luZG93KSA9PiB7XG4gIC8vIGlPUyAxMiBhbmQgYmVsb3dcbiAgaWYgKHRlc3RVc2VyQWdlbnQod2luLCAvaVBhZC9pKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gaU9TIDEzK1xuICBpZiAodGVzdFVzZXJBZ2VudCh3aW4sIC9NYWNpbnRvc2gvaSkgJiYgaXNUb3VjaFVpKHdpbikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0lPUyA9ICh3aW46IFdpbmRvdykgPT5cbiAgdGVzdFVzZXJBZ2VudCh3aW4sIC9pUGhvbmV8aVBvZC9pKSB8fCBpc0lwYWQod2luKTtcblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZCA9ICh3aW46IFdpbmRvdykgPT5cbiAgdGVzdFVzZXJBZ2VudCh3aW4sIC9hbmRyb2lkfHNpbmsvaSk7XG5cbmV4cG9ydCBjb25zdCBpc0NvcmRvdmEgPSAod2luOiBhbnkpOiBib29sZWFuID0+IHtcbiAgaWYgKF9jYWNoZS5jb3Jkb3ZhID09PSBudWxsIHx8IF9jYWNoZS5jb3Jkb3ZhID09PSB1bmRlZmluZWQpIHtcbiAgICBfY2FjaGUuY29yZG92YSA9ICEhKHdpblsnY29yZG92YSddIHx8IHdpblsncGhvbmVnYXAnXSB8fCB3aW5bJ1Bob25lR2FwJ10pO1xuICB9XG4gIHJldHVybiBfY2FjaGUuY29yZG92YTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzTW9iaWxlID0gKHdpbjogV2luZG93KSA9PiB7XG4gIGlmIChfY2FjaGUubW9iaWxlID09PSBudWxsIHx8IF9jYWNoZS5tb2JpbGUgPT09IHVuZGVmaW5lZCkge1xuICAgIF9jYWNoZS5tb2JpbGUgPSBpc0NvcmRvdmEod2luZG93KVxuICAgICAgfHwgaXNBbmRyb2lkKHdpbikgfHwgaXNJT1Mod2luZG93KVxuICAgICAgLy8gV29ya2Fyb3VuZCwgZm9yIE1TIFdpbmRvd3MgdG91Y2ggc2NyZWVuIChkZXRlY3RlZCBhcyBtb2JpbGUsIGJ1dCBmb3JjZWQgYXMgZGVza3RvcClcbiAgICAgIHx8IChpc1RvdWNoVWkod2luKSAmJiAhaXNXaW5kb3dzKHdpbikpO1xuICB9XG4gIHJldHVybiBfY2FjaGUubW9iaWxlO1xufVxuIl19
@@ -79,7 +79,7 @@ export class SharedValidators {
79
79
  return null;
80
80
  }
81
81
  if (isNotNil(value) && value !== '' && !regexp.test(value)) {
82
- return isNotNil(opts === null || opts === void 0 ? void 0 : opts.maxDecimals) ? { maxDecimals: { max: opts.maxDecimals } } : { decimal: true };
82
+ return isNotNil(opts === null || opts === void 0 ? void 0 : opts.maxDecimals) ? { maxDecimals: { maxDecimals: opts.maxDecimals } } : { decimal: true };
83
83
  }
84
84
  return null;
85
85
  };
@@ -526,4 +526,4 @@ export class SharedAsyncValidators {
526
526
  }
527
527
  }
528
528
  SharedAsyncValidators.DEBOUNCE_TIME_VALIDATOR_ID = 0;
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3ZhbGlkYXRvci92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQXFGLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkksT0FBTyxLQUFLLGNBQWMsTUFBTSxRQUFRLENBQUM7QUFFekMsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM5SCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDM0MsT0FBTyxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQztBQUU5QixXQUFXO0FBQ1gsTUFBTSxPQUFPLGdCQUFnQjtJQVluQixNQUFNLENBQUMsZUFBZSxDQUFDLFdBQW1CO1FBQ2hELElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBRTVELElBQUksV0FBVyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sTUFBTSxHQUFHLElBQUks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VyxrQ0FBTSxJQUFJLEtBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLElBQUcsQ0FBQztRQUN0SCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUxQyxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhDLDZDQUE2QztRQUM3QyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNwQiwwR0FBMEc7WUFDMUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFNUIsZ0VBQWdFO1lBQ2hFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQixRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQzs7QUFoSGMsZ0RBQTBCLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIG1vbWVudEltcG9ydGVkIGZyb20gJ21vbWVudCc7XG5pbXBvcnQge01vbWVudCwgdW5pdE9mVGltZX0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7REFURV9JU09fUEFUVEVSTiwgUFVCS0VZX1JFR0VYUH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCBpc05vdE5pbE9yTmFOLCB0b0Jvb2xlYW4sIHRvTnVtYmVyfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZ30gZnJvbSAnLi4vZGF0ZXMnO1xuaW1wb3J0IHtmcm9tLCBpc09ic2VydmFibGUsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpcnN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudEltcG9ydGVkO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZFZhbGlkYXRvcnMge1xuXG4gIHByaXZhdGUgc3RhdGljIF9SRUdFWFBfQ0FDSEUgPSB7XG4gICAgRE9VQkxFX0JZX01BWF9ERUNJTUFMUzoge1xuICAgICAgTk9fTElNSVQ6IC9eWy1dP1swLTldKyhbLixdWzAtOV0qKT8kLywgLy8gTm8gbWF4IGRlY2ltYWxzXG4gICAgICAxOiAvXlstXT9bMC05XSsoWy4sXVswLTldKT8kLywgICAgICAgICAvLyAxIGRlY2ltYWwgbWF4XG4gICAgICAyOiAvXlstXT9bMC05XSsoWy4sXVswLTldezEsMn0pPyQvLCAgICAvLyAyIGRlY2ltYWxzIG1heFxuICAgICAgMzogL15bLV0/WzAtOV0rKFsuLF1bMC05XXsxLDJ9KT8kLywgICAgIC8vIDMgZGVjaW1hbHMgbWF4XG5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXREb3VibGVSZWdleHAobWF4RGVjaW1hbHM6IG51bWJlcik6IFJlZ0V4cCB7XG4gICAgaWYgKGlzTmlsKG1heERlY2ltYWxzKSlcbiAgICAgIHJldHVybiB0aGlzLl9SRUdFWFBfQ0FDSEUuRE9VQkxFX0JZX01BWF9ERUNJTUFMUy5OT19MSU1JVDtcblxuICAgIGlmIChtYXhEZWNpbWFscyA8IDApIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtYXhEZWNpbWFscyB2YWx1ZTogJHttYXhEZWNpbWFsc31gKTtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLl9SRUdFWFBfQ0FDSEUuRE9VQkxFX0JZX01BWF9ERUNJTUFMU1ttYXhEZWNpbWFsc107XG4gICAgaWYgKHJlZ2V4cCkgcmV0dXJuIHJlZ2V4cDtcblxuICAgIC8vIE5ldyByZWdleHA6IGFkZCBpdCB0byBjYWNoZVxuICAgIHRoaXMuX1JFR0VYUF9DQUNIRS5ET1VCTEVfQllfTUFYX0RFQ0lNQUxTW21heERlY2ltYWxzXSA9IG5ldyBSZWdFeHAoYF5bLV0/WzAtOV0rKFsuLF1bMC05XXsxLCR7bWF4RGVjaW1hbHN9fSk/JGApO1xuICAgIHJldHVybiB0aGlzLl9SRUdFWFBfQ0FDSEUuRE9VQkxFX0JZX01BWF9ERUNJTUFMU1ttYXhEZWNpbWFsc107XG4gIH1cblxuXG4gIHN0YXRpYyByZWFkb25seSBJMThOX0VSUk9SX0tFWVMgPSB7XG4gICAgcmVxdWlyZWQ6ICdFUlJPUi5GSUVMRF9SRVFVSVJFRCcsXG4gICAgbWluOiAnRVJST1IuRklFTERfTUlOJyxcbiAgICBtYXg6ICdFUlJPUi5GSUVMRF9NQVgnLFxuICAgIG1pbmxlbmd0aDonRVJST1IuRklFTERfTUlOX0xFTkdUSCcsXG4gICAgbWF4bGVuZ3RoOidFUlJPUi5GSUVMRF9NQVhfTEVOR1RIJyxcbiAgICBwdWJrZXk6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfUFVCS0VZJyxcbiAgICB2YWxpZERhdGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURScsXG4gICAgZGF0ZUlzQWZ0ZXI6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9BRlRFUicsXG4gICAgZGF0ZUlzQmVmb3JlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQkVGT1JFJyxcbiAgICBkYXRlUmFuZ2U6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9SQU5HRScsXG4gICAgZGF0ZU1pbkR1cmF0aW9uOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUlOX0RVUkFUSU9OJyxcbiAgICBkYXRlTWF4RHVyYXRpb246ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9NQVhfRFVSQVRJT04nLFxuICAgIG1heERlY2ltYWxzOiAnRVJST1IuRklFTERfTUFYSU1VTV9ERUNJTUFMUycsXG4gICAgZG91YmxlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RPVUJMRScsXG4gICAgaW50ZWdlcjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9JTlRFR0VSJyxcbiAgICBlbWFpbDogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9FTUFJTCcsXG4gICAgbGF0aXR1ZGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfTEFUSVRVREUnLFxuICAgIGxvbmdpdHVkZTogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9MT05HSVRVREUnLFxuICAgIHBhdHRlcm46ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfUEFUVEVSTicsXG4gICAgdW5pcXVlOiAnRVJST1IuRklFTERfTk9UX1VOSVFVRScsXG4gICAgZW50aXR5OiAnRVJST1IuRklFTERfSU5WQUxJRCdcbiAgfVxuXG4gIHN0YXRpYyBsYXRpdHVkZShjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiAodmFsdWUgPCAtOTAgfHwgdmFsdWUgPiA5MCkpIHtcbiAgICAgIHJldHVybiB7bGF0aXR1ZGU6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBsb25naXR1ZGUoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgKHZhbHVlIDwgLTE4MCB8fCB2YWx1ZSA+IDE4MCkpIHtcbiAgICAgIHJldHVybiB7bG9uZ2l0dWRlOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgb2JqZWN0KGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHtvYmplY3Q6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBlbnRpdHkoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZS5pZCA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmlkID09PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHtlbnRpdHk6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBlbXB0eShjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2VtcHR5OiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgcHVia2V5KGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgIVBVQktFWV9SRUdFWFAudGVzdCh2YWx1ZSkpKSB7XG4gICAgICByZXR1cm4ge3B1YmtleTogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGludGVnZXIoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSlcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKTtcbiAgICBpZiAoaXNOYU4odmFsdWUpIHx8ICh2YWx1ZSB8IDApICE9PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHtpbnRlZ2VyOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGRlY2ltYWxcbiAgICovXG4gIHN0YXRpYyBkb3VibGUgPSBTaGFyZWRWYWxpZGF0b3JzLmRlY2ltYWw7XG5cbiAgc3RhdGljIGRlY2ltYWwob3B0cz86IHsgbWF4RGVjaW1hbHM/OiBudW1iZXIgfSk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLmdldERvdWJsZVJlZ2V4cChvcHRzPy5tYXhEZWNpbWFscyk7XG4gICAgcmV0dXJuIChjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiV0FSTjogR2V0dGluZyBhIE5hTiB2YWx1ZSAhXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgdmFsdWUgIT09ICcnICYmICFyZWdleHAudGVzdCh2YWx1ZSBhcyBzdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiBpc05vdE5pbChvcHRzPy5tYXhEZWNpbWFscykgPyB7bWF4RGVjaW1hbHM6IHttYXg6IG9wdHMubWF4RGVjaW1hbHN9IH0gOiB7ZGVjaW1hbDogdHJ1ZX07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHZhbGlkRGF0ZShjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgY29uc3QgZGF0ZSA9ICF2YWx1ZSB8fCBtb21lbnQuaXNNb21lbnQodmFsdWUpID8gdmFsdWUgOiBtb21lbnQodmFsdWUsIERBVEVfSVNPX1BBVFRFUk4pO1xuICAgIGlmIChkYXRlICYmICghZGF0ZS5pc1ZhbGlkKCkgfHwgZGF0ZS55ZWFyKCkgPCAxOTcwKSkge1xuICAgICAgcmV0dXJuIHt2YWxpZERhdGU6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlSXNBZnRlcihwcmV2aW91c1ZhbHVlOiBNb21lbnQsIGVycm9yUGFyYW06IHN0cmluZywgZ3JhbnVsYXJpdHk/OiB1bml0T2ZUaW1lLlN0YXJ0T2YpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiBpc05vdE5pbChwcmV2aW91c1ZhbHVlKSAmJiB2YWx1ZS5pc1NhbWVPckJlZm9yZShwcmV2aW91c1ZhbHVlLCBncmFudWxhcml0eSkpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvclxuICAgICAgICByZXR1cm4ge2RhdGVJc0FmdGVyOiB7bWluRGF0ZTogZXJyb3JQYXJhbX19O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlSXNCZWZvcmUobWF4VmFsdWU6IE1vbWVudCwgZXJyb3JQYXJhbTogc3RyaW5nLCBncmFudWxhcml0eT86IHVuaXRPZlRpbWUuU3RhcnRPZik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIGlzTm90TmlsKG1heFZhbHVlKSAmJiB2YWx1ZS5pc1NhbWVPckFmdGVyKG1heFZhbHVlLCBncmFudWxhcml0eSkpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvclxuICAgICAgICByZXR1cm4ge2RhdGVJc0JlZm9yZToge21heERhdGU6IGVycm9yUGFyYW19fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZVJhbmdlRW5kKHN0YXJ0RGF0ZUZpZWxkTmFtZTogc3RyaW5nLCBtc2c/OiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbXNnID8gJ21zZyc6ICdkYXRlUmFuZ2UnO1xuICAgIGNvbnN0IGVycm9yID0gbXNnID8ge21zZ30gOiB7ZGF0ZVJhbmdlOiB0cnVlfTtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udHJvbCA9IGNvbnRyb2wucGFyZW50Py5nZXQoc3RhcnREYXRlRmllbGROYW1lKTtcbiAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IGZpbmQgYnJvdGhlciBjb250cm9sICcke3N0YXJ0RGF0ZUZpZWxkTmFtZX0nIGluIHRoZSBwYXJlbnQgZm9ybWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHN0YXJ0Q29udHJvbC52YWx1ZSk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICAvLyBFcnJvciBpZiB2YWx1ZSA8PSBiZWZvcmVEYXRlXG4gICAgICBpZiAoaXNOb3ROaWwoZW5kRGF0ZSkgJiYgaXNOb3ROaWwoc3RhcnREYXRlKSAmJiBlbmREYXRlLmlzU2FtZU9yQmVmb3JlKHN0YXJ0RGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgLy8gT0s6IGNsZWFyIGV4aXN0aW5nIGVycm9yc1xuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsIGVycm9yQ29kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVSYW5nZVN0YXJ0KGVuZERhdGVGaWVsZE5hbWU6IHN0cmluZywgbXNnPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IG1zZyA/ICdtc2cnOiAnZGF0ZVJhbmdlJztcbiAgICBjb25zdCBlcnJvciA9IG1zZyA/IHttc2d9IDoge2RhdGVSYW5nZTogdHJ1ZX07XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBlbmREYXRlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50Py5nZXQoZW5kRGF0ZUZpZWxkTmFtZSk7XG4gICAgICBpZiAoIWVuZERhdGVDb250cm9sKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IGZpbmQgY29udHJvbCAnJHtlbmREYXRlRmllbGROYW1lfScgaW4gdGhlIHBhcmVudCBmb3JtYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGVuZERhdGVDb250cm9sLnZhbHVlKTtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgLy8gRXJyb3IgaWYgdmFsdWUgPD0gYmVmb3JlRGF0ZVxuICAgICAgaWYgKGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgaXNOb3ROaWwoZW5kRGF0ZSkgJiYgc3RhcnREYXRlLmlzU2FtZU9yQWZ0ZXIoZW5kRGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgLy8gT0s6IGNsZWFyIGV4aXN0aW5nIGVycm9yc1xuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsIGVycm9yQ29kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGNvcHlQYXJlbnRFcnJvcnMoZXJyb3JOYW1lcz86IHN0cmluZ1tdKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgLy8gU2tpcCBpZiBjb250cm9sIGFscmVhZHkgaGFzIHNvbWUgZXJyb3JzXG4gICAgICBpZiAoY29udHJvbC5lcnJvcnMpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLnBhcmVudCAmJiBjb250cm9sLnBhcmVudC5lcnJvcnM7XG5cbiAgICAgIC8vIE5vIGVycm9ycywgb3IgY29weSBhbGwgZXJyb3JzXG4gICAgICBpZiAoIWVycm9ycyB8fCBpc0VtcHR5QXJyYXkoZXJyb3JOYW1lcykpIHJldHVybiBlcnJvcnM7XG5cbiAgICAgIC8vIENvcHkgb25seSBleHBlY3RlZCBlcnJvcnNcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLnJlZHVjZSgocmVzLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGVycm9yTmFtZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIHJlc1trZXldID0gZXJyb3JzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sIHt9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGNsZWFyRXJyb3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBlcnJvckNvZGU6IHN0cmluZykge1xuICAgIGlmIChjb250cm9sLmhhc0Vycm9yKGVycm9yQ29kZSkpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IGNvbnRyb2wuZXJyb3JzO1xuICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnNbZXJyb3JDb2RlXSkge1xuICAgICAgICAvLyBPbmx5IG9uZSBlcnJvcjogcmVzZXQgZXJyb3JzXG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcnMpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyIGVycm9ycyBleGlzdHM6IGp1c3QgcmVtb3ZlIHRoaXMgZXJyb3JcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGVycm9yc1tlcnJvckNvZGVdO1xuICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG59XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgU2hhcmVkRm9ybUdyb3VwVmFsaWRhdG9ycyB7XG5cbiAgc3RhdGljIGRhdGVSYW5nZShzdGFydERhdGVGaWVsZDogc3RyaW5nLCBlbmREYXRlRmllbGQ6IHN0cmluZywgbXNnPzogc3RyaW5nICk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBpc05vdE5pbE9yQmxhbmsobXNnKSA/ICdtc2cnIDogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgcmFuZ2VFcnJvciA9IG1zZyA/IHttc2d9IDoge2RhdGVSYW5nZTogdHJ1ZX07XG4gICAgcmV0dXJuIChncm91cDogRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZ3JvdXAuZ2V0KHN0YXJ0RGF0ZUZpZWxkKS52YWx1ZSk7XG4gICAgICBjb25zdCBlbmRGaWVsZCA9IGdyb3VwLmdldChlbmREYXRlRmllbGQpO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGVuZEZpZWxkLnZhbHVlKTtcbiAgICAgIGlmIChpc05vdE5pbChzdGFydERhdGUpICYmIGlzTm90TmlsKGVuZERhdGUpICYmIHN0YXJ0RGF0ZS5pc0FmdGVyKGVuZERhdGUpKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbmQgZmllbGRcbiAgICAgICAgZW5kRmllbGQubWFya0FzUGVuZGluZygpO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoe1xuICAgICAgICAgIC4uLmVuZEZpZWxkLmVycm9ycyxcbiAgICAgICAgICAuLi5yYW5nZUVycm9yXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yIChzaG91bGQgYmUgYXBwbHkgdG8gdGhlIHBhcmVudCBmb3JtKVxuICAgICAgICByZXR1cm4gcmFuZ2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiByZW1vdmUgdGhlIGV4aXN0aW5nIG9uIHRoZSBlbmQgZmllbGRcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihlbmRGaWVsZCwgZXJyb3JDb2RlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZU1heER1cmF0aW9uKHN0YXJ0RGF0ZUZpZWxkOiBzdHJpbmcsIGVuZERhdGVGaWVsZDogc3RyaW5nLCBtYXhEdXJhdGlvbjogbnVtYmVyLCBkdXJhdGlvblVuaXQ/OiBtb21lbnQudW5pdE9mVGltZS5EaWZmKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IG1heER1cmF0aW9uRXJyb3IgPSB7ZGF0ZU1heER1cmF0aW9uOiB0cnVlfTtcbiAgICByZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgaXNOb3ROaWwoZW5kRGF0ZSkgJiYgTWF0aC5hYnMoc3RhcnREYXRlLmRpZmYoZW5kRGF0ZSwgZHVyYXRpb25Vbml0KSkgPiBtYXhEdXJhdGlvbikge1xuICAgICAgICAvLyBVcGRhdGUgZW5kIGZpZWxkXG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1BlbmRpbmcoKTtcbiAgICAgICAgZW5kRmllbGQuc2V0RXJyb3JzKHtcbiAgICAgICAgICAuLi5lbmRGaWVsZC5lcnJvcnMsXG4gICAgICAgICAgLi4ubWF4RHVyYXRpb25FcnJvclxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGx5IHRvIHRoZSBwYXJlbnQgZm9ybSlcbiAgICAgICAgcmV0dXJuIG1heER1cmF0aW9uRXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsICdkYXRlTWF4RHVyYXRpb24nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZU1pbkR1cmF0aW9uKHN0YXJ0RGF0ZUZpZWxkOiBzdHJpbmcsIGVuZERhdGVGaWVsZDogc3RyaW5nLCBtaW5EdXJhdGlvbjogbnVtYmVyLCBkdXJhdGlvblVuaXQ/OiBtb21lbnQudW5pdE9mVGltZS5EaWZmKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmRGaWVsZC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwoc3RhcnREYXRlKSAmJiBpc05vdE5pbChlbmREYXRlKSAmJiBNYXRoLmFicyhzdGFydERhdGUuZGlmZihlbmREYXRlLCBkdXJhdGlvblVuaXQpKSA8IG1pbkR1cmF0aW9uKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbmQgZmllbGRcbiAgICAgICAgY29uc3QgZW5kRmllbGRFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBlbmRGaWVsZC5lcnJvcnMgfHwge307XG4gICAgICAgIGVuZEZpZWxkRXJyb3JzWydkYXRlTWluRHVyYXRpb24nXSA9IHRydWU7XG4gICAgICAgIGVuZEZpZWxkLnNldEVycm9ycyhlbmRGaWVsZEVycm9ycyk7XG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3IgKHNob3VsZCBiZSBhcHBseSB0byB0aGUgcGFyZW50IGZvcm0pXG4gICAgICAgIHJldHVybiB7ZGF0ZU1pbkR1cmF0aW9uOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiByZW1vdmUgdGhlIGV4aXN0aW5nIG9uIHRoZSBlbmQgZmllbGRcbiAgICAgIGVsc2Uge1xuICAgICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsICdkYXRlTWluRHVyYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRJZihmaWVsZE5hbWU6IHN0cmluZywgYW5vdGhlckZpZWxkVG9DaGVjazogc3RyaW5nIHwgQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBncm91cC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IGFub3RoZXJDb250cm9sID0gKGFub3RoZXJGaWVsZFRvQ2hlY2sgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnRyb2wpID8gYW5vdGhlckZpZWxkVG9DaGVjayA6IGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKTtcbiAgICAgIGlmICghYW5vdGhlckNvbnRyb2wpIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgZmllbGQgdG8gY2hlY2shJyk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpICYmIGlzTm90TmlsT3JCbGFuayhhbm90aGVyQ29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7cmVxdWlyZWQ6IHRydWV9O1xuICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcik7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZElmVHJ1ZShmaWVsZE5hbWU6IHN0cmluZywgYW5vdGhlckZpZWxkVG9DaGVjazogc3RyaW5nIHwgQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBncm91cC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IGFub3RoZXJDb250cm9sID0gKGFub3RoZXJGaWVsZFRvQ2hlY2sgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnRyb2wpID8gYW5vdGhlckZpZWxkVG9DaGVjayA6IGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKTtcbiAgICAgIGlmICghYW5vdGhlckNvbnRyb2wpIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgZmllbGQgdG8gY2hlY2shJyk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpICYmIHRvQm9vbGVhbihhbm90aGVyQ29udHJvbC52YWx1ZSwgZmFsc2UpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0ge3JlcXVpcmVkOiB0cnVlfTtcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3IpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRJZkVtcHR5KGZpZWxkTmFtZTogc3RyaW5nLCBhbm90aGVyRmllbGRUb0NoZWNrOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChncm91cDogRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKGlzTmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSAmJiBpc05pbE9yQmxhbmsoZ3JvdXAuZ2V0KGFub3RoZXJGaWVsZFRvQ2hlY2spLnZhbHVlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHtyZXF1aXJlZDogdHJ1ZX07XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9yKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHByb3BhZ2F0ZUlmRGlydHkoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkTmFtZVRvUHJvcGFnYXRlOiBzdHJpbmcsIHZhbHVlVG9Qcm9wYWdhdGU6IGFueSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBncm91cC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IGNvbnRyb2xUb1Byb3BhZ2F0ZSA9IGdyb3VwLmdldChmaWVsZE5hbWVUb1Byb3BhZ2F0ZSk7XG4gICAgICBpZiAoY29udHJvbC5kaXJ0eSAmJiBjb250cm9sVG9Qcm9wYWdhdGUudmFsdWUgIT09IHZhbHVlVG9Qcm9wYWdhdGUpIHtcbiAgICAgICAgY29udHJvbFRvUHJvcGFnYXRlLnNldFZhbHVlKHZhbHVlVG9Qcm9wYWdhdGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW1lIGFzIGNvbXBvc2UsIGJ1dCBrZWVwIG9ubHkgdGhlIGZpcnN0IGVycm9ycyAoaW5zdGVhZCBvZiB0aGUgdW5pb24pXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JzXG4gICAqL1xuICBmaXJzdCh2YWxpZGF0b3JzOiAoVmFsaWRhdG9yRm4gfCBudWxsIHwgdW5kZWZpbmVkKVtdKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiAoY29udHJvbCkgPT4gdmFsaWRhdG9yc1xuICAgICAgLmZpbHRlcihpc05vdE5pbClcbiAgICAgIC5tYXAodmFsaWRhdG9yID0+IHZhbGlkYXRvcihjb250cm9sKSlcbiAgICAgIC5maW5kKGlzTm90TmlsKSB8fCBudWxsO1xuICB9XG59XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgU2hhcmVkRm9ybUFycmF5VmFsaWRhdG9ycyB7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHVuaXF1ZW5lc3Mgb2YgYW4gZW50aXR5IGluIGEgRm9ybUFycmF5XG4gICAqXG4gICAqIEBwYXJhbSBjb250cm9sTmFtZSB0aGUgbmFtZSBvZiB0aGUgY29udHJvbCBpbiBGb3JtQXJyYXlcbiAgICovXG4gIHN0YXRpYyB1bmlxdWVFbnRpdHkoY29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGFycmF5OiBGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sczogQWJzdHJhY3RDb250cm9sW10gPSBbXTtcbiAgICAgIGlmIChhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgLy8gZ2F0aGVyIGNvbnRyb2xzIGluIGFycmF5IHdpdGggdmFsaWQgZW50aXR5XG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBhcnJheS5jb250cm9scykge1xuICAgICAgICAgIGNvbnN0IGZyb21Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgIGlmIChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0udmFsdWU7XG4gICAgICAgICAgICBpZiAoISF2YWx1ZSAmJiAhIXZhbHVlLmlkKVxuICAgICAgICAgICAgICBjb250cm9scy5wdXNoKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgb2NjdXJyZW5jZXMgb2YgZW50aXR5IGJ5IGlkXG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VzID0gY29udHJvbHMucmVkdWNlKChhY2MsIGNvbnRyb2wpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGNvbnRyb2wudmFsdWUuaWQ7XG4gICAgICAgICAgYWNjW2lkXSA/IGFjY1tpZF0rKyA6IGFjY1tpZF0gPSAxO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgLy8gZ2V0IGNvbnRyb2xzIHdpdGggdmFsdWUgb2NjdXJyZW5jZXMgPiAxXG4gICAgICAgIGNvbnN0IGVycm9yID0ge3VuaXF1ZUVudGl0eTogdHJ1ZX07XG4gICAgICAgIGxldCByZXR1cm5FcnJvciA9IGZhbHNlO1xuICAgICAgICBjb250cm9scy5maWx0ZXIoY29udHJvbCA9PiBvY2N1cnJlbmNlc1tjb250cm9sLnZhbHVlLmlkXSA+IDEpXG4gICAgICAgICAgLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gY29udHJvbC5lcnJvcnMgfHwge307XG4gICAgICAgICAgICBlcnJvcnMgPSB7Li4uZXJyb3JzLCAuLi5lcnJvcn07XG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAgICAgcmV0dXJuRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICBpZiAocmV0dXJuRXJyb3IpXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAndW5pcXVlRW50aXR5JykpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZEFycmF5TWluTGVuZ3RoKG1pbkxlbmd0aD86IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICBtaW5MZW5ndGggPSBtaW5MZW5ndGggfHwgMTtcbiAgICByZXR1cm4gKGFycmF5OiBGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoIWFycmF5IHx8IGFycmF5Lmxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge3JlcXVpcmVkOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIHN1bSBvZiBjb250cm9sIHZhbHVlcyBpbiBhbiBGb3JtQXJyYXkgbm90IG92ZXJmbG93IHRoZSBtYXggdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIGluIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gbWF4IHRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICBzdGF0aWMgdmFsaWRTdW1NYXhWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCBtYXg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGFycmF5OiBGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sczogQWJzdHJhY3RDb250cm9sW10gPSBbXTtcbiAgICAgIGlmIChhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIGFycmF5LmNvbnRyb2xzKSB7XG4gICAgICAgICAgY29uc3QgZnJvbUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgICAgICAgaWYgKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0gJiYgaXNOb3ROaWxPck5hTihmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlKSkge1xuICAgICAgICAgICAgY29udHJvbHMucHVzaChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2xzLnJlZHVjZSgoc3VtLCBjb250cm9sKSA9PiBzdW0gKyBjb250cm9sLnZhbHVlLCAwKSA+IG1heCkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0ge3N1bU1heFZhbHVlOiB0cnVlfTtcbiAgICAgICAgICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IGNvbnRyb2wuZXJyb3JzIHx8IHt9O1xuICAgICAgICAgICAgZXJyb3JzID0gey4uLmVycm9ycywgLi4uZXJyb3J9O1xuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3N1bU1heFZhbHVlJykpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgT2JzZXJ2YWJsZVZhbGlkYXRvckZuID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgUHJvbWlzZVZhbGlkYXRvckZuID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD5cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBTaGFyZWRBc3luY1ZhbGlkYXRvcnMge1xuXG4gIHByaXZhdGUgc3RhdGljIERFQk9VTkNFX1RJTUVfVkFMSURBVE9SX0lEID0gMDtcblxuICAvKipcbiAgICogQWRkIGEgZGVib3VuY2UgdGltZSB0byBhIHZhbGlkYXRvci5cbiAgICogQHBhcmFtIGZvcm1cbiAgICogQHBhcmFtIHZhbGlkYXRvckZuXG4gICAqIEBwYXJhbSBvcHRzIFVzZSBvcHRzLnN0b3BTdWJqZWN0IHRvIHN0b3AgdGhlIHZhbGlkYXRvciwgYmVmb3JlIGVuZFxuICAgKi9cbiAgc3RhdGljIGRlYm91bmNlVGltZSh2YWxpZGF0b3JGbjogVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuLFxuICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya0ZvckNoZWNrPzogKCkgPT4gdm9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICB9KTogT2JzZXJ2YWJsZVZhbGlkYXRvckZuIHtcblxuICAgIC8vIERFQlVHIG9ubHlcbiAgICBjb25zdCBkZWJ1ZyA9IG9wdHM/LmRlYnVnIHx8IGZhbHNlIDtcbiAgICBjb25zdCBsb2dQcmVmaXggPSBkZWJ1ZyAmJiBgW2RlYm91bmNlVGltZS12YWxpZGF0b3JdICMke1NoYXJlZEFzeW5jVmFsaWRhdG9ycy5ERUJPVU5DRV9USU1FX1ZBTElEQVRPUl9JRCsrfSAtIGA7XG4gICAgY29uc3QgZGVib3VuY2VUaW1lID0gdG9OdW1iZXIob3B0cz8uZGVib3VuY2VUaW1lLCAyNTApO1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAoZGVidWcpIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgYE5ldyB2YWxpZGF0b3Igd2l0aCBhIGRlYm91bmNlVGltZSBhdCAke2RlYm91bmNlVGltZX1tc2ApO1xuXG4gICAgY29uc3QgJGRpc3Bvc2VTdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBkaXNwb3NlRXZlbnQkID0gb3B0cz8uZGlzcG9zZVxuICAgICAgPyBtZXJnZSgkZGlzcG9zZVN1YmplY3QsIG9wdHM/LmRpc3Bvc2UpXG4gICAgICA6ICRkaXNwb3NlU3ViamVjdDtcblxuICAgIC8vIERFQlVHXG4gICAgaWYgKGRlYnVnICYmIG9wdHM/LmRpc3Bvc2UpIHtcbiAgICAgIG9wdHM/LmRpc3Bvc2UucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArICdTdG9wcGluZycpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChjb250cm9sKSA9PiB7XG4gICAgICBpZiAoZGVidWcpIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgJ0Zvcm0gYXNrIHZhbGlkYXRpb24uLi4nKTtcblxuICAgICAgLy8gU3RvcCBwcmV2aW91cyBvYnNlcnZhYmxlc1xuICAgICAgJGRpc3Bvc2VTdWJqZWN0Lm5leHQoKTtcbiAgICAgIGxldCBub3c6IG51bWJlcjtcblxuICAgICAgLy8gQWRkIGEgZGVsYXkgYmVmb3JlIGV4ZWN1dGlvblxuICAgICAgcmV0dXJuIHRpbWVyKGRlYm91bmNlVGltZSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICB0YXAoXyA9PiB7XG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyAnRXhlY3V0aW5nLi4uJyk7XG4gICAgICAgICAgICAgIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3dpdGNoTWFwKChfKSA9PiB7XG4gICAgICAgICAgICAvLyBDYWxsIHRoZSB2YWxpZGF0b3JcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHZhbGlkYXRvckZuKGNvbnRyb2wpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHJldHVybiBhbiBPYnNlcnZhYmxlXG4gICAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHJldHVybiByZXM7XG4gICAgICAgICAgICBpZiAocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkgcmV0dXJuIGZyb20ocmVzKTtcbiAgICAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgdGFwKHJlcyA9PiBkZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArIGBGaW5pc2hlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXMgKCR7cmVzID8gJ3dpdGggZXJyb3JzJyA6ICdubyBlcnJvcid9KWAsIHJlcykpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW2RlYm91bmNlVGltZS12YWxpZGF0b3JdIEVycm9yIHdoaWxlIGV4ZWN1dGluZyB2YWxpZGF0b3IuIFN0b3BwaW5nIGpvYicsIGVycm9yKTtcbiAgICAgICAgICAgICRkaXNwb3NlU3ViamVjdC5uZXh0KCk7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvLyBSZWZyZXNoIFVJLCBhZnRlciBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uXG4gICAgICAgICAgdGFwKCgpID0+IG9wdHM/Lm1hcmtGb3JDaGVjayAmJiBvcHRzPy5tYXJrRm9yQ2hlY2soKSksXG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHN0b3AsIGJlY2F1c2Ugb2YgdGhlIHN3aXRjaE1hcFxuICAgICAgICAgIHRha2VVbnRpbChkaXNwb3NlRXZlbnQkKVxuICAgICAgICApXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gYXN5bmMgdmFsaWRhdG9yLCB0aGF0IGNhbiBiZSBkaXNwb3NlZCBieSB0aGUgcmV0dXJuZWQgc3Vic2NyaXB0aW9uXG4gICAqIEBwYXJhbSBmb3JtXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JGbiB0aGUgdmFsaWRhdG9yIG9yIGpvYiB0byBleGVjdXRlXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXJBc3luY1ZhbGlkYXRvcihmb3JtOiBBYnN0cmFjdENvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtGb3JDaGVjaz86ICgpID0+IHZvaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTogU3Vic2NyaXB0aW9uIHtcbiAgICBpZiAoZm9ybS5hc3luY1ZhbGlkYXRvcikgdGhyb3cgRXJyb3IoJ0Zvcm0gYWxyZWFkeSBoYXZlIGFuIGFzeW5jIHZhbGlkYXRvci4gQ2Fubm90IGNvbmZpZ3VyZSBqb2InKTtcblxuICAgIGNvbnN0IGRlYm91bmNlVGltZSA9IHRvTnVtYmVyKG9wdHM/LmRlYm91bmNlVGltZSwgMjUwKTtcbiAgICBjb25zdCAkZGlzcG9zZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCBhc3luY1ZhbGlkYXRvckZuID0gU2hhcmVkQXN5bmNWYWxpZGF0b3JzLmRlYm91bmNlVGltZSh2YWxpZGF0b3JGbiwgey4uLm9wdHMsIGRlYm91bmNlVGltZSwgZGlzcG9zZTogJGRpc3Bvc2UgfSk7XG4gICAgZm9ybS5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JGbik7XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvLyBXaGVuIHVuc3Vic2NyaWJpbmcsIHJlbW92ZSBhc3luYyB2YWxpZGF0b3JcbiAgICBzdWJzY3JpcHRpb24uYWRkKCgpID0+IHtcbiAgICAgIC8vIENsZWFyIGFkZGVkIHZhbGlkYXRvci4gTXVzdCBiZSBkb25lIE5PVyAod2l0aG91dCBkZWxheSkgYmVjYXVzZSBnZW5lcmFsbHkgYSBuZXcgSm9iIGlzIGdpdmVuIGp1c3QgYWZ0ZXJcbiAgICAgIGZvcm0uY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcblxuICAgICAgLy8gU3RvcCB0aGUgam9iLCB3aXRoIGEgZGVsYXkgdG8gbGV0IHRoZSBsYXN0IGV4ZWN1dGlvbiBmaW5pc2hlZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICRkaXNwb3NlLm5leHQoKTtcbiAgICAgICAgJGRpc3Bvc2UudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIGRlYm91bmNlVGltZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICB9XG59XG4iXX0=
529
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3ZhbGlkYXRvci92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQXFGLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkksT0FBTyxLQUFLLGNBQWMsTUFBTSxRQUFRLENBQUM7QUFFekMsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM5SCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDM0MsT0FBTyxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQztBQUU5QixXQUFXO0FBQ1gsTUFBTSxPQUFPLGdCQUFnQjtJQVluQixNQUFNLENBQUMsZUFBZSxDQUFDLFdBQW1CO1FBQ2hELElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBRTVELElBQUksV0FBVyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sTUFBTSxHQUFHLElBQUks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VyxrQ0FBTSxJQUFJLEtBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLElBQUcsQ0FBQztRQUN0SCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUxQyxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhDLDZDQUE2QztRQUM3QyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNwQiwwR0FBMEc7WUFDMUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFNUIsZ0VBQWdFO1lBQ2hFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQixRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQzs7QUFoSGMsZ0RBQTBCLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIG1vbWVudEltcG9ydGVkIGZyb20gJ21vbWVudCc7XG5pbXBvcnQge01vbWVudCwgdW5pdE9mVGltZX0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7REFURV9JU09fUEFUVEVSTiwgUFVCS0VZX1JFR0VYUH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCBpc05vdE5pbE9yTmFOLCB0b0Jvb2xlYW4sIHRvTnVtYmVyfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZ30gZnJvbSAnLi4vZGF0ZXMnO1xuaW1wb3J0IHtmcm9tLCBpc09ic2VydmFibGUsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpcnN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudEltcG9ydGVkO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZFZhbGlkYXRvcnMge1xuXG4gIHByaXZhdGUgc3RhdGljIF9SRUdFWFBfQ0FDSEUgPSB7XG4gICAgRE9VQkxFX0JZX01BWF9ERUNJTUFMUzoge1xuICAgICAgTk9fTElNSVQ6IC9eWy1dP1swLTldKyhbLixdWzAtOV0qKT8kLywgLy8gTm8gbWF4IGRlY2ltYWxzXG4gICAgICAxOiAvXlstXT9bMC05XSsoWy4sXVswLTldKT8kLywgICAgICAgICAvLyAxIGRlY2ltYWwgbWF4XG4gICAgICAyOiAvXlstXT9bMC05XSsoWy4sXVswLTldezEsMn0pPyQvLCAgICAvLyAyIGRlY2ltYWxzIG1heFxuICAgICAgMzogL15bLV0/WzAtOV0rKFsuLF1bMC05XXsxLDJ9KT8kLywgICAgIC8vIDMgZGVjaW1hbHMgbWF4XG5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXREb3VibGVSZWdleHAobWF4RGVjaW1hbHM6IG51bWJlcik6IFJlZ0V4cCB7XG4gICAgaWYgKGlzTmlsKG1heERlY2ltYWxzKSlcbiAgICAgIHJldHVybiB0aGlzLl9SRUdFWFBfQ0FDSEUuRE9VQkxFX0JZX01BWF9ERUNJTUFMUy5OT19MSU1JVDtcblxuICAgIGlmIChtYXhEZWNpbWFscyA8IDApIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtYXhEZWNpbWFscyB2YWx1ZTogJHttYXhEZWNpbWFsc31gKTtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLl9SRUdFWFBfQ0FDSEUuRE9VQkxFX0JZX01BWF9ERUNJTUFMU1ttYXhEZWNpbWFsc107XG4gICAgaWYgKHJlZ2V4cCkgcmV0dXJuIHJlZ2V4cDtcblxuICAgIC8vIE5ldyByZWdleHA6IGFkZCBpdCB0byBjYWNoZVxuICAgIHRoaXMuX1JFR0VYUF9DQUNIRS5ET1VCTEVfQllfTUFYX0RFQ0lNQUxTW21heERlY2ltYWxzXSA9IG5ldyBSZWdFeHAoYF5bLV0/WzAtOV0rKFsuLF1bMC05XXsxLCR7bWF4RGVjaW1hbHN9fSk/JGApO1xuICAgIHJldHVybiB0aGlzLl9SRUdFWFBfQ0FDSEUuRE9VQkxFX0JZX01BWF9ERUNJTUFMU1ttYXhEZWNpbWFsc107XG4gIH1cblxuXG4gIHN0YXRpYyByZWFkb25seSBJMThOX0VSUk9SX0tFWVMgPSB7XG4gICAgcmVxdWlyZWQ6ICdFUlJPUi5GSUVMRF9SRVFVSVJFRCcsXG4gICAgbWluOiAnRVJST1IuRklFTERfTUlOJyxcbiAgICBtYXg6ICdFUlJPUi5GSUVMRF9NQVgnLFxuICAgIG1pbmxlbmd0aDonRVJST1IuRklFTERfTUlOX0xFTkdUSCcsXG4gICAgbWF4bGVuZ3RoOidFUlJPUi5GSUVMRF9NQVhfTEVOR1RIJyxcbiAgICBwdWJrZXk6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfUFVCS0VZJyxcbiAgICB2YWxpZERhdGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURScsXG4gICAgZGF0ZUlzQWZ0ZXI6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9BRlRFUicsXG4gICAgZGF0ZUlzQmVmb3JlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQkVGT1JFJyxcbiAgICBkYXRlUmFuZ2U6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9SQU5HRScsXG4gICAgZGF0ZU1pbkR1cmF0aW9uOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUlOX0RVUkFUSU9OJyxcbiAgICBkYXRlTWF4RHVyYXRpb246ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9NQVhfRFVSQVRJT04nLFxuICAgIG1heERlY2ltYWxzOiAnRVJST1IuRklFTERfTUFYSU1VTV9ERUNJTUFMUycsXG4gICAgZG91YmxlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RPVUJMRScsXG4gICAgaW50ZWdlcjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9JTlRFR0VSJyxcbiAgICBlbWFpbDogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9FTUFJTCcsXG4gICAgbGF0aXR1ZGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfTEFUSVRVREUnLFxuICAgIGxvbmdpdHVkZTogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9MT05HSVRVREUnLFxuICAgIHBhdHRlcm46ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfUEFUVEVSTicsXG4gICAgdW5pcXVlOiAnRVJST1IuRklFTERfTk9UX1VOSVFVRScsXG4gICAgZW50aXR5OiAnRVJST1IuRklFTERfSU5WQUxJRCdcbiAgfVxuXG4gIHN0YXRpYyBsYXRpdHVkZShjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiAodmFsdWUgPCAtOTAgfHwgdmFsdWUgPiA5MCkpIHtcbiAgICAgIHJldHVybiB7bGF0aXR1ZGU6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBsb25naXR1ZGUoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgKHZhbHVlIDwgLTE4MCB8fCB2YWx1ZSA+IDE4MCkpIHtcbiAgICAgIHJldHVybiB7bG9uZ2l0dWRlOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgb2JqZWN0KGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHtvYmplY3Q6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBlbnRpdHkoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZS5pZCA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmlkID09PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHtlbnRpdHk6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBlbXB0eShjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2VtcHR5OiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgcHVia2V5KGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgIVBVQktFWV9SRUdFWFAudGVzdCh2YWx1ZSkpKSB7XG4gICAgICByZXR1cm4ge3B1YmtleTogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGludGVnZXIoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSlcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChjb250cm9sLnZhbHVlKTtcbiAgICBpZiAoaXNOYU4odmFsdWUpIHx8ICh2YWx1ZSB8IDApICE9PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHtpbnRlZ2VyOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGRlY2ltYWxcbiAgICovXG4gIHN0YXRpYyBkb3VibGUgPSBTaGFyZWRWYWxpZGF0b3JzLmRlY2ltYWw7XG5cbiAgc3RhdGljIGRlY2ltYWwob3B0cz86IHsgbWF4RGVjaW1hbHM/OiBudW1iZXIgfSk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLmdldERvdWJsZVJlZ2V4cChvcHRzPy5tYXhEZWNpbWFscyk7XG4gICAgcmV0dXJuIChjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiV0FSTjogR2V0dGluZyBhIE5hTiB2YWx1ZSAhXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgdmFsdWUgIT09ICcnICYmICFyZWdleHAudGVzdCh2YWx1ZSBhcyBzdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiBpc05vdE5pbChvcHRzPy5tYXhEZWNpbWFscykgPyB7bWF4RGVjaW1hbHM6IHttYXhEZWNpbWFsczogb3B0cy5tYXhEZWNpbWFsc30gfSA6IHtkZWNpbWFsOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdmFsaWREYXRlKGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBjb25zdCBkYXRlID0gIXZhbHVlIHx8IG1vbWVudC5pc01vbWVudCh2YWx1ZSkgPyB2YWx1ZSA6IG1vbWVudCh2YWx1ZSwgREFURV9JU09fUEFUVEVSTik7XG4gICAgaWYgKGRhdGUgJiYgKCFkYXRlLmlzVmFsaWQoKSB8fCBkYXRlLnllYXIoKSA8IDE5NzApKSB7XG4gICAgICByZXR1cm4ge3ZhbGlkRGF0ZTogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGRhdGVJc0FmdGVyKHByZXZpb3VzVmFsdWU6IE1vbWVudCwgZXJyb3JQYXJhbTogc3RyaW5nLCBncmFudWxhcml0eT86IHVuaXRPZlRpbWUuU3RhcnRPZik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIGlzTm90TmlsKHByZXZpb3VzVmFsdWUpICYmIHZhbHVlLmlzU2FtZU9yQmVmb3JlKHByZXZpb3VzVmFsdWUsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yXG4gICAgICAgIHJldHVybiB7ZGF0ZUlzQWZ0ZXI6IHttaW5EYXRlOiBlcnJvclBhcmFtfX07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVJc0JlZm9yZShtYXhWYWx1ZTogTW9tZW50LCBlcnJvclBhcmFtOiBzdHJpbmcsIGdyYW51bGFyaXR5PzogdW5pdE9mVGltZS5TdGFydE9mKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBmcm9tRGF0ZUlTT1N0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgaXNOb3ROaWwobWF4VmFsdWUpICYmIHZhbHVlLmlzU2FtZU9yQWZ0ZXIobWF4VmFsdWUsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yXG4gICAgICAgIHJldHVybiB7ZGF0ZUlzQmVmb3JlOiB7bWF4RGF0ZTogZXJyb3JQYXJhbX19O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlUmFuZ2VFbmQoc3RhcnREYXRlRmllbGROYW1lOiBzdHJpbmcsIG1zZz86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBtc2cgPyAnbXNnJzogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgZXJyb3IgPSBtc2cgPyB7bXNnfSA6IHtkYXRlUmFuZ2U6IHRydWV9O1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc3RhcnRDb250cm9sID0gY29udHJvbC5wYXJlbnQ/LmdldChzdGFydERhdGVGaWVsZE5hbWUpO1xuICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBDYW5ub3QgZmluZCBicm90aGVyIGNvbnRyb2wgJyR7c3RhcnREYXRlRmllbGROYW1lfScgaW4gdGhlIHBhcmVudCBmb3JtYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoc3RhcnRDb250cm9sLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIC8vIEVycm9yIGlmIHZhbHVlIDw9IGJlZm9yZURhdGVcbiAgICAgIGlmIChpc05vdE5pbChlbmREYXRlKSAmJiBpc05vdE5pbChzdGFydERhdGUpICYmIGVuZERhdGUuaXNTYW1lT3JCZWZvcmUoc3RhcnREYXRlKSkge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogY2xlYXIgZXhpc3RpbmcgZXJyb3JzXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgZXJyb3JDb2RlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZVJhbmdlU3RhcnQoZW5kRGF0ZUZpZWxkTmFtZTogc3RyaW5nLCBtc2c/OiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbXNnID8gJ21zZyc6ICdkYXRlUmFuZ2UnO1xuICAgIGNvbnN0IGVycm9yID0gbXNnID8ge21zZ30gOiB7ZGF0ZVJhbmdlOiB0cnVlfTtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGVuZERhdGVDb250cm9sID0gY29udHJvbC5wYXJlbnQ/LmdldChlbmREYXRlRmllbGROYW1lKTtcbiAgICAgIGlmICghZW5kRGF0ZUNvbnRyb2wpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBDYW5ub3QgZmluZCBjb250cm9sICcke2VuZERhdGVGaWVsZE5hbWV9JyBpbiB0aGUgcGFyZW50IGZvcm1gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRGF0ZUNvbnRyb2wudmFsdWUpO1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICAvLyBFcnJvciBpZiB2YWx1ZSA8PSBiZWZvcmVEYXRlXG4gICAgICBpZiAoaXNOb3ROaWwoc3RhcnREYXRlKSAmJiBpc05vdE5pbChlbmREYXRlKSAmJiBzdGFydERhdGUuaXNTYW1lT3JBZnRlcihlbmREYXRlKSkge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogY2xlYXIgZXhpc3RpbmcgZXJyb3JzXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgZXJyb3JDb2RlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgY29weVBhcmVudEVycm9ycyhlcnJvck5hbWVzPzogc3RyaW5nW10pOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAvLyBTa2lwIGlmIGNvbnRyb2wgYWxyZWFkeSBoYXMgc29tZSBlcnJvcnNcbiAgICAgIGlmIChjb250cm9sLmVycm9ycykgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IGNvbnRyb2wucGFyZW50ICYmIGNvbnRyb2wucGFyZW50LmVycm9ycztcblxuICAgICAgLy8gTm8gZXJyb3JzLCBvciBjb3B5IGFsbCBlcnJvcnNcbiAgICAgIGlmICghZXJyb3JzIHx8IGlzRW1wdHlBcnJheShlcnJvck5hbWVzKSkgcmV0dXJuIGVycm9ycztcblxuICAgICAgLy8gQ29weSBvbmx5IGV4cGVjdGVkIGVycm9yc1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykucmVkdWNlKChyZXMsIGtleSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3JOYW1lcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgcmVzW2tleV0gPSBlcnJvcnNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSwge30pO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgY2xlYXJFcnJvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGVycm9yQ29kZTogc3RyaW5nKSB7XG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoZXJyb3JDb2RlKSkge1xuICAgICAgY29uc3QgZXJyb3JzID0gY29udHJvbC5lcnJvcnM7XG4gICAgICBpZiAoZXJyb3JzICYmIGVycm9yc1tlcnJvckNvZGVdKSB7XG4gICAgICAgIC8vIE9ubHkgb25lIGVycm9yOiByZXNldCBlcnJvcnNcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9ycykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXIgZXJyb3JzIGV4aXN0czoganVzdCByZW1vdmUgdGhpcyBlcnJvclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXJyb3JzW2Vycm9yQ29kZV07XG4gICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBTaGFyZWRGb3JtR3JvdXBWYWxpZGF0b3JzIHtcblxuICBzdGF0aWMgZGF0ZVJhbmdlKHN0YXJ0RGF0ZUZpZWxkOiBzdHJpbmcsIGVuZERhdGVGaWVsZDogc3RyaW5nLCBtc2c/OiBzdHJpbmcgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IGlzTm90TmlsT3JCbGFuayhtc2cpID8gJ21zZycgOiAnZGF0ZVJhbmdlJztcbiAgICBjb25zdCByYW5nZUVycm9yID0gbXNnID8ge21zZ30gOiB7ZGF0ZVJhbmdlOiB0cnVlfTtcbiAgICByZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgaXNOb3ROaWwoZW5kRGF0ZSkgJiYgc3RhcnREYXRlLmlzQWZ0ZXIoZW5kRGF0ZSkpIHtcbiAgICAgICAgLy8gVXBkYXRlIGVuZCBmaWVsZFxuICAgICAgICBlbmRGaWVsZC5tYXJrQXNQZW5kaW5nKCk7XG4gICAgICAgIGVuZEZpZWxkLnNldEVycm9ycyh7XG4gICAgICAgICAgLi4uZW5kRmllbGQuZXJyb3JzLFxuICAgICAgICAgIC4uLnJhbmdlRXJyb3JcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3IgKHNob3VsZCBiZSBhcHBseSB0byB0aGUgcGFyZW50IGZvcm0pXG4gICAgICAgIHJldHVybiByYW5nZUVycm9yO1xuICAgICAgfVxuICAgICAgLy8gT0s6IHJlbW92ZSB0aGUgZXhpc3Rpbmcgb24gdGhlIGVuZCBmaWVsZFxuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGVuZEZpZWxkLCBlcnJvckNvZGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlTWF4RHVyYXRpb24oc3RhcnREYXRlRmllbGQ6IHN0cmluZywgZW5kRGF0ZUZpZWxkOiBzdHJpbmcsIG1heER1cmF0aW9uOiBudW1iZXIsIGR1cmF0aW9uVW5pdD86IG1vbWVudC51bml0T2ZUaW1lLkRpZmYpOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgbWF4RHVyYXRpb25FcnJvciA9IHtkYXRlTWF4RHVyYXRpb246IHRydWV9O1xuICAgIHJldHVybiAoZ3JvdXA6IEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGdyb3VwLmdldChzdGFydERhdGVGaWVsZCkudmFsdWUpO1xuICAgICAgY29uc3QgZW5kRmllbGQgPSBncm91cC5nZXQoZW5kRGF0ZUZpZWxkKTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmRGaWVsZC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwoc3RhcnREYXRlKSAmJiBpc05vdE5pbChlbmREYXRlKSAmJiBNYXRoLmFicyhzdGFydERhdGUuZGlmZihlbmREYXRlLCBkdXJhdGlvblVuaXQpKSA+IG1heER1cmF0aW9uKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbmQgZmllbGRcbiAgICAgICAgZW5kRmllbGQubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgZW5kRmllbGQubWFya0FzUGVuZGluZygpO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoe1xuICAgICAgICAgIC4uLmVuZEZpZWxkLmVycm9ycyxcbiAgICAgICAgICAuLi5tYXhEdXJhdGlvbkVycm9yXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yIChzaG91bGQgYmUgYXBwbHkgdG8gdGhlIHBhcmVudCBmb3JtKVxuICAgICAgICByZXR1cm4gbWF4RHVyYXRpb25FcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiByZW1vdmUgdGhlIGV4aXN0aW5nIG9uIHRoZSBlbmQgZmllbGRcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihlbmRGaWVsZCwgJ2RhdGVNYXhEdXJhdGlvbicpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlTWluRHVyYXRpb24oc3RhcnREYXRlRmllbGQ6IHN0cmluZywgZW5kRGF0ZUZpZWxkOiBzdHJpbmcsIG1pbkR1cmF0aW9uOiBudW1iZXIsIGR1cmF0aW9uVW5pdD86IG1vbWVudC51bml0T2ZUaW1lLkRpZmYpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChncm91cDogRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZW5kRmllbGQgPSBncm91cC5nZXQoZW5kRGF0ZUZpZWxkKTtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGdyb3VwLmdldChzdGFydERhdGVGaWVsZCkudmFsdWUpO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGVuZEZpZWxkLnZhbHVlKTtcbiAgICAgIGlmIChpc05vdE5pbChzdGFydERhdGUpICYmIGlzTm90TmlsKGVuZERhdGUpICYmIE1hdGguYWJzKHN0YXJ0RGF0ZS5kaWZmKGVuZERhdGUsIGR1cmF0aW9uVW5pdCkpIDwgbWluRHVyYXRpb24pIHtcbiAgICAgICAgLy8gVXBkYXRlIGVuZCBmaWVsZFxuICAgICAgICBjb25zdCBlbmRGaWVsZEVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IGVuZEZpZWxkLmVycm9ycyB8fCB7fTtcbiAgICAgICAgZW5kRmllbGRFcnJvcnNbJ2RhdGVNaW5EdXJhdGlvbiddID0gdHJ1ZTtcbiAgICAgICAgZW5kRmllbGQuc2V0RXJyb3JzKGVuZEZpZWxkRXJyb3JzKTtcbiAgICAgICAgZW5kRmllbGQubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGx5IHRvIHRoZSBwYXJlbnQgZm9ybSlcbiAgICAgICAgcmV0dXJuIHtkYXRlTWluRHVyYXRpb246IHRydWV9O1xuICAgICAgfVxuICAgICAgLy8gT0s6IHJlbW92ZSB0aGUgZXhpc3Rpbmcgb24gdGhlIGVuZCBmaWVsZFxuICAgICAgZWxzZSB7XG4gICAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihlbmRGaWVsZCwgJ2RhdGVNaW5EdXJhdGlvbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZElmKGZpZWxkTmFtZTogc3RyaW5nLCBhbm90aGVyRmllbGRUb0NoZWNrOiBzdHJpbmcgfCBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChncm91cDogRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgYW5vdGhlckNvbnRyb2wgPSAoYW5vdGhlckZpZWxkVG9DaGVjayBpbnN0YW5jZW9mIEFic3RyYWN0Q29udHJvbCkgPyBhbm90aGVyRmllbGRUb0NoZWNrIDogZ3JvdXAuZ2V0KGFub3RoZXJGaWVsZFRvQ2hlY2spO1xuICAgICAgaWYgKCFhbm90aGVyQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBmaWVsZCB0byBjaGVjayEnKTtcbiAgICAgIGlmIChpc05pbE9yQmxhbmsoY29udHJvbC52YWx1ZSkgJiYgaXNOb3ROaWxPckJsYW5rKGFub3RoZXJDb250cm9sLnZhbHVlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHtyZXF1aXJlZDogdHJ1ZX07XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9yKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkSWZUcnVlKGZpZWxkTmFtZTogc3RyaW5nLCBhbm90aGVyRmllbGRUb0NoZWNrOiBzdHJpbmcgfCBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChncm91cDogRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgYW5vdGhlckNvbnRyb2wgPSAoYW5vdGhlckZpZWxkVG9DaGVjayBpbnN0YW5jZW9mIEFic3RyYWN0Q29udHJvbCkgPyBhbm90aGVyRmllbGRUb0NoZWNrIDogZ3JvdXAuZ2V0KGFub3RoZXJGaWVsZFRvQ2hlY2spO1xuICAgICAgaWYgKCFhbm90aGVyQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBmaWVsZCB0byBjaGVjayEnKTtcbiAgICAgIGlmIChpc05pbE9yQmxhbmsoY29udHJvbC52YWx1ZSkgJiYgdG9Cb29sZWFuKGFub3RoZXJDb250cm9sLnZhbHVlLCBmYWxzZSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7cmVxdWlyZWQ6IHRydWV9O1xuICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcik7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZElmRW1wdHkoZmllbGROYW1lOiBzdHJpbmcsIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpICYmIGlzTmlsT3JCbGFuayhncm91cC5nZXQoYW5vdGhlckZpZWxkVG9DaGVjaykudmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0ge3JlcXVpcmVkOiB0cnVlfTtcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3IpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcHJvcGFnYXRlSWZEaXJ0eShmaWVsZE5hbWU6IHN0cmluZywgZmllbGROYW1lVG9Qcm9wYWdhdGU6IHN0cmluZywgdmFsdWVUb1Byb3BhZ2F0ZTogYW55KTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IEZvcm1Hcm91cCk6IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgY29udHJvbFRvUHJvcGFnYXRlID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZVRvUHJvcGFnYXRlKTtcbiAgICAgIGlmIChjb250cm9sLmRpcnR5ICYmIGNvbnRyb2xUb1Byb3BhZ2F0ZS52YWx1ZSAhPT0gdmFsdWVUb1Byb3BhZ2F0ZSkge1xuICAgICAgICBjb250cm9sVG9Qcm9wYWdhdGUuc2V0VmFsdWUodmFsdWVUb1Byb3BhZ2F0ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbWUgYXMgY29tcG9zZSwgYnV0IGtlZXAgb25seSB0aGUgZmlyc3QgZXJyb3JzIChpbnN0ZWFkIG9mIHRoZSB1bmlvbilcbiAgICogQHBhcmFtIHZhbGlkYXRvcnNcbiAgICovXG4gIGZpcnN0KHZhbGlkYXRvcnM6IChWYWxpZGF0b3JGbiB8IG51bGwgfCB1bmRlZmluZWQpW10pOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIChjb250cm9sKSA9PiB2YWxpZGF0b3JzXG4gICAgICAuZmlsdGVyKGlzTm90TmlsKVxuICAgICAgLm1hcCh2YWxpZGF0b3IgPT4gdmFsaWRhdG9yKGNvbnRyb2wpKVxuICAgICAgLmZpbmQoaXNOb3ROaWwpIHx8IG51bGw7XG4gIH1cbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBTaGFyZWRGb3JtQXJyYXlWYWxpZGF0b3JzIHtcblxuICAvKipcbiAgICogVmFsaWRhdGUgdW5pcXVlbmVzcyBvZiBhbiBlbnRpdHkgaW4gYSBGb3JtQXJyYXlcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIGluIEZvcm1BcnJheVxuICAgKi9cbiAgc3RhdGljIHVuaXF1ZUVudGl0eShjb250cm9sTmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoYXJyYXk6IEZvcm1BcnJheSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSA9IFtdO1xuICAgICAgaWYgKGFycmF5Lmxlbmd0aCkge1xuICAgICAgICAvLyBnYXRoZXIgY29udHJvbHMgaW4gYXJyYXkgd2l0aCB2YWxpZCBlbnRpdHlcbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIGFycmF5LmNvbnRyb2xzKSB7XG4gICAgICAgICAgY29uc3QgZnJvbUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgICAgICAgaWYgKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZTtcbiAgICAgICAgICAgIGlmICghIXZhbHVlICYmICEhdmFsdWUuaWQpXG4gICAgICAgICAgICAgIGNvbnRyb2xzLnB1c2goZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBvY2N1cnJlbmNlcyBvZiBlbnRpdHkgYnkgaWRcbiAgICAgICAgY29uc3Qgb2NjdXJyZW5jZXMgPSBjb250cm9scy5yZWR1Y2UoKGFjYywgY29udHJvbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gY29udHJvbC52YWx1ZS5pZDtcbiAgICAgICAgICBhY2NbaWRdID8gYWNjW2lkXSsrIDogYWNjW2lkXSA9IDE7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgICAgICAvLyBnZXQgY29udHJvbHMgd2l0aCB2YWx1ZSBvY2N1cnJlbmNlcyA+IDFcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7dW5pcXVlRW50aXR5OiB0cnVlfTtcbiAgICAgICAgbGV0IHJldHVybkVycm9yID0gZmFsc2U7XG4gICAgICAgIGNvbnRyb2xzLmZpbHRlcihjb250cm9sID0+IG9jY3VycmVuY2VzW2NvbnRyb2wudmFsdWUuaWRdID4gMSlcbiAgICAgICAgICAuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBjb250cm9sLmVycm9ycyB8fCB7fTtcbiAgICAgICAgICAgIGVycm9ycyA9IHsuLi5lcnJvcnMsIC4uLmVycm9yfTtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgICAgICByZXR1cm5FcnJvciA9IHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXR1cm5FcnJvcilcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4gU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsICd1bmlxdWVFbnRpdHknKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkQXJyYXlNaW5MZW5ndGgobWluTGVuZ3RoPzogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIG1pbkxlbmd0aCA9IG1pbkxlbmd0aCB8fCAxO1xuICAgIHJldHVybiAoYXJyYXk6IEZvcm1BcnJheSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmICghYXJyYXkgfHwgYXJyYXkubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7cmVxdWlyZWQ6IHRydWV9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc3VtIG9mIGNvbnRyb2wgdmFsdWVzIGluIGFuIEZvcm1BcnJheSBub3Qgb3ZlcmZsb3cgdGhlIG1heCB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wgaW4gRm9ybUFycmF5XG4gICAqIEBwYXJhbSBtYXggdGhlIG1heGltdW0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyB2YWxpZFN1bU1heFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcsIG1heDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoYXJyYXk6IEZvcm1BcnJheSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSA9IFtdO1xuICAgICAgaWYgKGFycmF5Lmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgYXJyYXkuY29udHJvbHMpIHtcbiAgICAgICAgICBjb25zdCBmcm9tR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICBpZiAoZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSAmJiBpc05vdE5pbE9yTmFOKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpKSB7XG4gICAgICAgICAgICBjb250cm9scy5wdXNoKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udHJvbHMucmVkdWNlKChzdW0sIGNvbnRyb2wpID0+IHN1bSArIGNvbnRyb2wudmFsdWUsIDApID4gbWF4KSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSB7c3VtTWF4VmFsdWU6IHRydWV9O1xuICAgICAgICAgIGNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gY29udHJvbC5lcnJvcnMgfHwge307XG4gICAgICAgICAgICBlcnJvcnMgPSB7Li4uZXJyb3JzLCAuLi5lcnJvcn07XG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAnc3VtTWF4VmFsdWUnKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbn1cblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBPYnNlcnZhYmxlVmFsaWRhdG9yRm4gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPlxuZXhwb3J0IGRlY2xhcmUgdHlwZSBQcm9taXNlVmFsaWRhdG9yRm4gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBQcm9taXNlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPlxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZEFzeW5jVmFsaWRhdG9ycyB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgREVCT1VOQ0VfVElNRV9WQUxJREFUT1JfSUQgPSAwO1xuXG4gIC8qKlxuICAgKiBBZGQgYSBkZWJvdW5jZSB0aW1lIHRvIGEgdmFsaWRhdG9yLlxuICAgKiBAcGFyYW0gZm9ybVxuICAgKiBAcGFyYW0gdmFsaWRhdG9yRm5cbiAgICogQHBhcmFtIG9wdHMgVXNlIG9wdHMuc3RvcFN1YmplY3QgdG8gc3RvcCB0aGUgdmFsaWRhdG9yLCBiZWZvcmUgZW5kXG4gICAqL1xuICBzdGF0aWMgZGVib3VuY2VUaW1lKHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm4sXG4gICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2U/OiBPYnNlcnZhYmxlPGFueT47XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrRm9yQ2hlY2s/OiAoKSA9PiB2b2lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgIH0pOiBPYnNlcnZhYmxlVmFsaWRhdG9yRm4ge1xuXG4gICAgLy8gREVCVUcgb25seVxuICAgIGNvbnN0IGRlYnVnID0gb3B0cz8uZGVidWcgfHwgZmFsc2UgO1xuICAgIGNvbnN0IGxvZ1ByZWZpeCA9IGRlYnVnICYmIGBbZGVib3VuY2VUaW1lLXZhbGlkYXRvcl0gIyR7U2hhcmVkQXN5bmNWYWxpZGF0b3JzLkRFQk9VTkNFX1RJTUVfVkFMSURBVE9SX0lEKyt9IC0gYDtcbiAgICBjb25zdCBkZWJvdW5jZVRpbWUgPSB0b051bWJlcihvcHRzPy5kZWJvdW5jZVRpbWUsIDI1MCk7XG5cbiAgICAvLyBERUJVR1xuICAgIGlmIChkZWJ1ZykgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyBgTmV3IHZhbGlkYXRvciB3aXRoIGEgZGVib3VuY2VUaW1lIGF0ICR7ZGVib3VuY2VUaW1lfW1zYCk7XG5cbiAgICBjb25zdCAkZGlzcG9zZVN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGRpc3Bvc2VFdmVudCQgPSBvcHRzPy5kaXNwb3NlXG4gICAgICA/IG1lcmdlKCRkaXNwb3NlU3ViamVjdCwgb3B0cz8uZGlzcG9zZSlcbiAgICAgIDogJGRpc3Bvc2VTdWJqZWN0O1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAoZGVidWcgJiYgb3B0cz8uZGlzcG9zZSkge1xuICAgICAgb3B0cz8uZGlzcG9zZS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgJ1N0b3BwaW5nJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNvbnRyb2wpID0+IHtcbiAgICAgIGlmIChkZWJ1ZykgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyAnRm9ybSBhc2sgdmFsaWRhdGlvbi4uLicpO1xuXG4gICAgICAvLyBTdG9wIHByZXZpb3VzIG9ic2VydmFibGVzXG4gICAgICAkZGlzcG9zZVN1YmplY3QubmV4dCgpO1xuICAgICAgbGV0IG5vdzogbnVtYmVyO1xuXG4gICAgICAvLyBBZGQgYSBkZWxheSBiZWZvcmUgZXhlY3V0aW9uXG4gICAgICByZXR1cm4gdGltZXIoZGVib3VuY2VUaW1lKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIHRhcChfID0+IHtcbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArICdFeGVjdXRpbmcuLi4nKTtcbiAgICAgICAgICAgICAgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHtcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIHZhbGlkYXRvclxuICAgICAgICAgICAgY29uc3QgcmVzID0gdmFsaWRhdG9yRm4oY29udHJvbCk7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmV0dXJuIGFuIE9ic2VydmFibGVcbiAgICAgICAgICAgIGlmIChpc09ic2VydmFibGUocmVzKSkgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBQcm9taXNlKSByZXR1cm4gZnJvbShyZXMpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICB0YXAocmVzID0+IGRlYnVnICYmIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgYEZpbmlzaGVkIGluICR7RGF0ZS5ub3coKSAtIG5vd31tcyAoJHtyZXMgPyAnd2l0aCBlcnJvcnMnIDogJ25vIGVycm9yJ30pYCwgcmVzKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbZGVib3VuY2VUaW1lLXZhbGlkYXRvcl0gRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHZhbGlkYXRvci4gU3RvcHBpbmcgam9iJywgZXJyb3IpO1xuICAgICAgICAgICAgJGRpc3Bvc2VTdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIFJlZnJlc2ggVUksIGFmdGVyIGEgc3VjY2Vzc2Z1bCBleGVjdXRpb25cbiAgICAgICAgICB0YXAoKCkgPT4gb3B0cz8ubWFya0ZvckNoZWNrICYmIG9wdHM/Lm1hcmtGb3JDaGVjaygpKSxcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gc3RvcCwgYmVjYXVzZSBvZiB0aGUgc3dpdGNoTWFwXG4gICAgICAgICAgdGFrZVVudGlsKGRpc3Bvc2VFdmVudCQpXG4gICAgICAgIClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhc3luYyB2YWxpZGF0b3IsIHRoYXQgY2FuIGJlIGRpc3Bvc2VkIGJ5IHRoZSByZXR1cm5lZCBzdWJzY3JpcHRpb25cbiAgICogQHBhcmFtIGZvcm1cbiAgICogQHBhcmFtIHZhbGlkYXRvckZuIHRoZSB2YWxpZGF0b3Igb3Igam9iIHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHN0YXRpYyByZWdpc3RlckFzeW5jVmFsaWRhdG9yKGZvcm06IEFic3RyYWN0Q29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yRm46IFZhbGlkYXRvckZuIHwgQXN5bmNWYWxpZGF0b3JGbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya0ZvckNoZWNrPzogKCkgPT4gdm9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBTdWJzY3JpcHRpb24ge1xuICAgIGlmIChmb3JtLmFzeW5jVmFsaWRhdG9yKSB0aHJvdyBFcnJvcignRm9ybSBhbHJlYWR5IGhhdmUgYW4gYXN5bmMgdmFsaWRhdG9yLiBDYW5ub3QgY29uZmlndXJlIGpvYicpO1xuXG4gICAgY29uc3QgZGVib3VuY2VUaW1lID0gdG9OdW1iZXIob3B0cz8uZGVib3VuY2VUaW1lLCAyNTApO1xuICAgIGNvbnN0ICRkaXNwb3NlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9yRm4gPSBTaGFyZWRBc3luY1ZhbGlkYXRvcnMuZGVib3VuY2VUaW1lKHZhbGlkYXRvckZuLCB7Li4ub3B0cywgZGVib3VuY2VUaW1lLCBkaXNwb3NlOiAkZGlzcG9zZSB9KTtcbiAgICBmb3JtLnNldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvckZuKTtcblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8vIFdoZW4gdW5zdWJzY3JpYmluZywgcmVtb3ZlIGFzeW5jIHZhbGlkYXRvclxuICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4ge1xuICAgICAgLy8gQ2xlYXIgYWRkZWQgdmFsaWRhdG9yLiBNdXN0IGJlIGRvbmUgTk9XICh3aXRob3V0IGRlbGF5KSBiZWNhdXNlIGdlbmVyYWxseSBhIG5ldyBKb2IgaXMgZ2l2ZW4ganVzdCBhZnRlclxuICAgICAgZm9ybS5jbGVhckFzeW5jVmFsaWRhdG9ycygpO1xuXG4gICAgICAvLyBTdG9wIHRoZSBqb2IsIHdpdGggYSBkZWxheSB0byBsZXQgdGhlIGxhc3QgZXhlY3V0aW9uIGZpbmlzaGVkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgJGRpc3Bvc2UubmV4dCgpO1xuICAgICAgICAkZGlzcG9zZS51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgZGVib3VuY2VUaW1lKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gIH1cbn1cbiJdfQ==