@cqa-lib/cqa-ui 1.1.258 → 1.1.260

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/esm2020/lib/detail-side-panel/detail-side-panel.component.mjs +7 -3
  2. package/esm2020/lib/step-builder/advanced-variables-form/advanced-variables-form.component.mjs +107 -5
  3. package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +144 -18
  4. package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +176 -6
  5. package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +102 -7
  6. package/esm2020/lib/step-builder/step-builder-document/step-builder-document.component.mjs +113 -7
  7. package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +7 -3
  8. package/esm2020/lib/step-builder/template-variables-form/template-variables-form.component.mjs +3 -3
  9. package/esm2020/lib/test-case-details/element-list/element-list.component.mjs +3 -3
  10. package/esm2020/lib/test-case-details/element-popup/element-form/element-form.component.mjs +3 -3
  11. package/esm2020/lib/test-case-details/element-popup/element-popup.component.mjs +6 -5
  12. package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +7 -1
  13. package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +88 -13
  14. package/esm2020/lib/test-case-details/test-case-details.component.mjs +16 -3
  15. package/esm2020/lib/test-case-details/test-case-details.models.mjs +20 -10
  16. package/fesm2015/cqa-lib-cqa-ui.mjs +863 -141
  17. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  18. package/fesm2020/cqa-lib-cqa-ui.mjs +822 -121
  19. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  20. package/lib/detail-side-panel/detail-side-panel.component.d.ts +3 -1
  21. package/lib/step-builder/advanced-variables-form/advanced-variables-form.component.d.ts +43 -2
  22. package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +8 -1
  23. package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +14 -1
  24. package/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.d.ts +12 -2
  25. package/lib/step-builder/step-builder-document/step-builder-document.component.d.ts +15 -1
  26. package/lib/step-builder/step-builder-loop/step-builder-loop.component.d.ts +3 -1
  27. package/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.d.ts +5 -1
  28. package/lib/test-case-details/test-case-details.component.d.ts +7 -1
  29. package/lib/test-case-details/test-case-details.models.d.ts +2 -0
  30. package/package.json +1 -1
  31. package/styles.css +1 -1
@@ -32,8 +32,12 @@ export class TestCaseDetailsComponent {
32
32
  this.configSectionsRow2 = [];
33
33
  /** Platform: 'web' or 'mobile'. Defaults to 'web'. Used for Device Settings fields. */
34
34
  this.platform = 'web';
35
+ /** When true, filters out Priority and Type from metadata (step groups don't have these). Defaults to false. */
36
+ this.isStepGroup = false;
35
37
  /** Override config per select for API-driven options, server search, load more. */
36
38
  this.selectConfigOverrides = {};
39
+ /** Labels to filter out from metadata for step groups */
40
+ this.stepGroupExcludedMetadataLabels = ['priority', 'type'];
37
41
  this.editDescription = new EventEmitter();
38
42
  this.cancel = new EventEmitter();
39
43
  this.saveChanges = new EventEmitter();
@@ -53,6 +57,13 @@ export class TestCaseDetailsComponent {
53
57
  this._editing = true;
54
58
  }
55
59
  }
