@snabcentr/client-ui 4.16.0 → 4.17.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 (47) hide show
  1. package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +11 -21
  2. package/esm2022/providers/index.mjs +1 -2
  3. package/esm2022/public-api.mjs +2 -1
  4. package/esm2022/samples/sc-sample.module.mjs +3 -10
  5. package/esm2022/services/index.mjs +2 -1
  6. package/esm2022/services/sc-scripts.service.mjs +106 -0
  7. package/esm2022/smart-captcha/index.mjs +5 -0
  8. package/esm2022/smart-captcha/interfaces/index.mjs +6 -0
  9. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-api.mjs +2 -0
  10. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-event.mjs +2 -0
  11. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-language.mjs +2 -0
  12. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-render-params.mjs +2 -0
  13. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-settings.mjs +2 -0
  14. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-window.mjs +2 -0
  15. package/esm2022/smart-captcha/sc-smart-captcha.component.mjs +167 -0
  16. package/esm2022/smart-captcha/services/index.mjs +2 -0
  17. package/esm2022/smart-captcha/services/sc-smart-captcha-loader.service.mjs +87 -0
  18. package/esm2022/smart-captcha/tokens/index.mjs +3 -0
  19. package/esm2022/smart-captcha/tokens/sc-smart-captcha-load-timeout.token.mjs +8 -0
  20. package/esm2022/smart-captcha/tokens/sc-smart-captcha-settings.token.mjs +6 -0
  21. package/feedback/feedback-form/sc-feedback-form.component.d.ts +1 -1
  22. package/fesm2022/snabcentr-client-ui.mjs +367 -64
  23. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  24. package/package.json +1 -2
  25. package/providers/index.d.ts +0 -1
  26. package/public-api.d.ts +1 -0
  27. package/release_notes.tmp +3 -3
  28. package/samples/sc-sample.module.d.ts +1 -2
  29. package/services/index.d.ts +1 -0
  30. package/services/sc-scripts.service.d.ts +51 -0
  31. package/smart-captcha/index.d.ts +4 -0
  32. package/smart-captcha/interfaces/index.d.ts +5 -0
  33. package/smart-captcha/interfaces/sc-smart-captcha-api.d.ts +36 -0
  34. package/smart-captcha/interfaces/sc-smart-captcha-event.d.ts +4 -0
  35. package/smart-captcha/interfaces/sc-smart-captcha-language.d.ts +4 -0
  36. package/smart-captcha/interfaces/sc-smart-captcha-render-params.d.ts +16 -0
  37. package/smart-captcha/interfaces/sc-smart-captcha-settings.d.ts +16 -0
  38. package/smart-captcha/interfaces/sc-smart-captcha-window.d.ts +14 -0
  39. package/smart-captcha/sc-smart-captcha.component.d.ts +92 -0
  40. package/smart-captcha/services/index.d.ts +1 -0
  41. package/smart-captcha/services/sc-smart-captcha-loader.service.d.ts +50 -0
  42. package/smart-captcha/tokens/index.d.ts +2 -0
  43. package/smart-captcha/tokens/sc-smart-captcha-load-timeout.token.d.ts +5 -0
  44. package/smart-captcha/tokens/sc-smart-captcha-settings.token.d.ts +6 -0
  45. package/styles/tailwind/tailwind.scss +40 -2
  46. package/esm2022/providers/cleanup-recaptcha-artifacts.mjs +0 -30
  47. package/providers/cleanup-recaptcha-artifacts.d.ts +0 -7
@@ -12,18 +12,17 @@ import { TuiButtonLoading, TuiCheckbox, TuiFieldErrorPipe, TuiFiles, tuiFilesAcc
12
12
  import { TuiInputModule, TuiInputPhoneModule, TuiTextareaModule } from '@taiga-ui/legacy';
13
13
  import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
14
14
  import { getCountries } from 'libphonenumber-js';
15
- import { RecaptchaComponent, RecaptchaFormsModule, RecaptchaModule } from 'ng-recaptcha-2';
16
15
  import { catchError, filter, map, merge, of, share, startWith, Subject, switchMap, tap } from 'rxjs';
17
16
  import { ScFormFieldsModule } from '../../form-fields';
18
17
  import { MAX_FILES_IN_FORM_INPUT } from '../../providers/sc-max-files-in-form-input';
18
+ import { ScSmartCaptchaComponent } from '../../smart-captcha/sc-smart-captcha.component';
19
19
  import { phoneValidator } from '../../validators/sc-phone-validator';
20
20
  import * as i0 from "@angular/core";
21
21
  import * as i1 from "@angular/forms";
22
22
  import * as i2 from "../../form-fields/suggestion-field/sc-suggestion-field.component";
23
23
  import * as i3 from "@taiga-ui/legacy";
24
- import * as i4 from "ng-recaptcha-2";
25
- import * as i5 from "@taiga-ui/kit";
26
- import * as i6 from "@taiga-ui/core";
24
+ import * as i4 from "@taiga-ui/kit";
25
+ import * as i5 from "@taiga-ui/core";
27
26
  /**
28
27
  * Компонент формы обратной связи.
29
28
  */
@@ -95,7 +94,7 @@ export class ScFeedbackFormComponent {
95
94
  }
96
95
  }));
97
96
  /**
98
- * Поле ввода для recaptcha.
97
+ * Поле ввода токена капчи, имя `recaptcha` задано API.
99
98
  */
100
99
  this.recaptchaControl = new FormControl(null, Validators.required);
101
100
  /**
@@ -137,8 +136,10 @@ export class ScFeedbackFormComponent {
137
136
  }),
138
137
  // eslint-disable-next-line rxjs/no-implicit-any-catch
139
138
  catchError((error) => {
139
+ // Токен капчи одноразовый: для повторной отправки нужна новая проверка.
140
+ this.recaptchaControl.reset();
140
141
  this.form.markAllAsTouched();
141
- const { errors, message } = error.error;
142
+ const { errors, message } = (error.error ?? {});
142
143
  if (errors) {
143
144
  Object.keys(errors).forEach((key) => {
144
145
  const control = this.form.get(key);
@@ -175,16 +176,6 @@ export class ScFeedbackFormComponent {
175
176
  * Список стран.
176
177
  */
177
178
  this.countries = getCountries();
