@wertzui/ngx-restworld-client 12.1.2 → 12.2.1

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.
@@ -173,13 +173,22 @@ export class RestWorldFormComponent {
173
173
  }
174
174
  this._messageService.add({ severity: 'error', summary: summary, detail: detail, data: response, sticky: true });
175
175
  }
176
+ else if (response.status == 201) {
177
+ if (!response.headers.has('Location')) {
178
+ this._messageService.add({ severity: 'error', summary: 'Error', detail: 'The server returned a 201 Created response, but did not return a Location header.', data: response, sticky: true });
179
+ return;
180
+ }
181
+ this._messageService.add({ severity: 'success', summary: 'Created', detail: 'The resource has been created.' });
182
+ var createdAtUri = response.headers.get('Location');
183
+ this.afterSubmit.emit({ location: createdAtUri, status: 201 });
184
+ }
176
185
  else {
177
186
  const templateBeforeSubmit = this.template;
178
187
  const responseResource = response.body;
179
188
  this.template = responseResource.getTemplateByTitle(this.template.title);
180
189
  this._formGroup = this._formService.createFormGroupFromTemplate(this.template);
181
190
  this._messageService.add({ severity: 'success', summary: 'Saved', detail: 'The resource has been saved.' });
182
- this.afterSubmit.emit({ old: templateBeforeSubmit, new: this.template });
191
+ this.afterSubmit.emit({ old: templateBeforeSubmit, new: this.template, status: 200 });
183
192
  }
184
193
  }
185
194
  catch (e) {
@@ -247,4 +256,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
247
256
  type: ContentChild,
248
257
  args: ['buttons', { static: false }]
249
258
  }] } });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1mb3JtL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZm9ybS9yZXN0d29ybGQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQThCLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUE4QixjQUFjLEVBQXNDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7OztBQUt6SDs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQXdHZDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBM0duQjs7T0FFRztJQUVILFFBQVEsQ0FBMkI7SUFHbkMsT0FBTyxDQUFVO0lBR2pCLEdBQUcsQ0FBVTtJQUViOztNQUVFO0lBRUYsV0FBVyxHQUFHLElBQUksQ0FBQztJQUVuQjs7TUFFRTtJQUVGLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFbkI7O01BRUU7SUFFRixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRW5COztNQUVFO0lBRUYsVUFBVSxHQUFHLElBQUksQ0FBQztJQUVsQjs7TUFFRTtJQUVGLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFFbEI7O01BRUU7SUFFRixVQUFVLEdBQUcsSUFBSSxDQUFDO0lBR2xCLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFD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QVU7c0JBRFQsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sV0FBVztzQkFEVixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFPUCxVQUFVO3NCQURULFlBQVk7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UsIEZvcm1zUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBQcm9wZXJ0eUR0bywgU2ltcGxlVmFsdWUsIFRlbXBsYXRlIH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcbmltcG9ydCB7IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xuXG4vKipcbiAqIEEgZm9ybSB3aXRoIFNhdmUsIFJlbG9hZCBhbmQgRGVsZXRlIGJ1dHRvbnMuXG4gKiBJZiB5b3UgZG8gbm90IHdhbnQgYnV0dG9ucywgdXNlIFJlc3RXb3JsZEZvcm1UZW1wbGF0ZUNvbXBvbmVudCA8cnctZm9ybS10ZW1wbGF0ZT4uXG4gKiBZb3UgY2FuIGFsc28gcHJvdmlkZSB5b3VyIG93biBidXR0b25zIGJ5IHBhc3NpbmcgaW4gYSB0ZW1wbGF0ZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnctZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRGb3JtQ29tcG9uZW50PFRQcm9wZXJ0eUR0b3MgZXh0ZW5kcyBSZWFkb25seUFycmF5PFByb3BlcnR5RHRvPFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4+PiBpbXBsZW1lbnRzIE9uSW5pdHtcbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB1c2VkIHRvIHJlbmRlciB0aGUgZm9ybS5cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHRlbXBsYXRlITogVGVtcGxhdGU8VFByb3BlcnR5RHRvcz47XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgYXBpTmFtZSE6IHN0cmluZztcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICByZWwhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBlbmFibGUgdGhlIHN1Ym1pdCBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIGFsbG93U3VibWl0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgZGVsZXRlIGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgYWxsb3dEZWxldGUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSByZWxvYWQgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBhbGxvd1JlbG9hZCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSBzdWJtaXQgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBzaG93U3VibWl0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIGRlbGV0ZSBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIHNob3dEZWxldGUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgcmVsb2FkIGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgc2hvd1JlbG9hZCA9IHRydWU7XG5cbiAgQE91dHB1dCgpXG4gIGFmdGVyRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBPdXRwdXQoKVxuICBhZnRlclN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8e29sZDogVGVtcGxhdGUsIG5ldzogVGVtcGxhdGV9PigpO1xuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byBhIHRlbXBsYXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIGN1c3RvbSBidXR0b25zIGZvciB0aGUgZm9ybS5cbiAgKi9cbiAgQENvbnRlbnRDaGlsZCgnYnV0dG9ucycsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBidXR0b25zUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgc2Nyb2xsVG9GaXJzdFZhbGlkYXRpb25FcnJvcigpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvckVsZW1lbnRzID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3J3LXZhbGlkYXRpb24tZXJyb3JzPnZhbC1lcnJvcnM+ZGl2JylcbiAgICAgIGNvbnN0IGZpcnN0RXJyb3IgPSB2YWxpZGF0aW9uRXJyb3JFbGVtZW50c1swXTtcbiAgICAgIGZpcnN0RXJyb3Iuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJ30pO1xuICAgIH0sXG4gICAgMTAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzTG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNMb2FkaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfZm9ybUdyb3VwPzogRm9ybUdyb3VwPGFueT47XG4gIHB1YmxpYyBnZXQgZm9ybUdyb3VwKCk6IEZvcm1Hcm91cDxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwO1xuICB9XG5cbiAgcHVibGljIGdldCBjYW5TdWJtaXQoKSA6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93U3VibWl0ICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmcgJiZcbiAgICAgIHRoaXMuZm9ybUdyb3VwICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbGlkO1xuICB9XG5cbiAgcHVibGljIGdldCBjYW5EZWxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxsb3dEZWxldGUgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUudGFyZ2V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUubWV0aG9kID09IFwiUFVUXCIgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FuUmVsb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93UmVsb2FkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRpdGxlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMudGVtcGxhdGUucHJvcGVydGllcy5zb21lKHAgPT4gcC5uYW1lID09PSBcImlkXCIgJiYgcC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHAudmFsdWUgIT09IG51bGwgJiYgcC52YWx1ZSAhPT0gMCkgJiZcbiAgICAgICF0aGlzLmlzTG9hZGluZztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NsaWVudHM6IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JtR3JvdXAgPSB0aGlzLl9mb3JtU2VydmljZS5jcmVhdGVGb3JtR3JvdXBGcm9tVGVtcGxhdGUodGhpcy50ZW1wbGF0ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5SZWxvYWQpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLl9pc0xvYWRpbmcgPSB0cnVlO1xuXG4gICAgdHJ5XG4gICAge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLmdldEZvcm0odGhpcy50ZW1wbGF0ZS50YXJnZXQhKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSkge1xuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiAnRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgcmVzb3VyY2UgZnJvbSB0aGUgQVBJLicsIGRhdGE6IHJlc3BvbnNlLCBzdGlja3k6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHJlc3BvbnNlLmJvZHkuZ2V0VGVtcGxhdGVCeVRpdGxlKHRoaXMudGVtcGxhdGUudGl0bGUhKSBhcyBUZW1wbGF0ZTxUUHJvcGVydHlEdG9zPjtcbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMudGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogYEFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuICR7SlNPTi5zdHJpbmdpZnkoZSl9YCwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwoKSB7XG4gICAgdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgIG1lc3NhZ2U6ICdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVzb3VyY2U/JyxcbiAgICAgIGhlYWRlcjogJ0NvbmZpcm0gZGVsZXRlJyxcbiAgICAgIGljb246ICdmYXIgZmEtdHJhc2gtYWx0JyxcbiAgICAgIGFjY2VwdDogKCkgPT4gdGhpcy5kZWxldGUoKVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBpZiggdGhpcy5mb3JtR3JvdXAgIT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cbiAgICAgIGlmICghdGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBzdW1tYXJ5OiAnRXJyb3InLFxuICAgICAgICAgIGRldGFpbDogJ1BsZWFzZSBjb3JyZWN0IHRoZSBlcnJvcnMgYmVmb3JlIHN1Ym1pdHRpbmcuJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxUb0ZpcnN0VmFsaWRhdGlvbkVycm9yKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIXRoaXMuY2FuU3VibWl0KVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuc3VibWl0KHRoaXMudGVtcGxhdGUsIHRoaXMuZm9ybUdyb3VwIS52YWx1ZSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgbGV0IHN1bW1hcnkgPSAnRXJyb3InO1xuICAgICAgICBsZXQgZGV0YWlsID0gJ0Vycm9yIHdoaWxlIHNhdmluZyB0aGUgcmVzb3VyY2UuJztcbiAgICAgICAgaWYgKFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkpIHtcbiAgICAgICAgICBjb25zdCBwcm9ibGVtRGV0YWlscyA9IHJlc3BvbnNlLmJvZHkgYXMgUHJvYmxlbURldGFpbHM7XG4gICAgICAgICAgc3VtbWFyeSA9IHByb2JsZW1EZXRhaWxzLnRpdGxlIHx8IHN1bW1hcnk7XG4gICAgICAgICAgZGV0YWlsID0gcHJvYmxlbURldGFpbHMuZGV0YWlsIHx8IGRldGFpbDtcbiAgICAgICAgICAvLyBkaXNwbGF5IHZhbGlkYXRpb24gZXJyb3JzXG4gICAgICAgICAgaWYgKHByb2JsZW1EZXRhaWxzWydlcnJvcnMnXSBhcyB7fSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBlcnJvcnNGb3JLZXldIG9mIE9iamVjdC5lbnRyaWVzKHByb2JsZW1EZXRhaWxzWydlcnJvcnMnXSBhcyB7fSkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGtleS5zcGxpdCgvXFwufFxcWy8pLm1hcChlID0+IGUucmVwbGFjZShcIl1cIiwgXCJcIikpO1xuICAgICAgICAgICAgICAvLyBUaGUgcGF0aCBtaWdodCBzdGFydCB3aXRoIGEgJCwgaW5kaWNhdGluZyB0aGUgcm9vdC5cbiAgICAgICAgICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMCAmJiBwYXRoWzBdID09PSAnJCcpXG4gICAgICAgICAgICAgICAgcGF0aC5zaGlmdCgpO1xuICAgICAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IHBhdGgucmVkdWNlPEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZD4oUmVzdFdvcmxkRm9ybUNvbXBvbmVudC5nZXRTdWJDb250cm9sLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgICAgICAgICAgIGlmIChmb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLnNldEVycm9ycyh7IC4uLmZvcm1Db250cm9sLmVycm9ycywgLi4ueyByZW1vdGU6IGVycm9yc0ZvcktleSB9IH0pO1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiBzdW1tYXJ5LCBkZXRhaWw6IGRldGFpbCwgZGF0YTogcmVzcG9uc2UsIHN0aWNreTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUJlZm9yZVN1Ym1pdCA9IHRoaXMudGVtcGxhdGU7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzb3VyY2UgPSAocmVzcG9uc2UuYm9keSBhcyBGb3Jtc1Jlc291cmNlKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHJlc3BvbnNlUmVzb3VyY2UuZ2V0VGVtcGxhdGVCeVRpdGxlKHRoaXMudGVtcGxhdGUudGl0bGUhKSBhcyBUZW1wbGF0ZTxUUHJvcGVydHlEdG9zPjtcbiAgICAgICAgdGhpcy5fZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMudGVtcGxhdGUpO1xuXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdTYXZlZCcsIGRldGFpbDogJ1RoZSByZXNvdXJjZSBoYXMgYmVlbiBzYXZlZC4nIH0pO1xuXG4gICAgICAgIHRoaXMuYWZ0ZXJTdWJtaXQuZW1pdCh7b2xkOiB0ZW1wbGF0ZUJlZm9yZVN1Ym1pdCwgbmV3OiB0aGlzLnRlbXBsYXRlfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiBgQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZC4gJHtKU09OLnN0cmluZ2lmeShlKX1gLCBzdGlja3k6IHRydWUgfSk7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhbkRlbGV0ZSlcbiAgICAgIHJldHVybjtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybUdyb3VwIGNhbm5vdCBiZSB1bmRlZmluZWQuXCIpO1xuXG4gICAgYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5kZWxldGVCeVRlbXBsYXRlQW5kRm9ybSh0aGlzLnRlbXBsYXRlLCB0aGlzLmZvcm1Hcm91cCk7XG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0RlbGV0ZWQnLCBkZXRhaWw6ICdUaGUgcmVzb3VyY2UgaGFzIGJlZW4gZGVsZXRlZC4nIH0pXG5cbiAgICB0aGlzLmFmdGVyRGVsZXRlLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFN1YkNvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkLCBwYXRoRWxlbWVudDogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocGF0aEVsZW1lbnQgPT09IFwiXCIpXG4gICAgICByZXR1cm4gY29udHJvbDtcblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cClcbiAgICAgIHJldHVybiBjb250cm9sLmNvbnRyb2xzW3BhdGhFbGVtZW50XTtcblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIucGFyc2VJbnQocGF0aEVsZW1lbnQpO1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoaW5kZXgpKVxuICAgICAgICByZXR1cm4gY29udHJvbC5jb250cm9sc1tpbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudCgpOiBSZXN0V29ybGRDbGllbnQge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnRzLmdldENsaWVudCh0aGlzLmFwaU5hbWUpO1xuICB9XG59XG4iLCI8Zm9ybSAqbmdJZj1cImZvcm1Hcm91cCAhPT0gdW5kZWZpbmVkICYmIHRlbXBsYXRlICE9PSB1bmRlZmluZWRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIChuZ1N1Ym1pdCk9XCJzdWJtaXQoKVwiPlxuICA8ZGl2IGNsYXNzPVwiYmxvY2thYmxlLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJibG9ja2FibGUtZWxlbWVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZmllbGRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMTAgbWQ6Y29sLW9mZnNldC0yXCI+XG4gICAgICAgICAgPHJ3LXZhbGlkYXRpb24tZXJyb3JzIFtmb3JtXT1cImZvcm1Hcm91cFwiPjwvcnctdmFsaWRhdGlvbi1lcnJvcnM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8cnctaW5wdXQtdGVtcGxhdGUgW3RlbXBsYXRlXT1cInRlbXBsYXRlXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctaW5wdXQtdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJsb2NrYWJsZS1vdmVybGF5XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgIDxwLXByb2dyZXNzU3Bpbm5lcj48L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEJ1dHRvbnM+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cInN1Ym1pdFwiIGxhYmVsPVwiU2F2ZVwiIGljb249XCJmYXIgZmEtc2F2ZVwiIGNsYXNzPVwibXgtMiBwLWJ1dHRvbi1zdWNjZXNzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYWxsb3dTdWJtaXRcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJSZWxvYWRcIiBpY29uPVwiZmFzIGZhLXJlZG9cIiBjbGFzcz1cIm14LTIgcC1idXR0b24taW5mb1wiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVsb2FkKClcIiBbZGlzYWJsZWRdPVwiIWNhblJlbG9hZFwiPjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBsYWJlbD1cIkRlbGV0ZVwiIGljb249XCJmYXIgZmEtdHJhc2gtYWx0XCIgY2xhc3M9XCJtbC0yIHAtYnV0dG9uLWRhbmdlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0RlbGV0ZUNvbmZpcm1hdGlvTW9kYWwoKVwiIFtkaXNhYmxlZF09XCIhY2FuRGVsZXRlXCI+PC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zUmVmIHx8IGRlZmF1bHRCdXR0b25zXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1mb3JtL3Jlc3R3b3JsZC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtZm9ybS9yZXN0d29ybGQtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQThCLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEcsT0FBTyxFQUE4QixjQUFjLEVBQXNDLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7OztBQU16SDs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQXdHZDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBM0duQjs7T0FFRztJQUVILFFBQVEsQ0FBMkI7SUFHbkMsT0FBTyxDQUFVO0lBR2pCLEdBQUcsQ0FBVTtJQUViOztNQUVFO0lBRUYsV0FBVyxHQUFHLElBQUksQ0FBQztJQUVuQjs7TUFFRTtJQUVGLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFFbkI7O01BRUU7SUFFRixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRW5COztNQUVFO0lBRUYsVUFBVSxHQUFHLElBQUksQ0FBQztJQUVsQjs7TUFFRTtJQUVGLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFFbEI7O01BRUU7SUFFRixVQUFVLEdBQUcsSUFBSSxDQUFDO0lBR2xCLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFD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USxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxTQUFTO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQzt1R0FuUVUsc0JBQXNCOzJGQUF0QixzQkFBc0IsMmJDbEJuQyxvK0NBK0JBOzsyRkRiYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsU0FBUztrT0FTbkIsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsT0FBTztzQkFETixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsR0FBRztzQkFERixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPekIsV0FBVztzQkFEVixLQUFLO2dCQU9OLFdBQVc7c0JBRFYsS0FBSztnQkFPTixXQUFXO3NCQURWLEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSztnQkFPTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sV0FBVztzQkFEVixNQUFNO2dCQUlQLFdBQVc7c0JBRFYsTUFBTTtnQkFPUCxVQUFVO3NCQURULFlBQVk7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UsIEZvcm1zUmVzb3VyY2UsIFByb2JsZW1EZXRhaWxzLCBQcm9wZXJ0eUR0bywgU2ltcGxlVmFsdWUsIFRlbXBsYXRlIH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcbmltcG9ydCB7IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50LWNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQWZ0ZXJTdWJtaXRPa0V2ZW50LCBBZnRlclN1Ym1pdFJlZGlyZWN0RXZlbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXZlbnRzJztcblxuLyoqXG4gKiBBIGZvcm0gd2l0aCBTYXZlLCBSZWxvYWQgYW5kIERlbGV0ZSBidXR0b25zLlxuICogSWYgeW91IGRvIG5vdCB3YW50IGJ1dHRvbnMsIHVzZSBSZXN0V29ybGRGb3JtVGVtcGxhdGVDb21wb25lbnQgPHJ3LWZvcm0tdGVtcGxhdGU+LlxuICogWW91IGNhbiBhbHNvIHByb3ZpZGUgeW91ciBvd24gYnV0dG9ucyBieSBwYXNzaW5nIGluIGEgdGVtcGxhdGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3J3LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtZm9ybS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRm9ybUNvbXBvbmVudDxUUHJvcGVydHlEdG9zIGV4dGVuZHMgUmVhZG9ubHlBcnJheTxQcm9wZXJ0eUR0bzxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+Pj4gaW1wbGVtZW50cyBPbkluaXR7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdXNlZCB0byByZW5kZXIgdGhlIGZvcm0uXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICB0ZW1wbGF0ZSE6IFRlbXBsYXRlPFRQcm9wZXJ0eUR0b3M+O1xuXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGFwaU5hbWUhOiBzdHJpbmc7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcmVsITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBzdWJtaXQgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBhbGxvd1N1Ym1pdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBlbmFibGUgdGhlIGRlbGV0ZSBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIGFsbG93RGVsZXRlID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgcmVsb2FkIGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgYWxsb3dSZWxvYWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgc3VibWl0IGJ1dHRvbi5cbiAgKi9cbiAgQElucHV0KClcbiAgc2hvd1N1Ym1pdCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSBkZWxldGUgYnV0dG9uLlxuICAqL1xuICBASW5wdXQoKVxuICBzaG93RGVsZXRlID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgdGhlIHJlbG9hZCBidXR0b24uXG4gICovXG4gIEBJbnB1dCgpXG4gIHNob3dSZWxvYWQgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKVxuICBhZnRlckRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgYWZ0ZXJTdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEFmdGVyU3VibWl0T2tFdmVudCB8IEFmdGVyU3VibWl0UmVkaXJlY3RFdmVudD4oKTtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gYSB0ZW1wbGF0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlbmRlciBjdXN0b20gYnV0dG9ucyBmb3IgdGhlIGZvcm0uXG4gICovXG4gIEBDb250ZW50Q2hpbGQoJ2J1dHRvbnMnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgYnV0dG9uc1JlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIHNjcm9sbFRvRmlyc3RWYWxpZGF0aW9uRXJyb3IoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uRXJyb3JFbGVtZW50cyA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdydy12YWxpZGF0aW9uLWVycm9ycz52YWwtZXJyb3JzPmRpdicpXG4gICAgICBjb25zdCBmaXJzdEVycm9yID0gdmFsaWRhdGlvbkVycm9yRWxlbWVudHNbMF07XG4gICAgICBmaXJzdEVycm9yLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcid9KTtcbiAgICB9LFxuICAgIDEwMCk7XG4gIH1cblxuICBwcml2YXRlIF9pc0xvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIGdldCBpc0xvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTG9hZGluZztcbiAgfVxuXG4gIHByaXZhdGUgX2Zvcm1Hcm91cD86IEZvcm1Hcm91cDxhbnk+O1xuICBwdWJsaWMgZ2V0IGZvcm1Hcm91cCgpOiBGb3JtR3JvdXA8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FuU3VibWl0KCkgOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd1N1Ym1pdCAmJlxuICAgICAgdGhpcy50ZW1wbGF0ZS50YXJnZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIXRoaXMuaXNMb2FkaW5nICYmXG4gICAgICB0aGlzLmZvcm1Hcm91cCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLmZvcm1Hcm91cC52YWxpZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FuRGVsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93RGVsZXRlICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnRhcmdldCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLm1ldGhvZCA9PSBcIlBVVFwiICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhblJlbG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd1JlbG9hZCAmJlxuICAgICAgdGhpcy50ZW1wbGF0ZS50YXJnZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy50ZW1wbGF0ZS50aXRsZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLnRlbXBsYXRlLnByb3BlcnRpZXMuc29tZShwID0+IHAubmFtZSA9PT0gXCJpZFwiICYmIHAudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwLnZhbHVlICE9PSBudWxsICYmIHAudmFsdWUgIT09IDApICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnRzOiBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUdyb3VwID0gdGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMudGVtcGxhdGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlbG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2FuUmVsb2FkKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRyeVxuICAgIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRGb3JtKHRoaXMudGVtcGxhdGUudGFyZ2V0ISk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIHJlc291cmNlIGZyb20gdGhlIEFQSS4nLCBkYXRhOiByZXNwb25zZSwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSByZXNwb25zZS5ib2R5LmdldFRlbXBsYXRlQnlUaXRsZSh0aGlzLnRlbXBsYXRlLnRpdGxlISkgYXMgVGVtcGxhdGU8VFByb3BlcnR5RHRvcz47XG4gICAgICAgIHRoaXMuX2Zvcm1Hcm91cCA9IHRoaXMuX2Zvcm1TZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cEZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IGBBbiB1bmtub3duIGVycm9yIG9jY3VycmVkLiAke0pTT04uc3RyaW5naWZ5KGUpfWAsIHN0aWNreTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgIH1cblxuICAgIHRoaXMuX2lzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKCkge1xuICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnRG8geW91IHJlYWxseSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlc291cmNlPycsXG4gICAgICBoZWFkZXI6ICdDb25maXJtIGRlbGV0ZScsXG4gICAgICBpY29uOiAnZmFyIGZhLXRyYXNoLWFsdCcsXG4gICAgICBhY2NlcHQ6ICgpID0+IHRoaXMuZGVsZXRlKClcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWJtaXQoKSB7XG4gICAgaWYoIHRoaXMuZm9ybUdyb3VwICE9PSB1bmRlZmluZWQpXG4gICAge1xuICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuXG4gICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcbiAgICAgICAgICBkZXRhaWw6ICdQbGVhc2UgY29ycmVjdCB0aGUgZXJyb3JzIGJlZm9yZSBzdWJtaXR0aW5nLicsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9GaXJzdFZhbGlkYXRpb25FcnJvcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKCF0aGlzLmNhblN1Ym1pdClcbiAgICAgIHJldHVybjtcblxuICAgIHRoaXMuX2lzTG9hZGluZyA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpLnN1Ym1pdCh0aGlzLnRlbXBsYXRlLCB0aGlzLmZvcm1Hcm91cCEudmFsdWUpO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGxldCBzdW1tYXJ5ID0gJ0Vycm9yJztcbiAgICAgICAgbGV0IGRldGFpbCA9ICdFcnJvciB3aGlsZSBzYXZpbmcgdGhlIHJlc291cmNlLic7XG4gICAgICAgIGlmIChQcm9ibGVtRGV0YWlscy5pc1Byb2JsZW1EZXRhaWxzKHJlc3BvbnNlLmJvZHkpKSB7XG4gICAgICAgICAgY29uc3QgcHJvYmxlbURldGFpbHMgPSByZXNwb25zZS5ib2R5IGFzIFByb2JsZW1EZXRhaWxzO1xuICAgICAgICAgIHN1bW1hcnkgPSBwcm9ibGVtRGV0YWlscy50aXRsZSB8fCBzdW1tYXJ5O1xuICAgICAgICAgIGRldGFpbCA9IHByb2JsZW1EZXRhaWxzLmRldGFpbCB8fCBkZXRhaWw7XG4gICAgICAgICAgLy8gZGlzcGxheSB2YWxpZGF0aW9uIGVycm9yc1xuICAgICAgICAgIGlmIChwcm9ibGVtRGV0YWlsc1snZXJyb3JzJ10gYXMge30pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZXJyb3JzRm9yS2V5XSBvZiBPYmplY3QuZW50cmllcyhwcm9ibGVtRGV0YWlsc1snZXJyb3JzJ10gYXMge30pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBrZXkuc3BsaXQoL1xcLnxcXFsvKS5tYXAoZSA9PiBlLnJlcGxhY2UoXCJdXCIsIFwiXCIpKTtcbiAgICAgICAgICAgICAgLy8gVGhlIHBhdGggbWlnaHQgc3RhcnQgd2l0aCBhICQsIGluZGljYXRpbmcgdGhlIHJvb3QuXG4gICAgICAgICAgICAgIGlmIChwYXRoLmxlbmd0aCA+IDAgJiYgcGF0aFswXSA9PT0gJyQnKVxuICAgICAgICAgICAgICAgIHBhdGguc2hpZnQoKTtcbiAgICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBwYXRoLnJlZHVjZTxBYnN0cmFjdENvbnRyb2wgfCB1bmRlZmluZWQ+KFJlc3RXb3JsZEZvcm1Db21wb25lbnQuZ2V0U3ViQ29udHJvbCwgdGhpcy5mb3JtR3JvdXApO1xuICAgICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRFcnJvcnMoeyAuLi5mb3JtQ29udHJvbC5lcnJvcnMsIC4uLnsgcmVtb3RlOiBlcnJvcnNGb3JLZXkgfSB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogc3VtbWFyeSwgZGV0YWlsOiBkZXRhaWwsIGRhdGE6IHJlc3BvbnNlLCBzdGlja3k6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMjAxKSB7XG4gICAgICAgIGlmICghcmVzcG9uc2UuaGVhZGVycy5oYXMoJ0xvY2F0aW9uJykpIHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiAnVGhlIHNlcnZlciByZXR1cm5lZCBhIDIwMSBDcmVhdGVkIHJlc3BvbnNlLCBidXQgZGlkIG5vdCByZXR1cm4gYSBMb2NhdGlvbiBoZWFkZXIuJywgZGF0YTogcmVzcG9uc2UsIHN0aWNreTogdHJ1ZSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnQ3JlYXRlZCcsIGRldGFpbDogJ1RoZSByZXNvdXJjZSBoYXMgYmVlbiBjcmVhdGVkLicgfSk7XG5cbiAgICAgICAgdmFyIGNyZWF0ZWRBdFVyaSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdMb2NhdGlvbicpITtcbiAgICAgICAgdGhpcy5hZnRlclN1Ym1pdC5lbWl0KHsgbG9jYXRpb246IGNyZWF0ZWRBdFVyaSwgc3RhdHVzOiAyMDEgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVCZWZvcmVTdWJtaXQgPSB0aGlzLnRlbXBsYXRlO1xuICAgICAgICBjb25zdCByZXNwb25zZVJlc291cmNlID0gKHJlc3BvbnNlLmJvZHkgYXMgRm9ybXNSZXNvdXJjZSk7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSByZXNwb25zZVJlc291cmNlLmdldFRlbXBsYXRlQnlUaXRsZSh0aGlzLnRlbXBsYXRlLnRpdGxlISkgYXMgVGVtcGxhdGU8VFByb3BlcnR5RHRvcz47XG4gICAgICAgIHRoaXMuX2Zvcm1Hcm91cCA9IHRoaXMuX2Zvcm1TZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cEZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlKTtcblxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnU2F2ZWQnLCBkZXRhaWw6ICdUaGUgcmVzb3VyY2UgaGFzIGJlZW4gc2F2ZWQuJyB9KTtcblxuICAgICAgICB0aGlzLmFmdGVyU3VibWl0LmVtaXQoeyBvbGQ6IHRlbXBsYXRlQmVmb3JlU3VibWl0LCBuZXc6IHRoaXMudGVtcGxhdGUsIHN0YXR1czogMjAwIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogYEFuIHVua25vd24gZXJyb3Igb2NjdXJyZWQuICR7SlNPTi5zdHJpbmdpZnkoZSl9YCwgc3RpY2t5OiB0cnVlIH0pO1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgfVxuXG4gICAgdGhpcy5faXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYW5EZWxldGUpXG4gICAgICByZXR1cm47XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXAgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1Hcm91cCBjYW5ub3QgYmUgdW5kZWZpbmVkLlwiKTtcblxuICAgIGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZGVsZXRlQnlUZW1wbGF0ZUFuZEZvcm0odGhpcy50ZW1wbGF0ZSwgdGhpcy5mb3JtR3JvdXApO1xuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdEZWxldGVkJywgZGV0YWlsOiAnVGhlIHJlc291cmNlIGhhcyBiZWVuIGRlbGV0ZWQuJyB9KVxuXG4gICAgdGhpcy5hZnRlckRlbGV0ZS5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRTdWJDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZCwgcGF0aEVsZW1lbnQ6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHBhdGhFbGVtZW50ID09PSBcIlwiKVxuICAgICAgcmV0dXJuIGNvbnRyb2w7XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApXG4gICAgICByZXR1cm4gY29udHJvbC5jb250cm9sc1twYXRoRWxlbWVudF07XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyLnBhcnNlSW50KHBhdGhFbGVtZW50KTtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSlcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wuY29udHJvbHNbaW5kZXhdO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUmVzdFdvcmxkQ2xpZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50cy5nZXRDbGllbnQodGhpcy5hcGlOYW1lKTtcbiAgfVxufVxuIiwiPGZvcm0gKm5nSWY9XCJmb3JtR3JvdXAgIT09IHVuZGVmaW5lZCAmJiB0ZW1wbGF0ZSAhPT0gdW5kZWZpbmVkXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiAobmdTdWJtaXQpPVwic3VibWl0KClcIj5cbiAgPGRpdiBjbGFzcz1cImJsb2NrYWJsZS1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYmxvY2thYmxlLWVsZW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGZpZWxkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbWQ6Y29sLTEwIG1kOmNvbC1vZmZzZXQtMlwiPlxuICAgICAgICAgIDxydy12YWxpZGF0aW9uLWVycm9ycyBbZm9ybV09XCJmb3JtR3JvdXBcIj48L3J3LXZhbGlkYXRpb24tZXJyb3JzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHJ3LWlucHV0LXRlbXBsYXRlIFt0ZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWlucHV0LXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJibG9ja2FibGUtb3ZlcmxheVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgICA8cC1wcm9ncmVzc1NwaW5uZXI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdyaWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRCdXR0b25zPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJzdWJtaXRcIiBsYWJlbD1cIlNhdmVcIiBpY29uPVwiZmFyIGZhLXNhdmVcIiBjbGFzcz1cIm14LTIgcC1idXR0b24tc3VjY2Vzc1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFsbG93U3VibWl0XCI+PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiUmVsb2FkXCIgaWNvbj1cImZhcyBmYS1yZWRvXCIgY2xhc3M9XCJteC0yIHAtYnV0dG9uLWluZm9cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbG9hZCgpXCIgW2Rpc2FibGVkXT1cIiFjYW5SZWxvYWRcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgbGFiZWw9XCJEZWxldGVcIiBpY29uPVwiZmFyIGZhLXRyYXNoLWFsdFwiIGNsYXNzPVwibWwtMiBwLWJ1dHRvbi1kYW5nZXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVDb25maXJtYXRpb01vZGFsKClcIiBbZGlzYWJsZWRdPVwiIWNhbkRlbGV0ZVwiPjwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc1JlZiB8fCBkZWZhdWx0QnV0dG9uc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
