@cqa-lib/cqa-ui 1.1.137 → 1.1.139

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/esm2020/lib/execution-screen/ai-agent-step/ai-agent-step.component.mjs +36 -5
  2. package/esm2020/lib/execution-screen/api-step/api-step.component.mjs +9 -3
  3. package/esm2020/lib/execution-screen/basic-step/basic-step.component.mjs +9 -3
  4. package/esm2020/lib/execution-screen/condition-step/condition-step.component.mjs +12 -3
  5. package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +7 -4
  6. package/esm2020/lib/execution-screen/execution-step.models.mjs +1 -1
  7. package/esm2020/lib/execution-screen/file-download-step/file-download-step.component.mjs +6 -3
  8. package/esm2020/lib/execution-screen/live-execution-step/live-execution-step.component.mjs +9 -3
  9. package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +9 -3
  10. package/esm2020/lib/execution-screen/step-group/step-group.component.mjs +7 -4
  11. package/esm2020/lib/execution-screen/step-renderer/step-renderer.component.mjs +52 -3
  12. package/fesm2015/cqa-lib-cqa-ui.mjs +150 -28
  13. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  14. package/fesm2020/cqa-lib-cqa-ui.mjs +146 -24
  15. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  16. package/lib/execution-screen/ai-agent-step/ai-agent-step.component.d.ts +2 -1
  17. package/lib/execution-screen/api-step/api-step.component.d.ts +2 -1
  18. package/lib/execution-screen/basic-step/basic-step.component.d.ts +2 -1
  19. package/lib/execution-screen/condition-step/condition-step.component.d.ts +2 -1
  20. package/lib/execution-screen/db-verification-step/db-verification-step.component.d.ts +2 -1
  21. package/lib/execution-screen/execution-step.models.d.ts +1 -0
  22. package/lib/execution-screen/file-download-step/file-download-step.component.d.ts +2 -1
  23. package/lib/execution-screen/live-execution-step/live-execution-step.component.d.ts +2 -1
  24. package/lib/execution-screen/loop-step/loop-step.component.d.ts +2 -1
  25. package/lib/execution-screen/step-group/step-group.component.d.ts +2 -1
  26. package/package.json +1 -1
  27. package/styles.css +1 -1
@@ -54,7 +54,7 @@ export class DbVerificationStepComponent extends BaseStepComponent {
54
54
  }
