@hmcts/ccpay-web-component 5.0.3 → 5.0.4-beta03
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/bundles/hmcts-ccpay-web-component.umd.js +2977 -1157
- package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
- package/esm2015/hmcts-ccpay-web-component.js +34 -31
- package/esm2015/lib/components/add-remission/add-remission.component.js +697 -126
- package/esm2015/lib/components/case-transactions/case-transactions.component.js +115 -59
- package/esm2015/lib/components/contact-details/contact-details.component.js +447 -0
- package/esm2015/lib/components/fee-summary/fee-summary.component.js +17 -12
- package/esm2015/lib/components/payment-view/payment-view.component.js +202 -107
- package/esm2015/lib/components/pba-payment/pba-payment.component.js +248 -0
- package/esm2015/lib/components/process-refund/process-refund.component.js +49 -28
- package/esm2015/lib/components/refund-list/refund-list.component.js +3 -3
- package/esm2015/lib/components/refund-status/refund-status.component.js +210 -31
- package/esm2015/lib/components/service-request/service-request.component.js +258 -153
- package/esm2015/lib/components/table/table.component.js +24 -9
- package/esm2015/lib/interfaces/IFee.js +13 -1
- package/esm2015/lib/interfaces/IPayment.js +7 -1
- package/esm2015/lib/interfaces/IPutNotificationRequest.js +25 -0
- package/esm2015/lib/interfaces/IRefundContactDetails.js +25 -0
- package/esm2015/lib/interfaces/IRefundFee.js +21 -0
- package/esm2015/lib/interfaces/IRefundList.js +7 -1
- package/esm2015/lib/interfaces/IRefundsNotifications.js +21 -0
- package/esm2015/lib/interfaces/IRemission.js +7 -1
- package/esm2015/lib/interfaces/IResubmitRefundRequest.js +10 -2
- package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +23 -0
- package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +32 -0
- package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +6 -2
- package/esm2015/lib/interfaces/PostRefundRetroRemission.js +20 -2
- package/esm2015/lib/payment-lib.component.js +18 -5
- package/esm2015/lib/payment-lib.module.js +5 -3
- package/esm2015/lib/payment-lib.service.js +31 -1
- package/esm2015/lib/services/notification/notification.service.js +85 -0
- package/esm2015/lib/services/payment-view/payment-view.service.js +35 -1
- package/esm2015/lib/services/refunds/refunds.service.js +11 -2
- package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +2 -2
- package/esm5/hmcts-ccpay-web-component.js +34 -31
- package/esm5/lib/components/add-remission/add-remission.component.js +819 -131
- package/esm5/lib/components/case-transactions/case-transactions.component.js +124 -59
- package/esm5/lib/components/contact-details/contact-details.component.js +472 -0
- package/esm5/lib/components/fee-summary/fee-summary.component.js +17 -12
- package/esm5/lib/components/payment-view/payment-view.component.js +236 -125
- package/esm5/lib/components/pba-payment/pba-payment.component.js +269 -0
- package/esm5/lib/components/process-refund/process-refund.component.js +52 -78
- package/esm5/lib/components/refund-list/refund-list.component.js +3 -3
- package/esm5/lib/components/refund-status/refund-status.component.js +246 -29
- package/esm5/lib/components/service-request/service-request.component.js +302 -183
- package/esm5/lib/components/table/table.component.js +27 -9
- package/esm5/lib/interfaces/IFee.js +13 -1
- package/esm5/lib/interfaces/IPayment.js +7 -1
- package/esm5/lib/interfaces/IPutNotificationRequest.js +23 -0
- package/esm5/lib/interfaces/IRefundContactDetails.js +25 -0
- package/esm5/lib/interfaces/IRefundFee.js +21 -0
- package/esm5/lib/interfaces/IRefundList.js +7 -1
- package/esm5/lib/interfaces/IRefundsNotifications.js +21 -0
- package/esm5/lib/interfaces/IRemission.js +7 -1
- package/esm5/lib/interfaces/IResubmitRefundRequest.js +8 -2
- package/esm5/lib/interfaces/IserviceRequestCardPayment.js +22 -0
- package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +28 -0
- package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +5 -2
- package/esm5/lib/interfaces/PostRefundRetroRemission.js +16 -2
- package/esm5/lib/payment-lib.component.js +15 -3
- package/esm5/lib/payment-lib.module.js +5 -3
- package/esm5/lib/payment-lib.service.js +45 -1
- package/esm5/lib/services/notification/notification.service.js +89 -0
- package/esm5/lib/services/payment-view/payment-view.service.js +48 -1
- package/esm5/lib/services/refunds/refunds.service.js +17 -2
- package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +2 -2
- package/fesm2015/hmcts-ccpay-web-component.js +2231 -578
- package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
- package/fesm5/hmcts-ccpay-web-component.js +2974 -1108
- package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
- package/hmcts-ccpay-web-component.d.ts +33 -30
- package/hmcts-ccpay-web-component.metadata.json +1 -1
- package/lib/components/add-remission/add-remission.component.d.ts +45 -3
- package/lib/components/case-transactions/case-transactions.component.d.ts +8 -1
- package/lib/components/contact-details/contact-details.component.d.ts +49 -0
- package/lib/components/payment-view/payment-view.component.d.ts +25 -6
- package/lib/components/pba-payment/pba-payment.component.d.ts +33 -0
- package/lib/components/process-refund/process-refund.component.d.ts +6 -1
- package/lib/components/refund-status/refund-status.component.d.ts +33 -6
- package/lib/components/service-request/service-request.component.d.ts +31 -9
- package/lib/components/table/table.component.d.ts +1 -0
- package/lib/interfaces/IFee.d.ts +6 -0
- package/lib/interfaces/IPayment.d.ts +3 -0
- package/lib/interfaces/IPutNotificationRequest.d.ts +6 -0
- package/lib/interfaces/IRefundContactDetails.d.ts +9 -0
- package/lib/interfaces/IRefundFee.d.ts +7 -0
- package/lib/interfaces/IRefundList.d.ts +4 -0
- package/lib/interfaces/IRefundsNotifications.d.ts +16 -0
- package/lib/interfaces/IRemission.d.ts +3 -0
- package/lib/interfaces/IResubmitRefundRequest.d.ts +5 -1
- package/lib/interfaces/IserviceRequestCardPayment.d.ts +6 -0
- package/lib/interfaces/IserviceRequestPbaPayment.d.ts +8 -0
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +3 -1
- package/lib/interfaces/PostRefundRetroRemission.d.ts +7 -1
- package/lib/payment-lib.component.d.ts +5 -0
- package/lib/payment-lib.service.d.ts +6 -0
- package/lib/services/notification/notification.service.d.ts +15 -0
- package/lib/services/payment-view/payment-view.service.d.ts +5 -0
- package/lib/services/refunds/refunds.service.d.ts +2 -0
- package/package.json +5 -1
|
@@ -4,36 +4,35 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Component, Input } from '@angular/core';
|
|
6
6
|
import { RefundsService } from '../../services/refunds/refunds.service';
|
|
7
|
+
import { NotificationService } from '../../services/notification/notification.service';
|
|
7
8
|
import { FormBuilder, Validators, FormControl } from '@angular/forms';
|
|
8
|
-
import { PaymentViewService } from '../../services/payment-view/payment-view.service';
|
|
9
|
-
import { Router } from '@angular/router';
|
|
10
9
|
import { OrderslistService } from '../../services/orderslist.service';
|
|
10
|
+
import { IPutNotificationRequest } from '../../interfaces/IPutNotificationRequest';
|
|
11
11
|
import { IResubmitRefundRequest } from '../../interfaces/IResubmitRefundRequest';
|
|
12
12
|
import { PaymentLibComponent } from '../../payment-lib.component';
|
|
13
|
+
import { PaymentViewService } from '../../services/payment-view/payment-view.service';
|
|
13
14
|
/** @type {?} */
|
|
14
15
|
const BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
|
|
15
16
|
export class RefundStatusComponent {
|
|
16
17
|
/**
|
|
17
18
|
* @param {?} formBuilder
|
|
18
19
|
* @param {?} refundService
|
|
20
|
+
* @param {?} notificationService
|
|
19
21
|
* @param {?} paymentLibComponent
|
|
20
|
-
* @param {?} paymentViewService
|
|
21
|
-
* @param {?} router
|
|
22
22
|
* @param {?} OrderslistService
|
|
23
|
+
* @param {?} paymentViewService
|
|
23
24
|
*/
|
|
24
|
-
constructor(formBuilder, refundService,
|
|
25
|
+
constructor(formBuilder, refundService, notificationService, paymentLibComponent, OrderslistService, paymentViewService) {
|
|
25
26
|
this.formBuilder = formBuilder;
|
|
26
27
|
this.refundService = refundService;
|
|
28
|
+
this.notificationService = notificationService;
|
|
27
29
|
this.paymentLibComponent = paymentLibComponent;
|
|
28
|
-
this.paymentViewService = paymentViewService;
|
|
29
|
-
this.router = router;
|
|
30
30
|
this.OrderslistService = OrderslistService;
|
|
31
|
+
this.paymentViewService = paymentViewService;
|
|
31
32
|
this.LOGGEDINUSERROLES = [];
|
|
32
33
|
this.rejectedRefundList = [];
|
|
33
34
|
this.approvalStatus = 'Sent for approval';
|
|
34
35
|
this.rejectStatus = 'Update required';
|
|
35
|
-
// approvalStatus = 'sent for approval';
|
|
36
|
-
// rejectStatus = 'sent back';
|
|
37
36
|
this.errorMessage = null;
|
|
38
37
|
this.refundButtonState = '';
|
|
39
38
|
this.isAmountEmpty = false;
|
|
@@ -42,6 +41,9 @@ export class RefundStatusComponent {
|
|
|
42
41
|
this.isRemissionLessThanFeeError = false;
|
|
43
42
|
this.refundHasError = false;
|
|
44
43
|
this.refundReasons = [];
|
|
44
|
+
this.isResendOperationSuccess = false;
|
|
45
|
+
this.isEditDetailsClicked = false;
|
|
46
|
+
this.isEditAddressDeatilsClicked = false;
|
|
45
47
|
this.isRefundBtnDisabled = true;
|
|
46
48
|
this.isLastUpdatedByCurrentUser = true;
|
|
47
49
|
this.isProcessRefund = false;
|
|
@@ -61,13 +63,9 @@ export class RefundStatusComponent {
|
|
|
61
63
|
* @return {?}
|
|
62
64
|
*/
|
|
63
65
|
ngOnInit() {
|
|
64
|
-
// if (this.check4AllowedRoles2AccessRefund()) {
|
|
65
66
|
this.resetRemissionForm([false, false, false, false], 'All');
|
|
66
67
|
this.bsPaymentDcnNumber = this.paymentLibComponent.bspaymentdcn;
|
|
67
68
|
this.isCallFromRefundList = this.paymentLibComponent.isCallFromRefundList;
|
|
68
|
-
// if(this.paymentLibComponent.isFromRefundStatusPage) {
|
|
69
|
-
// this.viewName = 'reviewandsubmitview';
|
|
70
|
-
// }
|
|
71
69
|
if (this.paymentLibComponent.isRefundStatusView) {
|
|
72
70
|
this.viewName = 'refundview';
|
|
73
71
|
this.OrderslistService.getRefundView().subscribe((/**
|
|
@@ -89,6 +87,7 @@ export class RefundStatusComponent {
|
|
|
89
87
|
*/
|
|
90
88
|
refundList => {
|
|
91
89
|
this.rejectedRefundList = refundList['refund_list'];
|
|
90
|
+
//this.refundFees = this.rejectedRefundList['refund_fees'];
|
|
92
91
|
})),
|
|
93
92
|
(/**
|
|
94
93
|
* @param {?} error
|
|
@@ -107,6 +106,7 @@ export class RefundStatusComponent {
|
|
|
107
106
|
reason: new FormControl()
|
|
108
107
|
});
|
|
109
108
|
if (this.refundlist !== undefined) {
|
|
109
|
+
this.getRefundsNotification();
|
|
110
110
|
this.getRefundsStatusHistoryList();
|
|
111
111
|
if (this.LOGGEDINUSERROLES.some((/**
|
|
112
112
|
* @param {?} i
|
|
@@ -126,7 +126,6 @@ export class RefundStatusComponent {
|
|
|
126
126
|
this.refundButtonState = this.refundlist.refund_status.name;
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
//}
|
|
130
129
|
}
|
|
131
130
|
/**
|
|
132
131
|
* @return {?}
|
|
@@ -150,6 +149,25 @@ export class RefundStatusComponent {
|
|
|
150
149
|
});
|
|
151
150
|
}
|
|
152
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* @return {?}
|
|
154
|
+
*/
|
|
155
|
+
getRefundsNotification() {
|
|
156
|
+
this.notificationService.getRefundNotification(this.refundlist.refund_reference).subscribe((/**
|
|
157
|
+
* @param {?} refundsNotification
|
|
158
|
+
* @return {?}
|
|
159
|
+
*/
|
|
160
|
+
refundsNotification => {
|
|
161
|
+
this.notificationList = refundsNotification['notifications'];
|
|
162
|
+
})),
|
|
163
|
+
(/**
|
|
164
|
+
* @param {?} error
|
|
165
|
+
* @return {?}
|
|
166
|
+
*/
|
|
167
|
+
(error) => {
|
|
168
|
+
this.errorMessage = error.replace(/"/g, "");
|
|
169
|
+
});
|
|
170
|
+
}
|
|
153
171
|
/**
|
|
154
172
|
* @param {?} refundlist
|
|
155
173
|
* @param {?} navigationpage
|
|
@@ -220,15 +238,17 @@ export class RefundStatusComponent {
|
|
|
220
238
|
}));
|
|
221
239
|
}
|
|
222
240
|
/**
|
|
241
|
+
* @param {?} refundReason
|
|
223
242
|
* @return {?}
|
|
224
243
|
*/
|
|
225
|
-
gotoRefundReasonPage() {
|
|
244
|
+
gotoRefundReasonPage(refundReason) {
|
|
226
245
|
this.isRefundBtnDisabled = false;
|
|
227
246
|
this.paymentLibComponent.REFUNDLIST = "true";
|
|
228
247
|
this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
229
248
|
this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
|
|
230
249
|
this.errorMessage = false;
|
|
231
|
-
this.
|
|
250
|
+
this.changeRefundReason = refundReason;
|
|
251
|
+
this.viewName = 'issuerefundpage1';
|
|
232
252
|
}
|
|
233
253
|
/**
|
|
234
254
|
* @return {?}
|
|
@@ -239,7 +259,12 @@ export class RefundStatusComponent {
|
|
|
239
259
|
this.isRefundBtnDisabled = false;
|
|
240
260
|
this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
|
|
241
261
|
this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
242
|
-
this.
|
|
262
|
+
if (this.refundlist.reason == 'Retrospective remission') {
|
|
263
|
+
this.viewName = 'processretroremissonpage';
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
this.viewName = 'issuerefund';
|
|
267
|
+
}
|
|
243
268
|
}
|
|
244
269
|
/**
|
|
245
270
|
* @return {?}
|
|
@@ -304,6 +329,7 @@ export class RefundStatusComponent {
|
|
|
304
329
|
getRefundListReason(refundListReason) {
|
|
305
330
|
if (this.paymentLibComponent.isFromRefundStatusPage && !this.paymentLibComponent.iscancelClicked) {
|
|
306
331
|
this.refundlist.reason = refundListReason.reason;
|
|
332
|
+
this.refundlist.code = refundListReason.code;
|
|
307
333
|
this.refundCode = refundListReason.code;
|
|
308
334
|
}
|
|
309
335
|
else {
|
|
@@ -329,15 +355,31 @@ export class RefundStatusComponent {
|
|
|
329
355
|
this.viewName = 'reviewandsubmitview';
|
|
330
356
|
this.paymentLibComponent.CCD_CASE_NUMBER = this.ccdCaseNumber;
|
|
331
357
|
}
|
|
358
|
+
/**
|
|
359
|
+
* @param {?} fees
|
|
360
|
+
* @return {?}
|
|
361
|
+
*/
|
|
362
|
+
getRefundFees(fees) {
|
|
363
|
+
this.fees = fees;
|
|
364
|
+
this.refundFees = this.fees.map((/**
|
|
365
|
+
* @param {?} obj
|
|
366
|
+
* @return {?}
|
|
367
|
+
*/
|
|
368
|
+
obj => ({ fee_id: obj.id, code: obj.code, version: obj.version, volume: obj.volume, refund_amount: obj.refund_amount })));
|
|
369
|
+
}
|
|
332
370
|
/**
|
|
333
371
|
* @return {?}
|
|
334
372
|
*/
|
|
335
373
|
gotoReviewRefundConfirmationPage() {
|
|
336
|
-
if (this.oldRefundReason === this.refundlist.reason) {
|
|
337
|
-
|
|
374
|
+
// if (this.oldRefundReason === this.refundlist.reason) {
|
|
375
|
+
// this.refundCode = '';
|
|
376
|
+
// }
|
|
377
|
+
if (this.refundFees === undefined) {
|
|
378
|
+
this.refundFees = this.refundlist['refund_fees'];
|
|
338
379
|
}
|
|
380
|
+
this.refundCode = this.refundlist.code;
|
|
339
381
|
/** @type {?} */
|
|
340
|
-
const resubmitRequest = new IResubmitRefundRequest(this.refundCode, this.changedAmount);
|
|
382
|
+
const resubmitRequest = new IResubmitRefundRequest(this.refundCode, this.changedAmount, this.refundlist.contact_details, this.refundFees);
|
|
341
383
|
this.refundService.patchResubmitRefund(resubmitRequest, this.refundlist.refund_reference).subscribe((/**
|
|
342
384
|
* @param {?} response
|
|
343
385
|
* @return {?}
|
|
@@ -356,6 +398,115 @@ export class RefundStatusComponent {
|
|
|
356
398
|
this.errorMessage = error.replace(/"/g, "");
|
|
357
399
|
}));
|
|
358
400
|
}
|
|
401
|
+
/**
|
|
402
|
+
* @param {?} note
|
|
403
|
+
* @return {?}
|
|
404
|
+
*/
|
|
405
|
+
gotoEditAddressDetails(note) {
|
|
406
|
+
this.notification = note;
|
|
407
|
+
this.isEditDetailsClicked = true;
|
|
408
|
+
this.viewName = 'refundEditView';
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* @param {?} obj
|
|
412
|
+
* @return {?}
|
|
413
|
+
*/
|
|
414
|
+
getContactDetails(obj) {
|
|
415
|
+
this.addressDetails = obj;
|
|
416
|
+
this.viewName = 'revieweditdetailsconfirmationpage';
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* @param {?} obj
|
|
420
|
+
* @return {?}
|
|
421
|
+
*/
|
|
422
|
+
getContactDetailsForRefundList(obj) {
|
|
423
|
+
this.refundlist.contact_details = obj;
|
|
424
|
+
this.isEditDetailsClicked = false;
|
|
425
|
+
this.isRefundBtnDisabled = false;
|
|
426
|
+
this.viewName = 'reviewandsubmitview';
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* @param {?=} note
|
|
430
|
+
* @return {?}
|
|
431
|
+
*/
|
|
432
|
+
gotoEditDetailsPage(note) {
|
|
433
|
+
if (note) {
|
|
434
|
+
this.notification = { contact_details: note, notification_type: note.notification_type };
|
|
435
|
+
}
|
|
436
|
+
this.isEditDetailsClicked = true;
|
|
437
|
+
this.viewName = 'refundEditView';
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* @return {?}
|
|
441
|
+
*/
|
|
442
|
+
submitEditDetail() {
|
|
443
|
+
this.isResendOperationSuccess = false;
|
|
444
|
+
/** @type {?} */
|
|
445
|
+
const contactDetails = this.addressDetails.notification_type === 'EMAIL' ? this.addressDetails.email :
|
|
446
|
+
{
|
|
447
|
+
address_line: this.addressDetails.address_line,
|
|
448
|
+
city: this.addressDetails.city,
|
|
449
|
+
county: this.addressDetails.county,
|
|
450
|
+
country: this.addressDetails.country,
|
|
451
|
+
postal_code: this.addressDetails.postal_code,
|
|
452
|
+
};
|
|
453
|
+
/** @type {?} */
|
|
454
|
+
const resendRequest = new IPutNotificationRequest(contactDetails, this.addressDetails.notification_type);
|
|
455
|
+
this.refundService.putResendOrEdit(resendRequest, this.refundlist.refund_reference, this.addressDetails.notification_type).subscribe((/**
|
|
456
|
+
* @param {?} response
|
|
457
|
+
* @return {?}
|
|
458
|
+
*/
|
|
459
|
+
(response) => {
|
|
460
|
+
this.isResendOperationSuccess = response;
|
|
461
|
+
}), (/**
|
|
462
|
+
* @param {?} error
|
|
463
|
+
* @return {?}
|
|
464
|
+
*/
|
|
465
|
+
(error) => {
|
|
466
|
+
this.isResendOperationSuccess = false;
|
|
467
|
+
this.errorMessage = error.replace(/"/g, "");
|
|
468
|
+
}));
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* @param {?} notification
|
|
472
|
+
* @return {?}
|
|
473
|
+
*/
|
|
474
|
+
putResend(notification) {
|
|
475
|
+
this.isResendOperationSuccess = false;
|
|
476
|
+
/** @type {?} */
|
|
477
|
+
const contactDetails = notification.notification_type === 'EMAIL' ? notification.contact_details.email :
|
|
478
|
+
{
|
|
479
|
+
address_line: notification.contact_details.address_line,
|
|
480
|
+
city: notification.contact_details.city,
|
|
481
|
+
county: notification.contact_details.county,
|
|
482
|
+
country: notification.contact_details.country,
|
|
483
|
+
postal_code: notification.contact_details.postal_code,
|
|
484
|
+
};
|
|
485
|
+
/** @type {?} */
|
|
486
|
+
const resendRequest = new IPutNotificationRequest(contactDetails, notification.notification_type);
|
|
487
|
+
this.refundService.putResendOrEdit(resendRequest, this.refundlist.refund_reference, notification.notification_type).subscribe((/**
|
|
488
|
+
* @param {?} response
|
|
489
|
+
* @return {?}
|
|
490
|
+
*/
|
|
491
|
+
(response) => {
|
|
492
|
+
this.isResendOperationSuccess = response;
|
|
493
|
+
}), (/**
|
|
494
|
+
* @param {?} error
|
|
495
|
+
* @return {?}
|
|
496
|
+
*/
|
|
497
|
+
(error) => {
|
|
498
|
+
this.isResendOperationSuccess = false;
|
|
499
|
+
this.errorMessage = error.replace(/"/g, "");
|
|
500
|
+
}));
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* @param {?} Event
|
|
504
|
+
* @return {?}
|
|
505
|
+
*/
|
|
506
|
+
gotoCasetransationPageCancelBtnClicked(Event) {
|
|
507
|
+
event.preventDefault();
|
|
508
|
+
this.viewName = 'refundstatuslist';
|
|
509
|
+
}
|
|
359
510
|
/**
|
|
360
511
|
* @param {?} refundReference
|
|
361
512
|
* @param {?} refundList
|
|
@@ -364,31 +515,33 @@ export class RefundStatusComponent {
|
|
|
364
515
|
goToRefundProcessComponent(refundReference, refundList) {
|
|
365
516
|
this.paymentLibComponent.refundlistsource = refundList;
|
|
366
517
|
this.paymentLibComponent.refundReference = refundReference;
|
|
518
|
+
this.paymentLibComponent.isFromPayBubble = true;
|
|
367
519
|
this.paymentLibComponent.viewName = 'process-refund';
|
|
368
520
|
}
|
|
369
521
|
}
|
|
370
522
|
RefundStatusComponent.decorators = [
|
|
371
523
|
{ type: Component, args: [{
|
|
372
524
|
selector: 'ccpay-refund-status',
|
|
373
|
-
template: "\n<div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Error in processing the request\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n</div>\n<ng-container *ngIf=\"viewName==='refundstatuslist' && rejectedRefundList\">\n <!-- payments -->\n\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-16\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-11\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Refund reference</td>\n <td class=\"govuk-table__header col-24 \" scope=\"col\">Reason</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let refundList of rejectedRefundList\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_status['name'] }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">\u00A3{{ refundList?.amount | number:'.2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.date_updated | date:'dd MMM yyyy'}}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{refundList?.reason}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToRefundView(refundList,'casetransactions')\">Review</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No refunds recorded</td>\n </tbody>\n </table>\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='refundview'\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div>\n <h2 class=\"govuk-heading-l\">Refund details</h2>\n <table>\n \n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Refund reference</td>\n <td>{{ refundlist?.refund_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment to be refunded</td>\n <td>{{refundlist?.payment_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Reason for refund</td>\n <td>{{ refundlist?.reason }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Amount refunded</td>\n <td>\u00A3{{refundlist?.amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n\n <!-- Status history -->\n <div>\n <br />\n <h2 class=\"govuk-heading-m\">Refund status history</h2>\n <div *ngIf=\"refundStatusHistories\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Users</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Notes</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let refundStatusHistory of refundStatusHistories;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.status}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.date_created | date:'d MMMM yyyy\n hh:mm:ss'}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.created_by}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.notes}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n\n <ng-container *ngIf=\"viewName==='refundview'\">\n <div *ngIf=\"refundButtonState==='Update required'\">\n <!-- <div *ngIf=\"refundButtonState==='sent back'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary btnmargin\"\n (click)=\"gotoReviewAndReSubmitPage()\">Resubmit\n refund</button>\n </div>\n <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='Sent for approval'\" >\n <!-- <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='sent for approval'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary\"\n (click)=\"goToRefundProcessComponent(refundlist.refund_reference,refundlist)\">Process refund</button>\n </div>\n </ng-container>\n\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='reviewandsubmitview'\">\n <!-- <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div> -->\n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\">Review and resubmit refund</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for rejection</td>\n <td class=\"govuk-table__cell\">{{refundreason}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.refund_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> {{ refundlist?.reason}}\n <a (click)=\"gotoRefundReasonPage()\" *ngIf=\"refundlist?.reason !== 'Retrospective remission'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n <!-- <td class=\"govuk-table__cell\">{{ refundlist?.reason }}</td>\n <a (click)=\"gotoRefundReasonPage()\" class=\"govuk-link right\">Change</a> -->\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.payment_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"refundlist?.reason === 'Retrospective remission'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"refundlist?.reason !== 'Retrospective remission'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\"> \u00A3{{ changedAmount | number:'.2' }}\n <a (click)=\"gotoAmountPage()\" *ngIf=\"refundlist?.reason === 'Retrospective remission'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n </tr>\n </table>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n</div>\n<p><a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a></p>\n <!-- <div class=\"govuk-button-group\">\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n </div> -->\n <!-- <p>\n <a (click)=\"loadRefundListPage()\" href=\"\" class=\"cancelbtn\">Cancel</a>\n </p> -->\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefund'\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" (refundListReason)=\"getRefundListReason($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'processretroremissonpage'\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" (refundListAmount)=\"getRefundAmount($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewrefundconfirmationpage'\">\n <div class=\"govuk-grid-row pagesize\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference:{{refundReference}} </strong></p>\n </div>\n\n </div>\n\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount| currency:'GBP':'symbol-narrow':'1.2-2'}} has been created and will be passed to a team leader to approve.\n </p>\n\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n",
|
|
374
|
-
styles: [".right{float:right!important}.button{margin-bottom:3em;font-size:19px}.cancelbtn{font-size:19px;font-weight:400}.btnmargin{margin-bottom:2em}.govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:.5em}.govuk-label--s,.govuk-warning-text__text,.hmcts-currency-input__symbol{font-size:19px;font-weight:400}.inline-error-class{outline:#a71414 solid 3px;outline-offset:0}.inline-error-message{color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.govuk-button,.govuk-link{margin-right:1em;font-size:19px;font-weight:200}.govuk-button-group{padding-top:2em}.heading-medium{margin-top:.875em}.heading-large{margin-top:.25em}.govuk-panel--confirmation{color:#fff;background:#00703c}.govuk-heading-l{font-size:36px}.govuk-heading-m{font-size:24px}.govuk-panel__title{font-size:5rem}.govuk-body,.govuk-body-m{font-size:2.1875rem}.govuk-input--width-10{max-width:36ex}.col-14{width:14%!important}.col-10{width:10%!important}.col-11{width:11%!important}.col-18{width:18%!important}.col-21{width:21%!important}.col-9{width:9%!important}.col-15{width:15%!important}.col-16{width:16%!important}.col-25{width:25%!important}.col-24{width:24%!important}.govuk-error-summary__title{font-size:24px!important}.govuk-error-summary__body{font-size:19px!important}.white{color:#fff}.pagesize{margin:2em;width:97%}.govuk-link{cursor:pointer}"]
|
|
525
|
+
template: "\n<div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Error in processing the request\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"viewName==='refundstatuslist' && rejectedRefundList && !isResendOperationSuccess && !isEditDetailsClicked\">\n <!-- payments -->\n\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-16\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-11\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Refund reference</td>\n <td class=\"govuk-table__header col-24 \" scope=\"col\">Reason</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let refundList of rejectedRefundList\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_status['name'] }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">\u00A3{{ refundList?.amount | number:'.2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.date_updated | date:'dd MMM yyyy'}}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{refundList?.reason}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToRefundView(refundList,'casetransactions')\">Review</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No refunds recorded</td>\n </tbody>\n </table>\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='refundview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div>\n <h2 class=\"govuk-heading-l\">Refund details</h2>\n <table>\n \n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Refund reference</td>\n <td>{{ refundlist?.refund_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment to be refunded</td>\n <td>{{refundlist?.payment_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Reason for refund</td>\n <td>{{ refundlist?.reason }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Amount refunded</td>\n <td>\u00A3{{refundlist?.amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n\n\n <!-- Notification sent details -->\n <div>\n <br />\n <h2 class=\"govuk-heading-m\">Notifications sent</h2>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Sent to</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Sent via</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Actions</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"notificationList\">\n <tr class=\"govuk-table__row\" *ngFor=\"let notification of notificationList; let i = index;\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{notification.date_created | date:'dd MMMM yyyy hh:mm:ss'}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderParty}}</td>\n <td class=\"govuk-table__cell whitespace-inherit col-40\">\n <div *ngIf=\"notification?.notification_type === 'EMAIL'\">\n <strong>Email</strong><br>\n {{notification?.contact_details?.email}}\n </div>\n <div *ngIf=\"notification?.notification_type === 'LETTER'\">\n <strong>Post</strong><br>\n {{notification?.contact_details?.address_line}} {{notification?.contact_details?.city}} {{notification?.contact_details?.county}} {{notification?.contact_details?.country}} {{notification?.contact_details?.postal_code}}\n </div>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\" *ngIf=\"i === 0\"><a href=\"Javascript:void(0);\" (click)=\"putResend(notification)\">Resend</a> | <a href=\"Javascript:void(0);\" (click)=\"gotoEditAddressDetails(notification)\">Edit details</a></td>\n <td class=\"govuk-table__cell whitespace-inherit\" *ngIf=\"i > 0\"> </td>\n\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"!notificationList\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\" colspan=\"4\">No record found ... </td>\n </tr>\n </tbody>\n </table> \n </div>\n <!-- Status history -->\n <div>\n <br />\n <h2 class=\"govuk-heading-m\">Refund status history</h2>\n <div *ngIf=\"refundStatusHistories\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Users</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Notes</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let refundStatusHistory of refundStatusHistories;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.status}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.date_created | date:'d MMMM yyyy\n hh:mm:ss'}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.created_by}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.notes}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n\n <ng-container *ngIf=\"viewName==='refundview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div *ngIf=\"refundButtonState==='Update required'\" >\n <!-- <div *ngIf=\"refundButtonState==='sent back'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary btnmargin\"\n (click)=\"gotoReviewAndReSubmitPage()\">Change refund details</button>\n </div>\n <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='Sent for approval'\" >\n <!-- <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='sent for approval'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary\"\n (click)=\"goToRefundProcessComponent(refundlist.refund_reference,refundlist)\">Process refund</button>\n </div>\n </ng-container>\n\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='reviewandsubmitview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <!-- <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div> -->\n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\">Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for return</td>\n <td class=\"govuk-table__cell\">{{refundreason}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.refund_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> {{ refundlist?.reason}}\n <a (click)=\"gotoRefundReasonPage(refundlist?.reason)\" *ngIf=\"refundlist?.reason !== 'Retrospective remission' && refundlist?.reason !== 'Overpayment'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n <!-- <td class=\"govuk-table__cell\">{{ refundlist?.reason }}</td>\n <a (click)=\"gotoRefundReasonPage()\" class=\"govuk-link right\">Change</a> -->\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.payment_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"refundlist?.reason === 'Retrospective remission'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"refundlist?.reason !== 'Retrospective remission'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\"> \u00A3{{ changedAmount ? changedAmount : refundlist?.amount | number:'.2' }}\n <a (click)=\"gotoAmountPage()\" *ngIf=\"refundlist?.reason !== 'Overpayment'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"refundlist?.contact_details?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{refundlist?.contact_details?.email}}\n </div>\n <div *ngIf=\"refundlist?.contact_details?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{refundlist?.contact_details?.address_line}} {{refundlist?.contact_details?.city}} {{refundlist?.contact_details?.county}} {{refundlist?.contact_details?.country}} {{refundlist?.contact_details?.postal_code}}\n </div> \n <a class=\"govuk-link\" href=\"Javascript:void(0)\" *ngIf=\"refundlist?.contact_details !=null\" class=\"govuk-link right\" (click)=\"gotoEditDetailsPage(refundlist?.contact_details)\">\n Change\n </a>\n </td>\n </tr> \n </table>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n</div>\n<p><a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a></p>\n <!-- <div class=\"govuk-button-group\">\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n </div> -->\n <!-- <p>\n <a (click)=\"loadRefundListPage()\" href=\"\" class=\"cancelbtn\">Cancel</a>\n </p> -->\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefundpage1' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\" [isFromRefundStatusPage] = \"true\"\n [changeRefundReason]= \"changeRefundReason\" [ccdCaseNumber]=\"ccdCaseNumber\" (refundListReason)=\"getRefundListReason($event)\" [refundPaymentReference]= \"refundlist?.payment_reference\" ></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'processretroremissonpage' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" [refundPaymentReference]= \"refundlist?.payment_reference\" (refundListAmount)=\"getRefundAmount($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefund' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\" [isFromServiceRequestPage] = \"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" [refundPaymentReference]= \"refundlist?.payment_reference\" [isFromRefundStatusPage]=\"true\" (refundListAmount)=\"getRefundAmount($event)\" (refundFees)=\"getRefundFees($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewrefundconfirmationpage' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div class=\"govuk-grid-row\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference:{{refundReference}} </strong></p>\n </div>\n\n </div>\n\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount| currency:'GBP':'symbol-narrow':'1.2-2'}} has been created and will be passed to a team leader to approve.\n </p>\n\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isResendOperationSuccess\">\n <div class=\"govuk-grid-row\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Notification sent\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference: {{ refundlist?.refund_reference}} </strong></p>\n </div>\n\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"viewName === 'refundEditView' && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSPAGE'> \n <h1 class=\"govuk-heading-l\">Edit contact details</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span class=\"govuk-hint font-size-19px\">\n Refund reference: {{ refundlist?.refund_reference}}\n </span>\n <ccpay-contact-details\n [isEditOperationInRefundList] = isEditDetailsClicked\n [addressObj] = notification\n (assignContactDetailsInFefundsList)=\"getContactDetails($event)\"\n (redirectToIssueRefund)=\"gotoCasetransationPageCancelBtnClicked($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n<ng-container *ngIf=\"viewName === 'revieweditdetailsconfirmationpage' && !isResendOperationSuccess && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSCHECKANDANSWERPAGE'> \n <h1 class=\"govuk-heading-l\">Check your answers</h1>\n <dl class=\"govuk-summary-list\">\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Refund reference\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ refundlist?.refund_reference}}\n </dd>\n <span class=\"govuk-summary-list__actions\"></span> \n </div>\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Send via\n <br/>\n </dt>\n <dd class=\"govuk-summary-list__value\">\n <div *ngIf=\"addressDetails?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{addressDetails?.email}}\n </div>\n <div *ngIf=\"addressDetails?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{addressDetails?.address_line}} {{addressDetails?.city}} {{addressDetails?.county}} {{addressDetails?.country}} {{addressDetails?.postal_code}}\n </div> \n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a class=\"govuk-link\" href=\"Javascript:void(0)\" (click)=\"gotoEditDetailsPage(addressDetails)\">\n Change\n </a>\n </dd>\n </div>\n </dl>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoEditDetailsPage(addressDetails)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"submitEditDetail()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Send notification\n </button>\n </div>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n",
|
|
526
|
+
styles: [".right{float:right!important}.button{margin-bottom:3em;font-size:19px}.cancelbtn{font-size:19px;font-weight:400}.btnmargin{margin-bottom:2em}.govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:.5em}.govuk-label--s,.govuk-warning-text__text,.hmcts-currency-input__symbol{font-size:19px;font-weight:400}.inline-error-class{outline:#a71414 solid 3px;outline-offset:0}.inline-error-message{color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.govuk-button,.govuk-link{margin-right:1em;font-size:19px;font-weight:200}.govuk-button-group{padding-top:2em}.heading-medium{margin-top:.875em}.heading-large{margin-top:.25em}.govuk-panel--confirmation{color:#fff;background:#00703c}.govuk-heading-l{font-size:36px}.govuk-heading-m{font-size:24px}.govuk-panel__title{font-size:5rem}.govuk-body,.govuk-body-m{font-size:2.1875rem}.govuk-input--width-10{max-width:36ex}.col-14{width:14%!important}.col-10{width:10%!important}.col-11{width:11%!important}.col-18{width:18%!important}.col-21{width:21%!important}.col-9{width:9%!important}.col-40{width:40%!important}.col-15{width:15%!important}.col-16{width:16%!important}.col-25{width:25%!important}.col-24{width:24%!important}.govuk-error-summary__title{font-size:24px!important}.govuk-error-summary__body{font-size:19px!important}.font-size-19px{font-size:19px}.white{color:#fff}.pagesize{margin:2em;width:97%}.govuk-link{cursor:pointer}.contactDetails-width{width:70%}"]
|
|
375
527
|
}] }
|
|
376
528
|
];
|
|
377
529
|
/** @nocollapse */
|
|
378
530
|
RefundStatusComponent.ctorParameters = () => [
|
|
379
531
|
{ type: FormBuilder },
|
|
380
532
|
{ type: RefundsService },
|
|
533
|
+
{ type: NotificationService },
|
|
381
534
|
{ type: PaymentLibComponent },
|
|
382
|
-
{ type:
|
|
383
|
-
{ type:
|
|
384
|
-
{ type: OrderslistService }
|
|
535
|
+
{ type: OrderslistService },
|
|
536
|
+
{ type: PaymentViewService }
|
|
385
537
|
];
|
|
386
538
|
RefundStatusComponent.propDecorators = {
|
|
387
539
|
LOGGEDINUSERROLES: [{ type: Input, args: ['LOGGEDINUSERROLES',] }],
|
|
388
540
|
isOldPcipalOff: [{ type: Input }],
|
|
389
541
|
isNewPcipalOff: [{ type: Input }],
|
|
390
542
|
ccdCaseNumber: [{ type: Input }],
|
|
391
|
-
isTurnOff: [{ type: Input }]
|
|
543
|
+
isTurnOff: [{ type: Input }],
|
|
544
|
+
orderParty: [{ type: Input }]
|
|
392
545
|
};
|
|
393
546
|
if (false) {
|
|
394
547
|
/** @type {?} */
|
|
@@ -402,12 +555,18 @@ if (false) {
|
|
|
402
555
|
/** @type {?} */
|
|
403
556
|
RefundStatusComponent.prototype.isTurnOff;
|
|
404
557
|
/** @type {?} */
|
|
558
|
+
RefundStatusComponent.prototype.orderParty;
|
|
559
|
+
/** @type {?} */
|
|
405
560
|
RefundStatusComponent.prototype.refundStatusForm;
|
|
406
561
|
/** @type {?} */
|
|
407
562
|
RefundStatusComponent.prototype.selectedRefundReason;
|
|
408
563
|
/** @type {?} */
|
|
409
564
|
RefundStatusComponent.prototype.rejectedRefundList;
|
|
410
565
|
/** @type {?} */
|
|
566
|
+
RefundStatusComponent.prototype.notificationList;
|
|
567
|
+
/** @type {?} */
|
|
568
|
+
RefundStatusComponent.prototype.notification;
|
|
569
|
+
/** @type {?} */
|
|
411
570
|
RefundStatusComponent.prototype.approvalStatus;
|
|
412
571
|
/** @type {?} */
|
|
413
572
|
RefundStatusComponent.prototype.rejectStatus;
|
|
@@ -440,6 +599,16 @@ if (false) {
|
|
|
440
599
|
/** @type {?} */
|
|
441
600
|
RefundStatusComponent.prototype.refundStatusHistories;
|
|
442
601
|
/** @type {?} */
|
|
602
|
+
RefundStatusComponent.prototype.refundNotifications;
|
|
603
|
+
/** @type {?} */
|
|
604
|
+
RefundStatusComponent.prototype.isResendOperationSuccess;
|
|
605
|
+
/** @type {?} */
|
|
606
|
+
RefundStatusComponent.prototype.isEditDetailsClicked;
|
|
607
|
+
/** @type {?} */
|
|
608
|
+
RefundStatusComponent.prototype.isEditAddressDeatilsClicked;
|
|
609
|
+
/** @type {?} */
|
|
610
|
+
RefundStatusComponent.prototype.addressDetails;
|
|
611
|
+
/** @type {?} */
|
|
443
612
|
RefundStatusComponent.prototype.refundReference;
|
|
444
613
|
/** @type {?} */
|
|
445
614
|
RefundStatusComponent.prototype.refundAmount;
|
|
@@ -460,6 +629,16 @@ if (false) {
|
|
|
460
629
|
/** @type {?} */
|
|
461
630
|
RefundStatusComponent.prototype.changedAmount;
|
|
462
631
|
/** @type {?} */
|
|
632
|
+
RefundStatusComponent.prototype.isRemissionsMatch;
|
|
633
|
+
/** @type {?} */
|
|
634
|
+
RefundStatusComponent.prototype.payment;
|
|
635
|
+
/** @type {?} */
|
|
636
|
+
RefundStatusComponent.prototype.changeRefundReason;
|
|
637
|
+
/** @type {?} */
|
|
638
|
+
RefundStatusComponent.prototype.fees;
|
|
639
|
+
/** @type {?} */
|
|
640
|
+
RefundStatusComponent.prototype.refundFees;
|
|
641
|
+
/** @type {?} */
|
|
463
642
|
RefundStatusComponent.prototype.allowedRolesToAccessRefund;
|
|
464
643
|
/** @type {?} */
|
|
465
644
|
RefundStatusComponent.prototype.check4AllowedRoles2AccessRefund;
|
|
@@ -477,21 +656,21 @@ if (false) {
|
|
|
477
656
|
* @type {?}
|
|
478
657
|
* @private
|
|
479
658
|
*/
|
|
480
|
-
RefundStatusComponent.prototype.
|
|
659
|
+
RefundStatusComponent.prototype.notificationService;
|
|
481
660
|
/**
|
|
482
661
|
* @type {?}
|
|
483
662
|
* @private
|
|
484
663
|
*/
|
|
485
|
-
RefundStatusComponent.prototype.
|
|
664
|
+
RefundStatusComponent.prototype.paymentLibComponent;
|
|
486
665
|
/**
|
|
487
666
|
* @type {?}
|
|
488
667
|
* @private
|
|
489
668
|
*/
|
|
490
|
-
RefundStatusComponent.prototype.
|
|
669
|
+
RefundStatusComponent.prototype.OrderslistService;
|
|
491
670
|
/**
|
|
492
671
|
* @type {?}
|
|
493
672
|
* @private
|
|
494
673
|
*/
|
|
495
|
-
RefundStatusComponent.prototype.
|
|
674
|
+
RefundStatusComponent.prototype.paymentViewService;
|
|
496
675
|
}
|
|
497
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3JlZnVuZC1zdGF0dXMvcmVmdW5kLXN0YXR1cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxXQUFXLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztNQUM1RCxjQUFjLEdBQUcsdUJBQXVCO0FBTzlDLE1BQU0sT0FBTyxxQkFBcUI7Ozs7Ozs7OztJQXVDaEMsWUFBb0IsV0FBd0IsRUFDbEMsYUFBNkIsRUFDN0IsbUJBQXdDLEVBQ3hDLGtCQUFzQyxFQUN0QyxNQUFjLEVBQ2QsaUJBQW9DO1FBTDFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQUM3Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUEzQ2xCLHNCQUFpQixHQUFhLEVBQUUsQ0FBQztRQU83RCx1QkFBa0IsR0FBa0IsRUFBRSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQUcsbUJBQW1CLENBQUM7UUFDckMsaUJBQVksR0FBRyxpQkFBaUIsQ0FBQzs7O1FBR2pDLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBTXBCLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUMvQixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxnQ0FBMkIsR0FBWSxLQUFLLENBQUM7UUFDN0MsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFLMUIsd0JBQW1CLEdBQVksSUFBSSxDQUFDO1FBSXBDLCtCQUEwQixHQUFZLElBQUksQ0FBQztRQUMzQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQywrQkFBMEIsR0FBRyxDQUFDLDBCQUEwQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUE4RDdFLG9DQUErQjs7O1FBQUcsR0FBWSxFQUFFO1lBQzlDLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUk7Ozs7WUFBQyxJQUFJLENBQUMsRUFBRSxDQUNqRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM1QyxDQUFDO1FBQ0osQ0FBQyxFQUFBO0lBM0RpRCxDQUFDOzs7O0lBRW5ELFFBQVE7UUFFUCxnREFBZ0Q7UUFDL0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUM7UUFDaEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQztRQUMxRSx3REFBd0Q7UUFDeEQsMkNBQTJDO1FBQzNDLElBQUk7UUFDSixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRTtZQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztZQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUzs7OztZQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksRUFBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTOzs7O1lBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxFQUFDLENBQUM7U0FDakc7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUM7WUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUzs7OztZQUNsRSxVQUFVLENBQUMsRUFBRTtnQkFDWCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3RELENBQUMsRUFDRjs7Ozs7Z0JBQ0MsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDYixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDLENBQUEsQ0FBQztTQUNMO1FBR0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzdDLE1BQU0sRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDN0MsVUFBVSxDQUFDLFFBQVE7Z0JBQ25CLFVBQVUsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUM7YUFDOUMsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUUsTUFBTSxFQUFFLElBQUksV0FBVyxFQUFFO1NBQzFCLENBQUMsQ0FBQztRQUVILElBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDaEMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFFbkMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSTs7OztZQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxFQUFDLEVBQUU7Z0JBQzVFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO2dCQUM1RCxPQUFPO2FBQ1I7WUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUMsRUFBRTtnQkFDbkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7YUFDN0Q7U0FDRjtRQUNKLEdBQUc7SUFDSixDQUFDOzs7O0lBU0QsMkJBQTJCO1FBQ3pCLElBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUzs7OztZQUNuRixpQkFBaUIsQ0FBQyxFQUFFO2dCQUNsQixJQUFJLENBQUMscUJBQXFCLEdBQUcsaUJBQWlCLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQywwQkFBMEIsR0FBRyxpQkFBaUIsQ0FBQyw0QkFBNEIsQ0FBQztZQUNuRixDQUFDLEVBQ0Y7Ozs7O2dCQUNDLENBQUMsS0FBVSxFQUFFLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBQyxFQUFFLENBQUMsQ0FBQztnQkFDN0MsQ0FBQyxDQUFBLENBQUM7U0FDSDtJQUNILENBQUM7Ozs7OztJQUVELGNBQWMsQ0FBQyxVQUF1QixFQUFFLGNBQXNCO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLGtCQUFrQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDbkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzNELENBQUM7Ozs7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsbUJBQW1CLENBQUM7UUFDeEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUN0RCxDQUFDOzs7O0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVM7Ozs7UUFBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEVBQUMsQ0FBQztRQUNoRyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssa0JBQWtCLEVBQUU7WUFDOUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDaEM7YUFBTTtZQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1NBQ25EO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxxQkFBcUIsQ0FBQyxLQUFTO1FBQzlCLDBCQUEwQjtRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDOzs7O0lBRUQseUJBQXlCO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcscUJBQXFCLENBQUM7UUFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUM5QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU07Ozs7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssaUJBQWlCLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDeEgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVM7Ozs7UUFDN0MsYUFBYSxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNyQyxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7Ozs7SUFDRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUM3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQztRQUM5RCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQzdDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDO1FBQzlELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRywwQkFBMEIsQ0FBQztJQUM3QyxDQUFDOzs7O0lBRUQsdUJBQXVCOztjQUNmLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUTtRQUNyRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7WUFDL0IsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDaEU7aUJBQ0ksSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFO2dCQUNqRixJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNoRTtpQkFDSSxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNoRTtpQkFBTTtnQkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsUUFBUSxHQUFHLHFCQUFxQixDQUFDO2FBQ3ZDO1NBQ0Y7SUFFSCxDQUFDOzs7Ozs7SUFFRCxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsS0FBSztRQUMzQixJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QjthQUFNLElBQUksS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQywyQkFBMkIsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7Ozs7OztJQUVELGlCQUFpQixDQUFDLEdBQUcsRUFBRSxLQUFLO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxHQUFHLENBQUM7UUFDaEMsSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFO1lBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxtQkFBbUIsQ0FBQyxnQkFBcUI7UUFDdkMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFO1lBQ2hHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztTQUN6QzthQUFNO1lBQ0wsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcscUJBQXFCLENBQUM7UUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ2hFLENBQUM7Ozs7O0lBRUQsZUFBZSxDQUFDLE1BQWM7UUFDNUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFO1lBQ2hHLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztnQkFDNUIsbUNBQW1DO2FBQ3BDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLHFCQUFxQixDQUFDO1FBQ3RDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUNoRSxDQUFDOzs7O0lBRUQsZ0NBQWdDO1FBQzlCLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztTQUN0Qjs7Y0FDSyxlQUFlLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDeEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFDakcsUUFBUSxDQUFDLEVBQUU7WUFDVCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyw4QkFBOEIsQ0FBQzthQUNoRDtRQUNILENBQUM7Ozs7UUFDRCxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBQyxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDLEVBQ0YsQ0FBQztJQUVKLENBQUM7Ozs7OztJQUVELDBCQUEwQixDQUFDLGVBQXVCLEVBQUUsVUFBdUI7UUFDekUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztRQUN2RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxHQUFHLGdCQUFnQixDQUFDO0lBQ3ZELENBQUM7OztZQXBSRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsZzRUQUE2Qzs7YUFFOUM7Ozs7WUFmUSxXQUFXO1lBRFgsY0FBYztZQVNkLG1CQUFtQjtZQU5uQixrQkFBa0I7WUFDbEIsTUFBTTtZQUNOLGlCQUFpQjs7O2dDQWF2QixLQUFLLFNBQUMsbUJBQW1COzZCQUN6QixLQUFLOzZCQUNMLEtBQUs7NEJBQ0wsS0FBSzt3QkFDTCxLQUFLOzs7O0lBSk4sa0RBQTZEOztJQUM3RCwrQ0FBaUM7O0lBQ2pDLCtDQUFpQzs7SUFDakMsOENBQStCOztJQUMvQiwwQ0FBNEI7O0lBQzVCLGlEQUE0Qjs7SUFDNUIscURBQTZCOztJQUM3QixtREFBdUM7O0lBQ3ZDLCtDQUFxQzs7SUFDckMsNkNBQWlDOztJQUdqQyw2Q0FBb0I7O0lBQ3BCLHlDQUFpQjs7SUFDakIsNkNBQXFCOztJQUNyQiwyQ0FBd0I7O0lBQ3hCLG1EQUEyQjs7SUFDM0IscURBQThCOztJQUM5QixrREFBK0I7O0lBQy9CLDhDQUErQjs7SUFDL0IsOENBQStCOztJQUMvQiwrQ0FBZ0M7O0lBQ2hDLDREQUE2Qzs7SUFDN0MsK0NBQWdDOztJQUNoQyw4Q0FBMEI7O0lBQzFCLHNEQUF1Qzs7SUFDdkMsZ0RBQXdCOztJQUN4Qiw2Q0FBcUI7O0lBQ3JCLDJDQUFtQjs7SUFDbkIsb0RBQW9DOztJQUNwQyxnREFBd0I7O0lBQ3hCLDZDQUFxQjs7SUFDckIsK0NBQXVCOztJQUN2QiwyREFBMkM7O0lBQzNDLGdEQUFpQzs7SUFDakMsOENBQXNCOztJQUN0QiwyREFBNkU7O0lBOEQ3RSxnRUFJQzs7Ozs7SUFoRVcsNENBQWdDOzs7OztJQUMxQyw4Q0FBcUM7Ozs7O0lBQ3JDLG9EQUFnRDs7Ozs7SUFDaEQsbURBQThDOzs7OztJQUM5Qyx1Q0FBc0I7Ozs7O0lBQ3RCLGtEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVmdW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWZ1bmRzL3JlZnVuZHMuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCwgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJUmVmdW5kTGlzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZExpc3QnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPcmRlcnNsaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyc2xpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJUmVmdW5kUmVhc29ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZFJlYXNvbnMnO1xuaW1wb3J0IHsgSVJlZnVuZFN0YXR1cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZFN0YXR1cyc7XG5pbXBvcnQgeyBJUmVzdWJtaXRSZWZ1bmRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVzdWJtaXRSZWZ1bmRSZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcmVmdW5kLXN0YXR1cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWZ1bmQtc3RhdHVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVmdW5kLXN0YXR1cy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVmdW5kU3RhdHVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdMT0dHRURJTlVTRVJST0xFUycpIExPR0dFRElOVVNFUlJPTEVTOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBpc09sZFBjaXBhbE9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNOZXdQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICByZWZ1bmRTdGF0dXNGb3JtOiBGb3JtR3JvdXA7XG4gIHNlbGVjdGVkUmVmdW5kUmVhc29uOiBzdHJpbmc7XG4gIHJlamVjdGVkUmVmdW5kTGlzdDogSVJlZnVuZExpc3RbXSA9IFtdO1xuICBhcHByb3ZhbFN0YXR1cyA9ICdTZW50IGZvciBhcHByb3ZhbCc7XG4gIHJlamVjdFN0YXR1cyA9ICdVcGRhdGUgcmVxdWlyZWQnO1xuICAvLyBhcHByb3ZhbFN0YXR1cyA9ICdzZW50IGZvciBhcHByb3ZhbCc7XG4gIC8vIHJlamVjdFN0YXR1cyA9ICdzZW50IGJhY2snO1xuICBlcnJvck1lc3NhZ2UgPSBudWxsO1xuICB2aWV3TmFtZTogc3RyaW5nO1xuICByZWZ1bmRSZWFzb246IHN0cmluZztcbiAgcmVmdW5kbGlzdDogSVJlZnVuZExpc3Q7XG4gIGJzUGF5bWVudERjbk51bWJlcjogc3RyaW5nO1xuICBpc0NhbGxGcm9tUmVmdW5kTGlzdDogYm9vbGVhbjtcbiAgcmVmdW5kQnV0dG9uU3RhdGU6IHN0cmluZyA9ICcnO1xuICBpc0Ftb3VudEVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVhc29uRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYW1vdW50SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlZnVuZEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlZnVuZFJlYXNvbnM6IGFueVtdID0gW107XG4gIHJlZnVuZFN0YXR1c0hpc3RvcmllczogSVJlZnVuZFN0YXR1c1tdO1xuICByZWZ1bmRSZWZlcmVuY2U6IHN0cmluZztcbiAgcmVmdW5kQW1vdW50OiBzdHJpbmc7XG4gIHJlZnVuZENvZGU6IHN0cmluZztcbiAgaXNSZWZ1bmRCdG5EaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIG9sZFJlZnVuZFJlYXNvbjogc3RyaW5nO1xuICByZWZ1bmRyZWFzb246IHN0cmluZztcbiAgbmF2aWdhdGlvbnBhZ2U6IHN0cmluZztcbiAgaXNMYXN0VXBkYXRlZEJ5Q3VycmVudFVzZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBpc1Byb2Nlc3NSZWZ1bmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2hhbmdlZEFtb3VudDogbnVtYmVyO1xuICBhbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZCA9IFsncGF5bWVudHMtcmVmdW5kLWFwcHJvdmVyJywgJ3BheW1lbnRzLXJlZnVuZCddO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVmdW5kU2VydmljZTogUmVmdW5kc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIE9yZGVyc2xpc3RTZXJ2aWNlOiBPcmRlcnNsaXN0U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgIC8vIGlmICh0aGlzLmNoZWNrNEFsbG93ZWRSb2xlczJBY2Nlc3NSZWZ1bmQoKSkge1xuICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdBbGwnKTtcbiAgICB0aGlzLmJzUGF5bWVudERjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5pc0NhbGxGcm9tUmVmdW5kTGlzdCA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0NhbGxGcm9tUmVmdW5kTGlzdDtcbiAgICAvLyBpZih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSkge1xuICAgIC8vICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdhbmRzdWJtaXR2aWV3JztcbiAgICAvLyB9XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1JlZnVuZFN0YXR1c1ZpZXcpIHtcbiAgICAgIHRoaXMudmlld05hbWUgPSAncmVmdW5kdmlldyc7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldFJlZnVuZFZpZXcoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMucmVmdW5kbGlzdCA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRDQ0RDYXNlTnVtYmVyZm9yUmVmdW5kLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5jY2RDYXNlTnVtYmVyID0gZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlld05hbWUgPSAncmVmdW5kc3RhdHVzbGlzdCc7XG4gICAgICB0aGlzLnJlZnVuZFNlcnZpY2UuZ2V0UmVmdW5kU3RhdHVzTGlzdCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcmVmdW5kTGlzdCA9PiB7XG4gICAgICAgICAgdGhpcy5yZWplY3RlZFJlZnVuZExpc3QgPSByZWZ1bmRMaXN0WydyZWZ1bmRfbGlzdCddO1xuICAgICAgICB9XG4gICAgICApLFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgICAgdGhpcy5yZWZ1bmRTdGF0dXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGFtb3VudDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rKFxcLlswLTldezEsMn0pPyQnKVxuICAgICAgICBdKSksXG4gICAgICAgIHJlZnVuZFJlYXNvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICAgIHJlYXNvbjogbmV3IEZvcm1Db250cm9sKClcbiAgICAgIH0pO1xuXG4gICAgICBpZih0aGlzLnJlZnVuZGxpc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmdldFJlZnVuZHNTdGF0dXNIaXN0b3J5TGlzdCgpO1xuXG4gICAgICAgIGlmICh0aGlzLkxPR0dFRElOVVNFUlJPTEVTLnNvbWUoaSA9PiBpLmluY2x1ZGVzKCdwYXltZW50cy1yZWZ1bmQtYXBwcm92ZXInKSkpIHtcbiAgICAgICAgICB0aGlzLmlzUHJvY2Vzc1JlZnVuZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRCdXR0b25TdGF0ZSA9IHRoaXMucmVmdW5kbGlzdC5yZWZ1bmRfc3RhdHVzLm5hbWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmICh0aGlzLkxPR0dFRElOVVNFUlJPTEVTLnNvbWUoaSA9PiBpLmluY2x1ZGVzKCdwYXltZW50cy1yZWZ1bmQnKSkpIHtcbiAgICAgICAgICB0aGlzLmlzUHJvY2Vzc1JlZnVuZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucmVmdW5kQnV0dG9uU3RhdGUgPSB0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3N0YXR1cy5uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAvL31cbiAgfVxuICBcblxuICBjaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kLnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBnZXRSZWZ1bmRzU3RhdHVzSGlzdG9yeUxpc3QoKSB7XG4gICAgaWYodGhpcy5yZWZ1bmRsaXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnJlZnVuZFNlcnZpY2UuZ2V0UmVmdW5kU3RhdHVzSGlzdG9yeSh0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgc3RhdHVzSGlzdG9yeUxpc3QgPT4ge1xuICAgICAgICB0aGlzLnJlZnVuZFN0YXR1c0hpc3RvcmllcyA9IHN0YXR1c0hpc3RvcnlMaXN0LnN0YXR1c19oaXN0b3J5X2R0b19saXN0O1xuICAgICAgICB0aGlzLmlzTGFzdFVwZGF0ZWRCeUN1cnJlbnRVc2VyID0gc3RhdHVzSGlzdG9yeUxpc3QubGFzdF91cGRhdGVkX2J5X2N1cnJlbnRfdXNlcjtcbiAgICAgIH1cbiAgICApLFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLFwiXCIpO1xuICAgICAgfTsgXG4gICAgfVxuICB9XG5cbiAgZ29Ub1JlZnVuZFZpZXcocmVmdW5kbGlzdDogSVJlZnVuZExpc3QsIG5hdmlnYXRpb25wYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldFJlZnVuZFZpZXcocmVmdW5kbGlzdCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRDQ0RDYXNlTnVtYmVyKHRoaXMuY2NkQ2FzZU51bWJlcik7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZHN0YXR1c2xpc3QnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1JlZnVuZFN0YXR1c1ZpZXcgPSB0cnVlO1xuICAgIHRoaXMucmVmdW5kbGlzdCA9IHJlZnVuZGxpc3Q7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZShuYXZpZ2F0aW9ucGFnZSk7XG4gIH1cblxuICBsb2FkQ2FzZVRyYW5zYWN0aW9uUGFnZSgpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1JlZnVuZFN0YXR1c1ZpZXcgPSBmYWxzZTtcbiAgfVxuXG4gIGxvYWRSZWZ1bmRMaXN0UGFnZSgpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG5hdmlnYXRpb25QYWdlVmFsdWUoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMubmF2aWdhdGlvbnBhZ2UgPSBkYXRhKTtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9ucGFnZSA9PT0gJ2Nhc2V0cmFuc2FjdGlvbnMnKSB7XG4gICAgICB0aGlzLmxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdyZWZ1bmQtbGlzdCc7XG4gICAgfVxuICB9XG5cbiAgZ290b1Jldmlld0RldGFpbHNQYWdlKGV2ZW50OmFueSkge1xuICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1JlZnVuZFN0YXR1c1ZpZXcgPSB0cnVlO1xuICAgIHRoaXMubmdPbkluaXQoKTtcbiAgfVxuXG4gIGdvdG9SZXZpZXdBbmRSZVN1Ym1pdFBhZ2UoKSB7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdhbmRzdWJtaXR2aWV3JztcbiAgICB0aGlzLm9sZFJlZnVuZFJlYXNvbiA9IHRoaXMucmVmdW5kbGlzdC5yZWFzb247XG4gICAgdGhpcy5jaGFuZ2VkQW1vdW50ID0gdGhpcy5yZWZ1bmRsaXN0LmFtb3VudDtcbiAgICB0aGlzLnJlZnVuZHJlYXNvbiA9IHRoaXMucmVmdW5kU3RhdHVzSGlzdG9yaWVzLmZpbHRlcihkYXRhID0+IGRhdGEuc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICd1cGRhdGUgcmVxdWlyZWQnKVswXS5ub3RlcztcbiAgICB0aGlzLnJlZnVuZFNlcnZpY2UuZ2V0UmVmdW5kUmVhc29ucygpLnN1YnNjcmliZShcbiAgICAgIHJlZnVuZFJlYXNvbnMgPT4ge1xuICAgICAgICB0aGlzLnJlZnVuZFJlYXNvbnMgPSByZWZ1bmRSZWFzb25zO1xuICAgICAgfSk7XG4gIH1cbiAgZ290b1JlZnVuZFJlYXNvblBhZ2UoKSB7XG4gICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlJFRlVORExJU1QgPSBcInRydWVcIjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMudmlld05hbWUgPSAnaXNzdWVyZWZ1bmQnO1xuICB9XG5cbiAgZ290b0Ftb3VudFBhZ2UoKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuUkVGVU5ETElTVCA9IFwidHJ1ZVwiO1xuICAgIHRoaXMuaXNSZWZ1bmRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVI7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgIHRoaXMudmlld05hbWUgPSAncHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlJztcbiAgfVxuXG4gIGdvVG9SZXZpZXdBbmRTdWJtaXRWaWV3KCkge1xuICAgIGNvbnN0IHJlbWlzc2lvbmN0cmxzID0gdGhpcy5yZWZ1bmRTdGF0dXNGb3JtLmNvbnRyb2xzXG4gICAgaWYgKHRoaXMucmVmdW5kU3RhdHVzRm9ybS5kaXJ0eSkge1xuICAgICAgaWYgKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJykge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHJlbWlzc2lvbmN0cmxzWydyZWFzb24nXS52YWx1ZSA9PSAnJykge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdyZWFzb24nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVmdW5kbGlzdC5yZWFzb24gPSByZW1pc3Npb25jdHJsc1sncmVhc29uJ10udmFsdWU7XG4gICAgICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICByZXNldFJlbWlzc2lvbkZvcm0odmFsLCBmaWVsZCkge1xuICAgIGlmIChmaWVsZCA9PT0gJ0FsbCcpIHtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbMV07XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFsyXTtcbiAgICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IHZhbFszXTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkID09PSAnYW1vdW50JyB8fCBmaWVsZCA9PT0gJ0FsbCcpIHtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbMV07XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFsyXTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkID09PSAncmVhc29uJyB8fCBmaWVsZCA9PT0gJ0FsbCcpIHtcbiAgICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IHZhbFszXTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RSYWRpb0J1dHRvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24gPSBrZXk7XG4gICAgaWYgKGtleSA9PT0gJ090aGVyJykge1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWZ1bmRSZWFzb24gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVmdW5kTGlzdFJlYXNvbihyZWZ1bmRMaXN0UmVhc29uOiBhbnkpIHtcbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgJiYgIXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQpIHtcbiAgICAgIHRoaXMucmVmdW5kbGlzdC5yZWFzb24gPSByZWZ1bmRMaXN0UmVhc29uLnJlYXNvbjtcbiAgICAgIHRoaXMucmVmdW5kQ29kZSA9IHJlZnVuZExpc3RSZWFzb24uY29kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdhbmRzdWJtaXR2aWV3JztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID0gdGhpcy5jY2RDYXNlTnVtYmVyO1xuICB9XG5cbiAgZ2V0UmVmdW5kQW1vdW50KGFtb3VudDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkKSB7XG4gICAgICBpZiAoYW1vdW50ID4gMCkge1xuICAgICAgICB0aGlzLmNoYW5nZWRBbW91bnQgPSBhbW91bnQ7XG4gICAgICAgIC8vIHRoaXMucmVmdW5kbGlzdC5hbW91bnQgPSBhbW91bnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNSZWZ1bmRCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUiA9IHRoaXMuY2NkQ2FzZU51bWJlcjtcbiAgfVxuXG4gIGdvdG9SZXZpZXdSZWZ1bmRDb25maXJtYXRpb25QYWdlKCkge1xuICAgIGlmICh0aGlzLm9sZFJlZnVuZFJlYXNvbiA9PT0gdGhpcy5yZWZ1bmRsaXN0LnJlYXNvbikge1xuICAgICAgdGhpcy5yZWZ1bmRDb2RlID0gJyc7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VibWl0UmVxdWVzdCA9IG5ldyBJUmVzdWJtaXRSZWZ1bmRSZXF1ZXN0KHRoaXMucmVmdW5kQ29kZSwgIHRoaXMuY2hhbmdlZEFtb3VudCk7XG4gICAgdGhpcy5yZWZ1bmRTZXJ2aWNlLnBhdGNoUmVzdWJtaXRSZWZ1bmQocmVzdWJtaXRSZXF1ZXN0LCB0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICB0aGlzLnJlZnVuZFJlZmVyZW5jZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9yZWZlcmVuY2U7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRBbW91bnQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50O1xuICAgICAgICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3cmVmdW5kY29uZmlybWF0aW9ucGFnZSc7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLnJlcGxhY2UoL1wiL2csXCJcIik7XG4gICAgICB9XG4gICAgKTtcblxuICB9XG5cbiAgZ29Ub1JlZnVuZFByb2Nlc3NDb21wb25lbnQocmVmdW5kUmVmZXJlbmNlOiBzdHJpbmcsIHJlZnVuZExpc3Q6IElSZWZ1bmRMaXN0KSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnJlZnVuZGxpc3Rzb3VyY2UgPSByZWZ1bmRMaXN0O1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5yZWZ1bmRSZWZlcmVuY2UgPSByZWZ1bmRSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3Byb2Nlc3MtcmVmdW5kJztcbiAgfVxuXG59XG4iXX0=
|
|
676
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3JlZnVuZC1zdGF0dXMvcmVmdW5kLXN0YXR1cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxXQUFXLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7O01BSWhGLGNBQWMsR0FBRyx1QkFBdUI7QUFPOUMsTUFBTSxPQUFPLHFCQUFxQjs7Ozs7Ozs7O0lBa0RoQyxZQUFvQixXQUF3QixFQUNsQyxhQUE2QixFQUM3QixtQkFBd0MsRUFDeEMsbUJBQXdDLEVBQ3hDLGlCQUFvQyxFQUNwQyxrQkFBc0M7UUFMNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBQzdCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJB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QUFzQjs7SUFDdEIsa0RBQTJCOztJQUMzQix3Q0FBa0I7O0lBQ2xCLG1EQUEyQjs7SUFDM0IscUNBQWM7O0lBQ2QsMkNBQXlCOztJQUN6QiwyREFBNkU7O0lBNkQ3RSxnRUFJQzs7Ozs7SUEvRFcsNENBQWdDOzs7OztJQUMxQyw4Q0FBcUM7Ozs7O0lBQ3JDLG9EQUFnRDs7Ozs7SUFDaEQsb0RBQWdEOzs7OztJQUNoRCxrREFBNEM7Ozs7O0lBQzVDLG1EQUE4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVmdW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWZ1bmRzL3JlZnVuZHMuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElSZWZ1bmRMaXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kTGlzdCc7XG5pbXBvcnQgeyBJUmVmdW5kc05vdGlmaWNhdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRzTm90aWZpY2F0aW9ucyc7XG5pbXBvcnQgeyBPcmRlcnNsaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyc2xpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJUHV0Tm90aWZpY2F0aW9uUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVB1dE5vdGlmaWNhdGlvblJlcXVlc3QnO1xuaW1wb3J0IHsgSVJlZnVuZENvbnRhY3REZXRhaWxzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kQ29udGFjdERldGFpbHMnO1xuaW1wb3J0IHsgSVJlZnVuZFN0YXR1cyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZFN0YXR1cyc7XG5pbXBvcnQgeyBJUmVzdWJtaXRSZWZ1bmRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVzdWJtaXRSZWZ1bmRSZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IElQYXltZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudCc7XG5pbXBvcnQgeyBJRmVlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRmVlJztcbmltcG9ydCB7IElSZWZ1bmRGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRGZWUnO1xuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcmVmdW5kLXN0YXR1cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWZ1bmQtc3RhdHVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVmdW5kLXN0YXR1cy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVmdW5kU3RhdHVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdMT0dHRURJTlVTRVJST0xFUycpIExPR0dFRElOVVNFUlJPTEVTOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBpc09sZFBjaXBhbE9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNOZXdQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBvcmRlclBhcnR5OiBzdHJpbmc7XG4gIHJlZnVuZFN0YXR1c0Zvcm06IEZvcm1Hcm91cDtcbiAgc2VsZWN0ZWRSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgcmVqZWN0ZWRSZWZ1bmRMaXN0OiBJUmVmdW5kTGlzdFtdID0gW107XG4gIG5vdGlmaWNhdGlvbkxpc3Q6IGFueTtcbiAgbm90aWZpY2F0aW9uOmFueTtcbiAgYXBwcm92YWxTdGF0dXMgPSAnU2VudCBmb3IgYXBwcm92YWwnO1xuICByZWplY3RTdGF0dXMgPSAnVXBkYXRlIHJlcXVpcmVkJztcbiAgZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgdmlld05hbWU6IHN0cmluZztcbiAgcmVmdW5kUmVhc29uOiBzdHJpbmc7XG4gIHJlZnVuZGxpc3Q6IElSZWZ1bmRMaXN0O1xuICBic1BheW1lbnREY25OdW1iZXI6IHN0cmluZztcbiAgaXNDYWxsRnJvbVJlZnVuZExpc3Q6IGJvb2xlYW47XG4gIHJlZnVuZEJ1dHRvblN0YXRlOiBzdHJpbmcgPSAnJztcbiAgaXNBbW91bnRFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlYXNvbkVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGFtb3VudEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICByZWZ1bmRIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICByZWZ1bmRSZWFzb25zOiBhbnlbXSA9IFtdO1xuICByZWZ1bmRTdGF0dXNIaXN0b3JpZXM6IElSZWZ1bmRTdGF0dXNbXTtcbiAgcmVmdW5kTm90aWZpY2F0aW9uczogSVJlZnVuZFN0YXR1c1tdO1xuICBpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNFZGl0RGV0YWlsc0NsaWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNFZGl0QWRkcmVzc0RlYXRpbHNDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGFkZHJlc3NEZXRhaWxzOiBJUmVmdW5kQ29udGFjdERldGFpbHM7XG4gIHJlZnVuZFJlZmVyZW5jZTogc3RyaW5nO1xuICByZWZ1bmRBbW91bnQ6IHN0cmluZztcbiAgcmVmdW5kQ29kZTogc3RyaW5nO1xuICBpc1JlZnVuZEJ0bkRpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgb2xkUmVmdW5kUmVhc29uOiBzdHJpbmc7XG4gIHJlZnVuZHJlYXNvbjogc3RyaW5nO1xuICBuYXZpZ2F0aW9ucGFnZTogc3RyaW5nO1xuICBpc0xhc3RVcGRhdGVkQnlDdXJyZW50VXNlcjogYm9vbGVhbiA9IHRydWU7XG4gIGlzUHJvY2Vzc1JlZnVuZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjaGFuZ2VkQW1vdW50OiBudW1iZXI7XG4gIGlzUmVtaXNzaW9uc01hdGNoOiBib29sZWFuO1xuICBwYXltZW50OiBJUGF5bWVudDtcbiAgY2hhbmdlUmVmdW5kUmVhc29uOiBzdHJpbmc7XG4gIGZlZXM6IElGZWUgW107XG4gIHJlZnVuZEZlZXM6IElSZWZ1bmRGZWVbXTtcbiAgYWxsb3dlZFJvbGVzVG9BY2Nlc3NSZWZ1bmQgPSBbJ3BheW1lbnRzLXJlZnVuZC1hcHByb3ZlcicsICdwYXltZW50cy1yZWZ1bmQnXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlZnVuZFNlcnZpY2U6IFJlZnVuZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBPcmRlcnNsaXN0U2VydmljZTogT3JkZXJzbGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuO1xuICAgIHRoaXMuaXNDYWxsRnJvbVJlZnVuZExpc3QgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNDYWxsRnJvbVJlZnVuZExpc3Q7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1JlZnVuZFN0YXR1c1ZpZXcpIHtcbiAgICAgIHRoaXMudmlld05hbWUgPSAncmVmdW5kdmlldyc7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldFJlZnVuZFZpZXcoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMucmVmdW5kbGlzdCA9IGRhdGEpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRDQ0RDYXNlTnVtYmVyZm9yUmVmdW5kLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5jY2RDYXNlTnVtYmVyID0gZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlld05hbWUgPSAncmVmdW5kc3RhdHVzbGlzdCc7XG4gICAgICB0aGlzLnJlZnVuZFNlcnZpY2UuZ2V0UmVmdW5kU3RhdHVzTGlzdCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcmVmdW5kTGlzdCA9PiB7XG4gICAgICAgICAgdGhpcy5yZWplY3RlZFJlZnVuZExpc3QgPSByZWZ1bmRMaXN0WydyZWZ1bmRfbGlzdCddO1xuICAgICAgICAgIC8vdGhpcy5yZWZ1bmRGZWVzID0gdGhpcy5yZWplY3RlZFJlZnVuZExpc3RbJ3JlZnVuZF9mZWVzJ107XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICApLFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgICAgdGhpcy5yZWZ1bmRTdGF0dXNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGFtb3VudDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rKFxcLlswLTldezEsMn0pPyQnKVxuICAgICAgICBdKSksXG4gICAgICAgIHJlZnVuZFJlYXNvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICAgIHJlYXNvbjogbmV3IEZvcm1Db250cm9sKClcbiAgICAgIH0pO1xuXG4gICAgICBpZih0aGlzLnJlZnVuZGxpc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmdldFJlZnVuZHNOb3RpZmljYXRpb24oKTtcbiAgICAgICAgdGhpcy5nZXRSZWZ1bmRzU3RhdHVzSGlzdG9yeUxpc3QoKTtcblxuICAgICAgICBpZiAodGhpcy5MT0dHRURJTlVTRVJST0xFUy5zb21lKGkgPT4gaS5pbmNsdWRlcygncGF5bWVudHMtcmVmdW5kLWFwcHJvdmVyJykpKSB7XG4gICAgICAgICAgdGhpcy5pc1Byb2Nlc3NSZWZ1bmQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucmVmdW5kQnV0dG9uU3RhdGUgPSB0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3N0YXR1cy5uYW1lO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAodGhpcy5MT0dHRURJTlVTRVJST0xFUy5zb21lKGkgPT4gaS5pbmNsdWRlcygncGF5bWVudHMtcmVmdW5kJykpKSB7XG4gICAgICAgICAgdGhpcy5pc1Byb2Nlc3NSZWZ1bmQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlZnVuZEJ1dHRvblN0YXRlID0gdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9zdGF0dXMubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbiAgXG5cbiAgY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1JlZnVuZCA9ICgpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZC5zb21lKHJvbGUgPT5cbiAgICAgIHRoaXMuTE9HR0VESU5VU0VSUk9MRVMuaW5kZXhPZihyb2xlKSAhPT0gLTFcbiAgICApO1xuICB9XG5cbiAgZ2V0UmVmdW5kc1N0YXR1c0hpc3RvcnlMaXN0KCkge1xuICAgIGlmKHRoaXMucmVmdW5kbGlzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5yZWZ1bmRTZXJ2aWNlLmdldFJlZnVuZFN0YXR1c0hpc3RvcnkodGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHN0YXR1c0hpc3RvcnlMaXN0ID0+IHtcbiAgICAgICAgdGhpcy5yZWZ1bmRTdGF0dXNIaXN0b3JpZXMgPSBzdGF0dXNIaXN0b3J5TGlzdC5zdGF0dXNfaGlzdG9yeV9kdG9fbGlzdDtcbiAgICAgICAgdGhpcy5pc0xhc3RVcGRhdGVkQnlDdXJyZW50VXNlciA9IHN0YXR1c0hpc3RvcnlMaXN0Lmxhc3RfdXBkYXRlZF9ieV9jdXJyZW50X3VzZXI7XG4gICAgICB9XG4gICAgKSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgIH07IFxuICAgIH1cbiAgfVxuXG4gIGdldFJlZnVuZHNOb3RpZmljYXRpb24oKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdldFJlZnVuZE5vdGlmaWNhdGlvbih0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcmVmdW5kc05vdGlmaWNhdGlvbiA9PiB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uTGlzdCA9IHJlZnVuZHNOb3RpZmljYXRpb25bJ25vdGlmaWNhdGlvbnMnXTtcbiAgICAgIH1cbiAgICApLFxuICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLnJlcGxhY2UoL1wiL2csXCJcIik7XG4gICAgfTsgXG4gIH1cblxuICBnb1RvUmVmdW5kVmlldyhyZWZ1bmRsaXN0OiBJUmVmdW5kTGlzdCwgbmF2aWdhdGlvbnBhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0UmVmdW5kVmlldyhyZWZ1bmRsaXN0KTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldENDRENhc2VOdW1iZXIodGhpcy5jY2RDYXNlTnVtYmVyKTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kc3RhdHVzbGlzdCc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgdGhpcy5yZWZ1bmRsaXN0ID0gcmVmdW5kbGlzdDtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKG5hdmlnYXRpb25wYWdlKTtcbiAgfVxuXG4gIGxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICB9XG5cbiAgbG9hZFJlZnVuZExpc3RQYWdlKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0bmF2aWdhdGlvblBhZ2VWYWx1ZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5uYXZpZ2F0aW9ucGFnZSA9IGRhdGEpO1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25wYWdlID09PSAnY2FzZXRyYW5zYWN0aW9ucycpIHtcbiAgICAgIHRoaXMubG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZC1saXN0JztcbiAgICB9XG4gIH1cblxuICBnb3RvUmV2aWV3RGV0YWlsc1BhZ2UoZXZlbnQ6YW55KSB7XG4gICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgdGhpcy5uZ09uSW5pdCgpO1xuICB9XG5cbiAgZ290b1Jldmlld0FuZFJlU3VibWl0UGFnZSgpIHtcbiAgICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld2FuZHN1Ym1pdHZpZXcnO1xuICAgIHRoaXMub2xkUmVmdW5kUmVhc29uID0gdGhpcy5yZWZ1bmRsaXN0LnJlYXNvbjtcbiAgICB0aGlzLmNoYW5nZWRBbW91bnQgPSB0aGlzLnJlZnVuZGxpc3QuYW1vdW50O1xuICAgIHRoaXMucmVmdW5kcmVhc29uID0gdGhpcy5yZWZ1bmRTdGF0dXNIaXN0b3JpZXMuZmlsdGVyKGRhdGEgPT4gZGF0YS5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZGF0ZSByZXF1aXJlZCcpWzBdLm5vdGVzO1xuICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRSZWFzb25zKCkuc3Vic2NyaWJlKFxuICAgICAgcmVmdW5kUmVhc29ucyA9PiB7XG4gICAgICAgIHRoaXMucmVmdW5kUmVhc29ucyA9IHJlZnVuZFJlYXNvbnM7XG4gICAgICB9KTtcbiAgfVxuICBnb3RvUmVmdW5kUmVhc29uUGFnZShyZWZ1bmRSZWFzb246c3RyaW5nKSB7XG4gICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlJFRlVORExJU1QgPSBcInRydWVcIjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlUmVmdW5kUmVhc29uID0gcmVmdW5kUmVhc29uO1xuICAgIHRoaXMudmlld05hbWUgPSAnaXNzdWVyZWZ1bmRwYWdlMSc7XG4gIH1cblxuICBnb3RvQW1vdW50UGFnZSgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5SRUZVTkRMSVNUID0gXCJ0cnVlXCI7XG4gICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgaWYodGhpcy5yZWZ1bmRsaXN0LnJlYXNvbiA9PSAnUmV0cm9zcGVjdGl2ZSByZW1pc3Npb24nKSB7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2UnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdOYW1lID0gJ2lzc3VlcmVmdW5kJztcbiAgICB9XG4gIH1cblxuICBnb1RvUmV2aWV3QW5kU3VibWl0VmlldygpIHtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscyA9IHRoaXMucmVmdW5kU3RhdHVzRm9ybS5jb250cm9sc1xuICAgIGlmICh0aGlzLnJlZnVuZFN0YXR1c0Zvcm0uZGlydHkpIHtcbiAgICAgIGlmIChyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChyZW1pc3Npb25jdHJsc1sncmVhc29uJ10udmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdLCAncmVhc29uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlZnVuZGxpc3QucmVhc29uID0gcmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnZhbHVlO1xuICAgICAgICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld2FuZHN1Ym1pdHZpZXcnO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgcmVzZXRSZW1pc3Npb25Gb3JtKHZhbCwgZmllbGQpIHtcbiAgICBpZiAoZmllbGQgPT09ICdBbGwnKSB7XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbMl07XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbM107XG4gICAgfSBlbHNlIGlmIChmaWVsZCA9PT0gJ2Ftb3VudCcgfHwgZmllbGQgPT09ICdBbGwnKSB7XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbMl07XG4gICAgfSBlbHNlIGlmIChmaWVsZCA9PT0gJ3JlYXNvbicgfHwgZmllbGQgPT09ICdBbGwnKSB7XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbM107XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0UmFkaW9CdXR0b24oa2V5LCB2YWx1ZSkge1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uID0ga2V5O1xuICAgIGlmIChrZXkgPT09ICdPdGhlcicpIHtcbiAgICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmdW5kUmVhc29uID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIGdldFJlZnVuZExpc3RSZWFzb24ocmVmdW5kTGlzdFJlYXNvbjogYW55KSB7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkKSB7XG4gICAgICB0aGlzLnJlZnVuZGxpc3QucmVhc29uID0gcmVmdW5kTGlzdFJlYXNvbi5yZWFzb247XG4gICAgICB0aGlzLnJlZnVuZGxpc3QuY29kZSA9IHJlZnVuZExpc3RSZWFzb24uY29kZTtcbiAgICAgIHRoaXMucmVmdW5kQ29kZSA9IHJlZnVuZExpc3RSZWFzb24uY29kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdhbmRzdWJtaXR2aWV3JztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID0gdGhpcy5jY2RDYXNlTnVtYmVyO1xuICB9XG5cbiAgZ2V0UmVmdW5kQW1vdW50KGFtb3VudDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkKSB7XG4gICAgICBpZiAoYW1vdW50ID4gMCkge1xuICAgICAgICB0aGlzLmNoYW5nZWRBbW91bnQgPSBhbW91bnQ7XG4gICAgICAgIC8vIHRoaXMucmVmdW5kbGlzdC5hbW91bnQgPSBhbW91bnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNSZWZ1bmRCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUiA9IHRoaXMuY2NkQ2FzZU51bWJlcjtcbiAgfVxuXG4gIGdldFJlZnVuZEZlZXMoZmVlczogSUZlZVtdKVxuICB7XG4gICAgdGhpcy5mZWVzID0gZmVlcztcbiAgICB0aGlzLnJlZnVuZEZlZXMgID0gdGhpcy5mZWVzLm1hcChvYmogPT4gKHsgZmVlX2lkOiBvYmouaWQsIGNvZGU6IG9iai5jb2RlLCB2ZXJzaW9uOm9iai52ZXJzaW9uLCB2b2x1bWU6IG9iai52b2x1bWUscmVmdW5kX2Ftb3VudDpvYmoucmVmdW5kX2Ftb3VudCB9KSk7XG4gIH1cblxuICBnb3RvUmV2aWV3UmVmdW5kQ29uZmlybWF0aW9uUGFnZSgpIHtcbiAgICAvLyBpZiAodGhpcy5vbGRSZWZ1bmRSZWFzb24gPT09IHRoaXMucmVmdW5kbGlzdC5yZWFzb24pIHtcbiAgICAvLyAgIHRoaXMucmVmdW5kQ29kZSA9ICcnO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5yZWZ1bmRGZWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVmdW5kRmVlcyA9IHRoaXMucmVmdW5kbGlzdFsncmVmdW5kX2ZlZXMnXTtcbiAgICB9XG4gICAgdGhpcy5yZWZ1bmRDb2RlID0gdGhpcy5yZWZ1bmRsaXN0LmNvZGU7XG4gICAgY29uc3QgcmVzdWJtaXRSZXF1ZXN0ID0gbmV3IElSZXN1Ym1pdFJlZnVuZFJlcXVlc3QodGhpcy5yZWZ1bmRDb2RlLCAgdGhpcy5jaGFuZ2VkQW1vdW50LCB0aGlzLnJlZnVuZGxpc3QuY29udGFjdF9kZXRhaWxzLCB0aGlzLnJlZnVuZEZlZXMpO1xuICAgIHRoaXMucmVmdW5kU2VydmljZS5wYXRjaFJlc3VibWl0UmVmdW5kKHJlc3VibWl0UmVxdWVzdCwgdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRSZWZlcmVuY2UgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfcmVmZXJlbmNlO1xuICAgICAgICAgIHRoaXMucmVmdW5kQW1vdW50ID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudDtcbiAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLFwiXCIpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnb3RvRWRpdEFkZHJlc3NEZXRhaWxzKG5vdGU6IElSZWZ1bmRzTm90aWZpY2F0aW9ucykge1xuICAgIHRoaXMubm90aWZpY2F0aW9uID0gbm90ZTtcbiAgICB0aGlzLmlzRWRpdERldGFpbHNDbGlja2VkID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdOYW1lID0gJ3JlZnVuZEVkaXRWaWV3J1xuICB9XG4gIGdldENvbnRhY3REZXRhaWxzKG9iajpJUmVmdW5kQ29udGFjdERldGFpbHMpIHtcbiAgICB0aGlzLmFkZHJlc3NEZXRhaWxzID0gb2JqO1xuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3ZWRpdGRldGFpbHNjb25maXJtYXRpb25wYWdlJztcbiAgfVxuICBnZXRDb250YWN0RGV0YWlsc0ZvclJlZnVuZExpc3Qob2JqOklSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIHRoaXMucmVmdW5kbGlzdC5jb250YWN0X2RldGFpbHMgPSBvYmo7XG4gICAgdGhpcy5pc0VkaXREZXRhaWxzQ2xpY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWZ1bmRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gIH1cbiAgZ290b0VkaXREZXRhaWxzUGFnZShub3RlPzogYW55KSB7XG4gICAgaWYobm90ZSkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSB7IGNvbnRhY3RfZGV0YWlsczogbm90ZSwgbm90aWZpY2F0aW9uX3R5cGU6IG5vdGUubm90aWZpY2F0aW9uX3R5cGUgfTtcbiAgICB9XG4gICAgdGhpcy5pc0VkaXREZXRhaWxzQ2xpY2tlZCA9IHRydWU7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmRFZGl0VmlldydcbiAgfVxuICBzdWJtaXRFZGl0RGV0YWlsKCkge1xuICAgIHRoaXMuaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzID0gZmFsc2U7XG4gICAgY29uc3QgY29udGFjdERldGFpbHMgPSB0aGlzLmFkZHJlc3NEZXRhaWxzLm5vdGlmaWNhdGlvbl90eXBlID09PSAnRU1BSUwnID8gdGhpcy5hZGRyZXNzRGV0YWlscy5lbWFpbCA6XG4gICAgICB7XG4gICAgICAgIGFkZHJlc3NfbGluZTogdGhpcy5hZGRyZXNzRGV0YWlscy5hZGRyZXNzX2xpbmUsXG4gICAgICAgIGNpdHk6IHRoaXMuYWRkcmVzc0RldGFpbHMuY2l0eSxcbiAgICAgICAgY291bnR5OiB0aGlzLmFkZHJlc3NEZXRhaWxzLmNvdW50eSxcbiAgICAgICAgY291bnRyeTogdGhpcy5hZGRyZXNzRGV0YWlscy5jb3VudHJ5LFxuICAgICAgICBwb3N0YWxfY29kZTogdGhpcy5hZGRyZXNzRGV0YWlscy5wb3N0YWxfY29kZSxcbiAgICAgIH07XG4gICAgY29uc3QgcmVzZW5kUmVxdWVzdCA9IG5ldyBJUHV0Tm90aWZpY2F0aW9uUmVxdWVzdChjb250YWN0RGV0YWlscywgdGhpcy5hZGRyZXNzRGV0YWlscy5ub3RpZmljYXRpb25fdHlwZSk7XG5cbiAgICB0aGlzLnJlZnVuZFNlcnZpY2UucHV0UmVzZW5kT3JFZGl0KHJlc2VuZFJlcXVlc3QsIHRoaXMucmVmdW5kbGlzdC5yZWZ1bmRfcmVmZXJlbmNlLCB0aGlzLmFkZHJlc3NEZXRhaWxzLm5vdGlmaWNhdGlvbl90eXBlKS5zdWJzY3JpYmUoXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5pc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgPSByZXNwb25zZTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzUmVzZW5kT3BlcmF0aW9uU3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLnJlcGxhY2UoL1wiL2csXCJcIik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdXRSZXNlbmQobm90aWZpY2F0aW9uOiBJUmVmdW5kc05vdGlmaWNhdGlvbnMpIHtcbiAgICB0aGlzLmlzUmVzZW5kT3BlcmF0aW9uU3VjY2VzcyA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbnRhY3REZXRhaWxzID0gbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbl90eXBlID09PSAnRU1BSUwnID8gbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5lbWFpbCA6XG4gICAgICB7XG4gICAgICAgIGFkZHJlc3NfbGluZSA6bm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5hZGRyZXNzX2xpbmUsXG4gICAgICAgIGNpdHk6IG5vdGlmaWNhdGlvbi5jb250YWN0X2RldGFpbHMuY2l0eSxcbiAgICAgICAgY291bnR5OiBub3RpZmljYXRpb24uY29udGFjdF9kZXRhaWxzLmNvdW50eSxcbiAgICAgICAgY291bnRyeTogbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5jb3VudHJ5LFxuICAgICAgICBwb3N0YWxfY29kZTogbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5wb3N0YWxfY29kZSxcbiAgICAgIH07XG4gICAgY29uc3QgcmVzZW5kUmVxdWVzdCA9IG5ldyBJUHV0Tm90aWZpY2F0aW9uUmVxdWVzdChjb250YWN0RGV0YWlscywgbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbl90eXBlKTtcblxuICAgIHRoaXMucmVmdW5kU2VydmljZS5wdXRSZXNlbmRPckVkaXQocmVzZW5kUmVxdWVzdCwgdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9yZWZlcmVuY2UsIG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25fdHlwZSkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzID0gcmVzcG9uc2U7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLFwiXCIpO1xuICAgICAgfVxuICAgICk7XG5cbiAgfVxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlQ2FuY2VsQnRuQ2xpY2tlZChFdmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMudmlld05hbWUgID0gJ3JlZnVuZHN0YXR1c2xpc3QnO1xuICB9XG5cbiAgZ29Ub1JlZnVuZFByb2Nlc3NDb21wb25lbnQocmVmdW5kUmVmZXJlbmNlOiBzdHJpbmcsIHJlZnVuZExpc3Q6IElSZWZ1bmRMaXN0KSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnJlZnVuZGxpc3Rzb3VyY2UgPSByZWZ1bmRMaXN0O1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5yZWZ1bmRSZWZlcmVuY2UgPSByZWZ1bmRSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheUJ1YmJsZSA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3Byb2Nlc3MtcmVmdW5kJztcbiAgfVxuXG59XG4iXX0=
|