178
- /**
179
- * Это решение ошибки #4940, было @see [предложено](https://github.com/DethAriel/ng-recaptcha/issues/123#issuecomment-426112101) автором {@link RecaptchaComponent}.
180
- */
181
- RecaptchaComponent.prototype.ngOnDestroy = function () {
182
- // eslint-disable-next-line @typescript-eslint/dot-notation
183
- if (this['subscription']) {
184
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call, @typescript-eslint/dot-notation
185
- this['subscription'].unsubscribe();
186
- }
187
- };
188
179
  merge(this.accepted$, this.user$, this.loadedFile.valueChanges.pipe(tap((files) => {
189
180
  this.form.controls.files.reset([]);
190
181
  this.onUploadFile(files);
@@ -308,7 +299,7 @@ export class ScFeedbackFormComponent {
308
299
  return ScPhoneService.isValidPhoneNumberForMessenger(value);
309
300
  }
310
301
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScFeedbackFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
311
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScFeedbackFormComponent, isStandalone: true, selector: "sc-feedback-form", inputs: { slugInput: { classPropertyName: "slugInput", publicName: "slug", isSignal: true, isRequired: false, transformFunction: null }, fieldsInput: { classPropertyName: "fieldsInput", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickOffer: "clickOffer", sendSuccess: "sendSuccess" }, ngImport: i0, template: "@let fieldsList = fields();\n<form\n *ngIf=\"fieldsList.length > 0\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <!-- \u0424\u0418\u041E -->\n <label\n *ngIf=\"fieldsList.includes('name')\"\n tuiLabel\n >\n \u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0424.\u0418.\u041E. </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0422\u0435\u043B\u0435\u0444\u043E\u043D -->\n @if (fieldsList.includes('phone')) {\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <label\n *ngIf=\"fieldsList.includes('isShouldUseMessenger') && form.controls.phone.value && isValidPhoneNumberForMessenger(form.controls.phone.value)\"\n tuiLabel\n >\n <input\n formControlName=\"isShouldUseMessenger\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span tuiTitle> \u041D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0432 \u043C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440\u0430\u0445, \u0430 \u043D\u0435 \u0437\u0432\u043E\u043D\u0438\u0442\u044C </span>\n </label>\n }\n <!-- \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B -->\n <label\n *ngIf=\"fieldsList.includes('email')\"\n tuiLabel\n >\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 -->\n <label\n *ngIf=\"fieldsList.includes('message')\"\n tuiLabel\n >\n \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\n <tui-textarea formControlName=\"message\"> \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 </tui-textarea>\n <tui-error\n formControlName=\"message\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0424\u0430\u0439\u043B\u044B -->\n <div\n *ngIf=\"fieldsList.includes('files')\"\n class=\"flex flex-col gap-1\"\n >\n <label tuiInputFiles>\n <input\n #validator=\"tuiInputFilesValidator\"\n accept=\".doc,.docx,.pdf,image/*\"\n tuiInputFiles\n [formControl]=\"loadedFile\"\n [multiple]=\"true\"\n (reject)=\"onReject($event)\"\n />\n </label>\n\n <tui-error\n *ngIf=\"loadedFile.invalid\"\n [error]=\"['maxLength'] | tuiFieldError | async\"\n [formControl]=\"loadedFile\"\n />\n\n @let accepted = accepted$ | async;\n <tui-files\n *ngIf=\"accepted?.length || rejected.length\"\n class=\"tui-space_top-1\"\n >\n <tui-file\n *ngFor=\"let file of accepted\"\n [file]=\"file\"\n (remove)=\"onRemove(file)\"\n />\n <tui-file\n *ngFor=\"let file of rejected\"\n state=\"error\"\n [file]=\"(file | tuiFileRejected: validator | async) || file\"\n (remove)=\"onRemove(file)\"\n />\n </tui-files>\n </div>\n\n <!-- recaptcha -->\n @if (form.get('recaptcha')) {\n <div\n class=\"mb-3 max-h-20 overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': form.get('recaptcha')?.valid }\"\n >\n <re-captcha formControlName=\"recaptcha\" />\n </div>\n }\n\n <!-- \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F -->\n <div class=\"flex flex-wrap items-center gap-3\">\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n \u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\n </button>\n <div class=\"grow basis-60 text-body-s\">\n \u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044C \u0441\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); clickOffer.emit()\"\n >\n \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\n </button>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "pipe", type: TuiFieldErrorPipe, name: "tuiFieldError" }, { kind: "ngmodule", type: ScFormFieldsModule }, { kind: "component", type: i2.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "ngmodule", type: TuiInputModule }, { kind: "component", type: i3.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i3.TuiInputDirective, selector: "tui-input" }, { kind: "ngmodule", type: TuiInputPhoneModule }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "ngmodule", type: RecaptchaFormsModule }, { kind: "directive", type: i4.RecaptchaValueAccessorDirective, selector: "re-captcha[formControlName],re-captcha[formControl],re-captcha[ngModel]" }, { kind: "ngmodule", type: RecaptchaModule }, { kind: "component", type: i4.RecaptchaComponent, selector: "re-captcha", inputs: ["id", "siteKey", "theme", "type", "size", "tabIndex", "badge", "errorMode"], outputs: ["resolved", "error", "errored"], exportAs: ["reCaptcha"] }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TuiTextareaModule }, { kind: "component", type: i3.TuiTextareaComponent, selector: "tui-textarea", inputs: ["rows", "maxLength", "expandable"] }, { kind: "directive", type: i3.TuiTextareaDirective, selector: "tui-textarea" }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]", inputs: ["size"] }, { kind: "directive", type: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }, { kind: "component", type: i5.TuiFile, selector: "tui-file,a[tuiFile],button[tuiFile]", inputs: ["file", "state", "size", "showDelete", "showSize", "leftContent"], outputs: ["remove"] }, { kind: "component", type: i5.TuiInputFiles, selector: "label[tuiInputFiles]" }, { kind: "component", type: i5.TuiFilesComponent, selector: "tui-files", inputs: ["max", "expanded"], outputs: ["expandedChange"] }, { kind: "pipe", type: i5.TuiFileRejectedPipe, name: "tuiFileRejected" }, { kind: "directive", type: i5.TuiInputFilesDirective, selector: "input[tuiInputFiles]", outputs: ["reject"] }, { kind: "component", type: TuiInputPhoneInternational, selector: "input[tuiInputPhoneInternational]", inputs: ["countrySearch", "countries", "countryIsoCode"], outputs: ["countryIsoCodeChange"] }, { kind: "component", type: i6.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "pipe", type: TuiSortCountriesPipe, name: "tuiSortCountries" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
302
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScFeedbackFormComponent, isStandalone: true, selector: "sc-feedback-form", inputs: { slugInput: { classPropertyName: "slugInput", publicName: "slug", isSignal: true, isRequired: false, transformFunction: null }, fieldsInput: { classPropertyName: "fieldsInput", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clickOffer: "clickOffer", sendSuccess: "sendSuccess" }, ngImport: i0, template: "@let fieldsList = fields();\n<form\n *ngIf=\"fieldsList.length > 0\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <!-- \u0424\u0418\u041E -->\n <label\n *ngIf=\"fieldsList.includes('name')\"\n tuiLabel\n >\n \u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0424.\u0418.\u041E. </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0422\u0435\u043B\u0435\u0444\u043E\u043D -->\n @if (fieldsList.includes('phone')) {\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <label\n *ngIf=\"fieldsList.includes('isShouldUseMessenger') && form.controls.phone.value && isValidPhoneNumberForMessenger(form.controls.phone.value)\"\n tuiLabel\n >\n <input\n formControlName=\"isShouldUseMessenger\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span tuiTitle> \u041D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0432 \u043C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440\u0430\u0445, \u0430 \u043D\u0435 \u0437\u0432\u043E\u043D\u0438\u0442\u044C </span>\n </label>\n }\n <!-- \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B -->\n <label\n *ngIf=\"fieldsList.includes('email')\"\n tuiLabel\n >\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 -->\n <label\n *ngIf=\"fieldsList.includes('message')\"\n tuiLabel\n >\n \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\n <tui-textarea formControlName=\"message\"> \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 </tui-textarea>\n <tui-error\n formControlName=\"message\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0424\u0430\u0439\u043B\u044B -->\n <div\n *ngIf=\"fieldsList.includes('files')\"\n class=\"flex flex-col gap-1\"\n >\n <label tuiInputFiles>\n <input\n #validator=\"tuiInputFilesValidator\"\n accept=\".doc,.docx,.pdf,image/*\"\n tuiInputFiles\n [formControl]=\"loadedFile\"\n [multiple]=\"true\"\n (reject)=\"onReject($event)\"\n />\n </label>\n\n <tui-error\n *ngIf=\"loadedFile.invalid\"\n [error]=\"['maxLength'] | tuiFieldError | async\"\n [formControl]=\"loadedFile\"\n />\n\n @let accepted = accepted$ | async;\n <tui-files\n *ngIf=\"accepted?.length || rejected.length\"\n class=\"tui-space_top-1\"\n >\n <tui-file\n *ngFor=\"let file of accepted\"\n [file]=\"file\"\n (remove)=\"onRemove(file)\"\n />\n <tui-file\n *ngFor=\"let file of rejected\"\n state=\"error\"\n [file]=\"(file | tuiFileRejected: validator | async) || file\"\n (remove)=\"onRemove(file)\"\n />\n </tui-files>\n </div>\n\n <!-- \u041A\u0430\u043F\u0447\u0430 -->\n @if (form.get('recaptcha'); as recaptcha) {\n <div\n class=\"mb-3 max-h-[7.5rem] overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': recaptcha.valid }\"\n [attr.inert]=\"recaptcha.valid ? '' : null\"\n >\n <sc-smart-captcha formControlName=\"recaptcha\" />\n </div>\n @if (recaptcha.getError('serverResponse'); as serverErrors) {\n <tui-error [error]=\"serverErrors.join(' ')\" />\n }\n }\n\n <!-- \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F -->\n <div class=\"flex flex-wrap items-center gap-3\">\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n \u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\n </button>\n <div class=\"grow basis-60 text-body-s\">\n \u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044C \u0441\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); clickOffer.emit()\"\n >\n \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\n </button>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "pipe", type: TuiFieldErrorPipe, name: "tuiFieldError" }, { kind: "ngmodule", type: ScFormFieldsModule }, { kind: "component", type: i2.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type"], outputs: ["selectedClick"] }, { kind: "ngmodule", type: TuiInputModule }, { kind: "component", type: i3.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i3.TuiInputDirective, selector: "tui-input" }, { kind: "ngmodule", type: TuiInputPhoneModule }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: ScSmartCaptchaComponent, selector: "sc-smart-captcha" }, { kind: "directive", type: TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TuiTextareaModule }, { kind: "component", type: i3.TuiTextareaComponent, selector: "tui-textarea", inputs: ["rows", "maxLength", "expandable"] }, { kind: "directive", type: i3.TuiTextareaDirective, selector: "tui-textarea" }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]", inputs: ["size"] }, { kind: "directive", type: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }, { kind: "component", type: i4.TuiFile, selector: "tui-file,a[tuiFile],button[tuiFile]", inputs: ["file", "state", "size", "showDelete", "showSize", "leftContent"], outputs: ["remove"] }, { kind: "component", type: i4.TuiInputFiles, selector: "label[tuiInputFiles]" }, { kind: "component", type: i4.TuiFilesComponent, selector: "tui-files", inputs: ["max", "expanded"], outputs: ["expandedChange"] }, { kind: "pipe", type: i4.TuiFileRejectedPipe, name: "tuiFileRejected" }, { kind: "directive", type: i4.TuiInputFilesDirective, selector: "input[tuiInputFiles]", outputs: ["reject"] }, { kind: "component", type: TuiInputPhoneInternational, selector: "input[tuiInputPhoneInternational]", inputs: ["countrySearch", "countries", "countryIsoCode"], outputs: ["countryIsoCodeChange"] }, { kind: "component", type: i5.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "pipe", type: TuiSortCountriesPipe, name: "tuiSortCountries" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
312
303
  }
313
304
  __decorate([
314
305
  tuiPure
@@ -328,8 +319,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
328
319
  TuiButton,
329
320
  TuiButtonLoading,
330
321
  TuiLabel,
331
- RecaptchaFormsModule,
332
- RecaptchaModule,
322
+ ScSmartCaptchaComponent,
333
323
  TuiLink,
334
324
  NgIf,
335
325
  TuiTextareaModule,
@@ -339,6 +329,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
339
329
  TuiInputPhoneInternational,
340
330
  ...TuiTextfield,
341
331
  TuiSortCountriesPipe,
342
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let fieldsList = fields();\n<form\n *ngIf=\"fieldsList.length > 0\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <!-- \u0424\u0418\u041E -->\n <label\n *ngIf=\"fieldsList.includes('name')\"\n tuiLabel\n >\n \u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0424.\u0418.\u041E. </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0422\u0435\u043B\u0435\u0444\u043E\u043D -->\n @if (fieldsList.includes('phone')) {\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <label\n *ngIf=\"fieldsList.includes('isShouldUseMessenger') && form.controls.phone.value && isValidPhoneNumberForMessenger(form.controls.phone.value)\"\n tuiLabel\n >\n <input\n formControlName=\"isShouldUseMessenger\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span tuiTitle> \u041D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0432 \u043C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440\u0430\u0445, \u0430 \u043D\u0435 \u0437\u0432\u043E\u043D\u0438\u0442\u044C </span>\n </label>\n }\n <!-- \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B -->\n <label\n *ngIf=\"fieldsList.includes('email')\"\n tuiLabel\n >\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 -->\n <label\n *ngIf=\"fieldsList.includes('message')\"\n tuiLabel\n >\n \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\n <tui-textarea formControlName=\"message\"> \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 </tui-textarea>\n <tui-error\n formControlName=\"message\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0424\u0430\u0439\u043B\u044B -->\n <div\n *ngIf=\"fieldsList.includes('files')\"\n class=\"flex flex-col gap-1\"\n >\n <label tuiInputFiles>\n <input\n #validator=\"tuiInputFilesValidator\"\n accept=\".doc,.docx,.pdf,image/*\"\n tuiInputFiles\n [formControl]=\"loadedFile\"\n [multiple]=\"true\"\n (reject)=\"onReject($event)\"\n />\n </label>\n\n <tui-error\n *ngIf=\"loadedFile.invalid\"\n [error]=\"['maxLength'] | tuiFieldError | async\"\n [formControl]=\"loadedFile\"\n />\n\n @let accepted = accepted$ | async;\n <tui-files\n *ngIf=\"accepted?.length || rejected.length\"\n class=\"tui-space_top-1\"\n >\n <tui-file\n *ngFor=\"let file of accepted\"\n [file]=\"file\"\n (remove)=\"onRemove(file)\"\n />\n <tui-file\n *ngFor=\"let file of rejected\"\n state=\"error\"\n [file]=\"(file | tuiFileRejected: validator | async) || file\"\n (remove)=\"onRemove(file)\"\n />\n </tui-files>\n </div>\n\n <!-- recaptcha -->\n @if (form.get('recaptcha')) {\n <div\n class=\"mb-3 max-h-20 overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': form.get('recaptcha')?.valid }\"\n >\n <re-captcha formControlName=\"recaptcha\" />\n </div>\n }\n\n <!-- \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F -->\n <div class=\"flex flex-wrap items-center gap-3\">\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n \u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\n </button>\n <div class=\"grow basis-60 text-body-s\">\n \u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044C \u0441\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); clickOffer.emit()\"\n >\n \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\n </button>\n </div>\n </div>\n</form>\n" }]
332
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@let fieldsList = fields();\n<form\n *ngIf=\"fieldsList.length > 0\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col justify-between gap-4\"\n>\n <!-- \u0424\u0418\u041E -->\n <label\n *ngIf=\"fieldsList.includes('name')\"\n tuiLabel\n >\n \u0424\u0418\u041E\n <tui-input formControlName=\"name\"> \u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0412\u0430\u0448\u0438 \u0424.\u0418.\u041E. </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0422\u0435\u043B\u0435\u0444\u043E\u043D -->\n @if (fieldsList.includes('phone')) {\n <label tuiLabel>\n \u0422\u0435\u043B\u0435\u0444\u043E\u043D\n <tui-textfield>\n <input\n formControlName=\"phone\"\n tuiInputPhoneInternational\n [countrySearch]=\"true\"\n [countries]=\"(countries | tuiSortCountries | async) || []\"\n autocomplete=\"phone\"\n />\n </tui-textfield>\n <tui-error\n formControlName=\"phone\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <label\n *ngIf=\"fieldsList.includes('isShouldUseMessenger') && form.controls.phone.value && isValidPhoneNumberForMessenger(form.controls.phone.value)\"\n tuiLabel\n >\n <input\n formControlName=\"isShouldUseMessenger\"\n tuiCheckbox\n type=\"checkbox\"\n />\n <span tuiTitle> \u041D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0432 \u043C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440\u0430\u0445, \u0430 \u043D\u0435 \u0437\u0432\u043E\u043D\u0438\u0442\u044C </span>\n </label>\n }\n <!-- \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B -->\n <label\n *ngIf=\"fieldsList.includes('email')\"\n tuiLabel\n >\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 -->\n <label\n *ngIf=\"fieldsList.includes('message')\"\n tuiLabel\n >\n \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439\n <tui-textarea formControlName=\"message\"> \u041A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 </tui-textarea>\n <tui-error\n formControlName=\"message\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <!-- \u0424\u0430\u0439\u043B\u044B -->\n <div\n *ngIf=\"fieldsList.includes('files')\"\n class=\"flex flex-col gap-1\"\n >\n <label tuiInputFiles>\n <input\n #validator=\"tuiInputFilesValidator\"\n accept=\".doc,.docx,.pdf,image/*\"\n tuiInputFiles\n [formControl]=\"loadedFile\"\n [multiple]=\"true\"\n (reject)=\"onReject($event)\"\n />\n </label>\n\n <tui-error\n *ngIf=\"loadedFile.invalid\"\n [error]=\"['maxLength'] | tuiFieldError | async\"\n [formControl]=\"loadedFile\"\n />\n\n @let accepted = accepted$ | async;\n <tui-files\n *ngIf=\"accepted?.length || rejected.length\"\n class=\"tui-space_top-1\"\n >\n <tui-file\n *ngFor=\"let file of accepted\"\n [file]=\"file\"\n (remove)=\"onRemove(file)\"\n />\n <tui-file\n *ngFor=\"let file of rejected\"\n state=\"error\"\n [file]=\"(file | tuiFileRejected: validator | async) || file\"\n (remove)=\"onRemove(file)\"\n />\n </tui-files>\n </div>\n\n <!-- \u041A\u0430\u043F\u0447\u0430 -->\n @if (form.get('recaptcha'); as recaptcha) {\n <div\n class=\"mb-3 max-h-[7.5rem] overflow-hidden duration-500\"\n [ngClass]=\"{ '!max-h-0 !-m-2': recaptcha.valid }\"\n [attr.inert]=\"recaptcha.valid ? '' : null\"\n >\n <sc-smart-captcha formControlName=\"recaptcha\" />\n </div>\n @if (recaptcha.getError('serverResponse'); as serverErrors) {\n <tui-error [error]=\"serverErrors.join(' ')\" />\n }\n }\n\n <!-- \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F -->\n <div class=\"flex flex-wrap items-center gap-3\">\n <button\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n type=\"submit\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n >\n \u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C\n </button>\n <div class=\"grow basis-60 text-body-s\">\n \u041D\u0430\u0436\u0438\u043C\u0430\u044F \u043D\u0430 \u043A\u043D\u043E\u043F\u043A\u0443, \u0432\u044B \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u0435\u0442\u0435\u0441\u044C \u0441\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"context?.data?.onClickOfferHandler(); clickOffer.emit()\"\n >\n \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u043E\u0439 \u043A\u043E\u043D\u0444\u0438\u0434\u0435\u043D\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438\n </button>\n </div>\n </div>\n</form>\n" }]
343
333
  }], ctorParameters: () => [], propDecorators: { isValidPhoneNumberForMessenger: [] } });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZmVlZGJhY2stZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvZmVlZGJhY2svZmVlZGJhY2stZm9ybS9zYy1mZWVkYmFjay1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9mZWVkYmFjay9mZWVkYmFjay1mb3JtL3NjLWZlZWRiYWNrLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDZFQUE2RTtBQUU3RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUNuSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUNILG1CQUFtQixFQUVuQixpQkFBaUIsRUFHakIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxjQUFjLEVBRWQsYUFBYSxHQUNoQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBaUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQW9CLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRSxPQUFP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cy11c2UtdGhpcyxAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgKi9cblxuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NsYXNzLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIElucHV0U2lnbmFsLCBvdXRwdXQsIE91dHB1dEVtaXR0ZXJSZWYsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgU2NDb252ZXJ0ZXJzU2VydmljZSxcbiAgICBTY0ZlZWRiYWNrRm9ybXMsXG4gICAgU2NGZWVkYmFja1NlcnZpY2UsXG4gICAgU2NJQXBpRXJyb3JSZXNwb25zZSxcbiAgICBTY0lGZWVkYmFja01lc3NhZ2UsXG4gICAgU2NJU3VnZ2VzdGlvblR5cGUsXG4gICAgU2NQaG9uZVNlcnZpY2UsXG4gICAgU2NVcGxvYWRlZEZpbGUsXG4gICAgU2NVc2VyLFxuICAgIFNjVXNlclNlcnZpY2UsXG59IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpTG9vc2VVbmlvbiwgdHVpUHVyZSwgVHVpVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQgeyBUdWlCdXR0b24sIFR1aURpYWxvZ0NvbnRleHQsIFR1aUVycm9yLCBUdWlMYWJlbCwgVHVpTGluaywgVHVpVGV4dGZpZWxkLCBUdWlUaXRsZSB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUlucHV0UGhvbmVJbnRlcm5hdGlvbmFsIH0gZnJvbSAnQHRhaWdhLXVpL2V4cGVyaW1lbnRhbCc7XG5pbXBvcnQgeyBUdWlDb3VudHJ5SXNvQ29kZSB9IGZyb20gJ0B0YWlnYS11aS9pMThuJztcbmltcG9ydCB7IFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUNoZWNrYm94LCBUdWlGaWVsZEVycm9yUGlwZSwgVHVpRmlsZUxpa2UsIFR1aUZpbGVzLCB0dWlGaWxlc0FjY2VwdGVkLCBUdWlTb3J0Q291bnRyaWVzUGlwZSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgVHVpSW5wdXRNb2R1bGUsIFR1aUlucHV0UGhvbmVNb2R1bGUsIFR1aVRleHRhcmVhTW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2xlZ2FjeSc7XG5pbXBvcnQgeyBQT0xZTU9SUEhFVVNfQ09OVEVYVCB9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHsgZ2V0Q291bnRyaWVzIH0gZnJvbSAnbGlicGhvbmVudW1iZXItanMnO1xuaW1wb3J0IHsgUmVjYXB0Y2hhQ29tcG9uZW50LCBSZWNhcHRjaGFGb3Jtc01vZHVsZSwgUmVjYXB0Y2hhTW9kdWxlIH0gZnJvbSAnbmctcmVjYXB0Y2hhLTInO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmUsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NGb3JtRmllbGRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vZm9ybS1maWVsZHMnO1xuaW1wb3J0IHsgTUFYX0ZJTEVTX0lOX0ZPUk1fSU5QVVQgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvc2MtbWF4LWZpbGVzLWluLWZvcm0taW5wdXQnO1xuaW1wb3J0IHsgcGhvbmVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzL3NjLXBob25lLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBTY0ZlZWRiYWNrRm9ybUNvbmZpZywgU2NGZWVkYmFja0Zvcm1GaWVsZFR5cGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0YTQvtGA0LzRiyDQvtCx0YDQsNGC0L3QvtC5INGB0LLRj9C30LguXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1mZWVkYmFjay1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtZmVlZGJhY2stZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBUdWlFcnJvcixcbiAgICAgICAgVHVpRmllbGRFcnJvclBpcGUsXG4gICAgICAgIFNjRm9ybUZpZWxkc01vZHVsZSxcbiAgICAgICAgVHVpSW5wdXRNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0UGhvbmVNb2R1bGUsXG4gICAgICAgIFR1aUJ1dHRvbixcbiAgICAgICAgVHVpQnV0dG9uTG9hZGluZyxcbiAgICAgICAgVHVpTGFiZWwsXG4gICAgICAgIFJlY2FwdGNoYUZvcm1zTW9kdWxlLFxuICAgICAgICBSZWNhcHRjaGFNb2R1bGUsXG4gICAgICAgIFR1aUxpbmssXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFR1aVRleHRhcmVhTW9kdWxlLFxuICAgICAgICBUdWlDaGVja2JveCxcbiAgICAgICAgVHVpVGl0bGUsXG4gICAgICAgIFR1aUZpbGVzLFxuICAgICAgICBUdWlJbnB1dFBob25lSW50ZXJuYXRpb25hbCxcbiAgICAgICAgLi4uVHVpVGV4dGZpZWxkLFxuICAgICAgICBUdWlTb3J0Q291bnRyaWVzUGlwZSxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0ZlZWRiYWNrRm9ybUNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0JrQvtC90YLQtdC60YHRgiDQtNC40LDQu9C+0LPQvtCy0L7Qs9C+INC+0LrQvdCwLCDQsiDQutC+0YLQvtGA0L7QvCDQvtGC0LrRgNGL0YIg0LrQvtC80L/QvtC90LXQvdGCLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjb250ZXh0OiBUdWlEaWFsb2dDb250ZXh0PHZvaWQsIHsgb25DbGlja09mZmVySGFuZGxlcjogKCkgPT4gdm9pZCB9ICYgU2NGZWVkYmFja0Zvcm1Db25maWc+IHwgbnVsbCA9IGluamVjdDxcbiAgICAgICAgVHVpRGlhbG9nQ29udGV4dDx2b2lkLCB7IG9uQ2xpY2tPZmZlckhhbmRsZXI6ICgpID0+IHZvaWQgfSAmIFNjRmVlZGJhY2tGb3JtQ29uZmlnPlxuICAgID4oUE9MWU1PUlBIRVVTX0NPTlRFWFQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gICAgcHVibGljIHJlYWRvbmx5IHNsdWdJbnB1dDogSW5wdXRTaWduYWw8VHVpTG9vc2VVbmlvbjxTY0ZlZWRiYWNrRm9ybXM+PiA9IGlucHV0PFR1aUxvb3NlVW5pb248U2NGZWVkYmFja0Zvcm1zPj4oJ2NvbW1vbicsIHsgYWxpYXM6ICdzbHVnJyB9KTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQv9C+0LvQtdC5LCDQtNC+0YHRgtGD0L/QvdGL0YUg0LIg0LTQsNC90L3QvtC5INGE0L7RgNC80LUuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzSW5wdXQ6IElucHV0U2lnbmFsPFNjRmVlZGJhY2tGb3JtRmllbGRUeXBlW10+ID0gaW5wdXQ8U2NGZWVkYmFja0Zvcm1GaWVsZFR5cGVbXT4oWyduYW1lJywgJ2VtYWlsJywgJ3Bob25lJywgJ21lc3NhZ2UnLCAnZmlsZXMnXSwgeyBhbGlhczogJ2ZpZWxkcycgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzbHVnOiBTaWduYWw8VHVpTG9vc2VVbmlvbjxTY0ZlZWRiYWNrRm9ybXM+PiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29udGV4dD8uZGF0YS5zbHVnID8/IHRoaXMuc2x1Z0lucHV0KCkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INC/0L7Qu9C10LksINC00L7RgdGC0YPQv9C90YvRhSDQsiDQtNCw0L3QvdC+0Lkg0YTQvtGA0LzQtS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmllbGRzOiBTaWduYWw8U2NGZWVkYmFja0Zvcm1GaWVsZFR5cGVbXT4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbnRleHQ/LmRhdGEuZmllbGRzID8/IHRoaXMuZmllbGRzSW5wdXQoKSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQvdCw0LbQsNGC0LjRjyDQvdCwINC60L3QvtC/0LrRgyDQtNC+0LPQvtCy0L7RgNCwINC+0YTQtdGA0YLRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xpY2tPZmZlcjogT3V0cHV0RW1pdHRlclJlZjx2b2lkPiA9IG91dHB1dCgpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0YPRgdC/0LXRiNC90L7QuSDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbmRTdWNjZXNzOiBPdXRwdXRFbWl0dGVyUmVmPHZvaWQ+ID0gb3V0cHV0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0L7QsdGA0LDRgtC90L7QuSDRgdCy0Y/Qt9C4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmVlZGJhY2tTZXJ2aWNlOiBTY0ZlZWRiYWNrU2VydmljZSA9IGluamVjdChTY0ZlZWRiYWNrU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LrQvtC90LLQtdGA0YLQsNGG0LjQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb252ZXJ0ZXJzU2VydmljZTogU2NDb252ZXJ0ZXJzU2VydmljZSA9IGluamVjdChTY0NvbnZlcnRlcnNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRhNCw0LnQu9C+0LIsINC+0YLQv9GA0LDQstC70Y/QtdC80YvRhSDQsiDRhNC+0YDQvNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF4RmlsZXNJbkZvcm06IG51bWJlciA9IGluamVjdChNQVhfRklMRVNfSU5fRk9STV9JTlBVVCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQsNC90L3Ri9GFINC+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXIkOiBPYnNlcnZhYmxlPFNjVXNlcj4gPSBpbmplY3QoU2NVc2VyU2VydmljZSlcbiAgICAgICAgLmdldFVzZXJDaGFuZ2UkKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHVzZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXNlci5pc0d1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5hZGRDb250cm9sKCdyZWNhcHRjaGEnLCB0aGlzLnJlY2FwdGNoYUNvbnRyb2wpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5yZW1vdmVDb250cm9sKCdyZWNhcHRjaGEnKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWVsZHMuaW5jbHVkZXMoJ25hbWUnKSA/IHVzZXIubmFtZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTogZmllbGRzLmluY2x1ZGVzKCdwaG9uZScpID8gdXNlci5jb250YWN0cy5waG9uZS52YWx1ZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogZmllbGRzLmluY2x1ZGVzKCdlbWFpbCcpID8gdXNlci5jb250YWN0cy5lbWFpbC52YWx1ZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LvQtSDQstCy0L7QtNCwINC00LvRjyByZWNhcHRjaGEuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlY2FwdGNoYUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuXG4gICAgLyoqXG4gICAgICog0JPRgNGD0L/Qv9CwINC/0L7Qu9C10Lkg0LLQstC+0LTQsCDQtNC70Y8g0YTQvtGA0LzRiyDCq9Cf0L7QttC10LvQsNC90LjRjyDQuCDQv9GA0LXQtNC70L7QttC10L3QuNGPINC/0L4g0YPQu9GD0YfRiNC10L3QuNGOINGB0LDQudGC0LDCuy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCksXG4gICAgICAgIHBob25lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCksXG4gICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCksXG4gICAgICAgIG1lc3NhZ2U6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcbiAgICAgICAgZmlsZXM6IG5ldyBGb3JtQ29udHJvbDxTY1VwbG9hZGVkRmlsZVtdIHwgbnVsbD4oW10pLFxuICAgICAgICBpc1Nob3VsZFVzZU1lc3NlbmdlcjogbmV3IEZvcm1Db250cm9sPGJvb2xlYW4gfCBudWxsPihmYWxzZSksXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C10YDQtdGH0LjRgdC70LXQvdC40LUg0YLQuNC/0L7QsiDQv9C+0LTRgdC60LDQt9C+0LouXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN1Z2dlc3Rpb25UeXBlOiB0eXBlb2YgU2NJU3VnZ2VzdGlvblR5cGUgPSBTY0lTdWdnZXN0aW9uVHlwZTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBTdWJqZWN0fSDRgdC+0LHRi9GC0LjRjyDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uU3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQvdCwINC+0YLQv9GA0LDQstC60YMg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSByZXF1ZXN0JDogT2JzZXJ2YWJsZTx1bmRlZmluZWQgfCBudWxsPiA9IHRoaXMub25TdWJtaXQucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZm9ybS52YWxpZCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmZvcm0udmFsdWUgYXMgU2NJRmVlZGJhY2tNZXNzYWdlKSxcbiAgICAgICAgdGFwKCh2YWx1ZTogU2NJRmVlZGJhY2tNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUucGhvbmUgJiYgIVNjUGhvbmVTZXJ2aWNlLmlzVmFsaWRQaG9uZU51bWJlckZvck1lc3Nlbmdlcih2YWx1ZS5waG9uZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuaXNTaG91bGRVc2VNZXNzZW5nZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgdGhpcy5mZWVkYmFja1NlcnZpY2Uuc2VuZEZlZWRiYWNrKHRoaXMuc2x1ZygpIGFzIFNjRmVlZGJhY2tGb3JtcywgdGhpcy5jb252ZXJ0ZXJzU2VydmljZS5yZW1vdmVOdWxsUmVjdXJzaXZlKHZhbHVlKSkucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuY29tcGxldGVXaXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJlbW92ZUFsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kU3VjY2Vzcy5lbWl0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1pbXBsaWNpdC1hbnktY2F0Y2hcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycywgbWVzc2FnZSB9ID0gZXJyb3IuZXJyb3IgYXMgU2NJQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhlcnJvcnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2VjdXJpdHkvZGV0ZWN0LW9iamVjdC1pbmplY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoeyBzZXJ2ZXJSZXNwb25zZTogZXJyb3JzW2tleV0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBbbWVzc2FnZV0gfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdXNlbGVzcy11bmRlZmluZWRcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZSgpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQs9GA0YPQt9C60Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMucmVxdWVzdCQucGlwZShtYXAoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSk7XG5cbiAgICAvKipcbiAgICAgKiDQo9C/0YDQsNCy0LvRj9C10YIg0YHQvtGB0YLQvtGP0L3QuNC10Lwg0LfQsNCz0YDRg9C20LXQvdC90YvRhSDRhNCw0LnQu9C+0LIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvYWRlZEZpbGU6IEZvcm1Db250cm9sPFR1aUZpbGVMaWtlW10gfCBudWxsPiA9IG5ldyBGb3JtQ29udHJvbDxUdWlGaWxlTGlrZVtdIHwgbnVsbD4oW10sIFt0aGlzLm1heEZpbGVzTGVuZ3RoKCldKTtcblxuICAgIC8qKlxuICAgICAqIE9ic2VydmFibGUsINC60L7RgtC+0YDRi9C5INC+0YLRgdC70LXQttC40LLQsNC10YIsINC/0YDQuNC90Y/RgtGLINC70Lgg0YTQsNC50LvRiyDQsiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Lgg0YEg0YLRgNC10LHQvtCy0LDQvdC40Y/QvNC4INC/0L4g0YLQuNC/0YMg0YDQsNC30LzQtdGA0YMg0Lgg0YIu0LQuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjY2VwdGVkJDogT2JzZXJ2YWJsZTxGaWxlW10+ID0gdGhpcy5sb2FkZWRGaWxlLnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgoKSA9PiB0dWlGaWxlc0FjY2VwdGVkKHRoaXMubG9hZGVkRmlsZSkpKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRhNCw0LnQu9C+0LIsINC60L7RgtC+0YDRi9C1INCx0YvQu9C4INC+0YLQutC70L7QvdC10L3RiyDQv9GA0Lgg0LfQsNCz0YDRg9C30LrQtS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVqZWN0ZWQ6IHJlYWRvbmx5IEZpbGVbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YLRgNCw0L0uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvdW50cmllczogcmVhZG9ubHkgVHVpQ291bnRyeUlzb0NvZGVbXSA9IGdldENvdW50cmllcygpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0ZlZWRiYWNrRm9ybUNvbXBvbmVudH0uXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICog0K3RgtC+INGA0LXRiNC10L3QuNC1INC+0YjQuNCx0LrQuCAjNDk0MCwg0LHRi9C70L4gQHNlZSBb0L/RgNC10LTQu9C+0LbQtdC90L5dKGh0dHBzOi8vZ2l0aHViLmNvbS9EZXRoQXJpZWwvbmctcmVjYXB0Y2hhL2lzc3Vlcy8xMjMjaXNzdWVjb21tZW50LTQyNjExMjEwMSkg0LDQstGC0L7RgNC+0Lwge0BsaW5rIFJlY2FwdGNoYUNvbXBvbmVudH0uXG4gICAgICAgICAqL1xuICAgICAgICBSZWNhcHRjaGFDb21wb25lbnQucHJvdG90eXBlLm5nT25EZXN0cm95ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9kb3Qtbm90YXRpb25cbiAgICAgICAgICAgIGlmICh0aGlzWydzdWJzY3JpcHRpb24nXSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbCwgQHR5cGVzY3JpcHQtZXNsaW50L2RvdC1ub3RhdGlvblxuICAgICAgICAgICAgICAgIHRoaXNbJ3N1YnNjcmlwdGlvbiddLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICB0aGlzLmFjY2VwdGVkJCxcbiAgICAgICAgICAgIHRoaXMudXNlciQsXG4gICAgICAgICAgICB0aGlzLmxvYWRlZEZpbGUudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZmlsZXMucmVzZXQoW10pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uVXBsb2FkRmlsZShmaWxlcyk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgLy8g0JLQsNC70LjQtNCw0YbQuNGPINC/0L7Qu9C10Lkg0LLQstC+0LTQsCDQsiDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC4INC+0YIg0YTQvtGA0LzRiy5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBbGxWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICB0aGlzLnNldEFsbFZhbGlkYXRvcnModGhpcy5maWVsZHMoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINCy0LDQu9C40LTQsNGG0LjRjiDRgdC+INCy0YHQtdGFINC/0L7Qu9C10Lkg0LLQstC+0LTQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNsZWFyQWxsVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG5cbiAgICAgICAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wgIT09IHRoaXMucmVjYXB0Y2hhQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINCy0LDQu9C40LTQsNGG0LjRjiDRgdC+INC00LvRjyDRg9C60LDQt9Cw0L3QvdGL0YUg0L/QvtC70LXQuSDQstCy0L7QtNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpZWxkcyDQn9C+0LvRjywg0LTQu9GPINC60L7RgtC+0YDRi9GFINC90YPQttC90L4g0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LLQsNC70LjQtNCw0YbQuNGOLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0QWxsVmFsaWRhdG9ycyhmaWVsZHM6IFNjRmVlZGJhY2tGb3JtRmllbGRUeXBlW10pOiB2b2lkIHtcbiAgICAgICAgZmllbGRzLmZvckVhY2goKGZpbGVkOiBTY0ZlZWRiYWNrRm9ybUZpZWxkVHlwZSkgPT4ge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxuICAgICAgICAgICAgc3dpdGNoIChmaWxlZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCduYW1lJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3Bob25lJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncGhvbmUnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgcGhvbmVWYWxpZGF0b3IoKV0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2VtYWlsJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWVzc2FnZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ21lc3NhZ2UnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdmaWxlcyc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2ZpbGVzJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMubWF4RmlsZXNMZW5ndGgoNSldKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQsNGC0YvQstCw0LXRgiDQvtGC0LrQu9C+0L3QtdC90L3Ri9C1INGE0LDQudC70YsuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZXMg0KHQv9C40YHQvtC6INGE0LDQudC70L7Qsiwg0LrQvtGC0L7RgNGL0LUg0LHRi9C70Lgg0L7RgtC60LvQvtC90LXQvdGLLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblJlamVjdChmaWxlczogcmVhZG9ubHkgRmlsZVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVqZWN0ZWQgPSBbLi4ubmV3IFNldChbLi4udGhpcy5yZWplY3RlZCwgLi4uZmlsZXNdKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0YTQsNC50Lsg0LjQtyDRgdC/0LjRgdC60LAg0LfQsNCz0YDRg9C20LXQvdC90YvRhSDQuCDQvtGC0LrQu9C+0L3QtdC90L3Ri9GFINGE0LDQudC70L7Qsi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWxlINCk0LDQudC7LCDQutC+0YLQvtGA0YvQuSDQvdGD0LbQvdC+INGD0LTQsNC70LjRgtGMLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblJlbW92ZShmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVqZWN0ZWQgPSB0aGlzLnJlamVjdGVkLmZpbHRlcigocmVqZWN0ZWQpID0+IHJlamVjdGVkICE9PSBmaWxlKTtcbiAgICAgICAgdGhpcy5sb2FkZWRGaWxlLnNldFZhbHVlKHRoaXMubG9hZGVkRmlsZS52YWx1ZT8uZmlsdGVyKChjdXJyZW50KSA9PiBjdXJyZW50ICE9PSBmaWxlKSA/PyBbXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7Rh9C40YnQsNC10YIg0YHQv9C40YHQvtC6INGE0LDQudC70L7Qsi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25SZW1vdmVBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVqZWN0ZWQgPSBbXTtcbiAgICAgICAgdGhpcy5sb2FkZWRGaWxlLnNldFZhbHVlKFtdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0LPRgNGD0LbQsNC10YIg0YTQsNC50Lsg0LIg0YTQvtGA0LzRgyDQvtCx0YDQsNGC0L3QvtC5INGB0LLRj9C30LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZXMg0J3QsNCx0L7RgCDRhNCw0LnQu9C+0LIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBvblVwbG9hZEZpbGUoZmlsZXM6IFR1aUZpbGVMaWtlW10gfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGZpbGVzPy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVhZGVyLnJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWJhc2UtdG8tc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5maWxlcy5zZXRWYWx1ZShbLi4uKHRoaXMuZm9ybS5jb250cm9scy5maWxlcy52YWx1ZSA/PyBbXSksIG5ldyBTY1VwbG9hZGVkRmlsZShmaWxlLm5hbWUsIHJlYWRlci5yZXN1bHQudG9TdHJpbmcoKSldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSBhcyB1bmtub3duIGFzIEJsb2IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7QstC10YDRj9C10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0YTQsNC50LvQvtCyINC30LDQs9GA0YPQttC10L3QvdGL0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWF4TGVuZ3RoINC80LDQutGB0LjQvNCw0LvRjNC90L7QtSDQtNC+0L/Rg9GB0YLQuNC80L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRhNCw0LnQu9C+0LIg0LTQu9GPINC+0YLQv9GA0LDQstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBtYXhGaWxlc0xlbmd0aChtYXhMZW5ndGg6IG51bWJlciA9IHRoaXMubWF4RmlsZXNJbkZvcm0pOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoeyB2YWx1ZSB9OiBBYnN0cmFjdENvbnRyb2w8VHVpRmlsZUxpa2VbXT4pID0+XG4gICAgICAgICAgICB2YWx1ZS5sZW5ndGggPiBtYXhMZW5ndGggPyB7IG1heExlbmd0aDogbmV3IFR1aVZhbGlkYXRpb25FcnJvcihg0JzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INGE0LDQudC70L7QsiAtICR7bWF4TGVuZ3RofWApIH0gOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0YvQv9C+0LvQvdGP0LXRgiDQvtGH0LjRgdGC0LrRgyDQv9C+0LvQtdC5INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCh7XG4gICAgICAgICAgICBlbWFpbDogbnVsbCxcbiAgICAgICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgICAgICBwaG9uZTogbnVsbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgICAgICBmaWxlczogW10sXG4gICAgICAgICAgICBpc1Nob3VsZFVzZU1lc3NlbmdlcjogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQvtCy0LXRgNGP0LXRgiwg0YfRgtC+INC90L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsCDQv9C+0LTRhdC+0LTQuNGCINC00LvRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDQsiDQvNC10YHRgdC10L3QtNC20LXRgNCw0YUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUg0J3QvtC80LXRgCDRgtC10LvQtdGE0L7QvdCwLCDQutC+0YLQvtGA0YvQuSDQvdC10L7QsdGF0L7QtNC40LzQviDQv9GA0L7QstC10YDQuNGC0YwuXG4gICAgICogQHJldHVybnMg0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINGH0YLQviDQvdC+0LzQtdGAINGC0LXQu9C10YTQvtC90LAg0L/QvtC00YXQvtC00LjRgiDQtNC70Y8g0LzQtdGB0YHQtdC90LTQttC10YDQvtCyLlxuICAgICAqL1xuICAgIEB0dWlQdXJlXG4gICAgcHJvdGVjdGVkIGlzVmFsaWRQaG9uZU51bWJlckZvck1lc3Nlbmdlcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBTY1Bob25lU2VydmljZS5pc1ZhbGlkUGhvbmVOdW1iZXJGb3JNZXNzZW5nZXIodmFsdWUpO1xuICAgIH1cbn1cbiIsIkBsZXQgZmllbGRzTGlzdCA9IGZpZWxkcygpO1xuPGZvcm1cbiAgICAqbmdJZj1cImZpZWxkc0xpc3QubGVuZ3RoID4gMFwiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TdWJtaXQubmV4dCgpXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGdhcC00XCJcbj5cbiAgICA8IS0tINCk0JjQniAtLT5cbiAgICA8bGFiZWxcbiAgICAgICAgKm5nSWY9XCJmaWVsZHNMaXN0LmluY2x1ZGVzKCduYW1lJylcIlxuICAgICAgICB0dWlMYWJlbFxuICAgID5cbiAgICAgICAg0KTQmNCeXG4gICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiPiDQo9C60LDQttC40YLQtSDQktCw0YjQuCDQpC7QmC7Qni4gPC90dWktaW5wdXQ+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQotC10LvQtdGE0L7QvSAtLT5cbiAgICBAaWYgKGZpZWxkc0xpc3QuaW5jbHVkZXMoJ3Bob25lJykpIHtcbiAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAg0KLQtdC70LXRhNC+0L1cbiAgICAgICAgICAgIDx0dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiXG4gICAgICAgICAgICAgICAgICAgIHR1aUlucHV0UGhvbmVJbnRlcm5hdGlvbmFsXG4gICAgICAgICAgICAgICAgICAgIFtjb3VudHJ5U2VhcmNoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbY291bnRyaWVzXT1cIihjb3VudHJpZXMgfCB0dWlTb3J0Q291bnRyaWVzIHwgYXN5bmMpIHx8IFtdXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwicGhvbmVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L3R1aS10ZXh0ZmllbGQ+XG4gICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIlxuICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgKm5nSWY9XCJmaWVsZHNMaXN0LmluY2x1ZGVzKCdpc1Nob3VsZFVzZU1lc3NlbmdlcicpICYmIGZvcm0uY29udHJvbHMucGhvbmUudmFsdWUgJiYgaXNWYWxpZFBob25lTnVtYmVyRm9yTWVzc2VuZ2VyKGZvcm0uY29udHJvbHMucGhvbmUudmFsdWUpXCJcbiAgICAgICAgICAgIHR1aUxhYmVsXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlzU2hvdWxkVXNlTWVzc2VuZ2VyXCJcbiAgICAgICAgICAgICAgICB0dWlDaGVja2JveFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gdHVpVGl0bGU+INCd0LDQv9C40YHQsNGC0Ywg0LIg0LzQtdGB0YHQtdC90LTQttC10YDQsNGFLCDQsCDQvdC1INC30LLQvtC90LjRgtGMIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICB9XG4gICAgPCEtLSDQkNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiyAtLT5cbiAgICA8bGFiZWxcbiAgICAgICAgKm5nSWY9XCJmaWVsZHNMaXN0LmluY2x1ZGVzKCdlbWFpbCcpXCJcbiAgICAgICAgdHVpTGFiZWxcbiAgICA+XG4gICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIj5cbiAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLmVtYWlsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvdHVpLWlucHV0PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAvPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8IS0tINCa0L7QvNC80LXQvdGC0LDRgNC40LkgLS0+XG4gICAgPGxhYmVsXG4gICAgICAgICpuZ0lmPVwiZmllbGRzTGlzdC5pbmNsdWRlcygnbWVzc2FnZScpXCJcbiAgICAgICAgdHVpTGFiZWxcbiAgICA+XG4gICAgICAgINCa0L7QvNC80LXQvdGC0LDRgNC40LlcbiAgICAgICAgPHR1aS10ZXh0YXJlYSBmb3JtQ29udHJvbE5hbWU9XCJtZXNzYWdlXCI+INCa0L7QvNC80LXQvdGC0LDRgNC40LkgPC90dWktdGV4dGFyZWE+XG4gICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQpNCw0LnQu9GLIC0tPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJmaWVsZHNMaXN0LmluY2x1ZGVzKCdmaWxlcycpXCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCJcbiAgICA+XG4gICAgICAgIDxsYWJlbCB0dWlJbnB1dEZpbGVzPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI3ZhbGlkYXRvcj1cInR1aUlucHV0RmlsZXNWYWxpZGF0b3JcIlxuICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5kb2MsLmRvY3gsLnBkZixpbWFnZS8qXCJcbiAgICAgICAgICAgICAgICB0dWlJbnB1dEZpbGVzXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImxvYWRlZEZpbGVcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAocmVqZWN0KT1cIm9uUmVqZWN0KCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAqbmdJZj1cImxvYWRlZEZpbGUuaW52YWxpZFwiXG4gICAgICAgICAgICBbZXJyb3JdPVwiWydtYXhMZW5ndGgnXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwibG9hZGVkRmlsZVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgQGxldCBhY2NlcHRlZCA9IGFjY2VwdGVkJCB8IGFzeW5jO1xuICAgICAgICA8dHVpLWZpbGVzXG4gICAgICAgICAgICAqbmdJZj1cImFjY2VwdGVkPy5sZW5ndGggfHwgcmVqZWN0ZWQubGVuZ3RoXCJcbiAgICAgICAgICAgIGNsYXNzPVwidHVpLXNwYWNlX3RvcC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHR1aS1maWxlXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbGUgb2YgYWNjZXB0ZWRcIlxuICAgICAgICAgICAgICAgIFtmaWxlXT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIChyZW1vdmUpPVwib25SZW1vdmUoZmlsZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDx0dWktZmlsZVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWxlIG9mIHJlamVjdGVkXCJcbiAgICAgICAgICAgICAgICBzdGF0ZT1cImVycm9yXCJcbiAgICAgICAgICAgICAgICBbZmlsZV09XCIoZmlsZSB8IHR1aUZpbGVSZWplY3RlZDogdmFsaWRhdG9yIHwgYXN5bmMpIHx8IGZpbGVcIlxuICAgICAgICAgICAgICAgIChyZW1vdmUpPVwib25SZW1vdmUoZmlsZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC90dWktZmlsZXM+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIHJlY2FwdGNoYSAtLT5cbiAgICBAaWYgKGZvcm0uZ2V0KCdyZWNhcHRjaGEnKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1iLTMgbWF4LWgtMjAgb3ZlcmZsb3ctaGlkZGVuIGR1cmF0aW9uLTUwMFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICchbWF4LWgtMCAhLW0tMic6IGZvcm0uZ2V0KCdyZWNhcHRjaGEnKT8udmFsaWQgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxyZS1jYXB0Y2hhIGZvcm1Db250cm9sTmFtZT1cInJlY2FwdGNoYVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0g0K3Qu9C10LzQtdC90YLRiyDRg9C/0YDQsNCy0LvQtdC90LjRjyAgLS0+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiISEobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnNjLnNlbmRcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCe0YLQv9GA0LDQstC40YLRjFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyb3cgYmFzaXMtNjAgdGV4dC1ib2R5LXNcIj5cbiAgICAgICAgICAgINCd0LDQttC40LzQsNGPINC90LAg0LrQvdC+0L/QutGDLCDQstGLINGB0L7Qs9C70LDRiNCw0LXRgtC10YHRjCDRgVxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR1aUxpbmtcbiAgICAgICAgICAgICAgICBbcHNldWRvXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb250ZXh0Py5kYXRhPy5vbkNsaWNrT2ZmZXJIYW5kbGVyKCk7IGNsaWNrT2ZmZXIuZW1pdCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICDQn9C+0LvQuNGC0LjQutC+0Lkg0LrQvtC90YTQuNC00LXQvdGG0LjQsNC70YzQvdC+0YHRgtC4XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtZmVlZGJhY2stZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvZmVlZGJhY2svZmVlZGJhY2stZm9ybS9zYy1mZWVkYmFjay1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9mZWVkYmFjay9mZWVkYmFjay1mb3JtL3NjLWZlZWRiYWNrLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDZFQUE2RTtBQUU3RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUNuSixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUNILG1CQUFtQixFQUVuQixpQkFBaUIsRUFHakIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxjQUFjLEVBRWQsYUFBYSxHQUNoQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBaUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQW9CLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRSxPQUFP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OytHQXpVUSx1QkFBdUI7bUdBQXZCLHVCQUF1QiwrWkNwRXBDLG12TUFtS0EsdUNEeEhRLFNBQVMsNkNBQ1QsbUJBQW1CLGl6Q0FDbkIsT0FBTyxvRkFDUCxLQUFLLG1IQUNMLFFBQVEsb0VBQ1IsaUJBQWlCLHFEQUNqQixrQkFBa0IseUtBQ2xCLGNBQWMsa0xBQ2QsbUJBQW1CLCtCQUNuQixTQUFTLG9JQUNULGdCQUFnQix1SEFDaEIsUUFBUSw0REFDUix1QkFBdUIsNkRBQ3ZCLE9BQU8sNEZBQ1AsSUFBSSw0RkFDSixpQkFBaUIsNE9BQ2pCLFdBQVcsb0dBQ1gsUUFBUSxxcEJBRVIsMEJBQTBCLHFRQUUxQixvQkFBb0I7O0FBMlVkO0lBRFQsT0FBTzs2RUFHUDs0RkF6VVEsdUJBQXVCO2tCQTlCbkMsU0FBUztpQ0FDTSxJQUFJLFlBQ04sa0JBQWtCLFdBRW5CO3dCQUNMLFNBQVM7d0JBQ1QsbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLEtBQUs7d0JBQ0wsUUFBUTt3QkFDUixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixRQUFRO3dCQUNSLHVCQUF1Qjt3QkFDdkIsT0FBTzt3QkFDUCxJQUFJO3dCQUNKLGlCQUFpQjt3QkFDakIsV0FBVzt3QkFDWCxRQUFRO3dCQUNSLFFBQVE7d0JBQ1IsMEJBQTBCO3dCQUMxQixHQUFHLFlBQVk7d0JBQ2Ysb0JBQW9CO3FCQUN2QixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTt3REF5VXJDLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMsQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kICovXG5cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBJbnB1dFNpZ25hbCwgb3V0cHV0LCBPdXRwdXRFbWl0dGVyUmVmLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIFNjQ29udmVydGVyc1NlcnZpY2UsXG4gICAgU2NGZWVkYmFja0Zvcm1zLFxuICAgIFNjRmVlZGJhY2tTZXJ2aWNlLFxuICAgIFNjSUFwaUVycm9yUmVzcG9uc2UsXG4gICAgU2NJRmVlZGJhY2tNZXNzYWdlLFxuICAgIFNjSVN1Z2dlc3Rpb25UeXBlLFxuICAgIFNjUGhvbmVTZXJ2aWNlLFxuICAgIFNjVXBsb2FkZWRGaWxlLFxuICAgIFNjVXNlcixcbiAgICBTY1VzZXJTZXJ2aWNlLFxufSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aUxvb3NlVW5pb24sIHR1aVB1cmUsIFR1aVZhbGlkYXRpb25FcnJvciB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlEaWFsb2dDb250ZXh0LCBUdWlFcnJvciwgVHVpTGFiZWwsIFR1aUxpbmssIFR1aVRleHRmaWVsZCwgVHVpVGl0bGUgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlJbnB1dFBob25lSW50ZXJuYXRpb25hbCB9IGZyb20gJ0B0YWlnYS11aS9leHBlcmltZW50YWwnO1xuaW1wb3J0IHsgVHVpQ291bnRyeUlzb0NvZGUgfSBmcm9tICdAdGFpZ2EtdWkvaTE4bic7XG5pbXBvcnQgeyBUdWlCdXR0b25Mb2FkaW5nLCBUdWlDaGVja2JveCwgVHVpRmllbGRFcnJvclBpcGUsIFR1aUZpbGVMaWtlLCBUdWlGaWxlcywgdHVpRmlsZXNBY2NlcHRlZCwgVHVpU29ydENvdW50cmllc1BpcGUgfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IFR1aUlucHV0TW9kdWxlLCBUdWlJbnB1dFBob25lTW9kdWxlLCBUdWlUZXh0YXJlYU1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9sZWdhY3knO1xuaW1wb3J0IHsgUE9MWU1PUlBIRVVTX0NPTlRFWFQgfSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcbmltcG9ydCB7IGdldENvdW50cmllcyB9IGZyb20gJ2xpYnBob25lbnVtYmVyLWpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlLCBzdGFydFdpdGgsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjRm9ybUZpZWxkc01vZHVsZSB9IGZyb20gJy4uLy4uL2Zvcm0tZmllbGRzJztcbmltcG9ydCB7IE1BWF9GSUxFU19JTl9GT1JNX0lOUFVUIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3NjLW1heC1maWxlcy1pbi1mb3JtLWlucHV0JztcbmltcG9ydCB7IFNjU21hcnRDYXB0Y2hhQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc21hcnQtY2FwdGNoYS9zYy1zbWFydC1jYXB0Y2hhLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBwaG9uZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvc2MtcGhvbmUtdmFsaWRhdG9yJztcbmltcG9ydCB7IFNjRmVlZGJhY2tGb3JtQ29uZmlnLCBTY0ZlZWRiYWNrRm9ybUZpZWxkVHlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDRhNC+0YDQvNGLINC+0LHRgNCw0YLQvdC+0Lkg0YHQstGP0LfQuC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLWZlZWRiYWNrLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1mZWVkYmFjay1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIFR1aUVycm9yLFxuICAgICAgICBUdWlGaWVsZEVycm9yUGlwZSxcbiAgICAgICAgU2NGb3JtRmllbGRzTW9kdWxlLFxuICAgICAgICBUdWlJbnB1dE1vZHVsZSxcbiAgICAgICAgVHVpSW5wdXRQaG9uZU1vZHVsZSxcbiAgICAgICAgVHVpQnV0dG9uLFxuICAgICAgICBUdWlCdXR0b25Mb2FkaW5nLFxuICAgICAgICBUdWlMYWJlbCxcbiAgICAgICAgU2NTbWFydENhcHRjaGFDb21wb25lbnQsXG4gICAgICAgIFR1aUxpbmssXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFR1aVRleHRhcmVhTW9kdWxlLFxuICAgICAgICBUdWlDaGVja2JveCxcbiAgICAgICAgVHVpVGl0bGUsXG4gICAgICAgIFR1aUZpbGVzLFxuICAgICAgICBUdWlJbnB1dFBob25lSW50ZXJuYXRpb25hbCxcbiAgICAgICAgLi4uVHVpVGV4dGZpZWxkLFxuICAgICAgICBUdWlTb3J0Q291bnRyaWVzUGlwZSxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0ZlZWRiYWNrRm9ybUNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0JrQvtC90YLQtdC60YHRgiDQtNC40LDQu9C+0LPQvtCy0L7Qs9C+INC+0LrQvdCwLCDQsiDQutC+0YLQvtGA0L7QvCDQvtGC0LrRgNGL0YIg0LrQvtC80L/QvtC90LXQvdGCLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjb250ZXh0OiBUdWlEaWFsb2dDb250ZXh0PHZvaWQsIHsgb25DbGlja09mZmVySGFuZGxlcjogKCkgPT4gdm9pZCB9ICYgU2NGZWVkYmFja0Zvcm1Db25maWc+IHwgbnVsbCA9IGluamVjdDxcbiAgICAgICAgVHVpRGlhbG9nQ29udGV4dDx2b2lkLCB7IG9uQ2xpY2tPZmZlckhhbmRsZXI6ICgpID0+IHZvaWQgfSAmIFNjRmVlZGJhY2tGb3JtQ29uZmlnPlxuICAgID4oUE9MWU1PUlBIRVVTX0NPTlRFWFQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gICAgcHVibGljIHJlYWRvbmx5IHNsdWdJbnB1dDogSW5wdXRTaWduYWw8VHVpTG9vc2VVbmlvbjxTY0ZlZWRiYWNrRm9ybXM+PiA9IGlucHV0PFR1aUxvb3NlVW5pb248U2NGZWVkYmFja0Zvcm1zPj4oJ2NvbW1vbicsIHsgYWxpYXM6ICdzbHVnJyB9KTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQv9C+0LvQtdC5LCDQtNC+0YHRgtGD0L/QvdGL0YUg0LIg0LTQsNC90L3QvtC5INGE0L7RgNC80LUuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzSW5wdXQ6IElucHV0U2lnbmFsPFNjRmVlZGJhY2tGb3JtRmllbGRUeXBlW10+ID0gaW5wdXQ8U2NGZWVkYmFja0Zvcm1GaWVsZFR5cGVbXT4oWyduYW1lJywgJ2VtYWlsJywgJ3Bob25lJywgJ21lc3NhZ2UnLCAnZmlsZXMnXSwgeyBhbGlhczogJ2ZpZWxkcycgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzbHVnOiBTaWduYWw8VHVpTG9vc2VVbmlvbjxTY0ZlZWRiYWNrRm9ybXM+PiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29udGV4dD8uZGF0YS5zbHVnID8/IHRoaXMuc2x1Z0lucHV0KCkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INC/0L7Qu9C10LksINC00L7RgdGC0YPQv9C90YvRhSDQsiDQtNCw0L3QvdC+0Lkg0YTQvtGA0LzQtS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmllbGRzOiBTaWduYWw8U2NGZWVkYmFja0Zvcm1GaWVsZFR5cGVbXT4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbnRleHQ/LmRhdGEuZmllbGRzID8/IHRoaXMuZmllbGRzSW5wdXQoKSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LHRi9GC0LjQtSDQvdCw0LbQsNGC0LjRjyDQvdCwINC60L3QvtC/0LrRgyDQtNC+0LPQvtCy0L7RgNCwINC+0YTQtdGA0YLRiy5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY2xpY2tPZmZlcjogT3V0cHV0RW1pdHRlclJlZjx2b2lkPiA9IG91dHB1dCgpO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0YPRgdC/0LXRiNC90L7QuSDQvtGC0L/RgNCw0LLQutC4INGE0L7RgNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbmRTdWNjZXNzOiBPdXRwdXRFbWl0dGVyUmVmPHZvaWQ+ID0gb3V0cHV0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0L7QsdGA0LDRgtC90L7QuSDRgdCy0Y/Qt9C4LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmVlZGJhY2tTZXJ2aWNlOiBTY0ZlZWRiYWNrU2VydmljZSA9IGluamVjdChTY0ZlZWRiYWNrU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LrQvtC90LLQtdGA0YLQsNGG0LjQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb252ZXJ0ZXJzU2VydmljZTogU2NDb252ZXJ0ZXJzU2VydmljZSA9IGluamVjdChTY0NvbnZlcnRlcnNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRhNCw0LnQu9C+0LIsINC+0YLQv9GA0LDQstC70Y/QtdC80YvRhSDQsiDRhNC+0YDQvNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWF4RmlsZXNJbkZvcm06IG51bWJlciA9IGluamVjdChNQVhfRklMRVNfSU5fRk9STV9JTlBVVCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQsNC90L3Ri9GFINC+INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXIkOiBPYnNlcnZhYmxlPFNjVXNlcj4gPSBpbmplY3QoU2NVc2VyU2VydmljZSlcbiAgICAgICAgLmdldFVzZXJDaGFuZ2UkKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHVzZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXNlci5pc0d1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5hZGRDb250cm9sKCdyZWNhcHRjaGEnLCB0aGlzLnJlY2FwdGNoYUNvbnRyb2wpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmZvcm0gYXMgRm9ybUdyb3VwKS5yZW1vdmVDb250cm9sKCdyZWNhcHRjaGEnKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWVsZHMuaW5jbHVkZXMoJ25hbWUnKSA/IHVzZXIubmFtZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTogZmllbGRzLmluY2x1ZGVzKCdwaG9uZScpID8gdXNlci5jb250YWN0cy5waG9uZS52YWx1ZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogZmllbGRzLmluY2x1ZGVzKCdlbWFpbCcpID8gdXNlci5jb250YWN0cy5lbWFpbC52YWx1ZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LvQtSDQstCy0L7QtNCwINGC0L7QutC10L3QsCDQutCw0L/Rh9C4LCDQuNC80Y8gYHJlY2FwdGNoYWAg0LfQsNC00LDQvdC+IEFQSS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVjYXB0Y2hhQ29udHJvbDogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4gPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cbiAgICAvKipcbiAgICAgKiDQk9GA0YPQv9C/0LAg0L/QvtC70LXQuSDQstCy0L7QtNCwINC00LvRjyDRhNC+0YDQvNGLIMKr0J/QvtC20LXQu9Cw0L3QuNGPINC4INC/0YDQtdC00LvQvtC20LXQvdC40Y8g0L/QviDRg9C70YPRh9GI0LXQvdC40Y4g0YHQsNC50YLQsMK7LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcbiAgICAgICAgcGhvbmU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcbiAgICAgICAgZW1haWw6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKSxcbiAgICAgICAgbWVzc2FnZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpLFxuICAgICAgICBmaWxlczogbmV3IEZvcm1Db250cm9sPFNjVXBsb2FkZWRGaWxlW10gfCBudWxsPihbXSksXG4gICAgICAgIGlzU2hvdWxkVXNlTWVzc2VuZ2VyOiBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbiB8IG51bGw+KGZhbHNlKSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10YfQuNGB0LvQtdC90LjQtSDRgtC40L/QvtCyINC/0L7QtNGB0LrQsNC30L7Qui5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3VnZ2VzdGlvblR5cGU6IHR5cGVvZiBTY0lTdWdnZXN0aW9uVHlwZSA9IFNjSVN1Z2dlc3Rpb25UeXBlO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb25TdWJtaXQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINC90LAg0L7RgtC/0YDQsNCy0LrRgyDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlcXVlc3QkOiBPYnNlcnZhYmxlPHVuZGVmaW5lZCB8IG51bGw+ID0gdGhpcy5vblN1Ym1pdC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5mb3JtLnZhbGlkKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZm9ybS52YWx1ZSBhcyBTY0lGZWVkYmFja01lc3NhZ2UpLFxuICAgICAgICB0YXAoKHZhbHVlOiBTY0lGZWVkYmFja01lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5waG9uZSAmJiAhU2NQaG9uZVNlcnZpY2UuaXNWYWxpZFBob25lTnVtYmVyRm9yTWVzc2VuZ2VyKHZhbHVlLnBob25lKSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZS5pc1Nob3VsZFVzZU1lc3NlbmdlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgodmFsdWUpID0+XG4gICAgICAgICAgICB0aGlzLmZlZWRiYWNrU2VydmljZS5zZW5kRmVlZGJhY2sodGhpcy5zbHVnKCkgYXMgU2NGZWVkYmFja0Zvcm1zLCB0aGlzLmNvbnZlcnRlcnNTZXJ2aWNlLnJlbW92ZU51bGxSZWN1cnNpdmUodmFsdWUpKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5jb21wbGV0ZVdpdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVtb3ZlQWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRTdWNjZXNzLmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByeGpzL25vLWltcGxpY2l0LWFueS1jYXRjaFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyDQotC+0LrQtdC9INC60LDQv9GH0Lgg0L7QtNC90L7RgNCw0LfQvtCy0YvQuTog0LTQu9GPINC/0L7QstGC0L7RgNC90L7QuSDQvtGC0L/RgNCw0LLQutC4INC90YPQttC90LAg0L3QvtCy0LDRjyDQv9GA0L7QstC10YDQutCwLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FwdGNoYUNvbnRyb2wucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycywgbWVzc2FnZSB9ID0gKGVycm9yLmVycm9yID8/IHt9KSBhcyBTY0lBcGlFcnJvclJlc3BvbnNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBlcnJvcnNba2V5XSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IFttZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC40LfQvNC10L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LfQsNCz0YDRg9C30LrQuCDQtNCw0L3QvdGL0YUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5yZXF1ZXN0JC5waXBlKG1hcCgodmFsdWUpID0+IHZhbHVlID09PSB1bmRlZmluZWQpKTtcblxuICAgIC8qKlxuICAgICAqINCj0L/RgNCw0LLQu9GP0LXRgiDRgdC+0YHRgtC+0Y/QvdC40LXQvCDQt9Cw0LPRgNGD0LbQtdC90L3Ri9GFINGE0LDQudC70L7Qsi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9hZGVkRmlsZTogRm9ybUNvbnRyb2w8VHVpRmlsZUxpa2VbXSB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPFR1aUZpbGVMaWtlW10gfCBudWxsPihbXSwgW3RoaXMubWF4RmlsZXNMZW5ndGgoKV0pO1xuXG4gICAgLyoqXG4gICAgICogT2JzZXJ2YWJsZSwg0LrQvtGC0L7RgNGL0Lkg0L7RgtGB0LvQtdC20LjQstCw0LXRgiwg0L/RgNC40L3Rj9GC0Ysg0LvQuCDRhNCw0LnQu9GLINCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQuCDRgSDRgtGA0LXQsdC+0LLQsNC90LjRj9C80Lgg0L/QviDRgtC40L/RgyDRgNCw0LfQvNC10YDRgyDQuCDRgi7QtC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWNjZXB0ZWQkOiBPYnNlcnZhYmxlPEZpbGVbXT4gPSB0aGlzLmxvYWRlZEZpbGUudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCgpID0+IHR1aUZpbGVzQWNjZXB0ZWQodGhpcy5sb2FkZWRGaWxlKSkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGE0LDQudC70L7Qsiwg0LrQvtGC0L7RgNGL0LUg0LHRi9C70Lgg0L7RgtC60LvQvtC90LXQvdGLINC/0YDQuCDQt9Cw0LPRgNGD0LfQutC1LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWplY3RlZDogcmVhZG9ubHkgRmlsZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YHRgtGA0LDQvS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY291bnRyaWVzOiByZWFkb25seSBUdWlDb3VudHJ5SXNvQ29kZVtdID0gZ2V0Q291bnRyaWVzKCk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LDQu9C40LfQuNGA0YPQtdGCINGN0LrQt9C10LzQv9C70Y/RgCDQutC70LDRgdGB0LAge0BsaW5rIFNjRmVlZGJhY2tGb3JtQ29tcG9uZW50fS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgdGhpcy5hY2NlcHRlZCQsXG4gICAgICAgICAgICB0aGlzLnVzZXIkLFxuICAgICAgICAgICAgdGhpcy5sb2FkZWRGaWxlLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLmZpbGVzLnJlc2V0KFtdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblVwbG9hZEZpbGUoZmlsZXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIC8vINCS0LDQu9C40LTQsNGG0LjRjyDQv9C+0LvQtdC5INCy0LLQvtC00LAg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINGE0L7RgNC80YsuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQWxsVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBbGxWYWxpZGF0b3JzKHRoaXMuZmllbGRzKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDQstCw0LvQuNC00LDRhtC40Y4g0YHQviDQstGB0LXRhSDQv9C+0LvQtdC5INCy0LLQvtC00LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjbGVhckFsbFZhbGlkYXRvcnMoKTogdm9pZCB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybS5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChrZXkpO1xuXG4gICAgICAgICAgICBpZiAoY29udHJvbCAmJiBjb250cm9sICE9PSB0aGlzLnJlY2FwdGNoYUNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9GB0YLQsNC90LDQstC70LjQstCw0LXRgiDQstCw0LvQuNC00LDRhtC40Y4g0YHQviDQtNC70Y8g0YPQutCw0LfQsNC90L3Ri9GFINC/0L7Qu9C10Lkg0LLQstC+0LTQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmaWVsZHMg0J/QvtC70Y8sINC00LvRjyDQutC+0YLQvtGA0YvRhSDQvdGD0LbQvdC+INGD0YHRgtCw0L3QvtCy0LjRgtGMINCy0LDQu9C40LTQsNGG0LjRji5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEFsbFZhbGlkYXRvcnMoZmllbGRzOiBTY0ZlZWRiYWNrRm9ybUZpZWxkVHlwZVtdKTogdm9pZCB7XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWxlZDogU2NGZWVkYmFja0Zvcm1GaWVsZFR5cGUpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICAgICAgICAgIHN3aXRjaCAoZmlsZWQpIHtcbiAgICAgICAgICAgICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnbmFtZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKV0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdwaG9uZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3Bob25lJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHBob25lVmFsaWRhdG9yKCldKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdlbWFpbCcpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ21lc3NhZ2UnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdtZXNzYWdlJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZmlsZXMnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdmaWxlcycpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLm1heEZpbGVzTGVuZ3RoKDUpXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0LDRgtGL0LLQsNC10YIg0L7RgtC60LvQvtC90LXQvdC90YvQtSDRhNCw0LnQu9GLLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbGVzINCh0L/QuNGB0L7QuiDRhNCw0LnQu9C+0LIsINC60L7RgtC+0YDRi9C1INCx0YvQu9C4INC+0YLQutC70L7QvdC10L3Riy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25SZWplY3QoZmlsZXM6IHJlYWRvbmx5IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlamVjdGVkID0gWy4uLm5ldyBTZXQoWy4uLnRoaXMucmVqZWN0ZWQsIC4uLmZpbGVzXSldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINGE0LDQudC7INC40Lcg0YHQv9C40YHQutCwINC30LDQs9GA0YPQttC10L3QvdGL0YUg0Lgg0L7RgtC60LvQvtC90LXQvdC90YvRhSDRhNCw0LnQu9C+0LIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZmlsZSDQpNCw0LnQuywg0LrQvtGC0L7RgNGL0Lkg0L3Rg9C20L3QviDRg9C00LDQu9C40YLRjC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25SZW1vdmUoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlamVjdGVkID0gdGhpcy5yZWplY3RlZC5maWx0ZXIoKHJlamVjdGVkKSA9PiByZWplY3RlZCAhPT0gZmlsZSk7XG4gICAgICAgIHRoaXMubG9hZGVkRmlsZS5zZXRWYWx1ZSh0aGlzLmxvYWRlZEZpbGUudmFsdWU/LmZpbHRlcigoY3VycmVudCkgPT4gY3VycmVudCAhPT0gZmlsZSkgPz8gW10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YfQuNGJ0LDQtdGCINGB0L/QuNGB0L7QuiDRhNCw0LnQu9C+0LIuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uUmVtb3ZlQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlamVjdGVkID0gW107XG4gICAgICAgIHRoaXMubG9hZGVkRmlsZS5zZXRWYWx1ZShbXSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JfQsNCz0YDRg9C20LDQtdGCINGE0LDQudC7INCyINGE0L7RgNC80YMg0L7QsdGA0LDRgtC90L7QuSDRgdCy0Y/Qt9C4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGZpbGVzINCd0LDQsdC+0YAg0YTQsNC50LvQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgb25VcGxvYWRGaWxlKGZpbGVzOiBUdWlGaWxlTGlrZVtdIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBmaWxlcz8uZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgICAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlYWRlci5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1iYXNlLXRvLXN0cmluZ1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuZmlsZXMuc2V0VmFsdWUoWy4uLih0aGlzLmZvcm0uY29udHJvbHMuZmlsZXMudmFsdWUgPz8gW10pLCBuZXcgU2NVcGxvYWRlZEZpbGUoZmlsZS5uYW1lLCByZWFkZXIucmVzdWx0LnRvU3RyaW5nKCkpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUgYXMgdW5rbm93biBhcyBCbG9iKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC+0LLQtdGA0Y/QtdGCINC60L7Qu9C40YfQtdGB0YLQstC+INGE0LDQudC70L7QsiDQt9Cw0LPRgNGD0LbQtdC90L3Ri9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC8LlxuICAgICAqXG4gICAgICogQHBhcmFtIG1heExlbmd0aCDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LTQvtC/0YPRgdGC0LjQvNC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YTQsNC50LvQvtCyINC00LvRjyDQvtGC0L/RgNCw0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgbWF4RmlsZXNMZW5ndGgobWF4TGVuZ3RoOiBudW1iZXIgPSB0aGlzLm1heEZpbGVzSW5Gb3JtKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKHsgdmFsdWUgfTogQWJzdHJhY3RDb250cm9sPFR1aUZpbGVMaWtlW10+KSA9PlxuICAgICAgICAgICAgdmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoID8geyBtYXhMZW5ndGg6IG5ldyBUdWlWYWxpZGF0aW9uRXJyb3IoYNCc0LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRhNCw0LnQu9C+0LIgLSAke21heExlbmd0aH1gKSB9IDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktGL0L/QvtC70L3Rj9C10YIg0L7Rh9C40YHRgtC60YMg0L/QvtC70LXQuSDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXQoe1xuICAgICAgICAgICAgZW1haWw6IG51bGwsXG4gICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICAgICAgcGhvbmU6IG51bGwsXG4gICAgICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICAgICAgZmlsZXM6IFtdLFxuICAgICAgICAgICAgaXNTaG91bGRVc2VNZXNzZW5nZXI6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7QstC10YDRj9C10YIsINGH0YLQviDQvdC+0LzQtdGAINGC0LXQu9C10YTQvtC90LAg0L/QvtC00YXQvtC00LjRgiDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0LIg0LzQtdGB0YHQtdC90LTQttC10YDQsNGFLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlINCd0L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsCwg0LrQvtGC0L7RgNGL0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0L/RgNC+0LLQtdGA0LjRgtGMLlxuICAgICAqIEByZXR1cm5zINCf0YDQuNC30L3QsNC6INGC0L7Qs9C+LCDRh9GC0L4g0L3QvtC80LXRgCDRgtC10LvQtdGE0L7QvdCwINC/0L7QtNGF0L7QtNC40YIg0LTQu9GPINC80LXRgdGB0LXQvdC00LbQtdGA0L7Qsi5cbiAgICAgKi9cbiAgICBAdHVpUHVyZVxuICAgIHByb3RlY3RlZCBpc1ZhbGlkUGhvbmVOdW1iZXJGb3JNZXNzZW5nZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gU2NQaG9uZVNlcnZpY2UuaXNWYWxpZFBob25lTnVtYmVyRm9yTWVzc2VuZ2VyKHZhbHVlKTtcbiAgICB9XG59XG4iLCJAbGV0IGZpZWxkc0xpc3QgPSBmaWVsZHMoKTtcbjxmb3JtXG4gICAgKm5nSWY9XCJmaWVsZHNMaXN0Lmxlbmd0aCA+IDBcIlxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgKG5nU3VibWl0KT1cIm9uU3VibWl0Lm5leHQoKVwiXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiXG4+XG4gICAgPCEtLSDQpNCY0J4gLS0+XG4gICAgPGxhYmVsXG4gICAgICAgICpuZ0lmPVwiZmllbGRzTGlzdC5pbmNsdWRlcygnbmFtZScpXCJcbiAgICAgICAgdHVpTGFiZWxcbiAgICA+XG4gICAgICAgINCk0JjQnlxuICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj4g0KPQutCw0LbQuNGC0LUg0JLQsNGI0Lgg0KQu0Jgu0J4uIDwvdHVpLWlucHV0PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgIC8+XG4gICAgPC9sYWJlbD5cblxuICAgIDwhLS0g0KLQtdC70LXRhNC+0L0gLS0+XG4gICAgQGlmIChmaWVsZHNMaXN0LmluY2x1ZGVzKCdwaG9uZScpKSB7XG4gICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgINCi0LXQu9C10YTQvtC9XG4gICAgICAgICAgICA8dHVpLXRleHRmaWVsZD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICB0dWlJbnB1dFBob25lSW50ZXJuYXRpb25hbFxuICAgICAgICAgICAgICAgICAgICBbY291bnRyeVNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvdW50cmllc109XCIoY291bnRyaWVzIHwgdHVpU29ydENvdW50cmllcyB8IGFzeW5jKSB8fCBbXVwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cInBob25lXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC90dWktdGV4dGZpZWxkPlxuICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBob25lXCJcbiAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICpuZ0lmPVwiZmllbGRzTGlzdC5pbmNsdWRlcygnaXNTaG91bGRVc2VNZXNzZW5nZXInKSAmJiBmb3JtLmNvbnRyb2xzLnBob25lLnZhbHVlICYmIGlzVmFsaWRQaG9uZU51bWJlckZvck1lc3Nlbmdlcihmb3JtLmNvbnRyb2xzLnBob25lLnZhbHVlKVwiXG4gICAgICAgICAgICB0dWlMYWJlbFxuICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpc1Nob3VsZFVzZU1lc3NlbmdlclwiXG4gICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIHR1aVRpdGxlPiDQndCw0L/QuNGB0LDRgtGMINCyINC80LXRgdGB0LXQvdC00LbQtdGA0LDRhSwg0LAg0L3QtSDQt9Cy0L7QvdC40YLRjCA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgfVxuICAgIDwhLS0g0JDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YsgLS0+XG4gICAgPGxhYmVsXG4gICAgICAgICpuZ0lmPVwiZmllbGRzTGlzdC5pbmNsdWRlcygnZW1haWwnKVwiXG4gICAgICAgIHR1aUxhYmVsXG4gICAgPlxuICAgICAgICDQkNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRi1xuICAgICAgICA8dHVpLWlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCI+XG4gICAgICAgICAgICDQkNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRi1xuICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAqdHVpRGF0YUxpc3RcbiAgICAgICAgICAgICAgICBbdHlwZV09XCJzdWdnZXN0aW9uVHlwZS5lbWFpbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgLz5cbiAgICA8L2xhYmVsPlxuXG4gICAgPCEtLSDQmtC+0LzQvNC10L3RgtCw0YDQuNC5IC0tPlxuICAgIDxsYWJlbFxuICAgICAgICAqbmdJZj1cImZpZWxkc0xpc3QuaW5jbHVkZXMoJ21lc3NhZ2UnKVwiXG4gICAgICAgIHR1aUxhYmVsXG4gICAgPlxuICAgICAgICDQmtC+0LzQvNC10L3RgtCw0YDQuNC5XG4gICAgICAgIDx0dWktdGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPVwibWVzc2FnZVwiPiDQmtC+0LzQvNC10L3RgtCw0YDQuNC5IDwvdHVpLXRleHRhcmVhPlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtZXNzYWdlXCJcbiAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgIC8+XG4gICAgPC9sYWJlbD5cblxuICAgIDwhLS0g0KTQsNC50LvRiyAtLT5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiZmllbGRzTGlzdC5pbmNsdWRlcygnZmlsZXMnKVwiXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiXG4gICAgPlxuICAgICAgICA8bGFiZWwgdHVpSW5wdXRGaWxlcz5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICN2YWxpZGF0b3I9XCJ0dWlJbnB1dEZpbGVzVmFsaWRhdG9yXCJcbiAgICAgICAgICAgICAgICBhY2NlcHQ9XCIuZG9jLC5kb2N4LC5wZGYsaW1hZ2UvKlwiXG4gICAgICAgICAgICAgICAgdHVpSW5wdXRGaWxlc1xuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJsb2FkZWRGaWxlXCJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKHJlamVjdCk9XCJvblJlamVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgKm5nSWY9XCJsb2FkZWRGaWxlLmludmFsaWRcIlxuICAgICAgICAgICAgW2Vycm9yXT1cIlsnbWF4TGVuZ3RoJ10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImxvYWRlZEZpbGVcIlxuICAgICAgICAvPlxuXG4gICAgICAgIEBsZXQgYWNjZXB0ZWQgPSBhY2NlcHRlZCQgfCBhc3luYztcbiAgICAgICAgPHR1aS1maWxlc1xuICAgICAgICAgICAgKm5nSWY9XCJhY2NlcHRlZD8ubGVuZ3RoIHx8IHJlamVjdGVkLmxlbmd0aFwiXG4gICAgICAgICAgICBjbGFzcz1cInR1aS1zcGFjZV90b3AtMVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx0dWktZmlsZVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWxlIG9mIGFjY2VwdGVkXCJcbiAgICAgICAgICAgICAgICBbZmlsZV09XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlKT1cIm9uUmVtb3ZlKGZpbGUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8dHVpLWZpbGVcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsZSBvZiByZWplY3RlZFwiXG4gICAgICAgICAgICAgICAgc3RhdGU9XCJlcnJvclwiXG4gICAgICAgICAgICAgICAgW2ZpbGVdPVwiKGZpbGUgfCB0dWlGaWxlUmVqZWN0ZWQ6IHZhbGlkYXRvciB8IGFzeW5jKSB8fCBmaWxlXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlKT1cIm9uUmVtb3ZlKGZpbGUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvdHVpLWZpbGVzPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSDQmtCw0L/Rh9CwIC0tPlxuICAgIEBpZiAoZm9ybS5nZXQoJ3JlY2FwdGNoYScpOyBhcyByZWNhcHRjaGEpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtYi0zIG1heC1oLVs3LjVyZW1dIG92ZXJmbG93LWhpZGRlbiBkdXJhdGlvbi01MDBcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnIW1heC1oLTAgIS1tLTInOiByZWNhcHRjaGEudmFsaWQgfVwiXG4gICAgICAgICAgICBbYXR0ci5pbmVydF09XCJyZWNhcHRjaGEudmFsaWQgPyAnJyA6IG51bGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c2Mtc21hcnQtY2FwdGNoYSBmb3JtQ29udHJvbE5hbWU9XCJyZWNhcHRjaGFcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChyZWNhcHRjaGEuZ2V0RXJyb3IoJ3NlcnZlclJlc3BvbnNlJyk7IGFzIHNlcnZlckVycm9ycykge1xuICAgICAgICAgICAgPHR1aS1lcnJvciBbZXJyb3JdPVwic2VydmVyRXJyb3JzLmpvaW4oJyAnKVwiIC8+XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICA8IS0tINCt0LvQtdC80LXQvdGC0Ysg0YPQv9GA0LDQstC70LXQvdC40Y8gIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cIiEhKGxvYWRpbmckIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5zYy5zZW5kXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZi1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQntGC0L/RgNCw0LLQuNGC0YxcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm93IGJhc2lzLTYwIHRleHQtYm9keS1zXCI+XG4gICAgICAgICAgICDQndCw0LbQuNC80LDRjyDQvdCwINC60L3QvtC/0LrRgywg0LLRiyDRgdC+0LPQu9Cw0YjQsNC10YLQtdGB0Ywg0YFcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICAgICAgW3BzZXVkb109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29udGV4dD8uZGF0YT8ub25DbGlja09mZmVySGFuZGxlcigpOyBjbGlja09mZmVyLmVtaXQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAg0J/QvtC70LjRgtC40LrQvtC5INC60L7QvdGE0LjQtNC10L3RhtC40LDQu9GM0L3QvtGB0YLQuFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9mb3JtPlxuIl19
