@hmcts/ccpay-web-component 5.0.1-beta138 → 5.0.1-beta139

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.
Files changed (80) hide show
  1. package/bundles/hmcts-ccpay-web-component.umd.js +1538 -120
  2. package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
  3. package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -1
  4. package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
  5. package/esm2015/hmcts-ccpay-web-component.js +34 -31
  6. package/esm2015/lib/components/add-remission/add-remission.component.js +517 -44
  7. package/esm2015/lib/components/case-transactions/case-transactions.component.js +32 -4
  8. package/esm2015/lib/components/contact-details/contact-details.component.js +399 -0
  9. package/esm2015/lib/components/payment-view/payment-view.component.js +5 -2
  10. package/esm2015/lib/components/pba-payment/pba-payment.component.js +205 -0
  11. package/esm2015/lib/components/process-refund/process-refund.component.js +31 -3
  12. package/esm2015/lib/components/refund-status/refund-status.component.js +149 -27
  13. package/esm2015/lib/components/service-request/service-request.component.js +28 -9
  14. package/esm2015/lib/interfaces/IPutNotificationRequest.js +25 -0
  15. package/esm2015/lib/interfaces/IRefundContactDetails.js +25 -0
  16. package/esm2015/lib/interfaces/IRefundList.js +3 -1
  17. package/esm2015/lib/interfaces/IRefundsNotifications.js +21 -0
  18. package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +23 -0
  19. package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +28 -0
  20. package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +6 -2
  21. package/esm2015/lib/interfaces/PostRefundRetroRemission.js +18 -2
  22. package/esm2015/lib/payment-lib.component.js +10 -4
  23. package/esm2015/lib/payment-lib.module.js +5 -3
  24. package/esm2015/lib/payment-lib.service.js +16 -1
  25. package/esm2015/lib/services/notification/notification.service.js +85 -0
  26. package/esm2015/lib/services/payment-view/payment-view.service.js +29 -1
  27. package/esm2015/lib/services/refunds/refunds.service.js +10 -1
  28. package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +1 -1
  29. package/esm5/hmcts-ccpay-web-component.js +34 -31
  30. package/esm5/lib/components/add-remission/add-remission.component.js +628 -50
  31. package/esm5/lib/components/case-transactions/case-transactions.component.js +38 -4
  32. package/esm5/lib/components/contact-details/contact-details.component.js +424 -0
  33. package/esm5/lib/components/payment-view/payment-view.component.js +5 -2
  34. package/esm5/lib/components/pba-payment/pba-payment.component.js +222 -0
  35. package/esm5/lib/components/process-refund/process-refund.component.js +30 -3
  36. package/esm5/lib/components/refund-status/refund-status.component.js +177 -25
  37. package/esm5/lib/components/service-request/service-request.component.js +32 -9
  38. package/esm5/lib/interfaces/IPutNotificationRequest.js +23 -0
  39. package/esm5/lib/interfaces/IRefundContactDetails.js +25 -0
  40. package/esm5/lib/interfaces/IRefundList.js +3 -1
  41. package/esm5/lib/interfaces/IRefundsNotifications.js +21 -0
  42. package/esm5/lib/interfaces/IserviceRequestCardPayment.js +22 -0
  43. package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +25 -0
  44. package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +5 -2
  45. package/esm5/lib/interfaces/PostRefundRetroRemission.js +14 -2
  46. package/esm5/lib/payment-lib.component.js +8 -3
  47. package/esm5/lib/payment-lib.module.js +5 -3
  48. package/esm5/lib/payment-lib.service.js +23 -1
  49. package/esm5/lib/services/notification/notification.service.js +89 -0
  50. package/esm5/lib/services/payment-view/payment-view.service.js +42 -1
  51. package/esm5/lib/services/refunds/refunds.service.js +16 -1
  52. package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +1 -1
  53. package/fesm2015/hmcts-ccpay-web-component.js +1338 -91
  54. package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
  55. package/fesm5/hmcts-ccpay-web-component.js +1555 -110
  56. package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
  57. package/hmcts-ccpay-web-component.d.ts +33 -30
  58. package/hmcts-ccpay-web-component.metadata.json +1 -1
  59. package/lib/components/add-remission/add-remission.component.d.ts +35 -2
  60. package/lib/components/case-transactions/case-transactions.component.d.ts +5 -0
  61. package/lib/components/contact-details/contact-details.component.d.ts +46 -0
  62. package/lib/components/payment-view/payment-view.component.d.ts +1 -0
  63. package/lib/components/pba-payment/pba-payment.component.d.ts +28 -0
  64. package/lib/components/process-refund/process-refund.component.d.ts +5 -1
  65. package/lib/components/refund-status/refund-status.component.d.ts +20 -5
  66. package/lib/components/service-request/service-request.component.d.ts +2 -0
  67. package/lib/interfaces/IPutNotificationRequest.d.ts +6 -0
  68. package/lib/interfaces/IRefundContactDetails.d.ts +9 -0
  69. package/lib/interfaces/IRefundList.d.ts +2 -0
  70. package/lib/interfaces/IRefundsNotifications.d.ts +16 -0
  71. package/lib/interfaces/IserviceRequestCardPayment.d.ts +6 -0
  72. package/lib/interfaces/IserviceRequestPbaPayment.d.ts +7 -0
  73. package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +3 -1
  74. package/lib/interfaces/PostRefundRetroRemission.d.ts +6 -1
  75. package/lib/payment-lib.component.d.ts +3 -0
  76. package/lib/payment-lib.service.d.ts +3 -0
  77. package/lib/services/notification/notification.service.d.ts +15 -0
  78. package/lib/services/payment-view/payment-view.service.d.ts +5 -0
  79. package/lib/services/refunds/refunds.service.d.ts +2 -0
  80. package/package.json +1 -1
