tango-app-ui-manage-tickets 3.7.0-beta.60 → 3.7.0-beta.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/add-csm-modal/add-csm-modal.component.mjs +98 -0
- package/esm2022/lib/components/audit-log/audit-log.component.mjs +11 -0
- package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +486 -0
- package/esm2022/lib/components/audit-metrics/audit-metrics.component.mjs +298 -0
- package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +389 -0
- package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +472 -0
- package/esm2022/lib/components/comment-model/comment-model.component.mjs +58 -0
- package/esm2022/lib/components/count/count.component.mjs +89 -0
- package/esm2022/lib/components/custom-select/custom-select.component.mjs +187 -0
- package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
- package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +1061 -0
- package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
- package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
- package/esm2022/lib/components/group-select/group-select.component.mjs +155 -0
- package/esm2022/lib/components/re-trigger/re-trigger.component.mjs +96 -0
- package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +108 -0
- package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +81 -0
- package/esm2022/lib/components/start-audit/start-audit.component.mjs +761 -0
- package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +131 -0
- package/esm2022/lib/components/ticket-filter-panel/ticket-filter-panel.component.mjs +435 -0
- package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +2748 -0
- package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +43 -0
- package/esm2022/lib/components/tickets/tickets.component.mjs +847 -0
- package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
- package/esm2022/lib/services/audit.service.mjs +88 -0
- package/esm2022/lib/services/excel.service.mjs +45 -0
- package/esm2022/lib/services/ticket.service.mjs +319 -0
- package/esm2022/lib/services/timer.service.mjs +84 -0
- package/esm2022/lib/tango-manage-tickets-routing.module.mjs +44 -0
- package/esm2022/lib/tango-manage-tickets.module.mjs +109 -0
- package/esm2022/public-api.mjs +6 -0
- package/esm2022/tango-app-ui-manage-tickets.mjs +5 -0
- package/fesm2022/tango-app-ui-manage-tickets.mjs +10165 -0
- package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/add-csm-modal/add-csm-modal.component.d.ts +30 -0
- package/lib/components/audit-log/audit-log.component.d.ts +5 -0
- package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +73 -0
- package/lib/components/audit-metrics/audit-metrics.component.d.ts +59 -0
- package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +52 -0
- package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
- package/lib/components/comment-model/comment-model.component.d.ts +17 -0
- package/lib/components/count/count.component.d.ts +23 -0
- package/lib/components/custom-select/custom-select.component.d.ts +35 -0
- package/lib/components/filter-options/filter-options.component.d.ts +15 -0
- package/lib/components/footfall-dic/footfall-dic.component.d.ts +143 -0
- package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
- package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
- package/lib/components/group-select/group-select.component.d.ts +33 -0
- package/lib/components/re-trigger/re-trigger.component.d.ts +32 -0
- package/lib/components/reactive-select/reactive-select.component.d.ts +32 -0
- package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
- package/lib/components/start-audit/start-audit.component.d.ts +86 -0
- package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +28 -0
- package/lib/components/ticket-filter-panel/ticket-filter-panel.component.d.ts +79 -0
- package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +287 -0
- package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +15 -0
- package/lib/components/tickets/tickets.component.d.ts +88 -0
- package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
- package/lib/services/audit.service.d.ts +36 -0
- package/lib/services/excel.service.d.ts +10 -0
- package/lib/services/ticket.service.d.ts +87 -0
- package/lib/services/timer.service.d.ts +22 -0
- package/lib/tango-manage-tickets-routing.module.d.ts +7 -0
- package/lib/tango-manage-tickets.module.d.ts +38 -0
- package/package.json +25 -12
- package/{src/public-api.ts → public-api.d.ts} +2 -8
- package/.eslintrc.json +0 -37
- package/ng-package.json +0 -7
- package/src/lib/components/add-csm-modal/add-csm-modal.component.html +0 -32
- package/src/lib/components/add-csm-modal/add-csm-modal.component.scss +0 -14
- package/src/lib/components/add-csm-modal/add-csm-modal.component.spec.ts +0 -23
- package/src/lib/components/add-csm-modal/add-csm-modal.component.ts +0 -94
- package/src/lib/components/audit-log/audit-log.component.html +0 -1
- package/src/lib/components/audit-log/audit-log.component.scss +0 -0
- package/src/lib/components/audit-log/audit-log.component.spec.ts +0 -23
- package/src/lib/components/audit-log/audit-log.component.ts +0 -10
- package/src/lib/components/audit-mapping-list/audit-mapping-list.component.html +0 -234
- package/src/lib/components/audit-mapping-list/audit-mapping-list.component.scss +0 -186
- package/src/lib/components/audit-mapping-list/audit-mapping-list.component.spec.ts +0 -23
- package/src/lib/components/audit-mapping-list/audit-mapping-list.component.ts +0 -520
- package/src/lib/components/audit-metrics/audit-metrics.component.html +0 -345
- package/src/lib/components/audit-metrics/audit-metrics.component.scss +0 -34
- package/src/lib/components/audit-metrics/audit-metrics.component.spec.ts +0 -23
- package/src/lib/components/audit-metrics/audit-metrics.component.ts +0 -292
- package/src/lib/components/audit-report-popup/audit-report-popup.component.html +0 -111
- package/src/lib/components/audit-report-popup/audit-report-popup.component.scss +0 -101
- package/src/lib/components/audit-report-popup/audit-report-popup.component.spec.ts +0 -23
- package/src/lib/components/audit-report-popup/audit-report-popup.component.ts +0 -397
- package/src/lib/components/audit-retag/audit-retag.component.html +0 -129
- package/src/lib/components/audit-retag/audit-retag.component.scss +0 -146
- package/src/lib/components/audit-retag/audit-retag.component.spec.ts +0 -23
- package/src/lib/components/audit-retag/audit-retag.component.ts +0 -489
- package/src/lib/components/comment-model/comment-model.component.html +0 -24
- package/src/lib/components/comment-model/comment-model.component.scss +0 -20
- package/src/lib/components/comment-model/comment-model.component.spec.ts +0 -23
- package/src/lib/components/comment-model/comment-model.component.ts +0 -53
- package/src/lib/components/count/count.component.html +0 -54
- package/src/lib/components/count/count.component.scss +0 -14
- package/src/lib/components/count/count.component.spec.ts +0 -23
- package/src/lib/components/count/count.component.ts +0 -82
- package/src/lib/components/custom-select/custom-select.component.html +0 -134
- package/src/lib/components/custom-select/custom-select.component.scss +0 -204
- package/src/lib/components/custom-select/custom-select.component.spec.ts +0 -23
- package/src/lib/components/custom-select/custom-select.component.ts +0 -189
- package/src/lib/components/filter-options/filter-options.component.html +0 -51
- package/src/lib/components/filter-options/filter-options.component.scss +0 -102
- package/src/lib/components/filter-options/filter-options.component.spec.ts +0 -23
- package/src/lib/components/filter-options/filter-options.component.ts +0 -38
- package/src/lib/components/footfall-dic/footfall-dic.component.html +0 -1275
- package/src/lib/components/footfall-dic/footfall-dic.component.scss +0 -273
- package/src/lib/components/footfall-dic/footfall-dic.component.spec.ts +0 -23
- package/src/lib/components/footfall-dic/footfall-dic.component.ts +0 -1206
- package/src/lib/components/footfall-dicview/footfall-dicview.component.html +0 -1136
- package/src/lib/components/footfall-dicview/footfall-dicview.component.scss +0 -416
- package/src/lib/components/footfall-dicview/footfall-dicview.component.spec.ts +0 -23
- package/src/lib/components/footfall-dicview/footfall-dicview.component.ts +0 -1168
- package/src/lib/components/footfall-popup/footfall-popup.component.html +0 -61
- package/src/lib/components/footfall-popup/footfall-popup.component.scss +0 -20
- package/src/lib/components/footfall-popup/footfall-popup.component.spec.ts +0 -23
- package/src/lib/components/footfall-popup/footfall-popup.component.ts +0 -12
- package/src/lib/components/group-select/group-select.component.html +0 -44
- package/src/lib/components/group-select/group-select.component.scss +0 -144
- package/src/lib/components/group-select/group-select.component.spec.ts +0 -23
- package/src/lib/components/group-select/group-select.component.ts +0 -145
- package/src/lib/components/re-trigger/re-trigger.component.html +0 -53
- package/src/lib/components/re-trigger/re-trigger.component.scss +0 -16
- package/src/lib/components/re-trigger/re-trigger.component.spec.ts +0 -23
- package/src/lib/components/re-trigger/re-trigger.component.ts +0 -96
- package/src/lib/components/reactive-select/reactive-select.component.html +0 -18
- package/src/lib/components/reactive-select/reactive-select.component.scss +0 -52
- package/src/lib/components/reactive-select/reactive-select.component.spec.ts +0 -23
- package/src/lib/components/reactive-select/reactive-select.component.ts +0 -104
- package/src/lib/components/remove-audit/remove-audit.component.html +0 -38
- package/src/lib/components/remove-audit/remove-audit.component.scss +0 -27
- package/src/lib/components/remove-audit/remove-audit.component.spec.ts +0 -23
- package/src/lib/components/remove-audit/remove-audit.component.ts +0 -81
- package/src/lib/components/start-audit/start-audit.component.html +0 -174
- package/src/lib/components/start-audit/start-audit.component.scss +0 -185
- package/src/lib/components/start-audit/start-audit.component.spec.ts +0 -23
- package/src/lib/components/start-audit/start-audit.component.ts +0 -761
- package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.html +0 -43
- package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.scss +0 -35
- package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.spec.ts +0 -23
- package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.ts +0 -118
- package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.html +0 -386
- package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.scss +0 -87
- package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.spec.ts +0 -23
- package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.ts +0 -494
- package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.html +0 -4743
- package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.scss +0 -1208
- package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.spec.ts +0 -23
- package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.ts +0 -3351
- package/src/lib/components/ticketclosepopup/ticketclosepopup.component.html +0 -100
- package/src/lib/components/ticketclosepopup/ticketclosepopup.component.scss +0 -34
- package/src/lib/components/ticketclosepopup/ticketclosepopup.component.spec.ts +0 -23
- package/src/lib/components/ticketclosepopup/ticketclosepopup.component.ts +0 -48
- package/src/lib/components/tickets/tickets.component.html +0 -451
- package/src/lib/components/tickets/tickets.component.scss +0 -131
- package/src/lib/components/tickets/tickets.component.spec.ts +0 -23
- package/src/lib/components/tickets/tickets.component.ts +0 -809
- package/src/lib/components/viewcategory/viewcategory.component.html +0 -38
- package/src/lib/components/viewcategory/viewcategory.component.scss +0 -29
- package/src/lib/components/viewcategory/viewcategory.component.spec.ts +0 -23
- package/src/lib/components/viewcategory/viewcategory.component.ts +0 -79
- package/src/lib/services/audit.service.spec.ts +0 -16
- package/src/lib/services/audit.service.ts +0 -98
- package/src/lib/services/excel.service.ts +0 -48
- package/src/lib/services/ticket.service.spec.ts +0 -16
- package/src/lib/services/ticket.service.ts +0 -501
- package/src/lib/services/timer.service.spec.ts +0 -16
- package/src/lib/services/timer.service.ts +0 -92
- package/src/lib/tango-manage-tickets-routing.module.ts +0 -37
- package/src/lib/tango-manage-tickets.module.ts +0 -68
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
|
@@ -0,0 +1,847 @@
|
|
|
1
|
+
import { Component } from "@angular/core";
|
|
2
|
+
import { Subject, takeUntil } from "rxjs";
|
|
3
|
+
import { AddCsmModalComponent } from "../add-csm-modal/add-csm-modal.component";
|
|
4
|
+
import { CommentModelComponent } from "../comment-model/comment-model.component";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
import * as i2 from "tango-app-ui-global";
|
|
8
|
+
import * as i3 from "@ng-bootstrap/ng-bootstrap";
|
|
9
|
+
import * as i4 from "../../services/ticket.service";
|
|
10
|
+
import * as i5 from "../../services/excel.service";
|
|
11
|
+
import * as i6 from "@angular/common";
|
|
12
|
+
import * as i7 from "@angular/forms";
|
|
13
|
+
import * as i8 from "tango-app-ui-shared";
|
|
14
|
+
export class TicketsComponent {
|
|
15
|
+
cd;
|
|
16
|
+
router;
|
|
17
|
+
route;
|
|
18
|
+
gs;
|
|
19
|
+
modalService;
|
|
20
|
+
service;
|
|
21
|
+
excelservice;
|
|
22
|
+
type = "Infra";
|
|
23
|
+
searchValue = "";
|
|
24
|
+
selectedTab = "total";
|
|
25
|
+
// paginationVariables
|
|
26
|
+
itemsPerPage = 10;
|
|
27
|
+
currentPage = 1;
|
|
28
|
+
totalItems = 0;
|
|
29
|
+
paginationSizes = [10, 20, 30];
|
|
30
|
+
pageSize = 10;
|
|
31
|
+
destroy$ = new Subject();
|
|
32
|
+
assignTicket = false;
|
|
33
|
+
filterByStores = [];
|
|
34
|
+
filterByinstalled = [];
|
|
35
|
+
filterByStatus = [];
|
|
36
|
+
filterByQueryType = [];
|
|
37
|
+
issueType = [];
|
|
38
|
+
sortedColumn;
|
|
39
|
+
sortDirection;
|
|
40
|
+
headerFilters;
|
|
41
|
+
userList_req;
|
|
42
|
+
userList = [];
|
|
43
|
+
dataObject = [];
|
|
44
|
+
storeList = [];
|
|
45
|
+
statusType;
|
|
46
|
+
typeName;
|
|
47
|
+
users;
|
|
48
|
+
limit = 10;
|
|
49
|
+
offset = 1;
|
|
50
|
+
sortBy = -1;
|
|
51
|
+
sortColumName = "";
|
|
52
|
+
listArray = [];
|
|
53
|
+
tableListArray = [];
|
|
54
|
+
loading = true;
|
|
55
|
+
noData = false;
|
|
56
|
+
selectAll = false;
|
|
57
|
+
assignStores = [];
|
|
58
|
+
issueTypeList = [];
|
|
59
|
+
queryTypeList = [];
|
|
60
|
+
ClusterList;
|
|
61
|
+
filterByCluster;
|
|
62
|
+
showClusterFilter = false;
|
|
63
|
+
constructor(cd, router, route, gs, modalService, service, excelservice) {
|
|
64
|
+
this.cd = cd;
|
|
65
|
+
this.router = router;
|
|
66
|
+
this.route = route;
|
|
67
|
+
this.gs = gs;
|
|
68
|
+
this.modalService = modalService;
|
|
69
|
+
this.service = service;
|
|
70
|
+
this.excelservice = excelservice;
|
|
71
|
+
}
|
|
72
|
+
ngOnInit() {
|
|
73
|
+
const userData = JSON.parse(localStorage.getItem("user-info") || "{}");
|
|
74
|
+
this.users = userData;
|
|
75
|
+
this.route?.queryParams
|
|
76
|
+
?.pipe(takeUntil(this.destroy$))
|
|
77
|
+
.subscribe((params) => {
|
|
78
|
+
this.type = params.type;
|
|
79
|
+
this.filterByStores = [];
|
|
80
|
+
this.storeList = [];
|
|
81
|
+
this.filterByinstalled = [];
|
|
82
|
+
this.statusType = [];
|
|
83
|
+
this.filterByStatus = [];
|
|
84
|
+
this.userList = [];
|
|
85
|
+
this.issueType = [];
|
|
86
|
+
this.issueTypeList = [];
|
|
87
|
+
this.filterByQueryType = [];
|
|
88
|
+
this.queryTypeList = [];
|
|
89
|
+
this.filterByCluster = [];
|
|
90
|
+
this.ClusterList = [];
|
|
91
|
+
this.dataObject = [];
|
|
92
|
+
this.gs.manageRefreshTrigger.next(true);
|
|
93
|
+
this.getInitload();
|
|
94
|
+
this.gs.dataRangeValue?.pipe(takeUntil(this.destroy$))?.subscribe({
|
|
95
|
+
next: (data) => {
|
|
96
|
+
if (data) {
|
|
97
|
+
this.headerFilters = data;
|
|
98
|
+
this.userList_req = {
|
|
99
|
+
limit: 10000,
|
|
100
|
+
offset: 1,
|
|
101
|
+
userType: this.users.userType,
|
|
102
|
+
};
|
|
103
|
+
this.getstoreFilter();
|
|
104
|
+
this.getAllGroups();
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
if (this.type === "installation") {
|
|
109
|
+
this.typeName = "Installed By";
|
|
110
|
+
this.statusType = [
|
|
111
|
+
{ text: "Onboarded", id: "onboarded" },
|
|
112
|
+
{ text: "Paired", id: "paired" },
|
|
113
|
+
{ text: "Installationfailed", id: "installationfailed" },
|
|
114
|
+
{ text: "Deployed", id: "deployed" },
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.typeName = "Resolved By";
|
|
119
|
+
if (this.users.userType === "tango" && this.type === 'infra') {
|
|
120
|
+
this.statusType = [
|
|
121
|
+
{ text: "Open", id: "open" },
|
|
122
|
+
{ text: "In Progress", id: "inprogress" },
|
|
123
|
+
{ text: "Refresh Ticket", id: "refreshticket" },
|
|
124
|
+
{ text: "Closed", id: "closed" },
|
|
125
|
+
];
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
this.statusType = [
|
|
129
|
+
{ text: "Open", id: "open" },
|
|
130
|
+
{ text: "In Progress", id: "inprogress" },
|
|
131
|
+
{ text: "Closed", id: "closed" },
|
|
132
|
+
];
|
|
133
|
+
}
|
|
134
|
+
this.issueTypeList = [
|
|
135
|
+
{ text: "High Count", id: "highcount" },
|
|
136
|
+
{ text: "Low Count", id: "lowcount" },
|
|
137
|
+
];
|
|
138
|
+
this.queryTypeList = [
|
|
139
|
+
{ text: "Internal", id: "internal" },
|
|
140
|
+
{ text: "External", id: "external" },
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
getInitload() {
|
|
146
|
+
this.searchValue = "";
|
|
147
|
+
this.limit = 10;
|
|
148
|
+
this.pageSize = 10;
|
|
149
|
+
this.currentPage = 1;
|
|
150
|
+
this.offset = 1;
|
|
151
|
+
this.selectedTab = "total";
|
|
152
|
+
this.loading = true;
|
|
153
|
+
this.noData = false;
|
|
154
|
+
this.sortedColumn = '';
|
|
155
|
+
}
|
|
156
|
+
getstoreFilter() {
|
|
157
|
+
this.service
|
|
158
|
+
.getSotresList({ issueType: this.type, clientId: this.headerFilters.clients })
|
|
159
|
+
.pipe(takeUntil(this.destroy$))
|
|
160
|
+
.subscribe({
|
|
161
|
+
next: (res) => {
|
|
162
|
+
if (res && res.code === 200) {
|
|
163
|
+
this.storeList = res?.data?.data;
|
|
164
|
+
this.storeList.forEach((element) => {
|
|
165
|
+
element.text = element.storeId;
|
|
166
|
+
element.id = element.storeId;
|
|
167
|
+
});
|
|
168
|
+
if (this.users.userType === "tango") {
|
|
169
|
+
this.getuserlist();
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
if (this.type === 'installation') {
|
|
173
|
+
this.dataObject = [
|
|
174
|
+
{ Description: "Store ID", Issues: this.storeList },
|
|
175
|
+
{ Description: "Deployed Status", Issues: this.statusType },
|
|
176
|
+
];
|
|
177
|
+
if (this.showClusterFilter) {
|
|
178
|
+
this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else if (this.type === 'infra' || this.type === 'dataMismatch') {
|
|
182
|
+
this.dataObject = [
|
|
183
|
+
{ Description: "Store ID", Issues: this.storeList },
|
|
184
|
+
{ Description: "Status", Issues: this.statusType },
|
|
185
|
+
];
|
|
186
|
+
if (this.showClusterFilter) {
|
|
187
|
+
this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else if (this.type === 'mat') {
|
|
191
|
+
this.dataObject = [
|
|
192
|
+
{ Description: "Status", Issues: this.statusType },
|
|
193
|
+
];
|
|
194
|
+
if (this.showClusterFilter) {
|
|
195
|
+
this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
this.getTable();
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
this.getTable();
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
error: (err) => {
|
|
206
|
+
this.loading = false;
|
|
207
|
+
this.noData = true;
|
|
208
|
+
this.cd.detectChanges();
|
|
209
|
+
},
|
|
210
|
+
complete: () => { },
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
getuserlist() {
|
|
214
|
+
this.service
|
|
215
|
+
.getUserList(this.userList_req)
|
|
216
|
+
.pipe(takeUntil(this.destroy$))
|
|
217
|
+
.subscribe((res) => {
|
|
218
|
+
if (res && res.code === 200) {
|
|
219
|
+
this.userList = res?.data?.result;
|
|
220
|
+
this.userList?.forEach((element) => {
|
|
221
|
+
element.text = element.userName;
|
|
222
|
+
element.id = element.email;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
if (this.users.userType === "tango" && (this.type === 'installation')) {
|
|
226
|
+
this.dataObject = [
|
|
227
|
+
{ Description: "Store ID", Issues: this.storeList },
|
|
228
|
+
{ Description: "Deployed Status", Issues: this.statusType },
|
|
229
|
+
{ Description: this.typeName, Issues: this.userList },
|
|
230
|
+
];
|
|
231
|
+
if (this.showClusterFilter) {
|
|
232
|
+
this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
else if (this.users.userType === "tango" && this.type === 'infra') {
|
|
236
|
+
this.dataObject = [
|
|
237
|
+
{ Description: "Store ID", Issues: this.storeList },
|
|
238
|
+
{ Description: "Status", Issues: this.statusType },
|
|
239
|
+
{ Description: this.typeName, Issues: this.userList },
|
|
240
|
+
];
|
|
241
|
+
if (this.showClusterFilter) {
|
|
242
|
+
this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
else if (this.users.userType === "tango" && this.type === 'dataMismatch') {
|
|
246
|
+
this.dataObject = [
|
|
247
|
+
{ Description: "Store ID", Issues: this.storeList },
|
|
248
|
+
{ Description: "Query Type", Issues: this.queryTypeList },
|
|
249
|
+
{ Description: "Status", Issues: this.statusType },
|
|
250
|
+
];
|
|
251
|
+
if (this.showClusterFilter) {
|
|
252
|
+
this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else if (this.type === 'mat') {
|
|
256
|
+
this.dataObject = [
|
|
257
|
+
{ Description: "Status", Issues: this.statusType },
|
|
258
|
+
];
|
|
259
|
+
if (this.showClusterFilter) {
|
|
260
|
+
this.dataObject.push({ Description: "Clusters", Issues: this.ClusterList });
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
ngOnDestroy() {
|
|
266
|
+
this.destroy$.next(true);
|
|
267
|
+
this.destroy$.complete();
|
|
268
|
+
}
|
|
269
|
+
searchData() {
|
|
270
|
+
this.currentPage = 1;
|
|
271
|
+
this.offset = 1;
|
|
272
|
+
this.limit = 10;
|
|
273
|
+
this.getTable();
|
|
274
|
+
}
|
|
275
|
+
onSort(column) {
|
|
276
|
+
if (this.sortedColumn === column) {
|
|
277
|
+
this.sortDirection = this.sortDirection === 1 ? -1 : 1;
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
this.sortedColumn = column;
|
|
281
|
+
this.sortDirection = 1;
|
|
282
|
+
}
|
|
283
|
+
this.getTable();
|
|
284
|
+
}
|
|
285
|
+
exportXLSX() {
|
|
286
|
+
let obj = {
|
|
287
|
+
clientId: this.headerFilters?.clients,
|
|
288
|
+
fromDate: this.headerFilters?.date?.startDate,
|
|
289
|
+
toDate: this.headerFilters?.date?.endDate,
|
|
290
|
+
offset: this.offset,
|
|
291
|
+
limit: this.limit,
|
|
292
|
+
filterIssue: this.selectedTab ? this.selectedTab : "",
|
|
293
|
+
searchValue: this.searchValue ? this.searchValue : "",
|
|
294
|
+
export: true,
|
|
295
|
+
};
|
|
296
|
+
if (this.sortedColumn) {
|
|
297
|
+
obj.sortColumName = this.sortedColumn;
|
|
298
|
+
obj.sortBy = this.sortDirection;
|
|
299
|
+
}
|
|
300
|
+
if (this.filterByCluster?.length) {
|
|
301
|
+
obj.filterByCluster = this.filterByCluster ? this.filterByCluster : [];
|
|
302
|
+
}
|
|
303
|
+
if (this.type === "installation" || this.type === "infra") {
|
|
304
|
+
if (this.filterByStores?.length) {
|
|
305
|
+
obj.storeIdFilter = this.filterByStores ? this.filterByStores : [];
|
|
306
|
+
}
|
|
307
|
+
if (this.filterByStatus?.length) {
|
|
308
|
+
obj.statusFilter = this.filterByStatus ? this.filterByStatus : [];
|
|
309
|
+
}
|
|
310
|
+
if (this.filterByinstalled?.length) {
|
|
311
|
+
obj.userFilter = this.filterByinstalled ? this.filterByinstalled : [];
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
else if (this.type === "mat") {
|
|
315
|
+
if (this.filterByStatus?.length) {
|
|
316
|
+
obj.statusFilter = this.filterByStatus ? this.filterByStatus : [];
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
if (this.filterByStores?.length) {
|
|
321
|
+
obj.filterByStores = this.filterByStores ? this.filterByStores : [];
|
|
322
|
+
}
|
|
323
|
+
if (this.filterByStatus?.length) {
|
|
324
|
+
obj.filterByStatus = this.filterByStatus ? this.filterByStatus : [];
|
|
325
|
+
}
|
|
326
|
+
if (this.filterByQueryType?.length) {
|
|
327
|
+
obj.filterByQueryType = this.filterByQueryType ? this.filterByQueryType : [];
|
|
328
|
+
}
|
|
329
|
+
if (this.filterByCluster?.length) {
|
|
330
|
+
obj.filterByCluster = this.filterByCluster ? this.filterByCluster : [];
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
if (this.type === "installation") {
|
|
334
|
+
this.service
|
|
335
|
+
.exportInstallationList(obj)
|
|
336
|
+
.pipe(takeUntil(this.destroy$))
|
|
337
|
+
.subscribe({
|
|
338
|
+
next: (res) => {
|
|
339
|
+
this.excelservice.saveAsExcelFile(res, 'Installation');
|
|
340
|
+
},
|
|
341
|
+
error: (err) => {
|
|
342
|
+
this.loading = false;
|
|
343
|
+
this.noData = true;
|
|
344
|
+
this.cd.detectChanges();
|
|
345
|
+
},
|
|
346
|
+
complete: () => { },
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
else if (this.type === "infra") {
|
|
350
|
+
this.service
|
|
351
|
+
.exportInfraList(obj)
|
|
352
|
+
.pipe(takeUntil(this.destroy$))
|
|
353
|
+
.subscribe({
|
|
354
|
+
next: (res) => {
|
|
355
|
+
this.excelservice.saveAsExcelFile(res, 'Infra');
|
|
356
|
+
},
|
|
357
|
+
error: (err) => {
|
|
358
|
+
this.loading = false;
|
|
359
|
+
this.noData = true;
|
|
360
|
+
this.cd.detectChanges();
|
|
361
|
+
},
|
|
362
|
+
complete: () => { },
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
else if (this.type === "mat") {
|
|
366
|
+
this.service
|
|
367
|
+
.exportMatList(obj)
|
|
368
|
+
.pipe(takeUntil(this.destroy$))
|
|
369
|
+
.subscribe({
|
|
370
|
+
next: (res) => {
|
|
371
|
+
this.excelservice.saveAsExcelFile(res, 'Mat');
|
|
372
|
+
},
|
|
373
|
+
error: (err) => {
|
|
374
|
+
this.loading = false;
|
|
375
|
+
this.noData = true;
|
|
376
|
+
this.cd.detectChanges();
|
|
377
|
+
},
|
|
378
|
+
complete: () => { },
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
else if (this.type === 'dataMismatch') {
|
|
382
|
+
this.service
|
|
383
|
+
.exportDataMismatchList(obj)
|
|
384
|
+
.pipe(takeUntil(this.destroy$))
|
|
385
|
+
.subscribe({
|
|
386
|
+
next: (res) => {
|
|
387
|
+
this.excelservice.saveAsExcelFile(res, 'Data Mismatch');
|
|
388
|
+
},
|
|
389
|
+
error: (err) => {
|
|
390
|
+
this.loading = false;
|
|
391
|
+
this.noData = true;
|
|
392
|
+
this.cd.detectChanges();
|
|
393
|
+
},
|
|
394
|
+
complete: () => { },
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
selectedTabs(type) {
|
|
399
|
+
this.currentPage = 1;
|
|
400
|
+
this.offset = 1;
|
|
401
|
+
this.limit = 10;
|
|
402
|
+
if (this.type === 'dataMismatch') {
|
|
403
|
+
this.selectedTab = type.name.replace(/\s+/g, '').toLocaleLowerCase();
|
|
404
|
+
this.currentPage = 1;
|
|
405
|
+
this.offset = 1;
|
|
406
|
+
this.limit = 10;
|
|
407
|
+
this.pageSize = 10;
|
|
408
|
+
this.getTable();
|
|
409
|
+
this.transformName(type);
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
this.selectedTab = type.name;
|
|
413
|
+
this.currentPage = 1;
|
|
414
|
+
this.offset = 1;
|
|
415
|
+
this.limit = 10;
|
|
416
|
+
this.pageSize = 10;
|
|
417
|
+
this.getTable();
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
transformName(name) {
|
|
421
|
+
return name.toLocaleLowerCase().replace(/\s+/g, '');
|
|
422
|
+
}
|
|
423
|
+
onPageChange(pageOffset) {
|
|
424
|
+
this.currentPage = Number(pageOffset);
|
|
425
|
+
this.offset = Number(pageOffset);
|
|
426
|
+
this.limit = 10;
|
|
427
|
+
this.getTable();
|
|
428
|
+
}
|
|
429
|
+
onPageSizeChange(pageSize) {
|
|
430
|
+
this.pageSize = Number(pageSize);
|
|
431
|
+
this.limit = Number(pageSize);
|
|
432
|
+
this.currentPage = 1;
|
|
433
|
+
this.offset = 1;
|
|
434
|
+
this.getTable();
|
|
435
|
+
}
|
|
436
|
+
selectAllStore(event) {
|
|
437
|
+
this.selectAll = event.target.checked;
|
|
438
|
+
this.tableListArray.forEach((obj) => (obj.checked = this.selectAll));
|
|
439
|
+
// If all checkboxes are checked, assign all ticketIds to assignStores, otherwise clear assignStores
|
|
440
|
+
this.assignStores = this.selectAll
|
|
441
|
+
? this.tableListArray.map((obj) => obj.ticketId)
|
|
442
|
+
: [];
|
|
443
|
+
this.assignTicket = this.selectAll; // Update assignTicket based on selectAll state
|
|
444
|
+
}
|
|
445
|
+
getAllGroups() {
|
|
446
|
+
this.ClusterList = [];
|
|
447
|
+
if (this.headerFilters?.clients[0] && this.headerFilters?.clients[0] != '') {
|
|
448
|
+
this.service.getclusters({ clientId: this.headerFilters?.clients[0], group: [], city: [] }).subscribe({
|
|
449
|
+
next: (res) => {
|
|
450
|
+
if (res && res.code == 200) {
|
|
451
|
+
this.showClusterFilter = true;
|
|
452
|
+
this.ClusterList = res?.data?.groupData;
|
|
453
|
+
this.ClusterList.forEach((element) => {
|
|
454
|
+
element.text = element.groupName;
|
|
455
|
+
element.id = element.groupName;
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
this.ClusterList = [];
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
updateCheck(event, ticketId) {
|
|
466
|
+
const ticket = this.tableListArray.find((obj) => obj.ticketId === ticketId);
|
|
467
|
+
if (ticket) {
|
|
468
|
+
ticket.checked = event.target.checked;
|
|
469
|
+
// If the checkbox is checked, add or remove the corresponding array from the selected arrays
|
|
470
|
+
if (event.target.checked) {
|
|
471
|
+
this.assignStores.push(ticketId);
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
const index = this.assignStores.indexOf(ticketId);
|
|
475
|
+
if (index !== -1) {
|
|
476
|
+
this.assignStores.splice(index, 1);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
// Update selectAll based on the current state of checkboxes
|
|
480
|
+
this.selectAll = this.tableListArray.every((obj) => obj.checked);
|
|
481
|
+
// Update assignTicket based on whether any individual ticket checkbox is checked
|
|
482
|
+
this.assignTicket = this.tableListArray.some((obj) => obj.checked);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
addAssignTicket() {
|
|
486
|
+
const modalRef = this.modalService.open(AddCsmModalComponent, {
|
|
487
|
+
centered: true,
|
|
488
|
+
size: "md",
|
|
489
|
+
scrollable: true,
|
|
490
|
+
backdrop: "static"
|
|
491
|
+
});
|
|
492
|
+
modalRef.componentInstance.ticketId = this.assignStores;
|
|
493
|
+
modalRef.result.then((result) => {
|
|
494
|
+
if (result === "submit") {
|
|
495
|
+
this.searchValue = "";
|
|
496
|
+
this.assignStores = [];
|
|
497
|
+
this.selectAll = false;
|
|
498
|
+
this.assignTicket = false;
|
|
499
|
+
this.getTable();
|
|
500
|
+
}
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
applyFilters(event) {
|
|
504
|
+
if (event?.length) {
|
|
505
|
+
event.forEach((element) => {
|
|
506
|
+
if (element.Description === "Store ID") {
|
|
507
|
+
this.filterByStores = element.Issues.map((val) => val?.id);
|
|
508
|
+
}
|
|
509
|
+
if (this.type !== 'installation') {
|
|
510
|
+
if (element.Description === "Status") {
|
|
511
|
+
this.filterByStatus = element.Issues.map((val) => val?.id);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
if (this.type === 'installation') {
|
|
515
|
+
if (element.Description === "Deployed Status") {
|
|
516
|
+
this.filterByStatus = element.Issues.map((val) => val?.id);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
if (this.users.userType === "tango" && (this.type === 'installation' || this.type === 'infra')) {
|
|
520
|
+
if (element.Description === this.typeName) {
|
|
521
|
+
this.filterByinstalled = element.Issues.map((val) => val?.id);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
this.filterByinstalled = [];
|
|
526
|
+
}
|
|
527
|
+
if (element.Description === "Query Type") {
|
|
528
|
+
this.filterByQueryType = element.Issues.map((val) => val?.id);
|
|
529
|
+
}
|
|
530
|
+
if (element.Description === "Clusters") {
|
|
531
|
+
this.filterByCluster = element.Issues.map((val) => val?.id);
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
this.currentPage = 1;
|
|
536
|
+
this.offset = 1;
|
|
537
|
+
this.limit = 10;
|
|
538
|
+
this.getTable();
|
|
539
|
+
}
|
|
540
|
+
getTable() {
|
|
541
|
+
this.loading = true;
|
|
542
|
+
this.noData = false;
|
|
543
|
+
let obj = {
|
|
544
|
+
clientId: this.headerFilters?.clients,
|
|
545
|
+
fromDate: this.headerFilters?.date?.startDate,
|
|
546
|
+
toDate: this.headerFilters?.date?.endDate,
|
|
547
|
+
offset: this.offset,
|
|
548
|
+
limit: this.limit,
|
|
549
|
+
filterIssue: this.selectedTab ? this.selectedTab : "",
|
|
550
|
+
searchValue: this.searchValue ? this.searchValue : "",
|
|
551
|
+
export: false,
|
|
552
|
+
};
|
|
553
|
+
if (this.sortedColumn) {
|
|
554
|
+
if (this.type === 'dataMismatch') {
|
|
555
|
+
obj.sortColumnName = this.sortedColumn;
|
|
556
|
+
obj.sortBy = this.sortDirection;
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
obj.sortColumName = this.sortedColumn;
|
|
560
|
+
obj.sortBy = this.sortDirection;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
if (this.type === "installation" || this.type === "infra") {
|
|
564
|
+
if (this.filterByStores?.length) {
|
|
565
|
+
obj.storeIdFilter = this.filterByStores ? this.filterByStores : [];
|
|
566
|
+
}
|
|
567
|
+
if (this.filterByStatus?.length) {
|
|
568
|
+
obj.statusFilter = this.filterByStatus ? this.filterByStatus : [];
|
|
569
|
+
}
|
|
570
|
+
if (this.filterByinstalled?.length) {
|
|
571
|
+
obj.userFilter = this.filterByinstalled ? this.filterByinstalled : [];
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
else if (this.type === "mat") {
|
|
575
|
+
if (this.filterByStatus?.length) {
|
|
576
|
+
obj.statusFilter = this.filterByStatus ? this.filterByStatus : [];
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
else {
|
|
580
|
+
if (this.filterByStores?.length) {
|
|
581
|
+
obj.filterByStores = this.filterByStores ? this.filterByStores : [];
|
|
582
|
+
}
|
|
583
|
+
if (this.filterByStatus?.length) {
|
|
584
|
+
obj.filterByStatus = this.filterByStatus ? this.filterByStatus : [];
|
|
585
|
+
}
|
|
586
|
+
if (this.filterByQueryType?.length) {
|
|
587
|
+
obj.filterByQueryType = this.filterByQueryType ? this.filterByQueryType : [];
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
if (this.filterByCluster?.length) {
|
|
591
|
+
obj.filterByCluster = this.filterByCluster ? this.filterByCluster : [];
|
|
592
|
+
}
|
|
593
|
+
if (this.type === "installation") {
|
|
594
|
+
this.service
|
|
595
|
+
.getInstallationList(obj)
|
|
596
|
+
.pipe(takeUntil(this.destroy$))
|
|
597
|
+
.subscribe({
|
|
598
|
+
next: (res) => {
|
|
599
|
+
if (res && res.code === 200) {
|
|
600
|
+
this.listArray = res.data.response;
|
|
601
|
+
if (res.data.result.length === 0) {
|
|
602
|
+
this.loading = false;
|
|
603
|
+
this.noData = true;
|
|
604
|
+
}
|
|
605
|
+
else {
|
|
606
|
+
this.tableListArray = res.data.result;
|
|
607
|
+
this.totalItems = res.data?.count;
|
|
608
|
+
if (this.totalItems < 10) {
|
|
609
|
+
this.paginationSizes = [this.totalItems];
|
|
610
|
+
}
|
|
611
|
+
else {
|
|
612
|
+
this.paginationSizes = [10, 20, 30];
|
|
613
|
+
}
|
|
614
|
+
this.loading = false;
|
|
615
|
+
this.noData = false;
|
|
616
|
+
this.selectAll = false;
|
|
617
|
+
this.assignTicket = false;
|
|
618
|
+
this.cd.detectChanges();
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
else {
|
|
622
|
+
this.loading = false;
|
|
623
|
+
this.noData = true;
|
|
624
|
+
}
|
|
625
|
+
},
|
|
626
|
+
error: (err) => {
|
|
627
|
+
this.loading = false;
|
|
628
|
+
this.noData = true;
|
|
629
|
+
this.cd.detectChanges();
|
|
630
|
+
},
|
|
631
|
+
complete: () => { },
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
else if (this.type === "infra") {
|
|
635
|
+
this.service
|
|
636
|
+
.getInfraList(obj)
|
|
637
|
+
.pipe(takeUntil(this.destroy$))
|
|
638
|
+
.subscribe({
|
|
639
|
+
next: (res) => {
|
|
640
|
+
if (res && res.code === 200) {
|
|
641
|
+
this.listArray = res.data.response;
|
|
642
|
+
if (res.data.result.length === 0) {
|
|
643
|
+
this.loading = false;
|
|
644
|
+
this.noData = true;
|
|
645
|
+
}
|
|
646
|
+
else {
|
|
647
|
+
this.tableListArray = res.data.result;
|
|
648
|
+
this.totalItems = res.data?.count;
|
|
649
|
+
if (this.totalItems < 10) {
|
|
650
|
+
this.paginationSizes = [this.totalItems];
|
|
651
|
+
}
|
|
652
|
+
else {
|
|
653
|
+
this.paginationSizes = [10, 20, 30];
|
|
654
|
+
}
|
|
655
|
+
this.loading = false;
|
|
656
|
+
this.noData = false;
|
|
657
|
+
this.selectAll = false;
|
|
658
|
+
this.assignTicket = false;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
else {
|
|
662
|
+
this.loading = false;
|
|
663
|
+
this.noData = true;
|
|
664
|
+
}
|
|
665
|
+
},
|
|
666
|
+
error: (err) => {
|
|
667
|
+
this.loading = false;
|
|
668
|
+
this.noData = true;
|
|
669
|
+
this.cd.detectChanges();
|
|
670
|
+
},
|
|
671
|
+
complete: () => { },
|
|
672
|
+
});
|
|
673
|
+
}
|
|
674
|
+
else if (this.type === "mat") {
|
|
675
|
+
this.service
|
|
676
|
+
.getMatList(obj)
|
|
677
|
+
.pipe(takeUntil(this.destroy$))
|
|
678
|
+
.subscribe({
|
|
679
|
+
next: (res) => {
|
|
680
|
+
if (res && res.code === 200) {
|
|
681
|
+
this.listArray = res?.data?.response;
|
|
682
|
+
this.tableListArray = res?.data?.result;
|
|
683
|
+
this.totalItems = res.data?.count;
|
|
684
|
+
if (this.totalItems < 10) {
|
|
685
|
+
this.paginationSizes = [this.totalItems];
|
|
686
|
+
}
|
|
687
|
+
else {
|
|
688
|
+
this.paginationSizes = [10, 20, 30];
|
|
689
|
+
}
|
|
690
|
+
this.loading = false;
|
|
691
|
+
this.noData = false;
|
|
692
|
+
}
|
|
693
|
+
else {
|
|
694
|
+
this.loading = false;
|
|
695
|
+
this.noData = true;
|
|
696
|
+
}
|
|
697
|
+
},
|
|
698
|
+
error: (err) => {
|
|
699
|
+
this.loading = false;
|
|
700
|
+
this.noData = true;
|
|
701
|
+
this.cd.detectChanges();
|
|
702
|
+
},
|
|
703
|
+
complete: () => { },
|
|
704
|
+
});
|
|
705
|
+
}
|
|
706
|
+
else if (this.type === 'dataMismatch') {
|
|
707
|
+
this.service
|
|
708
|
+
.getDataMismathList(obj)
|
|
709
|
+
.pipe(takeUntil(this.destroy$))
|
|
710
|
+
.subscribe({
|
|
711
|
+
next: (res) => {
|
|
712
|
+
if (res && res.code === 200) {
|
|
713
|
+
this.listArray = res?.data?.response;
|
|
714
|
+
if (res.data.result.length === 0) {
|
|
715
|
+
this.loading = false;
|
|
716
|
+
this.noData = true;
|
|
717
|
+
}
|
|
718
|
+
else {
|
|
719
|
+
this.tableListArray = res?.data?.result;
|
|
720
|
+
this.totalItems = res.data?.count;
|
|
721
|
+
if (this.totalItems < 10) {
|
|
722
|
+
this.paginationSizes = [this.totalItems];
|
|
723
|
+
}
|
|
724
|
+
else {
|
|
725
|
+
this.paginationSizes = [10, 20, 30];
|
|
726
|
+
}
|
|
727
|
+
this.loading = false;
|
|
728
|
+
this.noData = false;
|
|
729
|
+
this.selectAll = false;
|
|
730
|
+
this.assignTicket = false;
|
|
731
|
+
this.cd.detectChanges();
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
else {
|
|
735
|
+
this.loading = false;
|
|
736
|
+
this.noData = true;
|
|
737
|
+
}
|
|
738
|
+
},
|
|
739
|
+
error: (err) => {
|
|
740
|
+
this.loading = false;
|
|
741
|
+
this.noData = true;
|
|
742
|
+
this.cd.detectChanges();
|
|
743
|
+
},
|
|
744
|
+
complete: () => { },
|
|
745
|
+
});
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
routeToStore(storeId, clientId) {
|
|
749
|
+
let data = JSON.parse(localStorage.getItem("header-filters") || "");
|
|
750
|
+
data.store = storeId;
|
|
751
|
+
data.client = clientId;
|
|
752
|
+
localStorage.setItem("header-filters", JSON.stringify(data));
|
|
753
|
+
this.gs.dataRangeValue.next(data);
|
|
754
|
+
this.router.navigate(['/manage/stores/infra-ticket'], {
|
|
755
|
+
queryParams: { storeId: storeId }
|
|
756
|
+
});
|
|
757
|
+
}
|
|
758
|
+
routeToMat(storeId, clientId, clientName) {
|
|
759
|
+
let data = JSON.parse(localStorage.getItem("header-filters") || "");
|
|
760
|
+
data.store = storeId;
|
|
761
|
+
data.client = clientId;
|
|
762
|
+
data.clientName = clientName ? clientName : 'Stores';
|
|
763
|
+
localStorage.setItem("header-filters", JSON.stringify(data));
|
|
764
|
+
this.gs.dataRangeValue.next(data);
|
|
765
|
+
this.router.navigate(['/manage/stores/mat'], {
|
|
766
|
+
queryParams: { storeId: storeId }
|
|
767
|
+
});
|
|
768
|
+
}
|
|
769
|
+
commentModal(obj) {
|
|
770
|
+
const modalRef = this.modalService.open(CommentModelComponent, {
|
|
771
|
+
centered: true,
|
|
772
|
+
size: "md",
|
|
773
|
+
scrollable: true,
|
|
774
|
+
backdrop: "static"
|
|
775
|
+
});
|
|
776
|
+
modalRef.componentInstance.ticketId = obj.ticketId;
|
|
777
|
+
modalRef.result.then((result) => {
|
|
778
|
+
});
|
|
779
|
+
}
|
|
780
|
+
tickets(type, clientId, storeId, clientName) {
|
|
781
|
+
if (type === 'mat') {
|
|
782
|
+
let data = JSON.parse(localStorage.getItem("header-filters") || "");
|
|
783
|
+
data.store = storeId;
|
|
784
|
+
data.client = clientId;
|
|
785
|
+
data.clientName = clientName ? clientName : 'Stores';
|
|
786
|
+
localStorage.setItem("header-filters", JSON.stringify(data));
|
|
787
|
+
this.gs.dataRangeValue.next(data);
|
|
788
|
+
this.router.navigate(['/manage/stores/mat'], {
|
|
789
|
+
queryParams: { storeId: storeId }
|
|
790
|
+
});
|
|
791
|
+
}
|
|
792
|
+
else {
|
|
793
|
+
let data = JSON.parse(localStorage.getItem("header-filters") || "");
|
|
794
|
+
data.store = storeId;
|
|
795
|
+
data.client = clientId;
|
|
796
|
+
data.clientName = clientName ? clientName : 'Stores';
|
|
797
|
+
localStorage.setItem("header-filters", JSON.stringify(data));
|
|
798
|
+
this.gs.dataRangeValue.next(data);
|
|
799
|
+
this.router.navigate(['/manage/stores/infra-ticket'], {
|
|
800
|
+
queryParams: { storeId: storeId, type: type }
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
clientTickets(clientId, storeId, clientName) {
|
|
805
|
+
let data = JSON.parse(localStorage.getItem("header-filters") || "");
|
|
806
|
+
data.store = storeId;
|
|
807
|
+
data.client = clientId;
|
|
808
|
+
data.clientName = clientName ? clientName : 'Stores';
|
|
809
|
+
localStorage.setItem("header-filters", JSON.stringify(data));
|
|
810
|
+
this.gs.dataRangeValue.next(data);
|
|
811
|
+
this.router.navigate(['/manage/stores']);
|
|
812
|
+
}
|
|
813
|
+
storeTickets(clientId, storeId, clientName) {
|
|
814
|
+
let data = JSON.parse(localStorage.getItem("header-filters") || "");
|
|
815
|
+
data.store = storeId;
|
|
816
|
+
data.client = clientId;
|
|
817
|
+
data.clientName = clientName ? clientName : 'Stores';
|
|
818
|
+
localStorage.setItem("header-filters", JSON.stringify(data));
|
|
819
|
+
this.gs.dataRangeValue.next(data);
|
|
820
|
+
this.router.navigate(['/manage/stores/cameras'], {
|
|
821
|
+
queryParams: { storeId: storeId }
|
|
822
|
+
});
|
|
823
|
+
}
|
|
824
|
+
userTickets(clientId, storeId) {
|
|
825
|
+
let data = JSON.parse(localStorage.getItem("header-filters") || "");
|
|
826
|
+
data.store = storeId;
|
|
827
|
+
data.client = clientId;
|
|
828
|
+
localStorage.setItem("header-filters", JSON.stringify(data));
|
|
829
|
+
this.gs.dataRangeValue.next(data);
|
|
830
|
+
this.router.navigate(['/manage/users']);
|
|
831
|
+
}
|
|
832
|
+
setpageSize() {
|
|
833
|
+
if (this.totalItems < 10) {
|
|
834
|
+
return this.totalItems;
|
|
835
|
+
}
|
|
836
|
+
else {
|
|
837
|
+
return this.pageSize;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TicketsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.GlobalStateService }, { token: i3.NgbModal }, { token: i4.TicketService }, { token: i5.ExcelService }], target: i0.ɵɵFactoryTarget.Component });
|
|
841
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TicketsComponent, selector: "lib-tickets", ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span *ngIf=\"type !=='dataMismatch' && type !== 'mat'\" class=\"card-label mb-2\">{{type | titlecase}}</span>\r\n <span *ngIf=\"type ==='dataMismatch'\" class=\"card-label mb-2\">Data Mismatch</span>\r\n <span *ngIf=\"type ==='mat'\" class=\"card-label mb-2\">Employee Mat</span>\r\n\r\n <!-- <span class=\"text-sub mb-2\">Last updated 1 hour ago</span> -->\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div *ngIf=\"!assignTicket\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search\" autocomplete=\"off\"\r\n (change)=\"searchData()\" [(ngModel)]=\"searchValue\" />\r\n <lib-filters *ngIf=\"users.userType === 'tango' && userList?.length || users.userType === 'client' && storeList?.length\" [dataObject]=\"dataObject\"\r\n (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <button type=\"button\" *ngIf=\"!noData&&!loading\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"assignTicket\" class=\"d-flex\">\r\n <button type=\"button\" (click)=\"addAssignTicket()\"\r\n class=\"btn mx-2 btn-primary rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99984 4.1665V15.8332M4.1665 9.99984H15.8332\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2 text-white\">Assign Ticket</span>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body\">\r\n\r\n\r\n <ul *ngIf=\"!loading && listArray?.length && type !== 'mat' && type !== 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"{'active': selectedTab === obj.name}\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === obj.name ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <ul *ngIf=\"!loading && listArray?.length && type === 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"selectedTab === transformName(obj.name) ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === transformName(obj.name) ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"table-responsive mt-5\">\r\n <table class=\"table bottom-border text-nowrap \">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" >\r\n \r\n <input *ngIf=\"this.users.userType ==='tango'\"\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span class=\"cursor-pointer\" (click)=\"onSort('ticketId')\"> Ticket ID <svg\r\n [ngClass]=\"sortedColumn === 'ticketId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'ticketId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span> \r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type !=='dataMismatch'\" (click)=\"onSort('issueDate')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('createdAt')\"> Created Time\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('issueClosedDate')\"> Closed Date\r\n <svg [ngClass]=\"sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('issueClosedDate')\"> Closed Time\r\n <svg [ngClass]=\"sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('createdAt')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" ><span (click)=\"onSort('issueDate')\">Issue Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientName')\">Brand Name<svg\r\n [ngClass]=\"sortedColumn === 'clientName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientId')\">Brand ID<svg\r\n [ngClass]=\"sortedColumn === 'clientId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name<svg\r\n [ngClass]=\"sortedColumn === 'storeName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeId')\">Store ID<svg\r\n [ngClass]=\"sortedColumn === 'storeId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && (type ==='infra'||type ==='dataMismatch'||type ==='mat')\" (click)=\"onSort('userName')\">Resolved By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && type ==='installation'\" (click)=\"onSort('userName')\">Installed By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('issueType')\">Issue Type\r\n <svg [ngClass]=\"sortedColumn === 'issueType' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueType' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('type')\">Query Type\r\n <svg [ngClass]=\"sortedColumn === 'type' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'type' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('reportedFootfall')\">Reported Footfall\r\n <svg [ngClass]=\"sortedColumn === 'reportedFootfall' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'reportedFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('mappedCount')\">Unique Images\r\n <svg [ngClass]=\"sortedColumn === 'mappedCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'mappedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('successPercentage')\">Success Percentage\r\n <svg [ngClass]=\"sortedColumn === 'successPercentage' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'successPercentage' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='installation'\" (click)=\"onSort('status')\">Deployed Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch' ||type ==='mat'|| type ==='infra'\" class=\"cursor-pointer\" (click)=\"onSort('status')\">Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n<!-- added config and total downtime as per the prioduct team requirement -->\r\n <th *ngIf=\"type==='infra'\">Configured Ticket Time\r\n </th> \r\n\r\n <th *ngIf=\"type==='infra'\" >Total Downtime\r\n </th>\r\n<!-- -->\r\n\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('primaryIssue')\">Primary Issues<svg\r\n [ngClass]=\"sortedColumn === 'primaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'primaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('secondaryIssue')\">Secondary Issues<svg\r\n [ngClass]=\"sortedColumn === 'secondaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'secondaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type!=='installation'\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of tableListArray\">\r\n <td>\r\n <input *ngIf=\"this.users.userType ==='tango'\" class=\"form-check-input cursor-pointer me-4 mt-3\" type=\"checkbox\" [(ngModel)]=\"obj.checked\"\r\n (change)=\"updateCheck($event,obj?.ticketId)\">\r\n <span *ngIf=\"type === 'dataMismatch' || type === 'mat' || type === 'infra'\"\r\n class=\"txt-light-primary cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\">\r\n {{obj.ticketId}}\r\n </span>\r\n <span *ngIf=\"type === 'installation'\">\r\n {{obj.ticketId}}\r\n </span>\r\n </td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.issueDate |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type !== 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.createdAt |\r\n date: 'hh:mm a' | uppercase}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.issueClosedDate?(obj?.issueClosedDate |\r\n date: 'dd MMM, yyyy'):\"--\"}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.issueClosedDate?(obj?.issueClosedDate |\r\n date: 'hh:mm a' | uppercase):\"--\"}}\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" (click)=\"clientTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.clientName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">{{obj.clientId}}\r\n </td>\r\n <td>\r\n <div class=\"table-title cursor-pointer\" (click)=\"storeTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.storeName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td>{{obj.storeId}}\r\n </td>\r\n \r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" >\r\n <span >\r\n {{obj.userName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='lowcount'\" >Low Count</td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='highcount'\">High Count</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.type ? obj?.type:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.reportedFootfall ? obj?.reportedFootfall:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.mappedCount ? obj?.mappedCount:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.successPercentage ? obj?.successPercentage:'--'}}</td>\r\n <td *ngIf=\"type==='installation'\">\r\n <span *ngIf=\"obj.installationStatus ==='paired' || obj.installationStatus ==='onboarded'\"\r\n class=\"badge badge-light-primary mx-4\">{{obj.installationStatus | titlecase}}</span>\r\n <span *ngIf=\"obj.installationStatus ==='live'\" class=\"badge badge-light-success mx-4\">Live</span>\r\n <span *ngIf=\"obj.installationStatus ==='installationfailed'\"\r\n class=\"badge badge-light-warning mx-4\">Installationfailed</span>\r\n <span *ngIf=\"obj.installationStatus ==='deployed'\"\r\n class=\"badge badge-light-success mx-4 text-capitalize\">deployed</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type==='mat' || type==='dataMismatch'\">\r\n <span *ngIf=\"obj.status ==='open'\" class=\"badge badge-light-danger\">Open</span>\r\n <span *ngIf=\"obj.status ==='closed'\" class=\"badge badge-light-success\">Closed</span>\r\n <span *ngIf=\"obj.status ==='inprogress'\" class=\"badge badge-light-primary\">In\r\n Progress</span>\r\n </td>\r\n <td *ngIf=\"type==='infra'\">\r\n{{obj.configuredDownTime?obj.configuredDownTime*60:0 || 0 }} {{obj.configuredDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='infra'\"> \r\n{{obj.totalDownTime || 0 }} {{obj.totalDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <div>\r\n <span *ngIf=\"obj.primaryIssue !=='-'\">{{obj.primaryIssue ? obj.primaryIssue :'Issue not identified'}}</span>\r\n <span *ngIf=\"obj.primaryIssue ==='-'\">Issue not identified</span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <span *ngIf=\"obj.secondaryIssue\">{{obj.secondaryIssue}}</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type ==='dataMismatch'\">\r\n <span class=\"mx-2 cursor-pointer\" *ngIf=\"this.users.userType ==='tango'\" (click)=\"commentModal(obj)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <path\r\n d=\"M17.6431 12.5C17.6431 12.942 17.4675 13.366 17.1549 13.6785C16.8423 13.9911 16.4184 14.1667 15.9764 14.1667H5.9764L2.64307 17.5V4.16667C2.64307 3.72464 2.81866 3.30072 3.13122 2.98816C3.44378 2.67559 3.86771 2.5 4.30973 2.5H15.9764C16.4184 2.5 16.8423 2.67559 17.1549 2.98816C17.4675 3.30072 17.6431 3.72464 17.6431 4.16667V12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </td>\r\n <td *ngIf=\"type === 'mat'\">\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"routeToMat(obj.storeId,obj.clientId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span> \r\n \r\n </td>\r\n \r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>", 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}.text-border{border-radius:16px!important;background:var(--Gray-100, #F2F4F7)!important;color:var(--Gray-700, #344054);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important}.text-border-priamry{border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}td{vertical-align:middle;line-height:35px!important}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}.txt-light-primary{color:#009bf3!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:0 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}.img-src{width:25%;height:20%}.rotate{rotate:180deg;transition:1s}.viewbutton{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);box-shadow:0 1px 2px #1018280d;padding:10px 16px;justify-content:center;align-items:center;gap:10px;color:var(--Gray-700, #344054);font-family:Inter;font-size:12px;font-weight:600}.horizontal-scroll{overflow-x:auto;overflow-y:hidden;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i8.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] });
|
|
842
|
+
}
|
|
843
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TicketsComponent, decorators: [{
|
|
844
|
+
type: Component,
|
|
845
|
+
args: [{ selector: "lib-tickets", template: "<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span *ngIf=\"type !=='dataMismatch' && type !== 'mat'\" class=\"card-label mb-2\">{{type | titlecase}}</span>\r\n <span *ngIf=\"type ==='dataMismatch'\" class=\"card-label mb-2\">Data Mismatch</span>\r\n <span *ngIf=\"type ==='mat'\" class=\"card-label mb-2\">Employee Mat</span>\r\n\r\n <!-- <span class=\"text-sub mb-2\">Last updated 1 hour ago</span> -->\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div *ngIf=\"!assignTicket\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control ps-14 me-2\" placeholder=\"Search\" autocomplete=\"off\"\r\n (change)=\"searchData()\" [(ngModel)]=\"searchValue\" />\r\n <lib-filters *ngIf=\"users.userType === 'tango' && userList?.length || users.userType === 'client' && storeList?.length\" [dataObject]=\"dataObject\"\r\n (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <button type=\"button\" *ngIf=\"!noData&&!loading\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"assignTicket\" class=\"d-flex\">\r\n <button type=\"button\" (click)=\"addAssignTicket()\"\r\n class=\"btn mx-2 btn-primary rounded-3 text-nowrap border-val\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99984 4.1665V15.8332M4.1665 9.99984H15.8332\" stroke=\"white\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2 text-white\">Assign Ticket</span>\r\n </button>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body\">\r\n\r\n\r\n <ul *ngIf=\"!loading && listArray?.length && type !== 'mat' && type !== 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"{'active': selectedTab === obj.name}\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === obj.name ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <ul *ngIf=\"!loading && listArray?.length && type === 'dataMismatch'\" class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" *ngFor=\"let obj of listArray.slice().reverse()\" (click)=\"selectedTabs(obj)\">\r\n <a [ngClass]=\"selectedTab === transformName(obj.name) ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n {{obj.name | titlecase}} <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === transformName(obj.name) ? 'text-border-priamry' : 'text-border'\">{{obj.count}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"table-responsive mt-5\">\r\n <table class=\"table bottom-border text-nowrap \">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" >\r\n \r\n <input *ngIf=\"this.users.userType ==='tango'\"\r\n class=\"form-check-input cursor-pointer me-4\" type=\"checkbox\" [(ngModel)]=\"selectAll\"\r\n (click)=\"selectAllStore($event)\"> <span class=\"cursor-pointer\" (click)=\"onSort('ticketId')\"> Ticket ID <svg\r\n [ngClass]=\"sortedColumn === 'ticketId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'ticketId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span> \r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type !=='dataMismatch'\" (click)=\"onSort('issueDate')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('createdAt')\"> Created Time\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('issueClosedDate')\"> Closed Date\r\n <svg [ngClass]=\"sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='infra'\" (click)=\"onSort('issueClosedDate')\"> Closed Time\r\n <svg [ngClass]=\"sortedColumn === 'issueClosedDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueClosedDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('createdAt')\"> Created Date\r\n <svg [ngClass]=\"sortedColumn === 'createdAt' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'createdAt' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" ><span (click)=\"onSort('issueDate')\">Issue Date\r\n <svg [ngClass]=\"sortedColumn === 'issueDate' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientName')\">Brand Name<svg\r\n [ngClass]=\"sortedColumn === 'clientName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"(gs.userAccess | async)?.userType === 'tango'\" class=\"cursor-pointer\" (click)=\"onSort('clientId')\">Brand ID<svg\r\n [ngClass]=\"sortedColumn === 'clientId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'clientId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeName')\">Store Name<svg\r\n [ngClass]=\"sortedColumn === 'storeName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('storeId')\">Store ID<svg\r\n [ngClass]=\"sortedColumn === 'storeId' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'storeId' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && (type ==='infra'||type ==='dataMismatch'||type ==='mat')\" (click)=\"onSort('userName')\">Resolved By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" *ngIf=\"this.users.userType ==='tango' && type ==='installation'\" (click)=\"onSort('userName')\">Installed By<svg [ngClass]=\"sortedColumn === 'userName' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'userName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('issueType')\">Issue Type\r\n <svg [ngClass]=\"sortedColumn === 'issueType' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'issueType' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('type')\">Query Type\r\n <svg [ngClass]=\"sortedColumn === 'type' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'type' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('reportedFootfall')\">Reported Footfall\r\n <svg [ngClass]=\"sortedColumn === 'reportedFootfall' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'reportedFootfall' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('mappedCount')\">Unique Images\r\n <svg [ngClass]=\"sortedColumn === 'mappedCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'mappedCount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th *ngIf=\"type ==='dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('successPercentage')\">Success Percentage\r\n <svg [ngClass]=\"sortedColumn === 'successPercentage' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'successPercentage' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" *ngIf=\"type ==='installation'\" (click)=\"onSort('status')\">Deployed Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type ==='dataMismatch' ||type ==='mat'|| type ==='infra'\" class=\"cursor-pointer\" (click)=\"onSort('status')\">Status<svg\r\n [ngClass]=\"sortedColumn === 'status' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'status' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n<!-- added config and total downtime as per the prioduct team requirement -->\r\n <th *ngIf=\"type==='infra'\">Configured Ticket Time\r\n </th> \r\n\r\n <th *ngIf=\"type==='infra'\" >Total Downtime\r\n </th>\r\n<!-- -->\r\n\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('primaryIssue')\">Primary Issues<svg\r\n [ngClass]=\"sortedColumn === 'primaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'primaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type !== 'mat' && type !== 'dataMismatch'\" class=\"cursor-pointer\" (click)=\"onSort('secondaryIssue')\">Secondary Issues<svg\r\n [ngClass]=\"sortedColumn === 'secondaryIssue' && sortDirection === 1 ? 'rotate' : ''\"\r\n width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortedColumn === 'secondaryIssue' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th *ngIf=\"type!=='installation'\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let obj of tableListArray\">\r\n <td>\r\n <input *ngIf=\"this.users.userType ==='tango'\" class=\"form-check-input cursor-pointer me-4 mt-3\" type=\"checkbox\" [(ngModel)]=\"obj.checked\"\r\n (change)=\"updateCheck($event,obj?.ticketId)\">\r\n <span *ngIf=\"type === 'dataMismatch' || type === 'mat' || type === 'infra'\"\r\n class=\"txt-light-primary cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\">\r\n {{obj.ticketId}}\r\n </span>\r\n <span *ngIf=\"type === 'installation'\">\r\n {{obj.ticketId}}\r\n </span>\r\n </td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type === 'dataMismatch'\">\r\n {{obj?.issueDate |\r\n date: 'dd MMM, yyyy'}}</td>\r\n <td *ngIf=\"type !== 'dataMismatch'\">\r\n {{obj?.createdAt |\r\n date: 'dd MMM, yyyy'}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.createdAt |\r\n date: 'hh:mm a' | uppercase}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.issueClosedDate?(obj?.issueClosedDate |\r\n date: 'dd MMM, yyyy'):\"--\"}}\r\n </td>\r\n <td *ngIf=\"type === 'infra'\">\r\n {{obj?.issueClosedDate?(obj?.issueClosedDate |\r\n date: 'hh:mm a' | uppercase):\"--\"}}\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" (click)=\"clientTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.clientName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"this.users.userType ==='tango'\">{{obj.clientId}}\r\n </td>\r\n <td>\r\n <div class=\"table-title cursor-pointer\" (click)=\"storeTickets(obj.clientId,obj.storeId,obj.clientName)\">\r\n <span class=\"txt-light-primary\">\r\n {{obj.storeName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td>{{obj.storeId}}\r\n </td>\r\n \r\n <td *ngIf=\"this.users.userType ==='tango'\">\r\n <div class=\"table-title cursor-pointer\" >\r\n <span >\r\n {{obj.userName}}\r\n </span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='lowcount'\" >Low Count</td>\r\n <td *ngIf=\"type ==='dataMismatch' && obj.issueType ==='highcount'\">High Count</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.type ? obj?.type:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.reportedFootfall ? obj?.reportedFootfall:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.mappedCount ? obj?.mappedCount:'--'}}</td>\r\n <td class=\"text-capitalize\" *ngIf=\"type ==='dataMismatch'\">{{obj?.successPercentage ? obj?.successPercentage:'--'}}</td>\r\n <td *ngIf=\"type==='installation'\">\r\n <span *ngIf=\"obj.installationStatus ==='paired' || obj.installationStatus ==='onboarded'\"\r\n class=\"badge badge-light-primary mx-4\">{{obj.installationStatus | titlecase}}</span>\r\n <span *ngIf=\"obj.installationStatus ==='live'\" class=\"badge badge-light-success mx-4\">Live</span>\r\n <span *ngIf=\"obj.installationStatus ==='installationfailed'\"\r\n class=\"badge badge-light-warning mx-4\">Installationfailed</span>\r\n <span *ngIf=\"obj.installationStatus ==='deployed'\"\r\n class=\"badge badge-light-success mx-4 text-capitalize\">deployed</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type==='mat' || type==='dataMismatch'\">\r\n <span *ngIf=\"obj.status ==='open'\" class=\"badge badge-light-danger\">Open</span>\r\n <span *ngIf=\"obj.status ==='closed'\" class=\"badge badge-light-success\">Closed</span>\r\n <span *ngIf=\"obj.status ==='inprogress'\" class=\"badge badge-light-primary\">In\r\n Progress</span>\r\n </td>\r\n <td *ngIf=\"type==='infra'\">\r\n{{obj.configuredDownTime?obj.configuredDownTime*60:0 || 0 }} {{obj.configuredDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='infra'\"> \r\n{{obj.totalDownTime || 0 }} {{obj.totalDownTime > 1? 'mins' : 'min'}} \r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <div>\r\n <span *ngIf=\"obj.primaryIssue !=='-'\">{{obj.primaryIssue ? obj.primaryIssue :'Issue not identified'}}</span>\r\n <span *ngIf=\"obj.primaryIssue ==='-'\">Issue not identified</span>\r\n </div>\r\n </td>\r\n <td *ngIf=\"type==='installation' || type==='infra'\">\r\n <span *ngIf=\"obj.secondaryIssue\">{{obj.secondaryIssue}}</span>\r\n </td>\r\n <td *ngIf=\"type==='infra' || type ==='dataMismatch'\">\r\n <span class=\"mx-2 cursor-pointer\" *ngIf=\"this.users.userType ==='tango'\" (click)=\"commentModal(obj)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <path\r\n d=\"M17.6431 12.5C17.6431 12.942 17.4675 13.366 17.1549 13.6785C16.8423 13.9911 16.4184 14.1667 15.9764 14.1667H5.9764L2.64307 17.5V4.16667C2.64307 3.72464 2.81866 3.30072 3.13122 2.98816C3.44378 2.67559 3.86771 2.5 4.30973 2.5H15.9764C16.4184 2.5 16.8423 2.67559 17.1549 2.98816C17.4675 3.30072 17.6431 3.72464 17.6431 4.16667V12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"tickets(type,obj.clientId,obj.storeId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n </td>\r\n <td *ngIf=\"type === 'mat'\">\r\n <span class=\"mx-2 cursor-pointer\" (click)=\"routeToMat(obj.storeId,obj.clientId,obj.clientName)\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_10640_18061)\">\r\n <path\r\n d=\"M0.976562 10C0.976562 10 4.3099 3.33337 10.1432 3.33337C15.9766 3.33337 19.3099 10 19.3099 10C19.3099 10 15.9766 16.6667 10.1432 16.6667C4.3099 16.6667 0.976562 10 0.976562 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.1432 12.5C11.5239 12.5 12.6432 11.3808 12.6432 10C12.6432 8.61933 11.5239 7.50004 10.1432 7.50004C8.76252 7.50004 7.64323 8.61933 7.64323 10C7.64323 11.3808 8.76252 12.5 10.1432 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_10640_18061\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" transform=\"translate(0.143066)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span> \r\n \r\n </td>\r\n \r\n \r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"pageSize\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\" [pageSize]=\"setpageSize()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n </div>\r\n</div>", 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}.text-border{border-radius:16px!important;background:var(--Gray-100, #F2F4F7)!important;color:var(--Gray-700, #344054);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important}.text-border-priamry{border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}.text-sub{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:400!important;line-height:20px}.border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}td{vertical-align:middle;line-height:35px!important}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}.txt-light-primary{color:#009bf3!important}input[type=checkbox]{width:16px!important;height:16px!important;margin:0 5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.2em;padding-left:0;padding-top:9px;padding-right:4px}.img-src{width:25%;height:20%}.rotate{rotate:180deg;transition:1s}.viewbutton{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);box-shadow:0 1px 2px #1018280d;padding:10px 16px;justify-content:center;align-items:center;gap:10px;color:var(--Gray-700, #344054);font-family:Inter;font-size:12px;font-weight:600}.horizontal-scroll{overflow-x:auto;overflow-y:hidden;white-space:nowrap}\n"] }]
|
|
846
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.GlobalStateService }, { type: i3.NgbModal }, { type: i4.TicketService }, { type: i5.ExcelService }] });
|
|
847
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtdGlja2V0cy9zcmMvbGliL2NvbXBvbmVudHMvdGlja2V0cy90aWNrZXRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy90aWNrZXRzL3RpY2tldHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBR2hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBR2hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7O0FBTWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUEyQ2pCO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDQTtJQUNBO0lBaERWLElBQUksR0FBRyxPQUFPLENBQUM7SUFDZixXQUFXLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLFdBQVcsR0FBUSxPQUFPLENBQUM7SUFDM0Isc0JBQXNCO0lBQ3RCLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDbEIsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNoQixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMvQixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ0csUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDMUMsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBQ3pCLGlCQUFpQixHQUFRLEVB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QUMsd0JBQXdCLENBQUMsRUFBRTtZQUMvQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxXQUFXLENBQUMsUUFBYSxFQUFFLE9BQVk7UUFDckMsSUFBSSxJQUFJLEdBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ3hCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDdEI7SUFDSCxDQUFDO3dHQXh4QlUsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsbURDZDdCLDZ5cENBa2NNOzs0RkRwYk8sZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEFkZENzbU1vZGFsQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FkZC1jc20tbW9kYWwvYWRkLWNzbS1tb2RhbC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVGlja2V0U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90aWNrZXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFeGNlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leGNlbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbWVudE1vZGVsQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbW1lbnQtbW9kZWwvY29tbWVudC1tb2RlbC5jb21wb25lbnRcIjtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXRpY2tldHNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3RpY2tldHMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3RpY2tldHMuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpY2tldHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgdHlwZSA9IFwiSW5mcmFcIjtcclxuICBzZWFyY2hWYWx1ZTogYW55ID0gXCJcIjtcclxuICBzZWxlY3RlZFRhYjogYW55ID0gXCJ0b3RhbFwiO1xyXG4gIC8vIHBhZ2luYXRpb25WYXJpYWJsZXNcclxuICBpdGVtc1BlclBhZ2UgPSAxMDtcclxuICBjdXJyZW50UGFnZSA9IDE7XHJcbiAgdG90YWxJdGVtcyA9IDA7XHJcbiAgcGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdO1xyXG4gIHBhZ2VTaXplID0gMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgYXNzaWduVGlja2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmlsdGVyQnlTdG9yZXM6IGFueSA9IFtdO1xyXG4gIGZpbHRlckJ5aW5zdGFsbGVkOiBhbnkgPSBbXTtcclxuICBmaWx0ZXJCeVN0YXR1czogYW55ID0gW107XHJcbiAgZmlsdGVyQnlRdWVyeVR5cGU6IGFueSA9IFtdO1xyXG4gIGlzc3VlVHlwZTogYW55ID0gW107XHJcbiAgc29ydGVkQ29sdW1uOiBzdHJpbmc7XHJcbiAgc29ydERpcmVjdGlvbjogbnVtYmVyO1xyXG4gIGhlYWRlckZpbHRlcnM6IGFueTtcclxuICB1c2VyTGlzdF9yZXE6IGFueTtcclxuICB1c2VyTGlzdDogYW55ID0gW107XHJcbiAgZGF0YU9iamVjdDogYW55ID0gW107XHJcbiAgc3RvcmVMaXN0OiBhbnkgPSBbXTtcclxuICBzdGF0dXNUeXBlOiB7IHRleHQ6IHN0cmluZzsgaWQ6IHN0cmluZyB9W107XHJcbiAgdHlwZU5hbWU6IHN0cmluZztcclxuICB1c2VyczogYW55O1xyXG4gIGxpbWl0OiBudW1iZXIgPSAxMDtcclxuICBvZmZzZXQ6IG51bWJlciA9IDE7XHJcbiAgc29ydEJ5OiBhbnkgPSAtMTtcclxuICBzb3J0Q29sdW1OYW1lOiBhbnkgPSBcIlwiO1xyXG4gIGxpc3RBcnJheTogYW55ID0gW107XHJcbiAgdGFibGVMaXN0QXJyYXk6IGFueSA9IFtdO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdEFsbDogYW55ID0gZmFsc2U7XHJcbiAgYXNzaWduU3RvcmVzOiBhbnkgPSBbXTtcclxuICBpc3N1ZVR5cGVMaXN0OiBhbnkgPSBbXTtcclxuICBxdWVyeVR5cGVMaXN0OiBhbnkgPSBbXTtcclxuICBDbHVzdGVyTGlzdDogYW55W107XHJcbiAgZmlsdGVyQnlDbHVzdGVyOiBhbnlbXTtcclxuICBzaG93Q2x1c3RlckZpbHRlcjogYm9vbGVhbiA9IGZhbHNlXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBUaWNrZXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleGNlbHNlcnZpY2U6IEV4Y2VsU2VydmljZSxcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJEYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpIHx8IFwie31cIik7XHJcbiAgICB0aGlzLnVzZXJzID0gdXNlckRhdGE7XHJcbiAgICB0aGlzLnJvdXRlPy5xdWVyeVBhcmFtc1xyXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICB0aGlzLnR5cGUgPSBwYXJhbXMudHlwZTtcclxuICAgICAgICB0aGlzLmZpbHRlckJ5U3RvcmVzID0gW107IHRoaXMuc3RvcmVMaXN0ID0gW11cclxuICAgICAgICB0aGlzLmZpbHRlckJ5aW5zdGFsbGVkID0gW107IHRoaXMuc3RhdHVzVHlwZSA9IFtdXHJcbiAgICAgICAgdGhpcy5maWx0ZXJCeVN0YXR1cyA9IFtdOyB0aGlzLnVzZXJMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5pc3N1ZVR5cGUgPSBbXTsgdGhpcy5pc3N1ZVR5cGVMaXN0ID0gW11cclxuICAgICAgICB0aGlzLmZpbHRlckJ5UXVlcnlUeXBlID0gW107IHRoaXMucXVlcnlUeXBlTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQnlDbHVzdGVyID0gW107IHRoaXMuQ2x1c3Rlckxpc3QgPSBbXVxyXG4gICAgICAgIHRoaXMuZGF0YU9iamVjdCA9IFtdXHJcbiAgICAgICAgdGhpcy5ncy5tYW5hZ2VSZWZyZXNoVHJpZ2dlci5uZXh0KHRydWUpXHJcbiAgICAgICAgdGhpcy5nZXRJbml0bG9hZCgpO1xyXG4gICAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWU/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICB0aGlzLmhlYWRlckZpbHRlcnMgPSBkYXRhO1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlckxpc3RfcmVxID0ge1xyXG4gICAgICAgICAgICAgICAgbGltaXQ6IDEwMDAwLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICAgICAgICAgICAgdXNlclR5cGU6IHRoaXMudXNlcnMudXNlclR5cGUsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB0aGlzLmdldHN0b3JlRmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRBbGxHcm91cHMoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IFwiaW5zdGFsbGF0aW9uXCIpIHtcclxuICAgICAgICAgIHRoaXMudHlwZU5hbWUgPSBcIkluc3RhbGxlZCBCeVwiO1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNUeXBlID0gW1xyXG4gICAgICAgICAgICB7IHRleHQ6IFwiT25ib2FyZGVkXCIsIGlkOiBcIm9uYm9hcmRlZFwiIH0sXHJcbiAgICAgICAgICAgIHsgdGV4dDogXCJQYWlyZWRcIiwgaWQ6IFwicGFpcmVkXCIgfSxcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIkluc3RhbGxhdGlvbmZhaWxlZFwiLCBpZDogXCJpbnN0YWxsYXRpb25mYWlsZWRcIiB9LFxyXG4gICAgICAgICAgICB7IHRleHQ6IFwiRGVwbG95ZWRcIiwgaWQ6IFwiZGVwbG95ZWRcIiB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50eXBlTmFtZSA9IFwiUmVzb2x2ZWQgQnlcIjtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy51c2Vycy51c2VyVHlwZSA9PT0gXCJ0YW5nb1wiICYmIHRoaXMudHlwZSA9PT0gJ2luZnJhJykge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c1R5cGUgPSBbXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIk9wZW5cIiwgaWQ6IFwib3BlblwiIH0sXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIkluIFByb2dyZXNzXCIsIGlkOiBcImlucHJvZ3Jlc3NcIiB9LFxyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJSZWZyZXNoIFRpY2tldFwiLCBpZDogXCJyZWZyZXNodGlja2V0XCIgfSxcclxuICAgICAgICAgICAgICB7IHRleHQ6IFwiQ2xvc2VkXCIsIGlkOiBcImNsb3NlZFwiIH0sXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c1R5cGUgPSBbXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIk9wZW5cIiwgaWQ6IFwib3BlblwiIH0sXHJcbiAgICAgICAgICAgICAgeyB0ZXh0OiBcIkluIFByb2dyZXNzXCIsIGlkOiBcImlucHJvZ3Jlc3NcIiB9LFxyXG4gICAgICAgICAgICAgIHsgdGV4dDogXCJDbG9zZWRcIiwgaWQ6IFwiY2xvc2VkXCIgfSxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaXNzdWVUeXBlTGlzdCA9IFtcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIkhpZ2ggQ291bnRcIiwgaWQ6IFwiaGlnaGNvdW50XCIgfSxcclxuICAgICAgICAgICAgeyB0ZXh0OiBcIkxvdyBDb3VudFwiLCBpZDogXCJsb3djb3VudFwiIH0sXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgdGhpcy5xdWVyeVR5cGVMaXN0ID0gW1xyXG4gICAgICAgICAgICB7IHRleHQ6IFwiSW50ZXJuYWxcIiwgaWQ6IFwiaW50ZXJuYWxcIiB9LFxyXG4gICAgICAgICAgICB7IHRleHQ6IFwiRXh0ZXJuYWxcIiwgaWQ6IFwiZXh0ZXJuYWxcIiB9LFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBnZXRJbml0bG9hZCgpIHtcclxuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBcIlwiO1xyXG4gICAgdGhpcy5saW1pdCA9IDEwO1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IDEwO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiID0gXCJ0b3RhbFwiO1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB0aGlzLnNvcnRlZENvbHVtbiA9ICcnO1xyXG4gIH1cclxuICBnZXRzdG9yZUZpbHRlcigpIHtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAuZ2V0U290cmVzTGlzdCh7IGlzc3VlVHlwZTogdGhpcy50eXBlLCBjbGllbnRJZDogdGhpcy5oZWFkZXJGaWx0ZXJzLmNsaWVudHMgfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcz8uZGF0YT8uZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudC50ZXh0ID0gZWxlbWVudC5zdG9yZUlkO1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuaWQgPSBlbGVtZW50LnN0b3JlSWQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy51c2Vycy51c2VyVHlwZSA9PT0gXCJ0YW5nb1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXR1c2VybGlzdCgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdpbnN0YWxsYXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RvcmUgSURcIiwgSXNzdWVzOiB0aGlzLnN0b3JlTGlzdCB9LFxyXG4gICAgICAgICAgICAgICAgICB7IERlc2NyaXB0aW9uOiBcIkRlcGxveWVkIFN0YXR1c1wiLCBJc3N1ZXM6IHRoaXMuc3RhdHVzVHlwZSB9LFxyXG5cclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93Q2x1c3RlckZpbHRlcikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QucHVzaCh7IERlc2NyaXB0aW9uOiBcIkNsdXN0ZXJzXCIsIElzc3VlczogdGhpcy5DbHVzdGVyTGlzdCB9LClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2luZnJhJyB8fCB0aGlzLnR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RvcmUgSURcIiwgSXNzdWVzOiB0aGlzLnN0b3JlTGlzdCB9LFxyXG4gICAgICAgICAgICAgICAgICB7IERlc2NyaXB0aW9uOiBcIlN0YXR1c1wiLCBJc3N1ZXM6IHRoaXMuc3RhdHVzVHlwZSB9LFxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NsdXN0ZXJGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhT2JqZWN0LnB1c2goeyBEZXNjcmlwdGlvbjogXCJDbHVzdGVyc1wiLCBJc3N1ZXM6IHRoaXMuQ2x1c3Rlckxpc3QgfSwpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdtYXQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93Q2x1c3RlckZpbHRlcikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QucHVzaCh7IERlc2NyaXB0aW9uOiBcIkNsdXN0ZXJzXCIsIElzc3VlczogdGhpcy5DbHVzdGVyTGlzdCB9LClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXRUYWJsZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRUYWJsZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBnZXR1c2VybGlzdCgpIHtcclxuICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAuZ2V0VXNlckxpc3QodGhpcy51c2VyTGlzdF9yZXEpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudXNlckxpc3QgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMudXNlckxpc3Q/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnRleHQgPSBlbGVtZW50LnVzZXJOYW1lO1xyXG4gICAgICAgICAgICBlbGVtZW50LmlkID0gZWxlbWVudC5lbWFpbDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXNlcnMudXNlclR5cGUgPT09IFwidGFuZ29cIiAmJiAodGhpcy50eXBlID09PSAnaW5zdGFsbGF0aW9uJykpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YU9iamVjdCA9IFtcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdG9yZSBJRFwiLCBJc3N1ZXM6IHRoaXMuc3RvcmVMaXN0IH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiRGVwbG95ZWQgU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IHRoaXMudHlwZU5hbWUsIElzc3VlczogdGhpcy51c2VyTGlzdCB9LFxyXG5cclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q2x1c3RlckZpbHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QucHVzaCh7IERlc2NyaXB0aW9uOiBcIkNsdXN0ZXJzXCIsIElzc3VlczogdGhpcy5DbHVzdGVyTGlzdCB9LClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlcnMudXNlclR5cGUgPT09IFwidGFuZ29cIiAmJiB0aGlzLnR5cGUgPT09ICdpbmZyYScpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YU9iamVjdCA9IFtcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdG9yZSBJRFwiLCBJc3N1ZXM6IHRoaXMuc3RvcmVMaXN0IH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IHRoaXMudHlwZU5hbWUsIElzc3VlczogdGhpcy51c2VyTGlzdCB9LFxyXG5cclxuICAgICAgICAgIF07XHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q2x1c3RlckZpbHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFPYmplY3QucHVzaCh7IERlc2NyaXB0aW9uOiBcIkNsdXN0ZXJzXCIsIElzc3VlczogdGhpcy5DbHVzdGVyTGlzdCB9LClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNlcnMudXNlclR5cGUgPT09IFwidGFuZ29cIiAmJiB0aGlzLnR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RvcmUgSURcIiwgSXNzdWVzOiB0aGlzLnN0b3JlTGlzdCB9LFxyXG4gICAgICAgICAgICB7IERlc2NyaXB0aW9uOiBcIlF1ZXJ5IFR5cGVcIiwgSXNzdWVzOiB0aGlzLnF1ZXJ5VHlwZUxpc3QgfSxcclxuICAgICAgICAgICAgeyBEZXNjcmlwdGlvbjogXCJTdGF0dXNcIiwgSXNzdWVzOiB0aGlzLnN0YXR1c1R5cGUgfSxcclxuXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0NsdXN0ZXJGaWx0ZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhT2JqZWN0LnB1c2goeyBEZXNjcmlwdGlvbjogXCJDbHVzdGVyc1wiLCBJc3N1ZXM6IHRoaXMuQ2x1c3Rlckxpc3QgfSwpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdtYXQnKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgICAgICAgIHsgRGVzY3JpcHRpb246IFwiU3RhdHVzXCIsIElzc3VlczogdGhpcy5zdGF0dXNUeXBlIH0sXHJcblxyXG4gICAgICAgICAgXTtcclxuICAgICAgICAgIGlmICh0aGlzLnNob3dDbHVzdGVyRmlsdGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU9iamVjdC5wdXNoKHsgRGVzY3JpcHRpb246IFwiQ2x1c3RlcnNcIiwgSXNzdWVzOiB0aGlzLkNsdXN0ZXJMaXN0IH0sKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuICBzZWFyY2hEYXRhKCkge1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLmdldFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBvblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLnNvcnRlZENvbHVtbiA9PT0gY29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvbiA9PT0gMSA/IC0xIDogMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc29ydGVkQ29sdW1uID0gY29sdW1uO1xyXG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAxO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRUYWJsZSgpO1xyXG4gIH1cclxuICBleHBvcnRYTFNYKCkge1xyXG4gICAgbGV0IG9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50cyxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZSxcclxuICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgIGZpbHRlcklzc3VlOiB0aGlzLnNlbGVjdGVkVGFiID8gdGhpcy5zZWxlY3RlZFRhYiA6IFwiXCIsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFZhbHVlID8gdGhpcy5zZWFyY2hWYWx1ZSA6IFwiXCIsXHJcbiAgICAgIGV4cG9ydDogdHJ1ZSxcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4pIHtcclxuICAgICAgb2JqLnNvcnRDb2x1bU5hbWUgPSB0aGlzLnNvcnRlZENvbHVtbjtcclxuICAgICAgb2JqLnNvcnRCeSA9IHRoaXMuc29ydERpcmVjdGlvbjtcclxuICAgIH1cclxuICAgICBpZiAodGhpcy5maWx0ZXJCeUNsdXN0ZXI/Lmxlbmd0aCkge1xyXG4gICAgICBvYmouZmlsdGVyQnlDbHVzdGVyID0gdGhpcy5maWx0ZXJCeUNsdXN0ZXIgPyB0aGlzLmZpbHRlckJ5Q2x1c3RlciA6IFtdO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gXCJpbnN0YWxsYXRpb25cIiB8fCB0aGlzLnR5cGUgPT09IFwiaW5mcmFcIikge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVN0b3Jlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLnN0b3JlSWRGaWx0ZXIgPSB0aGlzLmZpbHRlckJ5U3RvcmVzID8gdGhpcy5maWx0ZXJCeVN0b3JlcyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5U3RhdHVzPy5sZW5ndGgpIHtcclxuICAgICAgICBvYmouc3RhdHVzRmlsdGVyID0gdGhpcy5maWx0ZXJCeVN0YXR1cyA/IHRoaXMuZmlsdGVyQnlTdGF0dXMgOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeWluc3RhbGxlZD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLnVzZXJGaWx0ZXIgPSB0aGlzLmZpbHRlckJ5aW5zdGFsbGVkID8gdGhpcy5maWx0ZXJCeWluc3RhbGxlZCA6IFtdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJtYXRcIikge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVN0YXR1cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLnN0YXR1c0ZpbHRlciA9IHRoaXMuZmlsdGVyQnlTdGF0dXMgPyB0aGlzLmZpbHRlckJ5U3RhdHVzIDogW107XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5U3RvcmVzPy5sZW5ndGgpIHtcclxuICAgICAgICBvYmouZmlsdGVyQnlTdG9yZXMgPSB0aGlzLmZpbHRlckJ5U3RvcmVzID8gdGhpcy5maWx0ZXJCeVN0b3JlcyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5U3RhdHVzPy5sZW5ndGgpIHtcclxuICAgICAgICBvYmouZmlsdGVyQnlTdGF0dXMgPSB0aGlzLmZpbHRlckJ5U3RhdHVzID8gdGhpcy5maWx0ZXJCeVN0YXR1cyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5UXVlcnlUeXBlPy5sZW5ndGgpIHtcclxuICAgICAgICBvYmouZmlsdGVyQnlRdWVyeVR5cGUgPSB0aGlzLmZpbHRlckJ5UXVlcnlUeXBlID8gdGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZSA6IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckJ5Q2x1c3Rlcj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLmZpbHRlckJ5Q2x1c3RlciA9IHRoaXMuZmlsdGVyQnlDbHVzdGVyID8gdGhpcy5maWx0ZXJCeUNsdXN0ZXIgOiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gXCJpbnN0YWxsYXRpb25cIikge1xyXG4gICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAuZXhwb3J0SW5zdGFsbGF0aW9uTGlzdChvYmopXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhjZWxzZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdJbnN0YWxsYXRpb24nKVxyXG5cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gXCJpbmZyYVwiKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgIC5leHBvcnRJbmZyYUxpc3Qob2JqKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5leGNlbHNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ0luZnJhJylcclxuXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwibWF0XCIpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmV4cG9ydE1hdExpc3Qob2JqKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5leGNlbHNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ01hdCcpXHJcblxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnZGF0YU1pc21hdGNoJykge1xyXG4gICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAuZXhwb3J0RGF0YU1pc21hdGNoTGlzdChvYmopXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhjZWxzZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdEYXRhIE1pc21hdGNoJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZFRhYnModHlwZTogYW55KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0eXBlLm5hbWUucmVwbGFjZSgvXFxzKy9nLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgICAgdGhpcy5saW1pdCA9IDEwO1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgIHRoaXMuZ2V0VGFibGUoKTtcclxuICAgICAgdGhpcy50cmFuc2Zvcm1OYW1lKHR5cGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGUubmFtZTtcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgICAgdGhpcy5saW1pdCA9IDEwO1xyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTA7XHJcbiAgICAgIHRoaXMuZ2V0VGFibGUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgdHJhbnNmb3JtTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICcnKTtcclxuXHJcbiAgfVxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBOdW1iZXIocGFnZU9mZnNldCk7XHJcbiAgICB0aGlzLm9mZnNldCA9IE51bWJlcihwYWdlT2Zmc2V0KTtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuICAgIHRoaXMuZ2V0VGFibGUoKTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IG51bWJlcikge1xyXG4gICAgdGhpcy5wYWdlU2l6ZSA9IE51bWJlcihwYWdlU2l6ZSk7XHJcbiAgICB0aGlzLmxpbWl0ID0gTnVtYmVyKHBhZ2VTaXplKTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5nZXRUYWJsZSgpO1xyXG4gIH1cclxuICBzZWxlY3RBbGxTdG9yZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGV2ZW50LnRhcmdldC5jaGVja2VkO1xyXG4gICAgdGhpcy50YWJsZUxpc3RBcnJheS5mb3JFYWNoKChvYmo6IGFueSkgPT4gKG9iai5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGwpKTtcclxuICAgIC8vIElmIGFsbCBjaGVja2JveGVzIGFyZSBjaGVja2VkLCBhc3NpZ24gYWxsIHRpY2tldElkcyB0byBhc3NpZ25TdG9yZXMsIG90aGVyd2lzZSBjbGVhciBhc3NpZ25TdG9yZXNcclxuICAgIHRoaXMuYXNzaWduU3RvcmVzID0gdGhpcy5zZWxlY3RBbGxcclxuICAgICAgPyB0aGlzLnRhYmxlTGlzdEFycmF5Lm1hcCgob2JqOiBhbnkpID0+IG9iai50aWNrZXRJZClcclxuICAgICAgOiBbXTtcclxuICAgIHRoaXMuYXNzaWduVGlja2V0ID0gdGhpcy5zZWxlY3RBbGw7IC8vIFVwZGF0ZSBhc3NpZ25UaWNrZXQgYmFzZWQgb24gc2VsZWN0QWxsIHN0YXRlXHJcbiAgfVxyXG4gIGdldEFsbEdyb3VwcygpIHtcclxuICAgIHRoaXMuQ2x1c3Rlckxpc3QgPSBbXTtcclxuICAgIGlmICh0aGlzLmhlYWRlckZpbHRlcnM/LmNsaWVudHNbMF0gJiYgdGhpcy5oZWFkZXJGaWx0ZXJzPy5jbGllbnRzWzBdICE9ICcnKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZS5nZXRjbHVzdGVycyh7IGNsaWVudElkOiB0aGlzLmhlYWRlckZpbHRlcnM/LmNsaWVudHNbMF0sIGdyb3VwOiBbXSwgY2l0eTogW10gfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NsdXN0ZXJGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLkNsdXN0ZXJMaXN0ID0gcmVzPy5kYXRhPy5ncm91cERhdGFcclxuICAgICAgICAgICAgdGhpcy5DbHVzdGVyTGlzdC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBlbGVtZW50LnRleHQgPSBlbGVtZW50Lmdyb3VwTmFtZTtcclxuICAgICAgICAgICAgICBlbGVtZW50LmlkID0gZWxlbWVudC5ncm91cE5hbWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5DbHVzdGVyTGlzdCA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUNoZWNrKGV2ZW50OiBhbnksIHRpY2tldElkOiBhbnkpIHtcclxuICAgIGNvbnN0IHRpY2tldCA9IHRoaXMudGFibGVMaXN0QXJyYXkuZmluZChcclxuICAgICAgKG9iajogYW55KSA9PiBvYmoudGlja2V0SWQgPT09IHRpY2tldElkXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aWNrZXQpIHtcclxuICAgICAgdGlja2V0LmNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuICAgICAgLy8gSWYgdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQsIGFkZCBvciByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXJyYXkgZnJvbSB0aGUgc2VsZWN0ZWQgYXJyYXlzXHJcbiAgICAgIGlmIChldmVudC50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuYXNzaWduU3RvcmVzLnB1c2godGlja2V0SWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hc3NpZ25TdG9yZXMuaW5kZXhPZih0aWNrZXRJZCk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgdGhpcy5hc3NpZ25TdG9yZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gVXBkYXRlIHNlbGVjdEFsbCBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBjaGVja2JveGVzXHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gdGhpcy50YWJsZUxpc3RBcnJheS5ldmVyeSgob2JqOiBhbnkpID0+IG9iai5jaGVja2VkKTtcclxuICAgICAgLy8gVXBkYXRlIGFzc2lnblRpY2tldCBiYXNlZCBvbiB3aGV0aGVyIGFueSBpbmRpdmlkdWFsIHRpY2tldCBjaGVja2JveCBpcyBjaGVja2VkXHJcbiAgICAgIHRoaXMuYXNzaWduVGlja2V0ID0gdGhpcy50YWJsZUxpc3RBcnJheS5zb21lKChvYmo6IGFueSkgPT4gb2JqLmNoZWNrZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQXNzaWduVGlja2V0KCkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFkZENzbU1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICBzaXplOiBcIm1kXCIsXHJcbiAgICAgIHNjcm9sbGFibGU6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpY2tldElkID0gdGhpcy5hc3NpZ25TdG9yZXM7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09IFwic3VibWl0XCIpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgICAgICB0aGlzLmFzc2lnblN0b3JlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hc3NpZ25UaWNrZXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldFRhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudD8ubGVuZ3RoKSB7XHJcbiAgICAgIGV2ZW50LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlN0b3JlIElEXCIpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyQnlTdG9yZXMgPSBlbGVtZW50Lklzc3Vlcy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gJ2luc3RhbGxhdGlvbicpIHtcclxuICAgICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlN0YXR1c1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQnlTdGF0dXMgPSBlbGVtZW50Lklzc3Vlcy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGlmICh0aGlzLnR5cGUgPT09ICdpbnN0YWxsYXRpb24nKSB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gXCJEZXBsb3llZCBTdGF0dXNcIikge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckJ5U3RhdHVzID0gZWxlbWVudC5Jc3N1ZXMubWFwKCh2YWw6IGFueSkgPT4gdmFsPy5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnVzZXJzLnVzZXJUeXBlID09PSBcInRhbmdvXCIgJiYgKHRoaXMudHlwZSA9PT0gJ2luc3RhbGxhdGlvbicgfHwgdGhpcy50eXBlID09PSAnaW5mcmEnKSkge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuRGVzY3JpcHRpb24gPT09IHRoaXMudHlwZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJCeWluc3RhbGxlZCA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5aW5zdGFsbGVkID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlF1ZXJ5IFR5cGVcIikge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZSA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gXCJDbHVzdGVyc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5Q2x1c3RlciA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLmdldFRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZSgpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgbGV0IG9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuaGVhZGVyRmlsdGVycz8uY2xpZW50cyxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZSxcclxuICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgIGZpbHRlcklzc3VlOiB0aGlzLnNlbGVjdGVkVGFiID8gdGhpcy5zZWxlY3RlZFRhYiA6IFwiXCIsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFZhbHVlID8gdGhpcy5zZWFyY2hWYWx1ZSA6IFwiXCIsXHJcbiAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuc29ydGVkQ29sdW1uKSB7XHJcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnKSB7XHJcbiAgICAgICAgb2JqLnNvcnRDb2x1bW5OYW1lID0gdGhpcy5zb3J0ZWRDb2x1bW47XHJcbiAgICAgICAgb2JqLnNvcnRCeSA9IHRoaXMuc29ydERpcmVjdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvYmouc29ydENvbHVtTmFtZSA9IHRoaXMuc29ydGVkQ29sdW1uO1xyXG4gICAgICAgIG9iai5zb3J0QnkgPSB0aGlzLnNvcnREaXJlY3Rpb247XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiaW5zdGFsbGF0aW9uXCIgfHwgdGhpcy50eXBlID09PSBcImluZnJhXCIpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyQnlTdG9yZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9iai5zdG9yZUlkRmlsdGVyID0gdGhpcy5maWx0ZXJCeVN0b3JlcyA/IHRoaXMuZmlsdGVyQnlTdG9yZXMgOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVN0YXR1cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLnN0YXR1c0ZpbHRlciA9IHRoaXMuZmlsdGVyQnlTdGF0dXMgPyB0aGlzLmZpbHRlckJ5U3RhdHVzIDogW107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmlsdGVyQnlpbnN0YWxsZWQ/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9iai51c2VyRmlsdGVyID0gdGhpcy5maWx0ZXJCeWluc3RhbGxlZCA/IHRoaXMuZmlsdGVyQnlpbnN0YWxsZWQgOiBbXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IFwibWF0XCIpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyQnlTdGF0dXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIG9iai5zdGF0dXNGaWx0ZXIgPSB0aGlzLmZpbHRlckJ5U3RhdHVzID8gdGhpcy5maWx0ZXJCeVN0YXR1cyA6IFtdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVN0b3Jlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLmZpbHRlckJ5U3RvcmVzID0gdGhpcy5maWx0ZXJCeVN0b3JlcyA/IHRoaXMuZmlsdGVyQnlTdG9yZXMgOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVN0YXR1cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLmZpbHRlckJ5U3RhdHVzID0gdGhpcy5maWx0ZXJCeVN0YXR1cyA/IHRoaXMuZmlsdGVyQnlTdGF0dXMgOiBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgb2JqLmZpbHRlckJ5UXVlcnlUeXBlID0gdGhpcy5maWx0ZXJCeVF1ZXJ5VHlwZSA/IHRoaXMuZmlsdGVyQnlRdWVyeVR5cGUgOiBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmlsdGVyQnlDbHVzdGVyPy5sZW5ndGgpIHtcclxuICAgICAgb2JqLmZpbHRlckJ5Q2x1c3RlciA9IHRoaXMuZmlsdGVyQnlDbHVzdGVyID8gdGhpcy5maWx0ZXJCeUNsdXN0ZXIgOiBbXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiaW5zdGFsbGF0aW9uXCIpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmdldEluc3RhbGxhdGlvbkxpc3Qob2JqKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmxpc3RBcnJheSA9IHJlcy5kYXRhLnJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5yZXN1bHQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZUxpc3RBcnJheSA9IHJlcy5kYXRhLnJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsSXRlbXMgPCAxMCkgeyB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFt0aGlzLnRvdGFsSXRlbXNdIH0gZWxzZSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2lnblRpY2tldCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBcImluZnJhXCIpIHtcclxuICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmdldEluZnJhTGlzdChvYmopXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubGlzdEFycmF5ID0gcmVzLmRhdGEucmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnJlc3VsdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTGlzdEFycmF5ID0gcmVzLmRhdGEucmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzLmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gW3RoaXMudG90YWxJdGVtc10gfSBlbHNlIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF0gfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNzaWduVGlja2V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSBcIm1hdFwiKSB7XHJcbiAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgIC5nZXRNYXRMaXN0KG9iailcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0QXJyYXkgPSByZXM/LmRhdGE/LnJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgIHRoaXMudGFibGVMaXN0QXJyYXkgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSByZXMuZGF0YT8uY291bnQ7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gW3RoaXMudG90YWxJdGVtc10gfSBlbHNlIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF0gfSB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnZGF0YU1pc21hdGNoJykge1xyXG4gICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAuZ2V0RGF0YU1pc21hdGhMaXN0KG9iailcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0QXJyYXkgPSByZXM/LmRhdGE/LnJlc3BvbnNlO1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5yZXN1bHQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZUxpc3RBcnJheSA9IHJlcz8uZGF0YT8ucmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzLmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7IHRoaXMucGFnaW5hdGlvblNpemVzID0gW3RoaXMudG90YWxJdGVtc10gfSBlbHNlIHsgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF0gfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNzaWduVGlja2V0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm91dGVUb1N0b3JlKHN0b3JlSWQ6IGFueSwgY2xpZW50SWQ6IGFueSkge1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcIlwiKTtcclxuICAgIGRhdGEuc3RvcmUgPSBzdG9yZUlkO1xyXG4gICAgZGF0YS5jbGllbnQgPSBjbGllbnRJZDtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KGRhdGEpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3N0b3Jlcy9pbmZyYS10aWNrZXQnXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyBzdG9yZUlkOiBzdG9yZUlkIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICByb3V0ZVRvTWF0KHN0b3JlSWQ6IGFueSwgY2xpZW50SWQ6IGFueSwgY2xpZW50TmFtZTogYW55KSB7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwiXCIpO1xyXG4gICAgZGF0YS5zdG9yZSA9IHN0b3JlSWQ7XHJcbiAgICBkYXRhLmNsaWVudCA9IGNsaWVudElkO1xyXG4gICAgZGF0YS5jbGllbnROYW1lID0gY2xpZW50TmFtZSA/IGNsaWVudE5hbWUgOiAnU3RvcmVzJztcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KGRhdGEpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3N0b3Jlcy9tYXQnXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyBzdG9yZUlkOiBzdG9yZUlkIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBjb21tZW50TW9kYWwob2JqOiBhbnkpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihDb21tZW50TW9kZWxDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCJcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGlja2V0SWQgPSBvYmoudGlja2V0SWQ7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdGlja2V0cyh0eXBlOiBhbnksIGNsaWVudElkOiBhbnksIHN0b3JlSWQ6IGFueSwgY2xpZW50TmFtZTogYW55KSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ21hdCcpIHtcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcIlwiKTtcclxuICAgICAgZGF0YS5zdG9yZSA9IHN0b3JlSWQ7XHJcbiAgICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICAgIGRhdGEuY2xpZW50TmFtZSA9IGNsaWVudE5hbWUgPyBjbGllbnROYW1lIDogJ1N0b3Jlcyc7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIiwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQoZGF0YSk7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9zdG9yZXMvbWF0J10sIHtcclxuICAgICAgICBxdWVyeVBhcmFtczogeyBzdG9yZUlkOiBzdG9yZUlkIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZGF0YTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwiXCIpO1xyXG4gICAgICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICAgICAgZGF0YS5jbGllbnQgPSBjbGllbnRJZDtcclxuICAgICAgZGF0YS5jbGllbnROYW1lID0gY2xpZW50TmFtZSA/IGNsaWVudE5hbWUgOiAnU3RvcmVzJztcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhKTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3N0b3Jlcy9pbmZyYS10aWNrZXQnXSwge1xyXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHN0b3JlSWQ6IHN0b3JlSWQsIHR5cGU6IHR5cGUgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsaWVudFRpY2tldHMoY2xpZW50SWQ6IGFueSwgc3RvcmVJZDogYW55LCBjbGllbnROYW1lOiBhbnkpIHtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJcIik7XHJcbiAgICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICBkYXRhLmNsaWVudE5hbWUgPSBjbGllbnROYW1lID8gY2xpZW50TmFtZSA6ICdTdG9yZXMnO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2Uvc3RvcmVzJ10pO1xyXG4gIH1cclxuICBzdG9yZVRpY2tldHMoY2xpZW50SWQ6IGFueSwgc3RvcmVJZDogYW55LCBjbGllbnROYW1lOiBhbnkpIHtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJcIik7XHJcbiAgICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICBkYXRhLmNsaWVudE5hbWUgPSBjbGllbnROYW1lID8gY2xpZW50TmFtZSA6ICdTdG9yZXMnO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXMnXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyBzdG9yZUlkOiBzdG9yZUlkIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICB1c2VyVGlja2V0cyhjbGllbnRJZDogYW55LCBzdG9yZUlkOiBhbnkpIHtcclxuICAgIGxldCBkYXRhOiBhbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJcIik7XHJcbiAgICBkYXRhLnN0b3JlID0gc3RvcmVJZDtcclxuICAgIGRhdGEuY2xpZW50ID0gY2xpZW50SWQ7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS91c2VycyddKTtcclxuICB9XHJcblxyXG4gIHNldHBhZ2VTaXplKCkge1xyXG4gICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRvdGFsSXRlbXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYWdlU2l6ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtM1wiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0eXBlICE9PSdkYXRhTWlzbWF0Y2gnICYmIHR5cGUgIT09ICdtYXQnXCIgY2xhc3M9XCJjYXJkLWxhYmVsIG1iLTJcIj57e3R5cGUgfCB0aXRsZWNhc2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJjYXJkLWxhYmVsIG1iLTJcIj5EYXRhIE1pc21hdGNoPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInR5cGUgPT09J21hdCdcIiBjbGFzcz1cImNhcmQtbGFiZWwgbWItMlwiPkVtcGxveWVlIE1hdDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ0ZXh0LXN1YiBtYi0yXCI+TGFzdCB1cGRhdGVkIDEgaG91ciBhZ288L3NwYW4+IC0tPlxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFzc2lnblRpY2tldFwiIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1maWx0ZXJzICpuZ0lmPVwidXNlcnMudXNlclR5cGUgPT09ICd0YW5nbycgJiYgdXNlckxpc3Q/Lmxlbmd0aCB8fCB1c2Vycy51c2VyVHlwZSA9PT0gJ2NsaWVudCcgJiYgc3RvcmVMaXN0Py5sZW5ndGhcIiBbZGF0YU9iamVjdF09XCJkYXRhT2JqZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+PC9saWItZmlsdGVycz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCIhbm9EYXRhJiYhbG9hZGluZ1wiIChjbGljayk9XCJleHBvcnRYTFNYKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0yIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMlwiPkV4cG9ydDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFzc2lnblRpY2tldFwiIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkQXNzaWduVGlja2V0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIG14LTIgYnRuLXByaW1hcnkgIHJvdW5kZWQtMyB0ZXh0LW5vd3JhcCBib3JkZXItdmFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS45OTk4NCA0LjE2NjVWMTUuODMzMk00LjE2NjUgOS45OTk4NEgxNS44MzMyXCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIHRleHQtd2hpdGVcIj5Bc3NpZ24gVGlja2V0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuXHJcblxyXG4gICAgICAgIDx1bCAqbmdJZj1cIiFsb2FkaW5nICYmIGxpc3RBcnJheT8ubGVuZ3RoICYmIHR5cGUgIT09ICdtYXQnICYmIHR5cGUgIT09ICdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXAgaG9yaXpvbnRhbC1zY3JvbGxcIj5cclxuICAgICAgICAgICAgPGxpICBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nRm9yPVwibGV0IG9iaiBvZiBsaXN0QXJyYXkuc2xpY2UoKS5yZXZlcnNlKClcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzKG9iailcIj5cclxuICAgICAgICAgICAgICAgIDxhICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IHNlbGVjdGVkVGFiID09PSBvYmoubmFtZX1cIiBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tvYmoubmFtZSB8IHRpdGxlY2FzZX19IDxzcGFuIGNsYXNzPVwibXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSBvYmoubmFtZSA/ICd0ZXh0LWJvcmRlci1wcmlhbXJ5JyA6ICd0ZXh0LWJvcmRlcidcIj57e29iai5jb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPHVsICpuZ0lmPVwiIWxvYWRpbmcgJiYgbGlzdEFycmF5Py5sZW5ndGggJiYgdHlwZSA9PT0gJ2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcCBob3Jpem9udGFsLXNjcm9sbFwiPlxyXG4gICAgICAgICAgICA8bGkgIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdGb3I9XCJsZXQgb2JqIG9mIGxpc3RBcnJheS5zbGljZSgpLnJldmVyc2UoKVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMob2JqKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSB0cmFuc2Zvcm1OYW1lKG9iai5uYW1lKSA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tvYmoubmFtZSB8IHRpdGxlY2FzZX19IDxzcGFuIGNsYXNzPVwibXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSB0cmFuc2Zvcm1OYW1lKG9iai5uYW1lKSA/ICd0ZXh0LWJvcmRlci1wcmlhbXJ5JyA6ICd0ZXh0LWJvcmRlcidcIj57e29iai5jb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJub0RhdGFcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgbXQtNVwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwIFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJ0aGlzLnVzZXJzLnVzZXJUeXBlID09PSd0YW5nbydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlciBtZS00XCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RBbGxTdG9yZSgkZXZlbnQpXCI+ICA8c3BhbiAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3RpY2tldElkJylcIj4gVGlja2V0IElEIDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAndGlja2V0SWQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd0aWNrZXRJZCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPiAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidHlwZSAhPT0nZGF0YU1pc21hdGNoJ1wiIChjbGljayk9XCJvblNvcnQoJ2lzc3VlRGF0ZScpXCI+IENyZWF0ZWQgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdpc3N1ZURhdGUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2lzc3VlRGF0ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidHlwZSA9PT0naW5mcmEnXCIgKGNsaWNrKT1cIm9uU29ydCgnY3JlYXRlZEF0JylcIj4gQ3JlYXRlZCBUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjcmVhdGVkQXQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdjcmVhdGVkQXQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInR5cGUgPT09J2luZnJhJ1wiIChjbGljayk9XCJvblNvcnQoJ2lzc3VlQ2xvc2VkRGF0ZScpXCI+IENsb3NlZCBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnaXNzdWVDbG9zZWREYXRlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2lzc3VlQ2xvc2VkRGF0ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJ0eXBlID09PSdpbmZyYSdcIiAoY2xpY2spPVwib25Tb3J0KCdpc3N1ZUNsb3NlZERhdGUnKVwiPiBDbG9zZWQgVGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2lzc3VlQ2xvc2VkRGF0ZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdpc3N1ZUNsb3NlZERhdGUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwidHlwZSA9PT0nZGF0YU1pc21hdGNoJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdjcmVhdGVkQXQnKVwiPiBDcmVhdGVkIERhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdjcmVhdGVkQXQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnY3JlYXRlZEF0JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgPjxzcGFuIChjbGljayk9XCJvblNvcnQoJ2lzc3VlRGF0ZScpXCI+SXNzdWUgRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnaXNzdWVEYXRlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnaXNzdWVEYXRlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdjbGllbnROYW1lJylcIj5CcmFuZCBOYW1lPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NsaWVudE5hbWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NsaWVudE5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdjbGllbnRJZCcpXCI+QnJhbmQgSUQ8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnY2xpZW50SWQnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ2NsaWVudElkJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzdG9yZU5hbWUnKVwiPlN0b3JlIE5hbWU8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnc3RvcmVOYW1lJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZU5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzdG9yZUlkJylcIj5TdG9yZSBJRDxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZUlkJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdG9yZUlkJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJyAmJiAodHlwZSA9PT0naW5mcmEnfHx0eXBlID09PSdkYXRhTWlzbWF0Y2gnfHx0eXBlID09PSdtYXQnKVwiIChjbGljayk9XCJvblNvcnQoJ3VzZXJOYW1lJylcIj5SZXNvbHZlZCBCeTxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAndXNlck5hbWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3VzZXJOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJ0aGlzLnVzZXJzLnVzZXJUeXBlID09PSd0YW5nbycgJiYgdHlwZSA9PT0naW5zdGFsbGF0aW9uJ1wiIChjbGljayk9XCJvblNvcnQoJ3VzZXJOYW1lJylcIj5JbnN0YWxsZWQgQnk8c3ZnIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3VzZXJOYW1lJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd1c2VyTmFtZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnaXNzdWVUeXBlJylcIj5Jc3N1ZSBUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ2lzc3VlVHlwZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnaXNzdWVUeXBlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgndHlwZScpXCI+UXVlcnkgVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICd0eXBlJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICd0eXBlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgncmVwb3J0ZWRGb290ZmFsbCcpXCI+UmVwb3J0ZWQgRm9vdGZhbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAncmVwb3J0ZWRGb290ZmFsbCcgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAncmVwb3J0ZWRGb290ZmFsbCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ21hcHBlZENvdW50JylcIj5VbmlxdWUgSW1hZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ21hcHBlZENvdW50JyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdtYXBwZWRDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N1Y2Nlc3NQZXJjZW50YWdlJylcIj5TdWNjZXNzIFBlcmNlbnRhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnc3VjY2Vzc1BlcmNlbnRhZ2UnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N1Y2Nlc3NQZXJjZW50YWdlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICAqbmdJZj1cInR5cGUgPT09J2luc3RhbGxhdGlvbidcIiAoY2xpY2spPVwib25Tb3J0KCdzdGF0dXMnKVwiPkRlcGxveWVkIFN0YXR1czxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0YXR1cycgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0ZWRDb2x1bW4gPT09ICdzdGF0dXMnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCcgfHx0eXBlID09PSdtYXQnfHwgdHlwZSA9PT0naW5mcmEnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3N0YXR1cycpXCI+U3RhdHVzPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydGVkQ29sdW1uID09PSAnc3RhdHVzJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRlZENvbHVtbiA9PT0gJ3N0YXR1cycgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG48IS0tIGFkZGVkIGNvbmZpZyBhbmQgdG90YWwgZG93bnRpbWUgYXMgcGVyIHRoZSBwcmlvZHVjdCB0ZWFtIHJlcXVpcmVtZW50IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwidHlwZT09PSdpbmZyYSdcIj5Db25maWd1cmVkIFRpY2tldCBUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+IFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0eXBlPT09J2luZnJhJ1wiID5Ub3RhbCBEb3dudGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG48IS0tICAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAgKm5nSWY9XCJ0eXBlICE9PSAnbWF0JyAmJiB0eXBlICE9PSAnZGF0YU1pc21hdGNoJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdwcmltYXJ5SXNzdWUnKVwiPlByaW1hcnkgSXNzdWVzPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRlZENvbHVtbiA9PT0gJ3ByaW1hcnlJc3N1ZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAncHJpbWFyeUlzc3VlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAgKm5nSWY9XCJ0eXBlICE9PSAnbWF0JyAmJiB0eXBlICE9PSAnZGF0YU1pc21hdGNoJ1wiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdzZWNvbmRhcnlJc3N1ZScpXCI+U2Vjb25kYXJ5IElzc3VlczxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0ZWRDb2x1bW4gPT09ICdzZWNvbmRhcnlJc3N1ZScgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydGVkQ29sdW1uID09PSAnc2Vjb25kYXJ5SXNzdWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJ0eXBlIT09J2luc3RhbGxhdGlvbidcIj5BY3Rpb25zPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9iaiBvZiB0YWJsZUxpc3RBcnJheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJ0aGlzLnVzZXJzLnVzZXJUeXBlID09PSd0YW5nbydcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXIgbWUtNCBtdC0zXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJvYmouY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVDaGVjaygkZXZlbnQsb2JqPy50aWNrZXRJZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHlwZSA9PT0gJ2RhdGFNaXNtYXRjaCcgfHwgdHlwZSA9PT0gJ21hdCcgfHwgdHlwZSA9PT0gJ2luZnJhJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0eHQtbGlnaHQtcHJpbWFyeSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ0aWNrZXRzKHR5cGUsb2JqLmNsaWVudElkLG9iai5zdG9yZUlkLG9iai5jbGllbnROYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b2JqLnRpY2tldElkfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHlwZSA9PT0gJ2luc3RhbGxhdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iai50aWNrZXRJZH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGUgPT09ICdkYXRhTWlzbWF0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iaj8uY3JlYXRlZEF0IHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6ICdkZCBNTU0sIHl5eXknfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSAnZGF0YU1pc21hdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmo/Lmlzc3VlRGF0ZSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiAnZGQgTU1NLCB5eXl5J319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZSAhPT0gJ2RhdGFNaXNtYXRjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b2JqPy5jcmVhdGVkQXQgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogJ2RkIE1NTSwgeXl5eSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSAnaW5mcmEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iaj8uY3JlYXRlZEF0IHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiAnaGg6bW0gYScgfCB1cHBlcmNhc2V9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSAnaW5mcmEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iaj8uaXNzdWVDbG9zZWREYXRlPyhvYmo/Lmlzc3VlQ2xvc2VkRGF0ZSB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogJ2RkIE1NTSwgeXl5eScpOlwiLS1cIn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGUgPT09ICdpbmZyYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b2JqPy5pc3N1ZUNsb3NlZERhdGU/KG9iaj8uaXNzdWVDbG9zZWREYXRlIHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiAnaGg6bW0gYScgfCB1cHBlcmNhc2UpOlwiLS1cIn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsaWVudFRpY2tldHMob2JqLmNsaWVudElkLG9iai5zdG9yZUlkLG9iai5jbGllbnROYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHh0LWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmouY2xpZW50TmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJ1wiPnt7b2JqLmNsaWVudElkfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInN0b3JlVGlja2V0cyhvYmouY2xpZW50SWQsb2JqLnN0b3JlSWQsb2JqLmNsaWVudE5hbWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0eHQtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iai5zdG9yZU5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tvYmouc3RvcmVJZH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIGN1cnNvci1wb2ludGVyXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvYmoudXNlck5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnICYmIG9iai5pc3N1ZVR5cGUgPT09J2xvd2NvdW50J1wiID5Mb3cgQ291bnQ8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnICYmIG9iai5pc3N1ZVR5cGUgPT09J2hpZ2hjb3VudCdcIj5IaWdoIENvdW50PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplXCIgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCI+e3tvYmo/LnR5cGUgPyBvYmo/LnR5cGU6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplXCIgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCI+e3tvYmo/LnJlcG9ydGVkRm9vdGZhbGwgPyBvYmo/LnJlcG9ydGVkRm9vdGZhbGw6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jYXBpdGFsaXplXCIgKm5nSWY9XCJ0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCI+e3tvYmo/Lm1hcHBlZENvdW50ID8gb2JqPy5tYXBwZWRDb3VudDonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIiAqbmdJZj1cInR5cGUgPT09J2RhdGFNaXNtYXRjaCdcIj57e29iaj8uc3VjY2Vzc1BlcmNlbnRhZ2UgPyBvYmo/LnN1Y2Nlc3NQZXJjZW50YWdlOictLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGU9PT0naW5zdGFsbGF0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouaW5zdGFsbGF0aW9uU3RhdHVzID09PSdwYWlyZWQnIHx8IG9iai5pbnN0YWxsYXRpb25TdGF0dXMgPT09J29uYm9hcmRlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBteC00XCI+e3tvYmouaW5zdGFsbGF0aW9uU3RhdHVzIHwgdGl0bGVjYXNlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iai5pbnN0YWxsYXRpb25TdGF0dXMgPT09J2xpdmUnXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzIG14LTRcIj5MaXZlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouaW5zdGFsbGF0aW9uU3RhdHVzID09PSdpbnN0YWxsYXRpb25mYWlsZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmcgbXgtNFwiPkluc3RhbGxhdGlvbmZhaWxlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqLmluc3RhbGxhdGlvblN0YXR1cyA9PT0nZGVwbG95ZWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3MgbXgtNCB0ZXh0LWNhcGl0YWxpemVcIj5kZXBsb3llZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZT09PSdpbmZyYScgfHwgdHlwZT09PSdtYXQnIHx8IHR5cGU9PT0nZGF0YU1pc21hdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouc3RhdHVzID09PSdvcGVuJ1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyXCI+T3Blbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqLnN0YXR1cyA9PT0nY2xvc2VkJ1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2Vzc1wiPkNsb3NlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqLnN0YXR1cyA9PT0naW5wcm9ncmVzcydcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj5JblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyZXNzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgICpuZ0lmPVwidHlwZT09PSdpbmZyYSdcIj5cclxue3tvYmouY29uZmlndXJlZERvd25UaW1lP29iai5jb25maWd1cmVkRG93blRpbWUqNjA6MCB8fCAwIH19IHt7b2JqLmNvbmZpZ3VyZWREb3duVGltZSA+IDE/ICdtaW5zJyA6ICdtaW4nfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgICpuZ0lmPVwidHlwZT09PSdpbmZyYSdcIj4gXHJcbnt7b2JqLnRvdGFsRG93blRpbWUgfHwgMCB9fSB7e29iai50b3RhbERvd25UaW1lID4gMT8gJ21pbnMnIDogJ21pbid9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwidHlwZT09PSdpbnN0YWxsYXRpb24nIHx8IHR5cGU9PT0naW5mcmEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqLnByaW1hcnlJc3N1ZSAhPT0nLSdcIj57e29iai5wcmltYXJ5SXNzdWUgPyBvYmoucHJpbWFyeUlzc3VlIDonSXNzdWUgbm90IGlkZW50aWZpZWQnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmoucHJpbWFyeUlzc3VlID09PSctJ1wiPklzc3VlIG5vdCBpZGVudGlmaWVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGU9PT0naW5zdGFsbGF0aW9uJyB8fCB0eXBlPT09J2luZnJhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvYmouc2Vjb25kYXJ5SXNzdWVcIj57e29iai5zZWNvbmRhcnlJc3N1ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ0eXBlPT09J2luZnJhJyB8fCB0eXBlID09PSdkYXRhTWlzbWF0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTIgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInRoaXMudXNlcnMudXNlclR5cGUgPT09J3RhbmdvJ1wiIChjbGljayk9XCJjb21tZW50TW9kYWwob2JqKVwiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNy42NDMxIDEyLjVDMTcuNjQzMSAxMi45NDIgMTcuNDY3NSAxMy4zNjYgMTcuMTU0OSAxMy42Nzg1QzE2Ljg0MjMgMTMuOTkxMSAxNi40MTg0IDE0LjE2NjcgMTUuOTc2NCAxNC4xNjY3SDUuOTc2NEwyLjY0MzA3IDE3LjVWNC4xNjY2N0MyLjY0MzA3IDMuNzI0NjQgMi44MTg2NiAzLjMwMDcyIDMuMTMxMjIgMi45ODgxNkMzLjQ0Mzc4IDIuNjc1NTkgMy44Njc3MSAyLjUgNC4zMDk3MyAyLjVIMTUuOTc2NEMxNi40MTg0IDIuNSAxNi44NDIzIDIuNjc1NTkgMTcuMTU0OSAyLjk4ODE2QzE3LjQ2NzUgMy4zMDA3MiAxNy42NDMxIDMuNzI0NjQgMTcuNjQzMSA0LjE2NjY3VjEyLjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0yIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInRpY2tldHModHlwZSxvYmouY2xpZW50SWQsb2JqLnN0b3JlSWQsb2JqLmNsaWVudE5hbWUpXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTA2NDBfMTgwNjEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMC45NzY1NjIgMTBDMC45NzY1NjIgMTAgNC4zMDk5IDMuMzMzMzcgMTAuMTQzMiAzLjMzMzM3QzE1Ljk3NjYgMy4zMzMzNyAxOS4zMDk5IDEwIDE5LjMwOTkgMTBDMTkuMzA5OSAxMCAxNS45NzY2IDE2LjY2NjcgMTAuMTQzMiAxNi42NjY3QzQuMzA5OSAxNi42NjY3IDAuOTc2NTYyIDEwIDAuOTc2NTYyIDEwWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjE0MzIgMTIuNUMxMS41MjM5IDEyLjUgMTIuNjQzMiAxMS4zODA4IDEyLjY0MzIgMTBDMTIuNjQzMiA4LjYxOTMzIDExLjUyMzkgNy41MDAwNCAxMC4xNDMyIDcuNTAwMDRDOC43NjI1MiA3LjUwMDA0IDcuNjQzMjMgOC42MTkzMyA3LjY0MzIzIDEwQzcuNjQzMjMgMTEuMzgwOCA4Ljc2MjUyIDEyLjUgMTAuMTQzMiAxMi41WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTA2NDBfMTgwNjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4xNDMwNjYpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInR5cGUgPT09ICdtYXQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicm91dGVUb01hdChvYmouc3RvcmVJZCxvYmouY2xpZW50SWQsb2JqLmNsaWVudE5hbWUpXCI+PHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzEwNjQwXzE4MDYxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjk3NjU2MiAxMEMwLjk3NjU2MiAxMCA0LjMwOTkgMy4zMzMzNyAxMC4xNDMyIDMuMzMzMzdDMTUuOTc2NiAzLjMzMzM3IDE5LjMwOTkgMTAgMTkuMzA5OSAxMEMxOS4zMDk5IDEwIDE1Ljk3NjYgMTYuNjY2NyAxMC4xNDMyIDE2LjY2NjdDNC4zMDk5IDE2LjY2NjcgMC45NzY1NjIgMTAgMC45NzY1NjIgMTBaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuMTQzMiAxMi41QzExLjUyMzkgMTIuNSAxMi42NDMyIDExLjM4MDggMTIuNjQzMiAxMEMxMi42NDMyIDguNjE5MzMgMTEuNTIzOSA3LjUwMDA0IDEwLjE0MzIgNy41MDAwNEM4Ljc2MjUyIDcuNTAwMDQgNy42NDMyMyA4LjYxOTMzIDcuNjQzMjMgMTBDNy42NDMyMyAxMS4zODA4IDguNzYyNTIgMTIuNSAxMC4xNDMyIDEyLjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzEwNjQwXzE4MDYxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4xNDMwNjYpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiBjbGFzcz1cIm15LTNcIj5cclxuICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwicGFnZVNpemVcIiBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIiBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInNldHBhZ2VTaXplKClcIiAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|