@@ -13,5 +13,4 @@ export * from './sc-notify-when-in-stock-required-fields';
13
13
  export * from './sc-banner-duration';
14
14
  export * from './sc-debounce-time-default';
15
15
  export * from './sc-hidden-print-elements.token';
16
- export * from './cleanup-recaptcha-artifacts';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjLXZlcmlmaWNhdGlvbi1jb2RlLXRpbWVvdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1kaWFsb2ctc2VydmljZS5wcm92aWRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1hbGxvdy1zZWxlY3QtdGVybWluYXRlZCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWhlbHAtbm90aWZpY2F0aW9uLWxpbWl0JztcbmV4cG9ydCAqIGZyb20gJy4vc2MtaGVscC1ub3RpZmljYXRpb24tY2xvc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1tYXgtZmlsZXMtaW4tZm9ybS1pbnB1dCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLXBhZ2Utc2l6ZS1vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtY291bnRyeS1pZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy11c2VyLXByb3ZpZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWRhdGUtZm9ybWF0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtZGF0ZS12YWx1ZS10cmFuc2Zvcm1lcic7XG5leHBvcnQgKiBmcm9tICcuL3NjLW5vdGlmeS13aGVuLWluLXN0b2NrLXJlcXVpcmVkLWZpZWxkcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWJhbm5lci1kdXJhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3NjLWRlYm91bmNlLXRpbWUtZGVmYXVsdCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWhpZGRlbi1wcmludC1lbGVtZW50cy50b2tlbic7XG5leHBvcnQgKiBmcm9tICcuL2NsZWFudXAtcmVjYXB0Y2hhLWFydGlmYWN0cyc7XG4iXX0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zYy12ZXJpZmljYXRpb24tY29kZS10aW1lb3V0JztcbmV4cG9ydCAqIGZyb20gJy4vc2MtZGlhbG9nLXNlcnZpY2UucHJvdmlkZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtYWxsb3ctc2VsZWN0LXRlcm1pbmF0ZWQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1oZWxwLW5vdGlmaWNhdGlvbi1saW1pdCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWhlbHAtbm90aWZpY2F0aW9uLWNsb3NlJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtbWF4LWZpbGVzLWluLWZvcm0taW5wdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1wYWdlLXNpemUtb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWNvdW50cnktaWRzJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtdXNlci1wcm92aWRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1kYXRlLWZvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL3NjLWRhdGUtdmFsdWUtdHJhbnNmb3JtZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1ub3RpZnktd2hlbi1pbi1zdG9jay1yZXF1aXJlZC1maWVsZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1iYW5uZXItZHVyYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1kZWJvdW5jZS10aW1lLWRlZmF1bHQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1oaWRkZW4tcHJpbnQtZWxlbWVudHMudG9rZW4nO1xuIl19
@@ -29,8 +29,9 @@ export * from './providers';
29
29
  export * from './feedback';