60
+ /** Filtered metadata items - excludes Priority and Type for step groups */
61
+ get filteredMetadataItems() {
62
+ if (!this.isStepGroup) {
63
+ return this.metadataItems;
64
+ }
65
+ return this.metadataItems.filter((item) => !this.stepGroupExcludedMetadataLabels.includes(item.label?.toLowerCase() ?? ''));
66
+ }
56
67
  onEditClick() {
57
68
  if (this.editing === undefined) {
58
69
  this._editing = true;
@@ -109,10 +120,10 @@ export class TestCaseDetailsComponent {
109
120
  }
110
121
  }
111
122
  TestCaseDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseDetailsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
112
- TestCaseDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseDetailsComponent, selector: "cqa-test-case-details", inputs: { editing: "editing", startInEditMode: "startInEditMode", descriptionTitle: "descriptionTitle", descriptionContent: "descriptionContent", enableMarkdown: "enableMarkdown", showEditButton: "showEditButton", metadataItems: "metadataItems", labels: "labels", configTitle: "configTitle", configSections: "configSections", configSectionsRow2: "configSectionsRow2", platform: "platform", selectConfigOverrides: "selectConfigOverrides" }, outputs: { editDescription: "editDescription", cancel: "cancel", saveChanges: "saveChanges", metadataLinkClick: "metadataLinkClick", selectSearch: "selectSearch", selectLoadMore: "selectLoadMore", selectOpened: "selectOpened", selectionChange: "selectionChange", labelAdded: "labelAdded" }, ngImport: i0, template: "<!-- Edit mode: show edit form (Figma design) -->\n<cqa-test-case-details-edit\n *ngIf=\"isEditing\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [enableMarkdown]=\"enableMarkdown\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n (save)=\"onSaveChanges($event)\"\n (cancel)=\"onCancelEdit()\"\n (selectSearch)=\"selectSearch.emit($event)\"\n (selectLoadMore)=\"selectLoadMore.emit($event)\"\n (selectOpened)=\"selectOpened.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\"\n (labelAdded)=\"labelAdded.emit($event)\">\n</cqa-test-case-details-edit>\n\n<!-- View mode: read-only details -->\n<div *ngIf=\"!isEditing\" class=\"cqa-self-stretch cqa-py-4 cqa-px-0 cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <!-- Description Section -->\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-between cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">description</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ descriptionTitle }}</span>\n </div>\n <button\n *ngIf=\"showEditButton\"\n type=\"button\"\n class=\"cqa-flex cqa-justify-end cqa-items-center cqa-gap-2 cqa-text-[#A3A3A3] cqa-text-xs cqa-font-semibold hover:cqa-text-[#737373] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onEditClick()\">\n <mat-icon class=\"cqa-text-[14px] cqa-w-4 cqa-h-4\">edit</mat-icon>\n Edit\n </button>\n </div>\n <div *ngIf=\"descriptionContent\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div *ngIf=\"enableMarkdown\" class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal cqa-prose cqa-prose-sm cqa-max-w-none\" [innerHTML]=\"descriptionContent\"></div>\n <div *ngIf=\"!enableMarkdown\" class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal\">{{ descriptionContent }}</div>\n </div>\n </div>\n\n <!-- Metadata Section -->\n <div *ngIf=\"metadataItems.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-2 cqa-gap-2 cqa-gap-y-4\">\n <ng-container *ngFor=\"let item of metadataItems; trackBy: trackByMetadataLabel\">\n <div class=\"cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-0.5\">\n <div class=\"cqa-text-[#6B7280] cqa-text-xs cqa-leading-[15px] cqa-font-medium\">{{ item.label }}</div>\n <div\n class=\"cqa-flex cqa-justify-start cqa-items-center cqa-gap-[5px] cqa-min-w-0 cqa-w-full cqa-text-left cqa-text-[#0A0A0A] cqa-border cqa-border-[#F5F5F5]\">\n <mat-icon *ngIf=\"item.icon && (!item.iconLibrary || item.iconLibrary === 'mat')\" class=\"cqa-text-[#6B7280] cqa-text-sm cqa-w-4 cqa-h-4\">\n {{ item.icon }}\n </mat-icon>\n <span *ngIf=\"item.statusColor\" class=\"cqa-w-3.5 cqa-h-3.5 cqa-rounded-full cqa-flex-shrink-0\" [ngClass]=\"getStatusDotClass(item)\"></span>\n <a\n *ngIf=\"item.link\"\n href=\"javascript:void(0)\"\n class=\"cqa-text-[#2563EB] cqa-text-xs cqa-leading-[12px] cqa-font-normal hover:cqa-underline cqa-cursor-pointer cqa-block cqa-truncate cqa-min-w-0\"\n (click)=\"onMetadataLinkClick(item); $event.preventDefault()\">\n {{ item.value }}\n </a>\n <span *ngIf=\"!item.link\" class=\"cqa-text-xs cqa-leading-[12px] cqa-font-normal cqa-align-middle\" [ngClass]=\"getValueTextClass(item)\">\n {{ item.value }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Labels (Figma: Labels title, cqa-badge chips with tag icon) -->\n <div *ngIf=\"labels.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2 cqa-text-sm cqa-leading-[19.6px]\">\n <span class=\"cqa-text-[#111827] cqa-text-sm cqa-font-medium cqa-leading-5\">Labels</span>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n <cqa-badge\n *ngFor=\"let label of labels\"\n [label]=\"label\"\n icon=\"label\"\n variant=\"outline\"\n size=\"small\"\n backgroundColor=\"#ffffff\"\n textColor=\"#475569\"\n borderColor=\"#E2E8F0\"\n iconColor=\"#94A3B8\">\n </cqa-badge>\n </div>\n </div>\n\n <!-- Configuration Section -->\n <div *ngIf=\"configSections.length || configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-start cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">settings</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ configTitle }}</span>\n </div>\n </div>\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-1 cqa-gap-2.5\">\n <ng-container *ngFor=\"let section of configSections; trackBy: trackByConfigTitle\">\n <cqa-configuration-card\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </ng-container>\n </div>\n <div *ngIf=\"configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <cqa-configuration-card\n *ngFor=\"let section of configSectionsRow2; trackBy: trackByConfigTitle\"\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </div>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i1.TestCaseDetailsEditComponent, selector: "cqa-test-case-details-edit", inputs: ["descriptionTitle", "descriptionContent", "enableMarkdown", "metadataItems", "labels", "configTitle", "configSections", "configSectionsRow2", "prerequisiteCaseOptions", "platform", "selectConfigOverrides"], outputs: ["save", "cancel", "selectSearch", "selectLoadMore", "selectOpened", "selectionChange", "labelAdded"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading"] }, { type: i4.ConfigurationCardComponent, selector: "cqa-configuration-card", inputs: ["icon", "title", "data"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
123
+ TestCaseDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseDetailsComponent, selector: "cqa-test-case-details", inputs: { editing: "editing", startInEditMode: "startInEditMode", descriptionTitle: "descriptionTitle", descriptionContent: "descriptionContent", enableMarkdown: "enableMarkdown", showEditButton: "showEditButton", metadataItems: "metadataItems", labels: "labels", configTitle: "configTitle", configSections: "configSections", configSectionsRow2: "configSectionsRow2", platform: "platform", isStepGroup: "isStepGroup", selectConfigOverrides: "selectConfigOverrides" }, outputs: { editDescription: "editDescription", cancel: "cancel", saveChanges: "saveChanges", metadataLinkClick: "metadataLinkClick", selectSearch: "selectSearch", selectLoadMore: "selectLoadMore", selectOpened: "selectOpened", selectionChange: "selectionChange", labelAdded: "labelAdded" }, ngImport: i0, template: "<!-- Edit mode: show edit form (Figma design) -->\n<cqa-test-case-details-edit\n *ngIf=\"isEditing\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [enableMarkdown]=\"enableMarkdown\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n [isStepGroup]=\"isStepGroup\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n (save)=\"onSaveChanges($event)\"\n (cancel)=\"onCancelEdit()\"\n (selectSearch)=\"selectSearch.emit($event)\"\n (selectLoadMore)=\"selectLoadMore.emit($event)\"\n (selectOpened)=\"selectOpened.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\"\n (labelAdded)=\"labelAdded.emit($event)\">\n</cqa-test-case-details-edit>\n\n<!-- View mode: read-only details -->\n<div *ngIf=\"!isEditing\" class=\"cqa-self-stretch cqa-py-4 cqa-px-0 cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <!-- Description Section -->\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-between cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">description</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ descriptionTitle }}</span>\n </div>\n <button\n *ngIf=\"showEditButton\"\n type=\"button\"\n class=\"cqa-flex cqa-justify-end cqa-items-center cqa-gap-2 cqa-text-[#A3A3A3] cqa-text-xs cqa-font-semibold hover:cqa-text-[#737373] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onEditClick()\">\n <mat-icon class=\"cqa-text-[14px] cqa-w-4 cqa-h-4\">edit</mat-icon>\n Edit\n </button>\n </div>\n <div *ngIf=\"descriptionContent\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div *ngIf=\"enableMarkdown\" class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal cqa-prose cqa-prose-sm cqa-max-w-none\" [innerHTML]=\"descriptionContent\"></div>\n <div *ngIf=\"!enableMarkdown\" class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal\">{{ descriptionContent }}</div>\n </div>\n </div>\n\n <!-- Metadata Section -->\n <div *ngIf=\"filteredMetadataItems.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-2 cqa-gap-x-0 cqa-gap-y-4\">\n <ng-container *ngFor=\"let item of filteredMetadataItems; trackBy: trackByMetadataLabel\">\n <div class=\"cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-0.5\">\n <div class=\"cqa-text-[#6B7280] cqa-text-xs cqa-leading-[15px] cqa-font-medium\">{{ item.label }}</div>\n <div\n class=\"cqa-flex cqa-justify-start cqa-items-center cqa-gap-[5px] cqa-min-w-0 cqa-w-full cqa-text-left cqa-text-[#0A0A0A] cqa-border cqa-border-[#F5F5F5]\">\n <mat-icon *ngIf=\"item.icon && (!item.iconLibrary || item.iconLibrary === 'mat')\" class=\"cqa-text-[#6B7280] cqa-text-sm cqa-w-4 cqa-h-4\">\n {{ item.icon }}\n </mat-icon>\n <span *ngIf=\"item.statusColor\" class=\"cqa-w-3.5 cqa-h-3.5 cqa-rounded-full cqa-flex-shrink-0\" [ngClass]=\"getStatusDotClass(item)\"></span>\n <a\n *ngIf=\"item.link\"\n href=\"javascript:void(0)\"\n class=\"cqa-text-[#2563EB] cqa-text-xs cqa-leading-[12px] cqa-font-normal hover:cqa-underline cqa-cursor-pointer cqa-block cqa-truncate cqa-min-w-0\"\n (click)=\"onMetadataLinkClick(item); $event.preventDefault()\">\n {{ item.value }}\n </a>\n <span *ngIf=\"!item.link\" class=\"cqa-text-xs cqa-leading-[12px] cqa-font-normal cqa-align-middle\" [ngClass]=\"getValueTextClass(item)\">\n {{ item.value }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Labels (Figma: Labels title, cqa-badge chips with tag icon) -->\n <div *ngIf=\"labels.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2 cqa-text-sm cqa-leading-[19.6px]\">\n <span class=\"cqa-text-[#111827] cqa-text-sm cqa-font-medium cqa-leading-5\">Labels</span>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n <cqa-badge\n *ngFor=\"let label of labels\"\n [label]=\"label\"\n icon=\"label\"\n variant=\"outline\"\n size=\"small\"\n backgroundColor=\"#ffffff\"\n textColor=\"#475569\"\n borderColor=\"#E2E8F0\"\n iconColor=\"#94A3B8\">\n </cqa-badge>\n </div>\n </div>\n\n <!-- Configuration Section -->\n <div *ngIf=\"configSections.length || configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-start cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">settings</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ configTitle }}</span>\n </div>\n </div>\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-1 cqa-gap-2.5\">\n <ng-container *ngFor=\"let section of configSections; trackBy: trackByConfigTitle\">\n <cqa-configuration-card\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </ng-container>\n </div>\n <div *ngIf=\"configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <cqa-configuration-card\n *ngFor=\"let section of configSectionsRow2; trackBy: trackByConfigTitle\"\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </div>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i1.TestCaseDetailsEditComponent, selector: "cqa-test-case-details-edit", inputs: ["descriptionTitle", "descriptionContent", "enableMarkdown", "metadataItems", "labels", "configTitle", "configSections", "configSectionsRow2", "prerequisiteCaseOptions", "platform", "isStepGroup", "selectConfigOverrides"], outputs: ["save", "cancel", "selectSearch", "selectLoadMore", "selectOpened", "selectionChange", "labelAdded"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading"] }, { type: i4.ConfigurationCardComponent, selector: "cqa-configuration-card", inputs: ["icon", "title", "data"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
113
124
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseDetailsComponent, decorators: [{
114
125
  type: Component,
115
- args: [{ selector: 'cqa-test-case-details', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Edit mode: show edit form (Figma design) -->\n<cqa-test-case-details-edit\n *ngIf=\"isEditing\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [enableMarkdown]=\"enableMarkdown\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n (save)=\"onSaveChanges($event)\"\n (cancel)=\"onCancelEdit()\"\n (selectSearch)=\"selectSearch.emit($event)\"\n (selectLoadMore)=\"selectLoadMore.emit($event)\"\n (selectOpened)=\"selectOpened.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\"\n (labelAdded)=\"labelAdded.emit($event)\">\n</cqa-test-case-details-edit>\n\n<!-- View mode: read-only details -->\n<div *ngIf=\"!isEditing\" class=\"cqa-self-stretch cqa-py-4 cqa-px-0 cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <!-- Description Section -->\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-between cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">description</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ descriptionTitle }}</span>\n </div>\n <button\n *ngIf=\"showEditButton\"\n type=\"button\"\n class=\"cqa-flex cqa-justify-end cqa-items-center cqa-gap-2 cqa-text-[#A3A3A3] cqa-text-xs cqa-font-semibold hover:cqa-text-[#737373] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onEditClick()\">\n <mat-icon class=\"cqa-text-[14px] cqa-w-4 cqa-h-4\">edit</mat-icon>\n Edit\n </button>\n </div>\n <div *ngIf=\"descriptionContent\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div *ngIf=\"enableMarkdown\" class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal cqa-prose cqa-prose-sm cqa-max-w-none\" [innerHTML]=\"descriptionContent\"></div>\n <div *ngIf=\"!enableMarkdown\" class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal\">{{ descriptionContent }}</div>\n </div>\n </div>\n\n <!-- Metadata Section -->\n <div *ngIf=\"metadataItems.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-2 cqa-gap-2 cqa-gap-y-4\">\n <ng-container *ngFor=\"let item of metadataItems; trackBy: trackByMetadataLabel\">\n <div class=\"cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-0.5\">\n <div class=\"cqa-text-[#6B7280] cqa-text-xs cqa-leading-[15px] cqa-font-medium\">{{ item.label }}</div>\n <div\n class=\"cqa-flex cqa-justify-start cqa-items-center cqa-gap-[5px] cqa-min-w-0 cqa-w-full cqa-text-left cqa-text-[#0A0A0A] cqa-border cqa-border-[#F5F5F5]\">\n <mat-icon *ngIf=\"item.icon && (!item.iconLibrary || item.iconLibrary === 'mat')\" class=\"cqa-text-[#6B7280] cqa-text-sm cqa-w-4 cqa-h-4\">\n {{ item.icon }}\n </mat-icon>\n <span *ngIf=\"item.statusColor\" class=\"cqa-w-3.5 cqa-h-3.5 cqa-rounded-full cqa-flex-shrink-0\" [ngClass]=\"getStatusDotClass(item)\"></span>\n <a\n *ngIf=\"item.link\"\n href=\"javascript:void(0)\"\n class=\"cqa-text-[#2563EB] cqa-text-xs cqa-leading-[12px] cqa-font-normal hover:cqa-underline cqa-cursor-pointer cqa-block cqa-truncate cqa-min-w-0\"\n (click)=\"onMetadataLinkClick(item); $event.preventDefault()\">\n {{ item.value }}\n </a>\n <span *ngIf=\"!item.link\" class=\"cqa-text-xs cqa-leading-[12px] cqa-font-normal cqa-align-middle\" [ngClass]=\"getValueTextClass(item)\">\n {{ item.value }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Labels (Figma: Labels title, cqa-badge chips with tag icon) -->\n <div *ngIf=\"labels.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2 cqa-text-sm cqa-leading-[19.6px]\">\n <span class=\"cqa-text-[#111827] cqa-text-sm cqa-font-medium cqa-leading-5\">Labels</span>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n <cqa-badge\n *ngFor=\"let label of labels\"\n [label]=\"label\"\n icon=\"label\"\n variant=\"outline\"\n size=\"small\"\n backgroundColor=\"#ffffff\"\n textColor=\"#475569\"\n borderColor=\"#E2E8F0\"\n iconColor=\"#94A3B8\">\n </cqa-badge>\n </div>\n </div>\n\n <!-- Configuration Section -->\n <div *ngIf=\"configSections.length || configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-start cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">settings</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ configTitle }}</span>\n </div>\n </div>\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-1 cqa-gap-2.5\">\n <ng-container *ngFor=\"let section of configSections; trackBy: trackByConfigTitle\">\n <cqa-configuration-card\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </ng-container>\n </div>\n <div *ngIf=\"configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <cqa-configuration-card\n *ngFor=\"let section of configSectionsRow2; trackBy: trackByConfigTitle\"\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [] }]
126
+ args: [{ selector: 'cqa-test-case-details', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Edit mode: show edit form (Figma design) -->\n<cqa-test-case-details-edit\n *ngIf=\"isEditing\"\n [descriptionTitle]=\"descriptionTitle\"\n [descriptionContent]=\"descriptionContent\"\n [enableMarkdown]=\"enableMarkdown\"\n [metadataItems]=\"metadataItems\"\n [labels]=\"labels\"\n [configTitle]=\"configTitle\"\n [configSections]=\"configSections\"\n [configSectionsRow2]=\"configSectionsRow2\"\n [platform]=\"platform\"\n [isStepGroup]=\"isStepGroup\"\n [selectConfigOverrides]=\"selectConfigOverrides\"\n (save)=\"onSaveChanges($event)\"\n (cancel)=\"onCancelEdit()\"\n (selectSearch)=\"selectSearch.emit($event)\"\n (selectLoadMore)=\"selectLoadMore.emit($event)\"\n (selectOpened)=\"selectOpened.emit($event)\"\n (selectionChange)=\"selectionChange.emit($event)\"\n (labelAdded)=\"labelAdded.emit($event)\">\n</cqa-test-case-details-edit>\n\n<!-- View mode: read-only details -->\n<div *ngIf=\"!isEditing\" class=\"cqa-self-stretch cqa-py-4 cqa-px-0 cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <!-- Description Section -->\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-between cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">description</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ descriptionTitle }}</span>\n </div>\n <button\n *ngIf=\"showEditButton\"\n type=\"button\"\n class=\"cqa-flex cqa-justify-end cqa-items-center cqa-gap-2 cqa-text-[#A3A3A3] cqa-text-xs cqa-font-semibold hover:cqa-text-[#737373] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n (click)=\"onEditClick()\">\n <mat-icon class=\"cqa-text-[14px] cqa-w-4 cqa-h-4\">edit</mat-icon>\n Edit\n </button>\n </div>\n <div *ngIf=\"descriptionContent\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n <div *ngIf=\"enableMarkdown\" class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal cqa-prose cqa-prose-sm cqa-max-w-none\" [innerHTML]=\"descriptionContent\"></div>\n <div *ngIf=\"!enableMarkdown\" class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal\">{{ descriptionContent }}</div>\n </div>\n </div>\n\n <!-- Metadata Section -->\n <div *ngIf=\"filteredMetadataItems.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-2 cqa-gap-x-0 cqa-gap-y-4\">\n <ng-container *ngFor=\"let item of filteredMetadataItems; trackBy: trackByMetadataLabel\">\n <div class=\"cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-0.5\">\n <div class=\"cqa-text-[#6B7280] cqa-text-xs cqa-leading-[15px] cqa-font-medium\">{{ item.label }}</div>\n <div\n class=\"cqa-flex cqa-justify-start cqa-items-center cqa-gap-[5px] cqa-min-w-0 cqa-w-full cqa-text-left cqa-text-[#0A0A0A] cqa-border cqa-border-[#F5F5F5]\">\n <mat-icon *ngIf=\"item.icon && (!item.iconLibrary || item.iconLibrary === 'mat')\" class=\"cqa-text-[#6B7280] cqa-text-sm cqa-w-4 cqa-h-4\">\n {{ item.icon }}\n </mat-icon>\n <span *ngIf=\"item.statusColor\" class=\"cqa-w-3.5 cqa-h-3.5 cqa-rounded-full cqa-flex-shrink-0\" [ngClass]=\"getStatusDotClass(item)\"></span>\n <a\n *ngIf=\"item.link\"\n href=\"javascript:void(0)\"\n class=\"cqa-text-[#2563EB] cqa-text-xs cqa-leading-[12px] cqa-font-normal hover:cqa-underline cqa-cursor-pointer cqa-block cqa-truncate cqa-min-w-0\"\n (click)=\"onMetadataLinkClick(item); $event.preventDefault()\">\n {{ item.value }}\n </a>\n <span *ngIf=\"!item.link\" class=\"cqa-text-xs cqa-leading-[12px] cqa-font-normal cqa-align-middle\" [ngClass]=\"getValueTextClass(item)\">\n {{ item.value }}\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Labels (Figma: Labels title, cqa-badge chips with tag icon) -->\n <div *ngIf=\"labels.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2 cqa-text-sm cqa-leading-[19.6px]\">\n <span class=\"cqa-text-[#111827] cqa-text-sm cqa-font-medium cqa-leading-5\">Labels</span>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n <cqa-badge\n *ngFor=\"let label of labels\"\n [label]=\"label\"\n icon=\"label\"\n variant=\"outline\"\n size=\"small\"\n backgroundColor=\"#ffffff\"\n textColor=\"#475569\"\n borderColor=\"#E2E8F0\"\n iconColor=\"#94A3B8\">\n </cqa-badge>\n </div>\n </div>\n\n <!-- Configuration Section -->\n <div *ngIf=\"configSections.length || configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-start cqa-items-center\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">settings</mat-icon>\n </div>\n <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ configTitle }}</span>\n </div>\n </div>\n <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-1 cqa-gap-2.5\">\n <ng-container *ngFor=\"let section of configSections; trackBy: trackByConfigTitle\">\n <cqa-configuration-card\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </ng-container>\n </div>\n <div *ngIf=\"configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n <cqa-configuration-card\n *ngFor=\"let section of configSectionsRow2; trackBy: trackByConfigTitle\"\n [icon]=\"section.icon || 'tune'\"\n [title]=\"section.title\"\n [data]=\"section.items\">\n </cqa-configuration-card>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [] }]
116
127
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { editing: [{
117
128
  type: Input
118
129
  }], startInEditMode: [{
@@ -137,6 +148,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
137
148
  type: Input
138
149
  }], platform: [{
139
150
  type: Input
151
+ }], isStepGroup: [{
152
+ type: Input
140
153
  }], selectConfigOverrides: [{
141
154
  type: Input
142
155
  }], editDescription: [{
@@ -158,4 +171,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
158
171
  }], labelAdded: [{
159
172
  type: Output
160
173
  }] } });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBZ0J2QixNQUFNLE9BQU8sd0JBQXdCO0lBZW5DLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBZDFDLDJEQUEyRDtRQUNuRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBS3pCLDREQUE0RDtRQUNuRCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQWNqQyxnQ0FBZ0M7UUFDdkIscUJBQWdCLEdBQUcsYUFBYSxDQUFDO1FBRTFDLCtCQUErQjtRQUN0Qix1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFakMsc0ZBQXNGO1FBQzdFLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRWhDLGdFQUFnRTtRQUN2RCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUVoQyw2RkFBNkY7UUFDcEYsa0JBQWEsR0FBa0MsRUFBRSxDQUFDO1FBRTNELHFEQUFxRDtRQUM1QyxXQUFNLEdBQWEsRUFBRSxDQUFDO1FBRS9CLGtDQUFrQztRQUN6QixnQkFBVyxHQUFHLGVBQWUsQ0FBQztRQUV2QyxnRUFBZ0U7UUFDdkQsbUJBQWMsR0FBbUMsRUFBRSxDQUFDO1FBRTdELDBGQUEwRjtRQUNqRix1QkFBa0IsR0FBbUMsRUFBRSxDQUFDO1FBQ2pFLHVGQUF1RjtRQUM5RSxhQUFRLEdBQXFCLEtBQUssQ0FBQztRQUU1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SUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUU7WUFDOUIsT0FBTyxvQkFBb0IsQ0FBQztTQUM3QjtRQUNELE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQzs7cUhBNUhVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLHd4QkN4QnJDLDZ1T0ErSEE7MkZEdkdhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU07d0dBT3RDLE9BQU87c0JBQWYsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQWVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb24sXG4gIFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSxcbn0gZnJvbSAnLi90ZXN0LWNhc2UtZGV0YWlscy5tb2RlbHMnO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhLFxuICBTZWxlY3RDb25maWdPdmVycmlkZXMsXG59IGZyb20gJy4vdGVzdC1jYXNlLWRldGFpbHMtZWRpdC90ZXN0LWNhc2UtZGV0YWlscy1lZGl0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS10ZXN0LWNhc2UtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXN0LWNhc2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiogSW50ZXJuYWwgZWRpdGluZyBzdGF0ZSB3aGVuIG5vdCBjb250cm9sbGVkIGJ5IHBhcmVudCAqL1xuICBwcml2YXRlIF9lZGl0aW5nID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gcHJvdmlkZWQgYnkgcGFyZW50LCB1c2UgdGhpcyBpbnN0ZWFkIG9mIGludGVybmFsIHN0YXRlIChmaXhlcyBTdG9yeWJvb2sgZXZlbnQgZmxvdykuICovXG4gIEBJbnB1dCgpIGVkaXRpbmc/OiBib29sZWFuO1xuXG4gIC8qKiBXaGVuIHRydWUsIHN0YXJ0IGluIGVkaXQgbW9kZSAodXNlZnVsIGZvciBTdG9yeWJvb2spLiAqL1xuICBASW5wdXQoKSBzdGFydEluRWRpdE1vZGUgPSBmYWxzZTtcblxuICAvKiogUmVzb2x2ZWQgZWRpdGluZyBzdGF0ZTogcGFyZW50LWNvbnRyb2xsZWQgb3IgaW50ZXJuYWwgKi9cbiAgZ2V0IGlzRWRpdGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nICE9PSB1bmRlZmluZWQgPyB0aGlzLmVkaXRpbmcgOiB0aGlzLl9lZGl0aW5nO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXJ0SW5FZGl0TW9kZSkge1xuICAgICAgdGhpcy5fZWRpdGluZyA9IHRydWU7XG4gICAgfVxuICB9XG4gIC8qKiBEZXNjcmlwdGlvbiBzZWN0aW9uIHRpdGxlICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uVGl0bGUgPSAnRGVzY3JpcHRpb24nO1xuXG4gIC8qKiBEZXNjcmlwdGlvbiB0ZXh0IGNvbnRlbnQgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb25Db250ZW50ID0gJyc7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgZGVzY3JpcHRpb24gc3VwcG9ydHMgcmljaCB0ZXh0IChIVE1MKS4gUmVuZGVycyBhcyBIVE1MIGluIHZpZXcgbW9kZS4gKi9cbiAgQElucHV0KCkgZW5hYmxlTWFya2Rvd24gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0byBzaG93IHRoZSBFZGl0IGJ1dHRvbiBpbiB0aGUgRGVzY3JpcHRpb24gaGVhZGVyICovXG4gIEBJbnB1dCgpIHNob3dFZGl0QnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqIE1ldGFkYXRhIGl0ZW1zIChjcmVhdGVkT24sIHN0YXR1cywgcHJpb3JpdHksIGVudmlyb25tZW50LCB2ZXJzaW9uLCB0ZXN0UGxhbk5hbWUsIGV0Yy4pICovXG4gIEBJbnB1dCgpIG1ldGFkYXRhSXRlbXM6IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbVtdID0gW107XG5cbiAgLyoqIExhYmVscy90YWdzIChlLmcuIEF1dG9tYXRpb24sIEFQSSwgU0RLLCBVSS9VWCkgKi9cbiAgQElucHV0KCkgbGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKiBDb25maWd1cmF0aW9uIHNlY3Rpb24gdGl0bGUgKi9cbiAgQElucHV0KCkgY29uZmlnVGl0bGUgPSAnQ29uZmlndXJhdGlvbic7XG5cbiAgLyoqIENvbmZpZ3VyYXRpb24gc2VjdGlvbnMgKGUuZy4gRXhlY3V0aW9uLCBBSSBDb25maWd1cmF0aW9uKSAqL1xuICBASW5wdXQoKSBjb25maWdTZWN0aW9uczogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdID0gW107XG5cbiAgLyoqIE9wdGlvbmFsIGNvbmZpZyBzZWN0aW9ucyBkaXNwbGF5ZWQgaW4gYSAyLWNvbHVtbiByb3cgKGUuZy4gV2FpdHMgJiBSZXRyaWVzLCBEZXZpY2UpICovXG4gIEBJbnB1dCgpIGNvbmZpZ1NlY3Rpb25zUm93MjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdID0gW107XG4gIC8qKiBQbGF0Zm9ybTogJ3dlYicgb3IgJ21vYmlsZScuIERlZmF1bHRzIHRvICd3ZWInLiBVc2VkIGZvciBEZXZpY2UgU2V0dGluZ3MgZmllbGRzLiAqL1xuICBASW5wdXQoKSBwbGF0Zm9ybTogJ3dlYicgfCAnbW9iaWxlJyA9ICd3ZWInO1xuXG4gIC8qKiBPdmVycmlkZSBjb25maWcgcGVyIHNlbGVjdCBmb3IgQVBJLWRyaXZlbiBvcHRpb25zLCBzZXJ2ZXIgc2VhcmNoLCBsb2FkIG1vcmUuICovXG4gIEBJbnB1dCgpIHNlbGVjdENvbmZpZ092ZXJyaWRlczogU2VsZWN0Q29uZmlnT3ZlcnJpZGVzID0ge307XG5cbiAgQE91dHB1dCgpIGVkaXREZXNjcmlwdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNhdmVDaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcjxUZXN0Q2FzZURldGFpbHNFZGl0Rm9ybURhdGE+KCk7XG4gIEBPdXRwdXQoKSBtZXRhZGF0YUxpbmtDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0U2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RMb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0T3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nIH0+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0+KCk7XG4gIEBPdXRwdXQoKSBsYWJlbEFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgb25FZGl0Q2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9lZGl0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0RGVzY3JpcHRpb24uZW1pdCgpO1xuICB9XG5cbiAgb25TYXZlQ2hhbmdlcyhkYXRhOiBUZXN0Q2FzZURldGFpbHNFZGl0Rm9ybURhdGEpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2VkaXRpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2F2ZUNoYW5nZXMuZW1pdChkYXRhKTtcbiAgfVxuXG4gIG9uQ2FuY2VsRWRpdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gICAgaWYgKHRoaXMuZWRpdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9lZGl0aW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRyYWNrQnlDb25maWdUaXRsZShfaTogbnVtYmVyLCBzZWN0aW9uOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2VjdGlvbi50aXRsZTtcbiAgfVxuXG4gIHRyYWNrQnlNZXRhZGF0YUxhYmVsKF9pOiBudW1iZXIsIGl0ZW06IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0ubGFiZWw7XG4gIH1cblxuXG4gIG9uTWV0YWRhdGFMaW5rQ2xpY2soaXRlbTogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0ubGluaykge1xuICAgICAgdGhpcy5tZXRhZGF0YUxpbmtDbGljay5lbWl0KGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0YXR1c0RvdENsYXNzKGl0ZW06IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKCFpdGVtLnN0YXR1c0NvbG9yKSByZXR1cm4gJyc7XG4gICAgc3dpdGNoIChpdGVtLnN0YXR1c0NvbG9yKSB7XG4gICAgICBjYXNlICd5ZWxsb3cnOlxuICAgICAgICByZXR1cm4gJ2NxYS1iZy1bI0VBQjMwOF0nO1xuICAgICAgY2FzZSAncmVkJzpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyNEQzI2MjZdJztcbiAgICAgIGNhc2UgJ2dyZWVuJzpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyMxNkEzNEFdJztcbiAgICAgIGNhc2UgJ2dyYXknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyM5NEEzQjhdJztcbiAgICB9XG4gIH1cblxuICAvKiogVGV4dCBjb2xvciBmb3IgbWV0YWRhdGEgdmFsdWUgKGUuZy4gcmVkIGZvciBjcml0aWNhbCBwcmlvcml0eSkgKi9cbiAgZ2V0VmFsdWVUZXh0Q2xhc3MoaXRlbTogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbS5zdGF0dXNDb2xvciA9PT0gJ3JlZCcpIHtcbiAgICAgIHJldHVybiAnY3FhLXRleHQtWyNEQzI2MjZdJztcbiAgICB9XG4gICAgcmV0dXJuICdjcWEtdGV4dC1bIzExMTgyN10nO1xuICB9XG59XG4iLCI8IS0tIEVkaXQgbW9kZTogc2hvdyBlZGl0IGZvcm0gKEZpZ21hIGRlc2lnbikgLS0+XG48Y3FhLXRlc3QtY2FzZS1kZXRhaWxzLWVkaXRcbiAgKm5nSWY9XCJpc0VkaXRpbmdcIlxuICBbZGVzY3JpcHRpb25UaXRsZV09XCJkZXNjcmlwdGlvblRpdGxlXCJcbiAgW2Rlc2NyaXB0aW9uQ29udGVudF09XCJkZXNjcmlwdGlvbkNvbnRlbnRcIlxuICBbZW5hYmxlTWFya2Rvd25dPVwiZW5hYmxlTWFya2Rvd25cIlxuICBbbWV0YWRhdGFJdGVtc109XCJtZXRhZGF0YUl0ZW1zXCJcbiAgW2xhYmVsc109XCJsYWJlbHNcIlxuICBbY29uZmlnVGl0bGVdPVwiY29uZmlnVGl0bGVcIlxuICBbY29uZmlnU2VjdGlvbnNdPVwiY29uZmlnU2VjdGlvbnNcIlxuICBbY29uZmlnU2VjdGlvbnNSb3cyXT1cImNvbmZpZ1NlY3Rpb25zUm93MlwiXG4gIFtwbGF0Zm9ybV09XCJwbGF0Zm9ybVwiXG4gIFtzZWxlY3RDb25maWdPdmVycmlkZXNdPVwic2VsZWN0Q29uZmlnT3ZlcnJpZGVzXCJcbiAgKHNhdmUpPVwib25TYXZlQ2hhbmdlcygkZXZlbnQpXCJcbiAgKGNhbmNlbCk9XCJvbkNhbmNlbEVkaXQoKVwiXG4gIChzZWxlY3RTZWFyY2gpPVwic2VsZWN0U2VhcmNoLmVtaXQoJGV2ZW50KVwiXG4gIChzZWxlY3RMb2FkTW9yZSk9XCJzZWxlY3RMb2FkTW9yZS5lbWl0KCRldmVudClcIlxuICAoc2VsZWN0T3BlbmVkKT1cInNlbGVjdE9wZW5lZC5lbWl0KCRldmVudClcIlxuICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdGlvbkNoYW5nZS5lbWl0KCRldmVudClcIlxuICAobGFiZWxBZGRlZCk9XCJsYWJlbEFkZGVkLmVtaXQoJGV2ZW50KVwiPlxuPC9jcWEtdGVzdC1jYXNlLWRldGFpbHMtZWRpdD5cblxuPCEtLSBWaWV3IG1vZGU6IHJlYWQtb25seSBkZXRhaWxzIC0tPlxuPGRpdiAqbmdJZj1cIiFpc0VkaXRpbmdcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLXB5LTQgY3FhLXB4LTAgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTQgY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF1cIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTQgY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF1cIj5cbiAgICA8IS0tIERlc2NyaXB0aW9uIFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIuNVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5kZXNjcmlwdGlvbjwvbWF0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzE5LjZweF1cIj57eyBkZXNjcmlwdGlvblRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0VkaXRCdXR0b25cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS10ZXh0LVsjQTNBM0EzXSBjcWEtdGV4dC14cyBjcWEtZm9udC1zZW1pYm9sZCBob3ZlcjpjcWEtdGV4dC1bIzczNzM3M10gY3FhLXRyYW5zaXRpb24tY29sb3JzIGZvY3VzOmNxYS1vdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpjcWEtcmluZy0yIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctWyMzRjQzRUVdIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctb2Zmc2V0LTJcIlxuICAgICAgICAgIChjbGljayk9XCJvbkVkaXRDbGljaygpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS13LTQgY3FhLWgtNFwiPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICAgIEVkaXRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJkZXNjcmlwdGlvbkNvbnRlbnRcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZW5hYmxlTWFya2Rvd25cIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLXRleHQtWyMxMTE4MjddIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW5vcm1hbCBjcWEtcHJvc2UgY3FhLXByb3NlLXNtIGNxYS1tYXgtdy1ub25lXCIgW2lubmVySFRNTF09XCJkZXNjcmlwdGlvbkNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFlbmFibGVNYXJrZG93blwiIGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtdGV4dC1bIzExMTgyN10gY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbm9ybWFsXCI+e3sgZGVzY3JpcHRpb25Db250ZW50IH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTWV0YWRhdGEgU2VjdGlvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGFJdGVtcy5sZW5ndGhcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIuNVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWdyaWQgY3FhLWdyaWQtY29scy0yIGNxYS1nYXAtMiBjcWEtZ2FwLXktNFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1ldGFkYXRhSXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlNZXRhZGF0YUxhYmVsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC0wLjVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXRleHQteHMgY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bVwiPnt7IGl0ZW0ubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtWzVweF0gY3FhLW1pbi13LTAgY3FhLXctZnVsbCBjcWEtdGV4dC1sZWZ0IGNxYS10ZXh0LVsjMEEwQTBBXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNGNUY1RjVdXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIml0ZW0uaWNvbiAmJiAoIWl0ZW0uaWNvbkxpYnJhcnkgfHwgaXRlbS5pY29uTGlicmFyeSA9PT0gJ21hdCcpXCIgY2xhc3M9XCJjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXRleHQtc20gY3FhLXctNCBjcWEtaC00XCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS5pY29uIH19XG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zdGF0dXNDb2xvclwiIGNsYXNzPVwiY3FhLXctMy41IGNxYS1oLTMuNSBjcWEtcm91bmRlZC1mdWxsIGNxYS1mbGV4LXNocmluay0wXCIgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzRG90Q2xhc3MoaXRlbSlcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmxpbmtcIlxuICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXRleHQtWyMyNTYzRUJdIGNxYS10ZXh0LXhzIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtZm9udC1ub3JtYWwgaG92ZXI6Y3FhLXVuZGVybGluZSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLWJsb2NrIGNxYS10cnVuY2F0ZSBjcWEtbWluLXctMFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWV0YWRhdGFMaW5rQ2xpY2soaXRlbSk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0ubGlua1wiIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLWxlYWRpbmctWzEycHhdIGNxYS1mb250LW5vcm1hbCBjcWEtYWxpZ24tbWlkZGxlXCIgW25nQ2xhc3NdPVwiZ2V0VmFsdWVUZXh0Q2xhc3MoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLnZhbHVlIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBMYWJlbHMgKEZpZ21hOiBMYWJlbHMgdGl0bGUsIGNxYS1iYWRnZSBjaGlwcyB3aXRoIHRhZyBpY29uKSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwibGFiZWxzLmxlbmd0aFwiIGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWp1c3RpZnktc3RhcnQgY3FhLWl0ZW1zLXN0YXJ0IGNxYS1nYXAtMiBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzExMTgyN10gY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS1sZWFkaW5nLTVcIj5MYWJlbHM8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGNxYS1iYWRnZVxuICAgICAgICAgICpuZ0Zvcj1cImxldCBsYWJlbCBvZiBsYWJlbHNcIlxuICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgaWNvbj1cImxhYmVsXCJcbiAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9XCIjZmZmZmZmXCJcbiAgICAgICAgICB0ZXh0Q29sb3I9XCIjNDc1NTY5XCJcbiAgICAgICAgICBib3JkZXJDb2xvcj1cIiNFMkU4RjBcIlxuICAgICAgICAgIGljb25Db2xvcj1cIiM5NEEzQjhcIj5cbiAgICAgICAgPC9jcWEtYmFkZ2U+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ29uZmlndXJhdGlvbiBTZWN0aW9uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjb25maWdTZWN0aW9ucy5sZW5ndGggfHwgY29uZmlnU2VjdGlvbnNSb3cyLmxlbmd0aFwiIGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWp1c3RpZnktc3RhcnQgY3FhLWl0ZW1zLXN0YXJ0IGNxYS1nYXAtMi41XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktc3RhcnQgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5zZXR0aW5nczwvbWF0LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzE5LjZweF1cIj57eyBjb25maWdUaXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC0yLjVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWdyaWQgY3FhLWdyaWQtY29scy0xIGNxYS1nYXAtMi41XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBjb25maWdTZWN0aW9uczsgdHJhY2tCeTogdHJhY2tCeUNvbmZpZ1RpdGxlXCI+XG4gICAgICAgICAgICA8Y3FhLWNvbmZpZ3VyYXRpb24tY2FyZFxuICAgICAgICAgICAgICBbaWNvbl09XCJzZWN0aW9uLmljb24gfHwgJ3R1bmUnXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cInNlY3Rpb24udGl0bGVcIlxuICAgICAgICAgICAgICBbZGF0YV09XCJzZWN0aW9uLml0ZW1zXCI+XG4gICAgICAgICAgICA8L2NxYS1jb25maWd1cmF0aW9uLWNhcmQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnU2VjdGlvbnNSb3cyLmxlbmd0aFwiIGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC00IGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdXCI+XG4gICAgICAgICAgPGNxYS1jb25maWd1cmF0aW9uLWNhcmRcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGNvbmZpZ1NlY3Rpb25zUm93MjsgdHJhY2tCeTogdHJhY2tCeUNvbmZpZ1RpdGxlXCJcbiAgICAgICAgICAgIFtpY29uXT1cInNlY3Rpb24uaWNvbiB8fCAndHVuZSdcIlxuICAgICAgICAgICAgW3RpdGxlXT1cInNlY3Rpb24udGl0bGVcIlxuICAgICAgICAgICAgW2RhdGFdPVwic2VjdGlvbi5pdGVtc1wiPlxuICAgICAgICAgIDwvY3FhLWNvbmZpZ3VyYXRpb24tY2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBZ0J2QixNQUFNLE9BQU8sd0JBQXdCO0lBZW5DLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBZDFDLDJEQUEyRDtRQUNuRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBS3pCLDREQUE0RDtRQUNuRCxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQWNqQyxnQ0FBZ0M7UUFDdkIscUJBQWdCLEdBQUcsYUFBYSxDQUFDO1FBRTFDLCtCQUErQjtRQUN0Qix1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFakMsc0ZBQXNGO1FBQzdFLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRWhDLGdFQUFnRTtRQUN2RCxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUVoQyw2RkFBNkY7UUFDcEYsa0JBQWEsR0FBa0MsRUFBRSxDQUFDO1FBRTNELHFEQUFxRDtRQUM1QyxXQUFNLEdBQWEsRUFBRSxDQUFDO1FBRS9CLGtDQUFrQztRQUN6QixnQkFBVyxHQUFHLGVBQWUsQ0FBQztRQUV2QyxnRUFBZ0U7UUFDdkQsbUJBQWMsR0FBbUMsRUFBRSxDQUFDO1FBRTdELDBGQUEwRjtRQUNqRix1QkFBa0IsR0FBbUMsRUFBRSxDQUFDO1FBQ2pFLHVGQUF1RjtRQUM5RSxhQUFRLEdBQXFCLEtBQUssQ0FBQztRQUU1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QUs7Z0JBZUksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb24sXG4gIFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSxcbn0gZnJvbSAnLi90ZXN0LWNhc2UtZGV0YWlscy5tb2RlbHMnO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhLFxuICBTZWxlY3RDb25maWdPdmVycmlkZXMsXG59IGZyb20gJy4vdGVzdC1jYXNlLWRldGFpbHMtZWRpdC90ZXN0LWNhc2UtZGV0YWlscy1lZGl0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS10ZXN0LWNhc2UtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXN0LWNhc2UtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiogSW50ZXJuYWwgZWRpdGluZyBzdGF0ZSB3aGVuIG5vdCBjb250cm9sbGVkIGJ5IHBhcmVudCAqL1xuICBwcml2YXRlIF9lZGl0aW5nID0gZmFsc2U7XG5cbiAgLyoqIFdoZW4gcHJvdmlkZWQgYnkgcGFyZW50LCB1c2UgdGhpcyBpbnN0ZWFkIG9mIGludGVybmFsIHN0YXRlIChmaXhlcyBTdG9yeWJvb2sgZXZlbnQgZmxvdykuICovXG4gIEBJbnB1dCgpIGVkaXRpbmc/OiBib29sZWFuO1xuXG4gIC8qKiBXaGVuIHRydWUsIHN0YXJ0IGluIGVkaXQgbW9kZSAodXNlZnVsIGZvciBTdG9yeWJvb2spLiAqL1xuICBASW5wdXQoKSBzdGFydEluRWRpdE1vZGUgPSBmYWxzZTtcblxuICAvKiogUmVzb2x2ZWQgZWRpdGluZyBzdGF0ZTogcGFyZW50LWNvbnRyb2xsZWQgb3IgaW50ZXJuYWwgKi9cbiAgZ2V0IGlzRWRpdGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nICE9PSB1bmRlZmluZWQgPyB0aGlzLmVkaXRpbmcgOiB0aGlzLl9lZGl0aW5nO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXJ0SW5FZGl0TW9kZSkge1xuICAgICAgdGhpcy5fZWRpdGluZyA9IHRydWU7XG4gICAgfVxuICB9XG4gIC8qKiBEZXNjcmlwdGlvbiBzZWN0aW9uIHRpdGxlICovXG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uVGl0bGUgPSAnRGVzY3JpcHRpb24nO1xuXG4gIC8qKiBEZXNjcmlwdGlvbiB0ZXh0IGNvbnRlbnQgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb25Db250ZW50ID0gJyc7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgZGVzY3JpcHRpb24gc3VwcG9ydHMgcmljaCB0ZXh0IChIVE1MKS4gUmVuZGVycyBhcyBIVE1MIGluIHZpZXcgbW9kZS4gKi9cbiAgQElucHV0KCkgZW5hYmxlTWFya2Rvd24gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0byBzaG93IHRoZSBFZGl0IGJ1dHRvbiBpbiB0aGUgRGVzY3JpcHRpb24gaGVhZGVyICovXG4gIEBJbnB1dCgpIHNob3dFZGl0QnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqIE1ldGFkYXRhIGl0ZW1zIChjcmVhdGVkT24sIHN0YXR1cywgcHJpb3JpdHksIGVudmlyb25tZW50LCB2ZXJzaW9uLCB0ZXN0UGxhbk5hbWUsIGV0Yy4pICovXG4gIEBJbnB1dCgpIG1ldGFkYXRhSXRlbXM6IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbVtdID0gW107XG5cbiAgLyoqIExhYmVscy90YWdzIChlLmcuIEF1dG9tYXRpb24sIEFQSSwgU0RLLCBVSS9VWCkgKi9cbiAgQElucHV0KCkgbGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKiBDb25maWd1cmF0aW9uIHNlY3Rpb24gdGl0bGUgKi9cbiAgQElucHV0KCkgY29uZmlnVGl0bGUgPSAnQ29uZmlndXJhdGlvbic7XG5cbiAgLyoqIENvbmZpZ3VyYXRpb24gc2VjdGlvbnMgKGUuZy4gRXhlY3V0aW9uLCBBSSBDb25maWd1cmF0aW9uKSAqL1xuICBASW5wdXQoKSBjb25maWdTZWN0aW9uczogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdID0gW107XG5cbiAgLyoqIE9wdGlvbmFsIGNvbmZpZyBzZWN0aW9ucyBkaXNwbGF5ZWQgaW4gYSAyLWNvbHVtbiByb3cgKGUuZy4gV2FpdHMgJiBSZXRyaWVzLCBEZXZpY2UpICovXG4gIEBJbnB1dCgpIGNvbmZpZ1NlY3Rpb25zUm93MjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdID0gW107XG4gIC8qKiBQbGF0Zm9ybTogJ3dlYicgb3IgJ21vYmlsZScuIERlZmF1bHRzIHRvICd3ZWInLiBVc2VkIGZvciBEZXZpY2UgU2V0dGluZ3MgZmllbGRzLiAqL1xuICBASW5wdXQoKSBwbGF0Zm9ybTogJ3dlYicgfCAnbW9iaWxlJyA9ICd3ZWInO1xuXG4gIC8qKiBXaGVuIHRydWUsIGZpbHRlcnMgb3V0IFByaW9yaXR5IGFuZCBUeXBlIGZyb20gbWV0YWRhdGEgKHN0ZXAgZ3JvdXBzIGRvbid0IGhhdmUgdGhlc2UpLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgQElucHV0KCkgaXNTdGVwR3JvdXAgPSBmYWxzZTtcblxuICAvKiogT3ZlcnJpZGUgY29uZmlnIHBlciBzZWxlY3QgZm9yIEFQSS1kcml2ZW4gb3B0aW9ucywgc2VydmVyIHNlYXJjaCwgbG9hZCBtb3JlLiAqL1xuICBASW5wdXQoKSBzZWxlY3RDb25maWdPdmVycmlkZXM6IFNlbGVjdENvbmZpZ092ZXJyaWRlcyA9IHt9O1xuXG4gIC8qKiBMYWJlbHMgdG8gZmlsdGVyIG91dCBmcm9tIG1ldGFkYXRhIGZvciBzdGVwIGdyb3VwcyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN0ZXBHcm91cEV4Y2x1ZGVkTWV0YWRhdGFMYWJlbHMgPSBbJ3ByaW9yaXR5JywgJ3R5cGUnXTtcblxuICAvKiogRmlsdGVyZWQgbWV0YWRhdGEgaXRlbXMgLSBleGNsdWRlcyBQcmlvcml0eSBhbmQgVHlwZSBmb3Igc3RlcCBncm91cHMgKi9cbiAgZ2V0IGZpbHRlcmVkTWV0YWRhdGFJdGVtcygpOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW1bXSB7XG4gICAgaWYgKCF0aGlzLmlzU3RlcEdyb3VwKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUl0ZW1zLmZpbHRlcihcbiAgICAgIChpdGVtKSA9PiAhdGhpcy5zdGVwR3JvdXBFeGNsdWRlZE1ldGFkYXRhTGFiZWxzLmluY2x1ZGVzKGl0ZW0ubGFiZWw/LnRvTG93ZXJDYXNlKCkgPz8gJycpXG4gICAgKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBlZGl0RGVzY3JpcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzYXZlQ2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhPigpO1xuICBAT3V0cHV0KCkgbWV0YWRhdGFMaW5rQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0TG9hZE1vcmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHF1ZXJ5OiBzdHJpbmcgfT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdE9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZyB9PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9PigpO1xuICBAT3V0cHV0KCkgbGFiZWxBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIG9uRWRpdENsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVkaXRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZWRpdGluZyA9IHRydWU7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHRoaXMuZWRpdERlc2NyaXB0aW9uLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2F2ZUNoYW5nZXMoZGF0YTogVGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9lZGl0aW5nID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNhdmVDaGFuZ2VzLmVtaXQoZGF0YSk7XG4gIH1cblxuICBvbkNhbmNlbEVkaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgIGlmICh0aGlzLmVkaXRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZWRpdGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICB0cmFja0J5Q29uZmlnVGl0bGUoX2k6IG51bWJlciwgc2VjdGlvbjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlY3Rpb24udGl0bGU7XG4gIH1cblxuICB0cmFja0J5TWV0YWRhdGFMYWJlbChfaTogbnVtYmVyLCBpdGVtOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0pOiBzdHJpbmcge1xuICAgIHJldHVybiBpdGVtLmxhYmVsO1xuICB9XG5cblxuICBvbk1ldGFkYXRhTGlua0NsaWNrKGl0ZW06IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSk6IHZvaWQge1xuICAgIGlmIChpdGVtLmxpbmspIHtcbiAgICAgIHRoaXMubWV0YWRhdGFMaW5rQ2xpY2suZW1pdChpdGVtKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0dXNEb3RDbGFzcyhpdGVtOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0pOiBzdHJpbmcge1xuICAgIGlmICghaXRlbS5zdGF0dXNDb2xvcikgcmV0dXJuICcnO1xuICAgIHN3aXRjaCAoaXRlbS5zdGF0dXNDb2xvcikge1xuICAgICAgY2FzZSAneWVsbG93JzpcbiAgICAgICAgcmV0dXJuICdjcWEtYmctWyNFQUIzMDhdJztcbiAgICAgIGNhc2UgJ3JlZCc6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjREMyNjI2XSc7XG4gICAgICBjYXNlICdncmVlbic6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjMTZBMzRBXSc7XG4gICAgICBjYXNlICdncmF5JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnY3FhLWJnLVsjOTRBM0I4XSc7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRleHQgY29sb3IgZm9yIG1ldGFkYXRhIHZhbHVlIChlLmcuIHJlZCBmb3IgY3JpdGljYWwgcHJpb3JpdHkpICovXG4gIGdldFZhbHVlVGV4dENsYXNzKGl0ZW06IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSk6IHN0cmluZyB7XG4gICAgaWYgKGl0ZW0uc3RhdHVzQ29sb3IgPT09ICdyZWQnKSB7XG4gICAgICByZXR1cm4gJ2NxYS10ZXh0LVsjREMyNjI2XSc7XG4gICAgfVxuICAgIHJldHVybiAnY3FhLXRleHQtWyMxMTE4MjddJztcbiAgfVxufVxuIiwiPCEtLSBFZGl0IG1vZGU6IHNob3cgZWRpdCBmb3JtIChGaWdtYSBkZXNpZ24pIC0tPlxuPGNxYS10ZXN0LWNhc2UtZGV0YWlscy1lZGl0XG4gICpuZ0lmPVwiaXNFZGl0aW5nXCJcbiAgW2Rlc2NyaXB0aW9uVGl0bGVdPVwiZGVzY3JpcHRpb25UaXRsZVwiXG4gIFtkZXNjcmlwdGlvbkNvbnRlbnRdPVwiZGVzY3JpcHRpb25Db250ZW50XCJcbiAgW2VuYWJsZU1hcmtkb3duXT1cImVuYWJsZU1hcmtkb3duXCJcbiAgW21ldGFkYXRhSXRlbXNdPVwibWV0YWRhdGFJdGVtc1wiXG4gIFtsYWJlbHNdPVwibGFiZWxzXCJcbiAgW2NvbmZpZ1RpdGxlXT1cImNvbmZpZ1RpdGxlXCJcbiAgW2NvbmZpZ1NlY3Rpb25zXT1cImNvbmZpZ1NlY3Rpb25zXCJcbiAgW2NvbmZpZ1NlY3Rpb25zUm93Ml09XCJjb25maWdTZWN0aW9uc1JvdzJcIlxuICBbcGxhdGZvcm1dPVwicGxhdGZvcm1cIlxuICBbaXNTdGVwR3JvdXBdPVwiaXNTdGVwR3JvdXBcIlxuICBbc2VsZWN0Q29uZmlnT3ZlcnJpZGVzXT1cInNlbGVjdENvbmZpZ092ZXJyaWRlc1wiXG4gIChzYXZlKT1cIm9uU2F2ZUNoYW5nZXMoJGV2ZW50KVwiXG4gIChjYW5jZWwpPVwib25DYW5jZWxFZGl0KClcIlxuICAoc2VsZWN0U2VhcmNoKT1cInNlbGVjdFNlYXJjaC5lbWl0KCRldmVudClcIlxuICAoc2VsZWN0TG9hZE1vcmUpPVwic2VsZWN0TG9hZE1vcmUuZW1pdCgkZXZlbnQpXCJcbiAgKHNlbGVjdE9wZW5lZCk9XCJzZWxlY3RPcGVuZWQuZW1pdCgkZXZlbnQpXCJcbiAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgKGxhYmVsQWRkZWQpPVwibGFiZWxBZGRlZC5lbWl0KCRldmVudClcIj5cbjwvY3FhLXRlc3QtY2FzZS1kZXRhaWxzLWVkaXQ+XG5cbjwhLS0gVmlldyBtb2RlOiByZWFkLW9ubHkgZGV0YWlscyAtLT5cbjxkaXYgKm5nSWY9XCIhaXNFZGl0aW5nXCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1weS00IGNxYS1weC0wIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC00IGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdXCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC00IGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdXCI+XG4gICAgPCEtLSBEZXNjcmlwdGlvbiBTZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnQgY3FhLWdhcC0yLjVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjMUIxRkVCXSBjcWEtdGV4dC1bMTJweF0gY3FhLXctMyBjcWEtaC0zIGNxYS1sZWFkaW5nLW5vbmUgY3FhLWJsb2NrXCI+ZGVzY3JpcHRpb248L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdIGNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS1sZWFkaW5nLVsxOS42cHhdXCI+e3sgZGVzY3JpcHRpb25UaXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dFZGl0QnV0dG9uXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1qdXN0aWZ5LWVuZCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtdGV4dC1bI0EzQTNBM10gY3FhLXRleHQteHMgY3FhLWZvbnQtc2VtaWJvbGQgaG92ZXI6Y3FhLXRleHQtWyM3MzczNzNdIGNxYS10cmFuc2l0aW9uLWNvbG9ycyBmb2N1czpjcWEtb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Y3FhLXJpbmctMiBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLVsjM0Y0M0VFXSBmb2N1cy12aXNpYmxlOmNxYS1yaW5nLW9mZnNldC0yXCJcbiAgICAgICAgICAoY2xpY2spPVwib25FZGl0Q2xpY2soKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdy00IGNxYS1oLTRcIj5lZGl0PC9tYXQtaWNvbj5cbiAgICAgICAgICBFZGl0XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiZGVzY3JpcHRpb25Db250ZW50XCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtanVzdGlmeS1zdGFydCBjcWEtaXRlbXMtc3RhcnRcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImVuYWJsZU1hcmtkb3duXCIgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS10ZXh0LVsjMTExODI3XSBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXByb3NlIGNxYS1wcm9zZS1zbSBjcWEtbWF4LXctbm9uZVwiIFtpbm5lckhUTUxdPVwiZGVzY3JpcHRpb25Db250ZW50XCI+PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZW5hYmxlTWFya2Rvd25cIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLXRleHQtWyMxMTE4MjddIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW5vcm1hbFwiPnt7IGRlc2NyaXB0aW9uQ29udGVudCB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE1ldGFkYXRhIFNlY3Rpb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cImZpbHRlcmVkTWV0YWRhdGFJdGVtcy5sZW5ndGhcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIuNVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWdyaWQgY3FhLWdyaWQtY29scy0yIGNxYS1nYXAteC0wIGNxYS1nYXAteS00XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRNZXRhZGF0YUl0ZW1zOyB0cmFja0J5OiB0cmFja0J5TWV0YWRhdGFMYWJlbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWp1c3RpZnktc3RhcnQgY3FhLWl0ZW1zLXN0YXJ0IGNxYS1nYXAtMC41XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXhzIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW1cIj57eyBpdGVtLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktc3RhcnQgY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLVs1cHhdIGNxYS1taW4tdy0wIGNxYS13LWZ1bGwgY3FhLXRleHQtbGVmdCBjcWEtdGV4dC1bIzBBMEEwQV0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRjVGNUY1XVwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpdGVtLmljb24gJiYgKCFpdGVtLmljb25MaWJyYXJ5IHx8IGl0ZW0uaWNvbkxpYnJhcnkgPT09ICdtYXQnKVwiIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXNtIGNxYS13LTQgY3FhLWgtNFwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uaWNvbiB9fVxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc3RhdHVzQ29sb3JcIiBjbGFzcz1cImNxYS13LTMuNSBjcWEtaC0zLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZmxleC1zaHJpbmstMFwiIFtuZ0NsYXNzXT1cImdldFN0YXR1c0RvdENsYXNzKGl0ZW0pXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5saW5rXCJcbiAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS10ZXh0LVsjMjU2M0VCXSBjcWEtdGV4dC14cyBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWZvbnQtbm9ybWFsIGhvdmVyOmNxYS11bmRlcmxpbmUgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1ibG9jayBjcWEtdHJ1bmNhdGUgY3FhLW1pbi13LTBcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1ldGFkYXRhTGlua0NsaWNrKGl0ZW0pOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0udmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpdGVtLmxpbmtcIiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS1sZWFkaW5nLVsxMnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLWFsaWduLW1pZGRsZVwiIFtuZ0NsYXNzXT1cImdldFZhbHVlVGV4dENsYXNzKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTGFiZWxzIChGaWdtYTogTGFiZWxzIHRpdGxlLCBjcWEtYmFkZ2UgY2hpcHMgd2l0aCB0YWcgaWNvbikgLS0+XG4gICAgPGRpdiAqbmdJZj1cImxhYmVscy5sZW5ndGhcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIgY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF1cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMxMTE4MjddIGNxYS10ZXh0LXNtIGNxYS1mb250LW1lZGl1bSBjcWEtbGVhZGluZy01XCI+TGFiZWxzPC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0yXCI+XG4gICAgICAgIDxjcWEtYmFkZ2VcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFiZWwgb2YgbGFiZWxzXCJcbiAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgIGljb249XCJsYWJlbFwiXG4gICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yPVwiI2ZmZmZmZlwiXG4gICAgICAgICAgdGV4dENvbG9yPVwiIzQ3NTU2OVwiXG4gICAgICAgICAgYm9yZGVyQ29sb3I9XCIjRTJFOEYwXCJcbiAgICAgICAgICBpY29uQ29sb3I9XCIjOTRBM0I4XCI+XG4gICAgICAgIDwvY3FhLWJhZGdlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvbmZpZ3VyYXRpb24gU2VjdGlvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnU2VjdGlvbnMubGVuZ3RoIHx8IGNvbmZpZ1NlY3Rpb25zUm93Mi5sZW5ndGhcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTIuNVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LXN0YXJ0IGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjMUIxRkVCXSBjcWEtdGV4dC1bMTJweF0gY3FhLXctMyBjcWEtaC0zIGNxYS1sZWFkaW5nLW5vbmUgY3FhLWJsb2NrXCI+c2V0dGluZ3M8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdIGNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS1sZWFkaW5nLVsxOS42cHhdXCI+e3sgY29uZmlnVGl0bGUgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWp1c3RpZnktc3RhcnQgY3FhLWl0ZW1zLXN0YXJ0IGNxYS1nYXAtMi41XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1ncmlkIGNxYS1ncmlkLWNvbHMtMSBjcWEtZ2FwLTIuNVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgY29uZmlnU2VjdGlvbnM7IHRyYWNrQnk6IHRyYWNrQnlDb25maWdUaXRsZVwiPlxuICAgICAgICAgICAgPGNxYS1jb25maWd1cmF0aW9uLWNhcmRcbiAgICAgICAgICAgICAgW2ljb25dPVwic2VjdGlvbi5pY29uIHx8ICd0dW5lJ1wiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJzZWN0aW9uLnRpdGxlXCJcbiAgICAgICAgICAgICAgW2RhdGFdPVwic2VjdGlvbi5pdGVtc1wiPlxuICAgICAgICAgICAgPC9jcWEtY29uZmlndXJhdGlvbi1jYXJkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZ1NlY3Rpb25zUm93Mi5sZW5ndGhcIiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XVwiPlxuICAgICAgICAgIDxjcWEtY29uZmlndXJhdGlvbi1jYXJkXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBjb25maWdTZWN0aW9uc1JvdzI7IHRyYWNrQnk6IHRyYWNrQnlDb25maWdUaXRsZVwiXG4gICAgICAgICAgICBbaWNvbl09XCJzZWN0aW9uLmljb24gfHwgJ3R1bmUnXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJzZWN0aW9uLnRpdGxlXCJcbiAgICAgICAgICAgIFtkYXRhXT1cInNlY3Rpb24uaXRlbXNcIj5cbiAgICAgICAgICA8L2NxYS1jb25maWd1cmF0aW9uLWNhcmQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -96,27 +96,31 @@ export function buildTestCaseDetailsFromApi(data, options) {
96
96
  metadataItems.push({ label: 'Status', value: data.status, statusColor: resolveColor(data.status, statusConfig) });
97
97
  if (data.priority != null)
98
98
  metadataItems.push({ label: 'Priority', value: data.priority, statusColor: resolveColor(data.priority, priorityConfig) });
99
- if (data.type != null)
100
- metadataItems.push({ label: 'Type', value: data.type, icon: 'category' });
101
99
  if (data.environment != null)
102
100
  metadataItems.push({ label: 'Environment', value: data.environment, icon: 'storage' });
103
101
  if (data.version != null)
104
102
  metadataItems.push({ label: 'Version', value: data.version, icon: 'label' });
105
- if (data.platform != null)
103
+ if (data.platform != null) {
104
+ const platformVal = String(data.platform).trim();
105
+ const displayPlatform = platformVal === 'web' || platformVal === 'mobile'
106
+ ? platformVal
107
+ : /^(android|ios|mobile\s*app|devices)$/i.test(platformVal)
108
+ ? 'mobile'
109
+ : 'web';
106
110
  metadataItems.push({
107
111
  label: 'Platform',
108
- value: data.platform === 'web' ? 'web' : 'iOS',
112
+ value: displayPlatform,
109
113
  icon: 'devices',
110
114
  });
115
+ }
111
116
  const configSections = [
112
117
  {
113
118
  title: 'Execution',
114
119
  icon: 'play_circle',
115
120
  items: [
116
- { label: 'Prerequisite Case', value: data.prerequisiteCase ?? null },
117
- { label: 'Type', value: data.typeId ?? data.type ?? null },
118
- { label: 'Test Data Profile', value: data.testDataProfileId ?? data.testDataProfile ?? null },
119
- { label: 'Test Data Set', value: data.testDataSetIndex ?? data.testDataSet ?? null },
121
+ { label: 'Type', value: data.type ?? data.typeId ?? null },
122
+ { label: 'Test Data Profile', value: data.testDataProfile ?? data.testDataProfileId ?? null },
123
+ { label: 'Test Data Set', value: data.testDataSet ?? data.testDataSetIndex ?? null },
120
124
  { label: 'Video Recording', value: data.videoRecording ?? '' },
121
125
  ],
122
126
  },
@@ -169,11 +173,17 @@ export function buildTestCaseDetailsFromApi(data, options) {
169
173
  ],
170
174
  },
171
175
  ];
