ngx-techlify-checksheet 18.1.0 → 18.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,23 +3,21 @@ import { Validators } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "ngx-techlify-core";
5
5
  import * as i2 from "@angular/forms";
6
- import * as i3 from "ngx-spinner";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "@angular/material/dialog";
9
- import * as i6 from "@angular/router";
10
- import * as i7 from "../checksheet-format.service";
11
- import * as i8 from "@angular/flex-layout/flex";
12
- import * as i9 from "@angular/material/button";
13
- import * as i10 from "@angular/material/card";
14
- import * as i11 from "@angular/material/form-field";
15
- import * as i12 from "@angular/material/icon";
16
- import * as i13 from "@angular/material/input";
17
- import * as i14 from "@angular/material/progress-bar";
18
- import * as i15 from "../checksheet-format/checksheet-format-copy-button/checksheet-format-copy-button.component";
19
- import * as i16 from "../checksheet-format/checksheet-format-delete-button/checksheet-format-delete-button.component";
20
- import * as i17 from "../checksheet-format/checksheet-format-unpublish-button/checksheet-format-unpublish-button.component";
21
- import * as i18 from "../checksheet-format/checksheet-format-publish-button/checksheet-format-publish-button.component";
22
- import * as i19 from "../checksheet-question-list/checksheet-question-list.component";
6
+ import * as i3 from "@angular/common";
7
+ import * as i4 from "@angular/router";
8
+ import * as i5 from "../checksheet-format.service";
9
+ import * as i6 from "@angular/flex-layout/flex";
10
+ import * as i7 from "@angular/material/button";
11
+ import * as i8 from "@angular/material/card";
12
+ import * as i9 from "@angular/material/form-field";
13
+ import * as i10 from "@angular/material/icon";
14
+ import * as i11 from "@angular/material/input";
15
+ import * as i12 from "@angular/material/progress-bar";
16
+ import * as i13 from "../checksheet-format/checksheet-format-copy-button/checksheet-format-copy-button.component";
17
+ import * as i14 from "../checksheet-format/checksheet-format-delete-button/checksheet-format-delete-button.component";
18
+ import * as i15 from "../checksheet-format/checksheet-format-unpublish-button/checksheet-format-unpublish-button.component";
19
+ import * as i16 from "../checksheet-format/checksheet-format-publish-button/checksheet-format-publish-button.component";
20
+ import * as i17 from "../checksheet-question-list/checksheet-question-list.component";
23
21
  const errorMessages = {
24
22
  title: {
25
23
  required: 'The title is required.'
@@ -28,12 +26,8 @@ const errorMessages = {
28
26
  export class ChecksheetFormatFormComponent {
29
27
  formValidatorService;
30
28
  fb;
31
- spinnerService;
32
29
  alertService;
33
30
  location;
34
- errorHandler;
35
- dataManager;
36
- dialog;
37
31
  route;
38
32
  checksheetFormatService;
39
33
  checksheetForm;
@@ -43,16 +37,12 @@ export class ChecksheetFormatFormComponent {
43
37
  id;
44
38
  disableInput;
45
39
  isLoading = false;
46
- showChecksheetInfo = false;
47
- constructor(formValidatorService, fb, spinnerService, alertService, location, errorHandler, dataManager, dialog, route, checksheetFormatService) {
40
+ isShowChecksheetInfo = false;
41
+ constructor(formValidatorService, fb, alertService, location, route, checksheetFormatService) {
48
42
  this.formValidatorService = formValidatorService;
49
43
  this.fb = fb;
50
- this.spinnerService = spinnerService;
51
44
  this.alertService = alertService;
52
45
  this.location = location;
53
- this.errorHandler = errorHandler;
54
- this.dataManager = dataManager;
55
- this.dialog = dialog;
56
46
  this.route = route;
57
47
  this.checksheetFormatService = checksheetFormatService;
58
48
  this.id = parseInt(this.route.snapshot.params?.['checksheetId']);
@@ -102,7 +92,7 @@ export class ChecksheetFormatFormComponent {
102
92
  this.checksheetFormat = result?.item;
103
93
  this.checksheetForm.patchValue({ ...this.checksheetFormat });
104
94
  this.updateMode = true;
105
- this.showChecksheetInfo = false;
95
+ this.isShowChecksheetInfo = false;
106
96
  this.alertService.addAlert('Checksheet format saved successfully', 'success');
107
97
  },
108
98
  error: () => {
@@ -112,8 +102,13 @@ export class ChecksheetFormatFormComponent {
112
102
  }
113
103
  loadChecksheetFormat() {
114
104
  this.isLoading = true;
115
- const params = { with: 'questions.answers,questions.type' };
116
- this.checksheetFormatService.show(this.id, params).subscribe({
105
+ const params = { with: 'questions.answers,questions.type,creator', withCount: 'submissions' };
106
+ const formatId = this.checksheetFormat ? this.checksheetFormat?.id : this.id;
107
+ if (!formatId) {
108
+ this.alertService.addAlert('Unable to load the checksheet format.', 'error');
109
+ return;
110
+ }
111
+ this.checksheetFormatService.show(formatId, params).subscribe({
117
112
  next: (result) => {
118
113
  this.isLoading = false;
119
114
  this.checksheetForm.patchValue(result?.item);
@@ -124,13 +119,21 @@ export class ChecksheetFormatFormComponent {
124
119
  }
125
120
  });
126
121
  }
127
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetFormatFormComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.UntypedFormBuilder }, { token: i3.NgxSpinnerService }, { token: i1.AlertService }, { token: i4.Location }, { token: i1.ErrorHandlerService }, { token: i1.DataManager }, { token: i5.MatDialog }, { token: i6.ActivatedRoute }, { token: i7.ChecksheetFormatService }], target: i0.ɵɵFactoryTarget.Component });
128
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetFormatFormComponent, selector: "app-checksheet-format-form", inputs: { disableInput: "disableInput" }, ngImport: i0, template: "<div class=\"d-flex justify-content-start align-items-start gap-3 w-100\" *ngIf=\"!isLoading\">\n <div class=\"d-flex flex-column gap-3\" style=\"width: 80%\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined fs-1\">\n list_alt_check\n </span>\n <h2 class=\"mb-0\">{{ checksheetFormat ? 'Update' : 'Create' }} Checksheet Format</h2>\n </div>\n <span class=\"badge bg-secondary\" *ngIf=\"checksheetFormat?.questions\">\n {{ checksheetFormat?.questions?.length }} Questions\n </span>\n </mat-card-content>\n </mat-card>\n\n <app-checksheet-question-list class=\"w-100\" [(checksheet)]=\"checksheetFormat\" [disableInput]=\"disableInput\">\n </app-checksheet-question-list>\n </div>\n <div style=\"width: calc(20% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <mat-card *ngIf=\"!checksheetFormat || showChecksheetInfo\">\n <mat-card-content>\n <h3>Checksheet Format Information</h3>\n <form [formGroup]=\"checksheetForm\" (submit)=\"submit()\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\">\n <mat-form-field>\n <input matInput formControlName=\"title\" placeholder=\"Title\" autocomplete=\"off\" required/>\n <mat-error *ngIf=\"isFieldValid('title')\">\n {{ getErrorMessage('title') }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"my-2\" fxLayout=\"row\" fxLayoutGap=\"15px\" fxLayoutAlign=\"end\" *ngIf=\"!disableInput\">\n <button [disabled]=\"isSaving\" mat-flat-button type=\"button\" (click)=\"showChecksheetInfo = false\">\n Cancel\n </button>\n <button [disabled]=\"isSaving\" mat-raised-button type=\"submit\" color=\"primary\">\n Save\n </button>\n\n <app-checksheet-format-publish-button [checksheetFormat]=\"checksheetFormat\" *ngIf=\"updateMode\"\n (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-publish-button>\n </div>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card *ngIf=\"checksheetFormat && !showChecksheetInfo\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-2\">\n <h3 class=\"mb-0\">Information</h3>\n <div class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-icon class=\"cursor-pointer\" (click)=\"showChecksheetInfo = true\">edit</mat-icon>\n <app-checksheet-format-delete-button [checksheetFormat]=\"checksheetFormat\" (deleted)=\"loadChecksheetFormat()\">\n </app-checksheet-format-delete-button>\n\n <app-checksheet-format-copy-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-copy-button>\n\n <app-checksheet-format-unpublish-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-unpublish-button>\n\n <app-checksheet-format-publish-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\" viewMode=\"icon\">\n </app-checksheet-format-publish-button>\n </div>\n </div>\n </mat-card-content>\n <mat-card-content class=\"mt-3 d-flex flex-column justify-content-center align-items-center gap-2\">\n <h2 class=\"mb-0\">{{ checksheetFormat?.title }}</h2>\n <span class=\"badge bg-secondary\">{{ checksheetFormat?.submissions_count }} Checksheet Submissions</span>\n <small class=\"text-secondary\">\n By {{ checksheetFormat?.creator?.name }} on {{ checksheetFormat?.created_at| date }}\n </small>\n </mat-card-content>\n </mat-card>\n\n <app-note-list *ngIf=\"checksheetFormat\" viewMode=\"timeline\" [relatedModelId]=\"checksheetFormat?.id\"\n modelType=\"ChecksheetFormat\"></app-note-list>\n </div>\n</div>\n\n<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i10.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i1.NoteListComponent, selector: "app-note-list", inputs: ["relatedModelId", "modelType", "readonly", "labelText", "commentsView", "viewMode"] }, { kind: "component", type: i15.ChecksheetFormatCopyButtonComponent, selector: "app-checksheet-format-copy-button", inputs: ["checksheetFormat"], outputs: ["changed"] }, { kind: "component", type: i16.ChecksheetFormatDeleteButtonComponent, selector: "app-checksheet-format-delete-button", inputs: ["checksheetFormat"], outputs: ["deleted"] }, { kind: "component", type: i17.ChecksheetFormatUnpublishButtonComponent, selector: "app-checksheet-format-unpublish-button", inputs: ["checksheetFormat"], outputs: ["changed"] }, { kind: "component", type: i18.ChecksheetFormatPublishButtonComponent, selector: "app-checksheet-format-publish-button", inputs: ["checksheetFormat", "viewMode"], outputs: ["changed"] }, { kind: "component", type: i19.ChecksheetQuestionListComponent, selector: "app-checksheet-question-list", inputs: ["checksheet", "submission", "disableInput"], outputs: ["checksheetChange"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
122
+ handleCancel() {
123
+ if (this.checksheetFormat) {
124
+ this.isShowChecksheetInfo = false;
125
+ }
126
+ else {
127
+ this.location.back();
128
+ }
129
+ }
130
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetFormatFormComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.UntypedFormBuilder }, { token: i1.AlertService }, { token: i3.Location }, { token: i4.ActivatedRoute }, { token: i5.ChecksheetFormatService }], target: i0.ɵɵFactoryTarget.Component });
131
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetFormatFormComponent, selector: "app-checksheet-format-form", inputs: { disableInput: "disableInput" }, ngImport: i0, template: "<div class=\"d-flex justify-content-start align-items-start gap-3 w-100\" *ngIf=\"!isLoading\">\n <div class=\"d-flex flex-column gap-3\" style=\"width: 80%\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined fs-1\">\n list_alt_check\n </span>\n <h2 class=\"mb-0\">{{ checksheetFormat ? 'Update' : 'Create' }} Checksheet Format</h2>\n </div>\n <span class=\"badge bg-secondary\" *ngIf=\"checksheetFormat?.questions\">\n {{ checksheetFormat?.questions?.length }} Questions\n </span>\n </mat-card-content>\n </mat-card>\n\n <app-checksheet-question-list class=\"w-100\" [(checksheet)]=\"checksheetFormat\" [disableInput]=\"disableInput\">\n </app-checksheet-question-list>\n </div>\n <div style=\"width: calc(20% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <mat-card *ngIf=\"!checksheetFormat || isShowChecksheetInfo\">\n <mat-card-content>\n <h3>Checksheet Format Information</h3>\n <form [formGroup]=\"checksheetForm\" (submit)=\"submit()\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\">\n <mat-form-field>\n <input matInput formControlName=\"title\" placeholder=\"Title\" autocomplete=\"off\" required/>\n <mat-error *ngIf=\"isFieldValid('title')\">\n {{ getErrorMessage('title') }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"my-2 d-flex justify-content-end align-items-center gap-1 flex-wrap\" *ngIf=\"!disableInput\">\n <button [disabled]=\"isSaving\" mat-raised-button type=\"submit\" color=\"primary\">\n Save\n </button>\n\n <app-checksheet-format-publish-button [checksheetFormat]=\"checksheetFormat\" *ngIf=\"updateMode\"\n (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-publish-button>\n\n <button [disabled]=\"isSaving\" mat-flat-button type=\"button\" (click)=\"handleCancel()\">\n Cancel\n </button>\n </div>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card *ngIf=\"checksheetFormat && !isShowChecksheetInfo\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-2\">\n <h3 class=\"mb-0\">Information</h3>\n <div class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-icon class=\"cursor-pointer\" (click)=\"isShowChecksheetInfo = true\">edit</mat-icon>\n <app-checksheet-format-delete-button [checksheetFormat]=\"checksheetFormat\" (deleted)=\"loadChecksheetFormat()\">\n </app-checksheet-format-delete-button>\n\n <app-checksheet-format-copy-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-copy-button>\n\n <app-checksheet-format-unpublish-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-unpublish-button>\n\n <app-checksheet-format-publish-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\" viewMode=\"icon\">\n </app-checksheet-format-publish-button>\n </div>\n </div>\n </mat-card-content>\n <mat-card-content class=\"mt-3 d-flex flex-column justify-content-center align-items-center gap-2\">\n <h2 class=\"mb-0\">{{ checksheetFormat?.title }}</h2>\n <div class=\"d-flex flex-wrap justify-content-center align-items-center gap-2\">\n <span class=\"badge bg-secondary\">{{ checksheetFormat?.submissions_count }} Checksheet Submissions</span>\n <span class=\"badge\" [class.bg-success]=\"checksheetFormat?.is_published\"\n [class.bg-danger]=\"!checksheetFormat?.is_published\">\n {{ checksheetFormat?.is_published ? 'Published' : 'Unpublished' }}\n </span>\n </div>\n <small class=\"text-secondary\">\n By {{ checksheetFormat?.creator?.name }} on {{ checksheetFormat?.created_at| date }}\n </small>\n </mat-card-content>\n </mat-card>\n\n <app-note-list *ngIf=\"checksheetFormat\" viewMode=\"timeline\" [relatedModelId]=\"checksheetFormat?.id\"\n modelType=\"ChecksheetFormat\"></app-note-list>\n </div>\n</div>\n\n<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i6.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i8.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i12.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i1.NoteListComponent, selector: "app-note-list", inputs: ["relatedModelId", "modelType", "readonly", "labelText", "commentsView", "viewMode"] }, { kind: "component", type: i13.ChecksheetFormatCopyButtonComponent, selector: "app-checksheet-format-copy-button", inputs: ["checksheetFormat"], outputs: ["changed"] }, { kind: "component", type: i14.ChecksheetFormatDeleteButtonComponent, selector: "app-checksheet-format-delete-button", inputs: ["checksheetFormat"], outputs: ["deleted"] }, { kind: "component", type: i15.ChecksheetFormatUnpublishButtonComponent, selector: "app-checksheet-format-unpublish-button", inputs: ["checksheetFormat"], outputs: ["changed"] }, { kind: "component", type: i16.ChecksheetFormatPublishButtonComponent, selector: "app-checksheet-format-publish-button", inputs: ["checksheetFormat", "viewMode"], outputs: ["changed"] }, { kind: "component", type: i17.ChecksheetQuestionListComponent, selector: "app-checksheet-question-list", inputs: ["checksheet", "submission", "disableInput"], outputs: ["checksheetChange"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
129
132
  }
130
133
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetFormatFormComponent, decorators: [{
131
134
  type: Component,
132
- args: [{ selector: 'app-checksheet-format-form', template: "<div class=\"d-flex justify-content-start align-items-start gap-3 w-100\" *ngIf=\"!isLoading\">\n <div class=\"d-flex flex-column gap-3\" style=\"width: 80%\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined fs-1\">\n list_alt_check\n </span>\n <h2 class=\"mb-0\">{{ checksheetFormat ? 'Update' : 'Create' }} Checksheet Format</h2>\n </div>\n <span class=\"badge bg-secondary\" *ngIf=\"checksheetFormat?.questions\">\n {{ checksheetFormat?.questions?.length }} Questions\n </span>\n </mat-card-content>\n </mat-card>\n\n <app-checksheet-question-list class=\"w-100\" [(checksheet)]=\"checksheetFormat\" [disableInput]=\"disableInput\">\n </app-checksheet-question-list>\n </div>\n <div style=\"width: calc(20% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <mat-card *ngIf=\"!checksheetFormat || showChecksheetInfo\">\n <mat-card-content>\n <h3>Checksheet Format Information</h3>\n <form [formGroup]=\"checksheetForm\" (submit)=\"submit()\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\">\n <mat-form-field>\n <input matInput formControlName=\"title\" placeholder=\"Title\" autocomplete=\"off\" required/>\n <mat-error *ngIf=\"isFieldValid('title')\">\n {{ getErrorMessage('title') }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"my-2\" fxLayout=\"row\" fxLayoutGap=\"15px\" fxLayoutAlign=\"end\" *ngIf=\"!disableInput\">\n <button [disabled]=\"isSaving\" mat-flat-button type=\"button\" (click)=\"showChecksheetInfo = false\">\n Cancel\n </button>\n <button [disabled]=\"isSaving\" mat-raised-button type=\"submit\" color=\"primary\">\n Save\n </button>\n\n <app-checksheet-format-publish-button [checksheetFormat]=\"checksheetFormat\" *ngIf=\"updateMode\"\n (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-publish-button>\n </div>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card *ngIf=\"checksheetFormat && !showChecksheetInfo\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-2\">\n <h3 class=\"mb-0\">Information</h3>\n <div class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-icon class=\"cursor-pointer\" (click)=\"showChecksheetInfo = true\">edit</mat-icon>\n <app-checksheet-format-delete-button [checksheetFormat]=\"checksheetFormat\" (deleted)=\"loadChecksheetFormat()\">\n </app-checksheet-format-delete-button>\n\n <app-checksheet-format-copy-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-copy-button>\n\n <app-checksheet-format-unpublish-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-unpublish-button>\n\n <app-checksheet-format-publish-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\" viewMode=\"icon\">\n </app-checksheet-format-publish-button>\n </div>\n </div>\n </mat-card-content>\n <mat-card-content class=\"mt-3 d-flex flex-column justify-content-center align-items-center gap-2\">\n <h2 class=\"mb-0\">{{ checksheetFormat?.title }}</h2>\n <span class=\"badge bg-secondary\">{{ checksheetFormat?.submissions_count }} Checksheet Submissions</span>\n <small class=\"text-secondary\">\n By {{ checksheetFormat?.creator?.name }} on {{ checksheetFormat?.created_at| date }}\n </small>\n </mat-card-content>\n </mat-card>\n\n <app-note-list *ngIf=\"checksheetFormat\" viewMode=\"timeline\" [relatedModelId]=\"checksheetFormat?.id\"\n modelType=\"ChecksheetFormat\"></app-note-list>\n </div>\n</div>\n\n<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n" }]
133
- }], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.UntypedFormBuilder }, { type: i3.NgxSpinnerService }, { type: i1.AlertService }, { type: i4.Location }, { type: i1.ErrorHandlerService }, { type: i1.DataManager }, { type: i5.MatDialog }, { type: i6.ActivatedRoute }, { type: i7.ChecksheetFormatService }], propDecorators: { disableInput: [{
135
+ args: [{ selector: 'app-checksheet-format-form', template: "<div class=\"d-flex justify-content-start align-items-start gap-3 w-100\" *ngIf=\"!isLoading\">\n <div class=\"d-flex flex-column gap-3\" style=\"width: 80%\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined fs-1\">\n list_alt_check\n </span>\n <h2 class=\"mb-0\">{{ checksheetFormat ? 'Update' : 'Create' }} Checksheet Format</h2>\n </div>\n <span class=\"badge bg-secondary\" *ngIf=\"checksheetFormat?.questions\">\n {{ checksheetFormat?.questions?.length }} Questions\n </span>\n </mat-card-content>\n </mat-card>\n\n <app-checksheet-question-list class=\"w-100\" [(checksheet)]=\"checksheetFormat\" [disableInput]=\"disableInput\">\n </app-checksheet-question-list>\n </div>\n <div style=\"width: calc(20% - 1rem)\" class=\"d-flex flex-column gap-3\">\n <mat-card *ngIf=\"!checksheetFormat || isShowChecksheetInfo\">\n <mat-card-content>\n <h3>Checksheet Format Information</h3>\n <form [formGroup]=\"checksheetForm\" (submit)=\"submit()\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\">\n <mat-form-field>\n <input matInput formControlName=\"title\" placeholder=\"Title\" autocomplete=\"off\" required/>\n <mat-error *ngIf=\"isFieldValid('title')\">\n {{ getErrorMessage('title') }}\n </mat-error>\n </mat-form-field>\n\n <div class=\"my-2 d-flex justify-content-end align-items-center gap-1 flex-wrap\" *ngIf=\"!disableInput\">\n <button [disabled]=\"isSaving\" mat-raised-button type=\"submit\" color=\"primary\">\n Save\n </button>\n\n <app-checksheet-format-publish-button [checksheetFormat]=\"checksheetFormat\" *ngIf=\"updateMode\"\n (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-publish-button>\n\n <button [disabled]=\"isSaving\" mat-flat-button type=\"button\" (click)=\"handleCancel()\">\n Cancel\n </button>\n </div>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card *ngIf=\"checksheetFormat && !isShowChecksheetInfo\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-2\">\n <h3 class=\"mb-0\">Information</h3>\n <div class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-icon class=\"cursor-pointer\" (click)=\"isShowChecksheetInfo = true\">edit</mat-icon>\n <app-checksheet-format-delete-button [checksheetFormat]=\"checksheetFormat\" (deleted)=\"loadChecksheetFormat()\">\n </app-checksheet-format-delete-button>\n\n <app-checksheet-format-copy-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-copy-button>\n\n <app-checksheet-format-unpublish-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\">\n </app-checksheet-format-unpublish-button>\n\n <app-checksheet-format-publish-button [checksheetFormat]=\"checksheetFormat\" (changed)=\"loadChecksheetFormat()\" viewMode=\"icon\">\n </app-checksheet-format-publish-button>\n </div>\n </div>\n </mat-card-content>\n <mat-card-content class=\"mt-3 d-flex flex-column justify-content-center align-items-center gap-2\">\n <h2 class=\"mb-0\">{{ checksheetFormat?.title }}</h2>\n <div class=\"d-flex flex-wrap justify-content-center align-items-center gap-2\">\n <span class=\"badge bg-secondary\">{{ checksheetFormat?.submissions_count }} Checksheet Submissions</span>\n <span class=\"badge\" [class.bg-success]=\"checksheetFormat?.is_published\"\n [class.bg-danger]=\"!checksheetFormat?.is_published\">\n {{ checksheetFormat?.is_published ? 'Published' : 'Unpublished' }}\n </span>\n </div>\n <small class=\"text-secondary\">\n By {{ checksheetFormat?.creator?.name }} on {{ checksheetFormat?.created_at| date }}\n </small>\n </mat-card-content>\n </mat-card>\n\n <app-note-list *ngIf=\"checksheetFormat\" viewMode=\"timeline\" [relatedModelId]=\"checksheetFormat?.id\"\n modelType=\"ChecksheetFormat\"></app-note-list>\n </div>\n</div>\n\n<mat-progress-bar mode=\"indeterminate\" *ngIf=\"isLoading\"></mat-progress-bar>\n" }]
136
+ }], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.UntypedFormBuilder }, { type: i1.AlertService }, { type: i3.Location }, { type: i4.ActivatedRoute }, { type: i5.ChecksheetFormatService }], propDecorators: { disableInput: [{
134
137
  type: Input
135
138
  }] } });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1mb3JtYXQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY2hlY2tzaGVldC9zcmMvbGliL2NoZWNrc2hlZXQvY2hlY2tzaGVldC1mb3JtYXQtZm9ybS9jaGVja3NoZWV0LWZvcm1hdC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LWZvcm1hdC1mb3JtL2NoZWNrc2hlZXQtZm9ybWF0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUdMLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQnhCLE1BQU0sYUFBYSxHQUFRO0lBQ3pCLEtBQUssRUFBRTtRQUNMLFFBQVEsRUFBRSx3QkFBd0I7S0FDbkM7Q0FDRixDQUFDO0FBT0YsTUFBTSxPQUFPLDZCQUE2QjtJQVk5QjtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXBCVixjQUFjLENBQW9CO0lBQ2xDLFVBQVUsQ0FBVztJQUNyQixnQkFBZ0IsQ0FBTTtJQUN0QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLEVBQUUsQ0FBVTtJQUVILFlBQVksQ0FBVztJQUNoQyxTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUVwQyxZQUNVLG9CQUEwQyxFQUMxQyxFQUFzQixFQUN0QixjQUFpQyxFQUNqQyxZQUEwQixFQUMzQixRQUFrQixFQUNqQixZQUFpQyxFQUNqQyxXQUF3QixFQUN4QixNQUFpQixF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QUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNoRixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixNQUFNLE1BQU0sR0FBUSxFQUFFLElBQUksRUFBRSxrQ0FBa0MsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDM0QsSUFBSSxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXZHVSw2QkFBNkI7NEZBQTdCLDZCQUE2Qiw0R0NoQzFDLHV0SUFrRkE7OzRGRGxEYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsNEJBQTRCO21XQVc3QixZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBVbnR5cGVkRm9ybUdyb3VwLFxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybVZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICduZ3gtdGVjaGxpZnktY29yZSc7XG5pbXBvcnQgeyBOZ3hTcGlubmVyU2VydmljZSB9IGZyb20gJ25neC1zcGlubmVyJztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQWN0aW9uUG9wdXBDb21wb25lbnQsXG4gIEFjdGlvblBvcHVwLFxuICBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICBEYXRhTWFuYWdlclxufSBmcm9tICduZ3gtdGVjaGxpZnktY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ2hlY2tzaGVldEZvcm1hdFNlcnZpY2UgfSBmcm9tICcuLi9jaGVja3NoZWV0LWZvcm1hdC5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuY29uc3QgZXJyb3JNZXNzYWdlczogYW55ID0ge1xuICB0aXRsZToge1xuICAgIHJlcXVpcmVkOiAnVGhlIHRpdGxlIGlzIHJlcXVpcmVkLidcbiAgfVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNoZWNrc2hlZXQtZm9ybWF0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tzaGVldC1mb3JtYXQtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoZWNrc2hlZXQtZm9ybWF0LWZvcm0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja3NoZWV0Rm9ybWF0Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNoZWNrc2hlZXRGb3JtITogVW50eXBlZEZvcm1Hcm91cDtcbiAgdXBkYXRlTW9kZSE6IGJvb2xlYW47XG4gIGNoZWNrc2hlZXRGb3JtYXQ6IGFueTtcbiAgaXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaWQhOiBudW1iZXI7XG5cbiAgQElucHV0KCkgZGlzYWJsZUlucHV0ITogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dDaGVja3NoZWV0SW5mbzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybVZhbGlkYXRvclNlcnZpY2U6IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhTWFuYWdlcjogRGF0YU1hbmFnZXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNoZWNrc2hlZXRGb3JtYXRTZXJ2aWNlOiBDaGVja3NoZWV0Rm9ybWF0U2VydmljZVxuICApIHtcbiAgICB0aGlzLmlkID0gcGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXM/LlsnY2hlY2tzaGVldElkJ10pO1xuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZUlucHV0KSB7XG4gICAgICB0aGlzLmNoZWNrc2hlZXRGb3JtLmRpc2FibGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgIHRoaXMudXBkYXRlTW9kZSA9IHRydWU7XG4gICAgICB0aGlzLmxvYWRDaGVja3NoZWV0Rm9ybWF0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNoZWNrLXNoZWV0IGZvcm0uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy5jaGVja3NoZWV0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgaWQ6IFsnJ10sXG4gICAgICB0aXRsZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgIH0pO1xuICB9XG5cbiAgLyoqTWV0aG9kIHRvIGV2YWx1YXRlIGZvcm0gZmllbGRzKi9cbiAgaXNGaWVsZFZhbGlkKGZpZWxkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtVmFsaWRhdG9yU2VydmljZS5pc0ZpZWxkVmFsaWQoZmllbGQsIHRoaXMuY2hlY2tzaGVldEZvcm0pO1xuICB9XG5cbiAgLyoqTWV0aG9kIHRvIGZpbmQgZXJyb3IgaW4gZm9ybSBmaWVsZHMqL1xuICBnZXRFcnJvck1lc3NhZ2UoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmdldEVycm9yTWVzc2FnZShcbiAgICAgIGZpZWxkLFxuICAgICAgdGhpcy5jaGVja3NoZWV0Rm9ybSxcbiAgICAgIGVycm9yTWVzc2FnZXNcbiAgICApO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMuY2hlY2tzaGVldEZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIGlmICh0aGlzLmNoZWNrc2hlZXRGb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdQbGVhc2UgY2hlY2sgdGhlIGZvcm0gZm9yIGVycm9ycy4nLCAnZXJyb3InKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RlbCA9IHsgLi4udGhpcy5jaGVja3NoZWV0Rm9ybS52YWx1ZSB9O1xuICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuICAgIGxldCByZXF1ZXN0OiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnVwZGF0ZU1vZGVcbiAgICAgID8gdGhpcy5jaGVja3NoZWV0Rm9ybWF0U2VydmljZS51cGRhdGUobW9kZWwpXG4gICAgICA6IHRoaXMuY2hlY2tzaGVldEZvcm1hdFNlcnZpY2Uuc3RvcmUobW9kZWwpO1xuXG4gICAgcmVxdWVzdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGVja3NoZWV0Rm9ybWF0ID0gcmVzdWx0Py5pdGVtO1xuICAgICAgICB0aGlzLmNoZWNrc2hlZXRGb3JtLnBhdGNoVmFsdWUoeyAuLi50aGlzLmNoZWNrc2hlZXRGb3JtYXQgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlTW9kZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd0NoZWNrc2hlZXRJbmZvID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KCdDaGVja3NoZWV0IGZvcm1hdCBzYXZlZCBzdWNjZXNzZnVsbHknLCAnc3VjY2VzcycpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRDaGVja3NoZWV0Rm9ybWF0KCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHsgd2l0aDogJ3F1ZXN0aW9ucy5hbnN3ZXJzLHF1ZXN0aW9ucy50eXBlJyB9O1xuICAgIHRoaXMuY2hlY2tzaGVldEZvcm1hdFNlcnZpY2Uuc2hvdyh0aGlzLmlkLCBwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGVja3NoZWV0Rm9ybS5wYXRjaFZhbHVlKHJlc3VsdD8uaXRlbSk7XG4gICAgICAgIHRoaXMuY2hlY2tzaGVldEZvcm1hdCA9IHJlc3VsdD8uaXRlbTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1zdGFydCBnYXAtMyB3LTEwMFwiICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zXCIgc3R5bGU9XCJ3aWR0aDogODAlXCI+XG4gICAgPG1hdC1jYXJkPlxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmcy0xXCI+XG4gICAgICAgICAgICBsaXN0X2FsdF9jaGVja1xuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8aDIgY2xhc3M9XCJtYi0wXCI+e3sgY2hlY2tzaGVldEZvcm1hdCA/ICdVcGRhdGUnIDogJ0NyZWF0ZScgfX0gQ2hlY2tzaGVldCBGb3JtYXQ8L2gyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnlcIiAqbmdJZj1cImNoZWNrc2hlZXRGb3JtYXQ/LnF1ZXN0aW9uc1wiPlxuICAgICAgICAgIHt7IGNoZWNrc2hlZXRGb3JtYXQ/LnF1ZXN0aW9ucz8ubGVuZ3RoIH19IFF1ZXN0aW9uc1xuICAgICAgICA8L3NwYW4+XG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPC9tYXQtY2FyZD5cblxuICAgIDxhcHAtY2hlY2tzaGVldC1xdWVzdGlvbi1saXN0IGNsYXNzPVwidy0xMDBcIiBbKGNoZWNrc2hlZXQpXT1cImNoZWNrc2hlZXRGb3JtYXRcIiBbZGlzYWJsZUlucHV0XT1cImRpc2FibGVJbnB1dFwiPlxuICAgIDwvYXBwLWNoZWNrc2hlZXQtcXVlc3Rpb24tbGlzdD5cbiAgPC9kaXY+XG4gIDxkaXYgc3R5bGU9XCJ3aWR0aDogY2FsYygyMCUgLSAxcmVtKVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zXCI+XG4gICAgPG1hdC1jYXJkICpuZ0lmPVwiIWNoZWNrc2hlZXRGb3JtYXQgfHwgc2hvd0NoZWNrc2hlZXRJbmZvXCI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPGgzPkNoZWNrc2hlZXQgRm9ybWF0IEluZm9ybWF0aW9uPC9oMz5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjaGVja3NoZWV0Rm9ybVwiIChzdWJtaXQpPVwic3VibWl0KClcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwPVwiMC4yNXJlbVwiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHBsYWNlaG9sZGVyPVwiVGl0bGVcIiBhdXRvY29tcGxldGU9XCJvZmZcIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCd0aXRsZScpXCI+XG4gICAgICAgICAgICAgIHt7IGdldEVycm9yTWVzc2FnZSgndGl0bGUnKSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjE1cHhcIiBmeExheW91dEFsaWduPVwiZW5kXCIgKm5nSWY9XCIhZGlzYWJsZUlucHV0XCI+XG4gICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiIG1hdC1mbGF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNob3dDaGVja3NoZWV0SW5mbyA9IGZhbHNlXCI+XG4gICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxhcHAtY2hlY2tzaGVldC1mb3JtYXQtcHVibGlzaC1idXR0b24gW2NoZWNrc2hlZXRGb3JtYXRdPVwiY2hlY2tzaGVldEZvcm1hdFwiICpuZ0lmPVwidXBkYXRlTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2VkKT1cImxvYWRDaGVja3NoZWV0Rm9ybWF0KClcIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtZm9ybWF0LXB1Ymxpc2gtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPC9tYXQtY2FyZD5cblxuICAgIDxtYXQtY2FyZCAqbmdJZj1cImNoZWNrc2hlZXRGb3JtYXQgJiYgIXNob3dDaGVja3NoZWV0SW5mb1wiPlxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibWItMFwiPkluZm9ybWF0aW9uPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzaG93Q2hlY2tzaGVldEluZm8gPSB0cnVlXCI+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICA8YXBwLWNoZWNrc2hlZXQtZm9ybWF0LWRlbGV0ZS1idXR0b24gW2NoZWNrc2hlZXRGb3JtYXRdPVwiY2hlY2tzaGVldEZvcm1hdFwiIChkZWxldGVkKT1cImxvYWRDaGVja3NoZWV0Rm9ybWF0KClcIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtZm9ybWF0LWRlbGV0ZS1idXR0b24+XG5cbiAgICAgICAgICAgIDxhcHAtY2hlY2tzaGVldC1mb3JtYXQtY29weS1idXR0b24gW2NoZWNrc2hlZXRGb3JtYXRdPVwiY2hlY2tzaGVldEZvcm1hdFwiIChjaGFuZ2VkKT1cImxvYWRDaGVja3NoZWV0Rm9ybWF0KClcIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtZm9ybWF0LWNvcHktYnV0dG9uPlxuXG4gICAgICAgICAgICA8YXBwLWNoZWNrc2hlZXQtZm9ybWF0LXVucHVibGlzaC1idXR0b24gW2NoZWNrc2hlZXRGb3JtYXRdPVwiY2hlY2tzaGVldEZvcm1hdFwiIChjaGFuZ2VkKT1cImxvYWRDaGVja3NoZWV0Rm9ybWF0KClcIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtZm9ybWF0LXVucHVibGlzaC1idXR0b24+XG5cbiAgICAgICAgICAgIDxhcHAtY2hlY2tzaGVldC1mb3JtYXQtcHVibGlzaC1idXR0b24gW2NoZWNrc2hlZXRGb3JtYXRdPVwiY2hlY2tzaGVldEZvcm1hdFwiIChjaGFuZ2VkKT1cImxvYWRDaGVja3NoZWV0Rm9ybWF0KClcIiB2aWV3TW9kZT1cImljb25cIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtZm9ybWF0LXB1Ymxpc2gtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwibXQtMyBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwibWItMFwiPnt7IGNoZWNrc2hlZXRGb3JtYXQ/LnRpdGxlIH19PC9oMj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnlcIj57eyBjaGVja3NoZWV0Rm9ybWF0Py5zdWJtaXNzaW9uc19jb3VudCB9fSBDaGVja3NoZWV0IFN1Ym1pc3Npb25zPC9zcGFuPlxuICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPlxuICAgICAgICAgIEJ5IHt7IGNoZWNrc2hlZXRGb3JtYXQ/LmNyZWF0b3I/Lm5hbWUgfX0gb24ge3sgY2hlY2tzaGVldEZvcm1hdD8uY3JlYXRlZF9hdHwgZGF0ZSB9fVxuICAgICAgICA8L3NtYWxsPlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDwvbWF0LWNhcmQ+XG5cbiAgICA8YXBwLW5vdGUtbGlzdCAqbmdJZj1cImNoZWNrc2hlZXRGb3JtYXRcIiB2aWV3TW9kZT1cInRpbWVsaW5lXCIgW3JlbGF0ZWRNb2RlbElkXT1cImNoZWNrc2hlZXRGb3JtYXQ/LmlkXCJcbiAgICAgICAgICAgICAgICAgICBtb2RlbFR5cGU9XCJDaGVja3NoZWV0Rm9ybWF0XCI+PC9hcHAtbm90ZS1saXN0PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuIl19
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1mb3JtYXQtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY2hlY2tzaGVldC9zcmMvbGliL2NoZWNrc2hlZXQvY2hlY2tzaGVldC1mb3JtYXQtZm9ybS9jaGVja3NoZWV0LWZvcm1hdC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LWZvcm1hdC1mb3JtL2NoZWNrc2hlZXQtZm9ybWF0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUF1QyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9oRixNQUFNLGFBQWEsR0FBUTtJQUN6QixLQUFLLEVBQUU7UUFDTCxRQUFRLEVBQUUsd0JBQXdCO0tBQ25DO0NBQ0YsQ0FBQztBQU9GLE1BQU0sT0FBTyw2QkFBNkI7SUFZOUI7SUFDQTtJQUNBO0lBQ0Q7SUFDQztJQUNBO0lBaEJWLGNBQWMsQ0FBb0I7SUFDbEMsVUFBVSxDQUFXO0lBQ3JCLGdCQUFnQixDQUFNO0lBQ3RCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsRUFBRSxDQUFVO0lBRUgsWUFBWSxDQUFXO0lBQ2hDLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0Isb0JBQW9CLEdBQVksS0FBSyxDQUFDO0lBRXRDLFlBQ1Usb0JBQTBDLEVBQzFDLEVBQXNCLEVBQ3RCLFlBQTBCLEVBQzNCLFFBQWtCLEVBQ2pCLEtBQXFCLEVBQ3JCLHVCQUFnRDtRQUxoRCx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLE9BQUUsR0FB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Q0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzt3R0FoSFUsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsNEdDbkIxQyxta0pBeUZBOzs0RkR0RWEsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLDRCQUE0QjsrT0FXN0IsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FsZXJ0U2VydmljZSwgRm9ybVZhbGlkYXRvclNlcnZpY2V9IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDaGVja3NoZWV0Rm9ybWF0U2VydmljZX0gZnJvbSAnLi4vY2hlY2tzaGVldC1mb3JtYXQuc2VydmljZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5jb25zdCBlcnJvck1lc3NhZ2VzOiBhbnkgPSB7XG4gIHRpdGxlOiB7XG4gICAgcmVxdWlyZWQ6ICdUaGUgdGl0bGUgaXMgcmVxdWlyZWQuJ1xuICB9XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hlY2tzaGVldC1mb3JtYXQtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVja3NoZWV0LWZvcm1hdC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2tzaGVldC1mb3JtYXQtZm9ybS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrc2hlZXRGb3JtYXRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2hlY2tzaGVldEZvcm0hOiBVbnR5cGVkRm9ybUdyb3VwO1xuICB1cGRhdGVNb2RlITogYm9vbGVhbjtcbiAgY2hlY2tzaGVldEZvcm1hdDogYW55O1xuICBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBpZCE6IG51bWJlcjtcblxuICBASW5wdXQoKSBkaXNhYmxlSW5wdXQhOiBib29sZWFuO1xuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTaG93Q2hlY2tzaGVldEluZm86IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1WYWxpZGF0b3JTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwdWJsaWMgbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgY2hlY2tzaGVldEZvcm1hdFNlcnZpY2U6IENoZWNrc2hlZXRGb3JtYXRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaWQgPSBwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcz8uWydjaGVja3NoZWV0SWQnXSk7XG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlSW5wdXQpIHtcbiAgICAgIHRoaXMuY2hlY2tzaGVldEZvcm0uZGlzYWJsZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pZCkge1xuICAgICAgdGhpcy51cGRhdGVNb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9hZENoZWNrc2hlZXRGb3JtYXQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY2hlY2stc2hlZXQgZm9ybS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLmNoZWNrc2hlZXRGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBpZDogWycnXSxcbiAgICAgIHRpdGxlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgfSk7XG4gIH1cblxuICAvKipNZXRob2QgdG8gZXZhbHVhdGUgZm9ybSBmaWVsZHMqL1xuICBpc0ZpZWxkVmFsaWQoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmlzRmllbGRWYWxpZChmaWVsZCwgdGhpcy5jaGVja3NoZWV0Rm9ybSk7XG4gIH1cblxuICAvKipNZXRob2QgdG8gZmluZCBlcnJvciBpbiBmb3JtIGZpZWxkcyovXG4gIGdldEVycm9yTWVzc2FnZShmaWVsZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVZhbGlkYXRvclNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKFxuICAgICAgZmllbGQsXG4gICAgICB0aGlzLmNoZWNrc2hlZXRGb3JtLFxuICAgICAgZXJyb3JNZXNzYWdlc1xuICAgICk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgdGhpcy5jaGVja3NoZWV0Rm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgaWYgKHRoaXMuY2hlY2tzaGVldEZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoJ1BsZWFzZSBjaGVjayB0aGUgZm9ybSBmb3IgZXJyb3JzLicsICdlcnJvcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZGVsID0geyAuLi50aGlzLmNoZWNrc2hlZXRGb3JtLnZhbHVlIH07XG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XG4gICAgbGV0IHJlcXVlc3Q6IE9ic2VydmFibGU8YW55PiA9IHRoaXMudXBkYXRlTW9kZVxuICAgICAgPyB0aGlzLmNoZWNrc2hlZXRGb3JtYXRTZXJ2aWNlLnVwZGF0ZShtb2RlbClcbiAgICAgIDogdGhpcy5jaGVja3NoZWV0Rm9ybWF0U2VydmljZS5zdG9yZShtb2RlbCk7XG5cbiAgICByZXF1ZXN0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoZWNrc2hlZXRGb3JtYXQgPSByZXN1bHQ/Lml0ZW07XG4gICAgICAgIHRoaXMuY2hlY2tzaGVldEZvcm0ucGF0Y2hWYWx1ZSh7IC4uLnRoaXMuY2hlY2tzaGVldEZvcm1hdCB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVNb2RlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc1Nob3dDaGVja3NoZWV0SW5mbyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnQ2hlY2tzaGVldCBmb3JtYXQgc2F2ZWQgc3VjY2Vzc2Z1bGx5JywgJ3N1Y2Nlc3MnKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2FkQ2hlY2tzaGVldEZvcm1hdCgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7IHdpdGg6ICdxdWVzdGlvbnMuYW5zd2VycyxxdWVzdGlvbnMudHlwZSxjcmVhdG9yJywgd2l0aENvdW50OiAnc3VibWlzc2lvbnMnIH07XG4gICAgY29uc3QgZm9ybWF0SWQgPSB0aGlzLmNoZWNrc2hlZXRGb3JtYXQgPyB0aGlzLmNoZWNrc2hlZXRGb3JtYXQ/LmlkIDogdGhpcy5pZDtcbiAgICBpZiAoIWZvcm1hdElkKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydCgnVW5hYmxlIHRvIGxvYWQgdGhlIGNoZWNrc2hlZXQgZm9ybWF0LicsICdlcnJvcicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrc2hlZXRGb3JtYXRTZXJ2aWNlLnNob3coZm9ybWF0SWQsIHBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoZWNrc2hlZXRGb3JtLnBhdGNoVmFsdWUocmVzdWx0Py5pdGVtKTtcbiAgICAgICAgdGhpcy5jaGVja3NoZWV0Rm9ybWF0ID0gcmVzdWx0Py5pdGVtO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVDYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMuY2hlY2tzaGVldEZvcm1hdCkge1xuICAgICAgdGhpcy5pc1Nob3dDaGVja3NoZWV0SW5mbyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLXN0YXJ0IGdhcC0zIHctMTAwXCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTNcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICA8bWF0LWNhcmQ+XG4gICAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZzLTFcIj5cbiAgICAgICAgICAgIGxpc3RfYWx0X2NoZWNrXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxoMiBjbGFzcz1cIm1iLTBcIj57eyBjaGVja3NoZWV0Rm9ybWF0ID8gJ1VwZGF0ZScgOiAnQ3JlYXRlJyB9fSBDaGVja3NoZWV0IEZvcm1hdDwvaDI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLXNlY29uZGFyeVwiICpuZ0lmPVwiY2hlY2tzaGVldEZvcm1hdD8ucXVlc3Rpb25zXCI+XG4gICAgICAgICAge3sgY2hlY2tzaGVldEZvcm1hdD8ucXVlc3Rpb25zPy5sZW5ndGggfX0gUXVlc3Rpb25zXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuXG4gICAgPGFwcC1jaGVja3NoZWV0LXF1ZXN0aW9uLWxpc3QgY2xhc3M9XCJ3LTEwMFwiIFsoY2hlY2tzaGVldCldPVwiY2hlY2tzaGVldEZvcm1hdFwiIFtkaXNhYmxlSW5wdXRdPVwiZGlzYWJsZUlucHV0XCI+XG4gICAgPC9hcHAtY2hlY2tzaGVldC1xdWVzdGlvbi1saXN0PlxuICA8L2Rpdj5cbiAgPGRpdiBzdHlsZT1cIndpZHRoOiBjYWxjKDIwJSAtIDFyZW0pXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTNcIj5cbiAgICA8bWF0LWNhcmQgKm5nSWY9XCIhY2hlY2tzaGVldEZvcm1hdCB8fCBpc1Nob3dDaGVja3NoZWV0SW5mb1wiPlxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxoMz5DaGVja3NoZWV0IEZvcm1hdCBJbmZvcm1hdGlvbjwvaDM+XG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiY2hlY2tzaGVldEZvcm1cIiAoc3VibWl0KT1cInN1Ym1pdCgpXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEdhcD1cIjAuMjVyZW1cIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiBwbGFjZWhvbGRlcj1cIlRpdGxlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcmVxdWlyZWQvPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzRmllbGRWYWxpZCgndGl0bGUnKVwiPlxuICAgICAgICAgICAgICB7eyBnZXRFcnJvck1lc3NhZ2UoJ3RpdGxlJykgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgZmxleC13cmFwXCIgKm5nSWY9XCIhZGlzYWJsZUlucHV0XCI+XG4gICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxhcHAtY2hlY2tzaGVldC1mb3JtYXQtcHVibGlzaC1idXR0b24gW2NoZWNrc2hlZXRGb3JtYXRdPVwiY2hlY2tzaGVldEZvcm1hdFwiICpuZ0lmPVwidXBkYXRlTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2VkKT1cImxvYWRDaGVja3NoZWV0Rm9ybWF0KClcIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtZm9ybWF0LXB1Ymxpc2gtYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiIG1hdC1mbGF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImhhbmRsZUNhbmNlbCgpXCI+XG4gICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICA8L21hdC1jYXJkPlxuXG4gICAgPG1hdC1jYXJkICpuZ0lmPVwiY2hlY2tzaGVldEZvcm1hdCAmJiAhaXNTaG93Q2hlY2tzaGVldEluZm9cIj5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cIm1iLTBcIj5JbmZvcm1hdGlvbjwvaDM+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiaXNTaG93Q2hlY2tzaGVldEluZm8gPSB0cnVlXCI+ZWRpdDwvbWF0LWljb24+XG4gICAgICAgICAgICA8YXBwLWNoZWNrc2hlZXQtZm9ybWF0LWRlbGV0ZS1idXR0b24gW2NoZWNrc2hlZXRGb3JtYXRdPVwiY2hlY2tzaGVldEZvcm1hdFwiIChkZWxldGVkKT1cImxvYWRDaGVja3NoZWV0Rm9ybWF0KClcIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtZm9ybWF0LWRlbGV0ZS1idXR0b24+XG5cbiAgICAgICAgICAgIDxhcHAtY2hlY2tzaGVldC1mb3JtYXQtY29weS1idXR0b24gW2NoZWNrc2hlZXRGb3JtYXRdPVwiY2hlY2tzaGVldEZvcm1hdFwiIChjaGFuZ2VkKT1cImxvYWRDaGVja3NoZWV0Rm9ybWF0KClcIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtZm9ybWF0LWNvcHktYnV0dG9uPlxuXG4gICAgICAgICAgICA8YXBwLWNoZWNrc2hlZXQtZm9ybWF0LXVucHVibGlzaC1idXR0b24gW2NoZWNrc2hlZXRGb3JtYXRdPVwiY2hlY2tzaGVldEZvcm1hdFwiIChjaGFuZ2VkKT1cImxvYWRDaGVja3NoZWV0Rm9ybWF0KClcIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtZm9ybWF0LXVucHVibGlzaC1idXR0b24+XG5cbiAgICAgICAgICAgIDxhcHAtY2hlY2tzaGVldC1mb3JtYXQtcHVibGlzaC1idXR0b24gW2NoZWNrc2hlZXRGb3JtYXRdPVwiY2hlY2tzaGVldEZvcm1hdFwiIChjaGFuZ2VkKT1cImxvYWRDaGVja3NoZWV0Rm9ybWF0KClcIiB2aWV3TW9kZT1cImljb25cIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtZm9ybWF0LXB1Ymxpc2gtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwibXQtMyBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwibWItMFwiPnt7IGNoZWNrc2hlZXRGb3JtYXQ/LnRpdGxlIH19PC9oMj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLXNlY29uZGFyeVwiPnt7IGNoZWNrc2hlZXRGb3JtYXQ/LnN1Ym1pc3Npb25zX2NvdW50IH19IENoZWNrc2hlZXQgU3VibWlzc2lvbnM8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZVwiIFtjbGFzcy5iZy1zdWNjZXNzXT1cImNoZWNrc2hlZXRGb3JtYXQ/LmlzX3B1Ymxpc2hlZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJnLWRhbmdlcl09XCIhY2hlY2tzaGVldEZvcm1hdD8uaXNfcHVibGlzaGVkXCI+XG4gICAgICAgICAgICB7eyBjaGVja3NoZWV0Rm9ybWF0Py5pc19wdWJsaXNoZWQgPyAnUHVibGlzaGVkJyA6ICdVbnB1Ymxpc2hlZCcgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPlxuICAgICAgICAgIEJ5IHt7IGNoZWNrc2hlZXRGb3JtYXQ/LmNyZWF0b3I/Lm5hbWUgfX0gb24ge3sgY2hlY2tzaGVldEZvcm1hdD8uY3JlYXRlZF9hdHwgZGF0ZSB9fVxuICAgICAgICA8L3NtYWxsPlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDwvbWF0LWNhcmQ+XG5cbiAgICA8YXBwLW5vdGUtbGlzdCAqbmdJZj1cImNoZWNrc2hlZXRGb3JtYXRcIiB2aWV3TW9kZT1cInRpbWVsaW5lXCIgW3JlbGF0ZWRNb2RlbElkXT1cImNoZWNrc2hlZXRGb3JtYXQ/LmlkXCJcbiAgICAgICAgICAgICAgICAgICBtb2RlbFR5cGU9XCJDaGVja3NoZWV0Rm9ybWF0XCI+PC9hcHAtbm90ZS1saXN0PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuIl19
@@ -146,7 +146,7 @@ let ChecksheetQuestionComponent = class ChecksheetQuestionComponent {
146
146
  });
