@sebgroup/green-angular 5.10.0 → 5.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/esm2022/lib/shared/core-control/index.mjs +2 -1
  2. package/esm2022/src/lib/shared/core-control/index.mjs +2 -1
  3. package/esm2022/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.mjs +5 -2
  4. package/esm2022/src/v-angular/datepicker/components/date-input/date-input.component.mjs +3 -4
  5. package/esm2022/src/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.mjs +5 -2
  6. package/esm2022/src/v-angular/dropdown/dropdown.component.mjs +3 -3
  7. package/esm2022/src/v-angular/input/input.component.mjs +3 -3
  8. package/esm2022/src/v-angular/textarea/textarea.component.mjs +3 -3
  9. package/esm2022/v-angular/base-control-value-accessor/base-control-value-accessor.component.mjs +5 -2
  10. package/esm2022/v-angular/datepicker/components/date-input/date-input.component.mjs +3 -4
  11. package/esm2022/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.mjs +5 -2
  12. package/esm2022/v-angular/dropdown/dropdown.component.mjs +3 -3
  13. package/esm2022/v-angular/input/input.component.mjs +3 -3
  14. package/esm2022/v-angular/textarea/textarea.component.mjs +3 -3
  15. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs +1 -1
  16. package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +4 -1
  17. package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs.map +1 -1
  18. package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs +6 -3
  19. package/fesm2022/sebgroup-green-angular-src-v-angular-datepicker.mjs.map +1 -1
  20. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +2 -2
  21. package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -1
  22. package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs +2 -2
  23. package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs.map +1 -1
  24. package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs +2 -2
  25. package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs.map +1 -1
  26. package/fesm2022/sebgroup-green-angular-v-angular.mjs +16 -10
  27. package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -1
  28. package/fesm2022/sebgroup-green-angular.mjs +1 -1
  29. package/lib/shared/core-control/index.d.ts +1 -0
  30. package/package.json +2 -2
  31. package/src/lib/shared/core-control/index.d.ts +1 -0
  32. package/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +5 -1
  33. package/src/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.d.ts +5 -1
  34. package/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +5 -1
  35. package/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.d.ts +5 -1
@@ -326,7 +326,7 @@ export class DateControlValueAccessorComponent {
326
326
  this.cdr.detectChanges();
327
327
  }
328
328
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateControlValueAccessorComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: TRANSLOCO_SCOPE, optional: true }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i2.TranslocoService }], target: i0.ɵɵFactoryTarget.Directive }); }
329
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: DateControlValueAccessorComponent, inputs: { id: "id", name: "name", label: "label", placeholder: "placeholder", dateCharacters: "dateCharacters", role: "role", value: "value", error: "error", errorList: "errorList", withErrorIcon: "withErrorIcon", description: "description", autofocus: "autofocus", defaultValue: "defaultValue", reset: "reset", optional: "optional", dateInputMask: "dateInputMask", locked: "locked", displayDisabledAsLocked: "displayDisabledAsLocked", required: "required", invalid: "invalid", valid: "valid", focused: "focused", disabled: "disabled", locale: "locale", dateFormat: "dateFormat", dateLocale: "dateLocale" }, outputs: { ngvFocus: "ngvFocus", ngvBlur: "ngvBlur" }, host: { properties: { "attr.id": "this.id" } }, queries: [{ propertyName: "labelContentTpl", first: true, predicate: ["labelTpl"], descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0 }); }
329
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: DateControlValueAccessorComponent, inputs: { id: "id", name: "name", label: "label", placeholder: "placeholder", dateCharacters: "dateCharacters", role: "role", value: "value", error: "error", errorList: "errorList", withErrorIcon: "withErrorIcon", description: "description", autofocus: "autofocus", defaultValue: "defaultValue", reset: "reset", optional: "optional", dateInputMask: "dateInputMask", locked: "locked", displayDisabledAsLocked: "displayDisabledAsLocked", required: "required", invalid: "invalid", valid: "valid", focused: "focused", disabled: "disabled", locale: "locale", dateFormat: "dateFormat", dateLocale: "dateLocale" }, outputs: { ngvFocus: "ngvFocus", ngvBlur: "ngvBlur" }, host: { properties: { "attr.id": "this.id" } }, queries: [{ propertyName: "labelContentTpl", first: true, predicate: ["labelTpl"], descendants: true, read: TemplateRef }, { propertyName: "lockedTpl", first: true, predicate: ["lockedTpl"], descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["input"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0 }); }
330
330
  }
