@cqa-lib/cqa-ui 1.1.47 → 1.1.49

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.
@@ -58,10 +58,10 @@ export class BasicStepComponent extends BaseStepComponent {
58
58
  }
59
59
  }
60
60
  BasicStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BasicStepComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
61
- BasicStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: BasicStepComponent, selector: "cqa-basic-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", subSteps: "subSteps", selfHealAnalysis: "selfHealAnalysis", selfHealed: "selfHealed", selfHealDuration: "selfHealDuration", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", isUploadingBaseline: "isUploadingBaseline" }, outputs: { makeCurrentBaseline: "makeCurrentBaseline", uploadBaseline: "uploadBaseline", analyze: "analyze", viewFullLogs: "viewFullLogs", selfHealAction: "selfHealAction" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, ngImport: i0, template: "<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\"\n style=\"border-bottom: '1px solid #F3F4F6'\"\n >\n \n <!-- Status Icon -->\n <!-- {{ getStatusIcon(config.status) }} -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ stepNumber }}. <span [innerHTML]=\"title\"></span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(duration) }}\n </span>\n <svg *ngIf=\"hasSubSteps\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && hasSubSteps\">\n <!-- Sub-steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pt-1 cqa-pl-9\">\n <div\n *ngFor=\"let subStep of subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\"\n [ngClass]=\"getStatusColorClass(subStep.status)\">\n {{ getStatusIcon(subStep.status) }}\n </mat-icon> -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ subStep.description }}\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-mt-1 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(timingBreakdown.tool) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"isExpanded && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"subSteps\"\n [failureDetails]=\"failureDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [testStepResultId]=\"testStepResultId\"\n [timingBreakdown]=\"timingBreakdown\"\n [expanded]=\"true\"\n [subSteps]=\"subSteps\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", components: [{ type: i1.SelfHealAnalysisComponent, selector: "cqa-self-heal-analysis", inputs: ["originalLocator", "healedLocator", "confidence", "healMethod"], outputs: ["action"] }, { type: i2.ViewMoreFailedStepButtonComponent, selector: "cqa-view-more-failed-step-button", inputs: ["timingBreakdown", "subSteps", "failureDetails"], outputs: ["viewMoreClick"] }, { type: i3.UpdatedFailedStepComponent, selector: "cqa-updated-failed-step", inputs: ["timingBreakdown", "testStepResultId", "expanded", "subSteps", "failureDetails", "reasoning", "confidence", "isUploadingBaseline"], outputs: ["makeCurrentBaseline", "uploadBaseline", "analyze", "viewFullLogs"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
61
+ BasicStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: BasicStepComponent, selector: "cqa-basic-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", subSteps: "subSteps", selfHealAnalysis: "selfHealAnalysis", selfHealed: "selfHealed", selfHealDuration: "selfHealDuration", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", isUploadingBaseline: "isUploadingBaseline" }, outputs: { makeCurrentBaseline: "makeCurrentBaseline", uploadBaseline: "uploadBaseline", analyze: "analyze", viewFullLogs: "viewFullLogs", selfHealAction: "selfHealAction" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, ngImport: i0, template: "<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\"\n style=\"border-bottom: '1px solid #F3F4F6'\"\n >\n \n <!-- Status Icon -->\n <!-- {{ getStatusIcon(config.status) }} -->\n <div *ngIf=\"config.status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"config.status.toLowerCase() === 'failure'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ stepNumber }}. <span [innerHTML]=\"title\"></span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(duration) }}\n </span>\n <svg *ngIf=\"hasSubSteps\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && hasSubSteps\">\n <!-- Sub-steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pt-1 cqa-pl-9\">\n <div\n *ngFor=\"let subStep of subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\"\n [ngClass]=\"getStatusColorClass(subStep.status)\">\n {{ getStatusIcon(subStep.status) }}\n </mat-icon> -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ subStep.description }}\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-mt-1 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(timingBreakdown.tool) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"isExpanded && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"subSteps\"\n [failureDetails]=\"failureDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [testStepResultId]=\"testStepResultId\"\n [timingBreakdown]=\"timingBreakdown\"\n [expanded]=\"true\"\n [subSteps]=\"subSteps\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", components: [{ type: i1.SelfHealAnalysisComponent, selector: "cqa-self-heal-analysis", inputs: ["originalLocator", "healedLocator", "confidence", "healMethod"], outputs: ["action"] }, { type: i2.ViewMoreFailedStepButtonComponent, selector: "cqa-view-more-failed-step-button", inputs: ["timingBreakdown", "subSteps", "failureDetails"], outputs: ["viewMoreClick"] }, { type: i3.UpdatedFailedStepComponent, selector: "cqa-updated-failed-step", inputs: ["timingBreakdown", "testStepResultId", "expanded", "subSteps", "failureDetails", "reasoning", "confidence", "isUploadingBaseline"], outputs: ["makeCurrentBaseline", "uploadBaseline", "analyze", "viewFullLogs"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
62
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BasicStepComponent, decorators: [{
63
63
  type: Component,
64
- args: [{ selector: 'cqa-basic-step', host: { class: 'cqa-ui-root' }, template: "<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\"\n style=\"border-bottom: '1px solid #F3F4F6'\"\n >\n \n <!-- Status Icon -->\n <!-- {{ getStatusIcon(config.status) }} -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ stepNumber }}. <span [innerHTML]=\"title\"></span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(duration) }}\n </span>\n <svg *ngIf=\"hasSubSteps\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && hasSubSteps\">\n <!-- Sub-steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pt-1 cqa-pl-9\">\n <div\n *ngFor=\"let subStep of subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\"\n [ngClass]=\"getStatusColorClass(subStep.status)\">\n {{ getStatusIcon(subStep.status) }}\n </mat-icon> -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ subStep.description }}\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-mt-1 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(timingBreakdown.tool) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"isExpanded && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"subSteps\"\n [failureDetails]=\"failureDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [testStepResultId]=\"testStepResultId\"\n [timingBreakdown]=\"timingBreakdown\"\n [expanded]=\"true\"\n [subSteps]=\"subSteps\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", styles: [] }]
64
+ args: [{ selector: 'cqa-basic-step', host: { class: 'cqa-ui-root' }, template: "<div>\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\"\n style=\"border-bottom: '1px solid #F3F4F6'\"\n >\n \n <!-- Status Icon -->\n <!-- {{ getStatusIcon(config.status) }} -->\n <div *ngIf=\"config.status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"config.status.toLowerCase() === 'failure'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ stepNumber }}. <span [innerHTML]=\"title\"></span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(duration) }}\n </span>\n <svg *ngIf=\"hasSubSteps\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && hasSubSteps\">\n <!-- Sub-steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pt-1 cqa-pl-9\">\n <div\n *ngFor=\"let subStep of subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\"\n [ngClass]=\"getStatusColorClass(subStep.status)\">\n {{ getStatusIcon(subStep.status) }}\n </mat-icon> -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ subStep.description }}\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-mt-1 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(timingBreakdown.tool) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"isExpanded && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"subSteps\"\n [failureDetails]=\"failureDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [testStepResultId]=\"testStepResultId\"\n [timingBreakdown]=\"timingBreakdown\"\n [expanded]=\"true\"\n [subSteps]=\"subSteps\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", styles: [] }]
65
65
  }], propDecorators: { id: [{
66
66
  type: Input
67
67
  }], testStepResultId: [{
@@ -105,4 +105,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
105
105
  }], selfHealAction: [{
106
106
  type: Output
107
107
  }] } });
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4ZWN1dGlvbi1zY3JlZW4vYmFzaWMtc3RlcC9iYXNpYy1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9iYXNpYy1zdGVwL2Jhc2ljLXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBUzNELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUFOekQ7O1FBdUJXLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN4Qix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUNuRSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3pELFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ25DLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFvRCxDQUFDO1FBK0JoRywwQkFBcUIsR0FBWSxLQUFLLENBQUM7S0F3QnhDO0lBbERVLFFBQVE7UUFDZixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLElBQUksRUFBRSxPQUFPO1lBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRTtZQUM3QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDTCxDQUFDO1FBRXJCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBS0QseUJBQXlCLENBQUMsUUFBaUI7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBdUQ7UUFDdEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQStCO1FBQ25ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQTBCO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7K0dBNUVVLGtCQUFrQjttR0FBbEIsa0JBQWtCLHl1QkNYL0IsaytMQTZHQTsyRkRsR2Esa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGdCQUFnQixRQUdwQixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7OEJBSXJCLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2ljU3RlcENvbmZpZywgU2VsZkhlYWxBY3Rpb24sIFN1YlN0ZXAsIFN0ZXBTdGF0dXMsIFRpbWluZ0JyZWFrZG93biwgU2VsZkhlYWxBbmFseXNpc0RhdGEsIEZhaWx1cmVEZXRhaWxzIH0gZnJvbSAnLi4vZXhlY3V0aW9uLXN0ZXAubW9kZWxzJztcbmltcG9ydCB7IEJhc2VTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1zdGVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQsIHVwbG9hZEJhc2VsaW5lRXZlbnQgfSBmcm9tICcuLi92aXN1YWwtY29tcGFyaXNvbi92aXN1YWwtY29tcGFyaXNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtYmFzaWMtc3RlcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9iYXNpYy1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljU3RlcENvbXBvbmVudCBleHRlbmRzIEJhc2VTdGVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gSW5kaXZpZHVhbCBpbnB1dHNcbiAgQElucHV0KCkgaWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRlc3RTdGVwUmVzdWx0SWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0ZXBOdW1iZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGF0dXMhOiBTdGVwU3RhdHVzO1xuICBASW5wdXQoKSBkdXJhdGlvbiE6IG51bWJlcjtcbiAgQElucHV0KCkgdGltaW5nQnJlYWtkb3duPzogVGltaW5nQnJlYWtkb3duO1xuICBASW5wdXQoKSBleHBhbmRlZD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHN1YlN0ZXBzITogU3ViU3RlcFtdO1xuICBASW5wdXQoKSBzZWxmSGVhbEFuYWx5c2lzPzogU2VsZkhlYWxBbmFseXNpc0RhdGE7XG4gIEBJbnB1dCgpIHNlbGZIZWFsZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxmSGVhbER1cmF0aW9uPzogbnVtYmVyO1xuICBASW5wdXQoKSBmYWlsdXJlRGV0YWlscz86IEZhaWx1cmVEZXRhaWxzO1xuICBASW5wdXQoKSByZWFzb25pbmc/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29uZmlkZW5jZT86IHN0cmluZztcbiAgQElucHV0KCkgaXNVcGxvYWRpbmdCYXNlbGluZSA9IHt9O1xuICBAT3V0cHV0KCkgbWFrZUN1cnJlbnRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8bWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgdXBsb2FkQmFzZWxpbmUgPSBuZXcgRXZlbnRFbWl0dGVyPHVwbG9hZEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBhbmFseXplID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgdmlld0Z1bGxMb2dzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VsZkhlYWxBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgdHlwZTogU2VsZkhlYWxBY3Rpb247IGhlYWxlZExvY2F0b3I6IHN0cmluZzsgfT4oKTtcblxuICAvLyBDb25maWcgcHJvcGVydHkgZm9yIGJhc2UgY2xhc3MgLSBidWlsdCBmcm9tIGluZGl2aWR1YWwgaW5wdXRzIGluIG5nT25Jbml0XG4gIG92ZXJyaWRlIGNvbmZpZyE6IEJhc2ljU3RlcENvbmZpZztcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBCdWlsZCBjb25maWcgZnJvbSBpbmRpdmlkdWFsIGlucHV0c1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0ZXN0U3RlcFJlc3VsdElkOiB0aGlzLnRlc3RTdGVwUmVzdWx0SWQsXG4gICAgICBzdGVwTnVtYmVyOiB0aGlzLnN0ZXBOdW1iZXIsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBzdWJTdGVwczogdGhpcy5zdWJTdGVwcyB8fCBbXSxcbiAgICAgIHNlbGZIZWFsQW5hbHlzaXM6IHRoaXMuc2VsZkhlYWxBbmFseXNpcyxcbiAgICAgIHNlbGZIZWFsZWQ6IHRoaXMuc2VsZkhlYWxlZCxcbiAgICAgIHNlbGZIZWFsRHVyYXRpb246IHRoaXMuc2VsZkhlYWxEdXJhdGlvbixcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICB9IGFzIEJhc2ljU3RlcENvbmZpZztcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBnZXQgaGFzU3ViU3RlcHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3ViU3RlcHMgJiYgdGhpcy5zdWJTdGVwcy5sZW5ndGggPiAwO1xuICB9XG5cblxuICBzaG93RmFpbGVkU3RlcERldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RmFpbGVkU3RlcERldGFpbHMgPSBleHBhbmRlZDtcbiAgfVxuICBvblNlbGZIZWFsQWN0aW9uKGV2ZW50OiB7IHR5cGU6IFNlbGZIZWFsQWN0aW9uOyBoZWFsZWRMb2NhdG9yOiBzdHJpbmc7IH0pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGZIZWFsQWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25NYWtlQ3VycmVudEJhc2VsaW5lKGV2ZW50OiBtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1ha2VDdXJyZW50QmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvblVwbG9hZEJhc2VsaW5lKGV2ZW50OiB1cGxvYWRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRCYXNlbGluZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uQW5hbHl6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFuYWx5emUuZW1pdCgpO1xuICB9XG5cbiAgb25WaWV3RnVsbExvZ3MoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3RnVsbExvZ3MuZW1pdCgpO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXAtMiBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJzFweCBzb2xpZCAjRjNGNEY2J1wiXG4gICAgPlxuICAgIFxuICAgIDwhLS0gU3RhdHVzIEljb24gLS0+XG4gICAgPCEtLSB7eyBnZXRTdGF0dXNJY29uKGNvbmZpZy5zdGF0dXMpIH19IC0tPlxuICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMC45MDA1IDQuOTk5OTlDMTEuMTI4OSA2LjEyMDY0IDEwLjk2NjIgNy4yODU3MSAxMC40Mzk1IDguMzAwODlDOS45MTI3OSA5LjMxNjA4IDkuMDU0IDEwLjEyIDguMDA2MzEgMTAuNTc4N0M2Ljk1ODYyIDExLjAzNzMgNS43ODUzNiAxMS4xMjI5IDQuNjgyMiAxMC44MjEyQzMuNTc5MDQgMTAuNTE5NSAyLjYxMjY1IDkuODQ4NjkgMS45NDQxOSA4LjkyMDcxQzEuMjc1NzMgNy45OTI3MiAwLjk0NTYxMSA2Ljg2MzYxIDEuMDA4ODggNS43MjE2OUMxLjA3MjE1IDQuNTc5NzYgMS41MjQ5OSAzLjQ5NDA0IDIuMjkxODggMi42NDU1OEMzLjA1ODc2IDEuNzk3MTIgNC4wOTMzNCAxLjIzNzIxIDUuMjIzMDggMS4wNTkyMkM2LjM1MjgyIDAuODgxMjMzIDcuNTA5NDQgMS4wOTU5MiA4LjUwMDA1IDEuNjY3NDlcIiBzdHJva2U9XCIjMjJDNTVFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNC41IDUuNUw2IDdMMTEgMlwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG5cbiAgICA8IS0tIFN0ZXAgTnVtYmVyIGFuZCBUaXRsZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtYm9sZCBjcWEtZmxleC0xIGNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtdGV4dC1bMTFweF0gY3FhLWxlYWRpbmctWzEzcHhdXCI+XG4gICAgICB7eyBzdGVwTnVtYmVyIH19LiA8c3BhbiBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVs5cHhdIGNxYS1sZWFkaW5nLVsxMXB4XSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICAgICAge3sgZm9ybWF0RHVyYXRpb24oZHVyYXRpb24pIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3ZnICpuZ0lmPVwiaGFzU3ViU3RlcHNcIiBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiaXNFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMy41IDVMNyA4LjVMMTAuNSA1XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS13aWR0aD1cIjAuODMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkICYmIGhhc1N1YlN0ZXBzXCI+XG4gICAgPCEtLSBTdWItc3RlcHMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLXB0LTEgY3FhLXBsLTlcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHN1YlN0ZXAgb2Ygc3ViU3RlcHNcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS1weS1bNS41cHhdIGNxYS1weC0zXCI+XG4gICAgICAgIFxuICAgICAgICA8IS0tIFN1Yi1zdGVwIFN0YXR1cyBJY29uIC0tPlxuICAgICAgICA8IS0tIDxtYXQtaWNvblxuICAgICAgICAgIGNsYXNzPVwiIWNxYS13LTQgIWNxYS1oLTQgIWNxYS10ZXh0LVsxNnB4XVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzQ29sb3JDbGFzcyhzdWJTdGVwLnN0YXR1cylcIj5cbiAgICAgICAgICB7eyBnZXRTdGF0dXNJY29uKHN1YlN0ZXAuc3RhdHVzKSB9fVxuICAgICAgICA8L21hdC1pY29uPiAtLT5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzAwQTYzRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA2TDUuNSA3TDcuNSA1XCIgc3Ryb2tlPVwiIzAwQTYzRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cblxuICAgICAgICA8IS0tIFN1Yi1zdGVwIERlc2NyaXB0aW9uIC0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLXRleHQtWzExcHhdIGNxYS1sZWFkaW5nLVsxM3B4XSBjcWEtdGV4dC1bIzM2NDE1M11cIj5cbiAgICAgICAgICB7eyBzdWJTdGVwLmRlc2NyaXB0aW9uIH19XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIFN1Yi1zdGVwIER1cmF0aW9uIC0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LW1ldGFkYXRhLWtleVwiPlxuICAgICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKHN1YlN0ZXAuZHVyYXRpb24pIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWxmIEhlYWwgQW5hbHlzaXMgLS0+XG4gICAgPGNxYS1zZWxmLWhlYWwtYW5hbHlzaXMgXG4gICAgICAqbmdJZj1cInNlbGZIZWFsQW5hbHlzaXNcIiBcbiAgICAgIFtvcmlnaW5hbExvY2F0b3JdPVwic2VsZkhlYWxBbmFseXNpcy5vcmlnaW5hbExvY2F0b3JcIlxuICAgICAgW2hlYWxlZExvY2F0b3JdPVwic2VsZkhlYWxBbmFseXNpcy5oZWFsZWRMb2NhdG9yXCJcbiAgICAgIFtjb25maWRlbmNlXT1cInNlbGZIZWFsQW5hbHlzaXMuY29uZmlkZW5jZVwiXG4gICAgICBbaGVhbE1ldGhvZF09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxNZXRob2RcIlxuICAgICAgKGFjdGlvbik9XCJvblNlbGZIZWFsQWN0aW9uKCRldmVudClcIj5cbiAgICA8L2NxYS1zZWxmLWhlYWwtYW5hbHlzaXM+XG5cbiAgICA8IS0tIFRpbWluZyBCcmVha2Rvd24gLS0+XG4gICAgPGRpdiAqbmdJZj1cInRpbWluZ0JyZWFrZG93blwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLWdhcC01IGNxYS1tdC0xIGNxYS1wdC00IGNxYS1weC00IGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjOUNBM0FGXVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgICA8c3Bhbj5UaW1pbmcgYnJlYWtkb3duPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWRpYWxvZy1tdXRlZCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtM1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIEFwcCA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWdyYXktNzAwXCI+e3sgZm9ybWF0RHVyYXRpb24odGltaW5nQnJlYWtkb3duLmFwcCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTS0zLjgxNDdlLTA2IDEwLjMyVi03LjE1MjU2ZS0wN0gwLjk1OTk5NlYxMC4zMkgtMy44MTQ3ZS0wNlpcIiBmaWxsPVwiI0U1RTdFQlwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbih0aW1pbmdCcmVha2Rvd24udG9vbCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFZpZXcgTW9yZSBGYWlsZWQgU3RlcCBCdXR0b24gLSBzaG93biB3aGVuIGV4cGFuZGVkIGFuZCBmYWlsdXJlIGRldGFpbHMgZXhpc3QgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkICYmIGZhaWx1cmVEZXRhaWxzXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtcHgtNFwiPlxuICAgIDxjcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvblxuICAgICAgW3RpbWluZ0JyZWFrZG93bl09XCJ0aW1pbmdCcmVha2Rvd25cIlxuICAgICAgW3N1YlN0ZXBzXT1cInN1YlN0ZXBzXCJcbiAgICAgIFtmYWlsdXJlRGV0YWlsc109XCJmYWlsdXJlRGV0YWlsc1wiXG4gICAgICAodmlld01vcmVDbGljayk9XCJvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKCRldmVudClcIj5cbiAgICA8L2NxYS12aWV3LW1vcmUtZmFpbGVkLXN0ZXAtYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFVwZGF0ZWQgRmFpbGVkIFN0ZXAgQ29tcG9uZW50IC0gc2hvd24gd2hlbiBidXR0b24gaXMgY2xpY2tlZCAtLT5cbiAgPGRpdiAqbmdJZj1cInNob3dGYWlsZWRTdGVwRGV0YWlscyAmJiBmYWlsdXJlRGV0YWlsc1wiIGNsYXNzPVwiY3FhLW10LTIgY3FhLXB4LTRcIj5cbiAgICA8Y3FhLXVwZGF0ZWQtZmFpbGVkLXN0ZXBcbiAgICAgIFt0ZXN0U3RlcFJlc3VsdElkXT1cInRlc3RTdGVwUmVzdWx0SWRcIlxuICAgICAgW3RpbWluZ0JyZWFrZG93bl09XCJ0aW1pbmdCcmVha2Rvd25cIlxuICAgICAgW2V4cGFuZGVkXT1cInRydWVcIlxuICAgICAgW3N1YlN0ZXBzXT1cInN1YlN0ZXBzXCJcbiAgICAgIFtmYWlsdXJlRGV0YWlsc109XCJmYWlsdXJlRGV0YWlsc1wiXG4gICAgICBbcmVhc29uaW5nXT1cInJlYXNvbmluZ1wiXG4gICAgICBbY29uZmlkZW5jZV09XCJjb25maWRlbmNlXCJcbiAgICAgIFtpc1VwbG9hZGluZ0Jhc2VsaW5lXT1cImlzVXBsb2FkaW5nQmFzZWxpbmVcIlxuICAgICAgKG1ha2VDdXJyZW50QmFzZWxpbmUpPVwib25NYWtlQ3VycmVudEJhc2VsaW5lKCRldmVudClcIlxuICAgICAgKHVwbG9hZEJhc2VsaW5lKT1cIm9uVXBsb2FkQmFzZWxpbmUoJGV2ZW50KVwiXG4gICAgICAoYW5hbHl6ZSk9XCJvbkFuYWx5emUoKVwiXG4gICAgICAodmlld0Z1bGxMb2dzKT1cIm9uVmlld0Z1bGxMb2dzKClcIj5cbiAgICA8L2NxYS11cGRhdGVkLWZhaWxlZC1zdGVwPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4ZWN1dGlvbi1zY3JlZW4vYmFzaWMtc3RlcC9iYXNpYy1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9iYXNpYy1zdGVwL2Jhc2ljLXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBUzNELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxpQkFBaUI7SUFOekQ7O1FBdUJXLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN4Qix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUNuRSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3pELFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ25DLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN4QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFvRCxDQUFDO1FBK0JoRywwQkFBcUIsR0FBWSxLQUFLLENBQUM7S0F3QnhDO0lBbERVLFFBQVE7UUFDZixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLElBQUksRUFBRSxPQUFPO1lBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRTtZQUM3QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDTCxDQUFDO1FBRXJCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBS0QseUJBQXlCLENBQUMsUUFBaUI7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBdUQ7UUFDdEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQStCO1FBQ25ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQTBCO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7K0dBNUVVLGtCQUFrQjttR0FBbEIsa0JBQWtCLHl1QkNYL0IsbWxOQThHQTsyRkRuR2Esa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGdCQUFnQixRQUdwQixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7OEJBSXJCLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2ljU3RlcENvbmZpZywgU2VsZkhlYWxBY3Rpb24sIFN1YlN0ZXAsIFN0ZXBTdGF0dXMsIFRpbWluZ0JyZWFrZG93biwgU2VsZkhlYWxBbmFseXNpc0RhdGEsIEZhaWx1cmVEZXRhaWxzIH0gZnJvbSAnLi4vZXhlY3V0aW9uLXN0ZXAubW9kZWxzJztcbmltcG9ydCB7IEJhc2VTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1zdGVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQsIHVwbG9hZEJhc2VsaW5lRXZlbnQgfSBmcm9tICcuLi92aXN1YWwtY29tcGFyaXNvbi92aXN1YWwtY29tcGFyaXNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtYmFzaWMtc3RlcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9iYXNpYy1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljU3RlcENvbXBvbmVudCBleHRlbmRzIEJhc2VTdGVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy8gSW5kaXZpZHVhbCBpbnB1dHNcbiAgQElucHV0KCkgaWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRlc3RTdGVwUmVzdWx0SWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0ZXBOdW1iZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRpdGxlITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGF0dXMhOiBTdGVwU3RhdHVzO1xuICBASW5wdXQoKSBkdXJhdGlvbiE6IG51bWJlcjtcbiAgQElucHV0KCkgdGltaW5nQnJlYWtkb3duPzogVGltaW5nQnJlYWtkb3duO1xuICBASW5wdXQoKSBleHBhbmRlZD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHN1YlN0ZXBzITogU3ViU3RlcFtdO1xuICBASW5wdXQoKSBzZWxmSGVhbEFuYWx5c2lzPzogU2VsZkhlYWxBbmFseXNpc0RhdGE7XG4gIEBJbnB1dCgpIHNlbGZIZWFsZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxmSGVhbER1cmF0aW9uPzogbnVtYmVyO1xuICBASW5wdXQoKSBmYWlsdXJlRGV0YWlscz86IEZhaWx1cmVEZXRhaWxzO1xuICBASW5wdXQoKSByZWFzb25pbmc/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29uZmlkZW5jZT86IHN0cmluZztcbiAgQElucHV0KCkgaXNVcGxvYWRpbmdCYXNlbGluZSA9IHt9O1xuICBAT3V0cHV0KCkgbWFrZUN1cnJlbnRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8bWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgdXBsb2FkQmFzZWxpbmUgPSBuZXcgRXZlbnRFbWl0dGVyPHVwbG9hZEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBhbmFseXplID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgdmlld0Z1bGxMb2dzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VsZkhlYWxBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgdHlwZTogU2VsZkhlYWxBY3Rpb247IGhlYWxlZExvY2F0b3I6IHN0cmluZzsgfT4oKTtcblxuICAvLyBDb25maWcgcHJvcGVydHkgZm9yIGJhc2UgY2xhc3MgLSBidWlsdCBmcm9tIGluZGl2aWR1YWwgaW5wdXRzIGluIG5nT25Jbml0XG4gIG92ZXJyaWRlIGNvbmZpZyE6IEJhc2ljU3RlcENvbmZpZztcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBCdWlsZCBjb25maWcgZnJvbSBpbmRpdmlkdWFsIGlucHV0c1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0ZXN0U3RlcFJlc3VsdElkOiB0aGlzLnRlc3RTdGVwUmVzdWx0SWQsXG4gICAgICBzdGVwTnVtYmVyOiB0aGlzLnN0ZXBOdW1iZXIsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBzdWJTdGVwczogdGhpcy5zdWJTdGVwcyB8fCBbXSxcbiAgICAgIHNlbGZIZWFsQW5hbHlzaXM6IHRoaXMuc2VsZkhlYWxBbmFseXNpcyxcbiAgICAgIHNlbGZIZWFsZWQ6IHRoaXMuc2VsZkhlYWxlZCxcbiAgICAgIHNlbGZIZWFsRHVyYXRpb246IHRoaXMuc2VsZkhlYWxEdXJhdGlvbixcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICB9IGFzIEJhc2ljU3RlcENvbmZpZztcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBnZXQgaGFzU3ViU3RlcHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3ViU3RlcHMgJiYgdGhpcy5zdWJTdGVwcy5sZW5ndGggPiAwO1xuICB9XG5cblxuICBzaG93RmFpbGVkU3RlcERldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RmFpbGVkU3RlcERldGFpbHMgPSBleHBhbmRlZDtcbiAgfVxuICBvblNlbGZIZWFsQWN0aW9uKGV2ZW50OiB7IHR5cGU6IFNlbGZIZWFsQWN0aW9uOyBoZWFsZWRMb2NhdG9yOiBzdHJpbmc7IH0pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGZIZWFsQWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25NYWtlQ3VycmVudEJhc2VsaW5lKGV2ZW50OiBtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1ha2VDdXJyZW50QmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvblVwbG9hZEJhc2VsaW5lKGV2ZW50OiB1cGxvYWRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRCYXNlbGluZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uQW5hbHl6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFuYWx5emUuZW1pdCgpO1xuICB9XG5cbiAgb25WaWV3RnVsbExvZ3MoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3RnVsbExvZ3MuZW1pdCgpO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXAtMiBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogJzFweCBzb2xpZCAjRjNGNEY2J1wiXG4gICAgPlxuICAgIFxuICAgIDwhLS0gU3RhdHVzIEljb24gLS0+XG4gICAgPCEtLSB7eyBnZXRTdGF0dXNJY29uKGNvbmZpZy5zdGF0dXMpIH19IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjb25maWcuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJ1wiID48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbHVyZSdcIj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTcuNSA0LjVMNC41IDcuNVwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNC41TDcuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuXG4gICAgPCEtLSBTdGVwIE51bWJlciBhbmQgVGl0bGUgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mb250LWJvbGQgY3FhLWZsZXgtMSBjcWEtdGV4dC1bIzMzNDE1NV0gY3FhLXRleHQtWzExcHhdIGNxYS1sZWFkaW5nLVsxM3B4XVwiPlxuICAgICAge3sgc3RlcE51bWJlciB9fS4gPHNwYW4gW2lubmVySFRNTF09XCJ0aXRsZVwiPjwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bOXB4XSBjcWEtbGVhZGluZy1bMTFweF0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKGR1cmF0aW9uKSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHN2ZyAqbmdJZj1cImhhc1N1YlN0ZXBzXCIgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTMuNSA1TDcgOC41TDEwLjUgNVwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIwLjgzMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZCAmJiBoYXNTdWJTdGVwc1wiPlxuICAgIDwhLS0gU3ViLXN0ZXBzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xIGNxYS1wdC0xIGNxYS1wbC05XCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBzdWJTdGVwIG9mIHN1YlN0ZXBzXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtcHktWzUuNXB4XSBjcWEtcHgtM1wiPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBTdWItc3RlcCBTdGF0dXMgSWNvbiAtLT5cbiAgICAgICAgPCEtLSA8bWF0LWljb25cbiAgICAgICAgICBjbGFzcz1cIiFjcWEtdy00ICFjcWEtaC00ICFjcWEtdGV4dC1bMTZweF1cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFN0YXR1c0NvbG9yQ2xhc3Moc3ViU3RlcC5zdGF0dXMpXCI+XG4gICAgICAgICAge3sgZ2V0U3RhdHVzSWNvbihzdWJTdGVwLnN0YXR1cykgfX1cbiAgICAgICAgPC9tYXQtaWNvbj4gLS0+XG4gICAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiMwMEE2M0VcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNkw1LjUgN0w3LjUgNVwiIHN0cm9rZT1cIiMwMEE2M0VcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG5cbiAgICAgICAgPCEtLSBTdWItc3RlcCBEZXNjcmlwdGlvbiAtLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZmxleC0xIGNxYS10ZXh0LVsxMXB4XSBjcWEtbGVhZGluZy1bMTNweF0gY3FhLXRleHQtWyMzNjQxNTNdXCI+XG4gICAgICAgICAge3sgc3ViU3RlcC5kZXNjcmlwdGlvbiB9fVxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBTdWItc3RlcCBEdXJhdGlvbiAtLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1tZXRhZGF0YS1rZXlcIj5cbiAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihzdWJTdGVwLmR1cmF0aW9uKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VsZiBIZWFsIEFuYWx5c2lzIC0tPlxuICAgIDxjcWEtc2VsZi1oZWFsLWFuYWx5c2lzIFxuICAgICAgKm5nSWY9XCJzZWxmSGVhbEFuYWx5c2lzXCIgXG4gICAgICBbb3JpZ2luYWxMb2NhdG9yXT1cInNlbGZIZWFsQW5hbHlzaXMub3JpZ2luYWxMb2NhdG9yXCJcbiAgICAgIFtoZWFsZWRMb2NhdG9yXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbGVkTG9jYXRvclwiXG4gICAgICBbY29uZmlkZW5jZV09XCJzZWxmSGVhbEFuYWx5c2lzLmNvbmZpZGVuY2VcIlxuICAgICAgW2hlYWxNZXRob2RdPVwic2VsZkhlYWxBbmFseXNpcy5oZWFsTWV0aG9kXCJcbiAgICAgIChhY3Rpb24pPVwib25TZWxmSGVhbEFjdGlvbigkZXZlbnQpXCI+XG4gICAgPC9jcWEtc2VsZi1oZWFsLWFuYWx5c2lzPlxuXG4gICAgPCEtLSBUaW1pbmcgQnJlYWtkb3duIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJ0aW1pbmdCcmVha2Rvd25cIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktZW5kIGNxYS1nYXAtNSBjcWEtbXQtMSBjcWEtcHQtNCBjcWEtcHgtNCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAzVjZMOCA3XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPHNwYW4+VGltaW5nIGJyZWFrZG93bjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1kaWFsb2ctbXV0ZWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTNcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBBcHAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1ncmF5LTcwMFwiPnt7IGZvcm1hdER1cmF0aW9uKHRpbWluZ0JyZWFrZG93bi5hcHApIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMVwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxIDExXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0tMy44MTQ3ZS0wNiAxMC4zMlYtNy4xNTI1NmUtMDdIMC45NTk5OTZWMTAuMzJILTMuODE0N2UtMDZaXCIgZmlsbD1cIiNFNUU3RUJcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgVG9vbCA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWdyYXktNzAwXCI+e3sgZm9ybWF0RHVyYXRpb24odGltaW5nQnJlYWtkb3duLnRvb2wpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZCAmJiBmYWlsdXJlRGV0YWlsc1wiIGNsYXNzPVwiY3FhLW10LTIgY3FhLXB4LTRcIj5cbiAgICA8Y3FhLXZpZXctbW9yZS1mYWlsZWQtc3RlcC1idXR0b25cbiAgICAgIFt0aW1pbmdCcmVha2Rvd25dPVwidGltaW5nQnJlYWtkb3duXCJcbiAgICAgIFtzdWJTdGVwc109XCJzdWJTdGVwc1wiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgKHZpZXdNb3JlQ2xpY2spPVwib25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljaygkZXZlbnQpXCI+XG4gICAgPC9jcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBVcGRhdGVkIEZhaWxlZCBTdGVwIENvbXBvbmVudCAtIHNob3duIHdoZW4gYnV0dG9uIGlzIGNsaWNrZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJzaG93RmFpbGVkU3RlcERldGFpbHMgJiYgZmFpbHVyZURldGFpbHNcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS11cGRhdGVkLWZhaWxlZC1zdGVwXG4gICAgICBbdGVzdFN0ZXBSZXN1bHRJZF09XCJ0ZXN0U3RlcFJlc3VsdElkXCJcbiAgICAgIFt0aW1pbmdCcmVha2Rvd25dPVwidGltaW5nQnJlYWtkb3duXCJcbiAgICAgIFtleHBhbmRlZF09XCJ0cnVlXCJcbiAgICAgIFtzdWJTdGVwc109XCJzdWJTdGVwc1wiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgW3JlYXNvbmluZ109XCJyZWFzb25pbmdcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwiY29uZmlkZW5jZVwiXG4gICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgIChtYWtlQ3VycmVudEJhc2VsaW5lKT1cIm9uTWFrZUN1cnJlbnRCYXNlbGluZSgkZXZlbnQpXCJcbiAgICAgICh1cGxvYWRCYXNlbGluZSk9XCJvblVwbG9hZEJhc2VsaW5lKCRldmVudClcIlxuICAgICAgKGFuYWx5emUpPVwib25BbmFseXplKClcIlxuICAgICAgKHZpZXdGdWxsTG9ncyk9XCJvblZpZXdGdWxsTG9ncygpXCI+XG4gICAgPC9jcWEtdXBkYXRlZC1mYWlsZWQtc3RlcD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -73,10 +73,10 @@ export class ConditionStepComponent extends BaseStepComponent {
73
73
  }
