@eo-sdk/client 11.14.0-rc.3 → 11.14.0-rc.4

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 (48) hide show
  1. package/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.d.ts +1 -0
  2. package/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.d.ts.map +1 -1
  3. package/app/eo-framework/actions/actions/signature-action/signature/signature.component.d.ts +1 -0
  4. package/app/eo-framework/actions/actions/signature-action/signature/signature.component.d.ts.map +1 -1
  5. package/app/eo-framework/form-elements/codesystem/codesystem.component.d.ts +2 -1
  6. package/app/eo-framework/form-elements/codesystem/codesystem.component.d.ts.map +1 -1
  7. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +2 -1
  8. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts.map +1 -1
  9. package/app/eo-framework/form-elements/number-range/number-range.component.d.ts +2 -1
  10. package/app/eo-framework/form-elements/number-range/number-range.component.d.ts.map +1 -1
  11. package/app/eo-framework/form-elements/organization/organization.component.d.ts +2 -1
  12. package/app/eo-framework/form-elements/organization/organization.component.d.ts.map +1 -1
  13. package/app/eo-framework/object-form/object-form/form-element/form-element.component.d.ts +2 -1
  14. package/app/eo-framework/object-form/object-form/form-element/form-element.component.d.ts.map +1 -1
  15. package/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.d.ts +2 -0
  16. package/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.d.ts.map +1 -1
  17. package/assets/_default/i18n/de.json +2 -1
  18. package/assets/_default/i18n/en.json +2 -1
  19. package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
  20. package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-setup/charts-setup.component.mjs +1 -1
  21. package/esm2022/app/eo-client/dashboard/widgets/count-objects-widget/count-objects-setup/count-objects-setup.component.mjs +1 -1
  22. package/esm2022/app/eo-client/dashboard/widgets/hitlist-widget/hitlist-setup/hitlist-setup.component.mjs +1 -1
  23. package/esm2022/app/eo-client/dashboard/widgets/signature-statistics-widget/signature-statistics-setup/signature-statistics-setup.component.mjs +1 -1
  24. package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +1 -1
  25. package/esm2022/app/eo-client/process-state/process-state.component.mjs +1 -1
  26. package/esm2022/app/eo-client/settings/settings.component.mjs +1 -1
  27. package/esm2022/app/eo-framework/actions/actions/add-subscription-action/add-subscription/add-subscription.component.mjs +1 -1
  28. package/esm2022/app/eo-framework/actions/actions/open-document-action/open-document-action.component.mjs +1 -1
  29. package/esm2022/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.mjs +1 -1
  30. package/esm2022/app/eo-framework/actions/actions/signature-action/sequence-list/sequence-list.component.mjs +15 -4
  31. package/esm2022/app/eo-framework/actions/actions/signature-action/signature/signature.component.mjs +6 -3
  32. package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +1 -1
  33. package/esm2022/app/eo-framework/form-elements/codesystem/codesystem.component.mjs +6 -4
  34. package/esm2022/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +1 -1
  35. package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +6 -4
  36. package/esm2022/app/eo-framework/form-elements/number-range/number-range.component.mjs +6 -4
  37. package/esm2022/app/eo-framework/form-elements/organization/organization.component.mjs +6 -4
  38. package/esm2022/app/eo-framework/grid/filters/codesystem-filter.component.mjs +3 -3
  39. package/esm2022/app/eo-framework/grid/filters/dynamic-list-filter.component.mjs +3 -3
  40. package/esm2022/app/eo-framework/grid/filters/organization-filter.component.mjs +3 -3
  41. package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +5 -3
  42. package/esm2022/app/eo-framework/object-form/object-form/form-element-table/row-edit/row-edit.component.mjs +11 -3
  43. package/esm2022/app/eo-framework/object-form/object-form/object-form-group/object-form-group.component.mjs +1 -1
  44. package/esm2022/app/eo-framework/stored-query/stored-query/stored-query.component.mjs +1 -1
  45. package/esm2022/app/eo-framework/stored-query/stored-query-details/stored-query-details.component.mjs +1 -1
  46. package/fesm2022/eo-sdk-client.mjs +76 -44
  47. package/fesm2022/eo-sdk-client.mjs.map +1 -1
  48. package/package.json +2 -2
@@ -51,6 +51,7 @@ export class SequenceListComponent {
51
51
  this.entries = [];
52
52
  this.lengthValidator = { max: 100, min: 3 };
53
53
  this.changeMode = ChangeMode;
54
+ this.initialEmail = '';
54
55
  this.itemEdit = new EventEmitter();
55
56
  this.propagateChange = (_) => { };
56
57
  }
@@ -89,14 +90,24 @@ export class SequenceListComponent {
89
90
  this.duplicateEmailValidator()
90
91
  ])
91
92
  });
93
+ if (this.phoneRequired) {
94
+ this.entryForm.get('phone').addValidators(Validators.required);
95
+ if (!entry.phone) {
96
+ this.entryForm.get('phone').markAsDirty();
97
+ }
98
+ }
92
99
  if (entry) {
93
100
  this.entryForm.patchValue({ name: entry.name, email: entry.email, phone: entry.phone });
101
+ this.initialEmail = entry.email;
94
102
  }
95
103
  this.itemEdit.emit(true);
96
104
  }
