@sumaris-net/ngx-components 2.4.0-rc4 → 2.4.0-rc6

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.
@@ -81,11 +81,11 @@ export class LocalSettingsService extends StartableService {
81
81
  async restoreLocally() {
82
82
  let data = this._data || {};
83
83
  // Restore from storage
84
- const settingsStr = await this.storage.get(SETTINGS_STORAGE_KEY);
84
+ const settings = await this.storage.get(SETTINGS_STORAGE_KEY);
85
85
  // Restore local settings (or keep old settings)
86
- if (isNotNilOrBlank(settingsStr)) {
86
+ if (isNotNil(settings)) {
87
87
  console.info('[settings] Restoring previous settings...');
88
- const restoredData = JSON.parse(settingsStr);
88
+ const restoredData = (typeof settings === 'string') ? JSON.parse(settings) : settings;
89
89
  // Avoid to override transient properties
90
90
  SETTINGS_TRANSIENT_PROPERTIES.forEach(transientKey => {
91
91
  delete restoredData[transientKey];
@@ -379,7 +379,7 @@ export class LocalSettingsService extends StartableService {
379
379
  }
380
380
  else {
381
381
  console.debug('[settings] Store local settings', this._data);
382
- return this.storage.set(SETTINGS_STORAGE_KEY, JSON.stringify(this._data));
382
+ return this.storage.set(SETTINGS_STORAGE_KEY, this._data);
383
383
  }
384
384
  }
385
385
  // Execute with delay
@@ -437,4 +437,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
437
437
  type: Inject,
438
438
  args: [APP_LOCAL_SETTINGS_OPTIONS]
439
439
  }] }]; } });
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUl4QyxPQUFPLEVBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsSSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBSTdCLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsT0FBTyxFQUFDLFdBQVcsRUFBYyxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDL0UsT0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBRTdELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUEsY0FBYyxDQUFDLENBQUM7QUFFakYsb0RBQW9EO0FBQ3BELE1BQU0sZ0JBQWdCLEdBQWtCO0lBQ3RDLGtCQUFrQixF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LENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNqRTtZQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0NBQWtDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDekU7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMscUJBQXFCLEtBQUssS0FBSyxFQUFFO1lBQ2pELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztrSEFyZVUsb0JBQW9CLGlHQXVDckIsV0FBVyxhQUNDLGtCQUFrQiw2QkFDbEIsMEJBQTBCO3NIQXpDckMsb0JBQW9CLGNBSG5CLE1BQU07NEZBR1Asb0JBQW9CO2tCQUpoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO29CQUNsQix3REFBd0Q7aUJBQ3pEOzswQkF3Q0ksTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUNyQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3MsIE9mZmxpbmVGZWF0dXJlLCBVc2FnZU1vZGV9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHtQZWVyfSBmcm9tICcuL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5cbmltcG9ydCB7ZXF1YWxzLCBnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge0Zvcm1GaWVsZERlZmluaXRpb24sIEZvcm1GaWVsZERlZmluaXRpb25NYXB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtMYXRMb25nUGF0dGVybn0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbGF0bG9uZy51dGlscyc7XG5pbXBvcnQge0VOVklST05NRU5ULCBFbnZpcm9ubWVudH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7ZW52aXJvbm1lbnR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XG5pbXBvcnQge0RhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmd9IGZyb20gJy4uLy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQge0hpc3RvcnlQYWdlUmVmZXJlbmNlfSBmcm9tICcuL21vZGVsL2hpc3RvcnkubW9kZWwnO1xuaW1wb3J0IHtTdGFydGFibGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtpc0NhcGFjaXRvciwgaXNNb2JpbGV9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR1NfU1RPUkFHRV9LRVkgPSAnc2V0dGluZ3MnO1xuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1RSQU5TSUVOVF9QUk9QRVJUSUVTID0gWydtb2JpbGUnLCAndG91Y2hVaScvKmRlcHJlY2F0ZWQqL107XG5cbi8vIGZpeG1lOiB0aGlzIGNvbnN0YW50IHBvaW50cyB0byBzdGF0aWMgZW52aXJvbm1lbnRcbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IExvY2FsU2V0dGluZ3MgPSB7XG4gIGFjY291bnRJbmhlcml0YW5jZTogdHJ1ZSxcbiAgbG9jYWxlOiBlbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlLFxuICBsYXRMb25nRm9ybWF0OiBlbnZpcm9ubWVudC5kZWZhdWx0TGF0TG9uZ0Zvcm1hdCB8fCAnRERNTScsXG4gIHBhZ2VIaXN0b3J5TWF4U2l6ZTogM1xufTtcblxuZXhwb3J0IGNvbnN0IEFQUF9MT0NBTF9TRVRUSU5HUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQYXJ0aWFsPExvY2FsU2V0dGluZ3M+PignRGVmYXVsdExvY2FsU2V0dGluZ3MnKTtcbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxGb3JtRmllbGREZWZpbml0aW9uTWFwPignTG9jYWxTZXR0aW5nc09wdGlvbnMnKTtcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFkZFRvUGFnZUhpc3RvcnlPcHRpb25zIHtcbiAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgcmVtb3ZlVGl0bGVTbWFsbFRhZz86IGJvb2xlYW47XG4gIGVtaXRFdmVudD86IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG4gIC8vZGVwczogW0FQUF9MT0NBTF9TRVRUSU5HUywgQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlNdXG59KVxuZXhwb3J0IGNsYXNzIExvY2FsU2V0dGluZ3NTZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZTxMb2NhbFNldHRpbmdzPiB7XG5cbiAgb25DaGFuZ2UgPSBuZXcgU3ViamVjdDxMb2NhbFNldHRpbmdzPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbkRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgcHJpdmF0ZSBfJHBlcnNpc3Q6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIGdldCBzZXR0aW5ncygpOiBMb2NhbFNldHRpbmdzIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgfVxuXG4gIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxvY2FsZSB8fCB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgfVxuXG4gIGdldCBsYXRMb25nRm9ybWF0KCk6IExhdExvbmdQYXR0ZXJuIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxhdExvbmdGb3JtYXQgfHwgJ0RETU0nO1xuICB9XG5cbiAgZ2V0IHVzYWdlTW9kZSgpOiBVc2FnZU1vZGUge1xuICAgIHJldHVybiBpc05vdE5pbCh0aGlzLl9kYXRhLnVzYWdlTW9kZSkgPyB0aGlzLl9kYXRhLnVzYWdlTW9kZSA6IChpc0NhcGFjaXRvcih3aW5kb3cpIHx8IGlzTW9iaWxlKHdpbmRvdykgPyAnRklFTEQnIDogJ0RFU0snKTtcbiAgfVxuXG4gIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX2RhdGEubW9iaWxlKSA/IHRoaXMuX2RhdGEubW9iaWxlIDogaXNNb2JpbGUod2luZG93KTtcbiAgfVxuXG4gIHNldCBtb2JpbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2VIaXN0b3J5KCk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10ge1xuICAgIHJldHVybiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5IHx8IFtdKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPQ0FMX1NFVFRJTkdTKSBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTZXR0aW5nczogTG9jYWxTZXR0aW5ncyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TKSBkZWZhdWx0T3B0aW9uc01hcDogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcFxuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7XG4gICAgdGhpcy5kZWZhdWx0U2V0dGluZ3MgPSB7Li4uREVGQVVMVF9TRVRUSU5HUywgLi4udGhpcy5kZWZhdWx0U2V0dGluZ3N9O1xuXG4gICAgdGhpcy5fb3B0aW9uRGVmcyA9IE9iamVjdC52YWx1ZXMoZGVmYXVsdE9wdGlvbnNNYXApO1xuXG4gICAgdGhpcy5yZXNldERhdGEoKTtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIENyZWF0aW5nIHNlcnZpY2UnKTtcbiAgfVxuXG4gIG5nT25TdGFydCgpOiBQcm9taXNlPExvY2FsU2V0dGluZ3M+IHtcblxuICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBTdGFydGluZyBzZXJ2aWNlLi4uJyk7XG5cbiAgICAvLyBEZWZhdWx0IHZhbHVlXG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB0aGlzLm1vYmlsZTtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHRoaXMudXNhZ2VNb2RlO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcmV0dXJuIHRoaXMucmVzdG9yZUxvY2FsbHkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICB9XG5cbiAgaXNVc2FnZU1vZGUobW9kZTogVXNhZ2VNb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNhZ2VNb2RlID09PSBtb2RlO1xuICB9XG5cbiAgaXNPbkZpZWxkTW9kZSh2YWx1ZT86IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodmFsdWUgfHwgdGhpcy51c2FnZU1vZGUpID09PSAnRklFTEQnO1xuICB9XG5cbiAgYXN5bmMgcmVzdG9yZUxvY2FsbHkoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzIHwgdW5kZWZpbmVkPiB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLl9kYXRhIHx8IDxMb2NhbFNldHRpbmdzPnt9O1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBjb25zdCBzZXR0aW5nc1N0ciA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXQoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuXG4gICAgLy8gUmVzdG9yZSBsb2NhbCBzZXR0aW5ncyAob3Iga2VlcCBvbGQgc2V0dGluZ3MpXG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhzZXR0aW5nc1N0cikpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBSZXN0b3JpbmcgcHJldmlvdXMgc2V0dGluZ3MuLi4nKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWREYXRhID0gSlNPTi5wYXJzZShzZXR0aW5nc1N0cik7XG5cbiAgICAgIC8vIEF2b2lkIHRvIG92ZXJyaWRlIHRyYW5zaWVudCBwcm9wZXJ0aWVzXG4gICAgICBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUy5mb3JFYWNoKHRyYW5zaWVudEtleSA9PiB7XG4gICAgICAgIGRlbGV0ZSByZXN0b3JlZERhdGFbdHJhbnNpZW50S2V5XTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBNZXJnZSBpbnRvIGV4aXN0aW5nIGRhdGFcbiAgICAgIGRhdGEgPSBPYmplY3QuYXNzaWduKGRhdGEsIHJlc3RvcmVkRGF0YSk7XG4gICAgfVxuXG4gICAgLy8gRW1pdCBldmVudFxuICAgIHRoaXMub25DaGFuZ2UubmV4dChkYXRhKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc2V0UHJvcGVydHk8VCA9IHN0cmluZz4oa2V5T3JEZWY6IHN0cmluZ3xGb3JtRmllbGREZWZpbml0aW9uLCB2YWx1ZTogVCl7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICFrZXlPckRlZikgcmV0dXJuO1xuICAgIGlmICh0eXBlb2Yga2V5T3JEZWYgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLnNldFByb3BlcnR5KGtleU9yRGVmLmtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kYXRhLnByb3BlcnRpZXMgPSB0aGlzLl9kYXRhLnByb3BlcnRpZXMgfHwge307XG4gICAgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2tleU9yRGVmXSA9IGlzTmlsKHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXRQcm9wZXJ0eShrZXlPckRlZjogc3RyaW5nfEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5KGtleU9yRGVmLmtleSwgaXNOaWwoZGVmYXVsdFZhbHVlKSA/IGtleU9yRGVmLmRlZmF1bHRWYWx1ZSA6IGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXMgJiYgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2tleU9yRGVmXTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzQm9vbGVhbihkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/ICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2ZhbHNlJykgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzSW50KGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IHBhcnNlSW50KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNOdW1iZXJzKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRQcm9wZXJ0eShkZWZpbml0aW9uLCBkZWZhdWx0VmFsdWUpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocGFyc2VGbG9hdCkgfHwgdW5kZWZpbmVkO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyBbcGFyc2VGbG9hdCh2YWx1ZSldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc1N0cmluZ3MoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLnNwbGl0KCcsJykgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgYXBwbHkoc2V0dGluZ3M6IFBhcnRpYWw8TG9jYWxTZXR0aW5ncz4sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgZGF0YSA9IHsgLi4udGhpcy5fZGF0YSwgLi4uc2V0dGluZ3N9O1xuXG4gICAgaWYgKGVxdWFscyhkYXRhLCB0aGlzLl9kYXRhKSkgcmV0dXJuOyAvLyBTa2lwIGlmIG5vIGNoYW5nZXNcblxuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuXG4gICAgLy8gU2F2ZSBsb2NhbGx5XG4gICAgaWYgKG9wdHMgJiYgb3B0cy5wZXJzaXN0SW1tZWRpYXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLnBlcnNpc3RMb2NhbGx5KHRydWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTsgLy8gTm8gQVdBSVRcbiAgICB9XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5vbkNoYW5nZS5uZXh0KHRoaXMuX2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFwcGx5UHJvcGVydHkoa2V5OiBrZXlvZiBMb2NhbFNldHRpbmdzLCB2YWx1ZTogYW55LCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBwZXJzaXN0SW1tZWRpYXRlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgY2hhbmdlcyA9IHt9O1xuICAgIGNoYW5nZXNba2V5XSA9IHZhbHVlO1xuICAgIGF3YWl0IHRoaXMuYXBwbHkoY2hhbmdlcywgb3B0cyk7XG4gIH1cblxuICBnZXRQYWdlU2V0dGluZ3M8VCA9IGFueT4ocGFnZUlkOiBzdHJpbmcsIHByb3BlcnR5TmFtZT86IHN0cmluZyk6IFQge1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5wYWdlcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBrZXkgPSBwYWdlSWQucmVwbGFjZSgvWy9dL2csICdfXycpO1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsocHJvcGVydHlOYW1lKSkge1xuICAgICAgcmV0dXJuIGdldFByb3BlcnR5QnlQYXRoKHRoaXMuX2RhdGEucGFnZXMsIGtleSArICcuJyArIHByb3BlcnR5TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRhLnBhZ2VzW2tleV07XG4gIH1cblxuICBhc3luYyBzYXZlUGFnZVNldHRpbmcocGFnZUlkOiBzdHJpbmcsIHZhbHVlOiBhbnksIHByb3BlcnR5TmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhIHx8IHRoaXMuZGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMuX2RhdGEucGFnZXMgPSB0aGlzLl9kYXRhLnBhZ2VzIHx8IHt9O1xuXG4gICAgY29uc3Qga2V5ID0gcGFnZUlkLnJlcGxhY2UoL1svXS9nLCAnX18nKTtcbiAgICBpZiAocHJvcGVydHlOYW1lKSB7XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VzW2tleV0gPSB0aGlzLl9kYXRhLnBhZ2VzW2tleV0gfHwge307XG4gICAgICB0aGlzLl9kYXRhLnBhZ2VzW2tleV1bcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgfVxuXG5cbiAgZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWU6IHN0cmluZyk6IE9mZmxpbmVGZWF0dXJlIHtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIXRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzIHx8IGlzRW1wdHlBcnJheSh0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcykpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICghZmVhdHVyZU5hbWUpIHRocm93IEVycm9yKCdNaXNzaW5nIFxcJ2ZlYXR1cmVOYW1lXFwnIGFyZ3VtZW50Jyk7XG5cbiAgICBmZWF0dXJlTmFtZSA9IGZlYXR1cmVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZmVhdHVyZVByZWZpeCA9IGZlYXR1cmVOYW1lICsgJyMnO1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5maW5kKGYgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZU5hbWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgaWYgKCFmZWF0dXJlKSByZXR1cm47IC8vIE5vdCBmb3VuZFxuICAgIGlmICh0eXBlb2YgZmVhdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGxhc3RTeW5jRGF0ZSA9IGZlYXR1cmUuc3Vic3RyaW5nKGZlYXR1cmVQcmVmaXgubGVuZ3RoKTtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFske2ZlYXR1cmVOYW1lfV0gTGFzdCBzeW5jaHJvbml6YXRpb24gZGF0ZTogJHtsYXN0U3luY0RhdGV9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBmZWF0dXJlTmFtZSxcbiAgICAgICAgbGFzdFN5bmNEYXRlXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZTtcbiAgfVxuXG4gIGdldE9mZmxpbmVGZWF0dXJlTGFzdFN5bmNEYXRlKGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBNb21lbnQge1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldE9mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lKTtcbiAgICByZXR1cm4gZmVhdHVyZSAmJiBmcm9tRGF0ZUlTT1N0cmluZyhmZWF0dXJlLmxhc3RTeW5jRGF0ZSk7XG4gIH1cblxuICBoYXNPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChmZWF0dXJlTmFtZSkgcmV0dXJuIGlzTm90TmlsKHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5fZGF0YSAmJiBpc05vdEVtcHR5QXJyYXkodGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpO1xuICB9XG5cbiAgc2F2ZU9mZmxpbmVGZWF0dXJlKGZlYXR1cmU6IE9mZmxpbmVGZWF0dXJlKSB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyB8fCBbXTtcblxuICAgIGZlYXR1cmUubmFtZSA9IGZlYXR1cmUubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgZmVhdHVyZVByZWZpeCA9IGZlYXR1cmUubmFtZSArICcjJztcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMuZmluZEluZGV4KGYgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmID09PSAnc3RyaW5nJykgcmV0dXJuIGYudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGZlYXR1cmVQcmVmaXgpO1xuICAgICAgaWYgKGYgJiYgdHlwZW9mIGYgPT09ICdvYmplY3QnICYmIGYubmFtZSkgcmV0dXJuIGYubmFtZSA9PT0gZmVhdHVyZS5uYW1lO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXNbZXhpc3RpbmdJbmRleF0gPSBmZWF0dXJlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpO1xuICB9XG5cbiAgbWFya09mZmxpbmVGZWF0dXJlQXNTeW5jKGZlYXR1cmVOYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgZmVhdHVyZSA9IHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpO1xuXG4gICAgaWYgKCFmZWF0dXJlKSB7XG4gICAgICBmZWF0dXJlID0gPE9mZmxpbmVGZWF0dXJlPntcbiAgICAgICAgbmFtZTogZmVhdHVyZU5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgbGFzdFN5bmNEYXRlOiBEYXRlVXRpbHMubW9tZW50KCkudG9JU09TdHJpbmcoKVxuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmZWF0dXJlLmxhc3RTeW5jRGF0ZSA9IERhdGVVdGlscy5tb21lbnQoKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIHRoaXMuc2F2ZU9mZmxpbmVGZWF0dXJlKGZlYXR1cmUpO1xuICB9XG5cbiAgcmVtb3ZlT2ZmbGluZUZlYXR1cmVzKCkge1xuICAgIGlmICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyA9IFtdO1xuXG4gICAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3NcbiAgICAgIHRoaXMucGVyc2lzdExvY2FsbHkoKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWVsZERpc3BsYXlBdHRyaWJ1dGVzKGZpZWxkTmFtZTogc3RyaW5nLCBkZWZhdWx0QXR0cmlidXRlcz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXMgJiYgIHRoaXMuX2RhdGEucHJvcGVydGllc1tgc3VtYXJpcy5maWVsZC4ke2ZpZWxkTmFtZX0uYXR0cmlidXRlc2BdO1xuICAgIC8vIE5vdGhpbmcgZm91bmQgaW4gc2V0dGluZ3M6IHJldHVybiBkZWZhdWx0c1xuICAgIGlmICghdmFsdWUpIHJldHVybiBkZWZhdWx0QXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXTtcblxuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpO1xuICB9XG5cbiAgZ2V0UGFnZUZpZWxkRGVmYXVsdFZhbHVlKHBhZ2VJZDogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFnZVNldHRpbmdzKHBhZ2VJZCwgYGZpZWxkLiR7ZmllbGROYW1lfS5kZWZhdWx0VmFsdWVgKTtcbiAgfVxuXG4gIGdldCBvcHRpb25EZWZzKCk6IEZvcm1GaWVsZERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkRlZnM7XG4gIH1cblxuICByZWdpc3Rlck9wdGlvbihkZWY6IEZvcm1GaWVsZERlZmluaXRpb24pIHtcbiAgICBpZiAodGhpcy5fb3B0aW9uRGVmcy5maW5kSW5kZXgoZiA9PiBmLmtleSA9PT0gZGVmLmtleSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFkZGl0aW9uYWwgYWRkaXRpb25hbCBwcm9wZXJ0eSB7JHtkZWYua2V5fX0gYWxyZWFkeSBkZWZpbmUuYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW3NldHRpbmdzXSBBZGRpbmcgYWRkaXRpb25hbCBwcm9wZXJ0eSB7JHtkZWYua2V5fX1gLCBkZWYpO1xuICAgIHRoaXMuX29wdGlvbkRlZnMucHVzaChkZWYpO1xuICB9XG5cbiAgcmVnaXN0ZXJPcHRpb25zKGRlZnM6IEZvcm1GaWVsZERlZmluaXRpb25bXSkge1xuICAgIChkZWZzIHx8IFtdKS5mb3JFYWNoKGRlZiA9PiB0aGlzLnJlZ2lzdGVyT3B0aW9uKGRlZikpO1xuICB9XG5cbiAgYXN5bmMgYWRkVG9QYWdlSGlzdG9yeShwYWdlOiBIaXN0b3J5UGFnZVJlZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzPzogQWRkVG9QYWdlSGlzdG9yeU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUhpc3Rvcnk/OiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdIC8vIHVzZWQgZm9yIHJlY3Vyc2l2ZSBjYWxsIHRvIGNoaWxkcmVuXG4gICkge1xuICAgIC8vIElmIG5vdCBpbnNpZGUgcmVjdXJzaXZlIGNhbGw6IGZpbGwgcGFnZSBoaXN0b3J5IGRlZmF1bHRzXG4gICAgaWYgKCFwYWdlSGlzdG9yeSkgdGhpcy5maWxsUGFnZUhpc3RvcnlEZWZhdWx0cyhwYWdlLCBvcHRzKTtcblxuICAgIHBhZ2VIaXN0b3J5ID0gcGFnZUhpc3RvcnkgfHwgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeTtcblxuICAgIGNvbnN0IGluZGV4ID0gcGFnZUhpc3RvcnkuZmluZEluZGV4KHAgPT4gKFxuICAgICAgLy8gc2FtZSBwYXRoXG4gICAgICBwLnBhdGggPT09IHBhZ2UucGF0aFxuICAgICAgLy8gb3Igc3ViLXBhdGhcbiAgICAgIHx8IHBhZ2UucGF0aC5zdGFydHNXaXRoKHAucGF0aCArICcvJykpXG4gICAgKTtcblxuICAgIC8vIE5ldyBwYWdlOiBpbnNlcnQgaXRcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAvL2lmICh0aGlzLl9kZWJ1ZylcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gQWRkaW5nIHBhZ2UgdG8gaGlzdG9yeTogJywgcGFnZSk7XG5cbiAgICAgIC8vIFByZXBlbmQgdG8gbGlzdFxuICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKDAsIDAsIHBhZ2UpO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgZXhpc3RpbmdQYWdlID0gcGFnZUhpc3RvcnlbaW5kZXhdO1xuXG4gICAgICAvLyBTYW1lIHBhdGg6IHJlcGxhY2UgZXhpc3RpbmcgcGFnZVxuICAgICAgaWYgKHBhZ2VIaXN0b3J5W2luZGV4XS5wYXRoID09PSBwYWdlLnBhdGgpIHtcbiAgICAgICAgLy9pZiAodGhpcy5fZGVidWcpXG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gVXBkYXRpbmcgZXhpc3RpbmcgcGFnZSBpbiBoaXN0b3J5OiAnLCBwYWdlKTtcbiAgICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICAvLyBDb3B5IGV4aXRpbmcgY2hpbGRyZW5cbiAgICAgICAgcGFnZS5jaGlsZHJlbiA9IGV4aXN0aW5nUGFnZS5jaGlsZHJlbiB8fCBbXTtcblxuICAgICAgICAvLyBQcmVwZW5kIHRvIGxpc3RcbiAgICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKDAsIDAsIHBhZ2UpO1xuICAgICAgfVxuXG4gICAgICAvLyBOb3Qgc2FtZSBwYXRoIChzaG91bGQgYmUgYSBwYXJlbnQgcGFnZSlcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgcGFyZW50J3MgY2hpbGRyZW4gYXJyYXksIGlmIG5vdCBleGlzdHNcbiAgICAgICAgZXhpc3RpbmdQYWdlLmNoaWxkcmVuID0gZXhpc3RpbmdQYWdlLmNoaWxkcmVuIHx8IFtdO1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgcGFyZW50IHRpbWVcbiAgICAgICAgZXhpc3RpbmdQYWdlLnRpbWUgPSBwYWdlLnRpbWU7XG5cbiAgICAgICAgLy8gQWRkIHBhZ2UgYXMgcGFyZW50J3MgY2hpbGRyZW4gKHJlY3Vyc2l2ZSBjYWxsKVxuICAgICAgICBhd2FpdCB0aGlzLmFkZFRvUGFnZUhpc3RvcnkocGFnZSwgb3B0cywgZXhpc3RpbmdQYWdlLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTYXZlIGxvY2FsbHkgKG9ubHkgaWYgbm90IGEgcmVjdXJzaXZlIGV4ZWN1dGlvbilcbiAgICBpZiAocGFnZUhpc3RvcnkgPT09IHRoaXMuX2RhdGEucGFnZUhpc3RvcnkpIHtcblxuICAgICAgLy8gSWYgbWF4IGhhcyBiZWVuIHJlYWNoZWQsIHJlbW92ZSBvbGQgcGFnZXNcbiAgICAgIGlmICh0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5Lmxlbmd0aCA+IHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRQYWdlcyA9IHBhZ2VIaXN0b3J5LnNwbGljZSh0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSwgcGFnZUhpc3RvcnkubGVuZ3RoIC0gdGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUpO1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFBhZ2VzIHJlbW92ZWQgZnJvbSBoaXN0b3J5OiAnLCByZW1vdmVkUGFnZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBuZXcgdmFsdWVcbiAgICAgIGF3YWl0IHRoaXMuYXBwbHlQcm9wZXJ0eSgncGFnZUhpc3RvcnknLCBwYWdlSGlzdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUGFnZUhpc3RvcnkocGF0aDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzPzoge2VtaXRFdmVudD86IGJvb2xlYW4gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUhpc3Rvcnk/OiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdIC8vIHVzZWQgZm9yIHJlY3Vyc2l2ZSBjYWxsIHRvIGNoaWxkcmVuKVxuICApIHtcbiAgICBwYWdlSGlzdG9yeSA9IHBhZ2VIaXN0b3J5IHx8IHRoaXMuX2RhdGEucGFnZUhpc3Rvcnk7XG5cbiAgICBjb25zdCBpbmRleCA9IHBhZ2VIaXN0b3J5LmZpbmRJbmRleChwID0+IHAucGF0aCA9PT0gcGF0aCk7XG4gICAgbGV0IGZvdW5kID0gaW5kZXggIT09IC0xO1xuICAgIGlmIChmb3VuZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZW1vdmUgcGFnZSBoaXN0b3J5OiAnLCBwYXRoKTtcbiAgICAgIC8vIFJlbW92ZSB2YWx1ZVxuICAgICAgcGFnZUhpc3Rvcnkuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvLyBTZWFyY2ggcGF0aCBvbiBjaGlsZHJlbiAoc3RvcCB3aGVuIGZvdW5kKVxuICAgICAgZm91bmQgPSBwYWdlSGlzdG9yeVxuICAgICAgICAubWFwKHAgPT4gcC5jaGlsZHJlbilcbiAgICAgICAgLmZpbHRlcihpc05vdEVtcHR5QXJyYXkpXG4gICAgICAgIC5maW5kSW5kZXgoY2hpbGRyZW4gPT4gdGhpcy5yZW1vdmVQYWdlSGlzdG9yeShwYXRoLCBvcHRzLCBjaGlsZHJlbikpICE9PSAtMTtcbiAgICB9XG5cbiAgICAvLyBTYXZlIGxvY2FsbHkgKG9ubHkgaWYgbm90IGEgcmVjdXJzaXZlIGV4ZWN1dGlvbilcbiAgICBpZiAoZm91bmQgJiYgcGFnZUhpc3RvcnkgPT09IHRoaXMuX2RhdGEucGFnZUhpc3RvcnkpIHtcbiAgICAgIC8vIEFwcGx5IGNoYW5nZXNcbiAgICAgIGF3YWl0IHRoaXMuYXBwbHlQcm9wZXJ0eSgncGFnZUhpc3RvcnknLCB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuICBhc3luYyBjbGVhclBhZ2VIaXN0b3J5KCkge1xuICAgIC8vIFJlc2V0IGFsbCBwYWdlIGhpc3RvcnlcbiAgICBhd2FpdCB0aGlzLmFwcGx5UHJvcGVydHkoJ3BhZ2VIaXN0b3J5JywgW10sIHtwZXJzaXN0SW1tZWRpYXRlOiB0cnVlfSk7XG4gIH1cblxuICAvKiAtLSBQcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByaXZhdGUgcmVzZXREYXRhKCkge1xuICAgIHRoaXMuX2RhdGEgPSB7Li4udGhpcy5fZGF0YSwgLi4udGhpcy5kZWZhdWx0U2V0dGluZ3N9O1xuXG4gICAgdGhpcy5fZGF0YS5sb2NhbGUgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZztcbiAgICB0aGlzLl9kYXRhLm1vYmlsZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnVzYWdlTW9kZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5ID0gW107XG5cbiAgICBjb25zdCBkZWZhdWx0UGVlciA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIgJiYgUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIHRoaXMuX2RhdGEucGVlclVybCA9IGRlZmF1bHRQZWVyICYmIGRlZmF1bHRQZWVyLnVybCB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5zdGFydGVkKSB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIHBlcnNpc3RMb2NhbGx5KGltbWVkaWF0ZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xuXG4gICAgLy8gRXhlY3V0ZSBpbW1lZGlhdGVcbiAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICBpZiAoIXRoaXMuX2RhdGEpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBSZW1vdmluZyBsb2NhbCBzZXR0aW5ncyBmcm9tIHN0b3JhZ2UnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5yZW1vdmUoU0VUVElOR1NfU1RPUkFHRV9LRVkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gU3RvcmUgbG9jYWwgc2V0dGluZ3MnLCB0aGlzLl9kYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5zZXQoU0VUVElOR1NfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMuX2RhdGEpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIHdpdGggZGVsYXlcbiAgICBlbHNlIHtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBldmVudCBlbWl0dGVyXG4gICAgICBpZiAoIXRoaXMuXyRwZXJzaXN0KSB7XG4gICAgICAgIHRoaXMuXyRwZXJzaXN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KHRydWUpO1xuICAgICAgICB0aGlzLl8kcGVyc2lzdFxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwMDApLCAvLyBhZGQgYSBkZWxheSBvZiAyc1xuICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuc3RhcnRlZClcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnBlcnNpc3RMb2NhbGx5KHRydWUpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fJHBlcnNpc3QuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsbFBhZ2VIaXN0b3J5RGVmYXVsdHMocGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UsIG9wdHM/OiB7XG4gICAgICByZW1vdmVQYXRoUXVlcnlQYXJhbXM/OiBib29sZWFuO1xuICAgIHJlbW92ZVRpdGxlU21hbGxUYWc/OiBib29sZWFuO1xuICB9KTogSGlzdG9yeVBhZ2VSZWZlcmVuY2Uge1xuICAgIGlmICghcGFnZSB8fCAhcGFnZS50aXRsZSB8fCAhcGFnZS5wYXRoKSB0aHJvdyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCBcXCdwYWdlXFwnLCBcXCdwYWdlLnBhdGhcXCcgb3IgXFwncGFnZS50aXRsZVxcJycpO1xuXG4gICAgLy8gU2V0IHRpbWVcbiAgICBwYWdlLnRpbWUgPSBwYWdlLnRpbWUgfHwgRGF0ZVV0aWxzLm1vbWVudCgpO1xuXG4gICAgLy8gQ2xlYW4gdGhlIHRpdGxlIChyZW1vdmUgPHNtYWxsPiB0YWdzKVxuICAgIGlmICghb3B0cyB8fCBvcHRzLnJlbW92ZVRpdGxlU21hbGxUYWcgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCB0YWdJbmRleCA9IHBhZ2UudGl0bGUuaW5kZXhPZignPC9zbWFsbD4nKTtcbiAgICAgIGlmICh0YWdJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgcGFnZS50aXRsZSA9IHBhZ2UudGl0bGUuc3Vic3RyaW5nKHRhZ0luZGV4ICsgJzwvc21hbGw+Jy5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgcGFnZS50aXRsZSA9IHBhZ2UudGl0bGUucmVwbGFjZSgvWyBdKmNsYXNzPSdoaWRkZW4teHMgaGlkZGVuLXNtJy9nLCAnJyk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHF1ZXJ5IHBhcmFtc1xuICAgIGlmICghb3B0cyB8fCBvcHRzLnJlbW92ZVBhdGhRdWVyeVBhcmFtcyAhPT0gZmFsc2UpIHtcbiAgICAgIHBhZ2UucGF0aCA9IHBhZ2UucGF0aC5yZXBsYWNlKC9bP10uKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cbn1cbiJdfQ==
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpGLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUl4QyxPQUFPLEVBQUMsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNsSSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBSTdCLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsT0FBTyxFQUFDLFdBQVcsRUFBYyxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDL0UsT0FBTyxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBRTdELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUEsY0FBYyxDQUFDLENBQUM7QUFFakYsb0RBQW9EO0FBQ3BELE1BQU0sZ0JBQWdCLEdBQWtCO0lBQ3RDLGtCQUFrQixF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LENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDakU7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLHFCQUFxQixLQUFLLEtBQUssRUFBRTtZQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM3QztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7a0hBcmVVLG9CQUFvQixpR0F1Q3JCLFdBQVcsYUFDQyxrQkFBa0IsNkJBQ2xCLDBCQUEwQjtzSEF6Q3JDLG9CQUFvQixjQUhuQixNQUFNOzRGQUdQLG9CQUFvQjtrQkFKaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtvQkFDbEIsd0RBQXdEO2lCQUN6RDs7MEJBd0NJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDckMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2NhbFNldHRpbmdzLCBPZmZsaW5lRmVhdHVyZSwgVXNhZ2VNb2RlfSBmcm9tICcuL21vZGVsL3NldHRpbmdzLm1vZGVsJztcbmltcG9ydCB7UGVlcn0gZnJvbSAnLi9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1N0b3JhZ2V9IGZyb20gJ0Bpb25pYy9zdG9yYWdlLWFuZ3VsYXInO1xuXG5pbXBvcnQge2VxdWFscywgZ2V0UHJvcGVydHlCeVBhdGgsIGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFua30gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQge01vbWVudH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TGF0TG9uZ1BhdHRlcm59IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9sYXRsb25nL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVCwgRW52aXJvbm1lbnR9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQge2Vudmlyb25tZW50fSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtEYXRlVXRpbHMsIGZyb21EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHtIaXN0b3J5UGFnZVJlZmVyZW5jZX0gZnJvbSAnLi9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7U3RhcnRhYmxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7aXNDYXBhY2l0b3IsIGlzTW9iaWxlfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcblxuZXhwb3J0IGNvbnN0IFNFVFRJTkdTX1NUT1JBR0VfS0VZID0gJ3NldHRpbmdzJztcbmV4cG9ydCBjb25zdCBTRVRUSU5HU19UUkFOU0lFTlRfUFJPUEVSVElFUyA9IFsnbW9iaWxlJywgJ3RvdWNoVWknLypkZXByZWNhdGVkKi9dO1xuXG4vLyBmaXhtZTogdGhpcyBjb25zdGFudCBwb2ludHMgdG8gc3RhdGljIGVudmlyb25tZW50XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBMb2NhbFNldHRpbmdzID0ge1xuICBhY2NvdW50SW5oZXJpdGFuY2U6IHRydWUsXG4gIGxvY2FsZTogZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSxcbiAgbGF0TG9uZ0Zvcm1hdDogZW52aXJvbm1lbnQuZGVmYXVsdExhdExvbmdGb3JtYXQgfHwgJ0RETU0nLFxuICBwYWdlSGlzdG9yeU1heFNpemU6IDNcbn07XG5cbmV4cG9ydCBjb25zdCBBUFBfTE9DQUxfU0VUVElOR1MgPSBuZXcgSW5qZWN0aW9uVG9rZW48UGFydGlhbDxMb2NhbFNldHRpbmdzPj4oJ0RlZmF1bHRMb2NhbFNldHRpbmdzJyk7XG5leHBvcnQgY29uc3QgQVBQX0xPQ0FMX1NFVFRJTkdTX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48Rm9ybUZpZWxkRGVmaW5pdGlvbk1hcD4oJ0xvY2FsU2V0dGluZ3NPcHRpb25zJyk7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucyB7XG4gIHJlbW92ZVBhdGhRdWVyeVBhcmFtcz86IGJvb2xlYW47XG4gIHJlbW92ZVRpdGxlU21hbGxUYWc/OiBib29sZWFuO1xuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xuICAvL2RlcHM6IFtBUFBfTE9DQUxfU0VUVElOR1MsIEFQUF9MT0NBTF9TRVRUSU5HU19PUFRJT05TXVxufSlcbmV4cG9ydCBjbGFzcyBMb2NhbFNldHRpbmdzU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8TG9jYWxTZXR0aW5ncz4ge1xuXG4gIG9uQ2hhbmdlID0gbmV3IFN1YmplY3Q8TG9jYWxTZXR0aW5ncz4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25EZWZzOiBGb3JtRmllbGREZWZpbml0aW9uW107XG4gIHByaXZhdGUgXyRwZXJzaXN0OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBnZXQgc2V0dGluZ3MoKTogTG9jYWxTZXR0aW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gIH1cblxuICBnZXQgbG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sb2NhbGUgfHwgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdGhpcy50cmFuc2xhdGUuZGVmYXVsdExhbmc7XG4gIH1cblxuICBnZXQgbGF0TG9uZ0Zvcm1hdCgpOiBMYXRMb25nUGF0dGVybiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sYXRMb25nRm9ybWF0IHx8ICdERE1NJztcbiAgfVxuXG4gIGdldCB1c2FnZU1vZGUoKTogVXNhZ2VNb2RlIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fZGF0YS51c2FnZU1vZGUpID8gdGhpcy5fZGF0YS51c2FnZU1vZGUgOiAoaXNDYXBhY2l0b3Iod2luZG93KSB8fCBpc01vYmlsZSh3aW5kb3cpID8gJ0ZJRUxEJyA6ICdERVNLJyk7XG4gIH1cblxuICBnZXQgbW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05vdE5pbCh0aGlzLl9kYXRhLm1vYmlsZSkgPyB0aGlzLl9kYXRhLm1vYmlsZSA6IGlzTW9iaWxlKHdpbmRvdyk7XG4gIH1cblxuICBzZXQgbW9iaWxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGF0YS5tb2JpbGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBwYWdlSGlzdG9yeSgpOiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdIHtcbiAgICByZXR1cm4gKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSB8fCBbXSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0NBTF9TRVRUSU5HUykgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U2V0dGluZ3M6IExvY2FsU2V0dGluZ3MsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9DQUxfU0VUVElOR1NfT1BUSU9OUykgZGVmYXVsdE9wdGlvbnNNYXA6IEZvcm1GaWVsZERlZmluaXRpb25NYXBcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0gey4uLkRFRkFVTFRfU0VUVElOR1MsIC4uLnRoaXMuZGVmYXVsdFNldHRpbmdzfTtcblxuICAgIHRoaXMuX29wdGlvbkRlZnMgPSBPYmplY3QudmFsdWVzKGRlZmF1bHRPcHRpb25zTWFwKTtcblxuICAgIHRoaXMucmVzZXREYXRhKCk7XG5cbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG4gIH1cblxuICBuZ09uU3RhcnQoKTogUHJvbWlzZTxMb2NhbFNldHRpbmdzPiB7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tzZXR0aW5nc10gU3RhcnRpbmcgc2VydmljZS4uLicpO1xuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZVxuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdGhpcy5tb2JpbGU7XG4gICAgdGhpcy5fZGF0YS51c2FnZU1vZGUgPSB0aGlzLnVzYWdlTW9kZTtcblxuICAgIC8vIFJlc3RvcmluZyBsb2NhbCBzZXR0aW5nc1xuICAgIHJldHVybiB0aGlzLnJlc3RvcmVMb2NhbGx5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXNldERhdGEoKTtcbiAgfVxuXG4gIGlzVXNhZ2VNb2RlKG1vZGU6IFVzYWdlTW9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVzYWdlTW9kZSA9PT0gbW9kZTtcbiAgfVxuXG4gIGlzT25GaWVsZE1vZGUodmFsdWU/OiBVc2FnZU1vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHZhbHVlIHx8IHRoaXMudXNhZ2VNb2RlKSA9PT0gJ0ZJRUxEJztcbiAgfVxuXG4gIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8TG9jYWxTZXR0aW5ncyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBkYXRhID0gdGhpcy5fZGF0YSB8fCA8TG9jYWxTZXR0aW5ncz57fTtcblxuICAgIC8vIFJlc3RvcmUgZnJvbSBzdG9yYWdlXG4gICAgY29uc3Qgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcblxuICAgIC8vIFJlc3RvcmUgbG9jYWwgc2V0dGluZ3MgKG9yIGtlZXAgb2xkIHNldHRpbmdzKVxuICAgIGlmIChpc05vdE5pbChzZXR0aW5ncykpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3NldHRpbmdzXSBSZXN0b3JpbmcgcHJldmlvdXMgc2V0dGluZ3MuLi4nKTtcblxuICAgICAgY29uc3QgcmVzdG9yZWREYXRhID0gKHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycpID8gSlNPTi5wYXJzZShzZXR0aW5ncykgOiBzZXR0aW5ncztcblxuICAgICAgLy8gQXZvaWQgdG8gb3ZlcnJpZGUgdHJhbnNpZW50IHByb3BlcnRpZXNcbiAgICAgIFNFVFRJTkdTX1RSQU5TSUVOVF9QUk9QRVJUSUVTLmZvckVhY2godHJhbnNpZW50S2V5ID0+IHtcbiAgICAgICAgZGVsZXRlIHJlc3RvcmVkRGF0YVt0cmFuc2llbnRLZXldO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE1lcmdlIGludG8gZXhpc3RpbmcgZGF0YVxuICAgICAgZGF0YSA9IE9iamVjdC5hc3NpZ24oZGF0YSwgcmVzdG9yZWREYXRhKTtcbiAgICB9XG5cbiAgICAvLyBFbWl0IGV2ZW50XG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KGRhdGEpO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzZXRQcm9wZXJ0eTxUID0gc3RyaW5nPihrZXlPckRlZjogc3RyaW5nfEZvcm1GaWVsZERlZmluaXRpb24sIHZhbHVlOiBUKXtcbiAgICBpZiAoIXRoaXMuX2RhdGEgfHwgIWtleU9yRGVmKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBrZXlPckRlZiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2RhdGEucHJvcGVydGllcyA9IHRoaXMuX2RhdGEucHJvcGVydGllcyB8fCB7fTtcbiAgICB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdID0gaXNOaWwodmFsdWUpID8gdW5kZWZpbmVkIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldFByb3BlcnR5KGtleU9yRGVmOiBzdHJpbmd8Rm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIGtleU9yRGVmID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHkoa2V5T3JEZWYua2V5LCBpc05pbChkZWZhdWx0VmFsdWUpID8ga2V5T3JEZWYuZGVmYXVsdFZhbHVlIDogZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucHJvcGVydGllcyAmJiB0aGlzLl9kYXRhLnByb3BlcnRpZXNba2V5T3JEZWZdO1xuICAgIHJldHVybiBpc05vdE5pbCh2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNCb29sZWFuKGRlZmluaXRpb246IEZvcm1GaWVsZERlZmluaXRpb24sIGRlZmF1bHRWYWx1ZT86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gKHZhbHVlICYmIHZhbHVlICE9PSAnZmFsc2UnKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFByb3BlcnR5QXNJbnQoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gaXNOb3ROaWwodmFsdWUpID8gcGFyc2VJbnQodmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydHlBc051bWJlcnMoZGVmaW5pdGlvbjogRm9ybUZpZWxkRGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlPzogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFByb3BlcnR5KGRlZmluaXRpb24sIGRlZmF1bHRWYWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcChwYXJzZUZsb2F0KSB8fCB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGlzTm90TmlsKHZhbHVlKSA/IFtwYXJzZUZsb2F0KHZhbHVlKV0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRQcm9wZXJ0eUFzU3RyaW5ncyhkZWZpbml0aW9uOiBGb3JtRmllbGREZWZpbml0aW9uLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHkoZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKTtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuc3BsaXQoJywnKSB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyBhcHBseShzZXR0aW5nczogUGFydGlhbDxMb2NhbFNldHRpbmdzPiwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgcGVyc2lzdEltbWVkaWF0ZT86IGJvb2xlYW4gfSkge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLl9kYXRhLCAuLi5zZXR0aW5nc307XG5cbiAgICBpZiAoZXF1YWxzKGRhdGEsIHRoaXMuX2RhdGEpKSByZXR1cm47IC8vIFNraXAgaWYgbm8gY2hhbmdlc1xuXG4gICAgdGhpcy5fZGF0YSA9IGRhdGE7XG5cbiAgICAvLyBTYXZlIGxvY2FsbHlcbiAgICBpZiAob3B0cyAmJiBvcHRzLnBlcnNpc3RJbW1lZGlhdGUpIHtcbiAgICAgIGF3YWl0IHRoaXMucGVyc2lzdExvY2FsbHkodHJ1ZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpOyAvLyBObyBBV0FJVFxuICAgIH1cblxuICAgIC8vIEVtaXQgZXZlbnRcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy5fZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYXBwbHlQcm9wZXJ0eShrZXk6IGtleW9mIExvY2FsU2V0dGluZ3MsIHZhbHVlOiBhbnksIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW47IHBlcnNpc3RJbW1lZGlhdGU/OiBib29sZWFuIH0pIHtcbiAgICBjb25zdCBjaGFuZ2VzID0ge307XG4gICAgY2hhbmdlc1trZXldID0gdmFsdWU7XG4gICAgYXdhaXQgdGhpcy5hcHBseShjaGFuZ2VzLCBvcHRzKTtcbiAgfVxuXG4gIGdldFBhZ2VTZXR0aW5nczxUID0gYW55PihwYWdlSWQ6IHN0cmluZywgcHJvcGVydHlOYW1lPzogc3RyaW5nKTogVCB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8ICF0aGlzLl9kYXRhLnBhZ2VzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGtleSA9IHBhZ2VJZC5yZXBsYWNlKC9bL10vZywgJ19fJyk7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgodGhpcy5fZGF0YS5wYWdlcywga2V5ICsgJy4nICsgcHJvcGVydHlOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEucGFnZXNba2V5XTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVQYWdlU2V0dGluZyhwYWdlSWQ6IHN0cmluZywgdmFsdWU6IGFueSwgcHJvcGVydHlOYW1lPzogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEgfHwgdGhpcy5kZWZhdWx0U2V0dGluZ3M7XG4gICAgdGhpcy5fZGF0YS5wYWdlcyA9IHRoaXMuX2RhdGEucGFnZXMgfHwge307XG5cbiAgICBjb25zdCBrZXkgPSBwYWdlSWQucmVwbGFjZSgvWy9dL2csICdfXycpO1xuICAgIGlmIChwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XSA9IHRoaXMuX2RhdGEucGFnZXNba2V5XSB8fCB7fTtcbiAgICAgIHRoaXMuX2RhdGEucGFnZXNba2V5XVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YS5wYWdlc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHNldHRpbmdzXG4gICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpO1xuICB9XG5cblxuICBnZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZTogc3RyaW5nKTogT2ZmbGluZUZlYXR1cmUge1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCAhdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMgfHwgaXNFbXB0eUFycmF5KHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzKSlcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKCFmZWF0dXJlTmFtZSkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgXFwnZmVhdHVyZU5hbWVcXCcgYXJndW1lbnQnKTtcblxuICAgIGZlYXR1cmVOYW1lID0gZmVhdHVyZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBmZWF0dXJlUHJlZml4ID0gZmVhdHVyZU5hbWUgKyAnIyc7XG4gICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzLmZpbmQoZiA9PiB7XG4gICAgICBpZiAodHlwZW9mIGYgPT09ICdzdHJpbmcnKSByZXR1cm4gZi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoZmVhdHVyZVByZWZpeCk7XG4gICAgICBpZiAoZiAmJiB0eXBlb2YgZiA9PT0gJ29iamVjdCcgJiYgZi5uYW1lKSByZXR1cm4gZi5uYW1lID09PSBmZWF0dXJlTmFtZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBpZiAoIWZlYXR1cmUpIHJldHVybjsgLy8gTm90IGZvdW5kXG4gICAgaWYgKHR5cGVvZiBmZWF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgbGFzdFN5bmNEYXRlID0gZmVhdHVyZS5zdWJzdHJpbmcoZmVhdHVyZVByZWZpeC5sZW5ndGgpO1xuICAgICAgY29uc29sZS5kZWJ1ZyhgWyR7ZmVhdHVyZU5hbWV9XSBMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlOiAke2xhc3RTeW5jRGF0ZX1gKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGZlYXR1cmVOYW1lLFxuICAgICAgICBsYXN0U3luY0RhdGVcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmZWF0dXJlO1xuICB9XG5cbiAgZ2V0T2ZmbGluZUZlYXR1cmVMYXN0U3luY0RhdGUoZmVhdHVyZU5hbWU6IHN0cmluZyk6IE1vbWVudCB7XG4gICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZ2V0T2ZmbGluZUZlYXR1cmUoZmVhdHVyZU5hbWUpO1xuICAgIHJldHVybiBmZWF0dXJlICYmIGZyb21EYXRlSVNPU3RyaW5nKGZlYXR1cmUubGFzdFN5bmNEYXRlKTtcbiAgfVxuXG4gIGhhc09mZmxpbmVGZWF0dXJlKGZlYXR1cmVOYW1lPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKGZlYXR1cmVOYW1lKSByZXR1cm4gaXNOb3ROaWwodGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSkpO1xuICAgIHJldHVybiB0aGlzLl9kYXRhICYmIGlzTm90RW1wdHlBcnJheSh0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyk7XG4gIH1cblxuICBzYXZlT2ZmbGluZUZlYXR1cmUoZmVhdHVyZTogT2ZmbGluZUZlYXR1cmUpIHtcbiAgICB0aGlzLl9kYXRhID0gdGhpcy5fZGF0YSB8fCB0aGlzLmRlZmF1bHRTZXR0aW5ncztcbiAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcyA9IHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzIHx8IFtdO1xuXG4gICAgZmVhdHVyZS5uYW1lID0gZmVhdHVyZS5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBjb25zdCBmZWF0dXJlUHJlZml4ID0gZmVhdHVyZS5uYW1lICsgJyMnO1xuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlcy5maW5kSW5kZXgoZiA9PiB7XG4gICAgICBpZiAodHlwZW9mIGYgPT09ICdzdHJpbmcnKSByZXR1cm4gZi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoZmVhdHVyZVByZWZpeCk7XG4gICAgICBpZiAoZiAmJiB0eXBlb2YgZiA9PT0gJ29iamVjdCcgJiYgZi5uYW1lKSByZXR1cm4gZi5uYW1lID09PSBmZWF0dXJlLm5hbWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9kYXRhLm9mZmxpbmVGZWF0dXJlc1tleGlzdGluZ0luZGV4XSA9IGZlYXR1cmU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMucHVzaChmZWF0dXJlKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbG9jYWwgc2V0dGluZ3NcbiAgICB0aGlzLnBlcnNpc3RMb2NhbGx5KCk7XG4gIH1cblxuICBtYXJrT2ZmbGluZUZlYXR1cmVBc1N5bmMoZmVhdHVyZU5hbWU6IHN0cmluZykge1xuICAgIGxldCBmZWF0dXJlID0gdGhpcy5nZXRPZmZsaW5lRmVhdHVyZShmZWF0dXJlTmFtZSk7XG5cbiAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgIGZlYXR1cmUgPSA8T2ZmbGluZUZlYXR1cmU+e1xuICAgICAgICBuYW1lOiBmZWF0dXJlTmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBsYXN0U3luY0RhdGU6IERhdGVVdGlscy5tb21lbnQoKS50b0lTT1N0cmluZygpXG4gICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZlYXR1cmUubGFzdFN5bmNEYXRlID0gRGF0ZVV0aWxzLm1vbWVudCgpLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zYXZlT2ZmbGluZUZlYXR1cmUoZmVhdHVyZSk7XG4gIH1cblxuICByZW1vdmVPZmZsaW5lRmVhdHVyZXMoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5vZmZsaW5lRmVhdHVyZXMpIHtcbiAgICAgIHRoaXMuX2RhdGEub2ZmbGluZUZlYXR1cmVzID0gW107XG5cbiAgICAgIC8vIFVwZGF0ZSBsb2NhbCBzZXR0aW5nc1xuICAgICAgdGhpcy5wZXJzaXN0TG9jYWxseSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkRGlzcGxheUF0dHJpYnV0ZXMoZmllbGROYW1lOiBzdHJpbmcsIGRlZmF1bHRBdHRyaWJ1dGVzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEucHJvcGVydGllcyAmJiAgdGhpcy5fZGF0YS5wcm9wZXJ0aWVzW2BzdW1hcmlzLmZpZWxkLiR7ZmllbGROYW1lfS5hdHRyaWJ1dGVzYF07XG4gICAgLy8gTm90aGluZyBmb3VuZCBpbiBzZXR0aW5nczogcmV0dXJuIGRlZmF1bHRzXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGRlZmF1bHRBdHRyaWJ1dGVzIHx8IFsnbGFiZWwnLCAnbmFtZSddO1xuXG4gICAgcmV0dXJuIHZhbHVlLnNwbGl0KCcsJyk7XG4gIH1cblxuICBnZXRQYWdlRmllbGREZWZhdWx0VmFsdWUocGFnZUlkOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlU2V0dGluZ3MocGFnZUlkLCBgZmllbGQuJHtmaWVsZE5hbWV9LmRlZmF1bHRWYWx1ZWApO1xuICB9XG5cbiAgZ2V0IG9wdGlvbkRlZnMoKTogRm9ybUZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRGVmcztcbiAgfVxuXG4gIHJlZ2lzdGVyT3B0aW9uKGRlZjogRm9ybUZpZWxkRGVmaW5pdGlvbikge1xuICAgIGlmICh0aGlzLl9vcHRpb25EZWZzLmZpbmRJbmRleChmID0+IGYua2V5ID09PSBkZWYua2V5KSAhPT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQWRkaXRpb25hbCBhZGRpdGlvbmFsIHByb3BlcnR5IHske2RlZi5rZXl9fSBhbHJlYWR5IGRlZmluZS5gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbc2V0dGluZ3NdIEFkZGluZyBhZGRpdGlvbmFsIHByb3BlcnR5IHske2RlZi5rZXl9fWAsIGRlZik7XG4gICAgdGhpcy5fb3B0aW9uRGVmcy5wdXNoKGRlZik7XG4gIH1cblxuICByZWdpc3Rlck9wdGlvbnMoZGVmczogRm9ybUZpZWxkRGVmaW5pdGlvbltdKSB7XG4gICAgKGRlZnMgfHwgW10pLmZvckVhY2goZGVmID0+IHRoaXMucmVnaXN0ZXJPcHRpb24oZGVmKSk7XG4gIH1cblxuICBhc3luYyBhZGRUb1BhZ2VIaXN0b3J5KHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiBBZGRUb1BhZ2VIaXN0b3J5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSGlzdG9yeT86IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10gLy8gdXNlZCBmb3IgcmVjdXJzaXZlIGNhbGwgdG8gY2hpbGRyZW5cbiAgKSB7XG4gICAgLy8gSWYgbm90IGluc2lkZSByZWN1cnNpdmUgY2FsbDogZmlsbCBwYWdlIGhpc3RvcnkgZGVmYXVsdHNcbiAgICBpZiAoIXBhZ2VIaXN0b3J5KSB0aGlzLmZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKHBhZ2UsIG9wdHMpO1xuXG4gICAgcGFnZUhpc3RvcnkgPSBwYWdlSGlzdG9yeSB8fCB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5O1xuXG4gICAgY29uc3QgaW5kZXggPSBwYWdlSGlzdG9yeS5maW5kSW5kZXgocCA9PiAoXG4gICAgICAvLyBzYW1lIHBhdGhcbiAgICAgIHAucGF0aCA9PT0gcGFnZS5wYXRoXG4gICAgICAvLyBvciBzdWItcGF0aFxuICAgICAgfHwgcGFnZS5wYXRoLnN0YXJ0c1dpdGgocC5wYXRoICsgJy8nKSlcbiAgICApO1xuXG4gICAgLy8gTmV3IHBhZ2U6IGluc2VydCBpdFxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vaWYgKHRoaXMuX2RlYnVnKVxuICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBBZGRpbmcgcGFnZSB0byBoaXN0b3J5OiAnLCBwYWdlKTtcblxuICAgICAgLy8gUHJlcGVuZCB0byBsaXN0XG4gICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoMCwgMCwgcGFnZSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBleGlzdGluZ1BhZ2UgPSBwYWdlSGlzdG9yeVtpbmRleF07XG5cbiAgICAgIC8vIFNhbWUgcGF0aDogcmVwbGFjZSBleGlzdGluZyBwYWdlXG4gICAgICBpZiAocGFnZUhpc3RvcnlbaW5kZXhdLnBhdGggPT09IHBhZ2UucGF0aCkge1xuICAgICAgICAvL2lmICh0aGlzLl9kZWJ1ZylcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBVcGRhdGluZyBleGlzdGluZyBwYWdlIGluIGhpc3Rvcnk6ICcsIHBhZ2UpO1xuICAgICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIC8vIENvcHkgZXhpdGluZyBjaGlsZHJlblxuICAgICAgICBwYWdlLmNoaWxkcmVuID0gZXhpc3RpbmdQYWdlLmNoaWxkcmVuIHx8IFtdO1xuXG4gICAgICAgIC8vIFByZXBlbmQgdG8gbGlzdFxuICAgICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoMCwgMCwgcGFnZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdCBzYW1lIHBhdGggKHNob3VsZCBiZSBhIHBhcmVudCBwYWdlKVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIENyZWF0ZSBwYXJlbnQncyBjaGlsZHJlbiBhcnJheSwgaWYgbm90IGV4aXN0c1xuICAgICAgICBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gPSBleGlzdGluZ1BhZ2UuY2hpbGRyZW4gfHwgW107XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBwYXJlbnQgdGltZVxuICAgICAgICBleGlzdGluZ1BhZ2UudGltZSA9IHBhZ2UudGltZTtcblxuICAgICAgICAvLyBBZGQgcGFnZSBhcyBwYXJlbnQncyBjaGlsZHJlbiAocmVjdXJzaXZlIGNhbGwpXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkVG9QYWdlSGlzdG9yeShwYWdlLCBvcHRzLCBleGlzdGluZ1BhZ2UuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNhdmUgbG9jYWxseSAob25seSBpZiBub3QgYSByZWN1cnNpdmUgZXhlY3V0aW9uKVxuICAgIGlmIChwYWdlSGlzdG9yeSA9PT0gdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSkge1xuXG4gICAgICAvLyBJZiBtYXggaGFzIGJlZW4gcmVhY2hlZCwgcmVtb3ZlIG9sZCBwYWdlc1xuICAgICAgaWYgKHRoaXMuX2RhdGEucGFnZUhpc3RvcnkubGVuZ3RoID4gdGhpcy5fZGF0YS5wYWdlSGlzdG9yeU1heFNpemUpIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZFBhZ2VzID0gcGFnZUhpc3Rvcnkuc3BsaWNlKHRoaXMuX2RhdGEucGFnZUhpc3RvcnlNYXhTaXplLCBwYWdlSGlzdG9yeS5sZW5ndGggLSB0aGlzLl9kYXRhLnBhZ2VIaXN0b3J5TWF4U2l6ZSk7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tzZXR0aW5nc10gUGFnZXMgcmVtb3ZlZCBmcm9tIGhpc3Rvcnk6ICcsIHJlbW92ZWRQYWdlcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFwcGx5IG5ldyB2YWx1ZVxuICAgICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIHBhZ2VIaXN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVQYWdlSGlzdG9yeShwYXRoOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSGlzdG9yeT86IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10gLy8gdXNlZCBmb3IgcmVjdXJzaXZlIGNhbGwgdG8gY2hpbGRyZW4pXG4gICkge1xuICAgIHBhZ2VIaXN0b3J5ID0gcGFnZUhpc3RvcnkgfHwgdGhpcy5fZGF0YS5wYWdlSGlzdG9yeTtcblxuICAgIGNvbnN0IGluZGV4ID0gcGFnZUhpc3RvcnkuZmluZEluZGV4KHAgPT4gcC5wYXRoID09PSBwYXRoKTtcbiAgICBsZXQgZm91bmQgPSBpbmRleCAhPT0gLTE7XG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFJlbW92ZSBwYWdlIGhpc3Rvcnk6ICcsIHBhdGgpO1xuICAgICAgLy8gUmVtb3ZlIHZhbHVlXG4gICAgICBwYWdlSGlzdG9yeS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vIFNlYXJjaCBwYXRoIG9uIGNoaWxkcmVuIChzdG9wIHdoZW4gZm91bmQpXG4gICAgICBmb3VuZCA9IHBhZ2VIaXN0b3J5XG4gICAgICAgIC5tYXAocCA9PiBwLmNoaWxkcmVuKVxuICAgICAgICAuZmlsdGVyKGlzTm90RW1wdHlBcnJheSlcbiAgICAgICAgLmZpbmRJbmRleChjaGlsZHJlbiA9PiB0aGlzLnJlbW92ZVBhZ2VIaXN0b3J5KHBhdGgsIG9wdHMsIGNoaWxkcmVuKSkgIT09IC0xO1xuICAgIH1cblxuICAgIC8vIFNhdmUgbG9jYWxseSAob25seSBpZiBub3QgYSByZWN1cnNpdmUgZXhlY3V0aW9uKVxuICAgIGlmIChmb3VuZCAmJiBwYWdlSGlzdG9yeSA9PT0gdGhpcy5fZGF0YS5wYWdlSGlzdG9yeSkge1xuICAgICAgLy8gQXBwbHkgY2hhbmdlc1xuICAgICAgYXdhaXQgdGhpcy5hcHBseVByb3BlcnR5KCdwYWdlSGlzdG9yeScsIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyUGFnZUhpc3RvcnkoKSB7XG4gICAgLy8gUmVzZXQgYWxsIHBhZ2UgaGlzdG9yeVxuICAgIGF3YWl0IHRoaXMuYXBwbHlQcm9wZXJ0eSgncGFnZUhpc3RvcnknLCBbXSwge3BlcnNpc3RJbW1lZGlhdGU6IHRydWV9KTtcbiAgfVxuXG4gIC8qIC0tIFByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJpdmF0ZSByZXNldERhdGEoKSB7XG4gICAgdGhpcy5fZGF0YSA9IHsuLi50aGlzLl9kYXRhLCAuLi50aGlzLmRlZmF1bHRTZXR0aW5nc307XG5cbiAgICB0aGlzLl9kYXRhLmxvY2FsZSA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nIHx8IHRoaXMudHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xuICAgIHRoaXMuX2RhdGEubW9iaWxlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RhdGEudXNhZ2VNb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RhdGEucGFnZUhpc3RvcnkgPSBbXTtcblxuICAgIGNvbnN0IGRlZmF1bHRQZWVyID0gdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlciAmJiBQZWVyLmZyb21PYmplY3QodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcik7XG4gICAgdGhpcy5fZGF0YS5wZWVyVXJsID0gZGVmYXVsdFBlZXIgJiYgZGVmYXVsdFBlZXIudXJsIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLl9kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyc2lzdExvY2FsbHkoaW1tZWRpYXRlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XG5cbiAgICAvLyBFeGVjdXRlIGltbWVkaWF0ZVxuICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgIGlmICghdGhpcy5fZGF0YSkge1xuICAgICAgICBjb25zb2xlLmRlYnVnKCdbc2V0dGluZ3NdIFJlbW92aW5nIGxvY2FsIHNldHRpbmdzIGZyb20gc3RvcmFnZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnJlbW92ZShTRVRUSU5HU19TVE9SQUdFX0tFWSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3NldHRpbmdzXSBTdG9yZSBsb2NhbCBzZXR0aW5ncycsIHRoaXMuX2RhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLnNldChTRVRUSU5HU19TVE9SQUdFX0tFWSwgdGhpcy5fZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIGRlbGF5XG4gICAgZWxzZSB7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgZW1pdHRlclxuICAgICAgaWYgKCF0aGlzLl8kcGVyc2lzdCkge1xuICAgICAgICB0aGlzLl8kcGVyc2lzdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55Pih0cnVlKTtcbiAgICAgICAgdGhpcy5fJHBlcnNpc3RcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMDAwKSwgLy8gYWRkIGEgZGVsYXkgb2YgMnNcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLnN0YXJ0ZWQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wZXJzaXN0TG9jYWxseSh0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyRwZXJzaXN0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbGxQYWdlSGlzdG9yeURlZmF1bHRzKHBhZ2U6IEhpc3RvcnlQYWdlUmVmZXJlbmNlLCBvcHRzPzoge1xuICAgICAgcmVtb3ZlUGF0aFF1ZXJ5UGFyYW1zPzogYm9vbGVhbjtcbiAgICByZW1vdmVUaXRsZVNtYWxsVGFnPzogYm9vbGVhbjtcbiAgfSk6IEhpc3RvcnlQYWdlUmVmZXJlbmNlIHtcbiAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UudGl0bGUgfHwgIXBhZ2UucGF0aCkgdGhyb3cgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgXFwncGFnZVxcJywgXFwncGFnZS5wYXRoXFwnIG9yIFxcJ3BhZ2UudGl0bGVcXCcnKTtcblxuICAgIC8vIFNldCB0aW1lXG4gICAgcGFnZS50aW1lID0gcGFnZS50aW1lIHx8IERhdGVVdGlscy5tb21lbnQoKTtcblxuICAgIC8vIENsZWFuIHRoZSB0aXRsZSAocmVtb3ZlIDxzbWFsbD4gdGFncylcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVUaXRsZVNtYWxsVGFnICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFnSW5kZXggPSBwYWdlLnRpdGxlLmluZGV4T2YoJzwvc21hbGw+Jyk7XG4gICAgICBpZiAodGFnSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnN1YnN0cmluZyh0YWdJbmRleCArICc8L3NtYWxsPicubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIHBhZ2UudGl0bGUgPSBwYWdlLnRpdGxlLnJlcGxhY2UoL1sgXSpjbGFzcz0naGlkZGVuLXhzIGhpZGRlbi1zbScvZywgJycpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBxdWVyeSBwYXJhbXNcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5yZW1vdmVQYXRoUXVlcnlQYXJhbXMgIT09IGZhbHNlKSB7XG4gICAgICBwYWdlLnBhdGggPSBwYWdlLnBhdGgucmVwbGFjZSgvWz9dLiokLywgJycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlO1xuICB9XG59XG4iXX0=