74
74
  }
75
75
  ConditionStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ConditionStepComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
76
- ConditionStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ConditionStepComponent, selector: "cqa-condition-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", conditionText: "conditionText", branches: "branches", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", selfHealAnalysis: "selfHealAnalysis", isUploadingBaseline: "isUploadingBaseline" }, outputs: { onBranchClickEvent: "onBranchClickEvent", makeCurrentBaseline: "makeCurrentBaseline", uploadBaseline: "uploadBaseline", analyze: "analyze", viewFullLogs: "viewFullLogs", selfHealAction: "selfHealAction" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, ngImport: i0, template: "<div>\n <div class=\"cqa-p-2\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pb-1.5 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Condition Icon -->\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#FFEDD5\"/><path d=\"M6 5V9\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10.5523 7 11 6.55228 11 6C11 5.44772 10.5523 5 10 5C9.44772 5 9 5.44772 9 6C9 6.55228 9.44772 7 10 7Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 11C6.55228 11 7 10.5523 7 10C7 9.44772 6.55228 9 6 9C5.44772 9 5 9.44772 5 10C5 10.5523 5.44772 11 6 11Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10 7.79565 9.68393 8.55871 9.12132 9.12132C8.55871 9.68393 7.79565 10 7 10\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3\">\n <span class=\"cqa-font-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. Condition: {{ config.conditionText }}\n </span>\n \n <!-- Condition Badge -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#EA580C] cqa-bg-[#FFEDD5] cqa-text-[10px] cqa-leading-[15px]\">\n CONDITION\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n <!-- Branch Buttons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373]\">\n <div\n *ngFor=\"let branch of config.branches\"\n class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5\" (click)=\"onBranchClick(branch)\"\n [ngClass]=\"branch.executed \n ? 'cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF]' \n : 'cqa-bg-[#F3F4F6] cqa-text-[#99A1AF] cqa-border cqa-border-solid cqa-border-[#E5E7EB]'\">\n <div *ngIf=\"branch.executed\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>{{ branch.type.toUpperCase() }} ({{ branch.label }})</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\">\n\n <!-- Executed Branch Sub-steps -->\n <div *ngFor=\"let branch of config.branches\">\n <div *ngIf=\"branch.executed && branch.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pb-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div\n *ngFor=\"let subStep of branch.subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ config.stepNumber }}.{{ getSubStepIndex(branch.subSteps, subStep) }}. {{ subStep.description }}\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Unexecuted Branch Message -->\n <div *ngIf=\"getUnexecutedBranches().length > 0 && getUnexecutedBranches().length < 2\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} branch not executed\n </p>\n </div>\n\n <div *ngIf=\"getUnexecutedBranches().length > 1\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} and {{ getUnexecutedBranches()?.[1]?.type?.toUpperCase() }} branches not executed\n </p>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"isExpanded && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [timingBreakdown]=\"timingBreakdown\"\n [testStepResultId]=\"testStepResultId\"\n [expanded]=\"true\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", components: [{ type: i1.SelfHealAnalysisComponent, selector: "cqa-self-heal-analysis", inputs: ["originalLocator", "healedLocator", "confidence", "healMethod"], outputs: ["action"] }, { type: i2.ViewMoreFailedStepButtonComponent, selector: "cqa-view-more-failed-step-button", inputs: ["timingBreakdown", "subSteps", "failureDetails"], outputs: ["viewMoreClick"] }, { type: i3.UpdatedFailedStepComponent, selector: "cqa-updated-failed-step", inputs: ["timingBreakdown", "testStepResultId", "expanded", "subSteps", "failureDetails", "reasoning", "confidence", "isUploadingBaseline"], outputs: ["makeCurrentBaseline", "uploadBaseline", "analyze", "viewFullLogs"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
76
+ ConditionStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ConditionStepComponent, selector: "cqa-condition-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", conditionText: "conditionText", branches: "branches", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", selfHealAnalysis: "selfHealAnalysis", isUploadingBaseline: "isUploadingBaseline" }, outputs: { onBranchClickEvent: "onBranchClickEvent", makeCurrentBaseline: "makeCurrentBaseline", uploadBaseline: "uploadBaseline", analyze: "analyze", viewFullLogs: "viewFullLogs", selfHealAction: "selfHealAction" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, ngImport: i0, template: "<div>\n <div class=\"cqa-p-2\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pb-1.5 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div *ngIf=\"config.status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"config.status.toLowerCase() === 'failure'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Condition Icon -->\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#FFEDD5\"/><path d=\"M6 5V9\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10.5523 7 11 6.55228 11 6C11 5.44772 10.5523 5 10 5C9.44772 5 9 5.44772 9 6C9 6.55228 9.44772 7 10 7Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 11C6.55228 11 7 10.5523 7 10C7 9.44772 6.55228 9 6 9C5.44772 9 5 9.44772 5 10C5 10.5523 5.44772 11 6 11Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10 7.79565 9.68393 8.55871 9.12132 9.12132C8.55871 9.68393 7.79565 10 7 10\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3\">\n <span class=\"cqa-font-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. Condition: {{ config.conditionText }}\n </span>\n \n <!-- Condition Badge -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#EA580C] cqa-bg-[#FFEDD5] cqa-text-[10px] cqa-leading-[15px]\">\n CONDITION\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n <!-- Branch Buttons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373]\">\n <div\n *ngFor=\"let branch of config.branches\"\n class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5\" (click)=\"onBranchClick(branch)\"\n [ngClass]=\"branch.executed \n ? 'cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF]' \n : 'cqa-bg-[#F3F4F6] cqa-text-[#99A1AF] cqa-border cqa-border-solid cqa-border-[#E5E7EB]'\">\n <div *ngIf=\"branch.executed\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>{{ branch.type.toUpperCase() }} ({{ branch.label }})</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\">\n\n <!-- Executed Branch Sub-steps -->\n <div *ngFor=\"let branch of config.branches\">\n <div *ngIf=\"branch.executed && branch.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pb-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div\n *ngFor=\"let subStep of branch.subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ config.stepNumber }}.{{ getSubStepIndex(branch.subSteps, subStep) }}. {{ subStep.description }}\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Unexecuted Branch Message -->\n <div *ngIf=\"getUnexecutedBranches().length > 0 && getUnexecutedBranches().length < 2\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} branch not executed\n </p>\n </div>\n\n <div *ngIf=\"getUnexecutedBranches().length > 1\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} and {{ getUnexecutedBranches()?.[1]?.type?.toUpperCase() }} branches not executed\n </p>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"isExpanded && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [timingBreakdown]=\"timingBreakdown\"\n [testStepResultId]=\"testStepResultId\"\n [expanded]=\"true\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", components: [{ type: i1.SelfHealAnalysisComponent, selector: "cqa-self-heal-analysis", inputs: ["originalLocator", "healedLocator", "confidence", "healMethod"], outputs: ["action"] }, { type: i2.ViewMoreFailedStepButtonComponent, selector: "cqa-view-more-failed-step-button", inputs: ["timingBreakdown", "subSteps", "failureDetails"], outputs: ["viewMoreClick"] }, { type: i3.UpdatedFailedStepComponent, selector: "cqa-updated-failed-step", inputs: ["timingBreakdown", "testStepResultId", "expanded", "subSteps", "failureDetails", "reasoning", "confidence", "isUploadingBaseline"], outputs: ["makeCurrentBaseline", "uploadBaseline", "analyze", "viewFullLogs"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
77
77
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ConditionStepComponent, decorators: [{
78
78
  type: Component,
79
- args: [{ selector: 'cqa-condition-step', host: { class: 'cqa-ui-root' }, template: "<div>\n <div class=\"cqa-p-2\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pb-1.5 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Condition Icon -->\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#FFEDD5\"/><path d=\"M6 5V9\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10.5523 7 11 6.55228 11 6C11 5.44772 10.5523 5 10 5C9.44772 5 9 5.44772 9 6C9 6.55228 9.44772 7 10 7Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 11C6.55228 11 7 10.5523 7 10C7 9.44772 6.55228 9 6 9C5.44772 9 5 9.44772 5 10C5 10.5523 5.44772 11 6 11Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10 7.79565 9.68393 8.55871 9.12132 9.12132C8.55871 9.68393 7.79565 10 7 10\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3\">\n <span class=\"cqa-font-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. Condition: {{ config.conditionText }}\n </span>\n \n <!-- Condition Badge -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#EA580C] cqa-bg-[#FFEDD5] cqa-text-[10px] cqa-leading-[15px]\">\n CONDITION\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n <!-- Branch Buttons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373]\">\n <div\n *ngFor=\"let branch of config.branches\"\n class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5\" (click)=\"onBranchClick(branch)\"\n [ngClass]=\"branch.executed \n ? 'cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF]' \n : 'cqa-bg-[#F3F4F6] cqa-text-[#99A1AF] cqa-border cqa-border-solid cqa-border-[#E5E7EB]'\">\n <div *ngIf=\"branch.executed\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>{{ branch.type.toUpperCase() }} ({{ branch.label }})</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\">\n\n <!-- Executed Branch Sub-steps -->\n <div *ngFor=\"let branch of config.branches\">\n <div *ngIf=\"branch.executed && branch.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pb-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div\n *ngFor=\"let subStep of branch.subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ config.stepNumber }}.{{ getSubStepIndex(branch.subSteps, subStep) }}. {{ subStep.description }}\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Unexecuted Branch Message -->\n <div *ngIf=\"getUnexecutedBranches().length > 0 && getUnexecutedBranches().length < 2\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} branch not executed\n </p>\n </div>\n\n <div *ngIf=\"getUnexecutedBranches().length > 1\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} and {{ getUnexecutedBranches()?.[1]?.type?.toUpperCase() }} branches not executed\n </p>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"isExpanded && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [timingBreakdown]=\"timingBreakdown\"\n [testStepResultId]=\"testStepResultId\"\n [expanded]=\"true\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", styles: [] }]
79
+ args: [{ selector: 'cqa-condition-step', host: { class: 'cqa-ui-root' }, template: "<div>\n <div class=\"cqa-p-2\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pb-1.5 cqa-cursor-pointer\"\n (click)=\"toggle()\">\n \n <!-- Status Icon -->\n <div *ngIf=\"config.status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div *ngIf=\"config.status.toLowerCase() === 'failure'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Condition Icon -->\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#FFEDD5\"/><path d=\"M6 5V9\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10.5523 7 11 6.55228 11 6C11 5.44772 10.5523 5 10 5C9.44772 5 9 5.44772 9 6C9 6.55228 9.44772 7 10 7Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 11C6.55228 11 7 10.5523 7 10C7 9.44772 6.55228 9 6 9C5.44772 9 5 9.44772 5 10C5 10.5523 5.44772 11 6 11Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10 7.79565 9.68393 8.55871 9.12132 9.12132C8.55871 9.68393 7.79565 10 7 10\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3\">\n <span class=\"cqa-font-bold cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px]\">\n {{ config.stepNumber }}. Condition: {{ config.conditionText }}\n </span>\n \n <!-- Condition Badge -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#EA580C] cqa-bg-[#FFEDD5] cqa-text-[10px] cqa-leading-[15px]\">\n CONDITION\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n <span class=\"cqa-text-[9px] cqa-leading-[11px] cqa-text-[#9CA3AF]\">\n {{ formatDuration(config.duration) }}\n </span>\n <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n <!-- Branch Buttons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373]\">\n <div\n *ngFor=\"let branch of config.branches\"\n class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5\" (click)=\"onBranchClick(branch)\"\n [ngClass]=\"branch.executed \n ? 'cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF]' \n : 'cqa-bg-[#F3F4F6] cqa-text-[#99A1AF] cqa-border cqa-border-solid cqa-border-[#E5E7EB]'\">\n <div *ngIf=\"branch.executed\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>{{ branch.type.toUpperCase() }} ({{ branch.label }})</span>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\">\n\n <!-- Executed Branch Sub-steps -->\n <div *ngFor=\"let branch of config.branches\">\n <div *ngIf=\"branch.executed && branch.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pb-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'\">\n <div\n *ngFor=\"let subStep of branch.subSteps\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon -->\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n <!-- Sub-step Description -->\n <span class=\"cqa-flex-1 cqa-text-[11px] cqa-leading-[13px] cqa-text-[#364153]\">\n {{ config.stepNumber }}.{{ getSubStepIndex(branch.subSteps, subStep) }}. {{ subStep.description }}\n </span>\n\n <!-- Sub-step Duration -->\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n {{ formatDuration(subStep.duration) }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Unexecuted Branch Message -->\n <div *ngIf=\"getUnexecutedBranches().length > 0 && getUnexecutedBranches().length < 2\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} branch not executed\n </p>\n </div>\n\n <div *ngIf=\"getUnexecutedBranches().length > 1\" class=\"cqa-ml-9\">\n <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} and {{ getUnexecutedBranches()?.[1]?.type?.toUpperCase() }} branches not executed\n </p>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span>\n </div>\n </span>\n </div>\n </div>\n\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"isExpanded && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n </cqa-view-more-failed-step-button>\n </div>\n\n <!-- Updated Failed Step Component - shown when button is clicked -->\n <div *ngIf=\"showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-updated-failed-step\n [timingBreakdown]=\"timingBreakdown\"\n [testStepResultId]=\"testStepResultId\"\n [expanded]=\"true\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [reasoning]=\"reasoning\"\n [confidence]=\"confidence\"\n [isUploadingBaseline]=\"isUploadingBaseline\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n</div>\n", styles: [] }]
80
80
  }], propDecorators: { id: [{
81
81
  type: Input
82
82
  }], testStepResultId: [{
@@ -120,4 +120,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
120
120
  }], selfHealAction: [{
121
121
  type: Output
122
122
  }] } });
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2NvbmRpdGlvbi1zdGVwL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9jb25kaXRpb24tc3RlcC9jb25kaXRpb24tc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFTM0QsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQU43RDs7UUFzQlksdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDMUQsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO1FBQ25FLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDekQsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbkMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQW9ELENBQUM7UUFFaEcsMEJBQXFCLEdBQVksS0FBSyxDQUFDO0tBd0V4QztJQW5FVSxRQUFRO1FBQ2Ysc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixJQUFJLEVBQUUsV0FBVztZQUNqQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDRCxDQUFDO1FBRXpCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDL0QsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGVBQWUsQ0FBQyxRQUFlLEVBQUUsT0FBWTtRQUMzQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBdUI7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9CLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQseUJBQXlCLENBQUMsUUFBaUI7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hELE9BQU8sY0FBYyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQStCO1FBQ25ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQTBCO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQXVEO1FBQ3RFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O21IQTlGVSxzQkFBc0I7dUdBQXRCLHNCQUFzQix1dkJDWG5DLG05UkE2SUE7MkZEbElhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxvQkFBb0IsUUFHeEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUlyQixFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRSxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25kaXRpb25TdGVwQ29uZmlnLCBDb25kaXRpb25CcmFuY2gsIFN0ZXBTdGF0dXMsIFRpbWluZ0JyZWFrZG93biwgRmFpbHVyZURldGFpbHMsIFN1YlN0ZXAsIFNlbGZIZWFsQW5hbHlzaXNEYXRhLCBTZWxmSGVhbEFjdGlvbiB9IGZyb20gJy4uL2V4ZWN1dGlvbi1zdGVwLm1vZGVscyc7XG5pbXBvcnQgeyBCYXNlU3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2Utc3RlcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50LCB1cGxvYWRCYXNlbGluZUV2ZW50IH0gZnJvbSAnLi4vdmlzdWFsLWNvbXBhcmlzb24vdmlzdWFsLWNvbXBhcmlzb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWNvbmRpdGlvbi1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvblN0ZXBDb21wb25lbnQgZXh0ZW5kcyBCYXNlU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIEluZGl2aWR1YWwgaW5wdXRzXG4gIEBJbnB1dCgpIGlkITogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXN0U3RlcFJlc3VsdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGVwTnVtYmVyITogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcbiAgQElucHV0KCkgc3RhdHVzITogU3RlcFN0YXR1cztcbiAgQElucHV0KCkgZHVyYXRpb24hOiBudW1iZXI7XG4gIEBJbnB1dCgpIHRpbWluZ0JyZWFrZG93bj86IFRpbWluZ0JyZWFrZG93bjtcbiAgQElucHV0KCkgZXhwYW5kZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBjb25kaXRpb25UZXh0ITogc3RyaW5nO1xuICBASW5wdXQoKSBicmFuY2hlcyE6IENvbmRpdGlvbkJyYW5jaFtdO1xuICBASW5wdXQoKSBmYWlsdXJlRGV0YWlscz86IEZhaWx1cmVEZXRhaWxzO1xuICBASW5wdXQoKSByZWFzb25pbmc/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29uZmlkZW5jZT86IHN0cmluZztcbiAgQElucHV0KCkgc2VsZkhlYWxBbmFseXNpcz86IFNlbGZIZWFsQW5hbHlzaXNEYXRhO1xuICBAT3V0cHV0KCkgb25CcmFuY2hDbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDb25kaXRpb25CcmFuY2g+KCk7XG4gIEBJbnB1dCgpIGlzVXBsb2FkaW5nQmFzZWxpbmUgPSB7fTtcbiAgQE91dHB1dCgpIG1ha2VDdXJyZW50QmFzZWxpbmUgPSBuZXcgRXZlbnRFbWl0dGVyPG1ha2VDdXJyZW50QmFzZWxpbmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIHVwbG9hZEJhc2VsaW5lID0gbmV3IEV2ZW50RW1pdHRlcjx1cGxvYWRCYXNlbGluZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgYW5hbHl6ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHZpZXdGdWxsTG9ncyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlbGZIZWFsQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IHR5cGU6IFNlbGZIZWFsQWN0aW9uOyBoZWFsZWRMb2NhdG9yOiBzdHJpbmc7IH0+KCk7XG5cbiAgc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gQ29uZmlnIHByb3BlcnR5IGZvciBiYXNlIGNsYXNzIC0gYnVpbHQgZnJvbSBpbmRpdmlkdWFsIGlucHV0cyBpbiBuZ09uSW5pdFxuICBvdmVycmlkZSBjb25maWchOiBDb25kaXRpb25TdGVwQ29uZmlnO1xuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEJ1aWxkIGNvbmZpZyBmcm9tIGluZGl2aWR1YWwgaW5wdXRzXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRlc3RTdGVwUmVzdWx0SWQ6IHRoaXMudGVzdFN0ZXBSZXN1bHRJZCxcbiAgICAgIHN0ZXBOdW1iZXI6IHRoaXMuc3RlcE51bWJlcixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgICAgdHlwZTogJ2NvbmRpdGlvbicsXG4gICAgICBjb25kaXRpb25UZXh0OiB0aGlzLmNvbmRpdGlvblRleHQsXG4gICAgICBicmFuY2hlczogdGhpcy5icmFuY2hlcyxcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICB9IGFzIENvbmRpdGlvblN0ZXBDb25maWc7XG5cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgZ2V0RXhlY3V0ZWRCcmFuY2goKTogQ29uZGl0aW9uQnJhbmNoIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYnJhbmNoZXMuZmluZChicmFuY2ggPT4gYnJhbmNoLmV4ZWN1dGVkKSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCk6IENvbmRpdGlvbkJyYW5jaFtdIHtcbiAgICByZXR1cm4gdGhpcy5icmFuY2hlcy5maWx0ZXIoYnJhbmNoID0+ICFicmFuY2guZXhlY3V0ZWQpO1xuICB9XG5cbiAgZ2V0U3ViU3RlcEluZGV4KHN1YlN0ZXBzOiBhbnlbXSwgc3ViU3RlcDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3ViU3RlcHMuaW5kZXhPZihzdWJTdGVwKSArIDE7XG4gIH1cblxuICBvbkJyYW5jaENsaWNrKGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuYnJhbmNoZXMuZm9yRWFjaChiID0+IHtcbiAgICAgIGIuZXhlY3V0ZWQgPSBiLnR5cGUgPT09IGJyYW5jaC50eXBlO1xuICAgIH0pO1xuICAgIHRoaXMub25CcmFuY2hDbGlja0V2ZW50LmVtaXQoYnJhbmNoKTtcbiAgfVxuXG4gIG9uVmlld01vcmVGYWlsZWRTdGVwQ2xpY2soZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGYWlsZWRTdGVwRGV0YWlscyA9IGV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKCk6IFN1YlN0ZXBbXSB7XG4gICAgY29uc3QgZXhlY3V0ZWRCcmFuY2ggPSB0aGlzLmdldEV4ZWN1dGVkQnJhbmNoKCk7XG4gICAgcmV0dXJuIGV4ZWN1dGVkQnJhbmNoPy5zdWJTdGVwcyB8fCBbXTtcbiAgfVxuXG4gIG9uTWFrZUN1cnJlbnRCYXNlbGluZShldmVudDogbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tYWtlQ3VycmVudEJhc2VsaW5lLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25VcGxvYWRCYXNlbGluZShldmVudDogdXBsb2FkQmFzZWxpbmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkQmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkFuYWx5emUoKTogdm9pZCB7XG4gICAgdGhpcy5hbmFseXplLmVtaXQoKTtcbiAgfVxuXG4gIG9uVmlld0Z1bGxMb2dzKCk6IHZvaWQge1xuICAgIHRoaXMudmlld0Z1bGxMb2dzLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2VsZkhlYWxBY3Rpb24oZXZlbnQ6IHsgdHlwZTogU2VsZkhlYWxBY3Rpb247IGhlYWxlZExvY2F0b3I6IHN0cmluZzsgfSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZkhlYWxBY3Rpb24uZW1pdChldmVudCk7XG4gIH1cblxufVxuIiwiPGRpdj5cbiAgPGRpdiBjbGFzcz1cImNxYS1wLTJcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1wYi0xLjUgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGUoKVwiPlxuICAgICAgXG4gICAgICA8IS0tIFN0YXR1cyBJY29uIC0tPlxuICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cblxuICAgICAgPCEtLSBDb25kaXRpb24gSWNvbiAtLT5cbiAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgcng9XCI0XCIgZmlsbD1cIiNGRkVERDVcIi8+PHBhdGggZD1cIk02IDVWOVwiIHN0cm9rZT1cIiNGRDlBMDBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNMTAgN0MxMC41NTIzIDcgMTEgNi41NTIyOCAxMSA2QzExIDUuNDQ3NzIgMTAuNTUyMyA1IDEwIDVDOS40NDc3MiA1IDkgNS40NDc3MiA5IDZDOSA2LjU1MjI4IDkuNDQ3NzIgNyAxMCA3WlwiIHN0cm9rZT1cIiNGRDlBMDBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAxMUM2LjU1MjI4IDExIDcgMTAuNTUyMyA3IDEwQzcgOS40NDc3MiA2LjU1MjI4IDkgNiA5QzUuNDQ3NzIgOSA1IDkuNDQ3NzIgNSAxMEM1IDEwLjU1MjMgNS40NDc3MiAxMSA2IDExWlwiIHN0cm9rZT1cIiNGRDlBMDBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNMTAgN0MxMCA3Ljc5NTY1IDkuNjgzOTMgOC41NTg3MSA5LjEyMTMyIDkuMTIxMzJDOC41NTg3MSA5LjY4MzkzIDcuNzk1NjUgMTAgNyAxMFwiIHN0cm9rZT1cIiNGRDlBMDBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuXG4gICAgICA8IS0tIFN0ZXAgTnVtYmVyIGFuZCBUaXRsZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtYm9sZCBjcWEtdGV4dC1bIzMzNDE1NV0gY3FhLXRleHQtWzExcHhdIGNxYS1sZWFkaW5nLVsxM3B4XVwiPlxuICAgICAgICAgIHt7IGNvbmZpZy5zdGVwTnVtYmVyIH19LiBDb25kaXRpb246IHt7IGNvbmZpZy5jb25kaXRpb25UZXh0IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gQ29uZGl0aW9uIEJhZGdlIC0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNFQTU4MENdIGNxYS1iZy1bI0ZGRURENV0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XVwiPlxuICAgICAgICAgIENPTkRJVElPTlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzlweF0gY3FhLWxlYWRpbmctWzExcHhdIGNxYS10ZXh0LVsjOUNBM0FGXVwiPlxuICAgICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKGNvbmZpZy5kdXJhdGlvbikgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3ZnIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0zLjUgNUw3IDguNUwxMC41IDVcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMC44MzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEJyYW5jaCBCdXR0b25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtcHgtNCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzczNzM3M11cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGJyYW5jaCBvZiBjb25maWcuYnJhbmNoZXNcIlxuICAgICAgICBjbGFzcz1cImNxYS1weC0yIGNxYS1weS0xIGNxYS1yb3VuZGVkIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjVcIiAoY2xpY2spPVwib25CcmFuY2hDbGljayhicmFuY2gpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiYnJhbmNoLmV4ZWN1dGVkIFxuICAgICAgICAgID8gJ2NxYS1iZy1bI0RDRkNFN10gY3FhLXRleHQtWyMwMDgyMzZdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjQjlGOENGXScgXG4gICAgICAgICAgOiAnY3FhLWJnLVsjRjNGNEY2XSBjcWEtdGV4dC1bIzk5QTFBRl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdJ1wiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYnJhbmNoLmV4ZWN1dGVkXCI+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMCAzTDQuNSA4LjVMMiA2XCIgc3Ryb2tlPVwiIzAwODIzNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPHNwYW4+e3sgYnJhbmNoLnR5cGUudG9VcHBlckNhc2UoKSB9fSAoe3sgYnJhbmNoLmxhYmVsIH19KTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkXCI+XG5cbiAgICA8IS0tIEV4ZWN1dGVkIEJyYW5jaCBTdWItc3RlcHMgLS0+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgYnJhbmNoIG9mIGNvbmZpZy5icmFuY2hlc1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImJyYW5jaC5leGVjdXRlZCAmJiBicmFuY2guc3ViU3RlcHNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLXBiLTEgY3FhLW1sLTlcIiBzdHlsZT1cImJvcmRlci1ib3R0b206ICcxcHggc29saWQgI0YzRjRGNidcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWJTdGVwIG9mIGJyYW5jaC5zdWJTdGVwc1wiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtcHktWzUuNXB4XSBjcWEtcHgtM1wiPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gU3ViLXN0ZXAgU3RhdHVzIEljb24gLS0+XG4gICAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzAwQTYzRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA2TDUuNSA3TDcuNSA1XCIgc3Ryb2tlPVwiIzAwQTYzRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cblxuICAgICAgICAgIDwhLS0gU3ViLXN0ZXAgRGVzY3JpcHRpb24gLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZmxleC0xIGNxYS10ZXh0LVsxMXB4XSBjcWEtbGVhZGluZy1bMTNweF0gY3FhLXRleHQtWyMzNjQxNTNdXCI+XG4gICAgICAgICAgICB7eyBjb25maWcuc3RlcE51bWJlciB9fS57eyBnZXRTdWJTdGVwSW5kZXgoYnJhbmNoLnN1YlN0ZXBzLCBzdWJTdGVwKSB9fS4ge3sgc3ViU3RlcC5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwhLS0gU3ViLXN0ZXAgRHVyYXRpb24gLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1tZXRhZGF0YS1rZXlcIj5cbiAgICAgICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKHN1YlN0ZXAuZHVyYXRpb24pIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBVbmV4ZWN1dGVkIEJyYW5jaCBNZXNzYWdlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJnZXRVbmV4ZWN1dGVkQnJhbmNoZXMoKS5sZW5ndGggPiAwICYmIGdldFVuZXhlY3V0ZWRCcmFuY2hlcygpLmxlbmd0aCA8IDJcIiBjbGFzcz1cImNxYS1tbC05XCI+XG4gICAgICA8cCBjbGFzcz1cImNxYS1weC0zIGNxYS1weS1bMTBweF0gY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLXRleHQtWyM3MzczNzNdIGNxYS1pdGFsaWNcIj5cbiAgICAgICAge3sgZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCk/LlswXT8udHlwZT8udG9VcHBlckNhc2UoKSB9fSBicmFuY2ggbm90IGV4ZWN1dGVkXG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCkubGVuZ3RoID4gMVwiIGNsYXNzPVwiY3FhLW1sLTlcIj5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLXB4LTMgY3FhLXB5LVsxMHB4XSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctNCBjcWEtdGV4dC1bIzczNzM3M10gY3FhLWl0YWxpY1wiPlxuICAgICAgICB7eyBnZXRVbmV4ZWN1dGVkQnJhbmNoZXMoKT8uWzBdPy50eXBlPy50b1VwcGVyQ2FzZSgpIH19IGFuZCB7eyBnZXRVbmV4ZWN1dGVkQnJhbmNoZXMoKT8uWzFdPy50eXBlPy50b1VwcGVyQ2FzZSgpIH19IGJyYW5jaGVzIG5vdCBleGVjdXRlZFxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNlbGYgSGVhbCBBbmFseXNpcyAtLT5cbiAgICA8Y3FhLXNlbGYtaGVhbC1hbmFseXNpcyBcbiAgICAgICpuZ0lmPVwic2VsZkhlYWxBbmFseXNpc1wiIFxuICAgICAgW29yaWdpbmFsTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLm9yaWdpbmFsTG9jYXRvclwiXG4gICAgICBbaGVhbGVkTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxlZExvY2F0b3JcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwic2VsZkhlYWxBbmFseXNpcy5jb25maWRlbmNlXCJcbiAgICAgIFtoZWFsTWV0aG9kXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbE1ldGhvZFwiXG4gICAgICAoYWN0aW9uKT1cIm9uU2VsZkhlYWxBY3Rpb24oJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlbGYtaGVhbC1hbmFseXNpcz5cblxuICAgIDwhLS0gVGltaW5nIEJyZWFrZG93biAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnRpbWluZ0JyZWFrZG93blwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLWdhcC01IGNxYS1wdC0xLjUgY3FhLXB4LTQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgIDxzcGFuPlRpbWluZyBicmVha2Rvd248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZGlhbG9nLW11dGVkIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQXBwIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLmFwcCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTS0zLjgxNDdlLTA2IDEwLjMyVi03LjE1MjU2ZS0wN0gwLjk1OTk5NlYxMC4zMkgtMy44MTQ3ZS0wNlpcIiBmaWxsPVwiI0U1RTdFQlwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLnRvb2wpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZCAmJiBmYWlsdXJlRGV0YWlsc1wiIGNsYXNzPVwiY3FhLW10LTIgY3FhLXB4LTRcIj5cbiAgICA8Y3FhLXZpZXctbW9yZS1mYWlsZWQtc3RlcC1idXR0b25cbiAgICAgIFt0aW1pbmdCcmVha2Rvd25dPVwidGltaW5nQnJlYWtkb3duXCJcbiAgICAgIFtzdWJTdGVwc109XCJnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKVwiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgKHZpZXdNb3JlQ2xpY2spPVwib25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljaygkZXZlbnQpXCI+XG4gICAgPC9jcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBVcGRhdGVkIEZhaWxlZCBTdGVwIENvbXBvbmVudCAtIHNob3duIHdoZW4gYnV0dG9uIGlzIGNsaWNrZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJzaG93RmFpbGVkU3RlcERldGFpbHMgJiYgZmFpbHVyZURldGFpbHNcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS11cGRhdGVkLWZhaWxlZC1zdGVwXG4gICAgICBbdGltaW5nQnJlYWtkb3duXT1cInRpbWluZ0JyZWFrZG93blwiXG4gICAgICBbdGVzdFN0ZXBSZXN1bHRJZF09XCJ0ZXN0U3RlcFJlc3VsdElkXCJcbiAgICAgIFtleHBhbmRlZF09XCJ0cnVlXCJcbiAgICAgIFtzdWJTdGVwc109XCJnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKVwiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgW3JlYXNvbmluZ109XCJyZWFzb25pbmdcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwiY29uZmlkZW5jZVwiXG4gICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgIChtYWtlQ3VycmVudEJhc2VsaW5lKT1cIm9uTWFrZUN1cnJlbnRCYXNlbGluZSgkZXZlbnQpXCJcbiAgICAgICh1cGxvYWRCYXNlbGluZSk9XCJvblVwbG9hZEJhc2VsaW5lKCRldmVudClcIlxuICAgICAgKGFuYWx5emUpPVwib25BbmFseXplKClcIlxuICAgICAgKHZpZXdGdWxsTG9ncyk9XCJvblZpZXdGdWxsTG9ncygpXCI+XG4gICAgPC9jcWEtdXBkYXRlZC1mYWlsZWQtc3RlcD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2NvbmRpdGlvbi1zdGVwL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9jb25kaXRpb24tc3RlcC9jb25kaXRpb24tc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFTM0QsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGlCQUFpQjtJQU43RDs7UUFzQlksdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDMUQsd0JBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO1FBQ25FLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDekQsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbkMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQW9ELENBQUM7UUFFaEcsMEJBQXFCLEdBQVksS0FBSyxDQUFDO0tBd0V4QztJQW5FVSxRQUFRO1FBQ2Ysc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixJQUFJLEVBQUUsV0FBVztZQUNqQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDRCxDQUFDO1FBRXpCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDL0QsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGVBQWUsQ0FBQyxRQUFlLEVBQUUsT0FBWTtRQUMzQyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBdUI7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9CLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQseUJBQXlCLENBQUMsUUFBaUI7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hELE9BQU8sY0FBYyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQStCO1FBQ25ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQTBCO1FBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQXVEO1FBQ3RFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7O21IQTlGVSxzQkFBc0I7dUdBQXRCLHNCQUFzQix1dkJDWG5DLHNrVEE4SUE7MkZEbklhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxvQkFBb0IsUUFHeEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUlyQixFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRSxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0ksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25kaXRpb25TdGVwQ29uZmlnLCBDb25kaXRpb25CcmFuY2gsIFN0ZXBTdGF0dXMsIFRpbWluZ0JyZWFrZG93biwgRmFpbHVyZURldGFpbHMsIFN1YlN0ZXAsIFNlbGZIZWFsQW5hbHlzaXNEYXRhLCBTZWxmSGVhbEFjdGlvbiB9IGZyb20gJy4uL2V4ZWN1dGlvbi1zdGVwLm1vZGVscyc7XG5pbXBvcnQgeyBCYXNlU3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2Utc3RlcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50LCB1cGxvYWRCYXNlbGluZUV2ZW50IH0gZnJvbSAnLi4vdmlzdWFsLWNvbXBhcmlzb24vdmlzdWFsLWNvbXBhcmlzb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWNvbmRpdGlvbi1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmRpdGlvbi1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvblN0ZXBDb21wb25lbnQgZXh0ZW5kcyBCYXNlU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIEluZGl2aWR1YWwgaW5wdXRzXG4gIEBJbnB1dCgpIGlkITogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXN0U3RlcFJlc3VsdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGVwTnVtYmVyITogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcbiAgQElucHV0KCkgc3RhdHVzITogU3RlcFN0YXR1cztcbiAgQElucHV0KCkgZHVyYXRpb24hOiBudW1iZXI7XG4gIEBJbnB1dCgpIHRpbWluZ0JyZWFrZG93bj86IFRpbWluZ0JyZWFrZG93bjtcbiAgQElucHV0KCkgZXhwYW5kZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBjb25kaXRpb25UZXh0ITogc3RyaW5nO1xuICBASW5wdXQoKSBicmFuY2hlcyE6IENvbmRpdGlvbkJyYW5jaFtdO1xuICBASW5wdXQoKSBmYWlsdXJlRGV0YWlscz86IEZhaWx1cmVEZXRhaWxzO1xuICBASW5wdXQoKSByZWFzb25pbmc/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgY29uZmlkZW5jZT86IHN0cmluZztcbiAgQElucHV0KCkgc2VsZkhlYWxBbmFseXNpcz86IFNlbGZIZWFsQW5hbHlzaXNEYXRhO1xuICBAT3V0cHV0KCkgb25CcmFuY2hDbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDb25kaXRpb25CcmFuY2g+KCk7XG4gIEBJbnB1dCgpIGlzVXBsb2FkaW5nQmFzZWxpbmUgPSB7fTtcbiAgQE91dHB1dCgpIG1ha2VDdXJyZW50QmFzZWxpbmUgPSBuZXcgRXZlbnRFbWl0dGVyPG1ha2VDdXJyZW50QmFzZWxpbmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIHVwbG9hZEJhc2VsaW5lID0gbmV3IEV2ZW50RW1pdHRlcjx1cGxvYWRCYXNlbGluZUV2ZW50PigpO1xuICBAT3V0cHV0KCkgYW5hbHl6ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHZpZXdGdWxsTG9ncyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlbGZIZWFsQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IHR5cGU6IFNlbGZIZWFsQWN0aW9uOyBoZWFsZWRMb2NhdG9yOiBzdHJpbmc7IH0+KCk7XG5cbiAgc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gQ29uZmlnIHByb3BlcnR5IGZvciBiYXNlIGNsYXNzIC0gYnVpbHQgZnJvbSBpbmRpdmlkdWFsIGlucHV0cyBpbiBuZ09uSW5pdFxuICBvdmVycmlkZSBjb25maWchOiBDb25kaXRpb25TdGVwQ29uZmlnO1xuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEJ1aWxkIGNvbmZpZyBmcm9tIGluZGl2aWR1YWwgaW5wdXRzXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRlc3RTdGVwUmVzdWx0SWQ6IHRoaXMudGVzdFN0ZXBSZXN1bHRJZCxcbiAgICAgIHN0ZXBOdW1iZXI6IHRoaXMuc3RlcE51bWJlcixcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgICAgdHlwZTogJ2NvbmRpdGlvbicsXG4gICAgICBjb25kaXRpb25UZXh0OiB0aGlzLmNvbmRpdGlvblRleHQsXG4gICAgICBicmFuY2hlczogdGhpcy5icmFuY2hlcyxcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICB9IGFzIENvbmRpdGlvblN0ZXBDb25maWc7XG5cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgZ2V0RXhlY3V0ZWRCcmFuY2goKTogQ29uZGl0aW9uQnJhbmNoIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYnJhbmNoZXMuZmluZChicmFuY2ggPT4gYnJhbmNoLmV4ZWN1dGVkKSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCk6IENvbmRpdGlvbkJyYW5jaFtdIHtcbiAgICByZXR1cm4gdGhpcy5icmFuY2hlcy5maWx0ZXIoYnJhbmNoID0+ICFicmFuY2guZXhlY3V0ZWQpO1xuICB9XG5cbiAgZ2V0U3ViU3RlcEluZGV4KHN1YlN0ZXBzOiBhbnlbXSwgc3ViU3RlcDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3ViU3RlcHMuaW5kZXhPZihzdWJTdGVwKSArIDE7XG4gIH1cblxuICBvbkJyYW5jaENsaWNrKGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWcuYnJhbmNoZXMuZm9yRWFjaChiID0+IHtcbiAgICAgIGIuZXhlY3V0ZWQgPSBiLnR5cGUgPT09IGJyYW5jaC50eXBlO1xuICAgIH0pO1xuICAgIHRoaXMub25CcmFuY2hDbGlja0V2ZW50LmVtaXQoYnJhbmNoKTtcbiAgfVxuXG4gIG9uVmlld01vcmVGYWlsZWRTdGVwQ2xpY2soZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGYWlsZWRTdGVwRGV0YWlscyA9IGV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKCk6IFN1YlN0ZXBbXSB7XG4gICAgY29uc3QgZXhlY3V0ZWRCcmFuY2ggPSB0aGlzLmdldEV4ZWN1dGVkQnJhbmNoKCk7XG4gICAgcmV0dXJuIGV4ZWN1dGVkQnJhbmNoPy5zdWJTdGVwcyB8fCBbXTtcbiAgfVxuXG4gIG9uTWFrZUN1cnJlbnRCYXNlbGluZShldmVudDogbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tYWtlQ3VycmVudEJhc2VsaW5lLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25VcGxvYWRCYXNlbGluZShldmVudDogdXBsb2FkQmFzZWxpbmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkQmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkFuYWx5emUoKTogdm9pZCB7XG4gICAgdGhpcy5hbmFseXplLmVtaXQoKTtcbiAgfVxuXG4gIG9uVmlld0Z1bGxMb2dzKCk6IHZvaWQge1xuICAgIHRoaXMudmlld0Z1bGxMb2dzLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2VsZkhlYWxBY3Rpb24oZXZlbnQ6IHsgdHlwZTogU2VsZkhlYWxBY3Rpb247IGhlYWxlZExvY2F0b3I6IHN0cmluZzsgfSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZkhlYWxBY3Rpb24uZW1pdChldmVudCk7XG4gIH1cblxufVxuIiwiPGRpdj5cbiAgPGRpdiBjbGFzcz1cImNxYS1wLTJcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1wYi0xLjUgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGUoKVwiPlxuICAgICAgXG4gICAgICA8IS0tIFN0YXR1cyBJY29uIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnXCIgPjxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAuOTAwNSA0Ljk5OTk5QzExLjEyODkgNi4xMjA2NCAxMC45NjYyIDcuMjg1NzEgMTAuNDM5NSA4LjMwMDg5QzkuOTEyNzkgOS4zMTYwOCA5LjA1NCAxMC4xMiA4LjAwNjMxIDEwLjU3ODdDNi45NTg2MiAxMS4wMzczIDUuNzg1MzYgMTEuMTIyOSA0LjY4MjIgMTAuODIxMkMzLjU3OTA0IDEwLjUxOTUgMi42MTI2NSA5Ljg0ODY5IDEuOTQ0MTkgOC45MjA3MUMxLjI3NTczIDcuOTkyNzIgMC45NDU2MTEgNi44NjM2MSAxLjAwODg4IDUuNzIxNjlDMS4wNzIxNSA0LjU3OTc2IDEuNTI0OTkgMy40OTQwNCAyLjI5MTg4IDIuNjQ1NThDMy4wNTg3NiAxLjc5NzEyIDQuMDkzMzQgMS4yMzcyMSA1LjIyMzA4IDEuMDU5MjJDNi4zNTI4MiAwLjg4MTIzMyA3LjUwOTQ0IDEuMDk1OTIgOC41MDAwNSAxLjY2NzQ5XCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA1LjVMNiA3TDExIDJcIiBzdHJva2U9XCIjMjJDNTVFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWx1cmUnXCI+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk03LjUgNC41TDQuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNC41IDQuNUw3LjUgNy41XCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cblxuICAgICAgPCEtLSBDb25kaXRpb24gSWNvbiAtLT5cbiAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgcng9XCI0XCIgZmlsbD1cIiNGRkVERDVcIi8+PHBhdGggZD1cIk02IDVWOVwiIHN0cm9rZT1cIiNGRDlBMDBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNMTAgN0MxMC41NTIzIDcgMTEgNi41NTIyOCAxMSA2QzExIDUuNDQ3NzIgMTAuNTUyMyA1IDEwIDVDOS40NDc3MiA1IDkgNS40NDc3MiA5IDZDOSA2LjU1MjI4IDkuNDQ3NzIgNyAxMCA3WlwiIHN0cm9rZT1cIiNGRDlBMDBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAxMUM2LjU1MjI4IDExIDcgMTAuNTUyMyA3IDEwQzcgOS40NDc3MiA2LjU1MjI4IDkgNiA5QzUuNDQ3NzIgOSA1IDkuNDQ3NzIgNSAxMEM1IDEwLjU1MjMgNS40NDc3MiAxMSA2IDExWlwiIHN0cm9rZT1cIiNGRDlBMDBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNMTAgN0MxMCA3Ljc5NTY1IDkuNjgzOTMgOC41NTg3MSA5LjEyMTMyIDkuMTIxMzJDOC41NTg3MSA5LjY4MzkzIDcuNzk1NjUgMTAgNyAxMFwiIHN0cm9rZT1cIiNGRDlBMDBcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuXG4gICAgICA8IS0tIFN0ZXAgTnVtYmVyIGFuZCBUaXRsZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZvbnQtYm9sZCBjcWEtdGV4dC1bIzMzNDE1NV0gY3FhLXRleHQtWzExcHhdIGNxYS1sZWFkaW5nLVsxM3B4XVwiPlxuICAgICAgICAgIHt7IGNvbmZpZy5zdGVwTnVtYmVyIH19LiBDb25kaXRpb246IHt7IGNvbmZpZy5jb25kaXRpb25UZXh0IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gQ29uZGl0aW9uIEJhZGdlIC0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNFQTU4MENdIGNxYS1iZy1bI0ZGRURENV0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XVwiPlxuICAgICAgICAgIENPTkRJVElPTlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzlweF0gY3FhLWxlYWRpbmctWzExcHhdIGNxYS10ZXh0LVsjOUNBM0FGXVwiPlxuICAgICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKGNvbmZpZy5kdXJhdGlvbikgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3ZnIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0zLjUgNUw3IDguNUwxMC41IDVcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMC44MzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEJyYW5jaCBCdXR0b25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtcHgtNCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzczNzM3M11cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGJyYW5jaCBvZiBjb25maWcuYnJhbmNoZXNcIlxuICAgICAgICBjbGFzcz1cImNxYS1weC0yIGNxYS1weS0xIGNxYS1yb3VuZGVkIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjVcIiAoY2xpY2spPVwib25CcmFuY2hDbGljayhicmFuY2gpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiYnJhbmNoLmV4ZWN1dGVkIFxuICAgICAgICAgID8gJ2NxYS1iZy1bI0RDRkNFN10gY3FhLXRleHQtWyMwMDgyMzZdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjQjlGOENGXScgXG4gICAgICAgICAgOiAnY3FhLWJnLVsjRjNGNEY2XSBjcWEtdGV4dC1bIzk5QTFBRl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdJ1wiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYnJhbmNoLmV4ZWN1dGVkXCI+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMCAzTDQuNSA4LjVMMiA2XCIgc3Ryb2tlPVwiIzAwODIzNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPHNwYW4+e3sgYnJhbmNoLnR5cGUudG9VcHBlckNhc2UoKSB9fSAoe3sgYnJhbmNoLmxhYmVsIH19KTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEV4cGFuZGVkIENvbnRlbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0V4cGFuZGVkXCI+XG5cbiAgICA8IS0tIEV4ZWN1dGVkIEJyYW5jaCBTdWItc3RlcHMgLS0+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgYnJhbmNoIG9mIGNvbmZpZy5icmFuY2hlc1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImJyYW5jaC5leGVjdXRlZCAmJiBicmFuY2guc3ViU3RlcHNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLXBiLTEgY3FhLW1sLTlcIiBzdHlsZT1cImJvcmRlci1ib3R0b206ICcxcHggc29saWQgI0YzRjRGNidcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWJTdGVwIG9mIGJyYW5jaC5zdWJTdGVwc1wiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtcHktWzUuNXB4XSBjcWEtcHgtM1wiPlxuICAgICAgICAgIFxuICAgICAgICAgIDwhLS0gU3ViLXN0ZXAgU3RhdHVzIEljb24gLS0+XG4gICAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzAwQTYzRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA2TDUuNSA3TDcuNSA1XCIgc3Ryb2tlPVwiIzAwQTYzRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cblxuICAgICAgICAgIDwhLS0gU3ViLXN0ZXAgRGVzY3JpcHRpb24gLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZmxleC0xIGNxYS10ZXh0LVsxMXB4XSBjcWEtbGVhZGluZy1bMTNweF0gY3FhLXRleHQtWyMzNjQxNTNdXCI+XG4gICAgICAgICAgICB7eyBjb25maWcuc3RlcE51bWJlciB9fS57eyBnZXRTdWJTdGVwSW5kZXgoYnJhbmNoLnN1YlN0ZXBzLCBzdWJTdGVwKSB9fS4ge3sgc3ViU3RlcC5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgIDwhLS0gU3ViLXN0ZXAgRHVyYXRpb24gLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1tZXRhZGF0YS1rZXlcIj5cbiAgICAgICAgICAgIHt7IGZvcm1hdER1cmF0aW9uKHN1YlN0ZXAuZHVyYXRpb24pIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBVbmV4ZWN1dGVkIEJyYW5jaCBNZXNzYWdlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJnZXRVbmV4ZWN1dGVkQnJhbmNoZXMoKS5sZW5ndGggPiAwICYmIGdldFVuZXhlY3V0ZWRCcmFuY2hlcygpLmxlbmd0aCA8IDJcIiBjbGFzcz1cImNxYS1tbC05XCI+XG4gICAgICA8cCBjbGFzcz1cImNxYS1weC0zIGNxYS1weS1bMTBweF0gY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLTQgY3FhLXRleHQtWyM3MzczNzNdIGNxYS1pdGFsaWNcIj5cbiAgICAgICAge3sgZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCk/LlswXT8udHlwZT8udG9VcHBlckNhc2UoKSB9fSBicmFuY2ggbm90IGV4ZWN1dGVkXG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0VW5leGVjdXRlZEJyYW5jaGVzKCkubGVuZ3RoID4gMVwiIGNsYXNzPVwiY3FhLW1sLTlcIj5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLXB4LTMgY3FhLXB5LVsxMHB4XSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctNCBjcWEtdGV4dC1bIzczNzM3M10gY3FhLWl0YWxpY1wiPlxuICAgICAgICB7eyBnZXRVbmV4ZWN1dGVkQnJhbmNoZXMoKT8uWzBdPy50eXBlPy50b1VwcGVyQ2FzZSgpIH19IGFuZCB7eyBnZXRVbmV4ZWN1dGVkQnJhbmNoZXMoKT8uWzFdPy50eXBlPy50b1VwcGVyQ2FzZSgpIH19IGJyYW5jaGVzIG5vdCBleGVjdXRlZFxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNlbGYgSGVhbCBBbmFseXNpcyAtLT5cbiAgICA8Y3FhLXNlbGYtaGVhbC1hbmFseXNpcyBcbiAgICAgICpuZ0lmPVwic2VsZkhlYWxBbmFseXNpc1wiIFxuICAgICAgW29yaWdpbmFsTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLm9yaWdpbmFsTG9jYXRvclwiXG4gICAgICBbaGVhbGVkTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxlZExvY2F0b3JcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwic2VsZkhlYWxBbmFseXNpcy5jb25maWRlbmNlXCJcbiAgICAgIFtoZWFsTWV0aG9kXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbE1ldGhvZFwiXG4gICAgICAoYWN0aW9uKT1cIm9uU2VsZkhlYWxBY3Rpb24oJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlbGYtaGVhbC1hbmFseXNpcz5cblxuICAgIDwhLS0gVGltaW5nIEJyZWFrZG93biAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnRpbWluZ0JyZWFrZG93blwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLWdhcC01IGNxYS1wdC0xLjUgY3FhLXB4LTQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgIDxzcGFuPlRpbWluZyBicmVha2Rvd248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZGlhbG9nLW11dGVkIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQXBwIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLmFwcCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTS0zLjgxNDdlLTA2IDEwLjMyVi03LjE1MjU2ZS0wN0gwLjk1OTk5NlYxMC4zMkgtMy44MTQ3ZS0wNlpcIiBmaWxsPVwiI0U1RTdFQlwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLnRvb2wpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZCAmJiBmYWlsdXJlRGV0YWlsc1wiIGNsYXNzPVwiY3FhLW10LTIgY3FhLXB4LTRcIj5cbiAgICA8Y3FhLXZpZXctbW9yZS1mYWlsZWQtc3RlcC1idXR0b25cbiAgICAgIFt0aW1pbmdCcmVha2Rvd25dPVwidGltaW5nQnJlYWtkb3duXCJcbiAgICAgIFtzdWJTdGVwc109XCJnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKVwiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgKHZpZXdNb3JlQ2xpY2spPVwib25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljaygkZXZlbnQpXCI+XG4gICAgPC9jcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBVcGRhdGVkIEZhaWxlZCBTdGVwIENvbXBvbmVudCAtIHNob3duIHdoZW4gYnV0dG9uIGlzIGNsaWNrZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJzaG93RmFpbGVkU3RlcERldGFpbHMgJiYgZmFpbHVyZURldGFpbHNcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS11cGRhdGVkLWZhaWxlZC1zdGVwXG4gICAgICBbdGltaW5nQnJlYWtkb3duXT1cInRpbWluZ0JyZWFrZG93blwiXG4gICAgICBbdGVzdFN0ZXBSZXN1bHRJZF09XCJ0ZXN0U3RlcFJlc3VsdElkXCJcbiAgICAgIFtleHBhbmRlZF09XCJ0cnVlXCJcbiAgICAgIFtzdWJTdGVwc109XCJnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKVwiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgW3JlYXNvbmluZ109XCJyZWFzb25pbmdcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwiY29uZmlkZW5jZVwiXG4gICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgIChtYWtlQ3VycmVudEJhc2VsaW5lKT1cIm9uTWFrZUN1cnJlbnRCYXNlbGluZSgkZXZlbnQpXCJcbiAgICAgICh1cGxvYWRCYXNlbGluZSk9XCJvblVwbG9hZEJhc2VsaW5lKCRldmVudClcIlxuICAgICAgKGFuYWx5emUpPVwib25BbmFseXplKClcIlxuICAgICAgKHZpZXdGdWxsTG9ncyk9XCJvblZpZXdGdWxsTG9ncygpXCI+XG4gICAgPC9jcWEtdXBkYXRlZC1mYWlsZWQtc3RlcD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==