@ieeesa-npm/groups 0.15.14 → 0.15.16

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.
@@ -260,9 +260,47 @@
260
260
  "standardQuestions": ["Name", "Email Address", "Affiliation"],
261
261
  "defaultMembershipTitle": "Default Membership Level",
262
262
  "defaultMembershipDescription": "Select the membership level automatically assigned",
263
+ "noLevelsMessage": "No membership levels are configured for this group type. Please configure membership levels before enabling the interest form.",
263
264
  "membershipLevels": ["Observer", "Voting Member", "Associate Member"],
264
265
  "customQuestionsTitle": "Custom Questions",
265
- "addQuestionLabel": "+ Add Question"
266
+ "addQuestionLabel": "+ Add Question",
267
+ "preview": {
268
+ "heading": "Interest Form Preview",
269
+ "closeAriaLabel": "Close preview",
270
+ "standardInformationHeading": "Standard Information",
271
+ "additionalQuestionsHeading": "Additional Questions",
272
+ "selectPlaceholder": "Select an option",
273
+ "cancelButtonLabel": "Cancel",
274
+ "labels": {
275
+ "name": "Name",
276
+ "email": "Email Address",
277
+ "affiliation": "Affiliation"
278
+ }
279
+ },
280
+ "requiredTag": "Required",
281
+ "newQuestionLabel": "New Question",
282
+ "editQuestionAriaLabel": "Edit question",
283
+ "deleteQuestionAriaLabel": "Delete question",
284
+ "questionEditor": {
285
+ "labelLabel": "Question Label",
286
+ "typeLabel": "Type",
287
+ "requiredLabel": "Required",
288
+ "placeholderLabel": "Placeholder",
289
+ "helpTextLabel": "Help Text",
290
+ "optionsLabel": "Options (one per line)",
291
+ "typeHerePlaceholder": "Type here",
292
+ "selectPlaceholder": "Select from here",
293
+ "cancel": "Cancel",
294
+ "save": "Save",
295
+ "types": {
296
+ "text": "Text Input",
297
+ "textArea": "Text Area",
298
+ "dropdown": "Dropdown",
299
+ "checkbox": "Checkbox",
300
+ "radio": "Radio Button",
301
+ "date": "Date Picker"
302
+ }
303
+ }
266
304
  }
267
305
  },