55
55
  ngOnChanges(changes) {
56
56
  // Update config when inputs change
57
- if (changes['dbTestResult'] || changes['dbConfig'] || changes['expanded'] || changes['status'] || changes['duration']) {
57
+ if (changes['dbTestResult'] || changes['dbConfig'] || changes['expanded'] || changes['status'] || changes['duration'] || changes['stepDeleted']) {
58
58
  this.updateConfig();
59
59
  if (changes['dbTestResult']) {
60
60
  this.setupTableColumns();
@@ -77,6 +77,7 @@ export class DbVerificationStepComponent extends BaseStepComponent {
77
77
  type: 'db-verification',
78
78
  dbTestResult: this.dbTestResult,
79
79
  dbConfig: this.dbConfig,
80
+ stepDeleted: this.stepDeleted,
80
81
  timingBreakdown: this.timingBreakdown,
81
82
  expanded: this.expanded,
82
83
  };
@@ -339,10 +340,10 @@ export class DbVerificationStepComponent extends BaseStepComponent {
339
340
  }
340
341
  }
341
342
  DbVerificationStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DbVerificationStepComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
342
- DbVerificationStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DbVerificationStepComponent, selector: "cqa-db-verification-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", dbTestResult: "dbTestResult", dbConfig: "dbConfig", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", isUploadingBaseline: "isUploadingBaseline", isMakingCurrentBaseline: "isMakingCurrentBaseline", selfHealAnalysis: "selfHealAnalysis", getSelfHealLoadingStatesHandler: "getSelfHealLoadingStatesHandler", onStepClickHandler: "onStepClickHandler", isLive: "isLive", step: "step" }, outputs: { makeCurrentBaseline: "makeCurrentBaseline", uploadBaseline: "uploadBaseline", analyze: "analyze", viewFullLogs: "viewFullLogs", selfHealAction: "selfHealAction" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-font-inter\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\"\n style=\"border-bottom: 1px solid #F3F4F6\">\n \n <!-- Status Icon -->\n <!-- Success -->\n <div *ngIf=\"getStatus().toLowerCase() === 'success'\">\n <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>\n </div>\n <!-- Failure -->\n <div *ngIf=\"getStatus().toLowerCase() === 'failure' || getStatus().toLowerCase() === 'failed'\">\n <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>\n </div>\n <!-- Pending -->\n <div *ngIf=\"getStatus().toLowerCase() === 'pending'\">\n <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>\n </div>\n <!-- Running - Show spinner -->\n <div *ngIf=\"getStatus().toLowerCase() === 'running'\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex cqa-items-center\" *ngIf=\"getStatus().toLowerCase() === 'skipped'\">\n <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n\n <div><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\n <rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#F0F0F1\"/>\n <path d=\"M13.5 3.5H6.5C5.95 3.5 5.5 3.95 5.5 4.5V11.5C5.5 12.05 5.95 12.5 6.5 12.5H13.5C14.05 12.5 14.5 12.05 14.5 11.5V4.5C14.5 3.95 14.05 3.5 13.5 3.5ZM13.5 4.5V6H6.5V4.5H13.5ZM13.5 7V9H6.5V7H13.5ZM6.5 11.5V10H13.5V11.5H6.5Z\" fill=\"#212122\"/>\n </svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px] cqa-font-inter\">\n {{ stepNumber }}. <span [innerHTML]=\"title\"></span> \n \n <span class=\"cqa-ml-1 cqa-px-1.5 cqa-py-0.5 cqa-rounded-full cqa-font-medium cqa-text-[#212122] cqa-bg-[#F0F0F1] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n Database\n </span>\n\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(duration) }}\n </span>\n <svg *ngIf=\"!isLive\" [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 && !isLive\" class=\"cqa-p-2 !cqa-pl-9 !cqa-pr-6 cqa-bg-white\">\n <!-- Summary Bar -->\n <div class=\"cqa-mb-1.5 cqa-p-3 cqa-bg-[#FCFCFC] cqa-rounded-[6px] cqa-flex cqa-flex-col cqa-gap-2\" style=\"border: 1px solid #E5E7EB;\" *ngIf=\"getStatus() || duration || cachedQueryResults?.length > 0 || dbTestResult?.assertionResults?.length > 0 || getTotalRowsReturned() > 0 || getFailureMessage()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <!-- Status Badge -->\n <cqa-badge\n *ngIf=\"getStatus()?.toLowerCase() === 'failure' || getStatus()?.toLowerCase() === 'failed'\"\n label=\"FAIL\"\n backgroundColor=\"#DC2626\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge\n *ngIf=\"getStatus()?.toLowerCase() === 'success'\"\n label=\"PASS\"\n backgroundColor=\"#22C55E\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n\n <div class=\"cqa-h-[19px] cqa-w-[1px] cqa-bg-[#E5E7EB]\"></div>\n \n <!-- Summary Stats -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-text-[11px] cqa-leading-[16px] cqa-text-[#6B7280]\">\n <span *ngIf=\"duration\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Total Time: <span class=\"cqa-text-[#4B5563]\">{{ formatDuration(duration) }}</span></span>\n <span *ngIf=\"cachedQueryResults?.length > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Queries: <span class=\"cqa-text-[#4B5563]\">{{ cachedQueryResults?.length || 0 }}</span></span>\n <span *ngIf=\"dbTestResult?.assertionResults?.length > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Assertions: <span class=\"cqa-text-[#4B5563]\">{{ dbTestResult?.assertionResults?.length || 0 }}</span></span>\n <span *ngIf=\"getTotalRowsReturned() > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Rows Returned: <span class=\"cqa-text-[#4B5563]\">{{ getTotalRowsReturned() }}</span></span>\n </div>\n </div>\n\n <!-- Failure Banner -->\n <div \n *ngIf=\"getFailureMessage()\"\n class=\"cqa-flex cqa-px-2 cqa-py-1 cqa-bg-[#FEF2F2] cqa-rounded-[4px]\" style=\"border: 1px solid #FEE2E2;\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#B91C1C]\">\n {{ getFailureMessage() }}\n </span>\n </div>\n </div>\n\n <!-- Database Environment Section -->\n <div *ngIf=\"dbConfig\" class=\"cqa-mb-1.5\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Database environment</div>\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-px-4 cqa-py-2 cqa-relative cqa-flex cqa-flex-wrap cqa-gap-3\">\n <!-- Environment -->\n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Environment</div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.name }}</span>\n <span (click)=\"copyEnvironment()\" class=\"cqa-cursor-pointer\">\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 </span>\n </div>\n </div>\n \n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Type</div>\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.dbType }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-mb-1.5\" *ngIf=\"cachedQueryResults?.length > 0\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Query Execution</div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-4 cqa-py-2 cqa-bg-white cqa-rounded-[10px]\" style=\"border: 1px solid #E2E8F0;\">\n <cqa-db-query-execution-item\n *ngFor=\"let queryItem of cachedQueryResults; let i = index; trackBy: trackByQueryKey\"\n [queryNumber]=\"i + 1\"\n [queryKey]=\"queryItem.key\"\n [queryResult]=\"queryItem.result\"\n [status]=\"getQueryStatus(queryItem.key)\"\n [variableName]=\"queryItem.key\">\n </cqa-db-query-execution-item>\n </div>\n </div>\n\n <!-- Verification Section -->\n <div *ngIf=\"dbTestResult?.assertionResults && dbTestResult?.assertionResults?.length > 0\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Verification</div> \n <!-- Verification Table -->\n <div class=\"cqa-bg-white cqa-rounded-[10px] cqa-px-4 cqa-py-2 cqa-overflow-hidden\" style=\"border: 1px solid #E2E8F0;\">\n <!-- Segment Control for Filters -->\n <cqa-segment-control\n [segments]=\"filterSegments\"\n [value]=\"verificationFilter\"\n (valueChange)=\"onFilterChange($event)\">\n </cqa-segment-control>\n <cqa-table-template\n [columns]=\"verificationTableColumns\"\n [data]=\"getTableData()\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyTable\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept : false\"\n [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept : false\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-[#374151]\">{{ formatDuration(timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-[#374151]\">{{ formatDuration(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 [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [isLive]=\"isLive\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n </div>\n</div>\n\n", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading"] }, { type: i2.DbQueryExecutionItemComponent, selector: "cqa-db-query-execution-item", inputs: ["queryNumber", "queryKey", "queryResult", "status", "variableName"] }, { type: i3.SegmentControlComponent, selector: "cqa-segment-control", inputs: ["segments", "value", "disabled"], outputs: ["valueChange"] }, { type: i4.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "filterConfig", "showFilterPanel", "showFilterButton", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "pageSizeOptions", "serverSidePagination", "totalElements", "isTableLoading", "isTableDataLoading"], outputs: ["onSearchChange", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "pageChange", "onReload", "onAutoRefreshClick"] }, { type: i5.SelfHealAnalysisComponent, selector: "cqa-self-heal-analysis", inputs: ["originalLocator", "healedLocator", "confidence", "healMethod", "isLoadingAccept", "isLoadingModifyAccept"], outputs: ["action"] }, { type: i6.ViewMoreFailedStepButtonComponent, selector: "cqa-view-more-failed-step-button", inputs: ["timingBreakdown", "subSteps", "failureDetails", "isExpanded"], outputs: ["viewMoreClick"] }, { type: i7.UpdatedFailedStepComponent, selector: "cqa-updated-failed-step", inputs: ["timingBreakdown", "testStepResultId", "expanded", "subSteps", "failureDetails", "reasoning", "confidence", "isUploadingBaseline", "isMakingCurrentBaseline", "isLive"], outputs: ["makeCurrentBaseline", "uploadBaseline", "analyze", "viewFullLogs"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
343
+ DbVerificationStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DbVerificationStepComponent, selector: "cqa-db-verification-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", duration: "duration", timingBreakdown: "timingBreakdown", expanded: "expanded", dbTestResult: "dbTestResult", dbConfig: "dbConfig", failureDetails: "failureDetails", reasoning: "reasoning", confidence: "confidence", stepDeleted: "stepDeleted", isUploadingBaseline: "isUploadingBaseline", isMakingCurrentBaseline: "isMakingCurrentBaseline", selfHealAnalysis: "selfHealAnalysis", getSelfHealLoadingStatesHandler: "getSelfHealLoadingStatesHandler", onStepClickHandler: "onStepClickHandler", isLive: "isLive", step: "step" }, outputs: { makeCurrentBaseline: "makeCurrentBaseline", uploadBaseline: "uploadBaseline", analyze: "analyze", viewFullLogs: "viewFullLogs", selfHealAction: "selfHealAction" }, host: { classAttribute: "cqa-ui-root" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-font-inter\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\"\n style=\"border-bottom: 1px solid #F3F4F6\">\n \n <!-- Status Icon -->\n <!-- Success -->\n <div *ngIf=\"getStatus().toLowerCase() === 'success'\">\n <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>\n </div>\n <!-- Failure -->\n <div *ngIf=\"getStatus().toLowerCase() === 'failure' || getStatus().toLowerCase() === 'failed'\">\n <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>\n </div>\n <!-- Pending -->\n <div *ngIf=\"getStatus().toLowerCase() === 'pending'\">\n <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>\n </div>\n <!-- Running - Show spinner -->\n <div *ngIf=\"getStatus().toLowerCase() === 'running'\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex cqa-items-center\" *ngIf=\"getStatus().toLowerCase() === 'skipped'\">\n <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n\n <div><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\n <rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#F0F0F1\"/>\n <path d=\"M13.5 3.5H6.5C5.95 3.5 5.5 3.95 5.5 4.5V11.5C5.5 12.05 5.95 12.5 6.5 12.5H13.5C14.05 12.5 14.5 12.05 14.5 11.5V4.5C14.5 3.95 14.05 3.5 13.5 3.5ZM13.5 4.5V6H6.5V4.5H13.5ZM13.5 7V9H6.5V7H13.5ZM6.5 11.5V10H13.5V11.5H6.5Z\" fill=\"#212122\"/>\n </svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px] cqa-font-inter cqa-flex cqa-items-center cqa-gap-1\">\n <span>{{ stepNumber }}. <span [innerHTML]=\"title\"></span></span>\n <span class=\"cqa-ml-1 cqa-px-1.5 cqa-py-0.5 cqa-rounded-full cqa-font-medium cqa-text-[#212122] cqa-bg-[#F0F0F1] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n Database\n </span>\n <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n Deleted\n </span>\n\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(duration) }}\n </span>\n <svg *ngIf=\"!isLive\" [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 && !isLive\" class=\"cqa-p-2 !cqa-pl-9 !cqa-pr-6 cqa-bg-white\">\n <!-- Summary Bar -->\n <div class=\"cqa-mb-1.5 cqa-p-3 cqa-bg-[#FCFCFC] cqa-rounded-[6px] cqa-flex cqa-flex-col cqa-gap-2\" style=\"border: 1px solid #E5E7EB;\" *ngIf=\"getStatus() || duration || cachedQueryResults?.length > 0 || dbTestResult?.assertionResults?.length > 0 || getTotalRowsReturned() > 0 || getFailureMessage()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <!-- Status Badge -->\n <cqa-badge\n *ngIf=\"getStatus()?.toLowerCase() === 'failure' || getStatus()?.toLowerCase() === 'failed'\"\n label=\"FAIL\"\n backgroundColor=\"#DC2626\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge\n *ngIf=\"getStatus()?.toLowerCase() === 'success'\"\n label=\"PASS\"\n backgroundColor=\"#22C55E\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n\n <div class=\"cqa-h-[19px] cqa-w-[1px] cqa-bg-[#E5E7EB]\"></div>\n \n <!-- Summary Stats -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-text-[11px] cqa-leading-[16px] cqa-text-[#6B7280]\">\n <span *ngIf=\"duration\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Total Time: <span class=\"cqa-text-[#4B5563]\">{{ formatDuration(duration) }}</span></span>\n <span *ngIf=\"cachedQueryResults?.length > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Queries: <span class=\"cqa-text-[#4B5563]\">{{ cachedQueryResults?.length || 0 }}</span></span>\n <span *ngIf=\"dbTestResult?.assertionResults?.length > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Assertions: <span class=\"cqa-text-[#4B5563]\">{{ dbTestResult?.assertionResults?.length || 0 }}</span></span>\n <span *ngIf=\"getTotalRowsReturned() > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Rows Returned: <span class=\"cqa-text-[#4B5563]\">{{ getTotalRowsReturned() }}</span></span>\n </div>\n </div>\n\n <!-- Failure Banner -->\n <div \n *ngIf=\"getFailureMessage()\"\n class=\"cqa-flex cqa-px-2 cqa-py-1 cqa-bg-[#FEF2F2] cqa-rounded-[4px]\" style=\"border: 1px solid #FEE2E2;\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#B91C1C]\">\n {{ getFailureMessage() }}\n </span>\n </div>\n </div>\n\n <!-- Database Environment Section -->\n <div *ngIf=\"dbConfig\" class=\"cqa-mb-1.5\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Database environment</div>\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-px-4 cqa-py-2 cqa-relative cqa-flex cqa-flex-wrap cqa-gap-3\">\n <!-- Environment -->\n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Environment</div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.name }}</span>\n <span (click)=\"copyEnvironment()\" class=\"cqa-cursor-pointer\">\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 </span>\n </div>\n </div>\n \n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Type</div>\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.dbType }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-mb-1.5\" *ngIf=\"cachedQueryResults?.length > 0\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Query Execution</div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-4 cqa-py-2 cqa-bg-white cqa-rounded-[10px]\" style=\"border: 1px solid #E2E8F0;\">\n <cqa-db-query-execution-item\n *ngFor=\"let queryItem of cachedQueryResults; let i = index; trackBy: trackByQueryKey\"\n [queryNumber]=\"i + 1\"\n [queryKey]=\"queryItem.key\"\n [queryResult]=\"queryItem.result\"\n [status]=\"getQueryStatus(queryItem.key)\"\n [variableName]=\"queryItem.key\">\n </cqa-db-query-execution-item>\n </div>\n </div>\n\n <!-- Verification Section -->\n <div *ngIf=\"dbTestResult?.assertionResults && dbTestResult?.assertionResults?.length > 0\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Verification</div> \n <!-- Verification Table -->\n <div class=\"cqa-bg-white cqa-rounded-[10px] cqa-px-4 cqa-py-2 cqa-overflow-hidden\" style=\"border: 1px solid #E2E8F0;\">\n <!-- Segment Control for Filters -->\n <cqa-segment-control\n [segments]=\"filterSegments\"\n [value]=\"verificationFilter\"\n (valueChange)=\"onFilterChange($event)\">\n </cqa-segment-control>\n <cqa-table-template\n [columns]=\"verificationTableColumns\"\n [data]=\"getTableData()\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyTable\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept : false\"\n [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept : false\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-[#374151]\">{{ formatDuration(timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-[#374151]\">{{ formatDuration(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 [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [isLive]=\"isLive\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n </div>\n</div>\n\n", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading"] }, { type: i2.DbQueryExecutionItemComponent, selector: "cqa-db-query-execution-item", inputs: ["queryNumber", "queryKey", "queryResult", "status", "variableName"] }, { type: i3.SegmentControlComponent, selector: "cqa-segment-control", inputs: ["segments", "value", "disabled"], outputs: ["valueChange"] }, { type: i4.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "filterConfig", "showFilterPanel", "showFilterButton", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "pageSizeOptions", "serverSidePagination", "totalElements", "isTableLoading", "isTableDataLoading"], outputs: ["onSearchChange", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "pageChange", "onReload", "onAutoRefreshClick"] }, { type: i5.SelfHealAnalysisComponent, selector: "cqa-self-heal-analysis", inputs: ["originalLocator", "healedLocator", "confidence", "healMethod", "isLoadingAccept", "isLoadingModifyAccept"], outputs: ["action"] }, { type: i6.ViewMoreFailedStepButtonComponent, selector: "cqa-view-more-failed-step-button", inputs: ["timingBreakdown", "subSteps", "failureDetails", "isExpanded"], outputs: ["viewMoreClick"] }, { type: i7.UpdatedFailedStepComponent, selector: "cqa-updated-failed-step", inputs: ["timingBreakdown", "testStepResultId", "expanded", "subSteps", "failureDetails", "reasoning", "confidence", "isUploadingBaseline", "isMakingCurrentBaseline", "isLive"], outputs: ["makeCurrentBaseline", "uploadBaseline", "analyze", "viewFullLogs"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
343
344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DbVerificationStepComponent, decorators: [{
344
345
  type: Component,
345
- args: [{ selector: 'cqa-db-verification-step', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-font-inter\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\"\n style=\"border-bottom: 1px solid #F3F4F6\">\n \n <!-- Status Icon -->\n <!-- Success -->\n <div *ngIf=\"getStatus().toLowerCase() === 'success'\">\n <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>\n </div>\n <!-- Failure -->\n <div *ngIf=\"getStatus().toLowerCase() === 'failure' || getStatus().toLowerCase() === 'failed'\">\n <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>\n </div>\n <!-- Pending -->\n <div *ngIf=\"getStatus().toLowerCase() === 'pending'\">\n <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>\n </div>\n <!-- Running - Show spinner -->\n <div *ngIf=\"getStatus().toLowerCase() === 'running'\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex cqa-items-center\" *ngIf=\"getStatus().toLowerCase() === 'skipped'\">\n <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n\n <div><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\n <rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#F0F0F1\"/>\n <path d=\"M13.5 3.5H6.5C5.95 3.5 5.5 3.95 5.5 4.5V11.5C5.5 12.05 5.95 12.5 6.5 12.5H13.5C14.05 12.5 14.5 12.05 14.5 11.5V4.5C14.5 3.95 14.05 3.5 13.5 3.5ZM13.5 4.5V6H6.5V4.5H13.5ZM13.5 7V9H6.5V7H13.5ZM6.5 11.5V10H13.5V11.5H6.5Z\" fill=\"#212122\"/>\n </svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px] cqa-font-inter\">\n {{ stepNumber }}. <span [innerHTML]=\"title\"></span> \n \n <span class=\"cqa-ml-1 cqa-px-1.5 cqa-py-0.5 cqa-rounded-full cqa-font-medium cqa-text-[#212122] cqa-bg-[#F0F0F1] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n Database\n </span>\n\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(duration) }}\n </span>\n <svg *ngIf=\"!isLive\" [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 && !isLive\" class=\"cqa-p-2 !cqa-pl-9 !cqa-pr-6 cqa-bg-white\">\n <!-- Summary Bar -->\n <div class=\"cqa-mb-1.5 cqa-p-3 cqa-bg-[#FCFCFC] cqa-rounded-[6px] cqa-flex cqa-flex-col cqa-gap-2\" style=\"border: 1px solid #E5E7EB;\" *ngIf=\"getStatus() || duration || cachedQueryResults?.length > 0 || dbTestResult?.assertionResults?.length > 0 || getTotalRowsReturned() > 0 || getFailureMessage()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <!-- Status Badge -->\n <cqa-badge\n *ngIf=\"getStatus()?.toLowerCase() === 'failure' || getStatus()?.toLowerCase() === 'failed'\"\n label=\"FAIL\"\n backgroundColor=\"#DC2626\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge\n *ngIf=\"getStatus()?.toLowerCase() === 'success'\"\n label=\"PASS\"\n backgroundColor=\"#22C55E\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n\n <div class=\"cqa-h-[19px] cqa-w-[1px] cqa-bg-[#E5E7EB]\"></div>\n \n <!-- Summary Stats -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-text-[11px] cqa-leading-[16px] cqa-text-[#6B7280]\">\n <span *ngIf=\"duration\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Total Time: <span class=\"cqa-text-[#4B5563]\">{{ formatDuration(duration) }}</span></span>\n <span *ngIf=\"cachedQueryResults?.length > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Queries: <span class=\"cqa-text-[#4B5563]\">{{ cachedQueryResults?.length || 0 }}</span></span>\n <span *ngIf=\"dbTestResult?.assertionResults?.length > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Assertions: <span class=\"cqa-text-[#4B5563]\">{{ dbTestResult?.assertionResults?.length || 0 }}</span></span>\n <span *ngIf=\"getTotalRowsReturned() > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Rows Returned: <span class=\"cqa-text-[#4B5563]\">{{ getTotalRowsReturned() }}</span></span>\n </div>\n </div>\n\n <!-- Failure Banner -->\n <div \n *ngIf=\"getFailureMessage()\"\n class=\"cqa-flex cqa-px-2 cqa-py-1 cqa-bg-[#FEF2F2] cqa-rounded-[4px]\" style=\"border: 1px solid #FEE2E2;\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#B91C1C]\">\n {{ getFailureMessage() }}\n </span>\n </div>\n </div>\n\n <!-- Database Environment Section -->\n <div *ngIf=\"dbConfig\" class=\"cqa-mb-1.5\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Database environment</div>\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-px-4 cqa-py-2 cqa-relative cqa-flex cqa-flex-wrap cqa-gap-3\">\n <!-- Environment -->\n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Environment</div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.name }}</span>\n <span (click)=\"copyEnvironment()\" class=\"cqa-cursor-pointer\">\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 </span>\n </div>\n </div>\n \n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Type</div>\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.dbType }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-mb-1.5\" *ngIf=\"cachedQueryResults?.length > 0\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Query Execution</div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-4 cqa-py-2 cqa-bg-white cqa-rounded-[10px]\" style=\"border: 1px solid #E2E8F0;\">\n <cqa-db-query-execution-item\n *ngFor=\"let queryItem of cachedQueryResults; let i = index; trackBy: trackByQueryKey\"\n [queryNumber]=\"i + 1\"\n [queryKey]=\"queryItem.key\"\n [queryResult]=\"queryItem.result\"\n [status]=\"getQueryStatus(queryItem.key)\"\n [variableName]=\"queryItem.key\">\n </cqa-db-query-execution-item>\n </div>\n </div>\n\n <!-- Verification Section -->\n <div *ngIf=\"dbTestResult?.assertionResults && dbTestResult?.assertionResults?.length > 0\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Verification</div> \n <!-- Verification Table -->\n <div class=\"cqa-bg-white cqa-rounded-[10px] cqa-px-4 cqa-py-2 cqa-overflow-hidden\" style=\"border: 1px solid #E2E8F0;\">\n <!-- Segment Control for Filters -->\n <cqa-segment-control\n [segments]=\"filterSegments\"\n [value]=\"verificationFilter\"\n (valueChange)=\"onFilterChange($event)\">\n </cqa-segment-control>\n <cqa-table-template\n [columns]=\"verificationTableColumns\"\n [data]=\"getTableData()\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyTable\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept : false\"\n [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept : false\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-[#374151]\">{{ formatDuration(timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-[#374151]\">{{ formatDuration(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 [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [isLive]=\"isLive\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n </div>\n</div>\n\n", styles: [] }]
346
+ args: [{ selector: 'cqa-db-verification-step', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-font-inter\" (click)=\"$event.stopPropagation()\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggleHeader($event)\"\n style=\"border-bottom: 1px solid #F3F4F6\">\n \n <!-- Status Icon -->\n <!-- Success -->\n <div *ngIf=\"getStatus().toLowerCase() === 'success'\">\n <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>\n </div>\n <!-- Failure -->\n <div *ngIf=\"getStatus().toLowerCase() === 'failure' || getStatus().toLowerCase() === 'failed'\">\n <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>\n </div>\n <!-- Pending -->\n <div *ngIf=\"getStatus().toLowerCase() === 'pending'\">\n <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>\n </div>\n <!-- Running - Show spinner -->\n <div *ngIf=\"getStatus().toLowerCase() === 'running'\">\n <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n\n <div class=\"cqa-flex cqa-items-center\" *ngIf=\"getStatus().toLowerCase() === 'skipped'\">\n <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n\n <div><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\n <rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#F0F0F1\"/>\n <path d=\"M13.5 3.5H6.5C5.95 3.5 5.5 3.95 5.5 4.5V11.5C5.5 12.05 5.95 12.5 6.5 12.5H13.5C14.05 12.5 14.5 12.05 14.5 11.5V4.5C14.5 3.95 14.05 3.5 13.5 3.5ZM13.5 4.5V6H6.5V4.5H13.5ZM13.5 7V9H6.5V7H13.5ZM6.5 11.5V10H13.5V11.5H6.5Z\" fill=\"#212122\"/>\n </svg></div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-bold cqa-flex-1 cqa-text-[#334155] cqa-text-[11px] cqa-leading-[13px] cqa-font-inter cqa-flex cqa-items-center cqa-gap-1\">\n <span>{{ stepNumber }}. <span [innerHTML]=\"title\"></span></span>\n <span class=\"cqa-ml-1 cqa-px-1.5 cqa-py-0.5 cqa-rounded-full cqa-font-medium cqa-text-[#212122] cqa-bg-[#F0F0F1] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n Database\n </span>\n <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n Deleted\n </span>\n\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n {{ formatDuration(duration) }}\n </span>\n <svg *ngIf=\"!isLive\" [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 && !isLive\" class=\"cqa-p-2 !cqa-pl-9 !cqa-pr-6 cqa-bg-white\">\n <!-- Summary Bar -->\n <div class=\"cqa-mb-1.5 cqa-p-3 cqa-bg-[#FCFCFC] cqa-rounded-[6px] cqa-flex cqa-flex-col cqa-gap-2\" style=\"border: 1px solid #E5E7EB;\" *ngIf=\"getStatus() || duration || cachedQueryResults?.length > 0 || dbTestResult?.assertionResults?.length > 0 || getTotalRowsReturned() > 0 || getFailureMessage()\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <!-- Status Badge -->\n <cqa-badge\n *ngIf=\"getStatus()?.toLowerCase() === 'failure' || getStatus()?.toLowerCase() === 'failed'\"\n label=\"FAIL\"\n backgroundColor=\"#DC2626\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge\n *ngIf=\"getStatus()?.toLowerCase() === 'success'\"\n label=\"PASS\"\n backgroundColor=\"#22C55E\"\n textColor=\"#FFFFFF\"\n size=\"small\">\n </cqa-badge>\n\n <div class=\"cqa-h-[19px] cqa-w-[1px] cqa-bg-[#E5E7EB]\"></div>\n \n <!-- Summary Stats -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-text-[11px] cqa-leading-[16px] cqa-text-[#6B7280]\">\n <span *ngIf=\"duration\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Total Time: <span class=\"cqa-text-[#4B5563]\">{{ formatDuration(duration) }}</span></span>\n <span *ngIf=\"cachedQueryResults?.length > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Queries: <span class=\"cqa-text-[#4B5563]\">{{ cachedQueryResults?.length || 0 }}</span></span>\n <span *ngIf=\"dbTestResult?.assertionResults?.length > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Assertions: <span class=\"cqa-text-[#4B5563]\">{{ dbTestResult?.assertionResults?.length || 0 }}</span></span>\n <span *ngIf=\"getTotalRowsReturned() > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Rows Returned: <span class=\"cqa-text-[#4B5563]\">{{ getTotalRowsReturned() }}</span></span>\n </div>\n </div>\n\n <!-- Failure Banner -->\n <div \n *ngIf=\"getFailureMessage()\"\n class=\"cqa-flex cqa-px-2 cqa-py-1 cqa-bg-[#FEF2F2] cqa-rounded-[4px]\" style=\"border: 1px solid #FEE2E2;\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#B91C1C]\">\n {{ getFailureMessage() }}\n </span>\n </div>\n </div>\n\n <!-- Database Environment Section -->\n <div *ngIf=\"dbConfig\" class=\"cqa-mb-1.5\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Database environment</div>\n <div class=\"cqa-bg-white cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-px-4 cqa-py-2 cqa-relative cqa-flex cqa-flex-wrap cqa-gap-3\">\n <!-- Environment -->\n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Environment</div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.name }}</span>\n <span (click)=\"copyEnvironment()\" class=\"cqa-cursor-pointer\">\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 </span>\n </div>\n </div>\n \n <div class=\"\">\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Type</div>\n <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.dbType }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"cqa-mb-1.5\" *ngIf=\"cachedQueryResults?.length > 0\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Query Execution</div>\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-4 cqa-py-2 cqa-bg-white cqa-rounded-[10px]\" style=\"border: 1px solid #E2E8F0;\">\n <cqa-db-query-execution-item\n *ngFor=\"let queryItem of cachedQueryResults; let i = index; trackBy: trackByQueryKey\"\n [queryNumber]=\"i + 1\"\n [queryKey]=\"queryItem.key\"\n [queryResult]=\"queryItem.result\"\n [status]=\"getQueryStatus(queryItem.key)\"\n [variableName]=\"queryItem.key\">\n </cqa-db-query-execution-item>\n </div>\n </div>\n\n <!-- Verification Section -->\n <div *ngIf=\"dbTestResult?.assertionResults && dbTestResult?.assertionResults?.length > 0\">\n <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Verification</div> \n <!-- Verification Table -->\n <div class=\"cqa-bg-white cqa-rounded-[10px] cqa-px-4 cqa-py-2 cqa-overflow-hidden\" style=\"border: 1px solid #E2E8F0;\">\n <!-- Segment Control for Filters -->\n <cqa-segment-control\n [segments]=\"filterSegments\"\n [value]=\"verificationFilter\"\n (valueChange)=\"onFilterChange($event)\">\n </cqa-segment-control>\n <cqa-table-template\n [columns]=\"verificationTableColumns\"\n [data]=\"getTableData()\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyTable\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n </div>\n </div>\n\n <!-- Self Heal Analysis -->\n <cqa-self-heal-analysis \n *ngIf=\"selfHealAnalysis\" \n [originalLocator]=\"selfHealAnalysis.originalLocator\"\n [healedLocator]=\"selfHealAnalysis.healedLocator\"\n [confidence]=\"selfHealAnalysis.confidence\"\n [healMethod]=\"selfHealAnalysis.healMethod\"\n [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept : false\"\n [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept : false\"\n (action)=\"onSelfHealAction($event)\">\n </cqa-self-heal-analysis>\n\n <!-- Timing Breakdown -->\n <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n <span>Timing breakdown</span>\n </div>\n <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n <div>\n App <span class=\"cqa-text-[#374151]\">{{ formatDuration(timingBreakdown.app) }}</span>\n </div>\n <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n <div>\n Tool <span class=\"cqa-text-[#374151]\">{{ formatDuration(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 [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n [isLive]=\"isLive\"\n (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n (uploadBaseline)=\"onUploadBaseline($event)\"\n (analyze)=\"onAnalyze()\"\n (viewFullLogs)=\"onViewFullLogs()\">\n </cqa-updated-failed-step>\n </div>\n </div>\n</div>\n\n", styles: [] }]
346
347
  }], propDecorators: { id: [{
347
348
  type: Input
348
349
  }], testStepResultId: [{
@@ -369,6 +370,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
369
370
  type: Input
370
371
  }], confidence: [{
371
372
  type: Input
373
+ }], stepDeleted: [{
374
+ type: Input
372
375
  }], isUploadingBaseline: [{
373
376
  type: Input
374
377
  }], isMakingCurrentBaseline: [{
@@ -394,4 +397,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
394
397
  }], selfHealAction: [{
395
398
  type: Output
396
399
  }] } });
397
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItdmVyaWZpY2F0aW9uLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2RiLXZlcmlmaWNhdGlvbi1zdGVwL2RiLXZlcmlmaWNhdGlvbi1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9kYi12ZXJpZmljYXRpb24tc3RlcC9kYi12ZXJpZmljYXRpb24tc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUkzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7Ozs7OztBQVNoRixNQUFNLE9BQU8sMkJBQTRCLFNBQVEsaUJBQWlCO0lBTmxFOztRQXVCVyx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsNEJBQXVCLEdBQUcsRUFBRSxDQUFDO1FBSTdCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHakMsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBRTdCLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO1FBQ25FLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDekQsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbkMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQW9ELENBQUM7UUFJaEcsdUJBQWtCLEdBQWdDLEtBQUssQ0FBQztRQUV4RCxtQkFBYyxHQUFHO1lBQ2YsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUss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SyxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7d0hBbFlVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLHc2QkNkeEMsdzJjQWtPQTsyRkRwTmEsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNFLDBCQUEwQixRQUc5QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7OEJBR3JCLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRywrQkFBK0I7c0JBQXZDLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUksbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS1zdGVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYlZlcmlmaWNhdGlvblN0ZXBDb25maWcsIERiVGVzdFJlc3VsdCwgRGJRdWVyeVJlc3VsdCwgRGJBc3NlcnRpb25SZXN1bHQsIFN0ZXBTdGF0dXMsIFRpbWluZ0JyZWFrZG93biwgRmFpbHVyZURldGFpbHMsIFN1YlN0ZXAsIFNlbGZIZWFsQW5hbHlzaXNEYXRhLCBTZWxmSGVhbEFjdGlvbiwgRXhlY3V0aW9uU3RlcENvbmZpZyB9IGZyb20gJy4uL2V4ZWN1dGlvbi1zdGVwLm1vZGVscyc7XG5pbXBvcnQgeyBEeW5hbWljVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi90YWJsZS9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb25maWcgfSBmcm9tICcuLi8uLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVNUFRZX1NUQVRFX0lNQUdFUyB9IGZyb20gJy4uLy4uL2Fzc2V0cy9pbWFnZXMvaW1hZ2UtYXNzZXRzLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQsIHVwbG9hZEJhc2VsaW5lRXZlbnQgfSBmcm9tICcuLi92aXN1YWwtY29tcGFyaXNvbi92aXN1YWwtY29tcGFyaXNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtZGItdmVyaWZpY2F0aW9uLXN0ZXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGItdmVyaWZpY2F0aW9uLXN0ZXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgRGJWZXJpZmljYXRpb25TdGVwQ29tcG9uZW50IGV4dGVuZHMgQmFzZVN0ZXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGlkITogc3RyaW5nO1xuICBASW5wdXQoKSB0ZXN0U3RlcFJlc3VsdElkITogc3RyaW5nO1xuICBASW5wdXQoKSBzdGVwTnVtYmVyITogc3RyaW5nO1xuICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcbiAgQElucHV0KCkgc3RhdHVzITogU3RlcFN0YXR1cztcbiAgQElucHV0KCkgZHVyYXRpb24hOiBudW1iZXI7XG4gIEBJbnB1dCgpIHRpbWluZ0JyZWFrZG93bj86IFRpbWluZ0JyZWFrZG93bjtcbiAgQElucHV0KCkgZXhwYW5kZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBkYlRlc3RSZXN1bHQhOiBEYlRlc3RSZXN1bHQ7XG4gIEBJbnB1dCgpIGRiQ29uZmlnPzoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkYlR5cGU6IHN0cmluZztcbiAgfTtcbiAgQElucHV0KCkgZmFpbHVyZURldGFpbHM/OiBGYWlsdXJlRGV0YWlscztcbiAgQElucHV0KCkgcmVhc29uaW5nPzogc3RyaW5nW107XG4gIEBJbnB1dCgpIGNvbmZpZGVuY2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzVXBsb2FkaW5nQmFzZWxpbmUgPSB7fTtcbiAgQElucHV0KCkgaXNNYWtpbmdDdXJyZW50QmFzZWxpbmUgPSB7fTtcbiAgQElucHV0KCkgc2VsZkhlYWxBbmFseXNpcz86IFNlbGZIZWFsQW5hbHlzaXNEYXRhO1xuICBASW5wdXQoKSBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyPzogKCkgPT4geyBpc0xvYWRpbmdBY2NlcHQ6IGJvb2xlYW47IGlzTG9hZGluZ01vZGlmeUFjY2VwdDogYm9vbGVhbiB9O1xuICBASW5wdXQoKSBvblN0ZXBDbGlja0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZywgZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgQElucHV0KCkgaXNMaXZlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0ZXA/OiBFeGVjdXRpb25TdGVwQ29uZmlnO1xuXG4gIHNob3dGYWlsZWRTdGVwRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBtYWtlQ3VycmVudEJhc2VsaW5lID0gbmV3IEV2ZW50RW1pdHRlcjxtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSB1cGxvYWRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8dXBsb2FkQmFzZWxpbmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGFuYWx5emUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB2aWV3RnVsbExvZ3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxmSGVhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0eXBlOiBTZWxmSGVhbEFjdGlvbjsgaGVhbGVkTG9jYXRvcjogc3RyaW5nOyB9PigpO1xuXG4gIG92ZXJyaWRlIGNvbmZpZyE6IERiVmVyaWZpY2F0aW9uU3RlcENvbmZpZztcblxuICB2ZXJpZmljYXRpb25GaWx0ZXI6ICdhbGwnIHwgJ2ZhaWxlZCcgfCAncGFzc2VkJyA9ICdhbGwnO1xuXG4gIGZpbHRlclNlZ21lbnRzID0gW1xuICAgIHsgbGFiZWw6ICdBbGwnLCB2YWx1ZTogJ2FsbCcgfSxcbiAgICB7IGxhYmVsOiAnRmFpbGVkIG9ubHknLCB2YWx1ZTogJ2ZhaWxlZCcgfSxcbiAgICB7IGxhYmVsOiAnUGFzc2VkIG9ubHknLCB2YWx1ZTogJ3Bhc3NlZCcgfSxcbiAgXTtcblxuICB2ZXJpZmljYXRpb25UYWJsZUNvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIFxuICBlbXB0eVN0YXRlQ29uZmlnOiBFbXB0eVN0YXRlQ29uZmlnID0ge1xuICAgIHRpdGxlOiAnTm8gQXNzZXJ0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdObyB2ZXJpZmljYXRpb24gYXNzZXJ0aW9ucyBmb3VuZCBmb3IgdGhpcyBkYXRhYmFzZSBxdWVyeS4nLFxuICAgIGltYWdlVXJsOiBFTVBUWV9TVEFURV9JTUFHRVMuREFTSEJPQVJELFxuICAgIGFjdGlvbnM6IFtdLFxuICB9O1xuXG4gIHBhZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBcbiAgLy8gQ2FjaGVkIHF1ZXJ5IHJlc3VsdHMgdG8gYXZvaWQgcmVjcmVhdGluZyBjb21wb25lbnRzIG9uIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb25cbiAgY2FjaGVkUXVlcnlSZXN1bHRzOiBBcnJheTx7IGtleTogc3RyaW5nOyByZXN1bHQ6IERiUXVlcnlSZXN1bHQgfT4gPSBbXTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZygpO1xuICAgIHRoaXMuc2V0dXBUYWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUNhY2hlZFF1ZXJ5UmVzdWx0cygpO1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgaWYgKHRoaXMuZXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0dXMoKTogU3RlcFN0YXR1cyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5zdGF0dXMgfHwgdGhpcy5zdGF0dXM7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIGNvbmZpZyB3aGVuIGlucHV0cyBjaGFuZ2VcbiAgICBpZiAoY2hhbmdlc1snZGJUZXN0UmVzdWx0J10gfHwgY2hhbmdlc1snZGJDb25maWcnXSB8fCBjaGFuZ2VzWydleHBhbmRlZCddIHx8IGNoYW5nZXNbJ3N0YXR1cyddIHx8IGNoYW5nZXNbJ2R1cmF0aW9uJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKCk7XG4gICAgICBpZiAoY2hhbmdlc1snZGJUZXN0UmVzdWx0J10pIHtcbiAgICAgICAgdGhpcy5zZXR1cFRhYmxlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlZFF1ZXJ5UmVzdWx0cygpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBVcGRhdGUgZXhwYW5kZWQgc3RhdGUgaWYgY2hhbmdlZFxuICAgIGlmIChjaGFuZ2VzWydleHBhbmRlZCddICYmIHRoaXMuZXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgdGVzdFN0ZXBSZXN1bHRJZDogdGhpcy50ZXN0U3RlcFJlc3VsdElkLFxuICAgICAgc3RlcE51bWJlcjogdGhpcy5zdGVwTnVtYmVyLFxuICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgZHVyYXRpb246IHRoaXMuZHVyYXRpb24sXG4gICAgICB0eXBlOiAnZGItdmVyaWZpY2F0aW9uJyxcbiAgICAgIGRiVGVzdFJlc3VsdDogdGhpcy5kYlRlc3RSZXN1bHQsXG4gICAgICBkYkNvbmZpZzogdGhpcy5kYkNvbmZpZyxcbiAgICAgIHRpbWluZ0JyZWFrZG93bjogdGhpcy50aW1pbmdCcmVha2Rvd24sXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICB9IGFzIERiVmVyaWZpY2F0aW9uU3RlcENvbmZpZztcbiAgfVxuXG4gIHRvZ2dsZUhlYWRlcihldmVudD86IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTGl2ZSkgcmV0dXJuO1xuICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgaWYgKHRoaXMub25TdGVwQ2xpY2tIYW5kbGVyKSB7XG4gICAgICBjb25zdCBzdGVwVG9QYXNzID0gdGhpcy5zdGVwIHx8IHRoaXMuY29uZmlnO1xuICAgICAgaWYgKHN0ZXBUb1Bhc3MpIHtcbiAgICAgICAgdGhpcy5vblN0ZXBDbGlja0hhbmRsZXIoc3RlcFRvUGFzcywgZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgdGhpcy5zaG93RmFpbGVkU3RlcERldGFpbHMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNhY2hlZFF1ZXJ5UmVzdWx0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGJUZXN0UmVzdWx0Py5yZXN1bHRzKSB7XG4gICAgICB0aGlzLmNhY2hlZFF1ZXJ5UmVzdWx0cyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlZFF1ZXJ5UmVzdWx0cyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZGJUZXN0UmVzdWx0LnJlc3VsdHMpLm1hcCgoW2tleSwgcmVzdWx0XSkgPT4gKHsga2V5LCByZXN1bHQgfSkpO1xuICB9XG5cbiAgZ2V0UXVlcnlSZXN1bHRzKCk6IEFycmF5PHsga2V5OiBzdHJpbmc7IHJlc3VsdDogRGJRdWVyeVJlc3VsdCB9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkUXVlcnlSZXN1bHRzO1xuICB9XG5cbiAgdHJhY2tCeVF1ZXJ5S2V5KGluZGV4OiBudW1iZXIsIGl0ZW06IHsga2V5OiBzdHJpbmc7IHJlc3VsdDogRGJRdWVyeVJlc3VsdCB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5rZXk7XG4gIH1cblxuICBnZXRUb3RhbFJvd3NSZXR1cm5lZCgpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5kYlRlc3RSZXN1bHQ/LnJlc3VsdHMpIHJldHVybiAwO1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZGJUZXN0UmVzdWx0LnJlc3VsdHMpLnJlZHVjZSgodG90YWwsIHJlc3VsdCkgPT4ge1xuICAgICAgcmV0dXJuIHRvdGFsICsgKEFycmF5LmlzQXJyYXkocmVzdWx0LmRhdGEpID8gcmVzdWx0LmRhdGEubGVuZ3RoIDogMCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBnZXRRdWVyeVN0YXR1cyhxdWVyeUtleTogc3RyaW5nKTogJ3Bhc3NlZCcgfCAnZmFpbGVkJyB7XG4gICAgaWYgKCF0aGlzLmRiVGVzdFJlc3VsdD8uYXNzZXJ0aW9uUmVzdWx0cykgcmV0dXJuICdwYXNzZWQnO1xuICAgIGNvbnN0IHF1ZXJ5QXNzZXJ0aW9ucyA9IHRoaXMuZGJUZXN0UmVzdWx0LmFzc2VydGlvblJlc3VsdHMuZmlsdGVyKFxuICAgICAgYXNzZXJ0aW9uID0+IGFzc2VydGlvbi52YXJpYWJsZU5hbWUgPT09IHF1ZXJ5S2V5XG4gICAgKTtcbiAgICBpZiAocXVlcnlBc3NlcnRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuICdwYXNzZWQnO1xuICAgIHJldHVybiBxdWVyeUFzc2VydGlvbnMuZXZlcnkoYSA9PiBhLnBhc3NlZCkgPyAncGFzc2VkJyA6ICdmYWlsZWQnO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRBc3NlcnRpb25zKCk6IERiQXNzZXJ0aW9uUmVzdWx0W10ge1xuICAgIGlmICghdGhpcy5kYlRlc3RSZXN1bHQ/LmFzc2VydGlvblJlc3VsdHMpIHJldHVybiBbXTtcbiAgICBzd2l0Y2ggKHRoaXMudmVyaWZpY2F0aW9uRmlsdGVyKSB7XG4gICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5kYlRlc3RSZXN1bHQuYXNzZXJ0aW9uUmVzdWx0cy5maWx0ZXIoYSA9PiAhYS5wYXNzZWQpO1xuICAgICAgY2FzZSAncGFzc2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGJUZXN0UmVzdWx0LmFzc2VydGlvblJlc3VsdHMuZmlsdGVyKGEgPT4gYS5wYXNzZWQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGJUZXN0UmVzdWx0LmFzc2VydGlvblJlc3VsdHM7XG4gICAgfVxuICB9XG5cbiAgc2V0VmVyaWZpY2F0aW9uRmlsdGVyKGZpbHRlcjogJ2FsbCcgfCAnZmFpbGVkJyB8ICdwYXNzZWQnKSB7XG4gICAgdGhpcy52ZXJpZmljYXRpb25GaWx0ZXIgPSBmaWx0ZXI7XG4gIH1cblxuICBvbkZpbHRlckNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52ZXJpZmljYXRpb25GaWx0ZXIgPSB2YWx1ZSBhcyAnYWxsJyB8ICdmYWlsZWQnIHwgJ3Bhc3NlZCc7XG4gIH1cblxuICBwcml2YXRlIHNldHVwVGFibGVDb2x1bW5zKCk6IHZvaWQge1xuICAgIHRoaXMudmVyaWZpY2F0aW9uVGFibGVDb2x1bW5zID0gW1xuICAgICAge1xuICAgICAgICBmaWVsZElkOiAnanNvblBhdGgnLFxuICAgICAgICBmaWVsZE5hbWU6ICdKU09OIHBhdGgnLFxuICAgICAgICBmaWVsZFZhbHVlOiAnanNvblBhdGgnLFxuICAgICAgICBpc1Nob3c6IHRydWUsXG4gICAgICAgIHdlaWdodDogMixcbiAgICAgICAgcmVuZGVyOiAocm93OiBEYkFzc2VydGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjNEI1NTYzXSBjcWEtZm9udC1tb25vXCI+XG4gICAgICAgICAgICAgICR7dGhpcy5lc2NhcGVIdG1sKHJvdy5qc29uUGF0aCl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWVsZElkOiAndmVyaWZpY2F0aW9uVHlwZScsXG4gICAgICAgIGZpZWxkTmFtZTogJ1ZlcmlmaWNhdGlvbiB0eXBlJyxcbiAgICAgICAgZmllbGRWYWx1ZTogJ3ZlcmlmaWNhdGlvblR5cGUnLFxuICAgICAgICBpc1Nob3c6IHRydWUsXG4gICAgICAgIHdlaWdodDogMS41LFxuICAgICAgICByZW5kZXI6IChyb3c6IERiQXNzZXJ0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM0QjU1NjNdXCI+XG4gICAgICAgICAgICAgICR7dGhpcy5lc2NhcGVIdG1sKHRoaXMuZm9ybWF0VmVyaWZpY2F0aW9uVHlwZShyb3cudmVyaWZpY2F0aW9uVHlwZSkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgYDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmllbGRJZDogJ2FjdHVhbFZhbHVlJyxcbiAgICAgICAgZmllbGROYW1lOiAnQWN0dWFsIHZhbHVlJyxcbiAgICAgICAgZmllbGRWYWx1ZTogJ2FjdHVhbFZhbHVlJyxcbiAgICAgICAgaXNTaG93OiB0cnVlLFxuICAgICAgICB3ZWlnaHQ6IDEuNSxcbiAgICAgICAgcmVuZGVyOiAocm93OiBEYkFzc2VydGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHJvdy5hY3R1YWxWYWx1ZSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShyb3cuYWN0dWFsVmFsdWUpIDogU3RyaW5nKHJvdy5hY3R1YWxWYWx1ZSk7XG4gICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyM0QjU1NjNdXCI+XG4gICAgICAgICAgICAgICR7dGhpcy5lc2NhcGVIdG1sKHZhbHVlKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIGA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpZWxkSWQ6ICdleHBlY3RlZFZhbHVlJyxcbiAgICAgICAgZmllbGROYW1lOiAnRXhwZWN0ZWQgdmFsdWUnLFxuICAgICAgICBmaWVsZFZhbHVlOiAnZXhwZWN0ZWRWYWx1ZScsXG4gICAgICAgIGlzU2hvdzogdHJ1ZSxcbiAgICAgICAgd2VpZ2h0OiAxLjUsXG4gICAgICAgIHJlbmRlcjogKHJvdzogRGJBc3NlcnRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiByb3cuZXhwZWN0ZWRWYWx1ZSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShyb3cuZXhwZWN0ZWRWYWx1ZSkgOiBTdHJpbmcocm93LmV4cGVjdGVkVmFsdWUpO1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjNEI1NTYzXVwiPlxuICAgICAgICAgICAgICAke3RoaXMuZXNjYXBlSHRtbCh2YWx1ZSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWVsZElkOiAncmVzdWx0JyxcbiAgICAgICAgZmllbGROYW1lOiAnUmVzdWx0JyxcbiAgICAgICAgZmllbGRWYWx1ZTogJ3Bhc3NlZCcsXG4gICAgICAgIGlzU2hvdzogdHJ1ZSxcbiAgICAgICAgd2VpZ2h0OiAxLFxuICAgICAgICByZW5kZXI6IChyb3c6IERiQXNzZXJ0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKHJvdy5wYXNzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWlubGluZS1ibG9jayBjcWEtdGV4dC1jZW50ZXIgY3FhLXctMTEgY3FhLXB4LTIgY3FhLXB5LTEgY3FhLXJvdW5kZWQtWzVweF0gY3FhLXRleHQtWzEycHhdIGNxYS1iZy1bIzJFN0QzMl0gY3FhLXRleHQtWyNGRkZGRkZdXCI+XG4gICAgICAgICAgICAgICAgUGFzc1xuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICBgO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtYmxvY2sgY3FhLXRleHQtY2VudGVyIGNxYS13LTExIGNxYS1weC0yIGNxYS1weS0xIGNxYS1yb3VuZGVkLVs1cHhdIGNxYS10ZXh0LVsxMnB4XSBjcWEtYmctWyNEQzI2MjZdIGNxYS10ZXh0LVsjRkZGRkZGXVwiPlxuICAgICAgICAgICAgICAgIEZhaWxcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZXNjYXBlSHRtbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG4gIH1cblxuICBnZXRUYWJsZURhdGEoKTogRGJBc3NlcnRpb25SZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRBc3NlcnRpb25zKCk7XG4gIH1cblxuICBnZXQgaXNFbXB0eVRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFRhYmxlRGF0YSgpLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShldmVudDogeyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9KTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50LnBhZ2VTaXplO1xuICB9XG5cbiAgY29weVF1ZXJ5KHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChxdWVyeSkudGhlbigoKSA9PiB7XG4gICAgfSk7XG4gIH1cblxuICBjb3B5UmVzcG9uc2UocXVlcnlSZXN1bHQ6IERiUXVlcnlSZXN1bHQpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IEpTT04uc3RyaW5naWZ5KHF1ZXJ5UmVzdWx0LmRhdGEsIG51bGwsIDIpO1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHJlc3BvbnNlKS50aGVuKCgpID0+IHtcbiAgICB9KTtcbiAgfVxuXG4gIGNvcHlFbnZpcm9ubWVudCgpIHtcbiAgICBpZiAodGhpcy5kYkNvbmZpZz8ubmFtZSkge1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5kYkNvbmZpZy5uYW1lKS50aGVuKCgpID0+IHtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldEZhaWx1cmVNZXNzYWdlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5kYlRlc3RSZXN1bHQgfHwgdGhpcy5kYlRlc3RSZXN1bHQ/LmFsbEFzc2VydGlvbnNQYXNzZWQpIHJldHVybiBudWxsO1xuICAgIFxuICAgIGNvbnN0IGZhaWxlZEFzc2VydGlvbiA9IHRoaXMuZGJUZXN0UmVzdWx0LmFzc2VydGlvblJlc3VsdHM/LmZpbmQoYSA9PiAhYS5wYXNzZWQpO1xuICAgIGlmIChmYWlsZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IHF1ZXJ5S2V5ID0gZmFpbGVkQXNzZXJ0aW9uLnZhcmlhYmxlTmFtZTtcbiAgICAgIGNvbnN0IHF1ZXJ5SW5kZXggPSB0aGlzLmdldFF1ZXJ5UmVzdWx0cygpLmZpbmRJbmRleChxID0+IHEua2V5ID09PSBxdWVyeUtleSkgKyAxO1xuICAgICAgcmV0dXJuIGBBc3NlcnRpb24gZmFpbGVkIGluIFF1ZXJ5ICR7cXVlcnlJbmRleH0uIEV4cGVjdGVkIHZhbHVlIFwiJHtmYWlsZWRBc3NlcnRpb24uZXhwZWN0ZWRWYWx1ZX1cIiBidXQgZ290IFwiJHtmYWlsZWRBc3NlcnRpb24uYWN0dWFsVmFsdWV9XCIuYDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3JtYXRWZXJpZmljYXRpb25UeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZU1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICdlcXVhbHMnOiAnRXF1YWxzJyxcbiAgICAgICdub3RfZXF1YWxzJzogJ05vdCBFcXVhbHMnLFxuICAgICAgJ2NvbnRhaW5zJzogJ0NvbnRhaW5zJyxcbiAgICAgICdub3RfY29udGFpbnMnOiAnTm90IENvbnRhaW5zJyxcbiAgICAgICdncmVhdGVyX3RoYW4nOiAnR3JlYXRlciBUaGFuJyxcbiAgICAgICdsZXNzX3RoYW4nOiAnTGVzcyBUaGFuJyxcbiAgICAgICdncmVhdGVyX3RoYW5fb3JfZXF1YWxzJzogJ0dyZWF0ZXIgVGhhbiBPciBFcXVhbHMnLFxuICAgICAgJ2xlc3NfdGhhbl9vcl9lcXVhbHMnOiAnTGVzcyBUaGFuIE9yIEVxdWFscycsXG4gICAgICAnZXhpc3RzJzogJ0V4aXN0cycsXG4gICAgICAnbm90X2V4aXN0cyc6ICdOb3QgRXhpc3RzJyxcbiAgICB9O1xuICAgIHJldHVybiB0eXBlTWFwW3R5cGVdIHx8IHR5cGU7XG4gIH1cblxuICBvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RmFpbGVkU3RlcERldGFpbHMgPSBleHBhbmRlZDtcbiAgfVxuXG4gIGdldFN1YlN0ZXBzRm9yRmFpbGVkU3RlcCgpOiBTdWJTdGVwW10ge1xuICAgIC8vIENvbnZlcnQgREIgdmVyaWZpY2F0aW9uIHF1ZXJ5IHJlc3VsdHMgdG8gU3ViU3RlcFtdIGZvciB0aGUgZmFpbGVkIHN0ZXAgY29tcG9uZW50XG4gICAgY29uc3Qgc3ViU3RlcHM6IFN1YlN0ZXBbXSA9IFtdO1xuICAgIFxuICAgIGlmICh0aGlzLmRiVGVzdFJlc3VsdD8ucmVzdWx0cykge1xuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5kYlRlc3RSZXN1bHQucmVzdWx0cykuZm9yRWFjaCgoW2tleSwgcmVzdWx0XSwgaW5kZXgpID0+IHtcbiAgICAgICAgc3ViU3RlcHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGBxdWVyeS0ke2luZGV4fWAsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBRdWVyeSAke2luZGV4ICsgMX06ICR7a2V5fWAsXG4gICAgICAgICAgc3RhdHVzOiB0aGlzLmdldFF1ZXJ5U3RhdHVzKGtleSkgPT09ICdwYXNzZWQnID8gJ3N1Y2Nlc3MnIDogJ2ZhaWxlZCcsXG4gICAgICAgICAgZHVyYXRpb246IHJlc3VsdC5kdXJhdGlvbiB8fCAwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCBhc3NlcnRpb24gcmVzdWx0cyBhcyBzdWItc3RlcHNcbiAgICBpZiAodGhpcy5kYlRlc3RSZXN1bHQ/LmFzc2VydGlvblJlc3VsdHMpIHtcbiAgICAgIHRoaXMuZGJUZXN0UmVzdWx0LmFzc2VydGlvblJlc3VsdHMuZm9yRWFjaCgoYXNzZXJ0aW9uLCBpbmRleCkgPT4ge1xuICAgICAgICBzdWJTdGVwcy5wdXNoKHtcbiAgICAgICAgICBpZDogYGFzc2VydGlvbi0ke2luZGV4fWAsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBBc3NlcnRpb246ICR7YXNzZXJ0aW9uLmpzb25QYXRofSAtICR7dGhpcy5mb3JtYXRWZXJpZmljYXRpb25UeXBlKGFzc2VydGlvbi52ZXJpZmljYXRpb25UeXBlKX1gLFxuICAgICAgICAgIHN0YXR1czogYXNzZXJ0aW9uLnBhc3NlZCA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnLFxuICAgICAgICAgIGR1cmF0aW9uOiAwLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJTdGVwcztcbiAgfVxuXG4gIGdldCBzaG93Vmlld01vcmVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFeHBhbmRlZCAmJiBCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHMpICYmXG4gICAgICAoXG4gICAgICAgIChCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LmV4cGVjdGVkIHx8IHRoaXMuZmFpbHVyZURldGFpbHM/LmFjdHVhbCkpIHx8XG4gICAgICAgIChCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LnNjcmVlbnNob3RzPy5jdXJyZW50IHx8IHRoaXMuZmFpbHVyZURldGFpbHM/LnNjcmVlbnNob3RzPy5iYXNlbGluZSB8fCB0aGlzLmZhaWx1cmVEZXRhaWxzPy5zY3JlZW5zaG90cz8uZGlmZmVyZW5jZSlcbiAgICAgICAgICB8fCBCb29sZWFuKHRoaXMuZmFpbHVyZURldGFpbHM/LmxvZ3M/Lmxlbmd0aCkpIHx8IFxuICAgICAgICAoQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzPy5haUZpeEFwcGxpZWQgJiYgKHRoaXMuZmFpbHVyZURldGFpbHM/LmFpRml4TWVzc2FnZSB8fCB0aGlzLmNvbmZpZGVuY2UgfHwgdGhpcy5yZWFzb25pbmc/Lmxlbmd0aCkpKVxuICAgICAgKVxuICB9XG5cbiAgb25NYWtlQ3VycmVudEJhc2VsaW5lKGV2ZW50OiBtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm1ha2VDdXJyZW50QmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvblVwbG9hZEJhc2VsaW5lKGV2ZW50OiB1cGxvYWRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy51cGxvYWRCYXNlbGluZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uQW5hbHl6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFuYWx5emUuZW1pdCgpO1xuICB9XG5cbiAgb25WaWV3RnVsbExvZ3MoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3RnVsbExvZ3MuZW1pdCgpO1xuICB9XG5cbiAgb25TZWxmSGVhbEFjdGlvbihldmVudDogeyB0eXBlOiBTZWxmSGVhbEFjdGlvbjsgaGVhbGVkTG9jYXRvcjogc3RyaW5nOyB9KTogdm9pZCB7XG4gICAgdGhpcy5zZWxmSGVhbEFjdGlvbi5lbWl0KGV2ZW50KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1mb250LWludGVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXAtMiBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgIChjbGljayk9XCJ0b2dnbGVIZWFkZXIoJGV2ZW50KVwiXG4gICAgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI0YzRjRGNlwiPlxuICAgIFxuICAgIDwhLS0gU3RhdHVzIEljb24gLS0+XG4gICAgPCEtLSBTdWNjZXNzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJnZXRTdGF0dXMoKS50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcydcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMTAuOTAwNSA0Ljk5OTk5QzExLjEyODkgNi4xMjA2NCAxMC45NjYyIDcuMjg1NzEgMTAuNDM5NSA4LjMwMDg5QzkuOTEyNzkgOS4zMTYwOCA5LjA1NCAxMC4xMiA4LjAwNjMxIDEwLjU3ODdDNi45NTg2MiAxMS4wMzczIDUuNzg1MzYgMTEuMTIyOSA0LjY4MjIgMTAuODIxMkMzLjU3OTA0IDEwLjUxOTUgMi42MTI2NSA5Ljg0ODY5IDEuOTQ0MTkgOC45MjA3MUMxLjI3NTczIDcuOTkyNzIgMC45NDU2MTEgNi44NjM2MSAxLjAwODg4IDUuNzIxNjlDMS4wNzIxNSA0LjU3OTc2IDEuNTI0OTkgMy40OTQwNCAyLjI5MTg4IDIuNjQ1NThDMy4wNTg3NiAxLjc5NzEyIDQuMDkzMzQgMS4yMzcyMSA1LjIyMzA4IDEuMDU5MjJDNi4zNTI4MiAwLjg4MTIzMyA3LjUwOTQ0IDEuMDk1OTIgOC41MDAwNSAxLjY2NzQ5XCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuNSA1LjVMNiA3TDExIDJcIiBzdHJva2U9XCIjMjJDNTVFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gRmFpbHVyZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0U3RhdHVzKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWx1cmUnIHx8IGdldFN0YXR1cygpLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsZWQnXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTcuNSA0LjVMNC41IDcuNVwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNC41TDcuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gUGVuZGluZyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0U3RhdHVzKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3BlbmRpbmcnXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBSdW5uaW5nIC0gU2hvdyBzcGlubmVyIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJnZXRTdGF0dXMoKS50b0xvd2VyQ2FzZSgpID09PSAncnVubmluZydcIj5cbiAgICAgIDxzdmcgY2xhc3M9XCJjcWEtYW5pbWF0ZS1zcGluIGNxYS10ZXh0LVsjM0I4MkY2XVwiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjZcIiBjeT1cIjZcIiByPVwiNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgb3BhY2l0eT1cIjAuMjVcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJNNiAxQTUgNSAwIDAgMSAxMSA2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZmlsbD1cIm5vbmVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiICpuZ0lmPVwiZ2V0U3RhdHVzKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3NraXBwZWQnXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY3FhLXRleHQtWyM5Q0EzQUZdIGNxYS10ZXh0LVsxMnB4XVwiPlxuICAgICAgICBza2lwX25leHRcbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXY+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiByeD1cIjRcIiBmaWxsPVwiI0YwRjBGMVwiLz5cbiAgICAgIDxwYXRoIGQ9XCJNMTMuNSAzLjVINi41QzUuOTUgMy41IDUuNSAzLjk1IDUuNSA0LjVWMTEuNUM1LjUgMTIuMDUgNS45NSAxMi41IDYuNSAxMi41SDEzLjVDMTQuMDUgMTIuNSAxNC41IDEyLjA1IDE0LjUgMTEuNVY0LjVDMTQuNSAzLjk1IDE0LjA1IDMuNSAxMy41IDMuNVpNMTMuNSA0LjVWNkg2LjVWNC41SDEzLjVaTTEzLjUgN1Y5SDYuNVY3SDEzLjVaTTYuNSAxMS41VjEwSDEzLjVWMTEuNUg2LjVaXCIgZmlsbD1cIiMyMTIxMjJcIi8+XG4gICAgICA8L3N2Zz48L2Rpdj5cblxuICAgIDwhLS0gU3RlcCBOdW1iZXIgYW5kIFRpdGxlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZm9udC1ib2xkIGNxYS1mbGV4LTEgY3FhLXRleHQtWyMzMzQxNTVdIGNxYS10ZXh0LVsxMXB4XSBjcWEtbGVhZGluZy1bMTNweF0gY3FhLWZvbnQtaW50ZXJcIj5cbiAgICAgIHt7IHN0ZXBOdW1iZXIgfX0uIDxzcGFuIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L3NwYW4+ICAgIFxuICAgICAgXG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1tbC0xIGNxYS1weC0xLjUgY3FhLXB5LTAuNSBjcWEtcm91bmRlZC1mdWxsIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzIxMjEyMl0gY3FhLWJnLVsjRjBGMEYxXSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1taW4tdy1tYXhcIj5cbiAgICAgICAgRGF0YWJhc2VcbiAgICAgIDwvc3Bhbj5cblxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMSBjcWEtZm9udC1pbnRlclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICAgICAge3sgZm9ybWF0RHVyYXRpb24oZHVyYXRpb24pIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3ZnICpuZ0lmPVwiIWlzTGl2ZVwiIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0zLjUgNUw3IDguNUwxMC41IDVcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLXdpZHRoPVwiMC44MzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRXhwYW5kZWQgQ29udGVudCAtLT5cbiAgPGRpdiAqbmdJZj1cImlzRXhwYW5kZWQgJiYgIWlzTGl2ZVwiIGNsYXNzPVwiY3FhLXAtMiAhY3FhLXBsLTkgIWNxYS1wci02IGNxYS1iZy13aGl0ZVwiPlxuICAgIDwhLS0gU3VtbWFyeSBCYXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi0xLjUgY3FhLXAtMyBjcWEtYmctWyNGQ0ZDRkNdIGNxYS1yb3VuZGVkLVs2cHhdIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIiBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNFNUU3RUI7XCIgKm5nSWY9XCJnZXRTdGF0dXMoKSB8fCBkdXJhdGlvbiB8fCBjYWNoZWRRdWVyeVJlc3VsdHM/Lmxlbmd0aCA+IDAgfHwgZGJUZXN0UmVzdWx0Py5hc3NlcnRpb25SZXN1bHRzPy5sZW5ndGggPiAwIHx8IGdldFRvdGFsUm93c1JldHVybmVkKCkgPiAwIHx8IGdldEZhaWx1cmVNZXNzYWdlKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtNFwiPlxuICAgICAgICA8IS0tIFN0YXR1cyBCYWRnZSAtLT5cbiAgICAgICAgPGNxYS1iYWRnZVxuICAgICAgICAgICpuZ0lmPVwiZ2V0U3RhdHVzKCk/LnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsdXJlJyB8fCBnZXRTdGF0dXMoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWxlZCdcIlxuICAgICAgICAgIGxhYmVsPVwiRkFJTFwiXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yPVwiI0RDMjYyNlwiXG4gICAgICAgICAgdGV4dENvbG9yPVwiI0ZGRkZGRlwiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgIDwvY3FhLWJhZGdlPlxuICAgICAgICA8Y3FhLWJhZGdlXG4gICAgICAgICAgKm5nSWY9XCJnZXRTdGF0dXMoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgICAgICBsYWJlbD1cIlBBU1NcIlxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcj1cIiMyMkM1NUVcIlxuICAgICAgICAgIHRleHRDb2xvcj1cIiNGRkZGRkZcIlxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiPlxuICAgICAgICA8L2NxYS1iYWRnZT5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWgtWzE5cHhdIGNxYS13LVsxcHhdIGNxYS1iZy1bI0U1RTdFQl1cIj48L2Rpdj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gU3VtbWFyeSBTdGF0cyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC00IGNxYS10ZXh0LVsxMXB4XSBjcWEtbGVhZGluZy1bMTZweF0gY3FhLXRleHQtWyM2QjcyODBdXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJkdXJhdGlvblwiIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzExMTgyN11cIj5Ub3RhbCBUaW1lOiA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNEI1NTYzXVwiPnt7IGZvcm1hdER1cmF0aW9uKGR1cmF0aW9uKSB9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjYWNoZWRRdWVyeVJlc3VsdHM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bMTBweF0gY3FhLXRleHQtWyMxMTE4MjddXCI+UXVlcmllczogPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzRCNTU2M11cIj57eyBjYWNoZWRRdWVyeVJlc3VsdHM/Lmxlbmd0aCB8fCAwIH19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImRiVGVzdFJlc3VsdD8uYXNzZXJ0aW9uUmVzdWx0cz8ubGVuZ3RoID4gMFwiIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzExMTgyN11cIj5Bc3NlcnRpb25zOiA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNEI1NTYzXVwiPnt7IGRiVGVzdFJlc3VsdD8uYXNzZXJ0aW9uUmVzdWx0cz8ubGVuZ3RoIHx8IDAgfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0VG90YWxSb3dzUmV0dXJuZWQoKSA+IDBcIiBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bMTBweF0gY3FhLXRleHQtWyMxMTE4MjddXCI+Um93cyBSZXR1cm5lZDogPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzRCNTU2M11cIj57eyBnZXRUb3RhbFJvd3NSZXR1cm5lZCgpIH19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGYWlsdXJlIEJhbm5lciAtLT5cbiAgICAgIDxkaXYgXG4gICAgICAgICpuZ0lmPVwiZ2V0RmFpbHVyZU1lc3NhZ2UoKVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLXB4LTIgY3FhLXB5LTEgY3FhLWJnLVsjRkVGMkYyXSBjcWEtcm91bmRlZC1bNHB4XVwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0ZFRTJFMjtcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bI0I5MUMxQ11cIj5cbiAgICAgICAgICB7eyBnZXRGYWlsdXJlTWVzc2FnZSgpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEYXRhYmFzZSBFbnZpcm9ubWVudCBTZWN0aW9uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJkYkNvbmZpZ1wiIGNsYXNzPVwiY3FhLW1iLTEuNVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzBCMEIwQl0gY3FhLW1iLTJcIj5EYXRhYmFzZSBlbnZpcm9ubWVudDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0U1RTdFQl0gY3FhLXB4LTQgY3FhLXB5LTIgY3FhLXJlbGF0aXZlIGNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0zXCI+XG4gICAgICAgIDwhLS0gRW52aXJvbm1lbnQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM0NTU1NkNdIGNxYS1tYi0xXCI+RW52aXJvbm1lbnQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTRcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdGV4dC1bIzBGMTcyQl1cIj57eyBkYkNvbmZpZy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvcHlFbnZpcm9ubWVudCgpXCIgY2xhc3M9XCJjcWEtY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk01LjMzMzMyIDEwLjY2NjdIMy45OTk5OUMzLjY0NjM3IDEwLjY2NjcgMy4zMDcyMyAxMC41MjYzIDMuMDU3MTggMTAuMjc2MkMyLjgwNzEzIDEwLjAyNjIgMi42NjY2NiA5LjY4NzA0IDIuNjY2NjYgOS4zMzM0MVY0LjAwMDA4QzIuNjY2NjYgMy42NDY0NiAyLjgwNzEzIDMuMzA3MzIgMy4wNTcxOCAzLjA1NzI3QzMuMzA3MjMgMi44MDcyMiAzLjY0NjM3IDIuNjY2NzUgMy45OTk5OSAyLjY2Njc1SDkuMzMzMzJDOS42ODY5NSAyLjY2Njc1IDEwLjAyNjEgMi44MDcyMiAxMC4yNzYxIDMuMDU3MjdDMTAuNTI2MiAzLjMwNzMyIDEwLjY2NjcgMy42NDY0NiAxMC42NjY3IDQuMDAwMDhWNS4zMzM0MU02LjY2NjY2IDEzLjMzMzRIMTJDMTIuMzUzNiAxMy4zMzM0IDEyLjY5MjggMTMuMTkyOSAxMi45NDI4IDEyLjk0MjlDMTMuMTkyOCAxMi42OTI4IDEzLjMzMzMgMTIuMzUzNyAxMy4zMzMzIDEyLjAwMDFWNi42NjY3NUMxMy4zMzMzIDYuMzEzMTMgMTMuMTkyOCA1Ljk3Mzk5IDEyLjk0MjggNS43MjM5NEMxMi42OTI4IDUuNDczODkgMTIuMzUzNiA1LjMzMzQxIDEyIDUuMzMzNDFINi42NjY2NkM2LjMxMzAzIDUuMzMzNDEgNS45NzM5IDUuNDczODkgNS43MjM4NSA1LjcyMzk0QzUuNDczOCA1Ljk3Mzk5IDUuMzMzMzIgNi4zMTMxMyA1LjMzMzMyIDYuNjY2NzVWMTIuMDAwMUM1LjMzMzMyIDEyLjM1MzcgNS40NzM4IDEyLjY5MjggNS43MjM4NSAxMi45NDI5QzUuOTczOSAxMy4xOTI5IDYuMzEzMDMgMTMuMzMzNCA2LjY2NjY2IDEzLjMzMzRaXCIgc3Ryb2tlPVwiIzYzNjM2M1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzQ1NTU2Q10gY3FhLW1iLTFcIj5UeXBlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLXRleHQtWyMwRjE3MkJdXCI+e3sgZGJDb25maWcuZGJUeXBlIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTEuNVwiICpuZ0lmPVwiY2FjaGVkUXVlcnlSZXN1bHRzPy5sZW5ndGggPiAwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtbWItMlwiPlF1ZXJ5IEV4ZWN1dGlvbjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLXB4LTQgY3FhLXB5LTIgY3FhLWJnLXdoaXRlIGNxYS1yb3VuZGVkLVsxMHB4XVwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0UyRThGMDtcIj5cbiAgICAgICAgPGNxYS1kYi1xdWVyeS1leGVjdXRpb24taXRlbVxuICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVyeUl0ZW0gb2YgY2FjaGVkUXVlcnlSZXN1bHRzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5UXVlcnlLZXlcIlxuICAgICAgICAgIFtxdWVyeU51bWJlcl09XCJpICsgMVwiXG4gICAgICAgICAgW3F1ZXJ5S2V5XT1cInF1ZXJ5SXRlbS5rZXlcIlxuICAgICAgICAgIFtxdWVyeVJlc3VsdF09XCJxdWVyeUl0ZW0ucmVzdWx0XCJcbiAgICAgICAgICBbc3RhdHVzXT1cImdldFF1ZXJ5U3RhdHVzKHF1ZXJ5SXRlbS5rZXkpXCJcbiAgICAgICAgICBbdmFyaWFibGVOYW1lXT1cInF1ZXJ5SXRlbS5rZXlcIj5cbiAgICAgICAgPC9jcWEtZGItcXVlcnktZXhlY3V0aW9uLWl0ZW0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVmVyaWZpY2F0aW9uIFNlY3Rpb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cImRiVGVzdFJlc3VsdD8uYXNzZXJ0aW9uUmVzdWx0cyAmJiBkYlRlc3RSZXN1bHQ/LmFzc2VydGlvblJlc3VsdHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMwQjBCMEJdIGNxYS1tYi0yXCI+VmVyaWZpY2F0aW9uPC9kaXY+ICAgICAgXG4gICAgICA8IS0tIFZlcmlmaWNhdGlvbiBUYWJsZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1weC00IGNxYS1weS0yIGNxYS1vdmVyZmxvdy1oaWRkZW5cIiBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNFMkU4RjA7XCI+XG4gICAgICAgIDwhLS0gU2VnbWVudCBDb250cm9sIGZvciBGaWx0ZXJzIC0tPlxuICAgICAgICA8Y3FhLXNlZ21lbnQtY29udHJvbFxuICAgICAgICAgIFtzZWdtZW50c109XCJmaWx0ZXJTZWdtZW50c1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInZlcmlmaWNhdGlvbkZpbHRlclwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPC9jcWEtc2VnbWVudC1jb250cm9sPlxuICAgICAgICA8Y3FhLXRhYmxlLXRlbXBsYXRlXG4gICAgICAgICAgW2NvbHVtbnNdPVwidmVyaWZpY2F0aW9uVGFibGVDb2x1bW5zXCJcbiAgICAgICAgICBbZGF0YV09XCJnZXRUYWJsZURhdGEoKVwiXG4gICAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgW2lzRW1wdHlTdGF0ZV09XCJpc0VtcHR5VGFibGVcIlxuICAgICAgICAgIFtlbXB0eVN0YXRlQ29uZmlnXT1cImVtcHR5U3RhdGVDb25maWdcIlxuICAgICAgICAgIFtzaG93U2VhcmNoQmFyXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2hvd0ZpbHRlckJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW3Nob3dTZXR0aW5nc0J1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW3Nob3dBdXRvUmVmcmVzaEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW3Nob3dPdGhlckJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgICAgW3Nob3dGaWx0ZXJQYW5lbF09XCJmYWxzZVwiXG4gICAgICAgICAgW3NlcnZlclNpZGVQYWdpbmF0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS10YWJsZS10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWxmIEhlYWwgQW5hbHlzaXMgLS0+XG4gICAgPGNxYS1zZWxmLWhlYWwtYW5hbHlzaXMgXG4gICAgICAqbmdJZj1cInNlbGZIZWFsQW5hbHlzaXNcIiBcbiAgICAgIFtvcmlnaW5hbExvY2F0b3JdPVwic2VsZkhlYWxBbmFseXNpcy5vcmlnaW5hbExvY2F0b3JcIlxuICAgICAgW2hlYWxlZExvY2F0b3JdPVwic2VsZkhlYWxBbmFseXNpcy5oZWFsZWRMb2NhdG9yXCJcbiAgICAgIFtjb25maWRlbmNlXT1cInNlbGZIZWFsQW5hbHlzaXMuY29uZmlkZW5jZVwiXG4gICAgICBbaGVhbE1ldGhvZF09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxNZXRob2RcIlxuICAgICAgW2lzTG9hZGluZ0FjY2VwdF09XCJnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyID8gZ2V0U2VsZkhlYWxMb2FkaW5nU3RhdGVzSGFuZGxlcigpLmlzTG9hZGluZ0FjY2VwdCA6IGZhbHNlXCJcbiAgICAgIFtpc0xvYWRpbmdNb2RpZnlBY2NlcHRdPVwiZ2V0U2VsZkhlYWxMb2FkaW5nU3RhdGVzSGFuZGxlciA/IGdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIoKS5pc0xvYWRpbmdNb2RpZnlBY2NlcHQgOiBmYWxzZVwiXG4gICAgICAoYWN0aW9uKT1cIm9uU2VsZkhlYWxBY3Rpb24oJGV2ZW50KVwiPlxuICAgIDwvY3FhLXNlbGYtaGVhbC1hbmFseXNpcz5cblxuICAgIDwhLS0gVGltaW5nIEJyZWFrZG93biAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwidGltaW5nQnJlYWtkb3duXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWVuZCBjcWEtZ2FwLTUgY3FhLXB0LTQgY3FhLXB4LTQgY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM5Q0EzQUZdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGRpdj48c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTYgMTFDOC43NjE0MiAxMSAxMSA4Ljc2MTQyIDExIDZDMTEgMy4yMzg1OCA4Ljc2MTQyIDEgNiAxQzMuMjM4NTggMSAxIDMuMjM4NTggMSA2QzEgOC43NjE0MiAzLjIzODU4IDExIDYgMTFaXCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+PC9kaXY+XG4gICAgICAgIDxzcGFuPlRpbWluZyBicmVha2Rvd248L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtZGlhbG9nLW11dGVkIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQXBwIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdXCI+e3sgZm9ybWF0RHVyYXRpb24odGltaW5nQnJlYWtkb3duLmFwcCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTS0zLjgxNDdlLTA2IDEwLjMyVi03LjE1MjU2ZS0wN0gwLjk1OTk5NlYxMC4zMkgtMy44MTQ3ZS0wNlpcIiBmaWxsPVwiI0U1RTdFQlwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBUb29sIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdXCI+e3sgZm9ybWF0RHVyYXRpb24odGltaW5nQnJlYWtkb3duLnRvb2wpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVmlldyBNb3JlIEZhaWxlZCBTdGVwIEJ1dHRvbiAtIHNob3duIHdoZW4gZXhwYW5kZWQgYW5kIGZhaWx1cmUgZGV0YWlscyBleGlzdCAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1ZpZXdNb3JlQnV0dG9uXCIgY2xhc3M9XCJjcWEtbXQtMiBjcWEtcHgtNFwiPlxuICAgICAgPGNxYS12aWV3LW1vcmUtZmFpbGVkLXN0ZXAtYnV0dG9uXG4gICAgICAgIFt0aW1pbmdCcmVha2Rvd25dPVwidGltaW5nQnJlYWtkb3duXCJcbiAgICAgICAgW3N1YlN0ZXBzXT1cImdldFN1YlN0ZXBzRm9yRmFpbGVkU3RlcCgpXCJcbiAgICAgICAgW2ZhaWx1cmVEZXRhaWxzXT1cImZhaWx1cmVEZXRhaWxzXCJcbiAgICAgICAgW2lzRXhwYW5kZWRdPVwic2hvd0ZhaWxlZFN0ZXBEZXRhaWxzXCJcbiAgICAgICAgKHZpZXdNb3JlQ2xpY2spPVwib25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljaygkZXZlbnQpXCI+XG4gICAgICA8L2NxYS12aWV3LW1vcmUtZmFpbGVkLXN0ZXAtYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBVcGRhdGVkIEZhaWxlZCBTdGVwIENvbXBvbmVudCAtIHNob3duIHdoZW4gYnV0dG9uIGlzIGNsaWNrZWQgLS0+XG4gICAgPGRpdiAqbmdJZj1cInNob3dWaWV3TW9yZUJ1dHRvbiAmJiBzaG93RmFpbGVkU3RlcERldGFpbHMgJiYgZmFpbHVyZURldGFpbHNcIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgICA8Y3FhLXVwZGF0ZWQtZmFpbGVkLXN0ZXBcbiAgICAgICAgW3Rlc3RTdGVwUmVzdWx0SWRdPVwidGVzdFN0ZXBSZXN1bHRJZFwiXG4gICAgICAgIFt0aW1pbmdCcmVha2Rvd25dPVwidGltaW5nQnJlYWtkb3duXCJcbiAgICAgICAgW2V4cGFuZGVkXT1cInRydWVcIlxuICAgICAgICBbc3ViU3RlcHNdPVwiZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKClcIlxuICAgICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgICBbcmVhc29uaW5nXT1cInJlYXNvbmluZ1wiXG4gICAgICAgIFtjb25maWRlbmNlXT1cImNvbmZpZGVuY2VcIlxuICAgICAgICBbaXNVcGxvYWRpbmdCYXNlbGluZV09XCJpc1VwbG9hZGluZ0Jhc2VsaW5lXCJcbiAgICAgICAgW2lzTWFraW5nQ3VycmVudEJhc2VsaW5lXT1cImlzTWFraW5nQ3VycmVudEJhc2VsaW5lXCJcbiAgICAgICAgW2lzTGl2ZV09XCJpc0xpdmVcIlxuICAgICAgICAobWFrZUN1cnJlbnRCYXNlbGluZSk9XCJvbk1ha2VDdXJyZW50QmFzZWxpbmUoJGV2ZW50KVwiXG4gICAgICAgICh1cGxvYWRCYXNlbGluZSk9XCJvblVwbG9hZEJhc2VsaW5lKCRldmVudClcIlxuICAgICAgICAoYW5hbHl6ZSk9XCJvbkFuYWx5emUoKVwiXG4gICAgICAgICh2aWV3RnVsbExvZ3MpPVwib25WaWV3RnVsbExvZ3MoKVwiPlxuICAgICAgPC9jcWEtdXBkYXRlZC1mYWlsZWQtc3RlcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
400
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItdmVyaWZpY2F0aW9uLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2RiLXZlcmlmaWNhdGlvbi1zdGVwL2RiLXZlcmlmaWNhdGlvbi1zdGVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9kYi12ZXJpZmljYXRpb24tc3RlcC9kYi12ZXJpZmljYXRpb24tc3RlcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBb0MsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUkzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7Ozs7OztBQVNoRixNQUFNLE9BQU8sMkJBQTRCLFNBQVEsaUJBQWlCO0lBTmxFOztRQXdCVyx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsNEJBQXVCLEdBQUcsRUFBRSxDQUFDO1FBSTdCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFHakMsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBRTdCLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO1FBQ25FLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDekQsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbkMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3hDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQW9ELENBQUM7UUFJaEcsdUJBQWtCLEdBQWdDLEtBQUssQ0FBQztRQUV4RCxtQkFBYyxHQUFHO1lBQ2YsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7WUFDOUIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7WUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7U0FDMUMsQ0FBQztRQUVGLDZCQUF3QixHQUF5QixFQUFFLENBQUM7UUFFcEQscUJBQWdCLEdBQXFCO1lBQ25DLEtBQUssRUFBRSxlQUFlO1lBQ3RCLFdBQVcsRUFBRSwyREFBMkQ7WUFDeEUsUUFBUSxFQUFFLGtCQUFrQixDQUFDLFNBQVM7WUFDdEMsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBRUYsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBRXRCLGdGQUFnRjtRQUNoRix1QkFBa0IsR0FBa0QsRUFBRSxDQUFDO0tBNFV4RTtJQTFVVSxRQUFRO1FBQ2YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsbUNBQW1DO1FBQ25DLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDL0ksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7YUFDakM7U0FDRjtRQUVELG1DQUFtQztRQUNuQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUN0RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ0ksQ0FBQztJQUNoQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDeEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzVDLElBQUksVUFBVSxFQUFFO2dCQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDNUM7U0FDRjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRTtZQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBQzdCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFhLEVBQUUsSUFBNEM7UUFDekUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTztZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN2RSxPQUFPLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFnQjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxnQkFBZ0I7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUMxRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FDL0QsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FDakQsQ0FBQztRQUNGLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDbEQsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNwRSxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGdCQUFnQjtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3BELFFBQVEsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQy9CLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkUsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEU7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQW1DO1FBQ3ZELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUM7SUFDbkMsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFvQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLHdCQUF3QixHQUFHO1lBQzlCO2dCQUNFLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixTQUFTLEVBQUUsV0FBVztnQkFDdEIsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLE1BQU0sRUFBRSxDQUFDO2dCQUNULE1BQU0sRUFBRSxDQUFDLEdBQXNCLEVBQUUsRUFBRTtvQkFDakMsT0FBTzs7Z0JBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDOztXQUVsQyxDQUFDO2dCQUNKLENBQUM7YUFDRjtZQUNEO2dCQUNFLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLFNBQVMsRUFBRSxtQkFBbUI7Z0JBQzlCLFVBQVUsRUFBRSxrQkFBa0I7Z0JBQzlCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLE1BQU0sRUFBRSxHQUFHO2dCQUNYLE1BQU0sRUFBRSxDQUFDLEdBQXNCLEVBQUUsRUFBRTtvQkFDakMsT0FBTzs7Z0JBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O1dBRXZFLENBQUM7Z0JBQ0osQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixVQUFVLEVBQUUsYUFBYTtnQkFDekIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLENBQUMsR0FBc0IsRUFBRSxFQUFFO29CQUNqQyxNQUFNLEtBQUssR0FBRyxPQUFPLEdBQUcsQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDOUcsT0FBTzs7Z0JBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7O1dBRTNCLENBQUM7Z0JBQ0osQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFNBQVMsRUFBRSxnQkFBZ0I7Z0JBQzNCLFVBQVUsRUFBRSxlQUFlO2dCQUMzQixNQUFNLEVBQUUsSUFBSTtnQkFDWixNQUFNLEVBQUUsR0FBRztnQkFDWCxNQUFNLEVBQUUsQ0FBQyxHQUFzQixFQUFFLEVBQUU7b0JBQ2pDLE1BQU0sS0FBSyxHQUFHLE9BQU8sR0FBRyxDQUFDLGFBQWEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNwSCxPQUFPOztnQkFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQzs7V0FFM0IsQ0FBQztnQkFDSixDQUFDO2FBQ0Y7WUFDRDtnQkFDRSxPQUFPLEVBQUUsUUFBUTtnQkFDakIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixNQUFNLEVBQUUsSUFBSTtnQkFDWixNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLEVBQUUsQ0FBQyxHQUFzQixFQUFFLEVBQUU7b0JBQ2pDLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTt3QkFDZCxPQUFPOzs7O2FBSU4sQ0FBQztxQkFDSDt5QkFBTTt3QkFDTCxPQUFPOzs7O2FBSU4sQ0FBQztxQkFDSDtnQkFDSCxDQUFDO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLFVBQVUsQ0FBQyxJQUFZO1FBQzdCLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDdkIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQThDO1FBQ3pELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDakMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLFdBQTBCO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0QsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRTtZQUN2QixTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDNUQsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLG1CQUFtQjtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTlFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakYsSUFBSSxlQUFlLEVBQUU7WUFDbkIsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztZQUM5QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakYsT0FBTyw2QkFBNkIsVUFBVSxxQkFBcUIsZUFBZSxDQUFDLGFBQWEsY0FBYyxlQUFlLENBQUMsV0FBVyxJQUFJLENBQUM7U0FDL0k7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFZO1FBQ2pDLE1BQU0sT0FBTyxHQUE4QjtZQUN6QyxRQUFRLEVBQUUsUUFBUTtZQUNsQixZQUFZLEVBQUUsWUFBWTtZQUMxQixVQUFVLEVBQUUsVUFBVTtZQUN0QixjQUFjLEVBQUUsY0FBYztZQUM5QixjQUFjLEVBQUUsY0FBYztZQUM5QixXQUFXLEVBQUUsV0FBVztZQUN4Qix3QkFBd0IsRUFBRSx3QkFBd0I7WUFDbEQscUJBQXFCLEVBQUUscUJBQXFCO1lBQzVDLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELHlCQUF5QixDQUFDLFFBQWlCO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxRQUFRLENBQUM7SUFDeEMsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixtRkFBbUY7UUFDbkYsTUFBTSxRQUFRLEdBQWMsRUFBRSxDQUFDO1FBRS9CLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUU7WUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN6RSxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLEVBQUUsRUFBRSxTQUFTLEtBQUssRUFBRTtvQkFDcEIsV0FBVyxFQUFFLFNBQVMsS0FBSyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUU7b0JBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO29CQUNwRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDO2lCQUMvQixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQscUNBQXFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRTtZQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDOUQsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDWixFQUFFLEVBQUUsYUFBYSxLQUFLLEVBQUU7b0JBQ3hCLFdBQVcsRUFBRSxjQUFjLFNBQVMsQ0FBQyxRQUFRLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO29CQUM1RyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO29CQUMvQyxRQUFRLEVBQUUsQ0FBQztpQkFDWixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNwRCxDQUNFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDO3VCQUM1SSxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2hELENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDakksQ0FBQTtJQUNMLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUErQjtRQUNuRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUEwQjtRQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUF1RDtRQUN0RSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDOzt3SEFwWVUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsbzhCQ2R4Qyxtb2RBb09BOzJGRHROYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsMEJBQTBCLFFBRzlCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTs4QkFHckIsRUFBRTtzQkFBVixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csK0JBQStCO3NCQUF2QyxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUlJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlU3RlcENvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2Utc3RlcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGJWZXJpZmljYXRpb25TdGVwQ29uZmlnLCBEYlRlc3RSZXN1bHQsIERiUXVlcnlSZXN1bHQsIERiQXNzZXJ0aW9uUmVzdWx0LCBTdGVwU3RhdHVzLCBUaW1pbmdCcmVha2Rvd24sIEZhaWx1cmVEZXRhaWxzLCBTdWJTdGVwLCBTZWxmSGVhbEFuYWx5c2lzRGF0YSwgU2VsZkhlYWxBY3Rpb24sIEV4ZWN1dGlvblN0ZXBDb25maWcgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgRHluYW1pY1RhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vdGFibGUvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29uZmlnIH0gZnJvbSAnLi4vLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFTVBUWV9TVEFURV9JTUFHRVMgfSBmcm9tICcuLi8uLi9hc3NldHMvaW1hZ2VzL2ltYWdlLWFzc2V0cy5jb25zdGFudHMnO1xuaW1wb3J0IHsgbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50LCB1cGxvYWRCYXNlbGluZUV2ZW50IH0gZnJvbSAnLi4vdmlzdWFsLWNvbXBhcmlzb24vdmlzdWFsLWNvbXBhcmlzb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWRiLXZlcmlmaWNhdGlvbi1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RiLXZlcmlmaWNhdGlvbi1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIERiVmVyaWZpY2F0aW9uU3RlcENvbXBvbmVudCBleHRlbmRzIEJhc2VTdGVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBpZCE6IHN0cmluZztcbiAgQElucHV0KCkgdGVzdFN0ZXBSZXN1bHRJZCE6IHN0cmluZztcbiAgQElucHV0KCkgc3RlcE51bWJlciE6IHN0cmluZztcbiAgQElucHV0KCkgdGl0bGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN0YXR1cyE6IFN0ZXBTdGF0dXM7XG4gIEBJbnB1dCgpIGR1cmF0aW9uITogbnVtYmVyO1xuICBASW5wdXQoKSB0aW1pbmdCcmVha2Rvd24/OiBUaW1pbmdCcmVha2Rvd247XG4gIEBJbnB1dCgpIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgQElucHV0KCkgZGJUZXN0UmVzdWx0ITogRGJUZXN0UmVzdWx0O1xuICBASW5wdXQoKSBkYkNvbmZpZz86IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGJUeXBlOiBzdHJpbmc7XG4gIH07XG4gIEBJbnB1dCgpIGZhaWx1cmVEZXRhaWxzPzogRmFpbHVyZURldGFpbHM7XG4gIEBJbnB1dCgpIHJlYXNvbmluZz86IHN0cmluZ1tdO1xuICBASW5wdXQoKSBjb25maWRlbmNlPzogc3RyaW5nO1xuICBASW5wdXQoKSBzdGVwRGVsZXRlZD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzVXBsb2FkaW5nQmFzZWxpbmUgPSB7fTtcbiAgQElucHV0KCkgaXNNYWtpbmdDdXJyZW50QmFzZWxpbmUgPSB7fTtcbiAgQElucHV0KCkgc2VsZkhlYWxBbmFseXNpcz86IFNlbGZIZWFsQW5hbHlzaXNEYXRhO1xuICBASW5wdXQoKSBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyPzogKCkgPT4geyBpc0xvYWRpbmdBY2NlcHQ6IGJvb2xlYW47IGlzTG9hZGluZ01vZGlmeUFjY2VwdDogYm9vbGVhbiB9O1xuICBASW5wdXQoKSBvblN0ZXBDbGlja0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZywgZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgQElucHV0KCkgaXNMaXZlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN0ZXA/OiBFeGVjdXRpb25TdGVwQ29uZmlnO1xuXG4gIHNob3dGYWlsZWRTdGVwRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBtYWtlQ3VycmVudEJhc2VsaW5lID0gbmV3IEV2ZW50RW1pdHRlcjxtYWtlQ3VycmVudEJhc2VsaW5lRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSB1cGxvYWRCYXNlbGluZSA9IG5ldyBFdmVudEVtaXR0ZXI8dXBsb2FkQmFzZWxpbmVFdmVudD4oKTtcbiAgQE91dHB1dCgpIGFuYWx5emUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB2aWV3RnVsbExvZ3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxmSGVhbEFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0eXBlOiBTZWxmSGVhbEFjdGlvbjsgaGVhbGVkTG9jYXRvcjogc3RyaW5nOyB9PigpO1xuXG4gIG92ZXJyaWRlIGNvbmZpZyE6IERiVmVyaWZpY2F0aW9uU3RlcENvbmZpZztcblxuICB2ZXJpZmljYXRpb25GaWx0ZXI6ICdhbGwnIHwgJ2ZhaWxlZCcgfCAncGFzc2VkJyA9ICdhbGwnO1xuXG4gIGZpbHRlclNlZ21lbnRzID0gW1xuICAgIHsgbGFiZWw6ICdBbGwnLCB2YWx1ZTogJ2FsbCcgfSxcbiAgICB7IGxhYmVsOiAnRmFpbGVkIG9ubHknLCB2YWx1ZTogJ2ZhaWxlZCcgfSxcbiAgICB7IGxhYmVsOiAnUGFzc2VkIG9ubHknLCB2YWx1ZTogJ3Bhc3NlZCcgfSxcbiAgXTtcblxuICB2ZXJpZmljYXRpb25UYWJsZUNvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIFxuICBlbXB0eVN0YXRlQ29uZmlnOiBFbXB0eVN0YXRlQ29uZmlnID0ge1xuICAgIHRpdGxlOiAnTm8gQXNzZXJ0aW9ucycsXG4gICAgZGVzY3JpcHRpb246ICdObyB2ZXJpZmljYXRpb24gYXNzZXJ0aW9ucyBmb3VuZCBmb3IgdGhpcyBkYXRhYmFzZSBxdWVyeS4nLFxuICAgIGltYWdlVXJsOiBFTVBUWV9TVEFURV9JTUFHRVMuREFTSEJPQVJELFxuICAgIGFjdGlvbnM6IFtdLFxuICB9O1xuXG4gIHBhZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBcbiAgLy8gQ2FjaGVkIHF1ZXJ5IHJlc3VsdHMgdG8gYXZvaWQgcmVjcmVhdGluZyBjb21wb25lbnRzIG9uIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb25cbiAgY2FjaGVkUXVlcnlSZXN1bHRzOiBBcnJheTx7IGtleTogc3RyaW5nOyByZXN1bHQ6IERiUXVlcnlSZXN1bHQgfT4gPSBbXTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbmZpZygpO1xuICAgIHRoaXMuc2V0dXBUYWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUNhY2hlZFF1ZXJ5UmVzdWx0cygpO1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgaWYgKHRoaXMuZXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5leHBhbmRlZDtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0dXMoKTogU3RlcFN0YXR1cyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnPy5zdGF0dXMgfHwgdGhpcy5zdGF0dXM7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gVXBkYXRlIGNvbmZpZyB3aGVuIGlucHV0cyBjaGFuZ2VcbiAgICBpZiAoY2hhbmdlc1snZGJUZXN0UmVzdWx0J10gfHwgY2hhbmdlc1snZGJDb25maWcnXSB8fCBjaGFuZ2VzWydleHBhbmRlZCddIHx8IGNoYW5nZXNbJ3N0YXR1cyddIHx8IGNoYW5nZXNbJ2R1cmF0aW9uJ10gfHwgY2hhbmdlc1snc3RlcERlbGV0ZWQnXSkge1xuICAgICAgdGhpcy51cGRhdGVDb25maWcoKTtcbiAgICAgIGlmIChjaGFuZ2VzWydkYlRlc3RSZXN1bHQnXSkge1xuICAgICAgICB0aGlzLnNldHVwVGFibGVDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FjaGVkUXVlcnlSZXN1bHRzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFVwZGF0ZSBleHBhbmRlZCBzdGF0ZSBpZiBjaGFuZ2VkXG4gICAgaWYgKGNoYW5nZXNbJ2V4cGFuZGVkJ10gJiYgdGhpcy5leHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29uZmlnKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICB0ZXN0U3RlcFJlc3VsdElkOiB0aGlzLnRlc3RTdGVwUmVzdWx0SWQsXG4gICAgICBzdGVwTnVtYmVyOiB0aGlzLnN0ZXBOdW1iZXIsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBkdXJhdGlvbjogdGhpcy5kdXJhdGlvbixcbiAgICAgIHR5cGU6ICdkYi12ZXJpZmljYXRpb24nLFxuICAgICAgZGJUZXN0UmVzdWx0OiB0aGlzLmRiVGVzdFJlc3VsdCxcbiAgICAgIGRiQ29uZmlnOiB0aGlzLmRiQ29uZmlnLFxuICAgICAgc3RlcERlbGV0ZWQ6IHRoaXMuc3RlcERlbGV0ZWQsXG4gICAgICB0aW1pbmdCcmVha2Rvd246IHRoaXMudGltaW5nQnJlYWtkb3duLFxuICAgICAgZXhwYW5kZWQ6IHRoaXMuZXhwYW5kZWQsXG4gICAgfSBhcyBEYlZlcmlmaWNhdGlvblN0ZXBDb25maWc7XG4gIH1cblxuICB0b2dnbGVIZWFkZXIoZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0xpdmUpIHJldHVybjtcbiAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIGlmICh0aGlzLm9uU3RlcENsaWNrSGFuZGxlcikge1xuICAgICAgY29uc3Qgc3RlcFRvUGFzcyA9IHRoaXMuc3RlcCB8fCB0aGlzLmNvbmZpZztcbiAgICAgIGlmIChzdGVwVG9QYXNzKSB7XG4gICAgICAgIHRoaXMub25TdGVwQ2xpY2tIYW5kbGVyKHN0ZXBUb1Bhc3MsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDYWNoZWRRdWVyeVJlc3VsdHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRiVGVzdFJlc3VsdD8ucmVzdWx0cykge1xuICAgICAgdGhpcy5jYWNoZWRRdWVyeVJlc3VsdHMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jYWNoZWRRdWVyeVJlc3VsdHMgPSBPYmplY3QuZW50cmllcyh0aGlzLmRiVGVzdFJlc3VsdC5yZXN1bHRzKS5tYXAoKFtrZXksIHJlc3VsdF0pID0+ICh7IGtleSwgcmVzdWx0IH0pKTtcbiAgfVxuXG4gIGdldFF1ZXJ5UmVzdWx0cygpOiBBcnJheTx7IGtleTogc3RyaW5nOyByZXN1bHQ6IERiUXVlcnlSZXN1bHQgfT4ge1xuICAgIHJldHVybiB0aGlzLmNhY2hlZFF1ZXJ5UmVzdWx0cztcbiAgfVxuXG4gIHRyYWNrQnlRdWVyeUtleShpbmRleDogbnVtYmVyLCBpdGVtOiB7IGtleTogc3RyaW5nOyByZXN1bHQ6IERiUXVlcnlSZXN1bHQgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0ua2V5O1xuICB9XG5cbiAgZ2V0VG90YWxSb3dzUmV0dXJuZWQoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuZGJUZXN0UmVzdWx0Py5yZXN1bHRzKSByZXR1cm4gMDtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmRiVGVzdFJlc3VsdC5yZXN1bHRzKS5yZWR1Y2UoKHRvdGFsLCByZXN1bHQpID0+IHtcbiAgICAgIHJldHVybiB0b3RhbCArIChBcnJheS5pc0FycmF5KHJlc3VsdC5kYXRhKSA/IHJlc3VsdC5kYXRhLmxlbmd0aCA6IDApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgZ2V0UXVlcnlTdGF0dXMocXVlcnlLZXk6IHN0cmluZyk6ICdwYXNzZWQnIHwgJ2ZhaWxlZCcge1xuICAgIGlmICghdGhpcy5kYlRlc3RSZXN1bHQ/LmFzc2VydGlvblJlc3VsdHMpIHJldHVybiAncGFzc2VkJztcbiAgICBjb25zdCBxdWVyeUFzc2VydGlvbnMgPSB0aGlzLmRiVGVzdFJlc3VsdC5hc3NlcnRpb25SZXN1bHRzLmZpbHRlcihcbiAgICAgIGFzc2VydGlvbiA9PiBhc3NlcnRpb24udmFyaWFibGVOYW1lID09PSBxdWVyeUtleVxuICAgICk7XG4gICAgaWYgKHF1ZXJ5QXNzZXJ0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiAncGFzc2VkJztcbiAgICByZXR1cm4gcXVlcnlBc3NlcnRpb25zLmV2ZXJ5KGEgPT4gYS5wYXNzZWQpID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJztcbiAgfVxuXG4gIGdldEZpbHRlcmVkQXNzZXJ0aW9ucygpOiBEYkFzc2VydGlvblJlc3VsdFtdIHtcbiAgICBpZiAoIXRoaXMuZGJUZXN0UmVzdWx0Py5hc3NlcnRpb25SZXN1bHRzKSByZXR1cm4gW107XG4gICAgc3dpdGNoICh0aGlzLnZlcmlmaWNhdGlvbkZpbHRlcikge1xuICAgICAgY2FzZSAnZmFpbGVkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGJUZXN0UmVzdWx0LmFzc2VydGlvblJlc3VsdHMuZmlsdGVyKGEgPT4gIWEucGFzc2VkKTtcbiAgICAgIGNhc2UgJ3Bhc3NlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLmRiVGVzdFJlc3VsdC5hc3NlcnRpb25SZXN1bHRzLmZpbHRlcihhID0+IGEucGFzc2VkKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmRiVGVzdFJlc3VsdC5hc3NlcnRpb25SZXN1bHRzO1xuICAgIH1cbiAgfVxuXG4gIHNldFZlcmlmaWNhdGlvbkZpbHRlcihmaWx0ZXI6ICdhbGwnIHwgJ2ZhaWxlZCcgfCAncGFzc2VkJykge1xuICAgIHRoaXMudmVyaWZpY2F0aW9uRmlsdGVyID0gZmlsdGVyO1xuICB9XG5cbiAgb25GaWx0ZXJDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmVyaWZpY2F0aW9uRmlsdGVyID0gdmFsdWUgYXMgJ2FsbCcgfCAnZmFpbGVkJyB8ICdwYXNzZWQnO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFRhYmxlQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLnZlcmlmaWNhdGlvblRhYmxlQ29sdW1ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgZmllbGRJZDogJ2pzb25QYXRoJyxcbiAgICAgICAgZmllbGROYW1lOiAnSlNPTiBwYXRoJyxcbiAgICAgICAgZmllbGRWYWx1ZTogJ2pzb25QYXRoJyxcbiAgICAgICAgaXNTaG93OiB0cnVlLFxuICAgICAgICB3ZWlnaHQ6IDIsXG4gICAgICAgIHJlbmRlcjogKHJvdzogRGJBc3NlcnRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzRCNTU2M10gY3FhLWZvbnQtbW9ub1wiPlxuICAgICAgICAgICAgICAke3RoaXMuZXNjYXBlSHRtbChyb3cuanNvblBhdGgpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgYDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmllbGRJZDogJ3ZlcmlmaWNhdGlvblR5cGUnLFxuICAgICAgICBmaWVsZE5hbWU6ICdWZXJpZmljYXRpb24gdHlwZScsXG4gICAgICAgIGZpZWxkVmFsdWU6ICd2ZXJpZmljYXRpb25UeXBlJyxcbiAgICAgICAgaXNTaG93OiB0cnVlLFxuICAgICAgICB3ZWlnaHQ6IDEuNSxcbiAgICAgICAgcmVuZGVyOiAocm93OiBEYkFzc2VydGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjNEI1NTYzXVwiPlxuICAgICAgICAgICAgICAke3RoaXMuZXNjYXBlSHRtbCh0aGlzLmZvcm1hdFZlcmlmaWNhdGlvblR5cGUocm93LnZlcmlmaWNhdGlvblR5cGUpKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIGA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZpZWxkSWQ6ICdhY3R1YWxWYWx1ZScsXG4gICAgICAgIGZpZWxkTmFtZTogJ0FjdHVhbCB2YWx1ZScsXG4gICAgICAgIGZpZWxkVmFsdWU6ICdhY3R1YWxWYWx1ZScsXG4gICAgICAgIGlzU2hvdzogdHJ1ZSxcbiAgICAgICAgd2VpZ2h0OiAxLjUsXG4gICAgICAgIHJlbmRlcjogKHJvdzogRGJBc3NlcnRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiByb3cuYWN0dWFsVmFsdWUgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkocm93LmFjdHVhbFZhbHVlKSA6IFN0cmluZyhyb3cuYWN0dWFsVmFsdWUpO1xuICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjNEI1NTYzXVwiPlxuICAgICAgICAgICAgICAke3RoaXMuZXNjYXBlSHRtbCh2YWx1ZSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBmaWVsZElkOiAnZXhwZWN0ZWRWYWx1ZScsXG4gICAgICAgIGZpZWxkTmFtZTogJ0V4cGVjdGVkIHZhbHVlJyxcbiAgICAgICAgZmllbGRWYWx1ZTogJ2V4cGVjdGVkVmFsdWUnLFxuICAgICAgICBpc1Nob3c6IHRydWUsXG4gICAgICAgIHdlaWdodDogMS41LFxuICAgICAgICByZW5kZXI6IChyb3c6IERiQXNzZXJ0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0eXBlb2Ygcm93LmV4cGVjdGVkVmFsdWUgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkocm93LmV4cGVjdGVkVmFsdWUpIDogU3RyaW5nKHJvdy5leHBlY3RlZFZhbHVlKTtcbiAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzRCNTU2M11cIj5cbiAgICAgICAgICAgICAgJHt0aGlzLmVzY2FwZUh0bWwodmFsdWUpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgYDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZmllbGRJZDogJ3Jlc3VsdCcsXG4gICAgICAgIGZpZWxkTmFtZTogJ1Jlc3VsdCcsXG4gICAgICAgIGZpZWxkVmFsdWU6ICdwYXNzZWQnLFxuICAgICAgICBpc1Nob3c6IHRydWUsXG4gICAgICAgIHdlaWdodDogMSxcbiAgICAgICAgcmVuZGVyOiAocm93OiBEYkFzc2VydGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIGlmIChyb3cucGFzc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtYmxvY2sgY3FhLXRleHQtY2VudGVyIGNxYS13LTExIGNxYS1weC0yIGNxYS1weS0xIGNxYS1yb3VuZGVkLVs1cHhdIGNxYS10ZXh0LVsxMnB4XSBjcWEtYmctWyMyRTdEMzJdIGNxYS10ZXh0LVsjRkZGRkZGXVwiPlxuICAgICAgICAgICAgICAgIFBhc3NcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtaW5saW5lLWJsb2NrIGNxYS10ZXh0LWNlbnRlciBjcWEtdy0xMSBjcWEtcHgtMiBjcWEtcHktMSBjcWEtcm91bmRlZC1bNXB4XSBjcWEtdGV4dC1bMTJweF0gY3FhLWJnLVsjREMyNjI2XSBjcWEtdGV4dC1bI0ZGRkZGRl1cIj5cbiAgICAgICAgICAgICAgICBGYWlsXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIGA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGVzY2FwZUh0bWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIHJldHVybiBkaXYuaW5uZXJIVE1MO1xuICB9XG5cbiAgZ2V0VGFibGVEYXRhKCk6IERiQXNzZXJ0aW9uUmVzdWx0W10ge1xuICAgIHJldHVybiB0aGlzLmdldEZpbHRlcmVkQXNzZXJ0aW9ucygpO1xuICB9XG5cbiAgZ2V0IGlzRW1wdHlUYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUYWJsZURhdGEoKS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfSk6IHZvaWQge1xuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4O1xuICAgIHRoaXMucGFnZVNpemUgPSBldmVudC5wYWdlU2l6ZTtcbiAgfVxuXG4gIGNvcHlRdWVyeShxdWVyeTogc3RyaW5nKSB7XG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQocXVlcnkpLnRoZW4oKCkgPT4ge1xuICAgIH0pO1xuICB9XG5cbiAgY29weVJlc3BvbnNlKHF1ZXJ5UmVzdWx0OiBEYlF1ZXJ5UmVzdWx0KSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnN0cmluZ2lmeShxdWVyeVJlc3VsdC5kYXRhLCBudWxsLCAyKTtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChyZXNwb25zZSkudGhlbigoKSA9PiB7XG4gICAgfSk7XG4gIH1cblxuICBjb3B5RW52aXJvbm1lbnQoKSB7XG4gICAgaWYgKHRoaXMuZGJDb25maWc/Lm5hbWUpIHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZGJDb25maWcubmFtZSkudGhlbigoKSA9PiB7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRGYWlsdXJlTWVzc2FnZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuZGJUZXN0UmVzdWx0IHx8IHRoaXMuZGJUZXN0UmVzdWx0Py5hbGxBc3NlcnRpb25zUGFzc2VkKSByZXR1cm4gbnVsbDtcbiAgICBcbiAgICBjb25zdCBmYWlsZWRBc3NlcnRpb24gPSB0aGlzLmRiVGVzdFJlc3VsdC5hc3NlcnRpb25SZXN1bHRzPy5maW5kKGEgPT4gIWEucGFzc2VkKTtcbiAgICBpZiAoZmFpbGVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBxdWVyeUtleSA9IGZhaWxlZEFzc2VydGlvbi52YXJpYWJsZU5hbWU7XG4gICAgICBjb25zdCBxdWVyeUluZGV4ID0gdGhpcy5nZXRRdWVyeVJlc3VsdHMoKS5maW5kSW5kZXgocSA9PiBxLmtleSA9PT0gcXVlcnlLZXkpICsgMTtcbiAgICAgIHJldHVybiBgQXNzZXJ0aW9uIGZhaWxlZCBpbiBRdWVyeSAke3F1ZXJ5SW5kZXh9LiBFeHBlY3RlZCB2YWx1ZSBcIiR7ZmFpbGVkQXNzZXJ0aW9uLmV4cGVjdGVkVmFsdWV9XCIgYnV0IGdvdCBcIiR7ZmFpbGVkQXNzZXJ0aW9uLmFjdHVhbFZhbHVlfVwiLmA7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9ybWF0VmVyaWZpY2F0aW9uVHlwZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnZXF1YWxzJzogJ0VxdWFscycsXG4gICAgICAnbm90X2VxdWFscyc6ICdOb3QgRXF1YWxzJyxcbiAgICAgICdjb250YWlucyc6ICdDb250YWlucycsXG4gICAgICAnbm90X2NvbnRhaW5zJzogJ05vdCBDb250YWlucycsXG4gICAgICAnZ3JlYXRlcl90aGFuJzogJ0dyZWF0ZXIgVGhhbicsXG4gICAgICAnbGVzc190aGFuJzogJ0xlc3MgVGhhbicsXG4gICAgICAnZ3JlYXRlcl90aGFuX29yX2VxdWFscyc6ICdHcmVhdGVyIFRoYW4gT3IgRXF1YWxzJyxcbiAgICAgICdsZXNzX3RoYW5fb3JfZXF1YWxzJzogJ0xlc3MgVGhhbiBPciBFcXVhbHMnLFxuICAgICAgJ2V4aXN0cyc6ICdFeGlzdHMnLFxuICAgICAgJ25vdF9leGlzdHMnOiAnTm90IEV4aXN0cycsXG4gICAgfTtcbiAgICByZXR1cm4gdHlwZU1hcFt0eXBlXSB8fCB0eXBlO1xuICB9XG5cbiAgb25WaWV3TW9yZUZhaWxlZFN0ZXBDbGljayhleHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZhaWxlZFN0ZXBEZXRhaWxzID0gZXhwYW5kZWQ7XG4gIH1cblxuICBnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKTogU3ViU3RlcFtdIHtcbiAgICAvLyBDb252ZXJ0IERCIHZlcmlmaWNhdGlvbiBxdWVyeSByZXN1bHRzIHRvIFN1YlN0ZXBbXSBmb3IgdGhlIGZhaWxlZCBzdGVwIGNvbXBvbmVudFxuICAgIGNvbnN0IHN1YlN0ZXBzOiBTdWJTdGVwW10gPSBbXTtcbiAgICBcbiAgICBpZiAodGhpcy5kYlRlc3RSZXN1bHQ/LnJlc3VsdHMpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZGJUZXN0UmVzdWx0LnJlc3VsdHMpLmZvckVhY2goKFtrZXksIHJlc3VsdF0sIGluZGV4KSA9PiB7XG4gICAgICAgIHN1YlN0ZXBzLnB1c2goe1xuICAgICAgICAgIGlkOiBgcXVlcnktJHtpbmRleH1gLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgUXVlcnkgJHtpbmRleCArIDF9OiAke2tleX1gLFxuICAgICAgICAgIHN0YXR1czogdGhpcy5nZXRRdWVyeVN0YXR1cyhrZXkpID09PSAncGFzc2VkJyA/ICdzdWNjZXNzJyA6ICdmYWlsZWQnLFxuICAgICAgICAgIGR1cmF0aW9uOiByZXN1bHQuZHVyYXRpb24gfHwgMCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgYXNzZXJ0aW9uIHJlc3VsdHMgYXMgc3ViLXN0ZXBzXG4gICAgaWYgKHRoaXMuZGJUZXN0UmVzdWx0Py5hc3NlcnRpb25SZXN1bHRzKSB7XG4gICAgICB0aGlzLmRiVGVzdFJlc3VsdC5hc3NlcnRpb25SZXN1bHRzLmZvckVhY2goKGFzc2VydGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgc3ViU3RlcHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGBhc3NlcnRpb24tJHtpbmRleH1gLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQXNzZXJ0aW9uOiAke2Fzc2VydGlvbi5qc29uUGF0aH0gLSAke3RoaXMuZm9ybWF0VmVyaWZpY2F0aW9uVHlwZShhc3NlcnRpb24udmVyaWZpY2F0aW9uVHlwZSl9YCxcbiAgICAgICAgICBzdGF0dXM6IGFzc2VydGlvbi5wYXNzZWQgPyAnc3VjY2VzcycgOiAnZmFpbGVkJyxcbiAgICAgICAgICBkdXJhdGlvbjogMCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3ViU3RlcHM7XG4gIH1cblxuICBnZXQgc2hvd1ZpZXdNb3JlQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRXhwYW5kZWQgJiYgQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzKSAmJlxuICAgICAgKFxuICAgICAgICAoQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzPy5leHBlY3RlZCB8fCB0aGlzLmZhaWx1cmVEZXRhaWxzPy5hY3R1YWwpKSB8fFxuICAgICAgICAoQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzPy5zY3JlZW5zaG90cz8uY3VycmVudCB8fCB0aGlzLmZhaWx1cmVEZXRhaWxzPy5zY3JlZW5zaG90cz8uYmFzZWxpbmUgfHwgdGhpcy5mYWlsdXJlRGV0YWlscz8uc2NyZWVuc2hvdHM/LmRpZmZlcmVuY2UpXG4gICAgICAgICAgfHwgQm9vbGVhbih0aGlzLmZhaWx1cmVEZXRhaWxzPy5sb2dzPy5sZW5ndGgpKSB8fCBcbiAgICAgICAgKEJvb2xlYW4odGhpcy5mYWlsdXJlRGV0YWlscz8uYWlGaXhBcHBsaWVkICYmICh0aGlzLmZhaWx1cmVEZXRhaWxzPy5haUZpeE1lc3NhZ2UgfHwgdGhpcy5jb25maWRlbmNlIHx8IHRoaXMucmVhc29uaW5nPy5sZW5ndGgpKSlcbiAgICAgIClcbiAgfVxuXG4gIG9uTWFrZUN1cnJlbnRCYXNlbGluZShldmVudDogbWFrZUN1cnJlbnRCYXNlbGluZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5tYWtlQ3VycmVudEJhc2VsaW5lLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25VcGxvYWRCYXNlbGluZShldmVudDogdXBsb2FkQmFzZWxpbmVFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudXBsb2FkQmFzZWxpbmUuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkFuYWx5emUoKTogdm9pZCB7XG4gICAgdGhpcy5hbmFseXplLmVtaXQoKTtcbiAgfVxuXG4gIG9uVmlld0Z1bGxMb2dzKCk6IHZvaWQge1xuICAgIHRoaXMudmlld0Z1bGxMb2dzLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2VsZkhlYWxBY3Rpb24oZXZlbnQ6IHsgdHlwZTogU2VsZkhlYWxBY3Rpb247IGhlYWxlZExvY2F0b3I6IHN0cmluZzsgfSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZkhlYWxBY3Rpb24uZW1pdChldmVudCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZm9udC1pbnRlclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1wLTIgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAoY2xpY2spPVwidG9nZ2xlSGVhZGVyKCRldmVudClcIlxuICAgIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNGM0Y0RjZcIj5cbiAgICBcbiAgICA8IS0tIFN0YXR1cyBJY29uIC0tPlxuICAgIDwhLS0gU3VjY2VzcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0U3RhdHVzKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwLjkwMDUgNC45OTk5OUMxMS4xMjg5IDYuMTIwNjQgMTAuOTY2MiA3LjI4NTcxIDEwLjQzOTUgOC4zMDA4OUM5LjkxMjc5IDkuMzE2MDggOS4wNTQgMTAuMTIgOC4wMDYzMSAxMC41Nzg3QzYuOTU4NjIgMTEuMDM3MyA1Ljc4NTM2IDExLjEyMjkgNC42ODIyIDEwLjgyMTJDMy41NzkwNCAxMC41MTk1IDIuNjEyNjUgOS44NDg2OSAxLjk0NDE5IDguOTIwNzFDMS4yNzU3MyA3Ljk5MjcyIDAuOTQ1NjExIDYuODYzNjEgMS4wMDg4OCA1LjcyMTY5QzEuMDcyMTUgNC41Nzk3NiAxLjUyNDk5IDMuNDk0MDQgMi4yOTE4OCAyLjY0NTU4QzMuMDU4NzYgMS43OTcxMiA0LjA5MzM0IDEuMjM3MjEgNS4yMjMwOCAxLjA1OTIyQzYuMzUyODIgMC44ODEyMzMgNy41MDk0NCAxLjA5NTkyIDguNTAwMDUgMS42Njc0OVwiIHN0cm9rZT1cIiMyMkM1NUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjUgNS41TDYgN0wxMSAyXCIgc3Ryb2tlPVwiIzIyQzU1RVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEZhaWx1cmUgLS0+XG4gICAgPGRpdiAqbmdJZj1cImdldFN0YXR1cygpLnRvTG93ZXJDYXNlKCkgPT09ICdmYWlsdXJlJyB8fCBnZXRTdGF0dXMoKS50b0xvd2VyQ2FzZSgpID09PSAnZmFpbGVkJ1wiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiNEQzI2MjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk03LjUgNC41TDQuNSA3LjVcIiBzdHJva2U9XCIjREMyNjI2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNC41IDQuNUw3LjUgNy41XCIgc3Ryb2tlPVwiI0RDMjYyNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFBlbmRpbmcgLS0+XG4gICAgPGRpdiAqbmdJZj1cImdldFN0YXR1cygpLnRvTG93ZXJDYXNlKCkgPT09ICdwZW5kaW5nJ1wiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gUnVubmluZyAtIFNob3cgc3Bpbm5lciAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZ2V0U3RhdHVzKCkudG9Mb3dlckNhc2UoKSA9PT0gJ3J1bm5pbmcnXCI+XG4gICAgICA8c3ZnIGNsYXNzPVwiY3FhLWFuaW1hdGUtc3BpbiBjcWEtdGV4dC1bIzNCODJGNl1cIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxjaXJjbGUgY3g9XCI2XCIgY3k9XCI2XCIgcj1cIjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBmaWxsPVwibm9uZVwiIG9wYWNpdHk9XCIwLjI1XCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTYgMUE1IDUgMCAwIDEgMTEgNlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImdldFN0YXR1cygpLnRvTG93ZXJDYXNlKCkgPT09ICdza2lwcGVkJ1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGNxYS10ZXh0LVsjOUNBM0FGXSBjcWEtdGV4dC1bMTJweF1cIj5cbiAgICAgICAgc2tpcF9uZXh0XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2PjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgcng9XCI0XCIgZmlsbD1cIiNGMEYwRjFcIi8+XG4gICAgICA8cGF0aCBkPVwiTTEzLjUgMy41SDYuNUM1Ljk1IDMuNSA1LjUgMy45NSA1LjUgNC41VjExLjVDNS41IDEyLjA1IDUuOTUgMTIuNSA2LjUgMTIuNUgxMy41QzE0LjA1IDEyLjUgMTQuNSAxMi4wNSAxNC41IDExLjVWNC41QzE0LjUgMy45NSAxNC4wNSAzLjUgMTMuNSAzLjVaTTEzLjUgNC41VjZINi41VjQuNUgxMy41Wk0xMy41IDdWOUg2LjVWN0gxMy41Wk02LjUgMTEuNVYxMEgxMy41VjExLjVINi41WlwiIGZpbGw9XCIjMjEyMTIyXCIvPlxuICAgICAgPC9zdmc+PC9kaXY+XG5cbiAgICA8IS0tIFN0ZXAgTnVtYmVyIGFuZCBUaXRsZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZvbnQtYm9sZCBjcWEtZmxleC0xIGNxYS10ZXh0LVsjMzM0MTU1XSBjcWEtdGV4dC1bMTFweF0gY3FhLWxlYWRpbmctWzEzcHhdIGNxYS1mb250LWludGVyIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICA8c3Bhbj57eyBzdGVwTnVtYmVyIH19LiA8c3BhbiBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9zcGFuPjwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW1sLTEgY3FhLXB4LTEuNSBjcWEtcHktMC41IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMjEyMTIyXSBjcWEtYmctWyNGMEYwRjFdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLW1pbi13LW1heFwiPlxuICAgICAgICBEYXRhYmFzZVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJjb25maWcuc3RlcERlbGV0ZWRcIiBjbGFzcz1cImNxYS1weC0xLjUgY3FhLXB5LVsycHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjQjQyMzE4XSBjcWEtYmctWyNGRUYzRjJdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0ZFRTRFMl1cIj5cbiAgICAgICAgRGVsZXRlZFxuICAgICAgPC9zcGFuPlxuXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS1mb250LWludGVyXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjOUNBM0FGXVwiPlxuICAgICAgICB7eyBmb3JtYXREdXJhdGlvbihkdXJhdGlvbikgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzdmcgKm5nSWY9XCIhaXNMaXZlXCIgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cImlzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTMuNSA1TDcgOC41TDEwLjUgNVwiIHN0cm9rZT1cIiM5Q0EzQUZcIiBzdHJva2Utd2lkdGg9XCIwLjgzMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFeHBhbmRlZCBDb250ZW50IC0tPlxuICA8ZGl2ICpuZ0lmPVwiaXNFeHBhbmRlZCAmJiAhaXNMaXZlXCIgY2xhc3M9XCJjcWEtcC0yICFjcWEtcGwtOSAhY3FhLXByLTYgY3FhLWJnLXdoaXRlXCI+XG4gICAgPCEtLSBTdW1tYXJ5IEJhciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTEuNSBjcWEtcC0zIGNxYS1iZy1bI0ZDRkNGQ10gY3FhLXJvdW5kZWQtWzZweF0gY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0U1RTdFQjtcIiAqbmdJZj1cImdldFN0YXR1cygpIHx8IGR1cmF0aW9uIHx8IGNhY2hlZFF1ZXJ5UmVzdWx0cz8ubGVuZ3RoID4gMCB8fCBkYlRlc3RSZXN1bHQ/LmFzc2VydGlvblJlc3VsdHM/Lmxlbmd0aCA+IDAgfHwgZ2V0VG90YWxSb3dzUmV0dXJuZWQoKSA+IDAgfHwgZ2V0RmFpbHVyZU1lc3NhZ2UoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC00XCI+XG4gICAgICAgIDwhLS0gU3RhdHVzIEJhZGdlIC0tPlxuICAgICAgICA8Y3FhLWJhZGdlXG4gICAgICAgICAgKm5nSWY9XCJnZXRTdGF0dXMoKT8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZhaWx1cmUnIHx8IGdldFN0YXR1cygpPy50b0xvd2VyQ2FzZSgpID09PSAnZmFpbGVkJ1wiXG4gICAgICAgICAgbGFiZWw9XCJGQUlMXCJcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9XCIjREMyNjI2XCJcbiAgICAgICAgICB0ZXh0Q29sb3I9XCIjRkZGRkZGXCJcbiAgICAgICAgICBzaXplPVwic21hbGxcIj5cbiAgICAgICAgPC9jcWEtYmFkZ2U+XG4gICAgICAgIDxjcWEtYmFkZ2VcbiAgICAgICAgICAqbmdJZj1cImdldFN0YXR1cygpPy50b0xvd2VyQ2FzZSgpID09PSAnc3VjY2VzcydcIlxuICAgICAgICAgIGxhYmVsPVwiUEFTU1wiXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yPVwiIzIyQzU1RVwiXG4gICAgICAgICAgdGV4dENvbG9yPVwiI0ZGRkZGRlwiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCI+XG4gICAgICAgIDwvY3FhLWJhZGdlPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtaC1bMTlweF0gY3FhLXctWzFweF0gY3FhLWJnLVsjRTVFN0VCXVwiPjwvZGl2PlxuICAgICAgICBcbiAgICAgICAgPCEtLSBTdW1tYXJ5IFN0YXRzIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTQgY3FhLXRleHQtWzExcHhdIGNxYS1sZWFkaW5nLVsxNnB4XSBjcWEtdGV4dC1bIzZCNzI4MF1cIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImR1cmF0aW9uXCIgY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzEwcHhdIGNxYS10ZXh0LVsjMTExODI3XVwiPlRvdGFsIFRpbWU6IDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyM0QjU1NjNdXCI+e3sgZm9ybWF0RHVyYXRpb24oZHVyYXRpb24pIH19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNhY2hlZFF1ZXJ5UmVzdWx0cz8ubGVuZ3RoID4gMFwiIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzExMTgyN11cIj5RdWVyaWVzOiA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNEI1NTYzXVwiPnt7IGNhY2hlZFF1ZXJ5UmVzdWx0cz8ubGVuZ3RoIHx8IDAgfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGJUZXN0UmVzdWx0Py5hc3NlcnRpb25SZXN1bHRzPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzEwcHhdIGNxYS10ZXh0LVsjMTExODI3XVwiPkFzc2VydGlvbnM6IDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyM0QjU1NjNdXCI+e3sgZGJUZXN0UmVzdWx0Py5hc3NlcnRpb25SZXN1bHRzPy5sZW5ndGggfHwgMCB9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJnZXRUb3RhbFJvd3NSZXR1cm5lZCgpID4gMFwiIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzExMTgyN11cIj5Sb3dzIFJldHVybmVkOiA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNEI1NTYzXVwiPnt7IGdldFRvdGFsUm93c1JldHVybmVkKCkgfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEZhaWx1cmUgQmFubmVyIC0tPlxuICAgICAgPGRpdiBcbiAgICAgICAgKm5nSWY9XCJnZXRGYWlsdXJlTWVzc2FnZSgpXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtcHgtMiBjcWEtcHktMSBjcWEtYmctWyNGRUYyRjJdIGNxYS1yb3VuZGVkLVs0cHhdXCIgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjRkVFMkUyO1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjQjkxQzFDXVwiPlxuICAgICAgICAgIHt7IGdldEZhaWx1cmVNZXNzYWdlKCkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIERhdGFiYXNlIEVudmlyb25tZW50IFNlY3Rpb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cImRiQ29uZmlnXCIgY2xhc3M9XCJjcWEtbWItMS41XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMEIwQjBCXSBjcWEtbWItMlwiPkRhdGFiYXNlIGVudmlyb25tZW50PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1yb3VuZGVkLWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtcHgtNCBjcWEtcHktMiBjcWEtcmVsYXRpdmUgY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTNcIj5cbiAgICAgICAgPCEtLSBFbnZpcm9ubWVudCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzQ1NTU2Q10gY3FhLW1iLTFcIj5FbnZpcm9ubWVudDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtNFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10ZXh0LVsjMEYxNzJCXVwiPnt7IGRiQ29uZmlnLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiY29weUVudmlyb25tZW50KClcIiBjbGFzcz1cImNxYS1jdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTUuMzMzMzIgMTAuNjY2N0gzLjk5OTk5QzMuNjQ2MzcgMTAuNjY2NyAzLjMwNzIzIDEwLjUyNjMgMy4wNTcxOCAxMC4yNzYyQzIuODA3MTMgMTAuMDI2MiAyLjY2NjY2IDkuNjg3MDQgMi42NjY2NiA5LjMzMzQxVjQuMDAwMDhDMi42NjY2NiAzLjY0NjQ2IDIuODA3MTMgMy4zMDczMiAzLjA1NzE4IDMuMDU3MjdDMy4zMDcyMyAyLjgwNzIyIDMuNjQ2MzcgMi42NjY3NSAzLjk5OTk5IDIuNjY2NzVIOS4zMzMzMkM5LjY4Njk1IDIuNjY2NzUgMTAuMDI2MSAyLjgwNzIyIDEwLjI3NjEgMy4wNTcyN0MxMC41MjYyIDMuMzA3MzIgMTAuNjY2NyAzLjY0NjQ2IDEwLjY2NjcgNC4wMDAwOFY1LjMzMzQxTTYuNjY2NjYgMTMuMzMzNEgxMkMxMi4zNTM2IDEzLjMzMzQgMTIuNjkyOCAxMy4xOTI5IDEyLjk0MjggMTIuOTQyOUMxMy4xOTI4IDEyLjY5MjggMTMuMzMzMyAxMi4zNTM3IDEzLjMzMzMgMTIuMDAwMVY2LjY2Njc1QzEzLjMzMzMgNi4zMTMxMyAxMy4xOTI4IDUuOTczOTkgMTIuOTQyOCA1LjcyMzk0QzEyLjY5MjggNS40NzM4OSAxMi4zNTM2IDUuMzMzNDEgMTIgNS4zMzM0MUg2LjY2NjY2QzYuMzEzMDMgNS4zMzM0MSA1Ljk3MzkgNS40NzM4OSA1LjcyMzg1IDUuNzIzOTRDNS40NzM4IDUuOTczOTkgNS4zMzMzMiA2LjMxMzEzIDUuMzMzMzIgNi42NjY3NVYxMi4wMDAxQzUuMzMzMzIgMTIuMzUzNyA1LjQ3MzggMTIuNjkyOCA1LjcyMzg1IDEyLjk0MjlDNS45NzM5IDEzLjE5MjkgNi4zMTMwMyAxMy4zMzM0IDYuNjY2NjYgMTMuMzMzNFpcIiBzdHJva2U9XCIjNjM2MzYzXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNDU1NTZDXSBjcWEtbWItMVwiPlR5cGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdGV4dC1bIzBGMTcyQl1cIj57eyBkYkNvbmZpZy5kYlR5cGUgfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMS41XCIgKm5nSWY9XCJjYWNoZWRRdWVyeVJlc3VsdHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMwQjBCMEJdIGNxYS1tYi0yXCI+UXVlcnkgRXhlY3V0aW9uPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtcHgtNCBjcWEtcHktMiBjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzEwcHhdXCIgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjRTJFOEYwO1wiPlxuICAgICAgICA8Y3FhLWRiLXF1ZXJ5LWV4ZWN1dGlvbi1pdGVtXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXJ5SXRlbSBvZiBjYWNoZWRRdWVyeVJlc3VsdHM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlRdWVyeUtleVwiXG4gICAgICAgICAgW3F1ZXJ5TnVtYmVyXT1cImkgKyAxXCJcbiAgICAgICAgICBbcXVlcnlLZXldPVwicXVlcnlJdGVtLmtleVwiXG4gICAgICAgICAgW3F1ZXJ5UmVzdWx0XT1cInF1ZXJ5SXRlbS5yZXN1bHRcIlxuICAgICAgICAgIFtzdGF0dXNdPVwiZ2V0UXVlcnlTdGF0dXMocXVlcnlJdGVtLmtleSlcIlxuICAgICAgICAgIFt2YXJpYWJsZU5hbWVdPVwicXVlcnlJdGVtLmtleVwiPlxuICAgICAgICA8L2NxYS1kYi1xdWVyeS1leGVjdXRpb24taXRlbT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBWZXJpZmljYXRpb24gU2VjdGlvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZGJUZXN0UmVzdWx0Py5hc3NlcnRpb25SZXN1bHRzICYmIGRiVGVzdFJlc3VsdD8uYXNzZXJ0aW9uUmVzdWx0cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzBCMEIwQl0gY3FhLW1iLTJcIj5WZXJpZmljYXRpb248L2Rpdj4gICAgICBcbiAgICAgIDwhLS0gVmVyaWZpY2F0aW9uIFRhYmxlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1bMTBweF0gY3FhLXB4LTQgY3FhLXB5LTIgY3FhLW92ZXJmbG93LWhpZGRlblwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0UyRThGMDtcIj5cbiAgICAgICAgPCEtLSBTZWdtZW50IENvbnRyb2wgZm9yIEZpbHRlcnMgLS0+XG4gICAgICAgIDxjcWEtc2VnbWVudC1jb250cm9sXG4gICAgICAgICAgW3NlZ21lbnRzXT1cImZpbHRlclNlZ21lbnRzXCJcbiAgICAgICAgICBbdmFsdWVdPVwidmVyaWZpY2F0aW9uRmlsdGVyXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8L2NxYS1zZWdtZW50LWNvbnRyb2w+XG4gICAgICAgIDxjcWEtdGFibGUtdGVtcGxhdGVcbiAgICAgICAgICBbY29sdW1uc109XCJ2ZXJpZmljYXRpb25UYWJsZUNvbHVtbnNcIlxuICAgICAgICAgIFtkYXRhXT1cImdldFRhYmxlRGF0YSgpXCJcbiAgICAgICAgICBbcGFnZUluZGV4XT1cInBhZ2VJbmRleFwiXG4gICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICBbaXNFbXB0eVN0YXRlXT1cImlzRW1wdHlUYWJsZVwiXG4gICAgICAgICAgW2VtcHR5U3RhdGVDb25maWddPVwiZW1wdHlTdGF0ZUNvbmZpZ1wiXG4gICAgICAgICAgW3Nob3dTZWFyY2hCYXJdPVwiZmFsc2VcIlxuICAgICAgICAgIFtzaG93RmlsdGVyQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2hvd1NldHRpbmdzQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2hvd0F1dG9SZWZyZXNoQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2hvd090aGVyQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2hvd0ZpbHRlclBhbmVsXT1cImZhbHNlXCJcbiAgICAgICAgICBbc2VydmVyU2lkZVBhZ2luYXRpb25dPVwiZmFsc2VcIlxuICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDwvY3FhLXRhYmxlLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNlbGYgSGVhbCBBbmFseXNpcyAtLT5cbiAgICA8Y3FhLXNlbGYtaGVhbC1hbmFseXNpcyBcbiAgICAgICpuZ0lmPVwic2VsZkhlYWxBbmFseXNpc1wiIFxuICAgICAgW29yaWdpbmFsTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLm9yaWdpbmFsTG9jYXRvclwiXG4gICAgICBbaGVhbGVkTG9jYXRvcl09XCJzZWxmSGVhbEFuYWx5c2lzLmhlYWxlZExvY2F0b3JcIlxuICAgICAgW2NvbmZpZGVuY2VdPVwic2VsZkhlYWxBbmFseXNpcy5jb25maWRlbmNlXCJcbiAgICAgIFtoZWFsTWV0aG9kXT1cInNlbGZIZWFsQW5hbHlzaXMuaGVhbE1ldGhvZFwiXG4gICAgICBbaXNMb2FkaW5nQWNjZXB0XT1cImdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPyBnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyKCkuaXNMb2FkaW5nQWNjZXB0IDogZmFsc2VcIlxuICAgICAgW2lzTG9hZGluZ01vZGlmeUFjY2VwdF09XCJnZXRTZWxmSGVhbExvYWRpbmdTdGF0ZXNIYW5kbGVyID8gZ2V0U2VsZkhlYWxMb2FkaW5nU3RhdGVzSGFuZGxlcigpLmlzTG9hZGluZ01vZGlmeUFjY2VwdCA6IGZhbHNlXCJcbiAgICAgIChhY3Rpb24pPVwib25TZWxmSGVhbEFjdGlvbigkZXZlbnQpXCI+XG4gICAgPC9jcWEtc2VsZi1oZWFsLWFuYWx5c2lzPlxuXG4gICAgPCEtLSBUaW1pbmcgQnJlYWtkb3duIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJ0aW1pbmdCcmVha2Rvd25cIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktZW5kIGNxYS1nYXAtNSBjcWEtcHQtNCBjcWEtcHgtNCBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICA8ZGl2Pjxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIiBzdHJva2U9XCIjOUNBM0FGXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNiAzVjZMOCA3XCIgc3Ryb2tlPVwiIzlDQTNBRlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz48L2Rpdj5cbiAgICAgICAgPHNwYW4+VGltaW5nIGJyZWFrZG93bjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1kaWFsb2ctbXV0ZWQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTNcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBBcHAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV1cIj57eyBmb3JtYXREdXJhdGlvbih0aW1pbmdCcmVha2Rvd24uYXBwKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+PHN2ZyB3aWR0aD1cIjFcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMSAxMVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNLTMuODE0N2UtMDYgMTAuMzJWLTcuMTUyNTZlLTA3SDAuOTU5OTk2VjEwLjMySC0zLjgxNDdlLTA2WlwiIGZpbGw9XCIjRTVFN0VCXCIvPjwvc3ZnPjwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIFRvb2wgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV1cIj57eyBmb3JtYXREdXJhdGlvbih0aW1pbmdCcmVha2Rvd24udG9vbCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBWaWV3IE1vcmUgRmFpbGVkIFN0ZXAgQnV0dG9uIC0gc2hvd24gd2hlbiBleHBhbmRlZCBhbmQgZmFpbHVyZSBkZXRhaWxzIGV4aXN0IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzaG93Vmlld01vcmVCdXR0b25cIiBjbGFzcz1cImNxYS1tdC0yIGNxYS1weC00XCI+XG4gICAgICA8Y3FhLXZpZXctbW9yZS1mYWlsZWQtc3RlcC1idXR0b25cbiAgICAgICAgW3RpbWluZ0JyZWFrZG93bl09XCJ0aW1pbmdCcmVha2Rvd25cIlxuICAgICAgICBbc3ViU3RlcHNdPVwiZ2V0U3ViU3RlcHNGb3JGYWlsZWRTdGVwKClcIlxuICAgICAgICBbZmFpbHVyZURldGFpbHNdPVwiZmFpbHVyZURldGFpbHNcIlxuICAgICAgICBbaXNFeHBhbmRlZF09XCJzaG93RmFpbGVkU3RlcERldGFpbHNcIlxuICAgICAgICAodmlld01vcmVDbGljayk9XCJvblZpZXdNb3JlRmFpbGVkU3RlcENsaWNrKCRldmVudClcIj5cbiAgICAgIDwvY3FhLXZpZXctbW9yZS1mYWlsZWQtc3RlcC1idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFVwZGF0ZWQgRmFpbGVkIFN0ZXAgQ29tcG9uZW50IC0gc2hvd24gd2hlbiBidXR0b24gaXMgY2xpY2tlZCAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1ZpZXdNb3JlQnV0dG9uICYmIHNob3dGYWlsZWRTdGVwRGV0YWlscyAmJiBmYWlsdXJlRGV0YWlsc1wiIGNsYXNzPVwiY3FhLW10LTIgY3FhLXB4LTRcIj5cbiAgICAgIDxjcWEtdXBkYXRlZC1mYWlsZWQtc3RlcFxuICAgICAgICBbdGVzdFN0ZXBSZXN1bHRJZF09XCJ0ZXN0U3RlcFJlc3VsdElkXCJcbiAgICAgICAgW3RpbWluZ0JyZWFrZG93bl09XCJ0aW1pbmdCcmVha2Rvd25cIlxuICAgICAgICBbZXhwYW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtzdWJTdGVwc109XCJnZXRTdWJTdGVwc0ZvckZhaWxlZFN0ZXAoKVwiXG4gICAgICAgIFtmYWlsdXJlRGV0YWlsc109XCJmYWlsdXJlRGV0YWlsc1wiXG4gICAgICAgIFtyZWFzb25pbmddPVwicmVhc29uaW5nXCJcbiAgICAgICAgW2NvbmZpZGVuY2VdPVwiY29uZmlkZW5jZVwiXG4gICAgICAgIFtpc1VwbG9hZGluZ0Jhc2VsaW5lXT1cImlzVXBsb2FkaW5nQmFzZWxpbmVcIlxuICAgICAgICBbaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVdPVwiaXNNYWtpbmdDdXJyZW50QmFzZWxpbmVcIlxuICAgICAgICBbaXNMaXZlXT1cImlzTGl2ZVwiXG4gICAgICAgIChtYWtlQ3VycmVudEJhc2VsaW5lKT1cIm9uTWFrZUN1cnJlbnRCYXNlbGluZSgkZXZlbnQpXCJcbiAgICAgICAgKHVwbG9hZEJhc2VsaW5lKT1cIm9uVXBsb2FkQmFzZWxpbmUoJGV2ZW50KVwiXG4gICAgICAgIChhbmFseXplKT1cIm9uQW5hbHl6ZSgpXCJcbiAgICAgICAgKHZpZXdGdWxsTG9ncyk9XCJvblZpZXdGdWxsTG9ncygpXCI+XG4gICAgICA8L2NxYS11cGRhdGVkLWZhaWxlZC1zdGVwPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
@@ -2,4 +2,4 @@
2
2
  * Models and interfaces for execution screen step components
3
3
  */
4
4
  export {};
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLXN0ZXAubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2V4ZWN1dGlvbi1zdGVwLm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWxzIGFuZCBpbnRlcmZhY2VzIGZvciBleGVjdXRpb24gc2NyZWVuIHN0ZXAgY29tcG9uZW50c1xuICovXG5cbmV4cG9ydCB0eXBlIFN0ZXBTdGF0dXMgPSAnc3VjY2VzcycgfCAnZmFpbGVkJyB8ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdza2lwcGVkJyB8ICdTVUNDRVNTJyB8ICdGQUlMRUQnIHwgJ1BFTkRJTkcnIHwgJ1JVTk5JTkcnIHwgJ1NLSVBQRUQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWluZ0JyZWFrZG93biB7XG4gIGFwcDogbnVtYmVyOyAvLyBpbiBzZWNvbmRzXG4gIHRvb2w6IG51bWJlcjsgLy8gaW4gc2Vjb25kc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YlN0ZXAge1xuICBpZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXM6IFN0ZXBTdGF0dXM7XG4gIGR1cmF0aW9uOiBudW1iZXI7IC8vIGluIHNlY29uZHNcbiAgdGltZXN0YW1wPzogc3RyaW5nOyAvLyBvcHRpb25hbCB0aW1lc3RhbXAgbGlrZSBcIjAwOjEyXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb29wSXRlcmF0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZzsgLy8gZS5nLiwgXCJJdGVyIDIgKHByb2R1Y3Rpb24pXCJcbiAgc3RhdHVzOiBTdGVwU3RhdHVzO1xuICBzdWJTdGVwcz86IFN1YlN0ZXBbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25CcmFuY2gge1xuICB0eXBlOiAnaWYnIHwgJ2Vsc2UnIHwgJ2Vsc2UgaWYnO1xuICBsYWJlbDogc3RyaW5nOyAvLyBlLmcuLCBcIlByZW1pdW0gdXNlclwiIG9yIFwiRnJlZSB1c2VyXCJcbiAgZXhlY3V0ZWQ6IGJvb2xlYW47XG4gIHN1YlN0ZXBzPzogU3ViU3RlcFtdO1xuICBicmFuY2hTdGVwSWQ/OiBzdHJpbmcgfCBudW1iZXI7IC8vIElEIG9mIHRoZSBicmFuY2ggc3RlcCB0byBsb2FkIGNoaWxkcmVuIGZyb21cbiAgaXNJZkJyYW5jaD86IGJvb2xlYW47IC8vIFdoZXRoZXIgdGhpcyBpcyB0aGUgbWFpbiBJRiBicmFuY2hcbiAgYnJhbmNoU3RlcDogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmVlbnNob3REYXRhIHtcbiAgYmFzZWxpbmU/OiBzdHJpbmc7IC8vIFVSTCBvciBiYXNlNjRcbiAgY3VycmVudD86IHN0cmluZzsgLy8gVVJMIG9yIGJhc2U2NFxuICBkaWZmZXJlbmNlPzogc3RyaW5nOyAvLyBVUkwgb3IgYmFzZTY0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nRW50cnkge1xuICBsZXZlbDogJ2luZm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZURldGFpbHMge1xuICB0ZXN0U3RlcElkOiBzdHJpbmc7XG4gIGV4cGVjdGVkOiBzdHJpbmc7XG4gIGFjdHVhbDogc3RyaW5nO1xuICBmYWlsZWRBY3Rpb24/OiBzdHJpbmc7IC8vIFRoZSBhY3Rpb24gdGhhdCBmYWlsZWRcbiAgYWlGaXhBcHBsaWVkPzogYm9vbGVhbjtcbiAgYWlGaXhNZXNzYWdlPzogc3RyaW5nO1xuICBzY3JlZW5zaG90cz86IFNjcmVlbnNob3REYXRhO1xuICBsb2dzPzogTG9nRW50cnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlU3RlcENvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlc3RTdGVwUmVzdWx0SWQ6IHN0cmluZztcbiAgc3RlcE51bWJlcjogc3RyaW5nOyAvLyBlLmcuLCBcIjFcIiwgXCIyLjFcIiwgXCIzLjIuMVwiXG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN0YXR1czogU3RlcFN0YXR1cztcbiAgZHVyYXRpb246IG51bWJlcjsgLy8gdG90YWwgZHVyYXRpb24gaW4gc2Vjb25kc1xuICB0aW1pbmdCcmVha2Rvd24/OiBUaW1pbmdCcmVha2Rvd247XG4gIGV4cGFuZGVkPzogYm9vbGVhbjsgLy8gd2hldGhlciB0aGUgc3RlcCBpcyBleHBhbmRlZCBieSBkZWZhdWx0XG4gIGZhaWx1cmVEZXRhaWxzPzogRmFpbHVyZURldGFpbHM7XG4gIHJlYXNvbmluZz86IHN0cmluZ1tdO1xuICBjb25maWRlbmNlPzogc3RyaW5nO1xuICAvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZm9yIGxpdmUgZXhlY3V0aW9uIGFuZCBydW50aW1lIHVzZVxuICBzZWxlY3RlZEl0ZXJhdGlvbklkPzogc3RyaW5nOyAvLyB3aGljaCBpdGVyYXRpb24gdG8gZGlzcGxheVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGZIZWFsQW5hbHlzaXNEYXRhIHtcbiAgb3JpZ2luYWxMb2NhdG9yOiBzdHJpbmc7XG4gIGhlYWxlZExvY2F0b3I6IHN0cmluZztcbiAgY29uZmlkZW5jZTogbnVtYmVyOyAvLyAwLTEwMFxuICBoZWFsTWV0aG9kOiBzdHJpbmc7IC8vIGUuZy4sIFwiU2VtYW50aWMgQXR0cmlidXRlIE1hdGNoaW5nXCJcbn1cblxuZXhwb3J0IHR5cGUgU2VsZkhlYWxBY3Rpb24gPSAnYWNjZXB0JyB8ICdyZWplY3QnIHwgJ21vZGlmeS1hY2NlcHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2ljU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2Jhc2ljJztcbiAgc3ViU3RlcHM6IFN1YlN0ZXBbXTtcbiAgc2VsZkhlYWxBbmFseXNpcz86IFNlbGZIZWFsQW5hbHlzaXNEYXRhO1xuICBzZWxmSGVhbGVkPzogYm9vbGVhbjsgLy8gSW5kaWNhdGVzIGlmIHNlbGYtaGVhbGluZyB3YXMgYXBwbGllZFxuICBzZWxmSGVhbER1cmF0aW9uPzogbnVtYmVyOyAvLyBEdXJhdGlvbiBvZiBzZWxmLWhlYWxpbmcgcHJvY2Vzc1xuICBuZXN0ZWRTdGVwcz86IEV4ZWN1dGlvblN0ZXBDb25maWdbXTsgLy8gbmVzdGVkIGNoaWxkIHN0ZXBzIGZvciByZWN1cnNpdmUgcmVuZGVyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnc3RlcC1ncm91cCc7XG4gIGdyb3VwTmFtZTogc3RyaW5nOyAvLyBlLmcuLCBcIk5hdmlnYXRpb25cIiwgXCJDaGVja291dCBmbG93XCJcbiAgc3RlcHM6IEV4ZWN1dGlvblN0ZXBDb25maWdbXTsgLy8gbmVzdGVkIHN0ZXBzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9vcFN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdsb29wJztcbiAgbG9vcFR5cGU/OiAnZm9yJyB8ICd3aGlsZSc7XG4gIGl0ZXJhdGlvbnM6IExvb3BJdGVyYXRpb25bXTtcbiAgc2VsZWN0ZWRJdGVyYXRpb25JZD86IHN0cmluZzsgLy8gd2hpY2ggaXRlcmF0aW9uIHRvIGRpc3BsYXlcbiAgZGVmYXVsdEl0ZXJhdGlvbj86ICdmaXJzdCcgfCAnbGFzdCc7IC8vIGRlZmF1bHQgaXRlcmF0aW9uIHRvIHNob3dcbiAgbmVzdGVkU3RlcHM/OiBFeGVjdXRpb25TdGVwQ29uZmlnW107IC8vIHN0ZXBzIG5lc3RlZCB3aXRoaW4gdGhlIGxvb3BcbiAgc2hvd1ZpZXdBbGxJdGVyYXRpb25zPzogYm9vbGVhbjtcbiAgc3ViU3RlcHM/OiBTdWJTdGVwW107XG4gIGl0ZXJhdGlvbkRhdGE/OiBhbnk7IC8vIGRhdGEgZm9yIGVhY2ggaXRlcmF0aW9uIGluIGxpdmUgZXhlY3V0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2NvbmRpdGlvbic7XG4gIGNvbmRpdGlvblRleHQ6IHN0cmluZzsgLy8gZS5nLiwgXCJpZiB1c2VyIHR5cGUgaXMgJ1ByZW1pdW0nXCJcbiAgYnJhbmNoZXM6IENvbmRpdGlvbkJyYW5jaFtdO1xuICBuZXN0ZWRTdGVwcz86IEV4ZWN1dGlvblN0ZXBDb25maWdbXTsgLy8gbmVzdGVkIGNoaWxkIHN0ZXBzIGZvciByZWN1cnNpdmUgcmVuZGVyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2ZhaWxlZCc7XG4gIHN1YlN0ZXBzOiBTdWJTdGVwW107XG4gIGZhaWx1cmVEZXRhaWxzOiBGYWlsdXJlRGV0YWlscztcbiAgcmVhc29uaW5nPzogc3RyaW5nW107XG4gIGNvbmZpZGVuY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlBZ2VudEFjdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGU6ICdleHRyYWN0JyB8ICd2YWxpZGF0ZScgfCAnQUlfQUdFTlRfQUNUSU9OJyB8ICdUWVBFJyB8ICdDTElDSyc7XG4gIHN0YXR1czogU3RlcFN0YXR1cztcbiAgY29uZmlkZW5jZT86IG51bWJlcjsgLy8gMC0xMDBcbiAgZHVyYXRpb246IG51bWJlcjtcbiAgcmVhc29uaW5nPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJQWdlbnRTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnYWktYWdlbnQnO1xuICBwcm9tcHQ6IHN0cmluZztcbiAgb3B0aW1pemVkUnVuPzogYm9vbGVhbjtcbiAgYWN0aW9uQ291bnQ/OiBudW1iZXI7XG4gIGFjdGlvbnM6IEFJQWdlbnRBY3Rpb25bXTtcbiAgc2VsZWN0ZWRUYWI/OiAnYWN0aW9uLXRyYWNlJyB8ICdwbGFubmVyLXRpbWVsaW5lJyB8ICdhaS1yZWFzb25pbmcnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaUFzc2VydGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXR1czogJ3Bhc3NlZCcgfCAnZmFpbGVkJztcbiAgZXhwZWN0ZWQ6IHN0cmluZztcbiAgYWN0dWFsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2FwaSc7XG4gIG1ldGhvZDogc3RyaW5nOyAvLyBHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBldGMuXG4gIGVuZHBvaW50OiBzdHJpbmc7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgcmVzcG9uc2VUaW1lOiBudW1iZXI7IC8vIGluIG1pbGxpc2Vjb25kc1xuICByZXF1ZXN0Qm9keT86IGFueTtcbiAgcmVzcG9uc2VCb2R5PzogYW55O1xuICByZXF1ZXN0SGVhZGVycz86IGFueTtcbiAgcmVzcG9uc2VIZWFkZXJzPzogYW55O1xuICBhc3NlcnRpb25zPzogQXBpQXNzZXJ0aW9uW107XG4gIGluaXRpYWxBY3Rpb25zPzogU3ViU3RlcFtdOyAvLyBBY3Rpb25zIGJlZm9yZSB0aGUgQVBJIGNhbGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlRG93bmxvYWRTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnZmlsZS1kb3dubG9hZCc7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGZpbGVUeXBlOiBzdHJpbmc7IC8vIFBERiwgQ1NWLCBldGMuXG4gIGZpbGVTaXplPzogc3RyaW5nOyAvLyBlLmcuLCBcIjIuNCBNQlwiXG4gIGZpbGVQYXRoPzogc3RyaW5nO1xuICBkb3dubG9hZGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4dHJhY3RlZEZpZWxkIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgY29uZmlkZW5jZTogbnVtYmVyOyAvLyAwLTEwMFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmaWNhdGlvbkNoZWNrIHtcbiAgaWQ6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzOiAncGFzcycgfCAnZmFpbCc7XG4gIGV4cGVjdGVkOiBzdHJpbmc7XG4gIGFjdHVhbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvY3VtZW50VmVyaWZpY2F0aW9uU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2RvY3VtZW50LXZlcmlmaWNhdGlvbic7XG4gIGRvY3VtZW50U2NyZWVuc2hvdD86IHN0cmluZzsgLy8gVVJMIG9yIGJhc2U2NFxuICBleHRyYWN0ZWRGaWVsZHM6IEV4dHJhY3RlZEZpZWxkW107XG4gIHZlcmlmaWNhdGlvbkNoZWNrczogVmVyaWZpY2F0aW9uQ2hlY2tbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXZlU3ViU3RlcCB7XG4gIGlkOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZzsgLy8gVGV4dCBmcm9tIHNvY2tldFxuICBpc1J1bm5pbmc6IGJvb2xlYW47IC8vIHRydWUgPSBzaG93IGxvYWRlciwgZmFsc2UgPSBzaG93IGljb25cbiAgZHVyYXRpb24/OiBudW1iZXI7IC8vIGluIHNlY29uZHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXZlRXhlY3V0aW9uU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2xpdmUtZXhlY3V0aW9uJztcbiAgc3ViU3RlcHM6IExpdmVTdWJTdGVwW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJRdWVyeVJlc3VsdCB7XG4gIGRhdGE6IGFueVtdO1xuICBxdWVyeTogc3RyaW5nO1xuICBleGVjdXRlZEF0Pzogc3RyaW5nO1xuICBkdXJhdGlvbj86IG51bWJlcjsgLy8gaW4gc2Vjb25kc1xuICBba2V5OiBzdHJpbmddOiBhbnk7IC8vIEZvciBkeW5hbWljIGtleXMgbGlrZSBcIkRlbW9fdXNlclwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJBc3NlcnRpb25SZXN1bHQge1xuICB2YXJpYWJsZU5hbWU6IHN0cmluZztcbiAganNvblBhdGg6IHN0cmluZztcbiAgZXhwZWN0ZWRWYWx1ZTogYW55O1xuICBhY3R1YWxWYWx1ZTogYW55O1xuICB2ZXJpZmljYXRpb25UeXBlOiBzdHJpbmc7XG4gIGV4cGVjdGVkVHlwZTogc3RyaW5nO1xuICBwYXNzZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJUZXN0UmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgcmVzdWx0czogeyBba2V5OiBzdHJpbmddOiBEYlF1ZXJ5UmVzdWx0IH07XG4gIGFzc2VydGlvblJlc3VsdHM6IERiQXNzZXJ0aW9uUmVzdWx0W107XG4gIGFsbEFzc2VydGlvbnNQYXNzZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJWZXJpZmljYXRpb25TdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnZGItdmVyaWZpY2F0aW9uJztcbiAgZGJUZXN0UmVzdWx0OiBEYlRlc3RSZXN1bHQ7XG4gIGRiQ29uZmlnPzoge1xuICAgIG5hbWU6IHN0cmluZzsgLy8gRW52aXJvbm1lbnQgbmFtZVxuICAgIGRiVHlwZTogc3RyaW5nOyAvLyBEYXRhYmFzZSB0eXBlIChNeVNRTCwgU1FMU2VydmVyLCBldGMuKVxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByZXJlcXVpc2l0ZUl0ZW0ge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nOyAvLyBlLmcuLCBcIlByZXJlcXVpc2l0ZSAxOiBMb2dpbiBmbG93XCJcbiAgc3RhdHVzOiBTdGVwU3RhdHVzO1xuICBkdXJhdGlvbjogbnVtYmVyOyAvLyBpbiBzZWNvbmRzXG4gIHN0ZXBDb25maWc/OiBFeGVjdXRpb25TdGVwQ29uZmlnOyAvLyBPcHRpb25hbDogZnVsbCBzdGVwIGNvbmZpZyB0byB2aWV3IGRldGFpbHNcbn1cblxuZXhwb3J0IHR5cGUgRXhlY3V0aW9uU3RlcENvbmZpZyA9XG4gIHwgQmFzaWNTdGVwQ29uZmlnXG4gIHwgU3RlcEdyb3VwQ29uZmlnXG4gIHwgTG9vcFN0ZXBDb25maWdcbiAgfCBDb25kaXRpb25TdGVwQ29uZmlnXG4gIHwgRmFpbGVkU3RlcENvbmZpZ1xuICB8IEFJQWdlbnRTdGVwQ29uZmlnXG4gIHwgQXBpU3RlcENvbmZpZ1xuICB8IEZpbGVEb3dubG9hZFN0ZXBDb25maWdcbiAgfCBEb2N1bWVudFZlcmlmaWNhdGlvblN0ZXBDb25maWdcbiAgfCBMaXZlRXhlY3V0aW9uU3RlcENvbmZpZ1xuICB8IERiVmVyaWZpY2F0aW9uU3RlcENvbmZpZztcbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLXN0ZXAubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2V4ZWN1dGlvbi1zdGVwLm1vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWxzIGFuZCBpbnRlcmZhY2VzIGZvciBleGVjdXRpb24gc2NyZWVuIHN0ZXAgY29tcG9uZW50c1xuICovXG5cbmV4cG9ydCB0eXBlIFN0ZXBTdGF0dXMgPSAnc3VjY2VzcycgfCAnZmFpbGVkJyB8ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdza2lwcGVkJyB8ICdTVUNDRVNTJyB8ICdGQUlMRUQnIHwgJ1BFTkRJTkcnIHwgJ1JVTk5JTkcnIHwgJ1NLSVBQRUQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWluZ0JyZWFrZG93biB7XG4gIGFwcDogbnVtYmVyOyAvLyBpbiBzZWNvbmRzXG4gIHRvb2w6IG51bWJlcjsgLy8gaW4gc2Vjb25kc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YlN0ZXAge1xuICBpZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXM6IFN0ZXBTdGF0dXM7XG4gIGR1cmF0aW9uOiBudW1iZXI7IC8vIGluIHNlY29uZHNcbiAgdGltZXN0YW1wPzogc3RyaW5nOyAvLyBvcHRpb25hbCB0aW1lc3RhbXAgbGlrZSBcIjAwOjEyXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb29wSXRlcmF0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZzsgLy8gZS5nLiwgXCJJdGVyIDIgKHByb2R1Y3Rpb24pXCJcbiAgc3RhdHVzOiBTdGVwU3RhdHVzO1xuICBzdWJTdGVwcz86IFN1YlN0ZXBbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25CcmFuY2gge1xuICB0eXBlOiAnaWYnIHwgJ2Vsc2UnIHwgJ2Vsc2UgaWYnO1xuICBsYWJlbDogc3RyaW5nOyAvLyBlLmcuLCBcIlByZW1pdW0gdXNlclwiIG9yIFwiRnJlZSB1c2VyXCJcbiAgZXhlY3V0ZWQ6IGJvb2xlYW47XG4gIHN1YlN0ZXBzPzogU3ViU3RlcFtdO1xuICBicmFuY2hTdGVwSWQ/OiBzdHJpbmcgfCBudW1iZXI7IC8vIElEIG9mIHRoZSBicmFuY2ggc3RlcCB0byBsb2FkIGNoaWxkcmVuIGZyb21cbiAgaXNJZkJyYW5jaD86IGJvb2xlYW47IC8vIFdoZXRoZXIgdGhpcyBpcyB0aGUgbWFpbiBJRiBicmFuY2hcbiAgYnJhbmNoU3RlcDogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmVlbnNob3REYXRhIHtcbiAgYmFzZWxpbmU/OiBzdHJpbmc7IC8vIFVSTCBvciBiYXNlNjRcbiAgY3VycmVudD86IHN0cmluZzsgLy8gVVJMIG9yIGJhc2U2NFxuICBkaWZmZXJlbmNlPzogc3RyaW5nOyAvLyBVUkwgb3IgYmFzZTY0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nRW50cnkge1xuICBsZXZlbDogJ2luZm8nIHwgJ3dhcm5pbmcnIHwgJ2Vycm9yJztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB0aW1lc3RhbXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZURldGFpbHMge1xuICB0ZXN0U3RlcElkOiBzdHJpbmc7XG4gIGV4cGVjdGVkOiBzdHJpbmc7XG4gIGFjdHVhbDogc3RyaW5nO1xuICBmYWlsZWRBY3Rpb24/OiBzdHJpbmc7IC8vIFRoZSBhY3Rpb24gdGhhdCBmYWlsZWRcbiAgYWlGaXhBcHBsaWVkPzogYm9vbGVhbjtcbiAgYWlGaXhNZXNzYWdlPzogc3RyaW5nO1xuICBzY3JlZW5zaG90cz86IFNjcmVlbnNob3REYXRhO1xuICBsb2dzPzogTG9nRW50cnlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlU3RlcENvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG4gIHRlc3RTdGVwUmVzdWx0SWQ6IHN0cmluZztcbiAgc3RlcE51bWJlcjogc3RyaW5nOyAvLyBlLmcuLCBcIjFcIiwgXCIyLjFcIiwgXCIzLjIuMVwiXG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN0YXR1czogU3RlcFN0YXR1cztcbiAgZHVyYXRpb246IG51bWJlcjsgLy8gdG90YWwgZHVyYXRpb24gaW4gc2Vjb25kc1xuICB0aW1pbmdCcmVha2Rvd24/OiBUaW1pbmdCcmVha2Rvd247XG4gIGV4cGFuZGVkPzogYm9vbGVhbjsgLy8gd2hldGhlciB0aGUgc3RlcCBpcyBleHBhbmRlZCBieSBkZWZhdWx0XG4gIGZhaWx1cmVEZXRhaWxzPzogRmFpbHVyZURldGFpbHM7XG4gIHJlYXNvbmluZz86IHN0cmluZ1tdO1xuICBjb25maWRlbmNlPzogc3RyaW5nO1xuICBzdGVwRGVsZXRlZD86IGJvb2xlYW47XG4gIC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgbGl2ZSBleGVjdXRpb24gYW5kIHJ1bnRpbWUgdXNlXG4gIHNlbGVjdGVkSXRlcmF0aW9uSWQ/OiBzdHJpbmc7IC8vIHdoaWNoIGl0ZXJhdGlvbiB0byBkaXNwbGF5XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZkhlYWxBbmFseXNpc0RhdGEge1xuICBvcmlnaW5hbExvY2F0b3I6IHN0cmluZztcbiAgaGVhbGVkTG9jYXRvcjogc3RyaW5nO1xuICBjb25maWRlbmNlOiBudW1iZXI7IC8vIDAtMTAwXG4gIGhlYWxNZXRob2Q6IHN0cmluZzsgLy8gZS5nLiwgXCJTZW1hbnRpYyBBdHRyaWJ1dGUgTWF0Y2hpbmdcIlxufVxuXG5leHBvcnQgdHlwZSBTZWxmSGVhbEFjdGlvbiA9ICdhY2NlcHQnIHwgJ3JlamVjdCcgfCAnbW9kaWZ5LWFjY2VwdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzaWNTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnYmFzaWMnO1xuICBzdWJTdGVwczogU3ViU3RlcFtdO1xuICBzZWxmSGVhbEFuYWx5c2lzPzogU2VsZkhlYWxBbmFseXNpc0RhdGE7XG4gIHNlbGZIZWFsZWQ/OiBib29sZWFuOyAvLyBJbmRpY2F0ZXMgaWYgc2VsZi1oZWFsaW5nIHdhcyBhcHBsaWVkXG4gIHNlbGZIZWFsRHVyYXRpb24/OiBudW1iZXI7IC8vIER1cmF0aW9uIG9mIHNlbGYtaGVhbGluZyBwcm9jZXNzXG4gIG5lc3RlZFN0ZXBzPzogRXhlY3V0aW9uU3RlcENvbmZpZ1tdOyAvLyBuZXN0ZWQgY2hpbGQgc3RlcHMgZm9yIHJlY3Vyc2l2ZSByZW5kZXJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwR3JvdXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdzdGVwLWdyb3VwJztcbiAgZ3JvdXBOYW1lOiBzdHJpbmc7IC8vIGUuZy4sIFwiTmF2aWdhdGlvblwiLCBcIkNoZWNrb3V0IGZsb3dcIlxuICBzdGVwczogRXhlY3V0aW9uU3RlcENvbmZpZ1tdOyAvLyBuZXN0ZWQgc3RlcHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb29wU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgdHlwZTogJ2xvb3AnO1xuICBsb29wVHlwZT86ICdmb3InIHwgJ3doaWxlJztcbiAgaXRlcmF0aW9uczogTG9vcEl0ZXJhdGlvbltdO1xuICBzZWxlY3RlZEl0ZXJhdGlvbklkPzogc3RyaW5nOyAvLyB3aGljaCBpdGVyYXRpb24gdG8gZGlzcGxheVxuICBkZWZhdWx0SXRlcmF0aW9uPzogJ2ZpcnN0JyB8ICdsYXN0JzsgLy8gZGVmYXVsdCBpdGVyYXRpb24gdG8gc2hvd1xuICBuZXN0ZWRTdGVwcz86IEV4ZWN1dGlvblN0ZXBDb25maWdbXTsgLy8gc3RlcHMgbmVzdGVkIHdpdGhpbiB0aGUgbG9vcFxuICBzaG93Vmlld0FsbEl0ZXJhdGlvbnM/OiBib29sZWFuO1xuICBzdWJTdGVwcz86IFN1YlN0ZXBbXTtcbiAgaXRlcmF0aW9uRGF0YT86IGFueTsgLy8gZGF0YSBmb3IgZWFjaCBpdGVyYXRpb24gaW4gbGl2ZSBleGVjdXRpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25TdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnY29uZGl0aW9uJztcbiAgY29uZGl0aW9uVGV4dDogc3RyaW5nOyAvLyBlLmcuLCBcImlmIHVzZXIgdHlwZSBpcyAnUHJlbWl1bSdcIlxuICBicmFuY2hlczogQ29uZGl0aW9uQnJhbmNoW107XG4gIG5lc3RlZFN0ZXBzPzogRXhlY3V0aW9uU3RlcENvbmZpZ1tdOyAvLyBuZXN0ZWQgY2hpbGQgc3RlcHMgZm9yIHJlY3Vyc2l2ZSByZW5kZXJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGYWlsZWRTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnZmFpbGVkJztcbiAgc3ViU3RlcHM6IFN1YlN0ZXBbXTtcbiAgZmFpbHVyZURldGFpbHM6IEZhaWx1cmVEZXRhaWxzO1xuICByZWFzb25pbmc/OiBzdHJpbmdbXTtcbiAgY29uZmlkZW5jZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUFnZW50QWN0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdHlwZTogJ2V4dHJhY3QnIHwgJ3ZhbGlkYXRlJyB8ICdBSV9BR0VOVF9BQ1RJT04nIHwgJ1RZUEUnIHwgJ0NMSUNLJztcbiAgc3RhdHVzOiBTdGVwU3RhdHVzO1xuICBjb25maWRlbmNlPzogbnVtYmVyOyAvLyAwLTEwMFxuICBkdXJhdGlvbjogbnVtYmVyO1xuICByZWFzb25pbmc/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlBZ2VudFN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdhaS1hZ2VudCc7XG4gIHByb21wdDogc3RyaW5nO1xuICBvcHRpbWl6ZWRSdW4/OiBib29sZWFuO1xuICBhY3Rpb25Db3VudD86IG51bWJlcjtcbiAgYWN0aW9uczogQUlBZ2VudEFjdGlvbltdO1xuICBzZWxlY3RlZFRhYj86ICdhY3Rpb24tdHJhY2UnIHwgJ3BsYW5uZXItdGltZWxpbmUnIHwgJ2FpLXJlYXNvbmluZyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpQXNzZXJ0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzOiAncGFzc2VkJyB8ICdmYWlsZWQnO1xuICBleHBlY3RlZDogc3RyaW5nO1xuICBhY3R1YWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnYXBpJztcbiAgbWV0aG9kOiBzdHJpbmc7IC8vIEdFVCwgUE9TVCwgUFVULCBERUxFVEUsIGV0Yy5cbiAgZW5kcG9pbnQ6IHN0cmluZztcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICByZXNwb25zZVRpbWU6IG51bWJlcjsgLy8gaW4gbWlsbGlzZWNvbmRzXG4gIHJlcXVlc3RCb2R5PzogYW55O1xuICByZXNwb25zZUJvZHk/OiBhbnk7XG4gIHJlcXVlc3RIZWFkZXJzPzogYW55O1xuICByZXNwb25zZUhlYWRlcnM/OiBhbnk7XG4gIGFzc2VydGlvbnM/OiBBcGlBc3NlcnRpb25bXTtcbiAgaW5pdGlhbEFjdGlvbnM/OiBTdWJTdGVwW107IC8vIEFjdGlvbnMgYmVmb3JlIHRoZSBBUEkgY2FsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVEb3dubG9hZFN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdmaWxlLWRvd25sb2FkJztcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgZmlsZVR5cGU6IHN0cmluZzsgLy8gUERGLCBDU1YsIGV0Yy5cbiAgZmlsZVNpemU/OiBzdHJpbmc7IC8vIGUuZy4sIFwiMi40IE1CXCJcbiAgZmlsZVBhdGg/OiBzdHJpbmc7XG4gIGRvd25sb2FkZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdGVkRmllbGQge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBjb25maWRlbmNlOiBudW1iZXI7IC8vIDAtMTAwXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZpY2F0aW9uQ2hlY2sge1xuICBpZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXM6ICdwYXNzJyB8ICdmYWlsJztcbiAgZXhwZWN0ZWQ6IHN0cmluZztcbiAgYWN0dWFsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRWZXJpZmljYXRpb25TdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnZG9jdW1lbnQtdmVyaWZpY2F0aW9uJztcbiAgZG9jdW1lbnRTY3JlZW5zaG90Pzogc3RyaW5nOyAvLyBVUkwgb3IgYmFzZTY0XG4gIGV4dHJhY3RlZEZpZWxkczogRXh0cmFjdGVkRmllbGRbXTtcbiAgdmVyaWZpY2F0aW9uQ2hlY2tzOiBWZXJpZmljYXRpb25DaGVja1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpdmVTdWJTdGVwIHtcbiAgaWQ6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nOyAvLyBUZXh0IGZyb20gc29ja2V0XG4gIGlzUnVubmluZzogYm9vbGVhbjsgLy8gdHJ1ZSA9IHNob3cgbG9hZGVyLCBmYWxzZSA9IHNob3cgaWNvblxuICBkdXJhdGlvbj86IG51bWJlcjsgLy8gaW4gc2Vjb25kc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpdmVFeGVjdXRpb25TdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICB0eXBlOiAnbGl2ZS1leGVjdXRpb24nO1xuICBzdWJTdGVwczogTGl2ZVN1YlN0ZXBbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYlF1ZXJ5UmVzdWx0IHtcbiAgZGF0YTogYW55W107XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIGV4ZWN1dGVkQXQ/OiBzdHJpbmc7XG4gIGR1cmF0aW9uPzogbnVtYmVyOyAvLyBpbiBzZWNvbmRzXG4gIFtrZXk6IHN0cmluZ106IGFueTsgLy8gRm9yIGR5bmFtaWMga2V5cyBsaWtlIFwiRGVtb191c2VyXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYkFzc2VydGlvblJlc3VsdCB7XG4gIHZhcmlhYmxlTmFtZTogc3RyaW5nO1xuICBqc29uUGF0aDogc3RyaW5nO1xuICBleHBlY3RlZFZhbHVlOiBhbnk7XG4gIGFjdHVhbFZhbHVlOiBhbnk7XG4gIHZlcmlmaWNhdGlvblR5cGU6IHN0cmluZztcbiAgZXhwZWN0ZWRUeXBlOiBzdHJpbmc7XG4gIHBhc3NlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYlRlc3RSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICByZXN1bHRzOiB7IFtrZXk6IHN0cmluZ106IERiUXVlcnlSZXN1bHQgfTtcbiAgYXNzZXJ0aW9uUmVzdWx0czogRGJBc3NlcnRpb25SZXN1bHRbXTtcbiAgYWxsQXNzZXJ0aW9uc1Bhc3NlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYlZlcmlmaWNhdGlvblN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHR5cGU6ICdkYi12ZXJpZmljYXRpb24nO1xuICBkYlRlc3RSZXN1bHQ6IERiVGVzdFJlc3VsdDtcbiAgZGJDb25maWc/OiB7XG4gICAgbmFtZTogc3RyaW5nOyAvLyBFbnZpcm9ubWVudCBuYW1lXG4gICAgZGJUeXBlOiBzdHJpbmc7IC8vIERhdGFiYXNlIHR5cGUgKE15U1FMLCBTUUxTZXJ2ZXIsIGV0Yy4pXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcmVxdWlzaXRlSXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7IC8vIGUuZy4sIFwiUHJlcmVxdWlzaXRlIDE6IExvZ2luIGZsb3dcIlxuICBzdGF0dXM6IFN0ZXBTdGF0dXM7XG4gIGR1cmF0aW9uOiBudW1iZXI7IC8vIGluIHNlY29uZHNcbiAgc3RlcENvbmZpZz86IEV4ZWN1dGlvblN0ZXBDb25maWc7IC8vIE9wdGlvbmFsOiBmdWxsIHN0ZXAgY29uZmlnIHRvIHZpZXcgZGV0YWlsc1xufVxuXG5leHBvcnQgdHlwZSBFeGVjdXRpb25TdGVwQ29uZmlnID1cbiAgfCBCYXNpY1N0ZXBDb25maWdcbiAgfCBTdGVwR3JvdXBDb25maWdcbiAgfCBMb29wU3RlcENvbmZpZ1xuICB8IENvbmRpdGlvblN0ZXBDb25maWdcbiAgfCBGYWlsZWRTdGVwQ29uZmlnXG4gIHwgQUlBZ2VudFN0ZXBDb25maWdcbiAgfCBBcGlTdGVwQ29uZmlnXG4gIHwgRmlsZURvd25sb2FkU3RlcENvbmZpZ1xuICB8IERvY3VtZW50VmVyaWZpY2F0aW9uU3RlcENvbmZpZ1xuICB8IExpdmVFeGVjdXRpb25TdGVwQ29uZmlnXG4gIHwgRGJWZXJpZmljYXRpb25TdGVwQ29uZmlnO1xuIl19