331
331
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DateControlValueAccessorComponent, decorators: [{
332
332
  type: Directive
@@ -342,6 +342,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
342
342
  }] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i2.TranslocoService }], propDecorators: { labelContentTpl: [{
343
343
  type: ContentChild,
344
344
  args: ['labelTpl', { read: TemplateRef }]
345
+ }], lockedTpl: [{
346
+ type: ContentChild,
347
+ args: ['lockedTpl', { read: TemplateRef }]
345
348
  }], inputRef: [{
346
349
  type: ViewChild,
347
350
  args: ['input', { read: ElementRef }]
@@ -405,4 +408,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
405
408
  }], ngvBlur: [{
406
409
  type: Output
407
410
  }] } });
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2RhdGVwaWNrZXIvZGF0ZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yL2RhdGUtY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBRUosV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBR0wsU0FBUyxFQUdULFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBRWYsZ0JBQWdCLEdBQ2pCLE1BQU0sb0JBQW9CLENBQUE7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBSTFDLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsR0FDeEIsTUFBTSxpQkFBaUIsQ0FBQTs7OztBQUd4QixrRUFBa0U7QUFDbEUsTUFBTSxPQUFnQixpQ0FBaUM7SUE4QnJELHNHQUFzRztJQUN0RyxJQUFhLFdBQVcsQ0FBQyxLQUF5QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUs7WUFDdkIsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ3JELENBQUMsQ0FBQyxLQUFLLENBQUE7UUFDVCxJ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QU87c0JBQWYsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBUWEsUUFBUTtzQkFBMUIsTUFBTTtnQkFFWSxPQUFPO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTZWxmLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTmdDb250cm9sLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHtcbiAgVFJBTlNMT0NPX1NDT1BFLFxuICBUcmFuc2xvY29TY29wZSxcbiAgVHJhbnNsb2NvU2VydmljZSxcbn0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHR5cGUgeyBJbnB1dG1hc2tPcHRpb25zIH0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9pbnB1dC1tYXNrJ1xuXG5pbXBvcnQge1xuICBEYXRlQ2hhcmFjdGVycyxcbiAgZ2V0Rm9ybWF0RGF0ZU1hc2ssXG4gIGdldExvY2FsZURhdGVNYXNrLFxuICBnZXRMb2NhbGVEYXRlU3RyaW5nLFxuICBzZXREYXRlRm9ybWF0Q2hhcmFjdGVycyxcbn0gZnJvbSAnLi4vbW9kZWxzL2RhdGVzJ1xuXG5ARGlyZWN0aXZlKCkgLy8gUmVxdWlyZWQgd2l0aCBBbmd1bGFyIGl2eSBjb21waWxlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0ZUNvbnRyb2xWYWx1ZUFjY2Vzc29yQ29tcG9uZW50XG4gIGltcGxlbWVudHNcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvclxue1xuICAvKiogQ3VzdG9tIHRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHRoZSBjb250ZW50IG9mIHRoZSBsYWJlbC5cbiAgICogU3BlY2lmaWVkIGJ5IG5lc3RpbmcgYW4gYDxuZy10ZW1wbGF0ZSAjbGFiZWxUcGw+Q3VzdG9tIExhYmVsPC9uZy10ZW1wbGF0ZT5gLlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgnbGFiZWxUcGwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGxhYmVsQ29udGVudFRwbD86IFRlbXBsYXRlUmVmPHVuZGVmaW5lZD5cblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBuYXRpdmUgY2hpbGQgaW5wdXQgZWxlbWVudC4gKi9cbiAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgaW5wdXRSZWY/OiBFbGVtZW50UmVmXG5cbiAgLyogQVRUUklCVVRFUyAqL1xuXG4gIC8qKiBJZCBvZiB0aGUgaG9zdCBlbGVtZW50IGFuZCBpcyBhY2Nlc3NpYmxlIGJ5IHRoZSBjaGlsZHJlbiwgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaWYgbm90IHByb3ZpZGVkLiAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBASW5wdXQoKSBpZCA9ICh3aW5kb3cgYXMgYW55KS5uZ3Y/Lm5leHRJZChcbiAgICAnZGF0ZXBpY2tlcicsXG4gIClcbiAgLyoqIE5hbWUgb2YgdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQuICovXG4gIEBJbnB1dCgpIG5hbWU/OiBzdHJpbmdcbiAgLyoqIExhYmVsIG9mIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50IHVzaW5nIHRoZSBkZWZhdWx0IHRlbXBsYXRlLlxuICAgKiBDYW4gYmUgb3ZlcndyaXR0ZW4gYnkgc3BlY2lmeWluZyBhbiBgPG5nLXRlbXBsYXRlICNsYWJlbFRwbD5DdXN0b20gTGFiZWw8L25nLXRlbXBsYXRlPmAuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZ1xuICAvKiogVGV4dCBzaG93biBiZWZvcmUgaW5wdXQgaGFzIGEgd3JpdHRlbiB2YWx1ZS4gRGVmYXVsdCBjdXJyZW50IGRhdGUgZm9ybWF0IGJ5IGxvY2FsZSBvZiB0cmFuc2xvY28gKi9cbiAgQElucHV0KCkgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlXG4gICAgICA/IHNldERhdGVGb3JtYXRDaGFyYWN0ZXJzKHZhbHVlLCB0aGlzLmRhdGVDaGFyYWN0ZXJzKVxuICAgICAgOiB2YWx1ZVxuICAgIHRoaXMuZGVmYXVsdFBsYWNlaG9sZGVyID0gdmFsdWVcbiAgICAgID8gc2V0RGF0ZUZvcm1hdENoYXJhY3RlcnModmFsdWUsIHRoaXMuZGF0ZUNoYXJhY3RlcnMpXG4gICAgICA6IHZhbHVlXG4gIH1cbiAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlclxuICB9XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgZGVmYXVsdFBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIC8qKiBXaGF0IGNoYXJhY3RlcnMgdG8gdXNlIGluIGRhdGUgcGxhY2Vob2xkZXIsIGUuZy4ge3llYXI6ICdZJywgbW9udGg6ICdNJywgZGF5OiAnRCd9ICovXG4gIEBJbnB1dCgpIGRhdGVDaGFyYWN0ZXJzPzogRGF0ZUNoYXJhY3RlcnNcbiAgLyoqIFJvbGUgb2YgdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQuIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FjY2Vzc2liaWxpdHkvQVJJQS9Sb2xlcyAqL1xuICBASW5wdXQoKSByb2xlPzogc3RyaW5nXG4gIC8qKiBWYWx1ZSBvZiB0aGUgY2hpbGQgaW5wdXQgZWxlbWVudC4gTW9zdGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCByYWRpbyBhbmQgY2hlY2tib3hlcy4gKi9cbiAgQElucHV0KCkgdmFsdWU6IGFueVxuICAvKiogQW4gZXJyb3Igc3RyaW5nIHRvIGJlIHNob3duIHVuZGVyIGludmFsaWQgaW5wdXRzLiBPdmVyd3JpdGVzIGFueSBmb3JtIGVycm9ycy4gKi9cbiAgQElucHV0KCkgZXJyb3I/OiBzdHJpbmdcbiAgLyoqIEEgbGlzdCBvZiBlcnJvcnMgc3RyaW5nIHRvIGJlIHNob3duIHVuZGVyIGludmFsaWQgaW5wdXRzLiBPdmVyd3JpdGVzIGFueSBmb3JtIGVycm9ycy4gKi9cbiAgQElucHV0KCkgZXJyb3JMaXN0Pzogc3RyaW5nW11cbiAgLyoqIEFkZHMgYW4gaWNvbiBiZWZvcmUgZWFjaCBlcnJvciBtZXNzYWdlLiAqL1xuICBASW5wdXQoKSB3aXRoRXJyb3JJY29uPzogYm9vbGVhbiA9IGZhbHNlXG4gIC8qKiBEZXNjcmlwdGlvbiBvZiB0aGUgY2hpbGQgaW5wdXQgZWxlbWVudC4gQm90aCB2aXNpYmx5IGFuZCBhcyBgYXJpYS1sYWJlbGAuICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gIC8qKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGJyb3dzZXIgd2lsbCB0cnkgdG8gYXV0b21hdGljYWxseSBzZXQgZm9jdXMgdG8gdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQuICovXG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlXG4gIC8qKiBEZWZhdWx0IHZhbHVlIG9mIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50LiAqL1xuICBASW5wdXQoKSBkZWZhdWx0VmFsdWU/OiBhbnlcbiAgLyoqIElmIHBhc3NlZCwgdGhlIGNvbXBvbmVudCB3aWxsIGxpc3RlbiBmb3IgdXBkYXRlcyBhbmQgd2lsbCByZXNldCBpdHMgdmFsdWUuICovXG4gIEBJbnB1dCgpIHJlc2V0PzogT2JzZXJ2YWJsZTxhbnk+XG4gIC8qKiBBZGRzIChPcHRpb25hbCkgdG8gaW5wdXQgbGFiZWwuICovXG4gIEBJbnB1dCgpIG9wdGlvbmFsPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIFNldHRpbmdzIGZvciBpbnB1dCBtYXNrIGZvciBkYXRlcyBiYXNlZCBvbiBsb2NhbGVcbiAgICogQHNlZSB7QGxpbmsgZ2V0TG9jYWxlRGF0ZU1hc2t9IHVzZSB0aGlzIHRvb2wgdG8gZ2VuZXJhdGUgc2V0dGluZ3MgZm9yIGBkYXRlSW5wdXRNYXNrYFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGRhdGVJbnB1dE1hc2soZGF0ZU1hc2s6IElucHV0bWFza09wdGlvbnM8RGF0ZT4pIHtcbiAgICAvLyBIaWRlIGlucHV0IGZpZWxkXG4gICAgdGhpcy5zaG93SW5wdXREYXRlU3JjLm5leHQoZmFsc2UpXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgdGhpcy5fZGF0ZUlucHV0TWFzayA9IGRhdGVNYXNrXG5cbiAgICAvLyBTaG93IGlucHV0IGZpZWxkIHRvIHJlbG9hZCBpbnB1dC1tYXNrIHNldHRpbmdzIHVwb24gdXBkYXRlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3dJbnB1dERhdGVTcmMubmV4dCh0cnVlKVxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfSwgMjAwKVxuICB9XG4gIGdldCBkYXRlSW5wdXRNYXNrKCk6IElucHV0bWFza09wdGlvbnM8RGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRlSW5wdXRNYXNrXG4gIH1cbiAgcHJpdmF0ZSBfZGF0ZUlucHV0TWFzayE6IElucHV0bWFza09wdGlvbnM8RGF0ZT5cblxuICBwcml2YXRlIF9sb2NrZWQ6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gIC8qKiBIaWRlcyB0aGUgaW5wdXQgYm9yZGVycyBhbmQgZGlzcGxheXMgY3VycmVudCB2YWx1ZSBhcyBhIHRleHQuICovXG4gIEBJbnB1dCgpIHNldCBsb2NrZWQodmFsdWU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbG9ja2VkID0gdmFsdWVcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICBnZXQgbG9ja2VkKCk6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbG9ja2VkXG4gIH1cbiAgLyoqIElmIHNldCB0byB0cnVlLCB1c2luZyBhIGNvbnRyb2xzIGRpc2FibGVkIHN0YXRlIHdpbGwgZGlzcGxheSBpbnB1dCBhcyBsb2NrZWQuICovXG4gIEBJbnB1dCgpIGRpc3BsYXlEaXNhYmxlZEFzTG9ja2VkPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWRcblxuICAvKiBTVEFURVMgKi9cblxuICBwcml2YXRlIF9yZXF1aXJlZDogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgLyoqIE92ZXJyaWRlIHRoZSByZXF1aXJlZCBmbGFnIG9mIHRoZSBjb21wb25lbnQuICovXG4gIEBJbnB1dCgpIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IHZhbHVlXG4gIH1cbiAgLyoqIENoaWxkIGlucHV0IGVsZW1lbnQgaXMgY29uc2lkZXJlZCByZXF1aXJlZCBhbmQgY2hhbmdlcyBkZWZhdWx0IGxhYmVsIHRlbXBsYXRlIGFjY29yZGluZ2x5LiAqL1xuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIC8vIGlmIHJlcXVpcmVkIGlzIHNldCA9PiByZXR1cm4gcmVxdWlyZWRcbiAgICBpZiAodGhpcy5fcmVxdWlyZWQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX3JlcXVpcmVkXG5cbiAgICAvLyBpZiByZXF1aXJlZCBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBjb250cm9sID0+IHJldHVybiBjb250cm9sLnJlcXVpcmVkXG4gICAgaWYgKHRoaXMubmdDb250cm9sPy5jb250cm9sPy52YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHRoaXMubmdDb250cm9sPy5jb250cm9sPy52YWxpZGF0b3IoXG4gICAgICAgIHt9IGFzIEFic3RyYWN0Q29udHJvbCxcbiAgICAgIClcbiAgICAgIHJldHVybiB2YWxpZGF0b3IgJiYgdmFsaWRhdG9yLnJlcXVpcmVkXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBwcml2YXRlIF9pbnZhbGlkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gIC8qKiBPdmVycmlkZSB0aGUgaW52YWxpZCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LiAqL1xuICBASW5wdXQoKSBzZXQgaW52YWxpZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2ludmFsaWQgPSB2YWx1ZVxuICB9XG4gIC8qKiBUaGUgY29tcG9uZW50IGhhcyB0aGUgaW52YWxpZCBzdGF0ZSwgdXN1YWxseSBkZWNvcmF0aW5nIHRoZSBlbGVtZW50cyByZWQgYW5kIHNob3dzIHRoZSBmaXJzdCBlcnJvci4gKi9cbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2ludmFsaWQgPT09IHRydWUgfHwgdGhpcy5faW52YWxpZCA9PT0gZmFsc2UpIHJldHVybiB0aGlzLl9pbnZhbGlkXG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/LmludmFsaWQgJiYgdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/LnRvdWNoZWRcbiAgICApXG4gIH1cblxuICBwcml2YXRlIF92YWxpZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAvKiogT3ZlcnJpZGUgdGhlIHZhbGlkIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuICovXG4gIEBJbnB1dCgpIHNldCB2YWxpZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3ZhbGlkID0gdmFsdWVcbiAgfVxuICAvKiogVGhlIGNvbXBvbmVudCBoYXMgdGhlIHZhbGlkIHN0YXRlLCB1c3VhbGx5IGRlY29yYXRpbmcgdGhlIGVsZW1lbnRzIGdyZWVuLiAqL1xuICBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX3ZhbGlkID09PSB0cnVlIHx8IHRoaXMuX3ZhbGlkID09PSBmYWxzZSkgcmV0dXJuIHRoaXMuX3ZhbGlkXG4gICAgcmV0dXJuICEhdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/LnZhbGlkICYmIHRoaXMubmdDb250cm9sPy5jb250cm9sPy50b3VjaGVkXG4gIH1cblxuICAvKiogVGhlIGNvbXBvbmVudCBoYXMgdGhlIGZvY3VzZWQgc3RhdGUsIHVwZGF0ZWQgYnkgdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQncyBmb2N1cyBzdGF0ZS4gKi9cbiAgQElucHV0KCkgZm9jdXNlZCA9IGZhbHNlXG4gIC8qKiBUaGUgY29tcG9uZW50IGhhcyB0aGUgZGlzYWJsZWQgc3RhdGUsIHVzdWFsbHkgbXV0aW5nIHRoZSBjb2xvcnMgYW5kIHJlbW92ZXMgaW50ZXJhY3Rpb24uICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2VcbiAgLyoqIExvY2FsZSBmb3IgdXNpbmcgY29ycmVjdCBsYW5ndWFnZSBpbiB0aGUgZGF0ZXBpY2tlci4gKi9cbiAgQElucHV0KCkgbG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIERhdGUgZm9ybWF0IHVzZWQgZm9yIHBsYWNlaG9sZGVyIGFuZCBpbnB1dCBtYXNrLiBTaG91bGQgYmUgaW4gbG93ZXIgY2FzZSB7eWVhcjogJ3knLCBtb250aDogJ20nLCBkYXk6ICdkJ30gKi9cbiAgQElucHV0KCkgZGF0ZUZvcm1hdDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBEYXRlIGxvY2FsZSB1c2VkIGZvciBwbGFjZWhvbGRlciBhbmQgaW5wdXQgbWFzay4gKi9cbiAgQElucHV0KCkgZGF0ZUxvY2FsZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgLyoqIFRvZ2dsZXIgZm9yIHNob3dpbmcgb3IgaGlkaW5nIHRoZSBpbnB1dCBmaWVsZCAqL1xuICBwcm90ZWN0ZWQgc2hvd0lucHV0RGF0ZVNyYyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KClcblxuICAvKiBUUklHR0VSUyAqL1xuXG4gIC8qKiBFbWl0cyBmb2N1cyBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoZSBjaGlsZCBlbGVtZW50cy4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG5ndkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIC8qKiBFbWl0cyBmb2N1cyBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoZSBjaGlsZCBlbGVtZW50cy4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IG5ndkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICAvKiBWQUxVRSBIQU5ETEVSUyAqL1xuICAvKiogQGludGVybmFsICovXG4gIHByb3RlY3RlZCBvbkNoYW5nZSA9IChfOiBhbnkpOiB2b2lkID0+IHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIG9uVG91Y2hlZCA9ICgpOiB2b2lkID0+IHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIG9uVmFsaWRhdG9yQ2hhbmdlOiAoKSA9PiB2b2lkID0gKCkgPT4gbnVsbFxuICBwcml2YXRlIF9zdGF0ZTogYW55ID0gbnVsbFxuXG4gIC8qIE9USEVSIFZBUklBQkxFUyAqL1xuICBzY29wZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgLy8gd2FybmluZ0ljb24gPSBmYVRyaWFuZ2xlRXhjbGFtYXRpb247XG5cbiAgLyogTElGRSBDWUNMRSBWQVJJQUJMRVMgKi9cbiAgcHJpdmF0ZSBfb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHRydWU+KClcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBCYXNlQ29udHJvbFZhbHVlQWNjZXNzb3JDb21wb25lbnQuXG4gICAqIEBwYXJhbSBuZ0NvbnRyb2wgb3B0aW9uYWwgRm9ybUNvbnRyb2wgcHJvdmlkZWQgd2hlbiBjb21wb25lbnQgaXMgdXNlZCBpbiBhIGZvcm0sIHRocm91Z2ggZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBAU2VsZigpIEBPcHRpb25hbCgpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoVFJBTlNMT0NPX1NDT1BFKVxuICAgIHByb3RlY3RlZCB0cmFuc2xvY29TY29wZTogVHJhbnNsb2NvU2NvcGUsXG4gICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfdHJhbnNsb2NvOiBUcmFuc2xvY29TZXJ2aWNlLFxuICApIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIC8vIE5vdGU6IHdlIHByb3ZpZGUgdGhlIHZhbHVlIGFjY2Vzc29yIHRocm91Z2ggaGVyZSwgaW5zdGVhZCBvZlxuICAgICAgLy8gdGhlIGBwcm92aWRlcnNgIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydC5cbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHJhbnNsb2NvU2NvcGUpIHRoaXMuc2NvcGUgPSB0aGlzLnRyYW5zbG9jb1Njb3BlLnRvU3RyaW5nKClcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZURhdGVMaWtlKHZhbHVlOiBhbnkpOiBudWxsIHwgdW5kZWZpbmVkIHwgc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgLy8gaWYgdmFsdWUgaXMgdHlwZSBvZiBzdHJpbmcsXG4gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAvLyByZW1vdmUgaW5zdGFuY2VzIHdoZXJlIHRoZSB2YWx1ZSB3aWxsIG5vdCBjb3JyZWN0bHkgYmUgcGFyc2VkIHRvIGEgZGF0ZSBzdHJpbmdcbiAgICAgICAgY2FzZSB2YWx1ZSA9PSBudWxsOlxuICAgICAgICBjYXNlIHZhbHVlPy50b1N0cmluZygpID09PSAnSW52YWxpZCBEYXRlJzpcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAvLyBpZiB2YWx1ZS1hcy1kYXRlIGlzIGEgdmFsaWQgZGF0ZSBvYmplY3QsIHBhcnNlIHRoZSB2YWx1ZSB0byBZWVlZLU1NLUREIGZvcm1hdFxuICAgICAgICBjYXNlIHR5cGVvZiB2YWx1ZT8uZ2V0TW9udGggPT09ICdmdW5jdGlvbic6XG4gICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdzdi1TRScpLmZvcm1hdCh2YWx1ZSlcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdmFsdWUgYXMgc3RyaW5nXG4gICAgICB9XG4gICAgfSBjYXRjaCAoX2UpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29udGV4dHVhbC1saWZlY3ljbGVcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sICYmIHRoaXMubmdDb250cm9sLmNvbnRyb2wpIHtcbiAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyhcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFt0aGlzLm5nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvciwgdGhpcy52YWxpZGF0ZV0pLFxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuX3RyYW5zbG9jby5sYW5nQ2hhbmdlcyQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5sb2NhbGUgJiYgIXRoaXMuZGF0ZUZvcm1hdCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVBsYWNlaG9sZGVyQW5kTWFzaygpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSlcblxuICAgIC8vIGlmIHJlc2V0IG9ic2VydmFibGUgaGFzIGJlZW4gcGFzc2VkLCBzdWJzY3JpYmUgYWZ0ZXIgdXBkYXRlc1xuICAgIHRoaXMucmVzZXQ/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAvLyByZXNldCB2YWx1ZSBvZiBjb250cm9sbGVyXG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoJycpXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbnRleHR1YWwtbGlmZWN5Y2xlXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBpZiBkZWZhdWx0IHZhbHVlIGlzIHNldCwgdGhlbiBkb24ndCBhbHRlciBpdC4gT3RoZXJ3aXNlLCB1c2VcbiAgICAvLyBjdXJyZW50IHZhbHVlIG9mIGNvbnRyb2xsZXIgYWZ0ZXIgaW5pdGlhdGlvbiBhcyBkZWZhdWx0IHZhbHVlXG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZSA/PyB0aGlzLm5nQ29udHJvbD8udmFsdWVcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5kZWZhdWx0VmFsdWU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZShjaGFuZ2VzLmRlZmF1bHRWYWx1ZS5jdXJyZW50VmFsdWUpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5sb2NhbGU/LmN1cnJlbnRWYWx1ZSAmJlxuICAgICAgIXRoaXMuZGF0ZUZvcm1hdCAmJlxuICAgICAgIWNoYW5nZXMuZGF0ZUZvcm1hdD8uY3VycmVudFZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLnVwZGF0ZVBsYWNlaG9sZGVyQW5kTWFzaygpXG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuZGF0ZUZvcm1hdD8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1hdCgpXG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuZGF0ZUNoYXJhY3RlcnM/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZvcm1hdCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZVBsYWNlaG9sZGVyQW5kTWFzaygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCEhY2hhbmdlcy5kYXRlTG9jYWxlPy5jdXJyZW50VmFsdWUgJiYgIXRoaXMuZGF0ZUZvcm1hdCkge1xuICAgICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlckFuZE1hc2soKVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCh0cnVlKVxuICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBvbkZvY3VzKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvblxuICAgICAgPyBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgOiAoZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZSlcbiAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgdGhpcy5uZ3ZGb2N1cy5lbWl0KGV2ZW50KVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBvbkJsdXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uXG4gICAgICA/IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICA6IChldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlKVxuICAgIHRoaXMub25Ub3VjaGVkKClcbiAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgIHRoaXMubmd2Qmx1ci5lbWl0KGV2ZW50KVxuICB9XG5cbiAgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgYWN0dWFsIGlucHV0IGVsZW1lbnQuICovXG4gIHNldEZvY3VzKCkge1xuICAgIGlmICh0aGlzLmlucHV0UmVmKSB0aGlzLmlucHV0UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBVcGRhdGUgcGxhY2Vob2xkZXIgIGFuZCBpbnB1dCBtYXNrIHRvIG1hdGNoIGxvY2FsZS5cbiAgICogT3JkZXIgaWYgY2hvaWNlIGZvciBsb2NhbGU6XG4gICAqIDEuIGRhdGVMb2NhbGUgLSBVc2VkIGZvciBzcGVjaWZ5aW5nIHdoaWNoIGxvY2FsZSB0byBiZSB1c2VkIGZvciBmb3JtYXR0aW5nIGRhdGVcbiAgICogMi4gbG9jYWxlIC0gVW5sZXNzIGRhdGVMb2NhbGUgaXMgbm90IHByb3ZpZGVkLCB1c2UgbG9jYWxlIGZvcm0gY3VycmVudCB0cmFuc2xhdGlvblxuICAgKiAzLiB0cmFuc2xvY28uZ2V0QWN0aXZlTGFuZyAtIGFzIGxhc3QgcmVzb3J0LCBnZXQgYWN0aXZlIGxhbmd1YWdlIGZvcm0gdHJuYXNsb2NvXG4gICAqIElmIGxvY2FsZSBpcyB1bmRlZmluZWQsIHRyYW5zbG9jby5hY3RpdmVMYW5nIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLlxuICAgKi9cbiAgdXBkYXRlUGxhY2Vob2xkZXJBbmRNYXNrKCkge1xuICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICB0aGlzLmRhdGVMb2NhbGUgPz8gdGhpcy5sb2NhbGUgPz8gdGhpcy5fdHJhbnNsb2NvLmdldEFjdGl2ZUxhbmcoKVxuXG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB0aGlzLmRlZmF1bHRQbGFjZWhvbGRlclxuICAgICAgPyBzZXREYXRlRm9ybWF0Q2hhcmFjdGVycyh0aGlzLmRlZmF1bHRQbGFjZWhvbGRlciwgdGhpcy5kYXRlQ2hhcmFjdGVycylcbiAgICAgIDogc2V0RGF0ZUZvcm1hdENoYXJhY3RlcnMoXG4gICAgICAgICAgZ2V0TG9jYWxlRGF0ZVN0cmluZyhsb2NhbGUpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgdGhpcy5kYXRlQ2hhcmFjdGVycyxcbiAgICAgICAgKVxuICAgIHRoaXMuZGF0ZUlucHV0TWFzayA9IGdldExvY2FsZURhdGVNYXNrKHRoaXMuZGF0ZUNoYXJhY3RlcnMsIGxvY2FsZSlcbiAgfVxuXG4gIHVwZGF0ZUZvcm1hdCgpIHtcbiAgICBpZiAodGhpcy5kYXRlRm9ybWF0KSB7XG4gICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHRoaXMuZGVmYXVsdFBsYWNlaG9sZGVyXG4gICAgICAgID8gc2V0RGF0ZUZvcm1hdENoYXJhY3RlcnModGhpcy5kZWZhdWx0UGxhY2Vob2xkZXIsIHRoaXMuZGF0ZUNoYXJhY3RlcnMpXG4gICAgICAgIDogc2V0RGF0ZUZvcm1hdENoYXJhY3RlcnMoXG4gICAgICAgICAgICB0aGlzLmRhdGVGb3JtYXQudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIHRoaXMuZGF0ZUNoYXJhY3RlcnMsXG4gICAgICAgICAgKVxuICAgICAgdGhpcy5kYXRlSW5wdXRNYXNrID0gZ2V0Rm9ybWF0RGF0ZU1hc2soXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGhpcy5kYXRlQ2hhcmFjdGVycyxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIENPTlRST0wgVkFMVUUgQUNDRVNTT1JcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBJbnRlcm5hbCBzdGF0ZS92YWx1ZSB0aGF0IHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudCBoYXMuICovXG4gIGdldCBzdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBzdGF0ZS92YWx1ZSB0aGF0IHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudCBoYXMuXG4gICAqL1xuICBzZXQgc3RhdGUodmFsdWUpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHZhbHVlXG4gIH1cblxuICAvKiogV3JpdGVzIGEgbmV3IHZhbHVlIHRvIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50LiAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gdmFsdWVcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc3RhdGUpXG4gIH1cblxuICAvKiogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgY2hpbGQgaW5wdXQgZWxlbWVudCdzIHZhbHVlIGNoYW5nZXMuICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gZW5zdXJlIGVtaXR0ZWQgdmFsdWUgaXMgYSBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICAgICBjb25zdCBlbWl0VmFsdWUgPSBEYXRlQ29udHJvbFZhbHVlQWNjZXNzb3JDb21wb25lbnQucGFyc2VEYXRlTGlrZSh2YWx1ZSlcbiAgICAgIGZuKGVtaXRWYWx1ZSlcbiAgICB9XG4gIH1cblxuICAvKiogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgY2hpbGQgaW5wdXQgZWxlbWVudCB0cmlnZ2VycyBvbiBibHVyLiAqL1xuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm5cbiAgfVxuXG4gIC8qKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBieSB0aGUgZm9ybXMgQVBJIHdoZW4gdGhlIGNvbnRyb2wgc3RhdHVzIGNoYW5nZXMgdG8gb3IgZnJvbSAnRElTQUJMRUQnLiAqL1xuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZFxuXG4gICAgLy8gaWYgZGlzcGxheURpc2FibGVkQXNMb2NrZWQgaXMgZW5hYmxlZCAtIHVwZGF0ZSBsb2NrZWQgc3RhdGUgYmFzZWQgb24gZGlzYWJsZWQgc3RhdGVcbiAgICBpZiAodGhpcy5kaXNwbGF5RGlzYWJsZWRBc0xvY2tlZCkge1xuICAgICAgdGhpcy5sb2NrZWQgPSBpc0Rpc2FibGVkXG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBWQUxJREFUT1JTXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogTWV0aG9kIHRoYXQgcGVyZm9ybXMgc3luY2hyb25vdXMgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBwcm92aWRlZCBjb250cm9sLiBVc2VkIGZvciBpbnRlcm5hbCB2YWxpZGF0aW9uLiAqL1xuICB2YWxpZGF0ZShfY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgdmFsaWRhdG9yIGlucHV0cyBjaGFuZ2UuICovXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gZm5cbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSEVMUEVSU1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIFJldHVybnMgdGhlIGZpcnN0IGVudHJ5IGluIGFuIGVycm9yIG9iamVjdC4gKi9cbiAgZ2V0IGZpcnN0RXJyb3IoKTogeyBjb2RlOiBzdHJpbmc7IHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55PiB9IHwgbnVsbCB7XG4gICAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IHRoaXMubmdDb250cm9sLmVycm9yc1xuICAgIGlmICghZXJyb3JzKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGNvZGUgPSBPYmplY3Qua2V5cyhlcnJvcnMpWzBdXG4gICAgcmV0dXJuIHsgY29kZSwgcGFyYW1zOiBlcnJvcnNbY29kZV0gfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHZhbHVlXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnN0YXRlKVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG59XG4iXX0=
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2RhdGVwaWNrZXIvZGF0ZS1jb250cm9sLXZhbHVlLWFjY2Vzc29yL2RhdGUtY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBRUosV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBR0wsU0FBUyxFQUdULFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFDTCxlQUFlLEVBRWYsZ0JBQWdCLEdBQ2pCLE1BQU0sb0JBQW9CLENBQUE7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBSTFDLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsR0FDeEIsTUFBTSxpQkFBaUIsQ0FBQTs7OztBQUd4QixrRUFBa0U7QUFDbEUsTUFBTSxPQUFnQixpQ0FBaUM7SUFvQ3JELHNHQUFzRztJQUN0RyxJQUFhLFdBQVcsQ0FBQyxLQUF5QjtRQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUs7WUFDdkIsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ3JELENBQUMsQ0FBQyxLQUFLLENBQUE7UUFDVCxJ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TU8sUUFBUTtzQkFBcEIsS0FBSztnQkFxQk8sT0FBTztzQkFBbkIsS0FBSztnQkFhTyxLQUFLO3NCQUFqQixLQUFLO2dCQVVHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBUWEsUUFBUTtzQkFBMUIsTUFBTTtnQkFFWSxPQUFPO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTZWxmLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTmdDb250cm9sLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHtcbiAgVFJBTlNMT0NPX1NDT1BFLFxuICBUcmFuc2xvY29TY29wZSxcbiAgVHJhbnNsb2NvU2VydmljZSxcbn0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHR5cGUgeyBJbnB1dG1hc2tPcHRpb25zIH0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9pbnB1dC1tYXNrJ1xuXG5pbXBvcnQge1xuICBEYXRlQ2hhcmFjdGVycyxcbiAgZ2V0Rm9ybWF0RGF0ZU1hc2ssXG4gIGdldExvY2FsZURhdGVNYXNrLFxuICBnZXRMb2NhbGVEYXRlU3RyaW5nLFxuICBzZXREYXRlRm9ybWF0Q2hhcmFjdGVycyxcbn0gZnJvbSAnLi4vbW9kZWxzL2RhdGVzJ1xuXG5ARGlyZWN0aXZlKCkgLy8gUmVxdWlyZWQgd2l0aCBBbmd1bGFyIGl2eSBjb21waWxlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0ZUNvbnRyb2xWYWx1ZUFjY2Vzc29yQ29tcG9uZW50XG4gIGltcGxlbWVudHNcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIFZhbGlkYXRvclxue1xuICAvKiogQ3VzdG9tIHRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHRoZSBjb250ZW50IG9mIHRoZSBsYWJlbC5cbiAgICogU3BlY2lmaWVkIGJ5IG5lc3RpbmcgYW4gYDxuZy10ZW1wbGF0ZSAjbGFiZWxUcGw+Q3VzdG9tIExhYmVsPC9uZy10ZW1wbGF0ZT5gLlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZCgnbGFiZWxUcGwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGxhYmVsQ29udGVudFRwbD86IFRlbXBsYXRlUmVmPHVuZGVmaW5lZD5cblxuICAvKiogQ3VzdG9tIHRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHZhbHVlIHdoZW4gdGhlIGlucHV0IGlzIGxvY2tlZC5cbiAgICogU3BlY2lmaWVkIGJ5IG5lc3RpbmcgYW4gYDxuZy10ZW1wbGF0ZSAjbG9ja2VkVHBsIGxldC1zZWxlY3RlZERhdGU+Q3VzdG9tIGxvY2tlZCBjb250ZW50IGRhdGU6IHt7IHNlbGVjdGVkRGF0ZSB9fTwvbmctdGVtcGxhdGU+YC5cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2xvY2tlZFRwbCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgbG9ja2VkVHBsPzogVGVtcGxhdGVSZWY8dW5kZWZpbmVkPlxuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIG5hdGl2ZSBjaGlsZCBpbnB1dCBlbGVtZW50LiAqL1xuICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBpbnB1dFJlZj86IEVsZW1lbnRSZWZcblxuICAvKiBBVFRSSUJVVEVTICovXG5cbiAgLyoqIElkIG9mIHRoZSBob3N0IGVsZW1lbnQgYW5kIGlzIGFjY2Vzc2libGUgYnkgdGhlIGNoaWxkcmVuLCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpZiBub3QgcHJvdmlkZWQuICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpIEBJbnB1dCgpIGlkID0gKHdpbmRvdyBhcyBhbnkpLm5ndj8ubmV4dElkKFxuICAgICdkYXRlcGlja2VyJyxcbiAgKVxuICAvKiogTmFtZSBvZiB0aGUgY2hpbGQgaW5wdXQgZWxlbWVudC4gKi9cbiAgQElucHV0KCkgbmFtZT86IHN0cmluZ1xuICAvKiogTGFiZWwgb2YgdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQgdXNpbmcgdGhlIGRlZmF1bHQgdGVtcGxhdGUuXG4gICAqIENhbiBiZSBvdmVyd3JpdHRlbiBieSBzcGVjaWZ5aW5nIGFuIGA8bmctdGVtcGxhdGUgI2xhYmVsVHBsPkN1c3RvbSBMYWJlbDwvbmctdGVtcGxhdGU+YC5cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nXG4gIC8qKiBUZXh0IHNob3duIGJlZm9yZSBpbnB1dCBoYXMgYSB3cml0dGVuIHZhbHVlLiBEZWZhdWx0IGN1cnJlbnQgZGF0ZSBmb3JtYXQgYnkgbG9jYWxlIG9mIHRyYW5zbG9jbyAqL1xuICBASW5wdXQoKSBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWVcbiAgICAgID8gc2V0RGF0ZUZvcm1hdENoYXJhY3RlcnModmFsdWUsIHRoaXMuZGF0ZUNoYXJhY3RlcnMpXG4gICAgICA6IHZhbHVlXG4gICAgdGhpcy5kZWZhdWx0UGxhY2Vob2xkZXIgPSB2YWx1ZVxuICAgICAgPyBzZXREYXRlRm9ybWF0Q2hhcmFjdGVycyh2YWx1ZSwgdGhpcy5kYXRlQ2hhcmFjdGVycylcbiAgICAgIDogdmFsdWVcbiAgfVxuICBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyXG4gIH1cbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBkZWZhdWx0UGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgLyoqIFdoYXQgY2hhcmFjdGVycyB0byB1c2UgaW4gZGF0ZSBwbGFjZWhvbGRlciwgZS5nLiB7eWVhcjogJ1knLCBtb250aDogJ00nLCBkYXk6ICdEJ30gKi9cbiAgQElucHV0KCkgZGF0ZUNoYXJhY3RlcnM/OiBEYXRlQ2hhcmFjdGVyc1xuICAvKiogUm9sZSBvZiB0aGUgY2hpbGQgaW5wdXQgZWxlbWVudC4gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQWNjZXNzaWJpbGl0eS9BUklBL1JvbGVzICovXG4gIEBJbnB1dCgpIHJvbGU/OiBzdHJpbmdcbiAgLyoqIFZhbHVlIG9mIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50LiBNb3N0bHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHJhZGlvIGFuZCBjaGVja2JveGVzLiAqL1xuICBASW5wdXQoKSB2YWx1ZTogYW55XG4gIC8qKiBBbiBlcnJvciBzdHJpbmcgdG8gYmUgc2hvd24gdW5kZXIgaW52YWxpZCBpbnB1dHMuIE92ZXJ3cml0ZXMgYW55IGZvcm0gZXJyb3JzLiAqL1xuICBASW5wdXQoKSBlcnJvcj86IHN0cmluZ1xuICAvKiogQSBsaXN0IG9mIGVycm9ycyBzdHJpbmcgdG8gYmUgc2hvd24gdW5kZXIgaW52YWxpZCBpbnB1dHMuIE92ZXJ3cml0ZXMgYW55IGZvcm0gZXJyb3JzLiAqL1xuICBASW5wdXQoKSBlcnJvckxpc3Q/OiBzdHJpbmdbXVxuICAvKiogQWRkcyBhbiBpY29uIGJlZm9yZSBlYWNoIGVycm9yIG1lc3NhZ2UuICovXG4gIEBJbnB1dCgpIHdpdGhFcnJvckljb24/OiBib29sZWFuID0gZmFsc2VcbiAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50LiBCb3RoIHZpc2libHkgYW5kIGFzIGBhcmlhLWxhYmVsYC4gKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgLyoqIElmIHNldCB0byB0cnVlLCB0aGUgYnJvd3NlciB3aWxsIHRyeSB0byBhdXRvbWF0aWNhbGx5IHNldCBmb2N1cyB0byB0aGUgY2hpbGQgaW5wdXQgZWxlbWVudC4gKi9cbiAgQElucHV0KCkgYXV0b2ZvY3VzID0gZmFsc2VcbiAgLyoqIERlZmF1bHQgdmFsdWUgb2YgdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQuICovXG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZT86IGFueVxuICAvKiogSWYgcGFzc2VkLCB0aGUgY29tcG9uZW50IHdpbGwgbGlzdGVuIGZvciB1cGRhdGVzIGFuZCB3aWxsIHJlc2V0IGl0cyB2YWx1ZS4gKi9cbiAgQElucHV0KCkgcmVzZXQ/OiBPYnNlcnZhYmxlPGFueT5cbiAgLyoqIEFkZHMgKE9wdGlvbmFsKSB0byBpbnB1dCBsYWJlbC4gKi9cbiAgQElucHV0KCkgb3B0aW9uYWw/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZFxuICAvKipcbiAgICogU2V0dGluZ3MgZm9yIGlucHV0IG1hc2sgZm9yIGRhdGVzIGJhc2VkIG9uIGxvY2FsZVxuICAgKiBAc2VlIHtAbGluayBnZXRMb2NhbGVEYXRlTWFza30gdXNlIHRoaXMgdG9vbCB0byBnZW5lcmF0ZSBzZXR0aW5ncyBmb3IgYGRhdGVJbnB1dE1hc2tgXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZGF0ZUlucHV0TWFzayhkYXRlTWFzazogSW5wdXRtYXNrT3B0aW9uczxEYXRlPikge1xuICAgIC8vIEhpZGUgaW5wdXQgZmllbGRcbiAgICB0aGlzLnNob3dJbnB1dERhdGVTcmMubmV4dChmYWxzZSlcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICB0aGlzLl9kYXRlSW5wdXRNYXNrID0gZGF0ZU1hc2tcblxuICAgIC8vIFNob3cgaW5wdXQgZmllbGQgdG8gcmVsb2FkIGlucHV0LW1hc2sgc2V0dGluZ3MgdXBvbiB1cGRhdGVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0lucHV0RGF0ZVNyYy5uZXh0KHRydWUpXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICB9LCAyMDApXG4gIH1cbiAgZ2V0IGRhdGVJbnB1dE1hc2soKTogSW5wdXRtYXNrT3B0aW9uczxEYXRlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVJbnB1dE1hc2tcbiAgfVxuICBwcml2YXRlIF9kYXRlSW5wdXRNYXNrITogSW5wdXRtYXNrT3B0aW9uczxEYXRlPlxuXG4gIHByaXZhdGUgX2xvY2tlZDogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgLyoqIEhpZGVzIHRoZSBpbnB1dCBib3JkZXJzIGFuZCBkaXNwbGF5cyBjdXJyZW50IHZhbHVlIGFzIGEgdGV4dC4gKi9cbiAgQElucHV0KCkgc2V0IGxvY2tlZCh2YWx1ZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9sb2NrZWQgPSB2YWx1ZVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIGdldCBsb2NrZWQoKTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9sb2NrZWRcbiAgfVxuICAvKiogSWYgc2V0IHRvIHRydWUsIHVzaW5nIGEgY29udHJvbHMgZGlzYWJsZWQgc3RhdGUgd2lsbCBkaXNwbGF5IGlucHV0IGFzIGxvY2tlZC4gKi9cbiAgQElucHV0KCkgZGlzcGxheURpc2FibGVkQXNMb2NrZWQ/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZFxuXG4gIC8qIFNUQVRFUyAqL1xuXG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAvKiogT3ZlcnJpZGUgdGhlIHJlcXVpcmVkIGZsYWcgb2YgdGhlIGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gdmFsdWVcbiAgfVxuICAvKiogQ2hpbGQgaW5wdXQgZWxlbWVudCBpcyBjb25zaWRlcmVkIHJlcXVpcmVkIGFuZCBjaGFuZ2VzIGRlZmF1bHQgbGFiZWwgdGVtcGxhdGUgYWNjb3JkaW5nbHkuICovXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgLy8gaWYgcmVxdWlyZWQgaXMgc2V0ID0+IHJldHVybiByZXF1aXJlZFxuICAgIGlmICh0aGlzLl9yZXF1aXJlZCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fcmVxdWlyZWRcblxuICAgIC8vIGlmIHJlcXVpcmVkIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIGNvbnRyb2wgPT4gcmV0dXJuIGNvbnRyb2wucmVxdWlyZWRcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/LnZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/LnZhbGlkYXRvcihcbiAgICAgICAge30gYXMgQWJzdHJhY3RDb250cm9sLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHZhbGlkYXRvciAmJiB2YWxpZGF0b3IucmVxdWlyZWRcbiAgICB9XG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIHByaXZhdGUgX2ludmFsaWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgLyoqIE92ZXJyaWRlIHRoZSBpbnZhbGlkIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuICovXG4gIEBJbnB1dCgpIHNldCBpbnZhbGlkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW52YWxpZCA9IHZhbHVlXG4gIH1cbiAgLyoqIFRoZSBjb21wb25lbnQgaGFzIHRoZSBpbnZhbGlkIHN0YXRlLCB1c3VhbGx5IGRlY29yYXRpbmcgdGhlIGVsZW1lbnRzIHJlZCBhbmQgc2hvd3MgdGhlIGZpcnN0IGVycm9yLiAqL1xuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5faW52YWxpZCA9PT0gdHJ1ZSB8fCB0aGlzLl9pbnZhbGlkID09PSBmYWxzZSkgcmV0dXJuIHRoaXMuX2ludmFsaWRcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaW52YWxpZCAmJiB0aGlzLm5nQ29udHJvbD8uY29udHJvbD8udG91Y2hlZFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgX3ZhbGlkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gIC8qKiBPdmVycmlkZSB0aGUgdmFsaWQgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgc2V0IHZhbGlkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fdmFsaWQgPSB2YWx1ZVxuICB9XG4gIC8qKiBUaGUgY29tcG9uZW50IGhhcyB0aGUgdmFsaWQgc3RhdGUsIHVzdWFsbHkgZGVjb3JhdGluZyB0aGUgZWxlbWVudHMgZ3JlZW4uICovXG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fdmFsaWQgPT09IHRydWUgfHwgdGhpcy5fdmFsaWQgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5fdmFsaWRcbiAgICByZXR1cm4gISF0aGlzLm5nQ29udHJvbD8uY29udHJvbD8udmFsaWQgJiYgdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/LnRvdWNoZWRcbiAgfVxuXG4gIC8qKiBUaGUgY29tcG9uZW50IGhhcyB0aGUgZm9jdXNlZCBzdGF0ZSwgdXBkYXRlZCBieSB0aGUgY2hpbGQgaW5wdXQgZWxlbWVudCdzIGZvY3VzIHN0YXRlLiAqL1xuICBASW5wdXQoKSBmb2N1c2VkID0gZmFsc2VcbiAgLyoqIFRoZSBjb21wb25lbnQgaGFzIHRoZSBkaXNhYmxlZCBzdGF0ZSwgdXN1YWxseSBtdXRpbmcgdGhlIGNvbG9ycyBhbmQgcmVtb3ZlcyBpbnRlcmFjdGlvbi4gKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZVxuICAvKiogTG9jYWxlIGZvciB1c2luZyBjb3JyZWN0IGxhbmd1YWdlIGluIHRoZSBkYXRlcGlja2VyLiAqL1xuICBASW5wdXQoKSBsb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogRGF0ZSBmb3JtYXQgdXNlZCBmb3IgcGxhY2Vob2xkZXIgYW5kIGlucHV0IG1hc2suIFNob3VsZCBiZSBpbiBsb3dlciBjYXNlIHt5ZWFyOiAneScsIG1vbnRoOiAnbScsIGRheTogJ2QnfSAqL1xuICBASW5wdXQoKSBkYXRlRm9ybWF0OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIERhdGUgbG9jYWxlIHVzZWQgZm9yIHBsYWNlaG9sZGVyIGFuZCBpbnB1dCBtYXNrLiAqL1xuICBASW5wdXQoKSBkYXRlTG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICAvKiogVG9nZ2xlciBmb3Igc2hvd2luZyBvciBoaWRpbmcgdGhlIGlucHV0IGZpZWxkICovXG4gIHByb3RlY3RlZCBzaG93SW5wdXREYXRlU3JjID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKVxuXG4gIC8qIFRSSUdHRVJTICovXG5cbiAgLyoqIEVtaXRzIGZvY3VzIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhlIGNoaWxkIGVsZW1lbnRzLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbmd2Rm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgLyoqIEVtaXRzIGZvY3VzIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhlIGNoaWxkIGVsZW1lbnRzLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbmd2Qmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIC8qIFZBTFVFIEhBTkRMRVJTICovXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIG9uQ2hhbmdlID0gKF86IGFueSk6IHZvaWQgPT4ge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcm90ZWN0ZWQgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcm90ZWN0ZWQgb25WYWxpZGF0b3JDaGFuZ2U6ICgpID0+IHZvaWQgPSAoKSA9PiBudWxsXG4gIHByaXZhdGUgX3N0YXRlOiBhbnkgPSBudWxsXG5cbiAgLyogT1RIRVIgVkFSSUFCTEVTICovXG4gIHNjb3BlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICAvLyB3YXJuaW5nSWNvbiA9IGZhVHJpYW5nbGVFeGNsYW1hdGlvbjtcblxuICAvKiBMSUZFIENZQ0xFIFZBUklBQkxFUyAqL1xuICBwcml2YXRlIF9vbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dHJ1ZT4oKVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEJhc2VDb250cm9sVmFsdWVBY2Nlc3NvckNvbXBvbmVudC5cbiAgICogQHBhcmFtIG5nQ29udHJvbCBvcHRpb25hbCBGb3JtQ29udHJvbCBwcm92aWRlZCB3aGVuIGNvbXBvbmVudCBpcyB1c2VkIGluIGEgZm9ybSwgdGhyb3VnaCBkZXBlbmRlbmN5IGluamVjdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChUUkFOU0xPQ09fU0NPUEUpXG4gICAgcHJvdGVjdGVkIHRyYW5zbG9jb1Njb3BlOiBUcmFuc2xvY29TY29wZSxcbiAgICBwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF90cmFuc2xvY286IFRyYW5zbG9jb1NlcnZpY2UsXG4gICkge1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgLy8gTm90ZTogd2UgcHJvdmlkZSB0aGUgdmFsdWUgYWNjZXNzb3IgdGhyb3VnaCBoZXJlLCBpbnN0ZWFkIG9mXG4gICAgICAvLyB0aGUgYHByb3ZpZGVyc2AgdG8gYXZvaWQgcnVubmluZyBpbnRvIGEgY2lyY3VsYXIgaW1wb3J0LlxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXNcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFuc2xvY29TY29wZSkgdGhpcy5zY29wZSA9IHRoaXMudHJhbnNsb2NvU2NvcGUudG9TdHJpbmcoKVxuICB9XG5cbiAgc3RhdGljIHBhcnNlRGF0ZUxpa2UodmFsdWU6IGFueSk6IG51bGwgfCB1bmRlZmluZWQgfCBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICAvLyBpZiB2YWx1ZSBpcyB0eXBlIG9mIHN0cmluZyxcbiAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgIC8vIHJlbW92ZSBpbnN0YW5jZXMgd2hlcmUgdGhlIHZhbHVlIHdpbGwgbm90IGNvcnJlY3RseSBiZSBwYXJzZWQgdG8gYSBkYXRlIHN0cmluZ1xuICAgICAgICBjYXNlIHZhbHVlID09IG51bGw6XG4gICAgICAgIGNhc2UgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdJbnZhbGlkIERhdGUnOlxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIC8vIGlmIHZhbHVlLWFzLWRhdGUgaXMgYSB2YWxpZCBkYXRlIG9iamVjdCwgcGFyc2UgdGhlIHZhbHVlIHRvIFlZWVktTU0tREQgZm9ybWF0XG4gICAgICAgIGNhc2UgdHlwZW9mIHZhbHVlPy5nZXRNb250aCA9PT0gJ2Z1bmN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ3N2LVNFJykuZm9ybWF0KHZhbHVlKVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB2YWx1ZSBhcyBzdHJpbmdcbiAgICAgIH1cbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb250ZXh0dWFsLWxpZmVjeWNsZVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wuY29udHJvbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC5zZXRWYWxpZGF0b3JzKFxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW3RoaXMubmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yLCB0aGlzLnZhbGlkYXRlXSksXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5fdHJhbnNsb2NvLmxhbmdDaGFuZ2VzJC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZSAmJiAhdGhpcy5kYXRlRm9ybWF0KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlUGxhY2Vob2xkZXJBbmRNYXNrKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgLy8gaWYgcmVzZXQgb2JzZXJ2YWJsZSBoYXMgYmVlbiBwYXNzZWQsIHN1YnNjcmliZSBhZnRlciB1cGRhdGVzXG4gICAgdGhpcy5yZXNldD8ucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIC8vIHJlc2V0IHZhbHVlIG9mIGNvbnRyb2xsZXJcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSgnJylcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29udGV4dHVhbC1saWZlY3ljbGVcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIGlmIGRlZmF1bHQgdmFsdWUgaXMgc2V0LCB0aGVuIGRvbid0IGFsdGVyIGl0LiBPdGhlcndpc2UsIHVzZVxuICAgIC8vIGN1cnJlbnQgdmFsdWUgb2YgY29udHJvbGxlciBhZnRlciBpbml0aWF0aW9uIGFzIGRlZmF1bHQgdmFsdWVcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlID8/IHRoaXMubmdDb250cm9sPy52YWx1ZVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmRlZmF1bHRWYWx1ZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKGNoYW5nZXMuZGVmYXVsdFZhbHVlLmN1cnJlbnRWYWx1ZSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLmxvY2FsZT8uY3VycmVudFZhbHVlICYmXG4gICAgICAhdGhpcy5kYXRlRm9ybWF0ICYmXG4gICAgICAhY2hhbmdlcy5kYXRlRm9ybWF0Py5jdXJyZW50VmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXJBbmRNYXNrKClcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5kYXRlRm9ybWF0Py5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlRm9ybWF0KClcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5kYXRlQ2hhcmFjdGVycz8uY3VycmVudFZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5kYXRlRm9ybWF0KSB7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXJBbmRNYXNrKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoISFjaGFuZ2VzLmRhdGVMb2NhbGU/LmN1cnJlbnRWYWx1ZSAmJiAhdGhpcy5kYXRlRm9ybWF0KSB7XG4gICAgICB0aGlzLnVwZGF0ZVBsYWNlaG9sZGVyQW5kTWFzaygpXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KHRydWUpXG4gICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpXG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG9uRm9jdXMoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uXG4gICAgICA/IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICA6IChldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlKVxuICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICB0aGlzLm5ndkZvY3VzLmVtaXQoZXZlbnQpXG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG9uQmx1cihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb25cbiAgICAgID8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIDogKGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWUpXG4gICAgdGhpcy5vblRvdWNoZWQoKVxuICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5uZ3ZCbHVyLmVtaXQoZXZlbnQpXG4gIH1cblxuICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG5cbiAgLyoqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBhY3R1YWwgaW5wdXQgZWxlbWVudC4gKi9cbiAgc2V0Rm9jdXMoKSB7XG4gICAgaWYgKHRoaXMuaW5wdXRSZWYpIHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFVwZGF0ZSBwbGFjZWhvbGRlciAgYW5kIGlucHV0IG1hc2sgdG8gbWF0Y2ggbG9jYWxlLlxuICAgKiBPcmRlciBpZiBjaG9pY2UgZm9yIGxvY2FsZTpcbiAgICogMS4gZGF0ZUxvY2FsZSAtIFVzZWQgZm9yIHNwZWNpZnlpbmcgd2hpY2ggbG9jYWxlIHRvIGJlIHVzZWQgZm9yIGZvcm1hdHRpbmcgZGF0ZVxuICAgKiAyLiBsb2NhbGUgLSBVbmxlc3MgZGF0ZUxvY2FsZSBpcyBub3QgcHJvdmlkZWQsIHVzZSBsb2NhbGUgZm9ybSBjdXJyZW50IHRyYW5zbGF0aW9uXG4gICAqIDMuIHRyYW5zbG9jby5nZXRBY3RpdmVMYW5nIC0gYXMgbGFzdCByZXNvcnQsIGdldCBhY3RpdmUgbGFuZ3VhZ2UgZm9ybSB0cm5hc2xvY29cbiAgICogSWYgbG9jYWxlIGlzIHVuZGVmaW5lZCwgdHJhbnNsb2NvLmFjdGl2ZUxhbmcgd2lsbCBiZSB1c2VkIGluc3RlYWQuXG4gICAqL1xuICB1cGRhdGVQbGFjZWhvbGRlckFuZE1hc2soKSB7XG4gICAgY29uc3QgbG9jYWxlID1cbiAgICAgIHRoaXMuZGF0ZUxvY2FsZSA/PyB0aGlzLmxvY2FsZSA/PyB0aGlzLl90cmFuc2xvY28uZ2V0QWN0aXZlTGFuZygpXG5cbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHRoaXMuZGVmYXVsdFBsYWNlaG9sZGVyXG4gICAgICA/IHNldERhdGVGb3JtYXRDaGFyYWN0ZXJzKHRoaXMuZGVmYXVsdFBsYWNlaG9sZGVyLCB0aGlzLmRhdGVDaGFyYWN0ZXJzKVxuICAgICAgOiBzZXREYXRlRm9ybWF0Q2hhcmFjdGVycyhcbiAgICAgICAgICBnZXRMb2NhbGVEYXRlU3RyaW5nKGxvY2FsZSkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB0aGlzLmRhdGVDaGFyYWN0ZXJzLFxuICAgICAgICApXG4gICAgdGhpcy5kYXRlSW5wdXRNYXNrID0gZ2V0TG9jYWxlRGF0ZU1hc2sodGhpcy5kYXRlQ2hhcmFjdGVycywgbG9jYWxlKVxuICB9XG5cbiAgdXBkYXRlRm9ybWF0KCkge1xuICAgIGlmICh0aGlzLmRhdGVGb3JtYXQpIHtcbiAgICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdGhpcy5kZWZhdWx0UGxhY2Vob2xkZXJcbiAgICAgICAgPyBzZXREYXRlRm9ybWF0Q2hhcmFjdGVycyh0aGlzLmRlZmF1bHRQbGFjZWhvbGRlciwgdGhpcy5kYXRlQ2hhcmFjdGVycylcbiAgICAgICAgOiBzZXREYXRlRm9ybWF0Q2hhcmFjdGVycyhcbiAgICAgICAgICAgIHRoaXMuZGF0ZUZvcm1hdC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgdGhpcy5kYXRlQ2hhcmFjdGVycyxcbiAgICAgICAgICApXG4gICAgICB0aGlzLmRhdGVJbnB1dE1hc2sgPSBnZXRGb3JtYXREYXRlTWFzayhcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICB0aGlzLmRhdGVDaGFyYWN0ZXJzLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQ09OVFJPTCBWQUxVRSBBQ0NFU1NPUlxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIEludGVybmFsIHN0YXRlL3ZhbHVlIHRoYXQgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGhhcy4gKi9cbiAgZ2V0IHN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIHN0YXRlL3ZhbHVlIHRoYXQgdGhlIG5hdGl2ZSBpbnB1dCBlbGVtZW50IGhhcy5cbiAgICovXG4gIHNldCBzdGF0ZSh2YWx1ZSkge1xuICAgIHRoaXMuX3N0YXRlID0gdmFsdWVcbiAgfVxuXG4gIC8qKiBXcml0ZXMgYSBuZXcgdmFsdWUgdG8gdGhlIGNoaWxkIGlucHV0IGVsZW1lbnQuICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSB2YWx1ZVxuICAgIHRoaXMub25DaGFuZ2UodGhpcy5zdGF0ZSlcbiAgfVxuXG4gIC8qKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50J3MgdmFsdWUgY2hhbmdlcy4gKi9cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gKHZhbHVlKSA9PiB7XG4gICAgICAvLyBlbnN1cmUgZW1pdHRlZCB2YWx1ZSBpcyBhIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGVtaXRWYWx1ZSA9IERhdGVDb250cm9sVmFsdWVBY2Nlc3NvckNvbXBvbmVudC5wYXJzZURhdGVMaWtlKHZhbHVlKVxuICAgICAgZm4oZW1pdFZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBSZWdpc3RlcnMgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSBjaGlsZCBpbnB1dCBlbGVtZW50IHRyaWdnZXJzIG9uIGJsdXIuICovXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmblxuICB9XG5cbiAgLyoqIEZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGJ5IHRoZSBmb3JtcyBBUEkgd2hlbiB0aGUgY29udHJvbCBzdGF0dXMgY2hhbmdlcyB0byBvciBmcm9tICdESVNBQkxFRCcuICovXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkXG5cbiAgICAvLyBpZiBkaXNwbGF5RGlzYWJsZWRBc0xvY2tlZCBpcyBlbmFibGVkIC0gdXBkYXRlIGxvY2tlZCBzdGF0ZSBiYXNlZCBvbiBkaXNhYmxlZCBzdGF0ZVxuICAgIGlmICh0aGlzLmRpc3BsYXlEaXNhYmxlZEFzTG9ja2VkKSB7XG4gICAgICB0aGlzLmxvY2tlZCA9IGlzRGlzYWJsZWRcbiAgICB9XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFZBTElEQVRPUlNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBNZXRob2QgdGhhdCBwZXJmb3JtcyBzeW5jaHJvbm91cyB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIHByb3ZpZGVkIGNvbnRyb2wuIFVzZWQgZm9yIGludGVybmFsIHZhbGlkYXRpb24uICovXG4gIHZhbGlkYXRlKF9jb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKiogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSB2YWxpZGF0b3IgaW5wdXRzIGNoYW5nZS4gKi9cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBmblxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIRUxQRVJTXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogUmV0dXJucyB0aGUgZmlyc3QgZW50cnkgaW4gYW4gZXJyb3Igb2JqZWN0LiAqL1xuICBnZXQgZmlyc3RFcnJvcigpOiB7IGNvZGU6IHN0cmluZzsgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0gfCBudWxsIHtcbiAgICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gdGhpcy5uZ0NvbnRyb2wuZXJyb3JzXG4gICAgaWYgKCFlcnJvcnMpIHJldHVybiBudWxsXG4gICAgY29uc3QgY29kZSA9IE9iamVjdC5rZXlzKGVycm9ycylbMF1cbiAgICByZXR1cm4geyBjb2RlLCBwYXJhbXM6IGVycm9yc1tjb2RlXSB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlKHZhbHVlID0gdGhpcy5kZWZhdWx0VmFsdWUpIHtcbiAgICB0aGlzLnN0YXRlID0gdmFsdWVcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc3RhdGUpXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cbn1cbiJdfQ==
@@ -195,11 +195,11 @@ export class NggvDropdownComponent extends NggvBaseControlValueAccessorComponent
195
195
  return !('options' in option);