97
105
  duplicateEmailValidator() {
98
106
  return (group) => {
99
- if (group.controls['email'].invalid || group.controls['email'].value === null || !this.entries.find(entry => entry.email === group.controls['email'].value)) {
107
+ if (group.controls['email'].invalid
108
+ || group.controls['email'].value === null
109
+ || (this.mode === ChangeMode.EDIT && this.entryForm.get('email').value === this.initialEmail)
110
+ || !this.entries.find(entry => entry.email === group.controls['email'].value)) {
100
111
  return null;
101
112
  }
102
113
  return { 'duplicateEmail': true };
@@ -164,7 +175,7 @@ export class SequenceListComponent {
164
175
  useExisting: forwardRef(() => SequenceListComponent),
165
176
  multi: true
166
177
  }
167
- ], ngImport: i0, template: "<div class=\"toolbar\" *ngIf=\"!entryForm; else tplEntryForm\">\n <h4>{{ 'eo.action.signature.signers' | translate }}</h4>\n <button id=\"add-item\" class=\"add primary\" (click)=\"showEntryForm()\" [disabled]=\"maxSigners\">\n <eo-icon [iconTitle]=\"('eo.action.signature.add.button.tooltip' | translate)\"\n [iconSrc]=\"'assets/_default/svg/ic_add.svg'\">\n </eo-icon>\n </button>\n</div>\n\n<div class=\"entries\" cdkDropList (cdkDropListDropped)=\"dragDrop($event)\" [cdkDropListData]=\"entries\">\n <div [ngClass]=\"{ disabled: !!entryForm, single: entries.length === 1 }\" cdkDrag *ngFor=\"let entry of entries; let i = index\">\n <eo-sequence-list-item [index]=\"i\" (changeEntry)=\"changeEntry($event)\" [disableAdd]=\"maxSigners\">\n <ng-template #content>\n <div class=\"signer-list-entry\">\n <div class=\"signer-name\" title=\"{{entry.name}}\">{{ entry.name }}</div>\n <div class=\"signer-email\" title=\"{{entry.email}}\">{{ entry.email }}</div>\n <div class=\"signer-phone\" *ngIf=\"entry.phone\" title=\"{{entry.phone}}\">{{ entry.phone }}</div>\n </div>\n </ng-template>\n </eo-sequence-list-item>\n </div>\n</div>\n\n<ng-template #tplEntryForm>\n <form class=\"entryForm\" [formGroup]=\"entryForm\" (ngSubmit)=\"addSigner()\">\n <div class=\"form-body\">\n <eo-form-input\n class=\"name\"\n [invalid]=\"entryForm.get('name').dirty && entryForm.get('name').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsignername' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsignername'\" [autocomplete]=\"true\" [autofocus]=\"true\" formControlName=\"name\"></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"entryForm.get('name').hasError('maxlength')\" [translateParams]=\"{maxlength: 100}\"\n translate>eo.form.property.maxlength</small>\n <eo-form-input\n class=\"task\"\n [invalid]=\"entryForm.get('email').dirty && entryForm.get('email').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsigneremail' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsigneremail'\" [autocomplete]=\"true\" formControlName=\"email\"></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"entryForm.get('email').hasError('email')\" translate>eo.form.property.string.error.classification.email</small>\n <small class=\"errors\" *ngIf=\"!entryForm.get('email').hasError('email') && entryForm.get('email').hasError('maxlength')\"\n [translateParams]=\"{maxlength: 100}\" translate>eo.form.property.maxlength</small>\n <small class=\"errors\" *ngIf=\"duplicateEmailValidation\" translate>eo.form.property.string.error.classification.email.duplicate</small>\n <eo-form-input\n class=\"task\"\n *ngIf=\"phoneRequired\"\n [invalid]=\"entryForm.get('phone').dirty && entryForm.get('phone').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsignerphone' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsignerphone'\" formControlName=\"phone\"> </eo-string>\n <small class=\"errors\" *ngIf=\"entryForm.get('phone').hasError('maxlength')\" [translateParams]=\"{maxlength: 100}\"\n translate>eo.form.property.maxlength</small>\n </eo-form-input>\n </div>\n <footer class=\"footer-action\">\n <button class=\"secondary\" type=\"button\" (click)=\"cancel()\" translate>eo.cta.button.cancel</button>\n <ng-container [ngSwitch]=\"mode\">\n <button *ngSwitchCase=\"'edit'\" class=\"primary\" [disabled]=\"entryForm.invalid || entryForm.pristine\" type=\"submit\" translate>eo.action.signature.editSigner</button>\n <button *ngSwitchDefault class=\"primary\" [disabled]=\"entryForm.invalid\" type=\"submit\" translate>eo.action.signature.addSigner</button>\n </ng-container>\n </footer>\n </form>\n</ng-template>\n", styles: [":host{display:block;border:1px solid var(--panel-divider-color);padding:1px;background-color:var(--panel-background)}:host:focus{border-color:var(--color-accent)}:host.ng-invalid{border-color:var(--color-error)}:host.dense form.entryForm{display:flex;flex-flow:column}:host form.entryForm{display:grid;grid-template-rows:auto auto auto auto;grid-template-columns:1fr;padding:calc(var(--app-pane-padding) / 2);gap:calc(var(--app-pane-padding) / 2);grid-template-areas:\"title\" \"task\" \"nextAssignee\" \"expiryDatetime\" \"buttons\";border:1px solid var(--panel-divider-color)}:host form.entryForm eo-form-input.task{grid-area:task}:host form.entryForm eo-form-input.nextAssignee{grid-area:nextAssignee}:host form.entryForm eo-form-input.expiryDatetime{grid-area:expiryDatetime}:host form.entryForm .buttons{grid-area:buttons;display:flex;justify-content:end;margin:0 -2px}:host form.entryForm .buttons button{margin:0 2px}:host form.entryForm .errors{color:var(--color-error)}:host .toolbar{display:flex;justify-content:space-between;align-items:center;padding:calc(var(--app-pane-padding) / 4);border:1px solid var(--panel-divider-color)}:host .toolbar:focus{border-color:var(--color-accent)}:host .toolbar h4{padding:0;margin:0 calc(var(--app-pane-padding) * .75);flex:1;color:var(--color-primary-2)}:host .toolbar button{padding:calc(var(--app-pane-padding) / 4);border-radius:2px}:host .entries .entry{position:relative;transition:background-color .1s ease-in-out;border:1px solid var(--panel-divider-color);display:grid;padding:calc(var(--app-pane-padding) * .75);column-gap:calc(var(--app-pane-padding) / 2);row-gap:calc(var(--app-pane-padding) / 4);grid-template-rows:auto auto;grid-template-columns:auto auto 1fr auto;grid-template-areas:\"handle index content action\" \"handle index content action\";margin-top:1px}:host .entries .entry.disabled{background-color:var(--panel-background-lightgrey);opacity:.85}:host .entries .entry.disabled.current{background-color:var(--panel-background);border-color:var(--color-accent)}:host .entries .entry.disabled .innerAdd:not(.active){opacity:0;pointer-events:none}:host .entries .entry.disabled button,:host .entries .entry.disabled .handle{pointer-events:none;cursor:default;opacity:.5}:host .entries .entry.single .handle,:host .entries .entry.single .index{display:none}:host .entries .entry .innerAdd{position:absolute;top:-12px;left:calc(50% - 12px);border-radius:2px;color:var(--text-color-caption);cursor:pointer;background-color:var(--panel-background);border:1px solid var(--panel-divider-color);width:20px;height:20px}:host .entries .entry .innerAdd.active{background-color:var(--color-accent);border-color:var(--color-accent);color:#fff}:host .entries .entry .index{grid-area:index;display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-accent);padding:0 calc(var(--app-pane-padding) / 4)}:host .entries .entry .handle{grid-area:handle;color:var(--text-color-caption);align-self:center;cursor:n-resize}:host .entries .entry .content{grid-area:content}:host .entries .entry .content ::ng-deep .list-entry .task{word-break:break-all}:host .entries .entry .action{grid-area:action;display:flex;align-items:center}:host .entries .entry .action button{padding:2px}:host .entries .entry .action button eo-icon{width:18px;height:18px}.footer-action{display:flex;justify-content:flex-end;padding:var(--app-pane-padding) 0;background-color:transparent;border-top:none}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i7.StringComponent, selector: "eo-string", inputs: ["autocomplete", "multiselect", "multiline", "readonly", "autofocus", "classification", "situation", "regex", "qname", "size", "minLength", "maxLength"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i9.SequenceListItemComponent, selector: "eo-sequence-list-item", inputs: ["index", "disableAdd", "addTargetIndex"], outputs: ["changeEntry", "edit", "delete", "insert"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
178
+ ], ngImport: i0, template: "<div class=\"toolbar\" *ngIf=\"!entryForm; else tplEntryForm\">\n <h4>{{ 'eo.action.signature.signers' | translate }}</h4>\n <button id=\"add-item\" class=\"add primary\" (click)=\"showEntryForm()\" [disabled]=\"maxSigners\">\n <eo-icon [iconTitle]=\"('eo.action.signature.add.button.tooltip' | translate)\"\n [iconSrc]=\"'assets/_default/svg/ic_add.svg'\">\n </eo-icon>\n </button>\n</div>\n\n<div class=\"entries\" cdkDropList (cdkDropListDropped)=\"dragDrop($event)\" [cdkDropListData]=\"entries\">\n <div [ngClass]=\"{ disabled: !!entryForm, single: entries.length === 1 }\" cdkDrag *ngFor=\"let entry of entries; let i = index\">\n <eo-sequence-list-item [index]=\"i\" (changeEntry)=\"changeEntry($event)\" [disableAdd]=\"maxSigners\">\n <ng-template #content>\n <div class=\"signer-list-entry\">\n <div class=\"signer-name\" title=\"{{entry.name}}\">{{ entry.name }}</div>\n <div class=\"signer-email\" title=\"{{entry.email}}\">{{ entry.email }}</div>\n <div class=\"signer-phone\" *ngIf=\"entry.phone\" title=\"{{entry.phone}}\">{{ entry.phone }}</div>\n <small class=\"errors\" *ngIf=\"phoneRequired && !entry.phone\"\n translate>eo.action.signature.form.invalid</small>\n </div>\n </ng-template>\n </eo-sequence-list-item>\n </div>\n</div>\n\n<ng-template #tplEntryForm>\n <form class=\"entryForm\" [formGroup]=\"entryForm\" (ngSubmit)=\"addSigner()\">\n <div class=\"form-body\">\n <eo-form-input\n class=\"name\"\n [invalid]=\"entryForm.get('name').dirty && entryForm.get('name').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsignername' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsignername'\" [autocomplete]=\"true\" [autofocus]=\"true\" formControlName=\"name\"></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"entryForm.get('name').hasError('maxlength')\" [translateParams]=\"{maxlength: 100}\"\n translate>eo.form.property.maxlength</small>\n <eo-form-input\n class=\"task\"\n [invalid]=\"entryForm.get('email').dirty && entryForm.get('email').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsigneremail' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsigneremail'\" [autocomplete]=\"true\" formControlName=\"email\"></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"entryForm.get('email').hasError('email')\" translate>eo.form.property.string.error.classification.email</small>\n <small class=\"errors\" *ngIf=\"!entryForm.get('email').hasError('email') && entryForm.get('email').hasError('maxlength')\"\n [translateParams]=\"{maxlength: 100}\" translate>eo.form.property.maxlength</small>\n <small class=\"errors\" *ngIf=\"duplicateEmailValidation\" translate>eo.form.property.string.error.classification.email.duplicate</small>\n <eo-form-input\n class=\"task\"\n *ngIf=\"phoneRequired\"\n [invalid]=\"entryForm.get('phone').dirty && entryForm.get('phone').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsignerphone' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsignerphone'\" formControlName=\"phone\"> </eo-string>\n <small class=\"errors\" *ngIf=\"entryForm.get('phone').hasError('maxlength')\" [translateParams]=\"{maxlength: 100}\"\n translate>eo.form.property.maxlength</small>\n </eo-form-input>\n </div>\n <footer class=\"footer-action\">\n <button class=\"secondary\" type=\"button\" (click)=\"cancel()\" translate>eo.cta.button.cancel</button>\n <ng-container [ngSwitch]=\"mode\">\n <button *ngSwitchCase=\"'edit'\" class=\"primary\" [disabled]=\"entryForm.invalid || entryForm.pristine\" type=\"submit\" translate>eo.action.signature.editSigner</button>\n <button *ngSwitchDefault class=\"primary\" [disabled]=\"entryForm.invalid\" type=\"submit\" translate>eo.action.signature.addSigner</button>\n </ng-container>\n </footer>\n </form>\n</ng-template>\n", styles: [":host{display:block;border:1px solid var(--panel-divider-color);padding:1px;background-color:var(--panel-background)}:host:focus{border-color:var(--color-accent)}:host.ng-invalid{border-color:var(--color-error)}:host.dense form.entryForm{display:flex;flex-flow:column}:host form.entryForm{display:grid;grid-template-rows:auto auto auto auto;grid-template-columns:1fr;padding:calc(var(--app-pane-padding) / 2);gap:calc(var(--app-pane-padding) / 2);grid-template-areas:\"title\" \"task\" \"nextAssignee\" \"expiryDatetime\" \"buttons\";border:1px solid var(--panel-divider-color)}:host form.entryForm eo-form-input.task{grid-area:task}:host form.entryForm eo-form-input.nextAssignee{grid-area:nextAssignee}:host form.entryForm eo-form-input.expiryDatetime{grid-area:expiryDatetime}:host form.entryForm .buttons{grid-area:buttons;display:flex;justify-content:end;margin:0 -2px}:host form.entryForm .buttons button{margin:0 2px}:host .toolbar{display:flex;justify-content:space-between;align-items:center;padding:calc(var(--app-pane-padding) / 4);border:1px solid var(--panel-divider-color)}:host .toolbar:focus{border-color:var(--color-accent)}:host .toolbar h4{padding:0;margin:0 calc(var(--app-pane-padding) * .75);flex:1;color:var(--color-primary-2)}:host .toolbar button{padding:calc(var(--app-pane-padding) / 4);border-radius:2px}:host .entries .entry{position:relative;transition:background-color .1s ease-in-out;border:1px solid var(--panel-divider-color);display:grid;padding:calc(var(--app-pane-padding) * .75);column-gap:calc(var(--app-pane-padding) / 2);row-gap:calc(var(--app-pane-padding) / 4);grid-template-rows:auto auto;grid-template-columns:auto auto 1fr auto;grid-template-areas:\"handle index content action\" \"handle index content action\";margin-top:1px}:host .entries .entry.disabled{background-color:var(--panel-background-lightgrey);opacity:.85}:host .entries .entry.disabled.current{background-color:var(--panel-background);border-color:var(--color-accent)}:host .entries .entry.disabled .innerAdd:not(.active){opacity:0;pointer-events:none}:host .entries .entry.disabled button,:host .entries .entry.disabled .handle{pointer-events:none;cursor:default;opacity:.5}:host .entries .entry.single .handle,:host .entries .entry.single .index{display:none}:host .entries .entry .innerAdd{position:absolute;top:-12px;left:calc(50% - 12px);border-radius:2px;color:var(--text-color-caption);cursor:pointer;background-color:var(--panel-background);border:1px solid var(--panel-divider-color);width:20px;height:20px}:host .entries .entry .innerAdd.active{background-color:var(--color-accent);border-color:var(--color-accent);color:#fff}:host .entries .entry .index{grid-area:index;display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-accent);padding:0 calc(var(--app-pane-padding) / 4)}:host .entries .entry .handle{grid-area:handle;color:var(--text-color-caption);align-self:center;cursor:n-resize}:host .entries .entry .content{grid-area:content}:host .entries .entry .content ::ng-deep .list-entry .task{word-break:break-all}:host .entries .entry .action{grid-area:action;display:flex;align-items:center}:host .entries .entry .action button{padding:2px}:host .entries .entry .action button eo-icon{width:18px;height:18px}.footer-action{display:flex;justify-content:flex-end;padding:var(--app-pane-padding) 0;background-color:transparent;border-top:none}.errors{color:var(--color-error)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i7.StringComponent, selector: "eo-string", inputs: ["autocomplete", "multiselect", "multiline", "readonly", "autofocus", "classification", "situation", "regex", "qname", "size", "minLength", "maxLength"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i9.SequenceListItemComponent, selector: "eo-sequence-list-item", inputs: ["index", "disableAdd", "addTargetIndex"], outputs: ["changeEntry", "edit", "delete", "insert"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
168
179
  }
169
180
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SequenceListComponent, decorators: [{
170
181
  type: Component,
@@ -181,7 +192,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
181
192
  }
182
193
  ], host: {
183
194
  tabindex: '0'
184
- }, template: "<div class=\"toolbar\" *ngIf=\"!entryForm; else tplEntryForm\">\n <h4>{{ 'eo.action.signature.signers' | translate }}</h4>\n <button id=\"add-item\" class=\"add primary\" (click)=\"showEntryForm()\" [disabled]=\"maxSigners\">\n <eo-icon [iconTitle]=\"('eo.action.signature.add.button.tooltip' | translate)\"\n [iconSrc]=\"'assets/_default/svg/ic_add.svg'\">\n </eo-icon>\n </button>\n</div>\n\n<div class=\"entries\" cdkDropList (cdkDropListDropped)=\"dragDrop($event)\" [cdkDropListData]=\"entries\">\n <div [ngClass]=\"{ disabled: !!entryForm, single: entries.length === 1 }\" cdkDrag *ngFor=\"let entry of entries; let i = index\">\n <eo-sequence-list-item [index]=\"i\" (changeEntry)=\"changeEntry($event)\" [disableAdd]=\"maxSigners\">\n <ng-template #content>\n <div class=\"signer-list-entry\">\n <div class=\"signer-name\" title=\"{{entry.name}}\">{{ entry.name }}</div>\n <div class=\"signer-email\" title=\"{{entry.email}}\">{{ entry.email }}</div>\n <div class=\"signer-phone\" *ngIf=\"entry.phone\" title=\"{{entry.phone}}\">{{ entry.phone }}</div>\n </div>\n </ng-template>\n </eo-sequence-list-item>\n </div>\n</div>\n\n<ng-template #tplEntryForm>\n <form class=\"entryForm\" [formGroup]=\"entryForm\" (ngSubmit)=\"addSigner()\">\n <div class=\"form-body\">\n <eo-form-input\n class=\"name\"\n [invalid]=\"entryForm.get('name').dirty && entryForm.get('name').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsignername' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsignername'\" [autocomplete]=\"true\" [autofocus]=\"true\" formControlName=\"name\"></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"entryForm.get('name').hasError('maxlength')\" [translateParams]=\"{maxlength: 100}\"\n translate>eo.form.property.maxlength</small>\n <eo-form-input\n class=\"task\"\n [invalid]=\"entryForm.get('email').dirty && entryForm.get('email').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsigneremail' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsigneremail'\" [autocomplete]=\"true\" formControlName=\"email\"></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"entryForm.get('email').hasError('email')\" translate>eo.form.property.string.error.classification.email</small>\n <small class=\"errors\" *ngIf=\"!entryForm.get('email').hasError('email') && entryForm.get('email').hasError('maxlength')\"\n [translateParams]=\"{maxlength: 100}\" translate>eo.form.property.maxlength</small>\n <small class=\"errors\" *ngIf=\"duplicateEmailValidation\" translate>eo.form.property.string.error.classification.email.duplicate</small>\n <eo-form-input\n class=\"task\"\n *ngIf=\"phoneRequired\"\n [invalid]=\"entryForm.get('phone').dirty && entryForm.get('phone').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsignerphone' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsignerphone'\" formControlName=\"phone\"> </eo-string>\n <small class=\"errors\" *ngIf=\"entryForm.get('phone').hasError('maxlength')\" [translateParams]=\"{maxlength: 100}\"\n translate>eo.form.property.maxlength</small>\n </eo-form-input>\n </div>\n <footer class=\"footer-action\">\n <button class=\"secondary\" type=\"button\" (click)=\"cancel()\" translate>eo.cta.button.cancel</button>\n <ng-container [ngSwitch]=\"mode\">\n <button *ngSwitchCase=\"'edit'\" class=\"primary\" [disabled]=\"entryForm.invalid || entryForm.pristine\" type=\"submit\" translate>eo.action.signature.editSigner</button>\n <button *ngSwitchDefault class=\"primary\" [disabled]=\"entryForm.invalid\" type=\"submit\" translate>eo.action.signature.addSigner</button>\n </ng-container>\n </footer>\n </form>\n</ng-template>\n", styles: [":host{display:block;border:1px solid var(--panel-divider-color);padding:1px;background-color:var(--panel-background)}:host:focus{border-color:var(--color-accent)}:host.ng-invalid{border-color:var(--color-error)}:host.dense form.entryForm{display:flex;flex-flow:column}:host form.entryForm{display:grid;grid-template-rows:auto auto auto auto;grid-template-columns:1fr;padding:calc(var(--app-pane-padding) / 2);gap:calc(var(--app-pane-padding) / 2);grid-template-areas:\"title\" \"task\" \"nextAssignee\" \"expiryDatetime\" \"buttons\";border:1px solid var(--panel-divider-color)}:host form.entryForm eo-form-input.task{grid-area:task}:host form.entryForm eo-form-input.nextAssignee{grid-area:nextAssignee}:host form.entryForm eo-form-input.expiryDatetime{grid-area:expiryDatetime}:host form.entryForm .buttons{grid-area:buttons;display:flex;justify-content:end;margin:0 -2px}:host form.entryForm .buttons button{margin:0 2px}:host form.entryForm .errors{color:var(--color-error)}:host .toolbar{display:flex;justify-content:space-between;align-items:center;padding:calc(var(--app-pane-padding) / 4);border:1px solid var(--panel-divider-color)}:host .toolbar:focus{border-color:var(--color-accent)}:host .toolbar h4{padding:0;margin:0 calc(var(--app-pane-padding) * .75);flex:1;color:var(--color-primary-2)}:host .toolbar button{padding:calc(var(--app-pane-padding) / 4);border-radius:2px}:host .entries .entry{position:relative;transition:background-color .1s ease-in-out;border:1px solid var(--panel-divider-color);display:grid;padding:calc(var(--app-pane-padding) * .75);column-gap:calc(var(--app-pane-padding) / 2);row-gap:calc(var(--app-pane-padding) / 4);grid-template-rows:auto auto;grid-template-columns:auto auto 1fr auto;grid-template-areas:\"handle index content action\" \"handle index content action\";margin-top:1px}:host .entries .entry.disabled{background-color:var(--panel-background-lightgrey);opacity:.85}:host .entries .entry.disabled.current{background-color:var(--panel-background);border-color:var(--color-accent)}:host .entries .entry.disabled .innerAdd:not(.active){opacity:0;pointer-events:none}:host .entries .entry.disabled button,:host .entries .entry.disabled .handle{pointer-events:none;cursor:default;opacity:.5}:host .entries .entry.single .handle,:host .entries .entry.single .index{display:none}:host .entries .entry .innerAdd{position:absolute;top:-12px;left:calc(50% - 12px);border-radius:2px;color:var(--text-color-caption);cursor:pointer;background-color:var(--panel-background);border:1px solid var(--panel-divider-color);width:20px;height:20px}:host .entries .entry .innerAdd.active{background-color:var(--color-accent);border-color:var(--color-accent);color:#fff}:host .entries .entry .index{grid-area:index;display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-accent);padding:0 calc(var(--app-pane-padding) / 4)}:host .entries .entry .handle{grid-area:handle;color:var(--text-color-caption);align-self:center;cursor:n-resize}:host .entries .entry .content{grid-area:content}:host .entries .entry .content ::ng-deep .list-entry .task{word-break:break-all}:host .entries .entry .action{grid-area:action;display:flex;align-items:center}:host .entries .entry .action button{padding:2px}:host .entries .entry .action button eo-icon{width:18px;height:18px}.footer-action{display:flex;justify-content:flex-end;padding:var(--app-pane-padding) 0;background-color:transparent;border-top:none}\n"] }]
195
+ }, template: "<div class=\"toolbar\" *ngIf=\"!entryForm; else tplEntryForm\">\n <h4>{{ 'eo.action.signature.signers' | translate }}</h4>\n <button id=\"add-item\" class=\"add primary\" (click)=\"showEntryForm()\" [disabled]=\"maxSigners\">\n <eo-icon [iconTitle]=\"('eo.action.signature.add.button.tooltip' | translate)\"\n [iconSrc]=\"'assets/_default/svg/ic_add.svg'\">\n </eo-icon>\n </button>\n</div>\n\n<div class=\"entries\" cdkDropList (cdkDropListDropped)=\"dragDrop($event)\" [cdkDropListData]=\"entries\">\n <div [ngClass]=\"{ disabled: !!entryForm, single: entries.length === 1 }\" cdkDrag *ngFor=\"let entry of entries; let i = index\">\n <eo-sequence-list-item [index]=\"i\" (changeEntry)=\"changeEntry($event)\" [disableAdd]=\"maxSigners\">\n <ng-template #content>\n <div class=\"signer-list-entry\">\n <div class=\"signer-name\" title=\"{{entry.name}}\">{{ entry.name }}</div>\n <div class=\"signer-email\" title=\"{{entry.email}}\">{{ entry.email }}</div>\n <div class=\"signer-phone\" *ngIf=\"entry.phone\" title=\"{{entry.phone}}\">{{ entry.phone }}</div>\n <small class=\"errors\" *ngIf=\"phoneRequired && !entry.phone\"\n translate>eo.action.signature.form.invalid</small>\n </div>\n </ng-template>\n </eo-sequence-list-item>\n </div>\n</div>\n\n<ng-template #tplEntryForm>\n <form class=\"entryForm\" [formGroup]=\"entryForm\" (ngSubmit)=\"addSigner()\">\n <div class=\"form-body\">\n <eo-form-input\n class=\"name\"\n [invalid]=\"entryForm.get('name').dirty && entryForm.get('name').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsignername' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsignername'\" [autocomplete]=\"true\" [autofocus]=\"true\" formControlName=\"name\"></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"entryForm.get('name').hasError('maxlength')\" [translateParams]=\"{maxlength: 100}\"\n translate>eo.form.property.maxlength</small>\n <eo-form-input\n class=\"task\"\n [invalid]=\"entryForm.get('email').dirty && entryForm.get('email').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsigneremail' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsigneremail'\" [autocomplete]=\"true\" formControlName=\"email\"></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"entryForm.get('email').hasError('email')\" translate>eo.form.property.string.error.classification.email</small>\n <small class=\"errors\" *ngIf=\"!entryForm.get('email').hasError('email') && entryForm.get('email').hasError('maxlength')\"\n [translateParams]=\"{maxlength: 100}\" translate>eo.form.property.maxlength</small>\n <small class=\"errors\" *ngIf=\"duplicateEmailValidation\" translate>eo.form.property.string.error.classification.email.duplicate</small>\n <eo-form-input\n class=\"task\"\n *ngIf=\"phoneRequired\"\n [invalid]=\"entryForm.get('phone').dirty && entryForm.get('phone').invalid\"\n [skipToggle]=\"true\"\n [label]=\"'eo.action.signature.yuvsigners.yuvsignerphone' | translate\"\n [required]=\"true\"\n >\n <eo-string maxLength=\"100\" [qname]=\"'yuvsigning.yuvsigners.yuvsignerphone'\" formControlName=\"phone\"> </eo-string>\n <small class=\"errors\" *ngIf=\"entryForm.get('phone').hasError('maxlength')\" [translateParams]=\"{maxlength: 100}\"\n translate>eo.form.property.maxlength</small>\n </eo-form-input>\n </div>\n <footer class=\"footer-action\">\n <button class=\"secondary\" type=\"button\" (click)=\"cancel()\" translate>eo.cta.button.cancel</button>\n <ng-container [ngSwitch]=\"mode\">\n <button *ngSwitchCase=\"'edit'\" class=\"primary\" [disabled]=\"entryForm.invalid || entryForm.pristine\" type=\"submit\" translate>eo.action.signature.editSigner</button>\n <button *ngSwitchDefault class=\"primary\" [disabled]=\"entryForm.invalid\" type=\"submit\" translate>eo.action.signature.addSigner</button>\n </ng-container>\n </footer>\n </form>\n</ng-template>\n", styles: [":host{display:block;border:1px solid var(--panel-divider-color);padding:1px;background-color:var(--panel-background)}:host:focus{border-color:var(--color-accent)}:host.ng-invalid{border-color:var(--color-error)}:host.dense form.entryForm{display:flex;flex-flow:column}:host form.entryForm{display:grid;grid-template-rows:auto auto auto auto;grid-template-columns:1fr;padding:calc(var(--app-pane-padding) / 2);gap:calc(var(--app-pane-padding) / 2);grid-template-areas:\"title\" \"task\" \"nextAssignee\" \"expiryDatetime\" \"buttons\";border:1px solid var(--panel-divider-color)}:host form.entryForm eo-form-input.task{grid-area:task}:host form.entryForm eo-form-input.nextAssignee{grid-area:nextAssignee}:host form.entryForm eo-form-input.expiryDatetime{grid-area:expiryDatetime}:host form.entryForm .buttons{grid-area:buttons;display:flex;justify-content:end;margin:0 -2px}:host form.entryForm .buttons button{margin:0 2px}:host .toolbar{display:flex;justify-content:space-between;align-items:center;padding:calc(var(--app-pane-padding) / 4);border:1px solid var(--panel-divider-color)}:host .toolbar:focus{border-color:var(--color-accent)}:host .toolbar h4{padding:0;margin:0 calc(var(--app-pane-padding) * .75);flex:1;color:var(--color-primary-2)}:host .toolbar button{padding:calc(var(--app-pane-padding) / 4);border-radius:2px}:host .entries .entry{position:relative;transition:background-color .1s ease-in-out;border:1px solid var(--panel-divider-color);display:grid;padding:calc(var(--app-pane-padding) * .75);column-gap:calc(var(--app-pane-padding) / 2);row-gap:calc(var(--app-pane-padding) / 4);grid-template-rows:auto auto;grid-template-columns:auto auto 1fr auto;grid-template-areas:\"handle index content action\" \"handle index content action\";margin-top:1px}:host .entries .entry.disabled{background-color:var(--panel-background-lightgrey);opacity:.85}:host .entries .entry.disabled.current{background-color:var(--panel-background);border-color:var(--color-accent)}:host .entries .entry.disabled .innerAdd:not(.active){opacity:0;pointer-events:none}:host .entries .entry.disabled button,:host .entries .entry.disabled .handle{pointer-events:none;cursor:default;opacity:.5}:host .entries .entry.single .handle,:host .entries .entry.single .index{display:none}:host .entries .entry .innerAdd{position:absolute;top:-12px;left:calc(50% - 12px);border-radius:2px;color:var(--text-color-caption);cursor:pointer;background-color:var(--panel-background);border:1px solid var(--panel-divider-color);width:20px;height:20px}:host .entries .entry .innerAdd.active{background-color:var(--color-accent);border-color:var(--color-accent);color:#fff}:host .entries .entry .index{grid-area:index;display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--color-accent);padding:0 calc(var(--app-pane-padding) / 4)}:host .entries .entry .handle{grid-area:handle;color:var(--text-color-caption);align-self:center;cursor:n-resize}:host .entries .entry .content{grid-area:content}:host .entries .entry .content ::ng-deep .list-entry .task{word-break:break-all}:host .entries .entry .action{grid-area:action;display:flex;align-items:center}:host .entries .entry .action button{padding:2px}:host .entries .entry .action button eo-icon{width:18px;height:18px}.footer-action{display:flex;justify-content:flex-end;padding:var(--app-pane-padding) 0;background-color:transparent;border-top:none}.errors{color:var(--color-error)}\n"] }]
185
196
  }], ctorParameters: () => [{ type: undefined, decorators: [{
186
197
  type: Attribute,
187
198
  args: ['form-open']
@@ -201,4 +212,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
201
212
  type: HostListener,
202
213
  args: ['keydown.escape', ['$event']]
203
214
  }] } });
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2UtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hY3Rpb25zL2FjdGlvbnMvc2lnbmF0dXJlLWFjdGlvbi9zZXF1ZW5jZS1saXN0L3NlcXVlbmNlLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYWN0aW9ucy9hY3Rpb25zL3NpZ25hdHVyZS1hY3Rpb24vc2VxdWVuY2UtbGlzdC9zZXF1ZW5jZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlILE9BQU8sRUFLTCxhQUFhLEVBQ2IsaUJBQWlCLEVBSWpCLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxVQUFVLEVBQXVCLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7O0FBdUJwRSxNQUFNLE9BQU8scUJBQXFCO0lBY2hDLGtCQUFrQixDQUFDLEtBQW9CO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFHRCxtQkFBbUIsQ0FBQyxLQUFvQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFD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IjpbImltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7QXR0cmlidXRlLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Hcm91cCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFVudHlwZWRGb3JtR3JvdXAsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0NoYW5nZU1vZGUsIENoYW5nZU91dHB1dCwgU2lnbmVyfSBmcm9tICcuLi9zaWduYXR1cmUubW9kZWwnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1zZXF1ZW5jZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlcXVlbmNlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZXF1ZW5jZS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VxdWVuY2VMaXN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VxdWVuY2VMaXN0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBob3N0OiB7XG4gICAgdGFiaW5kZXg6ICcwJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIFNlcXVlbmNlTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCB7XG4gIGVudHJ5Rm9ybTogRm9ybUdyb3VwO1xuICBlbnRyaWVzOiBTaWduZXJbXSA9IFtdO1xuICBlZGl0SW5kZXg6IG51bWJlcjtcbiAgYWRkVGFyZ2V0SW5kZXg6IG51bWJlcjtcbiAgbGVuZ3RoVmFsaWRhdG9yID0geyBtYXg6IDEwMCwgbWluOiAzIH07XG4gIGNoYW5nZU1vZGUgPSBDaGFuZ2VNb2RlO1xuICBtb2RlOiBDaGFuZ2VNb2RlO1xuXG4gIEBJbnB1dCgpIE1BWF9TSUdORVJTOiBudW1iZXI7XG4gIEBJbnB1dCgpIHBob25lUmVxdWlyZWQ6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBpdGVtRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuKycsIFsnJGV2ZW50J10pXG4gIGNvbnRyb2xQbHVzSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMuc2hvd0VudHJ5Rm9ybSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJywgWyckZXZlbnQnXSlcbiAgY29udHJvbEVudGVySGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmVudHJ5Rm9ybT8uZGlydHkgJiYgdGhpcy5lbnRyeUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuYWRkU2lnbmVyKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxuICBlc2NhcGVIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZW50cnlGb3JtKSB7XG4gICAgICB0aGlzLmhpZGVFbnRyeUZvcm0oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZHVwbGljYXRlRW1haWxWYWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHtlcnJvcnMsIGNvbnRyb2xzfSA9IHRoaXMuZW50cnlGb3JtO1xuICAgIGxldCBkdXBsaWNhdGVFbWFpbFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xuICAgIGlmIChlcnJvcnMpIHtcbiAgICAgIGR1cGxpY2F0ZUVtYWlsVmFsaWRhdGlvbkVycm9yID0gKGNvbnRyb2xzLmVtYWlsLnRvdWNoZWQgfHwgY29udHJvbHMuZW1haWwuZGlydHkpICYmIGVycm9ycy5kdXBsaWNhdGVFbWFpbDtcbiAgICB9XG4gICAgcmV0dXJuIGR1cGxpY2F0ZUVtYWlsVmFsaWRhdGlvbkVycm9yO1xuICB9XG5cbiAgZ2V0IG1heFNpZ25lcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGggPT09IHRoaXMuTUFYX1NJR05FUlM7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihAQXR0cmlidXRlKCdmb3JtLW9wZW4nKSBwdWJsaWMgZm9ybU9wZW46IHN0cmluZyxcbiAgICAgICAgICAgICAgcHVibGljIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwdWJsaWMgZmI6IEZvcm1CdWlsZGVyLFxuICAgICAgICAgICAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxuXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuXG4gIHByaXZhdGUgcHJvcGFnYXRlKCkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuZW50cmllcyk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBTaWduZXJbXSk6IHZvaWQge1xuICAgIHRoaXMuZW50cmllcyA9IHZhbHVlIHx8IFtdO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHt9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmVudHJ5Rm9ybT8uZGlydHkgPyB7IHJvdXRpbmdsaXN0OiB7IHBlbmRpbmc6IHRydWUgfSB9IDogbnVsbDtcbiAgfVxuXG4gIGRyYWdEcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5lbnRyaWVzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gIH1cblxuICBzaG93RW50cnlGb3JtKGluZGV4PzogbnVtYmVyLCBhZGRBdEluZGV4PzogYm9vbGVhbikge1xuICAgIGxldCBlbnRyeTtcbiAgICBpZiAoYWRkQXRJbmRleCkge1xuICAgICAgdGhpcy5hZGRUYXJnZXRJbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVkaXRJbmRleCA9IGluZGV4O1xuICAgICAgZW50cnkgPSBpbmRleCAhPT0gdW5kZWZpbmVkID8gdGhpcy5lbnRyaWVzW2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLmVudHJ5Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwKV1dLFxuICAgICAgZW1haWw6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCksIFZhbGlkYXRvcnMuZW1haWxdXSxcbiAgICAgIHBob25lOiBbJycsIFtWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApXV1cbiAgICB9LCB7XG4gICAgICB2YWxpZGF0b3I6IFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIHRoaXMuZHVwbGljYXRlRW1haWxWYWxpZGF0b3IoKVxuICAgICAgXSlcbiAgICB9KTtcblxuICAgIGlmIChlbnRyeSkge1xuICAgICAgdGhpcy5lbnRyeUZvcm0ucGF0Y2hWYWx1ZSh7IG5hbWU6IGVudHJ5Lm5hbWUsIGVtYWlsOiBlbnRyeS5lbWFpbCwgcGhvbmU6IGVudHJ5LnBob25lIH0pO1xuICAgIH1cbiAgICB0aGlzLml0ZW1FZGl0LmVtaXQodHJ1ZSk7XG4gIH1cblxuICBkdXBsaWNhdGVFbWFpbFZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSA9PiB7XG4gICAgICBpZiAoZ3JvdXAuY29udHJvbHNbJ2VtYWlsJ10uaW52YWxpZCB8fCBncm91cC5jb250cm9sc1snZW1haWwnXS52YWx1ZSA9PT0gbnVsbCB8fCAhdGhpcy5lbnRyaWVzLmZpbmQoZW50cnkgPT4gZW50cnkuZW1haWwgPT09IGdyb3VwLmNvbnRyb2xzWydlbWFpbCddLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7J2R1cGxpY2F0ZUVtYWlsJzogdHJ1ZX07XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRW50cnkoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzW2luZGV4XTtcbiAgICBpZiAoIWVudHJ5KSB7IHJldHVybjsgfVxuICAgIHRoaXMuZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMubW9kZSA9IG51bGw7XG4gICAgdGhpcy5wcm9wYWdhdGUoKTtcbiAgfVxuXG4gIGNoYW5nZUVudHJ5KHsgaW5kZXgsIG1vZGUgfTogQ2hhbmdlT3V0cHV0KSB7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICBpZiAobW9kZSA9PT0gQ2hhbmdlTW9kZS5FRElUKSB7XG4gICAgICB0aGlzLnNob3dFbnRyeUZvcm0oaW5kZXgpO1xuICAgICAgdGhpcy5hZGRUYXJnZXRJbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gQ2hhbmdlTW9kZS5ERUxFVEUpIHtcbiAgICAgIHRoaXMucmVtb3ZlRW50cnkoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gQ2hhbmdlTW9kZS5JTlNFUlQgJiYgIXRoaXMubWF4U2lnbmVycykge1xuICAgICAgdGhpcy5zaG93RW50cnlGb3JtKCk7XG4gICAgICB0aGlzLmFkZFRhcmdldEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgYWRkU2lnbmVyKCkge1xuICAgIGlmICh0aGlzLmVkaXRJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKHRoaXMuZWRpdEluZGV4LCAxLCB0aGlzLmVudHJ5Rm9ybS52YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFkZFRhcmdldEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UodGhpcy5hZGRUYXJnZXRJbmRleCwgMCwgdGhpcy5lbnRyeUZvcm0udmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudHJpZXMucHVzaCh0aGlzLmVudHJ5Rm9ybS52YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuaGlkZUVudHJ5Rm9ybSgpO1xuICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gIH1cblxuICBoaWRlRW50cnlGb3JtKCkge1xuICAgIHRoaXMuYWRkVGFyZ2V0SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbnRyeUZvcm0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXRlbUVkaXQuZW1pdChmYWxzZSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjYWRkLWl0ZW0gJyk/LmZvY3VzKCkpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuaGlkZUVudHJ5Rm9ybSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RW50cnlGb3JtKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0b29sYmFyXCIgKm5nSWY9XCIhZW50cnlGb3JtOyBlbHNlIHRwbEVudHJ5Rm9ybVwiPlxuICA8aDQ+e3sgJ2VvLmFjdGlvbi5zaWduYXR1cmUuc2lnbmVycycgfCB0cmFuc2xhdGUgfX08L2g0PlxuICA8YnV0dG9uIGlkPVwiYWRkLWl0ZW1cIiBjbGFzcz1cImFkZCBwcmltYXJ5XCIgKGNsaWNrKT1cInNob3dFbnRyeUZvcm0oKVwiIFtkaXNhYmxlZF09XCJtYXhTaWduZXJzXCI+XG4gICAgPGVvLWljb24gW2ljb25UaXRsZV09XCIoJ2VvLmFjdGlvbi5zaWduYXR1cmUuYWRkLmJ1dHRvbi50b29sdGlwJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2FkZC5zdmcnXCI+XG4gICAgPC9lby1pY29uPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZW50cmllc1wiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJhZ0Ryb3AoJGV2ZW50KVwiIFtjZGtEcm9wTGlzdERhdGFdPVwiZW50cmllc1wiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6ICEhZW50cnlGb3JtLCBzaW5nbGU6IGVudHJpZXMubGVuZ3RoID09PSAxIH1cIiBjZGtEcmFnICpuZ0Zvcj1cImxldCBlbnRyeSBvZiBlbnRyaWVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgPGVvLXNlcXVlbmNlLWxpc3QtaXRlbSBbaW5kZXhdPVwiaVwiIChjaGFuZ2VFbnRyeSk9XCJjaGFuZ2VFbnRyeSgkZXZlbnQpXCIgW2Rpc2FibGVBZGRdPVwibWF4U2lnbmVyc1wiPlxuICAgICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lnbmVyLWxpc3QtZW50cnlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lnbmVyLW5hbWVcIiB0aXRsZT1cInt7ZW50cnkubmFtZX19XCI+e3sgZW50cnkubmFtZSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWduZXItZW1haWxcIiB0aXRsZT1cInt7ZW50cnkuZW1haWx9fVwiPnt7IGVudHJ5LmVtYWlsIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNpZ25lci1waG9uZVwiICpuZ0lmPVwiZW50cnkucGhvbmVcIiB0aXRsZT1cInt7ZW50cnkucGhvbmV9fVwiPnt7IGVudHJ5LnBob25lIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2VvLXNlcXVlbmNlLWxpc3QtaXRlbT5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0cGxFbnRyeUZvcm0+XG4gIDxmb3JtIGNsYXNzPVwiZW50cnlGb3JtXCIgW2Zvcm1Hcm91cF09XCJlbnRyeUZvcm1cIiAobmdTdWJtaXQpPVwiYWRkU2lnbmVyKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ib2R5XCI+XG4gICAgICA8ZW8tZm9ybS1pbnB1dFxuICAgICAgICBjbGFzcz1cIm5hbWVcIlxuICAgICAgICBbaW52YWxpZF09XCJlbnRyeUZvcm0uZ2V0KCduYW1lJykuZGlydHkgJiYgZW50cnlGb3JtLmdldCgnbmFtZScpLmludmFsaWRcIlxuICAgICAgICBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgW2xhYmVsXT1cIidlby5hY3Rpb24uc2lnbmF0dXJlLnl1dnNpZ25lcnMueXV2c2lnbmVybmFtZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICA+XG4gICAgICAgIDxlby1zdHJpbmcgbWF4TGVuZ3RoPVwiMTAwXCIgW3FuYW1lXT1cIid5dXZzaWduaW5nLnl1dnNpZ25lcnMueXV2c2lnbmVybmFtZSdcIiBbYXV0b2NvbXBsZXRlXT1cInRydWVcIiBbYXV0b2ZvY3VzXT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+PC9lby1zdHJpbmc+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICA8c21hbGwgY2xhc3M9XCJlcnJvcnNcIiAqbmdJZj1cImVudHJ5Rm9ybS5nZXQoJ25hbWUnKS5oYXNFcnJvcignbWF4bGVuZ3RoJylcIiBbdHJhbnNsYXRlUGFyYW1zXT1cInttYXhsZW5ndGg6IDEwMH1cIlxuICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5mb3JtLnByb3BlcnR5Lm1heGxlbmd0aDwvc21hbGw+XG4gICAgICA8ZW8tZm9ybS1pbnB1dFxuICAgICAgICBjbGFzcz1cInRhc2tcIlxuICAgICAgICBbaW52YWxpZF09XCJlbnRyeUZvcm0uZ2V0KCdlbWFpbCcpLmRpcnR5ICYmIGVudHJ5Rm9ybS5nZXQoJ2VtYWlsJykuaW52YWxpZFwiXG4gICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICBbbGFiZWxdPVwiJ2VvLmFjdGlvbi5zaWduYXR1cmUueXV2c2lnbmVycy55dXZzaWduZXJlbWFpbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICA+XG4gICAgICAgIDxlby1zdHJpbmcgbWF4TGVuZ3RoPVwiMTAwXCIgW3FuYW1lXT1cIid5dXZzaWduaW5nLnl1dnNpZ25lcnMueXV2c2lnbmVyZW1haWwnXCIgW2F1dG9jb21wbGV0ZV09XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIj48L2VvLXN0cmluZz5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIDxzbWFsbCBjbGFzcz1cImVycm9yc1wiICpuZ0lmPVwiZW50cnlGb3JtLmdldCgnZW1haWwnKS5oYXNFcnJvcignZW1haWwnKVwiIHRyYW5zbGF0ZT5lby5mb3JtLnByb3BlcnR5LnN0cmluZy5lcnJvci5jbGFzc2lmaWNhdGlvbi5lbWFpbDwvc21hbGw+XG4gICAgICA8c21hbGwgY2xhc3M9XCJlcnJvcnNcIiAqbmdJZj1cIiFlbnRyeUZvcm0uZ2V0KCdlbWFpbCcpLmhhc0Vycm9yKCdlbWFpbCcpICYmIGVudHJ5Rm9ybS5nZXQoJ2VtYWlsJykuaGFzRXJyb3IoJ21heGxlbmd0aCcpXCJcbiAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInttYXhsZW5ndGg6IDEwMH1cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L3NtYWxsPlxuICAgICAgPHNtYWxsIGNsYXNzPVwiZXJyb3JzXCIgKm5nSWY9XCJkdXBsaWNhdGVFbWFpbFZhbGlkYXRpb25cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5zdHJpbmcuZXJyb3IuY2xhc3NpZmljYXRpb24uZW1haWwuZHVwbGljYXRlPC9zbWFsbD5cbiAgICAgIDxlby1mb3JtLWlucHV0XG4gICAgICAgIGNsYXNzPVwidGFza1wiXG4gICAgICAgICpuZ0lmPVwicGhvbmVSZXF1aXJlZFwiXG4gICAgICAgIFtpbnZhbGlkXT1cImVudHJ5Rm9ybS5nZXQoJ3Bob25lJykuZGlydHkgJiYgZW50cnlGb3JtLmdldCgncGhvbmUnKS5pbnZhbGlkXCJcbiAgICAgICAgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgIFtsYWJlbF09XCInZW8uYWN0aW9uLnNpZ25hdHVyZS55dXZzaWduZXJzLnl1dnNpZ25lcnBob25lJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgICAgPGVvLXN0cmluZyBtYXhMZW5ndGg9XCIxMDBcIiBbcW5hbWVdPVwiJ3l1dnNpZ25pbmcueXV2c2lnbmVycy55dXZzaWduZXJwaG9uZSdcIiBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiPiA8L2VvLXN0cmluZz5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwiZXJyb3JzXCIgKm5nSWY9XCJlbnRyeUZvcm0uZ2V0KCdwaG9uZScpLmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiIFt0cmFuc2xhdGVQYXJhbXNdPVwie21heGxlbmd0aDogMTAwfVwiXG4gICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L3NtYWxsPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgIDwvZGl2PlxuICAgIDxmb290ZXIgY2xhc3M9XCJmb290ZXItYWN0aW9uXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwoKVwiIHRyYW5zbGF0ZT5lby5jdGEuYnV0dG9uLmNhbmNlbDwvYnV0dG9uPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibW9kZVwiPlxuICAgICAgICA8YnV0dG9uICpuZ1N3aXRjaENhc2U9XCInZWRpdCdcIiBjbGFzcz1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiZW50cnlGb3JtLmludmFsaWQgfHwgZW50cnlGb3JtLnByaXN0aW5lXCIgdHlwZT1cInN1Ym1pdFwiIHRyYW5zbGF0ZT5lby5hY3Rpb24uc2lnbmF0dXJlLmVkaXRTaWduZXI8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdTd2l0Y2hEZWZhdWx0IGNsYXNzPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJlbnRyeUZvcm0uaW52YWxpZFwiIHR5cGU9XCJzdWJtaXRcIiB0cmFuc2xhdGU+ZW8uYWN0aW9uLnNpZ25hdHVyZS5hZGRTaWduZXI8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZm9vdGVyPlxuICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPlxuIl19
215
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2UtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hY3Rpb25zL2FjdGlvbnMvc2lnbmF0dXJlLWFjdGlvbi9zZXF1ZW5jZS1saXN0L3NlcXVlbmNlLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYWN0aW9ucy9hY3Rpb25zL3NpZ25hdHVyZS1hY3Rpb24vc2VxdWVuY2UtbGlzdC9zZXF1ZW5jZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlILE9BQU8sRUFLTCxhQUFhLEVBQ2IsaUJBQWlCLEVBSWpCLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxVQUFVLEVBQXVCLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7O0FBdUJwRSxNQUFNLE9BQU8scUJBQXFCO0lBZWhDLGtCQUFrQixDQUFDLEtBQW9CO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFHRCxtQkFBbUIsQ0FBQyxLQUFvQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFD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Qzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHNCQUFzQixDQUFDOzRCQUNwRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRixRQUNLO3dCQUNKLFFBQVEsRUFBRSxHQUFHO3FCQUNkOzswQkFzRFksU0FBUzsyQkFBQyxXQUFXOzJIQTFDekIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBR1Asa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVE3QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVV6QyxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge0F0dHJpYnV0ZSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtR3JvdXAsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBVbnR5cGVkRm9ybUdyb3VwLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtDaGFuZ2VNb2RlLCBDaGFuZ2VPdXRwdXQsIFNpZ25lcn0gZnJvbSAnLi4vc2lnbmF0dXJlLm1vZGVsJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQGVvLXNkay9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tc2VxdWVuY2UtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZXF1ZW5jZS1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VxdWVuY2UtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlcXVlbmNlTGlzdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNlcXVlbmNlTGlzdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgaG9zdDoge1xuICAgIHRhYmluZGV4OiAnMCdcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBTZXF1ZW5jZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkluaXQge1xuICBlbnRyeUZvcm06IEZvcm1Hcm91cDtcbiAgZW50cmllczogU2lnbmVyW10gPSBbXTtcbiAgZWRpdEluZGV4OiBudW1iZXI7XG4gIGFkZFRhcmdldEluZGV4OiBudW1iZXI7XG4gIGxlbmd0aFZhbGlkYXRvciA9IHsgbWF4OiAxMDAsIG1pbjogMyB9O1xuICBjaGFuZ2VNb2RlID0gQ2hhbmdlTW9kZTtcbiAgbW9kZTogQ2hhbmdlTW9kZTtcbiAgaW5pdGlhbEVtYWlsID0gJyc7XG5cbiAgQElucHV0KCkgTUFYX1NJR05FUlM6IG51bWJlcjtcbiAgQElucHV0KCkgcGhvbmVSZXF1aXJlZDogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGl0ZW1FZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uY29udHJvbC4rJywgWyckZXZlbnQnXSlcbiAgY29udHJvbFBsdXNIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5zaG93RW50cnlGb3JtKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxuICBjb250cm9sRW50ZXJIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZW50cnlGb3JtPy5kaXJ0eSAmJiB0aGlzLmVudHJ5Rm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5hZGRTaWduZXIoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIGVzY2FwZUhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5lbnRyeUZvcm0pIHtcbiAgICAgIHRoaXMuaGlkZUVudHJ5Rm9ybSgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkdXBsaWNhdGVFbWFpbFZhbGlkYXRpb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge2Vycm9ycywgY29udHJvbHN9ID0gdGhpcy5lbnRyeUZvcm07XG4gICAgbGV0IGR1cGxpY2F0ZUVtYWlsVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XG4gICAgaWYgKGVycm9ycykge1xuICAgICAgZHVwbGljYXRlRW1haWxWYWxpZGF0aW9uRXJyb3IgPSAoY29udHJvbHMuZW1haWwudG91Y2hlZCB8fCBjb250cm9scy5lbWFpbC5kaXJ0eSkgJiYgZXJyb3JzLmR1cGxpY2F0ZUVtYWlsO1xuICAgIH1cbiAgICByZXR1cm4gZHVwbGljYXRlRW1haWxWYWxpZGF0aW9uRXJyb3I7XG4gIH1cblxuICBnZXQgbWF4U2lnbmVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmxlbmd0aCA9PT0gdGhpcy5NQVhfU0lHTkVSUztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBBdHRyaWJ1dGUoJ2Zvcm0tb3BlbicpIHB1YmxpYyBmb3JtT3Blbjogc3RyaW5nLFxuICAgICAgICAgICAgICBwdWJsaWMgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHB1YmxpYyBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgcHJpdmF0ZSBwcm9wYWdhdGUoKSB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5lbnRyaWVzKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IFNpZ25lcltdKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzID0gdmFsdWUgfHwgW107XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge31cblxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZW50cnlGb3JtPy5kaXJ0eSA/IHsgcm91dGluZ2xpc3Q6IHsgcGVuZGluZzogdHJ1ZSB9IH0gOiBudWxsO1xuICB9XG5cbiAgZHJhZ0Ryb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPikge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmVudHJpZXMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgdGhpcy5wcm9wYWdhdGUoKTtcbiAgfVxuXG4gIHNob3dFbnRyeUZvcm0oaW5kZXg/OiBudW1iZXIsIGFkZEF0SW5kZXg/OiBib29sZWFuKSB7XG4gICAgbGV0IGVudHJ5O1xuICAgIGlmIChhZGRBdEluZGV4KSB7XG4gICAgICB0aGlzLmFkZFRhcmdldEluZGV4ID0gaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWRpdEluZGV4ID0gaW5kZXg7XG4gICAgICBlbnRyeSA9IGluZGV4ICE9PSB1bmRlZmluZWQgPyB0aGlzLmVudHJpZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuZW50cnlGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBuYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApXV0sXG4gICAgICBlbWFpbDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwKSwgVmFsaWRhdG9ycy5lbWFpbF1dLFxuICAgICAgcGhvbmU6IFsnJywgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCldXVxuICAgIH0sIHtcbiAgICAgIHZhbGlkYXRvcjogVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgdGhpcy5kdXBsaWNhdGVFbWFpbFZhbGlkYXRvcigpXG4gICAgICBdKVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnBob25lUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuZW50cnlGb3JtLmdldCgncGhvbmUnKS5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgaWYgKCFlbnRyeS5waG9uZSkge1xuICAgICAgICB0aGlzLmVudHJ5Rm9ybS5nZXQoJ3Bob25lJykubWFya0FzRGlydHkoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHRoaXMuZW50cnlGb3JtLnBhdGNoVmFsdWUoeyBuYW1lOiBlbnRyeS5uYW1lLCBlbWFpbDogZW50cnkuZW1haWwsIHBob25lOiBlbnRyeS5waG9uZSB9KTtcbiAgICAgIHRoaXMuaW5pdGlhbEVtYWlsID0gZW50cnkuZW1haWw7XG4gICAgfVxuICAgIHRoaXMuaXRlbUVkaXQuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIGR1cGxpY2F0ZUVtYWlsVmFsaWRhdG9yKCkge1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApID0+IHtcbiAgICAgIGlmIChncm91cC5jb250cm9sc1snZW1haWwnXS5pbnZhbGlkXG4gICAgICAgIHx8IGdyb3VwLmNvbnRyb2xzWydlbWFpbCddLnZhbHVlID09PSBudWxsXG4gICAgICAgIHx8ICh0aGlzLm1vZGUgPT09IENoYW5nZU1vZGUuRURJVCAmJiB0aGlzLmVudHJ5Rm9ybS5nZXQoJ2VtYWlsJykudmFsdWUgPT09IHRoaXMuaW5pdGlhbEVtYWlsKVxuICAgICAgICB8fCAhdGhpcy5lbnRyaWVzLmZpbmQoZW50cnkgPT4gZW50cnkuZW1haWwgPT09IGdyb3VwLmNvbnRyb2xzWydlbWFpbCddLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7J2R1cGxpY2F0ZUVtYWlsJzogdHJ1ZX07XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRW50cnkoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzW2luZGV4XTtcbiAgICBpZiAoIWVudHJ5KSB7IHJldHVybjsgfVxuICAgIHRoaXMuZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMubW9kZSA9IG51bGw7XG4gICAgdGhpcy5wcm9wYWdhdGUoKTtcbiAgfVxuXG4gIGNoYW5nZUVudHJ5KHsgaW5kZXgsIG1vZGUgfTogQ2hhbmdlT3V0cHV0KSB7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICBpZiAobW9kZSA9PT0gQ2hhbmdlTW9kZS5FRElUKSB7XG4gICAgICB0aGlzLnNob3dFbnRyeUZvcm0oaW5kZXgpO1xuICAgICAgdGhpcy5hZGRUYXJnZXRJbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gQ2hhbmdlTW9kZS5ERUxFVEUpIHtcbiAgICAgIHRoaXMucmVtb3ZlRW50cnkoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gQ2hhbmdlTW9kZS5JTlNFUlQgJiYgIXRoaXMubWF4U2lnbmVycykge1xuICAgICAgdGhpcy5zaG93RW50cnlGb3JtKCk7XG4gICAgICB0aGlzLmFkZFRhcmdldEluZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgYWRkU2lnbmVyKCkge1xuICAgIGlmICh0aGlzLmVkaXRJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKHRoaXMuZWRpdEluZGV4LCAxLCB0aGlzLmVudHJ5Rm9ybS52YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFkZFRhcmdldEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UodGhpcy5hZGRUYXJnZXRJbmRleCwgMCwgdGhpcy5lbnRyeUZvcm0udmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudHJpZXMucHVzaCh0aGlzLmVudHJ5Rm9ybS52YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuaGlkZUVudHJ5Rm9ybSgpO1xuICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gIH1cblxuICBoaWRlRW50cnlGb3JtKCkge1xuICAgIHRoaXMuYWRkVGFyZ2V0SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0SW5kZXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbnRyeUZvcm0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXRlbUVkaXQuZW1pdChmYWxzZSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjYWRkLWl0ZW0gJyk/LmZvY3VzKCkpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuaGlkZUVudHJ5Rm9ybSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RW50cnlGb3JtKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0b29sYmFyXCIgKm5nSWY9XCIhZW50cnlGb3JtOyBlbHNlIHRwbEVudHJ5Rm9ybVwiPlxuICA8aDQ+e3sgJ2VvLmFjdGlvbi5zaWduYXR1cmUuc2lnbmVycycgfCB0cmFuc2xhdGUgfX08L2g0PlxuICA8YnV0dG9uIGlkPVwiYWRkLWl0ZW1cIiBjbGFzcz1cImFkZCBwcmltYXJ5XCIgKGNsaWNrKT1cInNob3dFbnRyeUZvcm0oKVwiIFtkaXNhYmxlZF09XCJtYXhTaWduZXJzXCI+XG4gICAgPGVvLWljb24gW2ljb25UaXRsZV09XCIoJ2VvLmFjdGlvbi5zaWduYXR1cmUuYWRkLmJ1dHRvbi50b29sdGlwJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2FkZC5zdmcnXCI+XG4gICAgPC9lby1pY29uPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiZW50cmllc1wiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJhZ0Ryb3AoJGV2ZW50KVwiIFtjZGtEcm9wTGlzdERhdGFdPVwiZW50cmllc1wiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6ICEhZW50cnlGb3JtLCBzaW5nbGU6IGVudHJpZXMubGVuZ3RoID09PSAxIH1cIiBjZGtEcmFnICpuZ0Zvcj1cImxldCBlbnRyeSBvZiBlbnRyaWVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgPGVvLXNlcXVlbmNlLWxpc3QtaXRlbSBbaW5kZXhdPVwiaVwiIChjaGFuZ2VFbnRyeSk9XCJjaGFuZ2VFbnRyeSgkZXZlbnQpXCIgW2Rpc2FibGVBZGRdPVwibWF4U2lnbmVyc1wiPlxuICAgICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lnbmVyLWxpc3QtZW50cnlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lnbmVyLW5hbWVcIiB0aXRsZT1cInt7ZW50cnkubmFtZX19XCI+e3sgZW50cnkubmFtZSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWduZXItZW1haWxcIiB0aXRsZT1cInt7ZW50cnkuZW1haWx9fVwiPnt7IGVudHJ5LmVtYWlsIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNpZ25lci1waG9uZVwiICpuZ0lmPVwiZW50cnkucGhvbmVcIiB0aXRsZT1cInt7ZW50cnkucGhvbmV9fVwiPnt7IGVudHJ5LnBob25lIH19PC9kaXY+XG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwiZXJyb3JzXCIgKm5nSWY9XCJwaG9uZVJlcXVpcmVkICYmICFlbnRyeS5waG9uZVwiXG4gICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5hY3Rpb24uc2lnbmF0dXJlLmZvcm0uaW52YWxpZDwvc21hbGw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2VvLXNlcXVlbmNlLWxpc3QtaXRlbT5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0cGxFbnRyeUZvcm0+XG4gIDxmb3JtIGNsYXNzPVwiZW50cnlGb3JtXCIgW2Zvcm1Hcm91cF09XCJlbnRyeUZvcm1cIiAobmdTdWJtaXQpPVwiYWRkU2lnbmVyKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ib2R5XCI+XG4gICAgICA8ZW8tZm9ybS1pbnB1dFxuICAgICAgICBjbGFzcz1cIm5hbWVcIlxuICAgICAgICBbaW52YWxpZF09XCJlbnRyeUZvcm0uZ2V0KCduYW1lJykuZGlydHkgJiYgZW50cnlGb3JtLmdldCgnbmFtZScpLmludmFsaWRcIlxuICAgICAgICBbc2tpcFRvZ2dsZV09XCJ0cnVlXCJcbiAgICAgICAgW2xhYmVsXT1cIidlby5hY3Rpb24uc2lnbmF0dXJlLnl1dnNpZ25lcnMueXV2c2lnbmVybmFtZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICA+XG4gICAgICAgIDxlby1zdHJpbmcgbWF4TGVuZ3RoPVwiMTAwXCIgW3FuYW1lXT1cIid5dXZzaWduaW5nLnl1dnNpZ25lcnMueXV2c2lnbmVybmFtZSdcIiBbYXV0b2NvbXBsZXRlXT1cInRydWVcIiBbYXV0b2ZvY3VzXT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCI+PC9lby1zdHJpbmc+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICA8c21hbGwgY2xhc3M9XCJlcnJvcnNcIiAqbmdJZj1cImVudHJ5Rm9ybS5nZXQoJ25hbWUnKS5oYXNFcnJvcignbWF4bGVuZ3RoJylcIiBbdHJhbnNsYXRlUGFyYW1zXT1cInttYXhsZW5ndGg6IDEwMH1cIlxuICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5mb3JtLnByb3BlcnR5Lm1heGxlbmd0aDwvc21hbGw+XG4gICAgICA8ZW8tZm9ybS1pbnB1dFxuICAgICAgICBjbGFzcz1cInRhc2tcIlxuICAgICAgICBbaW52YWxpZF09XCJlbnRyeUZvcm0uZ2V0KCdlbWFpbCcpLmRpcnR5ICYmIGVudHJ5Rm9ybS5nZXQoJ2VtYWlsJykuaW52YWxpZFwiXG4gICAgICAgIFtza2lwVG9nZ2xlXT1cInRydWVcIlxuICAgICAgICBbbGFiZWxdPVwiJ2VvLmFjdGlvbi5zaWduYXR1cmUueXV2c2lnbmVycy55dXZzaWduZXJlbWFpbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICA+XG4gICAgICAgIDxlby1zdHJpbmcgbWF4TGVuZ3RoPVwiMTAwXCIgW3FuYW1lXT1cIid5dXZzaWduaW5nLnl1dnNpZ25lcnMueXV2c2lnbmVyZW1haWwnXCIgW2F1dG9jb21wbGV0ZV09XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIj48L2VvLXN0cmluZz5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIDxzbWFsbCBjbGFzcz1cImVycm9yc1wiICpuZ0lmPVwiZW50cnlGb3JtLmdldCgnZW1haWwnKS5oYXNFcnJvcignZW1haWwnKVwiIHRyYW5zbGF0ZT5lby5mb3JtLnByb3BlcnR5LnN0cmluZy5lcnJvci5jbGFzc2lmaWNhdGlvbi5lbWFpbDwvc21hbGw+XG4gICAgICA8c21hbGwgY2xhc3M9XCJlcnJvcnNcIiAqbmdJZj1cIiFlbnRyeUZvcm0uZ2V0KCdlbWFpbCcpLmhhc0Vycm9yKCdlbWFpbCcpICYmIGVudHJ5Rm9ybS5nZXQoJ2VtYWlsJykuaGFzRXJyb3IoJ21heGxlbmd0aCcpXCJcbiAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInttYXhsZW5ndGg6IDEwMH1cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L3NtYWxsPlxuICAgICAgPHNtYWxsIGNsYXNzPVwiZXJyb3JzXCIgKm5nSWY9XCJkdXBsaWNhdGVFbWFpbFZhbGlkYXRpb25cIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5zdHJpbmcuZXJyb3IuY2xhc3NpZmljYXRpb24uZW1haWwuZHVwbGljYXRlPC9zbWFsbD5cbiAgICAgIDxlby1mb3JtLWlucHV0XG4gICAgICAgIGNsYXNzPVwidGFza1wiXG4gICAgICAgICpuZ0lmPVwicGhvbmVSZXF1aXJlZFwiXG4gICAgICAgIFtpbnZhbGlkXT1cImVudHJ5Rm9ybS5nZXQoJ3Bob25lJykuZGlydHkgJiYgZW50cnlGb3JtLmdldCgncGhvbmUnKS5pbnZhbGlkXCJcbiAgICAgICAgW3NraXBUb2dnbGVdPVwidHJ1ZVwiXG4gICAgICAgIFtsYWJlbF09XCInZW8uYWN0aW9uLnNpZ25hdHVyZS55dXZzaWduZXJzLnl1dnNpZ25lcnBob25lJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgICAgPGVvLXN0cmluZyBtYXhMZW5ndGg9XCIxMDBcIiBbcW5hbWVdPVwiJ3l1dnNpZ25pbmcueXV2c2lnbmVycy55dXZzaWduZXJwaG9uZSdcIiBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZVwiPiA8L2VvLXN0cmluZz5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwiZXJyb3JzXCIgKm5nSWY9XCJlbnRyeUZvcm0uZ2V0KCdwaG9uZScpLmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiIFt0cmFuc2xhdGVQYXJhbXNdPVwie21heGxlbmd0aDogMTAwfVwiXG4gICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5tYXhsZW5ndGg8L3NtYWxsPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgIDwvZGl2PlxuICAgIDxmb290ZXIgY2xhc3M9XCJmb290ZXItYWN0aW9uXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwoKVwiIHRyYW5zbGF0ZT5lby5jdGEuYnV0dG9uLmNhbmNlbDwvYnV0dG9uPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibW9kZVwiPlxuICAgICAgICA8YnV0dG9uICpuZ1N3aXRjaENhc2U9XCInZWRpdCdcIiBjbGFzcz1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiZW50cnlGb3JtLmludmFsaWQgfHwgZW50cnlGb3JtLnByaXN0aW5lXCIgdHlwZT1cInN1Ym1pdFwiIHRyYW5zbGF0ZT5lby5hY3Rpb24uc2lnbmF0dXJlLmVkaXRTaWduZXI8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdTd2l0Y2hEZWZhdWx0IGNsYXNzPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCJlbnRyeUZvcm0uaW52YWxpZFwiIHR5cGU9XCJzdWJtaXRcIiB0cmFuc2xhdGU+ZW8uYWN0aW9uLnNpZ25hdHVyZS5hZGRTaWduZXI8L2J1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZm9vdGVyPlxuICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -120,6 +120,9 @@ export class SignatureComponent {
120
120
  this.finishPending();
121
121
  }