268
306
  "deleteGroup": {
@@ -510,12 +548,12 @@
510
548
  "2011": "User not found.",
511
549
  "20l2": "First Name is required.",
512
550
  "2013": "Last Name is required.",
513
- "2014": "Representation Organization is required.",
551
+ "2014": "Representing Organization is required.",
514
552
  "2015": "Representing Organization contains invalid characters. Please enter alphanumeric, special characters and whitespace only.",
515
553
  "2016": "Representing Organization must not be greater than 250 characters long.",
516
- "2017": "First Name must not be greater than 100 characters long.",
517
- "2018": "Last Name must not be greater than 100 characters long.",
518
- "2019": "Classification is required.",
554
+ "2017": "Classification is required.",
555
+ "2018": "Member Type is required.",
556
+ "2019": "Representing Organization is required.",
519
557
  "2020": "Classification does not exist.",
520
558
  "2021": "Member Type does not exist.",
521
559
  "2022": "Representation Organization does not exist.",
@@ -0,0 +1,164 @@
1
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ReactiveFormsModule, Validators, } from '@angular/forms';
4
+ import { CHOICE_FIELD_TYPES, QuestionFieldType, } from '../../models/custom-question.model';
5
+ import * as constants from '../../assets/constants.json';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ import * as i2 from "@angular/common";
9
+ /**
10
+ * Editable card for a single custom interest-form question (SP3M-317). Renders
11
+ * the Question Label, Type, Required toggle, Placeholder, Help Text and (for
12
+ * choice types) Options fields. Emits save/cancel so the parent manages the
13
+ * questions list. The Options field is only shown for choice field types
14
+ * (SELECT / CHECKBOX / RADIO), matching the backend's choice-type validation.
15
+ * @export
16
+ * @class CustomQuestionEditorComponent
17
+ */
18
+ export class CustomQuestionEditorComponent {
19
+ // eslint-disable-next-line no-unused-vars
20
+ constructor(formBuilder) {
21
+ this.formBuilder = formBuilder;
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ this.constants = constants;
24
+ this.editorTexts = this.constants?.rosterInterests?.interestForm?.questionEditor;
25
+ this.fieldType = QuestionFieldType;
26
+ this.typeOptions = [
27
+ { value: QuestionFieldType.TEXT, label: this.editorTexts?.types?.text },
28
+ {
29
+ value: QuestionFieldType.TEXTAREA,
30
+ label: this.editorTexts?.types?.textArea,
31
+ },
32
+ {
33
+ value: QuestionFieldType.SELECT,
34
+ label: this.editorTexts?.types?.dropdown,
35
+ },
36
+ {
37
+ value: QuestionFieldType.CHECKBOX,
38
+ label: this.editorTexts?.types?.checkbox,
39
+ },
40
+ { value: QuestionFieldType.RADIO, label: this.editorTexts?.types?.radio },
41
+ { value: QuestionFieldType.DATE, label: this.editorTexts?.types?.date },
42
+ ];
43
+ this.save = new EventEmitter();
44
+ this.cancel = new EventEmitter();
45
+ }
46
+ /**
47
+ * Builds the reactive form, seeding values from the question being edited.
48
+ * The question's options are stored as a raw JSON string, so they are parsed
49
+ * into one-per-line text for editing.
50
+ * @memberof CustomQuestionEditorComponent
51
+ */
52
+ ngOnInit() {
53
+ this.form = this.formBuilder.group({
54
+ label: [this.question?.questionLabel ?? '', [Validators.required]],
55
+ type: [this.question?.fieldType ?? null, [Validators.required]],
56
+ required: [this.question?.isRequired ?? true],
57
+ placeholder: [this.question?.placeholder ?? ''],
58
+ helpText: [this.question?.helpText ?? ''],
59
+ options: [this.parseOptionsString(this.question?.options)],
60
+ });
61
+ }
62
+ /**
63
+ * Parses a stored options JSON string into one-per-line text for the textarea.
64
+ * @param {(string | undefined)} optionsJson
65
+ * @return {string}
66
+ * @memberof CustomQuestionEditorComponent
67
+ */
68
+ parseOptionsString(optionsJson) {
69
+ if (!optionsJson)
70
+ return '';
71
+ // Options may already be a deserialized array (the shared contract allows
72
+ // string[]), so handle that before attempting to JSON.parse a raw string.
73
+ if (Array.isArray(optionsJson))
74
+ return optionsJson.join('\n');
75
+ try {
76
+ const parsed = JSON.parse(optionsJson);
77
+ return Array.isArray(parsed) ? parsed.join('\n') : '';
78
+ }
79
+ catch {
80
+ return '';
81
+ }
82
+ }
83
+ /**
84
+ * Whether the currently selected type requires an options list.
85
+ * @return {boolean}
86
+ * @memberof CustomQuestionEditorComponent
87
+ */
88
+ get isChoiceType() {
89
+ return CHOICE_FIELD_TYPES.includes(this.form?.get('type')?.value);
90
+ }
91
+ /**
92
+ * Parses the options textarea into a trimmed, non-empty string array,
93
+ * stripping trailing commas.
94
+ * @return {string[]}
95
+ * @memberof CustomQuestionEditorComponent
96
+ */
97
+ parseOptions() {
98
+ const raw = (this.form?.get('options')?.value ?? '');
99
+ return raw
100
+ .split('\n')
101
+ .map((option) => option.trim().replace(/,+$/, '').trim())
102
+ .filter((option) => option.length > 0);
103
+ }
104
+ /**
105
+ * Whether the editor is valid: label and type are required, and choice types
106
+ * require at least one option.
107
+ * @return {boolean}
108
+ * @memberof CustomQuestionEditorComponent
109
+ */
110
+ get isSaveDisabled() {
111
+ const label = this.form?.get('label')?.value;
112
+ // Validators.required accepts whitespace-only; onSave trims to '', so block
113
+ // save when the trimmed label is empty.
114
+ if (this.form?.invalid || !label?.trim())
115
+ return true;
116
+ if (this.isChoiceType && this.parseOptions().length === 0)
117
+ return true;
118
+ return false;
119
+ }
120
+ /**
121
+ * Emits the assembled question on save. Options are serialized to a JSON
122
+ * string to match the backend's JSONB column.
123
+ * @memberof CustomQuestionEditorComponent
124
+ */
125
+ onSave() {
126
+ this.form.markAllAsTouched();
127
+ if (this.isSaveDisabled)
128
+ return;
129
+ const value = this.form.getRawValue();
130
+ this.save.emit({
131
+ questionId: this.question?.questionId,
132
+ groupId: this.question?.groupId,
133
+ viewOrder: this.question?.viewOrder,
134
+ questionLabel: value.label?.trim(),
135
+ fieldType: value.type,
136
+ isRequired: value.required,
137
+ placeholder: value.placeholder?.trim(),
138
+ helpText: value.helpText?.trim(),
139
+ options: this.isChoiceType
140
+ ? JSON.stringify(this.parseOptions())
141
+ : undefined,
142
+ });
143
+ }
144
+ /**
145
+ * Emits the cancel event.
146
+ * @memberof CustomQuestionEditorComponent
147
+ */
148
+ onCancel() {
149
+ this.cancel.emit();
150
+ }
151
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomQuestionEditorComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
152
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CustomQuestionEditorComponent, isStandalone: true, selector: "ieeesa-custom-question-editor", inputs: { question: "question" }, outputs: { save: "save", cancel: "cancel" }, ngImport: i0, template: "<form [formGroup]=\"form\" class=\"ieeesa-question-editor\">\r\n <div class=\"ieeesa-question-editor__grid\">\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.labelLabel }}\r\n <span class=\"ieeesa-question-editor__required-mark\">*</span>\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"label\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.labelLabel\"\r\n />\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.typeLabel }}\r\n </label>\r\n <select\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"type\"\r\n [attr.aria-label]=\"editorTexts?.typeLabel\"\r\n >\r\n <option [ngValue]=\"null\" disabled>\r\n {{ editorTexts?.selectPlaceholder }}\r\n </option>\r\n <option\r\n *ngFor=\"let option of typeOptions\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__required-row d-flex align-items-center gap-2\">\r\n <span class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">{{\r\n editorTexts?.requiredLabel\r\n }}</span>\r\n <label class=\"ieeesa-question-editor__switch\">\r\n <input\r\n type=\"checkbox\"\r\n formControlName=\"required\"\r\n [attr.aria-label]=\"editorTexts?.requiredLabel\"\r\n />\r\n <span class=\"ieeesa-question-editor__slider\"></span>\r\n </label>\r\n <span class=\"ieeesa-question-editor__required-hint ieeesa-body-sm-14\">{{\r\n editorTexts?.requiredLabel\r\n }}</span>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__grid\">\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.placeholderLabel }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"placeholder\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.placeholderLabel\"\r\n />\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.helpTextLabel }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"helpText\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.helpTextLabel\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isChoiceType\" class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.optionsLabel }}\r\n </label>\r\n <textarea\r\n class=\"ieeesa-question-editor__textarea ieeesa-body-sm-14\"\r\n formControlName=\"options\"\r\n rows=\"5\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.optionsLabel\"\r\n ></textarea>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__actions d-flex gap-3\">\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-question-editor__cancel\"\r\n (click)=\"onCancel()\"\r\n [attr.aria-label]=\"editorTexts?.cancel\"\r\n >\r\n {{ editorTexts?.cancel }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-question-editor__save\"\r\n [disabled]=\"isSaveDisabled\"\r\n (click)=\"onSave()\"\r\n [attr.aria-label]=\"editorTexts?.save\"\r\n >\r\n {{ editorTexts?.save }}\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-question-editor__grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.ieeesa-question-editor__field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.ieeesa-question-editor__label{font-weight:600;color:#1c1d1e}.ieeesa-question-editor__required-mark{color:#b3261e}.ieeesa-question-editor__input,.ieeesa-question-editor__textarea{width:100%;padding:10px 12px;border:1px solid #d7d6d6;border-radius:4px;background:#fff;color:#1c1d1e}.ieeesa-question-editor__input:focus,.ieeesa-question-editor__textarea:focus{outline:none;border-color:#00629b}.ieeesa-question-editor__textarea{resize:vertical}.ieeesa-question-editor__required-row{margin-bottom:16px}.ieeesa-question-editor__required-hint{color:#777a7e}.ieeesa-question-editor__switch{position:relative;display:inline-block;width:40px;height:20px}.ieeesa-question-editor__switch input{opacity:0;width:0;height:0}.ieeesa-question-editor__switch input:checked+.ieeesa-question-editor__slider{background-color:#00629b}.ieeesa-question-editor__switch input:checked+.ieeesa-question-editor__slider:before{transform:translate(20px)}.ieeesa-question-editor__slider{position:absolute;inset:0;cursor:pointer;background-color:#a7a8aa;border-radius:20px;transition:background-color .2s}.ieeesa-question-editor__slider:before{content:\"\";position:absolute;height:16px;width:16px;left:2px;bottom:2px;background-color:#fff;border-radius:50%;transition:transform .2s}.ieeesa-question-editor__actions{margin-top:8px}.ieeesa-question-editor__cancel{background:none;border:1px solid #00629b;color:#00629b;font-weight:600;border-radius:4px;padding:8px 20px;cursor:pointer}.ieeesa-question-editor__save{background-color:#00629b;color:#fff;border:none;border-radius:4px;padding:8px 20px;cursor:pointer}.ieeesa-question-editor__save:disabled{background-color:#c0c7cd;color:#fff;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
153
+ }
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CustomQuestionEditorComponent, decorators: [{
155
+ type: Component,
156
+ args: [{ selector: 'ieeesa-custom-question-editor', standalone: true, imports: [CommonModule, ReactiveFormsModule], encapsulation: ViewEncapsulation.None, template: "<form [formGroup]=\"form\" class=\"ieeesa-question-editor\">\r\n <div class=\"ieeesa-question-editor__grid\">\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.labelLabel }}\r\n <span class=\"ieeesa-question-editor__required-mark\">*</span>\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"label\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.labelLabel\"\r\n />\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.typeLabel }}\r\n </label>\r\n <select\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"type\"\r\n [attr.aria-label]=\"editorTexts?.typeLabel\"\r\n >\r\n <option [ngValue]=\"null\" disabled>\r\n {{ editorTexts?.selectPlaceholder }}\r\n </option>\r\n <option\r\n *ngFor=\"let option of typeOptions\"\r\n [ngValue]=\"option.value\"\r\n >\r\n {{ option.label }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__required-row d-flex align-items-center gap-2\">\r\n <span class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">{{\r\n editorTexts?.requiredLabel\r\n }}</span>\r\n <label class=\"ieeesa-question-editor__switch\">\r\n <input\r\n type=\"checkbox\"\r\n formControlName=\"required\"\r\n [attr.aria-label]=\"editorTexts?.requiredLabel\"\r\n />\r\n <span class=\"ieeesa-question-editor__slider\"></span>\r\n </label>\r\n <span class=\"ieeesa-question-editor__required-hint ieeesa-body-sm-14\">{{\r\n editorTexts?.requiredLabel\r\n }}</span>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__grid\">\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.placeholderLabel }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"placeholder\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.placeholderLabel\"\r\n />\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.helpTextLabel }}\r\n </label>\r\n <input\r\n type=\"text\"\r\n class=\"ieeesa-question-editor__input ieeesa-body-sm-14\"\r\n formControlName=\"helpText\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.helpTextLabel\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isChoiceType\" class=\"ieeesa-question-editor__field\">\r\n <label class=\"ieeesa-question-editor__label ieeesa-body-sm-14\">\r\n {{ editorTexts?.optionsLabel }}\r\n </label>\r\n <textarea\r\n class=\"ieeesa-question-editor__textarea ieeesa-body-sm-14\"\r\n formControlName=\"options\"\r\n rows=\"5\"\r\n [attr.placeholder]=\"editorTexts?.typeHerePlaceholder\"\r\n [attr.aria-label]=\"editorTexts?.optionsLabel\"\r\n ></textarea>\r\n </div>\r\n\r\n <div class=\"ieeesa-question-editor__actions d-flex gap-3\">\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-question-editor__cancel\"\r\n (click)=\"onCancel()\"\r\n [attr.aria-label]=\"editorTexts?.cancel\"\r\n >\r\n {{ editorTexts?.cancel }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"ieeesa-question-editor__save\"\r\n [disabled]=\"isSaveDisabled\"\r\n (click)=\"onSave()\"\r\n [attr.aria-label]=\"editorTexts?.save\"\r\n >\r\n {{ editorTexts?.save }}\r\n </button>\r\n </div>\r\n</form>\r\n", styles: [".ieeesa-subtitle{text-align:left;font-family:Calibri Regular;font-size:1.5625rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-body{text-align:left;font-family:Calibri Regular;font-size:1.25rem;letter-spacing:0;color:#000;opacity:1}.ieeesa-display-lg-57{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:3.5625rem;line-height:64px;color:#000;letter-spacing:0}.ieeesa-display-md-45{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.813rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-md-47{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.9375rem;line-height:52px;color:#000;letter-spacing:0}.ieeesa-display-sm-38{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.375rem;line-height:44px;color:#000;letter-spacing:0}.ieeesa-headline-lg-32{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-lg-34{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:2.125rem;line-height:40px;color:#000;letter-spacing:0}.ieeesa-headline-md-30{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.875rem;line-height:36px;color:#000;letter-spacing:0}.ieeesa-headline-sm-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:32px;color:#00629b;letter-spacing:0}.ieeesa-headline-sm-26{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.625rem;line-height:32px;color:#000;letter-spacing:0}.ieeesa-title-lg-bold-24{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-lg-24{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.5rem;line-height:28px;color:#000;letter-spacing:0}.ieeesa-title-md-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.009375em}.ieeesa-title-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-title-sm-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-label-lg-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.ieeesa-btn-label-lg-bold-16{font-family:Calibri Regular;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#00629b;letter-spacing:.00625em}.ieeesa-label-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-label-sm-13{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.8125rem;line-height:16px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-16{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-bold-18{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-lg-18{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1.125rem;line-height:24px;color:#000;letter-spacing:.03125em}.ieeesa-body-md-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:20px;color:#1c1b1f;letter-spacing:.015625em}.ieeesa-body-md-16{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:20px;color:#000;letter-spacing:.015625em}.ieeesa-body-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-sm-12{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.75rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-body-color-sm-14{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:.875rem;line-height:18px;color:#49454f;letter-spacing:.025em}.ieeesa-body-sm-bold-14{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:.875rem;line-height:16px;color:#000;letter-spacing:.025em}.ieeesa-title-inter-lg-bold-24{font-family:Inter Bold;font-style:normal;font-weight:700;font-size:1.5rem;line-height:29px;color:#000;letter-spacing:0}.mat-mdc-button.mat-mdc-button-base.mat-primary-button,.mat-mdc-button.mat-mdc-button-base.mat-secondary-button,.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button,.mat-mdc-button.mat-mdc-button-base.mat-text-button{min-width:103px;width:auto;min-height:40px;height:auto;border-radius:3px;text-align:center;padding:.625em 1.5em;border:none;font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#000;letter-spacing:.00625em}.mat-mdc-button.mat-mdc-button-base>.mat-icon{margin-right:11px}.mat-mdc-button.mat-mdc-button-base.mat-primary-button{background-color:#00629b;color:#fff}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:focus{background:#1f75a7}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:hover{background-color:#003e65}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:active{background-color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-primary-button:disabled{background-color:#1c1b1f1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button{color:#fff;background:#a7a8aa;box-shadow:0 1px 2px #0000004d,0 2px 6px 2px #00000026}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:hover{background:#a7a8aa}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:focus{background:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:active{background:#1d192b1f}.mat-mdc-button.mat-mdc-button-base.mat-secondary-button:disabled{background:#1c1b1f1f;color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button{background-color:#fff;border:1px solid #00629b;color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:hover{background-color:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:focus{background-color:#f0f5f9}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:active{background:#6750a41f}.mat-mdc-button.mat-mdc-button-base.mat-tertiary-button:disabled{border:1px solid rgba(28,27,31,.12);color:#1c1b1f;opacity:.38}.mat-mdc-button.mat-mdc-button-base.mat-text-button{color:#00629b}.mat-mdc-button.mat-mdc-button-base.mat-text-button:hover,.mat-mdc-button.mat-mdc-button-base.mat-text-button:active{background:#6750a414}.mat-mdc-button.mat-mdc-button-base.mat-text-button:disabled{color:#1c1b1f;opacity:.38}.ieeesa-text-button{color:#cac4d0;background:none;border:none}.ieeesa-view-more-or-less-button{border:none;background:none;text-decoration:underline;color:#00629b}.flex-align-center{display:flex;align-items:center;justify-content:center}.mat-button-toggle-checked{background-color:#a7a8aa}.mat-button-toggle-checked .mat-button-toggle-label-content:before{font-family:\"Font Awesome 5 Free\";font-weight:900;content:\"\\f00c\";padding-right:.5625em}.mat-button-toggle-group .mat-button-toggle-label-content{font-family:Calibri Bold;font-style:normal;font-weight:700;font-size:1rem;line-height:20px;color:#1c1b1f;letter-spacing:.00625em}.no-bg-color-btn{color:#00629b;border-radius:3px;border:1px solid #00629b;min-height:40px;height:auto}@media (max-width: 768px){.mat-button-toggle-group .mat-button-toggle-label-content{max-width:8ch;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;position:relative}}.cdk-overlay-pane .mat-mdc-tooltip .mdc-tooltip__surface{color:#525252;padding:6px 12px;font-family:Calibri Regular;font-size:1rem;border:1px solid #cac4d0;background:#fff;box-shadow:0 4px 8px #00000040;max-width:unset!important}.cdk-overlay-pane .mat-mdc-option .mdc-list-item__primary-text{font-family:Calibri Regular!important}.cdk-overlay-pane.ieeesa-modal-confirm-dialog,.cdk-overlay-pane.ieeesa-modal-dialog,.cdk-overlay-pane.ieeesa-alert-dialog{width:100%;min-width:312px}.mat-mdc-form-field{font-family:Calibri Regular;font-style:normal;font-weight:400;font-size:1rem;line-height:24px;color:#49454f;letter-spacing:.03125em}.ieeesa-cancel-modal-confirm-dialog{width:25vw!important}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation{padding:1.5em 1.5em 1em}.ieeesa-cancel-modal-confirm-dialog .ieeesa-confirmation .mat-mdc-dialog-content{text-align:center;padding:0 0 1em!important}.mat-mdc-button,.mat-mdc-outlined-button{--mat-mdc-button-persistent-ripple-color: unset}@media (max-width: 768px){.ieeesa-cancel-modal-confirm-dialog{width:90vw!important}}.ieeesa-wrapper-border{border:1px solid #b2b7be;border-top:none;padding:1.5em;border-radius:0 0 4px 4px}.ieeesa-question-editor__grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}.ieeesa-question-editor__field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.ieeesa-question-editor__label{font-weight:600;color:#1c1d1e}.ieeesa-question-editor__required-mark{color:#b3261e}.ieeesa-question-editor__input,.ieeesa-question-editor__textarea{width:100%;padding:10px 12px;border:1px solid #d7d6d6;border-radius:4px;background:#fff;color:#1c1d1e}.ieeesa-question-editor__input:focus,.ieeesa-question-editor__textarea:focus{outline:none;border-color:#00629b}.ieeesa-question-editor__textarea{resize:vertical}.ieeesa-question-editor__required-row{margin-bottom:16px}.ieeesa-question-editor__required-hint{color:#777a7e}.ieeesa-question-editor__switch{position:relative;display:inline-block;width:40px;height:20px}.ieeesa-question-editor__switch input{opacity:0;width:0;height:0}.ieeesa-question-editor__switch input:checked+.ieeesa-question-editor__slider{background-color:#00629b}.ieeesa-question-editor__switch input:checked+.ieeesa-question-editor__slider:before{transform:translate(20px)}.ieeesa-question-editor__slider{position:absolute;inset:0;cursor:pointer;background-color:#a7a8aa;border-radius:20px;transition:background-color .2s}.ieeesa-question-editor__slider:before{content:\"\";position:absolute;height:16px;width:16px;left:2px;bottom:2px;background-color:#fff;border-radius:50%;transition:transform .2s}.ieeesa-question-editor__actions{margin-top:8px}.ieeesa-question-editor__cancel{background:none;border:1px solid #00629b;color:#00629b;font-weight:600;border-radius:4px;padding:8px 20px;cursor:pointer}.ieeesa-question-editor__save{background-color:#00629b;color:#fff;border:none;border-radius:4px;padding:8px 20px;cursor:pointer}.ieeesa-question-editor__save:disabled{background-color:#c0c7cd;color:#fff;cursor:not-allowed}\n"] }]
157
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { question: [{
158
+ type: Input
159
+ }], save: [{
160
+ type: Output
161
+ }], cancel: [{
162
+ type: Output
163
+ }] } });
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXF1ZXN0aW9uLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1xdWVzdGlvbi1lZGl0b3IvY3VzdG9tLXF1ZXN0aW9uLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1xdWVzdGlvbi1lZGl0b3IvY3VzdG9tLXF1ZXN0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUdMLG1CQUFtQixFQUNuQixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsa0JBQWtCLEVBRWxCLGlCQUFpQixHQUNsQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sS0FBSyxTQUFTLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFFekQ7Ozs7Ozs7O0dBUUc7QUFTSCxNQUFNLE9BQU8sNkJBQTZCO0lBNkJ4QywwQ0FBMEM7SUFDMUMsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUE3QjVDLDhEQUE4RDtRQUM5RCxjQUFTLEdBQVEsU0FBUyxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGNBQWMsQ0FBQztRQUM1RSxjQUFTLEdBQUcsaUJBQWlCLENBQUM7UUFDOUIsZ0JBQVcsR0FBRztZQUNaLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ3ZFO2dCQUNFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO2dCQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUTthQUN6QztZQUNEO2dCQUNFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO2dCQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUTthQUN6QztZQUNEO2dCQUNFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO2dCQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUTthQUN6QztZQUNELEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ3pFLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1NBQ3hFLENBQUM7UUFHUSxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDMUMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFLRyxDQUFDO0lBRWhEOzs7OztPQUtHO0lBQ0gsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvRCxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUM7WUFDN0MsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO1lBQy9DLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMzRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxrQkFBa0IsQ0FBQyxXQUEwQztRQUMzRCxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVCLDBFQUEwRTtRQUMxRSwwRUFBMEU7UUFDMUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxJQUFJO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUN2RDtRQUFDLE1BQU07WUFDTixPQUFPLEVBQUUsQ0FBQztTQUNYO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLFlBQVk7UUFDZCxPQUFPLGtCQUFrQixDQUFDLFFBQVEsQ0FDaEMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBMEIsQ0FDbkQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVk7UUFDVixNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQVcsQ0FBQztRQUMvRCxPQUFPLEdBQUc7YUFDUCxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQ1gsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN4RCxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxjQUFjO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQWUsQ0FBQztRQUN2RCw0RUFBNEU7UUFDNUUsd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3ZFLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDYixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVO1lBQ3JDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU87WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUztZQUNuQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDbEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLFVBQVUsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUMxQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUU7WUFDdEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDeEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNyQyxDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDOytHQTFJVSw2QkFBNkI7bUdBQTdCLDZCQUE2Qix3S0N2QzFDLHduSUFvSEEsMm5WRGxGWSxZQUFZLCtQQUFFLG1CQUFtQjs7NEZBS2hDLDZCQUE2QjtrQkFSekMsU0FBUzsrQkFDRSwrQkFBK0IsY0FDN0IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLGlCQUc3QixpQkFBaUIsQ0FBQyxJQUFJO2tHQXlCNUIsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgQ0hPSUNFX0ZJRUxEX1RZUEVTLFxyXG4gIEN1c3RvbVF1ZXN0aW9uLFxyXG4gIFF1ZXN0aW9uRmllbGRUeXBlLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9jdXN0b20tcXVlc3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgKiBhcyBjb25zdGFudHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuXHJcbi8qKlxyXG4gKiBFZGl0YWJsZSBjYXJkIGZvciBhIHNpbmdsZSBjdXN0b20gaW50ZXJlc3QtZm9ybSBxdWVzdGlvbiAoU1AzTS0zMTcpLiBSZW5kZXJzXHJcbiAqIHRoZSBRdWVzdGlvbiBMYWJlbCwgVHlwZSwgUmVxdWlyZWQgdG9nZ2xlLCBQbGFjZWhvbGRlciwgSGVscCBUZXh0IGFuZCAoZm9yXHJcbiAqIGNob2ljZSB0eXBlcykgT3B0aW9ucyBmaWVsZHMuIEVtaXRzIHNhdmUvY2FuY2VsIHNvIHRoZSBwYXJlbnQgbWFuYWdlcyB0aGVcclxuICogcXVlc3Rpb25zIGxpc3QuIFRoZSBPcHRpb25zIGZpZWxkIGlzIG9ubHkgc2hvd24gZm9yIGNob2ljZSBmaWVsZCB0eXBlc1xyXG4gKiAoU0VMRUNUIC8gQ0hFQ0tCT1ggLyBSQURJTyksIG1hdGNoaW5nIHRoZSBiYWNrZW5kJ3MgY2hvaWNlLXR5cGUgdmFsaWRhdGlvbi5cclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgQ3VzdG9tUXVlc3Rpb25FZGl0b3JDb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLWN1c3RvbS1xdWVzdGlvbi1lZGl0b3InLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1xdWVzdGlvbi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1xdWVzdGlvbi1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tUXVlc3Rpb25FZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29uc3RhbnRzOiBhbnkgPSBjb25zdGFudHM7XHJcbiAgZWRpdG9yVGV4dHMgPSB0aGlzLmNvbnN0YW50cz8ucm9zdGVySW50ZXJlc3RzPy5pbnRlcmVzdEZvcm0/LnF1ZXN0aW9uRWRpdG9yO1xyXG4gIGZpZWxkVHlwZSA9IFF1ZXN0aW9uRmllbGRUeXBlO1xyXG4gIHR5cGVPcHRpb25zID0gW1xyXG4gICAgeyB2YWx1ZTogUXVlc3Rpb25GaWVsZFR5cGUuVEVYVCwgbGFiZWw6IHRoaXMuZWRpdG9yVGV4dHM/LnR5cGVzPy50ZXh0IH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiBRdWVzdGlvbkZpZWxkVHlwZS5URVhUQVJFQSxcclxuICAgICAgbGFiZWw6IHRoaXMuZWRpdG9yVGV4dHM/LnR5cGVzPy50ZXh0QXJlYSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHZhbHVlOiBRdWVzdGlvbkZpZWxkVHlwZS5TRUxFQ1QsXHJcbiAgICAgIGxhYmVsOiB0aGlzLmVkaXRvclRleHRzPy50eXBlcz8uZHJvcGRvd24sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB2YWx1ZTogUXVlc3Rpb25GaWVsZFR5cGUuQ0hFQ0tCT1gsXHJcbiAgICAgIGxhYmVsOiB0aGlzLmVkaXRvclRleHRzPy50eXBlcz8uY2hlY2tib3gsXHJcbiAgICB9LFxyXG4gICAgeyB2YWx1ZTogUXVlc3Rpb25GaWVsZFR5cGUuUkFESU8sIGxhYmVsOiB0aGlzLmVkaXRvclRleHRzPy50eXBlcz8ucmFkaW8gfSxcclxuICAgIHsgdmFsdWU6IFF1ZXN0aW9uRmllbGRUeXBlLkRBVEUsIGxhYmVsOiB0aGlzLmVkaXRvclRleHRzPy50eXBlcz8uZGF0ZSB9LFxyXG4gIF07XHJcblxyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uITogQ3VzdG9tUXVlc3Rpb247XHJcbiAgQE91dHB1dCgpIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPEN1c3RvbVF1ZXN0aW9uPigpO1xyXG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIGZvcm0hOiBGb3JtR3JvdXA7XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBCdWlsZHMgdGhlIHJlYWN0aXZlIGZvcm0sIHNlZWRpbmcgdmFsdWVzIGZyb20gdGhlIHF1ZXN0aW9uIGJlaW5nIGVkaXRlZC5cclxuICAgKiBUaGUgcXVlc3Rpb24ncyBvcHRpb25zIGFyZSBzdG9yZWQgYXMgYSByYXcgSlNPTiBzdHJpbmcsIHNvIHRoZXkgYXJlIHBhcnNlZFxyXG4gICAqIGludG8gb25lLXBlci1saW5lIHRleHQgZm9yIGVkaXRpbmcuXHJcbiAgICogQG1lbWJlcm9mIEN1c3RvbVF1ZXN0aW9uRWRpdG9yQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgbGFiZWw6IFt0aGlzLnF1ZXN0aW9uPy5xdWVzdGlvbkxhYmVsID8/ICcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICB0eXBlOiBbdGhpcy5xdWVzdGlvbj8uZmllbGRUeXBlID8/IG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHJlcXVpcmVkOiBbdGhpcy5xdWVzdGlvbj8uaXNSZXF1aXJlZCA/PyB0cnVlXSxcclxuICAgICAgcGxhY2Vob2xkZXI6IFt0aGlzLnF1ZXN0aW9uPy5wbGFjZWhvbGRlciA/PyAnJ10sXHJcbiAgICAgIGhlbHBUZXh0OiBbdGhpcy5xdWVzdGlvbj8uaGVscFRleHQgPz8gJyddLFxyXG4gICAgICBvcHRpb25zOiBbdGhpcy5wYXJzZU9wdGlvbnNTdHJpbmcodGhpcy5xdWVzdGlvbj8ub3B0aW9ucyldLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZXMgYSBzdG9yZWQgb3B0aW9ucyBKU09OIHN0cmluZyBpbnRvIG9uZS1wZXItbGluZSB0ZXh0IGZvciB0aGUgdGV4dGFyZWEuXHJcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgdW5kZWZpbmVkKX0gb3B0aW9uc0pzb25cclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICogQG1lbWJlcm9mIEN1c3RvbVF1ZXN0aW9uRWRpdG9yQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcGFyc2VPcHRpb25zU3RyaW5nKG9wdGlvbnNKc29uOiBzdHJpbmdbXSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIW9wdGlvbnNKc29uKSByZXR1cm4gJyc7XHJcbiAgICAvLyBPcHRpb25zIG1heSBhbHJlYWR5IGJlIGEgZGVzZXJpYWxpemVkIGFycmF5ICh0aGUgc2hhcmVkIGNvbnRyYWN0IGFsbG93c1xyXG4gICAgLy8gc3RyaW5nW10pLCBzbyBoYW5kbGUgdGhhdCBiZWZvcmUgYXR0ZW1wdGluZyB0byBKU09OLnBhcnNlIGEgcmF3IHN0cmluZy5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnNKc29uKSkgcmV0dXJuIG9wdGlvbnNKc29uLmpvaW4oJ1xcbicpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShvcHRpb25zSnNvbik7XHJcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhcnNlZCkgPyBwYXJzZWQuam9pbignXFxuJykgOiAnJztcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdHlwZSByZXF1aXJlcyBhbiBvcHRpb25zIGxpc3QuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgQ3VzdG9tUXVlc3Rpb25FZGl0b3JDb21wb25lbnRcclxuICAgKi9cclxuICBnZXQgaXNDaG9pY2VUeXBlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIENIT0lDRV9GSUVMRF9UWVBFUy5pbmNsdWRlcyhcclxuICAgICAgdGhpcy5mb3JtPy5nZXQoJ3R5cGUnKT8udmFsdWUgYXMgUXVlc3Rpb25GaWVsZFR5cGVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZXMgdGhlIG9wdGlvbnMgdGV4dGFyZWEgaW50byBhIHRyaW1tZWQsIG5vbi1lbXB0eSBzdHJpbmcgYXJyYXksXHJcbiAgICogc3RyaXBwaW5nIHRyYWlsaW5nIGNvbW1hcy5cclxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cclxuICAgKiBAbWVtYmVyb2YgQ3VzdG9tUXVlc3Rpb25FZGl0b3JDb21wb25lbnRcclxuICAgKi9cclxuICBwYXJzZU9wdGlvbnMoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgcmF3ID0gKHRoaXMuZm9ybT8uZ2V0KCdvcHRpb25zJyk/LnZhbHVlID8/ICcnKSBhcyBzdHJpbmc7XHJcbiAgICByZXR1cm4gcmF3XHJcbiAgICAgIC5zcGxpdCgnXFxuJylcclxuICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udHJpbSgpLnJlcGxhY2UoLywrJC8sICcnKS50cmltKCkpXHJcbiAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmxlbmd0aCA+IDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgZWRpdG9yIGlzIHZhbGlkOiBsYWJlbCBhbmQgdHlwZSBhcmUgcmVxdWlyZWQsIGFuZCBjaG9pY2UgdHlwZXNcclxuICAgKiByZXF1aXJlIGF0IGxlYXN0IG9uZSBvcHRpb24uXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgQ3VzdG9tUXVlc3Rpb25FZGl0b3JDb21wb25lbnRcclxuICAgKi9cclxuICBnZXQgaXNTYXZlRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuZm9ybT8uZ2V0KCdsYWJlbCcpPy52YWx1ZSBhcyBzdHJpbmc7XHJcbiAgICAvLyBWYWxpZGF0b3JzLnJlcXVpcmVkIGFjY2VwdHMgd2hpdGVzcGFjZS1vbmx5OyBvblNhdmUgdHJpbXMgdG8gJycsIHNvIGJsb2NrXHJcbiAgICAvLyBzYXZlIHdoZW4gdGhlIHRyaW1tZWQgbGFiZWwgaXMgZW1wdHkuXHJcbiAgICBpZiAodGhpcy5mb3JtPy5pbnZhbGlkIHx8ICFsYWJlbD8udHJpbSgpKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmlzQ2hvaWNlVHlwZSAmJiB0aGlzLnBhcnNlT3B0aW9ucygpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgYXNzZW1ibGVkIHF1ZXN0aW9uIG9uIHNhdmUuIE9wdGlvbnMgYXJlIHNlcmlhbGl6ZWQgdG8gYSBKU09OXHJcbiAgICogc3RyaW5nIHRvIG1hdGNoIHRoZSBiYWNrZW5kJ3MgSlNPTkIgY29sdW1uLlxyXG4gICAqIEBtZW1iZXJvZiBDdXN0b21RdWVzdGlvbkVkaXRvckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uU2F2ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBpZiAodGhpcy5pc1NhdmVEaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcclxuICAgIHRoaXMuc2F2ZS5lbWl0KHtcclxuICAgICAgcXVlc3Rpb25JZDogdGhpcy5xdWVzdGlvbj8ucXVlc3Rpb25JZCxcclxuICAgICAgZ3JvdXBJZDogdGhpcy5xdWVzdGlvbj8uZ3JvdXBJZCxcclxuICAgICAgdmlld09yZGVyOiB0aGlzLnF1ZXN0aW9uPy52aWV3T3JkZXIsXHJcbiAgICAgIHF1ZXN0aW9uTGFiZWw6IHZhbHVlLmxhYmVsPy50cmltKCksXHJcbiAgICAgIGZpZWxkVHlwZTogdmFsdWUudHlwZSxcclxuICAgICAgaXNSZXF1aXJlZDogdmFsdWUucmVxdWlyZWQsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiB2YWx1ZS5wbGFjZWhvbGRlcj8udHJpbSgpLFxyXG4gICAgICBoZWxwVGV4dDogdmFsdWUuaGVscFRleHQ/LnRyaW0oKSxcclxuICAgICAgb3B0aW9uczogdGhpcy5pc0Nob2ljZVR5cGVcclxuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHRoaXMucGFyc2VPcHRpb25zKCkpXHJcbiAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIHRoZSBjYW5jZWwgZXZlbnQuXHJcbiAgICogQG1lbWJlcm9mIEN1c3RvbVF1ZXN0aW9uRWRpdG9yQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19ncmlkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fZmllbGRcIj5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fbGFiZWwgaWVlZXNhLWJvZHktc20tMTRcIj5cclxuICAgICAgICB7eyBlZGl0b3JUZXh0cz8ubGFiZWxMYWJlbCB9fVxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fcmVxdWlyZWQtbWFya1wiPio8L3NwYW4+XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2lucHV0IGllZWVzYS1ib2R5LXNtLTE0XCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYWJlbFwiXHJcbiAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZWRpdG9yVGV4dHM/LnR5cGVIZXJlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZWRpdG9yVGV4dHM/LmxhYmVsTGFiZWxcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2ZpZWxkXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2xhYmVsIGllZWVzYS1ib2R5LXNtLTE0XCI+XHJcbiAgICAgICAge3sgZWRpdG9yVGV4dHM/LnR5cGVMYWJlbCB9fVxyXG4gICAgICA8L2xhYmVsPlxyXG4gICAgICA8c2VsZWN0XHJcbiAgICAgICAgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19pbnB1dCBpZWVlc2EtYm9keS1zbS0xNFwiXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJlZGl0b3JUZXh0cz8udHlwZUxhYmVsXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwibnVsbFwiIGRpc2FibGVkPlxyXG4gICAgICAgICAge3sgZWRpdG9yVGV4dHM/LnNlbGVjdFBsYWNlaG9sZGVyIH19XHJcbiAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB0eXBlT3B0aW9uc1wiXHJcbiAgICAgICAgICBbbmdWYWx1ZV09XCJvcHRpb24udmFsdWVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fcmVxdWlyZWQtcm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fbGFiZWwgaWVlZXNhLWJvZHktc20tMTRcIj57e1xyXG4gICAgICBlZGl0b3JUZXh0cz8ucmVxdWlyZWRMYWJlbFxyXG4gICAgfX08L3NwYW4+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19zd2l0Y2hcIj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJlZGl0b3JUZXh0cz8ucmVxdWlyZWRMYWJlbFwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fc2xpZGVyXCI+PC9zcGFuPlxyXG4gICAgPC9sYWJlbD5cclxuICAgIDxzcGFuIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fcmVxdWlyZWQtaGludCBpZWVlc2EtYm9keS1zbS0xNFwiPnt7XHJcbiAgICAgIGVkaXRvclRleHRzPy5yZXF1aXJlZExhYmVsXHJcbiAgICB9fTwvc3Bhbj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2dyaWRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19maWVsZFwiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX19sYWJlbCBpZWVlc2EtYm9keS1zbS0xNFwiPlxyXG4gICAgICAgIHt7IGVkaXRvclRleHRzPy5wbGFjZWhvbGRlckxhYmVsIH19XHJcbiAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2lucHV0IGllZWVzYS1ib2R5LXNtLTE0XCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZWRpdG9yVGV4dHM/LnR5cGVIZXJlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZWRpdG9yVGV4dHM/LnBsYWNlaG9sZGVyTGFiZWxcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2ZpZWxkXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2xhYmVsIGllZWVzYS1ib2R5LXNtLTE0XCI+XHJcbiAgICAgICAge3sgZWRpdG9yVGV4dHM/LmhlbHBUZXh0TGFiZWwgfX1cclxuICAgICAgPC9sYWJlbD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9faW5wdXQgaWVlZXNhLWJvZHktc20tMTRcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImhlbHBUZXh0XCJcclxuICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlZGl0b3JUZXh0cz8udHlwZUhlcmVQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJlZGl0b3JUZXh0cz8uaGVscFRleHRMYWJlbFwiXHJcbiAgICAgIC8+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImlzQ2hvaWNlVHlwZVwiIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fZmllbGRcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cImllZWVzYS1xdWVzdGlvbi1lZGl0b3JfX2xhYmVsIGllZWVzYS1ib2R5LXNtLTE0XCI+XHJcbiAgICAgIHt7IGVkaXRvclRleHRzPy5vcHRpb25zTGFiZWwgfX1cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8dGV4dGFyZWFcclxuICAgICAgY2xhc3M9XCJpZWVlc2EtcXVlc3Rpb24tZWRpdG9yX190ZXh0YXJlYSBpZWVlc2EtYm9keS1zbS0xNFwiXHJcbiAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9wdGlvbnNcIlxyXG4gICAgICByb3dzPVwiNVwiXHJcbiAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cImVkaXRvclRleHRzPy50eXBlSGVyZVBsYWNlaG9sZGVyXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJlZGl0b3JUZXh0cz8ub3B0aW9uc0xhYmVsXCJcclxuICAgID48L3RleHRhcmVhPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fYWN0aW9ucyBkLWZsZXggZ2FwLTNcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fY2FuY2VsXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImVkaXRvclRleHRzPy5jYW5jZWxcIlxyXG4gICAgPlxyXG4gICAgICB7eyBlZGl0b3JUZXh0cz8uY2FuY2VsIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGNsYXNzPVwiaWVlZXNhLXF1ZXN0aW9uLWVkaXRvcl9fc2F2ZVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1NhdmVEaXNhYmxlZFwiXHJcbiAgICAgIChjbGljayk9XCJvblNhdmUoKVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZWRpdG9yVGV4dHM/LnNhdmVcIlxyXG4gICAgPlxyXG4gICAgICB7eyBlZGl0b3JUZXh0cz8uc2F2ZSB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuIl19