@hmcts/ccpay-web-component 5.0.8-beta05 → 5.0.8-beta10
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 +1690 -7568
- package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js +2 -2
- package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
- package/esm2015/hmcts-ccpay-web-component.js +2 -7
- package/esm2015/lib/components/add-remission/add-remission.component.js +166 -446
- package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +61 -360
- package/esm2015/lib/components/card-details/card-details.component.js +15 -55
- package/esm2015/lib/components/case-transactions/case-transactions.component.js +127 -698
- package/esm2015/lib/components/error-banner/error-banner.component.js +16 -26
- package/esm2015/lib/components/fee-summary/fee-summary.component.js +59 -268
- package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +40 -192
- package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +44 -236
- package/esm2015/lib/components/page-not-found.component.js +10 -13
- package/esm2015/lib/components/payment-list/payment-list.component.js +15 -56
- package/esm2015/lib/components/payment-view/payment-view.component.js +115 -361
- package/esm2015/lib/components/pba-details/pba-details.component.js +16 -26
- package/esm2015/lib/components/pba-payment/pba-payment.component.js +27 -130
- package/esm2015/lib/components/process-refund/process-refund.component.js +39 -190
- package/esm2015/lib/components/processed-payments/processed-payments.component.js +22 -53
- package/esm2015/lib/components/refund-list/refund-list.component.js +32 -91
- package/esm2015/lib/components/refund-status/refund-status.component.js +58 -270
- package/esm2015/lib/components/reports/reports.component.js +39 -223
- package/esm2015/lib/components/service-request/service-request.component.js +108 -394
- package/esm2015/lib/components/status-history/status-history.component.js +19 -55
- package/esm2015/lib/components/table/table.component.js +39 -120
- package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +65 -203
- package/esm2015/lib/interfaces/AddRemissionRequest.js +1 -29
- package/esm2015/lib/interfaces/AddRetroRemissionRequest.js +1 -16
- package/esm2015/lib/interfaces/AllocatePaymentRequest.js +1 -43
- package/esm2015/lib/interfaces/IAllocationPaymentsRequest.js +1 -27
- package/esm2015/lib/interfaces/IBSPayments.js +1 -46
- package/esm2015/lib/interfaces/ICardDetails.js +1 -22
- package/esm2015/lib/interfaces/IFee.js +1 -54
- package/esm2015/lib/interfaces/IOrderReferenceFee.js +1 -26
- package/esm2015/lib/interfaces/IPatchRefundAction.js +1 -16
- package/esm2015/lib/interfaces/IPayment.js +1 -66
- package/esm2015/lib/interfaces/IPaymentFailure.js +1 -34
- package/esm2015/lib/interfaces/IPaymentGroup.js +1 -20
- package/esm2015/lib/interfaces/IPaymentStatus.js +1 -26
- package/esm2015/lib/interfaces/IPaymentView.js +1 -18
- package/esm2015/lib/interfaces/IPayments.js +1 -14
- package/esm2015/lib/interfaces/IRefundAction.js +1 -16
- package/esm2015/lib/interfaces/IRefundList.js +1 -30
- package/esm2015/lib/interfaces/IRefundReasons.js +1 -20
- package/esm2015/lib/interfaces/IRefundRejectReason.js +1 -16
- package/esm2015/lib/interfaces/IRefundStatus.js +1 -24
- package/esm2015/lib/interfaces/IRefundStatusHistory.js +1 -16
- package/esm2015/lib/interfaces/IRemission.js +1 -26
- package/esm2015/lib/interfaces/IResubmitRefundRequest.js +1 -16
- package/esm2015/lib/interfaces/IStatusHistories.js +1 -20
- package/esm2015/lib/interfaces/IStatusHistory.js +1 -22
- package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +1 -17
- package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +1 -24
- package/esm2015/lib/interfaces/IssueRefundRequest.js +1 -19
- package/esm2015/lib/interfaces/PayhubAntennaRequest.js +2 -22
- package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +2 -28
- package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +1 -13
- package/esm2015/lib/interfaces/PostRefundRetroRemission.js +1 -16
- package/esm2015/lib/interfaces/RefundsRequest.js +1 -16
- package/esm2015/lib/interfaces/UnidentifiedPaymentsRequest.js +1 -21
- package/esm2015/lib/interfaces/UnsolicitedPaymentsRequest.js +1 -30
- package/esm2015/lib/payment-lib.component.js +120 -188
- package/esm2015/lib/payment-lib.module.js +55 -58
- package/esm2015/lib/payment-lib.service.js +12 -54
- package/esm2015/lib/pipes/capitalize.pipe.js +11 -20
- package/esm2015/lib/pipes/ccd-hyphens.pipe.js +11 -21
- package/esm2015/lib/pipes/key-value.pipe.js +11 -20
- package/esm2015/lib/pipes/sanitize-html.pipe.js +10 -27
- package/esm2015/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +22 -110
- package/esm2015/lib/services/card-details/card-details.service.js +15 -47
- package/esm2015/lib/services/case-transactions/case-transactions.service.js +15 -47
- package/esm2015/lib/services/orderslist.service.js +12 -260
- package/esm2015/lib/services/payment-list/payment-list.service.js +15 -50
- package/esm2015/lib/services/payment-view/payment-view.service.js +18 -177
- package/esm2015/lib/services/refunds/refunds.service.js +21 -117
- package/esm2015/lib/services/shared/error-handler.service.js +12 -28
- package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +15 -88
- package/esm2015/lib/services/shared/logger/console-logger.service.js +12 -35
- package/esm2015/lib/services/shared/logger/logger.service.js +12 -43
- package/esm2015/lib/services/status-history/status-history.service.js +15 -48
- package/esm2015/lib/services/xl-file/xl-file.service.js +10 -67
- package/esm2015/public_api.js +4 -9
- package/esm5/hmcts-ccpay-web-component.js +2 -7
- package/esm5/lib/components/add-remission/add-remission.component.js +185 -542
- package/esm5/lib/components/allocate-payments/allocate-payments.component.js +75 -420
- package/esm5/lib/components/card-details/card-details.component.js +14 -54
- package/esm5/lib/components/case-transactions/case-transactions.component.js +160 -851
- package/esm5/lib/components/error-banner/error-banner.component.js +15 -29
- package/esm5/lib/components/fee-summary/fee-summary.component.js +70 -321
- package/esm5/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +46 -224
- package/esm5/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +52 -278
- package/esm5/lib/components/page-not-found.component.js +7 -11
- package/esm5/lib/components/payment-list/payment-list.component.js +14 -61
- package/esm5/lib/components/payment-view/payment-view.component.js +134 -440
- package/esm5/lib/components/pba-details/pba-details.component.js +15 -29
- package/esm5/lib/components/pba-payment/pba-payment.component.js +30 -150
- package/esm5/lib/components/process-refund/process-refund.component.js +45 -272
- package/esm5/lib/components/processed-payments/processed-payments.component.js +22 -63
- package/esm5/lib/components/refund-list/refund-list.component.js +30 -90
- package/esm5/lib/components/refund-status/refund-status.component.js +71 -335
- package/esm5/lib/components/reports/reports.component.js +49 -276
- package/esm5/lib/components/service-request/service-request.component.js +122 -462
- package/esm5/lib/components/status-history/status-history.component.js +17 -53
- package/esm5/lib/components/table/table.component.js +44 -154
- package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +75 -259
- package/esm5/lib/interfaces/AddRemissionRequest.js +1 -22
- package/esm5/lib/interfaces/AddRetroRemissionRequest.js +1 -12
- package/esm5/lib/interfaces/AllocatePaymentRequest.js +1 -36
- package/esm5/lib/interfaces/IAllocationPaymentsRequest.js +1 -20
- package/esm5/lib/interfaces/IBSPayments.js +1 -46
- package/esm5/lib/interfaces/ICardDetails.js +1 -22
- package/esm5/lib/interfaces/IFee.js +1 -54
- package/esm5/lib/interfaces/IOrderReferenceFee.js +1 -26
- package/esm5/lib/interfaces/IPatchRefundAction.js +1 -16
- package/esm5/lib/interfaces/IPayment.js +1 -66
- package/esm5/lib/interfaces/IPaymentFailure.js +1 -34
- package/esm5/lib/interfaces/IPaymentGroup.js +1 -20
- package/esm5/lib/interfaces/IPaymentStatus.js +1 -26
- package/esm5/lib/interfaces/IPaymentView.js +1 -18
- package/esm5/lib/interfaces/IPayments.js +1 -14
- package/esm5/lib/interfaces/IRefundAction.js +1 -16
- package/esm5/lib/interfaces/IRefundList.js +1 -30
- package/esm5/lib/interfaces/IRefundReasons.js +1 -20
- package/esm5/lib/interfaces/IRefundRejectReason.js +1 -16
- package/esm5/lib/interfaces/IRefundStatus.js +1 -24
- package/esm5/lib/interfaces/IRefundStatusHistory.js +1 -16
- package/esm5/lib/interfaces/IRemission.js +1 -26
- package/esm5/lib/interfaces/IResubmitRefundRequest.js +1 -12
- package/esm5/lib/interfaces/IStatusHistories.js +1 -20
- package/esm5/lib/interfaces/IStatusHistory.js +1 -22
- package/esm5/lib/interfaces/IserviceRequestCardPayment.js +1 -14
- package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +1 -18
- package/esm5/lib/interfaces/IssueRefundRequest.js +1 -14
- package/esm5/lib/interfaces/PayhubAntennaRequest.js +2 -17
- package/esm5/lib/interfaces/PaymentToPayhubRequest.js +2 -23
- package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +1 -10
- package/esm5/lib/interfaces/PostRefundRetroRemission.js +1 -12
- package/esm5/lib/interfaces/RefundsRequest.js +1 -12
- package/esm5/lib/interfaces/UnidentifiedPaymentsRequest.js +1 -16
- package/esm5/lib/interfaces/UnsolicitedPaymentsRequest.js +1 -22
- package/esm5/lib/payment-lib.component.js +114 -184
- package/esm5/lib/payment-lib.module.js +52 -56
- package/esm5/lib/payment-lib.service.js +17 -88
- package/esm5/lib/pipes/capitalize.pipe.js +9 -24
- package/esm5/lib/pipes/ccd-hyphens.pipe.js +9 -25
- package/esm5/lib/pipes/key-value.pipe.js +9 -23
- package/esm5/lib/pipes/sanitize-html.pipe.js +8 -27
- package/esm5/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +28 -153
- package/esm5/lib/services/card-details/card-details.service.js +13 -44
- package/esm5/lib/services/case-transactions/case-transactions.service.js +13 -44
- package/esm5/lib/services/orderslist.service.js +45 -420
- package/esm5/lib/services/payment-list/payment-list.service.js +13 -48
- package/esm5/lib/services/payment-view/payment-view.service.js +40 -307
- package/esm5/lib/services/refunds/refunds.service.js +29 -164
- package/esm5/lib/services/shared/error-handler.service.js +11 -38
- package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +18 -120
- package/esm5/lib/services/shared/logger/console-logger.service.js +13 -42
- package/esm5/lib/services/shared/logger/logger.service.js +11 -54
- package/esm5/lib/services/status-history/status-history.service.js +13 -46
- package/esm5/lib/services/xl-file/xl-file.service.js +15 -115
- package/esm5/public_api.js +4 -9
- package/fesm2015/hmcts-ccpay-web-component.js +1435 -6224
- package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
- package/fesm5/hmcts-ccpay-web-component.js +1694 -7576
- package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
- package/hmcts-ccpay-web-component.metadata.json +1 -1
- package/lib/components/card-details/card-details.component.d.ts +1 -1
- package/lib/components/payment-view/payment-view.component.d.ts +2 -2
- package/lib/services/shared/logger/console-logger.service.d.ts +3 -3
- package/package.json +2 -2
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* Generated from: lib/components/allocate-payments/allocate-payments.component.ts
|
|
4
|
-
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
-
*/
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
6
2
|
import { Component, Input } from '@angular/core';
|
|
7
|
-
import { FormBuilder, Validators, FormControl } from '@angular/forms';
|
|
3
|
+
import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms';
|
|
8
4
|
import { PaymentLibComponent } from '../../payment-lib.component';
|
|
9
5
|
import { PaymentViewService } from '../../services/payment-view/payment-view.service';
|
|
10
6
|
import { CaseTransactionsService } from '../../services/case-transactions/case-transactions.service';
|
|
@@ -13,16 +9,7 @@ import { ErrorHandlerService } from '../../services/shared/error-handler.service
|
|
|
13
9
|
import { AllocatePaymentRequest } from '../../interfaces/AllocatePaymentRequest';
|
|
14
10
|
import { IAllocationPaymentsRequest } from '../../interfaces/IAllocationPaymentsRequest';
|
|
15
11
|
import { OrderslistService } from '../../services/orderslist.service';
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* @param {?} errorHandlerService
|
|
19
|
-
* @param {?} caseTransactionsService
|
|
20
|
-
* @param {?} formBuilder
|
|
21
|
-
* @param {?} paymentViewService
|
|
22
|
-
* @param {?} paymentLibComponent
|
|
23
|
-
* @param {?} bulkScaningPaymentService
|
|
24
|
-
* @param {?} OrderslistService
|
|
25
|
-
*/
|
|
12
|
+
let AllocatePaymentsComponent = class AllocatePaymentsComponent {
|
|
26
13
|
constructor(errorHandlerService, caseTransactionsService, formBuilder, paymentViewService, paymentLibComponent, bulkScaningPaymentService, OrderslistService) {
|
|
27
14
|
this.errorHandlerService = errorHandlerService;
|
|
28
15
|
this.caseTransactionsService = caseTransactionsService;
|
|
@@ -96,9 +83,6 @@ export class AllocatePaymentsComponent {
|
|
|
96
83
|
}
|
|
97
84
|
};
|
|
98
85
|
}
|
|
99
|
-
/**
|
|
100
|
-
* @return {?}
|
|
101
|
-
*/
|
|
102
86
|
ngOnInit() {
|
|
103
87
|
this.viewStatus = 'mainForm';
|
|
104
88
|
if (this.paymentLibComponent.paymentGroupReference !== null) {
|
|
@@ -122,107 +106,50 @@ export class AllocatePaymentsComponent {
|
|
|
122
106
|
Validators.pattern('^([a-zA-Z0-9\\s]*)$')
|
|
123
107
|
])),
|
|
124
108
|
});
|
|
125
|
-
this.OrderslistService.getOrdersList().subscribe((
|
|
126
|
-
|
|
127
|
-
* @return {?}
|
|
128
|
-
*/
|
|
129
|
-
(data) => this.orderLevelFees = data.filter((/**
|
|
130
|
-
* @param {?} data
|
|
131
|
-
* @return {?}
|
|
132
|
-
*/
|
|
133
|
-
data => data.orderStatus !== 'Paid'))));
|
|
134
|
-
this.OrderslistService.getCaseType().subscribe((/**
|
|
135
|
-
* @param {?} data
|
|
136
|
-
* @return {?}
|
|
137
|
-
*/
|
|
138
|
-
(data) => this.caseType = data));
|
|
109
|
+
this.OrderslistService.getOrdersList().subscribe((data) => this.orderLevelFees = data.filter(data => data.orderStatus !== 'Paid'));
|
|
110
|
+
this.OrderslistService.getCaseType().subscribe((data) => this.caseType = data);
|
|
139
111
|
this.getUnassignedPayment();
|
|
140
112
|
}
|
|
141
|
-
/**
|
|
142
|
-
* @param {?} paymentGroup
|
|
143
|
-
* @return {?}
|
|
144
|
-
*/
|
|
145
113
|
getGroupOutstandingAmount(paymentGroup) {
|
|
146
114
|
return this.bulkScaningPaymentService.calculateOutStandingAmount(paymentGroup);
|
|
147
115
|
}
|
|
148
|
-
/**
|
|
149
|
-
* @return {?}
|
|
150
|
-
*/
|
|
151
116
|
getPaymentGroupDetails() {
|
|
152
117
|
if (!this.isTurnOff) {
|
|
153
|
-
this.paymentViewService.getPaymentGroupDetails(this.paymentRef).subscribe(
|
|
154
|
-
* @param {?} paymentGroup
|
|
155
|
-
* @return {?}
|
|
156
|
-
*/
|
|
157
|
-
paymentGroup => {
|
|
118
|
+
this.paymentViewService.getPaymentGroupDetails(this.paymentRef).subscribe(paymentGroup => {
|
|
158
119
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
159
120
|
this.paymentGroup = paymentGroup;
|
|
160
121
|
this.saveAndContinue();
|
|
161
|
-
}
|
|
162
|
-
* @param {?} error
|
|
163
|
-
* @return {?}
|
|
164
|
-
*/
|
|
165
|
-
(error) => {
|
|
122
|
+
}, (error) => {
|
|
166
123
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, false, '');
|
|
167
|
-
})
|
|
124
|
+
});
|
|
168
125
|
}
|
|
169
126
|
else {
|
|
170
|
-
this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe(
|
|
171
|
-
* @param {?} paymentGroups
|
|
172
|
-
* @return {?}
|
|
173
|
-
*/
|
|
174
|
-
paymentGroups => {
|
|
127
|
+
this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe(paymentGroups => {
|
|
175
128
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
176
|
-
this.paymentGroups = paymentGroups['payment_groups'].filter(
|
|
177
|
-
|
|
178
|
-
* @return {?}
|
|
179
|
-
*/
|
|
180
|
-
paymentGroup => {
|
|
181
|
-
paymentGroup.fees.forEach((/**
|
|
182
|
-
* @param {?} fee
|
|
183
|
-
* @return {?}
|
|
184
|
-
*/
|
|
185
|
-
fee => {
|
|
129
|
+
this.paymentGroups = paymentGroups['payment_groups'].filter(paymentGroup => {
|
|
130
|
+
paymentGroup.fees.forEach(fee => {
|
|
186
131
|
if (fee.calculated_amount === 0) {
|
|
187
132
|
this.isFeeAmountZero = true;
|
|
188
133
|
}
|
|
189
|
-
})
|
|
190
|
-
|
|
191
|
-
let fstCon = this.getGroupOutstandingAmount((/** @type {?} */ (paymentGroup)));
|
|
192
|
-
/** @type {?} */
|
|
193
|
-
let scndCn = fstCon > 0 || (fstCon == 0 && this.isFeeAmountZero) && paymentGroup.payment_group_reference === this.paymentRef;
|
|
134
|
+
});
|
|
135
|
+
let fstCon = this.getGroupOutstandingAmount(paymentGroup), scndCn = fstCon > 0 || (fstCon == 0 && this.isFeeAmountZero) && paymentGroup.payment_group_reference === this.paymentRef;
|
|
194
136
|
return this.paymentRef ? scndCn : fstCon > 0 || (fstCon == 0 && this.isFeeAmountZero);
|
|
195
|
-
})
|
|
196
|
-
}
|
|
197
|
-
* @param {?} error
|
|
198
|
-
* @return {?}
|
|
199
|
-
*/
|
|
200
|
-
(error) => {
|
|
137
|
+
});
|
|
138
|
+
}, (error) => {
|
|
201
139
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, false, '');
|
|
202
|
-
})
|
|
140
|
+
});
|
|
203
141
|
}
|
|
204
142
|
}
|
|
205
|
-
/**
|
|
206
|
-
* @param {?} paymentGroup
|
|
207
|
-
* @return {?}
|
|
208
|
-
*/
|
|
209
143
|
selectedPaymentGroup(paymentGroup) {
|
|
210
144
|
this.isContinueButtondisabled = false;
|
|
211
145
|
this.paymentGroup = paymentGroup;
|
|
212
146
|
}
|
|
213
|
-
/**
|
|
214
|
-
* @return {?}
|
|
215
|
-
*/
|
|
216
147
|
gotoCasetransationPage() {
|
|
217
148
|
this.paymentLibComponent.viewName = 'case-transactions';
|
|
218
149
|
this.paymentLibComponent.isTurnOff = this.isTurnOff;
|
|
219
150
|
this.paymentLibComponent.TAKEPAYMENT = true;
|
|
220
151
|
this.paymentLibComponent.ISBSENABLE = true;
|
|
221
152
|
}
|
|
222
|
-
/**
|
|
223
|
-
* @param {?} event
|
|
224
|
-
* @return {?}
|
|
225
|
-
*/
|
|
226
153
|
gotoSummaryPage(event) {
|
|
227
154
|
event.preventDefault();
|
|
228
155
|
this.paymentLibComponent.viewName = 'fee-summary';
|
|
@@ -230,10 +157,6 @@ export class AllocatePaymentsComponent {
|
|
|
230
157
|
this.paymentLibComponent.TAKEPAYMENT = true;
|
|
231
158
|
this.paymentLibComponent.ISBSENABLE = true;
|
|
232
159
|
}
|
|
233
|
-
/**
|
|
234
|
-
* @param {?} event
|
|
235
|
-
* @return {?}
|
|
236
|
-
*/
|
|
237
160
|
cancelAllocatePayment(event) {
|
|
238
161
|
event.preventDefault();
|
|
239
162
|
this.resetForm([false, false, false, false, false, false, false, false], 'all');
|
|
@@ -247,28 +170,11 @@ export class AllocatePaymentsComponent {
|
|
|
247
170
|
this.viewStatus = 'mainForm';
|
|
248
171
|
}
|
|
249
172
|
}
|
|
250
|
-
/**
|
|
251
|
-
* @return {?}
|
|
252
|
-
*/
|
|
253
173
|
confirmAllocatePayement() {
|
|
254
|
-
this.enCookieUserName = document.cookie.split(";").find((
|
|
255
|
-
* @param {?} row
|
|
256
|
-
* @return {?}
|
|
257
|
-
*/
|
|
258
|
-
row => row.includes("user-info"))).split("=")[1].split(";");
|
|
174
|
+
this.enCookieUserName = document.cookie.split(";").find(row => row.includes("user-info")).split("=")[1].split(";");
|
|
259
175
|
this.cookieUserName = JSON.parse(decodeURIComponent(this.enCookieUserName));
|
|
260
|
-
/** @type {?} */
|
|
261
176
|
const fullName = this.cookieUserName['forename'] + ' ' + this.cookieUserName['surname'];
|
|
262
|
-
|
|
263
|
-
const paymentDetailsField = this.overUnderPaymentForm.controls.moreDetails;
|
|
264
|
-
/** @type {?} */
|
|
265
|
-
const paymentFormError = this.overUnderPaymentForm.controls.moreDetails.errors;
|
|
266
|
-
/** @type {?} */
|
|
267
|
-
const userNameField = fullName;
|
|
268
|
-
/** @type {?} */
|
|
269
|
-
const isEmptyCondtion = this.paymentReason && this.paymentExplanation;
|
|
270
|
-
/** @type {?} */
|
|
271
|
-
const isOtherOptionSelected = this.paymentExplanation === 'Other';
|
|
177
|
+
const paymentDetailsField = this.overUnderPaymentForm.controls.moreDetails, paymentFormError = this.overUnderPaymentForm.controls.moreDetails.errors, userNameField = fullName, isEmptyCondtion = this.paymentReason && this.paymentExplanation, isOtherOptionSelected = this.paymentExplanation === 'Other';
|
|
272
178
|
this.resetForm([false, false, false, false, false, false, false, false], 'all');
|
|
273
179
|
if ((!this.isRemainingAmountGtZero && !this.isRemainingAmountLtZero) || isEmptyCondtion && (!isOtherOptionSelected && userNameField.length > 0 || isOtherOptionSelected && userNameField.length > 0 && paymentDetailsField.valid)) {
|
|
274
180
|
this.isConfirmButtondisabled = true;
|
|
@@ -302,11 +208,6 @@ export class AllocatePaymentsComponent {
|
|
|
302
208
|
}
|
|
303
209
|
}
|
|
304
210
|
}
|
|
305
|
-
/**
|
|
306
|
-
* @param {?} vals
|
|
307
|
-
* @param {?} field
|
|
308
|
-
* @return {?}
|
|
309
|
-
*/
|
|
310
211
|
resetForm(vals, field) {
|
|
311
212
|
if (field === 'reason' || field === 'all') {
|
|
312
213
|
this.paymentReasonHasError = vals[0];
|
|
@@ -325,12 +226,8 @@ export class AllocatePaymentsComponent {
|
|
|
325
226
|
this.isUserNameInvalid = vals[7];
|
|
326
227
|
}
|
|
327
228
|
}
|
|
328
|
-
/**
|
|
329
|
-
* @return {?}
|
|
330
|
-
*/
|
|
331
229
|
finalServiceCall() {
|
|
332
230
|
if (!this.isStrategicFixEnable) {
|
|
333
|
-
/** @type {?} */
|
|
334
231
|
let allocatedRequest = {
|
|
335
232
|
reason: this.paymentReason,
|
|
336
233
|
allocation_status: 'Allocated',
|
|
@@ -343,99 +240,57 @@ export class AllocatePaymentsComponent {
|
|
|
343
240
|
case_type: this.caseType,
|
|
344
241
|
user_name: this.userName
|
|
345
242
|
};
|
|
346
|
-
/** @type {?} */
|
|
347
243
|
const postStrategicBody = new AllocatePaymentRequest(this.ccdReference, this.unAllocatedPayment, this.caseType, this.exceptionReference, allocatedRequest);
|
|
348
|
-
this.bulkScaningPaymentService.postBSPaymentStrategic(postStrategicBody, this.paymentGroup.payment_group_reference).subscribe(
|
|
349
|
-
* @param {?} res
|
|
350
|
-
* @return {?}
|
|
351
|
-
*/
|
|
352
|
-
res => {
|
|
244
|
+
this.bulkScaningPaymentService.postBSPaymentStrategic(postStrategicBody, this.paymentGroup.payment_group_reference).subscribe(res => {
|
|
353
245
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
354
|
-
/** @type {?} */
|
|
355
246
|
let response = JSON.parse(res);
|
|
356
247
|
if (response.success) {
|
|
357
248
|
this.gotoCasetransationPage();
|
|
358
249
|
}
|
|
359
|
-
}
|
|
360
|
-
* @param {?} error
|
|
361
|
-
* @return {?}
|
|
362
|
-
*/
|
|
363
|
-
(error) => {
|
|
250
|
+
}, (error) => {
|
|
364
251
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, false, '');
|
|
365
252
|
window.scrollTo(0, 0);
|
|
366
253
|
this.isConfirmButtondisabled = false;
|
|
367
|
-
})
|
|
254
|
+
});
|
|
368
255
|
}
|
|
369
256
|
else {
|
|
370
|
-
this.bulkScaningPaymentService.patchBSChangeStatus(this.unAllocatedPayment.dcn_reference, 'PROCESSED').subscribe(
|
|
371
|
-
* @param {?} res1
|
|
372
|
-
* @return {?}
|
|
373
|
-
*/
|
|
374
|
-
res1 => {
|
|
257
|
+
this.bulkScaningPaymentService.patchBSChangeStatus(this.unAllocatedPayment.dcn_reference, 'PROCESSED').subscribe(res1 => {
|
|
375
258
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
376
|
-
/** @type {?} */
|
|
377
259
|
let response1 = JSON.parse(res1);
|
|
378
260
|
if (response1.success) {
|
|
379
|
-
/** @type {?} */
|
|
380
261
|
const requestBody = new AllocatePaymentRequest(this.ccdReference, this.unAllocatedPayment, this.siteID, this.exceptionReference);
|
|
381
|
-
this.bulkScaningPaymentService.postBSAllocatePayment(requestBody, this.paymentGroup.payment_group_reference).subscribe(
|
|
382
|
-
* @param {?} res2
|
|
383
|
-
* @return {?}
|
|
384
|
-
*/
|
|
385
|
-
res2 => {
|
|
262
|
+
this.bulkScaningPaymentService.postBSAllocatePayment(requestBody, this.paymentGroup.payment_group_reference).subscribe(res2 => {
|
|
386
263
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
387
|
-
/** @type {?} */
|
|
388
264
|
let response2 = JSON.parse(res2);
|
|
389
|
-
/** @type {?} */
|
|
390
265
|
const reqBody = new IAllocationPaymentsRequest(response2['data'].payment_group_reference, response2['data'].reference, this.paymentReason, this.otherPaymentExplanation, this.userName);
|
|
391
266
|
if (response2.success) {
|
|
392
|
-
this.paymentViewService.postBSAllocationPayments(reqBody).subscribe(
|
|
393
|
-
* @param {?} res3
|
|
394
|
-
* @return {?}
|
|
395
|
-
*/
|
|
396
|
-
res3 => {
|
|
267
|
+
this.paymentViewService.postBSAllocationPayments(reqBody).subscribe(res3 => {
|
|
397
268
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
398
|
-
/** @type {?} */
|
|
399
269
|
let response3 = JSON.parse(res3);
|
|
400
270
|
if (response3.success) {
|
|
401
271
|
this.gotoCasetransationPage();
|
|
402
272
|
}
|
|
403
|
-
}
|
|
404
|
-
* @param {?} error
|
|
405
|
-
* @return {?}
|
|
406
|
-
*/
|
|
407
|
-
(error) => {
|
|
273
|
+
}, (error) => {
|
|
408
274
|
this.bulkScaningPaymentService.patchBSChangeStatus(this.unAllocatedPayment.dcn_reference, 'COMPLETE').subscribe();
|
|
409
275
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, false, '');
|
|
410
276
|
window.scrollTo(0, 0);
|
|
411
277
|
this.isConfirmButtondisabled = false;
|
|
412
|
-
})
|
|
278
|
+
});
|
|
413
279
|
}
|
|
414
|
-
}
|
|
415
|
-
* @param {?} error
|
|
416
|
-
* @return {?}
|
|
417
|
-
*/
|
|
418
|
-
(error) => {
|
|
280
|
+
}, (error) => {
|
|
419
281
|
this.bulkScaningPaymentService.patchBSChangeStatus(this.unAllocatedPayment.dcn_reference, 'COMPLETE').subscribe();
|
|
420
282
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, false, '');
|
|
421
283
|
window.scrollTo(0, 0);
|
|
422
284
|
this.isConfirmButtondisabled = false;
|
|
423
|
-
})
|
|
285
|
+
});
|
|
424
286
|
}
|
|
425
|
-
}
|
|
426
|
-
* @param {?} error
|
|
427
|
-
* @return {?}
|
|
428
|
-
*/
|
|
429
|
-
(error) => {
|
|
287
|
+
}, (error) => {
|
|
430
288
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, false, '');
|
|
431
289
|
window.scrollTo(0, 0);
|
|
432
290
|
this.isConfirmButtondisabled = false;
|
|
433
|
-
})
|
|
291
|
+
});
|
|
434
292
|
}
|
|
435
293
|
}
|
|
436
|
-
/**
|
|
437
|
-
* @return {?}
|
|
438
|
-
*/
|
|
439
294
|
saveAndContinue() {
|
|
440
295
|
if (this.paymentGroup) {
|
|
441
296
|
this.isMoreDetailsBoxHide = true;
|
|
@@ -445,9 +300,7 @@ export class AllocatePaymentsComponent {
|
|
|
445
300
|
this.overUnderPaymentForm.get('userName').setValue('');
|
|
446
301
|
this.paymentReason = '';
|
|
447
302
|
this.paymentExplanation = '';
|
|
448
|
-
/** @type {?} */
|
|
449
303
|
let GroupOutstandingAmount = this.getGroupOutstandingAmount(this.paymentGroup);
|
|
450
|
-
/** @type {?} */
|
|
451
304
|
const remainingToBeAssigned = this.unAllocatedPayment.amount - GroupOutstandingAmount;
|
|
452
305
|
this.isRemainingAmountGtZero = remainingToBeAssigned > 0;
|
|
453
306
|
this.isRemainingAmountLtZero = remainingToBeAssigned < 0;
|
|
@@ -470,46 +323,21 @@ export class AllocatePaymentsComponent {
|
|
|
470
323
|
}
|
|
471
324
|
}
|
|
472
325
|
}
|
|
473
|
-
/**
|
|
474
|
-
* @return {?}
|
|
475
|
-
*/
|
|
476
326
|
getUnassignedPayment() {
|
|
477
|
-
this.bulkScaningPaymentService.getBSPaymentsByDCN(this.bspaymentdcn).subscribe(
|
|
478
|
-
* @param {?} unassignedPayments
|
|
479
|
-
* @return {?}
|
|
480
|
-
*/
|
|
481
|
-
unassignedPayments => {
|
|
327
|
+
this.bulkScaningPaymentService.getBSPaymentsByDCN(this.bspaymentdcn).subscribe(unassignedPayments => {
|
|
482
328
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
483
|
-
this.unAllocatedPayment = unassignedPayments['data'].payments.filter(
|
|
484
|
-
* @param {?} payment
|
|
485
|
-
* @return {?}
|
|
486
|
-
*/
|
|
487
|
-
payment => {
|
|
329
|
+
this.unAllocatedPayment = unassignedPayments['data'].payments.filter(payment => {
|
|
488
330
|
return payment && payment.dcn_reference == this.bspaymentdcn;
|
|
489
|
-
})
|
|
331
|
+
})[0];
|
|
490
332
|
this.siteID = unassignedPayments['data'].responsible_service_id;
|
|
491
|
-
|
|
492
|
-
const beCcdNumber = unassignedPayments['data'].ccd_reference;
|
|
493
|
-
/** @type {?} */
|
|
494
|
-
const beExceptionNumber = unassignedPayments['data'].exception_record_reference;
|
|
495
|
-
/** @type {?} */
|
|
496
|
-
const exceptionReference = beCcdNumber ? beCcdNumber === this.ccdCaseNumber ? null : this.ccdCaseNumber : this.ccdCaseNumber;
|
|
333
|
+
const beCcdNumber = unassignedPayments['data'].ccd_reference, beExceptionNumber = unassignedPayments['data'].exception_record_reference, exceptionReference = beCcdNumber ? beCcdNumber === this.ccdCaseNumber ? null : this.ccdCaseNumber : this.ccdCaseNumber;
|
|
497
334
|
this.ccdReference = beCcdNumber ? beCcdNumber : null;
|
|
498
335
|
this.exceptionReference = beExceptionNumber ? beExceptionNumber : exceptionReference;
|
|
499
336
|
this.getPaymentGroupDetails();
|
|
500
|
-
}
|
|
501
|
-
* @param {?} error
|
|
502
|
-
* @return {?}
|
|
503
|
-
*/
|
|
504
|
-
(error) => {
|
|
337
|
+
}, (error) => {
|
|
505
338
|
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, false, '');
|
|
506
|
-
})
|
|
339
|
+
});
|
|
507
340
|
}
|
|
508
|
-
/**
|
|
509
|
-
* @param {?} key
|
|
510
|
-
* @param {?} type
|
|
511
|
-
* @return {?}
|
|
512
|
-
*/
|
|
513
341
|
selectRadioButton(key, type) {
|
|
514
342
|
this.isMoreDetailsBoxHide = true;
|
|
515
343
|
if (type === 'explanation' && key === 'other') {
|
|
@@ -520,32 +348,17 @@ export class AllocatePaymentsComponent {
|
|
|
520
348
|
this.isMoreDetailsBoxHide = false;
|
|
521
349
|
}
|
|
522
350
|
}
|
|
523
|
-
/**
|
|
524
|
-
* @param {?} orderef
|
|
525
|
-
* @return {?}
|
|
526
|
-
*/
|
|
527
351
|
OrderListSelectEvent(orderef) {
|
|
528
352
|
this.isContinueButtondisabled = false;
|
|
529
353
|
this.recordId = orderef;
|
|
530
354
|
}
|
|
531
|
-
/**
|
|
532
|
-
* @return {?}
|
|
533
|
-
*/
|
|
534
355
|
redirectToOrderFeeSearchPage() {
|
|
535
356
|
// this.paymentLibComponent.bspaymentdcn = null;
|
|
536
357
|
this.paymentLibComponent.paymentGroupReference = this.recordId;
|
|
537
358
|
this.paymentLibComponent.isTurnOff = this.isTurnOff;
|
|
538
359
|
this.paymentLibComponent.viewName = 'fee-summary';
|
|
539
360
|
}
|
|
540
|
-
}
|
|
541
|
-
AllocatePaymentsComponent.decorators = [
|
|
542
|
-
{ type: Component, args: [{
|
|
543
|
-
selector: 'app-allocate-payments',
|
|
544
|
-
template: "<div class=\"allocate-payments\">\n <ng-container *ngIf=\"viewStatus === 'mainForm' && !isTurnOff\">\n\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div>\n \n <div class=\"paymentrequest\">\n <h1 class=\"govuk-heading-xl govuk-!-margin-top-3 govuk-!-margin-bottom-4\">Select payment request</h1>\n <p class=\"govuk-!-margin-top-5 casererf\">Case reference: {{ccdReference}}</p>\n </div>\n \n <div *ngFor=\"let orderRef of orderLevelFees; let i of index;\" class=\"multiple-choice unprocessed-payments--radio-button\">\n <input id=\"'orderfee'+i+''\"\n aria-label=\"orderLevelRecord\"\n name=\"orderLevelRecord\"\n \n (click)=\"OrderListSelectEvent(orderRef.orderRefId)\"\n type=\"radio\"\n value=\"{{orderRef.orderTotalFees}}\" />\n <label for=\"radio-inline-1\"> {{orderRef.orderTotalFees | currency :'GBP':'symbol':'1.2-2'}}({{orderRef.orderStatus}})</label>\n </div>\n \n <div class=\"paymentrequest\">\n <button [disabled]=\"isContinueButtondisabled\" type=\"submit\" (click)=\"redirectToOrderFeeSearchPage()\" class=\"button allbtb button--disabled govuk-!-margin-right-1\">\n Continue\n </button>\n </div>\n \n </ng-container>\n\n <div *ngIf=\"viewStatus==='mainForm' && isTurnOff\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ALLOCATEPAYMENTS'>\n <div class=\"govuk-breadcrumbs\" *ngIf=\"paymentRef\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"#\" (click)=\"gotoSummaryPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-heading-section\">\n <h1 class=\"govuk-heading-xl\">Allocate payment to fee group</h1>\n <h2 class=\"govuk-heading-l\">Amount left to be allocated:\n {{ unAllocatedPayment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</h2>\n </div>\n <div class=\"payment-group-section\" *ngFor=\"let paymentGroup of paymentGroups\">\n <h3 class=\"govuk-heading-m\">Group reference: {{paymentGroup.payment_group_reference}}</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1 govuk-table__custom--col1\"\n [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n <div class=\"multiple-choice\">\n <input id=\"unpaiedFee-{{i}}\" name=\"unassignedRecord\" type=\"radio\"\n (click)=\"selectedPaymentGroup(paymentGroup)\" />\n <label for=\"unpaiedFee-{{i}}\"></label>\n </div>\n </td>\n <td class=\"govuk-table__cell govuk-table__cell--col1\">{{fee.code}}</td>\n <td class=\"govuk-table__cell govuk-table__cell--col2\"> {{fee.description}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col3\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\">\n {{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\">\n {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6 govuk-table__custom--col6\"\n [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n {{getGroupOutstandingAmount(paymentGroup) | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n\n </tr>\n\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees.length==0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n </div>\n <div class=\"govuk-button-group-allocate\">\n <button type=\"button\" class=\"button govuk-!-margin-right-1\" [disabled]=\"isContinueButtondisabled\"\n (click)=\"saveAndContinue()\">\n Continue\n </button>\n <button type=\"button\" class=\"button govuk-button--secondary\" (click)=\"gotoCasetransationPage()\">\n Cancel\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"(viewStatus === 'mainForm' && isTurnOff) || viewStatus === 'allocatePaymentConfirmation'\">\n <ccpay-error-banner *ngIf=\"errorMessage.showError\" [errorMessage]=\"errorMessage\"></ccpay-error-banner>\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='{{feedbackUrlLabel}}'>\n <h1 class=\"govuk-heading-xl\">Confirm allocation</h1>\n <h2 class=\"govuk-heading-l govuk-heading-l--custom\">\n Amount to be allocated: {{amountForAllocation | currency:'GBP':'symbol-narrow':'1.2-2'}}\n </h2>\n <div class=\"payment-group-section\" *ngIf=\"paymentGroup\">\n <h3 class=\"govuk-heading-m--custom\" *ngIf=\"isTurnOff\">Group reference: {{paymentGroup.payment_group_reference}}\n </h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount Due</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1\">{{fee.code}}</td>\n <td class=\"govuk-table__cell govuk-table__cell--col2\"> {{fee.description}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col3\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\">\n {{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\">\n {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6\" [attr.rowspan]=\"paymentGroup.fees.length\"\n *ngIf=\"i==0\"> {{afterFeeAllocateOutstanding | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees.length == 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n </div>\n <div class=\"govuk-warning-text\" *ngIf=\"isRemainingAmountGtZero || isRemainingAmountLtZero || remainingAmount === 0\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text govuk-warning-text__custom\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n {{paymentSectionLabel.title}} {{ remainingAmount | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </strong>\n </div>\n <div class=\"govuk-form-group\" *ngIf=\"isRemainingAmountGtZero || isRemainingAmountLtZero\">\n <div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint\"\n [ngClass]=\"{'inline-error-message': paymentReasonHasError}\">\n {{paymentSectionLabel.reason}}\n </span>\n <div\n [ngClass]=\"paymentReasonHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountGtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let reason of reasonList.overPayment | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{reason.key}}\" name=\"paymentReason\" type=\"radio\"\n [(ngModel)]=\"paymentReason\" value={{reason.value}}>\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{reason.value}}\n </label>\n </div>\n </div>\n <div\n [ngClass]=\"paymentReasonHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountLtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let reason of reasonList.shortFall | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{reason.key}}\" name=\"paymentReason\" type=\"radio\"\n [(ngModel)]=\"paymentReason\" value={{reason.value}}>\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{reason.value}}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n <div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint\"\n [ngClass]=\"{'inline-error-message': paymentExplanationHasError}\">\n Provide an explanatory note\n </span>\n <div\n [ngClass]=\"paymentExplanationHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountGtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let explanation of explanationList.overPayment | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{explanation.key}}\" name=\"paymentExplanation\" type=\"radio\"\n [(ngModel)]=\"paymentExplanation\" value={{explanation.value}}\n (click)=\"selectRadioButton(explanation.key, 'explanation')\">\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{explanation.value}}\n </label>\n </div>\n </div>\n <div\n [ngClass]=\"paymentExplanationHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountLtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let explanation of explanationList.shortFall | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{explanation.key}}\" name=\"paymentExplanation\" type=\"radio\"\n [(ngModel)]=\"paymentExplanation\" value={{explanation.value}}\n (click)=\"selectRadioButton(explanation.key, 'explanation')\">\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{explanation.value}}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n\n <form [formGroup]=\"overUnderPaymentForm\" novalidate>\n <div\n [ngClass]=\"isMoreDetailsBoxHide ? 'govuk-radios__conditional govuk-radios__conditional--hidden' : isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError ? 'govuk-radios__conditional inline-error-border' : 'govuk-radios__conditional'\"\n id=\"conditional-how-contacted-conditional-3\">\n <div class=\"govuk-form-group\">\n <span id=\"more-detail-hint\" class=\"govuk-hint govuk-font__custom\">\n Please enter details\n </span>\n <textarea class=\"govuk-textarea\"\n [ngClass]=\"{'inline-error-class': isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError}\"\n id=\"moreDetails\" name=\"moreDetails\" rows=\"5\" formControlName=\"moreDetails\">\n </textarea>\n <p class=\"inline-error-message\"\n *ngIf=\"isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError\">\n <span *ngIf=\"isPaymentDetailsEmpty\">Enter a explanation</span>\n <span *ngIf=\"isPaymentDetailsInvalid\">Enter a valid explanation</span>\n <span *ngIf=\"paymentDetailsMinHasError\">Explanation should be at least 3 characters.</span>\n <span *ngIf=\"paymentDetailsMaxHasError\">Explanation should be 255 characters or under.</span>\n </p>\n </div>\n </div>\n <div class=\"govuk-button--group\">\n <button type=\"submit\" [disabled]=\"isConfirmButtondisabled\"\n [ngClass]=\"isConfirmButtondisabled ? 'button button--disabled' : 'button'\"\n (click)=\"confirmAllocatePayement()\">\n Confirm\n </button>\n <button type=\"button\" class=\"button govuk-button--secondary\" (click)=\"cancelAllocatePayment($event)\">\n Cancel\n </button>\n </div>\n </form>\n </ng-container>\n</div>",
|
|
545
|
-
styles: [".allocate-payments{margin:20px 0}.allocate-payments .govuk-table__cell--col1,.allocate-payments .govuk-table__cell--col3{width:10%}.allocate-payments .govuk-table__cell--col2,.allocate-payments .govuk-table__cell--col6{width:25%}.allocate-payments .govuk-table__cell--col4,.allocate-payments .govuk-table__cell--col5{width:15%}.allocate-payments .govuk-button-group-allocate{display:flex;justify-content:flex-start}.allocate-payments .govuk-button--secondary{margin-left:10px;background-color:#b3b8bdf2}.allocate-payments .govuk-custom-warning__message{font-size:30px;position:relative;top:12px;font-weight:700}.allocate-payments .govuk-warning-text-custom{margin-bottom:0!important;padding:10px 0 5px}.allocate-payments .govuk-table__custom--col1{padding-top:0;padding-bottom:20px;padding-left:15px}.allocate-payments .govuk-table__custom--col6{text-align:center}.allocate-payments .govuk-list__custom{padding-left:20px}.allocate-payments .govuk-font__custom,.allocate-payments .govuk-heading-m--custom,.allocate-payments .govuk-hint,.allocate-payments .govuk-label--m,.allocate-payments .govuk-list__custom,.allocate-payments .govuk-radios__item,.allocate-payments .govuk-warning-text__custom{font-size:19px}.allocate-payments .govuk-radios__conditional--hidden{display:none}.allocate-payments .form-group-error{border-left:5px solid #b10e1e;padding-left:15px}.allocate-payments .inline-error-class{outline:#a71414 solid 3px;outline-offset:0}.allocate-payments .inline-error-message{color:#a71414;font-weight:700;margin-top:10px}.allocate-payments .inline-error-border{border-color:#a71414}.allbtb{margin-top:2em}.govuk-back-link{font-size:1.5rem!important}.multiple-choice{font-size:19px}.casererf{align-self:flex-end;font-size:19px}.paymentrequest{display:flex;flex-direction:row;justify-content:space-between;width:960px}"]
|
|
546
|
-
}] }
|
|
547
|
-
];
|
|
548
|
-
/** @nocollapse */
|
|
361
|
+
};
|
|
549
362
|
AllocatePaymentsComponent.ctorParameters = () => [
|
|
550
363
|
{ type: ErrorHandlerService },
|
|
551
364
|
{ type: CaseTransactionsService },
|
|
@@ -555,139 +368,27 @@ AllocatePaymentsComponent.ctorParameters = () => [
|
|
|
555
368
|
{ type: BulkScaningPaymentService },
|
|
556
369
|
{ type: OrderslistService }
|
|
557
370
|
];
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
/** @type {?} */
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
/** @type {?} */
|
|
582
|
-
AllocatePaymentsComponent.prototype.siteID;
|
|
583
|
-
/** @type {?} */
|
|
584
|
-
AllocatePaymentsComponent.prototype.errorMessage;
|
|
585
|
-
/** @type {?} */
|
|
586
|
-
AllocatePaymentsComponent.prototype.paymentGroup;
|
|
587
|
-
/** @type {?} */
|
|
588
|
-
AllocatePaymentsComponent.prototype.paymentGroups;
|
|
589
|
-
/** @type {?} */
|
|
590
|
-
AllocatePaymentsComponent.prototype.remainingAmount;
|
|
591
|
-
/** @type {?} */
|
|
592
|
-
AllocatePaymentsComponent.prototype.isRemainingAmountGtZero;
|
|
593
|
-
/** @type {?} */
|
|
594
|
-
AllocatePaymentsComponent.prototype.isMoreDetailsBoxHide;
|
|
595
|
-
/** @type {?} */
|
|
596
|
-
AllocatePaymentsComponent.prototype.isRemainingAmountLtZero;
|
|
597
|
-
/** @type {?} */
|
|
598
|
-
AllocatePaymentsComponent.prototype.afterFeeAllocateOutstanding;
|
|
599
|
-
/** @type {?} */
|
|
600
|
-
AllocatePaymentsComponent.prototype.amountForAllocation;
|
|
601
|
-
/** @type {?} */
|
|
602
|
-
AllocatePaymentsComponent.prototype.isConfirmButtondisabled;
|
|
603
|
-
/** @type {?} */
|
|
604
|
-
AllocatePaymentsComponent.prototype.isContinueButtondisabled;
|
|
605
|
-
/** @type {?} */
|
|
606
|
-
AllocatePaymentsComponent.prototype.otherPaymentExplanation;
|
|
607
|
-
/** @type {?} */
|
|
608
|
-
AllocatePaymentsComponent.prototype.selectedOption;
|
|
609
|
-
/** @type {?} */
|
|
610
|
-
AllocatePaymentsComponent.prototype.isFeeAmountZero;
|
|
611
|
-
/** @type {?} */
|
|
612
|
-
AllocatePaymentsComponent.prototype.paymentReasonHasError;
|
|
613
|
-
/** @type {?} */
|
|
614
|
-
AllocatePaymentsComponent.prototype.paymentExplanationHasError;
|
|
615
|
-
/** @type {?} */
|
|
616
|
-
AllocatePaymentsComponent.prototype.isPaymentDetailsEmpty;
|
|
617
|
-
/** @type {?} */
|
|
618
|
-
AllocatePaymentsComponent.prototype.isPaymentDetailsInvalid;
|
|
619
|
-
/** @type {?} */
|
|
620
|
-
AllocatePaymentsComponent.prototype.paymentDetailsMinHasError;
|
|
621
|
-
/** @type {?} */
|
|
622
|
-
AllocatePaymentsComponent.prototype.paymentDetailsMaxHasError;
|
|
623
|
-
/** @type {?} */
|
|
624
|
-
AllocatePaymentsComponent.prototype.isUserNameEmpty;
|
|
625
|
-
/** @type {?} */
|
|
626
|
-
AllocatePaymentsComponent.prototype.isUserNameInvalid;
|
|
627
|
-
/** @type {?} */
|
|
628
|
-
AllocatePaymentsComponent.prototype.ccdReference;
|
|
629
|
-
/** @type {?} */
|
|
630
|
-
AllocatePaymentsComponent.prototype.exceptionReference;
|
|
631
|
-
/** @type {?} */
|
|
632
|
-
AllocatePaymentsComponent.prototype.paymentReason;
|
|
633
|
-
/** @type {?} */
|
|
634
|
-
AllocatePaymentsComponent.prototype.paymentExplanation;
|
|
635
|
-
/** @type {?} */
|
|
636
|
-
AllocatePaymentsComponent.prototype.userName;
|
|
637
|
-
/** @type {?} */
|
|
638
|
-
AllocatePaymentsComponent.prototype.paymentSectionLabel;
|
|
639
|
-
/** @type {?} */
|
|
640
|
-
AllocatePaymentsComponent.prototype.paymentRef;
|
|
641
|
-
/** @type {?} */
|
|
642
|
-
AllocatePaymentsComponent.prototype.isStrategicFixEnable;
|
|
643
|
-
/** @type {?} */
|
|
644
|
-
AllocatePaymentsComponent.prototype.orderLevelFees;
|
|
645
|
-
/** @type {?} */
|
|
646
|
-
AllocatePaymentsComponent.prototype.cookieUserName;
|
|
647
|
-
/** @type {?} */
|
|
648
|
-
AllocatePaymentsComponent.prototype.enCookieUserName;
|
|
649
|
-
/** @type {?} */
|
|
650
|
-
AllocatePaymentsComponent.prototype.userNameField;
|
|
651
|
-
/** @type {?} */
|
|
652
|
-
AllocatePaymentsComponent.prototype.reasonList;
|
|
653
|
-
/** @type {?} */
|
|
654
|
-
AllocatePaymentsComponent.prototype.explanationList;
|
|
655
|
-
/** @type {?} */
|
|
656
|
-
AllocatePaymentsComponent.prototype.refund;
|
|
657
|
-
/**
|
|
658
|
-
* @type {?}
|
|
659
|
-
* @private
|
|
660
|
-
*/
|
|
661
|
-
AllocatePaymentsComponent.prototype.errorHandlerService;
|
|
662
|
-
/**
|
|
663
|
-
* @type {?}
|
|
664
|
-
* @private
|
|
665
|
-
*/
|
|
666
|
-
AllocatePaymentsComponent.prototype.caseTransactionsService;
|
|
667
|
-
/**
|
|
668
|
-
* @type {?}
|
|
669
|
-
* @private
|
|
670
|
-
*/
|
|
671
|
-
AllocatePaymentsComponent.prototype.formBuilder;
|
|
672
|
-
/**
|
|
673
|
-
* @type {?}
|
|
674
|
-
* @private
|
|
675
|
-
*/
|
|
676
|
-
AllocatePaymentsComponent.prototype.paymentViewService;
|
|
677
|
-
/**
|
|
678
|
-
* @type {?}
|
|
679
|
-
* @private
|
|
680
|
-
*/
|
|
681
|
-
AllocatePaymentsComponent.prototype.paymentLibComponent;
|
|
682
|
-
/**
|
|
683
|
-
* @type {?}
|
|
684
|
-
* @private
|
|
685
|
-
*/
|
|
686
|
-
AllocatePaymentsComponent.prototype.bulkScaningPaymentService;
|
|
687
|
-
/**
|
|
688
|
-
* @type {?}
|
|
689
|
-
* @private
|
|
690
|
-
*/
|
|
691
|
-
AllocatePaymentsComponent.prototype.OrderslistService;
|
|
692
|
-
}
|
|
693
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb2NhdGUtcGF5bWVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hbGxvY2F0ZS1wYXltZW50cy9hbGxvY2F0ZS1wYXltZW50cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFhLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUNuRyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxrRUFBa0UsQ0FBQztBQUMzRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUdsRixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUV2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQVN0RSxNQUFNLE9BQU8seUJBQXlCOzs7Ozs7Ozs7O0lBdUZwQyxZQUNRLG1CQUF3QyxFQUN4Qyx1QkFBZ0QsRUFDaEQsV0FBd0IsRUFDeEIsa0JBQXNDLEVBQ3RDLG1CQUF3QyxFQUN4Qyx5QkFBb0QsRUFDcEQsaUJBQW9DO1FBTnBDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtR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SUFDaEQsNERBQXdEOzs7OztJQUN4RCxnREFBZ0M7Ozs7O0lBQ2hDLHVEQUE4Qzs7Ozs7SUFDOUMsd0RBQWdEOzs7OztJQUNoRCw4REFBNEQ7Ozs7O0lBQzVELHNEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQge0Nhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5zZXJ2aWNlJzsgXG5pbXBvcnQge0J1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHtJQlNQYXltZW50c30gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQge0FsbG9jYXRlUGF5bWVudFJlcXVlc3R9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvQWxsb2NhdGVQYXltZW50UmVxdWVzdCc7XG5pbXBvcnQge0lBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0fSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0JztcbmltcG9ydCB7IElPcmRlclJlZmVyZW5jZUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSU9yZGVyUmVmZXJlbmNlRmVlJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hbGxvY2F0ZS1wYXltZW50cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGxvY2F0ZS1wYXltZW50cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FsbG9jYXRlLXBheW1lbnRzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQWxsb2NhdGVQYXltZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgY2FzZVR5cGU6IHN0cmluZztcblxuICBvdmVyVW5kZXJQYXltZW50Rm9ybTogRm9ybUdyb3VwO1xuICB2aWV3U3RhdHVzOiBzdHJpbmc7XG4gIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgYnNwYXltZW50ZGNuOiBzdHJpbmc7XG4gIHJlY29yZElkOnN0cmluZztcbiAgZmVlZGJhY2tVcmxMYWJlbDpzdHJpbmc7XG4gIHVuQWxsb2NhdGVkUGF5bWVudDogSUJTUGF5bWVudHMgPSB7XG4gICAgYW1vdW50OiAwXG4gIH07XG4gIHNpdGVJRDogc3RyaW5nID0gbnVsbDtcbiAgZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSwgZmFsc2UsICcnKTtcbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBwYXltZW50R3JvdXBzOiBJUGF5bWVudEdyb3VwW10gPSBbXTtcdFxuICByZW1haW5pbmdBbW91bnQ6IG51bWJlcjtcbiAgaXNSZW1haW5pbmdBbW91bnRHdFplcm86IGJvb2xlYW47XG4gIGlzTW9yZURldGFpbHNCb3hIaWRlOiBib29sZWFuICA9IHRydWU7XG4gIGlzUmVtYWluaW5nQW1vdW50THRaZXJvOiBib29sZWFuO1xuICBhZnRlckZlZUFsbG9jYXRlT3V0c3RhbmRpbmc6IG51bWJlcjtcbiAgYW1vdW50Rm9yQWxsb2NhdGlvbjogbnVtYmVyO1xuICBpc0NvbmZpcm1CdXR0b25kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBvdGhlclBheW1lbnRFeHBsYW5hdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZyA9IG51bGw7XG4gIGlzRmVlQW1vdW50WmVybzogYm9vbGVhbiA9IGZhbHNlO1x0XG5cbiAgcGF5bWVudFJlYXNvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUGF5bWVudERldGFpbHNFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnREZXRhaWxzSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYXltZW50RGV0YWlsc01pbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHBheW1lbnREZXRhaWxzTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVc2VyTmFtZUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGlzVXNlck5hbWVJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gIGNjZFJlZmVyZW5jZTogc3RyaW5nID0gbnVsbDtcbiAgZXhjZXB0aW9uUmVmZXJlbmNlOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50UmVhc29uOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50RXhwbGFuYXRpb246IHN0cmluZyA9IG51bGw7XG4gIHVzZXJOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50U2VjdGlvbkxhYmVsOiBhbnk7XG4gIHBheW1lbnRSZWY6IHN0cmluZyA9IG51bGw7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgb3JkZXJMZXZlbEZlZXM6IElPcmRlclJlZmVyZW5jZUZlZVtdID0gW107XG4gIGNvb2tpZVVzZXJOYW1lOiBzdHJpbmdbXSA9IFtdO1xuICBlbkNvb2tpZVVzZXJOYW1lOiBhbnk7XG4gIHVzZXJOYW1lRmllbGQ6IHN0cmluZyA9IG51bGw7XG5cbiAgcmVhc29uTGlzdDogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH09IHtcbiAgICBvdmVyUGF5bWVudDoge1xuICAgICAgaHdmUmV3YXJkOiAnSGVscCB3aXRoIEZlZXMgKEhXRikgYXdhcmRlZC4gIFBsZWFzZSBpbmNsdWRlIHRoZSBIV0YgcmVmZXJlbmNlIG51bWJlciBpbiB0aGUgZXhwbGFuYXRvcnkgbm90ZScsXG4gICAgICB3cm9uZ0ZlZTogJ0luY29ycmVjdCBwYXltZW50IHJlY2VpdmVkJyxcbiAgICAgIG5vdElzc3VlQ2FzZTogJ1VuYWJsZSB0byBpc3N1ZSBjYXNlJyxcbiAgICAgIG90aGVyRGVkdWN0aW9uOiAnT3RoZXInXG4gICAgfSxcbiAgICBzaG9ydEZhbGw6IHtcbiAgICAgIGhlbHBXaXRoRmVlOiAnSGVscCB3aXRoIEZlZXMgKEhXRikgYXBwbGljYXRpb24gZGVjbGluZWQnLFxuICAgICAgd3JvbmdGZWU6ICdJbmNvcnJlY3QgcGF5bWVudCByZWNlaXZlZCcsXG4gICAgICBvdGhlcjogJ090aGVyJ1xuICAgIH1cbiAgfVxuICBleHBsYW5hdGlvbkxpc3QgPSB7XG4gICAgb3ZlclBheW1lbnQ6IHtcbiAgICAgIHJlZmVyUmVmdW5kOiAnRGV0YWlscyBpbiBjYXNlIG5vdGVzLiAgUmVmdW5kIGR1ZScsXG4gICAgICBub1JlZnVuZDogJ0RldGFpbHMgaW4gY2FzZSBub3Rlcy4gTm8gcmVmdW5kIGR1ZScsXG4gICAgICBub0Nhc2U6ICdObyBjYXNlIGNyZWF0ZWQuICBSZWZ1bmQgZHVlJyxcbiAgICAgIG90aGVyOiAnT3RoZXInXG4gICAgfSxcbiAgICBzaG9ydEZhbGw6IHtcbiAgICAgIGhvbGRDYXNlOiAnSSBoYXZlIHB1dCBhIHN0b3Agb24gdGhlIGNhc2UgYW5kIGNvbnRhY3RlZCB0aGUgYXBwbGljYW50IHJlcXVlc3RpbmcgdGhlIGJhbGFuY2Ugb2YgcGF5bWVudCcsXG4gICAgICBoZWxkQ2FzZTogJ0kgaGF2ZSBwdXQgYSBzdG9wIG9uIHRoZSBjYXNlLiAgVGhlIGFwcGxpY2FudCBuZWVkcyB0byBiZSBjb250YWN0ZWQgdG8gcmVxdWVzdCB0aGUgYmFsYW5jZSBvZiBwYXltZW50JyxcbiAgICAgIG90aGVyOiAnT3RoZXInXG4gICAgfVxuICB9XG5cbiAgcmVmdW5kID0ge1xuICAgIHJlYXNvbjoge1xuICAgICAgZHVwbGljYXRlOiAnRHVwbGljYXRlIHBheW1lbnQnLFxuICAgICAgaHVtYW5lcnJvcjogJ0h1bWFuIGVycm9yJyxcbiAgICAgIGNhc2VXaXRoZHJhd246ICdDYXNlIHdpdGhkcmF3bicsXG4gICAgICBvdGhlcjogJ090aGVyJ1xuICAgIH1cbiAgfVxuXG5cbiAgY29uc3RydWN0b3IoXG4gIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgcHJpdmF0ZSBjYXNlVHJhbnNhY3Rpb25zU2VydmljZTogQ2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UsXG4gIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlLFxuICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSxcbiAgcHJpdmF0ZSBPcmRlcnNsaXN0U2VydmljZTogT3JkZXJzbGlzdFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdhbGxvY2F0ZVBheW1lbnRDb25maXJtYXRpb24nO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSO1xuICAgIHRoaXMuYnNwYXltZW50ZGNuID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbjtcbiAgICB0aGlzLnBheW1lbnRSZWYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OO1xuICAgIHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRTtcbiAgICB0aGlzLmlzVHVybk9mZiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1R1cm5PZmY7XG4gICAgdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgbW9yZURldGFpbHM6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksXG4gICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XFxcXHMsXFxcXC5dKikkJylcbiAgICAgIF0pKSxcbiAgICAgIHVzZXJOYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XFxcXHNdKikkJylcbiAgICAgIF0pKSxcbiAgICB9KTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldE9yZGVyc0xpc3QoKS5zdWJzY3JpYmUoIChkYXRhKSA9PlxuICAgIHRoaXMub3JkZXJMZXZlbEZlZXMgPSBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEub3JkZXJTdGF0dXMgIT09ICdQYWlkJykpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0Q2FzZVR5cGUoKS5zdWJzY3JpYmUoIChkYXRhKSA9PiB0aGlzLmNhc2VUeXBlID0gZGF0YSk7XG4gICAgdGhpcy5nZXRVbmFzc2lnbmVkUGF5bWVudCgpO1xuICB9XG4gIGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmNhbGN1bGF0ZU91dFN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCk7XG4gIH1cblxuICBnZXRQYXltZW50R3JvdXBEZXRhaWxzKCl7XG5cbiAgICBpZighdGhpcy5pc1R1cm5PZmYpe1xuICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0UGF5bWVudEdyb3VwRGV0YWlscyh0aGlzLnBheW1lbnRSZWYpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgID0gcGF5bWVudEdyb3VwO1xuICAgICAgICAgIHRoaXMuc2F2ZUFuZENvbnRpbnVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUsIGZhbHNlLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfWVsc2Uge1xuICAgICAgdGhpcy5jYXNlVHJhbnNhY3Rpb25zU2VydmljZS5nZXRQYXltZW50R3JvdXBzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50R3JvdXBzID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UsIGZhbHNlLCAnJyk7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwcyA9IHBheW1lbnRHcm91cHNbJ3BheW1lbnRfZ3JvdXBzJ10uZmlsdGVyKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgICAgIGlmKGZlZS5jYWxjdWxhdGVkX2Ftb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGZWVBbW91bnRaZXJvID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBmc3RDb24gPSB0aGlzLmdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQoPElQYXltZW50R3JvdXA+cGF5bWVudEdyb3VwKSxcbiAgICAgICAgICAgIHNjbmRDbiA9IGZzdENvbiA+IDAgfHwgKGZzdENvbiA9PSAwICYmIHRoaXMuaXNGZWVBbW91bnRaZXJvKSAmJiBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgPT09IHRoaXMucGF5bWVudFJlZjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBheW1lbnRSZWYgPyAgc2NuZENuIDogZnN0Q29uID4gMCB8fCAoZnN0Q29uID09IDAgJiYgdGhpcy5pc0ZlZUFtb3VudFplcm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSwgZmFsc2UsICcnKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgfVxuXG4gIHNlbGVjdGVkUGF5bWVudEdyb3VwKHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cCkge1x0XG4gICAgdGhpcy5pc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcdFxuICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1x0XG4gIH1cdFxuXG4gIGdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gIH1cblxuICBnb3RvU3VtbWFyeVBhZ2UoZXZlbnQ6IGFueSkgeyBcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdmZWUtc3VtbWFyeSc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICB9XG5cbiAgY2FuY2VsQWxsb2NhdGVQYXltZW50KGV2ZW50OiBhbnkpe1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhbGwnKTtcbiAgICBpZighdGhpcy5pc1R1cm5PZmYpe1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1R1cm5PZmYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XHRcbiAgICB9XG4gIH1cbiAgY29uZmlybUFsbG9jYXRlUGF5ZW1lbnQoKXtcbiAgICB0aGlzLmVuQ29va2llVXNlck5hbWUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQocm93ID0+IHJvdy5pbmNsdWRlcyhcInVzZXItaW5mb1wiKSkuc3BsaXQoXCI9XCIpWzFdLnNwbGl0KFwiO1wiKTtcbiAgICB0aGlzLmNvb2tpZVVzZXJOYW1lID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQodGhpcy5lbkNvb2tpZVVzZXJOYW1lKSk7XG4gICAgXG4gICAgY29uc3QgZnVsbE5hbWUgPSB0aGlzLmNvb2tpZVVzZXJOYW1lWydmb3JlbmFtZSddICsgJyAnICsgdGhpcy5jb29raWVVc2VyTmFtZVsnc3VybmFtZSddO1xuXG4gICAgY29uc3QgcGF5bWVudERldGFpbHNGaWVsZCA9IHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uY29udHJvbHMubW9yZURldGFpbHMsXG4gICAgICBwYXltZW50Rm9ybUVycm9yID0gdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5jb250cm9scy5tb3JlRGV0YWlscy5lcnJvcnMsXG4gICAgICB1c2VyTmFtZUZpZWxkID0gZnVsbE5hbWUsXG4gICAgICBpc0VtcHR5Q29uZHRpb24gPSB0aGlzLnBheW1lbnRSZWFzb24gJiYgdGhpcy5wYXltZW50RXhwbGFuYXRpb24sXG4gICAgICBpc090aGVyT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnBheW1lbnRFeHBsYW5hdGlvbiA9PT0gJ090aGVyJztcblxuICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYWxsJyk7XG4gICAgaWYgKCAoIXRoaXMuaXNSZW1haW5pbmdBbW91bnRHdFplcm8gJiYgIXRoaXMuaXNSZW1haW5pbmdBbW91bnRMdFplcm8pIHx8IGlzRW1wdHlDb25kdGlvbiAmJiAoIWlzT3RoZXJPcHRpb25TZWxlY3RlZCAmJiB1c2VyTmFtZUZpZWxkLmxlbmd0aCA+IDAgfHwgaXNPdGhlck9wdGlvblNlbGVjdGVkICYmIHVzZXJOYW1lRmllbGQubGVuZ3RoID4gMCAmJiBwYXltZW50RGV0YWlsc0ZpZWxkLnZhbGlkKSkge1xuICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLm90aGVyUGF5bWVudEV4cGxhbmF0aW9uID0gdGhpcy5wYXltZW50RXhwbGFuYXRpb24gPT09ICdPdGhlcicgPyBwYXltZW50RGV0YWlsc0ZpZWxkLnZhbHVlIDogdGhpcy5wYXltZW50RXhwbGFuYXRpb247XG4gICAgICB0aGlzLnVzZXJOYW1lID0gdXNlck5hbWVGaWVsZDtcbiAgICAgIHRoaXMuZmluYWxTZXJ2aWNlQ2FsbCgpO1xuICAgIH1lbHNlIHtcbiAgICAgIGlmKCF0aGlzLnBheW1lbnRSZWFzb24pIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlYXNvbicpO1xuICAgICAgfVxuICAgICAgaWYoIXRoaXMucGF5bWVudEV4cGxhbmF0aW9uKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdleHBsYW5hdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYodGhpcy5wYXltZW50RXhwbGFuYXRpb24gJiYgaXNPdGhlck9wdGlvblNlbGVjdGVkKSB7XG4gICAgICAgIGlmKHBheW1lbnREZXRhaWxzRmllbGQudmFsdWUgPT0gJycgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ290aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYocGF5bWVudERldGFpbHNGaWVsZC52YWx1ZSAhPSAnJyAmJiBwYXltZW50RGV0YWlsc0ZpZWxkLmludmFsaWQgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ290aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYocGF5bWVudEZvcm1FcnJvciAmJiBwYXltZW50Rm9ybUVycm9yLm1pbmxlbmd0aCAmJiBwYXltZW50Rm9ybUVycm9yLm1pbmxlbmd0aC5hY3R1YWxMZW5ndGggPCAzICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdvdGhlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHBheW1lbnRGb3JtRXJyb3IgJiYgcGF5bWVudEZvcm1FcnJvci5tYXhsZW5ndGggJiYgcGF5bWVudEZvcm1FcnJvci5tYXhsZW5ndGguYWN0dWFsTGVuZ3RoID4gMjU1ICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdvdGhlcicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih1c2VyTmFtZUZpZWxkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdLCAndXNlcm5hbWUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVzZXRGb3JtKHZhbHMsIGZpZWxkKSB7XG4gICAgaWYoZmllbGQ9PT0ncmVhc29uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLnBheW1lbnRSZWFzb25IYXNFcnJvciA9IHZhbHNbMF07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J2V4cGxhbmF0aW9uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLnBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yID0gdmFsc1sxXTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0nb3RoZXInIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNQYXltZW50RGV0YWlsc0VtcHR5ID0gdmFsc1syXTtcbiAgICAgIHRoaXMuaXNQYXltZW50RGV0YWlsc0ludmFsaWQgPSB2YWxzWzNdO1xuICAgICAgdGhpcy5wYXltZW50RGV0YWlsc01pbkhhc0Vycm9yID0gdmFsc1s0XTtcbiAgICAgIHRoaXMucGF5bWVudERldGFpbHNNYXhIYXNFcnJvciA9IHZhbHNbNV07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J3VzZXJuYW1lJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzVXNlck5hbWVFbXB0eSA9IHZhbHNbNl07XG4gICAgICB0aGlzLmlzVXNlck5hbWVJbnZhbGlkID0gdmFsc1s3XTtcbiAgICB9XG4gIH1cbiAgZmluYWxTZXJ2aWNlQ2FsbCgpIHtcbiAgICBpZighdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSkge1xuICAgICAgbGV0IGFsbG9jYXRlZFJlcXVlc3QgPSB7XG4gICAgICAgIHJlYXNvbjogdGhpcy5wYXltZW50UmVhc29uLFxuICAgICAgICBhbGxvY2F0aW9uX3N0YXR1czonQWxsb2NhdGVkJyxcbiAgICAgICAgZXhwbGFuYXRpb246IHRoaXMub3RoZXJQYXltZW50RXhwbGFuYXRpb24sXG4gICAgICAgIHBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgbmFtZTogJ0FsbG9jYXRlZCdcbiAgICAgICAgfSxcbiAgICAgICAgcGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLFxuICAgICAgICBjYXNlX3R5cGU6IHRoaXMuY2FzZVR5cGUsXG4gICAgICAgIHVzZXJfbmFtZTogdGhpcy51c2VyTmFtZVxuICAgICAgfVxuICAgICAgY29uc3QgcG9zdFN0cmF0ZWdpY0JvZHkgPSBuZXcgQWxsb2NhdGVQYXltZW50UmVxdWVzdFxuICAgICAgKHRoaXMuY2NkUmVmZXJlbmNlLCB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudCwgdGhpcy5jYXNlVHlwZSwgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UsIGFsbG9jYXRlZFJlcXVlc3QpO1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBvc3RCU1BheW1lbnRTdHJhdGVnaWMocG9zdFN0cmF0ZWdpY0JvZHkgLCB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSwgZmFsc2UsICcnKTtcbiAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlLCBmYWxzZSwgJycpO1xuICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucGF0Y2hCU0NoYW5nZVN0YXR1cyh0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5kY25fcmVmZXJlbmNlLCAnUFJPQ0VTU0VEJykuc3Vic2NyaWJlKFxuICAgICAgcmVzMSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSwgZmFsc2UsICcnKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlMSA9IEpTT04ucGFyc2UocmVzMSk7XG4gICAgICAgIGlmIChyZXNwb25zZTEuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IEFsbG9jYXRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgICAodGhpcy5jY2RSZWZlcmVuY2UsIHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LCB0aGlzLnNpdGVJRCwgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UpO1xuICAgICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wb3N0QlNBbGxvY2F0ZVBheW1lbnQocmVxdWVzdEJvZHksIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMyID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlLCBmYWxzZSwgJycpO1xuICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UyID0gSlNPTi5wYXJzZShyZXMyKTtcbiAgICAgICAgICAgICAgY29uc3QgcmVxQm9keSA9IG5ldyBJQWxsb2NhdGlvblBheW1lbnRzUmVxdWVzdFxuICAgICAgICAgICAgICAocmVzcG9uc2UyWydkYXRhJ10ucGF5bWVudF9ncm91cF9yZWZlcmVuY2UsIHJlc3BvbnNlMlsnZGF0YSddLnJlZmVyZW5jZSwgdGhpcy5wYXltZW50UmVhc29uLCB0aGlzLm90aGVyUGF5bWVudEV4cGxhbmF0aW9uLCB0aGlzLnVzZXJOYW1lKTtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlMi5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTQWxsb2NhdGlvblBheW1lbnRzKHJlcUJvZHkpLnN1YnNjcmliZShcbiAgXG4gICAgICAgICAgICAgICAgcmVzMyA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UzID0gSlNPTi5wYXJzZShyZXMzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZTMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wYXRjaEJTQ2hhbmdlU3RhdHVzKHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucGF0Y2hCU0NoYW5nZVN0YXR1cyh0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5kY25fcmVmZXJlbmNlLCAnQ09NUExFVEUnKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUsIGZhbHNlLCAnJyk7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7ICBcbiAgfVxuICB9XG5cbiAgc2F2ZUFuZENvbnRpbnVlKCl7XG4gICAgaWYodGhpcy5wYXltZW50R3JvdXApIHtcbiAgICAgIHRoaXMuaXNNb3JlRGV0YWlsc0JveEhpZGUgPSB0cnVlO1xuICAgICAgdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5nZXQoJ21vcmVEZXRhaWxzJykucmVzZXQoKTtcbiAgICAgIHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uZ2V0KCdtb3JlRGV0YWlscycpLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uZ2V0KCd1c2VyTmFtZScpLnJlc2V0KCk7XG4gICAgICB0aGlzLm92ZXJVbmRlclBheW1lbnRGb3JtLmdldCgndXNlck5hbWUnKS5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLnBheW1lbnRSZWFzb24gPSAnJztcbiAgICAgIHRoaXMucGF5bWVudEV4cGxhbmF0aW9uID0gJyc7XG4gICAgICBsZXQgR3JvdXBPdXRzdGFuZGluZ0Ftb3VudCA9IHRoaXMuZ2V0R3JvdXBPdXRzdGFuZGluZ0Ftb3VudCh0aGlzLnBheW1lbnRHcm91cCk7XG4gICAgICBjb25zdCByZW1haW5pbmdUb0JlQXNzaWduZWQgPSB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgLSBHcm91cE91dHN0YW5kaW5nQW1vdW50O1xuICAgICAgdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEd0WmVybyA9IHJlbWFpbmluZ1RvQmVBc3NpZ25lZCA+IDA7XG4gICAgICB0aGlzLmlzUmVtYWluaW5nQW1vdW50THRaZXJvID0gcmVtYWluaW5nVG9CZUFzc2lnbmVkIDwgMDtcbiAgICAgIHRoaXMucGF5bWVudFNlY3Rpb25MYWJlbCA9IHRoaXMuaXNSZW1haW5pbmdBbW91bnRHdFplcm8gPyB7IFxuICAgICAgICAgIHRpdGxlOiAnVGhlcmUgaXMgYW4gT3ZlciBwYXltZW50IG9mJyxcbiAgICAgICAgICByZWFzb246ICdQcm92aWRlIGEgcmVhc29uLiBUaGlzIHdpbGwgYmUgdXNlZCBpbiB0aGUgUmVmdW5kIHByb2Nlc3MuJyxcbiAgICAgICAgfTogdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybyA/IHsgXG4gICAgICAgICAgdGl0bGU6ICdUaGVyZSBpcyBhbiBVbmRlciBwYXltZW50IG9mJyxcbiAgICAgICAgICByZWFzb246ICdQcm92aWRlIGEgcmVhc29uJyxcbiAgICAgICAgfTogeyBcbiAgICAgICAgICB0aXRsZTonQW1vdW50IGxlZnQgdG8gYmUgYWxsb2NhdGVkJyxcbiAgICAgICAgICByZWFzb246JycsXG4gICAgICAgIH07XG4gICAgICB0aGlzLmZlZWRiYWNrVXJsTGFiZWwgPSB0aGlzLmlzUmVtYWluaW5nQW1vdW50R3RaZXJvID8gJ0NPTkZJUk1BTExPQ0FUSU9OX1NVUlBMVVMnIDogdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybyA/ICdDT05GSVJNQUxMT0NBVElPTl9TSE9SVEZBTEwnIDogJ0NPTkZJUk1BTExPQ0FUSU9OJztcbiAgICAgIHRoaXMucmVtYWluaW5nQW1vdW50ID0gIHRoaXMuaXNSZW1haW5pbmdBbW91bnRHdFplcm8gPyByZW1haW5pbmdUb0JlQXNzaWduZWQgOiB0aGlzLmlzUmVtYWluaW5nQW1vdW50THRaZXJvID8gcmVtYWluaW5nVG9CZUFzc2lnbmVkICogLTEgOiAwO1xuICAgICAgdGhpcy5hZnRlckZlZUFsbG9jYXRlT3V0c3RhbmRpbmcgPSByZW1haW5pbmdUb0JlQXNzaWduZWQgPj0gMCA/IDAgOiAocmVtYWluaW5nVG9CZUFzc2lnbmVkICogLTEpO1xuICAgICAgdGhpcy5hbW91bnRGb3JBbGxvY2F0aW9uID0gR3JvdXBPdXRzdGFuZGluZ0Ftb3VudCA+PSB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgPyB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgOiBHcm91cE91dHN0YW5kaW5nQW1vdW50O1xuICAgICAgaWYodGhpcy5pc1R1cm5PZmYpe1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWxsb2NhdGVQYXltZW50Q29uZmlybWF0aW9uJztcdFxuICAgICAgfVxuICAgIH1cbiAgfVxuICAgZ2V0VW5hc3NpZ25lZFBheW1lbnQoKSB7XG4gICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeURDTih0aGlzLmJzcGF5bWVudGRjbikuc3Vic2NyaWJlKFxuICAgICAgdW5hc3NpZ25lZFBheW1lbnRzID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlLCBmYWxzZSwgJycpO1xuICAgICAgICB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudCA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzLmZpbHRlcihwYXltZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gcGF5bWVudCAmJiBwYXltZW50LmRjbl9yZWZlcmVuY2UgPT0gdGhpcy5ic3BheW1lbnRkY247XG4gICAgICAgIH0pWzBdO1xuICAgICAgICB0aGlzLnNpdGVJRCA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnJlc3BvbnNpYmxlX3NlcnZpY2VfaWQ7XG4gICAgICAgIGNvbnN0IGJlQ2NkTnVtYmVyID0gdW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10uY2NkX3JlZmVyZW5jZSxcbiAgICAgICAgYmVFeGNlcHRpb25OdW1iZXIgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZSxcbiAgICAgICAgZXhjZXB0aW9uUmVmZXJlbmNlID0gYmVDY2ROdW1iZXIgPyBiZUNjZE51bWJlciA9PT0gdGhpcy5jY2RDYXNlTnVtYmVyID8gbnVsbCA6IHRoaXMuY2NkQ2FzZU51bWJlciA6IHRoaXMuY2NkQ2FzZU51bWJlcjtcbiAgICAgICB0aGlzLmNjZFJlZmVyZW5jZSA9IGJlQ2NkTnVtYmVyID8gYmVDY2ROdW1iZXIgOiBudWxsO1xuICAgICAgIHRoaXMuZXhjZXB0aW9uUmVmZXJlbmNlID0gYmVFeGNlcHRpb25OdW1iZXIgPyBiZUV4Y2VwdGlvbk51bWJlciA6IGV4Y2VwdGlvblJlZmVyZW5jZTtcbiAgICAgICB0aGlzLmdldFBheW1lbnRHcm91cERldGFpbHMoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSwgZmFsc2UsICcnKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHNlbGVjdFJhZGlvQnV0dG9uKGtleSwgdHlwZSkge1xuICAgIHRoaXMuaXNNb3JlRGV0YWlsc0JveEhpZGUgPSB0cnVlO1xuICAgIGlmKCB0eXBlID09PSAnZXhwbGFuYXRpb24nICYmIGtleSA9PT0gJ290aGVyJyApe1xuICAgICAgdGhpcy5pc1BheW1lbnREZXRhaWxzRW1wdHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNQYXltZW50RGV0YWlsc0ludmFsaWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucGF5bWVudERldGFpbHNNaW5IYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5wYXltZW50RGV0YWlsc01heEhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTW9yZURldGFpbHNCb3hIaWRlID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIE9yZGVyTGlzdFNlbGVjdEV2ZW50KG9yZGVyZWY6IGFueSl7XG4gICAgdGhpcy5pc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlY29yZElkPSBvcmRlcmVmO1xuICB9XG5cbiAgcmVkaXJlY3RUb09yZGVyRmVlU2VhcmNoUGFnZSgpIHtcbiAgICAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuID0gbnVsbDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gdGhpcy5yZWNvcmRJZDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5Jztcbn1cbn1cbiJdfQ==
|
|
371
|
+
__decorate([
|
|
372
|
+
Input(),
|
|
373
|
+
__metadata("design:type", Boolean)
|
|
374
|
+
], AllocatePaymentsComponent.prototype, "isTurnOff", void 0);
|
|
375
|
+
__decorate([
|
|
376
|
+
Input(),
|
|
377
|
+
__metadata("design:type", String)
|
|
378
|
+
], AllocatePaymentsComponent.prototype, "caseType", void 0);
|
|
379
|
+
AllocatePaymentsComponent = __decorate([
|
|
380
|
+
Component({
|
|
381
|
+
selector: 'app-allocate-payments',
|
|
382
|
+
template: "<div class=\"allocate-payments\">\n <ng-container *ngIf=\"viewStatus === 'mainForm' && !isTurnOff\">\n\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a (click)=\"gotoCasetransationPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div>\n \n <div class=\"paymentrequest\">\n <h1 class=\"govuk-heading-xl govuk-!-margin-top-3 govuk-!-margin-bottom-4\">Select payment request</h1>\n <p class=\"govuk-!-margin-top-5 casererf\">Case reference: {{ccdReference}}</p>\n </div>\n \n <div *ngFor=\"let orderRef of orderLevelFees; let i of index;\" class=\"multiple-choice unprocessed-payments--radio-button\">\n <input id=\"'orderfee'+i+''\"\n aria-label=\"orderLevelRecord\"\n name=\"orderLevelRecord\"\n \n (click)=\"OrderListSelectEvent(orderRef.orderRefId)\"\n type=\"radio\"\n value=\"{{orderRef.orderTotalFees}}\" />\n <label for=\"radio-inline-1\"> {{orderRef.orderTotalFees | currency :'GBP':'symbol':'1.2-2'}}({{orderRef.orderStatus}})</label>\n </div>\n \n <div class=\"paymentrequest\">\n <button [disabled]=\"isContinueButtondisabled\" type=\"submit\" (click)=\"redirectToOrderFeeSearchPage()\" class=\"button allbtb button--disabled govuk-!-margin-right-1\">\n Continue\n </button>\n </div>\n \n </ng-container>\n\n <div *ngIf=\"viewStatus==='mainForm' && isTurnOff\">\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='ALLOCATEPAYMENTS'>\n <div class=\"govuk-breadcrumbs\" *ngIf=\"paymentRef\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"#\" (click)=\"gotoSummaryPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n <div class=\"govuk-heading-section\">\n <h1 class=\"govuk-heading-xl\">Allocate payment to fee group</h1>\n <h2 class=\"govuk-heading-l\">Amount left to be allocated:\n {{ unAllocatedPayment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</h2>\n </div>\n <div class=\"payment-group-section\" *ngFor=\"let paymentGroup of paymentGroups\">\n <h3 class=\"govuk-heading-m\">Group reference: {{paymentGroup.payment_group_reference}}</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1 govuk-table__custom--col1\"\n [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n <div class=\"multiple-choice\">\n <input id=\"unpaiedFee-{{i}}\" name=\"unassignedRecord\" type=\"radio\"\n (click)=\"selectedPaymentGroup(paymentGroup)\" />\n <label for=\"unpaiedFee-{{i}}\"></label>\n </div>\n </td>\n <td class=\"govuk-table__cell govuk-table__cell--col1\">{{fee.code}}</td>\n <td class=\"govuk-table__cell govuk-table__cell--col2\"> {{fee.description}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col3\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\">\n {{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\">\n {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6 govuk-table__custom--col6\"\n [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n {{getGroupOutstandingAmount(paymentGroup) | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n\n </tr>\n\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees.length==0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n </div>\n <div class=\"govuk-button-group-allocate\">\n <button type=\"button\" class=\"button govuk-!-margin-right-1\" [disabled]=\"isContinueButtondisabled\"\n (click)=\"saveAndContinue()\">\n Continue\n </button>\n <button type=\"button\" class=\"button govuk-button--secondary\" (click)=\"gotoCasetransationPage()\">\n Cancel\n </button>\n </div>\n </div>\n\n <ng-container *ngIf=\"(viewStatus === 'mainForm' && isTurnOff) || viewStatus === 'allocatePaymentConfirmation'\">\n <ccpay-error-banner *ngIf=\"errorMessage.showError\" [errorMessage]=\"errorMessage\"></ccpay-error-banner>\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='{{feedbackUrlLabel}}'>\n <h1 class=\"govuk-heading-xl\">Confirm allocation</h1>\n <h2 class=\"govuk-heading-l govuk-heading-l--custom\">\n Amount to be allocated: {{amountForAllocation | currency:'GBP':'symbol-narrow':'1.2-2'}}\n </h2>\n <div class=\"payment-group-section\" *ngIf=\"paymentGroup\">\n <h3 class=\"govuk-heading-m--custom\" *ngIf=\"isTurnOff\">Group reference: {{paymentGroup.payment_group_reference}}\n </h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount Due</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1\">{{fee.code}}</td>\n <td class=\"govuk-table__cell govuk-table__cell--col2\"> {{fee.description}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col3\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\">\n {{ fee.fee_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\">\n {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6\" [attr.rowspan]=\"paymentGroup.fees.length\"\n *ngIf=\"i==0\"> {{afterFeeAllocateOutstanding | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees.length == 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n </div>\n <div class=\"govuk-warning-text\" *ngIf=\"isRemainingAmountGtZero || isRemainingAmountLtZero || remainingAmount === 0\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text govuk-warning-text__custom\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n {{paymentSectionLabel.title}} {{ remainingAmount | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </strong>\n </div>\n <div class=\"govuk-form-group\" *ngIf=\"isRemainingAmountGtZero || isRemainingAmountLtZero\">\n <div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint\"\n [ngClass]=\"{'inline-error-message': paymentReasonHasError}\">\n {{paymentSectionLabel.reason}}\n </span>\n <div\n [ngClass]=\"paymentReasonHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountGtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let reason of reasonList.overPayment | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{reason.key}}\" name=\"paymentReason\" type=\"radio\"\n [(ngModel)]=\"paymentReason\" value={{reason.value}}>\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{reason.value}}\n </label>\n </div>\n </div>\n <div\n [ngClass]=\"paymentReasonHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountLtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let reason of reasonList.shortFall | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{reason.key}}\" name=\"paymentReason\" type=\"radio\"\n [(ngModel)]=\"paymentReason\" value={{reason.value}}>\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{reason.value}}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n <div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint\"\n [ngClass]=\"{'inline-error-message': paymentExplanationHasError}\">\n Provide an explanatory note\n </span>\n <div\n [ngClass]=\"paymentExplanationHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountGtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let explanation of explanationList.overPayment | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{explanation.key}}\" name=\"paymentExplanation\" type=\"radio\"\n [(ngModel)]=\"paymentExplanation\" value={{explanation.value}}\n (click)=\"selectRadioButton(explanation.key, 'explanation')\">\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{explanation.value}}\n </label>\n </div>\n </div>\n <div\n [ngClass]=\"paymentExplanationHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" *ngIf=\"isRemainingAmountLtZero\">\n <div class=\"govuk-radios__item\" *ngFor=\"let explanation of explanationList.shortFall | keyValue\">\n <input class=\"govuk-radios__input\" id=\"{{explanation.key}}\" name=\"paymentExplanation\" type=\"radio\"\n [(ngModel)]=\"paymentExplanation\" value={{explanation.value}}\n (click)=\"selectRadioButton(explanation.key, 'explanation')\">\n <label class=\"govuk-label govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{explanation.value}}\n </label>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n\n <form [formGroup]=\"overUnderPaymentForm\" novalidate>\n <div\n [ngClass]=\"isMoreDetailsBoxHide ? 'govuk-radios__conditional govuk-radios__conditional--hidden' : isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError ? 'govuk-radios__conditional inline-error-border' : 'govuk-radios__conditional'\"\n id=\"conditional-how-contacted-conditional-3\">\n <div class=\"govuk-form-group\">\n <span id=\"more-detail-hint\" class=\"govuk-hint govuk-font__custom\">\n Please enter details\n </span>\n <textarea class=\"govuk-textarea\"\n [ngClass]=\"{'inline-error-class': isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError}\"\n id=\"moreDetails\" name=\"moreDetails\" rows=\"5\" formControlName=\"moreDetails\">\n </textarea>\n <p class=\"inline-error-message\"\n *ngIf=\"isPaymentDetailsEmpty || isPaymentDetailsInvalid || paymentDetailsMinHasError || paymentDetailsMaxHasError\">\n <span *ngIf=\"isPaymentDetailsEmpty\">Enter a explanation</span>\n <span *ngIf=\"isPaymentDetailsInvalid\">Enter a valid explanation</span>\n <span *ngIf=\"paymentDetailsMinHasError\">Explanation should be at least 3 characters.</span>\n <span *ngIf=\"paymentDetailsMaxHasError\">Explanation should be 255 characters or under.</span>\n </p>\n </div>\n </div>\n <div class=\"govuk-button--group\">\n <button type=\"submit\" [disabled]=\"isConfirmButtondisabled\"\n [ngClass]=\"isConfirmButtondisabled ? 'button button--disabled' : 'button'\"\n (click)=\"confirmAllocatePayement()\">\n Confirm\n </button>\n <button type=\"button\" class=\"button govuk-button--secondary\" (click)=\"cancelAllocatePayment($event)\">\n Cancel\n </button>\n </div>\n </form>\n </ng-container>\n</div>",
|
|
383
|
+
styles: [".allocate-payments{margin:20px 0}.allocate-payments .govuk-table__cell--col1,.allocate-payments .govuk-table__cell--col3{width:10%}.allocate-payments .govuk-table__cell--col2,.allocate-payments .govuk-table__cell--col6{width:25%}.allocate-payments .govuk-table__cell--col4,.allocate-payments .govuk-table__cell--col5{width:15%}.allocate-payments .govuk-button-group-allocate{display:flex;justify-content:flex-start}.allocate-payments .govuk-button--secondary{margin-left:10px;background-color:#b3b8bdf2}.allocate-payments .govuk-custom-warning__message{font-size:30px;position:relative;top:12px;font-weight:700}.allocate-payments .govuk-warning-text-custom{margin-bottom:0!important;padding:10px 0 5px}.allocate-payments .govuk-table__custom--col1{padding-top:0;padding-bottom:20px;padding-left:15px}.allocate-payments .govuk-table__custom--col6{text-align:center}.allocate-payments .govuk-list__custom{padding-left:20px}.allocate-payments .govuk-font__custom,.allocate-payments .govuk-heading-m--custom,.allocate-payments .govuk-hint,.allocate-payments .govuk-label--m,.allocate-payments .govuk-list__custom,.allocate-payments .govuk-radios__item,.allocate-payments .govuk-warning-text__custom{font-size:19px}.allocate-payments .govuk-radios__conditional--hidden{display:none}.allocate-payments .form-group-error{border-left:5px solid #b10e1e;padding-left:15px}.allocate-payments .inline-error-class{outline:#a71414 solid 3px;outline-offset:0}.allocate-payments .inline-error-message{color:#a71414;font-weight:700;margin-top:10px}.allocate-payments .inline-error-border{border-color:#a71414}.allbtb{margin-top:2em}.govuk-back-link{font-size:1.5rem!important}.multiple-choice{font-size:19px}.casererf{align-self:flex-end;font-size:19px}.paymentrequest{display:flex;flex-direction:row;justify-content:space-between;width:960px}"]
|
|
384
|
+
}),
|
|
385
|
+
__metadata("design:paramtypes", [ErrorHandlerService,
|
|
386
|
+
CaseTransactionsService,
|
|
387
|
+
FormBuilder,
|
|
388
|
+
PaymentViewService,
|
|
389
|
+
PaymentLibComponent,
|
|
390
|
+
BulkScaningPaymentService,
|
|
391
|
+
OrderslistService])
|
|
392
|
+
], AllocatePaymentsComponent);
|
|
393
|
+
export { AllocatePaymentsComponent };
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb2NhdGUtcGF5bWVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hbGxvY2F0ZS1wYXltZW50cy9hbGxvY2F0ZS1wYXltZW50cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUNuRyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxrRUFBa0UsQ0FBQztBQUMzRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUdsRixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUV2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQVN0RSxJQUFhLHlCQUF5QixHQUF0QyxNQUFhLHlCQUF5QjtJQXVGcEMsWUFDUSxtQkFBd0MsRUFDeEMsdUJBQWdELEVBQ2hELFdBQXdCLEVBQ3hCLGtCQUFzQyxFQUN0QyxtQkFBd0MsRUFDeEMseUJBQW9ELEVBQ3BELGlCQUFvQztRQU5wQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsZ0JBQVcsR0FBWCxX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bUIsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO0lBQ3RELENBQUM7Q0FDQSxDQUFBOztZQXJVOEIsbUJBQW1CO1lBQ2YsdUJBQXVCO1lBQ25DLFdBQVc7WUFDSixrQkFBa0I7WUFDakIsbUJBQW1CO1lBQ2IseUJBQXlCO1lBQ2pDLGlCQUFpQjs7QUE3Rm5DO0lBQVIsS0FBSyxFQUFFOzs0REFBb0I7QUFDbkI7SUFBUixLQUFLLEVBQUU7OzJEQUFrQjtBQUZmLHlCQUF5QjtJQUxyQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLHlwY0FBaUQ7O0tBRWxELENBQUM7cUNBeUY2QixtQkFBbUI7UUFDZix1QkFBdUI7UUFDbkMsV0FBVztRQUNKLGtCQUFrQjtRQUNqQixtQkFBbUI7UUFDYix5QkFBeUI7UUFDakMsaUJBQWlCO0dBOUZqQyx5QkFBeUIsQ0E2WnJDO1NBN1pZLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQge0Nhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5zZXJ2aWNlJzsgXG5pbXBvcnQge0J1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHtJQlNQYXltZW50c30gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JQlNQYXltZW50cyc7XG5pbXBvcnQge0FsbG9jYXRlUGF5bWVudFJlcXVlc3R9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvQWxsb2NhdGVQYXltZW50UmVxdWVzdCc7XG5pbXBvcnQge0lBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0fSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lBbGxvY2F0aW9uUGF5bWVudHNSZXF1ZXN0JztcbmltcG9ydCB7IElPcmRlclJlZmVyZW5jZUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSU9yZGVyUmVmZXJlbmNlRmVlJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hbGxvY2F0ZS1wYXltZW50cycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGxvY2F0ZS1wYXltZW50cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FsbG9jYXRlLXBheW1lbnRzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQWxsb2NhdGVQYXltZW50c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgY2FzZVR5cGU6IHN0cmluZztcblxuICBvdmVyVW5kZXJQYXltZW50Rm9ybTogRm9ybUdyb3VwO1xuICB2aWV3U3RhdHVzOiBzdHJpbmc7XG4gIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgYnNwYXltZW50ZGNuOiBzdHJpbmc7XG4gIHJlY29yZElkOnN0cmluZztcbiAgZmVlZGJhY2tVcmxMYWJlbDpzdHJpbmc7XG4gIHVuQWxsb2NhdGVkUGF5bWVudDogSUJTUGF5bWVudHMgPSB7XG4gICAgYW1vdW50OiAwXG4gIH07XG4gIHNpdGVJRDogc3RyaW5nID0gbnVsbDtcbiAgZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSwgZmFsc2UsICcnKTtcbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBwYXltZW50R3JvdXBzOiBJUGF5bWVudEdyb3VwW10gPSBbXTtcdFxuICByZW1haW5pbmdBbW91bnQ6IG51bWJlcjtcbiAgaXNSZW1haW5pbmdBbW91bnRHdFplcm86IGJvb2xlYW47XG4gIGlzTW9yZURldGFpbHNCb3hIaWRlOiBib29sZWFuICA9IHRydWU7XG4gIGlzUmVtYWluaW5nQW1vdW50THRaZXJvOiBib29sZWFuO1xuICBhZnRlckZlZUFsbG9jYXRlT3V0c3RhbmRpbmc6IG51bWJlcjtcbiAgYW1vdW50Rm9yQWxsb2NhdGlvbjogbnVtYmVyO1xuICBpc0NvbmZpcm1CdXR0b25kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBvdGhlclBheW1lbnRFeHBsYW5hdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZyA9IG51bGw7XG4gIGlzRmVlQW1vdW50WmVybzogYm9vbGVhbiA9IGZhbHNlO1x0XG5cbiAgcGF5bWVudFJlYXNvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUGF5bWVudERldGFpbHNFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1BheW1lbnREZXRhaWxzSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYXltZW50RGV0YWlsc01pbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHBheW1lbnREZXRhaWxzTWF4SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVc2VyTmFtZUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGlzVXNlck5hbWVJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XG4gIGNjZFJlZmVyZW5jZTogc3RyaW5nID0gbnVsbDtcbiAgZXhjZXB0aW9uUmVmZXJlbmNlOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50UmVhc29uOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50RXhwbGFuYXRpb246IHN0cmluZyA9IG51bGw7XG4gIHVzZXJOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwYXltZW50U2VjdGlvbkxhYmVsOiBhbnk7XG4gIHBheW1lbnRSZWY6IHN0cmluZyA9IG51bGw7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgb3JkZXJMZXZlbEZlZXM6IElPcmRlclJlZmVyZW5jZUZlZVtdID0gW107XG4gIGNvb2tpZVVzZXJOYW1lOiBzdHJpbmdbXSA9IFtdO1xuICBlbkNvb2tpZVVzZXJOYW1lOiBhbnk7XG4gIHVzZXJOYW1lRmllbGQ6IHN0cmluZyA9IG51bGw7XG5cbiAgcmVhc29uTGlzdDogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH09IHtcbiAgICBvdmVyUGF5bWVudDoge1xuICAgICAgaHdmUmV3YXJkOiAnSGVscCB3aXRoIEZlZXMgKEhXRikgYXdhcmRlZC4gIFBsZWFzZSBpbmNsdWRlIHRoZSBIV0YgcmVmZXJlbmNlIG51bWJlciBpbiB0aGUgZXhwbGFuYXRvcnkgbm90ZScsXG4gICAgICB3cm9uZ0ZlZTogJ0luY29ycmVjdCBwYXltZW50IHJlY2VpdmVkJyxcbiAgICAgIG5vdElzc3VlQ2FzZTogJ1VuYWJsZSB0byBpc3N1ZSBjYXNlJyxcbiAgICAgIG90aGVyRGVkdWN0aW9uOiAnT3RoZXInXG4gICAgfSxcbiAgICBzaG9ydEZhbGw6IHtcbiAgICAgIGhlbHBXaXRoRmVlOiAnSGVscCB3aXRoIEZlZXMgKEhXRikgYXBwbGljYXRpb24gZGVjbGluZWQnLFxuICAgICAgd3JvbmdGZWU6ICdJbmNvcnJlY3QgcGF5bWVudCByZWNlaXZlZCcsXG4gICAgICBvdGhlcjogJ090aGVyJ1xuICAgIH1cbiAgfVxuICBleHBsYW5hdGlvbkxpc3QgPSB7XG4gICAgb3ZlclBheW1lbnQ6IHtcbiAgICAgIHJlZmVyUmVmdW5kOiAnRGV0YWlscyBpbiBjYXNlIG5vdGVzLiAgUmVmdW5kIGR1ZScsXG4gICAgICBub1JlZnVuZDogJ0RldGFpbHMgaW4gY2FzZSBub3Rlcy4gTm8gcmVmdW5kIGR1ZScsXG4gICAgICBub0Nhc2U6ICdObyBjYXNlIGNyZWF0ZWQuICBSZWZ1bmQgZHVlJyxcbiAgICAgIG90aGVyOiAnT3RoZXInXG4gICAgfSxcbiAgICBzaG9ydEZhbGw6IHtcbiAgICAgIGhvbGRDYXNlOiAnSSBoYXZlIHB1dCBhIHN0b3Agb24gdGhlIGNhc2UgYW5kIGNvbnRhY3RlZCB0aGUgYXBwbGljYW50IHJlcXVlc3RpbmcgdGhlIGJhbGFuY2Ugb2YgcGF5bWVudCcsXG4gICAgICBoZWxkQ2FzZTogJ0kgaGF2ZSBwdXQgYSBzdG9wIG9uIHRoZSBjYXNlLiAgVGhlIGFwcGxpY2FudCBuZWVkcyB0byBiZSBjb250YWN0ZWQgdG8gcmVxdWVzdCB0aGUgYmFsYW5jZSBvZiBwYXltZW50JyxcbiAgICAgIG90aGVyOiAnT3RoZXInXG4gICAgfVxuICB9XG5cbiAgcmVmdW5kID0ge1xuICAgIHJlYXNvbjoge1xuICAgICAgZHVwbGljYXRlOiAnRHVwbGljYXRlIHBheW1lbnQnLFxuICAgICAgaHVtYW5lcnJvcjogJ0h1bWFuIGVycm9yJyxcbiAgICAgIGNhc2VXaXRoZHJhd246ICdDYXNlIHdpdGhkcmF3bicsXG4gICAgICBvdGhlcjogJ090aGVyJ1xuICAgIH1cbiAgfVxuXG5cbiAgY29uc3RydWN0b3IoXG4gIHByaXZhdGUgZXJyb3JIYW5kbGVyU2VydmljZTogRXJyb3JIYW5kbGVyU2VydmljZSxcbiAgcHJpdmF0ZSBjYXNlVHJhbnNhY3Rpb25zU2VydmljZTogQ2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UsXG4gIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlLFxuICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSxcbiAgcHJpdmF0ZSBPcmRlcnNsaXN0U2VydmljZTogT3JkZXJzbGlzdFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdhbGxvY2F0ZVBheW1lbnRDb25maXJtYXRpb24nO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmNjZENhc2VOdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSO1xuICAgIHRoaXMuYnNwYXltZW50ZGNuID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbjtcbiAgICB0aGlzLnBheW1lbnRSZWYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OO1xuICAgIHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRTtcbiAgICB0aGlzLmlzVHVybk9mZiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1R1cm5PZmY7XG4gICAgdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgbW9yZURldGFpbHM6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksXG4gICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSksXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XFxcXHMsXFxcXC5dKikkJylcbiAgICAgIF0pKSxcbiAgICAgIHVzZXJOYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbYS16QS1aMC05XFxcXHNdKikkJylcbiAgICAgIF0pKSxcbiAgICB9KTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldE9yZGVyc0xpc3QoKS5zdWJzY3JpYmUoIChkYXRhKSA9PlxuICAgIHRoaXMub3JkZXJMZXZlbEZlZXMgPSBkYXRhLmZpbHRlcihkYXRhID0+IGRhdGEub3JkZXJTdGF0dXMgIT09ICdQYWlkJykpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0Q2FzZVR5cGUoKS5zdWJzY3JpYmUoIChkYXRhKSA9PiB0aGlzLmNhc2VUeXBlID0gZGF0YSk7XG4gICAgdGhpcy5nZXRVbmFzc2lnbmVkUGF5bWVudCgpO1xuICB9XG4gIGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmNhbGN1bGF0ZU91dFN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCk7XG4gIH1cblxuICBnZXRQYXltZW50R3JvdXBEZXRhaWxzKCl7XG5cbiAgICBpZighdGhpcy5pc1R1cm5PZmYpe1xuICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0UGF5bWVudEdyb3VwRGV0YWlscyh0aGlzLnBheW1lbnRSZWYpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgID0gcGF5bWVudEdyb3VwO1xuICAgICAgICAgIHRoaXMuc2F2ZUFuZENvbnRpbnVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUsIGZhbHNlLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfWVsc2Uge1xuICAgICAgdGhpcy5jYXNlVHJhbnNhY3Rpb25zU2VydmljZS5nZXRQYXltZW50R3JvdXBzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50R3JvdXBzID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UsIGZhbHNlLCAnJyk7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwcyA9IHBheW1lbnRHcm91cHNbJ3BheW1lbnRfZ3JvdXBzJ10uZmlsdGVyKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgICAgIGlmKGZlZS5jYWxjdWxhdGVkX2Ftb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGZWVBbW91bnRaZXJvID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBmc3RDb24gPSB0aGlzLmdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQoPElQYXltZW50R3JvdXA+cGF5bWVudEdyb3VwKSxcbiAgICAgICAgICAgIHNjbmRDbiA9IGZzdENvbiA+IDAgfHwgKGZzdENvbiA9PSAwICYmIHRoaXMuaXNGZWVBbW91bnRaZXJvKSAmJiBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgPT09IHRoaXMucGF5bWVudFJlZjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBheW1lbnRSZWYgPyAgc2NuZENuIDogZnN0Q29uID4gMCB8fCAoZnN0Q29uID09IDAgJiYgdGhpcy5pc0ZlZUFtb3VudFplcm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSwgZmFsc2UsICcnKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgfVxuXG4gIHNlbGVjdGVkUGF5bWVudEdyb3VwKHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cCkge1x0XG4gICAgdGhpcy5pc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcdFxuICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1x0XG4gIH1cdFxuXG4gIGdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gIH1cblxuICBnb3RvU3VtbWFyeVBhZ2UoZXZlbnQ6IGFueSkgeyBcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdmZWUtc3VtbWFyeSc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICB9XG5cbiAgY2FuY2VsQWxsb2NhdGVQYXltZW50KGV2ZW50OiBhbnkpe1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhbGwnKTtcbiAgICBpZighdGhpcy5pc1R1cm5PZmYpe1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1R1cm5PZmYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHRydWU7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluRm9ybSc7XHRcbiAgICB9XG4gIH1cbiAgY29uZmlybUFsbG9jYXRlUGF5ZW1lbnQoKXtcbiAgICB0aGlzLmVuQ29va2llVXNlck5hbWUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQocm93ID0+IHJvdy5pbmNsdWRlcyhcInVzZXItaW5mb1wiKSkuc3BsaXQoXCI9XCIpWzFdLnNwbGl0KFwiO1wiKTtcbiAgICB0aGlzLmNvb2tpZVVzZXJOYW1lID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQodGhpcy5lbkNvb2tpZVVzZXJOYW1lKSk7XG4gICAgXG4gICAgY29uc3QgZnVsbE5hbWUgPSB0aGlzLmNvb2tpZVVzZXJOYW1lWydmb3JlbmFtZSddICsgJyAnICsgdGhpcy5jb29raWVVc2VyTmFtZVsnc3VybmFtZSddO1xuXG4gICAgY29uc3QgcGF5bWVudERldGFpbHNGaWVsZCA9IHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uY29udHJvbHMubW9yZURldGFpbHMsXG4gICAgICBwYXltZW50Rm9ybUVycm9yID0gdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5jb250cm9scy5tb3JlRGV0YWlscy5lcnJvcnMsXG4gICAgICB1c2VyTmFtZUZpZWxkID0gZnVsbE5hbWUsXG4gICAgICBpc0VtcHR5Q29uZHRpb24gPSB0aGlzLnBheW1lbnRSZWFzb24gJiYgdGhpcy5wYXltZW50RXhwbGFuYXRpb24sXG4gICAgICBpc090aGVyT3B0aW9uU2VsZWN0ZWQgPSB0aGlzLnBheW1lbnRFeHBsYW5hdGlvbiA9PT0gJ090aGVyJztcblxuICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYWxsJyk7XG4gICAgaWYgKCAoIXRoaXMuaXNSZW1haW5pbmdBbW91bnRHdFplcm8gJiYgIXRoaXMuaXNSZW1haW5pbmdBbW91bnRMdFplcm8pIHx8IGlzRW1wdHlDb25kdGlvbiAmJiAoIWlzT3RoZXJPcHRpb25TZWxlY3RlZCAmJiB1c2VyTmFtZUZpZWxkLmxlbmd0aCA+IDAgfHwgaXNPdGhlck9wdGlvblNlbGVjdGVkICYmIHVzZXJOYW1lRmllbGQubGVuZ3RoID4gMCAmJiBwYXltZW50RGV0YWlsc0ZpZWxkLnZhbGlkKSkge1xuICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IHRydWU7XG4gICAgICB0aGlzLm90aGVyUGF5bWVudEV4cGxhbmF0aW9uID0gdGhpcy5wYXltZW50RXhwbGFuYXRpb24gPT09ICdPdGhlcicgPyBwYXltZW50RGV0YWlsc0ZpZWxkLnZhbHVlIDogdGhpcy5wYXltZW50RXhwbGFuYXRpb247XG4gICAgICB0aGlzLnVzZXJOYW1lID0gdXNlck5hbWVGaWVsZDtcbiAgICAgIHRoaXMuZmluYWxTZXJ2aWNlQ2FsbCgpO1xuICAgIH1lbHNlIHtcbiAgICAgIGlmKCF0aGlzLnBheW1lbnRSZWFzb24pIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlYXNvbicpO1xuICAgICAgfVxuICAgICAgaWYoIXRoaXMucGF5bWVudEV4cGxhbmF0aW9uKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdleHBsYW5hdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYodGhpcy5wYXltZW50RXhwbGFuYXRpb24gJiYgaXNPdGhlck9wdGlvblNlbGVjdGVkKSB7XG4gICAgICAgIGlmKHBheW1lbnREZXRhaWxzRmllbGQudmFsdWUgPT0gJycgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ290aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYocGF5bWVudERldGFpbHNGaWVsZC52YWx1ZSAhPSAnJyAmJiBwYXltZW50RGV0YWlsc0ZpZWxkLmludmFsaWQgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ290aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYocGF5bWVudEZvcm1FcnJvciAmJiBwYXltZW50Rm9ybUVycm9yLm1pbmxlbmd0aCAmJiBwYXltZW50Rm9ybUVycm9yLm1pbmxlbmd0aC5hY3R1YWxMZW5ndGggPCAzICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdvdGhlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHBheW1lbnRGb3JtRXJyb3IgJiYgcGF5bWVudEZvcm1FcnJvci5tYXhsZW5ndGggJiYgcGF5bWVudEZvcm1FcnJvci5tYXhsZW5ndGguYWN0dWFsTGVuZ3RoID4gMjU1ICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdvdGhlcicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih1c2VyTmFtZUZpZWxkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdLCAndXNlcm5hbWUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVzZXRGb3JtKHZhbHMsIGZpZWxkKSB7XG4gICAgaWYoZmllbGQ9PT0ncmVhc29uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLnBheW1lbnRSZWFzb25IYXNFcnJvciA9IHZhbHNbMF07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J2V4cGxhbmF0aW9uJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLnBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yID0gdmFsc1sxXTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0nb3RoZXInIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNQYXltZW50RGV0YWlsc0VtcHR5ID0gdmFsc1syXTtcbiAgICAgIHRoaXMuaXNQYXltZW50RGV0YWlsc0ludmFsaWQgPSB2YWxzWzNdO1xuICAgICAgdGhpcy5wYXltZW50RGV0YWlsc01pbkhhc0Vycm9yID0gdmFsc1s0XTtcbiAgICAgIHRoaXMucGF5bWVudERldGFpbHNNYXhIYXNFcnJvciA9IHZhbHNbNV07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J3VzZXJuYW1lJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzVXNlck5hbWVFbXB0eSA9IHZhbHNbNl07XG4gICAgICB0aGlzLmlzVXNlck5hbWVJbnZhbGlkID0gdmFsc1s3XTtcbiAgICB9XG4gIH1cbiAgZmluYWxTZXJ2aWNlQ2FsbCgpIHtcbiAgICBpZighdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSkge1xuICAgICAgbGV0IGFsbG9jYXRlZFJlcXVlc3QgPSB7XG4gICAgICAgIHJlYXNvbjogdGhpcy5wYXltZW50UmVhc29uLFxuICAgICAgICBhbGxvY2F0aW9uX3N0YXR1czonQWxsb2NhdGVkJyxcbiAgICAgICAgZXhwbGFuYXRpb246IHRoaXMub3RoZXJQYXltZW50RXhwbGFuYXRpb24sXG4gICAgICAgIHBheW1lbnRfYWxsb2NhdGlvbl9zdGF0dXM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgbmFtZTogJ0FsbG9jYXRlZCdcbiAgICAgICAgfSxcbiAgICAgICAgcGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLFxuICAgICAgICBjYXNlX3R5cGU6IHRoaXMuY2FzZVR5cGUsXG4gICAgICAgIHVzZXJfbmFtZTogdGhpcy51c2VyTmFtZVxuICAgICAgfVxuICAgICAgY29uc3QgcG9zdFN0cmF0ZWdpY0JvZHkgPSBuZXcgQWxsb2NhdGVQYXltZW50UmVxdWVzdFxuICAgICAgKHRoaXMuY2NkUmVmZXJlbmNlLCB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudCwgdGhpcy5jYXNlVHlwZSwgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UsIGFsbG9jYXRlZFJlcXVlc3QpO1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLnBvc3RCU1BheW1lbnRTdHJhdGVnaWMocG9zdFN0cmF0ZWdpY0JvZHkgLCB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSwgZmFsc2UsICcnKTtcbiAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgdGhpcy5nb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlLCBmYWxzZSwgJycpO1xuICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucGF0Y2hCU0NoYW5nZVN0YXR1cyh0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5kY25fcmVmZXJlbmNlLCAnUFJPQ0VTU0VEJykuc3Vic2NyaWJlKFxuICAgICAgcmVzMSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSwgZmFsc2UsICcnKTtcbiAgICAgICAgbGV0IHJlc3BvbnNlMSA9IEpTT04ucGFyc2UocmVzMSk7XG4gICAgICAgIGlmIChyZXNwb25zZTEuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IEFsbG9jYXRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgICAodGhpcy5jY2RSZWZlcmVuY2UsIHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LCB0aGlzLnNpdGVJRCwgdGhpcy5leGNlcHRpb25SZWZlcmVuY2UpO1xuICAgICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wb3N0QlNBbGxvY2F0ZVBheW1lbnQocmVxdWVzdEJvZHksIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXMyID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlLCBmYWxzZSwgJycpO1xuICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UyID0gSlNPTi5wYXJzZShyZXMyKTtcbiAgICAgICAgICAgICAgY29uc3QgcmVxQm9keSA9IG5ldyBJQWxsb2NhdGlvblBheW1lbnRzUmVxdWVzdFxuICAgICAgICAgICAgICAocmVzcG9uc2UyWydkYXRhJ10ucGF5bWVudF9ncm91cF9yZWZlcmVuY2UsIHJlc3BvbnNlMlsnZGF0YSddLnJlZmVyZW5jZSwgdGhpcy5wYXltZW50UmVhc29uLCB0aGlzLm90aGVyUGF5bWVudEV4cGxhbmF0aW9uLCB0aGlzLnVzZXJOYW1lKTtcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlMi5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdEJTQWxsb2NhdGlvblBheW1lbnRzKHJlcUJvZHkpLnN1YnNjcmliZShcbiAgXG4gICAgICAgICAgICAgICAgcmVzMyA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2UzID0gSlNPTi5wYXJzZShyZXMzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZTMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5wYXRjaEJTQ2hhbmdlU3RhdHVzKHRoaXMudW5BbGxvY2F0ZWRQYXltZW50LmRjbl9yZWZlcmVuY2UsICdDT01QTEVURScpLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzQ29uZmlybUJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UucGF0Y2hCU0NoYW5nZVN0YXR1cyh0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5kY25fcmVmZXJlbmNlLCAnQ09NUExFVEUnKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUsIGZhbHNlLCAnJyk7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1CdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7ICBcbiAgfVxuICB9XG5cbiAgc2F2ZUFuZENvbnRpbnVlKCl7XG4gICAgaWYodGhpcy5wYXltZW50R3JvdXApIHtcbiAgICAgIHRoaXMuaXNNb3JlRGV0YWlsc0JveEhpZGUgPSB0cnVlO1xuICAgICAgdGhpcy5vdmVyVW5kZXJQYXltZW50Rm9ybS5nZXQoJ21vcmVEZXRhaWxzJykucmVzZXQoKTtcbiAgICAgIHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uZ2V0KCdtb3JlRGV0YWlscycpLnNldFZhbHVlKCcnKTtcbiAgICAgIHRoaXMub3ZlclVuZGVyUGF5bWVudEZvcm0uZ2V0KCd1c2VyTmFtZScpLnJlc2V0KCk7XG4gICAgICB0aGlzLm92ZXJVbmRlclBheW1lbnRGb3JtLmdldCgndXNlck5hbWUnKS5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLnBheW1lbnRSZWFzb24gPSAnJztcbiAgICAgIHRoaXMucGF5bWVudEV4cGxhbmF0aW9uID0gJyc7XG4gICAgICBsZXQgR3JvdXBPdXRzdGFuZGluZ0Ftb3VudCA9IHRoaXMuZ2V0R3JvdXBPdXRzdGFuZGluZ0Ftb3VudCh0aGlzLnBheW1lbnRHcm91cCk7XG4gICAgICBjb25zdCByZW1haW5pbmdUb0JlQXNzaWduZWQgPSB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgLSBHcm91cE91dHN0YW5kaW5nQW1vdW50O1xuICAgICAgdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEd0WmVybyA9IHJlbWFpbmluZ1RvQmVBc3NpZ25lZCA+IDA7XG4gICAgICB0aGlzLmlzUmVtYWluaW5nQW1vdW50THRaZXJvID0gcmVtYWluaW5nVG9CZUFzc2lnbmVkIDwgMDtcbiAgICAgIHRoaXMucGF5bWVudFNlY3Rpb25MYWJlbCA9IHRoaXMuaXNSZW1haW5pbmdBbW91bnRHdFplcm8gPyB7IFxuICAgICAgICAgIHRpdGxlOiAnVGhlcmUgaXMgYW4gT3ZlciBwYXltZW50IG9mJyxcbiAgICAgICAgICByZWFzb246ICdQcm92aWRlIGEgcmVhc29uLiBUaGlzIHdpbGwgYmUgdXNlZCBpbiB0aGUgUmVmdW5kIHByb2Nlc3MuJyxcbiAgICAgICAgfTogdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybyA/IHsgXG4gICAgICAgICAgdGl0bGU6ICdUaGVyZSBpcyBhbiBVbmRlciBwYXltZW50IG9mJyxcbiAgICAgICAgICByZWFzb246ICdQcm92aWRlIGEgcmVhc29uJyxcbiAgICAgICAgfTogeyBcbiAgICAgICAgICB0aXRsZTonQW1vdW50IGxlZnQgdG8gYmUgYWxsb2NhdGVkJyxcbiAgICAgICAgICByZWFzb246JycsXG4gICAgICAgIH07XG4gICAgICB0aGlzLmZlZWRiYWNrVXJsTGFiZWwgPSB0aGlzLmlzUmVtYWluaW5nQW1vdW50R3RaZXJvID8gJ0NPTkZJUk1BTExPQ0FUSU9OX1NVUlBMVVMnIDogdGhpcy5pc1JlbWFpbmluZ0Ftb3VudEx0WmVybyA/ICdDT05GSVJNQUxMT0NBVElPTl9TSE9SVEZBTEwnIDogJ0NPTkZJUk1BTExPQ0FUSU9OJztcbiAgICAgIHRoaXMucmVtYWluaW5nQW1vdW50ID0gIHRoaXMuaXNSZW1haW5pbmdBbW91bnRHdFplcm8gPyByZW1haW5pbmdUb0JlQXNzaWduZWQgOiB0aGlzLmlzUmVtYWluaW5nQW1vdW50THRaZXJvID8gcmVtYWluaW5nVG9CZUFzc2lnbmVkICogLTEgOiAwO1xuICAgICAgdGhpcy5hZnRlckZlZUFsbG9jYXRlT3V0c3RhbmRpbmcgPSByZW1haW5pbmdUb0JlQXNzaWduZWQgPj0gMCA/IDAgOiAocmVtYWluaW5nVG9CZUFzc2lnbmVkICogLTEpO1xuICAgICAgdGhpcy5hbW91bnRGb3JBbGxvY2F0aW9uID0gR3JvdXBPdXRzdGFuZGluZ0Ftb3VudCA+PSB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgPyB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudC5hbW91bnQgOiBHcm91cE91dHN0YW5kaW5nQW1vdW50O1xuICAgICAgaWYodGhpcy5pc1R1cm5PZmYpe1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWxsb2NhdGVQYXltZW50Q29uZmlybWF0aW9uJztcdFxuICAgICAgfVxuICAgIH1cbiAgfVxuICAgZ2V0VW5hc3NpZ25lZFBheW1lbnQoKSB7XG4gICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeURDTih0aGlzLmJzcGF5bWVudGRjbikuc3Vic2NyaWJlKFxuICAgICAgdW5hc3NpZ25lZFBheW1lbnRzID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlLCBmYWxzZSwgJycpO1xuICAgICAgICB0aGlzLnVuQWxsb2NhdGVkUGF5bWVudCA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzLmZpbHRlcihwYXltZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gcGF5bWVudCAmJiBwYXltZW50LmRjbl9yZWZlcmVuY2UgPT0gdGhpcy5ic3BheW1lbnRkY247XG4gICAgICAgIH0pWzBdO1xuICAgICAgICB0aGlzLnNpdGVJRCA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnJlc3BvbnNpYmxlX3NlcnZpY2VfaWQ7XG4gICAgICAgIGNvbnN0IGJlQ2NkTnVtYmVyID0gdW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10uY2NkX3JlZmVyZW5jZSxcbiAgICAgICAgYmVFeGNlcHRpb25OdW1iZXIgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZSxcbiAgICAgICAgZXhjZXB0aW9uUmVmZXJlbmNlID0gYmVDY2ROdW1iZXIgPyBiZUNjZE51bWJlciA9PT0gdGhpcy5jY2RDYXNlTnVtYmVyID8gbnVsbCA6IHRoaXMuY2NkQ2FzZU51bWJlciA6IHRoaXMuY2NkQ2FzZU51bWJlcjtcbiAgICAgICB0aGlzLmNjZFJlZmVyZW5jZSA9IGJlQ2NkTnVtYmVyID8gYmVDY2ROdW1iZXIgOiBudWxsO1xuICAgICAgIHRoaXMuZXhjZXB0aW9uUmVmZXJlbmNlID0gYmVFeGNlcHRpb25OdW1iZXIgPyBiZUV4Y2VwdGlvbk51bWJlciA6IGV4Y2VwdGlvblJlZmVyZW5jZTtcbiAgICAgICB0aGlzLmdldFBheW1lbnRHcm91cERldGFpbHMoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSwgZmFsc2UsICcnKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHNlbGVjdFJhZGlvQnV0dG9uKGtleSwgdHlwZSkge1xuICAgIHRoaXMuaXNNb3JlRGV0YWlsc0JveEhpZGUgPSB0cnVlO1xuICAgIGlmKCB0eXBlID09PSAnZXhwbGFuYXRpb24nICYmIGtleSA9PT0gJ290aGVyJyApe1xuICAgICAgdGhpcy5pc1BheW1lbnREZXRhaWxzRW1wdHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNQYXltZW50RGV0YWlsc0ludmFsaWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucGF5bWVudERldGFpbHNNaW5IYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5wYXltZW50RGV0YWlsc01heEhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTW9yZURldGFpbHNCb3hIaWRlID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIE9yZGVyTGlzdFNlbGVjdEV2ZW50KG9yZGVyZWY6IGFueSl7XG4gICAgdGhpcy5pc0NvbnRpbnVlQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlY29yZElkPSBvcmRlcmVmO1xuICB9XG5cbiAgcmVkaXJlY3RUb09yZGVyRmVlU2VhcmNoUGFnZSgpIHtcbiAgICAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuID0gbnVsbDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gdGhpcy5yZWNvcmRJZDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5Jztcbn1cbn1cbiJdfQ==
|