30
30
  export * from './qrcode';
31
31
  export * from './share';
32
+ export * from './smart-captcha';
32
33
  export * from './user';
33
34
  export * from './validators';
34
35
  export * from './verification';
35
36
  export * from './profile';
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9hdXRoJztcbmV4cG9ydCAqIGZyb20gJy4vYWNjb3JkaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vYmFubmVyJztcbmV4cG9ydCAqIGZyb20gJy4vY2FydCc7XG5leHBvcnQgKiBmcm9tICcuL2NhdGFsb2cnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWd1cmF0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhZ2VudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250YWN0cyc7XG5leHBvcnQgKiBmcm9tICcuL2RlbGl2ZXJ5LWFkZHJlc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsb2dzJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9yLWhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlcyc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZmllbGRzJztcbmV4cG9ydCAqIGZyb20gJy4vaWNvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9icmFuZHMtbGlzdCc7XG5leHBvcnQgKiBmcm9tICcuL25ld3MnO1xuZXhwb3J0ICogZnJvbSAnLi9ub2luZGV4LXdyYXBwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9vcmRlcic7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vcGFnaW5hdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc2FtcGxlcyc7XG5leHBvcnQgKiBmcm9tICcuL21ldGhvZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9mZWVkYmFjayc7XG5leHBvcnQgKiBmcm9tICcuL3FyY29kZSc7XG5leHBvcnQgKiBmcm9tICcuL3NoYXJlJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcic7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9maWxlJztcbiJdfQ==
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2F1dGgnO1xuZXhwb3J0ICogZnJvbSAnLi9hY2NvcmRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9iYW5uZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jYXJ0JztcbmV4cG9ydCAqIGZyb20gJy4vY2F0YWxvZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZ3VyYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmFnZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRhY3RzJztcbmV4cG9ydCAqIGZyb20gJy4vZGVsaXZlcnktYWRkcmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxvZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3ItaGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGVzJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1maWVsZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pY29ucyc7XG5leHBvcnQgKiBmcm9tICcuL2xvYWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2JyYW5kcy1saXN0JztcbmV4cG9ydCAqIGZyb20gJy4vbmV3cyc7XG5leHBvcnQgKiBmcm9tICcuL25vaW5kZXgtd3JhcHBlcic7XG5leHBvcnQgKiBmcm9tICcuL29yZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vcGFnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYW1wbGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbWV0aG9kcyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2ZlZWRiYWNrJztcbmV4cG9ydCAqIGZyb20gJy4vcXJjb2RlJztcbmV4cG9ydCAqIGZyb20gJy4vc2hhcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zbWFydC1jYXB0Y2hhJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcic7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9maWxlJztcbiJdfQ==
@@ -5,7 +5,6 @@ import { TuiHovered } from '@taiga-ui/cdk';
5
5
  import { TuiButton, TuiError, TuiLabel } from '@taiga-ui/core';