@@ -1,6 +1,7 @@
1
1
  import { Component, EventEmitter, Input, Optional, Output, ViewChild } from '@angular/core';
2
2
  import { PropertyType, Template } from '@wertzui/ngx-hal-client';
3
3
  import * as _ from 'lodash';
4
+ import { FilterMatchMode } from 'primeng/api';
4
5
  import { ODataService } from '../../services/o-data.service';
5
6
  import { ControlContainer, FormArrayName } from '@angular/forms';
6
7
  import * as i0 from "@angular/core";
@@ -376,6 +377,14 @@ export class RestWorldTableComponent {
376
377
  return ColumnFilterType.text;
377
378
  }
378
379
  }
380
+ toMatchMode(propertyType) {
381
+ // There is a bug in PrimeNG returning CONTAINS for boolean columns
382
+ // Once the bug has been fixed, we can remove this workaround
383
+ // https://github.com/primefaces/primeng/issues/14210
384
+ if (propertyType === PropertyType.Bool)
385
+ return FilterMatchMode.EQUALS;
386
+ return undefined;
387
+ }
379
388
  showInputField(column) {
380
389
  if (!this.isEditable)
381
390
  return false;
@@ -401,7 +410,7 @@ export class RestWorldTableComponent {
401
410
  this._editProperties = Object.fromEntries(this.editTemplate.properties.map(p => [p.name, p]));
402
411
  }
403
412
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.6", ngImport: i0, type: RestWorldTableComponent, deps: [{ token: i1.ControlContainer }, { token: i2.FormService }], target: i0.ɵɵFactoryTarget.Component });
404
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: RestWorldTableComponent, selector: "rw-table", inputs: { apiName: "apiName", formArray: "formArray", searchTemplate: "searchTemplate", editTemplate: "editTemplate", rows: "rows", rowsPerPageOptions: "rowsPerPageOptions", headerMenu: "headerMenu", rowMenu: "rowMenu", showRowMenuAsColumn: "showRowMenuAsColumn", showRowMenuOnRightClick: "showRowMenuOnRightClick", rowStyleClass: "rowStyleClass", cellStyleClass: "cellStyleClass", totalRecords: "totalRecords", styleClass: "styleClass", tableStyle: "tableStyle", scrollable: "scrollable", scrollHeight: "scrollHeight", selectionMode: "selectionMode", rowHover: "rowHover", selection: "selection", isLoading: "isLoading" }, outputs: { onFilterOrSortChanged: "onFilterOrSortChanged", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true }], ngImport: i0, template: "<p-table\n #table\n [value]=\"rows\"\n [columns]=\"columns\"\n [lazy]=\"true\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"true\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [rows]=\"rows.length\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"isLoading\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [selectionMode]=\"selectionMode\"\n (onRowSelect)=\"onRowSelectInternal($event)\"\n (onRowUnselect)=\"onRowUnselectInternal($event)\"\n [rowHover]=\"rowHover\"\n [(selection)]=\"_selection\"\n (selectionChange)=\"onSelectionChangeInternal($event)\">\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center\">\n {{col.prompt}}\n <ng-container *ngIf=\"!col.readOnly\">\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter [type]=\"toColumnFilterType(col.type)\" [field]=\"col.name\" display=\"menu\"></p-columnFilter>\n </ng-container>\n </div>\n </th>\n <th *ngIf=\"showMenuColumn\" class=\"flex justify-content-end\">\n <rw-menu-button [items]=\"headerMenu\"></rw-menu-button>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode === null\" [className]=\"rowStyleClasses[rowIndex - (table.first ?? 0)]\">\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\" [className]=\"cellStyleClasses[rowIndex - (table.first ?? 0)][col.name]\">\n <ng-container *ngIf=\"showInputField(col); else textField\" [formGroup]=\"formArray!.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName!\" [property]=\"editProperties[col.name]\"></rw-input>\n </ng-container>\n <ng-template #textField>\n <ng-container *ngSwitchCase=\"PropertyType.Text\">\n <rw-avatar *ngIf=\"col.name === 'createdBy' || col.name === 'lastChangedBy'\" [user]=\"entity[col.name]\"></rw-avatar>\n <span *ngIf=\"col.name !== 'createdBy' && col.name !== 'lastChangedBy'\">{{entity[col.name]}}</span>\n </ng-container>\n <span *ngSwitchCase=\"PropertyType.Number\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Percent\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Currency\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Bool\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.name]\" [readonly]=\"true\"></p-triStateCheckbox></span>\n <span *ngSwitchCase=\"PropertyType.Date\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Time\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Duration\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeLocal\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeOffset\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.Collection\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.name]\">{{arrayElement | json}}</p></span>\n <span *ngSwitchCase=\"PropertyType.Object\" class=\"flex justify-content-end\">{{entity[col.name] | json}}</span>\n <span *ngSwitchDefault [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n </ng-template>\n </td>\n <td *ngIf=\"showMenuColumn\" class=\"flex justify-content-end\">\n <rw-menu-button *ngIf=\"showRowMenuAsColumn\" [items]=\"rowMenus[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n </td>\n </tr>\n </ng-template>\n\n <p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems\"></p-contextMenu>\n</p-table>\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i5.ContextMenu, selector: "p-contextMenu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "ariaLabel", "ariaLabelledBy"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i7.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i7.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "component", type: i7.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i7.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons"] }, { kind: "component", type: i8.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabelledBy", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon"], outputs: ["onChange"] }, { kind: "component", type: i9.RestWorldAvatarComponent, selector: "rw-avatar", inputs: ["user"] }, { kind: "component", type: i10.RestWorldInputComponent, selector: "rw-input", inputs: ["property", "apiName"] }, { kind: "component", type: i11.RestWorldMenuButtonComponent, selector: "rw-menu-button", inputs: ["items"] }, { kind: "pipe", type: i4.JsonPipe, name: "json" }, { kind: "pipe", type: i12.PropertyTypeFormatPipe, name: "propertyTypeFormat" }], viewProviders: [{
413
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.6", type: RestWorldTableComponent, selector: "rw-table", inputs: { apiName: "apiName", formArray: "formArray", searchTemplate: "searchTemplate", editTemplate: "editTemplate", rows: "rows", rowsPerPageOptions: "rowsPerPageOptions", headerMenu: "headerMenu", rowMenu: "rowMenu", showRowMenuAsColumn: "showRowMenuAsColumn", showRowMenuOnRightClick: "showRowMenuOnRightClick", rowStyleClass: "rowStyleClass", cellStyleClass: "cellStyleClass", totalRecords: "totalRecords", styleClass: "styleClass", tableStyle: "tableStyle", scrollable: "scrollable", scrollHeight: "scrollHeight", selectionMode: "selectionMode", rowHover: "rowHover", selection: "selection", isLoading: "isLoading" }, outputs: { onFilterOrSortChanged: "onFilterOrSortChanged", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true }], ngImport: i0, template: "<p-table\n #table\n [value]=\"rows\"\n [columns]=\"columns\"\n [lazy]=\"true\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"true\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [rows]=\"rows.length\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"isLoading\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [selectionMode]=\"selectionMode\"\n (onRowSelect)=\"onRowSelectInternal($event)\"\n (onRowUnselect)=\"onRowUnselectInternal($event)\"\n [rowHover]=\"rowHover\"\n [(selection)]=\"_selection\"\n (selectionChange)=\"onSelectionChangeInternal($event)\">\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center\">\n {{col.prompt}}\n <ng-container *ngIf=\"!col.readOnly\">\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter [type]=\"toColumnFilterType(col.type)\" [matchMode]=\"toMatchMode(col.type)\" [field]=\"col.name\" display=\"menu\"></p-columnFilter>\n </ng-container>\n </div>\n </th>\n <th *ngIf=\"showMenuColumn\" class=\"flex justify-content-end\">\n <rw-menu-button [items]=\"headerMenu\"></rw-menu-button>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode === null\" [className]=\"rowStyleClasses[rowIndex - (table.first ?? 0)]\">\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\" [className]=\"cellStyleClasses[rowIndex - (table.first ?? 0)][col.name]\">\n <ng-container *ngIf=\"showInputField(col); else textField\" [formGroup]=\"formArray!.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName!\" [property]=\"editProperties[col.name]\"></rw-input>\n </ng-container>\n <ng-template #textField>\n <ng-container *ngSwitchCase=\"PropertyType.Text\">\n <rw-avatar *ngIf=\"col.name === 'createdBy' || col.name === 'lastChangedBy'\" [user]=\"entity[col.name]\"></rw-avatar>\n <span *ngIf=\"col.name !== 'createdBy' && col.name !== 'lastChangedBy'\">{{entity[col.name]}}</span>\n </ng-container>\n <span *ngSwitchCase=\"PropertyType.Number\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Percent\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Currency\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Bool\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.name]\" [readonly]=\"true\"></p-triStateCheckbox></span>\n <span *ngSwitchCase=\"PropertyType.Date\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Time\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Duration\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeLocal\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeOffset\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.Collection\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.name]\">{{arrayElement | json}}</p></span>\n <span *ngSwitchCase=\"PropertyType.Object\" class=\"flex justify-content-end\">{{entity[col.name] | json}}</span>\n <span *ngSwitchDefault [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n </ng-template>\n </td>\n <td *ngIf=\"showMenuColumn\" class=\"flex justify-content-end\">\n <rw-menu-button *ngIf=\"showRowMenuAsColumn\" [items]=\"rowMenus[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n </td>\n </tr>\n </ng-template>\n\n <p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems\"></p-contextMenu>\n</p-table>\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"], dependencies: [{ kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i5.ContextMenu, selector: "p-contextMenu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "ariaLabel", "ariaLabelledBy"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i7.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i7.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "component", type: i7.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i7.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons"] }, { kind: "component", type: i8.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabelledBy", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon"], outputs: ["onChange"] }, { kind: "component", type: i9.RestWorldAvatarComponent, selector: "rw-avatar", inputs: ["user"] }, { kind: "component", type: i10.RestWorldInputComponent, selector: "rw-input", inputs: ["property", "apiName"] }, { kind: "component", type: i11.RestWorldMenuButtonComponent, selector: "rw-menu-button", inputs: ["items"] }, { kind: "pipe", type: i4.JsonPipe, name: "json" }, { kind: "pipe", type: i12.PropertyTypeFormatPipe, name: "propertyTypeFormat" }], viewProviders: [{
405
414
  provide: ControlContainer,