176
+ // Hide Device Setting for mobile unless showDeviceSettingForMobile is true
177
+ const isMobile = data.platform === 'mobile' || data.mobileTesting === true;
178
+ const hideDeviceSettingForMobile = isMobile && !options?.showDeviceSettingForMobile;
179
+ const filteredConfigSectionsRow2 = hideDeviceSettingForMobile
180
+ ? configSectionsRow2.filter((s) => s.title !== 'Device Setting')
181
+ : configSectionsRow2;
172
182
  return {
173
183
  metadataItems,
174
184
  labels: data.labels ?? [],
175
185
  configSections,
176
- configSectionsRow2,
186
+ configSectionsRow2: filteredConfigSectionsRow2,
177
187
  };
178
188
  }
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFlBQVksTUFBTSxRQUFRLENBQUM7QUFHdkMsTUFBTSxNQUFNLEdBQUksWUFBb0IsQ0FBQyxPQUFPLElBQUssWUFBb0IsQ0FBQztBQXNCdEUsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFtQztJQUN6RSxNQUFNLEVBQUUsT0FBTztJQUNmLFFBQVEsRUFBRSxNQUFNO0lBQ2hCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLEtBQUssRUFBRSxNQUFNO0lBQ2IsUUFBUSxFQUFFLE9BQU87SUFDakIsUUFBUSxFQUFFLEtBQUs7SUFDZixPQUFPLEVBQUUsS0FBSztJQUNkLGFBQWEsRUFBRSxRQUFRO0lBQ3ZCLElBQUksRUFBRSxPQUFPO0NBQ2QsQ0FBQztBQUVGLHFGQUFxRjtBQUNyRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBbUM7SUFDM0UsUUFBUSxFQUFFLEtBQUs7SUFDZixLQUFLLEVBQUUsS0FBSztJQUNaLElBQUksRUFBRSxLQUFLO0lBQ1gsTUFBTSxFQUFFLFFBQVE7SUFDaEIsR0FBRyxFQUFFLE9BQU87SUFDWixLQUFLLEVBQUUsT0FBTztJQUNkLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLEVBQUUsRUFBRSxLQUFLO0lBQ1QsRUFBRSxFQUFFLFFBQVE7SUFDWixFQUFFLEVBQUUsT0FBTztJQUNYLEVBQUUsRUFBRSxNQUFNO0NBQ1gsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHO0lBQ3pDLHFDQUFxQztJQUNyQyxRQUFRLEVBQUU7UUFD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LENBQUMsYUFBYSxJQUFJLEVBQUUsRUFBRTtnQkFDNUQsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsRUFBRTtnQkFDMUQsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRTthQUN2RDtTQUNGO0tBQ0YsQ0FBQztJQUVGLE9BQU87UUFDTCxhQUFhO1FBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtRQUN6QixjQUFjO1FBQ2Qsa0JBQWtCO0tBQ25CLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9tZW50SW1wb3J0IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uSXRlbSB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb24tY2FyZC9jb25maWd1cmF0aW9uLWNhcmQuY29tcG9uZW50JztcblxuY29uc3QgbW9tZW50ID0gKG1vbWVudEltcG9ydCBhcyBhbnkpLmRlZmF1bHQgfHwgKG1vbWVudEltcG9ydCBhcyBhbnkpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb24ge1xuICB0aXRsZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBpdGVtczogQ29uZmlndXJhdGlvbkl0ZW1bXTtcbn1cblxuZXhwb3J0IHR5cGUgU3RhdHVzRG90Q29sb3IgPSAneWVsbG93JyB8ICdyZWQnIHwgJ2dyZWVuJyB8ICdncmF5JztcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBpY29uTGlicmFyeT86ICdtYXQnIHwgJ2ZhJztcbiAgbGluaz86IHN0cmluZztcbiAgc3RhdHVzQ29sb3I/OiBTdGF0dXNEb3RDb2xvcjtcbn1cblxuLyoqIE1hcHMgc3RhdHVzL3ByaW9yaXR5IHZhbHVlIChsb3dlcmNhc2UpIHRvIGRvdCBjb2xvci4gT3ZlcnJpZGUgdG8gY3VzdG9taXplLiAqL1xuZXhwb3J0IHR5cGUgU3RhdHVzQ29sb3JDb25maWcgPSBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIFN0YXR1c0RvdENvbG9yPj47XG5cbi8qKiBEZWZhdWx0IHN0YXR1cyB2YWx1ZSAtPiBkb3QgY29sb3IuIE92ZXJyaWRlIHZpYSBCdWlsZFRlc3RDYXNlRGV0YWlsc09wdGlvbnMuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TVEFUVVNfQ09MT1JfQ09ORklHOiBSZWNvcmQ8c3RyaW5nLCBTdGF0dXNEb3RDb2xvcj4gPSB7XG4gIGFjdGl2ZTogJ2dyZWVuJyxcbiAgaW5hY3RpdmU6ICdncmF5JyxcbiAgcGVuZGluZzogJ3llbGxvdycsXG4gIGNvbXBsZXRlZDogJ2dyZWVuJyxcbiAgJ2luIHJldmlldyc6ICd5ZWxsb3cnLFxuICBkcmFmdDogJ2dyYXknLFxuICBhcHByb3ZlZDogJ2dyZWVuJyxcbiAgcmVqZWN0ZWQ6ICdyZWQnLFxuICBibG9ja2VkOiAncmVkJyxcbiAgJ2luIHByb2dyZXNzJzogJ3llbGxvdycsXG4gIGRvbmU6ICdncmVlbicsXG59O1xuXG4vKiogRGVmYXVsdCBwcmlvcml0eSB2YWx1ZSAtPiBkb3QgY29sb3IuIE92ZXJyaWRlIHZpYSBCdWlsZFRlc3RDYXNlRGV0YWlsc09wdGlvbnMuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QUklPUklUWV9DT0xPUl9DT05GSUc6IFJlY29yZDxzdHJpbmcsIFN0YXR1c0RvdENvbG9yPiA9IHtcbiAgY3JpdGljYWw6ICdyZWQnLFxuICBtYWpvcjogJ3JlZCcsXG4gIGhpZ2g6ICdyZWQnLFxuICBtZWRpdW06ICd5ZWxsb3cnLFxuICBsb3c6ICdncmVlbicsXG4gIG1pbm9yOiAnZ3JlZW4nLFxuICAnbm90IHNldCc6ICdncmF5JyxcbiAgcDA6ICdyZWQnLFxuICBwMTogJ3llbGxvdycsXG4gIHAyOiAnZ3JlZW4nLFxuICBwMzogJ2dyYXknLFxufTtcblxuLyoqXG4gKiBBUEkgZmllbGQgbmFtZXMgZm9yIG1hcHBpbmcgdGVzdCBjYXNlIGRhdGEgdG8gY3FhLXRlc3QtY2FzZS1kZXRhaWxzLlxuICogVXNlIHRoZXNlIHdoZW4gYnVpbGRpbmcgbWV0YWRhdGFJdGVtcyBhbmQgY29uZmlnU2VjdGlvbnMgZnJvbSB5b3VyIEFQSSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0FTRV9ERVRBSUxTX0ZJRUxEX01BUCA9IHtcbiAgLyoqIE1ldGFkYXRhIChkZXNjcmlwdGlvbiBzZWN0aW9uKSAqL1xuICBtZXRhZGF0YToge1xuICAgIGNyZWF0ZWRPbjogJ2NyZWF0ZWRPbicsXG4gICAgc3RhdHVzOiAnc3RhdHVzJyxcbiAgICBwcmlvcml0eTogJ3ByaW9yaXR5JyxcbiAgICBlbnZpcm9ubWVudDogJ2Vudmlyb25tZW50JyxcbiAgICB2ZXJzaW9uOiAndmVyc2lvbicsXG4gICAgcGxhdGZvcm06ICdwbGF0Zm9ybScsXG4gICAgbGFiZWxzOiAnbGFiZWxzJyxcbiAgfSxcbiAgLyoqIEV4ZWN1dGlvbiBjb25maWcgKi9cbiAgZXhlY3V0aW9uOiB7XG4gICAgcHJlcmVxdWlzaXRlQ2FzZTogJ3ByZXJlcXVpc2l0ZUNhc2UnLFxuICAgIGRlZmF1bHRCcm93c2VyOiAnZGVmYXVsdEJyb3dzZXInLFxuICAgIHZpZGVvUmVjb3JkaW5nOiAndmlkZW9SZWNvcmRpbmcnLFxuICAgIHRlc3RDYXNlVGltZW91dDogJ3Rlc3RDYXNlVGltZW91dCcsXG4gICAgd2FpdFRpbWVvdXRGb3JMb2NhdG9yczogJ3dhaXRUaW1lb3V0Rm9yTG9jYXRvcnMnLFxuICAgIHdlYkJyb3dzZXI6ICd3ZWJCcm93c2VyJyxcbiAgICB2aWV3cG9ydDogJ3ZpZXdwb3J0JyxcbiAgfSxcbiAgLyoqIEFJIENvbmZpZ3VyYXRpb24gKi9cbiAgYWlDb25maWc6IHtcbiAgICBlbmFibGVBaVNtYXJ0bmVzczogJ2VuYWJsZUFpU21hcnRuZXNzJyxcbiAgICBkZWZhdWx0QWlBY3Rpb246ICdkZWZhdWx0QWlBY3Rpb24nLFxuICAgIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U6ICdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJyxcbiAgICB1c2VBaU1ldGFkYXRhOiAndXNlQWlNZXRhZGF0YScsXG4gIH0sXG4gIC8qKiBXYWl0cyAmIFJldHJpZXMgKi9cbiAgd2FpdHNSZXRyaWVzOiB7XG4gICAgYXV0b1dhaXQ6ICdhdXRvV2FpdCcsXG4gICAgcmV0cnlGYWlsZWRTdGVwczogJ3JldHJ5RmFpbGVkU3RlcHMnLFxuICB9LFxuICAvKiogRGV2aWNlICovXG4gIGRldmljZToge1xuICAgIHBsYXRmb3JtOiAncGxhdGZvcm0nLFxuICAgIGRldmljZVR5cGU6ICdkZXZpY2VUeXBlJyxcbiAgICBkZXZpY2VPUzogJ2RldmljZU9TJyxcbiAgICBkZWZhdWx0QnJvd3NlcjogJ2RlZmF1bHRCcm93c2VyJyxcbiAgICBkZWZhdWx0Vmlld3BvcnQ6ICdkZWZhdWx0Vmlld3BvcnQnLFxuICAgIHZpZXdwb3J0OiAndmlld3BvcnQnLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqIEFQSSByZXNwb25zZSBzaGFwZSBmb3IgdGVzdCBjYXNlIGRldGFpbHMuIE1hcCB5b3VyIEFQSSBmaWVsZHMgdG8gdGhpcyBzdHJ1Y3R1cmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDYXNlRGV0YWlsc0FwaURhdGEge1xuICBjcmVhdGVkT24/OiBzdHJpbmcgfCBEYXRlO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHByaW9yaXR5Pzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICB0eXBlSWQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICB0ZXN0UGxhbk5hbWU/OiBzdHJpbmc7XG4gIHRlc3RQbGFuUmVkaXJlY3RVcmw/OiBzdHJpbmc7XG4gIGxhYmVscz86IHN0cmluZ1tdO1xuICBwcmVyZXF1aXNpdGVDYXNlPzogc3RyaW5nIHwgbnVsbDtcbiAgdGVzdERhdGFQcm9maWxlPzogc3RyaW5nIHwgbnVsbDtcbiAgdGVzdERhdGFQcm9maWxlSWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsO1xuICB0ZXN0RGF0YVNldD86IHN0cmluZyB8IG51bGw7XG4gIHRlc3REYXRhU2V0SW5kZXg/OiBudW1iZXIgfCBudWxsO1xuICBkZWZhdWx0QnJvd3Nlcj86IHN0cmluZztcbiAgdmlkZW9SZWNvcmRpbmc/OiBib29sZWFuIHwgc3RyaW5nO1xuICB0ZXN0Q2FzZVRpbWVvdXQ/OiBzdHJpbmc7XG4gIHdhaXRUaW1lb3V0Rm9yTG9jYXRvcnM/OiBzdHJpbmc7XG4gIHdlYkJyb3dzZXI/OiBzdHJpbmc7XG4gIHZpZXdwb3J0Pzogc3RyaW5nO1xuICBlbmFibGVBaVNtYXJ0bmVzcz86IHN0cmluZztcbiAgZGVmYXVsdEFpQWN0aW9uPzogc3RyaW5nO1xuICBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlPzogc3RyaW5nIHwgbnVsbDtcbiAgdXNlQWlNZXRhZGF0YT86IHN0cmluZztcbiAgYXV0b1dhaXQ/OiBzdHJpbmc7XG4gIGF1dG9XYWl0RW5hYmxlZD86IGJvb2xlYW47XG4gIHJldHJ5RmFpbGVkU3RlcHM/OiBzdHJpbmc7XG4gIHBsYXRmb3JtPzogJ3dlYicgfCAnbW9iaWxlJztcbiAgZGV2aWNlVHlwZT86IHN0cmluZztcbiAgZGV2aWNlT1M/OiBzdHJpbmc7XG4gIGRlZmF1bHRWaWV3cG9ydD86IHN0cmluZztcbiAgLyoqIEtleSBGbGFncyAqL1xuICBtb2JpbGVUZXN0aW5nPzogc3RyaW5nIHwgYm9vbGVhbjtcbiAgZXh0ZW5zaW9uVXNlPzogc3RyaW5nIHwgYm9vbGVhbjtcbiAgZGF0YURyaXZlbj86IHN0cmluZyB8IGJvb2xlYW47XG59XG5cbi8qKiBPcHRpb25zIGZvciBidWlsZFRlc3RDYXNlRGV0YWlsc0Zyb21BcGkgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRUZXN0Q2FzZURldGFpbHNPcHRpb25zIHtcbiAgLyoqIE92ZXJyaWRlIHN0YXR1cyB2YWx1ZSAtPiBkb3QgY29sb3IuIE1lcmdlZCB3aXRoIGRlZmF1bHRzLiAqL1xuICBzdGF0dXNDb2xvckNvbmZpZz86IFN0YXR1c0NvbG9yQ29uZmlnO1xuICAvKiogT3ZlcnJpZGUgcHJpb3JpdHkgdmFsdWUgLT4gZG90IGNvbG9yLiBNZXJnZWQgd2l0aCBkZWZhdWx0cy4gKi9cbiAgcHJpb3JpdHlDb2xvckNvbmZpZz86IFN0YXR1c0NvbG9yQ29uZmlnO1xufVxuXG4vKipcbiAqIEJ1aWxkIG1ldGFkYXRhSXRlbXMgYW5kIGNvbmZpZ1NlY3Rpb25zIGZyb20gQVBJIGRhdGEgZm9yIGNxYS10ZXN0LWNhc2UtZGV0YWlscy5cbiAqIFVzZSBpbiB0cy1wb3J0YWwgd2hlbiBtYXBwaW5nIHRlc3QgY2FzZSBBUEkgcmVzcG9uc2UgdG8gY29tcG9uZW50IGlucHV0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVGVzdENhc2VEZXRhaWxzRnJvbUFwaShcbiAgZGF0YTogVGVzdENhc2VEZXRhaWxzQXBpRGF0YSxcbiAgb3B0aW9ucz86IEJ1aWxkVGVzdENhc2VEZXRhaWxzT3B0aW9uc1xuKToge1xuICBtZXRhZGF0YUl0ZW1zOiBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW1bXTtcbiAgbGFiZWxzOiBzdHJpbmdbXTtcbiAgY29uZmlnU2VjdGlvbnM6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXTtcbiAgY29uZmlnU2VjdGlvbnNSb3cyOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW107XG59IHtcbiAgY29uc3QgZm9ybWF0RGF0ZSA9ICh2OiBzdHJpbmcgfCBEYXRlIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIXYpIHJldHVybiAnJztcbiAgICBjb25zdCBtID0gbW9tZW50KHYpO1xuICAgIHJldHVybiBtLmlzVmFsaWQoKSA/IG0uZm9ybWF0KCdNTU0gRCwgWVlZWSBoOm1tIEEnKSA6IFN0cmluZyh2KTtcbiAgfTtcblxuICBjb25zdCBzdGF0dXNDb25maWcgPSB7IC4uLkRFRkFVTFRfU1RBVFVTX0NPTE9SX0NPTkZJRywgLi4ub3B0aW9ucz8uc3RhdHVzQ29sb3JDb25maWcgfTtcbiAgY29uc3QgcHJpb3JpdHlDb25maWcgPSB7IC4uLkRFRkFVTFRfUFJJT1JJVFlfQ09MT1JfQ09ORklHLCAuLi5vcHRpb25zPy5wcmlvcml0eUNvbG9yQ29uZmlnIH07XG4gIGNvbnN0IHJlc29sdmVDb2xvciA9ICh2YWx1ZTogc3RyaW5nLCBjb25maWc6IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgU3RhdHVzRG90Q29sb3I+Pik6IFN0YXR1c0RvdENvbG9yID0+XG4gICAgY29uZmlnW3ZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpXSA/PyAnZ3JheSc7XG5cbiAgY29uc3QgbWV0YWRhdGFJdGVtczogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtW10gPSBbXTtcbiAgaWYgKGRhdGEuY3JlYXRlZE9uICE9IG51bGwpXG4gICAgbWV0YWRhdGFJdGVtcy5wdXNoKHsgbGFiZWw6ICdDcmVhdGVkIG9uJywgdmFsdWU6IGZvcm1hdERhdGUoZGF0YS5jcmVhdGVkT24pLCBpY29uOiAnY2FsZW5kYXJfdG9kYXknIH0pO1xuICBpZiAoZGF0YS5zdGF0dXMgIT0gbnVsbClcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goeyBsYWJlbDogJ1N0YXR1cycsIHZhbHVlOiBkYXRhLnN0YXR1cywgc3RhdHVzQ29sb3I6IHJlc29sdmVDb2xvcihkYXRhLnN0YXR1cywgc3RhdHVzQ29uZmlnKSB9KTtcbiAgaWYgKGRhdGEucHJpb3JpdHkgIT0gbnVsbClcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goeyBsYWJlbDogJ1ByaW9yaXR5JywgdmFsdWU6IGRhdGEucHJpb3JpdHksIHN0YXR1c0NvbG9yOiByZXNvbHZlQ29sb3IoZGF0YS5wcmlvcml0eSwgcHJpb3JpdHlDb25maWcpIH0pO1xuICBpZiAoZGF0YS50eXBlICE9IG51bGwpXG4gICAgbWV0YWRhdGFJdGVtcy5wdXNoKHsgbGFiZWw6ICdUeXBlJywgdmFsdWU6IGRhdGEudHlwZSwgaWNvbjogJ2NhdGVnb3J5JyB9KTtcbiAgaWYgKGRhdGEuZW52aXJvbm1lbnQgIT0gbnVsbClcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goeyBsYWJlbDogJ0Vudmlyb25tZW50JywgdmFsdWU6IGRhdGEuZW52aXJvbm1lbnQsIGljb246ICdzdG9yYWdlJyB9KTtcbiAgaWYgKGRhdGEudmVyc2lvbiAhPSBudWxsKVxuICAgIG1ldGFkYXRhSXRlbXMucHVzaCh7IGxhYmVsOiAnVmVyc2lvbicsIHZhbHVlOiBkYXRhLnZlcnNpb24sIGljb246ICdsYWJlbCcgfSk7XG4gIGlmIChkYXRhLnBsYXRmb3JtICE9IG51bGwpXG4gICAgbWV0YWRhdGFJdGVtcy5wdXNoKHtcbiAgICAgIGxhYmVsOiAnUGxhdGZvcm0nLFxuICAgICAgdmFsdWU6IGRhdGEucGxhdGZvcm0gPT09ICd3ZWInID8gJ3dlYicgOiAnaU9TJyxcbiAgICAgIGljb246ICdkZXZpY2VzJyxcbiAgICB9KTtcblxuICBjb25zdCBjb25maWdTZWN0aW9uczogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdID0gW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnRXhlY3V0aW9uJyxcbiAgICAgIGljb246ICdwbGF5X2NpcmNsZScsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7IGxhYmVsOiAnUHJlcmVxdWlzaXRlIENhc2UnLCB2YWx1ZTogZGF0YS5wcmVyZXF1aXNpdGVDYXNlID8/IG51bGwgfSxcbiAgICAgICAgeyBsYWJlbDogJ1R5cGUnLCB2YWx1ZTogZGF0YS50eXBlSWQgPz8gZGF0YS50eXBlID8/IG51bGwgfSxcbiAgICAgICAgeyBsYWJlbDogJ1Rlc3QgRGF0YSBQcm9maWxlJywgdmFsdWU6IGRhdGEudGVzdERhdGFQcm9maWxlSWQgPz8gZGF0YS50ZXN0RGF0YVByb2ZpbGUgPz8gbnVsbCB9LFxuICAgICAgICB7IGxhYmVsOiAnVGVzdCBEYXRhIFNldCcsIHZhbHVlOiBkYXRhLnRlc3REYXRhU2V0SW5kZXggPz8gZGF0YS50ZXN0RGF0YVNldCA/PyBudWxsIH0sXG4gICAgICAgIHsgbGFiZWw6ICdWaWRlbyBSZWNvcmRpbmcnLCB2YWx1ZTogZGF0YS52aWRlb1JlY29yZGluZyA/PyAnJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQUkgQ29uZmlndXJhdGlvbicsXG4gICAgICBpY29uOiAnc21hcnRfdG95JyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdFbmFibGUgQUkgU21hcnRuZXNzJywgdmFsdWU6IGRhdGEuZW5hYmxlQWlTbWFydG5lc3MgPz8gJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgQUkgQWN0aW9uJywgdmFsdWU6IGRhdGEuZGVmYXVsdEFpQWN0aW9uID8/ICcnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdLbm93bGVkZ2UgQmFzZSBEZWZhdWx0IFRlc3QgQ2FzZScsIHZhbHVlOiBkYXRhLmtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UgPz8gbnVsbCB9LFxuICAgICAgICB7IGxhYmVsOiAnRW5hYmxlIEFJIG1ldGFkYXRhIGNvbGxlY3Rpb24nLCB2YWx1ZTogZGF0YS51c2VBaU1ldGFkYXRhID8/ICcnIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgY29uZmlnU2VjdGlvbnNSb3cyOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW10gPSBbXG4gICAge1xuICAgICAgdGl0bGU6ICdXYWl0IGFuZCByZXRyaWVzJyxcbiAgICAgIGljb246ICd0aW1lcicsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7IGxhYmVsOiAnRW5hYmxlIEF2b2lkIEF1dG8gd2FpdCBmb3Igc3RlcHMnLCB2YWx1ZTogZGF0YS5hdXRvV2FpdEVuYWJsZWQgPz8gZmFsc2UgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JldHJ5IEZhaWxlZCBTdGVwcycsIHZhbHVlOiBkYXRhLnJldHJ5RmFpbGVkU3RlcHMgPz8gJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScsIHZhbHVlOiBkYXRhLnRlc3RDYXNlVGltZW91dCA/PyAnJyB9LFxuICAgICAgICB7IGxhYmVsOiAnV2FpdCBUaW1lb3V0IGZvciBMb2NhdG9ycyAoc2VjcyknLCB2YWx1ZTogZGF0YS53YWl0VGltZW91dEZvckxvY2F0b3JzID8/ICcnIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdEZXZpY2UgU2V0dGluZycsXG4gICAgICBpY29uOiAnZGV2aWNlcycsXG4gICAgICBpdGVtczogKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSBkYXRhLnBsYXRmb3JtID8/ICd3ZWInO1xuICAgICAgICBpZiAocGxhdGZvcm0gPT09ICd3ZWInKSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IEJyb3dzZXInLCB2YWx1ZTogZGF0YS5kZWZhdWx0QnJvd3NlciA/PyBkYXRhLndlYkJyb3dzZXIgPz8gJycgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZpZXdwb3J0JywgdmFsdWU6IGRhdGEuZGVmYXVsdFZpZXdwb3J0ID8/IGRhdGEudmlld3BvcnQgPz8gJycgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgT1MnLCB2YWx1ZTogZGF0YS5kZXZpY2VPUyA/PyAnJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFBob25lJywgdmFsdWU6IGRhdGEuZGV2aWNlVHlwZSA/PyAnJyB9LFxuICAgICAgICBdO1xuICAgICAgfSkoKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnS2V5IEZsYWdzJyxcbiAgICAgIGljb246ICdmbGFnJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdNb2JpbGUgVGVzdGluZycsIHZhbHVlOiBkYXRhLm1vYmlsZVRlc3RpbmcgPz8gJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0V4dGVuc2lvbiBVc2UnLCB2YWx1ZTogZGF0YS5leHRlbnNpb25Vc2UgPz8gJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RhdGEgRHJpdmVuJywgdmFsdWU6IGRhdGEuZGF0YURyaXZlbiA/PyAnJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIHJldHVybiB7XG4gICAgbWV0YWRhdGFJdGVtcyxcbiAgICBsYWJlbHM6IGRhdGEubGFiZWxzID8/IFtdLFxuICAgIGNvbmZpZ1NlY3Rpb25zLFxuICAgIGNvbmZpZ1NlY3Rpb25zUm93MixcbiAgfTtcbn1cbiJdfQ==
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFlBQVksTUFBTSxRQUFRLENBQUM7QUFHdkMsTUFBTSxNQUFNLEdBQUksWUFBb0IsQ0FBQyxPQUFPLElBQUssWUFBb0IsQ0FBQztBQXNCdEUsbUZBQW1GO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFtQztJQUN6RSxNQUFNLEVBQUUsT0FBTztJQUNmLFFBQVEsRUFBRSxNQUFNO0lBQ2hCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLEtBQUssRUFBRSxNQUFNO0lBQ2IsUUFBUSxFQUFFLE9BQU87SUFDakIsUUFBUSxFQUFFLEtBQUs7SUFDZixPQUFPLEVBQUUsS0FBSztJQUNkLGFBQWEsRUFBRSxRQUFRO0lBQ3ZCLElBQUksRUFBRSxPQUFPO0NBQ2QsQ0FBQztBQUVGLHFGQUFxRjtBQUNyRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBbUM7SUFDM0UsUUFBUSxFQUFFLEtBQUs7SUFDZixLQUFLLEVBQUUsS0FBSztJQUNaLElBQUksRUFBRSxLQUFLO0lBQ1gsTUFBTSxFQUFFLFFBQVE7SUFDaEIsR0FBRyxFQUFFLE9BQU87SUFDWixLQUFLLEVBQUUsT0FBTztJQUNkLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLEVBQUUsRUFBRSxLQUFLO0lBQ1QsRUFBRSxFQUFFLFFBQVE7SUFDWixFQUFFLEVBQUUsT0FBTztJQUNYLEVBQUUsRUFBRSxNQUFNO0NBQ1gsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHO0lBQ3pDLHFDQUFxQztJQUNyQyxRQUFRLEVBQUU7UUFD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NUQsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsRUFBRTtnQkFDMUQsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRTthQUN2RDtTQUNGO0tBQ0YsQ0FBQztJQUVGLDJFQUEyRTtJQUMzRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQztJQUMzRSxNQUFNLDBCQUEwQixHQUFHLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSwwQkFBMEIsQ0FBQztJQUNwRixNQUFNLDBCQUEwQixHQUFHLDBCQUEwQjtRQUMzRCxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLGdCQUFnQixDQUFDO1FBQ2hFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztJQUV2QixPQUFPO1FBQ0wsYUFBYTtRQUNiLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUU7UUFDekIsY0FBYztRQUNkLGtCQUFrQixFQUFFLDBCQUEwQjtLQUMvQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG1vbWVudEltcG9ydCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkl0ZW0gfSBmcm9tICcuLi9jb25maWd1cmF0aW9uLWNhcmQvY29uZmlndXJhdGlvbi1jYXJkLmNvbXBvbmVudCc7XG5cbmNvbnN0IG1vbWVudCA9IChtb21lbnRJbXBvcnQgYXMgYW55KS5kZWZhdWx0IHx8IChtb21lbnRJbXBvcnQgYXMgYW55KTtcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgaXRlbXM6IENvbmZpZ3VyYXRpb25JdGVtW107XG59XG5cbmV4cG9ydCB0eXBlIFN0YXR1c0RvdENvbG9yID0gJ3llbGxvdycgfCAncmVkJyB8ICdncmVlbicgfCAnZ3JheSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgaWNvbkxpYnJhcnk/OiAnbWF0JyB8ICdmYSc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIHN0YXR1c0NvbG9yPzogU3RhdHVzRG90Q29sb3I7XG59XG5cbi8qKiBNYXBzIHN0YXR1cy9wcmlvcml0eSB2YWx1ZSAobG93ZXJjYXNlKSB0byBkb3QgY29sb3IuIE92ZXJyaWRlIHRvIGN1c3RvbWl6ZS4gKi9cbmV4cG9ydCB0eXBlIFN0YXR1c0NvbG9yQ29uZmlnID0gUGFydGlhbDxSZWNvcmQ8c3RyaW5nLCBTdGF0dXNEb3RDb2xvcj4+O1xuXG4vKiogRGVmYXVsdCBzdGF0dXMgdmFsdWUgLT4gZG90IGNvbG9yLiBPdmVycmlkZSB2aWEgQnVpbGRUZXN0Q2FzZURldGFpbHNPcHRpb25zLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1RBVFVTX0NPTE9SX0NPTkZJRzogUmVjb3JkPHN0cmluZywgU3RhdHVzRG90Q29sb3I+ID0ge1xuICBhY3RpdmU6ICdncmVlbicsXG4gIGluYWN0aXZlOiAnZ3JheScsXG4gIHBlbmRpbmc6ICd5ZWxsb3cnLFxuICBjb21wbGV0ZWQ6ICdncmVlbicsXG4gICdpbiByZXZpZXcnOiAneWVsbG93JyxcbiAgZHJhZnQ6ICdncmF5JyxcbiAgYXBwcm92ZWQ6ICdncmVlbicsXG4gIHJlamVjdGVkOiAncmVkJyxcbiAgYmxvY2tlZDogJ3JlZCcsXG4gICdpbiBwcm9ncmVzcyc6ICd5ZWxsb3cnLFxuICBkb25lOiAnZ3JlZW4nLFxufTtcblxuLyoqIERlZmF1bHQgcHJpb3JpdHkgdmFsdWUgLT4gZG90IGNvbG9yLiBPdmVycmlkZSB2aWEgQnVpbGRUZXN0Q2FzZURldGFpbHNPcHRpb25zLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUFJJT1JJVFlfQ09MT1JfQ09ORklHOiBSZWNvcmQ8c3RyaW5nLCBTdGF0dXNEb3RDb2xvcj4gPSB7XG4gIGNyaXRpY2FsOiAncmVkJyxcbiAgbWFqb3I6ICdyZWQnLFxuICBoaWdoOiAncmVkJyxcbiAgbWVkaXVtOiAneWVsbG93JyxcbiAgbG93OiAnZ3JlZW4nLFxuICBtaW5vcjogJ2dyZWVuJyxcbiAgJ25vdCBzZXQnOiAnZ3JheScsXG4gIHAwOiAncmVkJyxcbiAgcDE6ICd5ZWxsb3cnLFxuICBwMjogJ2dyZWVuJyxcbiAgcDM6ICdncmF5Jyxcbn07XG5cbi8qKlxuICogQVBJIGZpZWxkIG5hbWVzIGZvciBtYXBwaW5nIHRlc3QgY2FzZSBkYXRhIHRvIGNxYS10ZXN0LWNhc2UtZGV0YWlscy5cbiAqIFVzZSB0aGVzZSB3aGVuIGJ1aWxkaW5nIG1ldGFkYXRhSXRlbXMgYW5kIGNvbmZpZ1NlY3Rpb25zIGZyb20geW91ciBBUEkgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBURVNUX0NBU0VfREVUQUlMU19GSUVMRF9NQVAgPSB7XG4gIC8qKiBNZXRhZGF0YSAoZGVzY3JpcHRpb24gc2VjdGlvbikgKi9cbiAgbWV0YWRhdGE6IHtcbiAgICBjcmVhdGVkT246ICdjcmVhdGVkT24nLFxuICAgIHN0YXR1czogJ3N0YXR1cycsXG4gICAgcHJpb3JpdHk6ICdwcmlvcml0eScsXG4gICAgZW52aXJvbm1lbnQ6ICdlbnZpcm9ubWVudCcsXG4gICAgdmVyc2lvbjogJ3ZlcnNpb24nLFxuICAgIHBsYXRmb3JtOiAncGxhdGZvcm0nLFxuICAgIGxhYmVsczogJ2xhYmVscycsXG4gIH0sXG4gIC8qKiBFeGVjdXRpb24gY29uZmlnICovXG4gIGV4ZWN1dGlvbjoge1xuICAgIHByZXJlcXVpc2l0ZUNhc2U6ICdwcmVyZXF1aXNpdGVDYXNlJyxcbiAgICBkZWZhdWx0QnJvd3NlcjogJ2RlZmF1bHRCcm93c2VyJyxcbiAgICB2aWRlb1JlY29yZGluZzogJ3ZpZGVvUmVjb3JkaW5nJyxcbiAgICB0ZXN0Q2FzZVRpbWVvdXQ6ICd0ZXN0Q2FzZVRpbWVvdXQnLFxuICAgIHdhaXRUaW1lb3V0Rm9yTG9jYXRvcnM6ICd3YWl0VGltZW91dEZvckxvY2F0b3JzJyxcbiAgICB3ZWJCcm93c2VyOiAnd2ViQnJvd3NlcicsXG4gICAgdmlld3BvcnQ6ICd2aWV3cG9ydCcsXG4gIH0sXG4gIC8qKiBBSSBDb25maWd1cmF0aW9uICovXG4gIGFpQ29uZmlnOiB7XG4gICAgZW5hYmxlQWlTbWFydG5lc3M6ICdlbmFibGVBaVNtYXJ0bmVzcycsXG4gICAgZGVmYXVsdEFpQWN0aW9uOiAnZGVmYXVsdEFpQWN0aW9uJyxcbiAgICBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlOiAna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZScsXG4gICAgdXNlQWlNZXRhZGF0YTogJ3VzZUFpTWV0YWRhdGEnLFxuICB9LFxuICAvKiogV2FpdHMgJiBSZXRyaWVzICovXG4gIHdhaXRzUmV0cmllczoge1xuICAgIGF1dG9XYWl0OiAnYXV0b1dhaXQnLFxuICAgIHJldHJ5RmFpbGVkU3RlcHM6ICdyZXRyeUZhaWxlZFN0ZXBzJyxcbiAgfSxcbiAgLyoqIERldmljZSAqL1xuICBkZXZpY2U6IHtcbiAgICBwbGF0Zm9ybTogJ3BsYXRmb3JtJyxcbiAgICBkZXZpY2VUeXBlOiAnZGV2aWNlVHlwZScsXG4gICAgZGV2aWNlT1M6ICdkZXZpY2VPUycsXG4gICAgZGVmYXVsdEJyb3dzZXI6ICdkZWZhdWx0QnJvd3NlcicsXG4gICAgZGVmYXVsdFZpZXdwb3J0OiAnZGVmYXVsdFZpZXdwb3J0JyxcbiAgICB2aWV3cG9ydDogJ3ZpZXdwb3J0JyxcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbi8qKiBBUEkgcmVzcG9uc2Ugc2hhcGUgZm9yIHRlc3QgY2FzZSBkZXRhaWxzLiBNYXAgeW91ciBBUEkgZmllbGRzIHRvIHRoaXMgc3RydWN0dXJlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZURldGFpbHNBcGlEYXRhIHtcbiAgY3JlYXRlZE9uPzogc3RyaW5nIHwgRGF0ZTtcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBwcmlvcml0eT86IHN0cmluZztcbiAgdHlwZT86IHN0cmluZztcbiAgdHlwZUlkPzogbnVtYmVyIHwgc3RyaW5nO1xuICBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgdGVzdFBsYW5OYW1lPzogc3RyaW5nO1xuICB0ZXN0UGxhblJlZGlyZWN0VXJsPzogc3RyaW5nO1xuICBsYWJlbHM/OiBzdHJpbmdbXTtcbiAgcHJlcmVxdWlzaXRlQ2FzZT86IHN0cmluZyB8IG51bGw7XG4gIHRlc3REYXRhUHJvZmlsZT86IHN0cmluZyB8IG51bGw7XG4gIHRlc3REYXRhUHJvZmlsZUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgdGVzdERhdGFTZXQ/OiBzdHJpbmcgfCBudWxsO1xuICB0ZXN0RGF0YVNldEluZGV4PzogbnVtYmVyIHwgbnVsbDtcbiAgZGVmYXVsdEJyb3dzZXI/OiBzdHJpbmc7XG4gIHZpZGVvUmVjb3JkaW5nPzogYm9vbGVhbiB8IHN0cmluZztcbiAgdGVzdENhc2VUaW1lb3V0Pzogc3RyaW5nO1xuICB3YWl0VGltZW91dEZvckxvY2F0b3JzPzogc3RyaW5nO1xuICB3ZWJCcm93c2VyPzogc3RyaW5nO1xuICB2aWV3cG9ydD86IHN0cmluZztcbiAgZW5hYmxlQWlTbWFydG5lc3M/OiBzdHJpbmc7XG4gIGRlZmF1bHRBaUFjdGlvbj86IHN0cmluZztcbiAga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZT86IHN0cmluZyB8IG51bGw7XG4gIHVzZUFpTWV0YWRhdGE/OiBzdHJpbmc7XG4gIGF1dG9XYWl0Pzogc3RyaW5nO1xuICBhdXRvV2FpdEVuYWJsZWQ/OiBib29sZWFuO1xuICByZXRyeUZhaWxlZFN0ZXBzPzogc3RyaW5nO1xuICBwbGF0Zm9ybT86ICd3ZWInIHwgJ21vYmlsZSc7XG4gIGRldmljZVR5cGU/OiBzdHJpbmc7XG4gIGRldmljZU9TPzogc3RyaW5nO1xuICBkZWZhdWx0Vmlld3BvcnQ/OiBzdHJpbmc7XG4gIC8qKiBLZXkgRmxhZ3MgKi9cbiAgbW9iaWxlVGVzdGluZz86IHN0cmluZyB8IGJvb2xlYW47XG4gIGV4dGVuc2lvblVzZT86IHN0cmluZyB8IGJvb2xlYW47XG4gIGRhdGFEcml2ZW4/OiBzdHJpbmcgfCBib29sZWFuO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgYnVpbGRUZXN0Q2FzZURldGFpbHNGcm9tQXBpICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkVGVzdENhc2VEZXRhaWxzT3B0aW9ucyB7XG4gIC8qKiBPdmVycmlkZSBzdGF0dXMgdmFsdWUgLT4gZG90IGNvbG9yLiBNZXJnZWQgd2l0aCBkZWZhdWx0cy4gKi9cbiAgc3RhdHVzQ29sb3JDb25maWc/OiBTdGF0dXNDb2xvckNvbmZpZztcbiAgLyoqIE92ZXJyaWRlIHByaW9yaXR5IHZhbHVlIC0+IGRvdCBjb2xvci4gTWVyZ2VkIHdpdGggZGVmYXVsdHMuICovXG4gIHByaW9yaXR5Q29sb3JDb25maWc/OiBTdGF0dXNDb2xvckNvbmZpZztcbiAgLyoqIFdoZW4gdHJ1ZSwgaW5jbHVkZSBEZXZpY2UgU2V0dGluZyBzZWN0aW9uIGZvciBtb2JpbGUgdGVzdCBjYXNlcyAoZGVmYXVsdDogZmFsc2UgPSBoaWRkZW4gZm9yIG1vYmlsZSkuICovXG4gIHNob3dEZXZpY2VTZXR0aW5nRm9yTW9iaWxlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCdWlsZCBtZXRhZGF0YUl0ZW1zIGFuZCBjb25maWdTZWN0aW9ucyBmcm9tIEFQSSBkYXRhIGZvciBjcWEtdGVzdC1jYXNlLWRldGFpbHMuXG4gKiBVc2UgaW4gdHMtcG9ydGFsIHdoZW4gbWFwcGluZyB0ZXN0IGNhc2UgQVBJIHJlc3BvbnNlIHRvIGNvbXBvbmVudCBpbnB1dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRlc3RDYXNlRGV0YWlsc0Zyb21BcGkoXG4gIGRhdGE6IFRlc3RDYXNlRGV0YWlsc0FwaURhdGEsXG4gIG9wdGlvbnM/OiBCdWlsZFRlc3RDYXNlRGV0YWlsc09wdGlvbnNcbik6IHtcbiAgbWV0YWRhdGFJdGVtczogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtW107XG4gIGxhYmVsczogc3RyaW5nW107XG4gIGNvbmZpZ1NlY3Rpb25zOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW107XG4gIGNvbmZpZ1NlY3Rpb25zUm93MjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdO1xufSB7XG4gIGNvbnN0IGZvcm1hdERhdGUgPSAodjogc3RyaW5nIHwgRGF0ZSB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKCF2KSByZXR1cm4gJyc7XG4gICAgY29uc3QgbSA9IG1vbWVudCh2KTtcbiAgICByZXR1cm4gbS5pc1ZhbGlkKCkgPyBtLmZvcm1hdCgnTU1NIEQsIFlZWVkgaDptbSBBJykgOiBTdHJpbmcodik7XG4gIH07XG5cbiAgY29uc3Qgc3RhdHVzQ29uZmlnID0geyAuLi5ERUZBVUxUX1NUQVRVU19DT0xPUl9DT05GSUcsIC4uLm9wdGlvbnM/LnN0YXR1c0NvbG9yQ29uZmlnIH07XG4gIGNvbnN0IHByaW9yaXR5Q29uZmlnID0geyAuLi5ERUZBVUxUX1BSSU9SSVRZX0NPTE9SX0NPTkZJRywgLi4ub3B0aW9ucz8ucHJpb3JpdHlDb2xvckNvbmZpZyB9O1xuICBjb25zdCByZXNvbHZlQ29sb3IgPSAodmFsdWU6IHN0cmluZywgY29uZmlnOiBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIFN0YXR1c0RvdENvbG9yPj4pOiBTdGF0dXNEb3RDb2xvciA9PlxuICAgIGNvbmZpZ1t2YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKV0gPz8gJ2dyYXknO1xuXG4gIGNvbnN0IG1ldGFkYXRhSXRlbXM6IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbVtdID0gW107XG4gIGlmIChkYXRhLmNyZWF0ZWRPbiAhPSBudWxsKVxuICAgIG1ldGFkYXRhSXRlbXMucHVzaCh7IGxhYmVsOiAnQ3JlYXRlZCBvbicsIHZhbHVlOiBmb3JtYXREYXRlKGRhdGEuY3JlYXRlZE9uKSwgaWNvbjogJ2NhbGVuZGFyX3RvZGF5JyB9KTtcbiAgaWYgKGRhdGEuc3RhdHVzICE9IG51bGwpXG4gICAgbWV0YWRhdGFJdGVtcy5wdXNoKHsgbGFiZWw6ICdTdGF0dXMnLCB2YWx1ZTogZGF0YS5zdGF0dXMsIHN0YXR1c0NvbG9yOiByZXNvbHZlQ29sb3IoZGF0YS5zdGF0dXMsIHN0YXR1c0NvbmZpZykgfSk7XG4gIGlmIChkYXRhLnByaW9yaXR5ICE9IG51bGwpXG4gICAgbWV0YWRhdGFJdGVtcy5wdXNoKHsgbGFiZWw6ICdQcmlvcml0eScsIHZhbHVlOiBkYXRhLnByaW9yaXR5LCBzdGF0dXNDb2xvcjogcmVzb2x2ZUNvbG9yKGRhdGEucHJpb3JpdHksIHByaW9yaXR5Q29uZmlnKSB9KTtcbiAgaWYgKGRhdGEuZW52aXJvbm1lbnQgIT0gbnVsbClcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goeyBsYWJlbDogJ0Vudmlyb25tZW50JywgdmFsdWU6IGRhdGEuZW52aXJvbm1lbnQsIGljb246ICdzdG9yYWdlJyB9KTtcbiAgaWYgKGRhdGEudmVyc2lvbiAhPSBudWxsKVxuICAgIG1ldGFkYXRhSXRlbXMucHVzaCh7IGxhYmVsOiAnVmVyc2lvbicsIHZhbHVlOiBkYXRhLnZlcnNpb24sIGljb246ICdsYWJlbCcgfSk7XG4gIGlmIChkYXRhLnBsYXRmb3JtICE9IG51bGwpIHtcbiAgICBjb25zdCBwbGF0Zm9ybVZhbCA9IFN0cmluZyhkYXRhLnBsYXRmb3JtKS50cmltKCk7XG4gICAgY29uc3QgZGlzcGxheVBsYXRmb3JtID1cbiAgICAgIHBsYXRmb3JtVmFsID09PSAnd2ViJyB8fCBwbGF0Zm9ybVZhbCA9PT0gJ21vYmlsZSdcbiAgICAgICAgPyBwbGF0Zm9ybVZhbFxuICAgICAgICA6IC9eKGFuZHJvaWR8aW9zfG1vYmlsZVxccyphcHB8ZGV2aWNlcykkL2kudGVzdChwbGF0Zm9ybVZhbClcbiAgICAgICAgICA/ICdtb2JpbGUnXG4gICAgICAgICAgOiAnd2ViJztcbiAgICBtZXRhZGF0YUl0ZW1zLnB1c2goe1xuICAgICAgbGFiZWw6ICdQbGF0Zm9ybScsXG4gICAgICB2YWx1ZTogZGlzcGxheVBsYXRmb3JtLFxuICAgICAgaWNvbjogJ2RldmljZXMnLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgY29uZmlnU2VjdGlvbnM6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0V4ZWN1dGlvbicsXG4gICAgICBpY29uOiAncGxheV9jaXJjbGUnLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAgeyBsYWJlbDogJ1R5cGUnLCB2YWx1ZTogZGF0YS50eXBlID8/IGRhdGEudHlwZUlkID8/IG51bGwgfSxcbiAgICAgICAgeyBsYWJlbDogJ1Rlc3QgRGF0YSBQcm9maWxlJywgdmFsdWU6IGRhdGEudGVzdERhdGFQcm9maWxlID8/IGRhdGEudGVzdERhdGFQcm9maWxlSWQgPz8gbnVsbCB9LFxuICAgICAgICB7IGxhYmVsOiAnVGVzdCBEYXRhIFNldCcsIHZhbHVlOiBkYXRhLnRlc3REYXRhU2V0ID8/IGRhdGEudGVzdERhdGFTZXRJbmRleCA/PyBudWxsIH0sXG4gICAgICAgIHsgbGFiZWw6ICdWaWRlbyBSZWNvcmRpbmcnLCB2YWx1ZTogZGF0YS52aWRlb1JlY29yZGluZyA/PyAnJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnQUkgQ29uZmlndXJhdGlvbicsXG4gICAgICBpY29uOiAnc21hcnRfdG95JyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdFbmFibGUgQUkgU21hcnRuZXNzJywgdmFsdWU6IGRhdGEuZW5hYmxlQWlTbWFydG5lc3MgPz8gJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgQUkgQWN0aW9uJywgdmFsdWU6IGRhdGEuZGVmYXVsdEFpQWN0aW9uID8/ICcnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdLbm93bGVkZ2UgQmFzZSBEZWZhdWx0IFRlc3QgQ2FzZScsIHZhbHVlOiBkYXRhLmtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UgPz8gbnVsbCB9LFxuICAgICAgICB7IGxhYmVsOiAnRW5hYmxlIEFJIG1ldGFkYXRhIGNvbGxlY3Rpb24nLCB2YWx1ZTogZGF0YS51c2VBaU1ldGFkYXRhID8/ICcnIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3QgY29uZmlnU2VjdGlvbnNSb3cyOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW10gPSBbXG4gICAge1xuICAgICAgdGl0bGU6ICdXYWl0IGFuZCByZXRyaWVzJyxcbiAgICAgIGljb246ICd0aW1lcicsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7IGxhYmVsOiAnRW5hYmxlIEF2b2lkIEF1dG8gd2FpdCBmb3Igc3RlcHMnLCB2YWx1ZTogZGF0YS5hdXRvV2FpdEVuYWJsZWQgPz8gZmFsc2UgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JldHJ5IEZhaWxlZCBTdGVwcycsIHZhbHVlOiBkYXRhLnJldHJ5RmFpbGVkU3RlcHMgPz8gJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScsIHZhbHVlOiBkYXRhLnRlc3RDYXNlVGltZW91dCA/PyAnJyB9LFxuICAgICAgICB7IGxhYmVsOiAnV2FpdCBUaW1lb3V0IGZvciBMb2NhdG9ycyAoc2VjcyknLCB2YWx1ZTogZGF0YS53YWl0VGltZW91dEZvckxvY2F0b3JzID8/ICcnIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdEZXZpY2UgU2V0dGluZycsXG4gICAgICBpY29uOiAnZGV2aWNlcycsXG4gICAgICBpdGVtczogKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGxhdGZvcm0gPSBkYXRhLnBsYXRmb3JtID8/ICd3ZWInO1xuICAgICAgICBpZiAocGxhdGZvcm0gPT09ICd3ZWInKSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IEJyb3dzZXInLCB2YWx1ZTogZGF0YS5kZWZhdWx0QnJvd3NlciA/PyBkYXRhLndlYkJyb3dzZXIgPz8gJycgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZpZXdwb3J0JywgdmFsdWU6IGRhdGEuZGVmYXVsdFZpZXdwb3J0ID8/IGRhdGEudmlld3BvcnQgPz8gJycgfSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgT1MnLCB2YWx1ZTogZGF0YS5kZXZpY2VPUyA/PyAnJyB9LFxuICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFBob25lJywgdmFsdWU6IGRhdGEuZGV2aWNlVHlwZSA/PyAnJyB9LFxuICAgICAgICBdO1xuICAgICAgfSkoKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnS2V5IEZsYWdzJyxcbiAgICAgIGljb246ICdmbGFnJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdNb2JpbGUgVGVzdGluZycsIHZhbHVlOiBkYXRhLm1vYmlsZVRlc3RpbmcgPz8gJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0V4dGVuc2lvbiBVc2UnLCB2YWx1ZTogZGF0YS5leHRlbnNpb25Vc2UgPz8gJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RhdGEgRHJpdmVuJywgdmFsdWU6IGRhdGEuZGF0YURyaXZlbiA/PyAnJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuXG4gIC8vIEhpZGUgRGV2aWNlIFNldHRpbmcgZm9yIG1vYmlsZSB1bmxlc3Mgc2hvd0RldmljZVNldHRpbmdGb3JNb2JpbGUgaXMgdHJ1ZVxuICBjb25zdCBpc01vYmlsZSA9IGRhdGEucGxhdGZvcm0gPT09ICdtb2JpbGUnIHx8IGRhdGEubW9iaWxlVGVzdGluZyA9PT0gdHJ1ZTtcbiAgY29uc3QgaGlkZURldmljZVNldHRpbmdGb3JNb2JpbGUgPSBpc01vYmlsZSAmJiAhb3B0aW9ucz8uc2hvd0RldmljZVNldHRpbmdGb3JNb2JpbGU7XG4gIGNvbnN0IGZpbHRlcmVkQ29uZmlnU2VjdGlvbnNSb3cyID0gaGlkZURldmljZVNldHRpbmdGb3JNb2JpbGVcbiAgICA/IGNvbmZpZ1NlY3Rpb25zUm93Mi5maWx0ZXIoKHMpID0+IHMudGl0bGUgIT09ICdEZXZpY2UgU2V0dGluZycpXG4gICAgOiBjb25maWdTZWN0aW9uc1JvdzI7XG5cbiAgcmV0dXJuIHtcbiAgICBtZXRhZGF0YUl0ZW1zLFxuICAgIGxhYmVsczogZGF0YS5sYWJlbHMgPz8gW10sXG4gICAgY29uZmlnU2VjdGlvbnMsXG4gICAgY29uZmlnU2VjdGlvbnNSb3cyOiBmaWx0ZXJlZENvbmZpZ1NlY3Rpb25zUm93MixcbiAgfTtcbn1cbiJdfQ==