@@ -0,0 +1,399 @@
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
+ export class ContactDetailsComponent {
10
+ /**
11
+ * @param {?} formBuilder
12
+ * @param {?} notificationService
13
+ * @param {?} paymentLibComponent
14
+ */
15
+ constructor(formBuilder, notificationService, paymentLibComponent) {
16
+ this.formBuilder = formBuilder;
17
+ this.notificationService = notificationService;
18
+ this.paymentLibComponent = paymentLibComponent;
19
+ this.assignContactDetails = new EventEmitter();
20
+ this.redirectToIssueRefund = new EventEmitter();
21
+ this.pageTitle = 'Payment status history';
22
+ this.isEmailSAddressClicked = true;
23
+ this.isShowPickAddress = false;
24
+ this.isPostcodeClicked = false;
25
+ this.isManualAddressClicked = false;
26
+ this.addressPostcodeList = [];
27
+ this.isEmailEmpty = false;
28
+ this.emailHasError = false;
29
+ this.isPostcodeEmpty = false;
30
+ this.postcodeHasError = false;
31
+ this.isaddressLine1Empty = false;
32
+ this.addressLine1HasError = false;
33
+ this.addressLine2HasError = false;
34
+ this.isTownOrCityEmpty = false;
35
+ this.townOrCityHasError = false;
36
+ this.isCountyEmpty = false;
37
+ this.countyHasError = false;
38
+ this.isMPostcodeEmpty = false;
39
+ this.mpostcodeHasError = false;
40
+ this.isCountryEmpty = false;
41
+ }
42
+ /**
43
+ * @return {?}
44
+ */
45
+ ngOnInit() {
46
+ this.resetForm([false, false, false, false, false, false, false, false, false, false, false, false, false, false], 'all');
47
+ this.emailAddressForm = this.formBuilder.group({
48
+ email: new FormControl('', Validators.compose([
49
+ Validators.required,
50
+ Validators.pattern('^[a-z0-9._%+-]+@[a-z0-9-]+\\.[a-z]{2,4}$')
51
+ ]))
52
+ });
53
+ this.postCodeForm = this.formBuilder.group({
54
+ postcode: new FormControl('', Validators.compose([
55
+ Validators.required,
56
+ Validators.pattern('^([A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2})')
57
+ ]))
58
+ });
59
+ this.manualAddressForm = this.formBuilder.group({
60
+ addressl1: new FormControl('', Validators.compose([
61
+ Validators.required,
62
+ Validators.pattern('^[a-zA-Z0-9\\s,\'-]*$')
63
+ ])),
64
+ addressl2: new FormControl('', Validators.compose([
65
+ Validators.pattern('^[a-zA-Z0-9\\s,\'-]*$')
66
+ ])),
67
+ townorcity: new FormControl('', Validators.compose([
68
+ Validators.required,
69
+ Validators.pattern('^[a-zA-Z0-9\\s,\'-]*$')
70
+ ])),
71
+ county: new FormControl('', Validators.compose([
72
+ Validators.pattern('^[a-zA-Z0-9\\s,\'-]*$')
73
+ ])),
74
+ mpostcode: new FormControl('', Validators.compose([
75
+ Validators.required,
76
+ Validators.pattern('^([A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2})')
77
+ ])),
78
+ country: new FormControl('', Validators.compose([
79
+ Validators.required
80
+ ]))
81
+ });
82
+ if (this.addressObj !== undefined && this.addressObj !== '') {
83
+ this.setEditDetails();
84
+ }
85
+ }
86
+ /**
87
+ * @return {?}
88
+ */
89
+ setEditDetails() {
90
+ if (this.addressObj.notification_type === 'EMAIL') {
91
+ this.isEmailSAddressClicked = true;
92
+ this.isPostcodeClicked = false;
93
+ this.isManualAddressClicked = false;
94
+ this.emailAddressForm.setValue({ email: this.addressObj.contact_details.email });
95
+ }
96
+ else if (this.addressObj.notification_type === 'LETTER') {
97
+ this.isEmailSAddressClicked = false;
98
+ this.isPostcodeClicked = true;
99
+ this.isManualAddressClicked = true;
100
+ this.manualAddressForm.patchValue({
101
+ addressl1: this.addressObj.contact_details.address_line,
102
+ townorcity: this.addressObj.contact_details.city,
103
+ county: this.addressObj.contact_details.county,
104
+ country: this.addressObj.contact_details.country,
105
+ mpostcode: this.addressObj.contact_details.postal_code
106
+ });
107
+ }
108
+ }
109
+ /**
110
+ * @param {?} type
111
+ * @param {?} isLinkedClied
112
+ * @return {?}
113
+ */
114
+ selectContactOption(type, isLinkedClied) {
115
+ this.resetForm([false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], 'all');
116
+ if (type === 'Email' && isLinkedClied === 'false') {
117
+ this.isEmailSAddressClicked = true;
118
+ this.isPostcodeClicked = false;
119
+ this.isManualAddressClicked = false;
120
+ }
121
+ else if (type === 'Postcode' && isLinkedClied === 'false') {
122
+ this.isEmailSAddressClicked = false;
123
+ this.isPostcodeClicked = true;
124
+ this.isManualAddressClicked = false;
125
+ }
126
+ else if (type === 'Postcode' && isLinkedClied === 'true') {
127
+ this.isEmailSAddressClicked = false;
128
+ this.isPostcodeClicked = true;
129
+ this.isManualAddressClicked = true;
130
+ }
131
+ }
132
+ /**
133
+ * @return {?}
134
+ */
135
+ finalFormSubmit() {
136
+ this.resetForm([false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], 'all');
137
+ if (this.isEmailSAddressClicked) {
138
+ /** @type {?} */
139
+ const emailField = this.emailAddressForm.controls.email;
140
+ if (this.emailAddressForm.valid) {
141
+ this.assignContactDetails.emit({
142
+ email: emailField.value,
143
+ notification_type: 'EMAIL'
144
+ });
145
+ }
146
+ else {
147
+ if (emailField.value == '') {
148
+ this.resetForm([true, false, false, false, false, false, false, false, false, false, false, false, false, false], 'email');
149
+ }
150
+ if (emailField.value != '' && emailField.invalid) {
151
+ this.resetForm([false, true, false, false, false, false, false, false, false, false, false, false, false, false], 'email');
152
+ }
153
+ }
154
+ }
155
+ else if (this.isPostcodeClicked && !this.isManualAddressClicked) {
156
+ this.postcodeValidation('FS');
157
+ }
158
+ else if (this.isPostcodeClicked && this.isManualAddressClicked) {
159
+ /** @type {?} */
160
+ const fieldCtrls = this.manualAddressForm.controls;
161
+ if (this.manualAddressForm.valid) {
162
+ this.assignContactDetails.emit({
163
+ address_line: fieldCtrls.addressl1.value + ' ' + fieldCtrls.addressl2.value,
164
+ city: fieldCtrls.townorcity.value,
165
+ county: fieldCtrls.county.value,
166
+ postal_code: fieldCtrls.mpostcode.value,
167
+ country: fieldCtrls.country.value,
168
+ notification_type: 'LETTER'
169
+ });
170
+ }
171
+ else {
172
+ if (fieldCtrls.addressl1.value == '') {
173
+ this.resetForm([false, false, false, false, true, false, false, false, false, false, false, false, false, false], 'address1');
174
+ }
175
+ if (fieldCtrls.addressl1.value != '' && fieldCtrls.addressl1.invalid) {
176
+ this.resetForm([false, false, false, false, false, true, false, false, false, false, false, false, false, false], 'address1');
177
+ }
178
+ if (fieldCtrls.addressl2.value != '' && fieldCtrls.addressl2.invalid) {
179
+ this.resetForm([false, false, false, false, false, false, true, false, false, false, false, false, false, false], 'address2');
180
+ }
181
+ if (fieldCtrls.townorcity.value == '') {
182
+ this.resetForm([false, false, false, false, false, false, false, true, false, false, false, false, false, false], 'town');
183
+ }
184
+ if (fieldCtrls.townorcity.value != '' && fieldCtrls.townorcity.invalid) {
185
+ this.resetForm([false, false, false, false, false, false, false, false, true, false, false, false, false, false], 'town');
186
+ }
187
+ if (fieldCtrls.county.value == '') {
188
+ this.resetForm([false, false, false, false, false, false, false, false, false, true, false, false, false, false], 'county');
189
+ }
190
+ if (fieldCtrls.county.value != '' && fieldCtrls.county.invalid) {
191
+ this.resetForm([false, false, false, false, false, false, false, false, false, false, true, false, false, false], 'county');
192
+ }
193
+ if (fieldCtrls.mpostcode.value == '') {
194
+ this.resetForm([false, false, false, false, false, false, false, false, false, false, false, true, false, false], 'mpostcode');
195
+ }
196
+ if (fieldCtrls.mpostcode.value != '' && fieldCtrls.mpostcode.invalid) {
197
+ this.resetForm([false, false, false, false, false, false, false, false, false, false, false, false, true, false], 'mpostcode');
198
+ }
199
+ if (fieldCtrls.country.value == '') {
200
+ this.resetForm([false, false, false, false, false, false, false, false, false, false, false, false, false, true], 'country');
201
+ }
202
+ }
203
+ }
204
+ }
205
+ /**
206
+ * @param {?} str
207
+ * @return {?}
208
+ */
209
+ postcodeValidation(str) {
210
+ /** @type {?} */
211
+ const postcodeField = this.postCodeForm.controls.postcode;
212
+ if (this.postCodeForm.valid) {
213
+ if (str === 'FA') {
214
+ this.notificationService.getAddressByPostcode(postcodeField.value).subscribe((/**
215
+ * @param {?} refundsNotification
216
+ * @return {?}
217
+ */
218
+ refundsNotification => {
219
+ this.addressPostcodeList = refundsNotification['data']['results'];
220
+ this.isShowPickAddress = true;
221
+ })),
222
+ (/**
223
+ * @param {?} error
224
+ * @return {?}
225
+ */
226
+ (error) => {
227
+ this.isShowPickAddress = false;
228
+ this.errorMessage = error.replace(/"/g, "");
229
+ });
230
+ }
231
+ else if (str === 'FS') {
232
+ if (this.postcodeAddress !== undefined && this.postcodeAddress) {
233
+ /** @type {?} */
234
+ let addressLine = "";
235
+ /** @type {?} */
236
+ let addressArray = this.postcodeAddress.ADDRESS.split(",");
237
+ for (let i = 0; i < addressArray.length - 2; i++) {
238
+ addressLine += addressArray[i];
239
+ }
240
+ this.assignContactDetails.emit({
241
+ address_line: addressLine,
242
+ city: this.postcodeAddress.POST_TOWN,
243
+ county: this.postcodeAddress.LOCAL_CUSTODIAN_CODE_DESCRIPTION,
244
+ postal_code: this.postcodeAddress.POSTCODE,
245
+ country: 'United Kingdom',
246
+ notification_type: 'LETTER'
247
+ });
248
+ }
249
+ }
250
+ }
251
+ else {
252
+ if (postcodeField.value == '') {
253
+ this.resetForm([false, false, true, false, false, false, false, false, false, false, false, false, false], 'postcode');
254
+ }
255
+ if (postcodeField.value != '' && postcodeField.invalid) {
256
+ this.resetForm([false, false, false, true, false, false, false, false, false, false, false, false, false], 'postcode');
257
+ }
258
+ }
259
+ }
260
+ /**
261
+ * @param {?} event
262
+ * @return {?}
263
+ */
264
+ redirection(event) {
265
+ this.redirectToIssueRefund.emit(event);
266
+ }
267
+ /**
268
+ * @param {?} val
269
+ * @param {?} field
270
+ * @return {?}
271
+ */
272
+ resetForm(val, field) {
273
+ if (field === 'email' || field === 'all') {
274
+ this.isEmailEmpty = val[0];
275
+ this.emailHasError = val[1];
276
+ }
277
+ if (field === 'postcode' || field === 'all') {
278
+ this.isPostcodeEmpty = val[2];
279
+ this.postcodeHasError = val[3];
280
+ }
281
+ if (field === 'address1' || field === 'all') {
282
+ this.isaddressLine1Empty = val[4];
283
+ this.addressLine1HasError = val[5];
284
+ }
285
+ if (field === 'address2' || field === 'all') {
286
+ this.addressLine2HasError = val[6];
287
+ }
288
+ if (field === 'town' || field === 'all') {
289
+ this.isTownOrCityEmpty = val[7];
290
+ this.townOrCityHasError = val[8];
291
+ }
292
+ if (field === 'county' || field === 'all') {
293
+ this.isCountyEmpty = val[9];
294
+ this.countyHasError = val[10];
295
+ }
296
+ if (field === 'mpostcode' || field === 'all') {
297
+ this.isMPostcodeEmpty = val[11];
298
+ this.mpostcodeHasError = val[12];
299
+ }
300
+ if (field === 'country' || field === 'all') {
301
+ this.isCountryEmpty = val[13];
302
+ }
303
+ }
304
+ }
305
+ ContactDetailsComponent.decorators = [
306
+ { type: Component, args: [{
307
+ selector: 'ccpay-contact-details',
308
+ 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\" name=\"postcodeAddress\">\n <option *ngFor=\"let address of addressPostcodeList\" [ngValue]=\"address.DPA\" > {{address.DPA.ADDRESS}} </option>\n </select> \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&nbsp;\n<button type=\"submit\" class=\"button govuk-button govuk-font19px\" (click)=\"finalFormSubmit()\">\n Continue\n</button>\n</div>",
309
+ 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}"]
310
+ }] }
311
+ ];
312
+ /** @nocollapse */
313
+ ContactDetailsComponent.ctorParameters = () => [
314
+ { type: FormBuilder },
315
+ { type: NotificationService },
316
+ { type: PaymentLibComponent }
317
+ ];
318
+ ContactDetailsComponent.propDecorators = {
319
+ isEditOperation: [{ type: Input, args: ['isEditOperation',] }],
320
+ addressObj: [{ type: Input, args: ['addressObj',] }],
321
+ assignContactDetails: [{ type: Output }],
322
+ redirectToIssueRefund: [{ type: Output }]
323
+ };
324
+ if (false) {
325
+ /** @type {?} */
326
+ ContactDetailsComponent.prototype.isEditOperation;
327
+ /** @type {?} */
328
+ ContactDetailsComponent.prototype.addressObj;
329
+ /** @type {?} */
330
+ ContactDetailsComponent.prototype.assignContactDetails;
331
+ /** @type {?} */
332
+ ContactDetailsComponent.prototype.redirectToIssueRefund;
333
+ /** @type {?} */
334
+ ContactDetailsComponent.prototype.pageTitle;
335
+ /** @type {?} */
336
+ ContactDetailsComponent.prototype.errorMessage;
337
+ /** @type {?} */
338
+ ContactDetailsComponent.prototype.isEmailSAddressClicked;
339
+ /** @type {?} */
340
+ ContactDetailsComponent.prototype.isShowPickAddress;
341
+ /** @type {?} */
342
+ ContactDetailsComponent.prototype.isPostcodeClicked;
343
+ /** @type {?} */
344
+ ContactDetailsComponent.prototype.isManualAddressClicked;
345
+ /** @type {?} */
346
+ ContactDetailsComponent.prototype.emailAddressForm;
347
+ /** @type {?} */
348
+ ContactDetailsComponent.prototype.postCodeForm;
349
+ /** @type {?} */
350
+ ContactDetailsComponent.prototype.manualAddressForm;
351
+ /** @type {?} */
352
+ ContactDetailsComponent.prototype.addressPostcodeList;
353
+ /** @type {?} */
354
+ ContactDetailsComponent.prototype.postcodeAddress;
355
+ /** @type {?} */
356
+ ContactDetailsComponent.prototype.isEmailEmpty;
357
+ /** @type {?} */
358
+ ContactDetailsComponent.prototype.emailHasError;
359
+ /** @type {?} */
360
+ ContactDetailsComponent.prototype.isPostcodeEmpty;
361
+ /** @type {?} */
362
+ ContactDetailsComponent.prototype.postcodeHasError;
363
+ /** @type {?} */
364
+ ContactDetailsComponent.prototype.isaddressLine1Empty;
365
+ /** @type {?} */
366
+ ContactDetailsComponent.prototype.addressLine1HasError;
367
+ /** @type {?} */
368
+ ContactDetailsComponent.prototype.addressLine2HasError;
369
+ /** @type {?} */
370
+ ContactDetailsComponent.prototype.isTownOrCityEmpty;
371
+ /** @type {?} */
372
+ ContactDetailsComponent.prototype.townOrCityHasError;
373
+ /** @type {?} */
374
+ ContactDetailsComponent.prototype.isCountyEmpty;
375
+ /** @type {?} */
376
+ ContactDetailsComponent.prototype.countyHasError;
377
+ /** @type {?} */
378
+ ContactDetailsComponent.prototype.isMPostcodeEmpty;
379
+ /** @type {?} */
380
+ ContactDetailsComponent.prototype.mpostcodeHasError;
381
+ /** @type {?} */
382
+ ContactDetailsComponent.prototype.isCountryEmpty;
383
+ /**
384
+ * @type {?}
385
+ * @private
386
+ */
387
+ ContactDetailsComponent.prototype.formBuilder;
388
+ /**
389
+ * @type {?}
390
+ * @private
391
+ */
392
+ ContactDetailsComponent.prototype.notificationService;
393
+ /**
394
+ * @type {?}
395
+ * @private
396
+ */
397
+ ContactDetailsComponent.prototype.paymentLibComponent;
398
+ }
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvY29udGFjdC1kZXRhaWxzL2NvbnRhY3QtZGV0YWlscy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFPdkYsTUFBTSxPQUFPLHVCQUF1Qjs7Ozs7O0lBZ0NsQyxZQUFvQixXQUF3QixFQUN4QixtQkFBd0MsRUFDeEMsbUJBQXdDO1FBRnhDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQS9CbEQseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0QsMEJBQXFCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEUsY0FBUyxHQUFXLHdCQUF3QixDQUFDO1FBRTdDLDJCQUFzQixHQUFZLElBQUksQ0FBQztRQUN2QyxzQkFBaUIsR0FBYSxLQUFLLENBQUM7UUFDcEMsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBQ25DLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUl4Qyx3QkFBbUIsR0FBUyxFQUFFLENBQUM7UUFHL0IsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isb0JBQWUs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QUFxQzs7SUFDckMsdURBQXVFOztJQUN2RSx3REFBd0U7O0lBQ3hFLDRDQUE2Qzs7SUFDN0MsK0NBQXFCOztJQUNyQix5REFBdUM7O0lBQ3ZDLG9EQUFvQzs7SUFDcEMsb0RBQW1DOztJQUNuQyx5REFBd0M7O0lBQ3hDLG1EQUE0Qjs7SUFDNUIsK0NBQXdCOztJQUN4QixvREFBNkI7O0lBQzdCLHNEQUErQjs7SUFDL0Isa0RBQW9COztJQUVwQiwrQ0FBOEI7O0lBQzlCLGdEQUErQjs7SUFDL0Isa0RBQWlDOztJQUNqQyxtREFBa0M7O0lBQ2xDLHNEQUFxQzs7SUFDckMsdURBQXNDOztJQUN0Qyx1REFBc0M7O0lBQ3RDLG9EQUFtQzs7SUFDbkMscURBQW9DOztJQUNwQyxnREFBK0I7O0lBQy9CLGlEQUFnQzs7SUFDaEMsbURBQWtDOztJQUNsQyxvREFBbUM7O0lBQ25DLGlEQUFnQzs7Ozs7SUFFcEIsOENBQWdDOzs7OztJQUNoQyxzREFBZ0Q7Ozs7O0lBQ2hELHNEQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktY29udGFjdC1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRhY3QtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRhY3QtZGV0YWlscy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ29udGFjdERldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ2lzRWRpdE9wZXJhdGlvbicpIGlzRWRpdE9wZXJhdGlvbjogYm9vbGVhbjtcbiAgQElucHV0KCdhZGRyZXNzT2JqJykgYWRkcmVzc09iajogYW55O1xuICBAT3V0cHV0KCkgYXNzaWduQ29udGFjdERldGFpbHM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVkaXJlY3RUb0lzc3VlUmVmdW5kOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcGFnZVRpdGxlOiBzdHJpbmcgPSAnUGF5bWVudCBzdGF0dXMgaGlzdG9yeSc7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBpc0VtYWlsU0FkZHJlc3NDbGlja2VkOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNTaG93UGlja0FkZHJlc3M6ICBib29sZWFuID0gZmFsc2U7XG4gIGlzUG9zdGNvZGVDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzTWFudWFsQWRkcmVzc0NsaWNrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZW1haWxBZGRyZXNzRm9ybTogRm9ybUdyb3VwO1xuICBwb3N0Q29kZUZvcm06IEZvcm1Hcm91cDtcbiAgbWFudWFsQWRkcmVzc0Zvcm06IEZvcm1Hcm91cDtcbiAgYWRkcmVzc1Bvc3Rjb2RlTGlzdDphbnlbXSA9IFtdO1xuICBwb3N0Y29kZUFkZHJlc3M6YW55O1xuXG4gIGlzRW1haWxFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBlbWFpbEhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUG9zdGNvZGVFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBwb3N0Y29kZUhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzYWRkcmVzc0xpbmUxRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWRkcmVzc0xpbmUxSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWRkcmVzc0xpbmUySGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNUb3duT3JDaXR5RW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG93bk9yQ2l0eUhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQ291bnR5RW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY291bnR5SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNNUG9zdGNvZGVFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBtcG9zdGNvZGVIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvdW50cnlFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlXSwgJ2FsbCcpO1xuXG4gICAgdGhpcy5lbWFpbEFkZHJlc3NGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBlbWFpbDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bYS16MC05Ll8lKy1dK0BbYS16MC05LV0rXFxcXC5bYS16XXsyLDR9JCcpXG4gICAgICBdKSlcbiAgICB9KTtcbiAgICB0aGlzLnBvc3RDb2RlRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgcG9zdGNvZGU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFtBLVpdezEsMn1bMC05XXsxLDJ9W0EtWl17MCwxfSA/WzAtOV1bQS1aXXsyfSknKVxuICAgICAgXSkpXG4gICAgfSk7XG4gICAgdGhpcy5tYW51YWxBZGRyZXNzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgYWRkcmVzc2wxOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXlthLXpBLVowLTlcXFxccyxcXCctXSokJylcbiAgICAgIF0pKSxcbiAgICAgIGFkZHJlc3NsMjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bYS16QS1aMC05XFxcXHMsXFwnLV0qJCcpXG4gICAgICBdKSksXG4gICAgICB0b3dub3JjaXR5OiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXlthLXpBLVowLTlcXFxccyxcXCctXSokJylcbiAgICAgIF0pKSxcbiAgICAgIGNvdW50eTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bYS16QS1aMC05XFxcXHMsXFwnLV0qJCcpXG4gICAgICBdKSksXG4gICAgICBtcG9zdGNvZGU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeKFtBLVpdezEsMn1bMC05XXsxLDJ9W0EtWl17MCwxfSA/WzAtOV1bQS1aXXsyfSknKVxuICAgICAgXSkpLFxuICAgICAgY291bnRyeTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgICBdKSlcbiAgICB9KTtcbiAgICBpZih0aGlzLmFkZHJlc3NPYmogIT09IHVuZGVmaW5lZCAmJiB0aGlzLmFkZHJlc3NPYmogIT09ICcnKSB7XG4gICAgICB0aGlzLnNldEVkaXREZXRhaWxzKCk7XG4gICAgfVxuICB9XG4gIHNldEVkaXREZXRhaWxzKCkge1xuICAgIGlmKHRoaXMuYWRkcmVzc09iai5ub3RpZmljYXRpb25fdHlwZSA9PT0gJ0VNQUlMJykge1xuICAgICAgdGhpcy5pc0VtYWlsU0FkZHJlc3NDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNQb3N0Y29kZUNsaWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNNYW51YWxBZGRyZXNzQ2xpY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5lbWFpbEFkZHJlc3NGb3JtLnNldFZhbHVlKHsgZW1haWw6IHRoaXMuYWRkcmVzc09iai5jb250YWN0X2RldGFpbHMuZW1haWwgfSk7XG4gICAgfSBlbHNlIGlmKHRoaXMuYWRkcmVzc09iai5ub3RpZmljYXRpb25fdHlwZSA9PT0gJ0xFVFRFUicpIHtcbiAgICAgIHRoaXMuaXNFbWFpbFNBZGRyZXNzQ2xpY2tlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc1Bvc3Rjb2RlQ2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLmlzTWFudWFsQWRkcmVzc0NsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5tYW51YWxBZGRyZXNzRm9ybS5wYXRjaFZhbHVlKHsgXG4gICAgICAgIGFkZHJlc3NsMTogdGhpcy5hZGRyZXNzT2JqLmNvbnRhY3RfZGV0YWlscy5hZGRyZXNzX2xpbmUsXG4gICAgICAgIHRvd25vcmNpdHk6IHRoaXMuYWRkcmVzc09iai5jb250YWN0X2RldGFpbHMuY2l0eSxcbiAgICAgICAgY291bnR5OiB0aGlzLmFkZHJlc3NPYmouY29udGFjdF9kZXRhaWxzLmNvdW50eSxcbiAgICAgICAgY291bnRyeTogdGhpcy5hZGRyZXNzT2JqLmNvbnRhY3RfZGV0YWlscy5jb3VudHJ5LFxuICAgICAgICBtcG9zdGNvZGU6IHRoaXMuYWRkcmVzc09iai5jb250YWN0X2RldGFpbHMucG9zdGFsX2NvZGVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdENvbnRhY3RPcHRpb24odHlwZSwgaXNMaW5rZWRDbGllZCkge1xuICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdhbGwnKTtcbiAgICBpZiggdHlwZSA9PT0gJ0VtYWlsJyAmJiBpc0xpbmtlZENsaWVkID09PSAnZmFsc2UnKXtcbiAgICAgIHRoaXMuaXNFbWFpbFNBZGRyZXNzQ2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLmlzUG9zdGNvZGVDbGlja2VkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzTWFudWFsQWRkcmVzc0NsaWNrZWQgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYodHlwZSA9PT0gJ1Bvc3Rjb2RlJyAmJiBpc0xpbmtlZENsaWVkID09PSAnZmFsc2UnKSB7XG4gICAgICB0aGlzLmlzRW1haWxTQWRkcmVzc0NsaWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNQb3N0Y29kZUNsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pc01hbnVhbEFkZHJlc3NDbGlja2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmKHR5cGUgPT09ICdQb3N0Y29kZScgJiYgaXNMaW5rZWRDbGllZCA9PT0gJ3RydWUnKSB7XG4gICAgICB0aGlzLmlzRW1haWxTQWRkcmVzc0NsaWNrZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNQb3N0Y29kZUNsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5pc01hbnVhbEFkZHJlc3NDbGlja2VkID0gdHJ1ZTtcblxuICAgIH1cbiAgfVxuXG4gIGZpbmFsRm9ybVN1Ym1pdCgpIHtcbiAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAnYWxsJyk7XG4gICAgaWYoIHRoaXMuaXNFbWFpbFNBZGRyZXNzQ2xpY2tlZCApe1xuICAgICAgY29uc3QgZW1haWxGaWVsZCA9IHRoaXMuZW1haWxBZGRyZXNzRm9ybS5jb250cm9scy5lbWFpbDtcbiAgICAgIGlmICh0aGlzLmVtYWlsQWRkcmVzc0Zvcm0udmFsaWQpIHtcbiAgICAgICAgdGhpcy5hc3NpZ25Db250YWN0RGV0YWlscy5lbWl0KCB7XG4gICAgICAgICAgZW1haWw6IGVtYWlsRmllbGQudmFsdWUsXG4gICAgICAgICAgbm90aWZpY2F0aW9uX3R5cGU6ICdFTUFJTCdcbiAgICAgICAgfSApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYoIGVtYWlsRmllbGQudmFsdWUgPT0gJycgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW3RydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAnZW1haWwnKTtcbiAgICAgICAgfVxuICAgICAgICBpZihlbWFpbEZpZWxkLnZhbHVlICE9ICcnICYmIGVtYWlsRmllbGQuaW52YWxpZCApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdlbWFpbCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKCB0aGlzLmlzUG9zdGNvZGVDbGlja2VkICYmICF0aGlzLmlzTWFudWFsQWRkcmVzc0NsaWNrZWQgKSB7XG4gICAgICB0aGlzLnBvc3Rjb2RlVmFsaWRhdGlvbignRlMnKTtcbiAgICB9IGVsc2UgaWYodGhpcy5pc1Bvc3Rjb2RlQ2xpY2tlZCAmJiB0aGlzLmlzTWFudWFsQWRkcmVzc0NsaWNrZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkQ3RybHMgPSB0aGlzLm1hbnVhbEFkZHJlc3NGb3JtLmNvbnRyb2xzO1xuICAgICAgaWYgKHRoaXMubWFudWFsQWRkcmVzc0Zvcm0udmFsaWQpIHtcbiAgICAgICAgdGhpcy5hc3NpZ25Db250YWN0RGV0YWlscy5lbWl0KHtcbiAgICAgICAgICBhZGRyZXNzX2xpbmU6IGZpZWxkQ3RybHMuYWRkcmVzc2wxLnZhbHVlKycgJytmaWVsZEN0cmxzLmFkZHJlc3NsMi52YWx1ZSxcbiAgICAgICAgICBjaXR5OiBmaWVsZEN0cmxzLnRvd25vcmNpdHkudmFsdWUsXG4gICAgICAgICAgY291bnR5OiBmaWVsZEN0cmxzLmNvdW50eS52YWx1ZSxcbiAgICAgICAgICBwb3N0YWxfY29kZTogZmllbGRDdHJscy5tcG9zdGNvZGUudmFsdWUsXG4gICAgICAgICAgY291bnRyeTogZmllbGRDdHJscy5jb3VudHJ5LnZhbHVlLFxuICAgICAgICAgIG5vdGlmaWNhdGlvbl90eXBlOiAnTEVUVEVSJ1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKCBmaWVsZEN0cmxzLmFkZHJlc3NsMS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdhZGRyZXNzMScpO1xuICAgICAgICB9XG4gICAgICAgIGlmKGZpZWxkQ3RybHMuYWRkcmVzc2wxLnZhbHVlICE9ICcnICYmIGZpZWxkQ3RybHMuYWRkcmVzc2wxLmludmFsaWQgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAnYWRkcmVzczEnKTtcbiAgICAgICAgfVxuICAgICAgICBpZihmaWVsZEN0cmxzLmFkZHJlc3NsMi52YWx1ZSAhPSAnJyAmJiBmaWVsZEN0cmxzLmFkZHJlc3NsMi5pbnZhbGlkICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlXSwgJ2FkZHJlc3MyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIGZpZWxkQ3RybHMudG93bm9yY2l0eS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICd0b3duJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZmllbGRDdHJscy50b3dub3JjaXR5LnZhbHVlICE9ICcnICYmIGZpZWxkQ3RybHMudG93bm9yY2l0eS5pbnZhbGlkICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlXSwgJ3Rvd24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiggZmllbGRDdHJscy5jb3VudHkudmFsdWUgPT0gJycgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAnY291bnR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZmllbGRDdHJscy5jb3VudHkudmFsdWUgIT0gJycgJiYgZmllbGRDdHJscy5jb3VudHkuaW52YWxpZCApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdjb3VudHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiggZmllbGRDdHJscy5tcG9zdGNvZGUudmFsdWUgPT0gJycgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2VdLCAnbXBvc3Rjb2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZmllbGRDdHJscy5tcG9zdGNvZGUudmFsdWUgIT0gJycgJiYgZmllbGRDdHJscy5tcG9zdGNvZGUuaW52YWxpZCApIHtcbiAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZV0sICdtcG9zdGNvZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiggZmllbGRDdHJscy5jb3VudHJ5LnZhbHVlID09ICcnICkge1xuICAgICAgICAgIHRoaXMucmVzZXRGb3JtKFtmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSx0cnVlXSwgJ2NvdW50cnknKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgfVxuXG4gIH1cblxuICBwb3N0Y29kZVZhbGlkYXRpb24oc3RyKSB7XG4gICAgY29uc3QgcG9zdGNvZGVGaWVsZCA9IHRoaXMucG9zdENvZGVGb3JtLmNvbnRyb2xzLnBvc3Rjb2RlO1xuICAgIGlmICh0aGlzLnBvc3RDb2RlRm9ybS52YWxpZCkge1xuICAgICAgaWYoc3RyID09PSAnRkEnKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5nZXRBZGRyZXNzQnlQb3N0Y29kZShwb3N0Y29kZUZpZWxkLnZhbHVlKS5zdWJzY3JpYmUoXG4gICAgICAgICAgcmVmdW5kc05vdGlmaWNhdGlvbiA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZHJlc3NQb3N0Y29kZUxpc3QgPSByZWZ1bmRzTm90aWZpY2F0aW9uWydkYXRhJ11bJ3Jlc3VsdHMnXTtcbiAgICAgICAgICAgIHRoaXMuaXNTaG93UGlja0FkZHJlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU2hvd1BpY2tBZGRyZXNzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLFwiXCIpO1xuICAgICAgICB9OyBcbiAgICAgIH0gZWxzZSBpZiAoc3RyID09PSAnRlMnKSB7XG4gICAgICAgIGlmKHRoaXMucG9zdGNvZGVBZGRyZXNzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5wb3N0Y29kZUFkZHJlc3MpIHtcbiAgICAgICAgICBsZXQgYWRkcmVzc0xpbmU9XCJcIjtcbiAgICAgICAgICBsZXQgYWRkcmVzc0FycmF5ID0gdGhpcy5wb3N0Y29kZUFkZHJlc3MuQUREUkVTUy5zcGxpdChcIixcIik7XG4gICAgICAgICAgZm9yKCBsZXQgaT0wOyBpPGFkZHJlc3NBcnJheS5sZW5ndGgtMjsgaSsrICkge1xuICAgICAgICAgICAgYWRkcmVzc0xpbmUgKz1hZGRyZXNzQXJyYXlbaV07IFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYXNzaWduQ29udGFjdERldGFpbHMuZW1pdCh7XG4gICAgICAgICAgICBhZGRyZXNzX2xpbmU6IGFkZHJlc3NMaW5lLFxuICAgICAgICAgICAgY2l0eTogdGhpcy5wb3N0Y29kZUFkZHJlc3MuUE9TVF9UT1dOLFxuICAgICAgICAgICAgY291bnR5OiB0aGlzLnBvc3Rjb2RlQWRkcmVzcy5MT0NBTF9DVVNUT0RJQU5fQ09ERV9ERVNDUklQVElPTixcbiAgICAgICAgICAgIHBvc3RhbF9jb2RlOiB0aGlzLnBvc3Rjb2RlQWRkcmVzcy5QT1NUQ09ERSxcbiAgICAgICAgICAgIGNvdW50cnk6ICdVbml0ZWQgS2luZ2RvbScsXG4gICAgICAgICAgICBub3RpZmljYXRpb25fdHlwZTogJ0xFVFRFUidcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiggcG9zdGNvZGVGaWVsZC52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oW2ZhbHNlLGZhbHNlLHRydWUsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2VdLCAncG9zdGNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHBvc3Rjb2RlRmllbGQudmFsdWUgIT0gJycgJiYgcG9zdGNvZGVGaWVsZC5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybShbZmFsc2UsZmFsc2UsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZSxmYWxzZV0sICdwb3N0Y29kZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZWRpcmVjdGlvbihldmVudDphbnkpIHtcbiAgICB0aGlzLnJlZGlyZWN0VG9Jc3N1ZVJlZnVuZC5lbWl0KGV2ZW50KTtcbiAgfVxuICByZXNldEZvcm0odmFsLCBmaWVsZCkge1xuICAgIGlmKGZpZWxkPT09J2VtYWlsJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzRW1haWxFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMuZW1haWxIYXNFcnJvciA9IHZhbFsxXTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0ncG9zdGNvZGUnIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNQb3N0Y29kZUVtcHR5ID0gdmFsWzJdO1xuICAgICAgdGhpcy5wb3N0Y29kZUhhc0Vycm9yID0gdmFsWzNdO1xuICAgIH1cbiAgICBpZihmaWVsZD09PSdhZGRyZXNzMScgfHwgZmllbGQ9PT0nYWxsJykge1xuICAgICAgdGhpcy5pc2FkZHJlc3NMaW5lMUVtcHR5ID0gdmFsWzRdO1xuICAgICAgdGhpcy5hZGRyZXNzTGluZTFIYXNFcnJvciA9IHZhbFs1XTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0nYWRkcmVzczInIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuYWRkcmVzc0xpbmUySGFzRXJyb3IgPSB2YWxbNl07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J3Rvd24nIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNUb3duT3JDaXR5RW1wdHkgPSB2YWxbN107XG4gICAgICB0aGlzLnRvd25PckNpdHlIYXNFcnJvciA9IHZhbFs4XTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0nY291bnR5JyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzQ291bnR5RW1wdHkgPSB2YWxbOV07XG4gICAgICB0aGlzLmNvdW50eUhhc0Vycm9yID0gdmFsWzEwXTtcbiAgICB9XG4gICAgaWYoZmllbGQ9PT0nbXBvc3Rjb2RlJyB8fCBmaWVsZD09PSdhbGwnKSB7XG4gICAgICB0aGlzLmlzTVBvc3Rjb2RlRW1wdHkgPSB2YWxbMTFdO1xuICAgICAgdGhpcy5tcG9zdGNvZGVIYXNFcnJvciA9IHZhbFsxMl07XG4gICAgfVxuICAgIGlmKGZpZWxkPT09J2NvdW50cnknIHx8IGZpZWxkPT09J2FsbCcpIHtcbiAgICAgIHRoaXMuaXNDb3VudHJ5RW1wdHkgPSB2YWxbMTNdO1xuICAgIH1cbiAgXG4gIH1cbn1cbiJdfQ==