@hmcts/ccpay-web-component 5.0.2-beta2 → 5.0.2-beta6
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 +1531 -260
- package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
- package/esm2015/hmcts-ccpay-web-component.js +33 -31
- package/esm2015/lib/components/add-remission/add-remission.component.js +545 -41
- package/esm2015/lib/components/case-transactions/case-transactions.component.js +6 -2
- package/esm2015/lib/components/contact-details/contact-details.component.js +406 -0
- package/esm2015/lib/components/payment-view/payment-view.component.js +69 -5
- package/esm2015/lib/components/process-refund/process-refund.component.js +31 -3
- package/esm2015/lib/components/refund-status/refund-status.component.js +149 -27
- package/esm2015/lib/components/service-request/service-request.component.js +7 -5
- package/esm2015/lib/components/table/table.component.js +24 -9
- package/esm2015/lib/interfaces/IFee.js +3 -1
- package/esm2015/lib/interfaces/IPutNotificationRequest.js +25 -0
- package/esm2015/lib/interfaces/IRefundContactDetails.js +25 -0
- package/esm2015/lib/interfaces/IRefundList.js +5 -1
- package/esm2015/lib/interfaces/IRefundsNotifications.js +21 -0
- package/esm2015/lib/interfaces/IRemission.js +3 -1
- package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +6 -2
- package/esm2015/lib/interfaces/PostRefundRetroRemission.js +18 -2
- package/esm2015/lib/payment-lib.component.js +5 -1
- package/esm2015/lib/payment-lib.module.js +3 -1
- package/esm2015/lib/payment-lib.service.js +16 -1
- package/esm2015/lib/services/notification/notification.service.js +85 -0
- package/esm2015/lib/services/refunds/refunds.service.js +11 -2
- package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +2 -2
- package/esm5/hmcts-ccpay-web-component.js +33 -31
- package/esm5/lib/components/add-remission/add-remission.component.js +662 -46
- package/esm5/lib/components/case-transactions/case-transactions.component.js +6 -2
- package/esm5/lib/components/contact-details/contact-details.component.js +431 -0
- package/esm5/lib/components/payment-view/payment-view.component.js +92 -5
- package/esm5/lib/components/process-refund/process-refund.component.js +30 -3
- package/esm5/lib/components/refund-status/refund-status.component.js +177 -25
- package/esm5/lib/components/service-request/service-request.component.js +8 -5
- package/esm5/lib/components/table/table.component.js +27 -9
- package/esm5/lib/interfaces/IFee.js +3 -1
- package/esm5/lib/interfaces/IPutNotificationRequest.js +23 -0
- package/esm5/lib/interfaces/IRefundContactDetails.js +25 -0
- package/esm5/lib/interfaces/IRefundList.js +5 -1
- package/esm5/lib/interfaces/IRefundsNotifications.js +21 -0
- package/esm5/lib/interfaces/IRemission.js +3 -1
- package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +5 -2
- package/esm5/lib/interfaces/PostRefundRetroRemission.js +14 -2
- package/esm5/lib/payment-lib.component.js +5 -1
- package/esm5/lib/payment-lib.module.js +3 -1
- package/esm5/lib/payment-lib.service.js +23 -1
- package/esm5/lib/services/notification/notification.service.js +89 -0
- package/esm5/lib/services/refunds/refunds.service.js +17 -2
- package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +2 -2
- package/fesm2015/hmcts-ccpay-web-component.js +1184 -89
- package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
- package/fesm5/hmcts-ccpay-web-component.js +1523 -228
- package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
- package/hmcts-ccpay-web-component.d.ts +32 -30
- package/hmcts-ccpay-web-component.metadata.json +1 -1
- package/lib/components/add-remission/add-remission.component.d.ts +37 -2
- package/lib/components/case-transactions/case-transactions.component.d.ts +1 -0
- package/lib/components/contact-details/contact-details.component.d.ts +47 -0
- package/lib/components/payment-view/payment-view.component.d.ts +14 -1
- package/lib/components/process-refund/process-refund.component.d.ts +5 -1
- package/lib/components/refund-status/refund-status.component.d.ts +20 -5
- package/lib/components/service-request/service-request.component.d.ts +1 -1
- package/lib/components/table/table.component.d.ts +1 -0
- package/lib/interfaces/IFee.d.ts +1 -0
- package/lib/interfaces/IPutNotificationRequest.d.ts +6 -0
- package/lib/interfaces/IRefundContactDetails.d.ts +9 -0
- package/lib/interfaces/IRefundList.d.ts +3 -0
- package/lib/interfaces/IRefundsNotifications.d.ts +16 -0
- package/lib/interfaces/IRemission.d.ts +1 -0
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +3 -1
- package/lib/interfaces/PostRefundRetroRemission.d.ts +6 -1
- package/lib/payment-lib.component.d.ts +1 -0
- package/lib/payment-lib.service.d.ts +3 -0
- package/lib/services/notification/notification.service.d.ts +15 -0
- package/lib/services/refunds/refunds.service.d.ts +2 -0
- package/package.json +5 -1
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
import { Component, Output, EventEmitter, Input } from '@angular/core';
|
|
6
|
+
import { FormBuilder, Validators, FormControl } from '@angular/forms';
|
|
7
|
+
import { PaymentLibComponent } from '../../payment-lib.component';
|
|
8
|
+
import { NotificationService } from '../../services/notification/notification.service';
|
|
9
|
+
var ContactDetailsComponent = /** @class */ (function () {
|
|
10
|
+
function ContactDetailsComponent(formBuilder, notificationService, paymentLibComponent) {
|
|
11
|
+
this.formBuilder = formBuilder;
|
|
12
|
+
this.notificationService = notificationService;
|
|
13
|
+
this.paymentLibComponent = paymentLibComponent;
|
|
14
|
+
this.assignContactDetails = new EventEmitter();
|
|
15
|
+
this.redirectToIssueRefund = new EventEmitter();
|
|
16
|
+
this.pageTitle = 'Payment status history';
|
|
17
|
+
this.isEmailSAddressClicked = true;
|
|
18
|
+
this.isShowPickAddress = false;
|
|
19
|
+
this.isPostcodeClicked = false;
|
|
20
|
+
this.isManualAddressClicked = false;
|
|
21
|
+
this.addressPostcodeList = [];
|
|
22
|
+
this.isAddressBoxEmpty = false;
|
|
23
|
+
this.isEmailEmpty = false;
|
|
24
|
+
this.emailHasError = false;
|
|
25
|
+
this.isPostcodeEmpty = false;
|
|
26
|
+
this.postcodeHasError = false;
|
|
27
|
+
this.isaddressLine1Empty = false;
|
|
28
|
+
this.addressLine1HasError = false;
|
|
29
|
+
this.addressLine2HasError = false;
|
|
30
|
+
this.isTownOrCityEmpty = false;
|
|
31
|
+
this.townOrCityHasError = false;
|
|
32
|
+
this.isCountyEmpty = false;
|
|
33
|
+
this.countyHasError = false;
|
|
34
|
+
this.isMPostcodeEmpty = false;
|
|
35
|
+
this.mpostcodeHasError = false;
|
|
36
|
+
this.isCountryEmpty = false;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @return {?}
|
|
40
|
+
*/
|
|
41
|
+
ContactDetailsComponent.prototype.ngOnInit = /**
|
|
42
|
+
* @return {?}
|
|
43
|
+
*/
|
|
44
|
+
function () {
|
|
45
|
+
this.resetForm([false, false, false, false, false, false, false, false, false, false, false, false, false, false], 'all');
|
|
46
|
+
this.emailAddressForm = this.formBuilder.group({
|
|
47
|
+
email: new FormControl('', Validators.compose([
|
|
48
|
+
Validators.required,
|
|
49
|
+
Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9-]+\\.[a-z]{2,4}$')
|
|
50
|
+
]))
|
|
51
|
+
});
|
|
52
|
+
this.postCodeForm = this.formBuilder.group({
|
|
53
|
+
postcode: new FormControl('', Validators.compose([
|
|
54
|
+
Validators.required,
|
|
55
|
+
Validators.pattern('^([A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2})')
|
|
56
|
+
]))
|
|
57
|
+
});
|
|
58
|
+
this.manualAddressForm = this.formBuilder.group({
|
|
59
|
+
addressl1: new FormControl('', Validators.compose([
|
|
60
|
+
Validators.required,
|
|
61
|
+
Validators.pattern('^[a-zA-Z0-9\\s,\'-]*$')
|
|
62
|
+
])),
|
|
63
|
+
addressl2: new FormControl('', Validators.compose([
|
|
64
|
+
Validators.pattern('^[a-zA-Z0-9\\s,\'-]*$')
|
|
65
|
+
])),
|
|
66
|
+
townorcity: new FormControl('', Validators.compose([
|
|
67
|
+
Validators.required,
|
|
68
|
+
Validators.pattern('^[a-zA-Z0-9\\s,\'-]*$')
|
|
69
|
+
])),
|
|
70
|
+
county: new FormControl('', Validators.compose([
|
|
71
|
+
Validators.pattern('^[a-zA-Z0-9\\s,\'-]*$')
|
|
72
|
+
])),
|
|
73
|
+
mpostcode: new FormControl('', Validators.compose([
|
|
74
|
+
Validators.required,
|
|
75
|
+
Validators.pattern('^([A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2})')
|
|
76
|
+
])),
|
|
77
|
+
country: new FormControl('', Validators.compose([
|
|
78
|
+
Validators.required
|
|
79
|
+
]))
|
|
80
|
+
});
|
|
81
|
+
if (this.addressObj !== undefined && this.addressObj !== '') {
|
|
82
|
+
this.setEditDetails();
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* @return {?}
|
|
87
|
+
*/
|
|
88
|
+
ContactDetailsComponent.prototype.setEditDetails = /**
|
|
89
|
+
* @return {?}
|
|
90
|
+
*/
|
|
91
|
+
function () {
|
|
92
|
+
if (this.addressObj.notification_type === 'EMAIL') {
|
|
93
|
+
this.isEmailSAddressClicked = true;
|
|
94
|
+
this.isPostcodeClicked = false;
|
|
95
|
+
this.isManualAddressClicked = false;
|
|
96
|
+
this.emailAddressForm.setValue({ email: this.addressObj.contact_details.email });
|
|
97
|
+
}
|
|
98
|
+
else if (this.addressObj.notification_type === 'LETTER') {
|
|
99
|
+
this.isEmailSAddressClicked = false;
|
|
100
|
+
this.isPostcodeClicked = true;
|
|
101
|
+
this.isManualAddressClicked = true;
|
|
102
|
+
this.manualAddressForm.patchValue({
|
|
103
|
+
addressl1: this.addressObj.contact_details.address_line,
|
|
104
|
+
townorcity: this.addressObj.contact_details.city,
|
|
105
|
+
county: this.addressObj.contact_details.county,
|
|
106
|
+
country: this.addressObj.contact_details.country,
|
|
107
|
+
mpostcode: this.addressObj.contact_details.postal_code
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* @param {?} type
|
|
113
|
+
* @param {?} isLinkedClied
|
|
114
|
+
* @return {?}
|
|
115
|
+
*/
|
|
116
|
+
ContactDetailsComponent.prototype.selectContactOption = /**
|
|
117
|
+
* @param {?} type
|
|
118
|
+
* @param {?} isLinkedClied
|
|
119
|
+
* @return {?}
|
|
120
|
+
*/
|
|
121
|
+
function (type, isLinkedClied) {
|
|
122
|
+
this.resetForm([false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], 'all');
|
|
123
|
+
if (type === 'Email' && isLinkedClied === 'false') {
|
|
124
|
+
this.isEmailSAddressClicked = true;
|
|
125
|
+
this.isPostcodeClicked = false;
|
|
126
|
+
this.isManualAddressClicked = false;
|
|
127
|
+
}
|
|
128
|
+
else if (type === 'Postcode' && isLinkedClied === 'false') {
|
|
129
|
+
this.isEmailSAddressClicked = false;
|
|
130
|
+
this.isPostcodeClicked = true;
|
|
131
|
+
this.isManualAddressClicked = false;
|
|
132
|
+
}
|
|
133
|
+
else if (type === 'Postcode' && isLinkedClied === 'true') {
|
|
134
|
+
this.isEmailSAddressClicked = false;
|
|
135
|
+
this.isPostcodeClicked = true;
|
|
136
|
+
this.isManualAddressClicked = true;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* @return {?}
|
|
141
|
+
*/
|
|
142
|
+
ContactDetailsComponent.prototype.finalFormSubmit = /**
|
|
143
|
+
* @return {?}
|
|
144
|
+
*/
|
|
145
|
+
function () {
|
|
146
|
+
this.resetForm([false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], 'all');
|
|
147
|
+
if (this.isEmailSAddressClicked) {
|
|
148
|
+
/** @type {?} */
|
|
149
|
+
var emailField = this.emailAddressForm.controls.email;
|
|
150
|
+
if (this.emailAddressForm.valid) {
|
|
151
|
+
this.assignContactDetails.emit({
|
|
152
|
+
email: emailField.value,
|
|
153
|
+
notification_type: 'EMAIL'
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
if (emailField.value == '') {
|
|
158
|
+
this.resetForm([true, false, false, false, false, false, false, false, false, false, false, false, false, false], 'email');
|
|
159
|
+
}
|
|
160
|
+
if (emailField.value != '' && emailField.invalid) {
|
|
161
|
+
this.resetForm([false, true, false, false, false, false, false, false, false, false, false, false, false, false], 'email');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else if (this.isPostcodeClicked && !this.isManualAddressClicked) {
|
|
166
|
+
this.postcodeValidation('FS');
|
|
167
|
+
}
|
|
168
|
+
else if (this.isPostcodeClicked && this.isManualAddressClicked) {
|
|
169
|
+
/** @type {?} */
|
|
170
|
+
var fieldCtrls = this.manualAddressForm.controls;
|
|
171
|
+
if (this.manualAddressForm.valid) {
|
|
172
|
+
this.assignContactDetails.emit({
|
|
173
|
+
address_line: fieldCtrls.addressl1.value + ' ' + fieldCtrls.addressl2.value,
|
|
174
|
+
city: fieldCtrls.townorcity.value,
|
|
175
|
+
county: fieldCtrls.county.value,
|
|
176
|
+
postal_code: fieldCtrls.mpostcode.value,
|
|
177
|
+
country: fieldCtrls.country.value,
|
|
178
|
+
notification_type: 'LETTER'
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
if (fieldCtrls.addressl1.value == '') {
|
|
183
|
+
this.resetForm([false, false, false, false, true, false, false, false, false, false, false, false, false, false], 'address1');
|
|
184
|
+
}
|
|
185
|
+
if (fieldCtrls.addressl1.value != '' && fieldCtrls.addressl1.invalid) {
|
|
186
|
+
this.resetForm([false, false, false, false, false, true, false, false, false, false, false, false, false, false], 'address1');
|
|
187
|
+
}
|
|
188
|
+
if (fieldCtrls.addressl2.value != '' && fieldCtrls.addressl2.invalid) {
|
|
189
|
+
this.resetForm([false, false, false, false, false, false, true, false, false, false, false, false, false, false], 'address2');
|
|
190
|
+
}
|
|
191
|
+
if (fieldCtrls.townorcity.value == '') {
|
|
192
|
+
this.resetForm([false, false, false, false, false, false, false, true, false, false, false, false, false, false], 'town');
|
|
193
|
+
}
|
|
194
|
+
if (fieldCtrls.townorcity.value != '' && fieldCtrls.townorcity.invalid) {
|
|
195
|
+
this.resetForm([false, false, false, false, false, false, false, false, true, false, false, false, false, false], 'town');
|
|
196
|
+
}
|
|
197
|
+
if (fieldCtrls.county.value == '') {
|
|
198
|
+
this.resetForm([false, false, false, false, false, false, false, false, false, true, false, false, false, false], 'county');
|
|
199
|
+
}
|
|
200
|
+
if (fieldCtrls.county.value != '' && fieldCtrls.county.invalid) {
|
|
201
|
+
this.resetForm([false, false, false, false, false, false, false, false, false, false, true, false, false, false], 'county');
|
|
202
|
+
}
|
|
203
|
+
if (fieldCtrls.mpostcode.value == '') {
|
|
204
|
+
this.resetForm([false, false, false, false, false, false, false, false, false, false, false, true, false, false], 'mpostcode');
|
|
205
|
+
}
|
|
206
|
+
if (fieldCtrls.mpostcode.value != '' && fieldCtrls.mpostcode.invalid) {
|
|
207
|
+
this.resetForm([false, false, false, false, false, false, false, false, false, false, false, false, true, false], 'mpostcode');
|
|
208
|
+
}
|
|
209
|
+
if (fieldCtrls.country.value == '') {
|
|
210
|
+
this.resetForm([false, false, false, false, false, false, false, false, false, false, false, false, false, true], 'country');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
/**
|
|
216
|
+
* @param {?} str
|
|
217
|
+
* @return {?}
|
|
218
|
+
*/
|
|
219
|
+
ContactDetailsComponent.prototype.postcodeValidation = /**
|
|
220
|
+
* @param {?} str
|
|
221
|
+
* @return {?}
|
|
222
|
+
*/
|
|
223
|
+
function (str) {
|
|
224
|
+
var _this = this;
|
|
225
|
+
/** @type {?} */
|
|
226
|
+
var postcodeField = this.postCodeForm.controls.postcode;
|
|
227
|
+
if (this.postCodeForm.valid) {
|
|
228
|
+
if (str === 'FA') {
|
|
229
|
+
this.notificationService.getAddressByPostcode(postcodeField.value).subscribe((/**
|
|
230
|
+
* @param {?} refundsNotification
|
|
231
|
+
* @return {?}
|
|
232
|
+
*/
|
|
233
|
+
function (refundsNotification) {
|
|
234
|
+
_this.addressPostcodeList = refundsNotification['data']['results'];
|
|
235
|
+
_this.isShowPickAddress = true;
|
|
236
|
+
})),
|
|
237
|
+
(/**
|
|
238
|
+
* @param {?} error
|
|
239
|
+
* @return {?}
|
|
240
|
+
*/
|
|
241
|
+
function (error) {
|
|
242
|
+
_this.isShowPickAddress = false;
|
|
243
|
+
_this.errorMessage = error.replace(/"/g, "");
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
else if (str === 'FS') {
|
|
247
|
+
if (this.postcodeAddress !== undefined && this.postcodeAddress) {
|
|
248
|
+
this.isAddressBoxEmpty = false;
|
|
249
|
+
/** @type {?} */
|
|
250
|
+
var addressLine = "";
|
|
251
|
+
/** @type {?} */
|
|
252
|
+
var addressArray = this.postcodeAddress.ADDRESS.split(",");
|
|
253
|
+
for (var i = 0; i < addressArray.length - 2; i++) {
|
|
254
|
+
addressLine += addressArray[i];
|
|
255
|
+
}
|
|
256
|
+
this.assignContactDetails.emit({
|
|
257
|
+
address_line: addressLine,
|
|
258
|
+
city: this.postcodeAddress.POST_TOWN,
|
|
259
|
+
county: this.postcodeAddress.LOCAL_CUSTODIAN_CODE_DESCRIPTION,
|
|
260
|
+
postal_code: this.postcodeAddress.POSTCODE,
|
|
261
|
+
country: 'United Kingdom',
|
|
262
|
+
notification_type: 'LETTER'
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
this.isAddressBoxEmpty = true;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
if (postcodeField.value == '') {
|
|
272
|
+
this.resetForm([false, false, true, false, false, false, false, false, false, false, false, false, false], 'postcode');
|
|
273
|
+
}
|
|
274
|
+
if (postcodeField.value != '' && postcodeField.invalid) {
|
|
275
|
+
this.resetForm([false, false, false, true, false, false, false, false, false, false, false, false, false], 'postcode');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
/**
|
|
280
|
+
* @param {?} event
|
|
281
|
+
* @return {?}
|
|
282
|
+
*/
|
|
283
|
+
ContactDetailsComponent.prototype.redirection = /**
|
|
284
|
+
* @param {?} event
|
|
285
|
+
* @return {?}
|
|
286
|
+
*/
|
|
287
|
+
function (event) {
|
|
288
|
+
this.redirectToIssueRefund.emit(event);
|
|
289
|
+
};
|
|
290
|
+
/**
|
|
291
|
+
* @param {?} val
|
|
292
|
+
* @param {?} field
|
|
293
|
+
* @return {?}
|
|
294
|
+
*/
|
|
295
|
+
ContactDetailsComponent.prototype.resetForm = /**
|
|
296
|
+
* @param {?} val
|
|
297
|
+
* @param {?} field
|
|
298
|
+
* @return {?}
|
|
299
|
+
*/
|
|
300
|
+
function (val, field) {
|
|
301
|
+
if (field === 'email' || field === 'all') {
|
|
302
|
+
this.isEmailEmpty = val[0];
|
|
303
|
+
this.emailHasError = val[1];
|
|
304
|
+
}
|
|
305
|
+
if (field === 'postcode' || field === 'all') {
|
|
306
|
+
this.isPostcodeEmpty = val[2];
|
|
307
|
+
this.postcodeHasError = val[3];
|
|
308
|
+
}
|
|
309
|
+
if (field === 'address1' || field === 'all') {
|
|
310
|
+
this.isaddressLine1Empty = val[4];
|
|
311
|
+
this.addressLine1HasError = val[5];
|
|
312
|
+
}
|
|
313
|
+
if (field === 'address2' || field === 'all') {
|
|
314
|
+
this.addressLine2HasError = val[6];
|
|
315
|
+
}
|
|
316
|
+
if (field === 'town' || field === 'all') {
|
|
317
|
+
this.isTownOrCityEmpty = val[7];
|
|
318
|
+
this.townOrCityHasError = val[8];
|
|
319
|
+
}
|
|
320
|
+
if (field === 'county' || field === 'all') {
|
|
321
|
+
this.isCountyEmpty = val[9];
|
|
322
|
+
this.countyHasError = val[10];
|
|
323
|
+
}
|
|
324
|
+
if (field === 'mpostcode' || field === 'all') {
|
|
325
|
+
this.isMPostcodeEmpty = val[11];
|
|
326
|
+
this.mpostcodeHasError = val[12];
|
|
327
|
+
}
|
|
328
|
+
if (field === 'country' || field === 'all') {
|
|
329
|
+
this.isCountryEmpty = val[13];
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
ContactDetailsComponent.decorators = [
|
|
333
|
+
{ type: Component, args: [{
|
|
334
|
+
selector: 'ccpay-contact-details',
|
|
335
|
+
template: "<fieldset class=\"govuk-fieldset contact-details--size\">\n <hr class=\"govuk-section-break govuk-section-break--m govuk-section-break--visible\">\n <div class=\"govuk-form-group\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--s govuk-font19px\">\n {{ isEditOperation ? 'Edit contact information' : 'Contact information' }}\n </legend>\n <div id=\"contact-hint\" class=\"govuk-hint govuk-font19px\">\n Notifications will be sent via email or post when this refund is issued or rejected. You can only choose one option.\n </div>\n <div class=\"govuk-form-group\">\n <fieldset class=\"govuk-fieldset\">\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"contact\" name=\"contact\" (click)=\"selectContactOption('Email', 'false')\" type=\"radio\" value=\"email\" [checked]=\"isEmailSAddressClicked\" aria-controls=\"conditional-contact\" aria-expanded=\"true\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"contact\">\n Email\n </label>\n </div>\n <div class=\"govuk-radios__conditional\" id=\"conditional-contact-email\" *ngIf=\"isEmailSAddressClicked\">\n <form [formGroup]=\"emailAddressForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label \" for=\"email\">\n <span class=\"govuk-hint govuk-font19px\">Information about this refund will be sent to this email address.</span>\n </label>\n\n <div id=\"email-hint\" class=\"govuk-hint\">\n </div>\n <input class=\"govuk-input govuk-font19px\" id=\"email\" name=\"\" type=\"email\" [ngClass]=\"{ 'inline-error-class': isEmailEmpty || emailHasError }\" value=\"{{addressObj?.contact_details?.email}}\" formControlName=\"email\" aria-describedby=\"email-hint\">\n <p class=\"inline-error-message\" *ngIf=\"isEmailEmpty || emailHasError\">\n <span *ngIf=\"isEmailEmpty\">Enter a email address.</span>\n <span *ngIf=\"emailHasError\">Enter a valid email address.</span>\n </p>\n </div>\n </form>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"contact-2\" name=\"contact\" (click)=\"selectContactOption('Postcode', 'false')\" type=\"radio\" [checked]=\"isPostcodeClicked\" value=\"post\" aria-controls=\"conditional-contact-2\" aria-expanded=\"false\">\n <label class=\"govuk-label govuk-radios__label govuk-font19px\" for=\"contact-2\">\n Post\n </label>\n </div>\n <div class=\"govuk-radios__conditional govuk-radios__conditional--hidden\" id=\"conditional-contact-postcode\" *ngIf=\"isPostcodeClicked && !isManualAddressClicked\">\n <form [formGroup]=\"postCodeForm\" novalidate>\n <label class=\"govuk-label govuk-font19px\" for=\"address-postcode\">\n <span class=\"govuk-hint govuk-font19px\">Information about this refund will be sent to this address.</span>Postcode\n </label>\n <div class=\"postcode-align-css\">\n <div class=\"govuk-form-group govuk-margin-right-10px\">\n <input class=\"govuk-input govuk-input--width-10\" id=\"address-postcode\" name=\"address-postcode\" [ngClass]=\"{ 'inline-error-class': isPostcodeEmpty || postcodeHasError }\" formControlName=\"postcode\" type=\"text\" autocomplete=\"postal-code\">\n <p class=\"inline-error-message\" *ngIf=\"isPostcodeEmpty || postcodeHasError\">\n <span *ngIf=\"isPostcodeEmpty\">Enter a postcode.</span>\n <span *ngIf=\"postcodeHasError\">Enter a valid postcode.</span>\n </p>\n </div>\n <div class=\"govuk-button-group\">\n <button class=\"govuk-button govuk-button--secondary govuk-font19px\" (click)=\"postcodeValidation('FA')\" data-module=\"govuk-button\">\n Find address\n </button>\n </div>\n </div>\n </form>\n <div class=\"govuk-form-group govuk-margin-btm-20px\" *ngIf=\"isShowPickAddress\">\n <label class=\"govuk-label govuk-font19px\" for=\"country\">\n Pick an address\n </label>\n <select class=\"govuk-select govuk-font19px\" [(ngModel)]=\"postcodeAddress\" id=\"postcodeAddress\" [ngClass]=\"{ 'inline-error-class': isAddressBoxEmpty }\" name=\"postcodeAddress\">\n <option *ngFor=\"let address of addressPostcodeList;\" [ngValue]=\"address.DPA\" > {{address.DPA.ADDRESS}}</option>\n </select> \n <p class=\"inline-error-message\" *ngIf=\"isAddressBoxEmpty\">\n <span *ngIf=\"isAddressBoxEmpty\">Please select an address.</span>\n </p>\n </div>\n <details class=\"govuk-details\" data-module=\"govuk-details\">\n <summary class=\"govuk-details__summary\">\n <span class=\"govuk-details__summary-text govuk-font19px\">\n <a href=\"Javascript:void(0);\" (click)=\"selectContactOption('Postcode', 'true')\"> Enter address manually</a>\n </span>\n </summary>\n </details>\n </div>\n <div class=\"govuk-radios__conditional\" id=\"conditional-contact-manual\" *ngIf=\"isPostcodeClicked && isManualAddressClicked\">\n <form [formGroup]=\"manualAddressForm\" novalidate>\n\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-font19px\" for=\"address-line-1\">\n <span class=\"govuk-hint govuk-font19px\">Information about this refund will be sent to this address.</span>Building and street <span class=\"govuk-visually-hidden\">line 1 of 2</span>\n </label>\n <input class=\"govuk-input govuk-font19px\" id=\"address-line-1\" name=\"address-line-1\" [ngClass]=\"{ 'inline-error-class': isaddressLine1Empty || addressLine1HasError }\" value=\"{{addressObj?.contact_details?.address_line}}\" formControlName=\"addressl1\" type=\"text\" autocomplete=\"address-line1\">\n <p class=\"inline-error-message\" *ngIf=\"isaddressLine1Empty || addressLine1HasError\">\n <span *ngIf=\"isaddressLine1Empty\">Enter a Building and street.</span>\n <span *ngIf=\"addressLine1HasError\">Enter a valid Building and street.</span>\n </p> \n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label\" for=\"address-line-2\">\n <span class=\"govuk-visually-hidden govuk-font19px\">Building and street line 2 of 2</span>\n </label>\n <input class=\"govuk-input govuk-font19px\" id=\"address-line-2\" name=\"address-line-2\" [ngClass]=\"{ 'inline-error-class': addressLine2HasError}\" formControlName=\"addressl2\" type=\"text\" autocomplete=\"address-line2\">\n <p class=\"inline-error-message\" *ngIf=\"addressLine2HasError\">\n <span *ngIf=\"addressLine2HasError\">Enter a valid Building and street line 2 of 2.</span>\n </p> \n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-font19px\" for=\"address-town\">\n Town or city\n </label>\n <input class=\"govuk-input govuk-!-width-two-thirds govuk-font19px\" id=\"address-town\" name=\"address-town\" [ngClass]=\"{ 'inline-error-class': isTownOrCityEmpty || townOrCityHasError}\" value=\"{{addressObj?.contact_details?.city}}\" formControlName=\"townorcity\" type=\"text\" autocomplete=\"address-level2\">\n <p class=\"inline-error-message\" *ngIf=\"isTownOrCityEmpty || townOrCityHasError\">\n <span *ngIf=\"isTownOrCityEmpty\">Enter a town or city.</span>\n <span *ngIf=\"townOrCityHasError\">Enter a town or city.</span>\n </p> \n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-font19px\" for=\"address-county\">\n County\n </label>\n <input class=\"govuk-input govuk-!-width-two-thirds govuk-font19px\" id=\"address-county\" [ngClass]=\"{ 'inline-error-class': isCountyEmpty || countyHasError}\" value=\"{{addressObj?.contact_details?.county}}\" formControlName=\"county\" name=\"address-county\" type=\"text\">\n <p class=\"inline-error-message\" *ngIf=\"isCountyEmpty || countyHasError\">\n <span *ngIf=\"isCountyEmpty\">Enter a County.</span>\n <span *ngIf=\"countyHasError\">Enter a valid County.</span>\n </p> \n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-font19px\" for=\"address-postcode\">\n Postcode\n </label>\n <input class=\"govuk-input govuk-input--width-10 govuk-font19px\" id=\"address-postcode\" formControlName=\"mpostcode\" name=\"address-postcode\" [ngClass]=\"{ 'inline-error-class': isMPostcodeEmpty || mpostcodeHasError}\" value=\"{{addressObj?.contact_details?.postal_code}}\" type=\"text\" autocomplete=\"postal-code\">\n <p class=\"inline-error-message\" *ngIf=\"isMPostcodeEmpty || mpostcodeHasError\">\n <span *ngIf=\"isMPostcodeEmpty\">Enter a postcode.</span>\n <span *ngIf=\"mpostcodeHasError\">Enter a valid postcode.</span>\n </p> \n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-font19px\" for=\"country\">\n Country\n </label>\n <select class=\"govuk-select govuk-font19px\" id=\"country\" name=\"country\" [ngClass]=\"{'inline-error-class': isCountryEmpty}\" formControlName=\"country\">\n <option value=\"\" selected=\"selected\">Please select</option>\n <option value=\"United Kingdom\" selected=\"{{ addressObj?.contact_details?.country ? 'selected' : '' }}\">United Kingdom</option>\n </select>\n <p class=\"inline-error-message\" *ngIf=\"isCountryEmpty\">\n <span *ngIf=\"isCountryEmpty\">Select a Country.</span>\n </p> \n </div>\n </form>\n </div>\n </div>\n </fieldset>\n </div>\n <!---FORM--->\n </div>\n\n<hr class=\"govuk-section-break govuk-section-break--m govuk-section-break--visible\">\n</fieldset>\n<div class=\"govuk-button-group\">\n<button type=\"submit\" class=\"button govuk-button--secondary govuk-font19px\" (click)=\"redirection($event)\"> Previous </button>\n \n<button type=\"submit\" class=\"button govuk-button govuk-font19px\" (click)=\"finalFormSubmit()\">\n Continue\n</button>\n</div>",
|
|
336
|
+
styles: [".govuk-font19px{font-size:19px}.inline-error-class{outline:#a71414 solid 3px;outline-offset:0}.inline-error-message{color:#a71414;font-weight:700;margin-top:10px}.contact-details--size{width:50%}.postcode-align-css{display:flex;flex-direction:row}.govuk-margin-right-10px{margin-right:10px}.govuk-margin-btm-20px{margin-bottom:20px!important}"]
|
|
337
|
+
}] }
|
|
338
|
+
];
|
|
339
|
+
/** @nocollapse */
|
|
340
|
+
ContactDetailsComponent.ctorParameters = function () { return [
|
|
341
|
+
{ type: FormBuilder },
|
|
342
|
+
{ type: NotificationService },
|
|
343
|
+
{ type: PaymentLibComponent }
|
|
344
|
+
]; };
|
|
345
|
+
ContactDetailsComponent.propDecorators = {
|
|
346
|
+
isEditOperation: [{ type: Input, args: ['isEditOperation',] }],
|
|
347
|
+
addressObj: [{ type: Input, args: ['addressObj',] }],
|
|
348
|
+
assignContactDetails: [{ type: Output }],
|
|
349
|
+
redirectToIssueRefund: [{ type: Output }]
|
|
350
|
+
};
|
|
351
|
+
return ContactDetailsComponent;
|
|
352
|
+
}());
|
|
353
|
+
export { ContactDetailsComponent };
|
|
354
|
+
if (false) {
|
|
355
|
+
/** @type {?} */
|
|
356
|
+
ContactDetailsComponent.prototype.isEditOperation;
|
|
357
|
+
/** @type {?} */
|
|
358
|
+
ContactDetailsComponent.prototype.addressObj;
|
|
359
|
+
/** @type {?} */
|
|
360
|
+
ContactDetailsComponent.prototype.assignContactDetails;
|
|
361
|
+
/** @type {?} */
|
|
362
|
+
ContactDetailsComponent.prototype.redirectToIssueRefund;
|
|
363
|
+
/** @type {?} */
|
|
364
|
+
ContactDetailsComponent.prototype.pageTitle;
|
|
365
|
+
/** @type {?} */
|
|
366
|
+
ContactDetailsComponent.prototype.errorMessage;
|
|
367
|
+
/** @type {?} */
|
|
368
|
+
ContactDetailsComponent.prototype.isEmailSAddressClicked;
|
|
369
|
+
/** @type {?} */
|
|
370
|
+
ContactDetailsComponent.prototype.isShowPickAddress;
|
|
371
|
+
/** @type {?} */
|
|
372
|
+
ContactDetailsComponent.prototype.isPostcodeClicked;
|
|
373
|
+
/** @type {?} */
|
|
374
|
+
ContactDetailsComponent.prototype.isManualAddressClicked;
|
|
375
|
+
/** @type {?} */
|
|
376
|
+
ContactDetailsComponent.prototype.emailAddressForm;
|
|
377
|
+
/** @type {?} */
|
|
378
|
+
ContactDetailsComponent.prototype.postCodeForm;
|
|
379
|
+
/** @type {?} */
|
|
380
|
+
ContactDetailsComponent.prototype.manualAddressForm;
|
|
381
|
+
/** @type {?} */
|
|
382
|
+
ContactDetailsComponent.prototype.addressPostcodeList;
|
|
383
|
+
/** @type {?} */
|
|
384
|
+
ContactDetailsComponent.prototype.postcodeAddress;
|
|
385
|
+
/** @type {?} */
|
|
386
|
+
ContactDetailsComponent.prototype.isAddressBoxEmpty;
|
|
387
|
+
/** @type {?} */
|
|
388
|
+
ContactDetailsComponent.prototype.isEmailEmpty;
|
|
389
|
+
/** @type {?} */
|
|
390
|
+
ContactDetailsComponent.prototype.emailHasError;
|
|
391
|
+
/** @type {?} */
|
|
392
|
+
ContactDetailsComponent.prototype.isPostcodeEmpty;
|
|
393
|
+
/** @type {?} */
|
|
394
|
+
ContactDetailsComponent.prototype.postcodeHasError;
|
|
395
|
+
/** @type {?} */
|
|
396
|
+
ContactDetailsComponent.prototype.isaddressLine1Empty;
|
|
397
|
+
/** @type {?} */
|
|
398
|
+
ContactDetailsComponent.prototype.addressLine1HasError;
|
|
399
|
+
/** @type {?} */
|
|
400
|
+
ContactDetailsComponent.prototype.addressLine2HasError;
|
|
401
|
+
/** @type {?} */
|
|
402
|
+
ContactDetailsComponent.prototype.isTownOrCityEmpty;
|
|
403
|
+
/** @type {?} */
|
|
404
|
+
ContactDetailsComponent.prototype.townOrCityHasError;
|
|
405
|
+
/** @type {?} */
|
|
406
|
+
ContactDetailsComponent.prototype.isCountyEmpty;
|
|
407
|
+
/** @type {?} */
|
|
408
|
+
ContactDetailsComponent.prototype.countyHasError;
|
|
409
|
+
/** @type {?} */
|
|
410
|
+
ContactDetailsComponent.prototype.isMPostcodeEmpty;
|
|
411
|
+
/** @type {?} */
|
|
412
|
+
ContactDetailsComponent.prototype.mpostcodeHasError;
|
|
413
|
+
/** @type {?} */
|
|
414
|
+
ContactDetailsComponent.prototype.isCountryEmpty;
|
|
415
|
+
/**
|
|
416
|
+
* @type {?}
|
|
417
|
+
* @private
|
|
418
|
+
*/
|
|
419
|
+
ContactDetailsComponent.prototype.formBuilder;
|
|
420
|
+
/**
|
|
421
|
+
* @type {?}
|
|
422
|
+
* @private
|
|
423
|
+
*/
|
|
424
|
+
ContactDetailsComponent.prototype.notificationService;
|
|
425
|
+
/**
|
|
426
|
+
* @type {?}
|
|
427
|
+
* @private
|
|
428
|
+
*/
|
|
429
|
+
ContactDetailsComponent.prototype.paymentLibComponent;
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvY29udGFjdC1kZXRhaWxzL2NvbnRhY3QtZGV0YWlscy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFdkY7SUFzQ0UsaUNBQW9CLFdBQXdCLEVBQ3hCLG1CQUF3QyxFQUN4QyxtQkFBd0M7UUFGeEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBaENsRCx5QkFBb0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RCwwQkFBcUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN4RSxjQUFTLEdBQVcsd0JBQXdCLENBQUM7UUFFN0MsMkJBQXNCLEdBQVksSUFBSSxDQUFDO1FBQ3ZDLHNCQUFpQixHQUFhLEtBQUssQ0FBQztRQUNwQyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBSXhDLHdCQUFtQixHQUFTLEVBQUUsQ0FBQztRQUUvQixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFbkMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Is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SyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxJQUFJLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2lCQUNsSDtnQkFDRCxJQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRztvQkFDcEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztpQkFDbEg7Z0JBQ0QsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUc7b0JBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsSUFBSSxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQzlHO2dCQUNELElBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFHO29CQUN0RSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEtBQUssRUFBQyxJQUFJLEVBQUMsS0FB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QXVCO29CQUNqQywrNFZBQStDOztpQkFFaEQ7Ozs7Z0JBUlEsV0FBVztnQkFFWCxtQkFBbUI7Z0JBRG5CLG1CQUFtQjs7O2tDQVN6QixLQUFLLFNBQUMsaUJBQWlCOzZCQUN2QixLQUFLLFNBQUMsWUFBWTt1Q0FDbEIsTUFBTTt3Q0FDTixNQUFNOztJQW9RVCw4QkFBQztDQUFBLEFBN1FELElBNlFDO1NBeFFZLHVCQUF1Qjs7O0lBQ2xDLGtEQUFtRDs7SUFDbkQsNkNBQXFDOztJQUNyQyx1REFBdUU7O0lBQ3ZFLHdEQUF3RTs7SUFDeEUsNENBQTZDOztJQUM3QywrQ0FBcUI7O0lBQ3JCLHlEQUF1Qzs7SUFDdkMsb0RBQW9DOztJQUNwQyxvREFBbUM7O0lBQ25DLHlEQUF3Qzs7SUFDeEMsbURBQTRCOztJQUM1QiwrQ0FBd0I7O0lBQ3hCLG9EQUE2Qjs7SUFDN0Isc0RBQStCOztJQUMvQixrREFBb0I7O0lBQ3BCLG9EQUFtQzs7SUFFbkMsK0NBQThCOztJQUM5QixnREFBK0I7O0lBQy9CLGtEQUFpQzs7SUFDakMsbURBQWtDOztJQUNsQyxzREFBcUM7O0lBQ3JDLHVEQUFzQzs7SUFDdEMsdURBQXNDOztJQUN0QyxvREFBbUM7O0lBQ25DLHFEQUFvQzs7SUFDcEMsZ0RBQStCOztJQUMvQixpREFBZ0M7O0lBQ2hDLG1EQUFrQzs7SUFDbEMsb0RBQW1DOztJQUNuQyxpREFBZ0M7Ozs7O0lBRXBCLDhDQUFnQzs7Ozs7SUFDaEMsc0RBQWdEOzs7OztJQUNoRCxzREFBZ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWNvbnRhY3QtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250YWN0LWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb250YWN0LWRldGFpbHMuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIENvbnRhY3REZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdpc0VkaXRPcGVyYXRpb24nKSBpc0VkaXRPcGVyYXRpb246IGJvb2xlYW47XG4gIEBJbnB1dCgnYWRkcmVzc09iaicpIGFkZHJlc3NPYmo6IGFueTtcbiAgQE91dHB1dCgpIGFzc2lnbkNvbnRhY3REZXRhaWxzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlZGlyZWN0VG9Jc3N1ZVJlZnVuZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHBhZ2VUaXRsZTogc3RyaW5nID0gJ1BheW1lbnQgc3RhdHVzIGhpc3RvcnknO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgaXNFbWFpbFNBZGRyZXNzQ2xpY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIGlzU2hvd1BpY2tBZGRyZXNzOiAgYm9vbGVhbiA9IGZhbHNlO1xuICBpc1Bvc3Rjb2RlQ2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc01hbnVhbEFkZHJlc3NDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGVtYWlsQWRkcmVzc0Zvcm06IEZvcm1Hcm91cDtcbiAgcG9zdENvZGVGb3JtOiBGb3JtR3JvdXA7XG4gIG1hbnVhbEFkZHJlc3NGb3JtOiBGb3JtR3JvdXA7XG4gIGFkZHJlc3NQb3N0Y29kZUxpc3Q6YW55W10gPSBbXTtcbiAgcG9zdGNvZGVBZGRyZXNzOmFueTtcbiAgaXNBZGRyZXNzQm94RW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBpc0VtYWlsRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZW1haWxIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1Bvc3Rjb2RlRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcG9zdGNvZGVIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc2FkZHJlc3NMaW5lMUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGFkZHJlc3NMaW5lMUhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGFkZHJlc3NMaW5lMkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzVG93bk9yQ2l0eUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIHRvd25PckNpdHlIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvdW50eUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGNvdW50eUhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzTVBvc3Rjb2RlRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbXBvc3Rjb2RlSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDb3VudHJ5RW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdhbGwnKTtcblxuICAgIHRoaXMuZW1haWxBZGRyZXNzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZW1haWw6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeW2EtejAtOS5fJSstXStAW2EtejAtOS1dK1xcXFwuW2Etel17Miw0fSQnKVxuICAgICAgXSkpXG4gICAgfSk7XG4gICAgdGhpcy5wb3N0Q29kZUZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHBvc3Rjb2RlOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbQS1aXXsxLDJ9WzAtOV17MSwyfVtBLVpdezAsMX0gP1swLTldW0EtWl17Mn0pJylcbiAgICAgIF0pKVxuICAgIH0pO1xuICAgIHRoaXMubWFudWFsQWRkcmVzc0Zvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGFkZHJlc3NsMTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bYS16QS1aMC05XFxcXHMsXFwnLV0qJCcpXG4gICAgICBdKSksXG4gICAgICBhZGRyZXNzbDI6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeW2EtekEtWjAtOVxcXFxzLFxcJy1dKiQnKVxuICAgICAgXSkpLFxuICAgICAgdG93bm9yY2l0eTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bYS16QS1aMC05XFxcXHMsXFwnLV0qJCcpXG4gICAgICBdKSksXG4gICAgICBjb3VudHk6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeW2EtekEtWjAtOVxcXFxzLFxcJy1dKiQnKVxuICAgICAgXSkpLFxuICAgICAgbXBvc3Rjb2RlOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXihbQS1aXXsxLDJ9WzAtOV17MSwyfVtBLVpdezAsMX0gP1swLTldW0EtWl17Mn0pJylcbiAgICAgIF0pKSxcbiAgICAgIGNvdW50cnk6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxuICAgICAgXSkpXG4gICAgfSk7XG4gICAgaWYodGhpcy5hZGRyZXNzT2JqICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hZGRyZXNzT2JqICE9PSAnJykge1xuICAgICAgdGhpcy5zZXRFZGl0RGV0YWlscygpO1xuICAgIH1cbiAgfVxuICBzZXRFZGl0RGV0YWlscygpIHtcbiAgICBpZih0aGlzLmFkZHJlc3NPYmoubm90aWZpY2F0aW9uX3R5cGUgPT09ICdFTUFJTCcpIHtcbiAgICAgIHRoaXMuaXNFbWFpbFNBZGRyZXNzQ2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLmlzUG9zdGNvZGVDbGlja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTWFudWFsQWRkcmVzc0NsaWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZW1haWxBZGRyZXNzRm9ybS5zZXRWYWx1ZSh7IGVtYWlsOiB0aGlzLmFkZHJlc3NPYmouY29udGFjdF9kZXRhaWxzLmVtYWlsIH0pO1xuICAgIH0gZWxzZSBpZih0aGlzLmFkZHJlc3NPYmoubm90aWZpY2F0aW9uX3R5cGUgPT09ICdMRVRURVInKSB7XG4gICAgICB0aGlzLmlzRW1haWxTQWRkcmVzc0NsaWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNQb3N0Y29kZUNsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pc01hbnVhbEFkZHJlc3NDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMubWFudWFsQWRkcmVzc0Zvcm0ucGF0Y2hWYWx1ZSh7IFxuICAgICAgICBhZGRyZXNzbDE6IHRoaXMuYWRkcmVzc09iai5jb250YWN0X2RldGFpbHMuYWRkcmVzc19saW5lLFxuICAgICAgICB0b3dub3JjaXR5OiB0aGlzLmFkZHJlc3NPYmouY29udGFjdF9kZXRhaWxzLmNpdHksXG4gICAgICAgIGNvdW50eTogdGhpcy5hZGRyZXNzT2JqLmNvbnRhY3RfZGV0YWlscy5jb3VudHksXG4gICAgICAgIGNvdW50cnk6IHRoaXMuYWRkcmVzc09iai5jb250YWN0X2RldGFpbHMuY291bnRyeSxcbiAgICAgICAgbXBvc3Rjb2RlOiB0aGlzLmFkZHJlc3NPYmouY29udGFjdF9kZXRhaWxzLnBvc3RhbF9jb2RlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RDb250YWN0T3B0aW9uKHR5cGUsIGlzTGlua2VkQ2xpZWQpIHtcbiAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAnYWxsJyk7XG4gICAgaWYoIHR5cGUgPT09ICdFbWFpbCcgJiYgaXNMaW5rZWRDbGllZCA9PT0gJ2ZhbHNlJyl7XG4gICAgICB0aGlzLmlzRW1haWxTQWRkcmVzc0NsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pc1Bvc3Rjb2RlQ2xpY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc01hbnVhbEFkZHJlc3NDbGlja2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmKHR5cGUgPT09ICdQb3N0Y29kZScgJiYgaXNMaW5rZWRDbGllZCA9PT0gJ2ZhbHNlJykge1xuICAgICAgdGhpcy5pc0VtYWlsU0FkZHJlc3NDbGlja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzUG9zdGNvZGVDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNNYW51YWxBZGRyZXNzQ2xpY2tlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZih0eXBlID09PSAnUG9zdGNvZGUnICYmIGlzTGlua2VkQ2xpZWQgPT09ICd0cnVlJykge1xuICAgICAgdGhpcy5pc0VtYWlsU0FkZHJlc3NDbGlja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzUG9zdGNvZGVDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNNYW51YWxBZGRyZXNzQ2xpY2tlZCA9IHRydWU7XG5cbiAgICB9XG4gIH1cblxuICBmaW5hbEZvcm1TdWJtaXQoKSB7XG4gICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlXSwgJ2FsbCcpO1xuICAgIGlmKCB0aGlzLmlzRW1haWxTQWRkcmVzc0NsaWNrZWQgKXtcbiAgICAgIGNvbnN0IGVtYWlsRmllbGQgPSB0aGlzLmVtYWlsQWRkcmVzc0Zvcm0uY29udHJvbHMuZW1haWw7XG4gICAgICBpZiAodGhpcy5lbWFpbEFkZHJlc3NGb3JtLnZhbGlkKSB7XG4gICAgICAgIHRoaXMuYXNzaWduQ29udGFjdERldGFpbHMuZW1pdCgge1xuICAgICAgICAgIGVtYWlsOiBlbWFpbEZpZWxkLnZhbHVlLFxuICAgICAgICAgIG5vdGlmaWNhdGlvbl90eXBlOiAnRU1BSUwnXG4gICAgICAgIH0gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKCBlbWFpbEZpZWxkLnZhbHVlID09ICcnICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFt0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlXSwgJ2VtYWlsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZW1haWxGaWVsZC52YWx1ZSAhPSAnJyAmJiBlbWFpbEZpZWxkLmludmFsaWQgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAnZW1haWwnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiggdGhpcy5pc1Bvc3Rjb2RlQ2xpY2tlZCAmJiAhdGhpcy5pc01hbnVhbEFkZHJlc3NDbGlja2VkICkge1xuICAgICAgdGhpcy5wb3N0Y29kZVZhbGlkYXRpb24oJ0ZTJyk7XG4gICAgfSBlbHNlIGlmKHRoaXMuaXNQb3N0Y29kZUNsaWNrZWQgJiYgdGhpcy5pc01hbnVhbEFkZHJlc3NDbGlja2VkKSB7XG4gICAgICBjb25zdCBmaWVsZEN0cmxzID0gdGhpcy5tYW51YWxBZGRyZXNzRm9ybS5jb250cm9scztcbiAgICAgIGlmICh0aGlzLm1hbnVhbEFkZHJlc3NGb3JtLnZhbGlkKSB7XG4gICAgICAgIHRoaXMuYXNzaWduQ29udGFjdERldGFpbHMuZW1pdCh7XG4gICAgICAgICAgYWRkcmVzc19saW5lOiBmaWVsZEN0cmxzLmFkZHJlc3NsMS52YWx1ZSsnICcrZmllbGRDdHJscy5hZGRyZXNzbDIudmFsdWUsXG4gICAgICAgICAgY2l0eTogZmllbGRDdHJscy50b3dub3JjaXR5LnZhbHVlLFxuICAgICAgICAgIGNvdW50eTogZmllbGRDdHJscy5jb3VudHkudmFsdWUsXG4gICAgICAgICAgcG9zdGFsX2NvZGU6IGZpZWxkQ3RybHMubXBvc3Rjb2RlLnZhbHVlLFxuICAgICAgICAgIGNvdW50cnk6IGZpZWxkQ3RybHMuY291bnRyeS52YWx1ZSxcbiAgICAgICAgICBub3RpZmljYXRpb25fdHlwZTogJ0xFVFRFUidcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiggZmllbGRDdHJscy5hZGRyZXNzbDEudmFsdWUgPT0gJycgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAnYWRkcmVzczEnKTtcbiAgICAgICAgfVxuICAgICAgICBpZihmaWVsZEN0cmxzLmFkZHJlc3NsMS52YWx1ZSAhPSAnJyAmJiBmaWVsZEN0cmxzLmFkZHJlc3NsMS5pbnZhbGlkICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlXSwgJ2FkZHJlc3MxJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZmllbGRDdHJscy5hZGRyZXNzbDIudmFsdWUgIT0gJycgJiYgZmllbGRDdHJscy5hZGRyZXNzbDIuaW52YWxpZCApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdhZGRyZXNzMicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKCBmaWVsZEN0cmxzLnRvd25vcmNpdHkudmFsdWUgPT0gJycgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAndG93bicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKGZpZWxkQ3RybHMudG93bm9yY2l0eS52YWx1ZSAhPSAnJyAmJiBmaWVsZEN0cmxzLnRvd25vcmNpdHkuaW52YWxpZCApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICd0b3duJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIGZpZWxkQ3RybHMuY291bnR5LnZhbHVlID09ICcnICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlXSwgJ2NvdW50eScpO1xuICAgICAgICB9XG4gICAgICAgIGlmKGZpZWxkQ3RybHMuY291bnR5LnZhbHVlICE9ICcnICYmIGZpZWxkQ3RybHMuY291bnR5LmludmFsaWQgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2VdLCAnY291bnR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIGZpZWxkQ3RybHMubXBvc3Rjb2RlLnZhbHVlID09ICcnICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlXSwgJ21wb3N0Y29kZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmKGZpZWxkQ3RybHMubXBvc3Rjb2RlLnZhbHVlICE9ICcnICYmIGZpZWxkQ3RybHMubXBvc3Rjb2RlLmludmFsaWQgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2VdLCAnbXBvc3Rjb2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIGZpZWxkQ3RybHMuY291bnRyeS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZV0sICdjb3VudHJ5Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cblxuICB9XG5cbiAgcG9zdGNvZGVWYWxpZGF0aW9uKHN0cikge1xuICAgIGNvbnN0IHBvc3Rjb2RlRmllbGQgPSB0aGlzLnBvc3RDb2RlRm9ybS5jb250cm9scy5wb3N0Y29kZTtcbiAgICBpZiAodGhpcy5wb3N0Q29kZUZvcm0udmFsaWQpIHtcbiAgICAgIGlmKHN0ciA9PT0gJ0ZBJykge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0QWRkcmVzc0J5UG9zdGNvZGUocG9zdGNvZGVGaWVsZC52YWx1ZSkuc3Vic2NyaWJlKFxuICAgICAgICAgIHJlZnVuZHNOb3RpZmljYXRpb24gPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRyZXNzUG9zdGNvZGVMaXN0ID0gcmVmdW5kc05vdGlmaWNhdGlvblsnZGF0YSddWydyZXN1bHRzJ107XG4gICAgICAgICAgICB0aGlzLmlzU2hvd1BpY2tBZGRyZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1Nob3dQaWNrQWRkcmVzcyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKTtcbiAgICAgICAgfTsgXG4gICAgICB9IGVsc2UgaWYgKHN0ciA9PT0gJ0ZTJykge1xuICAgICAgICBpZih0aGlzLnBvc3Rjb2RlQWRkcmVzcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMucG9zdGNvZGVBZGRyZXNzKSB7XG4gICAgICAgICAgdGhpcy5pc0FkZHJlc3NCb3hFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgIGxldCBhZGRyZXNzTGluZT1cIlwiO1xuICAgICAgICAgIGxldCBhZGRyZXNzQXJyYXkgPSB0aGlzLnBvc3Rjb2RlQWRkcmVzcy5BRERSRVNTLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICBmb3IoIGxldCBpPTA7IGk8YWRkcmVzc0FycmF5Lmxlbmd0aC0yOyBpKysgKSB7XG4gICAgICAgICAgICBhZGRyZXNzTGluZSArPWFkZHJlc3NBcnJheVtpXTsgXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5hc3NpZ25Db250YWN0RGV0YWlscy5lbWl0KHtcbiAgICAgICAgICAgIGFkZHJlc3NfbGluZTogYWRkcmVzc0xpbmUsXG4gICAgICAgICAgICBjaXR5OiB0aGlzLnBvc3Rjb2RlQWRkcmVzcy5QT1NUX1RPV04sXG4gICAgICAgICAgICBjb3VudHk6IHRoaXMucG9zdGNvZGVBZGRyZXNzLkxPQ0FMX0NVU1RPRElBTl9DT0RFX0RFU0NSSVBUSU9OLFxuICAgICAgICAgICAgcG9zdGFsX2NvZGU6IHRoaXMucG9zdGNvZGVBZGRyZXNzLlBPU1RDT0RFLFxuICAgICAgICAgICAgY291bnRyeTogJ1VuaXRlZCBLaW5nZG9tJyxcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbl90eXBlOiAnTEVUVEVSJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNBZGRyZXNzQm94RW1wdHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKCBwb3N0Y29kZUZpZWxkLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdwb3N0Y29kZScpO1xuICAgICAgfVxuICAgICAgaWYocG9zdGNvZGVGaWVsZC52YWx1ZSAhPSAnJyAmJiBwb3N0Y29kZUZpZWxkLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlXSwgJ3Bvc3Rjb2RlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlZGlyZWN0aW9uKGV2ZW50OmFueSkge1xuICAgIHRoaXMucmVkaXJlY3RUb0lzc3VlUmVmdW5kLmVtaXQoZXZlbnQpO1xuICB9XG4gIHJlc2V0Rm9ybSh2YWwsIGZpZWxkKSB7XG4gICAgaWYoZmllbGQ9PT0nZW1haWwnIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNFbWFpbEVtcHR5ID0gdmFsWzBdO1xuICAgICAgdGhpcy5lbWFpbEhhc0Vycm9yID0gdmFsWzFdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSdwb3N0Y29kZScgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5pc1Bvc3Rjb2RlRW1wdHkgPSB2YWxbMl07XG4gICAgICB0aGlzLnBvc3Rjb2RlSGFzRXJyb3IgPSB2YWxbM107XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J2FkZHJlc3MxJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzYWRkcmVzc0xpbmUxRW1wdHkgPSB2YWxbNF07XG4gICAgICB0aGlzLmFkZHJlc3NMaW5lMUhhc0Vycm9yID0gdmFsWzVdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSdhZGRyZXNzMicgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5hZGRyZXNzTGluZTJIYXNFcnJvciA9IHZhbFs2XTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0ndG93bicgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5pc1Rvd25PckNpdHlFbXB0eSA9IHZhbFs3XTtcbiAgICAgIHRoaXMudG93bk9yQ2l0eUhhc0Vycm9yID0gdmFsWzhdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSdjb3VudHknIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNDb3VudHlFbXB0eSA9IHZhbFs5XTtcbiAgICAgIHRoaXMuY291bnR5SGFzRXJyb3IgPSB2YWxbMTBdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSdtcG9zdGNvZGUnIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNNUG9zdGNvZGVFbXB0eSA9IHZhbFsxMV07XG4gICAgICB0aGlzLm1wb3N0Y29kZUhhc0Vycm9yID0gdmFsWzEyXTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0nY291bnRyeScgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5pc0NvdW50cnlFbXB0eSA9IHZhbFsxM107XG4gICAgfVxuICBcbiAgfVxufVxuIl19
|