406
415
  deps: [[Optional, FormArrayName]],
407
416
  useFactory: (arrayName) => arrayName,
@@ -413,7 +422,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
413
422
  provide: ControlContainer,
414
423
  deps: [[Optional, FormArrayName]],
415
424
  useFactory: (arrayName) => arrayName,
416
- }], template: "<p-table\n #table\n [value]=\"rows\"\n [columns]=\"columns\"\n [lazy]=\"true\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"true\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [rows]=\"rows.length\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"isLoading\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [selectionMode]=\"selectionMode\"\n (onRowSelect)=\"onRowSelectInternal($event)\"\n (onRowUnselect)=\"onRowUnselectInternal($event)\"\n [rowHover]=\"rowHover\"\n [(selection)]=\"_selection\"\n (selectionChange)=\"onSelectionChangeInternal($event)\">\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center\">\n {{col.prompt}}\n <ng-container *ngIf=\"!col.readOnly\">\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter [type]=\"toColumnFilterType(col.type)\" [field]=\"col.name\" display=\"menu\"></p-columnFilter>\n </ng-container>\n </div>\n </th>\n <th *ngIf=\"showMenuColumn\" class=\"flex justify-content-end\">\n <rw-menu-button [items]=\"headerMenu\"></rw-menu-button>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode === null\" [className]=\"rowStyleClasses[rowIndex - (table.first ?? 0)]\">\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\" [className]=\"cellStyleClasses[rowIndex - (table.first ?? 0)][col.name]\">\n <ng-container *ngIf=\"showInputField(col); else textField\" [formGroup]=\"formArray!.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName!\" [property]=\"editProperties[col.name]\"></rw-input>\n </ng-container>\n <ng-template #textField>\n <ng-container *ngSwitchCase=\"PropertyType.Text\">\n <rw-avatar *ngIf=\"col.name === 'createdBy' || col.name === 'lastChangedBy'\" [user]=\"entity[col.name]\"></rw-avatar>\n <span *ngIf=\"col.name !== 'createdBy' && col.name !== 'lastChangedBy'\">{{entity[col.name]}}</span>\n </ng-container>\n <span *ngSwitchCase=\"PropertyType.Number\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Percent\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Currency\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Bool\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.name]\" [readonly]=\"true\"></p-triStateCheckbox></span>\n <span *ngSwitchCase=\"PropertyType.Date\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Time\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Duration\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeLocal\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeOffset\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.Collection\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.name]\">{{arrayElement | json}}</p></span>\n <span *ngSwitchCase=\"PropertyType.Object\" class=\"flex justify-content-end\">{{entity[col.name] | json}}</span>\n <span *ngSwitchDefault [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n </ng-template>\n </td>\n <td *ngIf=\"showMenuColumn\" class=\"flex justify-content-end\">\n <rw-menu-button *ngIf=\"showRowMenuAsColumn\" [items]=\"rowMenus[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n </td>\n </tr>\n </ng-template>\n\n <p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems\"></p-contextMenu>\n</p-table>\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
425
+ }], template: "<p-table\n #table\n [value]=\"rows\"\n [columns]=\"columns\"\n [lazy]=\"true\"\n [lazyLoadOnInit]=\"false\"\n (onLazyLoad)=\"load($event)\"\n responsiveLayout=\"scroll\"\n [paginator]=\"true\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [rows]=\"rows.length\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"isLoading\"\n sortMode=\"multiple\"\n [multiSortMeta]=\"multiSortMeta\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [selectionMode]=\"selectionMode\"\n (onRowSelect)=\"onRowSelectInternal($event)\"\n (onRowUnselect)=\"onRowUnselectInternal($event)\"\n [rowHover]=\"rowHover\"\n [(selection)]=\"_selection\"\n (selectionChange)=\"onSelectionChangeInternal($event)\">\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngFor=\"let col of columns\" [pSortableColumn]=\"col.name\">\n <div class=\"p-d-flex p-jc-between p-ai-center\">\n {{col.prompt}}\n <ng-container *ngIf=\"!col.readOnly\">\n <p-sortIcon [field]=\"col.name\"></p-sortIcon>\n <p-columnFilter [type]=\"toColumnFilterType(col.type)\" [matchMode]=\"toMatchMode(col.type)\" [field]=\"col.name\" display=\"menu\"></p-columnFilter>\n </ng-container>\n </div>\n </th>\n <th *ngIf=\"showMenuColumn\" class=\"flex justify-content-end\">\n <rw-menu-button [items]=\"headerMenu\"></rw-menu-button>\n </th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-entity let-columns=\"columns\" let-rowIndex=\"rowIndex\">\n <tr (contextmenu)=\"openContextMenu($event, entity)\" [pSelectableRow]=\"entity\" [pSelectableRowDisabled]=\"selectionMode === null\" [className]=\"rowStyleClasses[rowIndex - (table.first ?? 0)]\">\n <td [ngSwitch]=\"col.type\" *ngFor=\"let col of columns\" [className]=\"cellStyleClasses[rowIndex - (table.first ?? 0)][col.name]\">\n <ng-container *ngIf=\"showInputField(col); else textField\" [formGroup]=\"formArray!.controls[rowIndex - (table.first ?? 0)]\" >\n <rw-input [apiName]=\"apiName!\" [property]=\"editProperties[col.name]\"></rw-input>\n </ng-container>\n <ng-template #textField>\n <ng-container *ngSwitchCase=\"PropertyType.Text\">\n <rw-avatar *ngIf=\"col.name === 'createdBy' || col.name === 'lastChangedBy'\" [user]=\"entity[col.name]\"></rw-avatar>\n <span *ngIf=\"col.name !== 'createdBy' && col.name !== 'lastChangedBy'\">{{entity[col.name]}}</span>\n </ng-container>\n <span *ngSwitchCase=\"PropertyType.Number\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Percent\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Currency\" class=\"flex justify-content-end\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Bool\" class=\"flex justify-content-center\"><p-triStateCheckbox [(ngModel)]=\"entity[col.name]\" [readonly]=\"true\"></p-triStateCheckbox></span>\n <span *ngSwitchCase=\"PropertyType.Date\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Time\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.Duration\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeLocal\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.DatetimeOffset\" [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:PropertyType.Date}}</span>\n <span *ngSwitchCase=\"PropertyType.Collection\" class=\"flex justify-content-end\"><p *ngFor=\"let arrayElement of entity[col.name]\">{{arrayElement | json}}</p></span>\n <span *ngSwitchCase=\"PropertyType.Object\" class=\"flex justify-content-end\">{{entity[col.name] | json}}</span>\n <span *ngSwitchDefault [pTooltip]=\"entity[col.name]\">{{entity[col.name] | propertyTypeFormat:col.type}}</span>\n </ng-template>\n </td>\n <td *ngIf=\"showMenuColumn\" class=\"flex justify-content-end\">\n <rw-menu-button *ngIf=\"showRowMenuAsColumn\" [items]=\"rowMenus[rowIndex - (table.first ?? 0)]\"></rw-menu-button>\n </td>\n </tr>\n </ng-template>\n\n <p-contextMenu #contextMenu appendTo=\"body\" [model]=\"contextMenuItems\"></p-contextMenu>\n</p-table>\n", styles: [".p-tooltip{max-width:-moz-fit-content;max-width:fit-content}a.p-button{text-decoration:none}\n"] }]
417
426
  }], ctorParameters: function () { return [{ type: i1.ControlContainer }, { type: i2.FormService }]; }, propDecorators: { apiName: [{
418
427
  type: Input
419
428
  }], formArray: [{
@@ -470,4 +479,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.6", ngImpor
470
479
  }], isLoading: [{
471
480
  type: Input
472
481
  }] } });
