tango-app-ui-store-ticket-infra 3.7.8 → 3.7.9

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.
@@ -85,7 +85,7 @@ export class TangoStoreInfraComponent {
85
85
  this.gs.dataRangeValue.pipe(takeUntil(this.detach)).subscribe({
86
86
  next: (data) => {
87
87
  if (data) {
88
- this.headerFilters = data;
88
+ this.headerFilters = { ...data };
89
89
  this.storeId =
90
90
  data && data.store ? data.store : this.router.url.split("/")[3];
91
91
  this.clientName = data?.clientName ? data?.clientName : '';
@@ -296,10 +296,10 @@ export class TangoStoreInfraComponent {
296
296
  ref.componentInstance.session = this.session;
297
297
  }
298
298
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoStoreInfraComponent, deps: [{ token: i1.PageInfoService }, { token: i2.Router }, { token: i1.GlobalStateService }, { token: i2.ActivatedRoute }, { token: i3.TicketsService }, { token: i4.NgbModal }, { token: i5.AuthService }], target: i0.ɵɵFactoryTarget.Component });
299
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TangoStoreInfraComponent, selector: "lib-tango-store-infra", ngImport: i0, template: "<!-- Store card: name and timings from get-store, Live status from the V2 store list. -->\r\n<div class=\"card mb-5 py-4 px-5\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-3\"><svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#D1FADF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#ECFDF3\" stroke-width=\"6\"/>\r\n <path d=\"M15.6799 18.8039L15.6267 18.8871C15.0686 19.8741 15.6644 21.1215 16.7361 21.2646C16.8331 21.2765 16.9235 21.2828 17.0118 21.2828C17.5899 21.2828 18.1011 21.0348 18.4574 20.648L19.0107 20.0474L19.5621 20.6498C19.9141 21.0342 20.4241 21.2828 21.0061 21.2828C21.5856 21.2828 22.0985 21.0338 22.4502 20.6498L23.0033 20.0455L23.5565 20.6498C23.9081 21.0338 24.4211 21.2828 25.0005 21.2828C25.58 21.2828 26.0929 21.0338 26.4445 20.6498L26.9977 20.0455L27.5509 20.6498C27.9025 21.0338 28.4155 21.2828 28.9949 21.2828C29.0803 21.2828 29.1733 21.2765 29.2697 21.2647C30.3649 21.1154 30.9627 19.8012 30.324 18.8044C30.324 18.8043 30.324 18.8043 30.3239 18.8042L28.5658 16.0628L28.5658 16.0628L28.5648 16.0614C28.5496 16.0375 28.5121 16.012 28.465 16.012H17.5356C17.4884 16.012 17.4509 16.0375 17.4357 16.0614L17.4351 16.0623L15.6799 18.8039ZM28.6514 23.7372V26.8691V27.6191H27.9014H18.0992H17.3492V26.8691V23.7376C17.239 23.7458 17.1274 23.7501 17.0148 23.7501C16.9725 23.7501 16.9305 23.7494 16.8888 23.7482V26.8691V28.8036C16.8888 29.4471 17.4227 29.9882 18.0992 29.9882H27.9014C28.5779 29.9882 29.1118 29.4471 29.1118 28.8036V26.8691V23.7484C29.072 23.7495 29.032 23.7501 28.9918 23.7501C28.8774 23.7501 28.7639 23.7457 28.6514 23.7372Z\" stroke=\"#027A48\" stroke-width=\"1.5\"/>\r\n </svg></span>\r\n <div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"store-card-name\">{{ storeName }}</span>\r\n <span *ngIf=\"liveStatus\" class=\"live-status ms-4\" [class.down]=\"liveStatus === 'Not Live'\">\r\n <span class=\"live-dot\"></span>{{ liveStatus }}\r\n </span>\r\n </div>\r\n <div class=\"store-card-meta d-flex align-items-center mt-1\">\r\n <span>{{ storeId || '--' }}</span>\r\n <span class=\"mx-2\">\u00B7</span>\r\n <svg class=\"me-1\" width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 4.5V9L12 10.5M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ storeOpen || '--' }} - {{ storeClose || '--' }}</span>\r\n </div>\r\n </div>\r\n <!-- Tango users of Infra V2 clients only. The hovered button expands; Terminal access is expanded while none is. -->\r\n <div *ngIf=\"showStoreActions\" class=\"store-actions ms-auto d-flex align-items-center gap-3\">\r\n <button type=\"button\" class=\"store-act is-default\" (click)=\"openTerminal(terminalTpl)\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Terminal access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 7.5C3 6.4 3.9 5.5 5 5.5H9.2L11.2 7.5H19C20.1 7.5 21 8.4 21 9.5V17C21 18.1 20.1 19 19 19H5C3.9 19 3 18.1 3 17V7.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">File access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M8.6 4.5L6.4 3.6C5.8 3.4 5.1 3.6 4.7 4.1L3.5 5.6C3.1 6.1 3 6.8 3.2 7.4C4.9 12.7 9.3 17.1 14.6 18.8C15.2 19 15.9 18.9 16.4 18.5L17.9 17.3C18.4 16.9 18.6 16.2 18.4 15.6L17.5 13.4C17.3 12.8 16.6 12.5 16 12.6L13.6 13.1C11.9 12.2 10.8 11.1 9.9 9.4L10.4 7C10.5 6.4 10.2 5.7 9.6 5.5L8.6 4.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Call</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"card mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('infra')\"><a [ngClass]=\"selectedTab ==='infra' ? 'active' :''\"\r\n class=\"nav-link cursor-pointer no-border me-6 \">Infra</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('dataMismatch')\">\r\n <a [ngClass]=\"selectedTab ==='dataMismatch' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Data Mismatch</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('cameraAngleChange')\">\r\n <a [ngClass]=\"selectedTab ==='cameraAngleChange' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Camera Angle</a>\r\n </li>\r\n <!-- File logs, at the right end of the row: its own page at ?type=fileLogs. -->\r\n <li class=\"nav-item ms-auto\" (click)=\"selectedTabs('fileLogs')\">\r\n <a [ngClass]=\"selectedTab ==='fileLogs' ? 'active' :''\" class=\"nav-link cursor-pointer file-logs-link\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M14 3H7C5.9 3 5 3.9 5 5V19C5 20.1 5.9 21 7 21H17C18.1 21 19 20.1 19 19V8L14 3Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 3V8H19M9 13H15M9 17H13\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n File logs\r\n </a>\r\n </li>\r\n\r\n <!-- <li *ngIf=\"(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS\" class=\"nav-item\" (click)=\"selectedTabs('footfall')\">\r\n <a [ngClass]=\"selectedTab ==='footfall' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Footfall Directory</a>\r\n </li> -->\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra'\" class=\"mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('summary')\"><a [ngClass]=\"selectedTab1 ==='summary' ? 'active' :''\"\r\n class=\"nav-link nav-link1 cursor-pointer no-border me-6 \">Summary</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('tickets')\">\r\n <a [ngClass]=\"selectedTab1 ==='tickets' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V1</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('ticketsV2')\">\r\n <a [ngClass]=\"selectedTab1 ==='ticketsV2' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V2</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='summary'\">\r\n <lib-summary-infra [selectedTab]=\"selectedTab\"></lib-summary-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='tickets'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='ticketsV2'\">\r\n <lib-ticket-infra-v2 [selectedTab]=\"selectedTab\"></lib-ticket-infra-v2>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='dataMismatch'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n\r\n<div *ngIf=\"selectedTab ==='cameraAngleChange'\">\r\n <lib-ticket-camera-angle [selectedTab]=\"selectedTab\"></lib-ticket-camera-angle>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='footfall'\">\r\n <lib-footfall-directory [selectedTab]=\"selectedTab\"></lib-footfall-directory>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='fileLogs'\">\r\n <lib-file-logs [storeId]=\"storeId\"></lib-file-logs>\r\n</div>\r\n<router-outlet></router-outlet>\r\n\r\n<!-- Terminal access confirmation. Filled from /infra/v2/remote/session; Client name from the client record. -->\r\n<ng-template #terminalTpl let-modal>\r\n <div class=\"access-modal\">\r\n <div class=\"access-head\">\r\n <span class=\"access-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"access-title fs-4 text-gray-800 fw-bold\">Open terminal access?</span>\r\n </div>\r\n <div class=\"access-body\">\r\n <p class=\"access-text\">This opens a command window on the store system. Commands run on the live system.</p>\r\n <div class=\"access-box\">\r\n <!-- Loading: shimmering placeholder rows (see .skel). -->\r\n <ng-container *ngIf=\"sessionState === 'loading'\">\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n </ng-container>\r\n <div *ngIf=\"sessionState === 'error'\" class=\"access-note error\">{{ sessionError || \"Couldn't open the session.\" }}</div>\r\n <ng-container *ngIf=\"sessionState === 'ready'\">\r\n <div class=\"access-row\"><span class=\"access-label\">Client name</span><span class=\"access-value\">{{ clientDisplayName || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store ID</span><span class=\"access-value\">{{ session?.storeId || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store name</span><span class=\"access-value\">{{ session?.storeName || '--' }}</span></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"access-foot\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"modal.close()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"sessionState !== 'ready'\" (click)=\"connect(modal)\">Connect</button>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:8px 12px}.nav-item1 .nav-link1:hover{border:none}.nav-item .nav-link.file-logs-link{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:6px}.nav-item .nav-link.file-logs-link:hover{border-bottom:1px solid transparent}.store-card-name{font-size:18px;line-height:28px;font-weight:600;color:var(--Gray-900, #101828)}.store-act{display:inline-flex;align-items:center;height:44px;padding:0 12px;border:0;border-radius:12px;background:var(--Primary-700, #009BF3);color:#fff;font-size:15px;font-weight:700;transition:background-color .3s ease,color .3s ease,padding .3s ease}.store-act svg{flex-shrink:0}.store-act .act-label{max-width:0;opacity:0;margin-left:0;overflow:hidden;white-space:nowrap;transition:max-width .3s ease,opacity .2s ease,margin-left .3s ease}.store-actions:not(:has(.store-act:hover)) .store-act.is-default,.store-act:hover{background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);padding:0 18px}.store-actions:not(:has(.store-act:hover)) .store-act.is-default .act-label,.store-act:hover .act-label{max-width:160px;opacity:1;margin-left:8px}.store-card-meta{font-size:12px;line-height:18px;font-weight:500;color:var(--Gray-500, #667085)}.live-status{display:inline-flex;align-items:center;padding:2px 8px;border-radius:16px;font-size:12px;line-height:18px;font-weight:500;background:#ecfdf3;border:1px solid #ABEFC6;color:#067647}.live-status .live-dot{width:6px;height:6px;border-radius:50%;background:#17b26a;margin-right:6px}.live-status.down{background:#fef3f2;border-color:#fecdca;color:#b42318}.live-status.down .live-dot{background:#d92d20}.access-modal{background:#fff;border-radius:16px;overflow:hidden}.access-head{display:flex;align-items:center;gap:16px;padding:20px 24px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.access-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;flex-shrink:0;border-radius:12px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)}.access-title{flex:1}.access-body{padding:20px 24px 0}.access-text{margin:0 0 20px;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-box{padding:16px 20px;border:1px solid var(--Gray-200, #EAECF0);border-radius:12px;background:var(--Gray-50, #F9FAFB)}.access-row{display:flex;align-items:center;padding:8px 0}.access-label{width:180px;flex-shrink:0;font-size:12px;line-height:18px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--Gray-500, #667085)}.access-value{font-size:14px;line-height:20px;font-weight:500;color:var(--Gray-900, #101828)}.skel{display:inline-block;height:14px;margin:3px 0;border-radius:6px;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:skel-shimmer 1.5s linear infinite}@keyframes skel-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.skel-label{width:110px;margin-right:70px}.skel-value{width:160px}.access-note{padding:8px 0;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-note.error{color:var(--Error-700, #B42318)}.access-foot{display:flex;justify-content:flex-end;gap:12px;padding:24px}.access-foot .btn{font-size:14px!important;line-height:20px!important;padding:8px 16px!important}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i7.TicketInfraComponent, selector: "lib-ticket-infra", inputs: ["selectedTab"] }, { kind: "component", type: i8.SummaryInfraComponent, selector: "lib-summary-infra", inputs: ["selectedTab"] }, { kind: "component", type: i9.FootfallDirectoryComponent, selector: "lib-footfall-directory", inputs: ["selectedTab"] }, { kind: "component", type: i10.TicketCameraAngleComponent, selector: "lib-ticket-camera-angle", inputs: ["selectedTab"] }, { kind: "component", type: i11.TicketInfraV2Component, selector: "lib-ticket-infra-v2", inputs: ["selectedTab"] }, { kind: "component", type: i12.FileLogsComponent, selector: "lib-file-logs", inputs: ["storeId"] }] });
299
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TangoStoreInfraComponent, selector: "lib-tango-store-infra", ngImport: i0, template: "<!-- Store card: name and timings from get-store, Live status from the V2 store list. -->\r\n<div class=\"card mb-5 py-4 px-5\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-3\"><svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#D1FADF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#ECFDF3\" stroke-width=\"6\"/>\r\n <path d=\"M15.6799 18.8039L15.6267 18.8871C15.0686 19.8741 15.6644 21.1215 16.7361 21.2646C16.8331 21.2765 16.9235 21.2828 17.0118 21.2828C17.5899 21.2828 18.1011 21.0348 18.4574 20.648L19.0107 20.0474L19.5621 20.6498C19.9141 21.0342 20.4241 21.2828 21.0061 21.2828C21.5856 21.2828 22.0985 21.0338 22.4502 20.6498L23.0033 20.0455L23.5565 20.6498C23.9081 21.0338 24.4211 21.2828 25.0005 21.2828C25.58 21.2828 26.0929 21.0338 26.4445 20.6498L26.9977 20.0455L27.5509 20.6498C27.9025 21.0338 28.4155 21.2828 28.9949 21.2828C29.0803 21.2828 29.1733 21.2765 29.2697 21.2647C30.3649 21.1154 30.9627 19.8012 30.324 18.8044C30.324 18.8043 30.324 18.8043 30.3239 18.8042L28.5658 16.0628L28.5658 16.0628L28.5648 16.0614C28.5496 16.0375 28.5121 16.012 28.465 16.012H17.5356C17.4884 16.012 17.4509 16.0375 17.4357 16.0614L17.4351 16.0623L15.6799 18.8039ZM28.6514 23.7372V26.8691V27.6191H27.9014H18.0992H17.3492V26.8691V23.7376C17.239 23.7458 17.1274 23.7501 17.0148 23.7501C16.9725 23.7501 16.9305 23.7494 16.8888 23.7482V26.8691V28.8036C16.8888 29.4471 17.4227 29.9882 18.0992 29.9882H27.9014C28.5779 29.9882 29.1118 29.4471 29.1118 28.8036V26.8691V23.7484C29.072 23.7495 29.032 23.7501 28.9918 23.7501C28.8774 23.7501 28.7639 23.7457 28.6514 23.7372Z\" stroke=\"#027A48\" stroke-width=\"1.5\"/>\r\n </svg></span>\r\n <div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"store-card-name\">{{ storeName }}</span>\r\n <span *ngIf=\"liveStatus\" class=\"live-status ms-4\" [class.down]=\"liveStatus === 'Not Live'\">\r\n <span class=\"live-dot\"></span>{{ liveStatus }}\r\n </span>\r\n </div>\r\n <div class=\"store-card-meta d-flex align-items-center mt-1\">\r\n <span>{{ storeId || '--' }}</span>\r\n <span class=\"mx-2\">\u00B7</span>\r\n <svg class=\"me-1\" width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 4.5V9L12 10.5M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ storeOpen || '--' }} - {{ storeClose || '--' }}</span>\r\n </div>\r\n </div>\r\n <!-- Tango users of Infra V2 clients only. The hovered button expands; Terminal access is expanded while none is. -->\r\n <div *ngIf=\"showStoreActions\" class=\"store-actions ms-auto d-flex align-items-center gap-3\">\r\n <button type=\"button\" class=\"store-act is-default\" (click)=\"openTerminal(terminalTpl)\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Terminal access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 7.5C3 6.4 3.9 5.5 5 5.5H9.2L11.2 7.5H19C20.1 7.5 21 8.4 21 9.5V17C21 18.1 20.1 19 19 19H5C3.9 19 3 18.1 3 17V7.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">File access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M8.6 4.5L6.4 3.6C5.8 3.4 5.1 3.6 4.7 4.1L3.5 5.6C3.1 6.1 3 6.8 3.2 7.4C4.9 12.7 9.3 17.1 14.6 18.8C15.2 19 15.9 18.9 16.4 18.5L17.9 17.3C18.4 16.9 18.6 16.2 18.4 15.6L17.5 13.4C17.3 12.8 16.6 12.5 16 12.6L13.6 13.1C11.9 12.2 10.8 11.1 9.9 9.4L10.4 7C10.5 6.4 10.2 5.7 9.6 5.5L8.6 4.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Call</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"card mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('infra')\"><a [ngClass]=\"selectedTab ==='infra' ? 'active' :''\"\r\n class=\"nav-link cursor-pointer no-border me-6 \">Infra</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('dataMismatch')\">\r\n <a [ngClass]=\"selectedTab ==='dataMismatch' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Data Mismatch</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('cameraAngleChange')\">\r\n <a [ngClass]=\"selectedTab ==='cameraAngleChange' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Camera Angle</a>\r\n </li>\r\n <!-- File logs, at the right end of the row: its own page at ?type=fileLogs. Tango only. -->\r\n <li *ngIf=\"isTango\" class=\"nav-item ms-auto\" (click)=\"selectedTabs('fileLogs')\">\r\n <a [ngClass]=\"selectedTab ==='fileLogs' ? 'active' :''\" class=\"nav-link cursor-pointer file-logs-link\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M14 3H7C5.9 3 5 3.9 5 5V19C5 20.1 5.9 21 7 21H17C18.1 21 19 20.1 19 19V8L14 3Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 3V8H19M9 13H15M9 17H13\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n File logs\r\n </a>\r\n </li>\r\n\r\n <!-- <li *ngIf=\"(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS\" class=\"nav-item\" (click)=\"selectedTabs('footfall')\">\r\n <a [ngClass]=\"selectedTab ==='footfall' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Footfall Directory</a>\r\n </li> -->\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra'\" class=\"mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('summary')\"><a [ngClass]=\"selectedTab1 ==='summary' ? 'active' :''\"\r\n class=\"nav-link nav-link1 cursor-pointer no-border me-6 \">Summary</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('tickets')\">\r\n <a [ngClass]=\"selectedTab1 ==='tickets' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V1</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('ticketsV2')\">\r\n <a [ngClass]=\"selectedTab1 ==='ticketsV2' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V2</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='summary'\">\r\n <lib-summary-infra [selectedTab]=\"selectedTab\"></lib-summary-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='tickets'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='ticketsV2'\">\r\n <lib-ticket-infra-v2 [selectedTab]=\"selectedTab\"></lib-ticket-infra-v2>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='dataMismatch'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n\r\n<div *ngIf=\"selectedTab ==='cameraAngleChange'\">\r\n <lib-ticket-camera-angle [selectedTab]=\"selectedTab\"></lib-ticket-camera-angle>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='footfall'\">\r\n <lib-footfall-directory [selectedTab]=\"selectedTab\"></lib-footfall-directory>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='fileLogs' && isTango\">\r\n <lib-file-logs [storeId]=\"storeId\" [clientId]=\"headerFilters?.client\" [date]=\"headerFilters?.date?.endDate\"></lib-file-logs>\r\n</div>\r\n<router-outlet></router-outlet>\r\n\r\n<!-- Terminal access confirmation. Filled from /infra/v2/remote/session; Client name from the client record. -->\r\n<ng-template #terminalTpl let-modal>\r\n <div class=\"access-modal\">\r\n <div class=\"access-head\">\r\n <span class=\"access-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"access-title fs-4 text-gray-800 fw-bold\">Open terminal access?</span>\r\n </div>\r\n <div class=\"access-body\">\r\n <p class=\"access-text\">This opens a command window on the store system. Commands run on the live system.</p>\r\n <div class=\"access-box\">\r\n <!-- Loading: shimmering placeholder rows (see .skel). -->\r\n <ng-container *ngIf=\"sessionState === 'loading'\">\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n </ng-container>\r\n <div *ngIf=\"sessionState === 'error'\" class=\"access-note error\">{{ sessionError || \"Couldn't open the session.\" }}</div>\r\n <ng-container *ngIf=\"sessionState === 'ready'\">\r\n <div class=\"access-row\"><span class=\"access-label\">Client name</span><span class=\"access-value\">{{ clientDisplayName || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store ID</span><span class=\"access-value\">{{ session?.storeId || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store name</span><span class=\"access-value\">{{ session?.storeName || '--' }}</span></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"access-foot\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"modal.close()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"sessionState !== 'ready'\" (click)=\"connect(modal)\">Connect</button>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:8px 12px}.nav-item1 .nav-link1:hover{border:none}.nav-item .nav-link.file-logs-link{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:6px}.nav-item .nav-link.file-logs-link:hover{border-bottom:1px solid transparent}.store-card-name{font-size:18px;line-height:28px;font-weight:600;color:var(--Gray-900, #101828)}.store-act{display:inline-flex;align-items:center;height:44px;padding:0 12px;border:0;border-radius:12px;background:var(--Primary-700, #009BF3);color:#fff;font-size:15px;font-weight:700;transition:background-color .3s ease,color .3s ease,padding .3s ease}.store-act svg{flex-shrink:0}.store-act .act-label{max-width:0;opacity:0;margin-left:0;overflow:hidden;white-space:nowrap;transition:max-width .3s ease,opacity .2s ease,margin-left .3s ease}.store-actions:not(:has(.store-act:hover)) .store-act.is-default,.store-act:hover{background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);padding:0 18px}.store-actions:not(:has(.store-act:hover)) .store-act.is-default .act-label,.store-act:hover .act-label{max-width:160px;opacity:1;margin-left:8px}.store-card-meta{font-size:12px;line-height:18px;font-weight:500;color:var(--Gray-500, #667085)}.live-status{display:inline-flex;align-items:center;padding:2px 8px;border-radius:16px;font-size:12px;line-height:18px;font-weight:500;background:#ecfdf3;border:1px solid #ABEFC6;color:#067647}.live-status .live-dot{width:6px;height:6px;border-radius:50%;background:#17b26a;margin-right:6px}.live-status.down{background:#fef3f2;border-color:#fecdca;color:#b42318}.live-status.down .live-dot{background:#d92d20}.access-modal{background:#fff;border-radius:16px;overflow:hidden}.access-head{display:flex;align-items:center;gap:16px;padding:20px 24px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.access-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;flex-shrink:0;border-radius:12px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)}.access-title{flex:1}.access-body{padding:20px 24px 0}.access-text{margin:0 0 20px;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-box{padding:16px 20px;border:1px solid var(--Gray-200, #EAECF0);border-radius:12px;background:var(--Gray-50, #F9FAFB)}.access-row{display:flex;align-items:center;padding:8px 0}.access-label{width:180px;flex-shrink:0;font-size:12px;line-height:18px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--Gray-500, #667085)}.access-value{font-size:14px;line-height:20px;font-weight:500;color:var(--Gray-900, #101828)}.skel{display:inline-block;height:14px;margin:3px 0;border-radius:6px;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:skel-shimmer 1.5s linear infinite}@keyframes skel-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.skel-label{width:110px;margin-right:70px}.skel-value{width:160px}.access-note{padding:8px 0;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-note.error{color:var(--Error-700, #B42318)}.access-foot{display:flex;justify-content:flex-end;gap:12px;padding:24px}.access-foot .btn{font-size:14px!important;line-height:20px!important;padding:8px 16px!important}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i7.TicketInfraComponent, selector: "lib-ticket-infra", inputs: ["selectedTab"] }, { kind: "component", type: i8.SummaryInfraComponent, selector: "lib-summary-infra", inputs: ["selectedTab"] }, { kind: "component", type: i9.FootfallDirectoryComponent, selector: "lib-footfall-directory", inputs: ["selectedTab"] }, { kind: "component", type: i10.TicketCameraAngleComponent, selector: "lib-ticket-camera-angle", inputs: ["selectedTab"] }, { kind: "component", type: i11.TicketInfraV2Component, selector: "lib-ticket-infra-v2", inputs: ["selectedTab"] }, { kind: "component", type: i12.FileLogsComponent, selector: "lib-file-logs", inputs: ["storeId", "clientId", "date"] }] });
300
300
  }
301
301
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoStoreInfraComponent, decorators: [{
302
302
  type: Component,
303
- args: [{ selector: 'lib-tango-store-infra', template: "<!-- Store card: name and timings from get-store, Live status from the V2 store list. -->\r\n<div class=\"card mb-5 py-4 px-5\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-3\"><svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#D1FADF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#ECFDF3\" stroke-width=\"6\"/>\r\n <path d=\"M15.6799 18.8039L15.6267 18.8871C15.0686 19.8741 15.6644 21.1215 16.7361 21.2646C16.8331 21.2765 16.9235 21.2828 17.0118 21.2828C17.5899 21.2828 18.1011 21.0348 18.4574 20.648L19.0107 20.0474L19.5621 20.6498C19.9141 21.0342 20.4241 21.2828 21.0061 21.2828C21.5856 21.2828 22.0985 21.0338 22.4502 20.6498L23.0033 20.0455L23.5565 20.6498C23.9081 21.0338 24.4211 21.2828 25.0005 21.2828C25.58 21.2828 26.0929 21.0338 26.4445 20.6498L26.9977 20.0455L27.5509 20.6498C27.9025 21.0338 28.4155 21.2828 28.9949 21.2828C29.0803 21.2828 29.1733 21.2765 29.2697 21.2647C30.3649 21.1154 30.9627 19.8012 30.324 18.8044C30.324 18.8043 30.324 18.8043 30.3239 18.8042L28.5658 16.0628L28.5658 16.0628L28.5648 16.0614C28.5496 16.0375 28.5121 16.012 28.465 16.012H17.5356C17.4884 16.012 17.4509 16.0375 17.4357 16.0614L17.4351 16.0623L15.6799 18.8039ZM28.6514 23.7372V26.8691V27.6191H27.9014H18.0992H17.3492V26.8691V23.7376C17.239 23.7458 17.1274 23.7501 17.0148 23.7501C16.9725 23.7501 16.9305 23.7494 16.8888 23.7482V26.8691V28.8036C16.8888 29.4471 17.4227 29.9882 18.0992 29.9882H27.9014C28.5779 29.9882 29.1118 29.4471 29.1118 28.8036V26.8691V23.7484C29.072 23.7495 29.032 23.7501 28.9918 23.7501C28.8774 23.7501 28.7639 23.7457 28.6514 23.7372Z\" stroke=\"#027A48\" stroke-width=\"1.5\"/>\r\n </svg></span>\r\n <div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"store-card-name\">{{ storeName }}</span>\r\n <span *ngIf=\"liveStatus\" class=\"live-status ms-4\" [class.down]=\"liveStatus === 'Not Live'\">\r\n <span class=\"live-dot\"></span>{{ liveStatus }}\r\n </span>\r\n </div>\r\n <div class=\"store-card-meta d-flex align-items-center mt-1\">\r\n <span>{{ storeId || '--' }}</span>\r\n <span class=\"mx-2\">\u00B7</span>\r\n <svg class=\"me-1\" width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 4.5V9L12 10.5M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ storeOpen || '--' }} - {{ storeClose || '--' }}</span>\r\n </div>\r\n </div>\r\n <!-- Tango users of Infra V2 clients only. The hovered button expands; Terminal access is expanded while none is. -->\r\n <div *ngIf=\"showStoreActions\" class=\"store-actions ms-auto d-flex align-items-center gap-3\">\r\n <button type=\"button\" class=\"store-act is-default\" (click)=\"openTerminal(terminalTpl)\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Terminal access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 7.5C3 6.4 3.9 5.5 5 5.5H9.2L11.2 7.5H19C20.1 7.5 21 8.4 21 9.5V17C21 18.1 20.1 19 19 19H5C3.9 19 3 18.1 3 17V7.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">File access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M8.6 4.5L6.4 3.6C5.8 3.4 5.1 3.6 4.7 4.1L3.5 5.6C3.1 6.1 3 6.8 3.2 7.4C4.9 12.7 9.3 17.1 14.6 18.8C15.2 19 15.9 18.9 16.4 18.5L17.9 17.3C18.4 16.9 18.6 16.2 18.4 15.6L17.5 13.4C17.3 12.8 16.6 12.5 16 12.6L13.6 13.1C11.9 12.2 10.8 11.1 9.9 9.4L10.4 7C10.5 6.4 10.2 5.7 9.6 5.5L8.6 4.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Call</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"card mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('infra')\"><a [ngClass]=\"selectedTab ==='infra' ? 'active' :''\"\r\n class=\"nav-link cursor-pointer no-border me-6 \">Infra</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('dataMismatch')\">\r\n <a [ngClass]=\"selectedTab ==='dataMismatch' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Data Mismatch</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('cameraAngleChange')\">\r\n <a [ngClass]=\"selectedTab ==='cameraAngleChange' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Camera Angle</a>\r\n </li>\r\n <!-- File logs, at the right end of the row: its own page at ?type=fileLogs. -->\r\n <li class=\"nav-item ms-auto\" (click)=\"selectedTabs('fileLogs')\">\r\n <a [ngClass]=\"selectedTab ==='fileLogs' ? 'active' :''\" class=\"nav-link cursor-pointer file-logs-link\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M14 3H7C5.9 3 5 3.9 5 5V19C5 20.1 5.9 21 7 21H17C18.1 21 19 20.1 19 19V8L14 3Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 3V8H19M9 13H15M9 17H13\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n File logs\r\n </a>\r\n </li>\r\n\r\n <!-- <li *ngIf=\"(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS\" class=\"nav-item\" (click)=\"selectedTabs('footfall')\">\r\n <a [ngClass]=\"selectedTab ==='footfall' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Footfall Directory</a>\r\n </li> -->\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra'\" class=\"mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('summary')\"><a [ngClass]=\"selectedTab1 ==='summary' ? 'active' :''\"\r\n class=\"nav-link nav-link1 cursor-pointer no-border me-6 \">Summary</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('tickets')\">\r\n <a [ngClass]=\"selectedTab1 ==='tickets' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V1</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('ticketsV2')\">\r\n <a [ngClass]=\"selectedTab1 ==='ticketsV2' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V2</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='summary'\">\r\n <lib-summary-infra [selectedTab]=\"selectedTab\"></lib-summary-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='tickets'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='ticketsV2'\">\r\n <lib-ticket-infra-v2 [selectedTab]=\"selectedTab\"></lib-ticket-infra-v2>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='dataMismatch'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n\r\n<div *ngIf=\"selectedTab ==='cameraAngleChange'\">\r\n <lib-ticket-camera-angle [selectedTab]=\"selectedTab\"></lib-ticket-camera-angle>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='footfall'\">\r\n <lib-footfall-directory [selectedTab]=\"selectedTab\"></lib-footfall-directory>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='fileLogs'\">\r\n <lib-file-logs [storeId]=\"storeId\"></lib-file-logs>\r\n</div>\r\n<router-outlet></router-outlet>\r\n\r\n<!-- Terminal access confirmation. Filled from /infra/v2/remote/session; Client name from the client record. -->\r\n<ng-template #terminalTpl let-modal>\r\n <div class=\"access-modal\">\r\n <div class=\"access-head\">\r\n <span class=\"access-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"access-title fs-4 text-gray-800 fw-bold\">Open terminal access?</span>\r\n </div>\r\n <div class=\"access-body\">\r\n <p class=\"access-text\">This opens a command window on the store system. Commands run on the live system.</p>\r\n <div class=\"access-box\">\r\n <!-- Loading: shimmering placeholder rows (see .skel). -->\r\n <ng-container *ngIf=\"sessionState === 'loading'\">\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n </ng-container>\r\n <div *ngIf=\"sessionState === 'error'\" class=\"access-note error\">{{ sessionError || \"Couldn't open the session.\" }}</div>\r\n <ng-container *ngIf=\"sessionState === 'ready'\">\r\n <div class=\"access-row\"><span class=\"access-label\">Client name</span><span class=\"access-value\">{{ clientDisplayName || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store ID</span><span class=\"access-value\">{{ session?.storeId || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store name</span><span class=\"access-value\">{{ session?.storeName || '--' }}</span></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"access-foot\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"modal.close()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"sessionState !== 'ready'\" (click)=\"connect(modal)\">Connect</button>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:8px 12px}.nav-item1 .nav-link1:hover{border:none}.nav-item .nav-link.file-logs-link{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:6px}.nav-item .nav-link.file-logs-link:hover{border-bottom:1px solid transparent}.store-card-name{font-size:18px;line-height:28px;font-weight:600;color:var(--Gray-900, #101828)}.store-act{display:inline-flex;align-items:center;height:44px;padding:0 12px;border:0;border-radius:12px;background:var(--Primary-700, #009BF3);color:#fff;font-size:15px;font-weight:700;transition:background-color .3s ease,color .3s ease,padding .3s ease}.store-act svg{flex-shrink:0}.store-act .act-label{max-width:0;opacity:0;margin-left:0;overflow:hidden;white-space:nowrap;transition:max-width .3s ease,opacity .2s ease,margin-left .3s ease}.store-actions:not(:has(.store-act:hover)) .store-act.is-default,.store-act:hover{background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);padding:0 18px}.store-actions:not(:has(.store-act:hover)) .store-act.is-default .act-label,.store-act:hover .act-label{max-width:160px;opacity:1;margin-left:8px}.store-card-meta{font-size:12px;line-height:18px;font-weight:500;color:var(--Gray-500, #667085)}.live-status{display:inline-flex;align-items:center;padding:2px 8px;border-radius:16px;font-size:12px;line-height:18px;font-weight:500;background:#ecfdf3;border:1px solid #ABEFC6;color:#067647}.live-status .live-dot{width:6px;height:6px;border-radius:50%;background:#17b26a;margin-right:6px}.live-status.down{background:#fef3f2;border-color:#fecdca;color:#b42318}.live-status.down .live-dot{background:#d92d20}.access-modal{background:#fff;border-radius:16px;overflow:hidden}.access-head{display:flex;align-items:center;gap:16px;padding:20px 24px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.access-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;flex-shrink:0;border-radius:12px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)}.access-title{flex:1}.access-body{padding:20px 24px 0}.access-text{margin:0 0 20px;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-box{padding:16px 20px;border:1px solid var(--Gray-200, #EAECF0);border-radius:12px;background:var(--Gray-50, #F9FAFB)}.access-row{display:flex;align-items:center;padding:8px 0}.access-label{width:180px;flex-shrink:0;font-size:12px;line-height:18px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--Gray-500, #667085)}.access-value{font-size:14px;line-height:20px;font-weight:500;color:var(--Gray-900, #101828)}.skel{display:inline-block;height:14px;margin:3px 0;border-radius:6px;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:skel-shimmer 1.5s linear infinite}@keyframes skel-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.skel-label{width:110px;margin-right:70px}.skel-value{width:160px}.access-note{padding:8px 0;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-note.error{color:var(--Error-700, #B42318)}.access-foot{display:flex;justify-content:flex-end;gap:12px;padding:24px}.access-foot .btn{font-size:14px!important;line-height:20px!important;padding:8px 16px!important}\n"] }]
303
+ args: [{ selector: 'lib-tango-store-infra', template: "<!-- Store card: name and timings from get-store, Live status from the V2 store list. -->\r\n<div class=\"card mb-5 py-4 px-5\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-3\"><svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#D1FADF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#ECFDF3\" stroke-width=\"6\"/>\r\n <path d=\"M15.6799 18.8039L15.6267 18.8871C15.0686 19.8741 15.6644 21.1215 16.7361 21.2646C16.8331 21.2765 16.9235 21.2828 17.0118 21.2828C17.5899 21.2828 18.1011 21.0348 18.4574 20.648L19.0107 20.0474L19.5621 20.6498C19.9141 21.0342 20.4241 21.2828 21.0061 21.2828C21.5856 21.2828 22.0985 21.0338 22.4502 20.6498L23.0033 20.0455L23.5565 20.6498C23.9081 21.0338 24.4211 21.2828 25.0005 21.2828C25.58 21.2828 26.0929 21.0338 26.4445 20.6498L26.9977 20.0455L27.5509 20.6498C27.9025 21.0338 28.4155 21.2828 28.9949 21.2828C29.0803 21.2828 29.1733 21.2765 29.2697 21.2647C30.3649 21.1154 30.9627 19.8012 30.324 18.8044C30.324 18.8043 30.324 18.8043 30.3239 18.8042L28.5658 16.0628L28.5658 16.0628L28.5648 16.0614C28.5496 16.0375 28.5121 16.012 28.465 16.012H17.5356C17.4884 16.012 17.4509 16.0375 17.4357 16.0614L17.4351 16.0623L15.6799 18.8039ZM28.6514 23.7372V26.8691V27.6191H27.9014H18.0992H17.3492V26.8691V23.7376C17.239 23.7458 17.1274 23.7501 17.0148 23.7501C16.9725 23.7501 16.9305 23.7494 16.8888 23.7482V26.8691V28.8036C16.8888 29.4471 17.4227 29.9882 18.0992 29.9882H27.9014C28.5779 29.9882 29.1118 29.4471 29.1118 28.8036V26.8691V23.7484C29.072 23.7495 29.032 23.7501 28.9918 23.7501C28.8774 23.7501 28.7639 23.7457 28.6514 23.7372Z\" stroke=\"#027A48\" stroke-width=\"1.5\"/>\r\n </svg></span>\r\n <div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"store-card-name\">{{ storeName }}</span>\r\n <span *ngIf=\"liveStatus\" class=\"live-status ms-4\" [class.down]=\"liveStatus === 'Not Live'\">\r\n <span class=\"live-dot\"></span>{{ liveStatus }}\r\n </span>\r\n </div>\r\n <div class=\"store-card-meta d-flex align-items-center mt-1\">\r\n <span>{{ storeId || '--' }}</span>\r\n <span class=\"mx-2\">\u00B7</span>\r\n <svg class=\"me-1\" width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 4.5V9L12 10.5M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ storeOpen || '--' }} - {{ storeClose || '--' }}</span>\r\n </div>\r\n </div>\r\n <!-- Tango users of Infra V2 clients only. The hovered button expands; Terminal access is expanded while none is. -->\r\n <div *ngIf=\"showStoreActions\" class=\"store-actions ms-auto d-flex align-items-center gap-3\">\r\n <button type=\"button\" class=\"store-act is-default\" (click)=\"openTerminal(terminalTpl)\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Terminal access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 7.5C3 6.4 3.9 5.5 5 5.5H9.2L11.2 7.5H19C20.1 7.5 21 8.4 21 9.5V17C21 18.1 20.1 19 19 19H5C3.9 19 3 18.1 3 17V7.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">File access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M8.6 4.5L6.4 3.6C5.8 3.4 5.1 3.6 4.7 4.1L3.5 5.6C3.1 6.1 3 6.8 3.2 7.4C4.9 12.7 9.3 17.1 14.6 18.8C15.2 19 15.9 18.9 16.4 18.5L17.9 17.3C18.4 16.9 18.6 16.2 18.4 15.6L17.5 13.4C17.3 12.8 16.6 12.5 16 12.6L13.6 13.1C11.9 12.2 10.8 11.1 9.9 9.4L10.4 7C10.5 6.4 10.2 5.7 9.6 5.5L8.6 4.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Call</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"card mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('infra')\"><a [ngClass]=\"selectedTab ==='infra' ? 'active' :''\"\r\n class=\"nav-link cursor-pointer no-border me-6 \">Infra</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('dataMismatch')\">\r\n <a [ngClass]=\"selectedTab ==='dataMismatch' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Data Mismatch</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('cameraAngleChange')\">\r\n <a [ngClass]=\"selectedTab ==='cameraAngleChange' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Camera Angle</a>\r\n </li>\r\n <!-- File logs, at the right end of the row: its own page at ?type=fileLogs. Tango only. -->\r\n <li *ngIf=\"isTango\" class=\"nav-item ms-auto\" (click)=\"selectedTabs('fileLogs')\">\r\n <a [ngClass]=\"selectedTab ==='fileLogs' ? 'active' :''\" class=\"nav-link cursor-pointer file-logs-link\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M14 3H7C5.9 3 5 3.9 5 5V19C5 20.1 5.9 21 7 21H17C18.1 21 19 20.1 19 19V8L14 3Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 3V8H19M9 13H15M9 17H13\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n File logs\r\n </a>\r\n </li>\r\n\r\n <!-- <li *ngIf=\"(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS\" class=\"nav-item\" (click)=\"selectedTabs('footfall')\">\r\n <a [ngClass]=\"selectedTab ==='footfall' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Footfall Directory</a>\r\n </li> -->\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra'\" class=\"mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('summary')\"><a [ngClass]=\"selectedTab1 ==='summary' ? 'active' :''\"\r\n class=\"nav-link nav-link1 cursor-pointer no-border me-6 \">Summary</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('tickets')\">\r\n <a [ngClass]=\"selectedTab1 ==='tickets' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V1</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('ticketsV2')\">\r\n <a [ngClass]=\"selectedTab1 ==='ticketsV2' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V2</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='summary'\">\r\n <lib-summary-infra [selectedTab]=\"selectedTab\"></lib-summary-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='tickets'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='ticketsV2'\">\r\n <lib-ticket-infra-v2 [selectedTab]=\"selectedTab\"></lib-ticket-infra-v2>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='dataMismatch'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n\r\n<div *ngIf=\"selectedTab ==='cameraAngleChange'\">\r\n <lib-ticket-camera-angle [selectedTab]=\"selectedTab\"></lib-ticket-camera-angle>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='footfall'\">\r\n <lib-footfall-directory [selectedTab]=\"selectedTab\"></lib-footfall-directory>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='fileLogs' && isTango\">\r\n <lib-file-logs [storeId]=\"storeId\" [clientId]=\"headerFilters?.client\" [date]=\"headerFilters?.date?.endDate\"></lib-file-logs>\r\n</div>\r\n<router-outlet></router-outlet>\r\n\r\n<!-- Terminal access confirmation. Filled from /infra/v2/remote/session; Client name from the client record. -->\r\n<ng-template #terminalTpl let-modal>\r\n <div class=\"access-modal\">\r\n <div class=\"access-head\">\r\n <span class=\"access-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"access-title fs-4 text-gray-800 fw-bold\">Open terminal access?</span>\r\n </div>\r\n <div class=\"access-body\">\r\n <p class=\"access-text\">This opens a command window on the store system. Commands run on the live system.</p>\r\n <div class=\"access-box\">\r\n <!-- Loading: shimmering placeholder rows (see .skel). -->\r\n <ng-container *ngIf=\"sessionState === 'loading'\">\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n </ng-container>\r\n <div *ngIf=\"sessionState === 'error'\" class=\"access-note error\">{{ sessionError || \"Couldn't open the session.\" }}</div>\r\n <ng-container *ngIf=\"sessionState === 'ready'\">\r\n <div class=\"access-row\"><span class=\"access-label\">Client name</span><span class=\"access-value\">{{ clientDisplayName || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store ID</span><span class=\"access-value\">{{ session?.storeId || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store name</span><span class=\"access-value\">{{ session?.storeName || '--' }}</span></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"access-foot\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"modal.close()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"sessionState !== 'ready'\" (click)=\"connect(modal)\">Connect</button>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:8px 12px}.nav-item1 .nav-link1:hover{border:none}.nav-item .nav-link.file-logs-link{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:6px}.nav-item .nav-link.file-logs-link:hover{border-bottom:1px solid transparent}.store-card-name{font-size:18px;line-height:28px;font-weight:600;color:var(--Gray-900, #101828)}.store-act{display:inline-flex;align-items:center;height:44px;padding:0 12px;border:0;border-radius:12px;background:var(--Primary-700, #009BF3);color:#fff;font-size:15px;font-weight:700;transition:background-color .3s ease,color .3s ease,padding .3s ease}.store-act svg{flex-shrink:0}.store-act .act-label{max-width:0;opacity:0;margin-left:0;overflow:hidden;white-space:nowrap;transition:max-width .3s ease,opacity .2s ease,margin-left .3s ease}.store-actions:not(:has(.store-act:hover)) .store-act.is-default,.store-act:hover{background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);padding:0 18px}.store-actions:not(:has(.store-act:hover)) .store-act.is-default .act-label,.store-act:hover .act-label{max-width:160px;opacity:1;margin-left:8px}.store-card-meta{font-size:12px;line-height:18px;font-weight:500;color:var(--Gray-500, #667085)}.live-status{display:inline-flex;align-items:center;padding:2px 8px;border-radius:16px;font-size:12px;line-height:18px;font-weight:500;background:#ecfdf3;border:1px solid #ABEFC6;color:#067647}.live-status .live-dot{width:6px;height:6px;border-radius:50%;background:#17b26a;margin-right:6px}.live-status.down{background:#fef3f2;border-color:#fecdca;color:#b42318}.live-status.down .live-dot{background:#d92d20}.access-modal{background:#fff;border-radius:16px;overflow:hidden}.access-head{display:flex;align-items:center;gap:16px;padding:20px 24px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.access-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;flex-shrink:0;border-radius:12px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)}.access-title{flex:1}.access-body{padding:20px 24px 0}.access-text{margin:0 0 20px;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-box{padding:16px 20px;border:1px solid var(--Gray-200, #EAECF0);border-radius:12px;background:var(--Gray-50, #F9FAFB)}.access-row{display:flex;align-items:center;padding:8px 0}.access-label{width:180px;flex-shrink:0;font-size:12px;line-height:18px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--Gray-500, #667085)}.access-value{font-size:14px;line-height:20px;font-weight:500;color:var(--Gray-900, #101828)}.skel{display:inline-block;height:14px;margin:3px 0;border-radius:6px;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:skel-shimmer 1.5s linear infinite}@keyframes skel-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.skel-label{width:110px;margin-right:70px}.skel-value{width:160px}.access-note{padding:8px 0;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-note.error{color:var(--Error-700, #B42318)}.access-foot{display:flex;justify-content:flex-end;gap:12px;padding:24px}.access-foot .btn{font-size:14px!important;line-height:20px!important;padding:8px 16px!important}\n"] }]
304
304
  }], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.Router }, { type: i1.GlobalStateService }, { type: i2.ActivatedRoute }, { type: i3.TicketsService }, { type: i4.NgbModal }, { type: i5.AuthService }] });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtdGlja2V0LWluZnJhL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1zdG9yZS1pbmZyYS90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS10aWNrZXQtaW5mcmEvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLXN0b3JlLWluZnJhL3RhbmdvLXN0b3JlLWluZnJhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtDLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQU92RyxNQUFNLE9BQU8sd0JBQXdCO0lBUWY7SUFBaUM7SUFBcUI7SUFBOEI7SUFBNkI7SUFBc0M7SUFBdUI7SUFQbE0sV0FBVyxDQUFNO0lBQ1QsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDL0IsT0FBTyxDQUFNO0lBQ2IsSUFBSSxDQUFNO0lBQ1YsWUFBWSxDQUFNO0lBQ1Ysb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLFVBQVUsQ0FBTTtJQUNoQixZQUFvQixRQUF3QixFQUFTLE1BQWEsRUFBUSxFQUFxQixFQUFTLEtBQW9CLEVBQVMsY0FBNkIsRUFBUyxLQUFjLEVBQVMsV0FBdUI7UUFBck0sYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQVEsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQVMsbUJBQWMs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dHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpY2tldHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlbW90ZVRlcm1pbmFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGlja2V0LWluZnJhLXYyL3JlbW90ZS10ZXJtaW5hbC9yZW1vdGUtdGVybWluYWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRhbmdvLXN0b3JlLWluZnJhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhbmdvU3RvcmVJbmZyYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG4gIHNlbGVjdGVkVGFiOiBhbnk7XHJcbiAgcHJpdmF0ZSBkZXRhY2ggPSBuZXcgU3ViamVjdCgpO1xyXG4gIHN0b3JlSWQ6IGFueTtcclxuICB0eXBlOiBhbnk7XHJcbiAgc2VsZWN0ZWRUYWIxOiBhbnk7XHJcbiAgcHJpdmF0ZSBzdWJUYWJGcm9tVXJsQXBwbGllZCA9IGZhbHNlO1xyXG4gIGNsaWVudE5hbWU6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhZ2VJbmZvOlBhZ2VJbmZvU2VydmljZSxwcml2YXRlIHJvdXRlcjpSb3V0ZXIscHVibGljIGdzOkdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlLHByaXZhdGUgdGlja2V0c1NlcnZpY2U6VGlja2V0c1NlcnZpY2UscHJpdmF0ZSBtb2RhbDpOZ2JNb2RhbCxwcml2YXRlIGF1dGhTZXJ2aWNlOkF1dGhTZXJ2aWNlKXtcclxuXHJcbiAgfVxyXG4gIGhlYWRlckZpbHRlcnM6YW55O1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXRhY2gubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGV0YWNoLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIGNsaWVudERhdGE6YW55O1xyXG4gICB1c2VyVHlwZTphbnk7XHJcbnByaXZhdGUgaXNTdG9yZUlkVmFsaWRGb3JDbGllbnQoc3RvcmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFzdG9yZUlkIHx8ICF0aGlzLnVzZXJUeXBlPy5jbGllbnRJZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAvLyAvLyBUYW5nbyB1c2VycyBjYW4gYWNjZXNzIGFsbFxyXG4gIC8vIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSAndGFuZ28nKSB7XHJcbiAgLy8gICByZXR1cm4gdHJ1ZTtcclxuICAvLyB9XHJcblxyXG4gIGNvbnN0IHN0b3JlQ2xpZW50SWQgPSBzdG9yZUlkLnNwbGl0KCctJylbMF07XHJcbiAgcmV0dXJuIHN0b3JlQ2xpZW50SWQgPT09IFN0cmluZyh0aGlzLnVzZXJUeXBlLmNsaWVudElkKTtcclxufVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgdGhpcy51c2VyVHlwZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgJ3t9Jyk7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICBjb25zdCB0eXBlID0gcGFyYW1zWyd0eXBlJ10gPyBwYXJhbXNbJ3R5cGUnXSA6ICdpbmZyYSc7XHJcbiAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAvLyBFdmVyeSBJbmZyYSBibG9jayBpcyBnYXRlZCBvbiBzZWxlY3RlZFRhYiA9PT0gJ2luZnJhJywgc28gdGhpcyByZWFkc1xyXG4gICAgICAgIC8vIGFzIFwidGhlIEluZnJhIHRhYiwgb3BlbmVkIG9uIFRpY2tldHMgVjJcIiByYXRoZXIgdGhhbiBhIHRhYiBvZiBpdHMgb3duLlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSAnaW5mcmEnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgLy8gT25seSBvbiB0aGUgZmlyc3QgZW1pc3Npb246IHNlbGVjdGVkVGFiczEoKSByZXdyaXRlcyBgdHlwZWAsIHdoaWNoXHJcbiAgICAgIC8vIGZpcmVzIHRoaXMgc3Vic2NyaXB0aW9uIGFnYWluLCBhbmQgd2l0aG91dCB0aGUgZ3VhcmQgdGhhdCB3b3VsZCB1bmRvXHJcbiAgICAgIC8vIHRoZSBjbGljayAtIFN1bW1hcnkgaW4gcGFydGljdWxhciB3b3VsZCBib3VuY2UgdG8gVGlja2V0cyBWMS5cclxuICAgICAgaWYoIXRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQpe1xyXG4gICAgICAgIHRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0gJ3RpY2tldHNWMidcclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5zZWxlY3RlZFRhYiA9PT0naW5mcmEnKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0ndGlja2V0cydcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgICAgICAgIGNvbnN0IGNsaWVudERhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcInt9XCIpO1xyXG4gICAgdGhpcy5jbGllbnREYXRhID0gY2xpZW50RGF0YTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlSWQgPVxyXG4gICAgICAgICAgICBkYXRhICYmIGRhdGEuc3RvcmUgPyBkYXRhLnN0b3JlIDogdGhpcy5yb3V0ZXIudXJsLnNwbGl0KFwiL1wiKVszXTtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnROYW1lID0gZGF0YT8uY2xpZW50TmFtZSA/IGRhdGE/LmNsaWVudE5hbWU6Jyc7XHJcbiAgICAgICAgICAgICBpZiAodGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSAhPT0gJ3RhbmdvJykge1xyXG4gICAgICAgICAgICAgaWYgKCF0aGlzLmlzU3RvcmVJZFZhbGlkRm9yQ2xpZW50KHRoaXMuc3RvcmVJZCkpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Vycm9yLzQwNCddKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgICAgIHRoaXMudXBkYXRlU3RvcmVJZFF1ZXJ5UGFyYW0odGhpcy5zdG9yZUlkKTtcclxuICAgICAgICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICAgICAgICAgIHRoaXMubG9hZFN0b3JlTmFtZSh0aGlzLnN0b3JlSWQpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkTGl2ZVN0YXR1cyh0aGlzLnN0b3JlSWQsIGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkQ2xpZW50KGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlU3RvcmVJZFF1ZXJ5UGFyYW0oc3RvcmVJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3MudXNlckFjY2Vzcy52YWx1ZT8udXNlclR5cGUgIT09ICd0YW5nbycpIHtcclxuICAgICAgIGlmICghdGhpcy5pc1N0b3JlSWRWYWxpZEZvckNsaWVudChzdG9yZUlkKSkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZXJyb3IvNDA0J10pO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxufVxyXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB9O1xyXG4gICAgICAvLyBVcGRhdGUgc3RvcmVJZCBpbiBxdWVyeVBhcmFtc1xyXG4gICAgICBxdWVyeVBhcmFtcy5zdG9yZUlkID0gc3RvcmVJZDtcclxuICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIHNhbWUgcm91dGUgd2l0aCB1cGRhdGVkIHF1ZXJ5UGFyYW1zXHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcywgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyB9KTtcclxuICAgIH1cclxuICBzZXRQYWdlRGF0YSgpe1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIlRpY2tldHNcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKFxyXG4gICAgICBcIlZpZXcsIHNoYXJlLCBkb3dubG9hZCBhbmQgYmVuY2htYXJrIHRoZSBzdG9yZXMgcGVyZm9ybWFuY2UgaW4gb25lIHNjcmVlblwiXHJcbiAgICApO1xyXG4gICAgbGV0IGJyZWFkY3J1bWJzOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3QgY29tbW9uQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jbGllbnROYW1lLFxyXG4gICAgICAgIHBhdGg6IFwiL21hbmFnZS9zdG9yZXNcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY2xpZW50TmFtZSxcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2Uvc3RvcmVzXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuc3RvcmVJZCxcclxuICAgICAgICBwYXRoOiBgL21hbmFnZS9zdG9yZXMvY2FtZXJhcz9zdG9yZUlkPSR7dGhpcy5zdG9yZUlkfWAsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLnN0b3JlSWQsXHJcbiAgICAgICAgcGF0aDogYC9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXM/c3RvcmVJZD0ke3RoaXMuc3RvcmVJZH1gLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSBcInRhbmdvXCIpIHtcclxuICAgICAgYnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvYnJhbmRzXCIsXHJcbiAgICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aXRsZTogXCJNYW5hZ2VcIixcclxuICAgICAgICAgIHBhdGg6IFwiL21hbmFnZS9icmFuZHNcIixcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uY29tbW9uQnJlYWRjcnVtYnMsXHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3MudXNlckFjY2Vzcy52YWx1ZT8udXNlclR5cGUgPT09IFwiY2xpZW50XCIpIHtcclxuICAgICAgYnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgICBwYXRoOiBcIi9tYW5hZ2Uvc3VtbWFyeVwiLFxyXG4gICAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgICBwYXRoOiBcIi9tYW5hZ2Uvc3VtbWFyeVwiLFxyXG4gICAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi5jb21tb25CcmVhZGNydW1icyxcclxuICAgICAgXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhicmVhZGNydW1icyk7XHJcbiAgfVxyXG4vLyBTdG9yZSBuYW1lIGZvciB0aGUgY2FyZCBhYm92ZSB0aGUgdGFicy4gVGhlIGhlYWRlciBmaWx0ZXIgZG9lc24ndCBjYXJyeSBpdCBvblxyXG4vLyB0aGlzIHBhZ2UsIHNvIGl0IGNvbWVzIGZyb20gZ2V0LXN0b3JlLiAnLS0nIHdoaWxlIGxvYWRpbmcgb3Igb24gZmFpbHVyZS5cclxucHJpdmF0ZSBzdG9yZU5hbWVGcm9tQXBpID0gJyc7XHJcbmdldCBzdG9yZU5hbWUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc3RvcmVOYW1lRnJvbUFwaSB8fCAnLS0nOyB9XHJcbi8vIE9wZW4gLyBjbG9zZSB0aW1lIGZyb20gdGhlIHN0b3JlIHByb2ZpbGUsIGFzIHRoZSBzdG9yZSBoZWFkZXIgc2hvd3MgdGhlbS5cclxuc3RvcmVPcGVuID0gJyc7XHJcbnN0b3JlQ2xvc2UgPSAnJztcclxuXHJcbnByaXZhdGUgbG9hZFN0b3JlTmFtZShzdG9yZUlkOiBhbnkpOiB2b2lkIHtcclxuICB0aGlzLnN0b3JlTmFtZUZyb21BcGkgPSAnJztcclxuICB0aGlzLnN0b3JlT3BlbiA9ICcnO1xyXG4gIHRoaXMuc3RvcmVDbG9zZSA9ICcnO1xyXG4gIGlmICghc3RvcmVJZCkgcmV0dXJuO1xyXG4gIHRoaXMudGlja2V0c1NlcnZpY2UuZ2V0U3RvcmVEZXRhaWxzKHN0b3JlSWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAvLyBJZ25vcmUgYSBsYXRlIHJlcGx5IGZvciBhIHN0b3JlIHRoYXQgaXMgbm8gbG9uZ2VyIHNlbGVjdGVkLlxyXG4gICAgICBpZiAoc3RvcmVJZCAhPT0gdGhpcy5zdG9yZUlkKSByZXR1cm47XHJcbiAgICAgIHRoaXMuc3RvcmVOYW1lRnJvbUFwaSA9IHJlcz8uZGF0YT8uc3RvcmVOYW1lIHx8ICcnO1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbiA9IHJlcz8uZGF0YT8uc3RvcmVQcm9maWxlPy5vcGVuIHx8ICcnO1xyXG4gICAgICB0aGlzLnN0b3JlQ2xvc2UgPSByZXM/LmRhdGE/LnN0b3JlUHJvZmlsZT8uY2xvc2UgfHwgJyc7XHJcbiAgICB9LFxyXG4gICAgZXJyb3I6ICgpID0+IHt9LFxyXG4gIH0pO1xyXG59XHJcblxyXG4vLyBUaGUgc3RvcmUtY2FyZCBidXR0b25zIChUZXJtaW5hbCBhY2Nlc3MsIEZpbGUgYWNjZXNzLCBDYWxsKSBhcmUgZm9yIFRhbmdvIHVzZXJzIG9ubHkuXHJcbmdldCBpc1RhbmdvKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSA9PT0gJ3RhbmdvJzsgfVxyXG5cclxuLy8gLi4uYW5kIG9ubHkgZm9yIEluZnJhIFYyIGNsaWVudHMuIFNhbWUgY2FsbCBhbmQgZmllbGQgdGhlIFRpY2tldHMgcGFnZSB1c2VzIGZvclxyXG4vLyBpdHMgSW5mcmEgVjIgdGFiLiBIaWRkZW4gd2hpbGUgbG9hZGluZyBvciBvbiBlcnJvci5cclxuaW5mcmFUaWNrZXRUeXBlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuY2xpZW50RGlzcGxheU5hbWUgPSAnJztcclxuZ2V0IHNob3dTdG9yZUFjdGlvbnMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzVGFuZ28gJiYgdGhpcy5pbmZyYVRpY2tldFR5cGUgPT09ICdWMic7IH1cclxuXHJcbnByaXZhdGUgbG9hZENsaWVudChoZWFkZXI6IGFueSk6IHZvaWQge1xyXG4gIHRoaXMuaW5mcmFUaWNrZXRUeXBlID0gbnVsbDtcclxuICB0aGlzLmNsaWVudERpc3BsYXlOYW1lID0gJyc7XHJcbiAgY29uc3QgY2xpZW50SWQgPSBoZWFkZXI/LmNsaWVudCB8fCBTdHJpbmcodGhpcy5zdG9yZUlkIHx8ICcnKS5zcGxpdCgnLScpWzBdO1xyXG4gIGlmICghY2xpZW50SWQpIHJldHVybjtcclxuICB0aGlzLmF1dGhTZXJ2aWNlLmdldEJyYW5kRGV0YWlscyhjbGllbnRJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaW5mcmFUaWNrZXRUeXBlID0gcmVzPy5kYXRhPy50aWNrZXRDb25maWdzPy5pbmZyYVRpY2tldFR5cGUgPz8gbnVsbDtcclxuICAgICAgdGhpcy5jbGllbnREaXNwbGF5TmFtZSA9IHJlcz8uZGF0YT8uY2xpZW50TmFtZSB8fCAnJztcclxuICAgIH0sXHJcbiAgICBlcnJvcjogKCkgPT4ge30sXHJcbiAgfSk7XHJcbn1cclxuXHJcbi8vIExpdmUgLyBOb3QgTGl2ZSBiZXNpZGUgdGhlIG5hbWUsIGJ5IHRoZSBzYW1lIHJ1bGUgYXMgdGhlIFN1bW1hcnkgY2FyZCdzIHRpbGVzLlxyXG4vLyBFbXB0eSAtIGFuZCBoaWRkZW4gLSB3aGlsZSBsb2FkaW5nLCBmb3IgYSBub24tVjIgY2xpZW50LCBvciBmb3IgYSBzdG9yZSBWMlxyXG4vLyBkb2VzIG5vdCBjb3VudCAoaW5hY3RpdmUsIG9yIG5vIGZpcnN0IGZpbGUgeWV0KS5cclxubGl2ZVN0YXR1czogJycgfCAnTGl2ZScgfCAnTm90IExpdmUnID0gJyc7XHJcblxyXG5wcml2YXRlIGxvYWRMaXZlU3RhdHVzKHN0b3JlSWQ6IGFueSwgaGVhZGVyOiBhbnkpOiB2b2lkIHtcclxuICB0aGlzLmxpdmVTdGF0dXMgPSAnJztcclxuICBjb25zdCBjbGllbnRJZCA9IGhlYWRlcj8uY2xpZW50IHx8IFN0cmluZyhzdG9yZUlkIHx8ICcnKS5zcGxpdCgnLScpWzBdO1xyXG4gIGlmICghc3RvcmVJZCB8fCAhY2xpZW50SWQgfHwgIWhlYWRlcj8uZGF0ZT8uZW5kRGF0ZSkgcmV0dXJuO1xyXG4gIGNvbnN0IGJvZHkgPSB7XHJcbiAgICBjbGllbnRJZDogW2NsaWVudElkXSwgZnJvbURhdGU6IGhlYWRlci5kYXRlLnN0YXJ0RGF0ZSB8fCBoZWFkZXIuZGF0ZS5lbmREYXRlLCB0b0RhdGU6IGhlYWRlci5kYXRlLmVuZERhdGUsXHJcbiAgICBzZWFyY2g6IHN0b3JlSWQsIG9mZnNldDogMSwgbGltaXQ6IDUwLFxyXG4gIH07XHJcbiAgdGhpcy50aWNrZXRzU2VydmljZS5zdG9yZUxpdmVTdGF0dXMoYm9keSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChzdG9yZUlkICE9PSB0aGlzLnN0b3JlSWQpIHJldHVybjtcclxuICAgICAgLy8gc2VhcmNoIGlzIGEgcGFydGlhbCBtYXRjaCAoNDA2LTEgYWxzbyBmaW5kcyA0MDYtMTApLCBzbyBwaWNrIHRoZSBleGFjdCBzdG9yZS5cclxuICAgICAgY29uc3Qgcm93ID0gKHJlcz8uZGF0YT8ucm93cyA/PyBbXSkuZmluZCgocjogYW55KSA9PiByLnN0b3JlSWQgPT09IHN0b3JlSWQpO1xyXG4gICAgICB0aGlzLmxpdmVTdGF0dXMgPSByb3c/LnN0YXR1cyA9PT0gJ0xpdmUnIHx8IHJvdz8uc3RhdHVzID09PSAnTm90IExpdmUnID8gcm93LnN0YXR1cyA6ICcnO1xyXG4gICAgfSxcclxuICAgIGVycm9yOiAoKSA9PiB7fSxcclxuICB9KTtcclxufVxyXG5cclxuc2VsZWN0ZWRUYWJzKHZhbHVlOmFueSl7XHJcbiAgdGhpcy5zZWxlY3RlZFRhYiA9IHZhbHVlO1xyXG4gIGlmKHRoaXMuc2VsZWN0ZWRUYWIgPT09J2luZnJhJyl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiMSA9J3RpY2tldHMnXHJcbiAgfVxyXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIH07XHJcbiAgICAgIHF1ZXJ5UGFyYW1zWyd0eXBlJ10gPSB2YWx1ZTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcmVsYXRpdmVUbzp0aGlzLnJvdXRlLCBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXN9KTtcclxufVxyXG5cclxuc2VsZWN0ZWRUYWJzMSh0eXBlOmFueSl7XHJcbiAgdGhpcy5zZWxlY3RlZFRhYjEgPSB0eXBlO1xyXG4gIC8vIEtlZXAgdGhlIFVSTCBpbiBzdGVwLCB0aGUgc2FtZSB3YXkgc2VsZWN0ZWRUYWJzKCkgZG9lcyBmb3IgdGhlIHRvcCB0YWJzLlxyXG4gIC8vIFN1bW1hcnkgaGFzIG5vIGB0eXBlYCBvZiBpdHMgb3duLCBzbyBpdCBzaGFyZXMgJ2luZnJhJyB3aXRoIFRpY2tldHMgVjEuXHJcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfTtcclxuICAgICAgcXVlcnlQYXJhbXNbJ3R5cGUnXSA9IHR5cGUgPT09ICd0aWNrZXRzVjInID8gJ2luZnJhdjInIDogJ2luZnJhJztcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcmVsYXRpdmVUbzp0aGlzLnJvdXRlLCBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXN9KTtcclxufVxyXG5cclxuLy8gVGVybWluYWwgYWNjZXNzIHBvcC11cDogb3BlbnMgYXQgb25jZSwgdGhlbiBmaWxscyBmcm9tIC9yZW1vdGUvc2Vzc2lvbi5cclxuLy8gRXZlcnkgY2FsbCBpcyBhdWRpdC1sb2dnZWQgYXMgYSBzZXNzaW9uIG9wZW5lZCwgQ2FuY2VsIGluY2x1ZGVkLlxyXG5zZXNzaW9uOiBhbnkgPSBudWxsO1xyXG5zZXNzaW9uU3RhdGU6ICdsb2FkaW5nJyB8ICdyZWFkeScgfCAnZXJyb3InID0gJ2xvYWRpbmcnO1xyXG5zZXNzaW9uRXJyb3IgPSAnJztcclxuXHJcbm9wZW5UZXJtaW5hbCh0cGw6IFRlbXBsYXRlUmVmPGFueT4pOiB2b2lkIHtcclxuICB0aGlzLnNlc3Npb24gPSBudWxsO1xyXG4gIHRoaXMuc2Vzc2lvbkVycm9yID0gJyc7XHJcbiAgdGhpcy5zZXNzaW9uU3RhdGUgPSAnbG9hZGluZyc7XHJcbiAgdGhpcy5tb2RhbC5vcGVuKHRwbCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICB0aGlzLnRpY2tldHNTZXJ2aWNlLnJlbW90ZVNlc3Npb24odGhpcy5zdG9yZUlkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OiAocmVzOiBhbnkpID0+IHsgdGhpcy5zZXNzaW9uID0gcmVzPy5kYXRhID8/IG51bGw7IHRoaXMuc2Vzc2lvblN0YXRlID0gJ3JlYWR5JzsgfSxcclxuICAgIC8vIFRoZSBBUEkncyBvd24gbWVzc2FnZTogXCJTdG9yZSBub3QgZm91bmRcIiwgXCJObyBlZGdlIGFnZW50Li4uXCIsIFwibm90IGNvbmZpZ3VyZWRcIi5cclxuICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHsgdGhpcy5zZXNzaW9uRXJyb3IgPSBlcnI/LmVycm9yPy5lcnJvciB8fCAnJzsgdGhpcy5zZXNzaW9uU3RhdGUgPSAnZXJyb3InOyB9LFxyXG4gIH0pO1xyXG59XHJcblxyXG4vLyBDb25uZWN0OiBzd2FwIHRoZSBjb25maXJtYXRpb24gZm9yIHRoZSB0ZXJtaW5hbCBwb3AtdXAuIFN0YXRpYyBiYWNrZHJvcCBhbmRcclxuLy8gbm8gRXNjLCBzbyBhIHN0cmF5IGNsaWNrIGNhbm5vdCBkcm9wIGEgbGl2ZSBzaGVsbDsgaXQgY2xvc2VzIHZpYSBDbG9zZS5cclxuY29ubmVjdChjb25maXJtUmVmOiBhbnkpOiB2b2lkIHtcclxuICBjb25maXJtUmVmLmNsb3NlKCk7XHJcbiAgY29uc3QgcmVmID0gdGhpcy5tb2RhbC5vcGVuKFJlbW90ZVRlcm1pbmFsQ29tcG9uZW50LCB7XHJcbiAgICBzaXplOiAneGwnLCBjZW50ZXJlZDogdHJ1ZSwgYmFja2Ryb3A6ICdzdGF0aWMnLCBrZXlib2FyZDogZmFsc2UsIG1vZGFsRGlhbG9nQ2xhc3M6ICdyZW1vdGUtdGVybWluYWwtbW9kYWwnLFxyXG4gIH0pO1xyXG4gIHJlZi5jb21wb25lbnRJbnN0YW5jZS5zZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xyXG59XHJcblxyXG59XHJcbiIsIjwhLS0gU3RvcmUgY2FyZDogbmFtZSBhbmQgdGltaW5ncyBmcm9tIGdldC1zdG9yZSwgTGl2ZSBzdGF0dXMgZnJvbSB0aGUgVjIgc3RvcmUgbGlzdC4gLS0+XHJcbjxkaXYgY2xhc3M9XCJjYXJkIG1iLTUgcHktNCBweC01XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWUtM1wiPjxzdmcgd2lkdGg9XCI0NlwiIGhlaWdodD1cIjQ2XCIgdmlld0JveD1cIjAgMCA0NiA0NlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjRDFGQURGXCIvPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIHN0cm9rZT1cIiNFQ0ZERjNcIiBzdHJva2Utd2lkdGg9XCI2XCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTE1LjY3OTkgMTguODAzOUwxNS42MjY3IDE4Ljg4NzFDMTUuMDY4NiAxOS44NzQxIDE1LjY2NDQgMjEuMTIxNSAxNi43MzYxIDIxLjI2NDZDMTYuODMzMSAyMS4yNzY1IDE2LjkyMzUgMjEuMjgyOCAxNy4wMTE4IDIxLjI4MjhDMTcuNTg5OSAyMS4yODI4IDE4LjEwMTEgMjEuMDM0OCAxOC40NTc0IDIwLjY0OEwxOS4wMTA3IDIwLjA0NzRMMTkuNTYyMSAyMC42NDk4QzE5LjkxNDEgMjEuMDM0MiAyMC40MjQxIDIxLjI4MjggMjEuMDA2MSAyMS4yODI4QzIxLjU4NTYgMjEuMjgyOCAyMi4wOTg1IDIxLjAzMzggMjIuNDUwMiAyMC42NDk4TDIzLjAwMzMgMjAuMDQ1NUwyMy41NTY1IDIwLjY0OThDMjMuOTA4MSAyMS4wMzM4IDI0LjQyMTEgMjEuMjgyOCAyNS4wMDA1IDIxLjI4MjhDMjUuNTggMjEuMjgyOCAyNi4wOTI5IDIxLjAzMzggMjYuNDQ0NSAyMC42NDk4TDI2Ljk5NzcgMjAuMDQ1NUwyNy41NTA5IDIwLjY0OThDMjcuOTAyNSAyMS4wMzM4IDI4LjQxNTUgMjEuMjgyOCAyOC45OTQ5IDIxLjI4MjhDMjkuMDgwMyAyMS4yODI4IDI5LjE3MzMgMjEuMjc2NSAyOS4yNjk3IDIxLjI2NDdDMzAuMzY0OSAyMS4xMTU0IDMwLjk2MjcgMTkuODAxMiAzMC4zMjQgMTguODA0NEMzMC4zMjQgMTguODA0MyAzMC4zMjQgMTguODA0MyAzMC4zMjM5IDE4LjgwNDJMMjguNTY1OCAxNi4wNjI4TDI4LjU2NTggMTYuMDYyOEwyOC41NjQ4IDE2LjA2MTRDMjguNTQ5NiAxNi4wMzc1IDI4LjUxMjEgMTYuMDEyIDI4LjQ2NSAxNi4wMTJIMTcuNTM1NkMxNy40ODg0IDE2LjAxMiAxNy40NTA5IDE2LjAzNzUgMTcuNDM1NyAxNi4wNjE0TDE3LjQzNTEgMTYuMDYyM0wxNS42Nzk5IDE4LjgwMzlaTTI4LjY1MTQgMjMuNzM3MlYyNi44NjkxVjI3LjYxOTFIMjcuOTAxNEgxOC4wOTkySDE3LjM0OTJWMjYuODY5MVYyMy43Mzc2QzE3LjIzOSAyMy43NDU4IDE3LjEyNzQgMjMuNzUwMSAxNy4wMTQ4IDIzLjc1MDFDMTYuOTcyNSAyMy43NTAxIDE2LjkzMDUgMjMuNzQ5NCAxNi44ODg4IDIzLjc0ODJWMjYuODY5MVYyOC44MDM2QzE2Ljg4ODggMjkuNDQ3MSAxNy40MjI3IDI5Ljk4ODIgMTguMDk5MiAyOS45ODgySDI3LjkwMTRDMjguNTc3OSAyOS45ODgyIDI5LjExMTggMjkuNDQ3MSAyOS4xMTE4IDI4LjgwMzZWMjYuODY5MVYyMy43NDg0QzI5LjA3MiAyMy43NDk1IDI5LjAzMiAyMy43NTAxIDI4Ljk5MTggMjMuNzUwMUMyOC44Nzc0IDIzLjc1MDEgMjguNzYzOSAyMy43NDU3IDI4LjY1MTQgMjMuNzM3MlpcIiBzdHJva2U9XCIjMDI3QTQ4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdG9yZS1jYXJkLW5hbWVcIj57eyBzdG9yZU5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImxpdmVTdGF0dXNcIiBjbGFzcz1cImxpdmUtc3RhdHVzIG1zLTRcIiBbY2xhc3MuZG93bl09XCJsaXZlU3RhdHVzID09PSAnTm90IExpdmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaXZlLWRvdFwiPjwvc3Bhbj57eyBsaXZlU3RhdHVzIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RvcmUtY2FyZC1tZXRhIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3RvcmVJZCB8fCAnLS0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0yXCI+wrc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibWUtMVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgNC41VjlMMTIgMTAuNU0xNi41IDlDMTYuNSAxMy4xNDIxIDEzLjE0MjEgMTYuNSA5IDE2LjVDNC44NTc4NiAxNi41IDEuNSAxMy4xNDIxIDEuNSA5QzEuNSA0Ljg1Nzg2IDQuODU3ODYgMS41IDkgMS41QzEzLjE0MjEgMS41IDE2LjUgNC44NTc4NiAxNi41IDlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN0b3JlT3BlbiB8fCAnLS0nIH19IC0ge3sgc3RvcmVDbG9zZSB8fCAnLS0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIFRhbmdvIHVzZXJzIG9mIEluZnJhIFYyIGNsaWVudHMgb25seS4gVGhlIGhvdmVyZWQgYnV0dG9uIGV4cGFuZHM7IFRlcm1pbmFsIGFjY2VzcyBpcyBleHBhbmRlZCB3aGlsZSBub25lIGlzLiAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1N0b3JlQWN0aW9uc1wiIGNsYXNzPVwic3RvcmUtYWN0aW9ucyBtcy1hdXRvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzdG9yZS1hY3QgaXMtZGVmYXVsdFwiIChjbGljayk9XCJvcGVuVGVybWluYWwodGVybWluYWxUcGwpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjMuNVwiIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxM1wiIHJ4PVwiMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTggMjFIMTZNMTIgMTYuNVYyMU02LjUgOEw5IDEwTDYuNSAxMk0xMSAxMkgxNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwiYWN0LWxhYmVsXCI+VGVybWluYWwgYWNjZXNzPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzdG9yZS1hY3RcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyA3LjVDMyA2LjQgMy45IDUuNSA1IDUuNUg5LjJMMTEuMiA3LjVIMTlDMjAuMSA3LjUgMjEgOC40IDIxIDkuNVYxN0MyMSAxOC4xIDIwLjEgMTkgMTkgMTlINUMzLjkgMTkgMyAxOC4xIDMgMTdWNy41WlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJhY3QtbGFiZWxcIj5GaWxlIGFjY2Vzczwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3RvcmUtYWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguNiA0LjVMNi40IDMuNkM1LjggMy40IDUuMSAzLjYgNC43IDQuMUwzLjUgNS42QzMuMSA2LjEgMyA2LjggMy4yIDcuNEM0LjkgMTIuNyA5LjMgMTcuMSAxNC42IDE4LjhDMTUuMiAxOSAxNS45IDE4LjkgMTYuNCAxOC41TDE3LjkgMTcuM0MxOC40IDE2LjkgMTguNiAxNi4yIDE4LjQgMTUuNkwxNy41IDEzLjRDMTcuMyAxMi44IDE2LjYgMTIuNSAxNiAxMi42TDEzLjYgMTMuMUMxMS45IDEyLjIgMTAuOCAxMS4xIDkuOSA5LjRMMTAuNCA3QzEwLjUgNi40IDEwLjIgNS43IDkuNiA1LjVMOC42IDQuNVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwiYWN0LWxhYmVsXCI+Q2FsbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJjYXJkIG1iLTUgcHktMyBweC01XCI+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi1zdHJldGNoIG5hdi1saW5lLXRhYnMxIG5hdi1saW5lLXRhYnMgYm9yZGVyLXRyYW5zcGFyZW50IGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnaW5mcmEnKVwiPjxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSdpbmZyYScgPyAnYWN0aXZlJyA6JydcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG1lLTYgXCI+SW5mcmE8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnZGF0YU1pc21hdGNoJylcIj5cclxuICAgICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSdkYXRhTWlzbWF0Y2gnID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBtZS02XCI+RGF0YSBNaXNtYXRjaDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzKCdjYW1lcmFBbmdsZUNoYW5nZScpXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0nY2FtZXJhQW5nbGVDaGFuZ2UnID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBtZS02XCI+Q2FtZXJhIEFuZ2xlPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8IS0tIEZpbGUgbG9ncywgYXQgdGhlIHJpZ2h0IGVuZCBvZiB0aGUgcm93OiBpdHMgb3duIHBhZ2UgYXQgP3R5cGU9ZmlsZUxvZ3MuIC0tPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBtcy1hdXRvXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnZmlsZUxvZ3MnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09J2ZpbGVMb2dzJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgZmlsZS1sb2dzLWxpbmtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAzSDdDNS45IDMgNSAzLjkgNSA1VjE5QzUgMjAuMSA1LjkgMjEgNyAyMUgxN0MxOC4xIDIxIDE5IDIwLjEgMTkgMTlWOEwxNCAzWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDNWOEgxOU05IDEzSDE1TTkgMTdIMTNcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgRmlsZSBsb2dzXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgICAgPCEtLSA8bGkgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgfHwgY2xpZW50RGF0YT8uaXNWTVNcIiBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnZm9vdGZhbGwnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09J2Zvb3RmYWxsJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPkZvb3RmYWxsIERpcmVjdG9yeTwvYT5cclxuICAgICAgICAgICAgPC9saT4gLS0+XHJcbiAgICAgICAgPC91bD5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnXCIgY2xhc3M9XCJtYi01IHB5LTMgcHgtNVwiPlxyXG4gICAgPHVsIGNsYXNzPVwibmF2IG5hdi1zdHJldGNoIG5hdi1saW5lLXRhYnMxIG5hdi1saW5lLXRhYnMgYm9yZGVyLXRyYW5zcGFyZW50IGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbmF2LWl0ZW0xXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFiczEoJ3N1bW1hcnknKVwiPjxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiMSA9PT0nc3VtbWFyeScgPyAnYWN0aXZlJyA6JydcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBuYXYtbGluazEgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG1lLTYgXCI+U3VtbWFyeTwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG5hdi1pdGVtMVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMxKCd0aWNrZXRzJylcIj5cclxuICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIxID09PSd0aWNrZXRzJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgbmF2LWxpbmsxIGN1cnNvci1wb2ludGVyIG1lLTZcIj5UaWNrZXRzIFYxPC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbmF2LWl0ZW0xXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFiczEoJ3RpY2tldHNWMicpXCI+XHJcbiAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiMSA9PT0ndGlja2V0c1YyJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgbmF2LWxpbmsxIGN1cnNvci1wb2ludGVyIG1lLTZcIj5UaWNrZXRzIFYyPC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdpbmZyYScgJiYgc2VsZWN0ZWRUYWIxID09PSdzdW1tYXJ5J1wiPlxyXG4gICAgPGxpYi1zdW1tYXJ5LWluZnJhIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLXN1bW1hcnktaW5mcmE+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2luZnJhJyAmJiBzZWxlY3RlZFRhYjEgPT09J3RpY2tldHMnXCI+XHJcbiAgICA8bGliLXRpY2tldC1pbmZyYSBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi10aWNrZXQtaW5mcmE+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2luZnJhJyAmJiBzZWxlY3RlZFRhYjEgPT09J3RpY2tldHNWMidcIj5cclxuICAgIDxsaWItdGlja2V0LWluZnJhLXYyIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLXRpY2tldC1pbmZyYS12Mj5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0nZGF0YU1pc21hdGNoJ1wiPlxyXG4gICAgPGxpYi10aWNrZXQtaW5mcmEgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItdGlja2V0LWluZnJhPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0nY2FtZXJhQW5nbGVDaGFuZ2UnXCI+XHJcbiAgICA8bGliLXRpY2tldC1jYW1lcmEtYW5nbGUgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItdGlja2V0LWNhbWVyYS1hbmdsZT5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0nZm9vdGZhbGwnXCI+XHJcbiAgICA8bGliLWZvb3RmYWxsLWRpcmVjdG9yeSBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi1mb290ZmFsbC1kaXJlY3Rvcnk+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2ZpbGVMb2dzJ1wiPlxyXG4gICAgPGxpYi1maWxlLWxvZ3MgW3N0b3JlSWRdPVwic3RvcmVJZFwiPjwvbGliLWZpbGUtbG9ncz5cclxuPC9kaXY+XHJcbjxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cclxuXHJcbjwhLS0gVGVybWluYWwgYWNjZXNzIGNvbmZpcm1hdGlvbi4gRmlsbGVkIGZyb20gL2luZnJhL3YyL3JlbW90ZS9zZXNzaW9uOyBDbGllbnQgbmFtZSBmcm9tIHRoZSBjbGllbnQgcmVjb3JkLiAtLT5cclxuPG5nLXRlbXBsYXRlICN0ZXJtaW5hbFRwbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLW1vZGFsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1oZWFkXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWNjZXNzLWljb25cIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMy41XCIgd2lkdGg9XCIxOVwiIGhlaWdodD1cIjEzXCIgcng9XCIyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCAyMUgxNk0xMiAxNi41VjIxTTYuNSA4TDkgMTBMNi41IDEyTTExIDEySDE0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2Nlc3MtdGl0bGUgZnMtNCB0ZXh0LWdyYXktODAwIGZ3LWJvbGRcIj5PcGVuIHRlcm1pbmFsIGFjY2Vzcz88L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYWNjZXNzLXRleHRcIj5UaGlzIG9wZW5zIGEgY29tbWFuZCB3aW5kb3cgb24gdGhlIHN0b3JlIHN5c3RlbS4gQ29tbWFuZHMgcnVuIG9uIHRoZSBsaXZlIHN5c3RlbS48L3A+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3MtYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmc6IHNoaW1tZXJpbmcgcGxhY2Vob2xkZXIgcm93cyAoc2VlIC5za2VsKS4gLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2Vzc2lvblN0YXRlID09PSAnbG9hZGluZydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLXJvd1wiPjxzcGFuIGNsYXNzPVwic2tlbCBza2VsLWxhYmVsXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwic2tlbCBza2VsLXZhbHVlXCI+PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3Mtcm93XCI+PHNwYW4gY2xhc3M9XCJza2VsIHNrZWwtbGFiZWxcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJza2VsIHNrZWwtdmFsdWVcIj48L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1yb3dcIj48c3BhbiBjbGFzcz1cInNrZWwgc2tlbC1sYWJlbFwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cInNrZWwgc2tlbC12YWx1ZVwiPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlc3Npb25TdGF0ZSA9PT0gJ2Vycm9yJ1wiIGNsYXNzPVwiYWNjZXNzLW5vdGUgZXJyb3JcIj57eyBzZXNzaW9uRXJyb3IgfHwgXCJDb3VsZG4ndCBvcGVuIHRoZSBzZXNzaW9uLlwiIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2Vzc2lvblN0YXRlID09PSAncmVhZHknXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1yb3dcIj48c3BhbiBjbGFzcz1cImFjY2Vzcy1sYWJlbFwiPkNsaWVudCBuYW1lPC9zcGFuPjxzcGFuIGNsYXNzPVwiYWNjZXNzLXZhbHVlXCI+e3sgY2xpZW50RGlzcGxheU5hbWUgfHwgJy0tJyB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLXJvd1wiPjxzcGFuIGNsYXNzPVwiYWNjZXNzLWxhYmVsXCI+U3RvcmUgSUQ8L3NwYW4+PHNwYW4gY2xhc3M9XCJhY2Nlc3MtdmFsdWVcIj57eyBzZXNzaW9uPy5zdG9yZUlkIHx8ICctLScgfX08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1yb3dcIj48c3BhbiBjbGFzcz1cImFjY2Vzcy1sYWJlbFwiPlN0b3JlIG5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9XCJhY2Nlc3MtdmFsdWVcIj57eyBzZXNzaW9uPy5zdG9yZU5hbWUgfHwgJy0tJyB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLWZvb3RcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAoY2xpY2spPVwibW9kYWwuY2xvc2UoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFtkaXNhYmxlZF09XCJzZXNzaW9uU3RhdGUgIT09ICdyZWFkeSdcIiAoY2xpY2spPVwiY29ubmVjdChtb2RhbClcIj5Db25uZWN0PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtdGlja2V0LWluZnJhL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1zdG9yZS1pbmZyYS90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS10aWNrZXQtaW5mcmEvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLXN0b3JlLWluZnJhL3RhbmdvLXN0b3JlLWluZnJhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtDLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQU92RyxNQUFNLE9BQU8sd0JBQXdCO0lBUWY7SUFBaUM7SUFBcUI7SUFBOEI7SUFBNkI7SUFBc0M7SUFBdUI7SUFQbE0sV0FBVyxDQUFNO0lBQ1QsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDL0IsT0FBTyxDQUFNO0lBQ2IsSUFBSSxDQUFNO0lBQ1YsWUFBWSxDQUFNO0lBQ1Ysb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLFVBQVUsQ0FBTTtJQUNoQixZQUFvQixRQUF3QixFQUFTLE1BQWEsRUFBUSxFQUFxQixFQUFTLEtBQW9CLEVBQVMsY0FBNkIsRUFBUyxLQUFjLEVBQVMsV0FBdUI7UUFBck0sYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQVEsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQVMsbUJBQWMs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b21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpY2tldHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlbW90ZVRlcm1pbmFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGlja2V0LWluZnJhLXYyL3JlbW90ZS10ZXJtaW5hbC9yZW1vdGUtdGVybWluYWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRhbmdvLXN0b3JlLWluZnJhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhbmdvU3RvcmVJbmZyYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG4gIHNlbGVjdGVkVGFiOiBhbnk7XHJcbiAgcHJpdmF0ZSBkZXRhY2ggPSBuZXcgU3ViamVjdCgpO1xyXG4gIHN0b3JlSWQ6IGFueTtcclxuICB0eXBlOiBhbnk7XHJcbiAgc2VsZWN0ZWRUYWIxOiBhbnk7XHJcbiAgcHJpdmF0ZSBzdWJUYWJGcm9tVXJsQXBwbGllZCA9IGZhbHNlO1xyXG4gIGNsaWVudE5hbWU6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhZ2VJbmZvOlBhZ2VJbmZvU2VydmljZSxwcml2YXRlIHJvdXRlcjpSb3V0ZXIscHVibGljIGdzOkdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlLHByaXZhdGUgdGlja2V0c1NlcnZpY2U6VGlja2V0c1NlcnZpY2UscHJpdmF0ZSBtb2RhbDpOZ2JNb2RhbCxwcml2YXRlIGF1dGhTZXJ2aWNlOkF1dGhTZXJ2aWNlKXtcclxuXHJcbiAgfVxyXG4gIGhlYWRlckZpbHRlcnM6YW55O1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXRhY2gubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGV0YWNoLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIGNsaWVudERhdGE6YW55O1xyXG4gICB1c2VyVHlwZTphbnk7XHJcbnByaXZhdGUgaXNTdG9yZUlkVmFsaWRGb3JDbGllbnQoc3RvcmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFzdG9yZUlkIHx8ICF0aGlzLnVzZXJUeXBlPy5jbGllbnRJZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAvLyAvLyBUYW5nbyB1c2VycyBjYW4gYWNjZXNzIGFsbFxyXG4gIC8vIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSAndGFuZ28nKSB7XHJcbiAgLy8gICByZXR1cm4gdHJ1ZTtcclxuICAvLyB9XHJcblxyXG4gIGNvbnN0IHN0b3JlQ2xpZW50SWQgPSBzdG9yZUlkLnNwbGl0KCctJylbMF07XHJcbiAgcmV0dXJuIHN0b3JlQ2xpZW50SWQgPT09IFN0cmluZyh0aGlzLnVzZXJUeXBlLmNsaWVudElkKTtcclxufVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgdGhpcy51c2VyVHlwZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgJ3t9Jyk7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICBjb25zdCB0eXBlID0gcGFyYW1zWyd0eXBlJ10gPyBwYXJhbXNbJ3R5cGUnXSA6ICdpbmZyYSc7XHJcbiAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAvLyBFdmVyeSBJbmZyYSBibG9jayBpcyBnYXRlZCBvbiBzZWxlY3RlZFRhYiA9PT0gJ2luZnJhJywgc28gdGhpcyByZWFkc1xyXG4gICAgICAgIC8vIGFzIFwidGhlIEluZnJhIHRhYiwgb3BlbmVkIG9uIFRpY2tldHMgVjJcIiByYXRoZXIgdGhhbiBhIHRhYiBvZiBpdHMgb3duLlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSAnaW5mcmEnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgLy8gT25seSBvbiB0aGUgZmlyc3QgZW1pc3Npb246IHNlbGVjdGVkVGFiczEoKSByZXdyaXRlcyBgdHlwZWAsIHdoaWNoXHJcbiAgICAgIC8vIGZpcmVzIHRoaXMgc3Vic2NyaXB0aW9uIGFnYWluLCBhbmQgd2l0aG91dCB0aGUgZ3VhcmQgdGhhdCB3b3VsZCB1bmRvXHJcbiAgICAgIC8vIHRoZSBjbGljayAtIFN1bW1hcnkgaW4gcGFydGljdWxhciB3b3VsZCBib3VuY2UgdG8gVGlja2V0cyBWMS5cclxuICAgICAgaWYoIXRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQpe1xyXG4gICAgICAgIHRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0gJ3RpY2tldHNWMidcclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5zZWxlY3RlZFRhYiA9PT0naW5mcmEnKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0ndGlja2V0cydcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgICAgICAgIGNvbnN0IGNsaWVudERhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcInt9XCIpO1xyXG4gICAgdGhpcy5jbGllbnREYXRhID0gY2xpZW50RGF0YTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycyA9IHsgLi4uZGF0YSB9O1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUlkID1cclxuICAgICAgICAgICAgZGF0YSAmJiBkYXRhLnN0b3JlID8gZGF0YS5zdG9yZSA6IHRoaXMucm91dGVyLnVybC5zcGxpdChcIi9cIilbM107XHJcbiAgICAgICAgICAgIHRoaXMuY2xpZW50TmFtZSA9IGRhdGE/LmNsaWVudE5hbWUgPyBkYXRhPy5jbGllbnROYW1lOicnO1xyXG4gICAgICAgICAgICAgaWYgKHRoaXMuZ3MudXNlckFjY2Vzcy52YWx1ZT8udXNlclR5cGUgIT09ICd0YW5nbycpIHtcclxuICAgICAgICAgICAgIGlmICghdGhpcy5pc1N0b3JlSWRWYWxpZEZvckNsaWVudCh0aGlzLnN0b3JlSWQpKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9lcnJvci80MDQnXSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVN0b3JlSWRRdWVyeVBhcmFtKHRoaXMuc3RvcmVJZCk7XHJcbiAgICAgICAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRTdG9yZU5hbWUodGhpcy5zdG9yZUlkKTtcclxuICAgICAgICAgIHRoaXMubG9hZExpdmVTdGF0dXModGhpcy5zdG9yZUlkLCBkYXRhKTtcclxuICAgICAgICAgIHRoaXMubG9hZENsaWVudChkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIH1cclxuICAgIHVwZGF0ZVN0b3JlSWRRdWVyeVBhcmFtKHN0b3JlSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlICE9PSAndGFuZ28nKSB7XHJcbiAgICAgICBpZiAoIXRoaXMuaXNTdG9yZUlkVmFsaWRGb3JDbGllbnQoc3RvcmVJZCkpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Vycm9yLzQwNCddKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbn1cclxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfTtcclxuICAgICAgLy8gVXBkYXRlIHN0b3JlSWQgaW4gcXVlcnlQYXJhbXNcclxuICAgICAgcXVlcnlQYXJhbXMuc3RvcmVJZCA9IHN0b3JlSWQ7XHJcbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBzYW1lIHJvdXRlIHdpdGggdXBkYXRlZCBxdWVyeVBhcmFtc1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgeyBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICB9XHJcbiAgc2V0UGFnZURhdGEoKXtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJUaWNrZXRzXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbihcclxuICAgICAgXCJWaWV3LCBzaGFyZSwgZG93bmxvYWQgYW5kIGJlbmNobWFyayB0aGUgc3RvcmVzIHBlcmZvcm1hbmNlIGluIG9uZSBzY3JlZW5cIlxyXG4gICAgKTtcclxuICAgIGxldCBicmVhZGNydW1iczogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGNvbW1vbkJyZWFkY3J1bWJzID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY2xpZW50TmFtZSxcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2Uvc3RvcmVzXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmNsaWVudE5hbWUsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N0b3Jlc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLnN0b3JlSWQsXHJcbiAgICAgICAgcGF0aDogYC9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXM/c3RvcmVJZD0ke3RoaXMuc3RvcmVJZH1gLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5zdG9yZUlkLFxyXG4gICAgICAgIHBhdGg6IGAvbWFuYWdlL3N0b3Jlcy9jYW1lcmFzP3N0b3JlSWQ9JHt0aGlzLnN0b3JlSWR9YCxcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSA9PT0gXCJ0YW5nb1wiKSB7XHJcbiAgICAgIGJyZWFkY3J1bWJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL2JyYW5kc1wiLFxyXG4gICAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvYnJhbmRzXCIsXHJcbiAgICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLmNvbW1vbkJyZWFkY3J1bWJzLFxyXG4gICAgICBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSBcImNsaWVudFwiKSB7XHJcbiAgICAgIGJyZWFkY3J1bWJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uY29tbW9uQnJlYWRjcnVtYnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoYnJlYWRjcnVtYnMpO1xyXG4gIH1cclxuLy8gU3RvcmUgbmFtZSBmb3IgdGhlIGNhcmQgYWJvdmUgdGhlIHRhYnMuIFRoZSBoZWFkZXIgZmlsdGVyIGRvZXNuJ3QgY2FycnkgaXQgb25cclxuLy8gdGhpcyBwYWdlLCBzbyBpdCBjb21lcyBmcm9tIGdldC1zdG9yZS4gJy0tJyB3aGlsZSBsb2FkaW5nIG9yIG9uIGZhaWx1cmUuXHJcbnByaXZhdGUgc3RvcmVOYW1lRnJvbUFwaSA9ICcnO1xyXG5nZXQgc3RvcmVOYW1lKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN0b3JlTmFtZUZyb21BcGkgfHwgJy0tJzsgfVxyXG4vLyBPcGVuIC8gY2xvc2UgdGltZSBmcm9tIHRoZSBzdG9yZSBwcm9maWxlLCBhcyB0aGUgc3RvcmUgaGVhZGVyIHNob3dzIHRoZW0uXHJcbnN0b3JlT3BlbiA9ICcnO1xyXG5zdG9yZUNsb3NlID0gJyc7XHJcblxyXG5wcml2YXRlIGxvYWRTdG9yZU5hbWUoc3RvcmVJZDogYW55KTogdm9pZCB7XHJcbiAgdGhpcy5zdG9yZU5hbWVGcm9tQXBpID0gJyc7XHJcbiAgdGhpcy5zdG9yZU9wZW4gPSAnJztcclxuICB0aGlzLnN0b3JlQ2xvc2UgPSAnJztcclxuICBpZiAoIXN0b3JlSWQpIHJldHVybjtcclxuICB0aGlzLnRpY2tldHNTZXJ2aWNlLmdldFN0b3JlRGV0YWlscyhzdG9yZUlkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgLy8gSWdub3JlIGEgbGF0ZSByZXBseSBmb3IgYSBzdG9yZSB0aGF0IGlzIG5vIGxvbmdlciBzZWxlY3RlZC5cclxuICAgICAgaWYgKHN0b3JlSWQgIT09IHRoaXMuc3RvcmVJZCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLnN0b3JlTmFtZUZyb21BcGkgPSByZXM/LmRhdGE/LnN0b3JlTmFtZSB8fCAnJztcclxuICAgICAgdGhpcy5zdG9yZU9wZW4gPSByZXM/LmRhdGE/LnN0b3JlUHJvZmlsZT8ub3BlbiB8fCAnJztcclxuICAgICAgdGhpcy5zdG9yZUNsb3NlID0gcmVzPy5kYXRhPy5zdG9yZVByb2ZpbGU/LmNsb3NlIHx8ICcnO1xyXG4gICAgfSxcclxuICAgIGVycm9yOiAoKSA9PiB7fSxcclxuICB9KTtcclxufVxyXG5cclxuLy8gVGhlIHN0b3JlLWNhcmQgYnV0dG9ucyAoVGVybWluYWwgYWNjZXNzLCBGaWxlIGFjY2VzcywgQ2FsbCkgYXJlIGZvciBUYW5nbyB1c2VycyBvbmx5LlxyXG5nZXQgaXNUYW5nbygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZ3MudXNlckFjY2Vzcy52YWx1ZT8udXNlclR5cGUgPT09ICd0YW5nbyc7IH1cclxuXHJcbi8vIC4uLmFuZCBvbmx5IGZvciBJbmZyYSBWMiBjbGllbnRzLiBTYW1lIGNhbGwgYW5kIGZpZWxkIHRoZSBUaWNrZXRzIHBhZ2UgdXNlcyBmb3JcclxuLy8gaXRzIEluZnJhIFYyIHRhYi4gSGlkZGVuIHdoaWxlIGxvYWRpbmcgb3Igb24gZXJyb3IuXHJcbmluZnJhVGlja2V0VHlwZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbmNsaWVudERpc3BsYXlOYW1lID0gJyc7XHJcbmdldCBzaG93U3RvcmVBY3Rpb25zKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5pc1RhbmdvICYmIHRoaXMuaW5mcmFUaWNrZXRUeXBlID09PSAnVjInOyB9XHJcblxyXG5wcml2YXRlIGxvYWRDbGllbnQoaGVhZGVyOiBhbnkpOiB2b2lkIHtcclxuICB0aGlzLmluZnJhVGlja2V0VHlwZSA9IG51bGw7XHJcbiAgdGhpcy5jbGllbnREaXNwbGF5TmFtZSA9ICcnO1xyXG4gIGNvbnN0IGNsaWVudElkID0gaGVhZGVyPy5jbGllbnQgfHwgU3RyaW5nKHRoaXMuc3RvcmVJZCB8fCAnJykuc3BsaXQoJy0nKVswXTtcclxuICBpZiAoIWNsaWVudElkKSByZXR1cm47XHJcbiAgdGhpcy5hdXRoU2VydmljZS5nZXRCcmFuZERldGFpbHMoY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmluZnJhVGlja2V0VHlwZSA9IHJlcz8uZGF0YT8udGlja2V0Q29uZmlncz8uaW5mcmFUaWNrZXRUeXBlID8/IG51bGw7XHJcbiAgICAgIHRoaXMuY2xpZW50RGlzcGxheU5hbWUgPSByZXM/LmRhdGE/LmNsaWVudE5hbWUgfHwgJyc7XHJcbiAgICB9LFxyXG4gICAgZXJyb3I6ICgpID0+IHt9LFxyXG4gIH0pO1xyXG59XHJcblxyXG4vLyBMaXZlIC8gTm90IExpdmUgYmVzaWRlIHRoZSBuYW1lLCBieSB0aGUgc2FtZSBydWxlIGFzIHRoZSBTdW1tYXJ5IGNhcmQncyB0aWxlcy5cclxuLy8gRW1wdHkgLSBhbmQgaGlkZGVuIC0gd2hpbGUgbG9hZGluZywgZm9yIGEgbm9uLVYyIGNsaWVudCwgb3IgZm9yIGEgc3RvcmUgVjJcclxuLy8gZG9lcyBub3QgY291bnQgKGluYWN0aXZlLCBvciBubyBmaXJzdCBmaWxlIHlldCkuXHJcbmxpdmVTdGF0dXM6ICcnIHwgJ0xpdmUnIHwgJ05vdCBMaXZlJyA9ICcnO1xyXG5cclxucHJpdmF0ZSBsb2FkTGl2ZVN0YXR1cyhzdG9yZUlkOiBhbnksIGhlYWRlcjogYW55KTogdm9pZCB7XHJcbiAgdGhpcy5saXZlU3RhdHVzID0gJyc7XHJcbiAgY29uc3QgY2xpZW50SWQgPSBoZWFkZXI/LmNsaWVudCB8fCBTdHJpbmcoc3RvcmVJZCB8fCAnJykuc3BsaXQoJy0nKVswXTtcclxuICBpZiAoIXN0b3JlSWQgfHwgIWNsaWVudElkIHx8ICFoZWFkZXI/LmRhdGU/LmVuZERhdGUpIHJldHVybjtcclxuICBjb25zdCBib2R5ID0ge1xyXG4gICAgY2xpZW50SWQ6IFtjbGllbnRJZF0sIGZyb21EYXRlOiBoZWFkZXIuZGF0ZS5zdGFydERhdGUgfHwgaGVhZGVyLmRhdGUuZW5kRGF0ZSwgdG9EYXRlOiBoZWFkZXIuZGF0ZS5lbmREYXRlLFxyXG4gICAgc2VhcmNoOiBzdG9yZUlkLCBvZmZzZXQ6IDEsIGxpbWl0OiA1MCxcclxuICB9O1xyXG4gIHRoaXMudGlja2V0c1NlcnZpY2Uuc3RvcmVMaXZlU3RhdHVzKGJvZHkpLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoc3RvcmVJZCAhPT0gdGhpcy5zdG9yZUlkKSByZXR1cm47XHJcbiAgICAgIC8vIHNlYXJjaCBpcyBhIHBhcnRpYWwgbWF0Y2ggKDQwNi0xIGFsc28gZmluZHMgNDA2LTEwKSwgc28gcGljayB0aGUgZXhhY3Qgc3RvcmUuXHJcbiAgICAgIGNvbnN0IHJvdyA9IChyZXM/LmRhdGE/LnJvd3MgPz8gW10pLmZpbmQoKHI6IGFueSkgPT4gci5zdG9yZUlkID09PSBzdG9yZUlkKTtcclxuICAgICAgdGhpcy5saXZlU3RhdHVzID0gcm93Py5zdGF0dXMgPT09ICdMaXZlJyB8fCByb3c/LnN0YXR1cyA9PT0gJ05vdCBMaXZlJyA/IHJvdy5zdGF0dXMgOiAnJztcclxuICAgIH0sXHJcbiAgICBlcnJvcjogKCkgPT4ge30sXHJcbiAgfSk7XHJcbn1cclxuXHJcbnNlbGVjdGVkVGFicyh2YWx1ZTphbnkpe1xyXG4gIHRoaXMuc2VsZWN0ZWRUYWIgPSB2YWx1ZTtcclxuICBpZih0aGlzLnNlbGVjdGVkVGFiID09PSdpbmZyYScpe1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYjEgPSd0aWNrZXRzJ1xyXG4gIH1cclxuICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB9O1xyXG4gICAgICBxdWVyeVBhcmFtc1sndHlwZSddID0gdmFsdWU7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHJlbGF0aXZlVG86dGhpcy5yb3V0ZSwgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zfSk7XHJcbn1cclxuXHJcbnNlbGVjdGVkVGFiczEodHlwZTphbnkpe1xyXG4gIHRoaXMuc2VsZWN0ZWRUYWIxID0gdHlwZTtcclxuICAvLyBLZWVwIHRoZSBVUkwgaW4gc3RlcCwgdGhlIHNhbWUgd2F5IHNlbGVjdGVkVGFicygpIGRvZXMgZm9yIHRoZSB0b3AgdGFicy5cclxuICAvLyBTdW1tYXJ5IGhhcyBubyBgdHlwZWAgb2YgaXRzIG93biwgc28gaXQgc2hhcmVzICdpbmZyYScgd2l0aCBUaWNrZXRzIFYxLlxyXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIH07XHJcbiAgICAgIHF1ZXJ5UGFyYW1zWyd0eXBlJ10gPSB0eXBlID09PSAndGlja2V0c1YyJyA/ICdpbmZyYXYyJyA6ICdpbmZyYSc7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHJlbGF0aXZlVG86dGhpcy5yb3V0ZSwgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zfSk7XHJcbn1cclxuXHJcbi8vIFRlcm1pbmFsIGFjY2VzcyBwb3AtdXA6IG9wZW5zIGF0IG9uY2UsIHRoZW4gZmlsbHMgZnJvbSAvcmVtb3RlL3Nlc3Npb24uXHJcbi8vIEV2ZXJ5IGNhbGwgaXMgYXVkaXQtbG9nZ2VkIGFzIGEgc2Vzc2lvbiBvcGVuZWQsIENhbmNlbCBpbmNsdWRlZC5cclxuc2Vzc2lvbjogYW55ID0gbnVsbDtcclxuc2Vzc2lvblN0YXRlOiAnbG9hZGluZycgfCAncmVhZHknIHwgJ2Vycm9yJyA9ICdsb2FkaW5nJztcclxuc2Vzc2lvbkVycm9yID0gJyc7XHJcblxyXG5vcGVuVGVybWluYWwodHBsOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XHJcbiAgdGhpcy5zZXNzaW9uID0gbnVsbDtcclxuICB0aGlzLnNlc3Npb25FcnJvciA9ICcnO1xyXG4gIHRoaXMuc2Vzc2lvblN0YXRlID0gJ2xvYWRpbmcnO1xyXG4gIHRoaXMubW9kYWwub3Blbih0cGwsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgdGhpcy50aWNrZXRzU2VydmljZS5yZW1vdGVTZXNzaW9uKHRoaXMuc3RvcmVJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7IHRoaXMuc2Vzc2lvbiA9IHJlcz8uZGF0YSA/PyBudWxsOyB0aGlzLnNlc3Npb25TdGF0ZSA9ICdyZWFkeSc7IH0sXHJcbiAgICAvLyBUaGUgQVBJJ3Mgb3duIG1lc3NhZ2U6IFwiU3RvcmUgbm90IGZvdW5kXCIsIFwiTm8gZWRnZSBhZ2VudC4uLlwiLCBcIm5vdCBjb25maWd1cmVkXCIuXHJcbiAgICBlcnJvcjogKGVycjogYW55KSA9PiB7IHRoaXMuc2Vzc2lvbkVycm9yID0gZXJyPy5lcnJvcj8uZXJyb3IgfHwgJyc7IHRoaXMuc2Vzc2lvblN0YXRlID0gJ2Vycm9yJzsgfSxcclxuICB9KTtcclxufVxyXG5cclxuLy8gQ29ubmVjdDogc3dhcCB0aGUgY29uZmlybWF0aW9uIGZvciB0aGUgdGVybWluYWwgcG9wLXVwLiBTdGF0aWMgYmFja2Ryb3AgYW5kXHJcbi8vIG5vIEVzYywgc28gYSBzdHJheSBjbGljayBjYW5ub3QgZHJvcCBhIGxpdmUgc2hlbGw7IGl0IGNsb3NlcyB2aWEgQ2xvc2UuXHJcbmNvbm5lY3QoY29uZmlybVJlZjogYW55KTogdm9pZCB7XHJcbiAgY29uZmlybVJlZi5jbG9zZSgpO1xyXG4gIGNvbnN0IHJlZiA9IHRoaXMubW9kYWwub3BlbihSZW1vdGVUZXJtaW5hbENvbXBvbmVudCwge1xyXG4gICAgc2l6ZTogJ3hsJywgY2VudGVyZWQ6IHRydWUsIGJhY2tkcm9wOiAnc3RhdGljJywga2V5Ym9hcmQ6IGZhbHNlLCBtb2RhbERpYWxvZ0NsYXNzOiAncmVtb3RlLXRlcm1pbmFsLW1vZGFsJyxcclxuICB9KTtcclxuICByZWYuY29tcG9uZW50SW5zdGFuY2Uuc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcclxufVxyXG5cclxufVxyXG4iLCI8IS0tIFN0b3JlIGNhcmQ6IG5hbWUgYW5kIHRpbWluZ3MgZnJvbSBnZXQtc3RvcmUsIExpdmUgc3RhdHVzIGZyb20gdGhlIFYyIHN0b3JlIGxpc3QuIC0tPlxyXG48ZGl2IGNsYXNzPVwiY2FyZCBtYi01IHB5LTQgcHgtNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTNcIj48c3ZnIHdpZHRoPVwiNDZcIiBoZWlnaHQ9XCI0NlwiIHZpZXdCb3g9XCIwIDAgNDYgNDZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiM1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBmaWxsPVwiI0QxRkFERlwiLz5cclxuICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiM1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBzdHJva2U9XCIjRUNGREYzXCIgc3Ryb2tlLXdpZHRoPVwiNlwiLz5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk0xNS42Nzk5IDE4LjgwMzlMMTUuNjI2NyAxOC44ODcxQzE1LjA2ODYgMTkuODc0MSAxNS42NjQ0IDIxLjEyMTUgMTYuNzM2MSAyMS4yNjQ2QzE2LjgzMzEgMjEuMjc2NSAxNi45MjM1IDIxLjI4MjggMTcuMDExOCAyMS4yODI4QzE3LjU4OTkgMjEuMjgyOCAxOC4xMDExIDIxLjAzNDggMTguNDU3NCAyMC42NDhMMTkuMDEwNyAyMC4wNDc0TDE5LjU2MjEgMjAuNjQ5OEMxOS45MTQxIDIxLjAzNDIgMjAuNDI0MSAyMS4yODI4IDIxLjAwNjEgMjEuMjgyOEMyMS41ODU2IDIxLjI4MjggMjIuMDk4NSAyMS4wMzM4IDIyLjQ1MDIgMjAuNjQ5OEwyMy4wMDMzIDIwLjA0NTVMMjMuNTU2NSAyMC42NDk4QzIzLjkwODEgMjEuMDMzOCAyNC40MjExIDIxLjI4MjggMjUuMDAwNSAyMS4yODI4QzI1LjU4IDIxLjI4MjggMjYuMDkyOSAyMS4wMzM4IDI2LjQ0NDUgMjAuNjQ5OEwyNi45OTc3IDIwLjA0NTVMMjcuNTUwOSAyMC42NDk4QzI3LjkwMjUgMjEuMDMzOCAyOC40MTU1IDIxLjI4MjggMjguOTk0OSAyMS4yODI4QzI5LjA4MDMgMjEuMjgyOCAyOS4xNzMzIDIxLjI3NjUgMjkuMjY5NyAyMS4yNjQ3QzMwLjM2NDkgMjEuMTE1NCAzMC45NjI3IDE5LjgwMTIgMzAuMzI0IDE4LjgwNDRDMzAuMzI0IDE4LjgwNDMgMzAuMzI0IDE4LjgwNDMgMzAuMzIzOSAxOC44MDQyTDI4LjU2NTggMTYuMDYyOEwyOC41NjU4IDE2LjA2MjhMMjguNTY0OCAxNi4wNjE0QzI4LjU0OTYgMTYuMDM3NSAyOC41MTIxIDE2LjAxMiAyOC40NjUgMTYuMDEySDE3LjUzNTZDMTcuNDg4NCAxNi4wMTIgMTcuNDUwOSAxNi4wMzc1IDE3LjQzNTcgMTYuMDYxNEwxNy40MzUxIDE2LjA2MjNMMTUuNjc5OSAxOC44MDM5Wk0yOC42NTE0IDIzLjczNzJWMjYuODY5MVYyNy42MTkxSDI3LjkwMTRIMTguMDk5MkgxNy4zNDkyVjI2Ljg2OTFWMjMuNzM3NkMxNy4yMzkgMjMuNzQ1OCAxNy4xMjc0IDIzLjc1MDEgMTcuMDE0OCAyMy43NTAxQzE2Ljk3MjUgMjMuNzUwMSAxNi45MzA1IDIzLjc0OTQgMTYuODg4OCAyMy43NDgyVjI2Ljg2OTFWMjguODAzNkMxNi44ODg4IDI5LjQ0NzEgMTcuNDIyNyAyOS45ODgyIDE4LjA5OTIgMjkuOTg4MkgyNy45MDE0QzI4LjU3NzkgMjkuOTg4MiAyOS4xMTE4IDI5LjQ0NzEgMjkuMTExOCAyOC44MDM2VjI2Ljg2OTFWMjMuNzQ4NEMyOS4wNzIgMjMuNzQ5NSAyOS4wMzIgMjMuNzUwMSAyOC45OTE4IDIzLjc1MDFDMjguODc3NCAyMy43NTAxIDI4Ljc2MzkgMjMuNzQ1NyAyOC42NTE0IDIzLjczNzJaXCIgc3Ryb2tlPVwiIzAyN0E0OFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RvcmUtY2FyZC1uYW1lXCI+e3sgc3RvcmVOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsaXZlU3RhdHVzXCIgY2xhc3M9XCJsaXZlLXN0YXR1cyBtcy00XCIgW2NsYXNzLmRvd25dPVwibGl2ZVN0YXR1cyA9PT0gJ05vdCBMaXZlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGl2ZS1kb3RcIj48L3NwYW4+e3sgbGl2ZVN0YXR1cyB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlLWNhcmQtbWV0YSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG10LTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN0b3JlSWQgfHwgJy0tJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMlwiPsK3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1lLTFcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDQuNVY5TDEyIDEwLjVNMTYuNSA5QzE2LjUgMTMuMTQyMSAxMy4xNDIxIDE2LjUgOSAxNi41QzQuODU3ODYgMTYuNSAxLjUgMTMuMTQyMSAxLjUgOUMxLjUgNC44NTc4NiA0Ljg1Nzg2IDEuNSA5IDEuNUMxMy4xNDIxIDEuNSAxNi41IDQuODU3ODYgMTYuNSA5WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzdG9yZU9wZW4gfHwgJy0tJyB9fSAtIHt7IHN0b3JlQ2xvc2UgfHwgJy0tJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBUYW5nbyB1c2VycyBvZiBJbmZyYSBWMiBjbGllbnRzIG9ubHkuIFRoZSBob3ZlcmVkIGJ1dHRvbiBleHBhbmRzOyBUZXJtaW5hbCBhY2Nlc3MgaXMgZXhwYW5kZWQgd2hpbGUgbm9uZSBpcy4gLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTdG9yZUFjdGlvbnNcIiBjbGFzcz1cInN0b3JlLWFjdGlvbnMgbXMtYXV0byBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3RvcmUtYWN0IGlzLWRlZmF1bHRcIiAoY2xpY2spPVwib3BlblRlcm1pbmFsKHRlcm1pbmFsVHBsKVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIzLjVcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMTNcIiByeD1cIjJcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDIxSDE2TTEyIDE2LjVWMjFNNi41IDhMOSAxMEw2LjUgMTJNMTEgMTJIMTRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cImFjdC1sYWJlbFwiPlRlcm1pbmFsIGFjY2Vzczwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3RvcmUtYWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgNy41QzMgNi40IDMuOSA1LjUgNSA1LjVIOS4yTDExLjIgNy41SDE5QzIwLjEgNy41IDIxIDguNCAyMSA5LjVWMTdDMjEgMTguMSAyMC4xIDE5IDE5IDE5SDVDMy45IDE5IDMgMTguMSAzIDE3VjcuNVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwiYWN0LWxhYmVsXCI+RmlsZSBhY2Nlc3M8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInN0b3JlLWFjdFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjYgNC41TDYuNCAzLjZDNS44IDMuNCA1LjEgMy42IDQuNyA0LjFMMy41IDUuNkMzLjEgNi4xIDMgNi44IDMuMiA3LjRDNC45IDEyLjcgOS4zIDE3LjEgMTQuNiAxOC44QzE1LjIgMTkgMTUuOSAxOC45IDE2LjQgMTguNUwxNy45IDE3LjNDMTguNCAxNi45IDE4LjYgMTYuMiAxOC40IDE1LjZMMTcuNSAxMy40QzE3LjMgMTIuOCAxNi42IDEyLjUgMTYgMTIuNkwxMy42IDEzLjFDMTEuOSAxMi4yIDEwLjggMTEuMSA5LjkgOS40TDEwLjQgN0MxMC41IDYuNCAxMC4yIDUuNyA5LjYgNS41TDguNiA0LjVaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cImFjdC1sYWJlbFwiPkNhbGw8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiY2FyZCBtYi01IHB5LTMgcHgtNVwiPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2luZnJhJylcIj48YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnID8gJ2FjdGl2ZScgOicnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS02IFwiPkluZnJhPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2RhdGFNaXNtYXRjaCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0nZGF0YU1pc21hdGNoJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPkRhdGEgTWlzbWF0Y2g8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnY2FtZXJhQW5nbGVDaGFuZ2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09J2NhbWVyYUFuZ2xlQ2hhbmdlJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPkNhbWVyYSBBbmdsZTwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPCEtLSBGaWxlIGxvZ3MsIGF0IHRoZSByaWdodCBlbmQgb2YgdGhlIHJvdzogaXRzIG93biBwYWdlIGF0ID90eXBlPWZpbGVMb2dzLiBUYW5nbyBvbmx5LiAtLT5cclxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiaXNUYW5nb1wiIGNsYXNzPVwibmF2LWl0ZW0gbXMtYXV0b1wiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2ZpbGVMb2dzJylcIj5cclxuICAgICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSdmaWxlTG9ncycgPyAnYWN0aXZlJyA6JydcIiBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIGZpbGUtbG9ncy1saW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgM0g3QzUuOSAzIDUgMy45IDUgNVYxOUM1IDIwLjEgNS45IDIxIDcgMjFIMTdDMTguMSAyMSAxOSAyMC4xIDE5IDE5VjhMMTQgM1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAzVjhIMTlNOSAxM0gxNU05IDE3SDEzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIEZpbGUgbG9nc1xyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgIDwhLS0gPGxpICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nIHx8IGNsaWVudERhdGE/LmlzVk1TXCIgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2Zvb3RmYWxsJylcIj5cclxuICAgICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSdmb290ZmFsbCcgPyAnYWN0aXZlJyA6JydcIiBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG1lLTZcIj5Gb290ZmFsbCBEaXJlY3Rvcnk8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+IC0tPlxyXG4gICAgICAgIDwvdWw+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2luZnJhJ1wiIGNsYXNzPVwibWItNSBweS0zIHB4LTVcIj5cclxuICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcFwiPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG5hdi1pdGVtMVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMxKCdzdW1tYXJ5JylcIj48YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYjEgPT09J3N1bW1hcnknID8gJ2FjdGl2ZScgOicnXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgbmF2LWxpbmsxIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS02IFwiPlN1bW1hcnk8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBuYXYtaXRlbTFcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzMSgndGlja2V0cycpXCI+XHJcbiAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiMSA9PT0ndGlja2V0cycgPyAnYWN0aXZlJyA6JydcIiBjbGFzcz1cIm5hdi1saW5rIG5hdi1saW5rMSBjdXJzb3ItcG9pbnRlciBtZS02XCI+VGlja2V0cyBWMTwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG5hdi1pdGVtMVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMxKCd0aWNrZXRzVjInKVwiPlxyXG4gICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYjEgPT09J3RpY2tldHNWMicgPyAnYWN0aXZlJyA6JydcIiBjbGFzcz1cIm5hdi1saW5rIG5hdi1saW5rMSBjdXJzb3ItcG9pbnRlciBtZS02XCI+VGlja2V0cyBWMjwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnICYmIHNlbGVjdGVkVGFiMSA9PT0nc3VtbWFyeSdcIj5cclxuICAgIDxsaWItc3VtbWFyeS1pbmZyYSBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi1zdW1tYXJ5LWluZnJhPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdpbmZyYScgJiYgc2VsZWN0ZWRUYWIxID09PSd0aWNrZXRzJ1wiPlxyXG4gICAgPGxpYi10aWNrZXQtaW5mcmEgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItdGlja2V0LWluZnJhPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdpbmZyYScgJiYgc2VsZWN0ZWRUYWIxID09PSd0aWNrZXRzVjInXCI+XHJcbiAgICA8bGliLXRpY2tldC1pbmZyYS12MiBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi10aWNrZXQtaW5mcmEtdjI+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2RhdGFNaXNtYXRjaCdcIj5cclxuICAgIDxsaWItdGlja2V0LWluZnJhIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLXRpY2tldC1pbmZyYT5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2NhbWVyYUFuZ2xlQ2hhbmdlJ1wiPlxyXG4gICAgPGxpYi10aWNrZXQtY2FtZXJhLWFuZ2xlIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLXRpY2tldC1jYW1lcmEtYW5nbGU+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2Zvb3RmYWxsJ1wiPlxyXG4gICAgPGxpYi1mb290ZmFsbC1kaXJlY3RvcnkgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItZm9vdGZhbGwtZGlyZWN0b3J5PlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdmaWxlTG9ncycgJiYgaXNUYW5nb1wiPlxyXG4gICAgPGxpYi1maWxlLWxvZ3MgW3N0b3JlSWRdPVwic3RvcmVJZFwiIFtjbGllbnRJZF09XCJoZWFkZXJGaWx0ZXJzPy5jbGllbnRcIiBbZGF0ZV09XCJoZWFkZXJGaWx0ZXJzPy5kYXRlPy5lbmREYXRlXCI+PC9saWItZmlsZS1sb2dzPlxyXG48L2Rpdj5cclxuPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG5cclxuPCEtLSBUZXJtaW5hbCBhY2Nlc3MgY29uZmlybWF0aW9uLiBGaWxsZWQgZnJvbSAvaW5mcmEvdjIvcmVtb3RlL3Nlc3Npb247IENsaWVudCBuYW1lIGZyb20gdGhlIGNsaWVudCByZWNvcmQuIC0tPlxyXG48bmctdGVtcGxhdGUgI3Rlcm1pbmFsVHBsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3MtbW9kYWxcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLWhlYWRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2Nlc3MtaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIzLjVcIiB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMTNcIiByeD1cIjJcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDIxSDE2TTEyIDE2LjVWMjFNNi41IDhMOSAxMEw2LjUgMTJNMTEgMTJIMTRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjY2Vzcy10aXRsZSBmcy00IHRleHQtZ3JheS04MDAgZnctYm9sZFwiPk9wZW4gdGVybWluYWwgYWNjZXNzPzwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLWJvZHlcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhY2Nlc3MtdGV4dFwiPlRoaXMgb3BlbnMgYSBjb21tYW5kIHdpbmRvdyBvbiB0aGUgc3RvcmUgc3lzdGVtLiBDb21tYW5kcyBydW4gb24gdGhlIGxpdmUgc3lzdGVtLjwvcD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTG9hZGluZzogc2hpbW1lcmluZyBwbGFjZWhvbGRlciByb3dzIChzZWUgLnNrZWwpLiAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZXNzaW9uU3RhdGUgPT09ICdsb2FkaW5nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3Mtcm93XCI+PHNwYW4gY2xhc3M9XCJza2VsIHNrZWwtbGFiZWxcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJza2VsIHNrZWwtdmFsdWVcIj48L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1yb3dcIj48c3BhbiBjbGFzcz1cInNrZWwgc2tlbC1sYWJlbFwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cInNrZWwgc2tlbC12YWx1ZVwiPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLXJvd1wiPjxzcGFuIGNsYXNzPVwic2tlbCBza2VsLWxhYmVsXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwic2tlbCBza2VsLXZhbHVlXCI+PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2Vzc2lvblN0YXRlID09PSAnZXJyb3InXCIgY2xhc3M9XCJhY2Nlc3Mtbm90ZSBlcnJvclwiPnt7IHNlc3Npb25FcnJvciB8fCBcIkNvdWxkbid0IG9wZW4gdGhlIHNlc3Npb24uXCIgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZXNzaW9uU3RhdGUgPT09ICdyZWFkeSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLXJvd1wiPjxzcGFuIGNsYXNzPVwiYWNjZXNzLWxhYmVsXCI+Q2xpZW50IG5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9XCJhY2Nlc3MtdmFsdWVcIj57eyBjbGllbnREaXNwbGF5TmFtZSB8fCAnLS0nIH19PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3Mtcm93XCI+PHNwYW4gY2xhc3M9XCJhY2Nlc3MtbGFiZWxcIj5TdG9yZSBJRDwvc3Bhbj48c3BhbiBjbGFzcz1cImFjY2Vzcy12YWx1ZVwiPnt7IHNlc3Npb24/LnN0b3JlSWQgfHwgJy0tJyB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLXJvd1wiPjxzcGFuIGNsYXNzPVwiYWNjZXNzLWxhYmVsXCI+U3RvcmUgbmFtZTwvc3Bhbj48c3BhbiBjbGFzcz1cImFjY2Vzcy12YWx1ZVwiPnt7IHNlc3Npb24/LnN0b3JlTmFtZSB8fCAnLS0nIH19PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3MtZm9vdFwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJtb2RhbC5jbG9zZSgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgW2Rpc2FibGVkXT1cInNlc3Npb25TdGF0ZSAhPT0gJ3JlYWR5J1wiIChjbGljayk9XCJjb25uZWN0KG1vZGFsKVwiPkNvbm5lY3Q8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==