147
147
  }
148
148
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetQuestionComponent, deps: [{ token: i1.ChecksheetSubmissionAnswerService }], target: i0.ɵɵFactoryTarget.Component });
149
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetQuestionComponent, selector: "app-checksheet-question", inputs: { questionInfo: "questionInfo", index: "index", submissionView: "submissionView", submissionId: "submissionId", disableInput: "disableInput", isWorking: "isWorking" }, outputs: { isWorkingChange: "isWorkingChange" }, ngImport: i0, template: "<div class=\"d-flex flex-column gap-2\" *ngIf=\"!submissionView\">\n <div class=\"d-flex justify-content-between align-items-center gap-3 mb-2\">\n <div class=\"d-flex align-items-center gap-2\">\n <strong>{{ index + 1 }}.</strong>\n <strong [innerHTML]=\"questionInfo?.label\"></strong>\n <span class=\"badge bg-secondary\">{{ questionInfo?.type?.title }}</span>\n </div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 1\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\" class=\"mr-3\">\n <mat-radio-group class=\"answer-radio-group\" [disabled]=\"true\">\n <mat-radio-button class=\"answer-radio-button\" *ngFor=\"let answer of questionInfo?.answers\" [value]=\"answer.id\">\n {{ answer.value }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 2\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\" class=\"mr-3\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" *ngFor=\"let answer of questionInfo?.answers; let i = index\">\n <mat-checkbox [disabled]=\"true\" fxFlex=\"80%\">{{ i + 1 }} ) {{ answer.value }}</mat-checkbox>\n </div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 3 || questionInfo?.type_id === 5 || questionInfo?.type_id === 6\"\n class=\"mr-3 d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\">lightbulb</span>\n <p class=\"mb-0\">Answer</p>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 4\" class=\"mr-3 d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\">lightbulb</span>\n <p class=\"mb-0\">Answer</p>\n </div>\n\n <div\n *ngIf=\"questionInfo?.type_id === 7\"\n fxLayout=\"column\"\n fxLayoutGap=\"0.25rem\"\n class=\"mr-3\"\n >\n <ol>\n <li *ngFor=\"let answer of questionInfo?.answers\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <div>{{ answer?.value }} -</div>\n <mat-radio-group [disabled]=\"true\" fxLayout=\"row\">\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" value=\"1\"\n >Yes\n </mat-radio-button>\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" value=\"0\"\n >No\n </mat-radio-button>\n </mat-radio-group>\n </div>\n </li>\n </ol>\n </div>\n</div>\n\n<mat-card *ngIf=\"submissionView\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-3 mb-2\">\n <div class=\"d-flex align-items-center gap-2\">\n <strong>{{ index + 1 }}.</strong>\n <strong [innerHTML]=\"questionInfo?.label\"></strong>\n <span class=\"badge bg-secondary\">{{ questionInfo?.type?.title }}</span>\n </div>\n </div>\n <div class=\"d-flex justify-content-between align-items-start gap-1\">\n <div *ngIf=\"questionInfo?.type_id === 1\" class=\"d-flex flex-column gap-2\">\n <mat-radio-group class=\"answer-radio-group\" [disabled]=\"disableInput\" [formControl]=\"submittedAnswer\">\n <mat-radio-button class=\"answer-radio-button\" *ngFor=\"let answer of questionInfo?.answers\"\n [value]=\"answer.id\" [disabled]=\"disableInput\">\n {{ answer.value }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 2\" class=\"d-flex flex-column gap-2\">\n <ng-container>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" *ngFor=\"let answer of questionInfo?.answers; let i = index\">\n <mat-checkbox (change)=\"onMultiSelectAnswerChange()\" [disabled]=\"disableInput\" [(ngModel)]=\"answer.isChecked\"\n fxFlex=\"80%\">\n {{ i + 1 }} ) {{ answer.value }}\n </mat-checkbox>\n </div>\n </ng-container>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 3 || questionInfo?.type_id === 4\">\n <div class=\"NgxEditor__Wrapper mb-2\" *ngIf=\"!disableInput\">\n <ngx-editor-menu [editor]=\"editor\"> </ngx-editor-menu>\n <ngx-editor\n [editor]=\"editor\"\n [formControl]=\"submittedAnswer\"\n ></ngx-editor>\n </div>\n <div *ngIf=\"disableInput\" [innerHtml]=\"submittedAnswer.value\"></div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 5\">\n <mat-form-field *ngIf=\"!disableInput\">\n <mat-label>Answer</mat-label>\n <input matInput type=\"number\" size=\"10\" [formControl]=\"submittedAnswer\"/>\n </mat-form-field>\n <span *ngIf=\"disableInput\">{{ submittedAnswer.value }}</span>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 6\">\n <mat-form-field *ngIf=\"!disableInput\">\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" [formControl]=\"submittedAnswer\"\n (focus)=\"picker.open()\"/>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n <span *ngIf=\"disableInput\">{{ submittedAnswer.value | date }}</span>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 7\">\n <ol>\n <li *ngFor=\"let answer of questionInfo?.answers\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <div>{{ answer?.value }} -</div>\n <mat-radio-group fxLayout=\"row\" (change)=\"onMultiSelectYesNoAnswerChange($event, answer)\"\n [disabled]=\"disableInput\" [value]=\"answer.selectedValue\">\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" [value]=\"true\" [disabled]=\"disableInput\">\n Yes\n </mat-radio-button>\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" [value]=\"false\" [disabled]=\"disableInput\">\n No\n </mat-radio-button>\n </mat-radio-group>\n </div>\n </li>\n </ol>\n </div>\n\n <span class=\"flex-fill\"></span>\n\n <app-checksheet-submission-files style=\"width: calc(33.33%)\" [submissionId]=\"submissionId\"\n [questionId]=\"questionInfo?.id\"></app-checksheet-submission-files>\n </div>\n\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n", styles: [".answer-radio-group{display:flex;flex-direction:column;margin:15px 0}.answer-radio-button{margin:5px}:host ::ng-deep .short-answer .ck.ck-content{min-height:100px!important}:host ::ng-deep .long-answer .ck.ck-content{min-height:200px!important}.scroll-container{max-height:650px;overflow-y:auto}.small-margin{margin-top:2px}:host ::ng-deep .yes-no .mat-radio-label-content{padding-left:3px}.main{display:block;position:relative;padding-left:24px;margin-bottom:15px;cursor:pointer}input[type=checkbox]{visibility:hidden}.geekmark{position:absolute;top:2px;left:0;height:15px;width:15px;background-color:#fff}.main input:checked~.geekmark{background-color:green}.geekmark:after{content:\"\";position:absolute;display:none}.main input:checked~.geekmark:after{display:block}.main .geekmark:after{left:5px;bottom:3px;width:6px;height:10px;border:solid white;border-width:0 4px 4px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}img{max-width:500px!important;max-height:500px!important}p{margin-bottom:0!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i10.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i10.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i12.NgxEditorComponent, selector: "ngx-editor", inputs: ["editor", "outputFormat", "placeholder"], outputs: ["focusOut", "focusIn"] }, { kind: "component", type: i12.MenuComponent, selector: "ngx-editor-menu", inputs: ["toolbar", "colorPresets", "disabled", "editor", "customMenuRef", "dropdownPlacement"] }, { kind: "component", type: i13.ChecksheetSubmissionFilesComponent, selector: "app-checksheet-submission-files", inputs: ["submissionId", "questionId", "viewMode", "fileDropperHeight", "allowMultipleFiles"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }], encapsulation: i0.ViewEncapsulation.None });
149
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetQuestionComponent, selector: "app-checksheet-question", inputs: { questionInfo: "questionInfo", index: "index", submissionView: "submissionView", submissionId: "submissionId", disableInput: "disableInput", isWorking: "isWorking" }, outputs: { isWorkingChange: "isWorkingChange" }, ngImport: i0, template: "<div class=\"d-flex flex-column gap-2\" *ngIf=\"!submissionView\">\n <div class=\"d-flex justify-content-between align-items-center gap-3 mb-2\">\n <div class=\"d-flex align-items-center gap-2\">\n <strong>{{ index + 1 }}.</strong>\n <strong [innerHTML]=\"questionInfo?.label\"></strong>\n <span class=\"badge bg-secondary\">{{ questionInfo?.type?.title }}</span>\n </div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 1\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\" class=\"mr-3\">\n <mat-radio-group class=\"answer-radio-group\" [disabled]=\"true\">\n <mat-radio-button class=\"answer-radio-button\" *ngFor=\"let answer of questionInfo?.answers\" [value]=\"answer.id\">\n {{ answer.value }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 2\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\" class=\"mr-3\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" *ngFor=\"let answer of questionInfo?.answers; let i = index\">\n <mat-checkbox [disabled]=\"true\" fxFlex=\"80%\">{{ i + 1 }} ) {{ answer.value }}</mat-checkbox>\n </div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 3 || questionInfo?.type_id === 5 || questionInfo?.type_id === 6\"\n class=\"mr-3 d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\">lightbulb</span>\n <p class=\"mb-0\">{{ questionInfo?.type?.title }}</p>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 4\" class=\"mr-3 d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\">lightbulb</span>\n <p class=\"mb-0\">{{ questionInfo?.type?.title }}</p>\n </div>\n\n <div\n *ngIf=\"questionInfo?.type_id === 7\"\n fxLayout=\"column\"\n fxLayoutGap=\"0.25rem\"\n class=\"mr-3\"\n >\n <ol>\n <li *ngFor=\"let answer of questionInfo?.answers\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <div>{{ answer?.value }} -</div>\n <mat-radio-group [disabled]=\"true\" fxLayout=\"row\">\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" value=\"1\"\n >Yes\n </mat-radio-button>\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" value=\"0\"\n >No\n </mat-radio-button>\n </mat-radio-group>\n </div>\n </li>\n </ol>\n </div>\n</div>\n\n<mat-card *ngIf=\"submissionView\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-3 mb-2\">\n <div class=\"d-flex align-items-center gap-2\">\n <strong>{{ index + 1 }}.</strong>\n <strong [innerHTML]=\"questionInfo?.label\"></strong>\n <span class=\"badge bg-secondary\">{{ questionInfo?.type?.title }}</span>\n </div>\n </div>\n <div class=\"d-flex justify-content-between align-items-start gap-1\">\n <div *ngIf=\"questionInfo?.type_id === 1\" class=\"d-flex flex-column gap-2\">\n <mat-radio-group class=\"answer-radio-group\" [disabled]=\"disableInput\" [formControl]=\"submittedAnswer\">\n <mat-radio-button class=\"answer-radio-button\" *ngFor=\"let answer of questionInfo?.answers\"\n [value]=\"answer.id\" [disabled]=\"disableInput\">\n {{ answer.value }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 2\" class=\"d-flex flex-column gap-2\">\n <ng-container>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" *ngFor=\"let answer of questionInfo?.answers; let i = index\">\n <mat-checkbox (change)=\"onMultiSelectAnswerChange()\" [disabled]=\"disableInput\" [(ngModel)]=\"answer.isChecked\"\n fxFlex=\"80%\">\n {{ i + 1 }} ) {{ answer.value }}\n </mat-checkbox>\n </div>\n </ng-container>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 3 || questionInfo?.type_id === 4\">\n <div class=\"NgxEditor__Wrapper mb-2\" *ngIf=\"!disableInput\">\n <ngx-editor-menu [editor]=\"editor\"> </ngx-editor-menu>\n <ngx-editor\n [editor]=\"editor\"\n [formControl]=\"submittedAnswer\"\n ></ngx-editor>\n </div>\n <div *ngIf=\"disableInput\" [innerHtml]=\"submittedAnswer.value\"></div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 5\">\n <mat-form-field *ngIf=\"!disableInput\">\n <mat-label>Answer</mat-label>\n <input matInput type=\"number\" size=\"10\" [formControl]=\"submittedAnswer\"/>\n </mat-form-field>\n <span *ngIf=\"disableInput\">{{ submittedAnswer.value }}</span>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 6\">\n <mat-form-field *ngIf=\"!disableInput\">\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" [formControl]=\"submittedAnswer\"\n (focus)=\"picker.open()\"/>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n <span *ngIf=\"disableInput\">{{ submittedAnswer.value | date }}</span>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 7\">\n <ol>\n <li *ngFor=\"let answer of questionInfo?.answers\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <div>{{ answer?.value }} -</div>\n <mat-radio-group fxLayout=\"row\" (change)=\"onMultiSelectYesNoAnswerChange($event, answer)\"\n [disabled]=\"disableInput\" [value]=\"answer.selectedValue\">\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" [value]=\"true\" [disabled]=\"disableInput\">\n Yes\n </mat-radio-button>\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" [value]=\"false\" [disabled]=\"disableInput\">\n No\n </mat-radio-button>\n </mat-radio-group>\n </div>\n </li>\n </ol>\n </div>\n\n <span class=\"flex-fill\"></span>\n\n <app-checksheet-submission-files style=\"width: calc(33.33%)\" [submissionId]=\"submissionId\"\n [questionId]=\"questionInfo?.id\"></app-checksheet-submission-files>\n </div>\n\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n", styles: [".answer-radio-group{display:flex;flex-direction:column;margin:15px 0}.answer-radio-button{margin:5px}:host ::ng-deep .short-answer .ck.ck-content{min-height:100px!important}:host ::ng-deep .long-answer .ck.ck-content{min-height:200px!important}.scroll-container{max-height:650px;overflow-y:auto}.small-margin{margin-top:2px}:host ::ng-deep .yes-no .mat-radio-label-content{padding-left:3px}.main{display:block;position:relative;padding-left:24px;margin-bottom:15px;cursor:pointer}input[type=checkbox]{visibility:hidden}.geekmark{position:absolute;top:2px;left:0;height:15px;width:15px;background-color:#fff}.main input:checked~.geekmark{background-color:green}.geekmark:after{content:\"\";position:absolute;display:none}.main input:checked~.geekmark:after{display:block}.main .geekmark:after{left:5px;bottom:3px;width:6px;height:10px;border:solid white;border-width:0 4px 4px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}img{max-width:500px!important;max-height:500px!important}p{margin-bottom:0!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i10.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i10.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i11.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i11.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i12.NgxEditorComponent, selector: "ngx-editor", inputs: ["editor", "outputFormat", "placeholder"], outputs: ["focusOut", "focusIn"] }, { kind: "component", type: i12.MenuComponent, selector: "ngx-editor-menu", inputs: ["toolbar", "colorPresets", "disabled", "editor", "customMenuRef", "dropdownPlacement"] }, { kind: "component", type: i13.ChecksheetSubmissionFilesComponent, selector: "app-checksheet-submission-files", inputs: ["submissionId", "questionId", "viewMode", "fileDropperHeight", "allowMultipleFiles"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }], encapsulation: i0.ViewEncapsulation.None });
150
150
  };
151
151
  ChecksheetQuestionComponent = __decorate([
152
152
  UntilDestroy()
@@ -154,7 +154,7 @@ ChecksheetQuestionComponent = __decorate([
154
154
  export { ChecksheetQuestionComponent };
155
155
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetQuestionComponent, decorators: [{
156
156
  type: Component,
157
- args: [{ selector: 'app-checksheet-question', encapsulation: ViewEncapsulation.None, template: "<div class=\"d-flex flex-column gap-2\" *ngIf=\"!submissionView\">\n <div class=\"d-flex justify-content-between align-items-center gap-3 mb-2\">\n <div class=\"d-flex align-items-center gap-2\">\n <strong>{{ index + 1 }}.</strong>\n <strong [innerHTML]=\"questionInfo?.label\"></strong>\n <span class=\"badge bg-secondary\">{{ questionInfo?.type?.title }}</span>\n </div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 1\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\" class=\"mr-3\">\n <mat-radio-group class=\"answer-radio-group\" [disabled]=\"true\">\n <mat-radio-button class=\"answer-radio-button\" *ngFor=\"let answer of questionInfo?.answers\" [value]=\"answer.id\">\n {{ answer.value }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 2\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\" class=\"mr-3\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" *ngFor=\"let answer of questionInfo?.answers; let i = index\">\n <mat-checkbox [disabled]=\"true\" fxFlex=\"80%\">{{ i + 1 }} ) {{ answer.value }}</mat-checkbox>\n </div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 3 || questionInfo?.type_id === 5 || questionInfo?.type_id === 6\"\n class=\"mr-3 d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\">lightbulb</span>\n <p class=\"mb-0\">Answer</p>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 4\" class=\"mr-3 d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\">lightbulb</span>\n <p class=\"mb-0\">Answer</p>\n </div>\n\n <div\n *ngIf=\"questionInfo?.type_id === 7\"\n fxLayout=\"column\"\n fxLayoutGap=\"0.25rem\"\n class=\"mr-3\"\n >\n <ol>\n <li *ngFor=\"let answer of questionInfo?.answers\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <div>{{ answer?.value }} -</div>\n <mat-radio-group [disabled]=\"true\" fxLayout=\"row\">\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" value=\"1\"\n >Yes\n </mat-radio-button>\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" value=\"0\"\n >No\n </mat-radio-button>\n </mat-radio-group>\n </div>\n </li>\n </ol>\n </div>\n</div>\n\n<mat-card *ngIf=\"submissionView\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-3 mb-2\">\n <div class=\"d-flex align-items-center gap-2\">\n <strong>{{ index + 1 }}.</strong>\n <strong [innerHTML]=\"questionInfo?.label\"></strong>\n <span class=\"badge bg-secondary\">{{ questionInfo?.type?.title }}</span>\n </div>\n </div>\n <div class=\"d-flex justify-content-between align-items-start gap-1\">\n <div *ngIf=\"questionInfo?.type_id === 1\" class=\"d-flex flex-column gap-2\">\n <mat-radio-group class=\"answer-radio-group\" [disabled]=\"disableInput\" [formControl]=\"submittedAnswer\">\n <mat-radio-button class=\"answer-radio-button\" *ngFor=\"let answer of questionInfo?.answers\"\n [value]=\"answer.id\" [disabled]=\"disableInput\">\n {{ answer.value }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 2\" class=\"d-flex flex-column gap-2\">\n <ng-container>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" *ngFor=\"let answer of questionInfo?.answers; let i = index\">\n <mat-checkbox (change)=\"onMultiSelectAnswerChange()\" [disabled]=\"disableInput\" [(ngModel)]=\"answer.isChecked\"\n fxFlex=\"80%\">\n {{ i + 1 }} ) {{ answer.value }}\n </mat-checkbox>\n </div>\n </ng-container>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 3 || questionInfo?.type_id === 4\">\n <div class=\"NgxEditor__Wrapper mb-2\" *ngIf=\"!disableInput\">\n <ngx-editor-menu [editor]=\"editor\"> </ngx-editor-menu>\n <ngx-editor\n [editor]=\"editor\"\n [formControl]=\"submittedAnswer\"\n ></ngx-editor>\n </div>\n <div *ngIf=\"disableInput\" [innerHtml]=\"submittedAnswer.value\"></div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 5\">\n <mat-form-field *ngIf=\"!disableInput\">\n <mat-label>Answer</mat-label>\n <input matInput type=\"number\" size=\"10\" [formControl]=\"submittedAnswer\"/>\n </mat-form-field>\n <span *ngIf=\"disableInput\">{{ submittedAnswer.value }}</span>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 6\">\n <mat-form-field *ngIf=\"!disableInput\">\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" [formControl]=\"submittedAnswer\"\n (focus)=\"picker.open()\"/>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n <span *ngIf=\"disableInput\">{{ submittedAnswer.value | date }}</span>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 7\">\n <ol>\n <li *ngFor=\"let answer of questionInfo?.answers\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <div>{{ answer?.value }} -</div>\n <mat-radio-group fxLayout=\"row\" (change)=\"onMultiSelectYesNoAnswerChange($event, answer)\"\n [disabled]=\"disableInput\" [value]=\"answer.selectedValue\">\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" [value]=\"true\" [disabled]=\"disableInput\">\n Yes\n </mat-radio-button>\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" [value]=\"false\" [disabled]=\"disableInput\">\n No\n </mat-radio-button>\n </mat-radio-group>\n </div>\n </li>\n </ol>\n </div>\n\n <span class=\"flex-fill\"></span>\n\n <app-checksheet-submission-files style=\"width: calc(33.33%)\" [submissionId]=\"submissionId\"\n [questionId]=\"questionInfo?.id\"></app-checksheet-submission-files>\n </div>\n\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n", styles: [".answer-radio-group{display:flex;flex-direction:column;margin:15px 0}.answer-radio-button{margin:5px}:host ::ng-deep .short-answer .ck.ck-content{min-height:100px!important}:host ::ng-deep .long-answer .ck.ck-content{min-height:200px!important}.scroll-container{max-height:650px;overflow-y:auto}.small-margin{margin-top:2px}:host ::ng-deep .yes-no .mat-radio-label-content{padding-left:3px}.main{display:block;position:relative;padding-left:24px;margin-bottom:15px;cursor:pointer}input[type=checkbox]{visibility:hidden}.geekmark{position:absolute;top:2px;left:0;height:15px;width:15px;background-color:#fff}.main input:checked~.geekmark{background-color:green}.geekmark:after{content:\"\";position:absolute;display:none}.main input:checked~.geekmark:after{display:block}.main .geekmark:after{left:5px;bottom:3px;width:6px;height:10px;border:solid white;border-width:0 4px 4px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}img{max-width:500px!important;max-height:500px!important}p{margin-bottom:0!important}\n"] }]
157
+ args: [{ selector: 'app-checksheet-question', encapsulation: ViewEncapsulation.None, template: "<div class=\"d-flex flex-column gap-2\" *ngIf=\"!submissionView\">\n <div class=\"d-flex justify-content-between align-items-center gap-3 mb-2\">\n <div class=\"d-flex align-items-center gap-2\">\n <strong>{{ index + 1 }}.</strong>\n <strong [innerHTML]=\"questionInfo?.label\"></strong>\n <span class=\"badge bg-secondary\">{{ questionInfo?.type?.title }}</span>\n </div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 1\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\" class=\"mr-3\">\n <mat-radio-group class=\"answer-radio-group\" [disabled]=\"true\">\n <mat-radio-button class=\"answer-radio-button\" *ngFor=\"let answer of questionInfo?.answers\" [value]=\"answer.id\">\n {{ answer.value }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 2\" fxLayout=\"column\" fxLayoutGap=\"0.25rem\" class=\"mr-3\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" *ngFor=\"let answer of questionInfo?.answers; let i = index\">\n <mat-checkbox [disabled]=\"true\" fxFlex=\"80%\">{{ i + 1 }} ) {{ answer.value }}</mat-checkbox>\n </div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 3 || questionInfo?.type_id === 5 || questionInfo?.type_id === 6\"\n class=\"mr-3 d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\">lightbulb</span>\n <p class=\"mb-0\">{{ questionInfo?.type?.title }}</p>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 4\" class=\"mr-3 d-flex justify-content-start align-items-center gap-2\">\n <span class=\"material-symbols-outlined\">lightbulb</span>\n <p class=\"mb-0\">{{ questionInfo?.type?.title }}</p>\n </div>\n\n <div\n *ngIf=\"questionInfo?.type_id === 7\"\n fxLayout=\"column\"\n fxLayoutGap=\"0.25rem\"\n class=\"mr-3\"\n >\n <ol>\n <li *ngFor=\"let answer of questionInfo?.answers\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <div>{{ answer?.value }} -</div>\n <mat-radio-group [disabled]=\"true\" fxLayout=\"row\">\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" value=\"1\"\n >Yes\n </mat-radio-button>\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" value=\"0\"\n >No\n </mat-radio-button>\n </mat-radio-group>\n </div>\n </li>\n </ol>\n </div>\n</div>\n\n<mat-card *ngIf=\"submissionView\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-3 mb-2\">\n <div class=\"d-flex align-items-center gap-2\">\n <strong>{{ index + 1 }}.</strong>\n <strong [innerHTML]=\"questionInfo?.label\"></strong>\n <span class=\"badge bg-secondary\">{{ questionInfo?.type?.title }}</span>\n </div>\n </div>\n <div class=\"d-flex justify-content-between align-items-start gap-1\">\n <div *ngIf=\"questionInfo?.type_id === 1\" class=\"d-flex flex-column gap-2\">\n <mat-radio-group class=\"answer-radio-group\" [disabled]=\"disableInput\" [formControl]=\"submittedAnswer\">\n <mat-radio-button class=\"answer-radio-button\" *ngFor=\"let answer of questionInfo?.answers\"\n [value]=\"answer.id\" [disabled]=\"disableInput\">\n {{ answer.value }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 2\" class=\"d-flex flex-column gap-2\">\n <ng-container>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" *ngFor=\"let answer of questionInfo?.answers; let i = index\">\n <mat-checkbox (change)=\"onMultiSelectAnswerChange()\" [disabled]=\"disableInput\" [(ngModel)]=\"answer.isChecked\"\n fxFlex=\"80%\">\n {{ i + 1 }} ) {{ answer.value }}\n </mat-checkbox>\n </div>\n </ng-container>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 3 || questionInfo?.type_id === 4\">\n <div class=\"NgxEditor__Wrapper mb-2\" *ngIf=\"!disableInput\">\n <ngx-editor-menu [editor]=\"editor\"> </ngx-editor-menu>\n <ngx-editor\n [editor]=\"editor\"\n [formControl]=\"submittedAnswer\"\n ></ngx-editor>\n </div>\n <div *ngIf=\"disableInput\" [innerHtml]=\"submittedAnswer.value\"></div>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 5\">\n <mat-form-field *ngIf=\"!disableInput\">\n <mat-label>Answer</mat-label>\n <input matInput type=\"number\" size=\"10\" [formControl]=\"submittedAnswer\"/>\n </mat-form-field>\n <span *ngIf=\"disableInput\">{{ submittedAnswer.value }}</span>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 6\">\n <mat-form-field *ngIf=\"!disableInput\">\n <input matInput [matDatepicker]=\"picker\" placeholder=\"Date\" [formControl]=\"submittedAnswer\"\n (focus)=\"picker.open()\"/>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n <span *ngIf=\"disableInput\">{{ submittedAnswer.value | date }}</span>\n </div>\n\n <div *ngIf=\"questionInfo?.type_id === 7\">\n <ol>\n <li *ngFor=\"let answer of questionInfo?.answers\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <div>{{ answer?.value }} -</div>\n <mat-radio-group fxLayout=\"row\" (change)=\"onMultiSelectYesNoAnswerChange($event, answer)\"\n [disabled]=\"disableInput\" [value]=\"answer.selectedValue\">\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" [value]=\"true\" [disabled]=\"disableInput\">\n Yes\n </mat-radio-button>\n <mat-radio-button class=\"mt-1 ml-2 yes-no\" [value]=\"false\" [disabled]=\"disableInput\">\n No\n </mat-radio-button>\n </mat-radio-group>\n </div>\n </li>\n </ol>\n </div>\n\n <span class=\"flex-fill\"></span>\n\n <app-checksheet-submission-files style=\"width: calc(33.33%)\" [submissionId]=\"submissionId\"\n [questionId]=\"questionInfo?.id\"></app-checksheet-submission-files>\n </div>\n\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n", styles: [".answer-radio-group{display:flex;flex-direction:column;margin:15px 0}.answer-radio-button{margin:5px}:host ::ng-deep .short-answer .ck.ck-content{min-height:100px!important}:host ::ng-deep .long-answer .ck.ck-content{min-height:200px!important}.scroll-container{max-height:650px;overflow-y:auto}.small-margin{margin-top:2px}:host ::ng-deep .yes-no .mat-radio-label-content{padding-left:3px}.main{display:block;position:relative;padding-left:24px;margin-bottom:15px;cursor:pointer}input[type=checkbox]{visibility:hidden}.geekmark{position:absolute;top:2px;left:0;height:15px;width:15px;background-color:#fff}.main input:checked~.geekmark{background-color:green}.geekmark:after{content:\"\";position:absolute;display:none}.main input:checked~.geekmark:after{display:block}.main .geekmark:after{left:5px;bottom:3px;width:6px;height:10px;border:solid white;border-width:0 4px 4px 0;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}img{max-width:500px!important;max-height:500px!important}p{margin-bottom:0!important}\n"] }]
158
158
  }], ctorParameters: () => [{ type: i1.ChecksheetSubmissionAnswerService }], propDecorators: { questionInfo: [{
159
159
  type: Input
160
160
  }], index: [{
@@ -170,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
170
170
  }], isWorkingChange: [{
171
171
  type: Output
172
172
  }] } });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1xdWVzdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY2hlY2tzaGVldC9zcmMvbGliL2NoZWNrc2hlZXQvY2hlY2tzaGVldC1xdWVzdGlvbi9jaGVja3NoZWV0LXF1ZXN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXF1ZXN0aW9uL2NoZWNrc2hlZXQtcXVlc3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVN0QyxJQUFNLDJCQUEyQixHQUFqQyxNQUFNLDJCQUEyQjtJQW1CNUI7SUFsQkQsWUFBWSxDQUFNO0lBRWxCLEtBQUssQ0FBTztJQUVaLGNBQWMsQ0FBVztJQUV6QixZQUFZLENBQVU7SUFFdEIsWUFBWSxDQUFXO0lBRWhDLFlBQVksQ0FBVTtJQUN0QixNQUFNLENBQVU7SUFFUCxTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzFCLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBQ3hELGVBQWUsR0FBZ0IsSUFBSSxXQUFXLENBQU0sRUFBRSxDQUFDLENBQUM7SUFFeEQsWUFDVSxp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QVMsRUFBRSxVQUFVLEVBQUUsU0FBUztZQUNoQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDbEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPO1lBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTztTQUM3QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDM0QsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN6QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F6SlUsMkJBQTJCOzRGQUEzQiwyQkFBMkIsZ1NDckJ4Qyx3M01BaUpBOztBRDVIYSwyQkFBMkI7SUFQdkMsWUFBWSxFQUFFO0dBT0YsMkJBQTJCLENBMEp2Qzs7NEZBMUpZLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSx5QkFBeUIsaUJBRXBCLGlCQUFpQixDQUFDLElBQUk7c0dBSTVCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95IH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gJ25neC1lZGl0b3InO1xuaW1wb3J0IHsgQ2hlY2tzaGVldFN1Ym1pc3Npb25BbnN3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2hlY2tzaGVldC1zdWJtaXNzaW9uLWFuc3dlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jaGVja3NoZWV0LXF1ZXN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrc2hlZXQtcXVlc3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLCAvLyBMZXRzIHVzIHN0eWxlIHRoZSBpbm5lckhUTUwgY29kZVxuICBzdHlsZVVybHM6IFsnLi9jaGVja3NoZWV0LXF1ZXN0aW9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tzaGVldFF1ZXN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcXVlc3Rpb25JbmZvOiBhbnk7XG5cbiAgQElucHV0KCkgaW5kZXghOiBhbnk7XG5cbiAgQElucHV0KCkgc3VibWlzc2lvblZpZXchOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHN1Ym1pc3Npb25JZCE6IG51bWJlcjtcblxuICBASW5wdXQoKSBkaXNhYmxlSW5wdXQhOiBib29sZWFuO1xuXG4gIGZpbGVFbnRpdHlJZCE6IG51bWJlcjtcbiAgZWRpdG9yITogRWRpdG9yO1xuXG4gIEBJbnB1dCgpIGlzV29ya2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgaXNXb3JraW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBzdWJtaXR0ZWRBbnN3ZXI6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPGFueT4oJycpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hlY2tzaGVldFN1Ym1pc3Npb25BbnN3ZXJTZXJ2aWNlOiBDaGVja3NoZWV0U3VibWlzc2lvbkFuc3dlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcigpO1xuXG4gICAgdGhpcy5zdWJtaXR0ZWRBbnN3ZXIudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwMCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWw6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLnNhdmVBbnN3ZXIoeyBhbnN3ZXJfaWQ6IHZhbCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNhdmVBbnN3ZXIoeyBkZXRhaWxzOiB2YWwgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc3VibWlzc2lvblZpZXcpIHtcbiAgICAgIC8vIGxvYWQgdGhlIGFuc3dlciBmb3IgY3VycmVudCBzdWJtaXNzaW9uIHF1ZXN0aW9uXG4gICAgICB0aGlzLmxvYWRBbnN3ZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbGVFbnRpdHlJZCA9IHRoaXMucXVlc3Rpb25JbmZvLmlkO1xuICB9XG5cbiAgb25NdWx0aVNlbGVjdEFuc3dlckNoYW5nZSgpIHtcbiAgICBjb25zdCBhbnN3ZXJJZHM6IG51bWJlcltdID0gKHRoaXMucXVlc3Rpb25JbmZvLmFuc3dlcnMgYXMgW10pXG4gICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0uaXNDaGVja2VkKVxuICAgICAgLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmlkKTtcblxuICAgIHRoaXMuc2F2ZUFuc3dlcih7IGFuc3dlcl9pZHM6IGFuc3dlcklkcyB9KTtcbiAgfVxuXG4gIG9uTXVsdGlTZWxlY3RZZXNOb0Fuc3dlckNoYW5nZShldmVudDogYW55LCBhbnN3ZXI6IGFueSkge1xuICAgIHRoaXMuc2F2ZUFuc3dlcih7IGFuc3dlcl9pZDogYW5zd2VyPy5pZCwgZGV0YWlsczogZXZlbnQudmFsdWUgfSk7XG4gIH1cblxuICBnZXRTdWJtaXR0ZWRNQ1FBbnN3ZXIoYW5zd2VyczogYW55W10gPSBbXSwgYW5zd2VyX2lkOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKGFuc3dlcl9pZCkge1xuICAgICAgY29uc3Qgc3VibWl0dGVkQW5zd2VyID0gYW5zd2Vycy5maW5kKCh4KSA9PiB4LmlkID09PSBhbnN3ZXJfaWQpO1xuICAgICAgaWYgKHN1Ym1pdHRlZEFuc3dlcikge1xuICAgICAgICByZXR1cm4gc3VibWl0dGVkQW5zd2VyPy52YWx1ZSB8fCAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0U3VibWl0dGVkTVNRQW5zd2VyKCkge1xuICAgIHJldHVybiAodGhpcy5xdWVzdGlvbkluZm8/LmFuc3dlcnMgYXMgW10pXG4gICAgICAuZmlsdGVyKChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyPy5pc0NoZWNrZWQpXG4gICAgICA/Lm1hcCgoYW5zd2VyOiBhbnkpID0+IGFuc3dlci52YWx1ZSlcbiAgICAgID8uam9pbignLCAnKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEFuc3dlcigpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHN1Ym1pc3Npb25faWRzOiB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgIHF1ZXN0aW9uX2lkczogdGhpcy5xdWVzdGlvbkluZm8/LmlkXG4gICAgfTtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgdGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkFuc3dlclNlcnZpY2UuaW5kZXgocGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgYW5zd2VyczogYW55W10gPSByZXNwb25zZT8uZGF0YTtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSAxICYmIGFuc3dlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnN1Ym1pdHRlZEFuc3dlci5zZXRWYWx1ZShhbnN3ZXJzWzBdPy5hbnN3ZXJfaWQsIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuc3VibWl0dGVkQW5zd2VyLnNldFZhbHVlKGFuc3dlcnMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSW5mby5hbnN3ZXJzID0gKHRoaXMucXVlc3Rpb25JbmZvPy5hbnN3ZXJzIGFzIFtdKS5tYXAoXG4gICAgICAgICAgICAoYW5zd2VyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgaXNDaGVja2VkOiBhbnN3ZXJzLnNvbWUoXG4gICAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLmFuc3dlcl9pZCA9PT0gYW5zd2VyLmlkXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKHRoaXMucXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSAzIHx8XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gNCB8fFxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDUgfHxcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSA2KSAmJlxuICAgICAgICAgIGFuc3dlcnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zdWJtaXR0ZWRBbnN3ZXIuc2V0VmFsdWUoYW5zd2Vyc1swXS5kZXRhaWxzIHx8ICcnLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDcpIHtcbiAgICAgICAgICB0aGlzLnN1Ym1pdHRlZEFuc3dlci5zZXRWYWx1ZShhbnN3ZXJzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkluZm8uYW5zd2VycyA9ICh0aGlzLnF1ZXN0aW9uSW5mbz8uYW5zd2VycyBhcyBbXSkubWFwKFxuICAgICAgICAgICAgKGFuc3dlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gYW5zd2Vycy5maW5kKFxuICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0uYW5zd2VyX2lkID09PSBhbnN3ZXIuaWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZTogcmVzdWx0ID8gQm9vbGVhbihOdW1iZXIocmVzdWx0Py5kZXRhaWxzKSkgOiBudWxsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5pc1dvcmtpbmcgPSBmYWxzZSlcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHJlcXVlc3QgdG8gc2F2ZSB0aGUgcXVlc3Rpb24gYW5zd2Vycy5cbiAgICpcbiAgICogQHBhcmFtIGFuc3dlckRhdGFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2F2ZUFuc3dlcihhbnN3ZXJEYXRhOiB7XG4gICAgYW5zd2VyX2lkPzogbnVtYmVyO1xuICAgIGFuc3dlcl9pZHM/OiBudW1iZXJbXTtcbiAgICBkZXRhaWxzPzogc3RyaW5nO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgcXVlc3Rpb25faWQ6IHRoaXMucXVlc3Rpb25JbmZvPy5pZCxcbiAgICAgIHN1Ym1pc3Npb25faWQ6IHRoaXMuc3VibWlzc2lvbklkLFxuICAgICAgYW5zd2VyX2lkOiBhbnN3ZXJEYXRhPy5hbnN3ZXJfaWQsXG4gICAgICBhbnN3ZXJfaWRzOiBhbnN3ZXJEYXRhPy5hbnN3ZXJfaWRzLFxuICAgICAgcXVlc3Rpb25fdHlwZV9pZDogdGhpcy5xdWVzdGlvbkluZm8/LnR5cGVfaWQsXG4gICAgICBkZXRhaWxzOiBhbnN3ZXJEYXRhPy5kZXRhaWxzXG4gICAgfTtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgdGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkFuc3dlclNlcnZpY2Uuc3RvcmUoZGF0YSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4gKHRoaXMuaXNXb3JraW5nID0gZmFsc2UpXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIiAqbmdJZj1cIiFzdWJtaXNzaW9uVmlld1wiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBtYi0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgIDxzdHJvbmc+e3sgaW5kZXggKyAxIH19Ljwvc3Ryb25nPlxuICAgICAgPHN0cm9uZyBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uSW5mbz8ubGFiZWxcIj48L3N0cm9uZz5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctc2Vjb25kYXJ5XCI+e3sgcXVlc3Rpb25JbmZvPy50eXBlPy50aXRsZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gMVwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIwLjI1cmVtXCIgY2xhc3M9XCJtci0zXCI+XG4gICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cImFuc3dlci1yYWRpby1ncm91cFwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cImFuc3dlci1yYWRpby1idXR0b25cIiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uSW5mbz8uYW5zd2Vyc1wiIFt2YWx1ZV09XCJhbnN3ZXIuaWRcIj5cbiAgICAgICAge3sgYW5zd2VyLnZhbHVlIH19XG4gICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDJcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwPVwiMC4yNXJlbVwiIGNsYXNzPVwibXItM1wiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBxdWVzdGlvbkluZm8/LmFuc3dlcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxtYXQtY2hlY2tib3ggW2Rpc2FibGVkXT1cInRydWVcIiBmeEZsZXg9XCI4MCVcIj57eyBpICsgMSB9fSApIHt7IGFuc3dlci52YWx1ZSB9fTwvbWF0LWNoZWNrYm94PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSAzIHx8IHF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gNSB8fCBxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDZcIlxuICAgICAgIGNsYXNzPVwibXItMyBkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmxpZ2h0YnVsYjwvc3Bhbj5cbiAgICA8cCBjbGFzcz1cIm1iLTBcIj5BbnN3ZXI8L3A+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDRcIiBjbGFzcz1cIm1yLTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5saWdodGJ1bGI8L3NwYW4+XG4gICAgPHAgY2xhc3M9XCJtYi0wXCI+QW5zd2VyPC9wPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCJxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDdcIlxuICAgIGZ4TGF5b3V0PVwiY29sdW1uXCJcbiAgICBmeExheW91dEdhcD1cIjAuMjVyZW1cIlxuICAgIGNsYXNzPVwibXItM1wiXG4gID5cbiAgICA8b2w+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBxdWVzdGlvbkluZm8/LmFuc3dlcnNcIj5cbiAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2Pnt7IGFuc3dlcj8udmFsdWUgfX0gLTwvZGl2PlxuICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgW2Rpc2FibGVkXT1cInRydWVcIiBmeExheW91dD1cInJvd1wiPlxuICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtdC0xIG1sLTIgeWVzLW5vXCIgdmFsdWU9XCIxXCJcbiAgICAgICAgICAgID5ZZXNcbiAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwibXQtMSBtbC0yIHllcy1ub1wiIHZhbHVlPVwiMFwiXG4gICAgICAgICAgICA+Tm9cbiAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxtYXQtY2FyZCAqbmdJZj1cInN1Ym1pc3Npb25WaWV3XCI+XG4gIDxtYXQtY2FyZC1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIG1iLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxzdHJvbmc+e3sgaW5kZXggKyAxIH19Ljwvc3Ryb25nPlxuICAgICAgICA8c3Ryb25nIFtpbm5lckhUTUxdPVwicXVlc3Rpb25JbmZvPy5sYWJlbFwiPjwvc3Ryb25nPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLXNlY29uZGFyeVwiPnt7IHF1ZXN0aW9uSW5mbz8udHlwZT8udGl0bGUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLXN0YXJ0IGdhcC0xXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSAxXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIj5cbiAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cImFuc3dlci1yYWRpby1ncm91cFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlSW5wdXRcIiBbZm9ybUNvbnRyb2xdPVwic3VibWl0dGVkQW5zd2VyXCI+XG4gICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJhbnN3ZXItcmFkaW8tYnV0dG9uXCIgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBxdWVzdGlvbkluZm8/LmFuc3dlcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJhbnN3ZXIuaWRcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUlucHV0XCI+XG4gICAgICAgICAgICB7eyBhbnN3ZXIudmFsdWUgfX1cbiAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDJcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBxdWVzdGlvbkluZm8/LmFuc3dlcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvbk11bHRpU2VsZWN0QW5zd2VyQ2hhbmdlKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUlucHV0XCIgWyhuZ01vZGVsKV09XCJhbnN3ZXIuaXNDaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PVwiODAlXCI+XG4gICAgICAgICAgICAgIHt7IGkgKyAxIH19ICkge3sgYW5zd2VyLnZhbHVlIH19XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gMyB8fCBxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIk5neEVkaXRvcl9fV3JhcHBlciBtYi0yXCIgKm5nSWY9XCIhZGlzYWJsZUlucHV0XCI+XG4gICAgICAgICAgPG5neC1lZGl0b3ItbWVudSBbZWRpdG9yXT1cImVkaXRvclwiPiA8L25neC1lZGl0b3ItbWVudT5cbiAgICAgICAgICA8bmd4LWVkaXRvclxuICAgICAgICAgICAgW2VkaXRvcl09XCJlZGl0b3JcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInN1Ym1pdHRlZEFuc3dlclwiXG4gICAgICAgICAgPjwvbmd4LWVkaXRvcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJkaXNhYmxlSW5wdXRcIiBbaW5uZXJIdG1sXT1cInN1Ym1pdHRlZEFuc3dlci52YWx1ZVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDVcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiIWRpc2FibGVJbnB1dFwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+QW5zd2VyPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBzaXplPVwiMTBcIiBbZm9ybUNvbnRyb2xdPVwic3VibWl0dGVkQW5zd2VyXCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImRpc2FibGVJbnB1dFwiPnt7IHN1Ym1pdHRlZEFuc3dlci52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSA2XCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIiFkaXNhYmxlSW5wdXRcIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgcGxhY2Vob2xkZXI9XCJEYXRlXCIgW2Zvcm1Db250cm9sXT1cInN1Ym1pdHRlZEFuc3dlclwiXG4gICAgICAgICAgICAgICAgIChmb2N1cyk9XCJwaWNrZXIub3BlbigpXCIvPlxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJkaXNhYmxlSW5wdXRcIj57eyBzdWJtaXR0ZWRBbnN3ZXIudmFsdWUgfCBkYXRlIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDdcIj5cbiAgICAgICAgPG9sPlxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uSW5mbz8uYW5zd2Vyc1wiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdj57eyBhbnN3ZXI/LnZhbHVlIH19IC08L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBmeExheW91dD1cInJvd1wiIChjaGFuZ2UpPVwib25NdWx0aVNlbGVjdFllc05vQW5zd2VyQ2hhbmdlKCRldmVudCwgYW5zd2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVJbnB1dFwiIFt2YWx1ZV09XCJhbnN3ZXIuc2VsZWN0ZWRWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwibXQtMSBtbC0yIHllcy1ub1wiIFt2YWx1ZV09XCJ0cnVlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVJbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgWWVzXG4gICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGNsYXNzPVwibXQtMSBtbC0yIHllcy1ub1wiIFt2YWx1ZV09XCJmYWxzZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlSW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIE5vXG4gICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvb2w+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LWZpbGxcIj48L3NwYW4+XG5cbiAgICAgIDxhcHAtY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGVzIHN0eWxlPVwid2lkdGg6IGNhbGMoMzMuMzMlKVwiIFtzdWJtaXNzaW9uSWRdPVwic3VibWlzc2lvbklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbklkXT1cInF1ZXN0aW9uSW5mbz8uaWRcIj48L2FwcC1jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZXM+XG4gICAgPC9kaXY+XG5cbiAgICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cImlzV29ya2luZ1wiIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPlxuIl19
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1xdWVzdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY2hlY2tzaGVldC9zcmMvbGliL2NoZWNrc2hlZXQvY2hlY2tzaGVldC1xdWVzdGlvbi9jaGVja3NoZWV0LXF1ZXN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXF1ZXN0aW9uL2NoZWNrc2hlZXQtcXVlc3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVN0QyxJQUFNLDJCQUEyQixHQUFqQyxNQUFNLDJCQUEyQjtJQW1CNUI7SUFsQkQsWUFBWSxDQUFNO0lBRWxCLEtBQUssQ0FBTztJQUVaLGNBQWMsQ0FBVztJQUV6QixZQUFZLENBQVU7SUFFdEIsWUFBWSxDQUFXO0lBRWhDLFlBQVksQ0FBVTtJQUN0QixNQUFNLENBQVU7SUFFUCxTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzFCLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBQ3hELGVBQWUsR0FBZ0IsSUFBSSxXQUFXLENBQU0sRUFBRSxDQUFDLENBQUM7SUFFeEQsWUFDVSxp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QVMsRUFBRSxVQUFVLEVBQUUsU0FBUztZQUNoQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7WUFDbEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPO1lBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTztTQUM3QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDM0QsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN6QixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F6SlUsMkJBQTJCOzRGQUEzQiwyQkFBMkIsZ1NDckJ4QywwNk1BaUpBOztBRDVIYSwyQkFBMkI7SUFQdkMsWUFBWSxFQUFFO0dBT0YsMkJBQTJCLENBMEp2Qzs7NEZBMUpZLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSx5QkFBeUIsaUJBRXBCLGlCQUFpQixDQUFDLElBQUk7c0dBSTVCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95IH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gJ25neC1lZGl0b3InO1xuaW1wb3J0IHsgQ2hlY2tzaGVldFN1Ym1pc3Npb25BbnN3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY2hlY2tzaGVldC1zdWJtaXNzaW9uLWFuc3dlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jaGVja3NoZWV0LXF1ZXN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrc2hlZXQtcXVlc3Rpb24uY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLCAvLyBMZXRzIHVzIHN0eWxlIHRoZSBpbm5lckhUTUwgY29kZVxuICBzdHlsZVVybHM6IFsnLi9jaGVja3NoZWV0LXF1ZXN0aW9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tzaGVldFF1ZXN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcXVlc3Rpb25JbmZvOiBhbnk7XG5cbiAgQElucHV0KCkgaW5kZXghOiBhbnk7XG5cbiAgQElucHV0KCkgc3VibWlzc2lvblZpZXchOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpIHN1Ym1pc3Npb25JZCE6IG51bWJlcjtcblxuICBASW5wdXQoKSBkaXNhYmxlSW5wdXQhOiBib29sZWFuO1xuXG4gIGZpbGVFbnRpdHlJZCE6IG51bWJlcjtcbiAgZWRpdG9yITogRWRpdG9yO1xuXG4gIEBJbnB1dCgpIGlzV29ya2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgaXNXb3JraW5nQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBzdWJtaXR0ZWRBbnN3ZXI6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPGFueT4oJycpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hlY2tzaGVldFN1Ym1pc3Npb25BbnN3ZXJTZXJ2aWNlOiBDaGVja3NoZWV0U3VibWlzc2lvbkFuc3dlclNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcigpO1xuXG4gICAgdGhpcy5zdWJtaXR0ZWRBbnN3ZXIudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwMCkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWw6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLnNhdmVBbnN3ZXIoeyBhbnN3ZXJfaWQ6IHZhbCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNhdmVBbnN3ZXIoeyBkZXRhaWxzOiB2YWwgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc3VibWlzc2lvblZpZXcpIHtcbiAgICAgIC8vIGxvYWQgdGhlIGFuc3dlciBmb3IgY3VycmVudCBzdWJtaXNzaW9uIHF1ZXN0aW9uXG4gICAgICB0aGlzLmxvYWRBbnN3ZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbGVFbnRpdHlJZCA9IHRoaXMucXVlc3Rpb25JbmZvLmlkO1xuICB9XG5cbiAgb25NdWx0aVNlbGVjdEFuc3dlckNoYW5nZSgpIHtcbiAgICBjb25zdCBhbnN3ZXJJZHM6IG51bWJlcltdID0gKHRoaXMucXVlc3Rpb25JbmZvLmFuc3dlcnMgYXMgW10pXG4gICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0uaXNDaGVja2VkKVxuICAgICAgLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmlkKTtcblxuICAgIHRoaXMuc2F2ZUFuc3dlcih7IGFuc3dlcl9pZHM6IGFuc3dlcklkcyB9KTtcbiAgfVxuXG4gIG9uTXVsdGlTZWxlY3RZZXNOb0Fuc3dlckNoYW5nZShldmVudDogYW55LCBhbnN3ZXI6IGFueSkge1xuICAgIHRoaXMuc2F2ZUFuc3dlcih7IGFuc3dlcl9pZDogYW5zd2VyPy5pZCwgZGV0YWlsczogZXZlbnQudmFsdWUgfSk7XG4gIH1cblxuICBnZXRTdWJtaXR0ZWRNQ1FBbnN3ZXIoYW5zd2VyczogYW55W10gPSBbXSwgYW5zd2VyX2lkOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKGFuc3dlcl9pZCkge1xuICAgICAgY29uc3Qgc3VibWl0dGVkQW5zd2VyID0gYW5zd2Vycy5maW5kKCh4KSA9PiB4LmlkID09PSBhbnN3ZXJfaWQpO1xuICAgICAgaWYgKHN1Ym1pdHRlZEFuc3dlcikge1xuICAgICAgICByZXR1cm4gc3VibWl0dGVkQW5zd2VyPy52YWx1ZSB8fCAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0U3VibWl0dGVkTVNRQW5zd2VyKCkge1xuICAgIHJldHVybiAodGhpcy5xdWVzdGlvbkluZm8/LmFuc3dlcnMgYXMgW10pXG4gICAgICAuZmlsdGVyKChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyPy5pc0NoZWNrZWQpXG4gICAgICA/Lm1hcCgoYW5zd2VyOiBhbnkpID0+IGFuc3dlci52YWx1ZSlcbiAgICAgID8uam9pbignLCAnKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEFuc3dlcigpIHtcbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIHN1Ym1pc3Npb25faWRzOiB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgIHF1ZXN0aW9uX2lkczogdGhpcy5xdWVzdGlvbkluZm8/LmlkXG4gICAgfTtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgdGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkFuc3dlclNlcnZpY2UuaW5kZXgocGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgYW5zd2VyczogYW55W10gPSByZXNwb25zZT8uZGF0YTtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSAxICYmIGFuc3dlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnN1Ym1pdHRlZEFuc3dlci5zZXRWYWx1ZShhbnN3ZXJzWzBdPy5hbnN3ZXJfaWQsIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuc3VibWl0dGVkQW5zd2VyLnNldFZhbHVlKGFuc3dlcnMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSW5mby5hbnN3ZXJzID0gKHRoaXMucXVlc3Rpb25JbmZvPy5hbnN3ZXJzIGFzIFtdKS5tYXAoXG4gICAgICAgICAgICAoYW5zd2VyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgaXNDaGVja2VkOiBhbnN3ZXJzLnNvbWUoXG4gICAgICAgICAgICAgICAgICAoaXRlbTogYW55KSA9PiBpdGVtLmFuc3dlcl9pZCA9PT0gYW5zd2VyLmlkXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKHRoaXMucXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSAzIHx8XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gNCB8fFxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDUgfHxcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSA2KSAmJlxuICAgICAgICAgIGFuc3dlcnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zdWJtaXR0ZWRBbnN3ZXIuc2V0VmFsdWUoYW5zd2Vyc1swXS5kZXRhaWxzIHx8ICcnLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDcpIHtcbiAgICAgICAgICB0aGlzLnN1Ym1pdHRlZEFuc3dlci5zZXRWYWx1ZShhbnN3ZXJzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkluZm8uYW5zd2VycyA9ICh0aGlzLnF1ZXN0aW9uSW5mbz8uYW5zd2VycyBhcyBbXSkubWFwKFxuICAgICAgICAgICAgKGFuc3dlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gYW5zd2Vycy5maW5kKFxuICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0uYW5zd2VyX2lkID09PSBhbnN3ZXIuaWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZTogcmVzdWx0ID8gQm9vbGVhbihOdW1iZXIocmVzdWx0Py5kZXRhaWxzKSkgOiBudWxsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5pc1dvcmtpbmcgPSBmYWxzZSlcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHJlcXVlc3QgdG8gc2F2ZSB0aGUgcXVlc3Rpb24gYW5zd2Vycy5cbiAgICpcbiAgICogQHBhcmFtIGFuc3dlckRhdGFcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2F2ZUFuc3dlcihhbnN3ZXJEYXRhOiB7XG4gICAgYW5zd2VyX2lkPzogbnVtYmVyO1xuICAgIGFuc3dlcl9pZHM/OiBudW1iZXJbXTtcbiAgICBkZXRhaWxzPzogc3RyaW5nO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZGF0YTogYW55ID0ge1xuICAgICAgcXVlc3Rpb25faWQ6IHRoaXMucXVlc3Rpb25JbmZvPy5pZCxcbiAgICAgIHN1Ym1pc3Npb25faWQ6IHRoaXMuc3VibWlzc2lvbklkLFxuICAgICAgYW5zd2VyX2lkOiBhbnN3ZXJEYXRhPy5hbnN3ZXJfaWQsXG4gICAgICBhbnN3ZXJfaWRzOiBhbnN3ZXJEYXRhPy5hbnN3ZXJfaWRzLFxuICAgICAgcXVlc3Rpb25fdHlwZV9pZDogdGhpcy5xdWVzdGlvbkluZm8/LnR5cGVfaWQsXG4gICAgICBkZXRhaWxzOiBhbnN3ZXJEYXRhPy5kZXRhaWxzXG4gICAgfTtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgdGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkFuc3dlclNlcnZpY2Uuc3RvcmUoZGF0YSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4gKHRoaXMuaXNXb3JraW5nID0gZmFsc2UpXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTJcIiAqbmdJZj1cIiFzdWJtaXNzaW9uVmlld1wiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBtYi0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgIDxzdHJvbmc+e3sgaW5kZXggKyAxIH19Ljwvc3Ryb25nPlxuICAgICAgPHN0cm9uZyBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uSW5mbz8ubGFiZWxcIj48L3N0cm9uZz5cbiAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctc2Vjb25kYXJ5XCI+e3sgcXVlc3Rpb25JbmZvPy50eXBlPy50aXRsZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gMVwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRHYXA9XCIwLjI1cmVtXCIgY2xhc3M9XCJtci0zXCI+XG4gICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cImFuc3dlci1yYWRpby1ncm91cFwiIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cImFuc3dlci1yYWRpby1idXR0b25cIiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uSW5mbz8uYW5zd2Vyc1wiIFt2YWx1ZV09XCJhbnN3ZXIuaWRcIj5cbiAgICAgICAge3sgYW5zd2VyLnZhbHVlIH19XG4gICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDJcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwPVwiMC4yNXJlbVwiIGNsYXNzPVwibXItM1wiPlxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBxdWVzdGlvbkluZm8/LmFuc3dlcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxtYXQtY2hlY2tib3ggW2Rpc2FibGVkXT1cInRydWVcIiBmeEZsZXg9XCI4MCVcIj57eyBpICsgMSB9fSApIHt7IGFuc3dlci52YWx1ZSB9fTwvbWF0LWNoZWNrYm94PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSAzIHx8IHF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gNSB8fCBxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDZcIlxuICAgICAgIGNsYXNzPVwibXItMyBkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmxpZ2h0YnVsYjwvc3Bhbj5cbiAgICA8cCBjbGFzcz1cIm1iLTBcIj57eyBxdWVzdGlvbkluZm8/LnR5cGU/LnRpdGxlIH19PC9wPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSA0XCIgY2xhc3M9XCJtci0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+bGlnaHRidWxiPC9zcGFuPlxuICAgIDxwIGNsYXNzPVwibWItMFwiPnt7IHF1ZXN0aW9uSW5mbz8udHlwZT8udGl0bGUgfX08L3A+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cInF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gN1wiXG4gICAgZnhMYXlvdXQ9XCJjb2x1bW5cIlxuICAgIGZ4TGF5b3V0R2FwPVwiMC4yNXJlbVwiXG4gICAgY2xhc3M9XCJtci0zXCJcbiAgPlxuICAgIDxvbD5cbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uSW5mbz8uYW5zd2Vyc1wiPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxuICAgICAgICAgIDxkaXY+e3sgYW5zd2VyPy52YWx1ZSB9fSAtPC9kaXY+XG4gICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBbZGlzYWJsZWRdPVwidHJ1ZVwiIGZ4TGF5b3V0PVwicm93XCI+XG4gICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cIm10LTEgbWwtMiB5ZXMtbm9cIiB2YWx1ZT1cIjFcIlxuICAgICAgICAgICAgPlllc1xuICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtdC0xIG1sLTIgeWVzLW5vXCIgdmFsdWU9XCIwXCJcbiAgICAgICAgICAgID5Ob1xuICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG1hdC1jYXJkICpuZ0lmPVwic3VibWlzc2lvblZpZXdcIj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgbWItMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPHN0cm9uZz57eyBpbmRleCArIDEgfX0uPC9zdHJvbmc+XG4gICAgICAgIDxzdHJvbmcgW2lubmVySFRNTF09XCJxdWVzdGlvbkluZm8/LmxhYmVsXCI+PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctc2Vjb25kYXJ5XCI+e3sgcXVlc3Rpb25JbmZvPy50eXBlPy50aXRsZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtc3RhcnQgZ2FwLTFcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDFcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMlwiPlxuICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGNsYXNzPVwiYW5zd2VyLXJhZGlvLWdyb3VwXCIgW2Rpc2FibGVkXT1cImRpc2FibGVJbnB1dFwiIFtmb3JtQ29udHJvbF09XCJzdWJtaXR0ZWRBbnN3ZXJcIj5cbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cImFuc3dlci1yYWRpby1idXR0b25cIiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uSW5mbz8uYW5zd2Vyc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImFuc3dlci5pZFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlSW5wdXRcIj5cbiAgICAgICAgICAgIHt7IGFuc3dlci52YWx1ZSB9fVxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gMlwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0yXCI+XG4gICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiAqbmdGb3I9XCJsZXQgYW5zd2VyIG9mIHF1ZXN0aW9uSW5mbz8uYW5zd2VyczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIm9uTXVsdGlTZWxlY3RBbnN3ZXJDaGFuZ2UoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlSW5wdXRcIiBbKG5nTW9kZWwpXT1cImFuc3dlci5pc0NoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9XCI4MCVcIj5cbiAgICAgICAgICAgICAge3sgaSArIDEgfX0gKSB7eyBhbnN3ZXIudmFsdWUgfX1cbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JbmZvPy50eXBlX2lkID09PSAzIHx8IHF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiTmd4RWRpdG9yX19XcmFwcGVyIG1iLTJcIiAqbmdJZj1cIiFkaXNhYmxlSW5wdXRcIj5cbiAgICAgICAgICA8bmd4LWVkaXRvci1tZW51IFtlZGl0b3JdPVwiZWRpdG9yXCI+IDwvbmd4LWVkaXRvci1tZW51PlxuICAgICAgICAgIDxuZ3gtZWRpdG9yXG4gICAgICAgICAgICBbZWRpdG9yXT1cImVkaXRvclwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic3VibWl0dGVkQW5zd2VyXCJcbiAgICAgICAgICA+PC9uZ3gtZWRpdG9yPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImRpc2FibGVJbnB1dFwiIFtpbm5lckh0bWxdPVwic3VibWl0dGVkQW5zd2VyLnZhbHVlXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gNVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCIhZGlzYWJsZUlucHV0XCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5BbnN3ZXI8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cIm51bWJlclwiIHNpemU9XCIxMFwiIFtmb3JtQ29udHJvbF09XCJzdWJtaXR0ZWRBbnN3ZXJcIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZGlzYWJsZUlucHV0XCI+e3sgc3VibWl0dGVkQW5zd2VyLnZhbHVlIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkluZm8/LnR5cGVfaWQgPT09IDZcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiIWRpc2FibGVJbnB1dFwiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBwbGFjZWhvbGRlcj1cIkRhdGVcIiBbZm9ybUNvbnRyb2xdPVwic3VibWl0dGVkQW5zd2VyXCJcbiAgICAgICAgICAgICAgICAgKGZvY3VzKT1cInBpY2tlci5vcGVuKClcIi8+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImRpc2FibGVJbnB1dFwiPnt7IHN1Ym1pdHRlZEFuc3dlci52YWx1ZSB8IGRhdGUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSW5mbz8udHlwZV9pZCA9PT0gN1wiPlxuICAgICAgICA8b2w+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgcXVlc3Rpb25JbmZvPy5hbnN3ZXJzXCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2Pnt7IGFuc3dlcj8udmFsdWUgfX0gLTwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGZ4TGF5b3V0PVwicm93XCIgKGNoYW5nZSk9XCJvbk11bHRpU2VsZWN0WWVzTm9BbnN3ZXJDaGFuZ2UoJGV2ZW50LCBhbnN3ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUlucHV0XCIgW3ZhbHVlXT1cImFuc3dlci5zZWxlY3RlZFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtdC0xIG1sLTIgeWVzLW5vXCIgW3ZhbHVlXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUlucHV0XCI+XG4gICAgICAgICAgICAgICAgICBZZXNcbiAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJtdC0xIG1sLTIgeWVzLW5vXCIgW3ZhbHVlXT1cImZhbHNlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVJbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgTm9cbiAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC9vbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8c3BhbiBjbGFzcz1cImZsZXgtZmlsbFwiPjwvc3Bhbj5cblxuICAgICAgPGFwcC1jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZXMgc3R5bGU9XCJ3aWR0aDogY2FsYygzMy4zMyUpXCIgW3N1Ym1pc3Npb25JZF09XCJzdWJtaXNzaW9uSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uSWRdPVwicXVlc3Rpb25JbmZvPy5pZFwiPjwvYXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlcz5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwiaXNXb3JraW5nXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG4iXX0=