6
6
  import { TuiAvatar, TuiButtonLoading, TuiCarousel, TuiFieldErrorPipe } from '@taiga-ui/kit';
7
7
  import { TuiInputModule, TuiInputPhoneModule } from '@taiga-ui/legacy';
8
- import { RecaptchaFormsModule, RecaptchaModule } from 'ng-recaptcha-2';
9
8
  import { ScFormFieldsModule } from '../form-fields';
10
9
  import { ScPreviewSampleComponent } from './preview-sample/sc-preview-sample.component';
11
10
  import * as i0 from "@angular/core";
@@ -26,18 +25,14 @@ export class ScPreviewSampleModule {
26
25
  TuiHovered,
27
26
  TuiButton,
28
27
  TuiButtonLoading,
29
- TuiLabel,
30
- RecaptchaFormsModule,
31
- RecaptchaModule], exports: [ScPreviewSampleComponent] }); }
28
+ TuiLabel], exports: [ScPreviewSampleComponent] }); }
32
29
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPreviewSampleModule, imports: [CommonModule,
33
30
  ReactiveFormsModule,
34
31
  TuiError,
35
32
  ScFormFieldsModule,
36
33
  TuiInputModule,
37
34
  TuiInputPhoneModule, i2.TuiCarouselComponent, TuiAvatar,
38
- TuiButtonLoading,
39
- RecaptchaFormsModule,
40
- RecaptchaModule] }); }
35
+ TuiButtonLoading] }); }
41
36
  }