196
196
  }
197
197
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NggvDropdownComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: TRANSLOCO_SCOPE, optional: true }, { token: i0.ChangeDetectorRef }, { token: i2.DropdownUtils }], target: i0.ɵɵFactoryTarget.Component }); }
198
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NggvDropdownComponent, selector: "nggv-dropdown", inputs: { thook: "thook", placeholder: "placeholder", ariaLabel: "ariaLabel", options: "options", scrollOffset: "scrollOffset", allowControlNullishOption: "allowControlNullishOption", textToHighlight: "textToHighlight", selectOnSingleOption: "selectOnSingleOption" }, outputs: { expandedChange: "expandedChange" }, host: { listeners: { "keyup": "onKeyUp($event)" }, properties: { "attr.data-thook": "this.thook" } }, queries: [{ propertyName: "selectedContentTpl", first: true, predicate: ["selectedTpl"], descendants: true, read: TemplateRef }, { propertyName: "optionContentTpl", first: true, predicate: ["optionTpl"], descendants: true, read: TemplateRef }, { propertyName: "groupLabelTpl", first: true, predicate: ["groupLabelTpl"], descendants: true, read: TemplateRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-toggle'\"\n *ngIf=\"labelContentTpl || label\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div class=\"description\" *ngIf=\"description\">{{ description }}</div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n [attr.aria-labelledby]=\"id + '-label ' + id + '-input'\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n\n <!-- INPUT -->\n <ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper\">\n <div #input [id]=\"id + '-input'\" class=\"dropdown\">\n <button\n [id]=\"id + '-toggle'\"\n [disabled]=\"disabled\"\n type=\"button\"\n class=\"nggv-field-dropdown__label toggle\"\n [class.nggv-field--error]=\"invalid\"\n role=\"combobox\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [attr.data-thook]=\"thook + '-toggle'\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-labelledby]=\"\n ariaLabel ? null : id + '-label ' + id + '-toggle'\n \"\n [attr.aria-label]=\"ariaLabel || null\"\n (click)=\"toggleDropdown()\"\n >\n <span>\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </span>\n </button>\n <nggv-dropdown-list\n #dropDownList\n [options]=\"options\"\n [scrollOffset]=\"scrollOffset\"\n [state]=\"state\"\n [expanded]=\"expanded\"\n [optionContentTpl]=\"optionContentTpl\"\n [groupLabelTpl]=\"groupLabelTpl\"\n [textToHighlight]=\"textToHighlight\"\n (closed)=\"setExpanded(false)\"\n (selectedValueChanged)=\"onSelectChange($event)\"\n >\n </nggv-dropdown-list>\n </div>\n <!-- ERRORS -->\n <div class=\"gds-form-item__footer error-wrapper\">\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n <!-- CHILDREN -->\n <ng-content></ng-content>\n </div>\n </ng-container>\n\n <ng-template #defaultSelectedContentTpl let-state>\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\n </ng-template>\n</ng-container>\n", styles: [":host{--sg-border-radius: .25rem;--sg-border-width: 1px;--sg-border-color: #868686;--text-primary-color: #333;--sg-form-control-bg: #fff;--grey-000: hsl(0 0% 100%);--grey-100: hsl(0, 0%, 97%);--grey-200: hsl(0, 0%, 91%);--grey-300: hsl(0, 0%, 87%);--grey-400: hsl(0, 0%, 81%);--grey-500: hsl(0, 0%, 68%);--grey-600: hsl(0, 0%, 53%);--grey-700: hsl(0, 0%, 29%);--grey-800: hsl(0, 0%, 20%);--grey-900: hsl(0, 0%, 10%);--grey-1000: hsl(0 0% 0%);display:flex;flex-direction:column;max-width:100%;position:relative;width:100%;z-index:0;position:initial}:host label{display:block;font-weight:500;line-height:1.25rem;width:100%}:host label+.gds-input-wrapper,:host label+.nggv-field--locked{margin-top:.5rem}:host .description{font-size:.875rem;margin-bottom:.5rem;line-height:1.25rem;width:100%}:host:not(:last-child){margin-bottom:1.5rem}:host .gds-form-item__header{display:flex}:host .gds-form-item__header .form-info{font-weight:400}:host .gds-form-item__header button.icon.small{margin-top:-.5rem;margin-right:-.5rem}:host .gds-form-item__labels{flex:1;margin-bottom:.5rem}:host .gds-form-item__labels .form-info{margin-bottom:0}:host .gds-form-item__labels .form-info a:link:not(.button,[aria-disabled]){color:#0062bc}:host .gds-form-item__labels>*{width:100%;display:block}:host .gds-form-item__expandable-info{overflow:hidden;font-size:.875rem;line-height:1.25rem;transition:height .3s cubic-bezier(.23,1,.32,1)}:host .gds-form-item__expandable-info>div{padding-bottom:.5rem}:host .gds-form-item__backdrop{position:absolute;inset:0;background:var(--gds-ref-pallet-base100);border-radius:2px;z-index:-1;margin:-1rem;opacity:0;transition:all .3s cubic-bezier(.23,1,.32,1);border:1px solid transparent}@media (prefers-reduced-motion: reduce){:host .gds-form-item__backdrop{transition:none}}:host:has([aria-expanded=true]) .gds-form-item__backdrop{opacity:1;border-radius:.25rem;border-color:var(--gds-ref-pallet-base600)}:host .gds-form-item__footer:not(:empty){margin-top:.5rem;display:flex;column-gap:.5rem}:host .gds-form-item__footer:not(:empty)>span,:host .gds-form-item__footer:not(:empty)>.form-info{font-weight:500;line-height:1.125}:host:not(:last-child){margin-bottom:unset}:host .gds-field-label--optional{font-weight:400}:host button{background-color:transparent;border:0;cursor:pointer;font-family:inherit;padding:0;padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--grey-600);--sg-border-color: var(--grey-600);background:var(--sg-form-control-bg);color:var(--text-primary-color);min-height:2.75rem;display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;max-width:100%;font-size:1rem;font-weight:400;line-height:1.125;text-align:left;width:100%}:host button:focus{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}@media (max-width: 35.98em){:host button{min-width:100%}}:host button>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host button:after{margin-left:.5rem;margin-right:.5rem;border-bottom:solid 2px var(--text-primary-color);border-left:solid 2px var(--text-primary-color);content:\"\";display:block;height:.5rem;width:.5rem;position:relative;top:-.15rem;transform:translate(75%) rotate3d(0,0,1,-45deg) scaleZ(-1);transition:transform .3s ease-in;flex-shrink:0}:host button[aria-expanded=true]:after{transform:translate(75%,6px) rotate3d(0,0,1,-45deg) scale3d(-1,-1,1)}:host button:hover:after{border-color:currentColor}:host button:disabled{--background: var(--grey-500)}:host button span{width:100%;white-space:nowrap;display:block;text-overflow:ellipsis}:host button.small{font-size:.875rem}:host button:hover{background:#e7e7e7}:host button:active{background:inherit;color:inherit;border-color:inherit}:host button:disabled,:host button.disabled{--text-primary-color: var(--grey-600);background:var(--grey-300);color:var(--grey-600);cursor:not-allowed}:host button.nggv-field--error{border-bottom:2px solid #9f000a}:host .gds-form-item__footer .form-info{font-weight:500;font-size:.875rem}:host .gds-form-item__footer .form-info--error{display:flex;align-items:flex-start;gap:.5em;color:#9f000a}:host .gds-form-item__footer .form-info--error .error-icon{align-items:center}:host .dropdown{width:100%;position:relative}:host .dropdown nggv-dropdown-list{width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NggCoreElementDirective, selector: "[nggCoreElement]" }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i6.NggvDropdownListComponent, selector: "nggv-dropdown-list", inputs: ["expanded", "state", "scrollOffset", "optionContentTpl", "groupLabelTpl", "id", "thook", "options", "textToHighlight", "onlyEmitDistinctChanges"], outputs: ["selectedValueChanged", "closed"] }] }); }
198
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: NggvDropdownComponent, selector: "nggv-dropdown", inputs: { thook: "thook", placeholder: "placeholder", ariaLabel: "ariaLabel", options: "options", scrollOffset: "scrollOffset", allowControlNullishOption: "allowControlNullishOption", textToHighlight: "textToHighlight", selectOnSingleOption: "selectOnSingleOption" }, outputs: { expandedChange: "expandedChange" }, host: { listeners: { "keyup": "onKeyUp($event)" }, properties: { "attr.data-thook": "this.thook" } }, queries: [{ propertyName: "selectedContentTpl", first: true, predicate: ["selectedTpl"], descendants: true, read: TemplateRef }, { propertyName: "optionContentTpl", first: true, predicate: ["optionTpl"], descendants: true, read: TemplateRef }, { propertyName: "groupLabelTpl", first: true, predicate: ["groupLabelTpl"], descendants: true, read: TemplateRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-toggle'\"\n *ngIf=\"labelContentTpl || label\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div class=\"description\" *ngIf=\"description\">{{ description }}</div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n [attr.aria-labelledby]=\"id + '-label ' + id + '-input'\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT -->\n <ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper\">\n <div #input [id]=\"id + '-input'\" class=\"dropdown\">\n <button\n [id]=\"id + '-toggle'\"\n [disabled]=\"disabled\"\n type=\"button\"\n class=\"nggv-field-dropdown__label toggle\"\n [class.nggv-field--error]=\"invalid\"\n role=\"combobox\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [attr.data-thook]=\"thook + '-toggle'\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-labelledby]=\"\n ariaLabel ? null : id + '-label ' + id + '-toggle'\n \"\n [attr.aria-label]=\"ariaLabel || null\"\n (click)=\"toggleDropdown()\"\n >\n <span>\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </span>\n </button>\n <nggv-dropdown-list\n #dropDownList\n [options]=\"options\"\n [scrollOffset]=\"scrollOffset\"\n [state]=\"state\"\n [expanded]=\"expanded\"\n [optionContentTpl]=\"optionContentTpl\"\n [groupLabelTpl]=\"groupLabelTpl\"\n [textToHighlight]=\"textToHighlight\"\n (closed)=\"setExpanded(false)\"\n (selectedValueChanged)=\"onSelectChange($event)\"\n >\n </nggv-dropdown-list>\n </div>\n <!-- ERRORS -->\n <div class=\"gds-form-item__footer error-wrapper\">\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n <!-- CHILDREN -->\n <ng-content></ng-content>\n </div>\n </ng-container>\n\n <ng-template #defaultSelectedContentTpl let-state>\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\n </ng-template>\n</ng-container>\n", styles: [":host{--sg-border-radius: .25rem;--sg-border-width: 1px;--sg-border-color: #868686;--text-primary-color: #333;--sg-form-control-bg: #fff;--grey-000: hsl(0 0% 100%);--grey-100: hsl(0, 0%, 97%);--grey-200: hsl(0, 0%, 91%);--grey-300: hsl(0, 0%, 87%);--grey-400: hsl(0, 0%, 81%);--grey-500: hsl(0, 0%, 68%);--grey-600: hsl(0, 0%, 53%);--grey-700: hsl(0, 0%, 29%);--grey-800: hsl(0, 0%, 20%);--grey-900: hsl(0, 0%, 10%);--grey-1000: hsl(0 0% 0%);display:flex;flex-direction:column;max-width:100%;position:relative;width:100%;z-index:0;position:initial}:host label{display:block;font-weight:500;line-height:1.25rem;width:100%}:host label+.gds-input-wrapper,:host label+.nggv-field--locked{margin-top:.5rem}:host .description{font-size:.875rem;margin-bottom:.5rem;line-height:1.25rem;width:100%}:host:not(:last-child){margin-bottom:1.5rem}:host .gds-form-item__header{display:flex}:host .gds-form-item__header .form-info{font-weight:400}:host .gds-form-item__header button.icon.small{margin-top:-.5rem;margin-right:-.5rem}:host .gds-form-item__labels{flex:1;margin-bottom:.5rem}:host .gds-form-item__labels .form-info{margin-bottom:0}:host .gds-form-item__labels .form-info a:link:not(.button,[aria-disabled]){color:#0062bc}:host .gds-form-item__labels>*{width:100%;display:block}:host .gds-form-item__expandable-info{overflow:hidden;font-size:.875rem;line-height:1.25rem;transition:height .3s cubic-bezier(.23,1,.32,1)}:host .gds-form-item__expandable-info>div{padding-bottom:.5rem}:host .gds-form-item__backdrop{position:absolute;inset:0;background:var(--gds-ref-pallet-base100);border-radius:2px;z-index:-1;margin:-1rem;opacity:0;transition:all .3s cubic-bezier(.23,1,.32,1);border:1px solid transparent}@media (prefers-reduced-motion: reduce){:host .gds-form-item__backdrop{transition:none}}:host:has([aria-expanded=true]) .gds-form-item__backdrop{opacity:1;border-radius:.25rem;border-color:var(--gds-ref-pallet-base600)}:host .gds-form-item__footer:not(:empty){margin-top:.5rem;display:flex;column-gap:.5rem}:host .gds-form-item__footer:not(:empty)>span,:host .gds-form-item__footer:not(:empty)>.form-info{font-weight:500;line-height:1.125}:host:not(:last-child){margin-bottom:unset}:host .gds-field-label--optional{font-weight:400}:host button{background-color:transparent;border:0;cursor:pointer;font-family:inherit;padding:0;padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--grey-600);--sg-border-color: var(--grey-600);background:var(--sg-form-control-bg);color:var(--text-primary-color);min-height:2.75rem;display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;max-width:100%;font-size:1rem;font-weight:400;line-height:1.125;text-align:left;width:100%}:host button:focus{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}@media (max-width: 35.98em){:host button{min-width:100%}}:host button>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host button:after{margin-left:.5rem;margin-right:.5rem;border-bottom:solid 2px var(--text-primary-color);border-left:solid 2px var(--text-primary-color);content:\"\";display:block;height:.5rem;width:.5rem;position:relative;top:-.15rem;transform:translate(75%) rotate3d(0,0,1,-45deg) scaleZ(-1);transition:transform .3s ease-in;flex-shrink:0}:host button[aria-expanded=true]:after{transform:translate(75%,6px) rotate3d(0,0,1,-45deg) scale3d(-1,-1,1)}:host button:hover:after{border-color:currentColor}:host button:disabled{--background: var(--grey-500)}:host button span{width:100%;white-space:nowrap;display:block;text-overflow:ellipsis}:host button.small{font-size:.875rem}:host button:hover{background:#e7e7e7}:host button:active{background:inherit;color:inherit;border-color:inherit}:host button:disabled,:host button.disabled{--text-primary-color: var(--grey-600);background:var(--grey-300);color:var(--grey-600);cursor:not-allowed}:host button.nggv-field--error{border-bottom:2px solid #9f000a}:host .gds-form-item__footer .form-info{font-weight:500;font-size:.875rem}:host .gds-form-item__footer .form-info--error{display:flex;align-items:flex-start;gap:.5em;color:#9f000a}:host .gds-form-item__footer .form-info--error .error-icon{align-items:center}:host .dropdown{width:100%;position:relative}:host .dropdown nggv-dropdown-list{width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NggCoreElementDirective, selector: "[nggCoreElement]" }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: i6.NggvDropdownListComponent, selector: "nggv-dropdown-list", inputs: ["expanded", "state", "scrollOffset", "optionContentTpl", "groupLabelTpl", "id", "thook", "options", "textToHighlight", "onlyEmitDistinctChanges"], outputs: ["selectedValueChanged", "closed"] }] }); }
199
199
  }
200
200
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NggvDropdownComponent, decorators: [{
201
201
  type: Component,
202
- args: [{ selector: 'nggv-dropdown', template: "<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-toggle'\"\n *ngIf=\"labelContentTpl || label\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div class=\"description\" *ngIf=\"description\">{{ description }}</div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n [attr.aria-labelledby]=\"id + '-label ' + id + '-input'\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n\n <!-- INPUT -->\n <ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper\">\n <div #input [id]=\"id + '-input'\" class=\"dropdown\">\n <button\n [id]=\"id + '-toggle'\"\n [disabled]=\"disabled\"\n type=\"button\"\n class=\"nggv-field-dropdown__label toggle\"\n [class.nggv-field--error]=\"invalid\"\n role=\"combobox\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [attr.data-thook]=\"thook + '-toggle'\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-labelledby]=\"\n ariaLabel ? null : id + '-label ' + id + '-toggle'\n \"\n [attr.aria-label]=\"ariaLabel || null\"\n (click)=\"toggleDropdown()\"\n >\n <span>\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </span>\n </button>\n <nggv-dropdown-list\n #dropDownList\n [options]=\"options\"\n [scrollOffset]=\"scrollOffset\"\n [state]=\"state\"\n [expanded]=\"expanded\"\n [optionContentTpl]=\"optionContentTpl\"\n [groupLabelTpl]=\"groupLabelTpl\"\n [textToHighlight]=\"textToHighlight\"\n (closed)=\"setExpanded(false)\"\n (selectedValueChanged)=\"onSelectChange($event)\"\n >\n </nggv-dropdown-list>\n </div>\n <!-- ERRORS -->\n <div class=\"gds-form-item__footer error-wrapper\">\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n <!-- CHILDREN -->\n <ng-content></ng-content>\n </div>\n </ng-container>\n\n <ng-template #defaultSelectedContentTpl let-state>\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\n </ng-template>\n</ng-container>\n", styles: [":host{--sg-border-radius: .25rem;--sg-border-width: 1px;--sg-border-color: #868686;--text-primary-color: #333;--sg-form-control-bg: #fff;--grey-000: hsl(0 0% 100%);--grey-100: hsl(0, 0%, 97%);--grey-200: hsl(0, 0%, 91%);--grey-300: hsl(0, 0%, 87%);--grey-400: hsl(0, 0%, 81%);--grey-500: hsl(0, 0%, 68%);--grey-600: hsl(0, 0%, 53%);--grey-700: hsl(0, 0%, 29%);--grey-800: hsl(0, 0%, 20%);--grey-900: hsl(0, 0%, 10%);--grey-1000: hsl(0 0% 0%);display:flex;flex-direction:column;max-width:100%;position:relative;width:100%;z-index:0;position:initial}:host label{display:block;font-weight:500;line-height:1.25rem;width:100%}:host label+.gds-input-wrapper,:host label+.nggv-field--locked{margin-top:.5rem}:host .description{font-size:.875rem;margin-bottom:.5rem;line-height:1.25rem;width:100%}:host:not(:last-child){margin-bottom:1.5rem}:host .gds-form-item__header{display:flex}:host .gds-form-item__header .form-info{font-weight:400}:host .gds-form-item__header button.icon.small{margin-top:-.5rem;margin-right:-.5rem}:host .gds-form-item__labels{flex:1;margin-bottom:.5rem}:host .gds-form-item__labels .form-info{margin-bottom:0}:host .gds-form-item__labels .form-info a:link:not(.button,[aria-disabled]){color:#0062bc}:host .gds-form-item__labels>*{width:100%;display:block}:host .gds-form-item__expandable-info{overflow:hidden;font-size:.875rem;line-height:1.25rem;transition:height .3s cubic-bezier(.23,1,.32,1)}:host .gds-form-item__expandable-info>div{padding-bottom:.5rem}:host .gds-form-item__backdrop{position:absolute;inset:0;background:var(--gds-ref-pallet-base100);border-radius:2px;z-index:-1;margin:-1rem;opacity:0;transition:all .3s cubic-bezier(.23,1,.32,1);border:1px solid transparent}@media (prefers-reduced-motion: reduce){:host .gds-form-item__backdrop{transition:none}}:host:has([aria-expanded=true]) .gds-form-item__backdrop{opacity:1;border-radius:.25rem;border-color:var(--gds-ref-pallet-base600)}:host .gds-form-item__footer:not(:empty){margin-top:.5rem;display:flex;column-gap:.5rem}:host .gds-form-item__footer:not(:empty)>span,:host .gds-form-item__footer:not(:empty)>.form-info{font-weight:500;line-height:1.125}:host:not(:last-child){margin-bottom:unset}:host .gds-field-label--optional{font-weight:400}:host button{background-color:transparent;border:0;cursor:pointer;font-family:inherit;padding:0;padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--grey-600);--sg-border-color: var(--grey-600);background:var(--sg-form-control-bg);color:var(--text-primary-color);min-height:2.75rem;display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;max-width:100%;font-size:1rem;font-weight:400;line-height:1.125;text-align:left;width:100%}:host button:focus{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}@media (max-width: 35.98em){:host button{min-width:100%}}:host button>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host button:after{margin-left:.5rem;margin-right:.5rem;border-bottom:solid 2px var(--text-primary-color);border-left:solid 2px var(--text-primary-color);content:\"\";display:block;height:.5rem;width:.5rem;position:relative;top:-.15rem;transform:translate(75%) rotate3d(0,0,1,-45deg) scaleZ(-1);transition:transform .3s ease-in;flex-shrink:0}:host button[aria-expanded=true]:after{transform:translate(75%,6px) rotate3d(0,0,1,-45deg) scale3d(-1,-1,1)}:host button:hover:after{border-color:currentColor}:host button:disabled{--background: var(--grey-500)}:host button span{width:100%;white-space:nowrap;display:block;text-overflow:ellipsis}:host button.small{font-size:.875rem}:host button:hover{background:#e7e7e7}:host button:active{background:inherit;color:inherit;border-color:inherit}:host button:disabled,:host button.disabled{--text-primary-color: var(--grey-600);background:var(--grey-300);color:var(--grey-600);cursor:not-allowed}:host button.nggv-field--error{border-bottom:2px solid #9f000a}:host .gds-form-item__footer .form-info{font-weight:500;font-size:.875rem}:host .gds-form-item__footer .form-info--error{display:flex;align-items:flex-start;gap:.5em;color:#9f000a}:host .gds-form-item__footer .form-info--error .error-icon{align-items:center}:host .dropdown{width:100%;position:relative}:host .dropdown nggv-dropdown-list{width:100%}\n"] }]
202
+ args: [{ selector: 'nggv-dropdown', template: "<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n <label\n [id]=\"id + '-label'\"\n class=\"gds-field-label hide-if-empty\"\n [attr.for]=\"id + '-toggle'\"\n *ngIf=\"labelContentTpl || label\"\n >\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"gds-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n </label>\n\n <!-- DESCRIPTION -->\n <div class=\"description\" *ngIf=\"description\">{{ description }}</div>\n\n <!-- LOCKED INPUT -->\n <ng-container *ngIf=\"locked\">\n <ng-template\n *ngTemplateOutlet=\"\n lockedTpl || defaultLockedTpl;\n context: { $implicit: state }\n \"\n ></ng-template>\n <ng-template #defaultLockedTpl>\n <div\n [id]=\"id + '-input'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n [attr.aria-labelledby]=\"id + '-label ' + id + '-input'\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- INPUT -->\n <ng-container *ngIf=\"!locked\">\n <div class=\"gds-input-wrapper\">\n <div #input [id]=\"id + '-input'\" class=\"dropdown\">\n <button\n [id]=\"id + '-toggle'\"\n [disabled]=\"disabled\"\n type=\"button\"\n class=\"nggv-field-dropdown__label toggle\"\n [class.nggv-field--error]=\"invalid\"\n role=\"combobox\"\n aria-owns=\"listbox\"\n aria-haspopup=\"listbox\"\n aria-controls=\"listbox\"\n [attr.data-thook]=\"thook + '-toggle'\"\n [attr.aria-expanded]=\"expanded\"\n [attr.aria-labelledby]=\"\n ariaLabel ? null : id + '-label ' + id + '-toggle'\n \"\n [attr.aria-label]=\"ariaLabel || null\"\n (click)=\"toggleDropdown()\"\n >\n <span>\n <ng-template\n *ngTemplateOutlet=\"\n selectedContentTpl || defaultSelectedContentTpl;\n context: { $implicit: state }\n \"\n >\n </ng-template>\n </span>\n </button>\n <nggv-dropdown-list\n #dropDownList\n [options]=\"options\"\n [scrollOffset]=\"scrollOffset\"\n [state]=\"state\"\n [expanded]=\"expanded\"\n [optionContentTpl]=\"optionContentTpl\"\n [groupLabelTpl]=\"groupLabelTpl\"\n [textToHighlight]=\"textToHighlight\"\n (closed)=\"setExpanded(false)\"\n (selectedValueChanged)=\"onSelectChange($event)\"\n >\n </nggv-dropdown-list>\n </div>\n <!-- ERRORS -->\n <div class=\"gds-form-item__footer error-wrapper\">\n <span\n class=\"form-info form-info--error\"\n [attr.for]=\"id + '-input'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span class=\"error-icon\">\n <gds-icon-triangle-exclamation\n width=\"16\"\n height=\"16\"\n [solid]=\"true\"\n *nggCoreElement\n ></gds-icon-triangle-exclamation>\n </span>\n <span\n *ngIf=\"error; else errorsRef\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >{{ error }}</span\n >\n </span>\n <ng-template #errorsRef>\n <span\n *ngIf=\"firstError as error\"\n [attr.data-thook]=\"thook + '-errorlabel'\"\n >\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </div>\n <!-- CHILDREN -->\n <ng-content></ng-content>\n </div>\n </ng-container>\n\n <ng-template #defaultSelectedContentTpl let-state>\n <!-- eslint-disable-next-line @angular-eslint/template/eqeqeq -->\n {{ state?.key != null && state?.label ? t(state.label) : placeholder }}\n </ng-template>\n</ng-container>\n", styles: [":host{--sg-border-radius: .25rem;--sg-border-width: 1px;--sg-border-color: #868686;--text-primary-color: #333;--sg-form-control-bg: #fff;--grey-000: hsl(0 0% 100%);--grey-100: hsl(0, 0%, 97%);--grey-200: hsl(0, 0%, 91%);--grey-300: hsl(0, 0%, 87%);--grey-400: hsl(0, 0%, 81%);--grey-500: hsl(0, 0%, 68%);--grey-600: hsl(0, 0%, 53%);--grey-700: hsl(0, 0%, 29%);--grey-800: hsl(0, 0%, 20%);--grey-900: hsl(0, 0%, 10%);--grey-1000: hsl(0 0% 0%);display:flex;flex-direction:column;max-width:100%;position:relative;width:100%;z-index:0;position:initial}:host label{display:block;font-weight:500;line-height:1.25rem;width:100%}:host label+.gds-input-wrapper,:host label+.nggv-field--locked{margin-top:.5rem}:host .description{font-size:.875rem;margin-bottom:.5rem;line-height:1.25rem;width:100%}:host:not(:last-child){margin-bottom:1.5rem}:host .gds-form-item__header{display:flex}:host .gds-form-item__header .form-info{font-weight:400}:host .gds-form-item__header button.icon.small{margin-top:-.5rem;margin-right:-.5rem}:host .gds-form-item__labels{flex:1;margin-bottom:.5rem}:host .gds-form-item__labels .form-info{margin-bottom:0}:host .gds-form-item__labels .form-info a:link:not(.button,[aria-disabled]){color:#0062bc}:host .gds-form-item__labels>*{width:100%;display:block}:host .gds-form-item__expandable-info{overflow:hidden;font-size:.875rem;line-height:1.25rem;transition:height .3s cubic-bezier(.23,1,.32,1)}:host .gds-form-item__expandable-info>div{padding-bottom:.5rem}:host .gds-form-item__backdrop{position:absolute;inset:0;background:var(--gds-ref-pallet-base100);border-radius:2px;z-index:-1;margin:-1rem;opacity:0;transition:all .3s cubic-bezier(.23,1,.32,1);border:1px solid transparent}@media (prefers-reduced-motion: reduce){:host .gds-form-item__backdrop{transition:none}}:host:has([aria-expanded=true]) .gds-form-item__backdrop{opacity:1;border-radius:.25rem;border-color:var(--gds-ref-pallet-base600)}:host .gds-form-item__footer:not(:empty){margin-top:.5rem;display:flex;column-gap:.5rem}:host .gds-form-item__footer:not(:empty)>span,:host .gds-form-item__footer:not(:empty)>.form-info{font-weight:500;line-height:1.125}:host:not(:last-child){margin-bottom:unset}:host .gds-field-label--optional{font-weight:400}:host button{background-color:transparent;border:0;cursor:pointer;font-family:inherit;padding:0;padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--grey-600);--sg-border-color: var(--grey-600);background:var(--sg-form-control-bg);color:var(--text-primary-color);min-height:2.75rem;display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;max-width:100%;font-size:1rem;font-weight:400;line-height:1.125;text-align:left;width:100%}:host button:focus{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}@media (max-width: 35.98em){:host button{min-width:100%}}:host button>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host button:after{margin-left:.5rem;margin-right:.5rem;border-bottom:solid 2px var(--text-primary-color);border-left:solid 2px var(--text-primary-color);content:\"\";display:block;height:.5rem;width:.5rem;position:relative;top:-.15rem;transform:translate(75%) rotate3d(0,0,1,-45deg) scaleZ(-1);transition:transform .3s ease-in;flex-shrink:0}:host button[aria-expanded=true]:after{transform:translate(75%,6px) rotate3d(0,0,1,-45deg) scale3d(-1,-1,1)}:host button:hover:after{border-color:currentColor}:host button:disabled{--background: var(--grey-500)}:host button span{width:100%;white-space:nowrap;display:block;text-overflow:ellipsis}:host button.small{font-size:.875rem}:host button:hover{background:#e7e7e7}:host button:active{background:inherit;color:inherit;border-color:inherit}:host button:disabled,:host button.disabled{--text-primary-color: var(--grey-600);background:var(--grey-300);color:var(--grey-600);cursor:not-allowed}:host button.nggv-field--error{border-bottom:2px solid #9f000a}:host .gds-form-item__footer .form-info{font-weight:500;font-size:.875rem}:host .gds-form-item__footer .form-info--error{display:flex;align-items:flex-start;gap:.5em;color:#9f000a}:host .gds-form-item__footer .form-info--error .error-icon{align-items:center}:host .dropdown{width:100%;position:relative}:host .dropdown nggv-dropdown-list{width:100%}\n"] }]
203
203
  }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
204
204
  type: Self
205
205
  }, {
@@ -243,4 +243,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
243
243
  type: HostListener,
244
244
  args: ['keyup', ['$event']]
245
245
  }] } });
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxvRUFBb0UsQ0FBQTtBQUUzRSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFFSixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0sb0JBQW9CLENBQUE7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxNQUFNLENBQUE7QUFFOUMsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sbUVBQW1FLENBQUE7QUFDekgsT0FBTyxFQUNMLGFBQWEsR0FJZCxNQUFNLDRDQUE0QyxDQUFBOzs7Ozs7OztBQUVuRDs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHFCQUtYLFNBQVEscUNBQXFDO0lBc0I3Qyx1RkFBdUY7SUFDdkYsSUFBYSxPQUFPLENBQUMsS0FBc0I7UUFDekMsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLG1DQUFtQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYTthQUNyQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQzthQUM1QixJQUFJLENBQUMsQ0FB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LEtBQUs7Z0JBRU8sT0FBTztzQkFBbkIsS0FBSztnQkFrQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFNRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFRRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0ksY0FBYztzQkFBdkIsTUFBTTtnQkEwRVAsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnQHNlYmdyb3VwL2dyZWVuLWNvcmUvY29tcG9uZW50cy9pY29uL2ljb25zL3RyaWFuZ2xlLWV4Y2xhbWF0aW9uLmpzJ1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBUUkFOU0xPQ09fU0NPUEUsIFRyYW5zbG9jb1Njb3BlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJ1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBOZ2d2QmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yQ29tcG9uZW50IH0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9iYXNlLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InXG5pbXBvcnQge1xuICBEcm9wZG93blV0aWxzLFxuICBPcHRpb24sXG4gIE9wdGlvbkJhc2UsXG4gIE9wdGlvbkdyb3VwLFxufSBmcm9tICdAc2ViZ3JvdXAvZ3JlZW4tYW5ndWxhci9zcmMvdi1hbmd1bGFyL2NvcmUnXG5cbi8qKlxuICogQSBkcm9wZG93biBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGFuIG9wdGlvbiBmcm9tIGEgbGlzdC5cbiAqIERyb3Bkb3ducyBlbmFibGVzIHVzZXJzIHRvIG1ha2UgYSBxdWljayBzZWxlY3Rpb24gb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGZvciBhIHNwZWNpZmljIGVudHJ5LlxuICogaHR0cHM6Ly9kZXNpZ25saWJyYXJ5LnNlYmdyb3VwLmNvbS9jb21wb25lbnRzL2NvbXBvbmVudC1kcm9wZG93blxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2d2LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdndkRyb3Bkb3duQ29tcG9uZW50PFxuICAgIEsgPSBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIFYgPSBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIFQgZXh0ZW5kcyBPcHRpb248SywgVj4gPSBPcHRpb248SywgVj4sXG4gID5cbiAgZXh0ZW5kcyBOZ2d2QmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgLyoqIEN1c3RvbSB0ZW1wbGF0ZSBmb3IgZGlzcGxheWluZyBvcHRpb25zIGFuZCBncm91cHMuICovXG4gIEBDb250ZW50Q2hpbGQoJ3NlbGVjdGVkVHBsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBzZWxlY3RlZENvbnRlbnRUcGw6XG4gICAgfCBUZW1wbGF0ZVJlZjxPcHRpb25CYXNlPFQ+PlxuICAgIHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ29wdGlvblRwbCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgb3B0aW9uQ29udGVudFRwbDpcbiAgICB8IFRlbXBsYXRlUmVmPE9wdGlvbkJhc2U8YW55Pj5cbiAgICB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdncm91cExhYmVsVHBsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBncm91cExhYmVsVHBsOlxuICAgIHwgVGVtcGxhdGVSZWY8T3B0aW9uQmFzZTxhbnk+PlxuICAgIHwgdW5kZWZpbmVkXG5cbiAgLyoqIFNwZWNpYWwgcHJvcGVydHkgdXNlZCBmb3Igc2VsZWN0aW5nIERPTSBlbGVtZW50cyBkdXJpbmcgYXV0b21hdGVkIFVJIHRlc3RpbmcuICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXRob29rJykgQElucHV0KCkgdGhvb2s6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPVxuICAgICdkcm9wZG93bidcblxuICAvKiogVGV4dCBzaG93biBiZWZvcmUgYW4gb3B0aW9uIGlzIHNlbGVjdGVkLiAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICAvKiogU3BlY2lmaWMgdmFsdWUgZm9yIGFyaWEtbGFiZWwuIElmIG5vdCBwcm92aWRlZCwgbGFiZWwvbGFiZWxUcGwgd2lsbCBiZSB1c2VkLiAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWw/OiBzdHJpbmdcbiAgLyoqIExpc3Qgb2Yge0BsaW5rIE9wdGlvbn0gYW5kIHtAbGluayBPcHRpb25Hcm91cH0gbGlzdGVkIHdoZW4gZHJvcGRvd24gaXMgZXhwYW5kZWQuICovXG4gIEBJbnB1dCgpIHNldCBvcHRpb25zKHZhbHVlOiBPcHRpb25CYXNlPFQ+W10pIHtcbiAgICAvLyB1cGRhdGUgb3B0aW9uc1xuICAgIHRoaXMuX29wdGlvbnMgPSB2YWx1ZVxuICAgIC8vIGFscmVhZHkgaGFzIGEgbnVsbC91bmRlZmluZWQga2V5XG4gICAgY29uc3QgbnVsbGlzaE9wdGlvbiA9IHRoaXMuZHJvcGRvd25VdGlsc1xuICAgICAgLmZsYXR0ZW5PcHRpb25zKHZhbHVlLCBmYWxzZSlcbiAgICAgIC5maW5kKChvcHRpb24pID0+IG9wdGlvbi5rZXkgPT0gbnVsbClcbiAgICAvLyBpZiB0aGUgZHJvcGRvd24gaXMgb3B0aW9uYWwsIGFkZCBhIG51bGwgdmFsdWUgdG8gZGVzZWxlY3Qgb3B0aW9uXG4gICAgaWYgKCF0aGlzLnJlcXVpcmVkICYmICFudWxsaXNoT3B0aW9uICYmIHRoaXMuYWxsb3dDb250cm9sTnVsbGlzaE9wdGlvbikge1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IFt0aGlzLmRlZmF1bHROdWxsaXNoT3B0aW9uXS5jb25jYXQodGhpcy5fb3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBzZXQgZGVmYXVsdCB2YWx1ZSBhbmQgZW1pdCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBvcHRpb25cbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxICYmIHRoaXMucmVxdWlyZWQgJiYgdGhpcy5zZWxlY3RPblNpbmdsZU9wdGlvbikge1xuICAgICAgY29uc3Qgb25seU9wdGlvbiA9IHRoaXMuZHJvcGRvd25VdGlscy5mbGF0dGVuT3B0aW9ucyh2YWx1ZSwgZmFsc2UpWzBdXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKG9ubHlPcHRpb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBkb24ndCB1cGRhdGUgbG9jYWwgc3RhdGUgaWYgd2Ugc2hvdWxkbid0IGNvbnRyb2wgbnVsbGlzaCB2YWx1ZSBhbmQgd2UgY2FudCBmaW5kIHRoZSBzZWxlY3RlZCB2YWx1ZSBhbW9uZ3N0IHRoZSBvcHRpb25zXG4gICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPSB0aGlzLmRyb3Bkb3duVXRpbHNcbiAgICAgIC5mbGF0dGVuT3B0aW9ucyh2YWx1ZSwgZmFsc2UpXG4gICAgICAuZmluZCgob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09IHRoaXMubmdDb250cm9sPy52YWx1ZSlcbiAgICBpZiAoIXRoaXMuYWxsb3dDb250cm9sTnVsbGlzaE9wdGlvbiAmJiAhbWF0Y2hpbmdPcHRpb24pIHJldHVyblxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHN0YXRlXG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMubmdDb250cm9sPy52YWx1ZSlcbiAgfVxuXG4gIGdldCBvcHRpb25zKCk6IE9wdGlvbkJhc2U8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnNcbiAgfVxuXG4gIC8qKiBUaGUgYWRkaXRpb25hbCBhbW91bnQgdG8gc2hvdyB3aGVuIG9wdGlvbiBpcyBzY3JvbGxlZCBpbnRvIHZpZXcuICovXG4gIEBJbnB1dCgpIHNjcm9sbE9mZnNldCA9IDI0XG5cbiAgLyoqXG4gICAqIEFsbG93IHRoaXMgY29tcG9uZW50IHRvIGFkZC8gcmVtb3ZlIG51bGxpc2ggb3B0aW9ucyBiYXNlZCBvbiB3ZXRoZXIgdGhlIGNvbnRyb2wgaXMgcmVxdWlyZWQgb3Igbm90XG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd0NvbnRyb2xOdWxsaXNoT3B0aW9uID0gdHJ1ZVxuXG4gIC8qKiBUZXh0IHRvIGhpZ2hsaWdodCBpbiBvcHRpb24gKi9cbiAgQElucHV0KCkgdGV4dFRvSGlnaGxpZ2h0Pzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIElmIG9ubHkgb25lIG9wdGlvbiBleGlzdHMgaW4gb3B0aW9uc1tdLCBkZWZhdWx0IGlzIHRvIHNlbGVjdCBpdC5cbiAgICogVGhpcyBpbnB1dCBjYW4gYmUgdXNlZCB0byBhbHRlciB0aGF0IGJlaGF2aW91ciBzbyBpdCBkb2Vzbid0IGF1dG9tYXRpY2FsbHlcbiAgICogc2VsZWN0IGEgdmFsdWUgaWYgaXQncyB0aGUgb25seSBvbmUuXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RPblNpbmdsZU9wdGlvbiA9IHRydWVcblxuICAvKipcbiAgICogRW1pdHMgY2hhbmdlcyBvZiB0aGUgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIGRyb3Bkb3duXG4gICAqL1xuICBAT3V0cHV0KCkgZXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KClcblxuICAvKiogQGludGVybmFsIG51bGxpc2ggb3B0aW9uLiAqL1xuICBnZXQgZGVmYXVsdE51bGxpc2hPcHRpb24oKTogT3B0aW9uQmFzZTxhbnk+IHtcbiAgICByZXR1cm4geyBrZXk6IG51bGwsIGxhYmVsOiB0aGlzLnBsYWNlaG9sZGVyID8/ICdcXHUwMEEwJyB9XG4gIH1cblxuICAvKiogVGhlIGN1cnJlbnQgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIGRyb3Bkb3duIG9wdGlvbnMuICovXG4gIHB1YmxpYyBleHBhbmRlZCA9IGZhbHNlXG4gIC8qKiBUaGUgY3VycmVudCBvcHRpb24gc2VsZWN0ZWQgYmFzZWQgb24gbnVtZXJpYyBpbmRleC4gKi9cbiAgcHVibGljIGFjdGl2ZUluZGV4ID0gLTFcbiAgLyoqIFN1YnNjcmliZSBpZiBkcm9wZG93biBleHBhbmRlZCB0byBsaXN0ZW4gdG8gY2xpY2sgb3V0c2lkZSB0byBjbG9zZSBkcm9wZG93bi4gKi9cbiAgcHJpdmF0ZSBvbkNsaWNrU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcblxuICBwdWJsaWMga2V5RXZlbnQ6IEtleWJvYXJkRXZlbnQgPSB7fSBhcyBLZXlib2FyZEV2ZW50XG4gIHByaXZhdGUgX29wdGlvbnM6IE9wdGlvbkJhc2U8VD5bXSA9IFtdXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFRSQU5TTE9DT19TQ09QRSlcbiAgICBwcm90ZWN0ZWQgdHJhbnNsb2NvU2NvcGU6IFRyYW5zbG9jb1Njb3BlLFxuICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBkcm9wZG93blV0aWxzOiBEcm9wZG93blV0aWxzPEssIFYsIFQ+LFxuICApIHtcbiAgICBzdXBlcihuZ0NvbnRyb2wsIHRyYW5zbG9jb1Njb3BlLCBjZHIpXG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMucmVxdWlyZWQ/LmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpc1JlcXVpcmVkID0gY2hhbmdlcy5yZXF1aXJlZC5jdXJyZW50VmFsdWVcbiAgICAgIC8vIHJlbW92ZSBudWxsaXNoIG9wdGlvblxuICAgICAgY29uc3QgaGFzTnVsbGlzaE9wdGlvbiA9XG4gICAgICAgIHRoaXMuZHJvcGRvd25VdGlscy5mbGF0dGVuT3B0aW9ucyh0aGlzLl9vcHRpb25zLCBmYWxzZSlbMF0/LmtleSA9PSBudWxsXG4gICAgICAvLyBpZiByZXF1aXJlZCwgcmVtb3ZlIG51bGxpc2ggb3B0aW9uXG4gICAgICBpZiAoaXNSZXF1aXJlZCAmJiBoYXNOdWxsaXNoT3B0aW9uICYmIHRoaXMuYWxsb3dDb250cm9sTnVsbGlzaE9wdGlvbikge1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5fb3B0aW9ucy5zbGljZSgxKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIGlmIG5vdCByZXF1aXJlZCwgYWRkIG51bGxpc2ggb3B0aW9uXG4gICAgICBpZiAoIWlzUmVxdWlyZWQgJiYgIWhhc051bGxpc2hPcHRpb24gJiYgdGhpcy5hbGxvd0NvbnRyb2xOdWxsaXNoT3B0aW9uKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBbdGhpcy5kZWZhdWx0TnVsbGlzaE9wdGlvbl0uY29uY2F0KHRoaXMuX29wdGlvbnMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25DbGlja1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCBvdmVycmlkZSB0byBjb3JyZWN0bHkgc2V0IHN0YXRlIGZyb20gZm9ybSB2YWx1ZSAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kcm9wZG93blV0aWxzLmZsYXR0ZW5PcHRpb25zKHRoaXMuX29wdGlvbnMsIGZhbHNlKVxuICAgIHRoaXMuc3RhdGUgPSBvcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gdmFsdWUpXG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEVWRU5UU1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBvblNlbGVjdENoYW5nZShvcHRpb246IFQpIHtcbiAgICBpZiAob3B0aW9uLmRpc2FibGVkKSByZXR1cm5cbiAgICB0aGlzLnVwZGF0ZU1vZGVsKG9wdGlvbilcbiAgICB0aGlzLnNldEV4cGFuZGVkKGZhbHNlKVxuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIEBpbnRlcm5hbFxuICAvLyAgKiBFbnRlciB0b2dnbGVzIHRoZSBkcm9wZG93biwgaG9tZSwgZW5kLCBhbmQsIGFycm93cyBjaGFuZ2UgdGhlIGluZGV4LlxuICAvLyAgKiBAcGFyYW0gZXZlbnQgZmlyZWQgY29udGFpbmluZyB3aGljaCBrZXkgd2FzIHJlbGVhc2VkLlxuICAvLyAgKi9cbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5rZXlFdmVudCA9IGV2ZW50XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBkcm9wZG93biBvbiBjbGljayBvdXRzaWRlLlxuICAgKi9cbiAgc3Vic2NyaWJlVG9PdXRzaWRlQ2xpY2tFdmVudCgpIHtcbiAgICB0aGlzLm9uQ2xpY2tTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmV4cGFuZGVkICYmXG4gICAgICAgICAgIXRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZURyb3Bkb3duKClcbiAgICAgICAgICB0aGlzLm9uQ2xpY2tTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIRUxQRVJTXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogU2V0IHRoZSBkcm9wZG93biB2YWx1ZSB0byBnaXZlbiBvcHRpb24uXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgZHJvcGRvd24gb3B0aW9uIHRvIHNlbGVjdC5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTW9kZWwodmFsdWU6IFQpIHtcbiAgICB0aGlzLnN0YXRlID0gdmFsdWVcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlLmtleSlcbiAgfVxuXG4gIC8qKiBUb2dnbGUgdGhlIGV4cGFuZGVkIHN0YXRlIG9mIHRoZSBkcm9wZG93biBvcHRpb25zLiAqL1xuICB0b2dnbGVEcm9wZG93bigpIHtcbiAgICB0aGlzLnNldEV4cGFuZGVkKCF0aGlzLmV4cGFuZGVkKVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIGRyb3Bkb3duIG9wdGlvbnMuIElmIHRydWUgdGhlIG9wdGlvbnMgYXJlIHNob3duIGJlbG93IHRoZSBmaWVsZC5cbiAgICogQWN0aXZhdGUgb24gY2xpY2sgZXZlbnQgdG8gYmUgYWJsZSB0byBjbG9zZSBkcm9wZG93biBvbiBjbGljayBvdXRzaWRlLlxuICAgKiBAcGFyYW0gc3RhdGUgdGhlIGV4cGFuZGVkIHN0YXRlIHdoaWNoIHRvIHNldC5cbiAgICovXG4gIHNldEV4cGFuZGVkKHN0YXRlID0gdHJ1ZSkge1xuICAgIHRoaXMuZXhwYW5kZWQgPSBzdGF0ZVxuICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKVxuICAgIGlmICh0aGlzLmV4cGFuZGVkKSB0aGlzLnN1YnNjcmliZVRvT3V0c2lkZUNsaWNrRXZlbnQoKVxuICAgIGlmICghdGhpcy5leHBhbmRlZCkgdGhpcy5vblRvdWNoZWQoKVxuICB9XG5cbiAgLyogVFlQRSBDQVNUUyAqL1xuXG4gIC8qKlxuICAgKiBUeXBlY2FzdCBhbnl0aGluZyB0byBhbiB7QGxpbmsgT3B0aW9ufS5cbiAgICogQHBhcmFtIG9wdGlvbiB0aGUgb2JqZWN0IHRvIHR5cGVjYXN0LlxuICAgKi9cbiAgY2FzdE9wdGlvbihvcHRpb246IGFueSk6IFQge1xuICAgIHJldHVybiBvcHRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlY2FzdCBhbnl0aGluZyB0byBhbiB7QGxpbmsgT3B0aW9uR3JvdXB9LlxuICAgKiBAcGFyYW0gZ3JvdXAgdGhlIG9iamVjdCB0byB0eXBlY2FzdC5cbiAgICovXG4gIGNhc3RHcm91cChncm91cDogYW55KTogT3B0aW9uR3JvdXA8VD4ge1xuICAgIHJldHVybiBncm91cFxuICB9XG5cbiAgLyogVFlQRSBDSEVDS1MgKi9cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGFyZ3VtZW50IGlzIGFuIHtAbGluayBPcHRpb259LlxuICAgKiBAcGFyYW0gb3B0aW9uIHRoZSBvYmplY3QgdG8gY2hlY2suXG4gICAqL1xuICBpc09wdGlvbihvcHRpb246IE9wdGlvbkJhc2U8VD4pOiBvcHRpb24gaXMgT3B0aW9uR3JvdXA8VD4ge1xuICAgIHJldHVybiAhKCdvcHRpb25zJyBpbiBvcHRpb24pXG4gIH1cbn1cbiIsIjwhLS0gTEFCRUwgLS0+XG48bmctY29udGFpbmVyICp0cmFuc2xvY289XCJsZXQgdDsgcmVhZDogc2NvcGVcIj5cbiAgPGxhYmVsXG4gICAgW2lkXT1cImlkICsgJy1sYWJlbCdcIlxuICAgIGNsYXNzPVwiZ2RzLWZpZWxkLWxhYmVsIGhpZGUtaWYtZW1wdHlcIlxuICAgIFthdHRyLmZvcl09XCJpZCArICctdG9nZ2xlJ1wiXG4gICAgKm5nSWY9XCJsYWJlbENvbnRlbnRUcGwgfHwgbGFiZWxcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsQ29udGVudFRwbCB8fCBiYXNpY0xhYmVsQ29udGVudFRwbFwiXG4gICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNiYXNpY0xhYmVsQ29udGVudFRwbD5cbiAgICAgIDwhLS0gdG8gdHJpZ2dlciBjc3M6ZW1wdHkgaWYgbm8gbGFiZWwgd2FzIGFkZGVkIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhYmVsXCI+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25hbCA9PT0gdHJ1ZSB8fCAocmVxdWlyZWQgIT09IHRydWUgJiYgb3B0aW9uYWwgIT09IGZhbHNlKVwiXG4gICAgICAgICAgY2xhc3M9XCJnZHMtZmllbGQtbGFiZWwtLW9wdGlvbmFsXCJcbiAgICAgICAgPlxuICAgICAgICAgICh7eyB0KCdsYWJlbC5vcHRpb25hbCcpIH19KVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2xhYmVsPlxuXG4gIDwhLS0gREVTQ1JJUFRJT04gLS0+XG4gIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiICpuZ0lmPVwiZGVzY3JpcHRpb25cIj57eyBkZXNjcmlwdGlvbiB9fTwvZGl2PlxuXG4gIDwhLS0gTE9DS0VEIElOUFVUIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9ja2VkXCI+XG4gICAgPGRpdlxuICAgICAgW2lkXT1cImlkICsgJy1pbnB1dCdcIlxuICAgICAgY2xhc3M9XCJuZ2d2LWZpZWxkLS1sb2NrZWRcIlxuICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgIFthdHRyLnZhbHVlXT1cInN0YXRlXCJcbiAgICAgIFthdHRyLnJvbGVdPVwicm9sZVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaWQgKyAnLWxhYmVsICcgKyBpZCArICctaW5wdXQnXCJcbiAgICA+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFzdGF0ZVwiIGNsYXNzPVwidW5zZXQtc3RhdGVcIj4tPC9zcGFuPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBzZWxlY3RlZENvbnRlbnRUcGwgfHwgZGVmYXVsdFNlbGVjdGVkQ29udGVudFRwbDtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzdGF0ZSB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gSU5QVVQgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9ja2VkXCI+XG4gICAgPGRpdiBjbGFzcz1cImdkcy1pbnB1dC13cmFwcGVyXCI+XG4gICAgICA8ZGl2ICNpbnB1dCBbaWRdPVwiaWQgKyAnLWlucHV0J1wiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtpZF09XCJpZCArICctdG9nZ2xlJ1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cIm5nZ3YtZmllbGQtZHJvcGRvd25fX2xhYmVsIHRvZ2dsZVwiXG4gICAgICAgICAgW2NsYXNzLm5nZ3YtZmllbGQtLWVycm9yXT1cImludmFsaWRcIlxuICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgYXJpYS1vd25zPVwibGlzdGJveFwiXG4gICAgICAgICAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJsaXN0Ym94XCJcbiAgICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cInRob29rICsgJy10b2dnbGUnXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiXG4gICAgICAgICAgICBhcmlhTGFiZWwgPyBudWxsIDogaWQgKyAnLWxhYmVsICcgKyBpZCArICctdG9nZ2xlJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgfHwgbnVsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENvbnRlbnRUcGwgfHwgZGVmYXVsdFNlbGVjdGVkQ29udGVudFRwbDtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogc3RhdGUgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bmdndi1kcm9wZG93bi1saXN0XG4gICAgICAgICAgI2Ryb3BEb3duTGlzdFxuICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnNcIlxuICAgICAgICAgIFtzY3JvbGxPZmZzZXRdPVwic2Nyb2xsT2Zmc2V0XCJcbiAgICAgICAgICBbc3RhdGVdPVwic3RhdGVcIlxuICAgICAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZFwiXG4gICAgICAgICAgW29wdGlvbkNvbnRlbnRUcGxdPVwib3B0aW9uQ29udGVudFRwbFwiXG4gICAgICAgICAgW2dyb3VwTGFiZWxUcGxdPVwiZ3JvdXBMYWJlbFRwbFwiXG4gICAgICAgICAgW3RleHRUb0hpZ2hsaWdodF09XCJ0ZXh0VG9IaWdobGlnaHRcIlxuICAgICAgICAgIChjbG9zZWQpPVwic2V0RXhwYW5kZWQoZmFsc2UpXCJcbiAgICAgICAgICAoc2VsZWN0ZWRWYWx1ZUNoYW5nZWQpPVwib25TZWxlY3RDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZ2d2LWRyb3Bkb3duLWxpc3Q+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gRVJST1JTIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImdkcy1mb3JtLWl0ZW1fX2Zvb3RlciBlcnJvci13cmFwcGVyXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWluZm8gZm9ybS1pbmZvLS1lcnJvclwiXG4gICAgICAgICAgW2F0dHIuZm9yXT1cImlkICsgJy1pbnB1dCdcIlxuICAgICAgICAgICpuZ0lmPVwiaW52YWxpZCAmJiAoZXJyb3IgfHwgbmdDb250cm9sPy5pbnZhbGlkKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImVycm9yLWljb25cIj5cbiAgICAgICAgICAgIDxnZHMtaWNvbi10cmlhbmdsZS1leGNsYW1hdGlvblxuICAgICAgICAgICAgICB3aWR0aD1cIjE2XCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICBbc29saWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICpuZ2dDb3JlRWxlbWVudFxuICAgICAgICAgICAgPjwvZ2RzLWljb24tdHJpYW5nbGUtZXhjbGFtYXRpb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImVycm9yOyBlbHNlIGVycm9yc1JlZlwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cInRob29rICsgJy1lcnJvcmxhYmVsJ1wiXG4gICAgICAgICAgICA+e3sgZXJyb3IgfX08L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNlcnJvcnNSZWY+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiZmlyc3RFcnJvciBhcyBlcnJvclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cInRob29rICsgJy1lcnJvcmxhYmVsJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdCgnZXJyb3IuZmllbGQnICsgZXJyb3I/LmNvZGUsIGVycm9yPy5wYXJhbXMpIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIENISUxEUkVOIC0tPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RlZENvbnRlbnRUcGwgbGV0LXN0YXRlPlxuICAgIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9lcWVxZXEgLS0+XG4gICAge3sgc3RhdGU/LmtleSAhPSBudWxsICYmIHN0YXRlPy5sYWJlbCA/IHQoc3RhdGUubGFiZWwpIDogcGxhY2Vob2xkZXIgfX1cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctY29udGFpbmVyPlxuIl19
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxvRUFBb0UsQ0FBQTtBQUUzRSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFFSixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0sb0JBQW9CLENBQUE7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxNQUFNLENBQUE7QUFFOUMsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sbUVBQW1FLENBQUE7QUFDekgsT0FBTyxFQUNMLGFBQWEsR0FJZCxNQUFNLDRDQUE0QyxDQUFBOzs7Ozs7OztBQUVuRDs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLHFCQUtYLFNBQVEscUNBQXFDO0lBc0I3Qyx1RkFBdUY7SUFDdkYsSUFBYSxPQUFPLENBQUMsS0FBc0I7UUFDekMsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLG1DQUFtQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYTthQUNyQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQzthQUM1QixJQUFJLENBQUMsQ0FB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LEtBQUs7Z0JBRU8sT0FBTztzQkFBbkIsS0FBSztnQkFrQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFNRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBR0csZUFBZTtzQkFBdkIsS0FBSztnQkFRRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0ksY0FBYztzQkFBdkIsTUFBTTtnQkEwRVAsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnQHNlYmdyb3VwL2dyZWVuLWNvcmUvY29tcG9uZW50cy9pY29uL2ljb25zL3RyaWFuZ2xlLWV4Y2xhbWF0aW9uLmpzJ1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBUUkFOU0xPQ09fU0NPUEUsIFRyYW5zbG9jb1Njb3BlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJ1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBOZ2d2QmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yQ29tcG9uZW50IH0gZnJvbSAnQHNlYmdyb3VwL2dyZWVuLWFuZ3VsYXIvc3JjL3YtYW5ndWxhci9iYXNlLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InXG5pbXBvcnQge1xuICBEcm9wZG93blV0aWxzLFxuICBPcHRpb24sXG4gIE9wdGlvbkJhc2UsXG4gIE9wdGlvbkdyb3VwLFxufSBmcm9tICdAc2ViZ3JvdXAvZ3JlZW4tYW5ndWxhci9zcmMvdi1hbmd1bGFyL2NvcmUnXG5cbi8qKlxuICogQSBkcm9wZG93biBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGFuIG9wdGlvbiBmcm9tIGEgbGlzdC5cbiAqIERyb3Bkb3ducyBlbmFibGVzIHVzZXJzIHRvIG1ha2UgYSBxdWljayBzZWxlY3Rpb24gb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGZvciBhIHNwZWNpZmljIGVudHJ5LlxuICogaHR0cHM6Ly9kZXNpZ25saWJyYXJ5LnNlYmdyb3VwLmNvbS9jb21wb25lbnRzL2NvbXBvbmVudC1kcm9wZG93blxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2d2LWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdndkRyb3Bkb3duQ29tcG9uZW50PFxuICAgIEsgPSBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIFYgPSBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIFQgZXh0ZW5kcyBPcHRpb248SywgVj4gPSBPcHRpb248SywgVj4sXG4gID5cbiAgZXh0ZW5kcyBOZ2d2QmFzZUNvbnRyb2xWYWx1ZUFjY2Vzc29yQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgLyoqIEN1c3RvbSB0ZW1wbGF0ZSBmb3IgZGlzcGxheWluZyBvcHRpb25zIGFuZCBncm91cHMuICovXG4gIEBDb250ZW50Q2hpbGQoJ3NlbGVjdGVkVHBsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBzZWxlY3RlZENvbnRlbnRUcGw6XG4gICAgfCBUZW1wbGF0ZVJlZjxPcHRpb25CYXNlPFQ+PlxuICAgIHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ29wdGlvblRwbCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgb3B0aW9uQ29udGVudFRwbDpcbiAgICB8IFRlbXBsYXRlUmVmPE9wdGlvbkJhc2U8YW55Pj5cbiAgICB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdncm91cExhYmVsVHBsJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBncm91cExhYmVsVHBsOlxuICAgIHwgVGVtcGxhdGVSZWY8T3B0aW9uQmFzZTxhbnk+PlxuICAgIHwgdW5kZWZpbmVkXG5cbiAgLyoqIFNwZWNpYWwgcHJvcGVydHkgdXNlZCBmb3Igc2VsZWN0aW5nIERPTSBlbGVtZW50cyBkdXJpbmcgYXV0b21hdGVkIFVJIHRlc3RpbmcuICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXRob29rJykgQElucHV0KCkgdGhvb2s6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPVxuICAgICdkcm9wZG93bidcblxuICAvKiogVGV4dCBzaG93biBiZWZvcmUgYW4gb3B0aW9uIGlzIHNlbGVjdGVkLiAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICAvKiogU3BlY2lmaWMgdmFsdWUgZm9yIGFyaWEtbGFiZWwuIElmIG5vdCBwcm92aWRlZCwgbGFiZWwvbGFiZWxUcGwgd2lsbCBiZSB1c2VkLiAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWw/OiBzdHJpbmdcbiAgLyoqIExpc3Qgb2Yge0BsaW5rIE9wdGlvbn0gYW5kIHtAbGluayBPcHRpb25Hcm91cH0gbGlzdGVkIHdoZW4gZHJvcGRvd24gaXMgZXhwYW5kZWQuICovXG4gIEBJbnB1dCgpIHNldCBvcHRpb25zKHZhbHVlOiBPcHRpb25CYXNlPFQ+W10pIHtcbiAgICAvLyB1cGRhdGUgb3B0aW9uc1xuICAgIHRoaXMuX29wdGlvbnMgPSB2YWx1ZVxuICAgIC8vIGFscmVhZHkgaGFzIGEgbnVsbC91bmRlZmluZWQga2V5XG4gICAgY29uc3QgbnVsbGlzaE9wdGlvbiA9IHRoaXMuZHJvcGRvd25VdGlsc1xuICAgICAgLmZsYXR0ZW5PcHRpb25zKHZhbHVlLCBmYWxzZSlcbiAgICAgIC5maW5kKChvcHRpb24pID0+IG9wdGlvbi5rZXkgPT0gbnVsbClcbiAgICAvLyBpZiB0aGUgZHJvcGRvd24gaXMgb3B0aW9uYWwsIGFkZCBhIG51bGwgdmFsdWUgdG8gZGVzZWxlY3Qgb3B0aW9uXG4gICAgaWYgKCF0aGlzLnJlcXVpcmVkICYmICFudWxsaXNoT3B0aW9uICYmIHRoaXMuYWxsb3dDb250cm9sTnVsbGlzaE9wdGlvbikge1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IFt0aGlzLmRlZmF1bHROdWxsaXNoT3B0aW9uXS5jb25jYXQodGhpcy5fb3B0aW9ucylcbiAgICB9XG5cbiAgICAvLyBzZXQgZGVmYXVsdCB2YWx1ZSBhbmQgZW1pdCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBvcHRpb25cbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxICYmIHRoaXMucmVxdWlyZWQgJiYgdGhpcy5zZWxlY3RPblNpbmdsZU9wdGlvbikge1xuICAgICAgY29uc3Qgb25seU9wdGlvbiA9IHRoaXMuZHJvcGRvd25VdGlscy5mbGF0dGVuT3B0aW9ucyh2YWx1ZSwgZmFsc2UpWzBdXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKG9ubHlPcHRpb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBkb24ndCB1cGRhdGUgbG9jYWwgc3RhdGUgaWYgd2Ugc2hvdWxkbid0IGNvbnRyb2wgbnVsbGlzaCB2YWx1ZSBhbmQgd2UgY2FudCBmaW5kIHRoZSBzZWxlY3RlZCB2YWx1ZSBhbW9uZ3N0IHRoZSBvcHRpb25zXG4gICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPSB0aGlzLmRyb3Bkb3duVXRpbHNcbiAgICAgIC5mbGF0dGVuT3B0aW9ucyh2YWx1ZSwgZmFsc2UpXG4gICAgICAuZmluZCgob3B0aW9uKSA9PiBvcHRpb24ua2V5ID09IHRoaXMubmdDb250cm9sPy52YWx1ZSlcbiAgICBpZiAoIXRoaXMuYWxsb3dDb250cm9sTnVsbGlzaE9wdGlvbiAmJiAhbWF0Y2hpbmdPcHRpb24pIHJldHVyblxuXG4gICAgLy8gVXBkYXRlIGxvY2FsIHN0YXRlXG4gICAgdGhpcy53cml0ZVZhbHVlKHRoaXMubmdDb250cm9sPy52YWx1ZSlcbiAgfVxuXG4gIGdldCBvcHRpb25zKCk6IE9wdGlvbkJhc2U8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnNcbiAgfVxuXG4gIC8qKiBUaGUgYWRkaXRpb25hbCBhbW91bnQgdG8gc2hvdyB3aGVuIG9wdGlvbiBpcyBzY3JvbGxlZCBpbnRvIHZpZXcuICovXG4gIEBJbnB1dCgpIHNjcm9sbE9mZnNldCA9IDI0XG5cbiAgLyoqXG4gICAqIEFsbG93IHRoaXMgY29tcG9uZW50IHRvIGFkZC8gcmVtb3ZlIG51bGxpc2ggb3B0aW9ucyBiYXNlZCBvbiB3ZXRoZXIgdGhlIGNvbnRyb2wgaXMgcmVxdWlyZWQgb3Igbm90XG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd0NvbnRyb2xOdWxsaXNoT3B0aW9uID0gdHJ1ZVxuXG4gIC8qKiBUZXh0IHRvIGhpZ2hsaWdodCBpbiBvcHRpb24gKi9cbiAgQElucHV0KCkgdGV4dFRvSGlnaGxpZ2h0Pzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIElmIG9ubHkgb25lIG9wdGlvbiBleGlzdHMgaW4gb3B0aW9uc1tdLCBkZWZhdWx0IGlzIHRvIHNlbGVjdCBpdC5cbiAgICogVGhpcyBpbnB1dCBjYW4gYmUgdXNlZCB0byBhbHRlciB0aGF0IGJlaGF2aW91ciBzbyBpdCBkb2Vzbid0IGF1dG9tYXRpY2FsbHlcbiAgICogc2VsZWN0IGEgdmFsdWUgaWYgaXQncyB0aGUgb25seSBvbmUuXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RPblNpbmdsZU9wdGlvbiA9IHRydWVcblxuICAvKipcbiAgICogRW1pdHMgY2hhbmdlcyBvZiB0aGUgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIGRyb3Bkb3duXG4gICAqL1xuICBAT3V0cHV0KCkgZXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KClcblxuICAvKiogQGludGVybmFsIG51bGxpc2ggb3B0aW9uLiAqL1xuICBnZXQgZGVmYXVsdE51bGxpc2hPcHRpb24oKTogT3B0aW9uQmFzZTxhbnk+IHtcbiAgICByZXR1cm4geyBrZXk6IG51bGwsIGxhYmVsOiB0aGlzLnBsYWNlaG9sZGVyID8/ICdcXHUwMEEwJyB9XG4gIH1cblxuICAvKiogVGhlIGN1cnJlbnQgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIGRyb3Bkb3duIG9wdGlvbnMuICovXG4gIHB1YmxpYyBleHBhbmRlZCA9IGZhbHNlXG4gIC8qKiBUaGUgY3VycmVudCBvcHRpb24gc2VsZWN0ZWQgYmFzZWQgb24gbnVtZXJpYyBpbmRleC4gKi9cbiAgcHVibGljIGFjdGl2ZUluZGV4ID0gLTFcbiAgLyoqIFN1YnNjcmliZSBpZiBkcm9wZG93biBleHBhbmRlZCB0byBsaXN0ZW4gdG8gY2xpY2sgb3V0c2lkZSB0byBjbG9zZSBkcm9wZG93bi4gKi9cbiAgcHJpdmF0ZSBvbkNsaWNrU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcblxuICBwdWJsaWMga2V5RXZlbnQ6IEtleWJvYXJkRXZlbnQgPSB7fSBhcyBLZXlib2FyZEV2ZW50XG4gIHByaXZhdGUgX29wdGlvbnM6IE9wdGlvbkJhc2U8VD5bXSA9IFtdXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFRSQU5TTE9DT19TQ09QRSlcbiAgICBwcm90ZWN0ZWQgdHJhbnNsb2NvU2NvcGU6IFRyYW5zbG9jb1Njb3BlLFxuICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBkcm9wZG93blV0aWxzOiBEcm9wZG93blV0aWxzPEssIFYsIFQ+LFxuICApIHtcbiAgICBzdXBlcihuZ0NvbnRyb2wsIHRyYW5zbG9jb1Njb3BlLCBjZHIpXG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMucmVxdWlyZWQ/LmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBpc1JlcXVpcmVkID0gY2hhbmdlcy5yZXF1aXJlZC5jdXJyZW50VmFsdWVcbiAgICAgIC8vIHJlbW92ZSBudWxsaXNoIG9wdGlvblxuICAgICAgY29uc3QgaGFzTnVsbGlzaE9wdGlvbiA9XG4gICAgICAgIHRoaXMuZHJvcGRvd25VdGlscy5mbGF0dGVuT3B0aW9ucyh0aGlzLl9vcHRpb25zLCBmYWxzZSlbMF0/LmtleSA9PSBudWxsXG4gICAgICAvLyBpZiByZXF1aXJlZCwgcmVtb3ZlIG51bGxpc2ggb3B0aW9uXG4gICAgICBpZiAoaXNSZXF1aXJlZCAmJiBoYXNOdWxsaXNoT3B0aW9uICYmIHRoaXMuYWxsb3dDb250cm9sTnVsbGlzaE9wdGlvbikge1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5fb3B0aW9ucy5zbGljZSgxKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIGlmIG5vdCByZXF1aXJlZCwgYWRkIG51bGxpc2ggb3B0aW9uXG4gICAgICBpZiAoIWlzUmVxdWlyZWQgJiYgIWhhc051bGxpc2hPcHRpb24gJiYgdGhpcy5hbGxvd0NvbnRyb2xOdWxsaXNoT3B0aW9uKSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSBbdGhpcy5kZWZhdWx0TnVsbGlzaE9wdGlvbl0uY29uY2F0KHRoaXMuX29wdGlvbnMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25DbGlja1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCBvdmVycmlkZSB0byBjb3JyZWN0bHkgc2V0IHN0YXRlIGZyb20gZm9ybSB2YWx1ZSAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5kcm9wZG93blV0aWxzLmZsYXR0ZW5PcHRpb25zKHRoaXMuX29wdGlvbnMsIGZhbHNlKVxuICAgIHRoaXMuc3RhdGUgPSBvcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmtleSA9PT0gdmFsdWUpXG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEVWRU5UU1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBvblNlbGVjdENoYW5nZShvcHRpb246IFQpIHtcbiAgICBpZiAob3B0aW9uLmRpc2FibGVkKSByZXR1cm5cbiAgICB0aGlzLnVwZGF0ZU1vZGVsKG9wdGlvbilcbiAgICB0aGlzLnNldEV4cGFuZGVkKGZhbHNlKVxuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIEBpbnRlcm5hbFxuICAvLyAgKiBFbnRlciB0b2dnbGVzIHRoZSBkcm9wZG93biwgaG9tZSwgZW5kLCBhbmQsIGFycm93cyBjaGFuZ2UgdGhlIGluZGV4LlxuICAvLyAgKiBAcGFyYW0gZXZlbnQgZmlyZWQgY29udGFpbmluZyB3aGljaCBrZXkgd2FzIHJlbGVhc2VkLlxuICAvLyAgKi9cbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5rZXlFdmVudCA9IGV2ZW50XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBkcm9wZG93biBvbiBjbGljayBvdXRzaWRlLlxuICAgKi9cbiAgc3Vic2NyaWJlVG9PdXRzaWRlQ2xpY2tFdmVudCgpIHtcbiAgICB0aGlzLm9uQ2xpY2tTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmV4cGFuZGVkICYmXG4gICAgICAgICAgIXRoaXMuaW5wdXRSZWY/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZURyb3Bkb3duKClcbiAgICAgICAgICB0aGlzLm9uQ2xpY2tTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIRUxQRVJTXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogU2V0IHRoZSBkcm9wZG93biB2YWx1ZSB0byBnaXZlbiBvcHRpb24uXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgZHJvcGRvd24gb3B0aW9uIHRvIHNlbGVjdC5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTW9kZWwodmFsdWU6IFQpIHtcbiAgICB0aGlzLnN0YXRlID0gdmFsdWVcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlLmtleSlcbiAgfVxuXG4gIC8qKiBUb2dnbGUgdGhlIGV4cGFuZGVkIHN0YXRlIG9mIHRoZSBkcm9wZG93biBvcHRpb25zLiAqL1xuICB0b2dnbGVEcm9wZG93bigpIHtcbiAgICB0aGlzLnNldEV4cGFuZGVkKCF0aGlzLmV4cGFuZGVkKVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZXhwYW5kZWQgc3RhdGUgb2YgdGhlIGRyb3Bkb3duIG9wdGlvbnMuIElmIHRydWUgdGhlIG9wdGlvbnMgYXJlIHNob3duIGJlbG93IHRoZSBmaWVsZC5cbiAgICogQWN0aXZhdGUgb24gY2xpY2sgZXZlbnQgdG8gYmUgYWJsZSB0byBjbG9zZSBkcm9wZG93biBvbiBjbGljayBvdXRzaWRlLlxuICAgKiBAcGFyYW0gc3RhdGUgdGhlIGV4cGFuZGVkIHN0YXRlIHdoaWNoIHRvIHNldC5cbiAgICovXG4gIHNldEV4cGFuZGVkKHN0YXRlID0gdHJ1ZSkge1xuICAgIHRoaXMuZXhwYW5kZWQgPSBzdGF0ZVxuICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKVxuICAgIGlmICh0aGlzLmV4cGFuZGVkKSB0aGlzLnN1YnNjcmliZVRvT3V0c2lkZUNsaWNrRXZlbnQoKVxuICAgIGlmICghdGhpcy5leHBhbmRlZCkgdGhpcy5vblRvdWNoZWQoKVxuICB9XG5cbiAgLyogVFlQRSBDQVNUUyAqL1xuXG4gIC8qKlxuICAgKiBUeXBlY2FzdCBhbnl0aGluZyB0byBhbiB7QGxpbmsgT3B0aW9ufS5cbiAgICogQHBhcmFtIG9wdGlvbiB0aGUgb2JqZWN0IHRvIHR5cGVjYXN0LlxuICAgKi9cbiAgY2FzdE9wdGlvbihvcHRpb246IGFueSk6IFQge1xuICAgIHJldHVybiBvcHRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlY2FzdCBhbnl0aGluZyB0byBhbiB7QGxpbmsgT3B0aW9uR3JvdXB9LlxuICAgKiBAcGFyYW0gZ3JvdXAgdGhlIG9iamVjdCB0byB0eXBlY2FzdC5cbiAgICovXG4gIGNhc3RHcm91cChncm91cDogYW55KTogT3B0aW9uR3JvdXA8VD4ge1xuICAgIHJldHVybiBncm91cFxuICB9XG5cbiAgLyogVFlQRSBDSEVDS1MgKi9cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGFyZ3VtZW50IGlzIGFuIHtAbGluayBPcHRpb259LlxuICAgKiBAcGFyYW0gb3B0aW9uIHRoZSBvYmplY3QgdG8gY2hlY2suXG4gICAqL1xuICBpc09wdGlvbihvcHRpb246IE9wdGlvbkJhc2U8VD4pOiBvcHRpb24gaXMgT3B0aW9uR3JvdXA8VD4ge1xuICAgIHJldHVybiAhKCdvcHRpb25zJyBpbiBvcHRpb24pXG4gIH1cbn1cbiIsIjwhLS0gTEFCRUwgLS0+XG48bmctY29udGFpbmVyICp0cmFuc2xvY289XCJsZXQgdDsgcmVhZDogc2NvcGVcIj5cbiAgPGxhYmVsXG4gICAgW2lkXT1cImlkICsgJy1sYWJlbCdcIlxuICAgIGNsYXNzPVwiZ2RzLWZpZWxkLWxhYmVsIGhpZGUtaWYtZW1wdHlcIlxuICAgIFthdHRyLmZvcl09XCJpZCArICctdG9nZ2xlJ1wiXG4gICAgKm5nSWY9XCJsYWJlbENvbnRlbnRUcGwgfHwgbGFiZWxcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsQ29udGVudFRwbCB8fCBiYXNpY0xhYmVsQ29udGVudFRwbFwiXG4gICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNiYXNpY0xhYmVsQ29udGVudFRwbD5cbiAgICAgIDwhLS0gdG8gdHJpZ2dlciBjc3M6ZW1wdHkgaWYgbm8gbGFiZWwgd2FzIGFkZGVkIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhYmVsXCI+XG4gICAgICAgIHt7IGxhYmVsIH19XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25hbCA9PT0gdHJ1ZSB8fCAocmVxdWlyZWQgIT09IHRydWUgJiYgb3B0aW9uYWwgIT09IGZhbHNlKVwiXG4gICAgICAgICAgY2xhc3M9XCJnZHMtZmllbGQtbGFiZWwtLW9wdGlvbmFsXCJcbiAgICAgICAgPlxuICAgICAgICAgICh7eyB0KCdsYWJlbC5vcHRpb25hbCcpIH19KVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2xhYmVsPlxuXG4gIDwhLS0gREVTQ1JJUFRJT04gLS0+XG4gIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiICpuZ0lmPVwiZGVzY3JpcHRpb25cIj57eyBkZXNjcmlwdGlvbiB9fTwvZGl2PlxuXG4gIDwhLS0gTE9DS0VEIElOUFVUIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9ja2VkXCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBsb2NrZWRUcGwgfHwgZGVmYXVsdExvY2tlZFRwbDtcbiAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHN0YXRlIH1cbiAgICAgIFwiXG4gICAgPjwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9ja2VkVHBsPlxuICAgICAgPGRpdlxuICAgICAgICBbaWRdPVwiaWQgKyAnLWlucHV0J1wiXG4gICAgICAgIGNsYXNzPVwibmdndi1maWVsZC0tbG9ja2VkXCJcbiAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgICAgW2F0dHIudmFsdWVdPVwic3RhdGVcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cInJvbGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaWQgKyAnLWxhYmVsICcgKyBpZCArICctaW5wdXQnXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhc3RhdGVcIiBjbGFzcz1cInVuc2V0LXN0YXRlXCI+LTwvc3Bhbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICBzZWxlY3RlZENvbnRlbnRUcGwgfHwgZGVmYXVsdFNlbGVjdGVkQ29udGVudFRwbDtcbiAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHN0YXRlIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBJTlBVVCAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2NrZWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ2RzLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgI2lucHV0IFtpZF09XCJpZCArICctaW5wdXQnXCIgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2lkXT1cImlkICsgJy10b2dnbGUnXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwibmdndi1maWVsZC1kcm9wZG93bl9fbGFiZWwgdG9nZ2xlXCJcbiAgICAgICAgICBbY2xhc3Mubmdndi1maWVsZC0tZXJyb3JdPVwiaW52YWxpZFwiXG4gICAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgICBhcmlhLW93bnM9XCJsaXN0Ym94XCJcbiAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgICAgYXJpYS1jb250cm9scz1cImxpc3Rib3hcIlxuICAgICAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLXRvZ2dsZSdcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJcbiAgICAgICAgICAgIGFyaWFMYWJlbCA/IG51bGwgOiBpZCArICctbGFiZWwgJyArIGlkICsgJy10b2dnbGUnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBudWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ29udGVudFRwbCB8fCBkZWZhdWx0U2VsZWN0ZWRDb250ZW50VHBsO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzdGF0ZSB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxuZ2d2LWRyb3Bkb3duLWxpc3RcbiAgICAgICAgICAjZHJvcERvd25MaXN0XG4gICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgICAgICAgW3Njcm9sbE9mZnNldF09XCJzY3JvbGxPZmZzZXRcIlxuICAgICAgICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgICAgICAgW2V4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICAgICAgICBbb3B0aW9uQ29udGVudFRwbF09XCJvcHRpb25Db250ZW50VHBsXCJcbiAgICAgICAgICBbZ3JvdXBMYWJlbFRwbF09XCJncm91cExhYmVsVHBsXCJcbiAgICAgICAgICBbdGV4dFRvSGlnaGxpZ2h0XT1cInRleHRUb0hpZ2hsaWdodFwiXG4gICAgICAgICAgKGNsb3NlZCk9XCJzZXRFeHBhbmRlZChmYWxzZSlcIlxuICAgICAgICAgIChzZWxlY3RlZFZhbHVlQ2hhbmdlZCk9XCJvblNlbGVjdENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L25nZ3YtZHJvcGRvd24tbGlzdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBFUlJPUlMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ2RzLWZvcm0taXRlbV9fZm9vdGVyIGVycm9yLXdyYXBwZXJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImZvcm0taW5mbyBmb3JtLWluZm8tLWVycm9yXCJcbiAgICAgICAgICBbYXR0ci5mb3JdPVwiaWQgKyAnLWlucHV0J1wiXG4gICAgICAgICAgKm5nSWY9XCJpbnZhbGlkICYmIChlcnJvciB8fCBuZ0NvbnRyb2w/LmludmFsaWQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItaWNvblwiPlxuICAgICAgICAgICAgPGdkcy1pY29uLXRyaWFuZ2xlLWV4Y2xhbWF0aW9uXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTZcIlxuICAgICAgICAgICAgICBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgIFtzb2xpZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKm5nZ0NvcmVFbGVtZW50XG4gICAgICAgICAgICA+PC9nZHMtaWNvbi10cmlhbmdsZS1leGNsYW1hdGlvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiZXJyb3I7IGVsc2UgZXJyb3JzUmVmXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLWVycm9ybGFiZWwnXCJcbiAgICAgICAgICAgID57eyBlcnJvciB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2Vycm9yc1JlZj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJmaXJzdEVycm9yIGFzIGVycm9yXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGhvb2tdPVwidGhvb2sgKyAnLWVycm9ybGFiZWwnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB0KCdlcnJvci5maWVsZCcgKyBlcnJvcj8uY29kZSwgZXJyb3I/LnBhcmFtcykgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gQ0hJTERSRU4gLS0+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlbGVjdGVkQ29udGVudFRwbCBsZXQtc3RhdGU+XG4gICAgPCEtLSBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L3RlbXBsYXRlL2VxZXFlcSAtLT5cbiAgICB7eyBzdGF0ZT8ua2V5ICE9IG51bGwgJiYgc3RhdGU/LmxhYmVsID8gdChzdGF0ZS5sYWJlbCkgOiBwbGFjZWhvbGRlciB9fVxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy1jb250YWluZXI+XG4iXX0=