awf-test-lib 17.2.0 → 18.0.1
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 → esm2020}/awf-test-lib.mjs +4 -4
- package/{esm2022 → esm2020}/lib/core/core-routing.module.mjs +18 -18
- package/{esm2022 → esm2020}/lib/core/core.module.mjs +51 -51
- package/esm2020/lib/core/menu/menu.component.mjs +40 -0
- package/esm2020/lib/core/menu-consomer/menu-consomer.component.mjs +27 -0
- package/esm2020/lib/core/menu-ge-portal/menu-ge-portal.component.mjs +109 -0
- package/esm2020/lib/core/menu-warranty/menu-warranty.component.mjs +35 -0
- package/esm2020/lib/core/not-found/not-found.component.mjs +19 -0
- package/{esm2022 → esm2020}/lib/core/top-bar/top-bar.component.mjs +41 -43
- package/esm2020/lib/models/account.model.mjs +3 -0
- package/esm2020/lib/models/alternativeDate.model.mjs +3 -0
- package/{esm2022 → esm2020}/lib/models/applicationName.mjs +6 -6
- package/{esm2022 → esm2020}/lib/models/cancelPMMailRequest.model.mjs +4 -6
- package/{esm2022 → esm2020}/lib/models/customObject.model.mjs +3 -4
- package/esm2020/lib/models/detailedPmJob.model.mjs +3 -0
- package/{esm2022 → esm2020}/lib/models/emailStatus.mjs +5 -5
- package/{esm2022 → esm2020}/lib/models/emailType.mjs +16 -16
- package/{esm2022 → esm2020}/lib/models/eventStatus.mjs +8 -8
- package/{esm2022 → esm2020}/lib/models/field.mjs +8 -8
- package/{esm2022 → esm2020}/lib/models/language.mjs +5 -5
- package/esm2020/lib/models/mailRequest.model.mjs +3 -0
- package/{esm2022 → esm2020}/lib/models/pMGroupedJob.model.mjs +3 -4
- package/esm2020/lib/models/pmJob.model.mjs +3 -0
- package/esm2020/lib/models/pmJobRequest.model.mjs +3 -0
- package/{esm2022 → esm2020}/lib/models/pmJobStatus.mjs +16 -16
- package/{esm2022 → esm2020}/lib/models/reason.model.mjs +3 -5
- package/{esm2022 → esm2020}/lib/models/reasonCode.mjs +8 -8
- package/{esm2022 → esm2020}/lib/models/reasonContact.mjs +7 -7
- package/{esm2022 → esm2020}/lib/models/reportDateMailRequest.model.mjs +4 -6
- package/{esm2022 → esm2020}/lib/models/role.mjs +6 -6
- package/esm2020/lib/models/service.model.mjs +3 -0
- package/{esm2022 → esm2020}/lib/models/serviceName.mjs +11 -11
- package/esm2020/lib/models/socialLoginRequest.model.mjs +3 -0
- package/{esm2022 → esm2020}/lib/models/socialMadia.mjs +4 -4
- package/{esm2022 → esm2020}/lib/models/stingBoolean.mjs +5 -5
- package/esm2020/lib/models/system.mjs +3 -0
- package/{esm2022 → esm2020}/lib/models/theme.model.mjs +1 -1
- package/{esm2022 → esm2020}/lib/models/tokenStatus.mjs +6 -6
- package/esm2020/lib/models/warranty.mjs +3 -0
- package/{esm2022 → esm2020}/lib/pipes/pipes/pipes.module.mjs +21 -21
- package/esm2020/lib/pipes/subrtring-w.pipe.mjs +20 -0
- package/{esm2022 → esm2020}/lib/pipes/substring.pipe.mjs +16 -16
- package/esm2020/lib/shared/choose-another-date/choose-another-date.component.mjs +110 -0
- package/esm2020/lib/shared/confirm-dialog/confirm-dialog.component.mjs +45 -0
- package/esm2020/lib/shared/confirm-dialog-contact/confirm-dialog-contact.component.mjs +42 -0
- package/esm2020/lib/shared/confirmed-date-information/confirmed-date-information.component.mjs +39 -0
- package/esm2020/lib/shared/contact/contact.component.mjs +160 -0
- package/esm2020/lib/shared/contact-support/contact-support.component.mjs +172 -0
- package/esm2020/lib/shared/dashboard/dashboard.component.mjs +35 -0
- package/esm2020/lib/shared/maintenance-list/maintenance-list.component.mjs +352 -0
- package/{esm2022 → esm2020}/lib/shared/shared-routing.module.mjs +18 -18
- package/{esm2022 → esm2020}/lib/shared/shared.module.mjs +144 -144
- package/esm2020/lib/shared/show-links/show-links.component.mjs +80 -0
- package/esm2020/lib/shared/system-list/system-list.component.mjs +33 -0
- package/{esm2022 → esm2020}/public-api.mjs +47 -47
- package/fesm2015/awf-test-lib.mjs +1658 -0
- package/fesm2015/awf-test-lib.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/awf-test-lib.mjs +1502 -1713
- package/fesm2020/awf-test-lib.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/core/core-routing.module.d.ts +7 -7
- package/lib/core/core.module.d.ts +15 -15
- package/lib/core/menu/menu.component.d.ts +17 -17
- package/lib/core/menu-consomer/menu-consomer.component.d.ts +12 -12
- package/lib/core/menu-ge-portal/menu-ge-portal.component.d.ts +20 -20
- package/lib/core/menu-warranty/menu-warranty.component.d.ts +15 -15
- package/lib/core/not-found/not-found.component.d.ts +10 -10
- package/lib/core/top-bar/top-bar.component.d.ts +13 -13
- package/lib/models/account.model.d.ts +14 -14
- package/lib/models/alternativeDate.model.d.ts +6 -6
- package/lib/models/applicationName.d.ts +5 -5
- package/lib/models/cancelPMMailRequest.model.d.ts +5 -5
- package/lib/models/customObject.model.d.ts +3 -3
- package/lib/models/detailedPmJob.model.d.ts +23 -23
- package/lib/models/emailStatus.d.ts +4 -4
- package/lib/models/emailType.d.ts +15 -15
- package/lib/models/eventStatus.d.ts +7 -7
- package/lib/models/field.d.ts +7 -7
- package/lib/models/language.d.ts +4 -4
- package/lib/models/mailRequest.model.d.ts +16 -16
- package/lib/models/pMGroupedJob.model.d.ts +3 -3
- package/lib/models/pmJob.model.d.ts +25 -25
- package/lib/models/pmJobRequest.model.d.ts +5 -5
- package/lib/models/pmJobStatus.d.ts +14 -14
- package/lib/models/reason.model.d.ts +4 -4
- package/lib/models/reasonCode.d.ts +7 -7
- package/lib/models/reasonContact.d.ts +6 -6
- package/lib/models/reportDateMailRequest.model.d.ts +5 -5
- package/lib/models/role.d.ts +5 -5
- package/lib/models/service.model.d.ts +8 -8
- package/lib/models/serviceName.d.ts +10 -10
- package/lib/models/socialLoginRequest.model.d.ts +6 -6
- package/lib/models/socialMadia.d.ts +3 -3
- package/lib/models/stingBoolean.d.ts +4 -4
- package/lib/models/system.d.ts +14 -14
- package/lib/models/theme.model.d.ts +38 -38
- package/lib/models/tokenStatus.d.ts +5 -5
- package/lib/models/warranty.d.ts +17 -17
- package/lib/pipes/pipes/pipes.module.d.ts +9 -9
- package/lib/pipes/subrtring-w.pipe.d.ts +7 -7
- package/lib/pipes/substring.pipe.d.ts +7 -7
- package/lib/shared/choose-another-date/choose-another-date.component.d.ts +33 -33
- package/lib/shared/confirm-dialog/confirm-dialog.component.d.ts +21 -22
- package/lib/shared/confirm-dialog-contact/confirm-dialog-contact.component.d.ts +19 -19
- package/lib/shared/confirmed-date-information/confirmed-date-information.component.d.ts +17 -18
- package/lib/shared/contact/contact.component.d.ts +39 -39
- package/lib/shared/contact-support/contact-support.component.d.ts +50 -50
- package/lib/shared/dashboard/dashboard.component.d.ts +18 -19
- package/lib/shared/maintenance-list/maintenance-list.component.d.ts +81 -82
- package/lib/shared/shared-routing.module.d.ts +7 -7
- package/lib/shared/shared.module.d.ts +40 -40
- package/lib/shared/show-links/show-links.component.d.ts +24 -25
- package/lib/shared/system-list/system-list.component.d.ts +16 -15
- package/package.json +13 -7
- package/public-api.d.ts +42 -42
- package/esm2022/lib/core/menu/menu.component.mjs +0 -44
- package/esm2022/lib/core/menu-consomer/menu-consomer.component.mjs +0 -28
- package/esm2022/lib/core/menu-ge-portal/menu-ge-portal.component.mjs +0 -108
- package/esm2022/lib/core/menu-warranty/menu-warranty.component.mjs +0 -37
- package/esm2022/lib/core/not-found/not-found.component.mjs +0 -21
- package/esm2022/lib/models/account.model.mjs +0 -15
- package/esm2022/lib/models/alternativeDate.model.mjs +0 -7
- package/esm2022/lib/models/detailedPmJob.model.mjs +0 -23
- package/esm2022/lib/models/mailRequest.model.mjs +0 -17
- package/esm2022/lib/models/pmJob.model.mjs +0 -23
- package/esm2022/lib/models/pmJobRequest.model.mjs +0 -5
- package/esm2022/lib/models/service.model.mjs +0 -9
- package/esm2022/lib/models/socialLoginRequest.model.mjs +0 -7
- package/esm2022/lib/models/system.mjs +0 -14
- package/esm2022/lib/models/warranty.mjs +0 -18
- package/esm2022/lib/pipes/subrtring-w.pipe.mjs +0 -20
- package/esm2022/lib/shared/choose-another-date/choose-another-date.component.mjs +0 -117
- package/esm2022/lib/shared/confirm-dialog/confirm-dialog.component.mjs +0 -53
- package/esm2022/lib/shared/confirm-dialog-contact/confirm-dialog-contact.component.mjs +0 -48
- package/esm2022/lib/shared/confirmed-date-information/confirmed-date-information.component.mjs +0 -45
- package/esm2022/lib/shared/contact/contact.component.mjs +0 -170
- package/esm2022/lib/shared/contact-support/contact-support.component.mjs +0 -186
- package/esm2022/lib/shared/dashboard/dashboard.component.mjs +0 -40
- package/esm2022/lib/shared/maintenance-list/maintenance-list.component.mjs +0 -373
- package/esm2022/lib/shared/show-links/show-links.component.mjs +0 -87
- package/esm2022/lib/shared/system-list/system-list.component.mjs +0 -35
- package/fesm2022/awf-test-lib.mjs.map +0 -1
@@ -1,373 +0,0 @@
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
2
|
-
import { ConfirmationService, MessageService } from 'primeng/api';
|
3
|
-
import { EmailType } from '../../models/emailType';
|
4
|
-
import { EventStatus } from '../../models/eventStatus';
|
5
|
-
import { PmJobStatus } from '../../models/pmJobStatus';
|
6
|
-
import { ReasonContact } from '../../models/reasonContact';
|
7
|
-
import { StingBoolean } from '../../models/stingBoolean';
|
8
|
-
import * as i0 from "@angular/core";
|
9
|
-
import * as i1 from "@angular/common";
|
10
|
-
import * as i2 from "primeng/table";
|
11
|
-
import * as i3 from "primeng/api";
|
12
|
-
import * as i4 from "primeng/inputtext";
|
13
|
-
import * as i5 from "primeng/toast";
|
14
|
-
import * as i6 from "primeng/tooltip";
|
15
|
-
import * as i7 from "primeng/overlaypanel";
|
16
|
-
import * as i8 from "primeng/button";
|
17
|
-
import * as i9 from "../choose-another-date/choose-another-date.component";
|
18
|
-
import * as i10 from "../confirm-dialog/confirm-dialog.component";
|
19
|
-
import * as i11 from "../confirmed-date-information/confirmed-date-information.component";
|
20
|
-
import * as i12 from "../contact-support/contact-support.component";
|
21
|
-
import * as i13 from "../show-links/show-links.component";
|
22
|
-
import * as i14 from "../confirm-dialog-contact/confirm-dialog-contact.component";
|
23
|
-
export class MaintenanceListComponent {
|
24
|
-
dt;
|
25
|
-
op;
|
26
|
-
translate;
|
27
|
-
reasons;
|
28
|
-
globaltranslate;
|
29
|
-
maintenanceList = [];
|
30
|
-
maintenanceListNotDisplayed = [];
|
31
|
-
pmJobList = [];
|
32
|
-
isAlreadyScheduled;
|
33
|
-
displayConfirmedDateInfo = false;
|
34
|
-
alternativeDatesList;
|
35
|
-
emitForUpdate = new EventEmitter();
|
36
|
-
emitForAlternativeDates = new EventEmitter();
|
37
|
-
sendContactMeEmail = new EventEmitter();
|
38
|
-
status;
|
39
|
-
sendForm = new EventEmitter();
|
40
|
-
moreDates;
|
41
|
-
detailedPmJobLinkedList = [];
|
42
|
-
updatePmSubscription;
|
43
|
-
alternativeDatesSubscription;
|
44
|
-
showDate;
|
45
|
-
maintenanceSelected;
|
46
|
-
startDateTime;
|
47
|
-
endDateTime;
|
48
|
-
selectedWorkorderId;
|
49
|
-
alternativeDate;
|
50
|
-
alternativeDatesSelected = [];
|
51
|
-
displaycontactSupport = false;
|
52
|
-
displayConfirmDialog = false;
|
53
|
-
displayConfirmDateAlternativeDialog = false;
|
54
|
-
displayConfirmDialogContact = false;
|
55
|
-
displayShowLinks = false;
|
56
|
-
displayAnotherDate = false;
|
57
|
-
isWithLinks = false;
|
58
|
-
isProposedDate = true;
|
59
|
-
pmSelectedStatus;
|
60
|
-
emailTypes;
|
61
|
-
alreadyScheduledMsg;
|
62
|
-
reasonContact = "";
|
63
|
-
contactMeRequest;
|
64
|
-
first = 0;
|
65
|
-
languageStored = localStorage.getItem("lang");
|
66
|
-
language = this.languageStored ? this.languageStored : navigator.language.substr(0, 2).toLowerCase();
|
67
|
-
constructor() { }
|
68
|
-
ngOnDestroy() {
|
69
|
-
if (this.updatePmSubscription) {
|
70
|
-
this.updatePmSubscription.unsubscribe();
|
71
|
-
}
|
72
|
-
if (this.alternativeDatesSubscription) {
|
73
|
-
this.alternativeDatesSubscription.unsubscribe();
|
74
|
-
}
|
75
|
-
}
|
76
|
-
applyFilterGlobal($event, stringVal) {
|
77
|
-
this.dt?.filterGlobal($event.target.value, stringVal);
|
78
|
-
}
|
79
|
-
selectElement(element) {
|
80
|
-
this.alternativeDatesList = null;
|
81
|
-
this.emailTypes = [];
|
82
|
-
if (element) {
|
83
|
-
this.pmSelectedStatus = element.status;
|
84
|
-
}
|
85
|
-
if (element.pmJob.groupList) {
|
86
|
-
this.isWithLinks = element.pmJob.groupList?.length > 0 ? true : false;
|
87
|
-
}
|
88
|
-
this.selectedWorkorderId = element.pmJob.workorderNumber;
|
89
|
-
this.maintenanceSelected = element;
|
90
|
-
this.maintenanceSelected.WorkorderNumberSelected = this.maintenanceSelected.pmJob.workorderId;
|
91
|
-
if (!this.isAlreadyScheduled) {
|
92
|
-
this.getAlternativeDates(element.pmJob);
|
93
|
-
}
|
94
|
-
this.startDateTime = this.maintenanceSelected.pmJob.startDateTime;
|
95
|
-
this.endDateTime = this.maintenanceSelected.pmJob.endDateTime;
|
96
|
-
this.getLinkedPmJob();
|
97
|
-
}
|
98
|
-
getAlternativeDates(pmJob) {
|
99
|
-
this.emitForAlternativeDates.emit(pmJob);
|
100
|
-
}
|
101
|
-
getLinkedPmJob() {
|
102
|
-
this.detailedPmJobLinkedList = [];
|
103
|
-
if (this.maintenanceSelected.pmJob.groupList) {
|
104
|
-
this.maintenanceSelected.pmJob.groupList.forEach((linked) => {
|
105
|
-
this.maintenanceList.forEach((item) => {
|
106
|
-
if (linked.workorderId === item.pmJob.workorderId) {
|
107
|
-
this.detailedPmJobLinkedList.push(item);
|
108
|
-
}
|
109
|
-
});
|
110
|
-
});
|
111
|
-
}
|
112
|
-
// if the linked PM in the other maintenance list not selected
|
113
|
-
if (this.maintenanceSelected.pmJob.groupList && (this.maintenanceSelected.pmJob.groupList.length !== this.detailedPmJobLinkedList.length)) {
|
114
|
-
this.maintenanceSelected.pmJob.groupList.forEach((linked) => {
|
115
|
-
this.maintenanceListNotDisplayed.forEach((item) => {
|
116
|
-
item.toUpdate = false;
|
117
|
-
if (linked.workorderId === item.pmJob.workorderId) {
|
118
|
-
this.detailedPmJobLinkedList.push(item);
|
119
|
-
}
|
120
|
-
});
|
121
|
-
});
|
122
|
-
}
|
123
|
-
}
|
124
|
-
confirmDialog() {
|
125
|
-
this.isProposedDate = true;
|
126
|
-
this.op.hide();
|
127
|
-
this.displayConfirmDialog = true;
|
128
|
-
}
|
129
|
-
closeConfirmDialog(confirm) {
|
130
|
-
console.log(this.isProposedDate);
|
131
|
-
this.displayConfirmDialog = false;
|
132
|
-
this.maintenanceSelected.futureStatus = PmJobStatus.ACCEPTED;
|
133
|
-
if (confirm) {
|
134
|
-
if (!this.isProposedDate) {
|
135
|
-
this.emailTypes.push(EmailType.Accepted_CSC_Alternate);
|
136
|
-
this.emailTypes.push(EmailType.Accepted_Clients_Alternate);
|
137
|
-
this.updateAlternativeDate();
|
138
|
-
}
|
139
|
-
else {
|
140
|
-
this.emailTypes.push(EmailType.Accepted_CSC);
|
141
|
-
this.emailTypes.push(EmailType.Accepted_Clients);
|
142
|
-
this.updateProposedDate();
|
143
|
-
}
|
144
|
-
this.updatePmJob();
|
145
|
-
}
|
146
|
-
}
|
147
|
-
closeConfirmDialogContact(confirm) {
|
148
|
-
this.displayConfirmDialogContact = false;
|
149
|
-
if (confirm) {
|
150
|
-
this.emailTypes = [];
|
151
|
-
if (this.reasonContact === ReasonContact.ContactFormPm) {
|
152
|
-
this.emailTypes.push(EmailType.ContactMe_Clients);
|
153
|
-
this.emailTypes.push(EmailType.ContactMe_CSC);
|
154
|
-
}
|
155
|
-
else if (this.reasonContact === ReasonContact.CancelFormPm) {
|
156
|
-
this.maintenanceSelected.pmJob.customObject = {};
|
157
|
-
this.maintenanceSelected.pmJob.customObject.customerWaiting = StingBoolean.YES;
|
158
|
-
this.maintenanceSelected.futureStatus = PmJobStatus.WAITING;
|
159
|
-
this.emailTypes.push(EmailType.CancelPM_CSC);
|
160
|
-
this.emailTypes.push(EmailType.CancelPM_Clients);
|
161
|
-
}
|
162
|
-
else {
|
163
|
-
this.maintenanceSelected.pmJob.customObject = {};
|
164
|
-
this.maintenanceSelected.pmJob.customObject.customerWaiting = StingBoolean.YES;
|
165
|
-
this.maintenanceSelected.futureStatus = PmJobStatus.WAITING;
|
166
|
-
this.emailTypes.push(EmailType.SendNewDates_CSC);
|
167
|
-
this.emailTypes.push(EmailType.SendNewDates_Clients);
|
168
|
-
}
|
169
|
-
this.updateLinkedPMFormContact();
|
170
|
-
this.closeContactSupport(true);
|
171
|
-
}
|
172
|
-
}
|
173
|
-
updateLinkedPMFormContact() {
|
174
|
-
this.pmJobList = [];
|
175
|
-
this.pmJobList.push(this.maintenanceSelected);
|
176
|
-
if (this.detailedPmJobLinkedList.length > 0) {
|
177
|
-
this.detailedPmJobLinkedList.forEach((item) => {
|
178
|
-
item.futureStatus = item.status;
|
179
|
-
item.selectedDate = item.pmJob.startDateTime;
|
180
|
-
item.WorkorderNumberSelected = this.maintenanceSelected.pmJob.workorderId;
|
181
|
-
if (this.reasonContact === ReasonContact.MoreDatesFormPm || this.reasonContact === ReasonContact.CancelFormPm) {
|
182
|
-
item.reason = this.maintenanceSelected.reason;
|
183
|
-
item.reasonContact = this.maintenanceSelected.reasonContact;
|
184
|
-
item.pmJob.customObject = {};
|
185
|
-
item.pmJob.customObject.customerWaiting = StingBoolean.YES;
|
186
|
-
item.futureStatus = PmJobStatus.WAITING;
|
187
|
-
}
|
188
|
-
this.pmJobList.push(item);
|
189
|
-
});
|
190
|
-
}
|
191
|
-
this.callApiToUpdate();
|
192
|
-
}
|
193
|
-
closeContactSupport(event) {
|
194
|
-
this.displaycontactSupport = false;
|
195
|
-
this.showDate = false;
|
196
|
-
this.reasonContact = "";
|
197
|
-
}
|
198
|
-
proposeAnotherDate() {
|
199
|
-
this.isProposedDate = false;
|
200
|
-
this.op.hide();
|
201
|
-
this.displayAnotherDate = true;
|
202
|
-
}
|
203
|
-
contactSupport(fromOtherDate) {
|
204
|
-
this.op.hide();
|
205
|
-
this.reasonContact = fromOtherDate ? ReasonContact.MoreDatesFormPm : ReasonContact.ContactFormPm;
|
206
|
-
this.displaycontactSupport = true;
|
207
|
-
}
|
208
|
-
showLinks(element) {
|
209
|
-
if (element) {
|
210
|
-
this.selectElement(element);
|
211
|
-
}
|
212
|
-
this.op.hide();
|
213
|
-
this.displayShowLinks = true;
|
214
|
-
}
|
215
|
-
closeShowLinks() {
|
216
|
-
this.displayShowLinks = false;
|
217
|
-
}
|
218
|
-
closeConfirmedDateInfo() {
|
219
|
-
this.displayConfirmedDateInfo = false;
|
220
|
-
}
|
221
|
-
acceptDate(alternativeDates) {
|
222
|
-
this.displayConfirmDialog = true;
|
223
|
-
this.alternativeDatesSelected = alternativeDates;
|
224
|
-
this.findDatesSelected();
|
225
|
-
}
|
226
|
-
findDatesSelected() {
|
227
|
-
this.alternativeDatesSelected.forEach((alternativeDate) => {
|
228
|
-
if (alternativeDate.selected === "Yes") {
|
229
|
-
this.startDateTime = alternativeDate.startDateTime;
|
230
|
-
this.endDateTime = alternativeDate.endDateTime;
|
231
|
-
this.maintenanceSelected.selectedDate = alternativeDate.startDateTime;
|
232
|
-
return;
|
233
|
-
}
|
234
|
-
});
|
235
|
-
}
|
236
|
-
closeAnotherDate(event) {
|
237
|
-
this.displayAnotherDate = false;
|
238
|
-
if (event === false) {
|
239
|
-
this.alreadyScheduledMsg = false;
|
240
|
-
this.op.hide();
|
241
|
-
this.contactSupport(true);
|
242
|
-
}
|
243
|
-
}
|
244
|
-
updatePmJob() {
|
245
|
-
this.pmJobList = [];
|
246
|
-
this.pmJobList.push(this.maintenanceSelected);
|
247
|
-
if (this.detailedPmJobLinkedList.length > 0) {
|
248
|
-
this.detailedPmJobLinkedList.forEach((pMJob) => {
|
249
|
-
this.pmJobList.push(pMJob);
|
250
|
-
});
|
251
|
-
}
|
252
|
-
this.callApiToUpdate();
|
253
|
-
}
|
254
|
-
editPm() {
|
255
|
-
this.alreadyScheduledMsg = true;
|
256
|
-
this.op.hide();
|
257
|
-
this.reasonContact = ReasonContact.CancelFormPm;
|
258
|
-
this.prepareForPopup();
|
259
|
-
this.displaycontactSupport = true;
|
260
|
-
}
|
261
|
-
prepareForPopup() {
|
262
|
-
if (this.maintenanceSelected.pmJob.customerAccepted === "Yes") {
|
263
|
-
this.startDateTime = this.maintenanceSelected.pmJob.startDateTime;
|
264
|
-
this.endDateTime = this.maintenanceSelected.pmJob.endDateTime;
|
265
|
-
}
|
266
|
-
else {
|
267
|
-
this.alternativeDatesSelected = this.maintenanceSelected.pmJob.alternativeDates;
|
268
|
-
this.findDatesSelected();
|
269
|
-
}
|
270
|
-
}
|
271
|
-
updateProposedDate() {
|
272
|
-
this.maintenanceSelected.pmJob.customerAccepted = StingBoolean.YES;
|
273
|
-
this.maintenanceSelected.pmJob.eventStatus = EventStatus.ASSIGNEDANC;
|
274
|
-
this.detailedPmJobLinkedList.forEach((item) => {
|
275
|
-
item.pmJob.customerAccepted = StingBoolean.YES;
|
276
|
-
item.pmJob.eventStatus = EventStatus.ASSIGNEDANC;
|
277
|
-
item.futureStatus = PmJobStatus.ACCEPTED;
|
278
|
-
item.WorkorderNumberSelected = this.maintenanceSelected.pmJob.workorderId;
|
279
|
-
});
|
280
|
-
}
|
281
|
-
updateAlternativeDate() {
|
282
|
-
this.findDatesSelected();
|
283
|
-
this.maintenanceSelected.pmJob.alternativeDates = this.alternativeDatesSelected;
|
284
|
-
this.detailedPmJobLinkedList.forEach((item) => {
|
285
|
-
item.pmJob.alternativeDates = this.alternativeDatesSelected;
|
286
|
-
item.pmJob.eventStatus = EventStatus.ASSIGNEDANC;
|
287
|
-
item.futureStatus = PmJobStatus.ACCEPTED;
|
288
|
-
item.WorkorderNumberSelected = this.maintenanceSelected.pmJob.workorderId;
|
289
|
-
});
|
290
|
-
this.displayAnotherDate = false;
|
291
|
-
}
|
292
|
-
sendContactMeForm(contactMeRequest) {
|
293
|
-
this.moreDates = false;
|
294
|
-
if (contactMeRequest.reasonContact === ReasonContact.MoreDatesFormPm) {
|
295
|
-
this.moreDates = true;
|
296
|
-
}
|
297
|
-
this.displayConfirmDialogContact = true;
|
298
|
-
this.maintenanceSelected = contactMeRequest;
|
299
|
-
}
|
300
|
-
callApiToUpdate() {
|
301
|
-
let PmJobListForUpdate = {};
|
302
|
-
PmJobListForUpdate.pmJobList = this.pmJobList;
|
303
|
-
PmJobListForUpdate.emailTypes = this.emailTypes;
|
304
|
-
this.emitForUpdate.emit(PmJobListForUpdate);
|
305
|
-
}
|
306
|
-
transformStatus(status) {
|
307
|
-
switch (status) {
|
308
|
-
case PmJobStatus.NEW: return this.status.new;
|
309
|
-
case PmJobStatus.ACCEPTED: return this.status.accepted;
|
310
|
-
case PmJobStatus.CLOSED: return this.status.closed;
|
311
|
-
case PmJobStatus.Late: return this.status.late;
|
312
|
-
case PmJobStatus.OPEN: return this.status.open;
|
313
|
-
case PmJobStatus.WAITING: return this.status.waiting;
|
314
|
-
case PmJobStatus.DONE: return this.status.done;
|
315
|
-
case PmJobStatus.VALIDATED: return this.status.validated;
|
316
|
-
default: return "Erreur";
|
317
|
-
}
|
318
|
-
}
|
319
|
-
getStatusTooltip(status) {
|
320
|
-
switch (status) {
|
321
|
-
case PmJobStatus.ACCEPTED: return this.status.acceptedTooltip;
|
322
|
-
case PmJobStatus.NEW: return this.status.newTooltip;
|
323
|
-
case PmJobStatus.CLOSED: return this.status.closedTooltip;
|
324
|
-
case PmJobStatus.Late: return this.status.lateTooltip;
|
325
|
-
case PmJobStatus.OPEN: return this.status.openTooltip;
|
326
|
-
case PmJobStatus.WAITING: return this.status.waitingTooltip;
|
327
|
-
case PmJobStatus.DONE: return this.status.doneTooltip;
|
328
|
-
case PmJobStatus.VALIDATED: return this.status.validatedTooltip;
|
329
|
-
default: return "Erreur";
|
330
|
-
}
|
331
|
-
}
|
332
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: MaintenanceListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
333
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.2", type: MaintenanceListComponent, selector: "awf-maintenance-list", inputs: { translate: "translate", reasons: "reasons", globaltranslate: "globaltranslate", maintenanceList: "maintenanceList", maintenanceListNotDisplayed: "maintenanceListNotDisplayed", pmJobList: "pmJobList", isAlreadyScheduled: "isAlreadyScheduled", displayConfirmedDateInfo: "displayConfirmedDateInfo", alternativeDatesList: "alternativeDatesList", status: "status" }, outputs: { emitForUpdate: "emitForUpdate", emitForAlternativeDates: "emitForAlternativeDates", sendContactMeEmail: "sendContactMeEmail", sendForm: "sendForm" }, providers: [MessageService, ConfirmationService], viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true }, { propertyName: "op", first: true, predicate: ["op"], descendants: true }], ngImport: i0, template: "<p-table #dt [value]=\"maintenanceList\" responsiveLayout=\"stack\" [rows]=\"10\" [showCurrentPageReport]=\"true\" [rowsPerPageOptions]=\"[5,10,25,50]\" \r\n[globalFilterFields]=\"['systemId','pmJob.caseId','systemName','pmJob.workorderNumber','pmJob.startDateTime','pmJob.endDateTime','pmJob.case_type','pmJob.case_category','status']\"\r\n[paginator]=\"true\" [rowHover]=\"true\" dataKey=\"id\" [currentPageReportTemplate]=\"globaltranslate.countPages\" [first]=\"first\">\r\n <ng-template pTemplate=\"caption\">\r\n <div>\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" (input)=\"applyFilterGlobal($event, 'contains')\"\r\n [placeholder]=\"globaltranslate.search\" />\r\n </span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <!-- <th pSortableColumn=\"caseId\">Case Id <p-sortIcon field=\"caseId\"></p-sortIcon> -->\r\n <th pSortableColumn=\"systemName\">{{translate.maintenanceList.system}}\r\n <p-sortIcon field=\"systemName\"></p-sortIcon>\r\n <th pSortableColumn=\"room\">{{translate.maintenanceList.room}}\r\n <p-sortIcon field=\"room\"></p-sortIcon>\r\n <th pSortableColumn=\"systemId\">System Id\r\n <p-sortIcon field=\"systemId\"></p-sortIcon>\r\n <th pSortableColumn=\"pmJob.workorderNumber\">{{translate.maintenanceList.workOrder}}\r\n <p-sortIcon field=\"pmJob.workorderNumber\"></p-sortIcon>\r\n <th pSortableColumn=\"pmJob.startDateTime\">{{translate.maintenanceList.startDate}}\r\n <p-sortIcon field=\"pmJob.startDateTime\"></p-sortIcon>\r\n <th pSortableColumn=\"pmJob.caseType\">{{translate.maintenanceList.type}}\r\n <p-sortIcon field=\"pmJob.caseType\"></p-sortIcon>\r\n <th pSortableColumn=\"status\">{{translate.maintenanceList.status}}\r\n <p-sortIcon field=\"status\"></p-sortIcon>\r\n <th>{{translate.maintenanceList.NbrLinks}}\r\n <th> Action</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-product let-columns=\"columns\">\r\n <tr> \r\n <td>{{product.systemName }} </td>\r\n <td>{{product.room }}</td>\r\n <td>{{product.systemId }}</td>\r\n <td>{{product.pmJob.workorderNumber }}</td>\r\n <td>{{product.pmJob.startDateTime | date: \"EEE dd MMM yyyy\":\"\":language}}</td>\r\n <td *ngIf=\"product.pmJob.caseType === 'Planned Maintenance'\">{{translate.maintenanceList.typePlanned}}</td>\r\n <td *ngIf=\"product.pmJob.caseType === 'QARA'\">{{translate.maintenanceList.typeQARA}}</td>\r\n <td>\r\n <span [class]=\"'product-status status-' + product.status\"\r\n [pTooltip]=\"getStatusTooltip(product.status)\">\r\n {{transformStatus(product.status)}}\r\n </span>\r\n </td>\r\n <td *ngIf=\"product.pmJob.groupList !== null \" (click)=\"showLinks(product)\"> <span class=\"circle\">{{product.pmJob.groupList.length }}</span> <i class=\"pi pi-link\" style=\"font-size: 1rem\"></i> </td>\r\n <td *ngIf=\"product.pmJob.groupList === null\" (click)=\"showLinks(product)\"> <span class=\"circlelinked\">{{product.pmJob.groupList.length }}</span> <i class=\"pi pi-link\" style=\"font-size: 1rem\"></i> </td>\r\n <td>\r\n <button pButton pRipple type=\"button\" label=\"\" icon=\"pi pi-calendar\" class=\"p-button-rounded\" #actualTarget (click)=\"selectElement(product)\" (click)=\"op.toggle($event)\" [disabled]=\"((product.status ==='late' || product.status ==='accepted') && !isAlreadyScheduled) || product.status ==='waiting'\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"summary\">\r\n <div class=\"p-d-flex p-ai-center p-jc-between\">\r\n {{globaltranslate.count}} {{maintenanceList ? maintenanceList.length : 0 }} {{globaltranslate.elements}}.\r\n </div>\r\n </ng-template>\r\n</p-table>\r\n\r\n<p-toast position=\"top-center\"></p-toast>\r\n<p-overlayPanel #op [dismissable]=\"true\" [showCloseIcon]=\"false\" [showTransitionOptions]=\"'0ms'\" [hideTransitionOptions]=\"'0ms'\">\r\n <ng-template pTemplate>\r\n\r\n <button style=\"width: 100%;\" *ngIf=\"!isAlreadyScheduled\" icon=\"pi pi-thumbs-up\" (click)=\"confirmDialog()\" [label]=\"translate.maintenanceList.confirmDate\" class=\"p-button-text p-button-raised\" pButton pRipple type=\"button\">\r\n </button>\r\n <hr *ngIf=\"!isAlreadyScheduled\">\r\n <button style=\"width: 100%;\" *ngIf=\"!isAlreadyScheduled && (alternativeDatesList !== null) \" icon=\"pi pi-calendar-plus\" (click)=\"proposeAnotherDate()\" [label]=\"translate.maintenanceList.chooseAnotherDate\" class=\"p-button-text p-button-raised\" pButton pRipple type=\"button\"></button>\r\n <hr *ngIf=\"!isAlreadyScheduled && (alternativeDatesList!==null) \">\r\n <button style=\"width: 100%;\" icon=\"pi pi-phone\" (click)=\"contactSupport(false)\" [label]=\"translate.maintenanceList.contactSuppor\" class=\"p-button-text p-button-raised\" pButton pRipple type=\"button\"></button>\r\n <hr *ngIf=\"isWithLinks\">\r\n <button style=\"width: 100%;\" icon=\"pi pi-link\" *ngIf=\"isWithLinks\" (click)=\"showLinks()\" [label]=\"translate.maintenanceList.showLinks\" class=\"p-button-text p-button-raised\" pButton pRipple type=\"button\"></button>\r\n <hr *ngIf=\"isAlreadyScheduled && pmSelectedStatus ==='validated'\">\r\n <button style=\"width: 100%;\" *ngIf=\"isAlreadyScheduled && pmSelectedStatus ==='validated'\" icon=\"pi pi-pencil\" (click)=\"editPm()\" [label]=\"translate.maintenanceList.cancel\" class=\"p-button-text p-button-raised\" pButton pRipple type=\"button\">\r\n </button>\r\n </ng-template>\r\n</p-overlayPanel>\r\n\r\n<div *ngIf=\"displaycontactSupport \" >\r\n <app-contact-support [reasonContact]=\"reasonContact\" (closeContactSupport)=\"closeContactSupport($event)\" (sendDetailedPm)=\"sendContactMeForm($event)\" [detailedPmJob] =\"maintenanceSelected\" [globaltranslate]=\"globaltranslate\" [reasons]=\"reasons\" [translate]=\"translate.contactSupport\" [displaycontactSupport]=\"displaycontactSupport\" [showDate]=\"showDate\" ></app-contact-support>\r\n</div>\r\n<div *ngIf=\"displayConfirmDialog\">\r\n <app-confirm-dialog [detailedPmJobLinkedList]=\"detailedPmJobLinkedList\" [isProposedDate]=\"isProposedDate\" [globaltranslate]=\"globaltranslate\" [translate]=\"translate.confirmDialog\"\r\n [startDateTime]=\"startDateTime\" [endDateTime]=\"endDateTime\" [displayConfirmDialog]=\"displayConfirmDialog\" (closeConfirmDialog)=\"closeConfirmDialog($event)\">\r\n </app-confirm-dialog>\r\n</div>\r\n<div *ngIf=\"displayConfirmDialogContact\">\r\n <app-confirm-dialog-contact [detailedPmJobLinkedList]=\"detailedPmJobLinkedList\" [globaltranslate]=\"globaltranslate\" [translate]=\"translate.confirmDialogContact\"\r\n [startDateTime]=\"startDateTime\" [endDateTime]=\"endDateTime\" [displayConfirmDialogContact]=\"displayConfirmDialogContact\" (closeConfirmDialogContact)=\"closeConfirmDialogContact($event)\">\r\n </app-confirm-dialog-contact >\r\n</div>\r\n<div *ngIf=\"displayConfirmedDateInfo\">\r\n <app-confirmed-date-information [moreDates]=\"moreDates\" [globaltranslate]=\"globaltranslate\" [translate]=\"translate.confirmDateInformation\" [startDateTime]=\"startDateTime\" [endDateTime]=\"endDateTime\" [displayConfirmedDateInfos]=\"displayConfirmedDateInfo\" (closeConfirmedDateInfo)=\"closeConfirmedDateInfo()\"></app-confirmed-date-information>\r\n</div>\r\n<div *ngIf=\"displayAnotherDate && alternativeDatesList\">\r\n <app-choose-another-date [globaltranslate]=\"globaltranslate\" [translate]=\"translate.chooseAnotherDate\" [alternativeDatesList]=\"alternativeDatesList\" [displayAnotherDate]=\"displayAnotherDate\" (closeAnotherDate)=\"closeAnotherDate($event)\" (acceptDate)=\"acceptDate($event)\">\r\n </app-choose-another-date>\r\n</div>\r\n<div *ngIf=\"displayShowLinks && selectedWorkorderId\">\r\n <app-show-links [status]=\"status\" [selectedWorkorderId]=\"selectedWorkorderId\" [translate]=\"translate\" [globaltranslate]=\"globaltranslate\" [displayShowLinks]=\"displayShowLinks\" (closeShowLinks)=\"closeShowLinks()\" [detailedPmJobLinkedList]=\"detailedPmJobLinkedList\"></app-show-links>\r\n</div>\r\n\r\n\r\n", styles: ["span.circle{background:#f86359;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%;color:#f8f8f8;display:inline-block;font-weight:700;line-height:20px;margin-right:5px;text-align:center;width:20px}span.circlelinked{background:#80a161;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%;color:#fff;display:inline-block;font-weight:700;line-height:20px;margin-right:5px;text-align:center;width:20px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i4.InputText, selector: "[pInputText]" }, { kind: "component", type: i5.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.ChooseAnotherDateComponent, selector: "app-choose-another-date", inputs: ["displayAnotherDate", "globaltranslate", "translate", "alternativeDatesList"], outputs: ["closeAnotherDate", "acceptDate"] }, { kind: "component", type: i10.ConfirmDialogComponent, selector: "app-confirm-dialog", inputs: ["displayConfirmDialog", "startDateTime", "endDateTime", "globaltranslate", "translate", "isProposedDate", "detailedPmJobLinkedList"], outputs: ["closeConfirmDialog"] }, { kind: "component", type: i11.ConfirmedDateInformationComponent, selector: "app-confirmed-date-information", inputs: ["displayConfirmedDateInfos", "startDateTime", "endDateTime", "globaltranslate", "translate", "moreDates"], outputs: ["closeConfirmedDateInfo"] }, { kind: "component", type: i12.ContactSupportComponent, selector: "app-contact-support", inputs: ["displaycontactSupport", "globaltranslate", "translate", "showDate", "detailedPmJob", "reasonContact", "reasons"], outputs: ["sendDetailedPm", "sendForm", "closeContactSupport"] }, { kind: "component", type: i13.ShowLinksComponent, selector: "app-show-links", inputs: ["displayShowLinks", "detailedPmJobLinkedList", "selectedWorkorderId", "globaltranslate", "translate", "status"], outputs: ["closeShowLinks"] }, { kind: "component", type: i14.ConfirmDialogContactComponent, selector: "app-confirm-dialog-contact", inputs: ["displayConfirmDialogContact", "startDateTime", "endDateTime", "globaltranslate", "translate", "detailedPmJobLinkedList"], outputs: ["closeConfirmDialogContact"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
|
334
|
-
}
|
335
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: MaintenanceListComponent, decorators: [{
|
336
|
-
type: Component,
|
337
|
-
args: [{ selector: 'awf-maintenance-list', providers: [MessageService, ConfirmationService], template: "<p-table #dt [value]=\"maintenanceList\" responsiveLayout=\"stack\" [rows]=\"10\" [showCurrentPageReport]=\"true\" [rowsPerPageOptions]=\"[5,10,25,50]\" \r\n[globalFilterFields]=\"['systemId','pmJob.caseId','systemName','pmJob.workorderNumber','pmJob.startDateTime','pmJob.endDateTime','pmJob.case_type','pmJob.case_category','status']\"\r\n[paginator]=\"true\" [rowHover]=\"true\" dataKey=\"id\" [currentPageReportTemplate]=\"globaltranslate.countPages\" [first]=\"first\">\r\n <ng-template pTemplate=\"caption\">\r\n <div>\r\n <span class=\"p-input-icon-left\">\r\n <i class=\"pi pi-search\"></i>\r\n <input pInputText type=\"text\" (input)=\"applyFilterGlobal($event, 'contains')\"\r\n [placeholder]=\"globaltranslate.search\" />\r\n </span>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <!-- <th pSortableColumn=\"caseId\">Case Id <p-sortIcon field=\"caseId\"></p-sortIcon> -->\r\n <th pSortableColumn=\"systemName\">{{translate.maintenanceList.system}}\r\n <p-sortIcon field=\"systemName\"></p-sortIcon>\r\n <th pSortableColumn=\"room\">{{translate.maintenanceList.room}}\r\n <p-sortIcon field=\"room\"></p-sortIcon>\r\n <th pSortableColumn=\"systemId\">System Id\r\n <p-sortIcon field=\"systemId\"></p-sortIcon>\r\n <th pSortableColumn=\"pmJob.workorderNumber\">{{translate.maintenanceList.workOrder}}\r\n <p-sortIcon field=\"pmJob.workorderNumber\"></p-sortIcon>\r\n <th pSortableColumn=\"pmJob.startDateTime\">{{translate.maintenanceList.startDate}}\r\n <p-sortIcon field=\"pmJob.startDateTime\"></p-sortIcon>\r\n <th pSortableColumn=\"pmJob.caseType\">{{translate.maintenanceList.type}}\r\n <p-sortIcon field=\"pmJob.caseType\"></p-sortIcon>\r\n <th pSortableColumn=\"status\">{{translate.maintenanceList.status}}\r\n <p-sortIcon field=\"status\"></p-sortIcon>\r\n <th>{{translate.maintenanceList.NbrLinks}}\r\n <th> Action</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-product let-columns=\"columns\">\r\n <tr> \r\n <td>{{product.systemName }} </td>\r\n <td>{{product.room }}</td>\r\n <td>{{product.systemId }}</td>\r\n <td>{{product.pmJob.workorderNumber }}</td>\r\n <td>{{product.pmJob.startDateTime | date: \"EEE dd MMM yyyy\":\"\":language}}</td>\r\n <td *ngIf=\"product.pmJob.caseType === 'Planned Maintenance'\">{{translate.maintenanceList.typePlanned}}</td>\r\n <td *ngIf=\"product.pmJob.caseType === 'QARA'\">{{translate.maintenanceList.typeQARA}}</td>\r\n <td>\r\n <span [class]=\"'product-status status-' + product.status\"\r\n [pTooltip]=\"getStatusTooltip(product.status)\">\r\n {{transformStatus(product.status)}}\r\n </span>\r\n </td>\r\n <td *ngIf=\"product.pmJob.groupList !== null \" (click)=\"showLinks(product)\"> <span class=\"circle\">{{product.pmJob.groupList.length }}</span> <i class=\"pi pi-link\" style=\"font-size: 1rem\"></i> </td>\r\n <td *ngIf=\"product.pmJob.groupList === null\" (click)=\"showLinks(product)\"> <span class=\"circlelinked\">{{product.pmJob.groupList.length }}</span> <i class=\"pi pi-link\" style=\"font-size: 1rem\"></i> </td>\r\n <td>\r\n <button pButton pRipple type=\"button\" label=\"\" icon=\"pi pi-calendar\" class=\"p-button-rounded\" #actualTarget (click)=\"selectElement(product)\" (click)=\"op.toggle($event)\" [disabled]=\"((product.status ==='late' || product.status ==='accepted') && !isAlreadyScheduled) || product.status ==='waiting'\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"summary\">\r\n <div class=\"p-d-flex p-ai-center p-jc-between\">\r\n {{globaltranslate.count}} {{maintenanceList ? maintenanceList.length : 0 }} {{globaltranslate.elements}}.\r\n </div>\r\n </ng-template>\r\n</p-table>\r\n\r\n<p-toast position=\"top-center\"></p-toast>\r\n<p-overlayPanel #op [dismissable]=\"true\" [showCloseIcon]=\"false\" [showTransitionOptions]=\"'0ms'\" [hideTransitionOptions]=\"'0ms'\">\r\n <ng-template pTemplate>\r\n\r\n <button style=\"width: 100%;\" *ngIf=\"!isAlreadyScheduled\" icon=\"pi pi-thumbs-up\" (click)=\"confirmDialog()\" [label]=\"translate.maintenanceList.confirmDate\" class=\"p-button-text p-button-raised\" pButton pRipple type=\"button\">\r\n </button>\r\n <hr *ngIf=\"!isAlreadyScheduled\">\r\n <button style=\"width: 100%;\" *ngIf=\"!isAlreadyScheduled && (alternativeDatesList !== null) \" icon=\"pi pi-calendar-plus\" (click)=\"proposeAnotherDate()\" [label]=\"translate.maintenanceList.chooseAnotherDate\" class=\"p-button-text p-button-raised\" pButton pRipple type=\"button\"></button>\r\n <hr *ngIf=\"!isAlreadyScheduled && (alternativeDatesList!==null) \">\r\n <button style=\"width: 100%;\" icon=\"pi pi-phone\" (click)=\"contactSupport(false)\" [label]=\"translate.maintenanceList.contactSuppor\" class=\"p-button-text p-button-raised\" pButton pRipple type=\"button\"></button>\r\n <hr *ngIf=\"isWithLinks\">\r\n <button style=\"width: 100%;\" icon=\"pi pi-link\" *ngIf=\"isWithLinks\" (click)=\"showLinks()\" [label]=\"translate.maintenanceList.showLinks\" class=\"p-button-text p-button-raised\" pButton pRipple type=\"button\"></button>\r\n <hr *ngIf=\"isAlreadyScheduled && pmSelectedStatus ==='validated'\">\r\n <button style=\"width: 100%;\" *ngIf=\"isAlreadyScheduled && pmSelectedStatus ==='validated'\" icon=\"pi pi-pencil\" (click)=\"editPm()\" [label]=\"translate.maintenanceList.cancel\" class=\"p-button-text p-button-raised\" pButton pRipple type=\"button\">\r\n </button>\r\n </ng-template>\r\n</p-overlayPanel>\r\n\r\n<div *ngIf=\"displaycontactSupport \" >\r\n <app-contact-support [reasonContact]=\"reasonContact\" (closeContactSupport)=\"closeContactSupport($event)\" (sendDetailedPm)=\"sendContactMeForm($event)\" [detailedPmJob] =\"maintenanceSelected\" [globaltranslate]=\"globaltranslate\" [reasons]=\"reasons\" [translate]=\"translate.contactSupport\" [displaycontactSupport]=\"displaycontactSupport\" [showDate]=\"showDate\" ></app-contact-support>\r\n</div>\r\n<div *ngIf=\"displayConfirmDialog\">\r\n <app-confirm-dialog [detailedPmJobLinkedList]=\"detailedPmJobLinkedList\" [isProposedDate]=\"isProposedDate\" [globaltranslate]=\"globaltranslate\" [translate]=\"translate.confirmDialog\"\r\n [startDateTime]=\"startDateTime\" [endDateTime]=\"endDateTime\" [displayConfirmDialog]=\"displayConfirmDialog\" (closeConfirmDialog)=\"closeConfirmDialog($event)\">\r\n </app-confirm-dialog>\r\n</div>\r\n<div *ngIf=\"displayConfirmDialogContact\">\r\n <app-confirm-dialog-contact [detailedPmJobLinkedList]=\"detailedPmJobLinkedList\" [globaltranslate]=\"globaltranslate\" [translate]=\"translate.confirmDialogContact\"\r\n [startDateTime]=\"startDateTime\" [endDateTime]=\"endDateTime\" [displayConfirmDialogContact]=\"displayConfirmDialogContact\" (closeConfirmDialogContact)=\"closeConfirmDialogContact($event)\">\r\n </app-confirm-dialog-contact >\r\n</div>\r\n<div *ngIf=\"displayConfirmedDateInfo\">\r\n <app-confirmed-date-information [moreDates]=\"moreDates\" [globaltranslate]=\"globaltranslate\" [translate]=\"translate.confirmDateInformation\" [startDateTime]=\"startDateTime\" [endDateTime]=\"endDateTime\" [displayConfirmedDateInfos]=\"displayConfirmedDateInfo\" (closeConfirmedDateInfo)=\"closeConfirmedDateInfo()\"></app-confirmed-date-information>\r\n</div>\r\n<div *ngIf=\"displayAnotherDate && alternativeDatesList\">\r\n <app-choose-another-date [globaltranslate]=\"globaltranslate\" [translate]=\"translate.chooseAnotherDate\" [alternativeDatesList]=\"alternativeDatesList\" [displayAnotherDate]=\"displayAnotherDate\" (closeAnotherDate)=\"closeAnotherDate($event)\" (acceptDate)=\"acceptDate($event)\">\r\n </app-choose-another-date>\r\n</div>\r\n<div *ngIf=\"displayShowLinks && selectedWorkorderId\">\r\n <app-show-links [status]=\"status\" [selectedWorkorderId]=\"selectedWorkorderId\" [translate]=\"translate\" [globaltranslate]=\"globaltranslate\" [displayShowLinks]=\"displayShowLinks\" (closeShowLinks)=\"closeShowLinks()\" [detailedPmJobLinkedList]=\"detailedPmJobLinkedList\"></app-show-links>\r\n</div>\r\n\r\n\r\n", styles: ["span.circle{background:#f86359;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%;color:#f8f8f8;display:inline-block;font-weight:700;line-height:20px;margin-right:5px;text-align:center;width:20px}span.circlelinked{background:#80a161;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%;color:#fff;display:inline-block;font-weight:700;line-height:20px;margin-right:5px;text-align:center;width:20px}\n"] }]
|
338
|
-
}], ctorParameters: () => [], propDecorators: { dt: [{
|
339
|
-
type: ViewChild,
|
340
|
-
args: ['dt']
|
341
|
-
}], op: [{
|
342
|
-
type: ViewChild,
|
343
|
-
args: ['op']
|
344
|
-
}], translate: [{
|
345
|
-
type: Input
|
346
|
-
}], reasons: [{
|
347
|
-
type: Input
|
348
|
-
}], globaltranslate: [{
|
349
|
-
type: Input
|
350
|
-
}], maintenanceList: [{
|
351
|
-
type: Input
|
352
|
-
}], maintenanceListNotDisplayed: [{
|
353
|
-
type: Input
|
354
|
-
}], pmJobList: [{
|
355
|
-
type: Input
|
356
|
-
}], isAlreadyScheduled: [{
|
357
|
-
type: Input
|
358
|
-
}], displayConfirmedDateInfo: [{
|
359
|
-
type: Input
|
360
|
-
}], alternativeDatesList: [{
|
361
|
-
type: Input
|
362
|
-
}], emitForUpdate: [{
|
363
|
-
type: Output
|
364
|
-
}], emitForAlternativeDates: [{
|
365
|
-
type: Output
|
366
|
-
}], sendContactMeEmail: [{
|
367
|
-
type: Output
|
368
|
-
}], status: [{
|
369
|
-
type: Input
|
370
|
-
}], sendForm: [{
|
371
|
-
type: Output
|
372
|
-
}] } });
|
373
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbnRlbmFuY2UtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hd2YtdGVzdC1saWIvc3JjL2xpYi9zaGFyZWQvbWFpbnRlbmFuY2UtbGlzdC9tYWludGVuYW5jZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F3Zi10ZXN0LWxpYi9zcmMvbGliL3NoYXJlZC9tYWludGVuYW5jZS1saXN0L21haW50ZW5hbmNlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUlsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBU3pELE1BQU0sT0FBTyx3QkFBd0I7SUFDaEIsRUFBRSxDQUFvQjtJQUN0QixFQUFFLENBQWtCO0lBQzVCLFNBQVMsQ0FBTTtJQUNmLE9BQU8sQ0FBTTtJQUNiLGVBQWUsQ0FBTTtJQUNyQixlQUFlLEdBQW9CLEVBQUUsQ0FBQztJQUN0QywyQkFBMkIsR0FBb0IsRUFBRSxDQUFDO0lBQ2xELFNBQVMsR0FBb0IsRUFBRSxDQUFDO0lBQ2hDLGtCQUFrQixDQUFXO0lBQzdCLHdCQUF3QixHQUFDLEtB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ZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERldGFpbGVkUG1Kb2IgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGV0YWlsZWRQbUpvYi5tb2RlbCc7XHJcbmltcG9ydCB7IEFsdGVybmF0aXZlRGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9hbHRlcm5hdGl2ZURhdGUubW9kZWwnO1xyXG5pbXBvcnQgeyBFbWFpbFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZW1haWxUeXBlJztcclxuaW1wb3J0IHsgRXZlbnRTdGF0dXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXZlbnRTdGF0dXMnO1xyXG5pbXBvcnQgeyBQbUpvYiB9IGZyb20gJy4uLy4uL21vZGVscy9wbUpvYi5tb2RlbCc7XHJcbmltcG9ydCB7IFBNR3JvdXBlZEpvYiB9IGZyb20gJy4uLy4uL21vZGVscy9wTUdyb3VwZWRKb2IubW9kZWwnO1xyXG5pbXBvcnQgeyBQbUpvYlN0YXR1cyB9IGZyb20gJy4uLy4uL21vZGVscy9wbUpvYlN0YXR1cyc7XHJcbmltcG9ydCB7IFJlYXNvbkNvbnRhY3QgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVhc29uQ29udGFjdCc7XHJcbmltcG9ydCB7IFN0aW5nQm9vbGVhbiB9IGZyb20gJy4uLy4uL21vZGVscy9zdGluZ0Jvb2xlYW4nO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhd2YtbWFpbnRlbmFuY2UtbGlzdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWFpbnRlbmFuY2UtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9tYWludGVuYW5jZS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZSwgQ29uZmlybWF0aW9uU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYWludGVuYW5jZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgQFZpZXdDaGlsZCgnZHQnKSBkdDogVGFibGUgfCB1bmRlZmluZWQ7XHJcbiAgICBAVmlld0NoaWxkKCdvcCcpIG9wOiBhbnkgfCB1bmRlZmluZWQ7XHJcbiAgICBASW5wdXQoKSB0cmFuc2xhdGU6IGFueTtcclxuICAgIEBJbnB1dCgpIHJlYXNvbnM6IGFueTtcclxuICAgIEBJbnB1dCgpIGdsb2JhbHRyYW5zbGF0ZTogYW55O1xyXG4gICAgQElucHV0KCkgbWFpbnRlbmFuY2VMaXN0OiBEZXRhaWxlZFBtSm9iW10gPSBbXTtcclxuICAgIEBJbnB1dCgpIG1haW50ZW5hbmNlTGlzdE5vdERpc3BsYXllZDogRGV0YWlsZWRQbUpvYltdID0gW107XHJcbiAgICBASW5wdXQoKSBwbUpvYkxpc3Q6IERldGFpbGVkUG1Kb2JbXSA9IFtdO1xyXG4gICAgQElucHV0KCkgaXNBbHJlYWR5U2NoZWR1bGVkITogQm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGRpc3BsYXlDb25maXJtZWREYXRlSW5mbz1mYWxzZTtcclxuICAgIEBJbnB1dCgpIGFsdGVybmF0aXZlRGF0ZXNMaXN0ITogYW55IDtcclxuICAgIEBPdXRwdXQoKSBlbWl0Rm9yVXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgZW1pdEZvckFsdGVybmF0aXZlRGF0ZXMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBzZW5kQ29udGFjdE1lRW1haWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBJbnB1dCgpIHN0YXR1czogYW55O1xyXG4gICBcclxuICAgIEBPdXRwdXQoKSBzZW5kRm9ybTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBtb3JlRGF0ZXMhOmJvb2xlYW47XHJcbiAgICBkZXRhaWxlZFBtSm9iTGlua2VkTGlzdCA6IERldGFpbGVkUG1Kb2JbXSA9IFtdO1xyXG4gICAgdXBkYXRlUG1TdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcbiAgICBhbHRlcm5hdGl2ZURhdGVzU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG4gICAgc2hvd0RhdGUhOiBib29sZWFuO1xyXG4gICAgbWFpbnRlbmFuY2VTZWxlY3RlZCE6IERldGFpbGVkUG1Kb2I7XHJcbiAgICBzdGFydERhdGVUaW1lITogYW55O1xyXG4gICAgZW5kRGF0ZVRpbWUhOiBhbnk7XHJcbiAgICBzZWxlY3RlZFdvcmtvcmRlcklkITogYW55O1xyXG4gICAgYWx0ZXJuYXRpdmVEYXRlITogQWx0ZXJuYXRpdmVEYXRlIDtcclxuICAgIGFsdGVybmF0aXZlRGF0ZXNTZWxlY3RlZDogQWx0ZXJuYXRpdmVEYXRlW10gPSBbXTtcclxuICAgIGRpc3BsYXljb250YWN0U3VwcG9ydCA9IGZhbHNlO1xyXG4gICAgZGlzcGxheUNvbmZpcm1EaWFsb2cgPSBmYWxzZTtcclxuICAgIGRpc3BsYXlDb25maXJtRGF0ZUFsdGVybmF0aXZlRGlhbG9nID0gZmFsc2U7XHJcbiAgICBkaXNwbGF5Q29uZmlybURpYWxvZ0NvbnRhY3QgPSBmYWxzZTtcclxuICAgIGRpc3BsYXlTaG93TGlua3MgID0gZmFsc2U7XHJcbiAgICBkaXNwbGF5QW5vdGhlckRhdGUgPSBmYWxzZTtcclxuICAgIGlzV2l0aExpbmtzID0gZmFsc2U7XHJcbiAgICBpc1Byb3Bvc2VkRGF0ZSA9IHRydWU7XHJcbiAgICBwbVNlbGVjdGVkU3RhdHVzITpzdHJpbmcgO1xyXG4gICAgZW1haWxUeXBlcyE6c3RyaW5nW107IFxyXG4gICAgYWxyZWFkeVNjaGVkdWxlZE1zZyAhOmJvb2xlYW47XHJcbiAgICByZWFzb25Db250YWN0PVwiXCI7XHJcbiAgICBjb250YWN0TWVSZXF1ZXN0ITpEZXRhaWxlZFBtSm9iIDtcclxuICAgIGZpcnN0ID0gMDtcclxuICAgIGxhbmd1YWdlU3RvcmVkIDogc3RyaW5nIHwgbnVsbCAgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmdcIik7XHJcbiAgICBsYW5ndWFnZTogc3RyaW5nID0gdGhpcy5sYW5ndWFnZVN0b3JlZCA/IHRoaXMubGFuZ3VhZ2VTdG9yZWQgIDogIG5hdmlnYXRvci5sYW5ndWFnZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy51cGRhdGVQbVN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmFsdGVybmF0aXZlRGF0ZXNTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5hbHRlcm5hdGl2ZURhdGVzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICB9XHJcbiAgICBhcHBseUZpbHRlckdsb2JhbCgkZXZlbnQ6IGFueSwgc3RyaW5nVmFsOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmR0Py5maWx0ZXJHbG9iYWwoXHJcbiAgICAgICAgICAgICgkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLFxyXG4gICAgICAgICAgICBzdHJpbmdWYWxcclxuICAgICAgICApO1xyXG4gICAgfSAgIFxyXG4gICAgc2VsZWN0RWxlbWVudChlbGVtZW50OiBEZXRhaWxlZFBtSm9iKSB7XHJcbiAgICAgICAgdGhpcy5hbHRlcm5hdGl2ZURhdGVzTGlzdCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbWFpbFR5cGVzID1bXTtcclxuICAgICAgICBpZihlbGVtZW50KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5wbVNlbGVjdGVkU3RhdHVzID0gZWxlbWVudC5zdGF0dXMgO1xyXG4gICAgICAgIH1cclxuICAgICAgIFxyXG4gICAgICAgIGlmKGVsZW1lbnQucG1Kb2IuZ3JvdXBMaXN0KVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5pc1dpdGhMaW5rcyA9IGVsZW1lbnQucG1Kb2IuZ3JvdXBMaXN0Py5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtvcmRlcklkID0gZWxlbWVudC5wbUpvYi53b3Jrb3JkZXJOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5tYWludGVuYW5jZVNlbGVjdGVkID0gZWxlbWVudDtcclxuICAgICAgICB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQuV29ya29yZGVyTnVtYmVyU2VsZWN0ZWQgPSB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucG1Kb2Iud29ya29yZGVySWQgO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNBbHJlYWR5U2NoZWR1bGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0QWx0ZXJuYXRpdmVEYXRlcyhlbGVtZW50LnBtSm9iKTsgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhcnREYXRlVGltZSA9IHRoaXMubWFpbnRlbmFuY2VTZWxlY3RlZC5wbUpvYi5zdGFydERhdGVUaW1lO1xyXG4gICAgICAgIHRoaXMuZW5kRGF0ZVRpbWUgPSB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucG1Kb2IuZW5kRGF0ZVRpbWU7XHJcbiAgICAgICAgdGhpcy5nZXRMaW5rZWRQbUpvYigpO1xyXG4gICAgfVxyXG4gICAgZ2V0QWx0ZXJuYXRpdmVEYXRlcyhwbUpvYiA6IFBtSm9iICkgIHtcclxuICAgICAgICB0aGlzLmVtaXRGb3JBbHRlcm5hdGl2ZURhdGVzLmVtaXQocG1Kb2IpO1xyXG4gICAgfVxyXG4gICAgZ2V0TGlua2VkUG1Kb2IoKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuZGV0YWlsZWRQbUpvYkxpbmtlZExpc3QgPVtdO1xyXG4gICAgICAgIGlmKHRoaXMubWFpbnRlbmFuY2VTZWxlY3RlZC5wbUpvYi5ncm91cExpc3QpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucG1Kb2IuZ3JvdXBMaXN0LmZvckVhY2goKGxpbmtlZCA6IFBNR3JvdXBlZEpvYiAgKSAgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubWFpbnRlbmFuY2VMaXN0LmZvckVhY2goKGl0ZW0gOkRldGFpbGVkUG1Kb2IgICkgID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihsaW5rZWQud29ya29yZGVySWQgPT09IGl0ZW0ucG1Kb2Iud29ya29yZGVySWQpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbGVkUG1Kb2JMaW5rZWRMaXN0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgdGhlIGxpbmtlZCBQTSBpbiB0aGUgb3RoZXIgbWFpbnRlbmFuY2UgbGlzdCBub3Qgc2VsZWN0ZWRcclxuICAgICAgICBpZih0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucG1Kb2IuZ3JvdXBMaXN0ICYmICh0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucG1Kb2IuZ3JvdXBMaXN0Lmxlbmd0aCAhPT0gdGhpcy5kZXRhaWxlZFBtSm9iTGlua2VkTGlzdC5sZW5ndGgpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5tYWludGVuYW5jZVNlbGVjdGVkLnBtSm9iLmdyb3VwTGlzdC5mb3JFYWNoKChsaW5rZWQgOiBQTUdyb3VwZWRKb2IgICkgID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1haW50ZW5hbmNlTGlzdE5vdERpc3BsYXllZC5mb3JFYWNoKChpdGVtIDpEZXRhaWxlZFBtSm9iICApICA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS50b1VwZGF0ZSA9IGZhbHNlIDtcclxuICAgICAgICAgICAgICAgICAgICBpZihsaW5rZWQud29ya29yZGVySWQgPT09IGl0ZW0ucG1Kb2Iud29ya29yZGVySWQpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbGVkUG1Kb2JMaW5rZWRMaXN0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gICAgY29uZmlybURpYWxvZygpIHtcclxuICAgICAgICB0aGlzLmlzUHJvcG9zZWREYXRlID0gdHJ1ZSA7XHJcbiAgICAgICAgdGhpcy5vcC5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybURpYWxvZyA9IHRydWU7XHJcbiAgICB9ICBcclxuICAgIGNsb3NlQ29uZmlybURpYWxvZyhjb25maXJtOiBhbnkpIHtcclxuICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuaXNQcm9wb3NlZERhdGUpXHJcbiAgICAgICAgIHRoaXMuZGlzcGxheUNvbmZpcm1EaWFsb2cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQuZnV0dXJlU3RhdHVzID0gUG1Kb2JTdGF0dXMuQUNDRVBURUQgO1xyXG4gICAgICAgIGlmIChjb25maXJtKSB7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzUHJvcG9zZWREYXRlKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtYWlsVHlwZXMucHVzaChFbWFpbFR5cGUuQWNjZXB0ZWRfQ1NDX0FsdGVybmF0ZSkgO1xyXG4gICAgICAgIHRoaXMuZW1haWxUeXBlcy5wdXNoKEVtYWlsVHlwZS5BY2NlcHRlZF9DbGllbnRzX0FsdGVybmF0ZSkgO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVBbHRlcm5hdGl2ZURhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHsgICB0aGlzLmVtYWlsVHlwZXMucHVzaChFbWFpbFR5cGUuQWNjZXB0ZWRfQ1NDKSA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtYWlsVHlwZXMucHVzaChFbWFpbFR5cGUuQWNjZXB0ZWRfQ2xpZW50cykgO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQcm9wb3NlZERhdGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBtSm9iKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2xvc2VDb25maXJtRGlhbG9nQ29udGFjdChjb25maXJtOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlDb25maXJtRGlhbG9nQ29udGFjdCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChjb25maXJtKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVtYWlsVHlwZXMgPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgICAgICAgaWYodGhpcy5yZWFzb25Db250YWN0ID09PSBSZWFzb25Db250YWN0LkNvbnRhY3RGb3JtUG0gKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbWFpbFR5cGVzLnB1c2goRW1haWxUeXBlLkNvbnRhY3RNZV9DbGllbnRzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1haWxUeXBlcy5wdXNoKEVtYWlsVHlwZS5Db250YWN0TWVfQ1NDKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnJlYXNvbkNvbnRhY3QgPT09IFJlYXNvbkNvbnRhY3QuQ2FuY2VsRm9ybVBtIClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYWludGVuYW5jZVNlbGVjdGVkLnBtSm9iLmN1c3RvbU9iamVjdD0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucG1Kb2IuY3VzdG9tT2JqZWN0LmN1c3RvbWVyV2FpdGluZyA9U3RpbmdCb29sZWFuLllFUyA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQuZnV0dXJlU3RhdHVzID0gIFBtSm9iU3RhdHVzLldBSVRJTkcgOyAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtYWlsVHlwZXMucHVzaChFbWFpbFR5cGUuQ2FuY2VsUE1fQ1NDKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1haWxUeXBlcy5wdXNoKEVtYWlsVHlwZS5DYW5jZWxQTV9DbGllbnRzKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucG1Kb2IuY3VzdG9tT2JqZWN0PSB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFpbnRlbmFuY2VTZWxlY3RlZC5wbUpvYi5jdXN0b21PYmplY3QuY3VzdG9tZXJXYWl0aW5nID1TdGluZ0Jvb2xlYW4uWUVTO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYWludGVuYW5jZVNlbGVjdGVkLmZ1dHVyZVN0YXR1cyA9ICBQbUpvYlN0YXR1cy5XQUlUSU5HIDsgIFxyXG4gICAgICAgICAgICAgICAgIHRoaXMuZW1haWxUeXBlcy5wdXNoKEVtYWlsVHlwZS5TZW5kTmV3RGF0ZXNfQ1NDKTtcclxuICAgICAgICAgICAgICAgICB0aGlzLmVtYWlsVHlwZXMucHVzaChFbWFpbFR5cGUuU2VuZE5ld0RhdGVzX0NsaWVudHMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgdGhpcy51cGRhdGVMaW5rZWRQTUZvcm1Db250YWN0KCk7XHJcblxyXG4gICAgICAgICAgICAgdGhpcy5jbG9zZUNvbnRhY3RTdXBwb3J0KHRydWUpIDtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgdXBkYXRlTGlua2VkUE1Gb3JtQ29udGFjdCgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5wbUpvYkxpc3QgPVtdO1xyXG4gICAgICAgIHRoaXMucG1Kb2JMaXN0LnB1c2godGhpcy5tYWludGVuYW5jZVNlbGVjdGVkKTtcclxuICAgICAgICBpZih0aGlzLmRldGFpbGVkUG1Kb2JMaW5rZWRMaXN0Lmxlbmd0aCA+MClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsZWRQbUpvYkxpbmtlZExpc3QuZm9yRWFjaCgoaXRlbTpEZXRhaWxlZFBtSm9iKSAgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5mdXR1cmVTdGF0dXMgPSAgaXRlbS5zdGF0dXMgO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZERhdGUgPSBpdGVtLnBtSm9iLnN0YXJ0RGF0ZVRpbWU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLldvcmtvcmRlck51bWJlclNlbGVjdGVkID0gIHRoaXMubWFpbnRlbmFuY2VTZWxlY3RlZC5wbUpvYi53b3Jrb3JkZXJJZCA7XHJcbiAgICAgICAgICAgICAgICAgaWYodGhpcy5yZWFzb25Db250YWN0ID09PSBSZWFzb25Db250YWN0Lk1vcmVEYXRlc0Zvcm1QbSAgfHx0aGlzLnJlYXNvbkNvbnRhY3QgPT09IFJlYXNvbkNvbnRhY3QuQ2FuY2VsRm9ybVBtIClcclxuICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5yZWFzb24gPSB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucmVhc29uO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucmVhc29uQ29udGFjdCA9IHRoaXMubWFpbnRlbmFuY2VTZWxlY3RlZC5yZWFzb25Db250YWN0O1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucG1Kb2IuY3VzdG9tT2JqZWN0PSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnBtSm9iLmN1c3RvbU9iamVjdC5jdXN0b21lcldhaXRpbmcgPVN0aW5nQm9vbGVhbi5ZRVMgO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZnV0dXJlU3RhdHVzID0gIFBtSm9iU3RhdHVzLldBSVRJTkcgOyAgXHJcbiAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG1Kb2JMaXN0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FsbEFwaVRvVXBkYXRlKCk7XHJcbiAgICB9XHJcbiAgICBjbG9zZUNvbnRhY3RTdXBwb3J0KGV2ZW50IDphbnkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5Y29udGFjdFN1cHBvcnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93RGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJlYXNvbkNvbnRhY3QgPVwiXCI7XHJcblxyXG4gICAgfVxyXG4gICAgcHJvcG9zZUFub3RoZXJEYXRlKCkge1xyXG4gICAgICAgIHRoaXMuaXNQcm9wb3NlZERhdGUgPSBmYWxzZSA7XHJcbiAgICAgICAgdGhpcy5vcC5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QW5vdGhlckRhdGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29udGFjdFN1cHBvcnQoZnJvbU90aGVyRGF0ZSA6IGJvb2xlYW4pIHtcclxuICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5vcC5oaWRlKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5yZWFzb25Db250YWN0ID0gZnJvbU90aGVyRGF0ZSA/IFJlYXNvbkNvbnRhY3QuTW9yZURhdGVzRm9ybVBtIDogIFJlYXNvbkNvbnRhY3QuQ29udGFjdEZvcm1QbSA7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5Y29udGFjdFN1cHBvcnQgPSB0cnVlOyAgXHJcbiAgICB9XHJcbiAgICBzaG93TGlua3MoZWxlbWVudD86YW55KVxyXG4gICAge1xyXG4gICAgICAgIGlmKGVsZW1lbnQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9wLmhpZGUoKTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlTaG93TGlua3MgPSB0cnVlIDtcclxuICAgIH1cclxuICAgIGNsb3NlU2hvd0xpbmtzKCl7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5U2hvd0xpbmtzID0gZmFsc2UgO1xyXG4gICAgfVxyXG4gICAgY2xvc2VDb25maXJtZWREYXRlSW5mbygpIHtcclxuICAgICAgICB0aGlzLmRpc3BsYXlDb25maXJtZWREYXRlSW5mbyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgYWNjZXB0RGF0ZShhbHRlcm5hdGl2ZURhdGVzOiBBbHRlcm5hdGl2ZURhdGVbXSkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbmZpcm1EaWFsb2cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWx0ZXJuYXRpdmVEYXRlc1NlbGVjdGVkID0gYWx0ZXJuYXRpdmVEYXRlcztcclxuICAgICAgICB0aGlzLmZpbmREYXRlc1NlbGVjdGVkKCk7XHJcbiAgICB9XHJcbiAgICBmaW5kRGF0ZXNTZWxlY3RlZCgpe1xyXG4gICAgICAgIHRoaXMuYWx0ZXJuYXRpdmVEYXRlc1NlbGVjdGVkLmZvckVhY2goKGFsdGVybmF0aXZlRGF0ZTogQWx0ZXJuYXRpdmVEYXRlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGFsdGVybmF0aXZlRGF0ZS5zZWxlY3RlZD09PVwiWWVzXCIpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlVGltZSA9IGFsdGVybmF0aXZlRGF0ZS5zdGFydERhdGVUaW1lO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlVGltZSA9IGFsdGVybmF0aXZlRGF0ZS5lbmREYXRlVGltZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFpbnRlbmFuY2VTZWxlY3RlZC5zZWxlY3RlZERhdGUgPSBhbHRlcm5hdGl2ZURhdGUuc3RhcnREYXRlVGltZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY2xvc2VBbm90aGVyRGF0ZShldmVudDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QW5vdGhlckRhdGUgPSBmYWxzZTtcclxuICAgICAgICBpZihldmVudD09PWZhbHNlKVxyXG4gICAgICAgIHtcclxuICAgICAgICB0aGlzLmFscmVhZHlTY2hlZHVsZWRNc2cgPSBmYWxzZSA7XHJcbiAgICAgICAgdGhpcy5vcC5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5jb250YWN0U3VwcG9ydCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB1cGRhdGVQbUpvYigpIHtcclxuICAgICAgICB0aGlzLnBtSm9iTGlzdCA9W107XHJcbiAgICAgICAgdGhpcy5wbUpvYkxpc3QucHVzaCh0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQpO1xyXG4gICAgICAgIGlmKHRoaXMuZGV0YWlsZWRQbUpvYkxpbmtlZExpc3QubGVuZ3RoID4wKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxlZFBtSm9iTGlua2VkTGlzdC5mb3JFYWNoKChwTUpvYjpEZXRhaWxlZFBtSm9iKSAgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucG1Kb2JMaXN0LnB1c2gocE1Kb2IpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FsbEFwaVRvVXBkYXRlKCk7XHJcblxyXG4gICAgfVxyXG4gICAgZWRpdFBtKCl7XHJcbiAgICAgICAgdGhpcy5hbHJlYWR5U2NoZWR1bGVkTXNnID0gdHJ1ZSA7XHJcbiAgICAgICAgdGhpcy5vcC5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5yZWFzb25Db250YWN0ID0gICBSZWFzb25Db250YWN0LkNhbmNlbEZvcm1QbSA7XHJcbiAgICAgICAgdGhpcy5wcmVwYXJlRm9yUG9wdXAoKSA7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5Y29udGFjdFN1cHBvcnQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcHJlcGFyZUZvclBvcHVwKCl7XHJcbiAgICAgICAgaWYodGhpcy5tYWludGVuYW5jZVNlbGVjdGVkLnBtSm9iLmN1c3RvbWVyQWNjZXB0ZWQgPT09XCJZZXNcIilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlVGltZSA9IHRoaXMubWFpbnRlbmFuY2VTZWxlY3RlZC5wbUpvYi5zdGFydERhdGVUaW1lO1xyXG4gICAgICAgICAgICB0aGlzLmVuZERhdGVUaW1lID0gdGhpcy5tYWludGVuYW5jZVNlbGVjdGVkLnBtSm9iLmVuZERhdGVUaW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmFsdGVybmF0aXZlRGF0ZXNTZWxlY3RlZCA9IHRoaXMubWFpbnRlbmFuY2VTZWxlY3RlZC5wbUpvYi5hbHRlcm5hdGl2ZURhdGVzO1xyXG4gICAgICAgICAgICB0aGlzLmZpbmREYXRlc1NlbGVjdGVkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIHVwZGF0ZVByb3Bvc2VkRGF0ZSgpe1xyXG4gICAgICAgIHRoaXMubWFpbnRlbmFuY2VTZWxlY3RlZC5wbUpvYi5jdXN0b21lckFjY2VwdGVkID0gU3RpbmdCb29sZWFuLllFUztcclxuICAgICAgICB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucG1Kb2IuZXZlbnRTdGF0dXMgPSBFdmVudFN0YXR1cy5BU1NJR05FREFOQztcclxuICAgICAgICB0aGlzLmRldGFpbGVkUG1Kb2JMaW5rZWRMaXN0LmZvckVhY2goKGl0ZW0gOkRldGFpbGVkUG1Kb2IgICkgID0+IHtcclxuICAgICAgICAgICAgaXRlbS5wbUpvYi5jdXN0b21lckFjY2VwdGVkID0gU3RpbmdCb29sZWFuLllFUztcclxuICAgICAgICAgICAgaXRlbS5wbUpvYi5ldmVudFN0YXR1cyA9IEV2ZW50U3RhdHVzLkFTU0lHTkVEQU5DO1xyXG4gICAgICAgICAgICBpdGVtLmZ1dHVyZVN0YXR1cyA9IFBtSm9iU3RhdHVzLkFDQ0VQVEVEIDtcclxuICAgICAgICAgICAgaXRlbS5Xb3Jrb3JkZXJOdW1iZXJTZWxlY3RlZCA9ICB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucG1Kb2Iud29ya29yZGVySWQgO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlQWx0ZXJuYXRpdmVEYXRlKCl7XHJcbiAgICAgICAgdGhpcy5maW5kRGF0ZXNTZWxlY3RlZCgpO1xyXG4gICAgICAgIHRoaXMubWFpbnRlbmFuY2VTZWxlY3RlZC5wbUpvYi5hbHRlcm5hdGl2ZURhdGVzID0gIHRoaXMuYWx0ZXJuYXRpdmVEYXRlc1NlbGVjdGVkIDtcclxuICAgICAgICB0aGlzLmRldGFpbGVkUG1Kb2JMaW5rZWRMaXN0LmZvckVhY2goKGl0ZW0gOkRldGFpbGVkUG1Kb2IgICkgID0+IHtcclxuICAgICAgICAgICAgaXRlbS5wbUpvYi5hbHRlcm5hdGl2ZURhdGVzID0gIHRoaXMuYWx0ZXJuYXRpdmVEYXRlc1NlbGVjdGVkIDtcclxuICAgICAgICAgICAgaXRlbS5wbUpvYi5ldmVudFN0YXR1cyA9IEV2ZW50U3RhdHVzLkFTU0lHTkVEQU5DO1xyXG4gICAgICAgICAgICBpdGVtLmZ1dHVyZVN0YXR1cyA9IFBtSm9iU3RhdHVzLkFDQ0VQVEVEIDtcclxuICAgICAgICAgICAgaXRlbS5Xb3Jrb3JkZXJOdW1iZXJTZWxlY3RlZCA9ICB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQucG1Kb2Iud29ya29yZGVySWQgO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUFub3RoZXJEYXRlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBzZW5kQ29udGFjdE1lRm9ybShjb250YWN0TWVSZXF1ZXN0OmFueSl7XHJcbiAgICAgICAgdGhpcy5tb3JlRGF0ZXMgPSBmYWxzZTtcclxuICAgICAgICBpZiggY29udGFjdE1lUmVxdWVzdC5yZWFzb25Db250YWN0ID09PSBSZWFzb25Db250YWN0Lk1vcmVEYXRlc0Zvcm1QbSApXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLm1vcmVEYXRlcyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbmZpcm1EaWFsb2dDb250YWN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1haW50ZW5hbmNlU2VsZWN0ZWQgPSBjb250YWN0TWVSZXF1ZXN0IDtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsQXBpVG9VcGRhdGUoKXtcclxuICAgICAgICBsZXQgUG1Kb2JMaXN0Rm9yVXBkYXRlID0ge30gYXMgYW55O1xyXG4gICAgICAgIFBtSm9iTGlzdEZvclVwZGF0ZS5wbUpvYkxpc3QgPSB0aGlzLnBtSm9iTGlzdDtcclxuICAgICAgICBQbUpvYkxpc3RGb3JVcGRhdGUuZW1haWxUeXBlcyA9IHRoaXMuZW1haWxUeXBlcztcclxuICAgICAgICB0aGlzLmVtaXRGb3JVcGRhdGUuZW1pdChQbUpvYkxpc3RGb3JVcGRhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zZm9ybVN0YXR1cyhzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSBQbUpvYlN0YXR1cy5ORVcgOiByZXR1cm4gdGhpcy5zdGF0dXMubmV3O1xyXG4gICAgICAgICAgICBjYXNlIFBtSm9iU3RhdHVzLkFDQ0VQVEVEIDogcmV0dXJuIHRoaXMuc3RhdHVzLmFjY2VwdGVkO1xyXG4gICAgICAgICAgICBjYXNlIFBtSm9iU3RhdHVzLkNMT1NFRCA6IHJldHVybiB0aGlzLnN0YXR1cy5jbG9zZWQ7XHJcbiAgICAgICAgICAgIGNhc2UgUG1Kb2JTdGF0dXMuTGF0ZSA6IHJldHVybiB0aGlzLnN0YXR1cy5sYXRlO1xyXG4gICAgICAgICAgICBjYXNlIFBtSm9iU3RhdHVzLk9QRU4gOiByZXR1cm4gdGhpcy5zdGF0dXMub3BlbjtcclxuICAgICAgICAgICAgY2FzZSBQbUpvYlN0YXR1cy5XQUlUSU5HIDogcmV0dXJuIHRoaXMuc3RhdHVzLndhaXRpbmc7XHJcbiAgICAgICAgICAgIGNhc2UgUG1Kb2JTdGF0dXMuRE9ORSA6IHJldHVybiB0aGlzLnN0YXR1cy5kb25lO1xyXG4gICAgICAgICAgICBjYXNlIFBtSm9iU3RhdHVzLlZBTElEQVRFRCA6IHJldHVybiB0aGlzLnN0YXR1cy52YWxpZGF0ZWQ7XHJcbiAgICAgICAgICAgIGRlZmF1bHQgOiByZXR1cm4gXCJFcnJldXJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdHVzVG9vbHRpcChzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSBQbUpvYlN0YXR1cy5BQ0NFUFRFRCA6IHJldHVybiB0aGlzLnN0YXR1cy5hY2NlcHRlZFRvb2x0aXA7XHJcbiAgICAgICAgICAgIGNhc2UgUG1Kb2JTdGF0dXMuTkVXIDogcmV0dXJuIHRoaXMuc3RhdHVzLm5ld1Rvb2x0aXA7XHJcbiAgICAgICAgICAgIGNhc2UgUG1Kb2JTdGF0dXMuQ0xPU0VEIDogcmV0dXJuIHRoaXMuc3RhdHVzLmNsb3NlZFRvb2x0aXA7XHJcbiAgICAgICAgICAgIGNhc2UgUG1Kb2JTdGF0dXMuTGF0ZSA6IHJldHVybiB0aGlzLnN0YXR1cy5sYXRlVG9vbHRpcDtcclxuICAgICAgICAgICAgY2FzZSBQbUpvYlN0YXR1cy5PUEVOIDogcmV0dXJuIHRoaXMuc3RhdHVzLm9wZW5Ub29sdGlwO1xyXG4gICAgICAgICAgICBjYXNlIFBtSm9iU3RhdHVzLldBSVRJTkcgOiByZXR1cm4gdGhpcy5zdGF0dXMud2FpdGluZ1Rvb2x0aXA7XHJcbiAgICAgICAgICAgIGNhc2UgUG1Kb2JTdGF0dXMuRE9ORSA6IHJldHVybiB0aGlzLnN0YXR1cy5kb25lVG9vbHRpcDtcclxuICAgICAgICAgICAgY2FzZSBQbUpvYlN0YXR1cy5WQUxJREFURUQgOiByZXR1cm4gdGhpcy5zdGF0dXMudmFsaWRhdGVkVG9vbHRpcDtcclxuICAgICAgICAgICAgZGVmYXVsdCA6IHJldHVybiBcIkVycmV1clwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuIiwiPHAtdGFibGUgI2R0IFt2YWx1ZV09XCJtYWludGVuYW5jZUxpc3RcIiByZXNwb25zaXZlTGF5b3V0PVwic3RhY2tcIiBbcm93c109XCIxMFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiWzUsMTAsMjUsNTBdXCIgXHJcbltnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiWydzeXN0ZW1JZCcsJ3BtSm9iLmNhc2VJZCcsJ3N5c3RlbU5hbWUnLCdwbUpvYi53b3Jrb3JkZXJOdW1iZXInLCdwbUpvYi5zdGFydERhdGVUaW1lJywncG1Kb2IuZW5kRGF0ZVRpbWUnLCdwbUpvYi5jYXNlX3R5cGUnLCdwbUpvYi5jYXNlX2NhdGVnb3J5Jywnc3RhdHVzJ11cIlxyXG5bcGFnaW5hdG9yXT1cInRydWVcIiAgW3Jvd0hvdmVyXT1cInRydWVcIiBkYXRhS2V5PVwiaWRcIiBbY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZV09XCJnbG9iYWx0cmFuc2xhdGUuY291bnRQYWdlc1wiIFtmaXJzdF09XCJmaXJzdFwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cImFwcGx5RmlsdGVyR2xvYmFsKCRldmVudCwgJ2NvbnRhaW5zJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnbG9iYWx0cmFuc2xhdGUuc2VhcmNoXCIgLz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29sdW1ucz5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDwhLS0gPHRoIHBTb3J0YWJsZUNvbHVtbj1cImNhc2VJZFwiPkNhc2UgSWQgPHAtc29ydEljb24gZmllbGQ9XCJjYXNlSWRcIj48L3Atc29ydEljb24+IC0tPlxyXG4gICAgICAgICAgICA8dGggcFNvcnRhYmxlQ29sdW1uPVwic3lzdGVtTmFtZVwiPnt7dHJhbnNsYXRlLm1haW50ZW5hbmNlTGlzdC5zeXN0ZW19fVxyXG4gICAgICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJzeXN0ZW1OYW1lXCI+PC9wLXNvcnRJY29uPlxyXG4gICAgICAgICAgICA8dGggcFNvcnRhYmxlQ29sdW1uPVwicm9vbVwiPnt7dHJhbnNsYXRlLm1haW50ZW5hbmNlTGlzdC5yb29tfX1cclxuICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwicm9vbVwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgPHRoIHBTb3J0YWJsZUNvbHVtbj1cInN5c3RlbUlkXCI+U3lzdGVtIElkXHJcbiAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cInN5c3RlbUlkXCI+PC9wLXNvcnRJY29uPlxyXG4gICAgICAgICAgICA8dGggcFNvcnRhYmxlQ29sdW1uPVwicG1Kb2Iud29ya29yZGVyTnVtYmVyXCI+e3t0cmFuc2xhdGUubWFpbnRlbmFuY2VMaXN0LndvcmtPcmRlcn19XHJcbiAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cInBtSm9iLndvcmtvcmRlck51bWJlclwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgPHRoIHBTb3J0YWJsZUNvbHVtbj1cInBtSm9iLnN0YXJ0RGF0ZVRpbWVcIj57e3RyYW5zbGF0ZS5tYWludGVuYW5jZUxpc3Quc3RhcnREYXRlfX1cclxuICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uIGZpZWxkPVwicG1Kb2Iuc3RhcnREYXRlVGltZVwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgPHRoIHBTb3J0YWJsZUNvbHVtbj1cInBtSm9iLmNhc2VUeXBlXCI+e3t0cmFuc2xhdGUubWFpbnRlbmFuY2VMaXN0LnR5cGV9fVxyXG4gICAgICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJwbUpvYi5jYXNlVHlwZVwiPjwvcC1zb3J0SWNvbj5cclxuICAgICAgICAgICAgPHRoIHBTb3J0YWJsZUNvbHVtbj1cInN0YXR1c1wiPnt7dHJhbnNsYXRlLm1haW50ZW5hbmNlTGlzdC5zdGF0dXN9fVxyXG4gICAgICAgICAgICAgICAgPHAtc29ydEljb24gZmllbGQ9XCJzdGF0dXNcIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgIDx0aD57e3RyYW5zbGF0ZS5tYWludGVuYW5jZUxpc3QuTmJyTGlua3N9fVxyXG4gICAgICAgICAgICA8dGg+IEFjdGlvbjwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1wcm9kdWN0IGxldC1jb2x1bW5zPVwiY29sdW1uc1wiPlxyXG4gICAgICAgIDx0cj4gICBcclxuICAgICAgICAgICAgPHRkPnt7cHJvZHVjdC5zeXN0ZW1OYW1lIH19IDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57e3Byb2R1Y3Qucm9vbSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57e3Byb2R1Y3Quc3lzdGVtSWQgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3twcm9kdWN0LnBtSm9iLndvcmtvcmRlck51bWJlciB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57e3Byb2R1Y3QucG1Kb2Iuc3RhcnREYXRlVGltZSB8IGRhdGU6IFwiRUVFIGRkIE1NTSB5eXl5XCI6XCJcIjpsYW5ndWFnZX19PC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwicHJvZHVjdC5wbUpvYi5jYXNlVHlwZSA9PT0gJ1BsYW5uZWQgTWFpbnRlbmFuY2UnXCI+e3t0cmFuc2xhdGUubWFpbnRlbmFuY2VMaXN0LnR5cGVQbGFubmVkfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJwcm9kdWN0LnBtSm9iLmNhc2VUeXBlID09PSAnUUFSQSdcIj57e3RyYW5zbGF0ZS5tYWludGVuYW5jZUxpc3QudHlwZVFBUkF9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCIncHJvZHVjdC1zdGF0dXMgc3RhdHVzLScgKyBwcm9kdWN0LnN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZ2V0U3RhdHVzVG9vbHRpcChwcm9kdWN0LnN0YXR1cylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dHJhbnNmb3JtU3RhdHVzKHByb2R1Y3Quc3RhdHVzKX19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cInByb2R1Y3QucG1Kb2IuZ3JvdXBMaXN0ICE9PSBudWxsIFwiIChjbGljayk9XCJzaG93TGlua3MocHJvZHVjdClcIj4gPHNwYW4gY2xhc3M9XCJjaXJjbGVcIj57e3Byb2R1Y3QucG1Kb2IuZ3JvdXBMaXN0Lmxlbmd0aCB9fTwvc3Bhbj4gPGkgY2xhc3M9XCJwaSBwaS1saW5rXCIgc3R5bGU9XCJmb250LXNpemU6IDFyZW1cIj48L2k+IDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cInByb2R1Y3QucG1Kb2IuZ3JvdXBMaXN0ID09PSBudWxsXCIgKGNsaWNrKT1cInNob3dMaW5rcyhwcm9kdWN0KVwiPiA8c3BhbiBjbGFzcz1cImNpcmNsZWxpbmtlZFwiPnt7cHJvZHVjdC5wbUpvYi5ncm91cExpc3QubGVuZ3RoIH19PC9zcGFuPiA8aSBjbGFzcz1cInBpIHBpLWxpbmtcIiBzdHlsZT1cImZvbnQtc2l6ZTogMXJlbVwiPjwvaT4gPC90ZD5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGxhYmVsPVwiXCIgaWNvbj1cInBpIHBpLWNhbGVuZGFyXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkXCIgI2FjdHVhbFRhcmdldCAoY2xpY2spPVwic2VsZWN0RWxlbWVudChwcm9kdWN0KVwiIChjbGljayk9XCJvcC50b2dnbGUoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCIoKHByb2R1Y3Quc3RhdHVzID09PSdsYXRlJyAgfHwgcHJvZHVjdC5zdGF0dXMgPT09J2FjY2VwdGVkJykgJiYgIWlzQWxyZWFkeVNjaGVkdWxlZCkgfHwgcHJvZHVjdC5zdGF0dXMgPT09J3dhaXRpbmcnXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwic3VtbWFyeVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWQtZmxleCBwLWFpLWNlbnRlciBwLWpjLWJldHdlZW5cIj5cclxuICAgICAgICAgICAge3tnbG9iYWx0cmFuc2xhdGUuY291bnR9fSB7e21haW50ZW5hbmNlTGlzdCA/IG1haW50ZW5hbmNlTGlzdC5sZW5ndGggOiAwIH19IHt7Z2xvYmFsdHJhbnNsYXRlLmVsZW1lbnRzfX0uXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L3AtdGFibGU+XHJcblxyXG48cC10b2FzdCBwb3NpdGlvbj1cInRvcC1jZW50ZXJcIj48L3AtdG9hc3Q+XHJcbjxwLW92ZXJsYXlQYW5lbCAjb3AgW2Rpc21pc3NhYmxlXT1cInRydWVcIiBbc2hvd0Nsb3NlSWNvbl09XCJmYWxzZVwiIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzBtcydcIiBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cIicwbXMnXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8YnV0dG9uIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgKm5nSWY9XCIhaXNBbHJlYWR5U2NoZWR1bGVkXCIgaWNvbj1cInBpIHBpLXRodW1icy11cFwiIChjbGljayk9XCJjb25maXJtRGlhbG9nKClcIiBbbGFiZWxdPVwidHJhbnNsYXRlLm1haW50ZW5hbmNlTGlzdC5jb25maXJtRGF0ZVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxociAqbmdJZj1cIiFpc0FscmVhZHlTY2hlZHVsZWRcIj5cclxuICAgICAgICA8YnV0dG9uIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgKm5nSWY9XCIhaXNBbHJlYWR5U2NoZWR1bGVkICYmIChhbHRlcm5hdGl2ZURhdGVzTGlzdCAhPT0gbnVsbCkgXCIgaWNvbj1cInBpIHBpLWNhbGVuZGFyLXBsdXNcIiAoY2xpY2spPVwicHJvcG9zZUFub3RoZXJEYXRlKClcIiBbbGFiZWxdPVwidHJhbnNsYXRlLm1haW50ZW5hbmNlTGlzdC5jaG9vc2VBbm90aGVyRGF0ZVwiIGNsYXNzPVwicC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDxociAqbmdJZj1cIiFpc0FscmVhZHlTY2hlZHVsZWQgJiYgKGFsdGVybmF0aXZlRGF0ZXNMaXN0IT09bnVsbCkgXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIGljb249XCJwaSBwaS1waG9uZVwiIChjbGljayk9XCJjb250YWN0U3VwcG9ydChmYWxzZSlcIiBbbGFiZWxdPVwidHJhbnNsYXRlLm1haW50ZW5hbmNlTGlzdC5jb250YWN0U3VwcG9yXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgPGhyICpuZ0lmPVwiaXNXaXRoTGlua3NcIj5cclxuICAgICAgICA8YnV0dG9uIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgaWNvbj1cInBpIHBpLWxpbmtcIiAqbmdJZj1cImlzV2l0aExpbmtzXCIgKGNsaWNrKT1cInNob3dMaW5rcygpXCIgW2xhYmVsXT1cInRyYW5zbGF0ZS5tYWludGVuYW5jZUxpc3Quc2hvd0xpbmtzXCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgPGhyICpuZ0lmPVwiaXNBbHJlYWR5U2NoZWR1bGVkICYmIHBtU2VsZWN0ZWRTdGF0dXMgPT09J3ZhbGlkYXRlZCdcIj5cclxuICAgICAgICA8YnV0dG9uIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgKm5nSWY9XCJpc0FscmVhZHlTY2hlZHVsZWQgJiYgcG1TZWxlY3RlZFN0YXR1cyA9PT0ndmFsaWRhdGVkJ1wiIGljb249XCJwaSBwaS1wZW5jaWxcIiAoY2xpY2spPVwiZWRpdFBtKClcIiBbbGFiZWxdPVwidHJhbnNsYXRlLm1haW50ZW5hbmNlTGlzdC5jYW5jZWxcIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tcmFpc2VkXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbjwvcC1vdmVybGF5UGFuZWw+XHJcblxyXG48ZGl2ICpuZ0lmPVwiZGlzcGxheWNvbnRhY3RTdXBwb3J0IFwiID5cclxuICAgIDxhcHAtY29udGFjdC1zdXBwb3J0IFtyZWFzb25Db250YWN0XT1cInJlYXNvbkNvbnRhY3RcIiAoY2xvc2VDb250YWN0U3VwcG9ydCk9XCJjbG9zZUNvbnRhY3RTdXBwb3J0KCRldmVudClcIiAoc2VuZERldGFpbGVkUG0pPVwic2VuZENvbnRhY3RNZUZvcm0oJGV2ZW50KVwiIFtkZXRhaWxlZFBtSm9iXSA9XCJtYWludGVuYW5jZVNlbGVjdGVkXCIgW2dsb2JhbHRyYW5zbGF0ZV09XCJnbG9iYWx0cmFuc2xhdGVcIiAgW3JlYXNvbnNdPVwicmVhc29uc1wiIFt0cmFuc2xhdGVdPVwidHJhbnNsYXRlLmNvbnRhY3RTdXBwb3J0XCIgW2Rpc3BsYXljb250YWN0U3VwcG9ydF09XCJkaXNwbGF5Y29udGFjdFN1cHBvcnRcIiBbc2hvd0RhdGVdPVwic2hvd0RhdGVcIiA+PC9hcHAtY29udGFjdC1zdXBwb3J0PlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cImRpc3BsYXlDb25maXJtRGlhbG9nXCI+XHJcbiAgICA8YXBwLWNvbmZpcm0tZGlhbG9nICBbZGV0YWlsZWRQbUpvYkxpbmtlZExpc3RdPVwiZGV0YWlsZWRQbUpvYkxpbmtlZExpc3RcIiAgIFtpc1Byb3Bvc2VkRGF0ZV09XCJpc1Byb3Bvc2VkRGF0ZVwiIFtnbG9iYWx0cmFuc2xhdGVdPVwiZ2xvYmFsdHJhbnNsYXRlXCIgW3RyYW5zbGF0ZV09XCJ0cmFuc2xhdGUuY29uZmlybURpYWxvZ1wiXHJcbiAgICAgICAgW3N0YXJ0RGF0ZVRpbWVdPVwic3RhcnREYXRlVGltZVwiIFtlbmREYXRlVGltZV09XCJlbmREYXRlVGltZVwiIFtkaXNwbGF5Q29uZmlybURpYWxvZ109XCJkaXNwbGF5Q29uZmlybURpYWxvZ1wiIChjbG9zZUNvbmZpcm1EaWFsb2cpPVwiY2xvc2VDb25maXJtRGlhbG9nKCRldmVudClcIj5cclxuICAgIDwvYXBwLWNvbmZpcm0tZGlhbG9nPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cImRpc3BsYXlDb25maXJtRGlhbG9nQ29udGFjdFwiPlxyXG4gICAgPGFwcC1jb25maXJtLWRpYWxvZy1jb250YWN0ICBbZGV0YWlsZWRQbUpvYkxpbmtlZExpc3RdPVwiZGV0YWlsZWRQbUpvYkxpbmtlZExpc3RcIiAgICBbZ2xvYmFsdHJhbnNsYXRlXT1cImdsb2JhbHRyYW5zbGF0ZVwiIFt0cmFuc2xhdGVdPVwidHJhbnNsYXRlLmNvbmZpcm1EaWFsb2dDb250YWN0XCJcclxuICAgICAgICBbc3RhcnREYXRlVGltZV09XCJzdGFydERhdGVUaW1lXCIgW2VuZERhdGVUaW1lXT1cImVuZERhdGVUaW1lXCIgW2Rpc3BsYXlDb25maXJtRGlhbG9nQ29udGFjdF09XCJkaXNwbGF5Q29uZmlybURpYWxvZ0NvbnRhY3RcIiAoY2xvc2VDb25maXJtRGlhbG9nQ29udGFjdCk9XCJjbG9zZUNvbmZpcm1EaWFsb2dDb250YWN0KCRldmVudClcIj5cclxuICAgIDwvYXBwLWNvbmZpcm0tZGlhbG9nLWNvbnRhY3QgPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cImRpc3BsYXlDb25maXJtZWREYXRlSW5mb1wiPlxyXG4gICAgPGFwcC1jb25maXJtZWQtZGF0ZS1pbmZvcm1hdGlvbiBbbW9yZURhdGVzXT1cIm1vcmVEYXRlc1wiIFtnbG9iYWx0cmFuc2xhdGVdPVwiZ2xvYmFsdHJhbnNsYXRlXCIgW3RyYW5zbGF0ZV09XCJ0cmFuc2xhdGUuY29uZmlybURhdGVJbmZvcm1hdGlvblwiIFtzdGFydERhdGVUaW1lXT1cInN0YXJ0RGF0ZVRpbWVcIiBbZW5kRGF0ZVRpbWVdPVwiZW5kRGF0ZVRpbWVcIiBbZGlzcGxheUNvbmZpcm1lZERhdGVJbmZvc109XCJkaXNwbGF5Q29uZmlybWVkRGF0ZUluZm9cIiAoY2xvc2VDb25maXJtZWREYXRlSW5mbyk9XCJjbG9zZUNvbmZpcm1lZERhdGVJbmZvKClcIj48L2FwcC1jb25maXJtZWQtZGF0ZS1pbmZvcm1hdGlvbj5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJkaXNwbGF5QW5vdGhlckRhdGUgJiYgYWx0ZXJuYXRpdmVEYXRlc0xpc3RcIj5cclxuICAgIDxhcHAtY2hvb3NlLWFub3RoZXItZGF0ZSBbZ2xvYmFsdHJhbnNsYXRlXT1cImdsb2JhbHRyYW5zbGF0ZVwiIFt0cmFuc2xhdGVdPVwidHJhbnNsYXRlLmNob29zZUFub3RoZXJEYXRlXCIgW2FsdGVybmF0aXZlRGF0ZXNMaXN0XT1cImFsdGVybmF0aXZlRGF0ZXNMaXN0XCIgW2Rpc3BsYXlBbm90aGVyRGF0ZV09XCJkaXNwbGF5QW5vdGhlckRhdGVcIiAoY2xvc2VBbm90aGVyRGF0ZSk9XCJjbG9zZUFub3RoZXJEYXRlKCRldmVudClcIiAoYWNjZXB0RGF0ZSk9XCJhY2NlcHREYXRlKCRldmVudClcIj5cclxuICAgIDwvYXBwLWNob29zZS1hbm90aGVyLWRhdGU+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwiZGlzcGxheVNob3dMaW5rcyAmJiBzZWxlY3RlZFdvcmtvcmRlcklkXCI+XHJcbiAgICA8YXBwLXNob3ctbGlua3MgW3N0YXR1c109XCJzdGF0dXNcIiBbc2VsZWN0ZWRXb3Jrb3JkZXJJZF09XCJzZWxlY3RlZFdvcmtvcmRlcklkXCIgW3RyYW5zbGF0ZV09XCJ0cmFuc2xhdGVcIiBbZ2xvYmFsdHJhbnNsYXRlXT1cImdsb2JhbHRyYW5zbGF0ZVwiIFtkaXNwbGF5U2hvd0xpbmtzXT1cImRpc3BsYXlTaG93TGlua3NcIiAoY2xvc2VTaG93TGlua3MpPVwiY2xvc2VTaG93TGlua3MoKVwiIFtkZXRhaWxlZFBtSm9iTGlua2VkTGlzdF09XCJkZXRhaWxlZFBtSm9iTGlua2VkTGlzdFwiPjwvYXBwLXNob3ctbGlua3M+XHJcbjwvZGl2PlxyXG5cclxuXHJcbiJdfQ==
|