42
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPreviewSampleModule, decorators: [{
43
38
  type: NgModule,
@@ -57,10 +52,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
57
52
  TuiButton,
58
53
  TuiButtonLoading,
59
54
  TuiLabel,
60
- RecaptchaFormsModule,
61
- RecaptchaModule,
62
55
  ],
63
56
  exports: [ScPreviewSampleComponent],
64
57
  }]
65
58
  }] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2FtcGxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zYW1wbGVzL3NjLXNhbXBsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7O0FBRXhGOztHQUVHO0FBc0JILE1BQU0sT0FBTyxxQkFBcUI7K0dBQXJCLHFCQUFxQjtnSEFBckIscUJBQXFCLGlCQXBCZix3QkFBd0IsYUFFbkMsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixRQUFRO1lBQ1IsaUJBQWlCO1lBQ2pCLGtCQUFrQjtZQUNsQixjQUFjO1lBQ2QsbUJBQW1CLHVJQUVuQixTQUFTO1lBQ1QsVUFBVTtZQUNWLFNBQVM7WUFDVCxnQkFBZ0I7WUFDaEIsUUFBUTtZQUNSLG9CQUFvQjtZQUNwQixlQUFlLGFBRVQsd0JBQXdCO2dIQUV6QixxQkFBcUIsWUFsQjFCLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsUUFBUTtZQUVSLGtCQUFrQjtZQUNsQixjQUFjO1lBQ2QsbUJBQW1CLDJCQUVuQixTQUFTO1lBR1QsZ0JBQWdCO1lBRWhCLG9CQUFvQjtZQUNwQixlQUFlOzs0RkFJVixxQkFBcUI7a0JBckJqQyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUN4QyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFFBQVE7d0JBQ1IsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixHQUFHLFdBQVc7d0JBQ2QsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixRQUFRO3dCQUNSLG9CQUFvQjt3QkFDcEIsZUFBZTtxQkFDbEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHVpSG92ZXJlZCB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlFcnJvciwgVHVpTGFiZWwgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlBdmF0YXIsIFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUNhcm91c2VsLCBUdWlGaWVsZEVycm9yUGlwZSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgVHVpSW5wdXRNb2R1bGUsIFR1aUlucHV0UGhvbmVNb2R1bGUgfSBmcm9tICdAdGFpZ2EtdWkvbGVnYWN5JztcbmltcG9ydCB7IFJlY2FwdGNoYUZvcm1zTW9kdWxlLCBSZWNhcHRjaGFNb2R1bGUgfSBmcm9tICduZy1yZWNhcHRjaGEtMic7XG5cbmltcG9ydCB7IFNjRm9ybUZpZWxkc01vZHVsZSB9IGZyb20gJy4uL2Zvcm0tZmllbGRzJztcbmltcG9ydCB7IFNjUHJldmlld1NhbXBsZUNvbXBvbmVudCB9IGZyb20gJy4vcHJldmlldy1zYW1wbGUvc2MtcHJldmlldy1zYW1wbGUuY29tcG9uZW50JztcblxuLyoqXG4gKiDQnNC+0LTRg9C70Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0L7QsdGA0LDQt9GG0L7QsiDRgtC+0LLQsNGA0LAuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbU2NQcmV2aWV3U2FtcGxlQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgVHVpRXJyb3IsXG4gICAgICAgIFR1aUZpZWxkRXJyb3JQaXBlLFxuICAgICAgICBTY0Zvcm1GaWVsZHNNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0TW9kdWxlLFxuICAgICAgICBUdWlJbnB1dFBob25lTW9kdWxlLFxuICAgICAgICAuLi5UdWlDYXJvdXNlbCxcbiAgICAgICAgVHVpQXZhdGFyLFxuICAgICAgICBUdWlIb3ZlcmVkLFxuICAgICAgICBUdWlCdXR0b24sXG4gICAgICAgIFR1aUJ1dHRvbkxvYWRpbmcsXG4gICAgICAgIFR1aUxhYmVsLFxuICAgICAgICBSZWNhcHRjaGFGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVjYXB0Y2hhTW9kdWxlLFxuICAgIF0sXG4gICAgZXhwb3J0czogW1NjUHJldmlld1NhbXBsZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNjUHJldmlld1NhbXBsZU1vZHVsZSB7fVxuIl19
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2FtcGxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zYW1wbGVzL3NjLXNhbXBsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7QUFFeEY7O0dBRUc7QUFvQkgsTUFBTSxPQUFPLHFCQUFxQjsrR0FBckIscUJBQXFCO2dIQUFyQixxQkFBcUIsaUJBbEJmLHdCQUF3QixhQUVuQyxZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLFFBQVE7WUFDUixpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLGNBQWM7WUFDZCxtQkFBbUIsdUlBRW5CLFNBQVM7WUFDVCxVQUFVO1lBQ1YsU0FBUztZQUNULGdCQUFnQjtZQUNoQixRQUFRLGFBRUYsd0JBQXdCO2dIQUV6QixxQkFBcUIsWUFoQjFCLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsUUFBUTtZQUVSLGtCQUFrQjtZQUNsQixjQUFjO1lBQ2QsbUJBQW1CLDJCQUVuQixTQUFTO1lBR1QsZ0JBQWdCOzs0RkFLWCxxQkFBcUI7a0JBbkJqQyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUN4QyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFFBQVE7d0JBQ1IsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixHQUFHLFdBQVc7d0JBQ2QsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixRQUFRO3FCQUNYO29CQUNELE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO2lCQUN0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFR1aUhvdmVyZWQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aUJ1dHRvbiwgVHVpRXJyb3IsIFR1aUxhYmVsIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpQXZhdGFyLCBUdWlCdXR0b25Mb2FkaW5nLCBUdWlDYXJvdXNlbCwgVHVpRmllbGRFcnJvclBpcGUgfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IFR1aUlucHV0TW9kdWxlLCBUdWlJbnB1dFBob25lTW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2xlZ2FjeSc7XG5cbmltcG9ydCB7IFNjRm9ybUZpZWxkc01vZHVsZSB9IGZyb20gJy4uL2Zvcm0tZmllbGRzJztcbmltcG9ydCB7IFNjUHJldmlld1NhbXBsZUNvbXBvbmVudCB9IGZyb20gJy4vcHJldmlldy1zYW1wbGUvc2MtcHJldmlldy1zYW1wbGUuY29tcG9uZW50JztcblxuLyoqXG4gKiDQnNC+0LTRg9C70Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0L7QsdGA0LDQt9GG0L7QsiDRgtC+0LLQsNGA0LAuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbU2NQcmV2aWV3U2FtcGxlQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgVHVpRXJyb3IsXG4gICAgICAgIFR1aUZpZWxkRXJyb3JQaXBlLFxuICAgICAgICBTY0Zvcm1GaWVsZHNNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0TW9kdWxlLFxuICAgICAgICBUdWlJbnB1dFBob25lTW9kdWxlLFxuICAgICAgICAuLi5UdWlDYXJvdXNlbCxcbiAgICAgICAgVHVpQXZhdGFyLFxuICAgICAgICBUdWlIb3ZlcmVkLFxuICAgICAgICBUdWlCdXR0b24sXG4gICAgICAgIFR1aUJ1dHRvbkxvYWRpbmcsXG4gICAgICAgIFR1aUxhYmVsLFxuICAgIF0sXG4gICAgZXhwb3J0czogW1NjUHJldmlld1NhbXBsZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNjUHJldmlld1NhbXBsZU1vZHVsZSB7fVxuIl19
@@ -1,3 +1,4 @@
1
1
  export * from './sc-help-notification.service';