473
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtdGFibGUvcmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtdGFibGUvcmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQXlCLFlBQVksRUFBZSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUc1QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFN0QsT0FBTyxFQUFtQixnQkFBZ0IsRUFBYSxhQUFhLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFHeEcsSUFBSyxnQkFLSjtBQUxELFdBQUssZ0JBQWdCO0lBQ25CLGlDQUFhLENBQUE7SUFDYix1Q0FBbUIsQ0FBQTtJQUNuQix1Q0FBbUIsQ0FBQTtJQUNuQixpQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxJLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFLcEI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFVSCxNQUFNLE9BQU8sdUJBQXVCO0lBc05mO0lBQ0E7SUF0Tm5COzs7T0FHRztJQUVJLE9BQU8sQ0FBVTtJQUVoQixVQUFVLENBQTZFO0lBRS9GOzs7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RG5CLE1BQU07Z0JBUUEsYUFBYTtzQkFEbkIsS0FBSztnQkFPQyxRQUFRO3NCQURkLEtBQUs7Z0JBT0ssU0FBUztzQkFEbkIsS0FBSztnQkFjTixlQUFlO3NCQURkLE1BQU07Z0JBSVAsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWE7Z0JBYWpCLFNBQVM7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU2VydmljZSwgUHJvcGVydHksIFByb3BlcnR5VHlwZSwgU2ltcGxlVmFsdWUsIFRlbXBsYXRlIH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgTWVudUl0ZW0sIFNvcnRNZXRhIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgT0RhdGFQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL28tZGF0YSc7XG5pbXBvcnQgeyBPRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZXh0TWVudSB9IGZyb20gJ3ByaW1lbmcvY29udGV4dG1lbnUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBGb3JtQXJyYXksIEZvcm1BcnJheU5hbWUsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRhYmxlTGF6eUxvYWRFdmVudCwgVGFibGVSb3dTZWxlY3RFdmVudCwgVGFibGVSb3dVblNlbGVjdEV2ZW50IH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5cbmVudW0gQ29sdW1uRmlsdGVyVHlwZSB7XG4gIHRleHQgPSAndGV4dCcsXG4gIG51bWVyaWMgPSAnbnVtZXJpYycsXG4gIGJvb2xlYW4gPSAnYm9vbGVhbicsXG4gIGRhdGUgPSAnZGF0ZSdcbn1cblxuLyoqXG4gKiBEaXNwbGF5cyBhIHRhYmxlIGJhc2VkIG9uIGEgc2VhcmNoLSwgYW4gZWRpdC10ZW1wbGF0ZSBhbmQgYSBsaXN0IG9mIGl0ZW1zLlxuICogVGhlIHNlYXJjaC10ZW1wbGF0ZSBpcyByZXF1aXJlZCBhbmQgdXNlZCB0byBkaXNwbGF5IHRoZSB0YWJsZSBjb2x1bW5zIGFuZCB0byBmaWx0ZXIgYW5kIHNvcnQgdGhlIGl0ZW1zLlxuICogVGhlIGVkaXQtdGVtcGxhdGUgaXMgb3B0aW9uYWwgYW5kIHVzZWQgdG8gZWRpdCB0aGUgaXRlbXMuIEZvciB0aGUgZWRpdCBjYXBhYmlsaXR5LCB0aGUgdGFibGUgbXVzdCBiZSBwYXJ0IG9mIGEgcmVhY3RpdmUgZm9ybS5cbiAqIFRoZSBpdGVtcyBhcmUgZGlzcGxheWVkIGFzIHRhYmxlIHJvd3MuXG4gKiBUaGUgdGFibGUgc3VwcG9ydHMgbGF6eSBsb2FkaW5nLCByb3cgc2VsZWN0aW9uLCByb3cgbWVudXMsIGFuZCBjb250ZXh0IG1lbnVzLlxuICogXG4gKiBAZXhhbXBsZVxuICogPHJ3LXRhYmxlXG4gKiAgIFthcGlOYW1lXT1cImFwaU5hbWVcIlxuICogICBbc2VhcmNoVGVtcGxhdGVdPVwic2VhcmNoVGVtcGxhdGVcIlxuICogICBbZWRpdFRlbXBsYXRlXT1cImVkaXRUZW1wbGF0ZVwiXG4gKiAgIFtyb3dzXT1cInJvd3NcIlxuICogICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjUsIDUwXVwiXG4gKiAgIFtoZWFkZXJNZW51XT1cImhlYWRlck1lbnVcIlxuICogICBbcm93TWVudV09XCJyb3dNZW51XCJcbiAqICAgW3Jvd1N0eWxlQ2xhc3NdPVwicm93U3R5bGVDbGFzc1wiXG4gKiAgIFtjZWxsU3R5bGVDbGFzc109XCJjZWxsU3R5bGVDbGFzc1wiXG4gKiAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAqICAgW211bHRpU29ydE1ldGFdPVwibXVsdGlTb3J0TWV0YVwiXG4gKiAgIFtzdHlsZUNsYXNzXT1cInN0eWxlQ2xhc3NcIlxuICogICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCJcbiAqICAgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiXG4gKiAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAqICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gKiAgIFtyb3dIb3Zlcl09XCJyb3dIb3ZlclwiXG4gKiAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAqICAgW2NvbnRleHRNZW51SXRlbXNdPVwiY29udGV4dE1lbnVJdGVtc1wiXG4gKiAgIFtpc0xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAqICAgKG9uRmlsdGVyT3JTb3J0Q2hhbmdlZCk9XCJvbkZpbHRlck9yU29ydENoYW5nZWQoJGV2ZW50KVwiXG4gKiAgIChvblJvd1NlbGVjdCk9XCJvblJvd1NlbGVjdCgkZXZlbnQpXCJcbiAqICAgKG9uUm93VW5zZWxlY3QpPVwib25Sb3dVbnNlbGVjdCgkZXZlbnQpXCJcbiAqICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiPlxuICogPC9ydy10YWJsZT5cbiAqIFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdydy10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtdGFibGUuY29tcG9uZW50LmNzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsXG4gICAgZGVwczogW1tPcHRpb25hbCwgRm9ybUFycmF5TmFtZV1dLFxuICAgIHVzZUZhY3Rvcnk6IChhcnJheU5hbWU6IEZvcm1BcnJheU5hbWUpID0+IGFycmF5TmFtZSwgfV1cbiAgfSlcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRUYWJsZUNvbXBvbmVudDxUTGlzdEl0ZW0gZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYXBpLlxuICAgKiBGb3IgdGhlIGVkaXRpbmcgY2FwYWJpbGl0eSwgeW91IG11c3QgYWxzbyBzZXQgdGhlIGVkaXRUZW1wbGF0ZSBhbmQgdGhlIGZvcm1BcnJheS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcGlOYW1lPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2Zvcm1BcnJheT86IEZvcm1BcnJheTxGb3JtR3JvdXA8e1tLIGluIGtleW9mIFRMaXN0SXRlbV0gOiBBYnN0cmFjdENvbnRyb2w8dW5rbm93bj59Pj47XG5cbiAgLyoqXG4gICAqIFRoZSBmb3JtIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGZvcm0gZ3JvdXBzIGZvciB0aGUgaXRlbXMuXG4gICAqIEJpbmQgdGhpcyB0byB0aGUgZm9ybSBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBmb3JtIGdyb3VwcyBmb3IgdGhlIGl0ZW1zLlxuICAgKiBFYWNoIGVudHJ5IGluIHRoZSBhcnJheSByZXByZXNlbnRzIG9uZSByb3cgaW4gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgcGFnZSBvZiB0aGUgdGFibGUuXG4gICAqIEZvciB0aGUgZWRpdGluZyBjYXBhYmlsaXR5LCB5b3UgbXVzdCBhbHNvIHNldCB0aGUgYXBpTmFtZSBhbmQgdGhlIGVkaXRUZW1wbGF0ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZm9ybUFycmF5KHZhbHVlOiBGb3JtQXJyYXk8Rm9ybUdyb3VwPHtbSyBpbiBrZXlvZiBUTGlzdEl0ZW1dIDogQWJzdHJhY3RDb250cm9sPHVua25vd24+fT4+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fZm9ybUFycmF5ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvcm1BcnJheSgpOiBGb3JtQXJyYXk8Rm9ybUdyb3VwPHtbSyBpbiBrZXlvZiBUTGlzdEl0ZW1dIDogQWJzdHJhY3RDb250cm9sPHVua25vd24+fT4+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUFycmF5ID8/IHRoaXMuX2NvbnRyb2xDb250YWluZXI/LmNvbnRyb2wgYXMgRm9ybUFycmF5PEZvcm1Hcm91cDx7W0sgaW4ga2V5b2YgVExpc3RJdGVtXSA6IEFic3RyYWN0Q29udHJvbDx1bmtub3duPn0+PiB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX3NlYXJjaFRlbXBsYXRlOiBUZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZSh7cHJvcGVydGllczogW119KTtcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRoYXQgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSB0YWJsZSBjb2x1bW5zIGFuZCB0byBmaWx0ZXIgYW5kIHNvcnQgdGhlIGl0ZW1zLlxuICAgKiBCaW5kIHRoaXMgdG8gdGhlIHRlbXBsYXRlIHRoYXQgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSB0YWJsZSBjb2x1bW5zIGFuZCB0byBmaWx0ZXIgYW5kIHNvcnQgdGhlIGl0ZW1zLlxuICAgKiBOb3JtYWxseSB0aGlzIGlzIHJldHVybmVkIGZyb20gdGhlIGJhY2tlbmQgYXMgcGFydCBvZiB0aGUgaGFsLWZvcm1zIHJlc291cmNlIGZyb20gYSBsaXN0IGVuZHBvaW50LlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCBzZWFyY2hUZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGUpe1xuICAgIHRoaXMuX3NlYXJjaFRlbXBsYXRlID0gdmFsdWU7XG4gICAgdGhpcy5fY29sdW1ucyA9IHZhbHVlPy5wcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAudHlwZSAhPT0gUHJvcGVydHlUeXBlLkhpZGRlbikgPz8gW107XG4gICAgdGhpcy5zZXRTb3J0RmllbGRBbmRTb3J0T3JkZXIodmFsdWUpXG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlYXJjaFRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hUZW1wbGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2VkaXRUZW1wbGF0ZT86IFRlbXBsYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBpcyB1c2VkIHRvIGVkaXQgdGhlIGl0ZW1zLlxuICAgKiBCaW5kIHRoaXMgdG8gdGhlIHRlbXBsYXRlIHRoYXQgaXMgdXNlZCB0byBlZGl0IHRoZSBpdGVtcy5cbiAgICogTm9ybWFsbHkgdGhpcyBpcyByZXR1cm5lZCBmcm9tIHRoZSBiYWNrZW5kIGFzIHBhcnQgb2YgdGhlIGhhbC1mb3JtcyByZXNvdXJjZSBmcm9tIGEgbGlzdCBlbmRwb2ludC5cbiAgICogRm9yIHRoZSBlZGl0aW5nIGNhcGFiaWxpdHksIHlvdSBtdXN0IGFsc28gc2V0IHRoZSBhcGlOYW1lIGFuZCB0aGUgZm9ybUFycmF5LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlZGl0VGVtcGxhdGUodmFsdWU6IFRlbXBsYXRlIHwgdW5kZWZpbmVkKXtcbiAgICB0aGlzLl9lZGl0VGVtcGxhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUVkaXRQcm9wZXJ0aWVzKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtQXJyYXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZWRpdFRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9lZGl0VGVtcGxhdGU7XG4gIH1cblxuICBwcml2YXRlIF9lZGl0UHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPj4gPSB7fTtcbiAgcHVibGljIGdldCBlZGl0UHJvcGVydGllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdFByb3BlcnRpZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRWRpdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdFRlbXBsYXRlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5mb3JtQXJyYXkgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmFwaU5hbWU7XG4gIH1cblxuICBwcml2YXRlIF9yb3dzOiBUTGlzdEl0ZW1bXSA9IFtdO1xuICBwdWJsaWMgZ2V0IHJvd3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3M7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGl0ZW1zIHRoYXQgYXJlIGRpc3BsYXllZCBhcyB0YWJsZSByb3dzLlxuICAgKiBCaW5kIHRoaXMgdG8gdGhlIGl0ZW1zIHRoYXQgYXJlIGRpc3BsYXllZCBhcyB0YWJsZSByb3dzLlxuICAgKiBOb3JtYWxseSB0aGlzIGlzIHJldHVybmVkIGZyb20gdGhlIGJhY2tlbmQgYXMgcGFydCBvZiB0aGUgaGFsLWZvcm1zIHJlc291cmNlIGZyb20gYSBsaXN0IGVuZHBvaW50LlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgcHVibGljIHNldCByb3dzKHZhbHVlOiBUTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMuX3Jvd3MgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUNhbGN1bGF0ZWRGdW5jdGlvblZhbHVlcyh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVGb3JtQXJyYXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UuXG4gICAqIFRoZSBkZWZhdWx0IGlzIFsxMCwgMjUsIDUwXS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3dzUGVyUGFnZU9wdGlvbnMgPSBbMTAsIDI1LCA1MF07XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG1lbnUgdGhhdCBpcyBkaXNwbGF5ZWQgYXQgdGhlIHRvcCByaWdodCBvZiB0aGUgdGFibGUuXG4gICAqIEBzZWUgUmVzdFdvcmxkTWVudUJ1dHRvbkNvbXBvbmVudFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlYWRlck1lbnU6IE1lbnVJdGVtW10gPSBbXTtcblxuICBwcml2YXRlIF9yb3dNZW51OiAocm93OiBUTGlzdEl0ZW0sIG9wZW5lZEJ5UmlnaHRDbGljazogYm9vbGVhbikgPT4gTWVudUl0ZW1bXSA9ICgpID0+IFtdO1xuICBwdWJsaWMgZ2V0IHJvd01lbnUoKTogKHJvdzogVExpc3RJdGVtLCBvcGVuZWRCeVJpZ2h0Q2xpY2s6IGJvb2xlYW4pID0+IE1lbnVJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLl9yb3dNZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBtZW51IGZvciBhIHJvdy5cbiAgICogQmFzZWQgb24gdGhlIG9wZW5lZEJ5UmlnaHRDbGljayBwYXJhbWV0ZXIsIHRoZSBmdW5jdGlvbiBjYW4gcmV0dXJuIGRpZmZlcmVudCBtZW51cy5cbiAgICogVGhlIG1lbnUgd2hlbiBpdCBoYXMgbm90IGJlZW4gb3BlbmVkIGJ5IGEgcmlnaHQgY2xpY2sgaXMgZGlzcGxheWVkIGluIGFuIGV4dHJhIGNvbHVtbiB0byB0aGUgcmlnaHQgb2YgdGhlIHRhYmxlIGlmIGBzaG93Um93TWVudUFzQ29sdW1uYCBpcyBgdHJ1ZWAuXG4gICAqIFRoZSBtZW51IHdoZW4gaXQgaGFzIGJlZW4gb3BlbmVkIGJ5IGEgcmlnaHQgY2xpY2sgaXMgZGlzcGxheWVkIGFzIGEgY29udGV4dCBtZW51IGlmIGBzaG93Um93TWVudU9uUmlnaHRDbGlja2AgaXMgYHRydWVgLlxuICAgKiBAcGFyYW0gcm93IFRoZSByb3cgZm9yIHdoaWNoIHRvIHJldHVybiB0aGUgbWVudS5cbiAgICogQHBhcmFtIG9wZW5lZEJ5UmlnaHRDbGljayBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbWVudSB3YXMgb3BlbmVkIGJ5IGEgcmlnaHQgY2xpY2suXG4gICAqIEByZXR1cm5zIFRoZSBtZW51IGZvciB0aGUgcm93LlxuICAgKiBAc2VlIHNob3dSb3dNZW51QXNDb2x1bW5cbiAgICogQHNlZSBzaG93Um93TWVudU9uUmlnaHRDbGlja1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCByb3dNZW51KHZhbHVlOiAocm93OiBUTGlzdEl0ZW0sIG9wZW5lZEJ5UmlnaHRDbGljazogYm9vbGVhbikgPT4gTWVudUl0ZW1bXSkge1xuICAgIHRoaXMuX3Jvd01lbnUgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVJvd01lbnVzKHRoaXMucm93cyk7XG4gIH1cblxuICBwcml2YXRlIF9yb3dNZW51czogTWVudUl0ZW1bXVtdID0gW107XG5cbiAgcHJpdmF0ZSB1cGRhdGVDYWxjdWxhdGVkRnVuY3Rpb25WYWx1ZXModmFsdWU6IFRMaXN0SXRlbVtdKSB7XG4gICAgdGhpcy51cGRhdGVSb3dNZW51cyh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVSb3dTdHlsZXModmFsdWUpO1xuICAgIHRoaXMudXBkYXRlQ2VsbFN0eWxlcyh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNlbGxTdHlsZXModmFsdWU6IFRMaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5fY2VsbFN0eWxlQ2xhc3NlcyA9IHZhbHVlLm1hcCgociwgcmkpID0+IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmNvbHVtbnMubWFwKChjLCBjaSkgPT4gW2MubmFtZSwgdGhpcy5jZWxsU3R5bGVDbGFzcyhyLCBjLCByaSwgY2kpXSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUm93U3R5bGVzKHZhbHVlOiBUTGlzdEl0ZW1bXSkge1xuICAgIHRoaXMuX3Jvd1N0eWxlQ2xhc3NlcyA9IHZhbHVlLm1hcCgociwgaSkgPT4gdGhpcy5yb3dTdHlsZUNsYXNzKHIsIGkpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUm93TWVudXModmFsdWU6IFRMaXN0SXRlbVtdKSB7XG4gICAgaWYgKHRoaXMuc2hvd1Jvd01lbnVBc0NvbHVtbilcbiAgICAgIHRoaXMuX3Jvd01lbnVzID0gdmFsdWUubWFwKHIgPT4gdGhpcy5yb3dNZW51KHIsIGZhbHNlKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJvd01lbnVzKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3dNZW51cztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd01lbnVDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyTWVudS5sZW5ndGggPiAwIHx8ICh0aGlzLnNob3dSb3dNZW51QXNDb2x1bW4gJiYgdGhpcy5yb3dNZW51cy5zb21lKG0gPT4gbS5sZW5ndGggPiAwKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJvdyBtZW51IGlzIGRpc3BsYXllZCBhcyBhIGNvbHVtbiB0byB0aGUgcmlnaHQgb2YgdGhlIHRhYmxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dSb3dNZW51QXNDb2x1bW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcm93IG1lbnUgaXMgZGlzcGxheWVkIGFzIGEgY29udGV4dCBtZW51IHdoZW4gdGhlIHVzZXIgcmlnaHQgY2xpY2tzIG9uIGEgcm93LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNob3dSb3dNZW51T25SaWdodENsaWNrID0gdHJ1ZTtcblxuICBwcml2YXRlIF9yb3dTdHlsZUNsYXNzOiAocm93OiBUTGlzdEl0ZW0sIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyA9ICgpID0+IFwiXCI7XG4gIHB1YmxpYyBnZXQgcm93U3R5bGVDbGFzcygpOiAocm93OiBUTGlzdEl0ZW0sIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd1N0eWxlQ2xhc3M7XG4gIH1cblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHN0eWxlIGNsYXNzIGZvciBhIHJvdy5cbiAgICogQHBhcmFtIHJvdyBUaGUgcm93IGZvciB3aGljaCB0byByZXR1cm4gdGhlIHN0eWxlIGNsYXNzLlxuICAgKiBAcGFyYW0gcm93SW5kZXggVGhlIGluZGV4IG9mIHRoZSByb3cgb24gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgcGFnZS5cbiAgICogQHJldHVybnMgVGhlIHN0eWxlIGNsYXNzIGZvciB0aGUgcm93LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCByb3dTdHlsZUNsYXNzKHZhbHVlOiAocm93OiBUTGlzdEl0ZW0sIHJvd0luZGV4OiBudW1iZXIpID0+IHN0cmluZykge1xuICAgIHRoaXMuX3Jvd1N0eWxlQ2xhc3MgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVJvd1N0eWxlcyh0aGlzLnJvd3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcm93U3R5bGVDbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgZ2V0IHJvd1N0eWxlQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm93U3R5bGVDbGFzc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2VsbFN0eWxlQ2xhc3M6IChyb3c6IFRMaXN0SXRlbSwgY29sdW1uOiBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+LCByb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgPSAoKSA9PiBcIlwiO1xuICBwdWJsaWMgZ2V0IGNlbGxTdHlsZUNsYXNzKCk6IChyb3c6IFRMaXN0SXRlbSwgY29sdW1uOiBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+LCByb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyKSA9PiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jZWxsU3R5bGVDbGFzcztcbiAgfVxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHN0eWxlIGNsYXNzIGZvciBhIGNlbGwuXG4gICAqIEBwYXJhbSByb3cgVGhlIHJvdyBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBzdHlsZSBjbGFzcy5cbiAgICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGZvciB3aGljaCB0byByZXR1cm4gdGhlIHN0eWxlIGNsYXNzLlxuICAgKiBAcGFyYW0gcm93SW5kZXggVGhlIGluZGV4IG9mIHRoZSByb3cgb24gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgcGFnZS5cbiAgICogQHBhcmFtIGNvbHVtbkluZGV4IFRoZSBpbmRleCBvZiB0aGUgY29sdW1uLlxuICAgKiBAcmV0dXJucyBUaGUgc3R5bGUgY2xhc3MgZm9yIHRoZSBjZWxsLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjZWxsU3R5bGVDbGFzcyh2YWx1ZTogKHJvdzogVExpc3RJdGVtLCBjb2x1bW46IFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4sIHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IHN0cmluZykge1xuICAgIHRoaXMuX2NlbGxTdHlsZUNsYXNzID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVDZWxsU3R5bGVzKHRoaXMucm93cyk7XG4gIH1cblxuICBwcml2YXRlIF9jZWxsU3R5bGVDbGFzc2VzOiBSZWNvcmQ8c3RyaW5nLHN0cmluZz5bXSA9IFtdO1xuICBwdWJsaWMgZ2V0IGNlbGxTdHlsZUNsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NlbGxTdHlsZUNsYXNzZXM7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgdG90YWxSZWNvcmRzID0gMDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtU2VydmljZTogRm9ybVNlcnZpY2UsKSB7XG4gIH1cblxuICBwcml2YXRlIHNldFNvcnRGaWVsZEFuZFNvcnRPcmRlcih0ZW1wbGF0ZTogVGVtcGxhdGUgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBvcmRlckJ5ID0gdGVtcGxhdGU/LnByb3BlcnRpZXM/LmZpbmQocCA9PiBwPy5uYW1lID09PSBcIiRvcmRlcmJ5XCIpPy52YWx1ZTtcblxuICAgIGlmKG9yZGVyQnkgPT09IG51bGwgfHwgb3JkZXJCeSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBvcmRlckJ5ICE9PSAnc3RyaW5nJylcbiAgICByZXR1cm47XG5cbiAgICBjb25zdCBbZmllbGQsIG9yZGVyXSA9IG9yZGVyQnkuc3BsaXQoXCIgXCIpO1xuICAgIGNvbnN0IG9yZGVyQXNOdW1iZXIgPSBvcmRlcj8udG9Mb3dlckNhc2UoKSA9PT0gXCJkZXNjXCIgPyAtMSA6IDE7XG5cbiAgICBpZiAodGhpcy5tdWx0aVNvcnRNZXRhPy5sZW5ndGggIT09IDEgfHwgdGhpcy5tdWx0aVNvcnRNZXRhWzBdLmZpZWxkICE9PSBmaWVsZCB8fCB0aGlzLm11bHRpU29ydE1ldGFbMF0ub3JkZXIgIT09IG9yZGVyQXNOdW1iZXIpXG4gICAgICB0aGlzLm11bHRpU29ydE1ldGEgPSBbe2ZpZWxkOiBmaWVsZCwgb3JkZXI6IG9yZGVyQXNOdW1iZXJ9XVxuICB9XG5cbiAgcHVibGljIG11bHRpU29ydE1ldGE/OiBTb3J0TWV0YVtdIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIHN0eWxlIGNsYXNzIGZvciB0aGUgdGFibGUuXG4gICAqIFRoZSBkZWZhdWx0IGlzIFwiXCIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3R5bGVDbGFzczogc3RyaW5nID0gXCJcIjtcblxuICAvKipcbiAgICogVGhlIGlubGluZSBzdHlsZSBmb3IgdGhlIHRhYmxlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHRhYmxlU3R5bGU/OiBSZWNvcmQ8c3RyaW5nLHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWJsZSBpcyBzY3JvbGxhYmxlLlxuICAgKiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2Nyb2xsYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNjcm9sbGFibGUgdGFibGUuXG4gICAqIFRoZSBkZWZhdWx0IGlzIFwiZmxleFwiLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNjcm9sbEhlaWdodDogc3RyaW5nID0gXCJmbGV4XCI7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgZmlsdGVyIG9yIHNvcnQgcGFyYW1ldGVycyBoYXZlIGNoYW5nZWQuXG4gICAqIFN1YnNjcmliZSB0byB0aGlzIGV2ZW50IHRvIGxvYWQgdGhlIGl0ZW1zIGZyb20gdGhlIGJhY2tlbmQuXG4gICAqIFRoaXMgaXMgb25lIG9mIHRoZSBjb3JlIGZlYXR1cmVzIG9mIHRoZSB0YWJsZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25GaWx0ZXJPclNvcnRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxPRGF0YVBhcmFtZXRlcnM+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHJvdyBoYXMgYmVlbiBzZWxlY3RlZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25Sb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFRMaXN0SXRlbT4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcm93IGhhcyBiZWVuIHVuc2VsZWN0ZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9uUm93VW5zZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFRMaXN0SXRlbT4oKTtcblxuICAvKipcbiAgICogVGhlIG1vZGUgaG93IHJvd3MgY2FuIGJlIHNlbGVjdGVkLlxuICAgKiBUaGUgZGVmYXVsdCBpcyBgbnVsbGAgd2hpY2ggbWVhbnMgcm93cyBjYW5ub3QgYmUgc2VsZWN0ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VsZWN0aW9uTW9kZTogXCJzaW5nbGVcIiB8IFwibXVsdGlwbGVcIiB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUgcm93cyBhcmUgaGlnaGxpZ2h0ZWQgd2hlbiB0aGUgbW91c2UgaG92ZXJzIG92ZXIgdGhlbS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHJvd3MuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHNlbGVjdGlvbigpOiBUTGlzdEl0ZW1bXSB7XG4gICAgcmV0dXJuIF8uaXNBcnJheSh0aGlzLl9zZWxlY3Rpb24pID8gdGhpcy5fc2VsZWN0aW9uIDogW3RoaXMuX3NlbGVjdGlvbl07XG4gIH1cbiAgcHVibGljIHNldCBzZWxlY3Rpb24odmFsdWU6IFRMaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIF9zZWxlY3Rpb246IFRMaXN0SXRlbSB8IFRMaXN0SXRlbVtdID0gW107XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkLlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIG5ldyBzZWxlY3Rpb24uXG4gICAqL1xuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VExpc3RJdGVtW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoXCJjb250ZXh0TWVudVwiKVxuICBjb250ZXh0TWVudT86IENvbnRleHRNZW51O1xuXG4gIHByaXZhdGUgX2NvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgcHVibGljIGdldCBjb250ZXh0TWVudUl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0TWVudUl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWJsZSBpcyBjdXJyZW50bHkgbG9hZGluZy5cbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSB3aGlsZSBsb2FkaW5nIG5ldyBpdGVtcyBmcm9tIHRoZSBiYWNrZW5kIHdoZW4gcmVhY3RpbmcgdG8gdGhlIGBvbkZpbHRlck9yU29ydENoYW5nZWRgIGV2ZW50LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz5bXSA9IFtdO1xuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIHByaXZhdGUgX3Jvd3NCZWZvcmVDdXJyZW50UGFnZTogbnVtYmVyID0gMDtcbiAgcHVibGljIGdldCByb3dzQmVmb3JlQ3VycmVudFBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcm93c0JlZm9yZUN1cnJlbnRQYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2RhdGVGb3JtYXQgPSBuZXcgRGF0ZSgzMzMzLCAxMCwgMjIpIC8vIG1vbnRocyBzdGFydCBhdCAwIGluIEpTXG4gICAgLnRvTG9jYWxlRGF0ZVN0cmluZygpXG4gICAgLnJlcGxhY2UoXCIyMlwiLCBcImRkXCIpXG4gICAgLnJlcGxhY2UoXCIxMVwiLCBcIk1NXCIpXG4gICAgLnJlcGxhY2UoXCIzMzMzXCIsIFwieXlcIilcbiAgICAucmVwbGFjZShcIjMzXCIsIFwieVwiKTtcblxuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUmVzdFdvcmxkVGFibGVDb21wb25lbnQuX2RhdGVGb3JtYXQ7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfdGltZUZvcm1hdCA9IG5ldyBEYXRlKDEsIDEsIDEsIDIyLCAzMywgNDQpXG4gICAgLnRvTG9jYWxlVGltZVN0cmluZygpXG4gICAgLnJlcGxhY2UoXCIyMlwiLCBcImhoXCIpXG4gICAgLnJlcGxhY2UoXCIzM1wiLCBcIm1tXCIpXG4gICAgLnJlcGxhY2UoXCI0NFwiLCBcInNzXCIpO1xuXG4gIHB1YmxpYyBnZXQgdGltZUZvcm1hdCgpIHtcbiAgICByZXR1cm4gUmVzdFdvcmxkVGFibGVDb21wb25lbnQuX3RpbWVGb3JtYXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFByb3BlcnR5VHlwZSgpOiB0eXBlb2YgUHJvcGVydHlUeXBlIHtcbiAgICByZXR1cm4gUHJvcGVydHlUeXBlO1xuICB9XG5cbiAgcHVibGljIGxvYWQoZXZlbnQ6IFRhYmxlTGF6eUxvYWRFdmVudCkge1xuICAgIHRoaXMubXVsdGlTb3J0TWV0YSA9IGV2ZW50Lm11bHRpU29ydE1ldGE7XG4gICAgdGhpcy5fcm93c0JlZm9yZUN1cnJlbnRQYWdlID0gZXZlbnQuZmlyc3QgPz8gMDtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gT0RhdGFTZXJ2aWNlLmNyZWF0ZVBhcmFtZXRlcnNGcm9tVGFibGVMb2FkRXZlbnQoZXZlbnQsIHRoaXMuc2VhcmNoVGVtcGxhdGUpO1xuICAgIHRoaXMub25GaWx0ZXJPclNvcnRDaGFuZ2VkLmVtaXQocGFyYW1ldGVycyk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkNvbnRleHRNZW51KGV2ZW50OiBNb3VzZUV2ZW50LCByb3c6IFRMaXN0SXRlbSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zaG93Um93TWVudU9uUmlnaHRDbGljayB8fCB0aGlzLmNvbnRleHRNZW51ID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLl9jb250ZXh0TWVudUl0ZW1zID0gdGhpcy5yb3dNZW51KHJvdywgdHJ1ZSk7XG4gICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2ZW50KTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd1NlbGVjdEludGVybmFsKGV2ZW50OiBUYWJsZVJvd1NlbGVjdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vblJvd1NlbGVjdC5lbWl0KGV2ZW50LmRhdGEpO1xuICB9XG5cbiAgcHVibGljIG9uUm93VW5zZWxlY3RJbnRlcm5hbChldmVudDogVGFibGVSb3dVblNlbGVjdEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vblJvd1Vuc2VsZWN0LmVtaXQoZXZlbnQuZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2VJbnRlcm5hbChldmVudDogVExpc3RJdGVtIHwgVExpc3RJdGVtW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KF8uaXNBcnJheShldmVudCkgPyBldmVudCA6IFtldmVudF0pO1xuICB9XG5cbiAgcHVibGljIHRvQ29sdW1uRmlsdGVyVHlwZShwcm9wZXJ0eVR5cGU6IFByb3BlcnR5VHlwZSkgOiBDb2x1bW5GaWx0ZXJUeXBle1xuICAgIHN3aXRjaChwcm9wZXJ0eVR5cGUpIHtcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLk51bWJlcjpcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLlBlcmNlbnQ6XG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5DdXJyZW5jeTpcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLk1vbnRoOlxuICAgICAgICByZXR1cm4gQ29sdW1uRmlsdGVyVHlwZS5udW1lcmljO1xuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuQm9vbDpcbiAgICAgICAgcmV0dXJuIENvbHVtbkZpbHRlclR5cGUuYm9vbGVhbjtcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLkRhdGU6XG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5EYXRldGltZUxvY2FsOlxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuRGF0ZXRpbWVPZmZzZXQ6XG4gICAgICAgIHJldHVybiBDb2x1bW5GaWx0ZXJUeXBlLmRhdGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gQ29sdW1uRmlsdGVyVHlwZS50ZXh0O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzaG93SW5wdXRGaWVsZChjb2x1bW46IFByb3BlcnR5KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzRWRpdGFibGUpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBlZGl0UHJvcGVydHkgPSB0aGlzLmVkaXRQcm9wZXJ0aWVzW2NvbHVtbi5uYW1lXTtcblxuICAgIHJldHVybiBlZGl0UHJvcGVydHkgIT09IHVuZGVmaW5lZCAmJiBlZGl0UHJvcGVydHkudHlwZSAhPT0gUHJvcGVydHlUeXBlLkhpZGRlbiAmJiAhZWRpdFByb3BlcnR5LnJlYWRPbmx5O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb3JtQXJyYXkoKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuaXNFZGl0YWJsZSB8fCAhdGhpcy5yb3dzIHx8ICF0aGlzLmZvcm1BcnJheSB8fCAhdGhpcy5lZGl0VGVtcGxhdGUpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLmZvcm1BcnJheS5jbGVhcigpO1xuXG4gICAgY29uc3QgbmV3Q29udHJvbHMgPSB0aGlzLnJvd3NcbiAgICAgIC5tYXAociA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1TZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cEZyb21UZW1wbGF0ZSh0aGlzLmVkaXRUZW1wbGF0ZSEpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgZm9ybUdyb3VwLnBhdGNoVmFsdWUocik7XG4gICAgICAgIHJldHVybiBmb3JtR3JvdXA7XG4gICAgICB9KTtcblxuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBuZXdDb250cm9scylcbiAgICAgIHRoaXMuZm9ybUFycmF5LnB1c2goY29udHJvbCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVkaXRQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0VGVtcGxhdGUpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLl9lZGl0UHJvcGVydGllcyA9IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmVkaXRUZW1wbGF0ZS5wcm9wZXJ0aWVzLm1hcChwID0+IFsgcC5uYW1lLCBwIF0pKTtcbiAgfVxufVxuIiwiPHAtdGFibGVcbiAgI3RhYmxlXG4gIFt2YWx1ZV09XCJyb3dzXCJcbiAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gIFtsYXp5XT1cInRydWVcIlxuICBbbGF6eUxvYWRPbkluaXRdPVwiZmFsc2VcIlxuICAob25MYXp5TG9hZCk9XCJsb2FkKCRldmVudClcIlxuICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcbiAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxuICBbcm93c109XCJyb3dzLmxlbmd0aFwiXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgW2xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gIFttdWx0aVNvcnRNZXRhXT1cIm11bHRpU29ydE1ldGFcIlxuICBbc3R5bGVDbGFzc109XCJzdHlsZUNsYXNzXCJcbiAgW3RhYmxlU3R5bGVdPVwidGFibGVTdHlsZVwiXG4gIFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGVcIlxuICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXG4gIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxuICAob25Sb3dTZWxlY3QpPVwib25Sb3dTZWxlY3RJbnRlcm5hbCgkZXZlbnQpXCJcbiAgKG9uUm93VW5zZWxlY3QpPVwib25Sb3dVbnNlbGVjdEludGVybmFsKCRldmVudClcIlxuICBbcm93SG92ZXJdPVwicm93SG92ZXJcIlxuICBbKHNlbGVjdGlvbildPVwiX3NlbGVjdGlvblwiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VJbnRlcm5hbCgkZXZlbnQpXCI+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxuICAgIDx0cj5cbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLm5hbWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWQtZmxleCBwLWpjLWJldHdlZW4gcC1haS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7e2NvbC5wcm9tcHR9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLm5hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW3R5cGVdPVwidG9Db2x1bW5GaWx0ZXJUeXBlKGNvbC50eXBlKVwiIFtmaWVsZF09XCJjb2wubmFtZVwiIGRpc3BsYXk9XCJtZW51XCI+PC9wLWNvbHVtbkZpbHRlcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggKm5nSWY9XCJzaG93TWVudUNvbHVtblwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgPHJ3LW1lbnUtYnV0dG9uIFtpdGVtc109XCJoZWFkZXJNZW51XCI+PC9ydy1tZW51LWJ1dHRvbj5cbiAgICAgICAgPC90aD5cbiAgICA8L3RyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWVudGl0eSBsZXQtY29sdW1ucz1cImNvbHVtbnNcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxuICAgIDx0ciAoY29udGV4dG1lbnUpPVwib3BlbkNvbnRleHRNZW51KCRldmVudCwgZW50aXR5KVwiIFtwU2VsZWN0YWJsZVJvd109XCJlbnRpdHlcIiBbcFNlbGVjdGFibGVSb3dEaXNhYmxlZF09XCJzZWxlY3Rpb25Nb2RlID09PSBudWxsXCIgW2NsYXNzTmFtZV09XCJyb3dTdHlsZUNsYXNzZXNbcm93SW5kZXggLSAodGFibGUuZmlyc3QgPz8gMCldXCI+XG4gICAgICA8dGQgW25nU3dpdGNoXT1cImNvbC50eXBlXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCIgW2NsYXNzTmFtZV09XCJjZWxsU3R5bGVDbGFzc2VzW3Jvd0luZGV4IC0gKHRhYmxlLmZpcnN0ID8/IDApXVtjb2wubmFtZV1cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0lucHV0RmllbGQoY29sKTsgZWxzZSB0ZXh0RmllbGRcIiBbZm9ybUdyb3VwXT1cImZvcm1BcnJheSEuY29udHJvbHNbcm93SW5kZXggLSAodGFibGUuZmlyc3QgPz8gMCldXCIgPlxuICAgICAgICAgICAgPHJ3LWlucHV0IFthcGlOYW1lXT1cImFwaU5hbWUhXCIgW3Byb3BlcnR5XT1cImVkaXRQcm9wZXJ0aWVzW2NvbC5uYW1lXVwiPjwvcnctaW5wdXQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZXh0RmllbGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGV4dFwiPlxuICAgICAgICAgICAgICAgIDxydy1hdmF0YXIgKm5nSWY9XCJjb2wubmFtZSA9PT0gJ2NyZWF0ZWRCeScgfHwgY29sLm5hbWUgPT09ICdsYXN0Q2hhbmdlZEJ5J1wiIFt1c2VyXT1cImVudGl0eVtjb2wubmFtZV1cIj48L3J3LWF2YXRhcj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC5uYW1lICE9PSAnY3JlYXRlZEJ5JyAmJiBjb2wubmFtZSAhPT0gJ2xhc3RDaGFuZ2VkQnknXCI+e3tlbnRpdHlbY29sLm5hbWVdfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuTnVtYmVyXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuUGVyY2VudFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkN1cnJlbmN5XCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQm9vbFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+PHAtdHJpU3RhdGVDaGVja2JveCBbKG5nTW9kZWwpXT1cImVudGl0eVtjb2wubmFtZV1cIiBbcmVhZG9ubHldPVwidHJ1ZVwiPjwvcC10cmlTdGF0ZUNoZWNrYm94Pjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRGF0ZVwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlRpbWVcIiBbcFRvb2x0aXBdPVwiZW50aXR5W2NvbC5uYW1lXVwiPnt7ZW50aXR5W2NvbC5uYW1lXSB8IHByb3BlcnR5VHlwZUZvcm1hdDpjb2wudHlwZX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EdXJhdGlvblwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkRhdGV0aW1lTG9jYWxcIiBbcFRvb2x0aXBdPVwiZW50aXR5W2NvbC5uYW1lXVwiPnt7ZW50aXR5W2NvbC5uYW1lXSB8IHByb3BlcnR5VHlwZUZvcm1hdDpQcm9wZXJ0eVR5cGUuRGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EYXRldGltZU9mZnNldFwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OlByb3BlcnR5VHlwZS5EYXRlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkNvbGxlY3Rpb25cIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPjxwICpuZ0Zvcj1cImxldCBhcnJheUVsZW1lbnQgb2YgZW50aXR5W2NvbC5uYW1lXVwiPnt7YXJyYXlFbGVtZW50IHwganNvbn19PC9wPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuT2JqZWN0XCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj57e2VudGl0eVtjb2wubmFtZV0gfCBqc29ufX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwic2hvd01lbnVDb2x1bW5cIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgIDxydy1tZW51LWJ1dHRvbiAqbmdJZj1cInNob3dSb3dNZW51QXNDb2x1bW5cIiBbaXRlbXNdPVwicm93TWVudXNbcm93SW5kZXggLSAodGFibGUuZmlyc3QgPz8gMCldXCI+PC9ydy1tZW51LWJ1dHRvbj5cbiAgICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxwLWNvbnRleHRNZW51ICNjb250ZXh0TWVudSBhcHBlbmRUbz1cImJvZHlcIiBbbW9kZWxdPVwiY29udGV4dE1lbnVJdGVtc1wiPjwvcC1jb250ZXh0TWVudT5cbjwvcC10YWJsZT5cbiJdfQ==
482
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtdGFibGUvcmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtdGFibGUvcmVzdHdvcmxkLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQXlCLFlBQVksRUFBZSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFzQixNQUFNLGFBQWEsQ0FBQztBQUVsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFN0QsT0FBTyxFQUFtQixnQkFBZ0IsRUFBYSxhQUFhLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFHeEcsSUFBSyxnQkFLSjtBQUxELFdBQUssZ0JBQWdCO0lBQ25CLGlDQUFhLENBQUE7SUFDYix1Q0FBbUIsQ0FBQTtJQUNuQix1Q0FBbUIsQ0FBQTtJQUNuQixpQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxJLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFLcEI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ0c7QUFVSCxNQUFNLE9BQU8sdUJBQXVCO0lBc05mO0lBQ0E7SUF0Tm5COzs7T0FH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QkF3QkssY0FBYztzQkFEeEIsS0FBSztnQkFZQyxZQUFZO3NCQURsQixLQUFLO2dCQTRCQyxVQUFVO3NCQURoQixLQUFLO2dCQU9DLFVBQVU7c0JBRGhCLEtBQUs7Z0JBUUMsVUFBVTtzQkFEaEIsS0FBSztnQkFRQyxZQUFZO3NCQURsQixLQUFLO2dCQVNDLHFCQUFxQjtzQkFEM0IsTUFBTTtnQkFPQSxXQUFXO3NCQURqQixNQUFNO2dCQU9BLGFBQWE7c0JBRG5CLE1BQU07Z0JBUUEsYUFBYTtzQkFEbkIsS0FBSztnQkFPQyxRQUFRO3NCQURkLEtBQUs7Z0JBT0ssU0FBUztzQkFEbkIsS0FBSztnQkFjTixlQUFlO3NCQURkLE1BQU07Z0JBSVAsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWE7Z0JBYWpCLFNBQVM7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU2VydmljZSwgUHJvcGVydHksIFByb3BlcnR5VHlwZSwgU2ltcGxlVmFsdWUsIFRlbXBsYXRlIH0gZnJvbSAnQHdlcnR6dWkvbmd4LWhhbC1jbGllbnQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgRmlsdGVyTWF0Y2hNb2RlLCBNZW51SXRlbSwgU29ydE1ldGEgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBPRGF0YVBhcmFtZXRlcnMgfSBmcm9tICcuLi8uLi9tb2RlbHMvby1kYXRhJztcbmltcG9ydCB7IE9EYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL28tZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAncHJpbWVuZy9jb250ZXh0bWVudSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1BcnJheSwgRm9ybUFycmF5TmFtZSwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGFibGVMYXp5TG9hZEV2ZW50LCBUYWJsZVJvd1NlbGVjdEV2ZW50LCBUYWJsZVJvd1VuU2VsZWN0RXZlbnQgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcblxuZW51bSBDb2x1bW5GaWx0ZXJUeXBlIHtcbiAgdGV4dCA9ICd0ZXh0JyxcbiAgbnVtZXJpYyA9ICdudW1lcmljJyxcbiAgYm9vbGVhbiA9ICdib29sZWFuJyxcbiAgZGF0ZSA9ICdkYXRlJ1xufVxuXG4vKipcbiAqIERpc3BsYXlzIGEgdGFibGUgYmFzZWQgb24gYSBzZWFyY2gtLCBhbiBlZGl0LXRlbXBsYXRlIGFuZCBhIGxpc3Qgb2YgaXRlbXMuXG4gKiBUaGUgc2VhcmNoLXRlbXBsYXRlIGlzIHJlcXVpcmVkIGFuZCB1c2VkIHRvIGRpc3BsYXkgdGhlIHRhYmxlIGNvbHVtbnMgYW5kIHRvIGZpbHRlciBhbmQgc29ydCB0aGUgaXRlbXMuXG4gKiBUaGUgZWRpdC10ZW1wbGF0ZSBpcyBvcHRpb25hbCBhbmQgdXNlZCB0byBlZGl0IHRoZSBpdGVtcy4gRm9yIHRoZSBlZGl0IGNhcGFiaWxpdHksIHRoZSB0YWJsZSBtdXN0IGJlIHBhcnQgb2YgYSByZWFjdGl2ZSBmb3JtLlxuICogVGhlIGl0ZW1zIGFyZSBkaXNwbGF5ZWQgYXMgdGFibGUgcm93cy5cbiAqIFRoZSB0YWJsZSBzdXBwb3J0cyBsYXp5IGxvYWRpbmcsIHJvdyBzZWxlY3Rpb24sIHJvdyBtZW51cywgYW5kIGNvbnRleHQgbWVudXMuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiA8cnctdGFibGVcbiAqICAgW2FwaU5hbWVdPVwiYXBpTmFtZVwiXG4gKiAgIFtzZWFyY2hUZW1wbGF0ZV09XCJzZWFyY2hUZW1wbGF0ZVwiXG4gKiAgIFtlZGl0VGVtcGxhdGVdPVwiZWRpdFRlbXBsYXRlXCJcbiAqICAgW3Jvd3NdPVwicm93c1wiXG4gKiAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzEwLCAyNSwgNTBdXCJcbiAqICAgW2hlYWRlck1lbnVdPVwiaGVhZGVyTWVudVwiXG4gKiAgIFtyb3dNZW51XT1cInJvd01lbnVcIlxuICogICBbcm93U3R5bGVDbGFzc109XCJyb3dTdHlsZUNsYXNzXCJcbiAqICAgW2NlbGxTdHlsZUNsYXNzXT1cImNlbGxTdHlsZUNsYXNzXCJcbiAqICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICogICBbbXVsdGlTb3J0TWV0YV09XCJtdWx0aVNvcnRNZXRhXCJcbiAqICAgW3N0eWxlQ2xhc3NdPVwic3R5bGVDbGFzc1wiXG4gKiAgIFt0YWJsZVN0eWxlXT1cInRhYmxlU3R5bGVcIlxuICogICBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCJcbiAqICAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxuICogICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcbiAqICAgW3Jvd0hvdmVyXT1cInJvd0hvdmVyXCJcbiAqICAgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25cIlxuICogICBbY29udGV4dE1lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcbiAqICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIlxuICogICAob25GaWx0ZXJPclNvcnRDaGFuZ2VkKT1cIm9uRmlsdGVyT3JTb3J0Q2hhbmdlZCgkZXZlbnQpXCJcbiAqICAgKG9uUm93U2VsZWN0KT1cIm9uUm93U2VsZWN0KCRldmVudClcIlxuICogICAob25Sb3dVbnNlbGVjdCk9XCJvblJvd1Vuc2VsZWN0KCRldmVudClcIlxuICogICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gKiA8L3J3LXRhYmxlPlxuICogXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3J3LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC10YWJsZS5jb21wb25lbnQuY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lcixcbiAgICBkZXBzOiBbW09wdGlvbmFsLCBGb3JtQXJyYXlOYW1lXV0sXG4gICAgdXNlRmFjdG9yeTogKGFycmF5TmFtZTogRm9ybUFycmF5TmFtZSkgPT4gYXJyYXlOYW1lLCB9XVxuICB9KVxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZFRhYmxlQ29tcG9uZW50PFRMaXN0SXRlbSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBhcGkuXG4gICAqIEZvciB0aGUgZWRpdGluZyBjYXBhYmlsaXR5LCB5b3UgbXVzdCBhbHNvIHNldCB0aGUgZWRpdFRlbXBsYXRlIGFuZCB0aGUgZm9ybUFycmF5LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGFwaU5hbWU/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfZm9ybUFycmF5PzogRm9ybUFycmF5PEZvcm1Hcm91cDx7W0sgaW4ga2V5b2YgVExpc3RJdGVtXSA6IEFic3RyYWN0Q29udHJvbDx1bmtub3duPn0+PjtcblxuICAvKipcbiAgICogVGhlIGZvcm0gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgZm9ybSBncm91cHMgZm9yIHRoZSBpdGVtcy5cbiAgICogQmluZCB0aGlzIHRvIHRoZSBmb3JtIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGZvcm0gZ3JvdXBzIGZvciB0aGUgaXRlbXMuXG4gICAqIEVhY2ggZW50cnkgaW4gdGhlIGFycmF5IHJlcHJlc2VudHMgb25lIHJvdyBpbiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBwYWdlIG9mIHRoZSB0YWJsZS5cbiAgICogRm9yIHRoZSBlZGl0aW5nIGNhcGFiaWxpdHksIHlvdSBtdXN0IGFsc28gc2V0IHRoZSBhcGlOYW1lIGFuZCB0aGUgZWRpdFRlbXBsYXRlLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmb3JtQXJyYXkodmFsdWU6IEZvcm1BcnJheTxGb3JtR3JvdXA8e1tLIGluIGtleW9mIFRMaXN0SXRlbV0gOiBBYnN0cmFjdENvbnRyb2w8dW5rbm93bj59Pj4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9mb3JtQXJyYXkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9ybUFycmF5KCk6IEZvcm1BcnJheTxGb3JtR3JvdXA8e1tLIGluIGtleW9mIFRMaXN0SXRlbV0gOiBBYnN0cmFjdENvbnRyb2w8dW5rbm93bj59Pj4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9mb3JtQXJyYXkgPz8gdGhpcy5fY29udHJvbENvbnRhaW5lcj8uY29udHJvbCBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPHtbSyBpbiBrZXlvZiBUTGlzdEl0ZW1dIDogQWJzdHJhY3RDb250cm9sPHVua25vd24+fT4+IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VhcmNoVGVtcGxhdGU6IFRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKHtwcm9wZXJ0aWVzOiBbXX0pO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdGhhdCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHRhYmxlIGNvbHVtbnMgYW5kIHRvIGZpbHRlciBhbmQgc29ydCB0aGUgaXRlbXMuXG4gICAqIEJpbmQgdGhpcyB0byB0aGUgdGVtcGxhdGUgdGhhdCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHRhYmxlIGNvbHVtbnMgYW5kIHRvIGZpbHRlciBhbmQgc29ydCB0aGUgaXRlbXMuXG4gICAqIE5vcm1hbGx5IHRoaXMgaXMgcmV0dXJuZWQgZnJvbSB0aGUgYmFja2VuZCBhcyBwYXJ0IG9mIHRoZSBoYWwtZm9ybXMgcmVzb3VyY2UgZnJvbSBhIGxpc3QgZW5kcG9pbnQuXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IHNlYXJjaFRlbXBsYXRlKHZhbHVlOiBUZW1wbGF0ZSl7XG4gICAgdGhpcy5fc2VhcmNoVGVtcGxhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWU/LnByb3BlcnRpZXMuZmlsdGVyKHAgPT4gcC50eXBlICE9PSBQcm9wZXJ0eVR5cGUuSGlkZGVuKSA/PyBbXTtcbiAgICB0aGlzLnNldFNvcnRGaWVsZEFuZFNvcnRPcmRlcih2YWx1ZSlcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VhcmNoVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFRlbXBsYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZWRpdFRlbXBsYXRlPzogVGVtcGxhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSB0aGF0IGlzIHVzZWQgdG8gZWRpdCB0aGUgaXRlbXMuXG4gICAqIEJpbmQgdGhpcyB0byB0aGUgdGVtcGxhdGUgdGhhdCBpcyB1c2VkIHRvIGVkaXQgdGhlIGl0ZW1zLlxuICAgKiBOb3JtYWxseSB0aGlzIGlzIHJldHVybmVkIGZyb20gdGhlIGJhY2tlbmQgYXMgcGFydCBvZiB0aGUgaGFsLWZvcm1zIHJlc291cmNlIGZyb20gYSBsaXN0IGVuZHBvaW50LlxuICAgKiBGb3IgdGhlIGVkaXRpbmcgY2FwYWJpbGl0eSwgeW91IG11c3QgYWxzbyBzZXQgdGhlIGFwaU5hbWUgYW5kIHRoZSBmb3JtQXJyYXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVkaXRUZW1wbGF0ZSh2YWx1ZTogVGVtcGxhdGUgfCB1bmRlZmluZWQpe1xuICAgIHRoaXMuX2VkaXRUZW1wbGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlRWRpdFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1BcnJheSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBlZGl0VGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRUZW1wbGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2VkaXRQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xuICBwdWJsaWMgZ2V0IGVkaXRQcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9lZGl0UHJvcGVydGllcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFZGl0YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0VGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmZvcm1BcnJheSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYXBpTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jvd3M6IFRMaXN0SXRlbVtdID0gW107XG4gIHB1YmxpYyBnZXQgcm93cygpIHtcbiAgICByZXR1cm4gdGhpcy5fcm93cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaXRlbXMgdGhhdCBhcmUgZGlzcGxheWVkIGFzIHRhYmxlIHJvd3MuXG4gICAqIEJpbmQgdGhpcyB0byB0aGUgaXRlbXMgdGhhdCBhcmUgZGlzcGxheWVkIGFzIHRhYmxlIHJvd3MuXG4gICAqIE5vcm1hbGx5IHRoaXMgaXMgcmV0dXJuZWQgZnJvbSB0aGUgYmFja2VuZCBhcyBwYXJ0IG9mIHRoZSBoYWwtZm9ybXMgcmVzb3VyY2UgZnJvbSBhIGxpc3QgZW5kcG9pbnQuXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IHJvd3ModmFsdWU6IFRMaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5fcm93cyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlQ2FsY3VsYXRlZEZ1bmN0aW9uVmFsdWVzKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1BcnJheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBudW1iZXIgb2Ygcm93cyBwZXIgcGFnZS5cbiAgICogVGhlIGRlZmF1bHQgaXMgWzEwLCAyNSwgNTBdLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJvd3NQZXJQYWdlT3B0aW9ucyA9IFsxMCwgMjUsIDUwXTtcblxuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbWVudSB0aGF0IGlzIGRpc3BsYXllZCBhdCB0aGUgdG9wIHJpZ2h0IG9mIHRoZSB0YWJsZS5cbiAgICogQHNlZSBSZXN0V29ybGRNZW51QnV0dG9uQ29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVhZGVyTWVudTogTWVudUl0ZW1bXSA9IFtdO1xuXG4gIHByaXZhdGUgX3Jvd01lbnU6IChyb3c6IFRMaXN0SXRlbSwgb3BlbmVkQnlSaWdodENsaWNrOiBib29sZWFuKSA9PiBNZW51SXRlbVtdID0gKCkgPT4gW107XG4gIHB1YmxpYyBnZXQgcm93TWVudSgpOiAocm93OiBUTGlzdEl0ZW0sIG9wZW5lZEJ5UmlnaHRDbGljazogYm9vbGVhbikgPT4gTWVudUl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd01lbnU7XG4gIH1cblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG1lbnUgZm9yIGEgcm93LlxuICAgKiBCYXNlZCBvbiB0aGUgb3BlbmVkQnlSaWdodENsaWNrIHBhcmFtZXRlciwgdGhlIGZ1bmN0aW9uIGNhbiByZXR1cm4gZGlmZmVyZW50IG1lbnVzLlxuICAgKiBUaGUgbWVudSB3aGVuIGl0IGhhcyBub3QgYmVlbiBvcGVuZWQgYnkgYSByaWdodCBjbGljayBpcyBkaXNwbGF5ZWQgaW4gYW4gZXh0cmEgY29sdW1uIHRvIHRoZSByaWdodCBvZiB0aGUgdGFibGUgaWYgYHNob3dSb3dNZW51QXNDb2x1bW5gIGlzIGB0cnVlYC5cbiAgICogVGhlIG1lbnUgd2hlbiBpdCBoYXMgYmVlbiBvcGVuZWQgYnkgYSByaWdodCBjbGljayBpcyBkaXNwbGF5ZWQgYXMgYSBjb250ZXh0IG1lbnUgaWYgYHNob3dSb3dNZW51T25SaWdodENsaWNrYCBpcyBgdHJ1ZWAuXG4gICAqIEBwYXJhbSByb3cgVGhlIHJvdyBmb3Igd2hpY2ggdG8gcmV0dXJuIHRoZSBtZW51LlxuICAgKiBAcGFyYW0gb3BlbmVkQnlSaWdodENsaWNrIEluZGljYXRlcyB3aGV0aGVyIHRoZSBtZW51IHdhcyBvcGVuZWQgYnkgYSByaWdodCBjbGljay5cbiAgICogQHJldHVybnMgVGhlIG1lbnUgZm9yIHRoZSByb3cuXG4gICAqIEBzZWUgc2hvd1Jvd01lbnVBc0NvbHVtblxuICAgKiBAc2VlIHNob3dSb3dNZW51T25SaWdodENsaWNrXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJvd01lbnUodmFsdWU6IChyb3c6IFRMaXN0SXRlbSwgb3BlbmVkQnlSaWdodENsaWNrOiBib29sZWFuKSA9PiBNZW51SXRlbVtdKSB7XG4gICAgdGhpcy5fcm93TWVudSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlUm93TWVudXModGhpcy5yb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jvd01lbnVzOiBNZW51SXRlbVtdW10gPSBbXTtcblxuICBwcml2YXRlIHVwZGF0ZUNhbGN1bGF0ZWRGdW5jdGlvblZhbHVlcyh2YWx1ZTogVExpc3RJdGVtW10pIHtcbiAgICB0aGlzLnVwZGF0ZVJvd01lbnVzKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVJvd1N0eWxlcyh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVDZWxsU3R5bGVzKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2VsbFN0eWxlcyh2YWx1ZTogVExpc3RJdGVtW10pIHtcbiAgICB0aGlzLl9jZWxsU3R5bGVDbGFzc2VzID0gdmFsdWUubWFwKChyLCByaSkgPT4gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuY29sdW1ucy5tYXAoKGMsIGNpKSA9PiBbYy5uYW1lLCB0aGlzLmNlbGxTdHlsZUNsYXNzKHIsIGMsIHJpLCBjaSldKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSb3dTdHlsZXModmFsdWU6IFRMaXN0SXRlbVtdKSB7XG4gICAgdGhpcy5fcm93U3R5bGVDbGFzc2VzID0gdmFsdWUubWFwKChyLCBpKSA9PiB0aGlzLnJvd1N0eWxlQ2xhc3MociwgaSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVSb3dNZW51cyh2YWx1ZTogVExpc3RJdGVtW10pIHtcbiAgICBpZiAodGhpcy5zaG93Um93TWVudUFzQ29sdW1uKVxuICAgICAgdGhpcy5fcm93TWVudXMgPSB2YWx1ZS5tYXAociA9PiB0aGlzLnJvd01lbnUociwgZmFsc2UpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcm93TWVudXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd01lbnVzO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93TWVudUNvbHVtbigpIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJNZW51Lmxlbmd0aCA+IDAgfHwgKHRoaXMuc2hvd1Jvd01lbnVBc0NvbHVtbiAmJiB0aGlzLnJvd01lbnVzLnNvbWUobSA9PiBtLmxlbmd0aCA+IDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcm93IG1lbnUgaXMgZGlzcGxheWVkIGFzIGEgY29sdW1uIHRvIHRoZSByaWdodCBvZiB0aGUgdGFibGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1Jvd01lbnVBc0NvbHVtbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSByb3cgbWVudSBpcyBkaXNwbGF5ZWQgYXMgYSBjb250ZXh0IG1lbnUgd2hlbiB0aGUgdXNlciByaWdodCBjbGlja3Mgb24gYSByb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1Jvd01lbnVPblJpZ2h0Q2xpY2sgPSB0cnVlO1xuXG4gIHByaXZhdGUgX3Jvd1N0eWxlQ2xhc3M6IChyb3c6IFRMaXN0SXRlbSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nID0gKCkgPT4gXCJcIjtcbiAgcHVibGljIGdldCByb3dTdHlsZUNsYXNzKCk6IChyb3c6IFRMaXN0SXRlbSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcm93U3R5bGVDbGFzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgc3R5bGUgY2xhc3MgZm9yIGEgcm93LlxuICAgKiBAcGFyYW0gcm93IFRoZSByb3cgZm9yIHdoaWNoIHRvIHJldHVybiB0aGUgc3R5bGUgY2xhc3MuXG4gICAqIEBwYXJhbSByb3dJbmRleCBUaGUgaW5kZXggb2YgdGhlIHJvdyBvbiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBwYWdlLlxuICAgKiBAcmV0dXJucyBUaGUgc3R5bGUgY2xhc3MgZm9yIHRoZSByb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHJvd1N0eWxlQ2xhc3ModmFsdWU6IChyb3c6IFRMaXN0SXRlbSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKSB7XG4gICAgdGhpcy5fcm93U3R5bGVDbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlUm93U3R5bGVzKHRoaXMucm93cyk7XG4gIH1cblxuICBwcml2YXRlIF9yb3dTdHlsZUNsYXNzZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBnZXQgcm93U3R5bGVDbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3dTdHlsZUNsYXNzZXM7XG4gIH1cblxuICBwcml2YXRlIF9jZWxsU3R5bGVDbGFzczogKHJvdzogVExpc3RJdGVtLCBjb2x1bW46IFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4sIHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IHN0cmluZyA9ICgpID0+IFwiXCI7XG4gIHB1YmxpYyBnZXQgY2VsbFN0eWxlQ2xhc3MoKTogKHJvdzogVExpc3RJdGVtLCBjb2x1bW46IFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4sIHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIpID0+IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NlbGxTdHlsZUNsYXNzO1xuICB9XG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgc3R5bGUgY2xhc3MgZm9yIGEgY2VsbC5cbiAgICogQHBhcmFtIHJvdyBUaGUgcm93IGZvciB3aGljaCB0byByZXR1cm4gdGhlIHN0eWxlIGNsYXNzLlxuICAgKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZm9yIHdoaWNoIHRvIHJldHVybiB0aGUgc3R5bGUgY2xhc3MuXG4gICAqIEBwYXJhbSByb3dJbmRleCBUaGUgaW5kZXggb2YgdGhlIHJvdyBvbiB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBwYWdlLlxuICAgKiBAcGFyYW0gY29sdW1uSW5kZXggVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4uXG4gICAqIEByZXR1cm5zIFRoZSBzdHlsZSBjbGFzcyBmb3IgdGhlIGNlbGwuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNlbGxTdHlsZUNsYXNzKHZhbHVlOiAocm93OiBUTGlzdEl0ZW0sIGNvbHVtbjogUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPiwgcm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKSB7XG4gICAgdGhpcy5fY2VsbFN0eWxlQ2xhc3MgPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUNlbGxTdHlsZXModGhpcy5yb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NlbGxTdHlsZUNsYXNzZXM6IFJlY29yZDxzdHJpbmcsc3RyaW5nPltdID0gW107XG4gIHB1YmxpYyBnZXQgY2VsbFN0eWxlQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2VsbFN0eWxlQ2xhc3NlcztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b3RhbFJlY29yZHMgPSAwO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSwpIHtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U29ydEZpZWxkQW5kU29ydE9yZGVyKHRlbXBsYXRlOiBUZW1wbGF0ZSB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG9yZGVyQnkgPSB0ZW1wbGF0ZT8ucHJvcGVydGllcz8uZmluZChwID0+IHA/Lm5hbWUgPT09IFwiJG9yZGVyYnlcIik/LnZhbHVlO1xuXG4gICAgaWYob3JkZXJCeSA9PT0gbnVsbCB8fCBvcmRlckJ5ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG9yZGVyQnkgIT09ICdzdHJpbmcnKVxuICAgIHJldHVybjtcblxuICAgIGNvbnN0IFtmaWVsZCwgb3JkZXJdID0gb3JkZXJCeS5zcGxpdChcIiBcIik7XG4gICAgY29uc3Qgb3JkZXJBc051bWJlciA9IG9yZGVyPy50b0xvd2VyQ2FzZSgpID09PSBcImRlc2NcIiA/IC0xIDogMTtcblxuICAgIGlmICh0aGlzLm11bHRpU29ydE1ldGE/Lmxlbmd0aCAhPT0gMSB8fCB0aGlzLm11bHRpU29ydE1ldGFbMF0uZmllbGQgIT09IGZpZWxkIHx8IHRoaXMubXVsdGlTb3J0TWV0YVswXS5vcmRlciAhPT0gb3JkZXJBc051bWJlcilcbiAgICAgIHRoaXMubXVsdGlTb3J0TWV0YSA9IFt7ZmllbGQ6IGZpZWxkLCBvcmRlcjogb3JkZXJBc051bWJlcn1dXG4gIH1cblxuICBwdWJsaWMgbXVsdGlTb3J0TWV0YT86IFNvcnRNZXRhW10gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgc3R5bGUgY2xhc3MgZm9yIHRoZSB0YWJsZS5cbiAgICogVGhlIGRlZmF1bHQgaXMgXCJcIi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdHlsZUNsYXNzOiBzdHJpbmcgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5saW5lIHN0eWxlIGZvciB0aGUgdGFibGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGFibGVTdHlsZT86IFJlY29yZDxzdHJpbmcsc3RyaW5nPjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRhYmxlIGlzIHNjcm9sbGFibGUuXG4gICAqIFRoZSBkZWZhdWx0IGlzIGB0cnVlYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzY3JvbGxhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGhlaWdodCBvZiB0aGUgc2Nyb2xsYWJsZSB0YWJsZS5cbiAgICogVGhlIGRlZmF1bHQgaXMgXCJmbGV4XCIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2Nyb2xsSGVpZ2h0OiBzdHJpbmcgPSBcImZsZXhcIjtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBmaWx0ZXIgb3Igc29ydCBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZC5cbiAgICogU3Vic2NyaWJlIHRvIHRoaXMgZXZlbnQgdG8gbG9hZCB0aGUgaXRlbXMgZnJvbSB0aGUgYmFja2VuZC5cbiAgICogVGhpcyBpcyBvbmUgb2YgdGhlIGNvcmUgZmVhdHVyZXMgb2YgdGhlIHRhYmxlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkZpbHRlck9yU29ydENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE9EYXRhUGFyYW1ldGVycz4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgcm93IGhhcyBiZWVuIHNlbGVjdGVkLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvblJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8VExpc3RJdGVtPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYSByb3cgaGFzIGJlZW4gdW5zZWxlY3RlZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25Sb3dVbnNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8VExpc3RJdGVtPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kZSBob3cgcm93cyBjYW4gYmUgc2VsZWN0ZWQuXG4gICAqIFRoZSBkZWZhdWx0IGlzIGBudWxsYCB3aGljaCBtZWFucyByb3dzIGNhbm5vdCBiZSBzZWxlY3RlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZWxlY3Rpb25Nb2RlOiBcInNpbmdsZVwiIHwgXCJtdWx0aXBsZVwiIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWJsZSByb3dzIGFyZSBoaWdobGlnaHRlZCB3aGVuIHRoZSBtb3VzZSBob3ZlcnMgb3ZlciB0aGVtLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHJvd0hvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcm93cy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgc2VsZWN0aW9uKCk6IFRMaXN0SXRlbVtdIHtcbiAgICByZXR1cm4gXy5pc0FycmF5KHRoaXMuX3NlbGVjdGlvbikgPyB0aGlzLl9zZWxlY3Rpb24gOiBbdGhpcy5fc2VsZWN0aW9uXTtcbiAgfVxuICBwdWJsaWMgc2V0IHNlbGVjdGlvbih2YWx1ZTogVExpc3RJdGVtW10pIHtcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgX3NlbGVjdGlvbjogVExpc3RJdGVtIHwgVExpc3RJdGVtW10gPSBbXTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWQuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgbmV3IHNlbGVjdGlvbi5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBzZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxUTGlzdEl0ZW1bXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZChcImNvbnRleHRNZW51XCIpXG4gIGNvbnRleHRNZW51PzogQ29udGV4dE1lbnU7XG5cbiAgcHJpdmF0ZSBfY29udGV4dE1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICBwdWJsaWMgZ2V0IGNvbnRleHRNZW51SXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHRNZW51SXRlbXM7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRhYmxlIGlzIGN1cnJlbnRseSBsb2FkaW5nLlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIHdoaWxlIGxvYWRpbmcgbmV3IGl0ZW1zIGZyb20gdGhlIGJhY2tlbmQgd2hlbiByZWFjdGluZyB0byB0aGUgYG9uRmlsdGVyT3JTb3J0Q2hhbmdlZGAgZXZlbnQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPltdID0gW107XG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+W10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBfcm93c0JlZm9yZUN1cnJlbnRQYWdlOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgZ2V0IHJvd3NCZWZvcmVDdXJyZW50UGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3dzQmVmb3JlQ3VycmVudFBhZ2U7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZGF0ZUZvcm1hdCA9IG5ldyBEYXRlKDMzMzMsIDEwLCAyMikgLy8gbW9udGhzIHN0YXJ0IGF0IDAgaW4gSlNcbiAgICAudG9Mb2NhbGVEYXRlU3RyaW5nKClcbiAgICAucmVwbGFjZShcIjIyXCIsIFwiZGRcIilcbiAgICAucmVwbGFjZShcIjExXCIsIFwiTU1cIilcbiAgICAucmVwbGFjZShcIjMzMzNcIiwgXCJ5eVwiKVxuICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJ5XCIpO1xuXG4gIHB1YmxpYyBnZXQgZGF0ZUZvcm1hdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBSZXN0V29ybGRUYWJsZUNvbXBvbmVudC5fZGF0ZUZvcm1hdDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90aW1lRm9ybWF0ID0gbmV3IERhdGUoMSwgMSwgMSwgMjIsIDMzLCA0NClcbiAgICAudG9Mb2NhbGVUaW1lU3RyaW5nKClcbiAgICAucmVwbGFjZShcIjIyXCIsIFwiaGhcIilcbiAgICAucmVwbGFjZShcIjMzXCIsIFwibW1cIilcbiAgICAucmVwbGFjZShcIjQ0XCIsIFwic3NcIik7XG5cbiAgcHVibGljIGdldCB0aW1lRm9ybWF0KCkge1xuICAgIHJldHVybiBSZXN0V29ybGRUYWJsZUNvbXBvbmVudC5fdGltZUZvcm1hdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgUHJvcGVydHlUeXBlKCk6IHR5cGVvZiBQcm9wZXJ0eVR5cGUge1xuICAgIHJldHVybiBQcm9wZXJ0eVR5cGU7XG4gIH1cblxuICBwdWJsaWMgbG9hZChldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KSB7XG4gICAgdGhpcy5tdWx0aVNvcnRNZXRhID0gZXZlbnQubXVsdGlTb3J0TWV0YTtcbiAgICB0aGlzLl9yb3dzQmVmb3JlQ3VycmVudFBhZ2UgPSBldmVudC5maXJzdCA/PyAwO1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBPRGF0YVNlcnZpY2UuY3JlYXRlUGFyYW1ldGVyc0Zyb21UYWJsZUxvYWRFdmVudChldmVudCwgdGhpcy5zZWFyY2hUZW1wbGF0ZSk7XG4gICAgdGhpcy5vbkZpbHRlck9yU29ydENoYW5nZWQuZW1pdChwYXJhbWV0ZXJzKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuQ29udGV4dE1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogVExpc3RJdGVtKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3dSb3dNZW51T25SaWdodENsaWNrIHx8IHRoaXMuY29udGV4dE1lbnUgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybjtcblxuICAgIHRoaXMuX2NvbnRleHRNZW51SXRlbXMgPSB0aGlzLnJvd01lbnUocm93LCB0cnVlKTtcbiAgICB0aGlzLmNvbnRleHRNZW51LnNob3coZXZlbnQpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG9uUm93U2VsZWN0SW50ZXJuYWwoZXZlbnQ6IFRhYmxlUm93U2VsZWN0RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm9uUm93U2VsZWN0LmVtaXQoZXZlbnQuZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dVbnNlbGVjdEludGVybmFsKGV2ZW50OiBUYWJsZVJvd1VuU2VsZWN0RXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm9uUm93VW5zZWxlY3QuZW1pdChldmVudC5kYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZUludGVybmFsKGV2ZW50OiBUTGlzdEl0ZW0gfCBUTGlzdEl0ZW1bXSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoXy5pc0FycmF5KGV2ZW50KSA/IGV2ZW50IDogW2V2ZW50XSk7XG4gIH1cblxuICBwdWJsaWMgdG9Db2x1bW5GaWx0ZXJUeXBlKHByb3BlcnR5VHlwZTogUHJvcGVydHlUeXBlKSA6IENvbHVtbkZpbHRlclR5cGV7XG4gICAgc3dpdGNoKHByb3BlcnR5VHlwZSkge1xuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuTnVtYmVyOlxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuUGVyY2VudDpcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLkN1cnJlbmN5OlxuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuTW9udGg6XG4gICAgICAgIHJldHVybiBDb2x1bW5GaWx0ZXJUeXBlLm51bWVyaWM7XG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5Cb29sOlxuICAgICAgICByZXR1cm4gQ29sdW1uRmlsdGVyVHlwZS5ib29sZWFuO1xuICAgICAgY2FzZSBQcm9wZXJ0eVR5cGUuRGF0ZTpcbiAgICAgIGNhc2UgUHJvcGVydHlUeXBlLkRhdGV0aW1lTG9jYWw6XG4gICAgICBjYXNlIFByb3BlcnR5VHlwZS5EYXRldGltZU9mZnNldDpcbiAgICAgICAgcmV0dXJuIENvbHVtbkZpbHRlclR5cGUuZGF0ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBDb2x1bW5GaWx0ZXJUeXBlLnRleHQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvTWF0Y2hNb2RlKHByb3BlcnR5VHlwZTogUHJvcGVydHlUeXBlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBUaGVyZSBpcyBhIGJ1ZyBpbiBQcmltZU5HIHJldHVybmluZyBDT05UQUlOUyBmb3IgYm9vbGVhbiBjb2x1bW5zXG4gICAgLy8gT25jZSB0aGUgYnVnIGhhcyBiZWVuIGZpeGVkLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgd29ya2Fyb3VuZFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wcmltZWZhY2VzL3ByaW1lbmcvaXNzdWVzLzE0MjEwXG4gICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gUHJvcGVydHlUeXBlLkJvb2wpXG4gICAgICByZXR1cm4gRmlsdGVyTWF0Y2hNb2RlLkVRVUFMUztcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzaG93SW5wdXRGaWVsZChjb2x1bW46IFByb3BlcnR5KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzRWRpdGFibGUpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBlZGl0UHJvcGVydHkgPSB0aGlzLmVkaXRQcm9wZXJ0aWVzW2NvbHVtbi5uYW1lXTtcblxuICAgIHJldHVybiBlZGl0UHJvcGVydHkgIT09IHVuZGVmaW5lZCAmJiBlZGl0UHJvcGVydHkudHlwZSAhPT0gUHJvcGVydHlUeXBlLkhpZGRlbiAmJiAhZWRpdFByb3BlcnR5LnJlYWRPbmx5O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb3JtQXJyYXkoKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuaXNFZGl0YWJsZSB8fCAhdGhpcy5yb3dzIHx8ICF0aGlzLmZvcm1BcnJheSB8fCAhdGhpcy5lZGl0VGVtcGxhdGUpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLmZvcm1BcnJheS5jbGVhcigpO1xuXG4gICAgY29uc3QgbmV3Q29udHJvbHMgPSB0aGlzLnJvd3NcbiAgICAgIC5tYXAociA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1TZXJ2aWNlLmNyZWF0ZUZvcm1Hcm91cEZyb21UZW1wbGF0ZSh0aGlzLmVkaXRUZW1wbGF0ZSEpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgZm9ybUdyb3VwLnBhdGNoVmFsdWUocik7XG4gICAgICAgIHJldHVybiBmb3JtR3JvdXA7XG4gICAgICB9KTtcblxuICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBuZXdDb250cm9scylcbiAgICAgIHRoaXMuZm9ybUFycmF5LnB1c2goY29udHJvbCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVkaXRQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0VGVtcGxhdGUpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLl9lZGl0UHJvcGVydGllcyA9IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmVkaXRUZW1wbGF0ZS5wcm9wZXJ0aWVzLm1hcChwID0+IFsgcC5uYW1lLCBwIF0pKTtcbiAgfVxufVxuIiwiPHAtdGFibGVcbiAgI3RhYmxlXG4gIFt2YWx1ZV09XCJyb3dzXCJcbiAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gIFtsYXp5XT1cInRydWVcIlxuICBbbGF6eUxvYWRPbkluaXRdPVwiZmFsc2VcIlxuICAob25MYXp5TG9hZCk9XCJsb2FkKCRldmVudClcIlxuICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcbiAgW3BhZ2luYXRvcl09XCJ0cnVlXCJcbiAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxuICBbcm93c109XCJyb3dzLmxlbmd0aFwiXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgW2xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gIFttdWx0aVNvcnRNZXRhXT1cIm11bHRpU29ydE1ldGFcIlxuICBbc3R5bGVDbGFzc109XCJzdHlsZUNsYXNzXCJcbiAgW3RhYmxlU3R5bGVdPVwidGFibGVTdHlsZVwiXG4gIFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGVcIlxuICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXG4gIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxuICAob25Sb3dTZWxlY3QpPVwib25Sb3dTZWxlY3RJbnRlcm5hbCgkZXZlbnQpXCJcbiAgKG9uUm93VW5zZWxlY3QpPVwib25Sb3dVbnNlbGVjdEludGVybmFsKCRldmVudClcIlxuICBbcm93SG92ZXJdPVwicm93SG92ZXJcIlxuICBbKHNlbGVjdGlvbildPVwiX3NlbGVjdGlvblwiXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VJbnRlcm5hbCgkZXZlbnQpXCI+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxuICAgIDx0cj5cbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLm5hbWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWQtZmxleCBwLWpjLWJldHdlZW4gcC1haS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7e2NvbC5wcm9tcHR9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLm5hbWVcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgW3R5cGVdPVwidG9Db2x1bW5GaWx0ZXJUeXBlKGNvbC50eXBlKVwiIFttYXRjaE1vZGVdPVwidG9NYXRjaE1vZGUoY29sLnR5cGUpXCIgW2ZpZWxkXT1cImNvbC5uYW1lXCIgZGlzcGxheT1cIm1lbnVcIj48L3AtY29sdW1uRmlsdGVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCAqbmdJZj1cInNob3dNZW51Q29sdW1uXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8cnctbWVudS1idXR0b24gW2l0ZW1zXT1cImhlYWRlck1lbnVcIj48L3J3LW1lbnUtYnV0dG9uPlxuICAgICAgICA8L3RoPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtZW50aXR5IGxldC1jb2x1bW5zPVwiY29sdW1uc1wiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gICAgPHRyIChjb250ZXh0bWVudSk9XCJvcGVuQ29udGV4dE1lbnUoJGV2ZW50LCBlbnRpdHkpXCIgW3BTZWxlY3RhYmxlUm93XT1cImVudGl0eVwiIFtwU2VsZWN0YWJsZVJvd0Rpc2FibGVkXT1cInNlbGVjdGlvbk1vZGUgPT09IG51bGxcIiBbY2xhc3NOYW1lXT1cInJvd1N0eWxlQ2xhc3Nlc1tyb3dJbmRleCAtICh0YWJsZS5maXJzdCA/PyAwKV1cIj5cbiAgICAgIDx0ZCBbbmdTd2l0Y2hdPVwiY29sLnR5cGVcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbY2xhc3NOYW1lXT1cImNlbGxTdHlsZUNsYXNzZXNbcm93SW5kZXggLSAodGFibGUuZmlyc3QgPz8gMCldW2NvbC5uYW1lXVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93SW5wdXRGaWVsZChjb2wpOyBlbHNlIHRleHRGaWVsZFwiIFtmb3JtR3JvdXBdPVwiZm9ybUFycmF5IS5jb250cm9sc1tyb3dJbmRleCAtICh0YWJsZS5maXJzdCA/PyAwKV1cIiA+XG4gICAgICAgICAgICA8cnctaW5wdXQgW2FwaU5hbWVdPVwiYXBpTmFtZSFcIiBbcHJvcGVydHldPVwiZWRpdFByb3BlcnRpZXNbY29sLm5hbWVdXCI+PC9ydy1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3RleHRGaWVsZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5UZXh0XCI+XG4gICAgICAgICAgICAgICAgPHJ3LWF2YXRhciAqbmdJZj1cImNvbC5uYW1lID09PSAnY3JlYXRlZEJ5JyB8fCBjb2wubmFtZSA9PT0gJ2xhc3RDaGFuZ2VkQnknXCIgW3VzZXJdPVwiZW50aXR5W2NvbC5uYW1lXVwiPjwvcnctYXZhdGFyPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLm5hbWUgIT09ICdjcmVhdGVkQnknICYmIGNvbC5uYW1lICE9PSAnbGFzdENoYW5nZWRCeSdcIj57e2VudGl0eVtjb2wubmFtZV19fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5OdW1iZXJcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5uYW1lXSB8IHByb3BlcnR5VHlwZUZvcm1hdDpjb2wudHlwZX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5QZXJjZW50XCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQ3VycmVuY3lcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5uYW1lXSB8IHByb3BlcnR5VHlwZUZvcm1hdDpjb2wudHlwZX19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5Cb29sXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj48cC10cmlTdGF0ZUNoZWNrYm94IFsobmdNb2RlbCldPVwiZW50aXR5W2NvbC5uYW1lXVwiIFtyZWFkb25seV09XCJ0cnVlXCI+PC9wLXRyaVN0YXRlQ2hlY2tib3g+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EYXRlXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wubmFtZV1cIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGltZVwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OmNvbC50eXBlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkR1cmF0aW9uXCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wubmFtZV1cIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRGF0ZXRpbWVMb2NhbFwiIFtwVG9vbHRpcF09XCJlbnRpdHlbY29sLm5hbWVdXCI+e3tlbnRpdHlbY29sLm5hbWVdIHwgcHJvcGVydHlUeXBlRm9ybWF0OlByb3BlcnR5VHlwZS5EYXRlfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkRhdGV0aW1lT2Zmc2V0XCIgW3BUb29sdGlwXT1cImVudGl0eVtjb2wubmFtZV1cIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6UHJvcGVydHlUeXBlLkRhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQ29sbGVjdGlvblwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+PHAgKm5nRm9yPVwibGV0IGFycmF5RWxlbWVudCBvZiBlbnRpdHlbY29sLm5hbWVdXCI+e3thcnJheUVsZW1lbnQgfCBqc29ufX08L3A+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5PYmplY3RcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPnt7ZW50aXR5W2NvbC5uYW1lXSB8IGpzb259fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgW3BUb29sdGlwXT1cImVudGl0eVtjb2wubmFtZV1cIj57e2VudGl0eVtjb2wubmFtZV0gfCBwcm9wZXJ0eVR5cGVGb3JtYXQ6Y29sLnR5cGV9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJzaG93TWVudUNvbHVtblwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgPHJ3LW1lbnUtYnV0dG9uICpuZ0lmPVwic2hvd1Jvd01lbnVBc0NvbHVtblwiIFtpdGVtc109XCJyb3dNZW51c1tyb3dJbmRleCAtICh0YWJsZS5maXJzdCA/PyAwKV1cIj48L3J3LW1lbnUtYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPHAtY29udGV4dE1lbnUgI2NvbnRleHRNZW51IGFwcGVuZFRvPVwiYm9keVwiIFttb2RlbF09XCJjb250ZXh0TWVudUl0ZW1zXCI+PC9wLWNvbnRleHRNZW51PlxuPC9wLXRhYmxlPlxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9tb2RlbHMvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogUmVwcmVzZW50cyB0aGUgZXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gdGhlIHZhbHVlIG9mIGEgZHJvcGRvd24gY29tcG9uZW50IGNoYW5nZXMuXHJcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSB0aGF0IGlzIHNlbGVjdGVkIGluIHRoZSBkcm9wZG93bi5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25DaGFuZ2VFdmVudDxUPiB7XHJcbiAgb3JpZ2luYWxFdmVudDogRXZlbnQ7XHJcbiAgdmFsdWU6IFQ7XHJcbn1cclxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9tb2RlbHMvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCJAd2VydHp1aS9uZ3gtaGFsLWNsaWVudFwiO1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgdGhlIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCB3aGVuIHRoZSB2YWx1ZSBvZiBhIGRyb3Bkb3duIGNvbXBvbmVudCBjaGFuZ2VzLlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgdGhhdCBpcyBzZWxlY3RlZCBpbiB0aGUgZHJvcGRvd24uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duQ2hhbmdlRXZlbnQ8VD4ge1xyXG4gIG9yaWdpbmFsRXZlbnQ6IEV2ZW50O1xyXG4gIHZhbHVlOiBUO1xyXG59XHJcblxyXG4vKipcclxuICogRXZlbnQgZW1pdHRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgc3VibWl0IHdoaWNoIGNoYW5nZWQgdGhlIHRlbXBsYXRlLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBZnRlclN1Ym1pdE9rRXZlbnQge1xyXG4gIC8qKlxyXG4gICAqIFRoZSB0ZW1wbGF0ZSBiZWZvcmUgdGhlIHN1Ym1pdC5cclxuICAgKi9cclxuICBvbGQ6IFRlbXBsYXRlO1xyXG4gIC8qKlxyXG4gICAqIFRoZSB0ZW1wbGF0ZSBhZnRlciB0aGUgc3VibWl0LlxyXG4gICAqL1xyXG4gIG5ldzogVGVtcGxhdGU7XHJcbiAgLyoqXHJcbiAgICogVGhlIEhUVFAgc3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlLlxyXG4gICAqL1xyXG4gIHN0YXR1czogMjAwO1xyXG59XHJcblxyXG4vKipcclxuICogRXZlbnQgZW1pdHRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgc3VibWl0IHdoaWNoIGNyZWF0ZWQgYSBuZXcgcmVzb3VyY2UuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEFmdGVyU3VibWl0UmVkaXJlY3RFdmVudCB7XHJcbiAgLyoqXHJcbiAgICogVGhlIExvY2F0aW9uIGhlYWRlciBvZiB0aGUgcmVzcG9uc2UgaWYgdGhlIHN0YXR1cyBpcyAyMDEuXHJcbiAgICovXHJcbiAgbG9jYXRpb24/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogVGhlIEhUVFAgc3RhdHVzIGNvZGUgb2YgdGhlIHJlc3BvbnNlLlxyXG4gICAqL1xyXG4gIHN0YXR1czogMjAxO1xyXG59XHJcbiJdfQ==