@cqa-lib/cqa-ui 1.1.54 → 1.1.55
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.
- package/esm2020/lib/execution-screen/ai-agent-step/ai-agent-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/condition-step/condition-step.component.mjs +15 -9
- package/esm2020/lib/execution-screen/execution-step.models.mjs +1 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +16 -10
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +16 -10
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/execution-screen/condition-step/condition-step.component.d.ts +4 -2
- package/lib/execution-screen/execution-step.models.d.ts +1 -1
- package/package.json +1 -1
|
@@ -100,10 +100,10 @@ export class AIAgentStepComponent extends BaseStepComponent {
|
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
AIAgentStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AIAgentStepComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
103
|
-
AIAgentStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AIAgentStepComponent, selector: "cqa-ai-agent-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", prompt: "prompt", optimizedRun: "optimizedRun", actionCount: "actionCount", actions: "actions", selectedTabInput: "selectedTabInput", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", isUploadingBaseline: "isUploadingBaseline", selfHealAnalysis: "selfHealAnalysis" }, 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)=\"toggleHeader()\">\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 <!-- Lightbulb Icon and Step Number -->\n <div><svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#E17100\" 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 }}. <span [innerHTML]=\"config.title\"></span>\n </span>\n \n <!-- Loop Type Badges -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px]\">\n AI Agent\n </span>\n </div>\n\n <!-- Action Count -->\n <span *ngIf=\"config.actionCount\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px]\">\n {{ config.actionCount }} actions\n </span>\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\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4\" style=\"border-top: 1px solid #E4E4E4;\">\n <!-- Prompt Card -->\n <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #FEE685\">\n <div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33333 6.66675H5.34M8 6.66675H8.00667M10.6667 6.66675H10.6733M6 10.6667H3.33333C2.97971 10.6667 2.64057 10.5263 2.39052 10.2762C2.14048 10.0262 2 9.68704 2 9.33341V4.00008C2 3.64646 2.14048 3.30732 2.39052 3.05727C2.64057 2.80722 2.97971 2.66675 3.33333 2.66675H12.6667C13.0203 2.66675 13.3594 2.80722 13.6095 3.05727C13.8595 3.30732 14 3.64646 14 4.00008V9.33341C14 9.68704 13.8595 10.0262 13.6095 10.2762C13.3594 10.5263 13.0203 10.6667 12.6667 10.6667H9.33333L6 14.0001V10.6667Z\" stroke=\"#E17100\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#BB4D00] \">PROMPT</span>\n <span *ngIf=\"config.optimizedRun\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-primary cqa-bg-[#EBECFD]\">\n Optimized Run\n </span>\n </div>\n <p class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" [innerHTML]=\"config.prompt\"></p>\n </div>\n <button class=\"cqa-p-1.5\" (click)=\"copyPrompt()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"cqa-flex cqa-items-center cqa-flex-wrap cqa-my-1.5\" style=\"border-bottom: 1px solid #E4E4E4\">\n <button\n (click)=\"selectTab('action-trace')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'action-trace'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'action-trace' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Action Trace\n <span *ngIf=\"config.actions.length > 0\" class=\"cqa-bg-[#F5F5F5] cqa-text-current cqa-text-[10px] cqa-leading-[13.3px] cqa-font-medium cqa-rounded-full cqa-w-[16px] cqa-h-[16px] cqa-min-w-[16px] cqa-flex cqa-items-center cqa-justify-center\">\n {{ config.actions.length }}\n </span>\n </button>\n <button\n (click)=\"selectTab('planner-timeline')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'planner-timeline'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'planner-timeline' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Planner Timeline\n </button>\n <button\n (click)=\"selectTab('ai-reasoning')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'ai-reasoning'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'ai-reasoning' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n AI Reasoning\n </button>\n </div>\n\n <!-- Tab Content -->\n <!-- Action Trace Tab -->\n <div *ngIf=\"selectedTab === 'action-trace'\">\n <div class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-mb-1.5 cqa-p-2 cqa-bg-[#EFF6FF]\" style=\"border: 1px solid #BEDBFF\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.66667 4.66675H14M14 4.66675V10.0001M14 4.66675L8.66667 10.0001L6 7.33341L2 11.3334\" stroke=\"#155DFC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div class=\"cqa-font-medium cqa-text-[#1447E6] cqa-text-[10px] cqa-leading-[15px]\">\n <b>{{ config.actions.length }} actions</b> \n from previous runs\n </div>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <div\n *ngFor=\"let action of config.actions; let i = index\"\n class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1 cqa-bg-[#F7FAFC]\" style=\"border: 1px solid #BEDBFF\">\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=\"8\" fill=\"#DBEAFE\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-yellow-500\">\n {{ getActionIcon(action.type) }}\n </mat-icon> -->\n <div><svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-flex-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-bold cqa-text-gray-[#0B0B0B]\">{{ action.description }}</span>\n <span *ngIf=\"action.confidence\" class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n {{ action.confidence }}%\n </span>\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n {{ formatDuration(action.duration) }}\n </span>\n <!-- <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div> -->\n </div>\n </div>\n </div>\n\n <!-- Planner Timeline Tab -->\n <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"cqa-text-sm cqa-text-gray-600\">\n Planner timeline content would go here\n </div>\n\n <!-- AI Reasoning Tab -->\n <div *ngIf=\"selectedTab === 'ai-reasoning'\" class=\"cqa-text-sm cqa-text-gray-600\">\n AI reasoning content would go here\n </div>\n\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\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [isExpanded]=\"showFailedStepDetails\"\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=\"showViewMoreButton && 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]=\"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", "isExpanded"], 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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
103
|
+
AIAgentStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AIAgentStepComponent, selector: "cqa-ai-agent-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", prompt: "prompt", optimizedRun: "optimizedRun", actionCount: "actionCount", actions: "actions", selectedTabInput: "selectedTabInput", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", isUploadingBaseline: "isUploadingBaseline", selfHealAnalysis: "selfHealAnalysis" }, 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)=\"toggleHeader()\">\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 <!-- Lightbulb Icon and Step Number -->\n <div><svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#E17100\" 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 }}. <span [innerHTML]=\"config.title\"></span>\n </span>\n \n <!-- Loop Type Badges -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px]\">\n AI Agent\n </span>\n </div>\n\n <!-- Action Count -->\n <span *ngIf=\"config.actionCount\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px]\">\n {{ config.actionCount }} actions\n </span>\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\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4\" style=\"border-top: 1px solid #E4E4E4;\">\n <!-- Prompt Card -->\n <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #FEE685\">\n <div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33333 6.66675H5.34M8 6.66675H8.00667M10.6667 6.66675H10.6733M6 10.6667H3.33333C2.97971 10.6667 2.64057 10.5263 2.39052 10.2762C2.14048 10.0262 2 9.68704 2 9.33341V4.00008C2 3.64646 2.14048 3.30732 2.39052 3.05727C2.64057 2.80722 2.97971 2.66675 3.33333 2.66675H12.6667C13.0203 2.66675 13.3594 2.80722 13.6095 3.05727C13.8595 3.30732 14 3.64646 14 4.00008V9.33341C14 9.68704 13.8595 10.0262 13.6095 10.2762C13.3594 10.5263 13.0203 10.6667 12.6667 10.6667H9.33333L6 14.0001V10.6667Z\" stroke=\"#E17100\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#BB4D00] \">PROMPT</span>\n <span *ngIf=\"config.optimizedRun\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-primary cqa-bg-[#EBECFD]\">\n Optimized Run\n </span>\n </div>\n <p class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" [innerHTML]=\"config.prompt\"></p>\n </div>\n <button class=\"cqa-p-1.5\" (click)=\"copyPrompt()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"cqa-flex cqa-items-center cqa-flex-wrap cqa-my-1.5\" style=\"border-bottom: 1px solid #E4E4E4\">\n <button\n (click)=\"selectTab('action-trace')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'action-trace'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'action-trace' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Action Trace\n <span *ngIf=\"config.actions.length > 0\" class=\"cqa-bg-[#F5F5F5] cqa-text-current cqa-text-[10px] cqa-leading-[13.3px] cqa-font-medium cqa-rounded-full cqa-w-[16px] cqa-h-[16px] cqa-min-w-[16px] cqa-flex cqa-items-center cqa-justify-center\">\n {{ config.actions.length }}\n </span>\n </button>\n <button\n (click)=\"selectTab('planner-timeline')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'planner-timeline'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'planner-timeline' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Planner Timeline\n </button>\n <button\n (click)=\"selectTab('ai-reasoning')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'ai-reasoning'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'ai-reasoning' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n AI Reasoning\n </button>\n </div>\n\n <!-- Tab Content -->\n <!-- Action Trace Tab -->\n <div *ngIf=\"selectedTab === 'action-trace'\">\n <div class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-mb-1.5 cqa-p-2 cqa-bg-[#EFF6FF]\" style=\"border: 1px solid #BEDBFF\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.66667 4.66675H14M14 4.66675V10.0001M14 4.66675L8.66667 10.0001L6 7.33341L2 11.3334\" stroke=\"#155DFC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div class=\"cqa-font-medium cqa-text-[#1447E6] cqa-text-[10px] cqa-leading-[15px]\">\n <b>{{ config.actions.length }} actions</b> \n from previous runs\n </div>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <ng-container *ngFor=\"let action of config.actions; let i = index\">\n <div *ngIf=\"action?.description && action?.type !== 'AI_AGENT_ACTION'\" class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1 cqa-bg-[#F7FAFC]\" style=\"border: 1px solid #BEDBFF\">\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=\"8\" fill=\"#DBEAFE\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-yellow-500\">\n {{ getActionIcon(action.type) }}\n </mat-icon> -->\n <div><svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-flex-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-bold cqa-text-gray-[#0B0B0B]\">{{ action.description }}</span>\n <span *ngIf=\"action.confidence\" class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n {{ action.confidence }}%\n </span>\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n {{ formatDuration(action.duration) }}\n </span>\n <!-- <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div> -->\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Planner Timeline Tab -->\n <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"cqa-text-sm cqa-text-gray-600\">\n Planner timeline content would go here\n </div>\n\n <!-- AI Reasoning Tab -->\n <div *ngIf=\"selectedTab === 'ai-reasoning'\" class=\"cqa-text-sm cqa-text-gray-600\">\n AI reasoning content would go here\n </div>\n\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\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [isExpanded]=\"showFailedStepDetails\"\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=\"showViewMoreButton && 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]=\"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", "isExpanded"], 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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
104
104
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AIAgentStepComponent, decorators: [{
|
|
105
105
|
type: Component,
|
|
106
|
-
args: [{ selector: 'cqa-ai-agent-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)=\"toggleHeader()\">\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 <!-- Lightbulb Icon and Step Number -->\n <div><svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#E17100\" 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 }}. <span [innerHTML]=\"config.title\"></span>\n </span>\n \n <!-- Loop Type Badges -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px]\">\n AI Agent\n </span>\n </div>\n\n <!-- Action Count -->\n <span *ngIf=\"config.actionCount\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px]\">\n {{ config.actionCount }} actions\n </span>\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\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4\" style=\"border-top: 1px solid #E4E4E4;\">\n <!-- Prompt Card -->\n <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #FEE685\">\n <div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33333 6.66675H5.34M8 6.66675H8.00667M10.6667 6.66675H10.6733M6 10.6667H3.33333C2.97971 10.6667 2.64057 10.5263 2.39052 10.2762C2.14048 10.0262 2 9.68704 2 9.33341V4.00008C2 3.64646 2.14048 3.30732 2.39052 3.05727C2.64057 2.80722 2.97971 2.66675 3.33333 2.66675H12.6667C13.0203 2.66675 13.3594 2.80722 13.6095 3.05727C13.8595 3.30732 14 3.64646 14 4.00008V9.33341C14 9.68704 13.8595 10.0262 13.6095 10.2762C13.3594 10.5263 13.0203 10.6667 12.6667 10.6667H9.33333L6 14.0001V10.6667Z\" stroke=\"#E17100\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#BB4D00] \">PROMPT</span>\n <span *ngIf=\"config.optimizedRun\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-primary cqa-bg-[#EBECFD]\">\n Optimized Run\n </span>\n </div>\n <p class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" [innerHTML]=\"config.prompt\"></p>\n </div>\n <button class=\"cqa-p-1.5\" (click)=\"copyPrompt()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"cqa-flex cqa-items-center cqa-flex-wrap cqa-my-1.5\" style=\"border-bottom: 1px solid #E4E4E4\">\n <button\n (click)=\"selectTab('action-trace')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'action-trace'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'action-trace' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Action Trace\n <span *ngIf=\"config.actions.length > 0\" class=\"cqa-bg-[#F5F5F5] cqa-text-current cqa-text-[10px] cqa-leading-[13.3px] cqa-font-medium cqa-rounded-full cqa-w-[16px] cqa-h-[16px] cqa-min-w-[16px] cqa-flex cqa-items-center cqa-justify-center\">\n {{ config.actions.length }}\n </span>\n </button>\n <button\n (click)=\"selectTab('planner-timeline')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'planner-timeline'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'planner-timeline' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Planner Timeline\n </button>\n <button\n (click)=\"selectTab('ai-reasoning')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'ai-reasoning'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'ai-reasoning' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n AI Reasoning\n </button>\n </div>\n\n <!-- Tab Content -->\n <!-- Action Trace Tab -->\n <div *ngIf=\"selectedTab === 'action-trace'\">\n <div class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-mb-1.5 cqa-p-2 cqa-bg-[#EFF6FF]\" style=\"border: 1px solid #BEDBFF\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.66667 4.66675H14M14 4.66675V10.0001M14 4.66675L8.66667 10.0001L6 7.33341L2 11.3334\" stroke=\"#155DFC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div class=\"cqa-font-medium cqa-text-[#1447E6] cqa-text-[10px] cqa-leading-[15px]\">\n <b>{{ config.actions.length }} actions</b> \n from previous runs\n </div>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <div\n *ngFor=\"let action of config.actions; let i = index\"\n class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1 cqa-bg-[#F7FAFC]\" style=\"border: 1px solid #BEDBFF\">\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=\"8\" fill=\"#DBEAFE\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-yellow-500\">\n {{ getActionIcon(action.type) }}\n </mat-icon> -->\n <div><svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-flex-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-bold cqa-text-gray-[#0B0B0B]\">{{ action.description }}</span>\n <span *ngIf=\"action.confidence\" class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n {{ action.confidence }}%\n </span>\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n {{ formatDuration(action.duration) }}\n </span>\n <!-- <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div> -->\n </div>\n </div>\n </div>\n\n <!-- Planner Timeline Tab -->\n <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"cqa-text-sm cqa-text-gray-600\">\n Planner timeline content would go here\n </div>\n\n <!-- AI Reasoning Tab -->\n <div *ngIf=\"selectedTab === 'ai-reasoning'\" class=\"cqa-text-sm cqa-text-gray-600\">\n AI reasoning content would go here\n </div>\n\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\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [isExpanded]=\"showFailedStepDetails\"\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=\"showViewMoreButton && 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]=\"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: [] }]
|
|
106
|
+
args: [{ selector: 'cqa-ai-agent-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)=\"toggleHeader()\">\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 <!-- Lightbulb Icon and Step Number -->\n <div><svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#E17100\" 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 }}. <span [innerHTML]=\"config.title\"></span>\n </span>\n \n <!-- Loop Type Badges -->\n <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px]\">\n AI Agent\n </span>\n </div>\n\n <!-- Action Count -->\n <span *ngIf=\"config.actionCount\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px]\">\n {{ config.actionCount }} actions\n </span>\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\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4\" style=\"border-top: 1px solid #E4E4E4;\">\n <!-- Prompt Card -->\n <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #FEE685\">\n <div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33333 6.66675H5.34M8 6.66675H8.00667M10.6667 6.66675H10.6733M6 10.6667H3.33333C2.97971 10.6667 2.64057 10.5263 2.39052 10.2762C2.14048 10.0262 2 9.68704 2 9.33341V4.00008C2 3.64646 2.14048 3.30732 2.39052 3.05727C2.64057 2.80722 2.97971 2.66675 3.33333 2.66675H12.6667C13.0203 2.66675 13.3594 2.80722 13.6095 3.05727C13.8595 3.30732 14 3.64646 14 4.00008V9.33341C14 9.68704 13.8595 10.0262 13.6095 10.2762C13.3594 10.5263 13.0203 10.6667 12.6667 10.6667H9.33333L6 14.0001V10.6667Z\" stroke=\"#E17100\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#BB4D00] \">PROMPT</span>\n <span *ngIf=\"config.optimizedRun\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-primary cqa-bg-[#EBECFD]\">\n Optimized Run\n </span>\n </div>\n <p class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" [innerHTML]=\"config.prompt\"></p>\n </div>\n <button class=\"cqa-p-1.5\" (click)=\"copyPrompt()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"cqa-flex cqa-items-center cqa-flex-wrap cqa-my-1.5\" style=\"border-bottom: 1px solid #E4E4E4\">\n <button\n (click)=\"selectTab('action-trace')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'action-trace'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'action-trace' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Action Trace\n <span *ngIf=\"config.actions.length > 0\" class=\"cqa-bg-[#F5F5F5] cqa-text-current cqa-text-[10px] cqa-leading-[13.3px] cqa-font-medium cqa-rounded-full cqa-w-[16px] cqa-h-[16px] cqa-min-w-[16px] cqa-flex cqa-items-center cqa-justify-center\">\n {{ config.actions.length }}\n </span>\n </button>\n <button\n (click)=\"selectTab('planner-timeline')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'planner-timeline'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'planner-timeline' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n Planner Timeline\n </button>\n <button\n (click)=\"selectTab('ai-reasoning')\"\n [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'ai-reasoning'}\"\n [ngStyle]=\"{'border-bottom': selectedTab === 'ai-reasoning' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n AI Reasoning\n </button>\n </div>\n\n <!-- Tab Content -->\n <!-- Action Trace Tab -->\n <div *ngIf=\"selectedTab === 'action-trace'\">\n <div class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-mb-1.5 cqa-p-2 cqa-bg-[#EFF6FF]\" style=\"border: 1px solid #BEDBFF\">\n <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.66667 4.66675H14M14 4.66675V10.0001M14 4.66675L8.66667 10.0001L6 7.33341L2 11.3334\" stroke=\"#155DFC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <div class=\"cqa-font-medium cqa-text-[#1447E6] cqa-text-[10px] cqa-leading-[15px]\">\n <b>{{ config.actions.length }} actions</b> \n from previous runs\n </div>\n </div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <ng-container *ngFor=\"let action of config.actions; let i = index\">\n <div *ngIf=\"action?.description && action?.type !== 'AI_AGENT_ACTION'\" class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1 cqa-bg-[#F7FAFC]\" style=\"border: 1px solid #BEDBFF\">\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=\"8\" fill=\"#DBEAFE\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <!-- <mat-icon\n class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-yellow-500\">\n {{ getActionIcon(action.type) }}\n </mat-icon> -->\n <div><svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span class=\"cqa-flex-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-bold cqa-text-gray-[#0B0B0B]\">{{ action.description }}</span>\n <span *ngIf=\"action.confidence\" class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n {{ action.confidence }}%\n </span>\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n {{ formatDuration(action.duration) }}\n </span>\n <!-- <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div> -->\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Planner Timeline Tab -->\n <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"cqa-text-sm cqa-text-gray-600\">\n Planner timeline content would go here\n </div>\n\n <!-- AI Reasoning Tab -->\n <div *ngIf=\"selectedTab === 'ai-reasoning'\" class=\"cqa-text-sm cqa-text-gray-600\">\n AI reasoning content would go here\n </div>\n\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\n <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n <cqa-view-more-failed-step-button\n [timingBreakdown]=\"timingBreakdown\"\n [subSteps]=\"getSubStepsForFailedStep()\"\n [failureDetails]=\"failureDetails\"\n [isExpanded]=\"showFailedStepDetails\"\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=\"showViewMoreButton && 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]=\"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: [] }]
|
|
107
107
|
}], propDecorators: { id: [{
|
|
108
108
|
type: Input
|
|
109
109
|
}], testStepResultId: [{
|
|
@@ -151,4 +151,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
151
151
|
}], selfHealAction: [{
|
|
152
152
|
type: Output
|
|
153
153
|
}] } });
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYWdlbnQtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4ZWN1dGlvbi1zY3JlZW4vYWktYWdlbnQtc3RlcC9haS1hZ2VudC1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9haS1hZ2VudC1zdGVwL2FpLWFnZW50LXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBUzNELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7SUFOM0Q7O1FBd0JXLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUdsQywwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFFN0Isd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDbkUsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUN6RCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDeEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBb0QsQ0FBQztRQUtoRyxnQkFBVyxHQUF5RCxjQUFjLENBQUM7S0FtR3BGO0lBakdVLFFBQVE7UUFDZixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFN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QXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFJSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJQWdlbnRTdGVwQ29uZmlnLCBBSUFnZW50QWN0aW9uLCBTdGVwU3RhdHVzLCBUaW1pbmdCcmVha2Rvd24sIEZhaWx1cmVEZXRhaWxzLCBTdWJTdGVwLCBTZWxmSGVhbEFuYWx5c2lzRGF0YSwgU2VsZkhlYWxBY3Rpb24gfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZVN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IG1ha2VDdXJyZW50QmFzZWxpbmVFdmVudCwgdXBsb2FkQmFzZWxpbmVFdmVudCB9IGZyb20gJy4uL3Zpc3VhbC1jb21wYXJpc29uL3Zpc3VhbC1jb21wYXJpc29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1haS1hZ2VudC1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FpLWFnZW50LXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgQUlBZ2VudFN0ZXBDb21wb25lbnQgZXh0ZW5kcyBCYXNlU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIEluZGl2aWR1YWwgaW5wdXRzXG4gIEBJbnB1dCgpIGlkITogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXN0U3RlcFJlc3VsdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGVwTnVtYmVyITogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcbiAgQElucHV0KCkgc3RhdHVzITogU3RlcFN0YXR1cztcbiAgQElucHV0KCkgZHVyYXRpb24hOiBudW1iZXI7XG4gIEBJbnB1dCgpIHRpbWluZ0JyZWFrZG93bj86IFRpbWluZ0JyZWFrZG93bjtcbiAgQElucHV0KCkgZXhwYW5kZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBwcm9tcHQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wdGltaXplZFJ1bj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFjdGlvbkNvdW50PzogbnVtYmVyO1xuICBASW5wdXQoKSBhY3Rpb25zPzogQUlBZ2VudEFjdGlvbltdO1xuICBASW5wdXQoKSBzZWxlY3RlZFRhYklucHV0PzogJ2FjdGlvbi10cmFjZScgfCAncGxhbm5lci10aW1lbGluZScgfCAnYWktcmVhc29uaW5nJztcbiAgQElucHV0KCkgZmFpbHVyZURldGFpbHM/OiBGYWlsdXJlRGV0YWlscztcbiAgQElucHV0KCkgcmVhc29uaW5nPzogc3RyaW5nW107XG4gIEBJbnB1dCgpIGNvbmZpZGVuY2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzVXBsb2FkaW5nQmFzZWxpbmUgPSB7fTtcbiAgQElucHV0KCkgc2VsZkhlYWxBbmFseXNpcz86IFNlbGZIZWFsQW5hbHlzaXNEYXRhO1xuXG4gIHNob3dGYWlsZWRTdGVwRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBtYWtlQ3VycmVudEJhc2VsaW5lID0gbmV3IEV2ZW50RW1pdHRlcjxtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSB1cGxvYWRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8dXBsb2FkQmFzZWxpbmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGFuYWx5emUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB2aWV3RnVsbExvZ3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxmSGVhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0eXBlOiBTZWxmSGVhbEFjdGlvbjsgaGVhbGVkTG9jYXRvcjogc3RyaW5nOyB9PigpO1xuXG4gIC8vIENvbmZpZyBwcm9wZXJ0eSBmb3IgYmFzZSBjbGFzcyAtIGJ1aWx0IGZyb20gaW5kaXZpZHVhbCBpbnB1dHMgaW4gbmdPbkluaXRcbiAgb3ZlcnJpZGUgY29uZmlnITogQUlBZ2VudFN0ZXBDb25maWc7XG5cbiAgc2VsZWN0ZWRUYWI6ICdhY3Rpb24tdHJhY2UnIHwgJ3BsYW5uZXItdGltZWxpbmUnIHwgJ2FpLXJlYXNvbmluZycgPSAnYWN0aW9uLXRyYWNlJztcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBCdWlsZCBjb25maWcgZnJvbSBpbmRpdmlkdWFsIGlucHV0c1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0ZXN0U3RlcFJlc3VsdElkOiB0aGlzLnRlc3RTdGVwUmVzdWx0SWQsXG4gICAgICBzdGVwTnVtYmVyOiB0aGlzLnN0ZXBOdW1iZXIsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcbiAgICAgIHR5cGU6ICdhaS1hZ2VudCcsXG4gICAgICBwcm9tcHQ6IHRoaXMucHJvbXB0LFxuICAgICAgb3B0aW1pemVkUnVuOiB0aGlzLm9wdGltaXplZFJ1bixcbiAgICAgIGFjdGlvbkNvdW50OiB0aGlzLmFjdGlvbkNvdW50LFxuICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zIHx8IFtdLFxuICAgICAgc2VsZWN0ZWRUYWI6IHRoaXMuc2VsZWN0ZWRUYWJJbnB1dCxcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICAgIHNlbGZIZWFsQW5hbHlzaXM6IHRoaXMuc2VsZkhlYWxBbmFseXNpcyxcbiAgICB9IGFzIEFJQWdlbnRTdGVwQ29uZmlnO1xuXG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGhpcy5jb25maWcuc2VsZWN0ZWRUYWIgfHwgJ2FjdGlvbi10cmFjZSc7XG4gIH1cblxuICBzZWxlY3RUYWIodGFiOiAnYWN0aW9uLXRyYWNlJyB8ICdwbGFubmVyLXRpbWVsaW5lJyB8ICdhaS1yZWFzb25pbmcnKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRhYjtcbiAgfVxuXG4gIGdldEFjdGlvbkljb24oYWN0aW9uVHlwZTogJ2V4dHJhY3QnIHwgJ3ZhbGlkYXRlJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFjdGlvblR5cGUgPT09ICdleHRyYWN0JyA/ICdib2x0JyA6ICd3YXJuaW5nJztcbiAgfVxuXG4gIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdDb3BpZWQgdG8gY2xpcGJvYXJkOicsIHRleHQpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY29weSB0byBjbGlwYm9hcmQ6JywgZXJyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvcHlQcm9tcHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvbXB0KSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYFBST01QVFxcbiR7dGhpcy5wcm9tcHR9YDtcbiAgICAgIHRoaXMuY29weVRvQ2xpcGJvYXJkKGNvbnRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIG9uVmlld01vcmVGYWlsZWRTdGVwQ2xpY2soZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGYWlsZWRTdGVwRGV0YWlscyA9IGV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKCk6IFN1YlN0ZXBbXSB7XG4gICAgLy8gQ29udmVydCBBSUFnZW50QWN0aW9uW10gdG8gU3ViU3RlcFtdIGZvciB0aGUgZmFpbGVkIHN0ZXAgY29tcG9uZW50XG4gICAgcmV0dXJuICh0aGlzLmFjdGlvbnMgfHwgW10pLm1hcChhY3Rpb24gPT4gKHtcbiAgICAgIGlkOiBhY3Rpb24uaWQsXG4gICAgICBkZXNjcmlwdGlvbjogYWN0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgc3RhdHVzOiBhY3Rpb24uc3RhdHVzLFxuICAgICAgZHVyYXRpb246IGFjdGlvbi5kdXJhdGlvbixcbiAgICB9KSk7XG4gIH1cblxuICBvbk1ha2VDdXJyZW50QmFzZWxpbmUoZXZlbnQ6IG1ha2VDdXJyZW50QmFzZWxpbmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMubWFrZUN1cnJlbnRCYXNlbGluZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uVXBsb2FkQmFzZWxpbmUoZXZlbnQ6IHVwbG9hZEJhc2VsaW5lRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnVwbG9hZEJhc2VsaW5lLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25BbmFseXplKCk6IHZvaWQge1xuICAgIHRoaXMuYW5hbHl6ZS5lbWl0KCk7XG4gIH1cblxuICBvblZpZXdGdWxsTG9ncygpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdGdWxsTG9ncy5lbWl0KCk7XG4gIH1cblxuICBvblNlbGZIZWFsQWN0aW9uKGV2ZW50OiB7IHR5cGU6IFNlbGZIZWFsQWN0aW9uOyBoZWFsZWRMb2NhdG9yOiBzdHJpbmc7IH0pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGZIZWFsQWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IHNob3dWaWV3TW9yZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkICYmIEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscykgJiZcbiAgICAgIChcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uZXhwZWN0ZWQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uYWN0dWFsKSkgfHxcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmN1cnJlbnQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmJhc2VsaW5lIHx8IHRoaXMuZmFpbHVyZURldGFpbHM/LnNjcmVlbnNob3RzPy5kaWZmZXJlbmNlKVxuICAgICAgICAgIHx8IEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8ubG9ncz8ubGVuZ3RoKSkgfHwgXG4gICAgICAgIChCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LmFpRml4QXBwbGllZCAmJiAodGhpcy5mYWlsdXJlRGV0YWlscz8uYWlGaXhNZXNzYWdlIHx8IHRoaXMuY29uZmlkZW5jZSB8fCB0aGlzLnJlYXNvbmluZz8ubGVuZ3RoKSkpXG4gICAgICApXG4gIH1cblxuICB0b2dnbGVIZWFkZXIoKTogdm9pZCB7XG4gICAgc3VwZXIudG9nZ2xlKCk7XG4gICAgaWYoIXRoaXMuaXNFeHBhbmRlZCl7XG4gICAgICB0aGlzLnNob3dGYWlsZWRTdGVwRGV0YWlscyA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1wLTIgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlSGVhZGVyKClcIj5cbiAgICBcbiAgICA8IS0tIFN0YXR1cyBJY29uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjb25maWcuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJ1wiID48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbHVyZSdcIj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTcuNSA0LjVMNC41IDcuNVwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNC41TDcuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuXG4gICAgPCEtLSBMaWdodGJ1bGIgSWNvbiBhbmQgU3RlcCBOdW1iZXIgLS0+XG4gICAgPGRpdj48c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiByeD1cIjRcIiBmaWxsPVwiI0ZFRjNDNlwiLz48cGF0aCBkPVwiTTguODMxNSAxMC41SDExLjE2OE0xMCAzLjVWNE0xMy4xODIgNC44MThMMTIuODI4NSA1LjE3MTVNMTQuNSA4SDE0TTYgOEg1LjVNNy4xNzE1IDUuMTcxNUw2LjgxOCA0LjgxOE04LjIzMiA5Ljc2OEM3Ljg4MjQzIDkuNDE4MzQgNy42NDQ0IDguOTcyODggNy41NDc5OSA4LjQ4Nzk1QzcuNDUxNTggOC4wMDMwMSA3LjUwMTEzIDcuNTAwMzggNy42OTAzNiA3LjA0MzYxQzcuODc5NiA2LjU4NjgzIDguMjAwMDMgNi4xOTY0MiA4LjYxMTE0IDUuOTIxNzVDOS4wMjIyNSA1LjY0NzA3IDkuNTA1NTcgNS41MDA0NyAxMCA1LjUwMDQ3QzEwLjQ5NDQgNS41MDA0NyAxMC45Nzc3IDUuNjQ3MDcgMTEuMzg4OSA1LjkyMTc1QzExLjggNi4xOTY0MiAxMi4xMjA0IDYuNTg2ODMgMTIuMzA5NiA3LjA0MzYxQzEyLjQ5ODkgNy41MDAzOCAxMi41NDg0IDguMDAzMDEgMTIuNDUyIDguNDg3OTVDMTIuMzU1NiA4Ljk3Mjg4IDEyLjExNzYgOS40MTgzNCAxMS43NjggOS43NjhMMTEuNDk0IDEwLjA0MTVDMTEuMzM3NCAxMC4xOTgyIDExLjIxMzEgMTAuMzg0MiAxMS4xMjgzIDEwLjU4ODlDMTEuMDQzNiAxMC43OTM2IDExIDExLjAxMjkgMTEgMTEuMjM0NVYxMS41QzExIDExLjc2NTIgMTAuODk0NiAxMi4wMTk2IDEwLjcwNzEgMTIuMjA3MUMxMC41MTk2IDEyLjM5NDYgMTAuMjY1MiAxMi41IDEwIDEyLjVDOS43MzQ3OCAxMi41IDkuNDgwNDMgMTIuMzk0NiA5LjI5Mjg5IDEyLjIwNzFDOS4xMDUzNiAxMi4wMTk2IDkgMTEuNzY1MiA5IDExLjVWMTEuMjM0NUM5IDEwLjc4NyA4LjgyMiAxMC4zNTc1IDguNTA2IDEwLjA0MTVMOC4yMzIgOS43NjhaXCIgc3Ryb2tlPVwiI0UxNzEwMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cblxuICAgIDwhLS0gU3RlcCBOdW1iZXIgYW5kIFRpdGxlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LWJvbGQgY3FhLXRleHQtWyMzMzQxNTVdIGNxYS10ZXh0LVsxMXB4XSBjcWEtbGVhZGluZy1bMTNweF1cIj5cbiAgICAgICAge3sgY29uZmlnLnN0ZXBOdW1iZXIgfX0uIDxzcGFuIFtpbm5lckhUTUxdPVwiY29uZmlnLnRpdGxlXCI+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgXG4gICAgICA8IS0tIExvb3AgVHlwZSBCYWRnZXMgLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNFMTcxMDBdIGNxYS1iZy1bI0ZFRjNDNl0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XVwiPlxuICAgICAgICBBSSBBZ2VudFxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBY3Rpb24gQ291bnQgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCJjb25maWcuYWN0aW9uQ291bnRcIiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNFMTcxMDBdIGNxYS1iZy1bI0ZFRjNDNl0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XVwiPlxuICAgICAge3sgY29uZmlnLmFjdGlvbkNvdW50IH19IGFjdGlvbnNcbiAgICA8L3NwYW4+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzlweF0gY3FhLWxlYWRpbmctWzExcHhdIGNxYS10ZXh0LVsjOUNBM0FGXVwiPlxuICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihjb25maWcuZHVyYXRpb24pIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3ZnIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0zLjUgNUw3IDguNUwxMC41IDVcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMC44MzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRXhwYW5kZWQgQ29udGVudCAtLT5cbiAgPGRpdiAqbmdJZj1cImlzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1iZy1bI0ZGRkVGOV0gY3FhLW10LTEuNSBjcWEtbWwtOSBjcWEtbXItNiBjcWEtcC00XCIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggc29saWQgI0U0RTRFNDtcIj5cbiAgICA8IS0tIFByb21wdCBDYXJkIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1pdGVtcy1zdGFydCBjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtbGcgY3FhLXAtM1wiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0ZFRTY4NVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1tYi0yXCI+XG4gICAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuMzMzMzMgNi42NjY3NUg1LjM0TTggNi42NjY3NUg4LjAwNjY3TTEwLjY2NjcgNi42NjY3NUgxMC42NzMzTTYgMTAuNjY2N0gzLjMzMzMzQzIuOTc5NzEgMTAuNjY2NyAyLjY0MDU3IDEwLjUyNjMgMi4zOTA1MiAxMC4yNzYyQzIuMTQwNDggMTAuMDI2MiAyIDkuNjg3MDQgMiA5LjMzMzQxVjQuMDAwMDhDMiAzLjY0NjQ2IDIuMTQwNDggMy4zMDczMiAyLjM5MDUyIDMuMDU3MjdDMi42NDA1NyAyLjgwNzIyIDIuOTc5NzEgMi42NjY3NSAzLjMzMzMzIDIuNjY2NzVIMTIuNjY2N0MxMy4wMjAzIDIuNjY2NzUgMTMuMzU5NCAyLjgwNzIyIDEzLjYwOTUgMy4wNTcyN0MxMy44NTk1IDMuMzA3MzIgMTQgMy42NDY0NiAxNCA0LjAwMDA4VjkuMzMzNDFDMTQgOS42ODcwNCAxMy44NTk1IDEwLjAyNjIgMTMuNjA5NSAxMC4yNzYyQzEzLjM1OTQgMTAuNTI2MyAxMy4wMjAzIDEwLjY2NjcgMTIuNjY2NyAxMC42NjY3SDkuMzMzMzNMNiAxNC4wMDAxVjEwLjY2NjdaXCIgc3Ryb2tlPVwiI0UxNzEwMFwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjQkI0RDAwXSBcIj5QUk9NUFQ8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcub3B0aW1pemVkUnVuXCIgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtZnVsbCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1wcmltYXJ5IGNxYS1iZy1bI0VCRUNGRF1cIj5cbiAgICAgICAgICAgIE9wdGltaXplZCBSdW5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMEIwQjBCXVwiIFtpbm5lckhUTUxdPVwiY29uZmlnLnByb21wdFwiPjwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImNxYS1wLTEuNVwiIChjbGljayk9XCJjb3B5UHJvbXB0KClcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk01LjMzMzMyIDEwLjY2NjdIMy45OTk5OUMzLjY0NjM3IDEwLjY2NjcgMy4zMDcyMyAxMC41MjYzIDMuMDU3MTggMTAuMjc2MkMyLjgwNzEzIDEwLjAyNjIgMi42NjY2NiA5LjY4NzA0IDIuNjY2NjYgOS4zMzM0MVY0LjAwMDA4QzIuNjY2NjYgMy42NDY0NiAyLjgwNzEzIDMuMzA3MzIgMy4wNTcxOCAzLjA1NzI3QzMuMzA3MjMgMi44MDcyMiAzLjY0NjM3IDIuNjY2NzUgMy45OTk5OSAyLjY2Njc1SDkuMzMzMzJDOS42ODY5NSAyLjY2Njc1IDEwLjAyNjEgMi44MDcyMiAxMC4yNzYxIDMuMDU3MjdDMTAuNTI2MiAzLjMwNzMyIDEwLjY2NjcgMy42NDY0NiAxMC42NjY3IDQuMDAwMDhWNS4zMzM0MU02LjY2NjY2IDEzLjMzMzRIMTJDMTIuMzUzNiAxMy4zMzM0IDEyLjY5MjggMTMuMTkyOSAxMi45NDI4IDEyLjk0MjlDMTMuMTkyOCAxMi42OTI4IDEzLjMzMzMgMTIuMzUzNyAxMy4zMzMzIDEyLjAwMDFWNi42NjY3NUMxMy4zMzMzIDYuMzEzMTMgMTMuMTkyOCA1Ljk3Mzk5IDEyLjk0MjggNS43MjM5NEMxMi42OTI4IDUuNDczODkgMTIuMzUzNiA1LjMzMzQxIDEyIDUuMzMzNDFINi42NjY2NkM2LjMxMzAzIDUuMzMzNDEgNS45NzM5IDUuNDczODkgNS43MjM4NSA1LjcyMzk0QzUuNDczOCA1Ljk3Mzk5IDUuMzMzMzIgNi4zMTMxMyA1LjMzMzMyIDYuNjY2NzVWMTIuMDAwMUM1LjMzMzMyIDEyLjM1MzcgNS40NzM4IDEyLjY5MjggNS43MjM4NSAxMi45NDI5QzUuOTczOSAxMy4xOTI5IDYuMzEzMDMgMTMuMzMzNCA2LjY2NjY2IDEzLjMzMzRaXCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGFiIE5hdmlnYXRpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWZsZXgtd3JhcCBjcWEtbXktMS41XCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U0RTRFNFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0VGFiKCdhY3Rpb24tdHJhY2UnKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnIWNxYS10ZXh0LVsjQkI0RDAwXSc6IHNlbGVjdGVkVGFiID09PSAnYWN0aW9uLXRyYWNlJ31cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiBzZWxlY3RlZFRhYiA9PT0gJ2FjdGlvbi10cmFjZScgPyAnMnB4IHNvbGlkICNGRTlBMDAnIDogJzJweCBzb2xpZCB0cmFuc3BhcmVudCd9XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMiBjcWEtcHgtMyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzYzNjM2M10gY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgIEFjdGlvbiBUcmFjZVxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImNxYS1iZy1bI0Y1RjVGNV0gY3FhLXRleHQtY3VycmVudCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzEzLjNweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1yb3VuZGVkLWZ1bGwgY3FhLXctWzE2cHhdIGNxYS1oLVsxNnB4XSBjcWEtbWluLXctWzE2cHhdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAge3sgY29uZmlnLmFjdGlvbnMubGVuZ3RoIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0VGFiKCdwbGFubmVyLXRpbWVsaW5lJylcIlxuICAgICAgICBbbmdDbGFzc109XCJ7JyFjcWEtdGV4dC1bI0JCNEQwMF0nOiBzZWxlY3RlZFRhYiA9PT0gJ3BsYW5uZXItdGltZWxpbmUnfVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6IHNlbGVjdGVkVGFiID09PSAncGxhbm5lci10aW1lbGluZScgPyAnMnB4IHNvbGlkICNGRTlBMDAnIDogJzJweCBzb2xpZCB0cmFuc3BhcmVudCd9XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMiBjcWEtcHgtMyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzYzNjM2M10gY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgIFBsYW5uZXIgVGltZWxpbmVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0VGFiKCdhaS1yZWFzb25pbmcnKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnIWNxYS10ZXh0LVsjQkI0RDAwXSc6IHNlbGVjdGVkVGFiID09PSAnYWktcmVhc29uaW5nJ31cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiBzZWxlY3RlZFRhYiA9PT0gJ2FpLXJlYXNvbmluZycgPyAnMnB4IHNvbGlkICNGRTlBMDAnIDogJzJweCBzb2xpZCB0cmFuc3BhcmVudCd9XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMiBjcWEtcHgtMyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzYzNjM2M10gY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgIEFJIFJlYXNvbmluZ1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRhYiBDb250ZW50IC0tPlxuICAgIDwhLS0gQWN0aW9uIFRyYWNlIFRhYiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICdhY3Rpb24tdHJhY2UnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXJvdW5kZWQtbWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1iLTEuNSBjcWEtcC0yIGNxYS1iZy1bI0VGRjZGRl1cIiBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNCRURCRkZcIj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTguNjY2NjcgNC42NjY3NUgxNE0xNCA0LjY2Njc1VjEwLjAwMDFNMTQgNC42NjY3NUw4LjY2NjY3IDEwLjAwMDFMNiA3LjMzMzQxTDIgMTEuMzMzNFwiIHN0cm9rZT1cIiMxNTVERkNcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTQ0N0U2XSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdXCI+XG4gICAgICAgICAgPGI+e3sgY29uZmlnLmFjdGlvbnMubGVuZ3RoIH19IGFjdGlvbnM8L2I+IFxuICAgICAgICAgIGZyb20gcHJldmlvdXMgcnVuc1xuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTFcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXJvdW5kZWQtbWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTIgY3FhLXB5LTEgY3FhLWJnLVsjRjdGQUZDXVwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0JFREJGRlwiPlxuICAgICAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgcng9XCI4XCIgZmlsbD1cIiNEQkVBRkVcIi8+PHBhdGggZD1cIk01LjA4MzM3IDguNDE2NzVMNi43NTAwNCAxMC4wODM0TDEwLjkxNjcgNS45MTY3NVwiIHN0cm9rZT1cIiMxNTVERkNcIiBzdHJva2Utd2lkdGg9XCIwLjgzMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgICA8IS0tIDxtYXQtaWNvblxuICAgICAgICAgICAgY2xhc3M9XCIhY3FhLXctNCAhY3FhLWgtNCAhY3FhLXRleHQtWzE2cHhdIGNxYS10ZXh0LXllbGxvdy01MDBcIj5cbiAgICAgICAgICAgIHt7IGdldEFjdGlvbkljb24oYWN0aW9uLnR5cGUpIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiByeD1cIjRcIiBmaWxsPVwiI0ZFRjNDNlwiLz48cGF0aCBkPVwiTTEwLjUgOVY1LjVMNiAxMUg5LjVWMTQuNUwxNCA5SDEwLjVaXCIgc3Ryb2tlPVwiI0UxNzEwMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1ib2xkIGNxYS10ZXh0LWdyYXktWyMwQjBCMEJdXCI+e3sgYWN0aW9uLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYWN0aW9uLmNvbmZpZGVuY2VcIiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMDBBNjNFXVwiPlxuICAgICAgICAgICAge3sgYWN0aW9uLmNvbmZpZGVuY2UgfX0lXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM2MzYzNjNdXCI+XG4gICAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihhY3Rpb24uZHVyYXRpb24pIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwhLS0gPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTQuNSAyLjVMOCA2TDQuNSA5LjVcIiBzdHJva2U9XCIjNjM2MzYzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUGxhbm5lciBUaW1lbGluZSBUYWIgLS0+XG4gICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSAncGxhbm5lci10aW1lbGluZSdcIiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LWdyYXktNjAwXCI+XG4gICAgICBQbGFubmVyIHRpbWVsaW5lIGNvbnRlbnQgd291bGQgZ28gaGVyZVxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBSSBSZWFzb25pbmcgVGFiIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ2FpLXJlYXNvbmluZydcIiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LWdyYXktNjAwXCI+XG4gICAgICBBSSByZWFzb25pbmcgY29udGVudCB3b3VsZCBnbyBoZXJlXG4gICAgPC9kaXY+XG5cbiAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2VsZiBIZWFsIEFuYWx5c2lzIC0tPlxuICAgIDxjcWEtc2VsZi1oZWFsLWFuYWx5c2lzIFxuICAgICAgKm5nSWY9XCJzZWxmSGVhbEFuYWx5c2lzXCIgXG4gICAgICBbb3JpZ2luYWxMb2NhdG9yXT1cInNlbGZIZWFsQW5hbHlzaXMub3JpZ2luYWxMb2NhdG9yXCJcbiAgICAgIFtoZWFsZWRMb2NhdG9yXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbGVkTG9jYXRvclwiXG4gICAgICBbY29uZmlkZW5jZV09XCJzZWxmSGVhbEFuYWx5c2lzLmNvbmZpZGVuY2VcIlxuICAgICAgW2hlYWxNZXRob2RdPVwic2VsZkhlYWxBbmFseXNpcy5oZWFsTWV0aG9kXCJcbiAgICAgIChhY3Rpb24pPVwib25TZWxmSGVhbEFjdGlvbigkZXZlbnQpXCI+XG4gICAgPC9jcWEtc2VsZi1oZWFsLWFuYWx5c2lzPlxuXG4gIDwhLS0gVGltaW5nIEJyZWFrZG93biAtLT5cbiAgPGRpdiAqbmdJZj1cImNvbmZpZy50aW1pbmdCcmVha2Rvd25cIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktZW5kIGNxYS1nYXAtNSBjcWEtcHQtMS41IGNxYS1weC00IGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjOUNBM0FGXVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICA8c3Bhbj5UaW1pbmcgYnJlYWtkb3duPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZGlhbG9nLW11dGVkIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICBBcHAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1ncmF5LTcwMFwiPnt7IGZvcm1hdER1cmF0aW9uKGNvbmZpZy50aW1pbmdCcmVha2Rvd24uYXBwKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMVwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxIDExXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0tMy44MTQ3ZS0wNiAxMC4zMlYtNy4xNTI1NmUtMDdIMC45NTk5OTZWMTAuMzJILTMuODE0N2UtMDZaXCIgZmlsbD1cIiNFNUU3RUJcIi8+PC9zdmc+PC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLnRvb2wpIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cblxuICA8IS0tIFZpZXcgTW9yZSBGYWlsZWQgU3RlcCBCdXR0b24gLSBzaG93biB3aGVuIGV4cGFuZGVkIGFuZCBmYWlsdXJlIGRldGFpbHMgZXhpc3QgLS0+XG4gIDxkaXYgKm5nSWY9XCJzaG93Vmlld01vcmVCdXR0b25cIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS12aWV3LW1vcmUtZmFpbGVkLXN0ZXAtYnV0dG9uXG4gICAgICBbdGltaW5nQnJlYWtkb3duXT1cInRpbWluZ0JyZWFrZG93blwiXG4gICAgICBbc3ViU3RlcHNdPVwiZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKClcIlxuICAgICAgW2ZhaWx1cmVEZXRhaWxzXT1cImZhaWx1cmVEZXRhaWxzXCJcbiAgICAgIFtpc0V4cGFuZGVkXT1cInNob3dGYWlsZWRTdGVwRGV0YWlsc1wiXG4gICAgICAodmlld01vcmVDbGljayk9XCJvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKCRldmVudClcIj5cbiAgICA8L2NxYS12aWV3LW1vcmUtZmFpbGVkLXN0ZXAtYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFVwZGF0ZWQgRmFpbGVkIFN0ZXAgQ29tcG9uZW50IC0gc2hvd24gd2hlbiBidXR0b24gaXMgY2xpY2tlZCAtLT5cbiAgPGRpdiAqbmdJZj1cInNob3dWaWV3TW9yZUJ1dHRvbiAmJiBzaG93RmFpbGVkU3RlcERldGFpbHMgJiYgZmFpbHVyZURldGFpbHNcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgPGNxYS11cGRhdGVkLWZhaWxlZC1zdGVwXG4gICAgICBbdGVzdFN0ZXBSZXN1bHRJZF09XCJ0ZXN0U3RlcFJlc3VsdElkXCJcbiAgICAgIFt0aW1pbmdCcmVha2Rvd25dPVwidGltaW5nQnJlYWtkb3duXCJcbiAgICAgIFtleHBhbmRlZF09XCJ0cnVlXCJcbiAgICAgIFtzdWJTdGVwc109XCJnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKVwiXG4gICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgW3JlYXNvbmluZ109XCJyZWFzb25pbmdcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwiY29uZmlkZW5jZVwiXG4gICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgIChtYWtlQ3VycmVudEJhc2VsaW5lKT1cIm9uTWFrZUN1cnJlbnRCYXNlbGluZSgkZXZlbnQpXCJcbiAgICAgICh1cGxvYWRCYXNlbGluZSk9XCJvblVwbG9hZEJhc2VsaW5lKCRldmVudClcIlxuICAgICAgKGFuYWx5emUpPVwib25BbmFseXplKClcIlxuICAgICAgKHZpZXdGdWxsTG9ncyk9XCJvblZpZXdGdWxsTG9ncygpXCI+XG4gICAgPC9jcWEtdXBkYXRlZC1mYWlsZWQtc3RlcD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYWdlbnQtc3RlcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4ZWN1dGlvbi1zY3JlZW4vYWktYWdlbnQtc3RlcC9haS1hZ2VudC1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9haS1hZ2VudC1zdGVwL2FpLWFnZW50LXN0ZXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBUzNELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7SUFOM0Q7O1FBd0JXLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUdsQywwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFFN0Isd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDbkUsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUN6RCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDeEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBb0QsQ0FBQztRQUtoRyxnQkFBVyxHQUF5RCxjQUFjLENBQUM7S0FtR3BGO0lBakdVLFFBQVE7UUFDZixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFN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QXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFJSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJQWdlbnRTdGVwQ29uZmlnLCBBSUFnZW50QWN0aW9uLCBTdGVwU3RhdHVzLCBUaW1pbmdCcmVha2Rvd24sIEZhaWx1cmVEZXRhaWxzLCBTdWJTdGVwLCBTZWxmSGVhbEFuYWx5c2lzRGF0YSwgU2VsZkhlYWxBY3Rpb24gfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZVN0ZXBDb21wb25lbnQgfSBmcm9tICcuLi9iYXNlLXN0ZXAuY29tcG9uZW50JztcbmltcG9ydCB7IG1ha2VDdXJyZW50QmFzZWxpbmVFdmVudCwgdXBsb2FkQmFzZWxpbmVFdmVudCB9IGZyb20gJy4uL3Zpc3VhbC1jb21wYXJpc29uL3Zpc3VhbC1jb21wYXJpc29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1haS1hZ2VudC1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FpLWFnZW50LXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgQUlBZ2VudFN0ZXBDb21wb25lbnQgZXh0ZW5kcyBCYXNlU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIEluZGl2aWR1YWwgaW5wdXRzXG4gIEBJbnB1dCgpIGlkITogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXN0U3RlcFJlc3VsdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGVwTnVtYmVyITogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcbiAgQElucHV0KCkgc3RhdHVzITogU3RlcFN0YXR1cztcbiAgQElucHV0KCkgZHVyYXRpb24hOiBudW1iZXI7XG4gIEBJbnB1dCgpIHRpbWluZ0JyZWFrZG93bj86IFRpbWluZ0JyZWFrZG93bjtcbiAgQElucHV0KCkgZXhwYW5kZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBwcm9tcHQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wdGltaXplZFJ1bj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFjdGlvbkNvdW50PzogbnVtYmVyO1xuICBASW5wdXQoKSBhY3Rpb25zPzogQUlBZ2VudEFjdGlvbltdO1xuICBASW5wdXQoKSBzZWxlY3RlZFRhYklucHV0PzogJ2FjdGlvbi10cmFjZScgfCAncGxhbm5lci10aW1lbGluZScgfCAnYWktcmVhc29uaW5nJztcbiAgQElucHV0KCkgZmFpbHVyZURldGFpbHM/OiBGYWlsdXJlRGV0YWlscztcbiAgQElucHV0KCkgcmVhc29uaW5nPzogc3RyaW5nW107XG4gIEBJbnB1dCgpIGNvbmZpZGVuY2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzVXBsb2FkaW5nQmFzZWxpbmUgPSB7fTtcbiAgQElucHV0KCkgc2VsZkhlYWxBbmFseXNpcz86IFNlbGZIZWFsQW5hbHlzaXNEYXRhO1xuXG4gIHNob3dGYWlsZWRTdGVwRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBtYWtlQ3VycmVudEJhc2VsaW5lID0gbmV3IEV2ZW50RW1pdHRlcjxtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSB1cGxvYWRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8dXBsb2FkQmFzZWxpbmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGFuYWx5emUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB2aWV3RnVsbExvZ3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxmSGVhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0eXBlOiBTZWxmSGVhbEFjdGlvbjsgaGVhbGVkTG9jYXRvcjogc3RyaW5nOyB9PigpO1xuXG4gIC8vIENvbmZpZyBwcm9wZXJ0eSBmb3IgYmFzZSBjbGFzcyAtIGJ1aWx0IGZyb20gaW5kaXZpZHVhbCBpbnB1dHMgaW4gbmdPbkluaXRcbiAgb3ZlcnJpZGUgY29uZmlnITogQUlBZ2VudFN0ZXBDb25maWc7XG5cbiAgc2VsZWN0ZWRUYWI6ICdhY3Rpb24tdHJhY2UnIHwgJ3BsYW5uZXItdGltZWxpbmUnIHwgJ2FpLXJlYXNvbmluZycgPSAnYWN0aW9uLXRyYWNlJztcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBCdWlsZCBjb25maWcgZnJvbSBpbmRpdmlkdWFsIGlucHV0c1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0ZXN0U3RlcFJlc3VsdElkOiB0aGlzLnRlc3RTdGVwUmVzdWx0SWQsXG4gICAgICBzdGVwTnVtYmVyOiB0aGlzLnN0ZXBOdW1iZXIsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcbiAgICAgIHR5cGU6ICdhaS1hZ2VudCcsXG4gICAgICBwcm9tcHQ6IHRoaXMucHJvbXB0LFxuICAgICAgb3B0aW1pemVkUnVuOiB0aGlzLm9wdGltaXplZFJ1bixcbiAgICAgIGFjdGlvbkNvdW50OiB0aGlzLmFjdGlvbkNvdW50LFxuICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zIHx8IFtdLFxuICAgICAgc2VsZWN0ZWRUYWI6IHRoaXMuc2VsZWN0ZWRUYWJJbnB1dCxcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICAgIHNlbGZIZWFsQW5hbHlzaXM6IHRoaXMuc2VsZkhlYWxBbmFseXNpcyxcbiAgICB9IGFzIEFJQWdlbnRTdGVwQ29uZmlnO1xuXG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGhpcy5jb25maWcuc2VsZWN0ZWRUYWIgfHwgJ2FjdGlvbi10cmFjZSc7XG4gIH1cblxuICBzZWxlY3RUYWIodGFiOiAnYWN0aW9uLXRyYWNlJyB8ICdwbGFubmVyLXRpbWVsaW5lJyB8ICdhaS1yZWFzb25pbmcnKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IHRhYjtcbiAgfVxuXG4gIGdldEFjdGlvbkljb24oYWN0aW9uVHlwZTogJ2V4dHJhY3QnIHwgJ3ZhbGlkYXRlJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFjdGlvblR5cGUgPT09ICdleHRyYWN0JyA/ICdib2x0JyA6ICd3YXJuaW5nJztcbiAgfVxuXG4gIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdDb3BpZWQgdG8gY2xpcGJvYXJkOicsIHRleHQpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY29weSB0byBjbGlwYm9hcmQ6JywgZXJyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvcHlQcm9tcHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJvbXB0KSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYFBST01QVFxcbiR7dGhpcy5wcm9tcHR9YDtcbiAgICAgIHRoaXMuY29weVRvQ2xpcGJvYXJkKGNvbnRlbnQpO1xuICAgIH1cbiAgfVxuXG4gIG9uVmlld01vcmVGYWlsZWRTdGVwQ2xpY2soZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGYWlsZWRTdGVwRGV0YWlscyA9IGV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKCk6IFN1YlN0ZXBbXSB7XG4gICAgLy8gQ29udmVydCBBSUFnZW50QWN0aW9uW10gdG8gU3ViU3RlcFtdIGZvciB0aGUgZmFpbGVkIHN0ZXAgY29tcG9uZW50XG4gICAgcmV0dXJuICh0aGlzLmFjdGlvbnMgfHwgW10pLm1hcChhY3Rpb24gPT4gKHtcbiAgICAgIGlkOiBhY3Rpb24uaWQsXG4gICAgICBkZXNjcmlwdGlvbjogYWN0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgc3RhdHVzOiBhY3Rpb24uc3RhdHVzLFxuICAgICAgZHVyYXRpb246IGFjdGlvbi5kdXJhdGlvbixcbiAgICB9KSk7XG4gIH1cblxuICBvbk1ha2VDdXJyZW50QmFzZWxpbmUoZXZlbnQ6IG1ha2VDdXJyZW50QmFzZWxpbmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMubWFrZUN1cnJlbnRCYXNlbGluZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uVXBsb2FkQmFzZWxpbmUoZXZlbnQ6IHVwbG9hZEJhc2VsaW5lRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnVwbG9hZEJhc2VsaW5lLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25BbmFseXplKCk6IHZvaWQge1xuICAgIHRoaXMuYW5hbHl6ZS5lbWl0KCk7XG4gIH1cblxuICBvblZpZXdGdWxsTG9ncygpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdGdWxsTG9ncy5lbWl0KCk7XG4gIH1cblxuICBvblNlbGZIZWFsQWN0aW9uKGV2ZW50OiB7IHR5cGU6IFNlbGZIZWFsQWN0aW9uOyBoZWFsZWRMb2NhdG9yOiBzdHJpbmc7IH0pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGZIZWFsQWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZ2V0IHNob3dWaWV3TW9yZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkICYmIEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscykgJiZcbiAgICAgIChcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uZXhwZWN0ZWQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uYWN0dWFsKSkgfHxcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmN1cnJlbnQgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmJhc2VsaW5lIHx8IHRoaXMuZmFpbHVyZURldGFpbHM/LnNjcmVlbnNob3RzPy5kaWZmZXJlbmNlKVxuICAgICAgICAgIHx8IEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8ubG9ncz8ubGVuZ3RoKSkgfHwgXG4gICAgICAgIChCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LmFpRml4QXBwbGllZCAmJiAodGhpcy5mYWlsdXJlRGV0YWlscz8uYWlGaXhNZXNzYWdlIHx8IHRoaXMuY29uZmlkZW5jZSB8fCB0aGlzLnJlYXNvbmluZz8ubGVuZ3RoKSkpXG4gICAgICApXG4gIH1cblxuICB0b2dnbGVIZWFkZXIoKTogdm9pZCB7XG4gICAgc3VwZXIudG9nZ2xlKCk7XG4gICAgaWYoIXRoaXMuaXNFeHBhbmRlZCl7XG4gICAgICB0aGlzLnNob3dGYWlsZWRTdGVwRGV0YWlscyA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1wLTIgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlSGVhZGVyKClcIj5cbiAgICBcbiAgICA8IS0tIFN0YXR1cyBJY29uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjb25maWcuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJ1wiID48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbHVyZSdcIj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTcuNSA0LjVMNC41IDcuNVwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNC41TDcuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuXG4gICAgPCEtLSBMaWdodGJ1bGIgSWNvbiBhbmQgU3RlcCBOdW1iZXIgLS0+XG4gICAgPGRpdj48c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiByeD1cIjRcIiBmaWxsPVwiI0ZFRjNDNlwiLz48cGF0aCBkPVwiTTguODMxNSAxMC41SDExLjE2OE0xMCAzLjVWNE0xMy4xODIgNC44MThMMTIuODI4NSA1LjE3MTVNMTQuNSA4SDE0TTYgOEg1LjVNNy4xNzE1IDUuMTcxNUw2LjgxOCA0LjgxOE04LjIzMiA5Ljc2OEM3Ljg4MjQzIDkuNDE4MzQgNy42NDQ0IDguOTcyODggNy41NDc5OSA4LjQ4Nzk1QzcuNDUxNTggOC4wMDMwMSA3LjUwMTEzIDcuNTAwMzggNy42OTAzNiA3LjA0MzYxQzcuODc5NiA2LjU4NjgzIDguMjAwMDMgNi4xOTY0MiA4LjYxMTE0IDUuOTIxNzVDOS4wMjIyNSA1LjY0NzA3IDkuNTA1NTcgNS41MDA0NyAxMCA1LjUwMDQ3QzEwLjQ5NDQgNS41MDA0NyAxMC45Nzc3IDUuNjQ3MDcgMTEuMzg4OSA1LjkyMTc1QzExLjggNi4xOTY0MiAxMi4xMjA0IDYuNTg2ODMgMTIuMzA5NiA3LjA0MzYxQzEyLjQ5ODkgNy41MDAzOCAxMi41NDg0IDguMDAzMDEgMTIuNDUyIDguNDg3OTVDMTIuMzU1NiA4Ljk3Mjg4IDEyLjExNzYgOS40MTgzNCAxMS43NjggOS43NjhMMTEuNDk0IDEwLjA0MTVDMTEuMzM3NCAxMC4xOTgyIDExLjIxMzEgMTAuMzg0MiAxMS4xMjgzIDEwLjU4ODlDMTEuMDQzNiAxMC43OTM2IDExIDExLjAxMjkgMTEgMTEuMjM0NVYxMS41QzExIDExLjc2NTIgMTAuODk0NiAxMi4wMTk2IDEwLjcwNzEgMTIuMjA3MUMxMC41MTk2IDEyLjM5NDYgMTAuMjY1MiAxMi41IDEwIDEyLjVDOS43MzQ3OCAxMi41IDkuNDgwNDMgMTIuMzk0NiA5LjI5Mjg5IDEyLjIwNzFDOS4xMDUzNiAxMi4wMTk2IDkgMTEuNzY1MiA5IDExLjVWMTEuMjM0NUM5IDEwLjc4NyA4LjgyMiAxMC4zNTc1IDguNTA2IDEwLjA0MTVMOC4yMzIgOS43NjhaXCIgc3Ryb2tlPVwiI0UxNzEwMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cblxuICAgIDwhLS0gU3RlcCBOdW1iZXIgYW5kIFRpdGxlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LWJvbGQgY3FhLXRleHQtWyMzMzQxNTVdIGNxYS10ZXh0LVsxMXB4XSBjcWEtbGVhZGluZy1bMTNweF1cIj5cbiAgICAgICAge3sgY29uZmlnLnN0ZXBOdW1iZXIgfX0uIDxzcGFuIFtpbm5lckhUTUxdPVwiY29uZmlnLnRpdGxlXCI+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgXG4gICAgICA8IS0tIExvb3AgVHlwZSBCYWRnZXMgLS0+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNFMTcxMDBdIGNxYS1iZy1bI0ZFRjNDNl0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XVwiPlxuICAgICAgICBBSSBBZ2VudFxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBY3Rpb24gQ291bnQgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCJjb25maWcuYWN0aW9uQ291bnRcIiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXJvdW5kZWQtZnVsbCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyNFMTcxMDBdIGNxYS1iZy1bI0ZFRjNDNl0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XVwiPlxuICAgICAge3sgY29uZmlnLmFjdGlvbkNvdW50IH19IGFjdGlvbnNcbiAgICA8L3NwYW4+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTFcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzlweF0gY3FhLWxlYWRpbmctWzExcHhdIGNxYS10ZXh0LVsjOUNBM0FGXVwiPlxuICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihjb25maWcuZHVyYXRpb24pIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3ZnIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0zLjUgNUw3IDguNUwxMC41IDVcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMC44MzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRXhwYW5kZWQgQ29udGVudCAtLT5cbiAgPGRpdiAqbmdJZj1cImlzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1iZy1bI0ZGRkVGOV0gY3FhLW10LTEuNSBjcWEtbWwtOSBjcWEtbXItNiBjcWEtcC00XCIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggc29saWQgI0U0RTRFNDtcIj5cbiAgICA8IS0tIFByb21wdCBDYXJkIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1pdGVtcy1zdGFydCBjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtbGcgY3FhLXAtM1wiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0ZFRTY4NVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1tYi0yXCI+XG4gICAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuMzMzMzMgNi42NjY3NUg1LjM0TTggNi42NjY3NUg4LjAwNjY3TTEwLjY2NjcgNi42NjY3NUgxMC42NzMzTTYgMTAuNjY2N0gzLjMzMzMzQzIuOTc5NzEgMTAuNjY2NyAyLjY0MDU3IDEwLjUyNjMgMi4zOTA1MiAxMC4yNzYyQzIuMTQwNDggMTAuMDI2MiAyIDkuNjg3MDQgMiA5LjMzMzQxVjQuMDAwMDhDMiAzLjY0NjQ2IDIuMTQwNDggMy4zMDczMiAyLjM5MDUyIDMuMDU3MjdDMi42NDA1NyAyLjgwNzIyIDIuOTc5NzEgMi42NjY3NSAzLjMzMzMzIDIuNjY2NzVIMTIuNjY2N0MxMy4wMjAzIDIuNjY2NzUgMTMuMzU5NCAyLjgwNzIyIDEzLjYwOTUgMy4wNTcyN0MxMy44NTk1IDMuMzA3MzIgMTQgMy42NDY0NiAxNCA0LjAwMDA4VjkuMzMzNDFDMTQgOS42ODcwNCAxMy44NTk1IDEwLjAyNjIgMTMuNjA5NSAxMC4yNzYyQzEzLjM1OTQgMTAuNTI2MyAxMy4wMjAzIDEwLjY2NjcgMTIuNjY2NyAxMC42NjY3SDkuMzMzMzNMNiAxNC4wMDAxVjEwLjY2NjdaXCIgc3Ryb2tlPVwiI0UxNzEwMFwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjQkI0RDAwXSBcIj5QUk9NUFQ8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcub3B0aW1pemVkUnVuXCIgY2xhc3M9XCJjcWEtcHgtMiBjcWEtcHktWzJweF0gY3FhLXJvdW5kZWQtZnVsbCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1wcmltYXJ5IGNxYS1iZy1bI0VCRUNGRF1cIj5cbiAgICAgICAgICAgIE9wdGltaXplZCBSdW5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMEIwQjBCXVwiIFtpbm5lckhUTUxdPVwiY29uZmlnLnByb21wdFwiPjwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImNxYS1wLTEuNVwiIChjbGljayk9XCJjb3B5UHJvbXB0KClcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk01LjMzMzMyIDEwLjY2NjdIMy45OTk5OUMzLjY0NjM3IDEwLjY2NjcgMy4zMDcyMyAxMC41MjYzIDMuMDU3MTggMTAuMjc2MkMyLjgwNzEzIDEwLjAyNjIgMi42NjY2NiA5LjY4NzA0IDIuNjY2NjYgOS4zMzM0MVY0LjAwMDA4QzIuNjY2NjYgMy42NDY0NiAyLjgwNzEzIDMuMzA3MzIgMy4wNTcxOCAzLjA1NzI3QzMuMzA3MjMgMi44MDcyMiAzLjY0NjM3IDIuNjY2NzUgMy45OTk5OSAyLjY2Njc1SDkuMzMzMzJDOS42ODY5NSAyLjY2Njc1IDEwLjAyNjEgMi44MDcyMiAxMC4yNzYxIDMuMDU3MjdDMTAuNTI2MiAzLjMwNzMyIDEwLjY2NjcgMy42NDY0NiAxMC42NjY3IDQuMDAwMDhWNS4zMzM0MU02LjY2NjY2IDEzLjMzMzRIMTJDMTIuMzUzNiAxMy4zMzM0IDEyLjY5MjggMTMuMTkyOSAxMi45NDI4IDEyLjk0MjlDMTMuMTkyOCAxMi42OTI4IDEzLjMzMzMgMTIuMzUzNyAxMy4zMzMzIDEyLjAwMDFWNi42NjY3NUMxMy4zMzMzIDYuMzEzMTMgMTMuMTkyOCA1Ljk3Mzk5IDEyLjk0MjggNS43MjM5NEMxMi42OTI4IDUuNDczODkgMTIuMzUzNiA1LjMzMzQxIDEyIDUuMzMzNDFINi42NjY2NkM2LjMxMzAzIDUuMzMzNDEgNS45NzM5IDUuNDczODkgNS43MjM4NSA1LjcyMzk0QzUuNDczOCA1Ljk3Mzk5IDUuMzMzMzIgNi4zMTMxMyA1LjMzMzMyIDYuNjY2NzVWMTIuMDAwMUM1LjMzMzMyIDEyLjM1MzcgNS40NzM4IDEyLjY5MjggNS43MjM4NSAxMi45NDI5QzUuOTczOSAxMy4xOTI5IDYuMzEzMDMgMTMuMzMzNCA2LjY2NjY2IDEzLjMzMzRaXCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGFiIE5hdmlnYXRpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWZsZXgtd3JhcCBjcWEtbXktMS41XCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI0U0RTRFNFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0VGFiKCdhY3Rpb24tdHJhY2UnKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnIWNxYS10ZXh0LVsjQkI0RDAwXSc6IHNlbGVjdGVkVGFiID09PSAnYWN0aW9uLXRyYWNlJ31cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiBzZWxlY3RlZFRhYiA9PT0gJ2FjdGlvbi10cmFjZScgPyAnMnB4IHNvbGlkICNGRTlBMDAnIDogJzJweCBzb2xpZCB0cmFuc3BhcmVudCd9XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMiBjcWEtcHgtMyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzYzNjM2M10gY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgIEFjdGlvbiBUcmFjZVxuICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImNxYS1iZy1bI0Y1RjVGNV0gY3FhLXRleHQtY3VycmVudCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzEzLjNweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1yb3VuZGVkLWZ1bGwgY3FhLXctWzE2cHhdIGNxYS1oLVsxNnB4XSBjcWEtbWluLXctWzE2cHhdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAge3sgY29uZmlnLmFjdGlvbnMubGVuZ3RoIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0VGFiKCdwbGFubmVyLXRpbWVsaW5lJylcIlxuICAgICAgICBbbmdDbGFzc109XCJ7JyFjcWEtdGV4dC1bI0JCNEQwMF0nOiBzZWxlY3RlZFRhYiA9PT0gJ3BsYW5uZXItdGltZWxpbmUnfVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsnYm9yZGVyLWJvdHRvbSc6IHNlbGVjdGVkVGFiID09PSAncGxhbm5lci10aW1lbGluZScgPyAnMnB4IHNvbGlkICNGRTlBMDAnIDogJzJweCBzb2xpZCB0cmFuc3BhcmVudCd9XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMiBjcWEtcHgtMyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzYzNjM2M10gY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgIFBsYW5uZXIgVGltZWxpbmVcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2VsZWN0VGFiKCdhaS1yZWFzb25pbmcnKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnIWNxYS10ZXh0LVsjQkI0RDAwXSc6IHNlbGVjdGVkVGFiID09PSAnYWktcmVhc29uaW5nJ31cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JvcmRlci1ib3R0b20nOiBzZWxlY3RlZFRhYiA9PT0gJ2FpLXJlYXNvbmluZycgPyAnMnB4IHNvbGlkICNGRTlBMDAnIDogJzJweCBzb2xpZCB0cmFuc3BhcmVudCd9XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMiBjcWEtcHgtMyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy00IGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzYzNjM2M10gY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgIEFJIFJlYXNvbmluZ1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRhYiBDb250ZW50IC0tPlxuICAgIDwhLS0gQWN0aW9uIFRyYWNlIFRhYiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICdhY3Rpb24tdHJhY2UnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXJvdW5kZWQtbWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1iLTEuNSBjcWEtcC0yIGNxYS1iZy1bI0VGRjZGRl1cIiBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNCRURCRkZcIj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTguNjY2NjcgNC42NjY3NUgxNE0xNCA0LjY2Njc1VjEwLjAwMDFNMTQgNC42NjY3NUw4LjY2NjY3IDEwLjAwMDFMNiA3LjMzMzQxTDIgMTEuMzMzNFwiIHN0cm9rZT1cIiMxNTVERkNcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTQ0N0U2XSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdXCI+XG4gICAgICAgICAgPGI+e3sgY29uZmlnLmFjdGlvbnMubGVuZ3RoIH19IGFjdGlvbnM8L2I+IFxuICAgICAgICAgIGZyb20gcHJldmlvdXMgcnVuc1xuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTFcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbj8uZGVzY3JpcHRpb24gJiYgYWN0aW9uPy50eXBlICE9PSAnQUlfQUdFTlRfQUNUSU9OJ1wiIGNsYXNzPVwiY3FhLXJvdW5kZWQtbWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTIgY3FhLXB5LTEgY3FhLWJnLVsjRjdGQUZDXVwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0JFREJGRlwiPlxuICAgICAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiByeD1cIjhcIiBmaWxsPVwiI0RCRUFGRVwiLz48cGF0aCBkPVwiTTUuMDgzMzcgOC40MTY3NUw2Ljc1MDA0IDEwLjA4MzRMMTAuOTE2NyA1LjkxNjc1XCIgc3Ryb2tlPVwiIzE1NURGQ1wiIHN0cm9rZS13aWR0aD1cIjAuODMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgICAgICAgPCEtLSA8bWF0LWljb25cbiAgICAgICAgICAgICAgY2xhc3M9XCIhY3FhLXctNCAhY3FhLWgtNCAhY3FhLXRleHQtWzE2cHhdIGNxYS10ZXh0LXllbGxvdy01MDBcIj5cbiAgICAgICAgICAgICAge3sgZ2V0QWN0aW9uSWNvbihhY3Rpb24udHlwZSkgfX1cbiAgICAgICAgICAgIDwvbWF0LWljb24+IC0tPlxuICAgICAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiByeD1cIjRcIiBmaWxsPVwiI0ZFRjNDNlwiLz48cGF0aCBkPVwiTTEwLjUgOVY1LjVMNiAxMUg5LjVWMTQuNUwxNCA5SDEwLjVaXCIgc3Ryb2tlPVwiI0UxNzEwMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LWJvbGQgY3FhLXRleHQtZ3JheS1bIzBCMEIwQl1cIj57eyBhY3Rpb24uZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFjdGlvbi5jb25maWRlbmNlXCIgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzAwQTYzRV1cIj5cbiAgICAgICAgICAgICAge3sgYWN0aW9uLmNvbmZpZGVuY2UgfX0lXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNjM2MzYzXVwiPlxuICAgICAgICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihhY3Rpb24uZHVyYXRpb24pIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIDxkaXY+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk00LjUgMi41TDggNkw0LjUgOS41XCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj4gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFBsYW5uZXIgVGltZWxpbmUgVGFiIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ3BsYW5uZXItdGltZWxpbmUnXCIgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgUGxhbm5lciB0aW1lbGluZSBjb250ZW50IHdvdWxkIGdvIGhlcmVcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQUkgUmVhc29uaW5nIFRhYiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICdhaS1yZWFzb25pbmcnXCIgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgQUkgcmVhc29uaW5nIGNvbnRlbnQgd291bGQgZ28gaGVyZVxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG4gICAgICA8IS0tIFNlbGYgSGVhbCBBbmFseXNpcyAtLT5cbiAgICA8Y3FhLXNlbGYtaGVhbC1hbmFseXNpcyBcbiAgICAgICpuZ0lmPVwic2VsZkhlYWxBbmFseXNpc1wiIFxuICAgICAgW29yaWdpbmFsTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLm9yaWdpbmFsTG9jYXRvclwiXG4gICAgICBbaGVhbGVkTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxlZExvY2F0b3JcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwic2VsZkhlYWxBbmFseXNpcy5jb25maWRlbmNlXCJcbiAgICAgIFtoZWFsTWV0aG9kXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbE1ldGhvZFwiXG4gICAgICAoYWN0aW9uKT1cIm9uU2VsZkhlYWxBY3Rpb24oJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlbGYtaGVhbC1hbmFseXNpcz5cblxuICA8IS0tIFRpbWluZyBCcmVha2Rvd24gLS0+XG4gIDxkaXYgKm5nSWY9XCJjb25maWcudGltaW5nQnJlYWtkb3duXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWVuZCBjcWEtZ2FwLTUgY3FhLXB0LTEuNSBjcWEtcHgtNCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgPHNwYW4+VGltaW5nIGJyZWFrZG93bjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWRpYWxvZy1tdXRlZCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtM1wiPlxuICAgICAgPGRpdj5cbiAgICAgICAgQXBwIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZ3JheS03MDBcIj57eyBmb3JtYXREdXJhdGlvbihjb25maWcudGltaW5nQnJlYWtkb3duLmFwcCkgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMSAxMVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNLTMuODE0N2UtMDYgMTAuMzJWLTcuMTUyNTZlLTA3SDAuOTU5OTk2VjEwLjMySC0zLjgxNDdlLTA2WlwiIGZpbGw9XCIjRTVFN0VCXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgVG9vbCA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWdyYXktNzAwXCI+e3sgZm9ybWF0RHVyYXRpb24oY29uZmlnLnRpbWluZ0JyZWFrZG93bi50b29sKSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICA8ZGl2ICpuZ0lmPVwic2hvd1ZpZXdNb3JlQnV0dG9uXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtcHgtNFwiPlxuICAgIDxjcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvblxuICAgICAgW3RpbWluZ0JyZWFrZG93bl09XCJ0aW1pbmdCcmVha2Rvd25cIlxuICAgICAgW3N1YlN0ZXBzXT1cImdldFN1YlN0ZXBzRm9yRmFpbGVkU3RlcCgpXCJcbiAgICAgIFtmYWlsdXJlRGV0YWlsc109XCJmYWlsdXJlRGV0YWlsc1wiXG4gICAgICBbaXNFeHBhbmRlZF09XCJzaG93RmFpbGVkU3RlcERldGFpbHNcIlxuICAgICAgKHZpZXdNb3JlQ2xpY2spPVwib25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljaygkZXZlbnQpXCI+XG4gICAgPC9jcWEtdmlldy1tb3JlLWZhaWxlZC1zdGVwLWJ1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBVcGRhdGVkIEZhaWxlZCBTdGVwIENvbXBvbmVudCAtIHNob3duIHdoZW4gYnV0dG9uIGlzIGNsaWNrZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJzaG93Vmlld01vcmVCdXR0b24gJiYgc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzICYmIGZhaWx1cmVEZXRhaWxzXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtcHgtNFwiPlxuICAgIDxjcWEtdXBkYXRlZC1mYWlsZWQtc3RlcFxuICAgICAgW3Rlc3RTdGVwUmVzdWx0SWRdPVwidGVzdFN0ZXBSZXN1bHRJZFwiXG4gICAgICBbdGltaW5nQnJlYWtkb3duXT1cInRpbWluZ0JyZWFrZG93blwiXG4gICAgICBbZXhwYW5kZWRdPVwidHJ1ZVwiXG4gICAgICBbc3ViU3RlcHNdPVwiZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKClcIlxuICAgICAgW2ZhaWx1cmVEZXRhaWxzXT1cImZhaWx1cmVEZXRhaWxzXCJcbiAgICAgIFtyZWFzb25pbmddPVwicmVhc29uaW5nXCJcbiAgICAgIFtjb25maWRlbmNlXT1cImNvbmZpZGVuY2VcIlxuICAgICAgW2lzVXBsb2FkaW5nQmFzZWxpbmVdPVwiaXNVcGxvYWRpbmdCYXNlbGluZVwiXG4gICAgICAobWFrZUN1cnJlbnRCYXNlbGluZSk9XCJvbk1ha2VDdXJyZW50QmFzZWxpbmUoJGV2ZW50KVwiXG4gICAgICAodXBsb2FkQmFzZWxpbmUpPVwib25VcGxvYWRCYXNlbGluZSgkZXZlbnQpXCJcbiAgICAgIChhbmFseXplKT1cIm9uQW5hbHl6ZSgpXCJcbiAgICAgICh2aWV3RnVsbExvZ3MpPVwib25WaWV3RnVsbExvZ3MoKVwiPlxuICAgIDwvY3FhLXVwZGF0ZWQtZmFpbGVkLXN0ZXA+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|