122
122
  }
123
+ missingPhoneNumber() {
124
+ return this.signingForm.get('yuvsigtype').value === 'advanced' && this.signingForm.get('yuvsigners').value.find(signer => !signer.phone);
125
+ }
123
126
  startPending() {
124
127
  // because this method will be called every time the form status changes,
125
128
  // pending task will only be started once until it was finished
@@ -134,13 +137,13 @@ export class SignatureComponent {
134
137
  this.signingFormListener.unsubscribe();
135
138
  }
136
139
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SignatureComponent, deps: [{ token: i1.BpmService }, { token: i2.PendingChangesService }, { token: i1.TranslateService }, { token: i1.NotificationsService }, { token: i1.SigningService }, { token: i1.EventService }, { token: i1.DmsService }, { token: i1.SystemService }, { token: i1.LocalStorageService }, { token: i3.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
137
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: SignatureComponent, selector: "eo-signature", viewQueries: [{ propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }], ngImport: i0, template: "<eo-dialog [title]=\"headerTitle\"\n [subtitle]=\"headerDescription\"\n [visible]=\"true\"\n [dirtyCheck]=\"pendingTaskIds\"\n [minWidth]=\"600\"\n [minHeight]=\"600\"\n [styleClass]=\"'process-form-dialog'\" #dialog>\n\n <section class=\"signature-form form-container\">\n <form class=\"signing-form\" [formGroup]=\"signingForm\">\n <eo-sequence-list class=\"entry_form\" form-open=\"true\" [MAX_SIGNERS]=\"maxSigners\" (itemEdit)=\"mode = $event\" [phoneRequired]=\"signingForm.get('yuvsigtype').value === 'advanced'\" [formControlName]=\"'yuvsigners'\">\n </eo-sequence-list>\n <eo-form-input [skipToggle]=\"true\" class=\"checkbox\" [label]=\"'eo.action.signature.yuvsigners.parallel' | translate\">\n <eo-checkbox formControlName=\"parallelSigning\"></eo-checkbox>\n </eo-form-input>\n <eo-form-input *ngIf=\"yuvsigtypeCodesystem.entries.length > 1\" [required]=\"true\" [label]=\"'eo.action.signature.yuvsigning.yuvsigtype' | translate\">\n <eo-codesystem\n [formControlName]=\"'yuvsigtype'\"\n [codesystem]=\"yuvsigtypeCodesystem\"\n [required]=\"true\"\n ></eo-codesystem>\n </eo-form-input>\n <eo-form-input [label]=\"'eo.action.signature.yuvsigning.yuvsigemailsubject' | translate\" [required]=\"true\">\n <eo-string\n [formControlName]=\"'yuvsigemailsubject'\"\n [minLength]=\"3\"\n [maxLength]=\"100\"\n [required]=\"true\"\n ></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"signingForm.get('yuvsigemailsubject').hasError('required')\" translate>eo.form.property.required</small>\n <eo-form-input [label]=\"'eo.action.signature.yuvsigning.yuvsigemailbody' | translate\" [required]=\"true\">\n <eo-string\n [formControlName]=\"'yuvsigemailbody'\"\n [multiline]=\"true\"\n [size]=\"'small'\"\n [minLength]=\"3\"\n [maxLength]=\"2000\"\n [required]=\"true\"\n ></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"signingForm.get('yuvsigemailbody').hasError('required')\" translate>eo.form.property.required</small>\n </form>\n\n <div class=\"actions\">\n <div *ngIf=\"signingForm?.invalid\" class=\"invalid\" translate>eo.object.indexdata.form.invalid</div>\n <eo-cta [active]=\"!processingRequest\" class=\"cta-wrapper\">\n <button (click)=\"cancel()\" class=\"button-cancel\" translate>eo.cta.button.cancel</button>\n <button (click)=\"saveForm()\" [disabled]=\"signingForm?.invalid || processingRequest || !signingForm.get('yuvsigners').value || !signingForm.get('yuvsigners').value.length\" class=\"primary\" translate>eo.action.signature.request</button>\n </eo-cta>\n </div>\n </section>\n <div class=\"loader-overlay__mask\" *ngIf=\"processingRequest\">\n <eo-loading-spinner class=\"signature__loader\" [size]=\"'large'\"></eo-loading-spinner>\n </div>\n</eo-dialog>\n", styles: ["::ng-deep .signature-form{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;justify-content:space-between}::ng-deep .signature-form .email-block{margin-top:50px;border:1px solid var(--panel-divider-color)}::ng-deep .signature-form .invalid{color:var(--color-error);margin:40px 0 15px}::ng-deep .signature-form h2{padding:0;margin:0 calc(var(--app-pane-padding) * .75);flex:1}::ng-deep .signature-form .actions{display:flex;flex:0;flex-direction:column;min-height:0;min-width:0;align-items:flex-end;justify-content:flex-end;margin:0 var(--app-pane-padding) var(--app-pane-padding);min-height:3em}::ng-deep .signature-form .actions button{white-space:nowrap}::ng-deep .signature-form .actions eo-cta{display:flex;justify-content:flex-end}::ng-deep .signature-form .actions eo-cta button:nth-child(odd){margin:0 5px}@media screen and (max-width: 800px){::ng-deep .signature-form .actions{flex-direction:column;align-items:flex-end}}.signing-form{box-sizing:border-box;margin:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);overflow:auto}.signing-form .table .label{padding-bottom:calc(var(--app-pane-padding) / 4)}.signing-form .errors{color:var(--color-error)}.loader-overlay__mask{display:flex;width:100%;height:100%;z-index:11;position:absolute;background:rgba(var(--color-white-rgb),.8);-webkit-animation:eoFadeIn .5s;animation:eoFadeIn .5s}.loader-overlay__mask .signature__loader{margin:auto}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i6.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i7.EoDialogComponent, selector: "eo-dialog", inputs: ["hasPreviewFile", "title", "subtitle", "styleClass", "dirtyCheck", "minWidth", "minHeight", "height", "width", "focusOnShow", "align", "isFormTable", "showPreview", "closeOnCancelOnly", "visible"], outputs: ["onTogglePreview", "visibleChange", "hide", "show"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i9.CodesystemComponent, selector: "eo-codesystem", inputs: ["situation", "pickerTitle", "placeholder", "codesystem", "multiselect", "readonly", "inputStyleClass", "emptyMessage", "filterFunction", "disablingFilterFunction"] }, { kind: "component", type: i10.CheckboxComponent, selector: "eo-checkbox", inputs: ["required", "tristate", "readonly"] }, { kind: "component", type: i11.StringComponent, selector: "eo-string", inputs: ["autocomplete", "multiselect", "multiline", "readonly", "autofocus", "classification", "situation", "regex", "qname", "size", "minLength", "maxLength"] }, { kind: "component", type: i12.CtaComponent, selector: "eo-cta", inputs: ["active"] }, { kind: "component", type: i13.SequenceListComponent, selector: "eo-sequence-list", inputs: ["MAX_SIGNERS", "phoneRequired"], outputs: ["itemEdit"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
140
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: SignatureComponent, selector: "eo-signature", viewQueries: [{ propertyName: "dialog", first: true, predicate: ["dialog"], descendants: true }], ngImport: i0, template: "<eo-dialog [title]=\"headerTitle\"\n [subtitle]=\"headerDescription\"\n [visible]=\"true\"\n [dirtyCheck]=\"pendingTaskIds\"\n [minWidth]=\"600\"\n [minHeight]=\"600\"\n [styleClass]=\"'process-form-dialog'\" #dialog>\n\n <section class=\"signature-form form-container\">\n <form class=\"signing-form\" [formGroup]=\"signingForm\">\n <eo-sequence-list class=\"entry_form\" form-open=\"true\" [MAX_SIGNERS]=\"maxSigners\" (itemEdit)=\"mode = $event\" [phoneRequired]=\"signingForm.get('yuvsigtype').value === 'advanced'\" [formControlName]=\"'yuvsigners'\">\n </eo-sequence-list>\n <eo-form-input [skipToggle]=\"true\" class=\"checkbox\" [label]=\"'eo.action.signature.yuvsigners.parallel' | translate\">\n <eo-checkbox formControlName=\"parallelSigning\"></eo-checkbox>\n </eo-form-input>\n <eo-form-input *ngIf=\"yuvsigtypeCodesystem.entries.length > 1\" [required]=\"true\" [label]=\"'eo.action.signature.yuvsigning.yuvsigtype' | translate\">\n <eo-codesystem\n [formControlName]=\"'yuvsigtype'\"\n [codesystem]=\"yuvsigtypeCodesystem\"\n [required]=\"true\"\n ></eo-codesystem>\n </eo-form-input>\n <eo-form-input [label]=\"'eo.action.signature.yuvsigning.yuvsigemailsubject' | translate\" [required]=\"true\">\n <eo-string\n [formControlName]=\"'yuvsigemailsubject'\"\n [minLength]=\"3\"\n [maxLength]=\"100\"\n [required]=\"true\"\n ></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"signingForm.get('yuvsigemailsubject').hasError('required')\" translate>eo.form.property.required</small>\n <eo-form-input [label]=\"'eo.action.signature.yuvsigning.yuvsigemailbody' | translate\" [required]=\"true\">\n <eo-string\n [formControlName]=\"'yuvsigemailbody'\"\n [multiline]=\"true\"\n [size]=\"'small'\"\n [minLength]=\"3\"\n [maxLength]=\"2000\"\n [required]=\"true\"\n ></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"signingForm.get('yuvsigemailbody').hasError('required')\" translate>eo.form.property.required</small>\n </form>\n\n <div class=\"actions\">\n <div *ngIf=\"signingForm?.invalid\" class=\"invalid\" translate>eo.object.indexdata.form.invalid</div>\n <eo-cta [active]=\"!processingRequest\" class=\"cta-wrapper\">\n <button (click)=\"cancel()\" class=\"button-cancel\" translate>eo.cta.button.cancel</button>\n <button (click)=\"saveForm()\"\n [disabled]=\"signingForm?.invalid\n || processingRequest\n || !signingForm.get('yuvsigners').value\n || !signingForm.get('yuvsigners').value.length\n || missingPhoneNumber()\"\n class=\"primary\" translate>eo.action.signature.request</button>\n </eo-cta>\n </div>\n </section>\n <div class=\"loader-overlay__mask\" *ngIf=\"processingRequest\">\n <eo-loading-spinner class=\"signature__loader\" [size]=\"'large'\"></eo-loading-spinner>\n </div>\n</eo-dialog>\n", styles: ["::ng-deep .signature-form{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;justify-content:space-between}::ng-deep .signature-form .email-block{margin-top:50px;border:1px solid var(--panel-divider-color)}::ng-deep .signature-form .invalid{color:var(--color-error);margin:40px 0 15px}::ng-deep .signature-form h2{padding:0;margin:0 calc(var(--app-pane-padding) * .75);flex:1}::ng-deep .signature-form .actions{display:flex;flex:0;flex-direction:column;min-height:0;min-width:0;align-items:flex-end;justify-content:flex-end;margin:0 var(--app-pane-padding) var(--app-pane-padding);min-height:3em}::ng-deep .signature-form .actions button{white-space:nowrap}::ng-deep .signature-form .actions eo-cta{display:flex;justify-content:flex-end}::ng-deep .signature-form .actions eo-cta button:nth-child(odd){margin:0 5px}@media screen and (max-width: 800px){::ng-deep .signature-form .actions{flex-direction:column;align-items:flex-end}}.signing-form{box-sizing:border-box;margin:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);overflow:auto}.signing-form .table .label{padding-bottom:calc(var(--app-pane-padding) / 4)}.signing-form .errors{color:var(--color-error)}.loader-overlay__mask{display:flex;width:100%;height:100%;z-index:11;position:absolute;background:rgba(var(--color-white-rgb),.8);-webkit-animation:eoFadeIn .5s;animation:eoFadeIn .5s}.loader-overlay__mask .signature__loader{margin:auto}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i6.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i7.EoDialogComponent, selector: "eo-dialog", inputs: ["hasPreviewFile", "title", "subtitle", "styleClass", "dirtyCheck", "minWidth", "minHeight", "height", "width", "focusOnShow", "align", "isFormTable", "showPreview", "closeOnCancelOnly", "visible"], outputs: ["onTogglePreview", "visibleChange", "hide", "show"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.FormInputComponent, selector: "eo-form-input", inputs: ["label", "tag", "description", "skipToggle", "isNull", "invalid", "disabled", "required"], outputs: ["onToggleLabel"] }, { kind: "component", type: i9.CodesystemComponent, selector: "eo-codesystem", inputs: ["situation", "pickerTitle", "placeholder", "codesystem", "multiselect", "readonly", "inputStyleClass", "emptyMessage", "isTableElement", "filterFunction", "disablingFilterFunction"] }, { kind: "component", type: i10.CheckboxComponent, selector: "eo-checkbox", inputs: ["required", "tristate", "readonly"] }, { kind: "component", type: i11.StringComponent, selector: "eo-string", inputs: ["autocomplete", "multiselect", "multiline", "readonly", "autofocus", "classification", "situation", "regex", "qname", "size", "minLength", "maxLength"] }, { kind: "component", type: i12.CtaComponent, selector: "eo-cta", inputs: ["active"] }, { kind: "component", type: i13.SequenceListComponent, selector: "eo-sequence-list", inputs: ["MAX_SIGNERS", "phoneRequired"], outputs: ["itemEdit"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] }); }
138
141
  }
139
142
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SignatureComponent, decorators: [{
140
143
  type: Component,
141
- args: [{ selector: 'eo-signature', template: "<eo-dialog [title]=\"headerTitle\"\n [subtitle]=\"headerDescription\"\n [visible]=\"true\"\n [dirtyCheck]=\"pendingTaskIds\"\n [minWidth]=\"600\"\n [minHeight]=\"600\"\n [styleClass]=\"'process-form-dialog'\" #dialog>\n\n <section class=\"signature-form form-container\">\n <form class=\"signing-form\" [formGroup]=\"signingForm\">\n <eo-sequence-list class=\"entry_form\" form-open=\"true\" [MAX_SIGNERS]=\"maxSigners\" (itemEdit)=\"mode = $event\" [phoneRequired]=\"signingForm.get('yuvsigtype').value === 'advanced'\" [formControlName]=\"'yuvsigners'\">\n </eo-sequence-list>\n <eo-form-input [skipToggle]=\"true\" class=\"checkbox\" [label]=\"'eo.action.signature.yuvsigners.parallel' | translate\">\n <eo-checkbox formControlName=\"parallelSigning\"></eo-checkbox>\n </eo-form-input>\n <eo-form-input *ngIf=\"yuvsigtypeCodesystem.entries.length > 1\" [required]=\"true\" [label]=\"'eo.action.signature.yuvsigning.yuvsigtype' | translate\">\n <eo-codesystem\n [formControlName]=\"'yuvsigtype'\"\n [codesystem]=\"yuvsigtypeCodesystem\"\n [required]=\"true\"\n ></eo-codesystem>\n </eo-form-input>\n <eo-form-input [label]=\"'eo.action.signature.yuvsigning.yuvsigemailsubject' | translate\" [required]=\"true\">\n <eo-string\n [formControlName]=\"'yuvsigemailsubject'\"\n [minLength]=\"3\"\n [maxLength]=\"100\"\n [required]=\"true\"\n ></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"signingForm.get('yuvsigemailsubject').hasError('required')\" translate>eo.form.property.required</small>\n <eo-form-input [label]=\"'eo.action.signature.yuvsigning.yuvsigemailbody' | translate\" [required]=\"true\">\n <eo-string\n [formControlName]=\"'yuvsigemailbody'\"\n [multiline]=\"true\"\n [size]=\"'small'\"\n [minLength]=\"3\"\n [maxLength]=\"2000\"\n [required]=\"true\"\n ></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"signingForm.get('yuvsigemailbody').hasError('required')\" translate>eo.form.property.required</small>\n </form>\n\n <div class=\"actions\">\n <div *ngIf=\"signingForm?.invalid\" class=\"invalid\" translate>eo.object.indexdata.form.invalid</div>\n <eo-cta [active]=\"!processingRequest\" class=\"cta-wrapper\">\n <button (click)=\"cancel()\" class=\"button-cancel\" translate>eo.cta.button.cancel</button>\n <button (click)=\"saveForm()\" [disabled]=\"signingForm?.invalid || processingRequest || !signingForm.get('yuvsigners').value || !signingForm.get('yuvsigners').value.length\" class=\"primary\" translate>eo.action.signature.request</button>\n </eo-cta>\n </div>\n </section>\n <div class=\"loader-overlay__mask\" *ngIf=\"processingRequest\">\n <eo-loading-spinner class=\"signature__loader\" [size]=\"'large'\"></eo-loading-spinner>\n </div>\n</eo-dialog>\n", styles: ["::ng-deep .signature-form{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;justify-content:space-between}::ng-deep .signature-form .email-block{margin-top:50px;border:1px solid var(--panel-divider-color)}::ng-deep .signature-form .invalid{color:var(--color-error);margin:40px 0 15px}::ng-deep .signature-form h2{padding:0;margin:0 calc(var(--app-pane-padding) * .75);flex:1}::ng-deep .signature-form .actions{display:flex;flex:0;flex-direction:column;min-height:0;min-width:0;align-items:flex-end;justify-content:flex-end;margin:0 var(--app-pane-padding) var(--app-pane-padding);min-height:3em}::ng-deep .signature-form .actions button{white-space:nowrap}::ng-deep .signature-form .actions eo-cta{display:flex;justify-content:flex-end}::ng-deep .signature-form .actions eo-cta button:nth-child(odd){margin:0 5px}@media screen and (max-width: 800px){::ng-deep .signature-form .actions{flex-direction:column;align-items:flex-end}}.signing-form{box-sizing:border-box;margin:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);overflow:auto}.signing-form .table .label{padding-bottom:calc(var(--app-pane-padding) / 4)}.signing-form .errors{color:var(--color-error)}.loader-overlay__mask{display:flex;width:100%;height:100%;z-index:11;position:absolute;background:rgba(var(--color-white-rgb),.8);-webkit-animation:eoFadeIn .5s;animation:eoFadeIn .5s}.loader-overlay__mask .signature__loader{margin:auto}\n"] }]
144
+ args: [{ selector: 'eo-signature', template: "<eo-dialog [title]=\"headerTitle\"\n [subtitle]=\"headerDescription\"\n [visible]=\"true\"\n [dirtyCheck]=\"pendingTaskIds\"\n [minWidth]=\"600\"\n [minHeight]=\"600\"\n [styleClass]=\"'process-form-dialog'\" #dialog>\n\n <section class=\"signature-form form-container\">\n <form class=\"signing-form\" [formGroup]=\"signingForm\">\n <eo-sequence-list class=\"entry_form\" form-open=\"true\" [MAX_SIGNERS]=\"maxSigners\" (itemEdit)=\"mode = $event\" [phoneRequired]=\"signingForm.get('yuvsigtype').value === 'advanced'\" [formControlName]=\"'yuvsigners'\">\n </eo-sequence-list>\n <eo-form-input [skipToggle]=\"true\" class=\"checkbox\" [label]=\"'eo.action.signature.yuvsigners.parallel' | translate\">\n <eo-checkbox formControlName=\"parallelSigning\"></eo-checkbox>\n </eo-form-input>\n <eo-form-input *ngIf=\"yuvsigtypeCodesystem.entries.length > 1\" [required]=\"true\" [label]=\"'eo.action.signature.yuvsigning.yuvsigtype' | translate\">\n <eo-codesystem\n [formControlName]=\"'yuvsigtype'\"\n [codesystem]=\"yuvsigtypeCodesystem\"\n [required]=\"true\"\n ></eo-codesystem>\n </eo-form-input>\n <eo-form-input [label]=\"'eo.action.signature.yuvsigning.yuvsigemailsubject' | translate\" [required]=\"true\">\n <eo-string\n [formControlName]=\"'yuvsigemailsubject'\"\n [minLength]=\"3\"\n [maxLength]=\"100\"\n [required]=\"true\"\n ></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"signingForm.get('yuvsigemailsubject').hasError('required')\" translate>eo.form.property.required</small>\n <eo-form-input [label]=\"'eo.action.signature.yuvsigning.yuvsigemailbody' | translate\" [required]=\"true\">\n <eo-string\n [formControlName]=\"'yuvsigemailbody'\"\n [multiline]=\"true\"\n [size]=\"'small'\"\n [minLength]=\"3\"\n [maxLength]=\"2000\"\n [required]=\"true\"\n ></eo-string>\n </eo-form-input>\n <small class=\"errors\" *ngIf=\"signingForm.get('yuvsigemailbody').hasError('required')\" translate>eo.form.property.required</small>\n </form>\n\n <div class=\"actions\">\n <div *ngIf=\"signingForm?.invalid\" class=\"invalid\" translate>eo.object.indexdata.form.invalid</div>\n <eo-cta [active]=\"!processingRequest\" class=\"cta-wrapper\">\n <button (click)=\"cancel()\" class=\"button-cancel\" translate>eo.cta.button.cancel</button>\n <button (click)=\"saveForm()\"\n [disabled]=\"signingForm?.invalid\n || processingRequest\n || !signingForm.get('yuvsigners').value\n || !signingForm.get('yuvsigners').value.length\n || missingPhoneNumber()\"\n class=\"primary\" translate>eo.action.signature.request</button>\n </eo-cta>\n </div>\n </section>\n <div class=\"loader-overlay__mask\" *ngIf=\"processingRequest\">\n <eo-loading-spinner class=\"signature__loader\" [size]=\"'large'\"></eo-loading-spinner>\n </div>\n</eo-dialog>\n", styles: ["::ng-deep .signature-form{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;justify-content:space-between}::ng-deep .signature-form .email-block{margin-top:50px;border:1px solid var(--panel-divider-color)}::ng-deep .signature-form .invalid{color:var(--color-error);margin:40px 0 15px}::ng-deep .signature-form h2{padding:0;margin:0 calc(var(--app-pane-padding) * .75);flex:1}::ng-deep .signature-form .actions{display:flex;flex:0;flex-direction:column;min-height:0;min-width:0;align-items:flex-end;justify-content:flex-end;margin:0 var(--app-pane-padding) var(--app-pane-padding);min-height:3em}::ng-deep .signature-form .actions button{white-space:nowrap}::ng-deep .signature-form .actions eo-cta{display:flex;justify-content:flex-end}::ng-deep .signature-form .actions eo-cta button:nth-child(odd){margin:0 5px}@media screen and (max-width: 800px){::ng-deep .signature-form .actions{flex-direction:column;align-items:flex-end}}.signing-form{box-sizing:border-box;margin:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);overflow:auto}.signing-form .table .label{padding-bottom:calc(var(--app-pane-padding) / 4)}.signing-form .errors{color:var(--color-error)}.loader-overlay__mask{display:flex;width:100%;height:100%;z-index:11;position:absolute;background:rgba(var(--color-white-rgb),.8);-webkit-animation:eoFadeIn .5s;animation:eoFadeIn .5s}.loader-overlay__mask .signature__loader{margin:auto}\n"] }]
142
145
  }], ctorParameters: () => [{ type: i1.BpmService }, { type: i2.PendingChangesService }, { type: i1.TranslateService }, { type: i1.NotificationsService }, { type: i1.SigningService }, { type: i1.EventService }, { type: i1.DmsService }, { type: i1.SystemService }, { type: i1.LocalStorageService }, { type: i3.UntypedFormBuilder }], propDecorators: { dialog: [{
143
146
  type: ViewChild,
144
147
  args: ['dialog']
145
148
  }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL2FjdGlvbnMvYWN0aW9ucy9zaWduYXR1cmUtYWN0aW9uL3NpZ25hdHVyZS9zaWduYXR1cmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYWN0aW9ucy9hY3Rpb25zL3NpZ25hdHVyZS1hY3Rpb24vc2lnbmF0dXJlL3NpZ25hdHVyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUNMLEtBQUssRUFNTCxVQUFVLEVBS1gsTUFBTSxjQUFjLENBQUM7QUFPdEIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRekMsTUFBTSxPQUFPLGtCQUFrQjtJQTRCN0IsWUFBb0IsVUFBc0IsRUFDaEMsY0FBcUMsRUFDckMsU0FBMkIsRUFDM0IsT0FBNkIsRUFDN0IsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsVUFBc0IsRUFDdEIsYUFBNEIsRUFDNUIsY0FBbUMsRUFDbkMsRUFBc0I7UUFUWixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBcUI7UUFDbkMsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFuQ2hDLGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFTakQsMERBQTBEO1FBQzFELHVEQUF1RDtRQUN2RCxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQU05Qix5QkFBb0IsR0FBRztZQUNyQixFQUFFLEVBQUUsa0NBQWtDO1lBQ3RDLElBQUksRUFBRSxZQUFZO1lBQ2xCLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztRQUNGLDRCQUF1QixHQUFHLG1CQUFtQixDQUFDO1FBQzlDLGdDQUEyQixHQUFHLHVCQUF1QixDQUFDO1FBWXBELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdkYsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUUvRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQy9CLFVBQVUsRUFBRSxFQUFFO1lBQ2QsVUFBVSxFQUFFLEVBQUU7WUFDZCxlQUFlLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM5RSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4QixlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDdEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztRQUNwRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQy9DLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUM1RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLEVBQUUsRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQztZQUM3RyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQzNHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pJLENBQUM7WUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1lBRXZDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUMxQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUM1QyxlQUFlLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDdEMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzVILENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbEYsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJO2dCQUN0QixXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0JBQ3hCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztnQkFDMUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLO2FBQ3pCLENBQUMsQ0FDSCxDQUFDO1lBQ0osTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUs7Z0JBQzlELFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUs7Z0JBQ3hELGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUM5SSxPQUFPO2FBQ1UsQ0FBQztZQUNwQixJQUFJLENBQUMsY0FBYztpQkFDaEIsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQztpQkFDL0MsSUFBSSxDQUNILFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3BFO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO2dCQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3JGLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVDQUF1QyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxDQUFDO2dCQUN0SixDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztnQkFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIseUVBQXlFO1FBQ3pFLCtEQUErRDtRQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxDQUFDOzhHQS9JVSxrQkFBa0I7a0dBQWxCLGtCQUFrQixzSkM1Qi9CLDYrRkF3REE7OzJGRDVCYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsY0FBYztxV0FvQkgsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgVXRpbHMsXG4gIEJwbVNlcnZpY2UsXG4gIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBTaWduaW5nU2VydmljZSxcbiAgU2lnbmluZ1JlcXVlc3QsXG4gIEVuYWlvRXZlbnQsXG4gIEV2ZW50U2VydmljZSxcbiAgRG1zU2VydmljZSxcbiAgU3lzdGVtU2VydmljZSxcbiAgTG9jYWxTdG9yYWdlU2VydmljZVxufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtFb0RpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vdWkvZW8tZGlhbG9nL2VvLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHtBY3Rpb25Db21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvYWN0aW9uLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtQZW5kaW5nQ2hhbmdlc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BlbmRpbmctY2hhbmdlcy9wZW5kaW5nLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQge09iamVjdEZvcm1PcHRpb25zfSBmcm9tICcuLi8uLi8uLi8uLi9vYmplY3QtZm9ybSc7XG5pbXBvcnQge0Zvcm1Hcm91cCwgVW50eXBlZEZvcm1CdWlsZGVyfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3N3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDaGFuZ2VNb2RlfSBmcm9tICcuLi9zaWduYXR1cmUubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1zaWduYXR1cmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2lnbmF0dXJlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2lnbmF0dXJlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2lnbmF0dXJlQ29tcG9uZW50IGltcGxlbWVudHMgQWN0aW9uQ29tcG9uZW50LCBPbkRlc3Ryb3kge1xuICBzZWxlY3Rpb246IGFueVtdO1xuICBmaW5pc2hlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGNhbmNlbGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHJvY2Vzc2luZ1JlcXVlc3Q6IGJvb2xlYW47XG4gIGhlYWRlclRpdGxlOiBzdHJpbmc7XG4gIGhlYWRlckRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHNlbGVjdGVkOiBhbnk7XG4gIGZvcm1PcHRpb25zOiBPYmplY3RGb3JtT3B0aW9ucztcbiAgY29udGVudHM6IHtpZDogc3RyaW5nLCB0eXBlOiBzdHJpbmd9W107XG4gIG1vZGU6IENoYW5nZU1vZGU7XG5cbiAgLy8gSUQgc2V0IGJ5IHBlbmRpbmdDaGFuZ2VzIHNlcnZpY2Ugd2hlbiBlZGl0aW5nIGluZGV4ZGF0YVxuICAvLyBVc2VkIHRvIGZpbmlzaCB0aGUgcGVuZGluZyB0YXNrIHdoZW4gZWRpdGluZyBpcyBkb25lXG4gIHBlbmRpbmdUYXNrSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZycpIGRpYWxvZzogRW9EaWFsb2dDb21wb25lbnQ7XG4gIHNpZ25pbmdGb3JtOiBGb3JtR3JvdXA7XG4gIG1heFNpZ25lcnM6IG51bWJlcjtcbiAgc2lnbmluZ0Zvcm1MaXN0ZW5lcjogU3Vic2NyaXB0aW9uO1xuICB5dXZzaWd0eXBlQ29kZXN5c3RlbSA9IHtcbiAgICBpZDogJzEyOTFCQUI5MUIwRDQ5RDFBOUE0REZDQ0Y0OUExNjY2JyxcbiAgICBuYW1lOiAneXV2c2lndHlwZScsXG4gICAgZW50cmllczogW11cbiAgfTtcbiAgc2lnbmF0dXJlVHlwZVN0b3JhZ2VLZXkgPSAnZW8uc2lnbmF0dXJlLnR5cGUnO1xuICBzaWduYXR1cmVQYXJhbGxlbFN0b3JhZ2VLZXkgPSAnZW8uc2lnbmF0dXJlLnBhcmFsbGVsJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJwbVNlcnZpY2U6IEJwbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZW5kaW5nQ2hhbmdlczogUGVuZGluZ0NoYW5nZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RlcjogTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzaWduaW5nU2VydmljZTogU2lnbmluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGRtc1NlcnZpY2U6IERtc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgY29uc3QgZGVmYXVsdFNpZ25hdHVyZVR5cGUgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0odGhpcy5zaWduYXR1cmVUeXBlU3RvcmFnZUtleSk7XG4gICAgY29uc3QgZGVmYXVsdFNpZ25hdHVyZVBhcmFsbGVsID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuc2lnbmF0dXJlUGFyYWxsZWxTdG9yYWdlS2V5KTtcblxuICAgIHRoaXMuc2lnbmluZ0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHl1dnNpZ3R5cGU6IFtdLFxuICAgICAgeXV2c2lnbmVyczogW10sXG4gICAgICBwYXJhbGxlbFNpZ25pbmc6IFtkZWZhdWx0U2lnbmF0dXJlUGFyYWxsZWwgPyBkZWZhdWx0U2lnbmF0dXJlUGFyYWxsZWwgOiBmYWxzZV0sXG4gICAgICB5dXZzaWdlbWFpbHN1YmplY3Q6IFsnJ10sXG4gICAgICB5dXZzaWdlbWFpbGJvZHk6IFsnJ11cbiAgICB9KTtcbiAgICB0aGlzLmhlYWRlclRpdGxlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYWN0aW9uLnNpZ25hdHVyZS5sYWJlbCcpO1xuXG4gICAgdGhpcy5zaWduaW5nRm9ybUxpc3RlbmVyID0gdGhpcy5zaWduaW5nRm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMub25JbmRleERhdGFDaGFuZ2VkKCkpO1xuICAgIHRoaXMuc2lnbmluZ1NlcnZpY2UuZ2V0SW5mbygpLnN1YnNjcmliZSgoaW5mbykgPT4ge1xuICAgICAgbGV0IHBsYXRmb3JtTmFtZSA9IGluZm8ucGxhdGZvcm0gPT09ICdkb2N1c2lnbicgPyAnRG9jdVNpZ24nIDogJ0Fkb2JlIFNpZ24nO1xuICAgICAgdGhpcy5oZWFkZXJEZXNjcmlwdGlvbiA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmFjdGlvbi5zaWduYXR1cmUuZGVzY3JpcHRpb24nLCB7cGxhdGZvcm06IHBsYXRmb3JtTmFtZX0pO1xuICAgICAgaWYgKGluZm8uc2lnbmF0dXJlVHlwZXNFbmFibGVkKSB7XG4gICAgICAgIHRoaXMueXV2c2lndHlwZUNvZGVzeXN0ZW0uZW50cmllcyA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRDb2Rlc3lzdGVtKHRoaXMueXV2c2lndHlwZUNvZGVzeXN0ZW0uaWQpLmVudHJpZXM7XG4gICAgICAgIHRoaXMueXV2c2lndHlwZUNvZGVzeXN0ZW0uZW50cmllcyA9IHRoaXMueXV2c2lndHlwZUNvZGVzeXN0ZW0uZW50cmllcy5maWx0ZXIoZW50cnkgPT4gaW5mby5zaWduYXR1cmVUeXBlc0VuYWJsZWQuaW5jbHVkZXMoZW50cnkuZGF0YSkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1heFNpZ25lcnMgPSBpbmZvLm1heFNpZ25lcnMgfHwgNjtcblxuICAgICAgdGhpcy5zaWduaW5nRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgeXV2c2lnZW1haWxzdWJqZWN0OiBpbmZvLmRlZmF1bHRFbWFpbFN1YmplY3QsXG4gICAgICAgIHl1dnNpZ2VtYWlsYm9keTogaW5mby5kZWZhdWx0RW1haWxCb2R5LFxuICAgICAgICB5dXZzaWd0eXBlOiBkZWZhdWx0U2lnbmF0dXJlVHlwZSA/IGRlZmF1bHRTaWduYXR1cmVUeXBlIDogKGluZm8uc2lnbmF0dXJlVHlwZXNFbmFibGVkID8gaW5mby5zaWduYXR1cmVUeXBlc0VuYWJsZWRbMF0gOiAnJylcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc2F2ZUZvcm0oKSB7XG4gICAgdGhpcy5wcm9jZXNzaW5nUmVxdWVzdCA9IHRydWU7XG4gICAgaWYgKHRoaXMuc2lnbmluZ0Zvcm0gJiYgIXRoaXMuc2lnbmluZ0Zvcm0uaW52YWxpZCkge1xuICAgICAgY29uc3Qgc2lnbmVycyA9ICh0aGlzLnNpZ25pbmdGb3JtLmdldCgneXV2c2lnbmVycycpLnZhbHVlIHx8IFtdKS5tYXAoKHZhbHVlLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgIHNpZ25lck5hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICBzaWduZXJFbWFpbDogdmFsdWUuZW1haWwsXG4gICAgICAgICAgICBzaWduZXJPcmRlcjogdGhpcy5zaWduaW5nRm9ybS5nZXQoJ3BhcmFsbGVsU2lnbmluZycpLnZhbHVlID8gMSA6IGluZGV4ICsgMSxcbiAgICAgICAgICAgIHNpZ25lclBob25lOiB2YWx1ZS5waG9uZVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICBjb25zdCBzaWduaW5nRGF0YSA9IHtcbiAgICAgICAgZW1haWxTdWJqZWN0OiB0aGlzLnNpZ25pbmdGb3JtLmdldCgneXV2c2lnZW1haWxzdWJqZWN0JykudmFsdWUsXG4gICAgICAgIGVtYWlsQm9keTogdGhpcy5zaWduaW5nRm9ybS5nZXQoJ3l1dnNpZ2VtYWlsYm9keScpLnZhbHVlLFxuICAgICAgICBzaWduYXR1cmVUeXBlOiB0aGlzLnNpZ25pbmdGb3JtLmdldCgneXV2c2lndHlwZScpLnZhbHVlID8gdGhpcy5zaWduaW5nRm9ybS5nZXQoJ3l1dnNpZ3R5cGUnKS52YWx1ZSA6IHRoaXMueXV2c2lndHlwZUNvZGVzeXN0ZW0uZW50cmllc1swXS5kYXRhLFxuICAgICAgICBzaWduZXJzXG4gICAgICB9IGFzIFNpZ25pbmdSZXF1ZXN0O1xuICAgICAgdGhpcy5zaWduaW5nU2VydmljZVxuICAgICAgICAuc2lnbkRvY3VtZW50KHRoaXMuc2VsZWN0aW9uWzBdLmlkLCBzaWduaW5nRGF0YSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZG1zU2VydmljZS5nZXREbXNPYmplY3QodGhpcy5zZWxlY3Rpb25bMF0uaWQpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGRtc09iamVjdCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ1JlcXVlc3QgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2Vzcyh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5hY3Rpb24uc2lnbmF0dXJlLnJlcXVlc3Quc3VjY2VzcycpKTtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5zaWduYXR1cmVUeXBlU3RvcmFnZUtleSwgc2lnbmluZ0RhdGEuc2lnbmF0dXJlVHlwZSk7XG4gICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UudHJpZ2dlcihFbmFpb0V2ZW50LkRNU19PQkpFQ1RfVVBEQVRFRCwgZG1zT2JqZWN0KTtcbiAgICAgICAgICB0aGlzLmZpbmlzaCgpO1xuICAgICAgICB9LCBVdGlscy50aHJvdyhlcnJvciA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZXJyb3IodGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uZXJyb3IuY29ubmVjdGlvbi5pbnRlcnJ1cHRlZC50aXRsZScpLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5lcnJvci5jb25uZWN0aW9uLmludGVycnVwdGVkLnRleHQnKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcihlcnJvci5lcnJvcj8ubWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ1JlcXVlc3QgPSBmYWxzZTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGZpbmlzaCgpIHtcbiAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICB0aGlzLmRpYWxvZy52aXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5maW5pc2hlZC5lbWl0KCk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgaWYgKCF0aGlzLnBlbmRpbmdDaGFuZ2VzLmNoZWNrRm9yUGVuZGluZ1Rhc2tzKHRoaXMucGVuZGluZ1Rhc2tJZHMpKSB7XG4gICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICAgIHRoaXMuZGlhbG9nLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2FuY2VsZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uSW5kZXhEYXRhQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5zaWduaW5nRm9ybS5kaXJ0eSkge1xuICAgICAgdGhpcy5zdGFydFBlbmRpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFBlbmRpbmcoKSB7XG4gICAgLy8gYmVjYXVzZSB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBmb3JtIHN0YXR1cyBjaGFuZ2VzLFxuICAgIC8vIHBlbmRpbmcgdGFzayB3aWxsIG9ubHkgYmUgc3RhcnRlZCBvbmNlIHVudGlsIGl0IHdhcyBmaW5pc2hlZFxuICAgIGlmICghdGhpcy5wZW5kaW5nQ2hhbmdlcy5oYXNQZW5kaW5nVGFzayh0aGlzLnBlbmRpbmdUYXNrSWRzWzBdIHx8ICcgJykpIHtcbiAgICAgIHRoaXMucGVuZGluZ1Rhc2tJZHMgPSBbdGhpcy5wZW5kaW5nQ2hhbmdlcy5zdGFydFRhc2soKV07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5pc2hQZW5kaW5nKCkge1xuICAgIHRoaXMucGVuZGluZ0NoYW5nZXMuZmluaXNoVGFzayh0aGlzLnBlbmRpbmdUYXNrSWRzWzBdKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc2lnbmluZ0Zvcm1MaXN0ZW5lci51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZW8tZGlhbG9nIFt0aXRsZV09XCJoZWFkZXJUaXRsZVwiXG4gICAgICAgICAgIFtzdWJ0aXRsZV09XCJoZWFkZXJEZXNjcmlwdGlvblwiXG4gICAgICAgICAgIFt2aXNpYmxlXT1cInRydWVcIlxuICAgICAgICAgICBbZGlydHlDaGVja109XCJwZW5kaW5nVGFza0lkc1wiXG4gICAgICAgICAgIFttaW5XaWR0aF09XCI2MDBcIlxuICAgICAgICAgICBbbWluSGVpZ2h0XT1cIjYwMFwiXG4gICAgICAgICAgIFtzdHlsZUNsYXNzXT1cIidwcm9jZXNzLWZvcm0tZGlhbG9nJ1wiICNkaWFsb2c+XG5cbiAgPHNlY3Rpb24gY2xhc3M9XCJzaWduYXR1cmUtZm9ybSBmb3JtLWNvbnRhaW5lclwiPlxuICAgIDxmb3JtIGNsYXNzPVwic2lnbmluZy1mb3JtXCIgW2Zvcm1Hcm91cF09XCJzaWduaW5nRm9ybVwiPlxuICAgICAgPGVvLXNlcXVlbmNlLWxpc3QgY2xhc3M9XCJlbnRyeV9mb3JtXCIgZm9ybS1vcGVuPVwidHJ1ZVwiIFtNQVhfU0lHTkVSU109XCJtYXhTaWduZXJzXCIgKGl0ZW1FZGl0KT1cIm1vZGUgPSAkZXZlbnRcIiBbcGhvbmVSZXF1aXJlZF09XCJzaWduaW5nRm9ybS5nZXQoJ3l1dnNpZ3R5cGUnKS52YWx1ZSA9PT0gJ2FkdmFuY2VkJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3l1dnNpZ25lcnMnXCI+XG4gICAgICA8L2VvLXNlcXVlbmNlLWxpc3Q+XG4gICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgY2xhc3M9XCJjaGVja2JveFwiIFtsYWJlbF09XCInZW8uYWN0aW9uLnNpZ25hdHVyZS55dXZzaWduZXJzLnBhcmFsbGVsJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICA8ZW8tY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwicGFyYWxsZWxTaWduaW5nXCI+PC9lby1jaGVja2JveD5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIDxlby1mb3JtLWlucHV0ICpuZ0lmPVwieXV2c2lndHlwZUNvZGVzeXN0ZW0uZW50cmllcy5sZW5ndGggPiAxXCIgW3JlcXVpcmVkXT1cInRydWVcIiBbbGFiZWxdPVwiJ2VvLmFjdGlvbi5zaWduYXR1cmUueXV2c2lnbmluZy55dXZzaWd0eXBlJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICA8ZW8tY29kZXN5c3RlbVxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3l1dnNpZ3R5cGUnXCJcbiAgICAgICAgICBbY29kZXN5c3RlbV09XCJ5dXZzaWd0eXBlQ29kZXN5c3RlbVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICA+PC9lby1jb2Rlc3lzdGVtPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5hY3Rpb24uc2lnbmF0dXJlLnl1dnNpZ25pbmcueXV2c2lnZW1haWxzdWJqZWN0JyB8IHRyYW5zbGF0ZVwiIFtyZXF1aXJlZF09XCJ0cnVlXCI+XG4gICAgICAgIDxlby1zdHJpbmdcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIid5dXZzaWdlbWFpbHN1YmplY3QnXCJcbiAgICAgICAgICBbbWluTGVuZ3RoXT1cIjNcIlxuICAgICAgICAgIFttYXhMZW5ndGhdPVwiMTAwXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgID48L2VvLXN0cmluZz5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIDxzbWFsbCBjbGFzcz1cImVycm9yc1wiICpuZ0lmPVwic2lnbmluZ0Zvcm0uZ2V0KCd5dXZzaWdlbWFpbHN1YmplY3QnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5lby5mb3JtLnByb3BlcnR5LnJlcXVpcmVkPC9zbWFsbD5cbiAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uYWN0aW9uLnNpZ25hdHVyZS55dXZzaWduaW5nLnl1dnNpZ2VtYWlsYm9keScgfCB0cmFuc2xhdGVcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiPlxuICAgICAgICA8ZW8tc3RyaW5nXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCIneXV2c2lnZW1haWxib2R5J1wiXG4gICAgICAgICAgW211bHRpbGluZV09XCJ0cnVlXCJcbiAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcbiAgICAgICAgICBbbWluTGVuZ3RoXT1cIjNcIlxuICAgICAgICAgIFttYXhMZW5ndGhdPVwiMjAwMFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICA+PC9lby1zdHJpbmc+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICA8c21hbGwgY2xhc3M9XCJlcnJvcnNcIiAqbmdJZj1cInNpZ25pbmdGb3JtLmdldCgneXV2c2lnZW1haWxib2R5JykuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5yZXF1aXJlZDwvc21hbGw+XG4gICAgPC9mb3JtPlxuXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaWduaW5nRm9ybT8uaW52YWxpZFwiIGNsYXNzPVwiaW52YWxpZFwiIHRyYW5zbGF0ZT5lby5vYmplY3QuaW5kZXhkYXRhLmZvcm0uaW52YWxpZDwvZGl2PlxuICAgICAgPGVvLWN0YSBbYWN0aXZlXT1cIiFwcm9jZXNzaW5nUmVxdWVzdFwiIGNsYXNzPVwiY3RhLXdyYXBwZXJcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIiBjbGFzcz1cImJ1dHRvbi1jYW5jZWxcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2F2ZUZvcm0oKVwiIFtkaXNhYmxlZF09XCJzaWduaW5nRm9ybT8uaW52YWxpZCB8fCBwcm9jZXNzaW5nUmVxdWVzdCB8fCAhc2lnbmluZ0Zvcm0uZ2V0KCd5dXZzaWduZXJzJykudmFsdWUgfHwgIXNpZ25pbmdGb3JtLmdldCgneXV2c2lnbmVycycpLnZhbHVlLmxlbmd0aFwiIGNsYXNzPVwicHJpbWFyeVwiIHRyYW5zbGF0ZT5lby5hY3Rpb24uc2lnbmF0dXJlLnJlcXVlc3Q8L2J1dHRvbj5cbiAgICAgIDwvZW8tY3RhPlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG4gIDxkaXYgY2xhc3M9XCJsb2FkZXItb3ZlcmxheV9fbWFza1wiICpuZ0lmPVwicHJvY2Vzc2luZ1JlcXVlc3RcIj5cbiAgICA8ZW8tbG9hZGluZy1zcGlubmVyIGNsYXNzPVwic2lnbmF0dXJlX19sb2FkZXJcIiBbc2l6ZV09XCInbGFyZ2UnXCI+PC9lby1sb2FkaW5nLXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9lby1kaWFsb2c+XG4iXX0=
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL2FjdGlvbnMvYWN0aW9ucy9zaWduYXR1cmUtYWN0aW9uL3NpZ25hdHVyZS9zaWduYXR1cmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYWN0aW9ucy9hY3Rpb25zL3NpZ25hdHVyZS1hY3Rpb24vc2lnbmF0dXJlL3NpZ25hdHVyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUNMLEtBQUssRUFNTCxVQUFVLEVBS1gsTUFBTSxjQUFjLENBQUM7QUFPdEIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRekMsTUFBTSxPQUFPLGtCQUFrQjtJQTRCN0IsWUFBb0IsVUFBc0IsRUFDaEMsY0FBcUMsRUFDckMsU0FBMkIsRUFDM0IsT0FBNkIsRUFDN0IsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsVUFBc0IsRUFDdEIsYUFBNEIsRUFDNUIsY0FBbUMsRUFDbkMsRUFBc0I7UUFUWixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ2hDLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQUM3QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBcUI7UUFD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QUN6RSwrREFBK0Q7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekMsQ0FBQzs4R0FuSlUsa0JBQWtCO2tHQUFsQixrQkFBa0Isc0pDNUIvQiwybUdBOERBOzsyRkRsQ2Esa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGNBQWM7cVdBb0JILE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBWaWV3Q2hpbGQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFV0aWxzLFxuICBCcG1TZXJ2aWNlLFxuICBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgU2lnbmluZ1NlcnZpY2UsXG4gIFNpZ25pbmdSZXF1ZXN0LFxuICBFbmFpb0V2ZW50LFxuICBFdmVudFNlcnZpY2UsXG4gIERtc1NlcnZpY2UsXG4gIFN5c3RlbVNlcnZpY2UsXG4gIExvY2FsU3RvcmFnZVNlcnZpY2Vcbn0gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7RW9EaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL3VpL2VvLWRpYWxvZy9lby1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7QWN0aW9uQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2FjdGlvbi1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7UGVuZGluZ0NoYW5nZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9wZW5kaW5nLWNoYW5nZXMvcGVuZGluZy1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHtPYmplY3RGb3JtT3B0aW9uc30gZnJvbSAnLi4vLi4vLi4vLi4vb2JqZWN0LWZvcm0nO1xuaW1wb3J0IHtGb3JtR3JvdXAsIFVudHlwZWRGb3JtQnVpbGRlcn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Q2hhbmdlTW9kZX0gZnJvbSAnLi4vc2lnbmF0dXJlLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tc2lnbmF0dXJlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpZ25hdHVyZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NpZ25hdHVyZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNpZ25hdHVyZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFjdGlvbkNvbXBvbmVudCwgT25EZXN0cm95IHtcbiAgc2VsZWN0aW9uOiBhbnlbXTtcbiAgZmluaXNoZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBjYW5jZWxlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHByb2Nlc3NpbmdSZXF1ZXN0OiBib29sZWFuO1xuICBoZWFkZXJUaXRsZTogc3RyaW5nO1xuICBoZWFkZXJEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzZWxlY3RlZDogYW55O1xuICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnM7XG4gIGNvbnRlbnRzOiB7aWQ6IHN0cmluZywgdHlwZTogc3RyaW5nfVtdO1xuICBtb2RlOiBDaGFuZ2VNb2RlO1xuXG4gIC8vIElEIHNldCBieSBwZW5kaW5nQ2hhbmdlcyBzZXJ2aWNlIHdoZW4gZWRpdGluZyBpbmRleGRhdGFcbiAgLy8gVXNlZCB0byBmaW5pc2ggdGhlIHBlbmRpbmcgdGFzayB3aGVuIGVkaXRpbmcgaXMgZG9uZVxuICBwZW5kaW5nVGFza0lkczogc3RyaW5nW10gPSBbXTtcblxuICBAVmlld0NoaWxkKCdkaWFsb2cnKSBkaWFsb2c6IEVvRGlhbG9nQ29tcG9uZW50O1xuICBzaWduaW5nRm9ybTogRm9ybUdyb3VwO1xuICBtYXhTaWduZXJzOiBudW1iZXI7XG4gIHNpZ25pbmdGb3JtTGlzdGVuZXI6IFN1YnNjcmlwdGlvbjtcbiAgeXV2c2lndHlwZUNvZGVzeXN0ZW0gPSB7XG4gICAgaWQ6ICcxMjkxQkFCOTFCMEQ0OUQxQTlBNERGQ0NGNDlBMTY2NicsXG4gICAgbmFtZTogJ3l1dnNpZ3R5cGUnLFxuICAgIGVudHJpZXM6IFtdXG4gIH07XG4gIHNpZ25hdHVyZVR5cGVTdG9yYWdlS2V5ID0gJ2VvLnNpZ25hdHVyZS50eXBlJztcbiAgc2lnbmF0dXJlUGFyYWxsZWxTdG9yYWdlS2V5ID0gJ2VvLnNpZ25hdHVyZS5wYXJhbGxlbCc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBicG1TZXJ2aWNlOiBCcG1TZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVuZGluZ0NoYW5nZXM6IFBlbmRpbmdDaGFuZ2VzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0ZXI6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2lnbmluZ1NlcnZpY2U6IFNpZ25pbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkbXNTZXJ2aWNlOiBEbXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcikge1xuICAgIGNvbnN0IGRlZmF1bHRTaWduYXR1cmVUeXBlID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMuc2lnbmF0dXJlVHlwZVN0b3JhZ2VLZXkpO1xuICAgIGNvbnN0IGRlZmF1bHRTaWduYXR1cmVQYXJhbGxlbCA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSh0aGlzLnNpZ25hdHVyZVBhcmFsbGVsU3RvcmFnZUtleSk7XG5cbiAgICB0aGlzLnNpZ25pbmdGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICB5dXZzaWd0eXBlOiBbXSxcbiAgICAgIHl1dnNpZ25lcnM6IFtdLFxuICAgICAgcGFyYWxsZWxTaWduaW5nOiBbZGVmYXVsdFNpZ25hdHVyZVBhcmFsbGVsID8gZGVmYXVsdFNpZ25hdHVyZVBhcmFsbGVsIDogZmFsc2VdLFxuICAgICAgeXV2c2lnZW1haWxzdWJqZWN0OiBbJyddLFxuICAgICAgeXV2c2lnZW1haWxib2R5OiBbJyddXG4gICAgfSk7XG4gICAgdGhpcy5oZWFkZXJUaXRsZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmFjdGlvbi5zaWduYXR1cmUubGFiZWwnKTtcblxuICAgIHRoaXMuc2lnbmluZ0Zvcm1MaXN0ZW5lciA9IHRoaXMuc2lnbmluZ0Zvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uSW5kZXhEYXRhQ2hhbmdlZCgpKTtcbiAgICB0aGlzLnNpZ25pbmdTZXJ2aWNlLmdldEluZm8oKS5zdWJzY3JpYmUoKGluZm8pID0+IHtcbiAgICAgIGxldCBwbGF0Zm9ybU5hbWUgPSBpbmZvLnBsYXRmb3JtID09PSAnZG9jdXNpZ24nID8gJ0RvY3VTaWduJyA6ICdBZG9iZSBTaWduJztcbiAgICAgIHRoaXMuaGVhZGVyRGVzY3JpcHRpb24gPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5hY3Rpb24uc2lnbmF0dXJlLmRlc2NyaXB0aW9uJywge3BsYXRmb3JtOiBwbGF0Zm9ybU5hbWV9KTtcbiAgICAgIGlmIChpbmZvLnNpZ25hdHVyZVR5cGVzRW5hYmxlZCkge1xuICAgICAgICB0aGlzLnl1dnNpZ3R5cGVDb2Rlc3lzdGVtLmVudHJpZXMgPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0Q29kZXN5c3RlbSh0aGlzLnl1dnNpZ3R5cGVDb2Rlc3lzdGVtLmlkKS5lbnRyaWVzO1xuICAgICAgICB0aGlzLnl1dnNpZ3R5cGVDb2Rlc3lzdGVtLmVudHJpZXMgPSB0aGlzLnl1dnNpZ3R5cGVDb2Rlc3lzdGVtLmVudHJpZXMuZmlsdGVyKGVudHJ5ID0+IGluZm8uc2lnbmF0dXJlVHlwZXNFbmFibGVkLmluY2x1ZGVzKGVudHJ5LmRhdGEpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXhTaWduZXJzID0gaW5mby5tYXhTaWduZXJzIHx8IDY7XG5cbiAgICAgIHRoaXMuc2lnbmluZ0Zvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHl1dnNpZ2VtYWlsc3ViamVjdDogaW5mby5kZWZhdWx0RW1haWxTdWJqZWN0LFxuICAgICAgICB5dXZzaWdlbWFpbGJvZHk6IGluZm8uZGVmYXVsdEVtYWlsQm9keSxcbiAgICAgICAgeXV2c2lndHlwZTogZGVmYXVsdFNpZ25hdHVyZVR5cGUgPyBkZWZhdWx0U2lnbmF0dXJlVHlwZSA6IChpbmZvLnNpZ25hdHVyZVR5cGVzRW5hYmxlZCA/IGluZm8uc2lnbmF0dXJlVHlwZXNFbmFibGVkWzBdIDogJycpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNhdmVGb3JtKCkge1xuICAgIHRoaXMucHJvY2Vzc2luZ1JlcXVlc3QgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNpZ25pbmdGb3JtICYmICF0aGlzLnNpZ25pbmdGb3JtLmludmFsaWQpIHtcbiAgICAgIGNvbnN0IHNpZ25lcnMgPSAodGhpcy5zaWduaW5nRm9ybS5nZXQoJ3l1dnNpZ25lcnMnKS52YWx1ZSB8fCBbXSkubWFwKCh2YWx1ZSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICBzaWduZXJOYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgc2lnbmVyRW1haWw6IHZhbHVlLmVtYWlsLFxuICAgICAgICAgICAgc2lnbmVyT3JkZXI6IHRoaXMuc2lnbmluZ0Zvcm0uZ2V0KCdwYXJhbGxlbFNpZ25pbmcnKS52YWx1ZSA/IDEgOiBpbmRleCArIDEsXG4gICAgICAgICAgICBzaWduZXJQaG9uZTogdmFsdWUucGhvbmVcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgY29uc3Qgc2lnbmluZ0RhdGEgPSB7XG4gICAgICAgIGVtYWlsU3ViamVjdDogdGhpcy5zaWduaW5nRm9ybS5nZXQoJ3l1dnNpZ2VtYWlsc3ViamVjdCcpLnZhbHVlLFxuICAgICAgICBlbWFpbEJvZHk6IHRoaXMuc2lnbmluZ0Zvcm0uZ2V0KCd5dXZzaWdlbWFpbGJvZHknKS52YWx1ZSxcbiAgICAgICAgc2lnbmF0dXJlVHlwZTogdGhpcy5zaWduaW5nRm9ybS5nZXQoJ3l1dnNpZ3R5cGUnKS52YWx1ZSA/IHRoaXMuc2lnbmluZ0Zvcm0uZ2V0KCd5dXZzaWd0eXBlJykudmFsdWUgOiB0aGlzLnl1dnNpZ3R5cGVDb2Rlc3lzdGVtLmVudHJpZXNbMF0uZGF0YSxcbiAgICAgICAgc2lnbmVyc1xuICAgICAgfSBhcyBTaWduaW5nUmVxdWVzdDtcbiAgICAgIHRoaXMuc2lnbmluZ1NlcnZpY2VcbiAgICAgICAgLnNpZ25Eb2N1bWVudCh0aGlzLnNlbGVjdGlvblswXS5pZCwgc2lnbmluZ0RhdGEpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmRtc1NlcnZpY2UuZ2V0RG1zT2JqZWN0KHRoaXMuc2VsZWN0aW9uWzBdLmlkKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChkbXNPYmplY3QpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NpbmdSZXF1ZXN0ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYWN0aW9uLnNpZ25hdHVyZS5yZXF1ZXN0LnN1Y2Nlc3MnKSk7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMuc2lnbmF0dXJlVHlwZVN0b3JhZ2VLZXksIHNpZ25pbmdEYXRhLnNpZ25hdHVyZVR5cGUpO1xuICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnRyaWdnZXIoRW5haW9FdmVudC5ETVNfT0JKRUNUX1VQREFURUQsIGRtc09iamVjdCk7XG4gICAgICAgICAgdGhpcy5maW5pc2goKTtcbiAgICAgICAgfSwgVXRpbHMudGhyb3coZXJyb3IgPT4ge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdGVyLmVycm9yKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmVycm9yLmNvbm5lY3Rpb24uaW50ZXJydXB0ZWQudGl0bGUnKSwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uZXJyb3IuY29ubmVjdGlvbi5pbnRlcnJ1cHRlZC50ZXh0JykpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZXJyb3IoZXJyb3IuZXJyb3I/Lm1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnByb2Nlc3NpbmdSZXF1ZXN0ID0gZmFsc2U7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICBmaW5pc2goKSB7XG4gICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgdGhpcy5kaWFsb2cudmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZmluaXNoZWQuZW1pdCgpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIGlmICghdGhpcy5wZW5kaW5nQ2hhbmdlcy5jaGVja0ZvclBlbmRpbmdUYXNrcyh0aGlzLnBlbmRpbmdUYXNrSWRzKSkge1xuICAgICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgICB0aGlzLmRpYWxvZy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmNhbmNlbGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBvbkluZGV4RGF0YUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuc2lnbmluZ0Zvcm0uZGlydHkpIHtcbiAgICAgIHRoaXMuc3RhcnRQZW5kaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIG1pc3NpbmdQaG9uZU51bWJlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaWduaW5nRm9ybS5nZXQoJ3l1dnNpZ3R5cGUnKS52YWx1ZSA9PT0gJ2FkdmFuY2VkJyAmJiB0aGlzLnNpZ25pbmdGb3JtLmdldCgneXV2c2lnbmVycycpLnZhbHVlLmZpbmQoc2lnbmVyID0+ICFzaWduZXIucGhvbmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFBlbmRpbmcoKSB7XG4gICAgLy8gYmVjYXVzZSB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBmb3JtIHN0YXR1cyBjaGFuZ2VzLFxuICAgIC8vIHBlbmRpbmcgdGFzayB3aWxsIG9ubHkgYmUgc3RhcnRlZCBvbmNlIHVudGlsIGl0IHdhcyBmaW5pc2hlZFxuICAgIGlmICghdGhpcy5wZW5kaW5nQ2hhbmdlcy5oYXNQZW5kaW5nVGFzayh0aGlzLnBlbmRpbmdUYXNrSWRzWzBdIHx8ICcgJykpIHtcbiAgICAgIHRoaXMucGVuZGluZ1Rhc2tJZHMgPSBbdGhpcy5wZW5kaW5nQ2hhbmdlcy5zdGFydFRhc2soKV07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5pc2hQZW5kaW5nKCkge1xuICAgIHRoaXMucGVuZGluZ0NoYW5nZXMuZmluaXNoVGFzayh0aGlzLnBlbmRpbmdUYXNrSWRzWzBdKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc2lnbmluZ0Zvcm1MaXN0ZW5lci51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZW8tZGlhbG9nIFt0aXRsZV09XCJoZWFkZXJUaXRsZVwiXG4gICAgICAgICAgIFtzdWJ0aXRsZV09XCJoZWFkZXJEZXNjcmlwdGlvblwiXG4gICAgICAgICAgIFt2aXNpYmxlXT1cInRydWVcIlxuICAgICAgICAgICBbZGlydHlDaGVja109XCJwZW5kaW5nVGFza0lkc1wiXG4gICAgICAgICAgIFttaW5XaWR0aF09XCI2MDBcIlxuICAgICAgICAgICBbbWluSGVpZ2h0XT1cIjYwMFwiXG4gICAgICAgICAgIFtzdHlsZUNsYXNzXT1cIidwcm9jZXNzLWZvcm0tZGlhbG9nJ1wiICNkaWFsb2c+XG5cbiAgPHNlY3Rpb24gY2xhc3M9XCJzaWduYXR1cmUtZm9ybSBmb3JtLWNvbnRhaW5lclwiPlxuICAgIDxmb3JtIGNsYXNzPVwic2lnbmluZy1mb3JtXCIgW2Zvcm1Hcm91cF09XCJzaWduaW5nRm9ybVwiPlxuICAgICAgPGVvLXNlcXVlbmNlLWxpc3QgY2xhc3M9XCJlbnRyeV9mb3JtXCIgZm9ybS1vcGVuPVwidHJ1ZVwiIFtNQVhfU0lHTkVSU109XCJtYXhTaWduZXJzXCIgKGl0ZW1FZGl0KT1cIm1vZGUgPSAkZXZlbnRcIiBbcGhvbmVSZXF1aXJlZF09XCJzaWduaW5nRm9ybS5nZXQoJ3l1dnNpZ3R5cGUnKS52YWx1ZSA9PT0gJ2FkdmFuY2VkJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3l1dnNpZ25lcnMnXCI+XG4gICAgICA8L2VvLXNlcXVlbmNlLWxpc3Q+XG4gICAgICA8ZW8tZm9ybS1pbnB1dCBbc2tpcFRvZ2dsZV09XCJ0cnVlXCIgY2xhc3M9XCJjaGVja2JveFwiIFtsYWJlbF09XCInZW8uYWN0aW9uLnNpZ25hdHVyZS55dXZzaWduZXJzLnBhcmFsbGVsJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICA8ZW8tY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwicGFyYWxsZWxTaWduaW5nXCI+PC9lby1jaGVja2JveD5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIDxlby1mb3JtLWlucHV0ICpuZ0lmPVwieXV2c2lndHlwZUNvZGVzeXN0ZW0uZW50cmllcy5sZW5ndGggPiAxXCIgW3JlcXVpcmVkXT1cInRydWVcIiBbbGFiZWxdPVwiJ2VvLmFjdGlvbi5zaWduYXR1cmUueXV2c2lnbmluZy55dXZzaWd0eXBlJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICA8ZW8tY29kZXN5c3RlbVxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3l1dnNpZ3R5cGUnXCJcbiAgICAgICAgICBbY29kZXN5c3RlbV09XCJ5dXZzaWd0eXBlQ29kZXN5c3RlbVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICA+PC9lby1jb2Rlc3lzdGVtPlxuICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5hY3Rpb24uc2lnbmF0dXJlLnl1dnNpZ25pbmcueXV2c2lnZW1haWxzdWJqZWN0JyB8IHRyYW5zbGF0ZVwiIFtyZXF1aXJlZF09XCJ0cnVlXCI+XG4gICAgICAgIDxlby1zdHJpbmdcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIid5dXZzaWdlbWFpbHN1YmplY3QnXCJcbiAgICAgICAgICBbbWluTGVuZ3RoXT1cIjNcIlxuICAgICAgICAgIFttYXhMZW5ndGhdPVwiMTAwXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgID48L2VvLXN0cmluZz5cbiAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgIDxzbWFsbCBjbGFzcz1cImVycm9yc1wiICpuZ0lmPVwic2lnbmluZ0Zvcm0uZ2V0KCd5dXZzaWdlbWFpbHN1YmplY3QnKS5oYXNFcnJvcigncmVxdWlyZWQnKVwiIHRyYW5zbGF0ZT5lby5mb3JtLnByb3BlcnR5LnJlcXVpcmVkPC9zbWFsbD5cbiAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uYWN0aW9uLnNpZ25hdHVyZS55dXZzaWduaW5nLnl1dnNpZ2VtYWlsYm9keScgfCB0cmFuc2xhdGVcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiPlxuICAgICAgICA8ZW8tc3RyaW5nXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCIneXV2c2lnZW1haWxib2R5J1wiXG4gICAgICAgICAgW211bHRpbGluZV09XCJ0cnVlXCJcbiAgICAgICAgICBbc2l6ZV09XCInc21hbGwnXCJcbiAgICAgICAgICBbbWluTGVuZ3RoXT1cIjNcIlxuICAgICAgICAgIFttYXhMZW5ndGhdPVwiMjAwMFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICA+PC9lby1zdHJpbmc+XG4gICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICA8c21hbGwgY2xhc3M9XCJlcnJvcnNcIiAqbmdJZj1cInNpZ25pbmdGb3JtLmdldCgneXV2c2lnZW1haWxib2R5JykuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIiB0cmFuc2xhdGU+ZW8uZm9ybS5wcm9wZXJ0eS5yZXF1aXJlZDwvc21hbGw+XG4gICAgPC9mb3JtPlxuXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaWduaW5nRm9ybT8uaW52YWxpZFwiIGNsYXNzPVwiaW52YWxpZFwiIHRyYW5zbGF0ZT5lby5vYmplY3QuaW5kZXhkYXRhLmZvcm0uaW52YWxpZDwvZGl2PlxuICAgICAgPGVvLWN0YSBbYWN0aXZlXT1cIiFwcm9jZXNzaW5nUmVxdWVzdFwiIGNsYXNzPVwiY3RhLXdyYXBwZXJcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIiBjbGFzcz1cImJ1dHRvbi1jYW5jZWxcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2F2ZUZvcm0oKVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNpZ25pbmdGb3JtPy5pbnZhbGlkXG4gICAgICAgICAgICAgICAgfHwgcHJvY2Vzc2luZ1JlcXVlc3RcbiAgICAgICAgICAgICAgICB8fCAhc2lnbmluZ0Zvcm0uZ2V0KCd5dXZzaWduZXJzJykudmFsdWVcbiAgICAgICAgICAgICAgICB8fCAhc2lnbmluZ0Zvcm0uZ2V0KCd5dXZzaWduZXJzJykudmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgfHwgbWlzc2luZ1Bob25lTnVtYmVyKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHJpbWFyeVwiIHRyYW5zbGF0ZT5lby5hY3Rpb24uc2lnbmF0dXJlLnJlcXVlc3Q8L2J1dHRvbj5cbiAgICAgIDwvZW8tY3RhPlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG4gIDxkaXYgY2xhc3M9XCJsb2FkZXItb3ZlcmxheV9fbWFza1wiICpuZ0lmPVwicHJvY2Vzc2luZ1JlcXVlc3RcIj5cbiAgICA8ZW8tbG9hZGluZy1zcGlubmVyIGNsYXNzPVwic2lnbmF0dXJlX19sb2FkZXJcIiBbc2l6ZV09XCInbGFyZ2UnXCI+PC9lby1sb2FkaW5nLXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9lby1kaWFsb2c+XG4iXX0=