@hmcts/ccpay-web-component 4.0.0-beta97 → 4.0.1-beta2
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 +6480 -2353
- 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 +33 -25
- package/esm2015/lib/components/add-remission/add-remission.component.js +742 -138
- package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +315 -310
- package/esm2015/lib/components/card-details/card-details.component.js +22 -57
- package/esm2015/lib/components/case-transactions/case-transactions.component.js +1081 -333
- package/esm2015/lib/components/error-banner/error-banner.component.js +5 -17
- package/esm2015/lib/components/fee-summary/fee-summary.component.js +245 -266
- package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +137 -156
- package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +178 -178
- package/esm2015/lib/components/page-not-found.component.js +3 -4
- package/esm2015/lib/components/payment-list/payment-list.component.js +22 -80
- package/esm2015/lib/components/payment-view/payment-view.component.js +269 -127
- package/esm2015/lib/components/pba-details/pba-details.component.js +5 -39
- package/esm2015/lib/components/process-refund/process-refund.component.js +314 -0
- package/esm2015/lib/components/processed-payments/processed-payments.component.js +72 -0
- package/esm2015/lib/components/refund-list/refund-list.component.js +140 -0
- package/esm2015/lib/components/refund-status/refund-status.component.js +487 -0
- package/esm2015/lib/components/refunds/refunds.component.js +23 -0
- package/esm2015/lib/components/reports/reports.component.js +89 -112
- package/esm2015/lib/components/status-history/status-history.component.js +28 -35
- package/esm2015/lib/components/table/table.component.js +158 -0
- package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +178 -88
- package/esm2015/lib/interfaces/AddRemissionRequest.js +6 -7
- package/esm2015/lib/interfaces/AddRetroRemissionRequest.js +21 -0
- package/esm2015/lib/interfaces/AllocatePaymentRequest.js +11 -9
- package/esm2015/lib/interfaces/IAllocationPaymentsRequest.js +2 -3
- package/esm2015/lib/interfaces/IBSPayments.js +38 -35
- package/esm2015/lib/interfaces/ICardDetails.js +14 -13
- package/esm2015/lib/interfaces/IFee.js +44 -29
- package/esm2015/lib/interfaces/IOrderReferenceFee.js +25 -0
- package/esm2015/lib/interfaces/IPatchRefundAction.js +15 -0
- package/esm2015/lib/interfaces/IPayment.js +56 -55
- package/esm2015/lib/interfaces/IPaymentGroup.js +12 -11
- package/esm2015/lib/interfaces/IPaymentStatus.js +2 -3
- package/esm2015/lib/interfaces/IPaymentView.js +17 -0
- package/esm2015/lib/interfaces/IPayments.js +6 -5
- package/esm2015/lib/interfaces/IRefundAction.js +15 -0
- package/esm2015/lib/interfaces/IRefundList.js +29 -0
- package/esm2015/lib/interfaces/IRefundReasons.js +17 -0
- package/esm2015/lib/interfaces/IRefundRejectReason.js +15 -0
- package/esm2015/lib/interfaces/IRefundStatus.js +23 -0
- package/esm2015/lib/interfaces/IRemission.js +18 -17
- package/esm2015/lib/interfaces/IResubmitRefundRequest.js +21 -0
- package/esm2015/lib/interfaces/IStatusHistories.js +12 -11
- package/esm2015/lib/interfaces/IStatusHistory.js +14 -13
- package/esm2015/lib/interfaces/IssueRefundRequest.js +25 -0
- package/esm2015/lib/interfaces/PayhubAntennaRequest.js +28 -0
- package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +7 -12
- package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +17 -0
- package/esm2015/lib/interfaces/PostRefundRetroRemission.js +21 -0
- package/esm2015/lib/interfaces/RefundsRequest.js +21 -0
- package/esm2015/lib/interfaces/UnidentifiedPaymentsRequest.js +2 -3
- package/esm2015/lib/interfaces/UnsolicitedPaymentsRequest.js +2 -3
- package/esm2015/lib/payment-lib.component.js +112 -18
- package/esm2015/lib/payment-lib.module.js +33 -6
- package/esm2015/lib/payment-lib.service.js +18 -4
- package/esm2015/lib/pipes/capitalize.pipe.js +24 -0
- package/esm2015/lib/pipes/ccd-hyphens.pipe.js +3 -4
- package/esm2015/lib/pipes/key-value.pipe.js +3 -4
- package/esm2015/lib/pipes/sanitize-html.pipe.js +7 -5
- package/esm2015/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +52 -14
- package/esm2015/lib/services/card-details/card-details.service.js +19 -8
- package/esm2015/lib/services/case-transactions/case-transactions.service.js +19 -8
- package/esm2015/lib/services/orderslist.service.js +211 -0
- package/esm2015/lib/services/payment-list/payment-list.service.js +19 -8
- package/esm2015/lib/services/payment-view/payment-view.service.js +100 -13
- package/esm2015/lib/services/refunds/refunds.service.js +196 -0
- package/esm2015/lib/services/shared/error-handler.service.js +6 -4
- package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +17 -8
- package/esm2015/lib/services/shared/logger/console-logger.service.js +7 -5
- package/esm2015/lib/services/shared/logger/logger.service.js +7 -5
- package/esm2015/lib/services/status-history/status-history.service.js +19 -8
- package/esm2015/lib/services/xl-file/xl-file.service.js +57 -50
- package/esm2015/public_api.js +1 -2
- package/esm5/hmcts-ccpay-web-component.js +33 -25
- package/esm5/lib/components/add-remission/add-remission.component.js +807 -47
- package/esm5/lib/components/allocate-payments/allocate-payments.component.js +328 -107
- package/esm5/lib/components/card-details/card-details.component.js +22 -9
- package/esm5/lib/components/case-transactions/case-transactions.component.js +1183 -85
- package/esm5/lib/components/error-banner/error-banner.component.js +3 -4
- package/esm5/lib/components/fee-summary/fee-summary.component.js +252 -91
- package/esm5/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +136 -45
- package/esm5/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +179 -65
- package/esm5/lib/components/page-not-found.component.js +3 -4
- package/esm5/lib/components/payment-list/payment-list.component.js +21 -8
- package/esm5/lib/components/payment-view/payment-view.component.js +318 -17
- package/esm5/lib/components/pba-details/pba-details.component.js +5 -6
- package/esm5/lib/components/process-refund/process-refund.component.js +336 -0
- package/esm5/lib/components/processed-payments/processed-payments.component.js +83 -0
- package/esm5/lib/components/refund-list/refund-list.component.js +143 -0
- package/esm5/lib/components/refund-status/refund-status.component.js +545 -0
- package/esm5/lib/components/refunds/refunds.component.js +29 -0
- package/esm5/lib/components/reports/reports.component.js +92 -23
- package/esm5/lib/components/status-history/status-history.component.js +27 -9
- package/esm5/lib/components/table/table.component.js +188 -0
- package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +188 -24
- package/esm5/lib/interfaces/AddRemissionRequest.js +5 -6
- package/esm5/lib/interfaces/AddRetroRemissionRequest.js +19 -0
- package/esm5/lib/interfaces/AllocatePaymentRequest.js +9 -8
- package/esm5/lib/interfaces/IAllocationPaymentsRequest.js +2 -3
- package/esm5/lib/interfaces/IBSPayments.js +38 -35
- package/esm5/lib/interfaces/ICardDetails.js +14 -13
- package/esm5/lib/interfaces/IFee.js +44 -29
- package/esm5/lib/interfaces/IOrderReferenceFee.js +25 -0
- package/esm5/lib/interfaces/IPatchRefundAction.js +15 -0
- package/esm5/lib/interfaces/IPayment.js +56 -55
- package/esm5/lib/interfaces/IPaymentGroup.js +12 -11
- package/esm5/lib/interfaces/IPaymentStatus.js +2 -3
- package/esm5/lib/interfaces/IPaymentView.js +17 -0
- package/esm5/lib/interfaces/IPayments.js +6 -5
- package/esm5/lib/interfaces/IRefundAction.js +15 -0
- package/esm5/lib/interfaces/IRefundList.js +29 -0
- package/esm5/lib/interfaces/IRefundReasons.js +17 -0
- package/esm5/lib/interfaces/IRefundRejectReason.js +15 -0
- package/esm5/lib/interfaces/IRefundStatus.js +23 -0
- package/esm5/lib/interfaces/IRemission.js +18 -17
- package/esm5/lib/interfaces/IResubmitRefundRequest.js +19 -0
- package/esm5/lib/interfaces/IStatusHistories.js +12 -11
- package/esm5/lib/interfaces/IStatusHistory.js +14 -13
- package/esm5/lib/interfaces/IssueRefundRequest.js +22 -0
- package/esm5/lib/interfaces/PayhubAntennaRequest.js +25 -0
- package/esm5/lib/interfaces/PaymentToPayhubRequest.js +6 -10
- package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +16 -0
- package/esm5/lib/interfaces/PostRefundRetroRemission.js +19 -0
- package/esm5/lib/interfaces/RefundsRequest.js +19 -0
- package/esm5/lib/interfaces/UnidentifiedPaymentsRequest.js +2 -3
- package/esm5/lib/interfaces/UnsolicitedPaymentsRequest.js +2 -3
- package/esm5/lib/payment-lib.component.js +84 -12
- package/esm5/lib/payment-lib.module.js +33 -6
- package/esm5/lib/payment-lib.service.js +25 -4
- package/esm5/lib/pipes/capitalize.pipe.js +32 -0
- package/esm5/lib/pipes/ccd-hyphens.pipe.js +3 -4
- package/esm5/lib/pipes/key-value.pipe.js +3 -4
- package/esm5/lib/pipes/sanitize-html.pipe.js +7 -5
- package/esm5/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +61 -14
- package/esm5/lib/services/card-details/card-details.service.js +19 -8
- package/esm5/lib/services/case-transactions/case-transactions.service.js +19 -8
- package/esm5/lib/services/orderslist.service.js +276 -0
- package/esm5/lib/services/payment-list/payment-list.service.js +19 -8
- package/esm5/lib/services/payment-view/payment-view.service.js +138 -14
- package/esm5/lib/services/refunds/refunds.service.js +236 -0
- package/esm5/lib/services/shared/error-handler.service.js +6 -4
- package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +17 -8
- package/esm5/lib/services/shared/logger/console-logger.service.js +7 -5
- package/esm5/lib/services/shared/logger/logger.service.js +7 -5
- package/esm5/lib/services/status-history/status-history.service.js +19 -8
- package/esm5/lib/services/xl-file/xl-file.service.js +63 -50
- package/esm5/public_api.js +1 -2
- package/fesm2015/hmcts-ccpay-web-component.js +4431 -2031
- package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
- package/fesm5/hmcts-ccpay-web-component.js +6613 -2320
- package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
- package/hmcts-ccpay-web-component.d.ts +31 -22
- package/hmcts-ccpay-web-component.metadata.json +1 -1
- package/lib/components/add-remission/add-remission.component.d.ts +75 -3
- package/lib/components/allocate-payments/allocate-payments.component.d.ts +26 -9
- package/lib/components/case-transactions/case-transactions.component.d.ts +86 -4
- package/lib/components/fee-summary/fee-summary.component.d.ts +13 -2
- package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +2 -0
- package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +4 -0
- package/lib/components/payment-view/payment-view.component.d.ts +34 -1
- package/lib/components/process-refund/process-refund.component.d.ts +46 -0
- package/lib/components/processed-payments/processed-payments.component.d.ts +14 -0
- package/lib/components/refund-list/refund-list.component.d.ts +23 -0
- package/lib/components/refund-status/refund-status.component.d.ts +66 -0
- package/lib/components/refunds/refunds.component.d.ts +5 -0
- package/lib/components/reports/reports.component.d.ts +1 -0
- package/lib/components/status-history/status-history.component.d.ts +1 -0
- package/lib/components/table/table.component.d.ts +35 -0
- package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +25 -4
- package/lib/interfaces/AddRemissionRequest.d.ts +2 -2
- package/lib/interfaces/AddRetroRemissionRequest.d.ts +5 -0
- package/lib/interfaces/AllocatePaymentRequest.d.ts +16 -3
- package/lib/interfaces/IBSPayments.d.ts +1 -0
- package/lib/interfaces/IFee.d.ts +7 -0
- package/lib/interfaces/IOrderReferenceFee.d.ts +9 -0
- package/lib/interfaces/IPatchRefundAction.d.ts +4 -0
- package/lib/interfaces/IPaymentView.d.ts +5 -0
- package/lib/interfaces/IRefundAction.d.ts +4 -0
- package/lib/interfaces/IRefundList.d.ts +14 -0
- package/lib/interfaces/IRefundReasons.d.ts +5 -0
- package/lib/interfaces/IRefundRejectReason.d.ts +4 -0
- package/lib/interfaces/IRefundStatus.d.ts +8 -0
- package/lib/interfaces/IResubmitRefundRequest.d.ts +5 -0
- package/lib/interfaces/IssueRefundRequest.d.ts +6 -0
- package/lib/interfaces/PayhubAntennaRequest.d.ts +7 -0
- package/lib/interfaces/PaymentToPayhubRequest.d.ts +2 -3
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +4 -0
- package/lib/interfaces/PostRefundRetroRemission.d.ts +5 -0
- package/lib/interfaces/RefundsRequest.d.ts +5 -0
- package/lib/payment-lib.component.d.ts +28 -3
- package/lib/payment-lib.service.d.ts +3 -0
- package/lib/pipes/capitalize.pipe.d.ts +5 -0
- package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +2 -0
- package/lib/services/orderslist.service.d.ts +40 -0
- package/lib/services/payment-view/payment-view.service.d.ts +17 -2
- package/lib/services/refunds/refunds.service.d.ts +30 -0
- package/lib/services/xl-file/xl-file.service.d.ts +6 -6
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
3
|
+
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
4
|
*/
|
|
5
5
|
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
6
6
|
import { FormBuilder, Validators, FormControl } from '@angular/forms';
|
|
@@ -8,37 +8,85 @@ import { Router } from '@angular/router';
|
|
|
8
8
|
import { AddRemissionRequest } from '../../interfaces/AddRemissionRequest';
|
|
9
9
|
import { PaymentViewService } from '../../services/payment-view/payment-view.service';
|
|
10
10
|
import { PaymentLibComponent } from '../../payment-lib.component';
|
|
11
|
+
import { RefundsService } from '../../services/refunds/refunds.service';
|
|
12
|
+
import { AddRetroRemissionRequest } from '../../interfaces/AddRetroRemissionRequest';
|
|
13
|
+
import { PostRefundRetroRemission } from '../../interfaces/PostRefundRetroRemission';
|
|
14
|
+
import { PostIssueRefundRetroRemission } from '../../interfaces/PostIssueRefundRetroRemission';
|
|
15
|
+
import { ChangeDetectorRef } from '@angular/core';
|
|
16
|
+
import { OrderslistService } from '../../services/orderslist.service';
|
|
11
17
|
/** @type {?} */
|
|
12
18
|
const BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
|
|
13
19
|
export class AddRemissionComponent {
|
|
20
|
+
// refundReasons:IRefundReasons[];
|
|
14
21
|
/**
|
|
15
22
|
* @param {?} formBuilder
|
|
16
23
|
* @param {?} router
|
|
17
24
|
* @param {?} paymentViewService
|
|
18
25
|
* @param {?} paymentLibComponent
|
|
26
|
+
* @param {?} refundService
|
|
27
|
+
* @param {?} cd
|
|
28
|
+
* @param {?} OrderslistService
|
|
19
29
|
*/
|
|
20
|
-
constructor(formBuilder, router, paymentViewService, paymentLibComponent) {
|
|
30
|
+
constructor(formBuilder, router, paymentViewService, paymentLibComponent, refundService, cd, OrderslistService) {
|
|
21
31
|
this.formBuilder = formBuilder;
|
|
22
32
|
this.router = router;
|
|
23
33
|
this.paymentViewService = paymentViewService;
|
|
24
34
|
this.paymentLibComponent = paymentLibComponent;
|
|
35
|
+
this.refundService = refundService;
|
|
36
|
+
this.cd = cd;
|
|
37
|
+
this.OrderslistService = OrderslistService;
|
|
25
38
|
this.cancelRemission = new EventEmitter();
|
|
39
|
+
//@Output() refundListReason: EventEmitter<any> = new EventEmitter({reason:string, code:string});
|
|
40
|
+
this.refundListReason = new EventEmitter();
|
|
41
|
+
this.refundListAmount = new EventEmitter();
|
|
42
|
+
this.refund = {
|
|
43
|
+
reason: {
|
|
44
|
+
duplicate: 'Duplicate payment',
|
|
45
|
+
humanerror: 'Human error',
|
|
46
|
+
caseWithdrawn: 'Case withdrawn',
|
|
47
|
+
other: 'Other'
|
|
48
|
+
}
|
|
49
|
+
};
|
|
26
50
|
this.hasErrors = false;
|
|
27
51
|
this.viewStatus = 'main';
|
|
28
52
|
this.errorMessage = null;
|
|
29
53
|
this.option = null;
|
|
30
54
|
this.isConfirmationBtnDisabled = false;
|
|
55
|
+
this.selectedValue = 'yes';
|
|
56
|
+
this.retroRemission = false;
|
|
57
|
+
this.remissionReference = '';
|
|
58
|
+
this.paymentExplanationHasError = false;
|
|
31
59
|
this.isRemissionCodeEmpty = false;
|
|
32
60
|
this.remissionCodeHasError = false;
|
|
33
61
|
this.isAmountEmpty = false;
|
|
62
|
+
this.isReasonEmpty = false;
|
|
34
63
|
this.amountHasError = false;
|
|
35
64
|
this.isRemissionLessThanFeeError = false;
|
|
65
|
+
this.refundHasError = false;
|
|
66
|
+
this.isPaymentSuccess = false;
|
|
67
|
+
this.isRemissionApplied = false;
|
|
68
|
+
this.refundReasons = [];
|
|
69
|
+
this.commonRefundReasons = [];
|
|
36
70
|
}
|
|
37
71
|
/**
|
|
38
72
|
* @return {?}
|
|
39
73
|
*/
|
|
40
74
|
ngOnInit() {
|
|
75
|
+
this.default = 'Select a different reason';
|
|
76
|
+
if (this.remission) {
|
|
77
|
+
this.cd.detectChanges();
|
|
78
|
+
}
|
|
79
|
+
if (this.fee) {
|
|
80
|
+
this.amount = (this.fee.volume * this.fee.calculated_amount);
|
|
81
|
+
}
|
|
82
|
+
if (this.payment) {
|
|
83
|
+
this.remessionPayment = this.payment;
|
|
84
|
+
if (this.payment.status === 'Success') {
|
|
85
|
+
this.isPaymentSuccess = true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
41
88
|
this.option = this.paymentLibComponent.SELECTED_OPTION;
|
|
89
|
+
this.bsPaymentDcnNumber = this.paymentLibComponent.bspaymentdcn;
|
|
42
90
|
this.remissionForm = this.formBuilder.group({
|
|
43
91
|
remissionCode: new FormControl('', Validators.compose([
|
|
44
92
|
Validators.required,
|
|
@@ -47,47 +95,138 @@ export class AddRemissionComponent {
|
|
|
47
95
|
amount: new FormControl('', Validators.compose([
|
|
48
96
|
Validators.required,
|
|
49
97
|
Validators.pattern('^[0-9]+(\\.[0-9]{2})?$')
|
|
50
|
-
]))
|
|
98
|
+
])),
|
|
99
|
+
refundReason: new FormControl('', Validators.compose([Validators.required])),
|
|
100
|
+
refundDDReason: new FormControl('', Validators.compose([Validators.required])),
|
|
101
|
+
reason: new FormControl()
|
|
51
102
|
});
|
|
52
|
-
|
|
103
|
+
/** @type {?} */
|
|
104
|
+
const remissionctrls = this.remissionForm.controls;
|
|
105
|
+
remissionctrls['refundDDReason'].setValue('Select a different reason', { onlySelf: true });
|
|
106
|
+
if (this.viewCompStatus === '') {
|
|
107
|
+
this.viewStatus = 'main';
|
|
108
|
+
}
|
|
109
|
+
if (this.viewCompStatus === 'issuerefund') {
|
|
110
|
+
this.refundService.getRefundReasons().subscribe((/**
|
|
111
|
+
* @param {?} refundReasons
|
|
112
|
+
* @return {?}
|
|
113
|
+
*/
|
|
114
|
+
refundReasons => {
|
|
115
|
+
this.refundReasons = refundReasons['data'].filter((/**
|
|
116
|
+
* @param {?} data
|
|
117
|
+
* @return {?}
|
|
118
|
+
*/
|
|
119
|
+
(data) => data.recently_used === false));
|
|
120
|
+
this.cd.detectChanges();
|
|
121
|
+
this.commonRefundReasons = refundReasons['data'].filter((/**
|
|
122
|
+
* @param {?} data
|
|
123
|
+
* @return {?}
|
|
124
|
+
*/
|
|
125
|
+
(data) => data.recently_used === true));
|
|
126
|
+
this.cd.detectChanges();
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
if (this.viewCompStatus === 'processretroremissonpage' && this.isFromRefundListPage) {
|
|
130
|
+
this.viewStatus = 'processretroremissonpage';
|
|
131
|
+
}
|
|
132
|
+
// this.refundService.getUserDetails().subscribe(
|
|
133
|
+
// userdetail => {
|
|
134
|
+
// console.log(userdetail);
|
|
135
|
+
// console.log(userdetail['data']);
|
|
136
|
+
// } );
|
|
137
|
+
this.paymentLibComponent.CCD_CASE_NUMBER;
|
|
53
138
|
}
|
|
54
139
|
/**
|
|
55
140
|
* @return {?}
|
|
56
141
|
*/
|
|
57
142
|
addRemission() {
|
|
58
|
-
this.resetRemissionForm([false, false, false, false, false], 'All');
|
|
143
|
+
this.resetRemissionForm([false, false, false, false, false, false], 'All');
|
|
59
144
|
/** @type {?} */
|
|
60
145
|
const remissionctrls = this.remissionForm.controls;
|
|
61
146
|
/** @type {?} */
|
|
62
|
-
const isRemissionLessThanFee = this.fee.calculated_amount > remissionctrls
|
|
147
|
+
const isRemissionLessThanFee = this.fee.calculated_amount > remissionctrls.amount.value;
|
|
148
|
+
this.remissionForm.controls['refundReason'].setErrors(null);
|
|
149
|
+
this.remissionForm.controls['refundDDReason'].setErrors(null);
|
|
150
|
+
this.remissionForm.controls['amount'].setErrors(null);
|
|
63
151
|
if (this.remissionForm.dirty && this.remissionForm.valid && isRemissionLessThanFee) {
|
|
64
152
|
this.viewStatus = 'confirmation';
|
|
65
153
|
}
|
|
66
154
|
else {
|
|
67
155
|
if (remissionctrls['remissionCode'].value == '') {
|
|
68
|
-
this.resetRemissionForm([true, false, false, false, false], 'remissionCode');
|
|
156
|
+
this.resetRemissionForm([true, false, false, false, false, false], 'remissionCode');
|
|
69
157
|
}
|
|
70
158
|
if (remissionctrls['remissionCode'].value != '' && remissionctrls['remissionCode'].invalid) {
|
|
71
|
-
this.resetRemissionForm([false, true, false, false, false], 'remissionCode');
|
|
159
|
+
this.resetRemissionForm([false, true, false, false, false, false], 'remissionCode');
|
|
72
160
|
}
|
|
73
161
|
if (remissionctrls['amount'].value == '') {
|
|
74
|
-
this.resetRemissionForm([false, false, true, false, false], 'amount');
|
|
162
|
+
this.resetRemissionForm([false, false, true, false, false, false], 'amount');
|
|
75
163
|
}
|
|
76
164
|
if (remissionctrls['amount'].value != '' && remissionctrls['amount'].invalid) {
|
|
77
|
-
this.resetRemissionForm([false, true, false, true, false], 'amount');
|
|
165
|
+
this.resetRemissionForm([false, true, false, true, false, false], 'amount');
|
|
78
166
|
}
|
|
79
|
-
if (remissionctrls
|
|
80
|
-
this.resetRemissionForm([false, false, false, false, true], 'amount');
|
|
167
|
+
if (remissionctrls.amount.valid && !isRemissionLessThanFee) {
|
|
168
|
+
this.resetRemissionForm([false, false, false, false, true, false], 'amount');
|
|
81
169
|
}
|
|
82
170
|
}
|
|
83
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* @return {?}
|
|
174
|
+
*/
|
|
175
|
+
confirmRemission() {
|
|
176
|
+
this.isConfirmationBtnDisabled = true;
|
|
177
|
+
/** @type {?} */
|
|
178
|
+
const newNetAmount = this.remissionForm.controls.amount.value;
|
|
179
|
+
/** @type {?} */
|
|
180
|
+
const remissionAmount = this.fee.net_amount - newNetAmount;
|
|
181
|
+
/** @type {?} */
|
|
182
|
+
const requestBody = new AddRemissionRequest(this.ccdCaseNumber, this.fee, remissionAmount, this.remissionForm.controls.remissionCode.value, this.caseType);
|
|
183
|
+
this.paymentViewService.postPaymentGroupWithRemissions(decodeURIComponent(this.paymentGroupRef).trim(), this.fee.id, requestBody).subscribe((/**
|
|
184
|
+
* @param {?} response
|
|
185
|
+
* @return {?}
|
|
186
|
+
*/
|
|
187
|
+
response => {
|
|
188
|
+
if (JSON.parse(response).success) {
|
|
189
|
+
/** @type {?} */
|
|
190
|
+
let LDUrl = this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
191
|
+
LDUrl += `&caseType=${this.caseType}`;
|
|
192
|
+
LDUrl += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
193
|
+
LDUrl += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
194
|
+
if (this.paymentLibComponent.bspaymentdcn) {
|
|
195
|
+
this.router.routeReuseStrategy.shouldReuseRoute = (/**
|
|
196
|
+
* @return {?}
|
|
197
|
+
*/
|
|
198
|
+
() => false);
|
|
199
|
+
this.router.onSameUrlNavigation = 'reload';
|
|
200
|
+
this.router.navigateByUrl(`/payment-history/${this.ccdCaseNumber}?view=fee-summary&selectedOption=${this.option}&paymentGroupRef=${this.paymentGroupRef}&dcn=${this.paymentLibComponent.bspaymentdcn}${LDUrl}`);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
this.gotoCasetransationPage();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}), (/**
|
|
207
|
+
* @param {?} error
|
|
208
|
+
* @return {?}
|
|
209
|
+
*/
|
|
210
|
+
(error) => {
|
|
211
|
+
this.errorMessage = error;
|
|
212
|
+
this.isConfirmationBtnDisabled = false;
|
|
213
|
+
}));
|
|
214
|
+
}
|
|
84
215
|
/**
|
|
85
216
|
* @param {?} val
|
|
86
217
|
* @param {?} field
|
|
87
218
|
* @return {?}
|
|
88
219
|
*/
|
|
89
220
|
resetRemissionForm(val, field) {
|
|
90
|
-
if (field === '
|
|
221
|
+
if (field === 'All') {
|
|
222
|
+
this.isRemissionCodeEmpty = val[0];
|
|
223
|
+
this.remissionCodeHasError = val[1];
|
|
224
|
+
this.isAmountEmpty = val[2];
|
|
225
|
+
this.amountHasError = val[3];
|
|
226
|
+
this.isRemissionLessThanFeeError = val[4];
|
|
227
|
+
this.isReasonEmpty = val[5];
|
|
228
|
+
}
|
|
229
|
+
else if (field === 'remissionCode' || field === 'All') {
|
|
91
230
|
this.isRemissionCodeEmpty = val[0];
|
|
92
231
|
this.remissionCodeHasError = val[1];
|
|
93
232
|
}
|
|
@@ -96,173 +235,568 @@ export class AddRemissionComponent {
|
|
|
96
235
|
this.amountHasError = val[3];
|
|
97
236
|
this.isRemissionLessThanFeeError = val[4];
|
|
98
237
|
}
|
|
238
|
+
else if (field === 'reason' || field === 'All') {
|
|
239
|
+
this.isReasonEmpty = val[5];
|
|
240
|
+
}
|
|
99
241
|
}
|
|
242
|
+
// Add retro remission changes
|
|
100
243
|
/**
|
|
101
244
|
* @return {?}
|
|
102
245
|
*/
|
|
103
|
-
|
|
246
|
+
addRemissionCode() {
|
|
247
|
+
this.resetRemissionForm([false, false, false, false, false, false], 'All');
|
|
248
|
+
/** @type {?} */
|
|
249
|
+
const remissionctrls = this.remissionForm.controls;
|
|
250
|
+
/** @type {?} */
|
|
251
|
+
const isRemissionLessThanFee = this.fee.calculated_amount >= remissionctrls.amount.value;
|
|
252
|
+
this.remissionForm.controls['refundReason'].setErrors(null);
|
|
253
|
+
this.remissionForm.controls['refundDDReason'].setErrors(null);
|
|
254
|
+
this.remissionForm.controls['amount'].setErrors(null);
|
|
255
|
+
if (this.remissionForm.dirty && this.remissionForm.valid && isRemissionLessThanFee) {
|
|
256
|
+
this.viewCompStatus = '';
|
|
257
|
+
this.viewStatus = "processretroremissonpage";
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
if (remissionctrls['remissionCode'].value == '') {
|
|
261
|
+
this.resetRemissionForm([true, false, false, false, false], 'remissionCode');
|
|
262
|
+
}
|
|
263
|
+
if (remissionctrls['remissionCode'].value != '' && remissionctrls['remissionCode'].invalid) {
|
|
264
|
+
this.resetRemissionForm([false, true, false, false, false], 'remissionCode');
|
|
265
|
+
}
|
|
266
|
+
if (remissionctrls['amount'].value == '') {
|
|
267
|
+
this.resetRemissionForm([false, false, true, false, false], 'amount');
|
|
268
|
+
}
|
|
269
|
+
if (remissionctrls['amount'].value != '' && remissionctrls['amount'].invalid) {
|
|
270
|
+
this.resetRemissionForm([false, true, false, true, false], 'amount');
|
|
271
|
+
}
|
|
272
|
+
if (remissionctrls['reason'].value == '') {
|
|
273
|
+
this.resetRemissionForm([false, false, false, true, false, true], 'reason');
|
|
274
|
+
}
|
|
275
|
+
if (remissionctrls.amount.valid && !isRemissionLessThanFee) {
|
|
276
|
+
this.resetRemissionForm([false, false, false, false, true], 'amount');
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* @return {?}
|
|
282
|
+
*/
|
|
283
|
+
gotoAddRetroRemissionCodePage() {
|
|
284
|
+
if (this.isRefundRemission) {
|
|
285
|
+
this.paymentLibComponent.iscancelClicked = true;
|
|
286
|
+
this.refundListAmount.emit();
|
|
287
|
+
this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (this.isFromRefundListPage) {
|
|
291
|
+
this.paymentLibComponent.iscancelClicked = true;
|
|
292
|
+
this.refundListReason.emit({ reason: this.selectedRefundReason, code: this.refundReason });
|
|
293
|
+
this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
this.viewStatus = '';
|
|
297
|
+
this.selectedValue = 'yes';
|
|
298
|
+
this.viewCompStatus = "addremission";
|
|
299
|
+
this.isRefundRemission = true;
|
|
300
|
+
this.errorMessage = '';
|
|
301
|
+
if (this.isFromPaymentDetailPage) {
|
|
302
|
+
// this.paymentLibComponent.paymentMethod = this.payment.method;
|
|
303
|
+
// this.paymentLibComponent.paymentGroupReference = this.paymentGroupRef;
|
|
304
|
+
// this.paymentLibComponent.paymentReference = this.payment.payment_group_reference;
|
|
305
|
+
this.paymentLibComponent.viewName = 'payment-view';
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* @param {?} payment
|
|
310
|
+
* @return {?}
|
|
311
|
+
*/
|
|
312
|
+
gotoCheckRetroRemissionPage(payment) {
|
|
313
|
+
this.paymentLibComponent.iscancelClicked = false;
|
|
314
|
+
this.errorMessage = '';
|
|
315
|
+
this.resetRemissionForm([false, false, false, false, false], 'All');
|
|
316
|
+
if (!this.isRefundRemission) {
|
|
317
|
+
/** @type {?} */
|
|
318
|
+
var remissionctrls = this.remissionForm.controls;
|
|
319
|
+
/** @type {?} */
|
|
320
|
+
var isRemissionLessThanFee = this.fee.calculated_amount >= remissionctrls.amount.value;
|
|
321
|
+
if (this.remissionForm.dirty) {
|
|
322
|
+
if (remissionctrls['amount'].value == '') {
|
|
323
|
+
this.resetRemissionForm([false, false, true, false, false], 'amount');
|
|
324
|
+
}
|
|
325
|
+
else if (remissionctrls['amount'].value != '' && remissionctrls['amount'].invalid) {
|
|
326
|
+
this.resetRemissionForm([false, false, false, true, false], 'amount');
|
|
327
|
+
}
|
|
328
|
+
else if (remissionctrls.amount.valid && !isRemissionLessThanFee) {
|
|
329
|
+
this.resetRemissionForm([false, false, false, false, true], 'amount');
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
this.viewCompStatus = '';
|
|
333
|
+
this.viewStatus = "checkretroremissionpage";
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
/** @type {?} */
|
|
339
|
+
var remissionctrls = this.remissionForm.controls;
|
|
340
|
+
//if (this.remissionForm.dirty ) {
|
|
341
|
+
if (remissionctrls['amount'].value == '') {
|
|
342
|
+
this.resetRemissionForm([false, false, true, false, false], 'amount');
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
this.viewCompStatus = '';
|
|
346
|
+
this.viewStatus = "checkretroremissionpage";
|
|
347
|
+
this.refundListAmount.emit(remissionctrls['amount'].value);
|
|
348
|
+
}
|
|
349
|
+
//}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* @return {?}
|
|
354
|
+
*/
|
|
355
|
+
gotoProcessRetroRemissionPage() {
|
|
356
|
+
this.viewStatus = '';
|
|
357
|
+
this.viewCompStatus = 'addremission';
|
|
358
|
+
this.isRefundRemission = true;
|
|
359
|
+
this.errorMessage = '';
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* @return {?}
|
|
363
|
+
*/
|
|
364
|
+
confirmRetroRemission() {
|
|
104
365
|
this.isConfirmationBtnDisabled = true;
|
|
366
|
+
this.retroRemission = true;
|
|
367
|
+
this.remissionamt = this.remissionForm.controls.amount.value;
|
|
368
|
+
// if(this.remessionPayment.status === 'Success') {
|
|
369
|
+
// if(this.fee.calculated_amount.toString() === this.remissionForm.controls.amount.value) {
|
|
370
|
+
// this.remissionamt =this.remissionForm.controls.amount.value
|
|
371
|
+
// }
|
|
372
|
+
// else
|
|
373
|
+
// {
|
|
374
|
+
// this.remissionamt = this.fee.calculated_amount - this.remissionForm.controls.amount.value;
|
|
375
|
+
// }
|
|
376
|
+
// } else {
|
|
377
|
+
// this.remissionamt = this.remissionForm.controls.amount.value;
|
|
378
|
+
// }
|
|
105
379
|
/** @type {?} */
|
|
106
|
-
const
|
|
380
|
+
const requestBody = new AddRetroRemissionRequest(this.remissionamt, this.remissionForm.controls.remissionCode.value);
|
|
381
|
+
this.paymentViewService.postPaymentGroupWithRetroRemissions(decodeURIComponent(this.paymentGroupRef).trim(), this.fee.id, requestBody).subscribe((/**
|
|
382
|
+
* @param {?} response
|
|
383
|
+
* @return {?}
|
|
384
|
+
*/
|
|
385
|
+
response => {
|
|
386
|
+
if (JSON.parse(response)) {
|
|
387
|
+
this.isRemissionApplied = true;
|
|
388
|
+
this.viewCompStatus = '';
|
|
389
|
+
this.viewStatus = 'retroremissionconfirmationpage';
|
|
390
|
+
this.remissionReference = JSON.parse(response).remission_reference;
|
|
391
|
+
//if (this.retroRemission) {
|
|
392
|
+
// } else {
|
|
393
|
+
// let LDUrl = this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable'
|
|
394
|
+
// LDUrl += `&caseType=${this.caseType}`
|
|
395
|
+
// LDUrl += this.isNewPcipalOff ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable'
|
|
396
|
+
// LDUrl += this.isOldPcipalOff ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable'
|
|
397
|
+
// if (this.paymentLibComponent.bspaymentdcn) {
|
|
398
|
+
// this.router.routeReuseStrategy.shouldReuseRoute = () => false;
|
|
399
|
+
// this.router.onSameUrlNavigation = 'reload';
|
|
400
|
+
// this.router.navigateByUrl(`/payment-history/${this.ccdCaseNumber}?view=fee-summary&selectedOption=${this.option}&paymentGroupRef=${this.paymentGroupRef}&dcn=${this.paymentLibComponent.bspaymentdcn}${LDUrl}`);
|
|
401
|
+
// }else {
|
|
402
|
+
// this.gotoCasetransationPage();
|
|
403
|
+
// }
|
|
404
|
+
// }
|
|
405
|
+
}
|
|
406
|
+
}), (/**
|
|
407
|
+
* @param {?} error
|
|
408
|
+
* @return {?}
|
|
409
|
+
*/
|
|
410
|
+
(error) => {
|
|
411
|
+
this.errorMessage = error;
|
|
412
|
+
this.isConfirmationBtnDisabled = false;
|
|
413
|
+
this.cd.detectChanges();
|
|
414
|
+
}));
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* @return {?}
|
|
418
|
+
*/
|
|
419
|
+
processRefund() {
|
|
420
|
+
this.errorMessage = '';
|
|
421
|
+
this.isConfirmationBtnDisabled = true;
|
|
422
|
+
if (this.isRefundRemission) {
|
|
423
|
+
this.retroRemission = true;
|
|
424
|
+
}
|
|
425
|
+
if (this.remissionReference === undefined || this.remissionReference === '') {
|
|
426
|
+
this.remissionReference = this.remission.remission_reference;
|
|
427
|
+
}
|
|
107
428
|
/** @type {?} */
|
|
108
|
-
const
|
|
429
|
+
const requestBody = new PostIssueRefundRetroRemission(this.remissionReference);
|
|
430
|
+
this.paymentViewService.postRefundRetroRemission(requestBody).subscribe((/**
|
|
431
|
+
* @param {?} response
|
|
432
|
+
* @return {?}
|
|
433
|
+
*/
|
|
434
|
+
response => {
|
|
435
|
+
if (JSON.parse(response)) {
|
|
436
|
+
this.viewCompStatus = '';
|
|
437
|
+
this.viewStatus = 'refundconfirmationpage';
|
|
438
|
+
this.refundReference = JSON.parse(response).refund_reference;
|
|
439
|
+
this.refundAmount = JSON.parse(response).refund_amount;
|
|
440
|
+
}
|
|
441
|
+
}), (/**
|
|
442
|
+
* @param {?} error
|
|
443
|
+
* @return {?}
|
|
444
|
+
*/
|
|
445
|
+
(error) => {
|
|
446
|
+
this.errorMessage = error;
|
|
447
|
+
this.isConfirmationBtnDisabled = false;
|
|
448
|
+
}));
|
|
449
|
+
}
|
|
450
|
+
// Issue Refund changes
|
|
451
|
+
/**
|
|
452
|
+
* @param {?} payment
|
|
453
|
+
* @return {?}
|
|
454
|
+
*/
|
|
455
|
+
gotoIssueRefundConfirmation(payment) {
|
|
456
|
+
this.paymentLibComponent.iscancelClicked = false;
|
|
457
|
+
this.errorMessage = '';
|
|
458
|
+
this.refundReason = this.remissionForm.controls['refundReason'].value === null ? this.remissionForm.controls['refundDDReason'].value : this.remissionForm.controls['refundReason'].value;
|
|
459
|
+
if (!this.refundReason) {
|
|
460
|
+
this.refundHasError = true;
|
|
461
|
+
}
|
|
462
|
+
else if (this.selectedRefundReason.includes('Other') && (this.remissionForm.controls['reason'].value == '' || this.remissionForm.controls['reason'].value == null)) {
|
|
463
|
+
this.resetRemissionForm([false, false, false, true, false, true], 'reason');
|
|
464
|
+
}
|
|
465
|
+
else if (this.selectedRefundReason.includes('Other') && this.remissionForm.controls['reason'].value !== '') {
|
|
466
|
+
this.refundHasError = false;
|
|
467
|
+
this.refundReason += '-' + this.remissionForm.controls['reason'].value;
|
|
468
|
+
this.selectedRefundReason = this.remissionForm.controls['reason'].value;
|
|
469
|
+
if (this.isFromRefundListPage) {
|
|
470
|
+
this.refundListReason.emit({ reason: this.selectedRefundReason, code: this.refundReason });
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
this.viewCompStatus = '';
|
|
474
|
+
this.viewStatus = 'checkissuerefundpage';
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
else {
|
|
478
|
+
if (this.isFromRefundListPage) {
|
|
479
|
+
this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
480
|
+
this.refundListReason.emit({ reason: this.selectedRefundReason, code: this.refundReason });
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
this.viewCompStatus = '';
|
|
484
|
+
this.viewStatus = 'checkissuerefundpage';
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* @return {?}
|
|
490
|
+
*/
|
|
491
|
+
gotoIssueRefundPage() {
|
|
492
|
+
this.errorMessage = '';
|
|
493
|
+
this.viewCompStatus = 'issuerefund';
|
|
494
|
+
this.viewStatus = '';
|
|
495
|
+
this.isRefundRemission = true;
|
|
496
|
+
this.errorMessage = false;
|
|
497
|
+
this.refundHasError = false;
|
|
498
|
+
this.isReasonEmpty = false;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* @return {?}
|
|
502
|
+
*/
|
|
503
|
+
changeIssueRefundReason() {
|
|
504
|
+
// this.remissionForm.controls['refundReason'].setValue('Duplicate payment');
|
|
505
|
+
this.errorMessage = '';
|
|
506
|
+
this.refundHasError = false;
|
|
507
|
+
this.viewCompStatus = 'issuerefund';
|
|
508
|
+
this.viewStatus = '';
|
|
509
|
+
this.isRefundRemission = true;
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* @return {?}
|
|
513
|
+
*/
|
|
514
|
+
confirmIssueRefund() {
|
|
515
|
+
this.isConfirmationBtnDisabled = true;
|
|
516
|
+
this.errorMessage = '';
|
|
517
|
+
if (this.isRefundRemission) {
|
|
518
|
+
this.retroRemission = true;
|
|
519
|
+
}
|
|
109
520
|
/** @type {?} */
|
|
110
|
-
const requestBody = new
|
|
111
|
-
this.paymentViewService.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
521
|
+
const requestBody = new PostRefundRetroRemission(this.payment.reference, this.refundReason);
|
|
522
|
+
this.paymentViewService.postRefundsReason(requestBody).subscribe((/**
|
|
523
|
+
* @param {?} response
|
|
524
|
+
* @return {?}
|
|
525
|
+
*/
|
|
526
|
+
response => {
|
|
527
|
+
if (JSON.parse(response)) {
|
|
528
|
+
this.viewCompStatus = '';
|
|
529
|
+
this.viewStatus = 'refundconfirmationpage';
|
|
530
|
+
this.refundReference = JSON.parse(response).refund_reference;
|
|
531
|
+
if (JSON.parse(response).refund_amount) {
|
|
532
|
+
this.refundAmount = JSON.parse(response).refund_amount;
|
|
117
533
|
}
|
|
118
|
-
|
|
119
|
-
|
|
534
|
+
}
|
|
535
|
+
}), (/**
|
|
536
|
+
* @param {?} error
|
|
537
|
+
* @return {?}
|
|
538
|
+
*/
|
|
539
|
+
(error) => {
|
|
540
|
+
this.errorMessage = error;
|
|
541
|
+
this.isConfirmationBtnDisabled = false;
|
|
542
|
+
this.cd.detectChanges();
|
|
543
|
+
}));
|
|
544
|
+
}
|
|
545
|
+
// Retro Refund
|
|
546
|
+
/**
|
|
547
|
+
* @return {?}
|
|
548
|
+
*/
|
|
549
|
+
confirmRetroRefund() {
|
|
550
|
+
this.isConfirmationBtnDisabled = true;
|
|
551
|
+
this.errorMessage = '';
|
|
552
|
+
if (this.isRefundRemission) {
|
|
553
|
+
this.retroRemission = true;
|
|
554
|
+
}
|
|
555
|
+
/** @type {?} */
|
|
556
|
+
const requestBody = new PostRefundRetroRemission(this.payment.reference, 'RR004-Retrospective remission');
|
|
557
|
+
// const requestBody = new IssueRefundRequest(this.payment.reference,'RR004-Retro remission',this.payment.amount);
|
|
558
|
+
this.paymentViewService.postRefundsReason(requestBody).subscribe((/**
|
|
559
|
+
* @param {?} response
|
|
560
|
+
* @return {?}
|
|
561
|
+
*/
|
|
562
|
+
response => {
|
|
563
|
+
if (JSON.parse(response)) {
|
|
564
|
+
this.viewCompStatus = '';
|
|
565
|
+
this.viewStatus = 'retrorefundconfirmationpage';
|
|
566
|
+
this.refundReference = JSON.parse(response).refund_reference;
|
|
567
|
+
if (JSON.parse(response).refund_amount) {
|
|
568
|
+
this.refundAmount = JSON.parse(response).refund_amount;
|
|
120
569
|
}
|
|
121
570
|
}
|
|
122
|
-
}, (
|
|
571
|
+
}), (/**
|
|
572
|
+
* @param {?} error
|
|
573
|
+
* @return {?}
|
|
574
|
+
*/
|
|
575
|
+
(error) => {
|
|
123
576
|
this.errorMessage = error;
|
|
124
577
|
this.isConfirmationBtnDisabled = false;
|
|
125
|
-
});
|
|
578
|
+
}));
|
|
126
579
|
}
|
|
127
580
|
/**
|
|
581
|
+
* @param {?} key
|
|
582
|
+
* @param {?} value
|
|
128
583
|
* @return {?}
|
|
129
584
|
*/
|
|
130
|
-
|
|
585
|
+
selectRadioButton(key, value) {
|
|
586
|
+
localStorage.setItem("myradio", key);
|
|
587
|
+
/** @type {?} */
|
|
588
|
+
const remissionctrls = this.remissionForm.controls;
|
|
589
|
+
remissionctrls['refundDDReason'].setValue('Select a different reason', { onlySelf: true });
|
|
590
|
+
// remissionctrls['refundDDReason'].reset();
|
|
591
|
+
remissionctrls['reason'].reset();
|
|
592
|
+
this.isRefundReasonsSelected = true;
|
|
593
|
+
this.errorMessage = false;
|
|
594
|
+
this.isReasonEmpty = false;
|
|
595
|
+
this.showReasonText = false;
|
|
596
|
+
this.refundHasError = false;
|
|
597
|
+
this.selectedRefundReason = key;
|
|
598
|
+
if (this.selectedRefundReason.includes('Other')) {
|
|
599
|
+
this.showReasonText = true;
|
|
600
|
+
this.refundHasError = false;
|
|
601
|
+
this.refundReason = key;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
/**
|
|
605
|
+
* @param {?} args
|
|
606
|
+
* @return {?}
|
|
607
|
+
*/
|
|
608
|
+
selectchange(args) {
|
|
609
|
+
/** @type {?} */
|
|
610
|
+
const remissionctrls = this.remissionForm.controls;
|
|
611
|
+
remissionctrls['refundReason'].reset();
|
|
612
|
+
remissionctrls['reason'].reset();
|
|
613
|
+
this.isRefundReasonsSelected = false;
|
|
614
|
+
this.showReasonText = false;
|
|
615
|
+
this.refundHasError = false;
|
|
616
|
+
this.selectedRefundReason = args.target.options[args.target.options.selectedIndex].id;
|
|
617
|
+
if (this.selectedRefundReason.includes('Other')) {
|
|
618
|
+
this.showReasonText = true;
|
|
619
|
+
this.refundHasError = false;
|
|
620
|
+
this.refundReason = args.target.options[args.target.options.selectedIndex].id;
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* @return {?}
|
|
625
|
+
*/
|
|
626
|
+
gotoServiceRequestPage() {
|
|
627
|
+
event.preventDefault();
|
|
628
|
+
this.viewStatus = 'main';
|
|
629
|
+
this.OrderslistService.setpaymentPageView(null);
|
|
131
630
|
this.paymentLibComponent.viewName = 'case-transactions';
|
|
132
|
-
this.
|
|
133
|
-
this.
|
|
631
|
+
this.OrderslistService.setisFromServiceRequestPage(true);
|
|
632
|
+
this.OrderslistService.setnavigationPage('servicerequestpage');
|
|
633
|
+
this.paymentLibComponent.isFromServiceRequestPage = true;
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* @return {?}
|
|
637
|
+
*/
|
|
638
|
+
gotoCasetransationPage() {
|
|
639
|
+
if (this.isFromServiceRequestPage) {
|
|
640
|
+
this.gotoServiceRequestPage();
|
|
641
|
+
}
|
|
642
|
+
if (this.isFromRefundListPage) {
|
|
643
|
+
this.paymentLibComponent.iscancelClicked = true;
|
|
644
|
+
this.refundListReason.emit({ reason: this.selectedRefundReason, code: this.refundReason });
|
|
645
|
+
this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
646
|
+
}
|
|
647
|
+
if (!this.paymentLibComponent.isFromRefundStatusPage) {
|
|
648
|
+
this.OrderslistService.setpaymentPageView({ method: this.payment.method, payment_group_reference: this.paymentGroupRef, reference: this.payment.reference });
|
|
649
|
+
this.OrderslistService.setnavigationPage('paymentdetailspage');
|
|
650
|
+
this.errorMessage = '';
|
|
651
|
+
this.paymentLibComponent.viewName = 'case-transactions';
|
|
652
|
+
this.paymentLibComponent.TAKEPAYMENT = true;
|
|
653
|
+
this.paymentLibComponent.ISTURNOFF = this.isTurnOff;
|
|
654
|
+
this.paymentLibComponent.ISNEWPCIPALOFF = this.isNewPcipalOff;
|
|
655
|
+
this.paymentLibComponent.ISOLDPCIPALOFF = this.isOldPcipalOff;
|
|
656
|
+
this.paymentViewService.getBSfeature().subscribe((/**
|
|
657
|
+
* @param {?} features
|
|
658
|
+
* @return {?}
|
|
659
|
+
*/
|
|
660
|
+
features => {
|
|
661
|
+
/** @type {?} */
|
|
662
|
+
let result = JSON.parse(features).filter((/**
|
|
663
|
+
* @param {?} feature
|
|
664
|
+
* @return {?}
|
|
665
|
+
*/
|
|
666
|
+
feature => feature.uid === BS_ENABLE_FLAG));
|
|
667
|
+
this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
|
|
668
|
+
}), (/**
|
|
669
|
+
* @param {?} err
|
|
670
|
+
* @return {?}
|
|
671
|
+
*/
|
|
672
|
+
err => {
|
|
673
|
+
this.paymentLibComponent.ISBSENABLE = false;
|
|
674
|
+
}));
|
|
134
675
|
/** @type {?} */
|
|
135
|
-
let
|
|
136
|
-
this.paymentLibComponent.ISBSENABLE
|
|
137
|
-
|
|
138
|
-
this.
|
|
139
|
-
|
|
676
|
+
let partUrl = this.bsPaymentDcnNumber ? `&dcn=${this.bsPaymentDcnNumber}` : '';
|
|
677
|
+
partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
|
|
678
|
+
partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
679
|
+
partUrl += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
680
|
+
partUrl += `&caseType=${this.caseType}`;
|
|
681
|
+
partUrl += this.paymentLibComponent.ISNEWPCIPALOFF ? '&isNewPcipalOff=Enable' : '&isNewPcipalOff=Disable';
|
|
682
|
+
partUrl += this.paymentLibComponent.ISOLDPCIPALOFF ? '&isOldPcipalOff=Enable' : '&isOldPcipalOff=Disable';
|
|
683
|
+
if (this.isFromPaymentDetailPage) {
|
|
684
|
+
partUrl += this.paymentLibComponent.isFromPaymentDetailPage;
|
|
685
|
+
}
|
|
686
|
+
/** @type {?} */
|
|
687
|
+
const url = `/payment-history/${this.ccdCaseNumber}?view=case-transactions&takePayment=true&selectedOption=${this.option}${partUrl}`;
|
|
688
|
+
this.router.routeReuseStrategy.shouldReuseRoute = (/**
|
|
689
|
+
* @return {?}
|
|
690
|
+
*/
|
|
691
|
+
() => false);
|
|
692
|
+
this.router.onSameUrlNavigation = 'reload';
|
|
693
|
+
this.router.navigateByUrl(url);
|
|
694
|
+
}
|
|
695
|
+
else {
|
|
696
|
+
this.paymentLibComponent.viewName === 'refundstatuslist';
|
|
697
|
+
this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
/**
|
|
701
|
+
* @return {?}
|
|
702
|
+
*/
|
|
703
|
+
goToServiceRequestPage() {
|
|
704
|
+
this.paymentLibComponent.viewName;
|
|
705
|
+
}
|
|
706
|
+
/**
|
|
707
|
+
* @param {?} currency
|
|
708
|
+
* @return {?}
|
|
709
|
+
*/
|
|
710
|
+
getFormattedCurrency(currency) {
|
|
711
|
+
if (currency.toString().includes(".")) {
|
|
712
|
+
return currency;
|
|
713
|
+
}
|
|
714
|
+
return currency.toString().concat(".00");
|
|
140
715
|
}
|
|
141
716
|
}
|
|
142
717
|
AddRemissionComponent.decorators = [
|
|
143
718
|
{ type: Component, args: [{
|
|
144
719
|
selector: 'ccpay-add-remission',
|
|
145
|
-
template: `<div class="add-remission">
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
<h2 class="heading-medium error-summary-heading" id="failure-error-summary-heading">
|
|
149
|
-
Error in processing the request
|
|
150
|
-
</h2>
|
|
151
|
-
<div class="govuk-error-summary__body">
|
|
152
|
-
{{ errorMessage }}
|
|
153
|
-
</div>
|
|
154
|
-
</div>
|
|
155
|
-
</div>
|
|
156
|
-
<ng-container *ngIf="viewStatus === 'main'">
|
|
157
|
-
<h1 class="heading-large">Add remission</h1>
|
|
158
|
-
<form novalidate>
|
|
159
|
-
<div class="govuk-form-group">
|
|
160
|
-
<form [formGroup]="remissionForm" novalidate>
|
|
161
|
-
<div class="govuk-form-group">
|
|
162
|
-
<label class="govuk-label govuk-label--s" for="remission-code">
|
|
163
|
-
Add remission to {{ fee.code }}:{{ fee.description }}
|
|
164
|
-
<span class="form-hint">Enter remission for reference. For example: HWF-A1B-23C</span>
|
|
165
|
-
</label>
|
|
166
|
-
<input [ngClass]="{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}" class="govuk-input govuk-input--width-20 govuk-!-margin-right-1" id="remissionCode" aria-label="remissionCode" name="remissionCode" type="text" formControlName="remissionCode">
|
|
167
|
-
<p class="inline-error-message" *ngIf="isRemissionCodeEmpty || remissionCodeHasError">
|
|
168
|
-
<span *ngIf="isRemissionCodeEmpty">Enter a remission code</span>
|
|
169
|
-
<span *ngIf="remissionCodeHasError">Enter a vaild remission code</span>
|
|
170
|
-
</p>
|
|
171
|
-
</div>
|
|
172
|
-
<div class="govuk-form-group">
|
|
173
|
-
<label class="govuk-label govuk-label--s" for="amount">
|
|
174
|
-
How much does the applicant need to pay?
|
|
175
|
-
</label>
|
|
176
|
-
|
|
177
|
-
<div id="amount-currency" class="govuk-visually-hidden">in pounds</div>
|
|
178
|
-
<div class="hmcts-currency-input">
|
|
179
|
-
<div class="hmcts-currency-input__symbol" aria-hidden="true">£</div>
|
|
180
|
-
<input class="govuk-input govuk-input--width-10" [ngClass]="{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}" id="amount" aria-label="amount" name="amount" type="text" aria-describedby="amount-currency" formControlName="amount">
|
|
181
|
-
<p class="inline-error-message" *ngIf="isAmountEmpty || amountHasError || isRemissionLessThanFeeError">
|
|
182
|
-
<span *ngIf="isAmountEmpty">Enter a amount</span>
|
|
183
|
-
<span *ngIf="amountHasError">Enter a vaild amount</span>
|
|
184
|
-
<span *ngIf="isRemissionLessThanFeeError">The remission amount must be less than the total fee</span>
|
|
185
|
-
</p>
|
|
186
|
-
</div>
|
|
187
|
-
</div>
|
|
188
|
-
</form>
|
|
189
|
-
<button class="button" type="submit" (click)="addRemission()">
|
|
190
|
-
Submit
|
|
191
|
-
</button>
|
|
192
|
-
</div>
|
|
193
|
-
</form>
|
|
194
|
-
</ng-container>
|
|
195
|
-
<ng-container *ngIf="viewStatus === 'confirmation'">
|
|
196
|
-
<div class="govuk-warning-text">
|
|
197
|
-
<span class="govuk-warning-text__icon" aria-hidden="true">!</span>
|
|
198
|
-
<strong class="govuk-warning-text__text">
|
|
199
|
-
<span class="govuk-warning-text__assistive">Warning</span>
|
|
200
|
-
Are you sure you want to add remission to this fee?
|
|
201
|
-
</strong>
|
|
202
|
-
</div>
|
|
203
|
-
<table class="govuk-table">
|
|
204
|
-
<tr class="govuk-table__row">
|
|
205
|
-
<td class="govuk-table__cell govuk-!-font-weight-bold">Remission code:</td>
|
|
206
|
-
<td class="govuk-table__cell">{{ remissionForm.controls.remissionCode.value }}</td>
|
|
207
|
-
</tr>
|
|
208
|
-
<tr class="govuk-table__row">
|
|
209
|
-
<td class="govuk-table__cell govuk-!-font-weight-bold">Fee code:</td>
|
|
210
|
-
<td class="govuk-table__cell">{{ fee.code }}</td>
|
|
211
|
-
</tr>
|
|
212
|
-
<tr class="govuk-table__row">
|
|
213
|
-
<td class="govuk-table__cell govuk-!-font-weight-bold">Fee description:</td>
|
|
214
|
-
<td class="govuk-table__cell">{{ fee.description }}</td>
|
|
215
|
-
</tr>
|
|
216
|
-
<tr class="govuk-table__row">
|
|
217
|
-
<td class="govuk-table__cell govuk-!-font-weight-bold">Amount the applicant must pay:</td>
|
|
218
|
-
<td class="govuk-table__cell">{{ remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>
|
|
219
|
-
</tr>
|
|
220
|
-
</table>
|
|
221
|
-
|
|
222
|
-
<button type="submit" class="button govuk-button--secondary" (click)="cancelRemission.emit()">
|
|
223
|
-
Cancel
|
|
224
|
-
</button>
|
|
225
|
-
<button type="submit"
|
|
226
|
-
[disabled]="isConfirmationBtnDisabled"
|
|
227
|
-
[ngClass]='isConfirmationBtnDisabled ? "button button--disabled govuk-!-margin-right-1" : "button govuk-!-margin-right-1"'
|
|
228
|
-
(click)="confirmRemission()">
|
|
229
|
-
Confirm
|
|
230
|
-
</button>
|
|
231
|
-
|
|
232
|
-
</ng-container>
|
|
233
|
-
|
|
234
|
-
</div>
|
|
235
|
-
|
|
236
|
-
`,
|
|
237
|
-
styles: [`.add-remission .button{margin:20px 2px}.add-remission td.govuk-table__cell{width:50%}.add-remission .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:.5em}.add-remission .govuk-label--s,.add-remission .govuk-warning-text__text,.add-remission .hmcts-currency-input__symbol{font-size:19px}.add-remission .inline-error-class{outline:#a71414 solid 3px;outline-offset:0}.add-remission .inline-error-message{color:#a71414;font-weight:700;margin-top:10px}`]
|
|
238
|
-
},] },
|
|
720
|
+
template: "<div class=\"add-remission\">\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=\"viewStatus === 'main' && !isRefundRemission \">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSION'>\n <h1 class=\"heading-large\">Add remission </h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n Add remission to {{ fee.code }}: {{ fee.description }}\n <span class=\"form-hint\">Enter remission for reference. For example: HWF-A1B-23C</span>\n </label>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"amount\">\n How much does the applicant need to pay?\n </label>\n\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <div class=\"hmcts-currency-input\">\n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"text\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">The remission amount must be less than the total fee</span>\n </p>\n </div>\n </div>\n </form>\n <button class=\"button\" type=\"submit\" (click)=\"addRemission()\">\n Submit\n </button>\n </div>\n </form>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'confirmation'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to add remission to this fee?\n </strong>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission code:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.remissionCode.value }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code:</td>\n <td class=\"govuk-table__cell\">{{ fee.code }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee description:</td>\n <td class=\"govuk-table__cell\">{{ fee.description }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Amount the applicant must pay:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemission.emit()\">\n Cancel\n </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmRemission()\">\n Confirm\n </button>\n\n </ng-container>\n\n <!-- Add retro remission changes-->\n\n <ng-container *ngIf=\"viewCompStatus === 'addremission' && isRefundRemission\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSADDRETROREMISSIONPAGE'> \n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <h1 class=\"heading-large\">Enter help with fees or remission reference</h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n <span class=\"form-hint\">For example: HWF-A1B-23C</span>\n </label>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n </div>\n \n </form>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoCasetransationPage()\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"addRemissionCode()\" class=\"govuk-button\"> Continue</button>\n <p><a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a></p>\n </div>\n </div>\n </form>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'processretroremissonpage'\" >\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSRETROREMISSIONPAGE'> \n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\"> \n <h1 *ngIf=\"remessionPayment?.status === 'Success'\" class=\"heading-medium\">\n Enter the amount to be refunded\n </h1> \n <h1 *ngIf=\"remessionPayment?.status !== 'Success'\" class=\"heading-medium\">\n Enter the remission amount\n </h1> \n <h1 *ngIf=\"remessionPayment?.status === 'undefined'\" class=\"heading-medium\">\n Enter the amount\n </h1> \n </legend>\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <div class=\"hmcts-currency-input\">\n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"number\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">You cannot add a remission that's more than the fee amount.</span>\n </p>\n </div>\n </fieldset>\n </form>\n \n <div class=\"govuk-button-group\">\n <button (click)=\"gotoAddRetroRemissionCodePage()\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoCheckRetroRemissionPage(payment)\" class=\"govuk-button\"> Continue</button>\n <p>\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a>\n </p>\n </div>\n </div>\n \n </form>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'checkretroremissionpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKRETROREMISSIONCONFIRMATION'> \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\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.reference: ' '}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ remessionPayment ? getFormattedCurrency(remessionPayment.amount): ' ' | currency :'GBP':'symbol':'1.2-2'}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment status</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.status: ''}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee</td>\n <td class=\"govuk-table__cell\">{{ fee.code }} - {{ fee.description }} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Help with fees or remission reference</td>\n <td class=\"govuk-table__cell\"> {{ remissionForm.controls.remissionCode.value }}\n <a (click)=\"gotoProcessRetroRemissionPage()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"remessionPayment.status !== 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission amount</td>\n <td class=\"govuk-table__cell\">{{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n <a (click)=\"addRemissionCode()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoProcessRetroRemissionPage()\">Previous</button>\n <button type=\"submit\" [disabled]=\"isConfirmationBtnDisabled\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"confirmRetroRemission()\"> Add remission </button>\n <p> <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\" data-module=\"govuk-button\"> Cancel</a> </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'retroremissionconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Remission added\n </h1>\n <div *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-panel__body\">\n <p class=\"govuk-body\" style=\"color: white\"><strong>The amount to be refunded should be {{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</strong></p>\n \n </div>\n </div>\n <div *ngIf=\"remessionPayment.status === 'Success'\" >\n <button type=\"submit\" [disabled]=\"!isRemissionApplied\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"processRefund()\">Submit refund </button>\n </div>\n <p class=\"govuk-body\">\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'refundconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'> \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\" style=\"color: white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <div *ngIf=\"isPaymentSuccess\">\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 </div>\n <p class=\"govuk-body\">\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n \n </ng-container>\n\n <!-- Issue Refund Section -->\n\n <ng-container *ngIf=\"viewCompStatus === 'issuerefund' && isRefundRemission\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ISSUEREFUNDPAGE'> \n <h1 class=\"heading-large\">Process refund</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <h1 class=\"heading-large\">Why are you making this refund?\n </h1>\n \n\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n \n <div\n [ngClass]=\"refundHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" >\n <p class=\"inline-error-message\" *ngIf=\"refundHasError\">\n <span *ngIf=\"refundHasError\">Select a reason why you\u2019re making this refund</span>\n </p>\n\n \n\n <div class = \"container-fluid\">\n <div class=\"row\">\n <div class=\"govuk-radios__item col-md-4\" *ngFor=\"let refund of commonRefundReasons; let i = index;\">\n <input class=\"govuk-radios__input\" id=\"{{refund.name}}\" name=\"refundReason\" type=\"radio\"\n formControlName=\"refundReason\" value={{refund.code}}\n (change)=\"selectRadioButton(refund.name, refund.name)\">\n <label class=\"govuk-label--s govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{refund.name}}\n </label>\n\n <div class=\"govuk-radios__conditional\" *ngIf=\"isRefundReasonsSelected && showReasonText && selectedRefundReason === refund.name \" >\n <label class=\"govuk-label govuk-label--m\" for=\"{{refund.name}}\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"30\" formControlName=\"reason\">\n \n </div>\n </div>\n </div>\n </div>\n <br/>\n <div>\n <select formControlName=\"refundDDReason\" class=\"govuk-select\" id=\"sort\" (change)=\"selectchange($event)\">\n <option selected='selected' [defaultSelected]=true [value]=\"default\" >{{default}}</option> \n <!-- <option value=\"\" selected='selected'>Select a different reason</option> -->\n <option *ngFor=\"let refund of refundReasons;\" id=\"{{refund.name}}\" value=\"{{refund.code}}\">{{refund.name}}</option>\n </select>\n \n </div>\n <br/>\n <div class=\"govuk-radios__conditional\" *ngIf=\"showReasonText && !isRefundReasonsSelected\" >\n <label class=\"govuk-label govuk-label--m\" for=\"amount\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"30\" formControlName=\"reason\">\n \n </div>\n\n \n </div>\n </fieldset>\n </form>\n </div>\n </form>\n </div>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoCasetransationPage()\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoIssueRefundConfirmation(payment)\" class=\"govuk-button\"> Continue</button>\n <p>\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n </div>\n \n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'checkissuerefundpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKISSUEREFUNDPAGE'> \n <div class=\"govuk-warning-text\">\n \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 refund</td>\n <td class=\"govuk-table__cell\"> {{ selectedRefundReason }}\n <a (click)=\"changeIssueRefundReason()\" class=\"govuk-link right\" >Change</a>\n </td>\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\">{{this.payment.reference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{this.payment.amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoIssueRefundPage()\"> Previous </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmIssueRefund()\">\n Submit refund\n </button>\n <p>\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <!--Retro Refund-->\n <ng-container *ngIf=\"viewCompStatus === 'addrefundforremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'> \n <div class=\"govuk-warning-text\">\n \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 refund</td>\n <td class=\"govuk-table__cell\"> Retrospective remission </td>\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\">{{this.payment.reference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{this.remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code</td>\n <td class=\"govuk-table__cell\">{{this.remission.fee_code}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{this.remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoCasetransationPage()\">Previous</button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n <p>\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'retrorefundconfirmationpage'\">\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\" style=\"color: white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <div *ngIf=\"isPaymentSuccess\">\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 passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n </ng-container>\n\n</div>\n\n\n\n",
|
|
721
|
+
styles: [".add-remission .button{margin:20px 2px}.add-remission td.govuk-table__cell{width:50%}.add-remission .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:.5em}.add-remission .govuk-label--s,.add-remission .govuk-warning-text__text,.add-remission .hmcts-currency-input__symbol{font-size:19px;font-weight:400}.add-remission .inline-error-class{outline:#a71414 solid 3px;outline-offset:0}.add-remission .inline-error-message{color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.add-remission .govuk-button,.add-remission .govuk-link{margin-right:1em;font-size:19px;font-weight:200}.add-remission .govuk-button-group{padding-top:2em}.add-remission .heading-medium{margin-top:.875em}.add-remission .heading-large{margin-top:.25em}.add-remission .govuk-panel--confirmation{color:#fff;background:#00703c}.add-remission .govuk-panel__title{font-size:5rem}.add-remission .govuk-body,.add-remission .govuk-body-m{font-size:2.1875rem}.add-remission .govuk-radios__item{clear:initial!important;display:inline-block;width:45%!important}.add-remission .govuk-radios__conditional{padding-top:12px!important}.add-remission .radio,.add-remission .right{float:right}.govuk-input{font-size:19px}.govuk-select{font-size:19px;font-weight:400}.govuk-input--width-10{max-width:36ex}"]
|
|
722
|
+
}] }
|
|
239
723
|
];
|
|
240
724
|
/** @nocollapse */
|
|
241
725
|
AddRemissionComponent.ctorParameters = () => [
|
|
242
726
|
{ type: FormBuilder },
|
|
243
727
|
{ type: Router },
|
|
244
728
|
{ type: PaymentViewService },
|
|
245
|
-
{ type: PaymentLibComponent }
|
|
729
|
+
{ type: PaymentLibComponent },
|
|
730
|
+
{ type: RefundsService },
|
|
731
|
+
{ type: ChangeDetectorRef },
|
|
732
|
+
{ type: OrderslistService }
|
|
246
733
|
];
|
|
247
734
|
AddRemissionComponent.propDecorators = {
|
|
248
735
|
fee: [{ type: Input }],
|
|
736
|
+
payment: [{ type: Input }],
|
|
737
|
+
remission: [{ type: Input }],
|
|
249
738
|
ccdCaseNumber: [{ type: Input }],
|
|
250
|
-
|
|
739
|
+
caseType: [{ type: Input }],
|
|
740
|
+
viewCompStatus: [{ type: Input }],
|
|
251
741
|
paymentGroupRef: [{ type: Input }],
|
|
252
|
-
|
|
742
|
+
isTurnOff: [{ type: Input }],
|
|
743
|
+
isRefundRemission: [{ type: Input }],
|
|
744
|
+
isOldPcipalOff: [{ type: Input }],
|
|
745
|
+
isNewPcipalOff: [{ type: Input }],
|
|
746
|
+
isStrategicFixEnable: [{ type: Input }],
|
|
747
|
+
orderStatus: [{ type: Input }],
|
|
748
|
+
paidAmount: [{ type: Input }],
|
|
749
|
+
isFromRefundListPage: [{ type: Input }],
|
|
750
|
+
isFromPaymentDetailPage: [{ type: Input }],
|
|
751
|
+
isFromServiceRequestPage: [{ type: Input }],
|
|
752
|
+
cancelRemission: [{ type: Output }],
|
|
753
|
+
refundListReason: [{ type: Output }],
|
|
754
|
+
refundListAmount: [{ type: Output }]
|
|
253
755
|
};
|
|
254
756
|
if (false) {
|
|
255
757
|
/** @type {?} */
|
|
256
758
|
AddRemissionComponent.prototype.fee;
|
|
257
759
|
/** @type {?} */
|
|
760
|
+
AddRemissionComponent.prototype.payment;
|
|
761
|
+
/** @type {?} */
|
|
762
|
+
AddRemissionComponent.prototype.remission;
|
|
763
|
+
/** @type {?} */
|
|
258
764
|
AddRemissionComponent.prototype.ccdCaseNumber;
|
|
259
765
|
/** @type {?} */
|
|
260
|
-
AddRemissionComponent.prototype.
|
|
766
|
+
AddRemissionComponent.prototype.caseType;
|
|
767
|
+
/** @type {?} */
|
|
768
|
+
AddRemissionComponent.prototype.viewCompStatus;
|
|
261
769
|
/** @type {?} */
|
|
262
770
|
AddRemissionComponent.prototype.paymentGroupRef;
|
|
263
771
|
/** @type {?} */
|
|
772
|
+
AddRemissionComponent.prototype.isTurnOff;
|
|
773
|
+
/** @type {?} */
|
|
774
|
+
AddRemissionComponent.prototype.isRefundRemission;
|
|
775
|
+
/** @type {?} */
|
|
776
|
+
AddRemissionComponent.prototype.isOldPcipalOff;
|
|
777
|
+
/** @type {?} */
|
|
778
|
+
AddRemissionComponent.prototype.isNewPcipalOff;
|
|
779
|
+
/** @type {?} */
|
|
780
|
+
AddRemissionComponent.prototype.isStrategicFixEnable;
|
|
781
|
+
/** @type {?} */
|
|
782
|
+
AddRemissionComponent.prototype.orderStatus;
|
|
783
|
+
/** @type {?} */
|
|
784
|
+
AddRemissionComponent.prototype.paidAmount;
|
|
785
|
+
/** @type {?} */
|
|
786
|
+
AddRemissionComponent.prototype.isFromRefundListPage;
|
|
787
|
+
/** @type {?} */
|
|
788
|
+
AddRemissionComponent.prototype.isFromPaymentDetailPage;
|
|
789
|
+
/** @type {?} */
|
|
790
|
+
AddRemissionComponent.prototype.isFromServiceRequestPage;
|
|
791
|
+
/** @type {?} */
|
|
264
792
|
AddRemissionComponent.prototype.cancelRemission;
|
|
265
793
|
/** @type {?} */
|
|
794
|
+
AddRemissionComponent.prototype.refundListReason;
|
|
795
|
+
/** @type {?} */
|
|
796
|
+
AddRemissionComponent.prototype.refundListAmount;
|
|
797
|
+
/** @type {?} */
|
|
798
|
+
AddRemissionComponent.prototype.refund;
|
|
799
|
+
/** @type {?} */
|
|
266
800
|
AddRemissionComponent.prototype.remissionForm;
|
|
267
801
|
/** @type {?} */
|
|
268
802
|
AddRemissionComponent.prototype.hasErrors;
|
|
@@ -275,23 +809,93 @@ if (false) {
|
|
|
275
809
|
/** @type {?} */
|
|
276
810
|
AddRemissionComponent.prototype.isConfirmationBtnDisabled;
|
|
277
811
|
/** @type {?} */
|
|
812
|
+
AddRemissionComponent.prototype.bsPaymentDcnNumber;
|
|
813
|
+
/** @type {?} */
|
|
814
|
+
AddRemissionComponent.prototype.selectedValue;
|
|
815
|
+
/** @type {?} */
|
|
816
|
+
AddRemissionComponent.prototype.amount;
|
|
817
|
+
/** @type {?} */
|
|
818
|
+
AddRemissionComponent.prototype.retroRemission;
|
|
819
|
+
/** @type {?} */
|
|
820
|
+
AddRemissionComponent.prototype.remissionReference;
|
|
821
|
+
/** @type {?} */
|
|
822
|
+
AddRemissionComponent.prototype.refundReference;
|
|
823
|
+
/** @type {?} */
|
|
824
|
+
AddRemissionComponent.prototype.refundAmount;
|
|
825
|
+
/** @type {?} */
|
|
826
|
+
AddRemissionComponent.prototype.paymentExplanationHasError;
|
|
827
|
+
/** @type {?} */
|
|
828
|
+
AddRemissionComponent.prototype.refundReason;
|
|
829
|
+
/** @type {?} */
|
|
830
|
+
AddRemissionComponent.prototype.selectedRefundReason;
|
|
831
|
+
/** @type {?} */
|
|
832
|
+
AddRemissionComponent.prototype.refundCode;
|
|
833
|
+
/** @type {?} */
|
|
834
|
+
AddRemissionComponent.prototype.remessionPayment;
|
|
835
|
+
/** @type {?} */
|
|
278
836
|
AddRemissionComponent.prototype.isRemissionCodeEmpty;
|
|
279
837
|
/** @type {?} */
|
|
280
838
|
AddRemissionComponent.prototype.remissionCodeHasError;
|
|
281
839
|
/** @type {?} */
|
|
282
840
|
AddRemissionComponent.prototype.isAmountEmpty;
|
|
283
841
|
/** @type {?} */
|
|
842
|
+
AddRemissionComponent.prototype.isReasonEmpty;
|
|
843
|
+
/** @type {?} */
|
|
284
844
|
AddRemissionComponent.prototype.amountHasError;
|
|
285
845
|
/** @type {?} */
|
|
286
846
|
AddRemissionComponent.prototype.isRemissionLessThanFeeError;
|
|
287
847
|
/** @type {?} */
|
|
288
|
-
AddRemissionComponent.prototype.
|
|
848
|
+
AddRemissionComponent.prototype.refundHasError;
|
|
289
849
|
/** @type {?} */
|
|
290
|
-
AddRemissionComponent.prototype.
|
|
850
|
+
AddRemissionComponent.prototype.isPaymentSuccess;
|
|
291
851
|
/** @type {?} */
|
|
292
|
-
AddRemissionComponent.prototype.
|
|
852
|
+
AddRemissionComponent.prototype.isRemissionApplied;
|
|
853
|
+
/** @type {?} */
|
|
854
|
+
AddRemissionComponent.prototype.remissionamt;
|
|
855
|
+
/** @type {?} */
|
|
856
|
+
AddRemissionComponent.prototype.refundReasons;
|
|
857
|
+
/** @type {?} */
|
|
858
|
+
AddRemissionComponent.prototype.commonRefundReasons;
|
|
293
859
|
/** @type {?} */
|
|
860
|
+
AddRemissionComponent.prototype.showReasonText;
|
|
861
|
+
/** @type {?} */
|
|
862
|
+
AddRemissionComponent.prototype.isRefundReasonsSelected;
|
|
863
|
+
/** @type {?} */
|
|
864
|
+
AddRemissionComponent.prototype.default;
|
|
865
|
+
/**
|
|
866
|
+
* @type {?}
|
|
867
|
+
* @private
|
|
868
|
+
*/
|
|
869
|
+
AddRemissionComponent.prototype.formBuilder;
|
|
870
|
+
/**
|
|
871
|
+
* @type {?}
|
|
872
|
+
* @private
|
|
873
|
+
*/
|
|
874
|
+
AddRemissionComponent.prototype.router;
|
|
875
|
+
/**
|
|
876
|
+
* @type {?}
|
|
877
|
+
* @private
|
|
878
|
+
*/
|
|
879
|
+
AddRemissionComponent.prototype.paymentViewService;
|
|
880
|
+
/**
|
|
881
|
+
* @type {?}
|
|
882
|
+
* @private
|
|
883
|
+
*/
|
|
294
884
|
AddRemissionComponent.prototype.paymentLibComponent;
|
|
885
|
+
/**
|
|
886
|
+
* @type {?}
|
|
887
|
+
* @private
|
|
888
|
+
*/
|
|
889
|
+
AddRemissionComponent.prototype.refundService;
|
|
890
|
+
/**
|
|
891
|
+
* @type {?}
|
|
892
|
+
* @private
|
|
893
|
+
*/
|
|
894
|
+
AddRemissionComponent.prototype.cd;
|
|
895
|
+
/**
|
|
896
|
+
* @type {?}
|
|
897
|
+
* @private
|
|
898
|
+
*/
|
|
899
|
+
AddRemissionComponent.prototype.OrderslistService;
|
|
295
900
|
}
|
|
296
|
-
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUVsRSxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztBQWtHL0MsTUFBTTs7Ozs7OztJQW9CSixZQUFvQixXQUF3QixFQUNsQyxRQUNBLG9CQUNBO1FBSFUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDbEMsV0FBTSxHQUFOLE1BQU07UUFDTix1QkFBa0IsR0FBbEIsa0JBQWtCO1FBQ2xCLHdCQUFtQixHQUFuQixtQkFBbUI7K0JBbEJtQixJQUFJLFlBQVksRUFBRTt5QkFHdEQsS0FBSzswQkFDSixNQUFNOzRCQUNKLElBQUk7c0JBQ0YsSUFBSTt5Q0FDZ0IsS0FBSztvQ0FFVixLQUFLO3FDQUNKLEtBQUs7NkJBQ2IsS0FBSzs4QkFDSixLQUFLOzJDQUNRLEtBQUs7S0FLVzs7OztJQUV2RCxRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDMUMsYUFBYSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO2dCQUNwRCxVQUFVLENBQUMsUUFBUTtnQkFDbkIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxzREFBc0QsQ0FBQzthQUMzRSxDQUFDLENBQUM7WUFDSCxNQUFNLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzdDLFVBQVUsQ0FBQyxRQUFRO2dCQUNuQixVQUFVLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDO2FBQzdDLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0tBQzFCOzs7O0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzs7UUFDcEUsTUFBTSxjQUFjLEdBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQ29DOztRQURwRixNQUNFLHNCQUFzQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsY0FBYyxXQUFRLEtBQUssQ0FBQztRQUNwRixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7WUFDbkYsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7U0FDbEM7UUFBQSxJQUFJLENBQUMsQ0FBQztZQUVMLEVBQUUsQ0FBQSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRyxDQUFDLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2FBQzlFO1lBQ0QsRUFBRSxDQUFBLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLElBQUksY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQzthQUM5RTtZQUNELEVBQUUsQ0FBQSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRyxDQUFDLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3ZFO1lBQ0QsRUFBRSxDQUFBLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzdFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN0RTtZQUNELEVBQUUsQ0FBQSxDQUFDLGNBQWMsV0FBUSxLQUFLLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN2RTtTQUNGO0tBQ0Y7Ozs7OztJQUVELGtCQUFrQixDQUFDLEdBQUcsRUFBRSxLQUFLO1FBQzNCLEVBQUUsQ0FBQSxDQUFDLEtBQUssS0FBRyxlQUFlLElBQUksS0FBSyxLQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JDO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBRyxRQUFRLElBQUksS0FBSyxLQUFHLEtBQUssQ0FBQyxDQUFBLENBQUM7WUFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQztLQUNGOzs7O0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQzs7UUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLFdBQVEsS0FBSyxDQUdrRDs7UUFIL0csTUFDQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUUwRDs7UUFIL0csTUFFQyxXQUFXLEdBQUcsSUFBSSxtQkFBbUIsQ0FDckMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsa0JBQWUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQzlHLFFBQVEsQ0FBQyxFQUFFO1lBQ1QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7b0JBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDO29CQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLGFBQWEsb0NBQW9DLElBQUksQ0FBQyxNQUFNLG9CQUFvQixJQUFJLENBQUMsZUFBZSxRQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2lCQUN6TTtnQkFBQSxJQUFJLENBQUMsQ0FBQztvQkFDTCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztpQkFDL0I7YUFFRjtTQUNGLEVBQ0QsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7U0FDeEMsQ0FDRixDQUFDO0tBQ0g7Ozs7SUFDRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztRQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUM5QyxRQUFRLENBQUMsRUFBRTs7WUFDVCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssY0FBYyxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUM1RSxFQUNELEdBQUcsQ0FBQyxFQUFFO1lBQ0osSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDN0MsQ0FDRixDQUFDO0tBQ0g7OztZQWxORixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMkZYO2dCQUNDLE1BQU0sRUFBRSxDQUFDLHdmQUF3ZixDQUFDO2FBQ25nQjs7OztZQXhHUSxXQUFXO1lBRVosTUFBTTtZQUVMLGtCQUFrQjtZQUNsQixtQkFBbUI7OztrQkFxR3pCLEtBQUs7NEJBQ0wsS0FBSztzQkFDTCxLQUFLOzhCQUNMLEtBQUs7OEJBQ0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZlZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFkZFJlbWlzc2lvblJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FkZFJlbWlzc2lvblJlcXVlc3QnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuXG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1hZGQtcmVtaXNzaW9uJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiYWRkLXJlbWlzc2lvblwiPlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1zdW1tYXJ5XCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIj5cbiAgICAgICAgICBFcnJvciBpbiBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0XG4gICAgICAgIDwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnbWFpbidcIj5cbiAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmctbGFyZ2VcIj5BZGQgcmVtaXNzaW9uPC9oMT5cbiAgICAgIDxmb3JtIG5vdmFsaWRhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJyZW1pc3Npb25Gb3JtXCIgbm92YWxpZGF0ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLWxhYmVsLS1zXCIgZm9yPVwicmVtaXNzaW9uLWNvZGVcIj5cbiAgICAgICAgICAgICAgICAgIEFkZCByZW1pc3Npb24gdG8ge3sgZmVlLmNvZGUgfX06e3sgZmVlLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWhpbnRcIj5FbnRlciByZW1pc3Npb24gZm9yIHJlZmVyZW5jZS4gRm9yIGV4YW1wbGU6IEhXRi1BMUItMjNDPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgW25nQ2xhc3NdPVwieydpbmxpbmUtZXJyb3ItY2xhc3MnOiBpc1JlbWlzc2lvbkNvZGVFbXB0eSB8fCByZW1pc3Npb25Db2RlSGFzRXJyb3J9XCIgY2xhc3M9XCJnb3Z1ay1pbnB1dCBnb3Z1ay1pbnB1dC0td2lkdGgtMjAgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIGlkPVwicmVtaXNzaW9uQ29kZVwiIGFyaWEtbGFiZWw9XCJyZW1pc3Npb25Db2RlXCIgIG5hbWU9XCJyZW1pc3Npb25Db2RlXCIgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJyZW1pc3Npb25Db2RlXCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzUmVtaXNzaW9uQ29kZUVtcHR5IHx8IHJlbWlzc2lvbkNvZGVIYXNFcnJvclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNSZW1pc3Npb25Db2RlRW1wdHlcIj5FbnRlciBhIHJlbWlzc2lvbiBjb2RlPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVtaXNzaW9uQ29kZUhhc0Vycm9yXCI+RW50ZXIgYSB2YWlsZCByZW1pc3Npb24gY29kZTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1sYWJlbC0tc1wiIGZvcj1cImFtb3VudFwiPlxuICAgICAgICAgICAgICAgIEhvdyBtdWNoIGRvZXMgdGhlIGFwcGxpY2FudCBuZWVkIHRvIHBheT9cbiAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICA8ZGl2IGlkPVwiYW1vdW50LWN1cnJlbmN5XCIgY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj5pbiBwb3VuZHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG1jdHMtY3VycmVuY3ktaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG1jdHMtY3VycmVuY3ktaW5wdXRfX3N5bWJvbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPsKjPC9kaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstaW5wdXQgZ292dWstaW5wdXQtLXdpZHRoLTEwXCIgW25nQ2xhc3NdPVwieydpbmxpbmUtZXJyb3ItY2xhc3MnOiBpc0Ftb3VudEVtcHR5IHx8IGFtb3VudEhhc0Vycm9yIHx8IGlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvcn1cIiBpZD1cImFtb3VudFwiIGFyaWEtbGFiZWw9XCJhbW91bnRcIiAgbmFtZT1cImFtb3VudFwiIHR5cGU9XCJ0ZXh0XCIgYXJpYS1kZXNjcmliZWRieT1cImFtb3VudC1jdXJyZW5jeVwiIGZvcm1Db250cm9sTmFtZT1cImFtb3VudFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaW5saW5lLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImlzQW1vdW50RW1wdHkgfHwgYW1vdW50SGFzRXJyb3IgfHwgaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzQW1vdW50RW1wdHlcIj5FbnRlciBhIGFtb3VudDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYW1vdW50SGFzRXJyb3JcIj5FbnRlciBhIHZhaWxkIGFtb3VudDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yXCI+VGhlIHJlbWlzc2lvbiBhbW91bnQgbXVzdCBiZSBsZXNzIHRoYW4gdGhlIHRvdGFsIGZlZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cImFkZFJlbWlzc2lvbigpXCI+XG4gICAgICAgICAgICAgIFN1Ym1pdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdjb25maXJtYXRpb24nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+ITwvc3Bhbj5cbiAgICAgICAgPHN0cm9uZyBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dF9fdGV4dFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19hc3Npc3RpdmVcIj5XYXJuaW5nPC9zcGFuPlxuICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBhZGQgcmVtaXNzaW9uIHRvIHRoaXMgZmVlP1xuICAgICAgICA8L3N0cm9uZz5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+UmVtaXNzaW9uIGNvZGU6PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgcmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+RmVlIGNvZGU6PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgZmVlLmNvZGUgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5GZWUgZGVzY3JpcHRpb246PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgZmVlLmRlc2NyaXB0aW9uIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+QW1vdW50IHRoZSBhcHBsaWNhbnQgbXVzdCBwYXk6PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgIHJlbWlzc2lvbkZvcm0uY29udHJvbHMuYW1vdW50LnZhbHVlICB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGFibGU+XG5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbFJlbWlzc2lvbi5lbWl0KClcIj5cbiAgICAgICAgQ2FuY2VsXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZFwiXG4gICAgICBbbmdDbGFzc109J2lzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPyBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIidcbiAgICAgIChjbGljayk9XCJjb25maXJtUmVtaXNzaW9uKClcIj5cbiAgICAgICAgQ29uZmlybVxuICAgICAgPC9idXR0b24+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuPC9kaXY+XG5cbmAsXG4gIHN0eWxlczogW2AuYWRkLXJlbWlzc2lvbiAuYnV0dG9ue21hcmdpbjoyMHB4IDJweH0uYWRkLXJlbWlzc2lvbiB0ZC5nb3Z1ay10YWJsZV9fY2VsbHt3aWR0aDo1MCV9LmFkZC1yZW1pc3Npb24gLmdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6I2RlZTBlMjtib3gtc2hhZG93OjAgMnB4IDAgIzg1ODY4ODtjb2xvcjojMGIwYzBjO21hcmdpbi1yaWdodDouNWVtfS5hZGQtcmVtaXNzaW9uIC5nb3Z1ay1sYWJlbC0tcywuYWRkLXJlbWlzc2lvbiAuZ292dWstd2FybmluZy10ZXh0X190ZXh0LC5hZGQtcmVtaXNzaW9uIC5obWN0cy1jdXJyZW5jeS1pbnB1dF9fc3ltYm9se2ZvbnQtc2l6ZToxOXB4fS5hZGQtcmVtaXNzaW9uIC5pbmxpbmUtZXJyb3ItY2xhc3N7b3V0bGluZTojYTcxNDE0IHNvbGlkIDNweDtvdXRsaW5lLW9mZnNldDowfS5hZGQtcmVtaXNzaW9uIC5pbmxpbmUtZXJyb3ItbWVzc2FnZXtjb2xvcjojYTcxNDE0O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tdG9wOjEwcHh9YF1cbn0pXG5leHBvcnQgY2xhc3MgQWRkUmVtaXNzaW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZmVlOiBJRmVlO1xuICBASW5wdXQoKSBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlcnZpY2U6IHN0cmluZztcbiAgQElucHV0KCkgcGF5bWVudEdyb3VwUmVmOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBjYW5jZWxSZW1pc3Npb246IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICByZW1pc3Npb25Gb3JtOiBGb3JtR3JvdXA7XG4gIGhhc0Vycm9ycyA9IGZhbHNlO1xuICB2aWV3U3RhdHVzID0gJ21haW4nO1xuICBlcnJvck1lc3NhZ2UgPSBudWxsO1xuICBvcHRpb246IHN0cmluZyA9IG51bGw7XG4gIGlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBpc1JlbWlzc2lvbkNvZGVFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICByZW1pc3Npb25Db2RlSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNBbW91bnRFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbW91bnRIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50KSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9wdGlvbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT047XG4gICAgdGhpcy5yZW1pc3Npb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICByZW1pc3Npb25Db2RlOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XXszfSktKFthLXpBLVowLTldezN9KS0oW2EtekEtWjAtOV17M30pJCcpXG4gICAgICBdKSksXG4gICAgICBhbW91bnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rKFxcXFwuWzAtOV17Mn0pPyQnKVxuICAgICAgXSkpXG4gICAgfSk7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICB9XG5cbiAgYWRkUmVtaXNzaW9uKCkge1xuICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID4gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlOyBcbiAgICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICYmIHRoaXMucmVtaXNzaW9uRm9ybS52YWxpZCAmJiBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKSB7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY29uZmlybWF0aW9uJztcbiAgICB9ZWxzZSB7XG5cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZW1pc3Npb25Db2RlJyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlICE9ICcnICYmIHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlICE9ICcnICYmIHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCAmJiAhaXNSZW1pc3Npb25MZXNzVGhhbkZlZSl7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXNldFJlbWlzc2lvbkZvcm0odmFsLCBmaWVsZCl7XG4gICAgaWYoZmllbGQ9PT0ncmVtaXNzaW9uQ29kZScgfHwgZmllbGQ9PT0nQWxsJykge1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkNvZGVFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMucmVtaXNzaW9uQ29kZUhhc0Vycm9yID0gdmFsWzFdO1xuICAgIH0gZWxzZSBpZiAoZmllbGQ9PT0nYW1vdW50JyB8fCBmaWVsZD09PSdBbGwnKXtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFsyXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbM107XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFs0XTtcbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtaXNzaW9uKCkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgY29uc3QgbmV3TmV0QW1vdW50ID0gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLmFtb3VudC52YWx1ZSxcbiAgICAgcmVtaXNzaW9uQW1vdW50ID0gdGhpcy5mZWUubmV0X2Ftb3VudCAtIG5ld05ldEFtb3VudCxcbiAgICAgcmVxdWVzdEJvZHkgPSBuZXcgQWRkUmVtaXNzaW9uUmVxdWVzdFxuICAgICh0aGlzLmNjZENhc2VOdW1iZXIsIHRoaXMuZmVlLCByZW1pc3Npb25BbW91bnQsIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlLCB0aGlzLnNlcnZpY2UpO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RQYXltZW50R3JvdXBXaXRoUmVtaXNzaW9ucyh0aGlzLnBheW1lbnRHcm91cFJlZiwgdGhpcy5mZWUuaWQsIHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzKSB7XG4gICAgICAgICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY24pIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWZlZS1zdW1tYXJ5JnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JnBheW1lbnRHcm91cFJlZj0ke3RoaXMucGF5bWVudEdyb3VwUmVmfSZkY249JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNufWApO1xuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRCU2ZlYXR1cmUoKS5zdWJzY3JpYmUoXG4gICAgICBmZWF0dXJlcyA9PiB7XG4gICAgICAgIGxldCByZXN1bHQgPSBKU09OLnBhcnNlKGZlYXR1cmVzKS5maWx0ZXIoZmVhdHVyZSA9PiBmZWF0dXJlLnVpZCA9PT0gQlNfRU5BQkxFX0ZMQUcpO1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHJlc3VsdFswXSA/IHJlc3VsdFswXS5lbmFibGUgOiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
901
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFxQixNQUFNLGdCQUFnQixDQUFDO0FBRXBHLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFckYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDL0YsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztNQUVoRSxjQUFjLEdBQUcsdUJBQXVCO0FBTzlDLE1BQU0sT0FBTyxxQkFBcUI7Ozs7Ozs7Ozs7O0lBbUVoQyxZQUFvQixXQUF3QixFQUNsQyxNQUFjLEVBQ2Qsa0JBQXNDLEVBQ3RDLG1CQUF3QyxFQUN4QyxhQUE2QixFQUM3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Q3ZDLDRDQUE2Qjs7SUFDN0IsMkNBQXlCOztJQUN6QixxREFBdUM7O0lBQ3ZDLHdEQUEwQzs7SUFDMUMseURBQTJDOztJQUMzQyxnREFBbUU7O0lBRW5FLGlEQUFnRjs7SUFDaEYsaURBQXNFOztJQUV0RSx1Q0FPQzs7SUFFRCw4Q0FBeUI7O0lBQ3pCLDBDQUFrQjs7SUFDbEIsMkNBQW9COztJQUNwQiw2Q0FBb0I7O0lBQ3BCLHVDQUFzQjs7SUFDdEIsMERBQTJDOztJQUMzQyxtREFBMkI7O0lBQzNCLDhDQUFzQjs7SUFDdEIsdUNBQVk7O0lBQ1osK0NBQWdDOztJQUNoQyxtREFBZ0M7O0lBQ2hDLGdEQUF3Qjs7SUFDeEIsNkNBQXFCOztJQUNyQiwyREFBNEM7O0lBQzVDLDZDQUFvQjs7SUFDcEIscURBQTZCOztJQUM3QiwyQ0FBa0I7O0lBQ2xCLGlEQUEwQjs7SUFDMUIscURBQXNDOztJQUN0QyxzREFBdUM7O0lBQ3ZDLDhDQUErQjs7SUFDL0IsOENBQStCOztJQUMvQiwrQ0FBZ0M7O0lBQ2hDLDREQUE2Qzs7SUFDN0MsK0NBQStCOztJQUMvQixpREFBa0M7O0lBQ2xDLG1EQUFvQzs7SUFDcEMsNkNBQW9COztJQUNwQiw4Q0FBMEI7O0lBQzFCLG9EQUFnQzs7SUFDaEMsK0NBQXdCOztJQUN4Qix3REFBaUM7O0lBQ2pDLHdDQUFnQjs7Ozs7SUFHSiw0Q0FBZ0M7Ozs7O0lBQzFDLHVDQUFzQjs7Ozs7SUFDdEIsbURBQThDOzs7OztJQUM5QyxvREFBZ0Q7Ozs7O0lBQ2hELDhDQUFxQzs7Ozs7SUFDckMsbUNBQTZCOzs7OztJQUM3QixrREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBZGRSZW1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BZGRSZW1pc3Npb25SZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IElQYXltZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudCc7XG5pbXBvcnQgeyBSZWZ1bmRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlZnVuZHMvcmVmdW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IElSZWZ1bmRSZWFzb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kUmVhc29ucyc7XG5pbXBvcnQgeyBSZWZ1bmRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvUmVmdW5kc1JlcXVlc3QnO1xuaW1wb3J0IHsgQWRkUmV0cm9SZW1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BZGRSZXRyb1JlbWlzc2lvblJlcXVlc3QnO1xuaW1wb3J0IHsgSXNzdWVSZWZ1bmRSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9Jc3N1ZVJlZnVuZFJlcXVlc3QnO1xuaW1wb3J0IHsgUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9Qb3N0UmVmdW5kUmV0cm9SZW1pc3Npb24nO1xuaW1wb3J0IHsgUG9zdElzc3VlUmVmdW5kUmV0cm9SZW1pc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1Bvc3RJc3N1ZVJlZnVuZFJldHJvUmVtaXNzaW9uJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVJlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5pbXBvcnQgeyBPcmRlcnNsaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyc2xpc3Quc2VydmljZSc7XG5cbmNvbnN0IEJTX0VOQUJMRV9GTEFHID0gJ2J1bGstc2Nhbi1lbmFibGluZy1mZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWFkZC1yZW1pc3Npb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FkZC1yZW1pc3Npb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBZGRSZW1pc3Npb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBmZWU6IElGZWU7XG4gIEBJbnB1dCgpIHBheW1lbnQ6IElQYXltZW50O1xuICBASW5wdXQoKSByZW1pc3Npb246IElSZW1pc3Npb247XG4gIEBJbnB1dCgpIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgQElucHV0KCkgY2FzZVR5cGU6IHN0cmluZztcbiAgQElucHV0KCkgdmlld0NvbXBTdGF0dXM6IHN0cmluZztcbiAgQElucHV0KCkgcGF5bWVudEdyb3VwUmVmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNSZWZ1bmRSZW1pc3Npb246IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzT2xkUGNpcGFsT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc05ld1BjaXBhbE9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNTdHJhdGVnaWNGaXhFbmFibGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG9yZGVyU3RhdHVzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhaWRBbW91bnQ6IGFueTtcbiAgQElucHV0KCkgaXNGcm9tUmVmdW5kTGlzdFBhZ2U6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzRnJvbVBheW1lbnREZXRhaWxQYWdlOiBib29sZWFuO1xuICBASW5wdXQoKSBpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2U6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBjYW5jZWxSZW1pc3Npb246IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy9AT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKHtyZWFzb246c3RyaW5nLCBjb2RlOnN0cmluZ30pO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbiA9IG5ldyBFdmVudEVtaXR0ZXI8e3JlYXNvbjogc3RyaW5nLCBjb2RlOiBzdHJpbmd9PigpO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdEFtb3VudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVmdW5kID0ge1xuICAgIHJlYXNvbjoge1xuICAgICAgZHVwbGljYXRlOiAnRHVwbGljYXRlIHBheW1lbnQnLFxuICAgICAgaHVtYW5lcnJvcjogJ0h1bWFuIGVycm9yJyxcbiAgICAgIGNhc2VXaXRoZHJhd246ICdDYXNlIHdpdGhkcmF3bicsXG4gICAgICBvdGhlcjogJ090aGVyJ1xuICAgIH1cbiAgfVxuXG4gIHJlbWlzc2lvbkZvcm06IEZvcm1Hcm91cDtcbiAgaGFzRXJyb3JzID0gZmFsc2U7XG4gIHZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIGVycm9yTWVzc2FnZSA9IG51bGw7XG4gIG9wdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBic1BheW1lbnREY25OdW1iZXI6IHN0cmluZztcbiAgc2VsZWN0ZWRWYWx1ZSA9ICd5ZXMnO1xuICBhbW91bnQ6IGFueTtcbiAgcmV0cm9SZW1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVtaXNzaW9uUmVmZXJlbmNlOiBzdHJpbmcgPSAnJztcbiAgcmVmdW5kUmVmZXJlbmNlOiBzdHJpbmc7XG4gIHJlZnVuZEFtb3VudDogc3RyaW5nO1xuICBwYXltZW50RXhwbGFuYXRpb25IYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICByZWZ1bmRSZWFzb246c3RyaW5nO1xuICBzZWxlY3RlZFJlZnVuZFJlYXNvbjogc3RyaW5nO1xuICByZWZ1bmRDb2RlOnN0cmluZztcbiAgcmVtZXNzaW9uUGF5bWVudDpJUGF5bWVudDtcbiAgaXNSZW1pc3Npb25Db2RlRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVtaXNzaW9uQ29kZUhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQW1vdW50RW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWFzb25FbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbW91bnRIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kSGFzRXJyb3I6Ym9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnRTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtaXNzaW9uQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xuICByZW1pc3Npb25hbXQ6bnVtYmVyO1xuICByZWZ1bmRSZWFzb25zOiBhbnlbXSA9IFtdO1xuICBjb21tb25SZWZ1bmRSZWFzb25zOiBhbnlbXSA9IFtdO1xuICBzaG93UmVhc29uVGV4dDogYm9vbGVhbjtcbiAgaXNSZWZ1bmRSZWFzb25zU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGRlZmF1bHQ6IHN0cmluZztcbiAgLy8gcmVmdW5kUmVhc29uczpJUmVmdW5kUmVhc29uc1tdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSByZWZ1bmRTZXJ2aWNlOiBSZWZ1bmRzU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIE9yZGVyc2xpc3RTZXJ2aWNlOiBPcmRlcnNsaXN0U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kZWZhdWx0ID0gJ1NlbGVjdCBhIGRpZmZlcmVudCByZWFzb24nO1xuICAgIGlmKHRoaXMucmVtaXNzaW9uKSB7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgaWYodGhpcy5mZWUpIHtcbiAgICB0aGlzLmFtb3VudCA9ICh0aGlzLmZlZS52b2x1bWUgKiB0aGlzLmZlZS5jYWxjdWxhdGVkX2Ftb3VudCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBheW1lbnQpe1xuICAgICAgdGhpcy5yZW1lc3Npb25QYXltZW50ID0gdGhpcy5wYXltZW50O1xuICAgICAgaWYodGhpcy5wYXltZW50LnN0YXR1cyA9PT0gJ1N1Y2Nlc3MnKSB7XG4gICAgICAgIHRoaXMuaXNQYXltZW50U3VjY2VzcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmJzUGF5bWVudERjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY247XG4gICAgdGhpcy5yZW1pc3Npb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICByZW1pc3Npb25Db2RlOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XXszfSktKFthLXpBLVowLTldezN9KS0oW2EtekEtWjAtOV17M30pJCcpXG4gICAgICBdKSksXG4gICAgICBhbW91bnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rKFxcXFwuWzAtOV17Mn0pPyQnKVxuICAgICAgXSkpLFxuICAgICAgcmVmdW5kUmVhc29uOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcbiAgICAgIHJlZnVuZEREUmVhc29uOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcbiAgICAgIHJlYXNvbjogbmV3IEZvcm1Db250cm9sKClcbiAgICB9KTtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHM7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlZnVuZEREUmVhc29uJ10uc2V0VmFsdWUoJ1NlbGVjdCBhIGRpZmZlcmVudCByZWFzb24nLCB7b25seVNlbGY6IHRydWV9KTtcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAnJyl7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICAgIH1cbiBcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAnaXNzdWVyZWZ1bmQnKXtcbiAgICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRSZWFzb25zKCkuc3Vic2NyaWJlKFxuICAgICAgICByZWZ1bmRSZWFzb25zID0+IHsgXG4gICAgICAgICAgdGhpcy5yZWZ1bmRSZWFzb25zID0gcmVmdW5kUmVhc29uc1snZGF0YSddLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5yZWNlbnRseV91c2VkID09PSBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgdGhpcy5jb21tb25SZWZ1bmRSZWFzb25zID0gcmVmdW5kUmVhc29uc1snZGF0YSddLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5yZWNlbnRseV91c2VkID09PSB0cnVlKTtcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSApO1xuICAgICAgfVxuICAgIFxuICAgICAgaWYodGhpcy52aWV3Q29tcFN0YXR1cyA9PT0gJ3Byb2Nlc3NyZXRyb3JlbWlzc29ucGFnZScgJiYgdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSl7XG4gICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2UnO1xuICAgICAgICB9XG5cbiAgICAgIC8vIHRoaXMucmVmdW5kU2VydmljZS5nZXRVc2VyRGV0YWlscygpLnN1YnNjcmliZShcbiAgICAgIC8vICAgdXNlcmRldGFpbCA9PiB7IFxuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHVzZXJkZXRhaWwpO1xuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKHVzZXJkZXRhaWxbJ2RhdGEnXSk7XG4gICAgICAvLyAgIH0gKTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSXG4gIH1cblxuICBhZGRSZW1pc3Npb24oKSB7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID4gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlOyBcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kUmVhc29uJ10uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRERFJlYXNvbiddLnNldEVycm9ycyhudWxsKTtcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1snYW1vdW50J10uc2V0RXJyb3JzKG51bGwpO1xuICAgIGlmICh0aGlzLnJlbWlzc2lvbkZvcm0uZGlydHkgJiYgdGhpcy5yZW1pc3Npb25Gb3JtLnZhbGlkICYmIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWUpIHtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdjb25maXJtYXRpb24nO1xuICAgIH1lbHNlIHtcblxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZW1pc3Npb25Db2RlJyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlICE9ICcnICYmIHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZW1pc3Npb25Db2RlJyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCAmJiAhaXNSZW1pc3Npb25MZXNzVGhhbkZlZSl7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uZmlybVJlbWlzc2lvbigpIHtcbiAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIGNvbnN0IG5ld05ldEFtb3VudCA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5hbW91bnQudmFsdWUsXG4gICAgIHJlbWlzc2lvbkFtb3VudCA9IHRoaXMuZmVlLm5ldF9hbW91bnQgLSBuZXdOZXRBbW91bnQsXG4gICAgIHJlcXVlc3RCb2R5ID0gbmV3IEFkZFJlbWlzc2lvblJlcXVlc3RcbiAgICAodGhpcy5jY2RDYXNlTnVtYmVyLCB0aGlzLmZlZSwgcmVtaXNzaW9uQW1vdW50LCB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMucmVtaXNzaW9uQ29kZS52YWx1ZSwgdGhpcy5jYXNlVHlwZSk7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFBheW1lbnRHcm91cFdpdGhSZW1pc3Npb25zKGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLnBheW1lbnRHcm91cFJlZikudHJpbSgpLCB0aGlzLmZlZS5pZCwgcmVxdWVzdEJvZHkpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBsZXQgTERVcmwgPSB0aGlzLmlzVHVybk9mZiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJ1xuICAgICAgICAgICAgTERVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YFxuICAgICAgICAgICAgTERVcmwgKz0gdGhpcy5pc05ld1BjaXBhbE9mZiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSdcbiAgICAgICAgICAgIExEVXJsICs9IHRoaXMuaXNPbGRQY2lwYWxPZmYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnXG4gICAgICAgICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY24pIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWZlZS1zdW1tYXJ5JnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JnBheW1lbnRHcm91cFJlZj0ke3RoaXMucGF5bWVudEdyb3VwUmVmfSZkY249JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNufSR7TERVcmx9YCk7XG4gICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcmVzZXRSZW1pc3Npb25Gb3JtKHZhbCwgZmllbGQpe1xuICAgIGlmIChmaWVsZD09PSdBbGwnKXtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25Db2RlRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLnJlbWlzc2lvbkNvZGVIYXNFcnJvciA9IHZhbFsxXTtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFsyXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbM107XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFs0XTtcbiAgICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IHZhbFs1XTtcbiAgICB9IGVsc2UgaWYoZmllbGQ9PT0ncmVtaXNzaW9uQ29kZScgfHwgZmllbGQ9PT0nQWxsJykge1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkNvZGVFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMucmVtaXNzaW9uQ29kZUhhc0Vycm9yID0gdmFsWzFdO1xuICAgIH0gZWxzZSBpZiAoZmllbGQ9PT0nYW1vdW50JyB8fCBmaWVsZD09PSdBbGwnKXtcbiAgICAgIHRoaXMuaXNBbW91bnRFbXB0eSA9IHZhbFsyXTtcbiAgICAgIHRoaXMuYW1vdW50SGFzRXJyb3IgPSB2YWxbM107XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uTGVzc1RoYW5GZWVFcnJvciA9IHZhbFs0XTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkPT09J3JlYXNvbicgfHwgZmllbGQ9PT0nQWxsJyl7XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbNV07XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHJldHJvIHJlbWlzc2lvbiBjaGFuZ2VzXG4gIGFkZFJlbWlzc2lvbkNvZGUoKSB7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID49IHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWx1ZTsgXG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnNldEVycm9ycyhudWxsKTtcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kRERSZWFzb24nXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ2Ftb3VudCddLnNldEVycm9ycyhudWxsKTtcbiAgICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICYmIHRoaXMucmVtaXNzaW9uRm9ybS52YWxpZCAmJiBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKSB7XG4gICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSBcInByb2Nlc3NyZXRyb3JlbWlzc29ucGFnZVwiO1xuICAgIH1lbHNlIHtcblxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnZhbHVlID09ICcnKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZV0sICdyZWFzb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCAmJiAhaXNSZW1pc3Npb25MZXNzVGhhbkZlZSl7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICBcbiAgICB9XG4gIH1cblxuXG4gIGdvdG9BZGRSZXRyb1JlbWlzc2lvbkNvZGVQYWdlKCkge1xuXG4gICAgaWYodGhpcy5pc1JlZnVuZFJlbWlzc2lvbikge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlZnVuZExpc3RBbW91bnQuZW1pdCgpO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmdW5kTGlzdFJlYXNvbi5lbWl0KHtyZWFzb246IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24sIGNvZGU6IHRoaXMucmVmdW5kUmVhc29ufSk7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfSBcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAneWVzJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gXCJhZGRyZW1pc3Npb25cIjtcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGlmKHRoaXMuaXNGcm9tUGF5bWVudERldGFpbFBhZ2UpIHtcbiAgICAgIC8vIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50TWV0aG9kID0gdGhpcy5wYXltZW50Lm1ldGhvZDtcbiAgICAgIC8vIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnRHcm91cFJlZjtcbiAgICAgIC8vIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlID0gdGhpcy5wYXltZW50LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtdmlldyc7XG4gICAgfVxuICB9XG5cbiAgZ290b0NoZWNrUmV0cm9SZW1pc3Npb25QYWdlKHBheW1lbnQ6IElQYXltZW50KSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdBbGwnKTtcbiAgICBpZiggIXRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICB2YXIgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID49IHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWx1ZTsgXG4gICAgaWYgKHRoaXMucmVtaXNzaW9uRm9ybS5kaXJ0eSApIHtcbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfSBlbHNlIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfSBlbHNlIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCAmJiAhaXNSZW1pc3Npb25MZXNzVGhhbkZlZSl7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9IFwiY2hlY2tyZXRyb3JlbWlzc2lvbnBhZ2VcIjtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scztcbiAgICAvL2lmICh0aGlzLnJlbWlzc2lvbkZvcm0uZGlydHkgKSB7XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9IFwiY2hlY2tyZXRyb3JlbWlzc2lvbnBhZ2VcIjtcbiAgICAgICAgICB0aGlzLnJlZnVuZExpc3RBbW91bnQuZW1pdChyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUpO1xuICAgICAgfVxuICAgIC8vfVxuICAgXG4gIH1cbiAgfVxuXG4gIGdvdG9Qcm9jZXNzUmV0cm9SZW1pc3Npb25QYWdlKCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnYWRkcmVtaXNzaW9uJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICB9XG5cbiAgY29uZmlybVJldHJvUmVtaXNzaW9uKCkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5yZXRyb1JlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5yZW1pc3Npb25hbXQgPSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMuYW1vdW50LnZhbHVlO1xuXG4gICAgLy8gaWYodGhpcy5yZW1lc3Npb25QYXltZW50LnN0YXR1cyA9PT0gJ1N1Y2Nlc3MnKSB7XG4gICAgLy8gICBpZih0aGlzLmZlZS5jYWxjdWxhdGVkX2Ftb3VudC50b1N0cmluZygpID09PSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMuYW1vdW50LnZhbHVlKSB7XG4gICAgLy8gICAgIHRoaXMucmVtaXNzaW9uYW10ID10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMuYW1vdW50LnZhbHVlXG4gICAgLy8gICB9XG4gICAgLy8gICBlbHNlIFxuICAgIC8vICAge1xuICAgIC8vICAgICB0aGlzLnJlbWlzc2lvbmFtdCA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50IC0gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLmFtb3VudC52YWx1ZTtcbiAgICAvLyAgIH1cblxuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICB0aGlzLnJlbWlzc2lvbmFtdCA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5hbW91bnQudmFsdWU7XG4gICAgLy8gfVxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IEFkZFJldHJvUmVtaXNzaW9uUmVxdWVzdCh0aGlzLnJlbWlzc2lvbmFtdCx0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMucmVtaXNzaW9uQ29kZS52YWx1ZSApXG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFBheW1lbnRHcm91cFdpdGhSZXRyb1JlbWlzc2lvbnMoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucGF5bWVudEdyb3VwUmVmKS50cmltKCksIHRoaXMuZmVlLmlkLCByZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uQXBwbGllZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncmV0cm9yZW1pc3Npb25jb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgICB0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSA9SlNPTi5wYXJzZShyZXNwb25zZSkucmVtaXNzaW9uX3JlZmVyZW5jZTtcbiAgICAgICAgICAvL2lmICh0aGlzLnJldHJvUmVtaXNzaW9uKSB7XG4gICAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAgIC8vICAgbGV0IExEVXJsID0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSdcbiAgICAgICAgICAvLyAgICAgTERVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YFxuICAgICAgICAgIC8vICAgICBMRFVybCArPSB0aGlzLmlzTmV3UGNpcGFsT2ZmID8gJyZpc05ld1BjaXBhbE9mZj1FbmFibGUnIDogJyZpc05ld1BjaXBhbE9mZj1EaXNhYmxlJ1xuICAgICAgICAgIC8vICAgICBMRFVybCArPSB0aGlzLmlzT2xkUGNpcGFsT2ZmID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJ1xuICAgICAgICAgIC8vICAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbikge1xuICAgICAgICAgIC8vICAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICAgICAgLy8gICAgICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgICAgICAgIC8vICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9ZmVlLXN1bW1hcnkmc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0mcGF5bWVudEdyb3VwUmVmPSR7dGhpcy5wYXltZW50R3JvdXBSZWZ9JmRjbj0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY259JHtMRFVybH1gKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgLy8gICAgIH1lbHNlIHtcbiAgICAgICAgICAvLyAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgIC8vIH1cblxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcm9jZXNzUmVmdW5kKCkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICBpZiggdGhpcy5pc1JlZnVuZFJlbWlzc2lvbikge1xuICAgICAgdGhpcy5yZXRyb1JlbWlzc2lvbiA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucmVtaXNzaW9uUmVmZXJlbmNlID09PSAnJykge1xuICAgICAgdGhpcy5yZW1pc3Npb25SZWZlcmVuY2UgPSB0aGlzLnJlbWlzc2lvbi5yZW1pc3Npb25fcmVmZXJlbmNlO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IG5ldyBQb3N0SXNzdWVSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSk7XG4gIFxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgID0gJyc7XG4gICAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncmVmdW5kY29uZmlybWF0aW9ucGFnZSc7XG4gICAgICAgICAgICB0aGlzLnJlZnVuZFJlZmVyZW5jZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9yZWZlcmVuY2U7XG4gICAgICAgICAgICB0aGlzLnJlZnVuZEFtb3VudCA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0pXG4gIH1cblxuICAvLyBJc3N1ZSBSZWZ1bmQgY2hhbmdlc1xuXG4gIGdvdG9Jc3N1ZVJlZnVuZENvbmZpcm1hdGlvbihwYXltZW50OiBJUGF5bWVudCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMucmVmdW5kUmVhc29uID0gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRSZWFzb24nXS52YWx1ZSA9PT0gbnVsbCA/IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kRERSZWFzb24nXS52YWx1ZSA6IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kUmVhc29uJ10udmFsdWU7XG4gICAgaWYoIXRoaXMucmVmdW5kUmVhc29uKSB7XG4gICAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYodGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbi5pbmNsdWRlcygnT3RoZXInKSAmJiAodGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZSA9PSAnJyB8fCB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnZhbHVlID09IG51bGwpKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZV0sICdyZWFzb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uaW5jbHVkZXMoJ090aGVyJykgJiYgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZSAhPT0gJycpIHtcbiAgICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmdW5kUmVhc29uICs9ICAnLScgKyB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnZhbHVlO1xuICAgICAgdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVhc29uJ10udmFsdWU7XG4gICAgICBpZiAoIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgKSB7XG4gICAgICAgIHRoaXMucmVmdW5kTGlzdFJlYXNvbi5lbWl0KHtyZWFzb246IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24sIGNvZGU6IHRoaXMucmVmdW5kUmVhc29ufSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdjaGVja2lzc3VlcmVmdW5kcGFnZSc7XG4gICAgICB9XG4gICAgICBcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlICkge1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVmdW5kTGlzdFJlYXNvbi5lbWl0KHtyZWFzb246IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24sIGNvZGU6IHRoaXMucmVmdW5kUmVhc29ufSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdjaGVja2lzc3VlcmVmdW5kcGFnZSc7XG4gICAgICB9XG4gICBcbiAgICB9XG4gIH1cblxuICBnb3RvSXNzdWVSZWZ1bmRQYWdlKCkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdpc3N1ZXJlZnVuZCc7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJyc7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gZmFsc2U7XG4gIH1cblxuICBjaGFuZ2VJc3N1ZVJlZnVuZFJlYXNvbigpIHtcbiAgIC8vIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kUmVhc29uJ10uc2V0VmFsdWUoJ0R1cGxpY2F0ZSBwYXltZW50Jyk7XG4gICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2lzc3VlcmVmdW5kJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgfVxuXG4gIGNvbmZpcm1Jc3N1ZVJlZnVuZCgpIHtcbiAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgaWYoIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICAgIHRoaXMucmV0cm9SZW1pc3Npb24gPSB0cnVlO1xuICAgIH1cbiAgIFxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLnBheW1lbnQucmVmZXJlbmNlLHRoaXMucmVmdW5kUmVhc29uKTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UmVmdW5kc1JlYXNvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZWZ1bmRjb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgICAgIHRoaXMucmVmdW5kUmVmZXJlbmNlID1KU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfcmVmZXJlbmNlO1xuICAgICAgICAgICAgaWYoSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudCkge1xuICAgICAgICAgICAgdGhpcy5yZWZ1bmRBbW91bnQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICB9XG5cbi8vIFJldHJvIFJlZnVuZFxuXG4gIGNvbmZpcm1SZXRyb1JlZnVuZCgpIHtcbiAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgaWYoIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICAgIHRoaXMucmV0cm9SZW1pc3Npb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLnBheW1lbnQucmVmZXJlbmNlLCdSUjAwNC1SZXRyb3NwZWN0aXZlIHJlbWlzc2lvbicpO1xuICAgIC8vIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IElzc3VlUmVmdW5kUmVxdWVzdCh0aGlzLnBheW1lbnQucmVmZXJlbmNlLCdSUjAwNC1SZXRybyByZW1pc3Npb24nLHRoaXMucGF5bWVudC5hbW91bnQpO1xuICBcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UmVmdW5kc1JlYXNvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZXRyb3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICAgICAgdGhpcy5yZWZ1bmRSZWZlcmVuY2UgPUpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9yZWZlcmVuY2U7XG4gICAgICAgICAgICBpZihKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50KSB7XG4gICAgICAgICAgICAgIHRoaXMucmVmdW5kQW1vdW50ID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0UmFkaW9CdXR0b24oa2V5LCB2YWx1ZSkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwibXlyYWRpb1wiLCBrZXkpO1xuICAgIGNvbnN0IHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scztcbiAgICByZW1pc3Npb25jdHJsc1sncmVmdW5kRERSZWFzb24nXS5zZXRWYWx1ZSgnU2VsZWN0IGEgZGlmZmVyZW50IHJlYXNvbicsIHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgIC8vIHJlbWlzc2lvbmN0cmxzWydyZWZ1bmRERFJlYXNvbiddLnJlc2V0KCk7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnJlc2V0KCk7XG4gICAgdGhpcy5pc1JlZnVuZFJlYXNvbnNTZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dSZWFzb25UZXh0ID0gZmFsc2U7XG4gICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24gPSBrZXk7XG4gICAgaWYodGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbi5pbmNsdWRlcygnT3RoZXInKSkge1xuICAgICAgdGhpcy5zaG93UmVhc29uVGV4dCA9IHRydWU7XG4gICAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZnVuZFJlYXNvbiA9IGtleTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RjaGFuZ2UoYXJncykge1xuICAgIGNvbnN0IHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scztcbiAgICByZW1pc3Npb25jdHJsc1sncmVmdW5kUmVhc29uJ10ucmVzZXQoKTtcbiAgICByZW1pc3Npb25jdHJsc1sncmVhc29uJ10ucmVzZXQoKTtcbiAgICB0aGlzLmlzUmVmdW5kUmVhc29uc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5zaG93UmVhc29uVGV4dCA9IGZhbHNlO1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uID0gYXJncy50YXJnZXQub3B0aW9uc1thcmdzLnRhcmdldC5vcHRpb25zLnNlbGVjdGVkSW5kZXhdLmlkO1xuICAgIGlmKHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uaW5jbHVkZXMoJ090aGVyJykpIHtcbiAgICAgIHRoaXMuc2hvd1JlYXNvblRleHQgPSB0cnVlO1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWZ1bmRSZWFzb24gPSBhcmdzLnRhcmdldC5vcHRpb25zW2FyZ3MudGFyZ2V0Lm9wdGlvbnMuc2VsZWN0ZWRJbmRleF0uaWQ7XG4gICAgfVxuXG5cbiAgfVxuXG4gIGdvdG9TZXJ2aWNlUmVxdWVzdFBhZ2UoKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbidcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldHBheW1lbnRQYWdlVmlldyhudWxsKTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0aXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKHRydWUpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ3NlcnZpY2VyZXF1ZXN0cGFnZScpO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSB0cnVlO1xuICB9XG5cbiAgZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpIHtcbiAgICBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UpIHtcbiAgICAgIHRoaXMuIGdvdG9TZXJ2aWNlUmVxdWVzdFBhZ2UoKTtcbiAgICB9XG4gICAgaWYgKCB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlICkge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlZnVuZExpc3RSZWFzb24uZW1pdCh7cmVhc29uOiB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLCBjb2RlOiB0aGlzLnJlZnVuZFJlYXNvbn0pO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgIH0gXG4gICAgaWYoIXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlKSB7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRwYXltZW50UGFnZVZpZXcoe21ldGhvZDogdGhpcy5wYXltZW50Lm1ldGhvZCxwYXltZW50X2dyb3VwX3JlZmVyZW5jZTogdGhpcy5wYXltZW50R3JvdXBSZWYsIHJlZmVyZW5jZTp0aGlzLnBheW1lbnQucmVmZXJlbmNlfSk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgncGF5bWVudGRldGFpbHNwYWdlJyk7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU05FV1BDSVBBTE9GRiA9IHRoaXMuaXNOZXdQY2lwYWxPZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID0gdGhpcy5pc09sZFBjaXBhbE9mZjtcblxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGxldCBwYXJ0VXJsID0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgIGlmKHRoaXMuaXNGcm9tUGF5bWVudERldGFpbFBhZ2UpIHtcbiAgICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZVxuICAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZ0YWtlUGF5bWVudD10cnVlJnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JHtwYXJ0VXJsfWA7XG4gICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPT09ICdyZWZ1bmRzdGF0dXNsaXN0JztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgfVxuXG4gIGdvVG9TZXJ2aWNlUmVxdWVzdFBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lXG4gIH1cbiAgZ2V0Rm9ybWF0dGVkQ3VycmVuY3koY3VycmVuY3k6bnVtYmVyKXtcbiAgICBpZihjdXJyZW5jeS50b1N0cmluZygpLmluY2x1ZGVzKFwiLlwiKSl7XG4gICAgICByZXR1cm4gY3VycmVuY3lcbiAgICB9XG4gICAgIHJldHVybiBjdXJyZW5jeS50b1N0cmluZygpLmNvbmNhdChcIi4wMFwiKTtcbiAgfVxuICAvLyBjb250aW51ZVJlbWlzc2lvbigpe1xuICAvLyAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gIC8vICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAvLyAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID4gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlOyBcbiAgLy8gICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICYmIHRoaXMucmVtaXNzaW9uRm9ybS52YWxpZCAmJiBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKSB7XG4gIC8vICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gIC8vICAgICB0aGlzLnZpZXdTdGF0dXMgPSBcInByb2Nlc3NyZXRyb3JlbWlzc29ucGFnZVwiO1xuICAvLyAgIH1lbHNlIHtcblxuICAvLyAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSA9PSAnJyApIHtcbiAgLy8gICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS5pbnZhbGlkICkge1xuICAvLyAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAvLyAgICAgfVxuICAvLyAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnICkge1xuICAvLyAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gIC8vICAgICB9XG4gIC8vICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQgKSB7XG4gIC8vICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAvLyAgICAgfVxuICAvLyAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnZhbHVlID09ICcnKSB7XG4gIC8vICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZV0sICdyZWFzb24nKTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCAmJiAhaXNSZW1pc3Npb25MZXNzVGhhbkZlZSl7XG4gIC8vICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdhbW91bnQnKTtcbiAgLy8gICAgIH1cbiAgICBcbiAgLy8gICB9XG4gXG4gIC8vIH1cblxufVxuIl19
|