UNPKG

@versatiledatakit/data-pipelines

Version:

Data Pipelines help Data Engineers develop, deploy, run, and manage data processing workloads (called 'Data Job')

133 lines 18.7 kB
/* * Copyright 2023-2025 Broadcom * SPDX-License-Identifier: Apache-2.0 */ import { Component, Input } from '@angular/core'; import { DataJobExecutionStatus } from '../../../../../model'; import * as i0 from "@angular/core"; import * as i1 from "@clr/angular"; import * as i2 from "@angular/common"; import * as i3 from "@versatiledatakit/shared"; function DataJobExecutionStatusComponent_div_2_clr_signpost_content_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "clr-signpost-content", 6); i0.ɵɵtext(1); i0.ɵɵelement(2, "vdk-copy-to-clipboard-button", 7); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵproperty("clrPosition", "right-bottom"); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate1(" ", ctx_r2.jobMessage, " "); i0.ɵɵadvance(1); i0.ɵɵproperty("tooltip", "Copy to clipboard")("tooltipDirection", "right")("value", ctx_r2.jobMessage); } } function DataJobExecutionStatusComponent_div_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div"); i0.ɵɵtemplate(1, DataJobExecutionStatusComponent_div_2_clr_signpost_content_1_Template, 3, 5, "clr-signpost-content", 5); i0.ɵɵelementEnd(); } } function DataJobExecutionStatusComponent_button_6_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "button", 8); i0.ɵɵtext(1, " details "); i0.ɵɵelementEnd(); } } export class DataJobExecutionStatusComponent { constructor() { this.jobMessage = ''; this.showErrorMessage = false; this.clrOpen = false; this.statusPropertiesMapping = { [DataJobExecutionStatus.SUBMITTED]: { shape: 'hourglass', status: '', direction: '', text: 'Submitted' }, [DataJobExecutionStatus.RUNNING]: { shape: 'play', status: '', direction: '', text: 'Running' }, [DataJobExecutionStatus.SUCCEEDED]: { shape: 'success-standard', status: 'is-success', direction: '', text: 'Success' }, [DataJobExecutionStatus.CANCELLED]: { shape: 'ban', status: '', direction: '', text: 'Canceled' }, [DataJobExecutionStatus.SKIPPED]: { shape: 'angle-double', status: '', direction: 'right', text: 'Skipped' }, [DataJobExecutionStatus.USER_ERROR]: { shape: 'error-standard', status: 'is-danger', direction: '', text: 'User Error' }, [DataJobExecutionStatus.PLATFORM_ERROR]: { shape: 'error-standard', status: 'is-warning', direction: '', text: 'Platform Error' }, [DataJobExecutionStatus.FAILED]: { shape: 'error-standard', status: 'is-danger', direction: '', text: 'Error' } }; } get executionStatusProperties() { return this.statusPropertiesMapping[this.jobStatus] ?? {}; } isJobStatusSuitableForMessageTooltip() { return (this.jobStatus === DataJobExecutionStatus.PLATFORM_ERROR || this.jobStatus === DataJobExecutionStatus.USER_ERROR || this.jobStatus === DataJobExecutionStatus.SKIPPED); } isJobMessageDifferentFromStatus() { const message = this.jobMessage?.toLowerCase(); return message !== 'user error' && message !== 'platform error' && message !== 'skipped' && message !== ''; } } DataJobExecutionStatusComponent.ɵfac = function DataJobExecutionStatusComponent_Factory(t) { return new (t || DataJobExecutionStatusComponent)(); }; DataJobExecutionStatusComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DataJobExecutionStatusComponent, selectors: [["lib-data-job-execution-status"]], inputs: { jobStatus: "jobStatus", jobMessage: "jobMessage", showErrorMessage: "showErrorMessage" }, decls: 7, vars: 7, consts: [[1, "job-execution-signpost"], [4, "ngIf"], [1, "job-execution-status__container"], ["data-cy", "data-pipelines-job-executions-status-filters", "clrSignpostTrigger", "", 1, "job-execution-status__text"], ["class", "btn btn-link btn-icon btn-sm job-execution-status__btn", "clrSignpostTrigger", "", 4, "ngIf"], [3, "clrPosition", 4, "clrIfOpen"], [3, "clrPosition"], [3, "tooltip", "tooltipDirection", "value"], ["clrSignpostTrigger", "", 1, "btn", "btn-link", "btn-icon", "btn-sm", "job-execution-status__btn"]], template: function DataJobExecutionStatusComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "clr-icon"); i0.ɵɵelementStart(1, "clr-signpost", 0); i0.ɵɵtemplate(2, DataJobExecutionStatusComponent_div_2_Template, 2, 0, "div", 1); i0.ɵɵelementStart(3, "div", 2)(4, "span", 3); i0.ɵɵtext(5); i0.ɵɵelementEnd(); i0.ɵɵtemplate(6, DataJobExecutionStatusComponent_button_6_Template, 2, 0, "button", 4); i0.ɵɵelementEnd()(); } if (rf & 2) { i0.ɵɵclassMap(ctx.executionStatusProperties.status); i0.ɵɵattribute("shape", ctx.executionStatusProperties.shape)("dir", ctx.executionStatusProperties.direction); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx.showErrorMessage && ctx.isJobStatusSuitableForMessageTooltip() && ctx.isJobMessageDifferentFromStatus()); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate1("", ctx.executionStatusProperties.text, " "); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.showErrorMessage && ctx.isJobStatusSuitableForMessageTooltip() && ctx.isJobMessageDifferentFromStatus()); } }, directives: [i1.ClrIconCustomTag, i1.ClrSignpost, i2.NgIf, i1.ClrIfOpen, i1.ClrSignpostContent, i3.VdkCopyToClipboardButtonComponent, i1.ClrSignpostTrigger], styles: [".job-execution-status__container[_ngcontent-%COMP%]{display:flex;align-items:baseline;flex-direction:column}.job-execution-status__container[_ngcontent-%COMP%] .job-execution-status__text[_ngcontent-%COMP%]{margin-left:.25rem}.job-execution-status__container[_ngcontent-%COMP%] .job-execution-status__btn[_ngcontent-%COMP%]{padding:0;margin-left:5px;text-transform:lowercase;font-size:12px;outline-color:transparent}[_nghost-%COMP%]{display:block;width:100%;height:100%}.job-execution-signpost[_ngcontent-%COMP%]{cursor:auto}"] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DataJobExecutionStatusComponent, [{ type: Component, args: [{ selector: 'lib-data-job-execution-status', template: "<!--\n ~ Copyright 2023-2025 Broadcom\n ~ SPDX-License-Identifier: Apache-2.0\n -->\n\n<clr-icon\n [attr.shape]=\"executionStatusProperties.shape\"\n [class]=\"executionStatusProperties.status\"\n [attr.dir]=\"executionStatusProperties.direction\"\n></clr-icon>\n\n<clr-signpost class=\"job-execution-signpost\">\n <div\n *ngIf=\"\n showErrorMessage &&\n isJobStatusSuitableForMessageTooltip() &&\n isJobMessageDifferentFromStatus()\n \"\n >\n <clr-signpost-content [clrPosition]=\"'right-bottom'\" *clrIfOpen>\n {{ jobMessage }}\n <vdk-copy-to-clipboard-button\n [tooltip]=\"'Copy to clipboard'\"\n [tooltipDirection]=\"'right'\"\n [value]=\"jobMessage\"\n ></vdk-copy-to-clipboard-button>\n </clr-signpost-content>\n </div>\n <div class=\"job-execution-status__container\">\n <span\n class=\"job-execution-status__text\"\n data-cy=\"data-pipelines-job-executions-status-filters\"\n clrSignpostTrigger\n >{{ executionStatusProperties.text }}\n </span>\n <button\n *ngIf=\"showErrorMessage && isJobStatusSuitableForMessageTooltip() && isJobMessageDifferentFromStatus()\"\n class=\"btn btn-link btn-icon btn-sm job-execution-status__btn\"\n clrSignpostTrigger\n >\n details\n </button>\n </div>\n</clr-signpost>\n", styles: ["/*!\n * Copyright 2023-2025 Broadcom\n * SPDX-License-Identifier: Apache-2.0\n */.job-execution-status__container{display:flex;align-items:baseline;flex-direction:column}.job-execution-status__container .job-execution-status__text{margin-left:.25rem}.job-execution-status__container .job-execution-status__btn{padding:0;margin-left:5px;text-transform:lowercase;font-size:12px;outline-color:transparent}:host{display:block;width:100%;height:100%}.job-execution-signpost{cursor:auto}\n"] }] }], null, { jobStatus: [{ type: Input }], jobMessage: [{ type: Input }], showErrorMessage: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1qb2ItZXhlY3V0aW9uLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhLXBpcGVsaW5lcy9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1qb2IvcGFnZXMvZXhlY3V0aW9ucy9kYXRhLWpvYi1leGVjdXRpb24tc3RhdHVzL2RhdGEtam9iLWV4ZWN1dGlvbi1zdGF0dXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1waXBlbGluZXMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtam9iL3BhZ2VzL2V4ZWN1dGlvbnMvZGF0YS1qb2ItZXhlY3V0aW9uLXN0YXR1cy9kYXRhLWpvYi1leGVjdXRpb24tc3RhdHVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7SUNZdEQsK0NBQWdFO0lBQzVELFlBQ0E7SUFBQSxrREFJZ0M7SUFDcEMsaUJBQXVCOzs7SUFQRCw0Q0FBOEI7SUFDaEQsZUFDQTtJQURBLGtEQUNBO0lBQ0ksZUFBK0I7SUFBL0IsNkNBQStCLDZCQUFBLDRCQUFBOzs7SUFWM0MsMkJBTUM7SUFDRyx3SEFPdUI7SUFDM0IsaUJBQU07OztJQVFGLGlDQUlDO0lBQ0cseUJBQ0o7SUFBQSxpQkFBUzs7QURwQmpCLE1BQU0sT0FBTywrQkFBK0I7SUFMNUM7UUFPYSxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNsQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCLDRCQUF1QixHQUErQztZQUNsRSxDQUFDLHNCQUFzQixDQUFDLFNB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LGdCQUFnQjtrQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMy0yMDI1IEJyb2FkY29tXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGF0YUpvYkV4ZWN1dGlvblN0YXR1cyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL21vZGVsJztcblxudHlwZSBTdGF0dXNQcm9wZXJ0aWVzTWFwcGluZyA9IHtcbiAgICBzaGFwZTogc3RyaW5nO1xuICAgIHN0YXR1czogc3RyaW5nO1xuICAgIGRpcmVjdGlvbjogc3RyaW5nO1xuICAgIHRleHQ6IHN0cmluZztcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWRhdGEtam9iLWV4ZWN1dGlvbi1zdGF0dXMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWpvYi1leGVjdXRpb24tc3RhdHVzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kYXRhLWpvYi1leGVjdXRpb24tc3RhdHVzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRGF0YUpvYkV4ZWN1dGlvblN0YXR1c0NvbXBvbmVudCB7XG4gICAgQElucHV0KCkgam9iU3RhdHVzOiBEYXRhSm9iRXhlY3V0aW9uU3RhdHVzO1xuICAgIEBJbnB1dCgpIGpvYk1lc3NhZ2UgPSAnJztcbiAgICBASW5wdXQoKSBzaG93RXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgY2xyT3BlbiA9IGZhbHNlO1xuXG4gICAgc3RhdHVzUHJvcGVydGllc01hcHBpbmc6IHsgW2tleTogc3RyaW5nXTogU3RhdHVzUHJvcGVydGllc01hcHBpbmcgfSA9IHtcbiAgICAgICAgW0RhdGFKb2JFeGVjdXRpb25TdGF0dXMuU1VCTUlUVEVEXToge1xuICAgICAgICAgICAgc2hhcGU6ICdob3VyZ2xhc3MnLFxuICAgICAgICAgICAgc3RhdHVzOiAnJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJycsXG4gICAgICAgICAgICB0ZXh0OiAnU3VibWl0dGVkJ1xuICAgICAgICB9LFxuICAgICAgICBbRGF0YUpvYkV4ZWN1dGlvblN0YXR1cy5SVU5OSU5HXToge1xuICAgICAgICAgICAgc2hhcGU6ICdwbGF5JyxcbiAgICAgICAgICAgIHN0YXR1czogJycsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICcnLFxuICAgICAgICAgICAgdGV4dDogJ1J1bm5pbmcnXG4gICAgICAgIH0sXG4gICAgICAgIFtEYXRhSm9iRXhlY3V0aW9uU3RhdHVzLlNVQ0NFRURFRF06IHtcbiAgICAgICAgICAgIHNoYXBlOiAnc3VjY2Vzcy1zdGFuZGFyZCcsXG4gICAgICAgICAgICBzdGF0dXM6ICdpcy1zdWNjZXNzJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJycsXG4gICAgICAgICAgICB0ZXh0OiAnU3VjY2VzcydcbiAgICAgICAgfSxcbiAgICAgICAgW0RhdGFKb2JFeGVjdXRpb25TdGF0dXMuQ0FOQ0VMTEVEXToge1xuICAgICAgICAgICAgc2hhcGU6ICdiYW4nLFxuICAgICAgICAgICAgc3RhdHVzOiAnJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJycsXG4gICAgICAgICAgICB0ZXh0OiAnQ2FuY2VsZWQnXG4gICAgICAgIH0sXG4gICAgICAgIFtEYXRhSm9iRXhlY3V0aW9uU3RhdHVzLlNLSVBQRURdOiB7XG4gICAgICAgICAgICBzaGFwZTogJ2FuZ2xlLWRvdWJsZScsXG4gICAgICAgICAgICBzdGF0dXM6ICcnLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAncmlnaHQnLFxuICAgICAgICAgICAgdGV4dDogJ1NraXBwZWQnXG4gICAgICAgIH0sXG4gICAgICAgIFtEYXRhSm9iRXhlY3V0aW9uU3RhdHVzLlVTRVJfRVJST1JdOiB7XG4gICAgICAgICAgICBzaGFwZTogJ2Vycm9yLXN0YW5kYXJkJyxcbiAgICAgICAgICAgIHN0YXR1czogJ2lzLWRhbmdlcicsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICcnLFxuICAgICAgICAgICAgdGV4dDogJ1VzZXIgRXJyb3InXG4gICAgICAgIH0sXG4gICAgICAgIFtEYXRhSm9iRXhlY3V0aW9uU3RhdHVzLlBMQVRGT1JNX0VSUk9SXToge1xuICAgICAgICAgICAgc2hhcGU6ICdlcnJvci1zdGFuZGFyZCcsXG4gICAgICAgICAgICBzdGF0dXM6ICdpcy13YXJuaW5nJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJycsXG4gICAgICAgICAgICB0ZXh0OiAnUGxhdGZvcm0gRXJyb3InXG4gICAgICAgIH0sXG4gICAgICAgIFtEYXRhSm9iRXhlY3V0aW9uU3RhdHVzLkZBSUxFRF06IHtcbiAgICAgICAgICAgIHNoYXBlOiAnZXJyb3Itc3RhbmRhcmQnLFxuICAgICAgICAgICAgc3RhdHVzOiAnaXMtZGFuZ2VyJyxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJycsXG4gICAgICAgICAgICB0ZXh0OiAnRXJyb3InXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0IGV4ZWN1dGlvblN0YXR1c1Byb3BlcnRpZXMoKTogU3RhdHVzUHJvcGVydGllc01hcHBpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0dXNQcm9wZXJ0aWVzTWFwcGluZ1t0aGlzLmpvYlN0YXR1c10gPz8gKHt9IGFzIFN0YXR1c1Byb3BlcnRpZXNNYXBwaW5nKTtcbiAgICB9XG5cbiAgICBpc0pvYlN0YXR1c1N1aXRhYmxlRm9yTWVzc2FnZVRvb2x0aXAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmpvYlN0YXR1cyA9PT0gRGF0YUpvYkV4ZWN1dGlvblN0YXR1cy5QTEFURk9STV9FUlJPUiB8fFxuICAgICAgICAgICAgdGhpcy5qb2JTdGF0dXMgPT09IERhdGFKb2JFeGVjdXRpb25TdGF0dXMuVVNFUl9FUlJPUiB8fFxuICAgICAgICAgICAgdGhpcy5qb2JTdGF0dXMgPT09IERhdGFKb2JFeGVjdXRpb25TdGF0dXMuU0tJUFBFRFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzSm9iTWVzc2FnZURpZmZlcmVudEZyb21TdGF0dXMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmpvYk1lc3NhZ2U/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBtZXNzYWdlICE9PSAndXNlciBlcnJvcicgJiYgbWVzc2FnZSAhPT0gJ3BsYXRmb3JtIGVycm9yJyAmJiBtZXNzYWdlICE9PSAnc2tpcHBlZCcgJiYgbWVzc2FnZSAhPT0gJyc7XG4gICAgfVxufVxuIiwiPCEtLVxuICAgfiBDb3B5cmlnaHQgMjAyMy0yMDI1IEJyb2FkY29tXG4gICB+IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gIC0tPlxuXG48Y2xyLWljb25cbiAgICBbYXR0ci5zaGFwZV09XCJleGVjdXRpb25TdGF0dXNQcm9wZXJ0aWVzLnNoYXBlXCJcbiAgICBbY2xhc3NdPVwiZXhlY3V0aW9uU3RhdHVzUHJvcGVydGllcy5zdGF0dXNcIlxuICAgIFthdHRyLmRpcl09XCJleGVjdXRpb25TdGF0dXNQcm9wZXJ0aWVzLmRpcmVjdGlvblwiXG4+PC9jbHItaWNvbj5cblxuPGNsci1zaWducG9zdCBjbGFzcz1cImpvYi1leGVjdXRpb24tc2lnbnBvc3RcIj5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBzaG93RXJyb3JNZXNzYWdlICYmXG4gICAgICAgICAgICBpc0pvYlN0YXR1c1N1aXRhYmxlRm9yTWVzc2FnZVRvb2x0aXAoKSAmJlxuICAgICAgICAgICAgaXNKb2JNZXNzYWdlRGlmZmVyZW50RnJvbVN0YXR1cygpXG4gICAgICAgIFwiXG4gICAgPlxuICAgICAgICA8Y2xyLXNpZ25wb3N0LWNvbnRlbnQgW2NsclBvc2l0aW9uXT1cIidyaWdodC1ib3R0b20nXCIgKmNscklmT3Blbj5cbiAgICAgICAgICAgIHt7IGpvYk1lc3NhZ2UgfX1cbiAgICAgICAgICAgIDx2ZGstY29weS10by1jbGlwYm9hcmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ0NvcHkgdG8gY2xpcGJvYXJkJ1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBEaXJlY3Rpb25dPVwiJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImpvYk1lc3NhZ2VcIlxuICAgICAgICAgICAgPjwvdmRrLWNvcHktdG8tY2xpcGJvYXJkLWJ1dHRvbj5cbiAgICAgICAgPC9jbHItc2lnbnBvc3QtY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiam9iLWV4ZWN1dGlvbi1zdGF0dXNfX2NvbnRhaW5lclwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJqb2ItZXhlY3V0aW9uLXN0YXR1c19fdGV4dFwiXG4gICAgICAgICAgICBkYXRhLWN5PVwiZGF0YS1waXBlbGluZXMtam9iLWV4ZWN1dGlvbnMtc3RhdHVzLWZpbHRlcnNcIlxuICAgICAgICAgICAgY2xyU2lnbnBvc3RUcmlnZ2VyXG4gICAgICAgICAgICA+e3sgZXhlY3V0aW9uU3RhdHVzUHJvcGVydGllcy50ZXh0IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJzaG93RXJyb3JNZXNzYWdlICYmIGlzSm9iU3RhdHVzU3VpdGFibGVGb3JNZXNzYWdlVG9vbHRpcCgpICYmIGlzSm9iTWVzc2FnZURpZmZlcmVudEZyb21TdGF0dXMoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGluayBidG4taWNvbiBidG4tc20gam9iLWV4ZWN1dGlvbi1zdGF0dXNfX2J0blwiXG4gICAgICAgICAgICBjbHJTaWducG9zdFRyaWdnZXJcbiAgICAgICAgPlxuICAgICAgICAgICAgZGV0YWlsc1xuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvY2xyLXNpZ25wb3N0PlxuIl19