2
2
  export * from './print.service';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zYy1oZWxwLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJpbnQuc2VydmljZSc7XG4iXX0=
3
+ export * from './sc-scripts.service';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjLWhlbHAtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wcmludC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2Mtc2NyaXB0cy5zZXJ2aWNlJztcbiJdfQ==
@@ -0,0 +1,106 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { inject, Injectable, NgZone, RendererFactory2 } from '@angular/core';
3
+ import { IS_BROWSER } from '@snabcentr/client-core';
4
+ import { EMPTY, Observable } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Сервис для вставки в {@link Document} внешних и дополнительных скриптов.
8
+ */
9
+ export class ScScriptsService {
10
+ constructor() {
11
+ /**
12
+ * Объект {@link Document}, предоставляющий доступ к DOM страницы.
13
+ */
14
+ this.document = inject(DOCUMENT);
15
+ /**
16
+ * Объект {@link Renderer2}, предоставляющий доступ к DOM страницы.
17
+ */
18
+ this.renderer = inject(RendererFactory2).createRenderer(null, null);
19
+ /**
20
+ * Признак того, что скрипт выполняется в браузере.
21
+ */
22
+ this.isBrowser = inject(IS_BROWSER);
23
+ /**
24
+ * {@link NgZone} для вставки скриптов вне зоны Angular.
25
+ */
26
+ this.ngZone = inject(NgZone);
27
+ }
28
+ /**
29
+ * Вставляет в конец {@link Document.body} скрипты, заданные строками HTML, вне зоны Angular. Из каждой строки берётся первый `<script>`. На сервере ничего не делает.
30
+ * Принимает только доверенные строки из конфигурации приложения: строка разбирается как HTML и может выполнить код.
31
+ *
32
+ * @param scriptStrings Строки HTML скриптов.
33
+ */
34
+ appendScripts(scriptStrings) {
35
+ if (!this.isBrowser) {
36
+ return;
37
+ }
38
+ this.ngZone.runOutsideAngular(() => {
39
+ scriptStrings.forEach((scriptString) => {
40
+ const script = this.createScript(scriptString);
41
+ if (script) {
42
+ this.renderer.appendChild(this.document.body, script);
43
+ }
44
+ });
45
+ });
46
+ }
47
+ /**
48
+ * Загружает внешний скрипт: при подписке добавляет его в {@link Document.head}, после загрузки выдаёт элемент скрипта и завершается.
49
+ * Если скрипт не загрузился или подписка отменена раньше, удаляет его со страницы; удаление не отменяет загрузку и выполнение уже вставленного скрипта. На сервере завершается без загрузки.
50
+ *
51
+ * @param url Адрес скрипта.
52
+ */
53
+ loadScript$(url) {
54
+ if (!this.isBrowser) {
55
+ return EMPTY;
56
+ }
57
+ return new Observable((subscriber) => {
58
+ const script = this.renderer.createElement('script');
59
+ let isLoaded = false;
60
+ const unlistenLoad = this.renderer.listen(script, 'load', () => {
61
+ isLoaded = true;
62
+ subscriber.next(script);
63
+ subscriber.complete();
64
+ });
65
+ const unlistenError = this.renderer.listen(script, 'error', () => {
66
+ subscriber.error(new Error(`Failed to load script ${url}`));
67
+ });
68
+ this.renderer.setProperty(script, 'src', url);
69
+ this.renderer.appendChild(this.document.head, script);
70
+ return () => {
71
+ unlistenLoad();
72
+ unlistenError();
73
+ if (!isLoaded) {
74
+ this.removeScript(script);
75
+ }
76
+ };
77
+ });
78
+ }
79
+ /**
80
+ * Удаляет скрипт со страницы. При подключённых анимациях Angular узел удаляется при ближайшей проверке изменений.
81
+ *
82
+ * @param script Элемент скрипта.
83
+ */
84
+ removeScript(script) {
85
+ this.renderer.removeChild(script.parentNode, script);
86
+ }
87
+ /**
88
+ * Создаёт {@link HTMLScriptElement} из строки HTML скрипта.
89
+ *
90
+ * @param scriptString Строка HTML скрипта.
91
+ */
92
+ createScript(scriptString) {
93
+ const range = this.document.createRange();
94
+ const fragment = range.createContextualFragment(scriptString);
95
+ return fragment.querySelector('script');
96
+ }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScScriptsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
98
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScScriptsService, providedIn: 'root' }); }
99
+ }
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScScriptsService, decorators: [{
101
+ type: Injectable,
102
+ args: [{
103
+ providedIn: 'root',
104
+ }]
105
+ }] });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2NyaXB0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL3NlcnZpY2VzL3NjLXNjcmlwdHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFhLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFekM7O0dBRUc7QUFJSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBSUk7O1dBRUc7UUFDYyxhQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZEOztXQUVHO1FBQ2MsYUFBUSxHQUFjLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFM0Y7O1dBRUc7UUFDYyxjQUFTLEdBQVksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpEOztXQUVHO1FBQ2MsV0FBTSxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQWtGcEQ7SUFoRkc7Ozs7O09BS0c7SUFDSSxhQUFhLENBQUMsYUFBZ0M7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFFL0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxXQUFXLENBQUMsR0FBVztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxPQUFPLElBQUksVUFBVSxDQUFvQixDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBc0IsQ0FBQztZQUMxRSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFFckIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUU7Z0JBQzNELFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ2hCLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUM3RCxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEUsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXRELE9BQU8sR0FBRyxFQUFFO2dCQUNSLFlBQVksRUFBRSxDQUFDO2dCQUNmLGFBQWEsRUFBRSxDQUFDO2dCQUVoQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztZQUNMLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxZQUFZLENBQUMsTUFBeUI7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFlBQVksQ0FBQyxZQUFvQjtRQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU5RCxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQzsrR0FwR1EsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGYixNQUFNOzs0RkFFVCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUsIFJlbmRlcmVyMiwgUmVuZGVyZXJGYWN0b3J5MiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVNfQlJPV1NFUiB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDQodC10YDQstC40YEg0LTQu9GPINCy0YHRgtCw0LLQutC4INCyIHtAbGluayBEb2N1bWVudH0g0LLQvdC10YjQvdC40YUg0Lgg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvRhSDRgdC60YDQuNC/0YLQvtCyLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY1NjcmlwdHNTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiDQntCx0YrQtdC60YIge0BsaW5rIERvY3VtZW50fSwg0L/RgNC10LTQvtGB0YLQsNCy0LvRj9GO0YnQuNC5INC00L7RgdGC0YPQvyDQuiBET00g0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YrQtdC60YIge0BsaW5rIFJlbmRlcmVyMn0sINC/0YDQtdC00L7RgdGC0LDQstC70Y/RjtGJ0LjQuSDQtNC+0YHRgtGD0L8g0LogRE9NINGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlcjogUmVuZGVyZXIyID0gaW5qZWN0KFJlbmRlcmVyRmFjdG9yeTIpLmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINGH0YLQviDRgdC60YDQuNC/0YIg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyDQsiDQsdGA0LDRg9C30LXRgNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCcm93c2VyOiBib29sZWFuID0gaW5qZWN0KElTX0JST1dTRVIpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE5nWm9uZX0g0LTQu9GPINCy0YHRgtCw0LLQutC4INGB0LrRgNC40L/RgtC+0LIg0LLQvdC1INC30L7QvdGLIEFuZ3VsYXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gICAgLyoqXG4gICAgICog0JLRgdGC0LDQstC70Y/QtdGCINCyINC60L7QvdC10YYge0BsaW5rIERvY3VtZW50LmJvZHl9INGB0LrRgNC40L/RgtGLLCDQt9Cw0LTQsNC90L3Ri9C1INGB0YLRgNC+0LrQsNC80LggSFRNTCwg0LLQvdC1INC30L7QvdGLIEFuZ3VsYXIuINCY0Lcg0LrQsNC20LTQvtC5INGB0YLRgNC+0LrQuCDQsdC10YDRkdGC0YHRjyDQv9C10YDQstGL0LkgYDxzY3JpcHQ+YC4g0J3QsCDRgdC10YDQstC10YDQtSDQvdC40YfQtdCz0L4g0L3QtSDQtNC10LvQsNC10YIuXG4gICAgICog0J/RgNC40L3QuNC80LDQtdGCINGC0L7Qu9GM0LrQviDQtNC+0LLQtdGA0LXQvdC90YvQtSDRgdGC0YDQvtC60Lgg0LjQtyDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0L/RgNC40LvQvtC20LXQvdC40Y86INGB0YLRgNC+0LrQsCDRgNCw0LfQsdC40YDQsNC10YLRgdGPINC60LDQuiBIVE1MINC4INC80L7QttC10YIg0LLRi9C/0L7Qu9C90LjRgtGMINC60L7QtC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzY3JpcHRTdHJpbmdzINCh0YLRgNC+0LrQuCBIVE1MINGB0LrRgNC40L/RgtC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGFwcGVuZFNjcmlwdHMoc2NyaXB0U3RyaW5nczogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgc2NyaXB0U3RyaW5ncy5mb3JFYWNoKChzY3JpcHRTdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JpcHQgPSB0aGlzLmNyZWF0ZVNjcmlwdChzY3JpcHRTdHJpbmcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNjcmlwdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgc2NyaXB0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JfQsNCz0YDRg9C20LDQtdGCINCy0L3QtdGI0L3QuNC5INGB0LrRgNC40L/Rgjog0L/RgNC4INC/0L7QtNC/0LjRgdC60LUg0LTQvtCx0LDQstC70Y/QtdGCINC10LPQviDQsiB7QGxpbmsgRG9jdW1lbnQuaGVhZH0sINC/0L7RgdC70LUg0LfQsNCz0YDRg9C30LrQuCDQstGL0LTQsNGR0YIg0Y3Qu9C10LzQtdC90YIg0YHQutGA0LjQv9GC0LAg0Lgg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjy5cbiAgICAgKiDQldGB0LvQuCDRgdC60YDQuNC/0YIg0L3QtSDQt9Cw0LPRgNGD0LfQuNC70YHRjyDQuNC70Lgg0L/QvtC00L/QuNGB0LrQsCDQvtGC0LzQtdC90LXQvdCwINGA0LDQvdGM0YjQtSwg0YPQtNCw0LvRj9C10YIg0LXQs9C+INGB0L4g0YHRgtGA0LDQvdC40YbRizsg0YPQtNCw0LvQtdC90LjQtSDQvdC1INC+0YLQvNC10L3Rj9C10YIg0LfQsNCz0YDRg9C30LrRgyDQuCDQstGL0L/QvtC70L3QtdC90LjQtSDRg9C20LUg0LLRgdGC0LDQstC70LXQvdC90L7Qs9C+INGB0LrRgNC40L/RgtCwLiDQndCwINGB0LXRgNCy0LXRgNC1INC30LDQstC10YDRiNCw0LXRgtGB0Y8g0LHQtdC3INC30LDQs9GA0YPQt9C60LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsINCQ0LTRgNC10YEg0YHQutGA0LjQv9GC0LAuXG4gICAgICovXG4gICAgcHVibGljIGxvYWRTY3JpcHQkKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxIVE1MU2NyaXB0RWxlbWVudD4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8SFRNTFNjcmlwdEVsZW1lbnQ+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JpcHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpIGFzIEhUTUxTY3JpcHRFbGVtZW50O1xuICAgICAgICAgICAgbGV0IGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IHVubGlzdGVuTG9hZCA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHNjcmlwdCwgJ2xvYWQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChzY3JpcHQpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgdW5saXN0ZW5FcnJvciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHNjcmlwdCwgJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBzY3JpcHQgJHt1cmx9YCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoc2NyaXB0LCAnc3JjJywgdXJsKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5oZWFkLCBzY3JpcHQpO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHVubGlzdGVuTG9hZCgpO1xuICAgICAgICAgICAgICAgIHVubGlzdGVuRXJyb3IoKTtcblxuICAgICAgICAgICAgICAgIGlmICghaXNMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTY3JpcHQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDRgdC60YDQuNC/0YIg0YHQviDRgdGC0YDQsNC90LjRhtGLLiDQn9GA0Lgg0L/QvtC00LrQu9GO0YfRkdC90L3Ri9GFINCw0L3QuNC80LDRhtC40Y/RhSBBbmd1bGFyINGD0LfQtdC7INGD0LTQsNC70Y/QtdGC0YHRjyDQv9GA0Lgg0LHQu9C40LbQsNC50YjQtdC5INC/0YDQvtCy0LXRgNC60LUg0LjQt9C80LXQvdC10L3QuNC5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNjcmlwdCDQrdC70LXQvNC10L3RgiDRgdC60YDQuNC/0YLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlU2NyaXB0KHNjcmlwdDogSFRNTFNjcmlwdEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChzY3JpcHQucGFyZW50Tm9kZSwgc2NyaXB0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiB7QGxpbmsgSFRNTFNjcmlwdEVsZW1lbnR9INC40Lcg0YHRgtGA0L7QutC4IEhUTUwg0YHQutGA0LjQv9GC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2NyaXB0U3RyaW5nINCh0YLRgNC+0LrQsCBIVE1MINGB0LrRgNC40L/RgtCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlU2NyaXB0KHNjcmlwdFN0cmluZzogc3RyaW5nKTogSFRNTFNjcmlwdEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHNjcmlwdFN0cmluZyk7XG5cbiAgICAgICAgcmV0dXJuIGZyYWdtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NjcmlwdCcpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export * from './interfaces';
2
+ export * from './sc-smart-captcha.component';
3
+ export * from './services';
4
+ export * from './tokens';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvc21hcnQtY2FwdGNoYS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vc2Mtc21hcnQtY2FwdGNoYS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3Rva2Vucyc7XG4iXX0=