@hmcts/ccpay-web-component 6.5.0-cme-779-prerelease → 6.5.1-beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/esm2022/hmcts-ccpay-web-component.mjs +5 -0
  2. package/esm2022/lib/components/add-remission/add-remission.component.mjs +1276 -0
  3. package/esm2022/lib/components/allocate-payments/allocate-payments.component.mjs +423 -0
  4. package/esm2022/lib/components/card-details/card-details.component.mjs +32 -0
  5. package/esm2022/lib/components/case-transactions/case-transactions.component.mjs +890 -0
  6. package/esm2022/lib/components/contact-details/contact-details.component.mjs +338 -0
  7. package/esm2022/lib/components/error-banner/error-banner.component.mjs +18 -0
  8. package/esm2022/lib/components/fee-summary/fee-summary.component.mjs +290 -0
  9. package/esm2022/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.mjs +195 -0
  10. package/esm2022/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.mjs +275 -0
  11. package/esm2022/lib/components/notification-preview/notification-preview.component.mjs +79 -0
  12. package/esm2022/lib/components/page-not-found.component.mjs +17 -0
  13. package/esm2022/lib/components/payment-list/payment-list.component.mjs +36 -0
  14. package/esm2022/lib/components/payment-view/payment-view.component.mjs +467 -0
  15. package/esm2022/lib/components/pba-details/pba-details.component.mjs +18 -0
  16. package/esm2022/lib/components/pba-payment/pba-payment.component.mjs +163 -0
  17. package/esm2022/lib/components/process-refund/process-refund.component.mjs +417 -0
  18. package/esm2022/lib/components/processed-payments/processed-payments.component.mjs +37 -0
  19. package/esm2022/lib/components/refund-list/refund-list.component.mjs +73 -0
  20. package/esm2022/lib/components/refund-status/refund-status.component.mjs +453 -0
  21. package/esm2022/lib/components/reports/reports.component.mjs +337 -0
  22. package/esm2022/lib/components/service-request/service-request.component.mjs +516 -0
  23. package/esm2022/lib/components/status-history/status-history.component.mjs +33 -0
  24. package/esm2022/lib/components/table/table.component.mjs +127 -0
  25. package/esm2022/lib/components/unprocessed-payments/unprocessed-payments.component.mjs +236 -0
  26. package/esm2022/lib/interfaces/AddRemissionRequest.mjs +17 -0
  27. package/esm2022/lib/interfaces/AddRetroRemissionRequest.mjs +9 -0
  28. package/esm2022/lib/interfaces/AllocatePaymentRequest.mjs +41 -0
  29. package/esm2022/lib/interfaces/IAllocationPaymentsRequest.mjs +20 -0
  30. package/esm2022/lib/interfaces/IBSPayments.mjs +2 -0
  31. package/esm2022/lib/interfaces/ICardDetails.mjs +2 -0
  32. package/esm2022/lib/interfaces/IFee.mjs +2 -0
  33. package/esm2022/lib/interfaces/INotificationPreview.mjs +2 -0
  34. package/esm2022/lib/interfaces/IOrderReferenceFee.mjs +2 -0
  35. package/esm2022/lib/interfaces/IPatchRefundAction.mjs +2 -0
  36. package/esm2022/lib/interfaces/IPayment.mjs +2 -0
  37. package/esm2022/lib/interfaces/IPaymentFailure.mjs +2 -0
  38. package/esm2022/lib/interfaces/IPaymentGroup.mjs +2 -0
  39. package/esm2022/lib/interfaces/IPaymentStatus.mjs +12 -0
  40. package/esm2022/lib/interfaces/IPaymentView.mjs +2 -0
  41. package/esm2022/lib/interfaces/IPayments.mjs +2 -0
  42. package/esm2022/lib/interfaces/IPutNotificationRequest.mjs +13 -0
  43. package/esm2022/lib/interfaces/IRefundAction.mjs +2 -0
  44. package/esm2022/lib/interfaces/IRefundContactDetails.mjs +2 -0
  45. package/esm2022/lib/interfaces/IRefundFee.mjs +2 -0
  46. package/esm2022/lib/interfaces/IRefundList.mjs +2 -0
  47. package/esm2022/lib/interfaces/IRefundReasons.mjs +2 -0
  48. package/esm2022/lib/interfaces/IRefundRejectReason.mjs +2 -0
  49. package/esm2022/lib/interfaces/IRefundStatus.mjs +2 -0
  50. package/esm2022/lib/interfaces/IRefundStatusHistory.mjs +2 -0
  51. package/esm2022/lib/interfaces/IRefundsNotifications.mjs +2 -0
  52. package/esm2022/lib/interfaces/IRemission.mjs +2 -0
  53. package/esm2022/lib/interfaces/IResubmitRefundRequest.mjs +13 -0
  54. package/esm2022/lib/interfaces/IStatusHistories.mjs +2 -0
  55. package/esm2022/lib/interfaces/IStatusHistory.mjs +2 -0
  56. package/esm2022/lib/interfaces/IserviceRequestCardPayment.mjs +11 -0
  57. package/esm2022/lib/interfaces/IserviceRequestPbaPayment.mjs +15 -0
  58. package/esm2022/lib/interfaces/IssueRefundRequest.mjs +11 -0
  59. package/esm2022/lib/interfaces/NotificationPreviewRequest.mjs +46 -0
  60. package/esm2022/lib/interfaces/PayhubAntennaRequest.mjs +30 -0
  61. package/esm2022/lib/interfaces/PaymentToPayhubRequest.mjs +17 -0
  62. package/esm2022/lib/interfaces/PostIssueRefundRetroRemission.mjs +9 -0
  63. package/esm2022/lib/interfaces/PostRefundRetroRemission.mjs +18 -0
  64. package/esm2022/lib/interfaces/RefundsRequest.mjs +9 -0
  65. package/esm2022/lib/interfaces/UnidentifiedPaymentsRequest.mjs +16 -0
  66. package/esm2022/lib/interfaces/UnsolicitedPaymentsRequest.mjs +22 -0
  67. package/esm2022/lib/payment-lib.component.mjs +430 -0
  68. package/esm2022/lib/payment-lib.module.mjs +181 -0
  69. package/esm2022/lib/payment-lib.service.mjs +49 -0
  70. package/esm2022/lib/pipes/capitalize.pipe.mjs +18 -0
  71. package/esm2022/lib/pipes/ccd-hyphens.pipe.mjs +22 -0
  72. package/esm2022/lib/pipes/key-value.pipe.mjs +23 -0
  73. package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
  74. package/esm2022/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.mjs +87 -0
  75. package/esm2022/lib/services/card-details/card-details.service.mjs +39 -0
  76. package/esm2022/lib/services/case-transactions/case-transactions.service.mjs +39 -0
  77. package/esm2022/lib/services/notification/notification.service.mjs +70 -0
  78. package/esm2022/lib/services/orderslist.service.mjs +154 -0
  79. package/esm2022/lib/services/payment-list/payment-list.service.mjs +40 -0
  80. package/esm2022/lib/services/payment-view/payment-view.service.mjs +156 -0
  81. package/esm2022/lib/services/refunds/refunds.service.mjs +117 -0
  82. package/esm2022/lib/services/shared/error-handler.service.mjs +76 -0
  83. package/esm2022/lib/services/shared/httpclient/webcomponent.http.client.mjs +64 -0
  84. package/esm2022/lib/services/shared/logger/console-logger.service.mjs +43 -0
  85. package/esm2022/lib/services/shared/logger/logger.service.mjs +23 -0
  86. package/esm2022/lib/services/status-history/status-history.service.mjs +41 -0
  87. package/esm2022/lib/services/xl-file/xl-file.service.mjs +197 -0
  88. package/esm2022/public_api.mjs +7 -0
  89. package/fesm2022/hmcts-ccpay-web-component.mjs +188 -163
  90. package/fesm2022/hmcts-ccpay-web-component.mjs.map +1 -1
  91. package/index.d.ts +5 -2241
  92. package/lib/components/add-remission/add-remission.component.d.ts +208 -0
  93. package/lib/components/allocate-payments/allocate-payments.component.d.ts +115 -0
  94. package/lib/components/card-details/card-details.component.d.ts +18 -0
  95. package/lib/components/case-transactions/case-transactions.component.d.ts +143 -0
  96. package/lib/components/contact-details/contact-details.component.d.ts +54 -0
  97. package/lib/components/error-banner/error-banner.component.d.ts +9 -0
  98. package/lib/components/fee-summary/fee-summary.component.d.ts +75 -0
  99. package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +52 -0
  100. package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +63 -0
  101. package/lib/components/notification-preview/notification-preview.component.d.ts +30 -0
  102. package/lib/components/page-not-found.component.d.ts +5 -0
  103. package/lib/components/payment-list/payment-list.component.d.ts +19 -0
  104. package/lib/components/payment-view/payment-view.component.d.ts +110 -0
  105. package/lib/components/pba-details/pba-details.component.d.ts +10 -0
  106. package/lib/components/pba-payment/pba-payment.component.d.ts +41 -0
  107. package/lib/components/process-refund/process-refund.component.d.ts +82 -0
  108. package/lib/components/processed-payments/processed-payments.component.d.ts +17 -0
  109. package/lib/components/refund-list/refund-list.component.d.ts +26 -0
  110. package/lib/components/refund-status/refund-status.component.d.ts +112 -0
  111. package/lib/components/reports/reports.component.d.ts +49 -0
  112. package/lib/components/service-request/service-request.component.d.ts +141 -0
  113. package/lib/components/status-history/status-history.component.d.ts +19 -0
  114. package/lib/components/table/table.component.d.ts +45 -0
  115. package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +61 -0
  116. package/lib/interfaces/AddRemissionRequest.d.ts +11 -0
  117. package/lib/interfaces/AddRetroRemissionRequest.d.ts +5 -0
  118. package/lib/interfaces/AllocatePaymentRequest.d.ts +31 -0
  119. package/lib/interfaces/IAllocationPaymentsRequest.d.ts +9 -0
  120. package/lib/interfaces/IBSPayments.d.ts +19 -0
  121. package/lib/interfaces/ICardDetails.d.ts +7 -0
  122. package/lib/interfaces/IFee.d.ts +29 -0
  123. package/lib/interfaces/INotificationPreview.d.ts +27 -0
  124. package/lib/interfaces/IOrderReferenceFee.d.ts +9 -0
  125. package/lib/interfaces/IPatchRefundAction.d.ts +4 -0
  126. package/lib/interfaces/IPayment.d.ts +35 -0
  127. package/lib/interfaces/IPaymentFailure.d.ts +13 -0
  128. package/lib/interfaces/IPaymentGroup.d.ts +11 -0
  129. package/lib/interfaces/IPaymentStatus.d.ts +11 -0
  130. package/lib/interfaces/IPaymentView.d.ts +5 -0
  131. package/lib/interfaces/IPayments.d.ts +4 -0
  132. package/lib/interfaces/IPutNotificationRequest.d.ts +6 -0
  133. package/lib/interfaces/IRefundAction.d.ts +4 -0
  134. package/lib/interfaces/IRefundContactDetails.d.ts +9 -0
  135. package/lib/interfaces/IRefundFee.d.ts +7 -0
  136. package/lib/interfaces/IRefundList.d.ts +20 -0
  137. package/lib/interfaces/IRefundReasons.d.ts +6 -0
  138. package/lib/interfaces/IRefundRejectReason.d.ts +4 -0
  139. package/lib/interfaces/IRefundStatus.d.ts +8 -0
  140. package/lib/interfaces/IRefundStatusHistory.d.ts +5 -0
  141. package/lib/interfaces/IRefundsNotifications.d.ts +16 -0
  142. package/lib/interfaces/IRemission.d.ts +14 -0
  143. package/lib/interfaces/IResubmitRefundRequest.d.ts +9 -0
  144. package/lib/interfaces/IStatusHistories.d.ts +7 -0
  145. package/lib/interfaces/IStatusHistory.d.ts +7 -0
  146. package/lib/interfaces/IserviceRequestCardPayment.d.ts +6 -0
  147. package/lib/interfaces/IserviceRequestPbaPayment.d.ts +8 -0
  148. package/lib/interfaces/IssueRefundRequest.d.ts +6 -0
  149. package/lib/interfaces/NotificationPreviewRequest.d.ts +25 -0
  150. package/lib/interfaces/PayhubAntennaRequest.d.ts +16 -0
  151. package/lib/interfaces/PaymentToPayhubRequest.d.ts +11 -0
  152. package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +6 -0
  153. package/lib/interfaces/PostRefundRetroRemission.d.ts +11 -0
  154. package/lib/interfaces/RefundsRequest.d.ts +5 -0
  155. package/lib/interfaces/UnidentifiedPaymentsRequest.d.ts +7 -0
  156. package/lib/interfaces/UnsolicitedPaymentsRequest.d.ts +10 -0
  157. package/lib/payment-lib.component.d.ts +156 -0
  158. package/lib/payment-lib.module.d.ts +42 -0
  159. package/lib/payment-lib.service.d.ts +21 -0
  160. package/lib/pipes/capitalize.pipe.d.ts +8 -0
  161. package/lib/pipes/ccd-hyphens.pipe.d.ts +8 -0
  162. package/lib/pipes/key-value.pipe.d.ts +8 -0
  163. package/lib/pipes/sanitize-html.pipe.d.ts +10 -0
  164. package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +27 -0
  165. package/lib/services/card-details/card-details.service.d.ts +17 -0
  166. package/lib/services/case-transactions/case-transactions.service.d.ts +17 -0
  167. package/lib/services/notification/notification.service.d.ts +21 -0
  168. package/lib/services/orderslist.service.d.ts +77 -0
  169. package/lib/services/payment-list/payment-list.service.d.ts +18 -0
  170. package/lib/services/payment-view/payment-view.service.d.ts +61 -0
  171. package/lib/services/refunds/refunds.service.d.ts +35 -0
  172. package/lib/services/shared/error-handler.service.d.ts +14 -0
  173. package/lib/services/shared/httpclient/webcomponent.http.client.d.ts +17 -0
  174. package/lib/services/shared/logger/console-logger.service.d.ts +11 -0
  175. package/lib/services/shared/logger/logger.service.d.ts +14 -0
  176. package/lib/services/status-history/status-history.service.d.ts +17 -0
  177. package/lib/services/xl-file/xl-file.service.d.ts +16 -0
  178. package/package.json +3 -1
  179. package/public_api.d.ts +3 -0
@@ -0,0 +1,290 @@
1
+ import { Component, Inject, Input } from '@angular/core';
2
+ import { PaymentViewService } from '../../services/payment-view/payment-view.service';
3
+ import { BulkScaningPaymentService } from '../../services/bulk-scaning-payment/bulk-scaning-payment.service';
4
+ import { PaymentToPayhubRequest } from '../../interfaces/PaymentToPayhubRequest';
5
+ import { PayhubAntennaRequest } from '../../interfaces/PayhubAntennaRequest';
6
+ import { ActivatedRoute, Router } from '@angular/router';
7
+ import { Location } from '@angular/common';
8
+ import { OrderslistService } from '../../services/orderslist.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/router";
11
+ import * as i2 from "../../services/bulk-scaning-payment/bulk-scaning-payment.service";
12
+ import * as i3 from "@angular/common";
13
+ import * as i4 from "../../services/payment-view/payment-view.service";
14
+ import * as i5 from "../../services/orderslist.service";
15
+ import * as i6 from "@angular/forms";
16
+ import * as i7 from "../add-remission/add-remission.component";
17
+ import * as i8 from "../../pipes/ccd-hyphens.pipe";
18
+ const BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
19
+ const ANTENNA_VALUE = 'Antenna';
20
+ const KERV_VALUE = 'Kerv';
21
+ export class FeeSummaryComponent {
22
+ router;
23
+ activatedRoute;
24
+ bulkScaningPaymentService;
25
+ location;
26
+ paymentViewService;
27
+ paymentLibComponent;
28
+ OrderslistService;
29
+ paymentGroupRef;
30
+ ccdCaseNumber;
31
+ isTurnOff;
32
+ caseType;
33
+ telephonySelectionEnable;
34
+ paymentMethod;
35
+ bsPaymentDcnNumber;
36
+ paymentGroup;
37
+ errorMessage;
38
+ viewStatus = 'main';
39
+ currentFee;
40
+ totalFee;
41
+ payhubHtml;
42
+ service = "";
43
+ platForm = "";
44
+ upPaymentErrorMessage;
45
+ selectedOption;
46
+ isBackButtonEnable = true;
47
+ outStandingAmount;
48
+ isFeeAmountZero = false;
49
+ totalAfterRemission = 0;
50
+ isConfirmationBtnDisabled = false;
51
+ isRemoveBtnDisabled = false;
52
+ isPaymentExist = false;
53
+ isRemissionsExist = false;
54
+ isRemissionsMatch = false;
55
+ isStrategicFixEnable;
56
+ forceTelephony;
57
+ constructor(router, activatedRoute, bulkScaningPaymentService, location, paymentViewService, paymentLibComponent, OrderslistService) {
58
+ this.router = router;
59
+ this.activatedRoute = activatedRoute;
60
+ this.bulkScaningPaymentService = bulkScaningPaymentService;
61
+ this.location = location;
62
+ this.paymentViewService = paymentViewService;
63
+ this.paymentLibComponent = paymentLibComponent;
64
+ this.OrderslistService = OrderslistService;
65
+ }
66
+ ngOnInit() {
67
+ this.viewStatus = 'main';
68
+ this.caseType = this.paymentLibComponent.CASETYPE;
69
+ this.bsPaymentDcnNumber = this.paymentLibComponent.bspaymentdcn;
70
+ this.forceTelephony = this.activatedRoute.snapshot.queryParams['forceTelephony'];
71
+ this.selectedOption = this.paymentLibComponent.SELECTED_OPTION.toLocaleLowerCase();
72
+ this.isStrategicFixEnable = this.paymentLibComponent.ISSFENABLE;
73
+ this.OrderslistService.setCaseType(this.paymentLibComponent.CASETYPE);
74
+ this.isTelephonySelectionEnableNull();
75
+ this.IsForceTelephonyEnable();
76
+ this.platForm = 'Antenna';
77
+ this.paymentViewService.getBSfeature().subscribe(features => {
78
+ let result = JSON.parse(features).filter(feature => feature.uid === BS_ENABLE_FLAG);
79
+ this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
80
+ }, err => {
81
+ this.paymentLibComponent.ISBSENABLE = false;
82
+ });
83
+ if (this.bsPaymentDcnNumber) {
84
+ this.getUnassignedPaymentlist();
85
+ }
86
+ this.getPaymentGroup();
87
+ }
88
+ getUnassignedPaymentlist() {
89
+ if (this.selectedOption === 'dcn') {
90
+ this.bulkScaningPaymentService.getBSPaymentsByDCN(this.paymentLibComponent.DCN_NUMBER).subscribe(unassignedPayments => {
91
+ if (unassignedPayments['data'].payments) {
92
+ this.service = unassignedPayments['data'].responsible_service_id;
93
+ }
94
+ else {
95
+ this.upPaymentErrorMessage = 'error';
96
+ }
97
+ }, (error) => this.upPaymentErrorMessage = error);
98
+ }
99
+ else {
100
+ this.bulkScaningPaymentService.getBSPaymentsByCCD(this.ccdCaseNumber).subscribe(unassignedPayments => {
101
+ if (unassignedPayments['data'].payments) {
102
+ this.service = unassignedPayments['data'].responsible_service_id;
103
+ }
104
+ else {
105
+ this.upPaymentErrorMessage = 'error';
106
+ }
107
+ }, (error) => this.upPaymentErrorMessage = error);
108
+ }
109
+ }
110
+ getRemissionByFeeCode(feeCode) {
111
+ if (this.paymentGroup && this.paymentGroup.remissions && this.paymentGroup.remissions.length > 0) {
112
+ for (const remission of this.paymentGroup.remissions) {
113
+ if (remission.fee_code === feeCode) {
114
+ return remission;
115
+ }
116
+ }
117
+ }
118
+ return null;
119
+ }
120
+ addRemission(fee) {
121
+ this.currentFee = fee;
122
+ this.viewStatus = 'add_remission';
123
+ }
124
+ getPaymentGroup() {
125
+ let fees = [];
126
+ this.paymentViewService.getPaymentGroupDetails(this.paymentGroupRef).subscribe(paymentGroup => {
127
+ this.paymentGroup = paymentGroup;
128
+ this.isPaymentExist = paymentGroup.payments ? paymentGroup.payments.length > 0 : false;
129
+ this.isRemissionsExist = paymentGroup.remissions ? paymentGroup.remissions.length > 0 : false;
130
+ if (paymentGroup.fees) {
131
+ paymentGroup.fees.forEach(fee => {
132
+ this.totalAfterRemission = this.totalAfterRemission + fee.net_amount;
133
+ if (fee.calculated_amount === 0) {
134
+ this.isFeeAmountZero = true;
135
+ }
136
+ if (paymentGroup.remissions) {
137
+ this.isRemissionsMatch = false;
138
+ paymentGroup.remissions.forEach(rem => {
139
+ if (rem.fee_code === fee.code) {
140
+ this.isRemissionsMatch = true;
141
+ fee['remissions'] = rem;
142
+ fees.push(fee);
143
+ }
144
+ });
145
+ if (!this.isRemissionsMatch) {
146
+ fees.push(fee);
147
+ }
148
+ }
149
+ else {
150
+ fees.push(fee);
151
+ }
152
+ });
153
+ paymentGroup.fees = fees;
154
+ }
155
+ this.outStandingAmount = this.bulkScaningPaymentService.calculateOutStandingAmount(paymentGroup);
156
+ }, (error) => this.errorMessage = error.replace(/"/g, ""));
157
+ }
158
+ confirmRemoveFee(fee) {
159
+ this.isRemoveBtnDisabled = false;
160
+ this.currentFee = fee;
161
+ this.viewStatus = 'feeRemovalConfirmation';
162
+ }
163
+ removeFee(fee) {
164
+ this.isRemoveBtnDisabled = true;
165
+ this.paymentViewService.deleteFeeFromPaymentGroup(fee).subscribe((success) => {
166
+ if (this.paymentGroup.fees && this.paymentGroup.fees.length > 1) {
167
+ this.totalAfterRemission = 0;
168
+ this.getPaymentGroup();
169
+ this.viewStatus = 'main';
170
+ return;
171
+ }
172
+ this.loadCaseTransactionPage();
173
+ }, (error) => {
174
+ this.errorMessage = error;
175
+ this.isRemoveBtnDisabled = false;
176
+ });
177
+ }
178
+ loadCaseTransactionPage() {
179
+ this.paymentLibComponent.TAKEPAYMENT = true;
180
+ this.paymentLibComponent.viewName = 'case-transactions';
181
+ this.paymentViewService.getBSfeature().subscribe(features => {
182
+ let result = JSON.parse(features).filter(feature => feature.uid === BS_ENABLE_FLAG);
183
+ this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
184
+ }, err => {
185
+ this.paymentLibComponent.ISBSENABLE = false;
186
+ });
187
+ let partUrl = `selectedOption=${this.paymentLibComponent.SELECTED_OPTION}`;
188
+ partUrl += this.bsPaymentDcnNumber ? `&dcn=${this.bsPaymentDcnNumber}` : '';
189
+ partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
190
+ partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
191
+ partUrl += this.paymentLibComponent.ISSFENABLE ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
192
+ partUrl += `&caseType=${this.paymentLibComponent.CASETYPE}`;
193
+ let url = `/payment-history/${this.ccdCaseNumber}?view=case-transactions&takePayment=true&${partUrl}`;
194
+ this.router.navigateByUrl(url);
195
+ }
196
+ cancelRemission() {
197
+ this.viewStatus = 'main';
198
+ }
199
+ redirectToFeeSearchPage(event, page) {
200
+ event.preventDefault();
201
+ let partUrl = this.bsPaymentDcnNumber ? `&dcn=${this.bsPaymentDcnNumber}` : '';
202
+ partUrl += this.paymentLibComponent.ISBSENABLE ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
203
+ partUrl += this.paymentLibComponent.ISTURNOFF ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
204
+ partUrl += this.paymentLibComponent.ISSFENABLE ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
205
+ partUrl += `&caseType=${this.paymentLibComponent.CASETYPE}`;
206
+ if (this.viewStatus === 'feeRemovalConfirmation' || this.viewStatus === 'add_remission') {
207
+ this.viewStatus = 'main';
208
+ return;
209
+ }
210
+ let url = `/fee-search?ccdCaseNumber=${this.ccdCaseNumber}&selectedOption=${this.paymentLibComponent.SELECTED_OPTION}&paymentGroupRef=${this.paymentGroupRef}${partUrl}`;
211
+ this.router.navigateByUrl(url);
212
+ }
213
+ takePayment() {
214
+ this.isConfirmationBtnDisabled = true;
215
+ const requestBody = new PaymentToPayhubRequest(this.ccdCaseNumber, this.outStandingAmount, this.caseType, this.paymentMethod), antennaReqBody = new PayhubAntennaRequest(this.ccdCaseNumber, this.outStandingAmount, this.caseType, this.paymentMethod, this.paymentLibComponent.SELECTED_OPTION, this.paymentLibComponent.DCN_NUMBER, this.paymentLibComponent.TAKEPAYMENT, this.paymentLibComponent.ISBSENABLE.valueOf(), this.isStrategicFixEnable, this.isTurnOff, this.paymentLibComponent.ISPAYMENTSTATUSENABLED.valueOf(), this.paymentLibComponent.EXC_REFERENCE);
216
+ if (this.platForm === 'Antenna') {
217
+ this.paymentViewService.postPaymentAntennaToPayHub(antennaReqBody, this.paymentGroupRef).subscribe(response => {
218
+ this.isBackButtonEnable = false;
219
+ window.location.href = '/makePaymentByTelephoneyProvider';
220
+ }, (error) => {
221
+ this.errorMessage = error;
222
+ this.isConfirmationBtnDisabled = false;
223
+ this.router.navigateByUrl('/pci-pal-failure');
224
+ });
225
+ }
226
+ }
227
+ goToAllocatePage(outStandingAmount, isFeeAmountZero) {
228
+ if (outStandingAmount > 0 || (outStandingAmount === 0 && isFeeAmountZero)) {
229
+ this.paymentLibComponent.paymentGroupReference = this.paymentGroupRef;
230
+ this.paymentLibComponent.viewName = 'allocate-payments';
231
+ }
232
+ else {
233
+ this.loadCaseTransactionPage();
234
+ }
235
+ }
236
+ isCheckAmountdueExist(amountDue) {
237
+ return typeof amountDue === 'undefined';
238
+ }
239
+ getAntennaValue() {
240
+ return ANTENNA_VALUE;
241
+ }
242
+ getKervValue() {
243
+ return KERV_VALUE;
244
+ }
245
+ getPaymentMethod() {
246
+ return this.paymentMethod;
247
+ }
248
+ setPaymentValue(value) {
249
+ this.paymentMethod = value;
250
+ }
251
+ isTakePaymentButtonDisabled() {
252
+ if (this.telephonySelectionEnable) {
253
+ return (this.paymentMethod === null || this.paymentMethod === undefined || this.paymentMethod === '');
254
+ }
255
+ return false;
256
+ }
257
+ isTelephonySelectionEnable() {
258
+ return this.telephonySelectionEnable && !this.bsPaymentDcnNumber;
259
+ }
260
+ isTelephonySelectionEnableNull() {
261
+ if (this.telephonySelectionEnable === null || this.telephonySelectionEnable === undefined) {
262
+ this.telephonySelectionEnable = false;
263
+ }
264
+ }
265
+ IsForceTelephonyEnable() {
266
+ if (this.forceTelephony === true || this.forceTelephony === 'true') {
267
+ this.bsPaymentDcnNumber = null;
268
+ }
269
+ }
270
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeeSummaryComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.BulkScaningPaymentService }, { token: i3.Location }, { token: i4.PaymentViewService }, { token: 'PAYMENT_LIB' }, { token: i5.OrderslistService }], target: i0.ɵɵFactoryTarget.Component });
271
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeeSummaryComponent, selector: "ccpay-fee-summary", inputs: { paymentGroupRef: "paymentGroupRef", ccdCaseNumber: "ccdCaseNumber", isTurnOff: "isTurnOff", caseType: "caseType", telephonySelectionEnable: "telephonySelectionEnable" }, ngImport: i0, template: "\n<div class=\"govuk-breadcrumbs\" *ngIf=\"isBackButtonEnable\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\" *ngIf=\"!isTurnOff\">\n <a (click)=\"loadCaseTransactionPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n <li class=\"govuk-breadcrumbs__list-item\" *ngIf=\"isTurnOff\">\n <a (click)=\"redirectToFeeSearchPage($event,'summary')\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n</div>\n<div class=\"fee-summary\" *ngIf=\"viewStatus === 'main'\">\n <main class=\"govuk-main-wrapper\">\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='FEESUMMARY'>\n <div class=\"summaryheader\">\n <h1 class=\"heading-large govuk-!-margin-top-3 govuk-!-margin-bottom-4\">Summary</h1>\n <p class=\"govuk-!-margin-top-5 caseref\">Case reference:{{ccdCaseNumber | ccdHyphens}}</p>\n </div>\n\n <!-- <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"heading-xlarge\">Fee Summary</h1>\n </div>\n\n\n \u00A0<div\u00A0class=\"govuk-grid-column-one-third\"\u00A0align=\"right\">\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0<button\u00A0 *ngIf=\"!isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\"\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0[disabled]=\"isPaymentExist\"\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0[ngClass]='isPaymentExist ?\u00A0\"button\u00A0button--disabled govuk-!-margin-right-1\"\u00A0:\u00A0\"button govuk-!-margin-right-1\"'>\n Add a new fee\n </button>\n\n <a *ngIf=\"isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\" class=\"button\">Add a new fee</a>\n </div>\n </div> -->\n\n\n\n\n\n <div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n An error has occurred on the Fee summary page.\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <div class=\"govuk-!-margin-top-3\">\n <table class=\"govuk-table govuk-!-margin-bottom-2\" *ngIf=\"paymentGroup\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th class=\"govuk-table__header\" scope=\"col\" class=\"class600\">Description</th>\n <th class=\"govuk-table__header\" scope=\"col\" class=\"class60\">Quantity</th>\n <th class=\"govuk-table__header\" scope=\"col\" class=\"class80\"></th>\n <th class=\"govuk-table__header\" scope=\"col\" class=\"class100\">Amount</th>\n </tr>\n </thead>\n\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees\">\n <ng-container *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell\">{{ fee.description }}\n <span class=\"no-border\" *ngIf=\"(isPaymentExist || (getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount)) && !isTurnOff\">\n <a (click)=\"confirmRemoveFee(fee.id)\" *ngIf=\"(!isPaymentExist || !fee.remissions)\" [ngClass]='isPaymentExist || fee.remissions? \"disable-link\" : \"\"'> <br>Remove</a>\n </span>\n <span class=\"no-border\" *ngIf=\"(!isPaymentExist || (getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount)) && isTurnOff \">\n <a (click)=\"confirmRemoveFee(fee.id)\">Remove</a>\n </span>\n\n <a (click)=\"addRemission(fee)\" class=\"remissionActive\" *ngIf=\"(getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount) && !isPaymentExist && !isTurnOff\">\n Add help with fees or remission\n </a>\n <a (click)=\"addRemission(fee)\" class=\"remissionActive\" *ngIf=\"(getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount) && isTurnOff\">\n Add help with fees or remission\n </a>\n </td>\n <td class=\"govuk-table__cell\" *ngIf=\"fee.volume && fee.volume > 0\">\n {{ fee.volume }}\n </td>\n <td class=\"govuk-table__cell alignright\">\n <br>\n </td>\n <td class=\"govuk-table__cell alignright\" >\n {{ fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngIf=\"getRemissionByFeeCode(fee.code)?.hwf_amount > 0\">\n <td>\n <div>Remission {{ getRemissionByFeeCode(fee.code)?.hwf_reference }}</div>\n </td>\n <td>\n <div>1</div>\n </td>\n <td>\n <div></div>\n </td>\n <td>\n <div style=\"text-align: right;\">\n -{{ getRemissionByFeeCode(fee.code)?.hwf_amount? ( getRemissionByFeeCode(fee.code)?.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2') : '-' }}\n </div>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n <div class=\"addfee\">\n <button *ngIf=\"!isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\"\n [disabled]=\"isPaymentExist\"\n [ngClass]='isPaymentExist ? \"govuk-button govuk-button--secondary button--disabled\" : \"govuk-button govuk-button--secondary\"'>\n Add fee\n </button>\n <a *ngIf=\"isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\" class=\"govuk-button govuk-button--secondary\">Add a new fee</a>\n <div class=\"feeAddButton\">\n <p class=\"paddigleft govuk-!-margin-top-2\">Total to pay: {{ outStandingAmount | currency:'GBP':'symbol-narrow':'1.2-2'}}</p>\n </div>\n </div>\n\n <div class=\"summaryheader\" *ngIf=\"isTelephonySelectionEnable()\">\n <h3 class=\"heading-medium govuk-!-margin-top-3 govuk-!-margin-bottom-4\">Which system are you using to take a payment?</h3>\n </div>\n\n <div class=\"govuk-radios__item\" *ngIf=\"isTelephonySelectionEnable()\">\n <input class=\"govuk-radios__input\" id=\"paymentSystem\" name=\"paymentSystem\" type=\"radio\" [value]=\"getAntennaValue()\"\n (input)=\"setPaymentValue(getAntennaValue())\"\n />\n <label class=\"govuk-label-fee-summary govuk-radios__label govuk-!-margin-top-2\">Antenna</label>\n </div>\n\n <div class=\"govuk-radios__item\" *ngIf=\"isTelephonySelectionEnable()\">\n <input class=\"govuk-radios__input\" id=\"paymentSystem\" name=\"paymentSystem\" type=\"radio\" [value]=\"getKervValue()\"\n (input)=\"setPaymentValue(getKervValue())\"\n />\n <label class=\"govuk-label-fee-summary govuk-radios__label govuk-!-margin-top-2\">Nexus</label>\n </div>\n<!--\n <div class=\"govuk-form-group govuk-form-group--mg\" *ngIf=\"!bsPaymentDcnNumber\">\n <label class=\"govuk-label custom-govuk-label govuk-fieldset__heading--fz\" for=\"responsibleOffice\">\n <strong>What service is this fee for?</strong>\n </label>\n <select class=\"govuk-select govuk-select--custom\" id=\"responsibleOffice\" [(ngModel)]=\"service\" name=\"responsibleOffice\">\n <option value=\"\" selected='selected'>Please select</option>\n <option value=\"AA07\">Divorce</option>\n <option value=\"AA09\">Financial Remedy</option>\n <option value=\"AA08\">Probate</option>\n </select>\n </div> -->\n\n <div>\n <button *ngIf=\"!bsPaymentDcnNumber\" type=\"submit\" (click)=\"takePayment()\"\n [disabled]=\"totalFee <= 0 || isConfirmationBtnDisabled || isTakePaymentButtonDisabled()\"\n [ngClass]='totalFee <= 0 || !platForm || !service || isConfirmationBtnDisabled || isTakePaymentButtonDisabled()? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'>\n Take payment\n </button>\n <button *ngIf=\"bsPaymentDcnNumber\" type=\"button\" (click)=\"goToAllocatePage(outStandingAmount, isFeeAmountZero)\" class=\"button govuk-!-margin-right-1\">\n <span class=\"white\" *ngIf=\"outStandingAmount > 0 || (isFeeAmountZero && outStandingAmount === 0)\">\n Allocate payment\n </span>\n <span class=\"white\" *ngIf=\"outStandingAmount < 0 || (!isFeeAmountZero && outStandingAmount === 0)\">\n Continue\n </span>\n </button>\n </div>\n\n</main>\n</div>\n\n <ng-container *ngIf=\"viewStatus === 'feeRemovalConfirmation'\">\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='FEEREMOVALCONFIRMATION_1'>\n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to delete this fee?\n </strong>\n </div>\n <div class=\"govuk-button-grb\">\n <form novalidate>\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemission()\">\n Cancel\n </button>\n <button type=\"submit\" class=\"button\"\n *ngIf =\"!isRemoveBtnDisabled\"\n [ngClass]='isRemoveBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"removeFee(currentFee)\">\n Remove\n </button>\n </form>\n </div>\n </ng-container>\n<ccpay-add-remission *ngIf=\"viewStatus === 'add_remission' && currentFee\"\n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\"\n [fee]=\"currentFee\"\n [caseType]=\"caseType\"\n [ccdCaseNumber]=\"ccdCaseNumber\"\n [paymentGroupRef]=\"paymentGroupRef\"\n (cancelRemission)=\"cancelRemission()\"></ccpay-add-remission>\n <input *ngIf=\"viewStatus === 'payhub_view' && payhubHtml\" #myInput type='hidden' class='iFrameDrivenImageValue' value='PCIPAL'>\n", styles: [".fee-summary .grey-text{color:#6b7376;font-weight:500}.fee-summary .govuk-table{margin-bottom:0}.fee-summary .no-border{border:none;border-bottom:none}.fee-summary table th,.fee-summary table td{font-size:19px;vertical-align:top}.fee-summary table th .no-padding,.fee-summary table td .no-padding{padding:0}.fee-summary table th .subcolumn-1,.fee-summary table td .subcolumn-1{width:45%}.fee-summary table th .subcolumn-2,.fee-summary table td .subcolumn-2{width:25%;text-align:right}.fee-summary table th .subcolumn-3,.fee-summary table td .subcolumn-3{width:30%;text-align:center}.govuk-label-fee-summary{font-size:19px;line-height:1.3157894737}.heading-medium{font-size:20px;line-height:1.11111}table th{font-weight:700}.govuk-button-grb{padding-bottom:20px}.govuk-button-grb .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px #858688;color:#0b0c0c;margin-right:10px}.govuk-form-group--mg{margin-top:10px!important}.govuk-fieldset__heading--fz{font-size:16px}.remissionDisable{color:gray;cursor:default}.heading-xlarge{margin:0 0 14px -20px}.govuk-select--custom{width:50%}.disable-link{cursor:default;pointer-events:none;color:#8e8c8c}.govuk-table__header,.govuk-table__cell_border{padding:10px 0 0;border-top:1px solid #bfc1c3;text-align:left}.govuk-table__header,.govuk-table__cell{padding:10px 0}.govuk-table__header,.govuk-table__cell_rmborder{padding:10px 0 0;border-top:1px solid #bfc1c3;text-align:left}.govuk-table__fessheader{font-weight:700}.govuk-button{font-size:19px}.feeAddButton{padding-left:65rem}.remissionActive{padding-left:10px}.paddigleft{padding-left:2em}.govuk-back-link{font-size:1.5rem!important}.govuk-warning-text__text{font-size:19px}.summaryheader{display:flex;flex-direction:row;justify-content:space-between;width:960px}.class600{width:600px}.class60{width:60px}.class80{width:80px;text-align:right}.class100{width:100px;text-align:right}.alignright{text-align:right}.caseref{align-self:flex-end}.addfee{display:flex;flex-direction:row}.white{color:#fff}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.AddRemissionComponent, selector: "ccpay-add-remission", inputs: ["fee", "fees", "payment", "remission", "ccdCaseNumber", "caseType", "viewCompStatus", "paymentGroupRef", "isTurnOff", "isRefundRemission", "isStrategicFixEnable", "paidAmount", "isFromRefundListPage", "isFromPaymentDetailPage", "isFromServiceRequestPage", "isFullyRefund", "feeamount", "refundPaymentReference", "isFromRefundStatusPage", "changeRefundReason", "isServiceRequest", "LOGGEDINUSERROLES", "orderDetail", "orderRef", "orderStatus", "orderParty", "orderCreated", "orderCCDEvent", "takepayment", "orderFeesTotal", "orderTotalPayments", "orderRemissionTotal"], outputs: ["cancelRemission", "refundListReason", "refundListAmount", "refundFees"] }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i8.CcdHyphensPipe, name: "ccdHyphens" }] });
272
+ }
273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeeSummaryComponent, decorators: [{
274
+ type: Component,
275
+ args: [{ selector: 'ccpay-fee-summary', template: "\n<div class=\"govuk-breadcrumbs\" *ngIf=\"isBackButtonEnable\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\" *ngIf=\"!isTurnOff\">\n <a (click)=\"loadCaseTransactionPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n <li class=\"govuk-breadcrumbs__list-item\" *ngIf=\"isTurnOff\">\n <a (click)=\"redirectToFeeSearchPage($event,'summary')\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n</div>\n<div class=\"fee-summary\" *ngIf=\"viewStatus === 'main'\">\n <main class=\"govuk-main-wrapper\">\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='FEESUMMARY'>\n <div class=\"summaryheader\">\n <h1 class=\"heading-large govuk-!-margin-top-3 govuk-!-margin-bottom-4\">Summary</h1>\n <p class=\"govuk-!-margin-top-5 caseref\">Case reference:{{ccdCaseNumber | ccdHyphens}}</p>\n </div>\n\n <!-- <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"heading-xlarge\">Fee Summary</h1>\n </div>\n\n\n \u00A0<div\u00A0class=\"govuk-grid-column-one-third\"\u00A0align=\"right\">\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0<button\u00A0 *ngIf=\"!isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\"\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0[disabled]=\"isPaymentExist\"\n \u00A0\u00A0\u00A0\u00A0\u00A0\u00A0[ngClass]='isPaymentExist ?\u00A0\"button\u00A0button--disabled govuk-!-margin-right-1\"\u00A0:\u00A0\"button govuk-!-margin-right-1\"'>\n Add a new fee\n </button>\n\n <a *ngIf=\"isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\" class=\"button\">Add a new fee</a>\n </div>\n </div> -->\n\n\n\n\n\n <div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n An error has occurred on the Fee summary page.\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <div class=\"govuk-!-margin-top-3\">\n <table class=\"govuk-table govuk-!-margin-bottom-2\" *ngIf=\"paymentGroup\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <th class=\"govuk-table__header\" scope=\"col\" class=\"class600\">Description</th>\n <th class=\"govuk-table__header\" scope=\"col\" class=\"class60\">Quantity</th>\n <th class=\"govuk-table__header\" scope=\"col\" class=\"class80\"></th>\n <th class=\"govuk-table__header\" scope=\"col\" class=\"class100\">Amount</th>\n </tr>\n </thead>\n\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees\">\n <ng-container *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell\">{{ fee.description }}\n <span class=\"no-border\" *ngIf=\"(isPaymentExist || (getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount)) && !isTurnOff\">\n <a (click)=\"confirmRemoveFee(fee.id)\" *ngIf=\"(!isPaymentExist || !fee.remissions)\" [ngClass]='isPaymentExist || fee.remissions? \"disable-link\" : \"\"'> <br>Remove</a>\n </span>\n <span class=\"no-border\" *ngIf=\"(!isPaymentExist || (getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount)) && isTurnOff \">\n <a (click)=\"confirmRemoveFee(fee.id)\">Remove</a>\n </span>\n\n <a (click)=\"addRemission(fee)\" class=\"remissionActive\" *ngIf=\"(getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount) && !isPaymentExist && !isTurnOff\">\n Add help with fees or remission\n </a>\n <a (click)=\"addRemission(fee)\" class=\"remissionActive\" *ngIf=\"(getRemissionByFeeCode(fee.code)?.hwf_amount === 0 || !getRemissionByFeeCode(fee.code)?.hwf_amount) && isTurnOff\">\n Add help with fees or remission\n </a>\n </td>\n <td class=\"govuk-table__cell\" *ngIf=\"fee.volume && fee.volume > 0\">\n {{ fee.volume }}\n </td>\n <td class=\"govuk-table__cell alignright\">\n <br>\n </td>\n <td class=\"govuk-table__cell alignright\" >\n {{ fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </td>\n </tr>\n <tr class=\"govuk-table__row\" *ngIf=\"getRemissionByFeeCode(fee.code)?.hwf_amount > 0\">\n <td>\n <div>Remission {{ getRemissionByFeeCode(fee.code)?.hwf_reference }}</div>\n </td>\n <td>\n <div>1</div>\n </td>\n <td>\n <div></div>\n </td>\n <td>\n <div style=\"text-align: right;\">\n -{{ getRemissionByFeeCode(fee.code)?.hwf_amount? ( getRemissionByFeeCode(fee.code)?.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2') : '-' }}\n </div>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </div>\n <div class=\"addfee\">\n <button *ngIf=\"!isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\"\n [disabled]=\"isPaymentExist\"\n [ngClass]='isPaymentExist ? \"govuk-button govuk-button--secondary button--disabled\" : \"govuk-button govuk-button--secondary\"'>\n Add fee\n </button>\n <a *ngIf=\"isTurnOff\" (click)=\"redirectToFeeSearchPage($event,'summary')\" class=\"govuk-button govuk-button--secondary\">Add a new fee</a>\n <div class=\"feeAddButton\">\n <p class=\"paddigleft govuk-!-margin-top-2\">Total to pay: {{ outStandingAmount | currency:'GBP':'symbol-narrow':'1.2-2'}}</p>\n </div>\n </div>\n\n <div class=\"summaryheader\" *ngIf=\"isTelephonySelectionEnable()\">\n <h3 class=\"heading-medium govuk-!-margin-top-3 govuk-!-margin-bottom-4\">Which system are you using to take a payment?</h3>\n </div>\n\n <div class=\"govuk-radios__item\" *ngIf=\"isTelephonySelectionEnable()\">\n <input class=\"govuk-radios__input\" id=\"paymentSystem\" name=\"paymentSystem\" type=\"radio\" [value]=\"getAntennaValue()\"\n (input)=\"setPaymentValue(getAntennaValue())\"\n />\n <label class=\"govuk-label-fee-summary govuk-radios__label govuk-!-margin-top-2\">Antenna</label>\n </div>\n\n <div class=\"govuk-radios__item\" *ngIf=\"isTelephonySelectionEnable()\">\n <input class=\"govuk-radios__input\" id=\"paymentSystem\" name=\"paymentSystem\" type=\"radio\" [value]=\"getKervValue()\"\n (input)=\"setPaymentValue(getKervValue())\"\n />\n <label class=\"govuk-label-fee-summary govuk-radios__label govuk-!-margin-top-2\">Nexus</label>\n </div>\n<!--\n <div class=\"govuk-form-group govuk-form-group--mg\" *ngIf=\"!bsPaymentDcnNumber\">\n <label class=\"govuk-label custom-govuk-label govuk-fieldset__heading--fz\" for=\"responsibleOffice\">\n <strong>What service is this fee for?</strong>\n </label>\n <select class=\"govuk-select govuk-select--custom\" id=\"responsibleOffice\" [(ngModel)]=\"service\" name=\"responsibleOffice\">\n <option value=\"\" selected='selected'>Please select</option>\n <option value=\"AA07\">Divorce</option>\n <option value=\"AA09\">Financial Remedy</option>\n <option value=\"AA08\">Probate</option>\n </select>\n </div> -->\n\n <div>\n <button *ngIf=\"!bsPaymentDcnNumber\" type=\"submit\" (click)=\"takePayment()\"\n [disabled]=\"totalFee <= 0 || isConfirmationBtnDisabled || isTakePaymentButtonDisabled()\"\n [ngClass]='totalFee <= 0 || !platForm || !service || isConfirmationBtnDisabled || isTakePaymentButtonDisabled()? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'>\n Take payment\n </button>\n <button *ngIf=\"bsPaymentDcnNumber\" type=\"button\" (click)=\"goToAllocatePage(outStandingAmount, isFeeAmountZero)\" class=\"button govuk-!-margin-right-1\">\n <span class=\"white\" *ngIf=\"outStandingAmount > 0 || (isFeeAmountZero && outStandingAmount === 0)\">\n Allocate payment\n </span>\n <span class=\"white\" *ngIf=\"outStandingAmount < 0 || (!isFeeAmountZero && outStandingAmount === 0)\">\n Continue\n </span>\n </button>\n </div>\n\n</main>\n</div>\n\n <ng-container *ngIf=\"viewStatus === 'feeRemovalConfirmation'\">\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='FEEREMOVALCONFIRMATION_1'>\n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to delete this fee?\n </strong>\n </div>\n <div class=\"govuk-button-grb\">\n <form novalidate>\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemission()\">\n Cancel\n </button>\n <button type=\"submit\" class=\"button\"\n *ngIf =\"!isRemoveBtnDisabled\"\n [ngClass]='isRemoveBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"removeFee(currentFee)\">\n Remove\n </button>\n </form>\n </div>\n </ng-container>\n<ccpay-add-remission *ngIf=\"viewStatus === 'add_remission' && currentFee\"\n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\"\n [fee]=\"currentFee\"\n [caseType]=\"caseType\"\n [ccdCaseNumber]=\"ccdCaseNumber\"\n [paymentGroupRef]=\"paymentGroupRef\"\n (cancelRemission)=\"cancelRemission()\"></ccpay-add-remission>\n <input *ngIf=\"viewStatus === 'payhub_view' && payhubHtml\" #myInput type='hidden' class='iFrameDrivenImageValue' value='PCIPAL'>\n", styles: [".fee-summary .grey-text{color:#6b7376;font-weight:500}.fee-summary .govuk-table{margin-bottom:0}.fee-summary .no-border{border:none;border-bottom:none}.fee-summary table th,.fee-summary table td{font-size:19px;vertical-align:top}.fee-summary table th .no-padding,.fee-summary table td .no-padding{padding:0}.fee-summary table th .subcolumn-1,.fee-summary table td .subcolumn-1{width:45%}.fee-summary table th .subcolumn-2,.fee-summary table td .subcolumn-2{width:25%;text-align:right}.fee-summary table th .subcolumn-3,.fee-summary table td .subcolumn-3{width:30%;text-align:center}.govuk-label-fee-summary{font-size:19px;line-height:1.3157894737}.heading-medium{font-size:20px;line-height:1.11111}table th{font-weight:700}.govuk-button-grb{padding-bottom:20px}.govuk-button-grb .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px #858688;color:#0b0c0c;margin-right:10px}.govuk-form-group--mg{margin-top:10px!important}.govuk-fieldset__heading--fz{font-size:16px}.remissionDisable{color:gray;cursor:default}.heading-xlarge{margin:0 0 14px -20px}.govuk-select--custom{width:50%}.disable-link{cursor:default;pointer-events:none;color:#8e8c8c}.govuk-table__header,.govuk-table__cell_border{padding:10px 0 0;border-top:1px solid #bfc1c3;text-align:left}.govuk-table__header,.govuk-table__cell{padding:10px 0}.govuk-table__header,.govuk-table__cell_rmborder{padding:10px 0 0;border-top:1px solid #bfc1c3;text-align:left}.govuk-table__fessheader{font-weight:700}.govuk-button{font-size:19px}.feeAddButton{padding-left:65rem}.remissionActive{padding-left:10px}.paddigleft{padding-left:2em}.govuk-back-link{font-size:1.5rem!important}.govuk-warning-text__text{font-size:19px}.summaryheader{display:flex;flex-direction:row;justify-content:space-between;width:960px}.class600{width:600px}.class60{width:60px}.class80{width:80px;text-align:right}.class100{width:100px;text-align:right}.alignright{text-align:right}.caseref{align-self:flex-end}.addfee{display:flex;flex-direction:row}.white{color:#fff}\n"] }]
276
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.BulkScaningPaymentService }, { type: i3.Location }, { type: i4.PaymentViewService }, { type: undefined, decorators: [{
277
+ type: Inject,
278
+ args: ['PAYMENT_LIB']
279
+ }] }, { type: i5.OrderslistService }], propDecorators: { paymentGroupRef: [{
280
+ type: Input
281
+ }], ccdCaseNumber: [{
282
+ type: Input
283
+ }], isTurnOff: [{
284
+ type: Input
285
+ }], caseType: [{
286
+ type: Input
287
+ }], telephonySelectionEnable: [{
288
+ type: Input
289
+ }] } });
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF5bWVudC1saWIvc3JjL2xpYi9jb21wb25lbnRzL2ZlZS1zdW1tYXJ5L2ZlZS1zdW1tYXJ5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BheW1lbnQtbGliL3NyYy9saWIvY29tcG9uZW50cy9mZWUtc3VtbWFyeS9mZWUtc3VtbWFyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFFL0QsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sa0VBQWtFLENBQUM7QUFHM0csT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDL0UsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7QUFPcEUsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLENBQUM7QUFDL0MsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ2hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztBQVExQixNQUFNLE9BQU8sbUJBQW1CO0lBa0NwQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ3VCO0lBQ3ZCO0lBdENELGVBQWUsQ0FBUztJQUN4QixhQUFhLENBQVM7SUFDdEIsU0FBUyxDQUFTO0lBQ2xCLFFBQVEs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SUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsT0FBUSxJQUFJLENBQUMsd0JBQXdCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDcEUsQ0FBQztJQUVELDhCQUE4QjtRQUM1QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFGLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFFcEIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFNLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFNLE1BQU0sRUFBRyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7d0dBaFRVLG1CQUFtQix5S0F1Q3BCLGFBQWE7NEZBdkNaLG1CQUFtQiw2T0M1QmhDLDRpVkEyTUE7OzRGRC9LYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsbUJBQW1COzswQkE0QzFCLE1BQU07MkJBQUMsYUFBYTt5RUFyQ2QsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SVBheW1lbnRHcm91cH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudEdyb3VwJztcbmltcG9ydCB7UGF5bWVudFZpZXdTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWxrLXNjYW5pbmctcGF5bWVudC9idWxrLXNjYW5pbmctcGF5bWVudC5zZXJ2aWNlJztcbmltcG9ydCB7SVJlbWlzc2lvbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVtaXNzaW9uJztcbmltcG9ydCB7SUZlZX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRmVlJztcbmltcG9ydCB7UGF5bWVudFRvUGF5aHViUmVxdWVzdH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9QYXltZW50VG9QYXlodWJSZXF1ZXN0JztcbmltcG9ydCB7UGF5aHViQW50ZW5uYVJlcXVlc3R9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvUGF5aHViQW50ZW5uYVJlcXVlc3QnO1xuaW1wb3J0IHtTYWZlSHRtbH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtPcmRlcnNsaXN0U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5cblxudHlwZSBQYXltZW50TGliQWxpYXMgPSBQYXltZW50TGliQ29tcG9uZW50O1xuXG5cbmNvbnN0IEJTX0VOQUJMRV9GTEFHID0gJ2J1bGstc2Nhbi1lbmFibGluZy1mZSc7XG5jb25zdCBBTlRFTk5BX1ZBTFVFID0gJ0FudGVubmEnO1xuY29uc3QgS0VSVl9WQUxVRSA9ICdLZXJ2JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktZmVlLXN1bW1hcnknLFxuICB0ZW1wbGF0ZVVybDogJy4vZmVlLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mZWUtc3VtbWFyeS5jb21wb25lbnQuc2NzcyddXG59KVxuXG5leHBvcnQgY2xhc3MgRmVlU3VtbWFyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgcGF5bWVudEdyb3VwUmVmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhc2VUeXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRlbGVwaG9ueVNlbGVjdGlvbkVuYWJsZTogYm9vbGVhbjtcblxuXG4gIHBheW1lbnRNZXRob2Q6IHN0cmluZztcbiAgYnNQYXltZW50RGNuTnVtYmVyOiBzdHJpbmc7XG4gIHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cDtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIHZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIGN1cnJlbnRGZWU6IElGZWU7XG4gIHRvdGFsRmVlOiBudW1iZXI7XG4gIHBheWh1Ykh0bWw6IFNhZmVIdG1sO1xuICBzZXJ2aWNlOiBzdHJpbmcgPSBcIlwiO1xuICBwbGF0Rm9ybTogc3RyaW5nID0gXCJcIjtcbiAgdXBQYXltZW50RXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGlzQmFja0J1dHRvbkVuYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIG91dFN0YW5kaW5nQW1vdW50OiBudW1iZXI7XG4gIGlzRmVlQW1vdW50WmVybzogYm9vbGVhbiA9IGZhbHNlO1xuICB0b3RhbEFmdGVyUmVtaXNzaW9uOiBudW1iZXIgPSAwO1xuICBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVtb3ZlQnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNQYXltZW50RXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZW1pc3Npb25zRXhpc3Q6IEJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZW1pc3Npb25zTWF0Y2ggPSBmYWxzZTtcbiAgaXNTdHJhdGVnaWNGaXhFbmFibGU6IGJvb2xlYW47XG4gIGZvcmNlVGVsZXBob255OiBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBidWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlOiBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgQEluamVjdCgnUEFZTUVOVF9MSUInKSBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJBbGlhcyxcbiAgICBwcml2YXRlIE9yZGVyc2xpc3RTZXJ2aWNlOiBPcmRlcnNsaXN0U2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgICB0aGlzLmNhc2VUeXBlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNBU0VUWVBFO1xuICAgIHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbjtcbiAgICB0aGlzLmZvcmNlVGVsZXBob255ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snZm9yY2VUZWxlcGhvbnknXTtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTi50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldENhc2VUeXBlKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQVNFVFlQRSk7XG4gICAgdGhpcy5pc1RlbGVwaG9ueVNlbGVjdGlvbkVuYWJsZU51bGwoKTtcbiAgICB0aGlzLklzRm9yY2VUZWxlcGhvbnlFbmFibGUoKTtcblxuXG4gICAgdGhpcy5wbGF0Rm9ybSA9ICdBbnRlbm5hJztcblxuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgICBpZiAodGhpcy5ic1BheW1lbnREY25OdW1iZXIpIHtcbiAgICAgIHRoaXMuZ2V0VW5hc3NpZ25lZFBheW1lbnRsaXN0KCk7XG4gICAgfVxuICAgIHRoaXMuZ2V0UGF5bWVudEdyb3VwKCk7XG4gIH1cblxuICBnZXRVbmFzc2lnbmVkUGF5bWVudGxpc3QoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb24gPT09ICdkY24nKSB7XG4gICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5RENOKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSKS5zdWJzY3JpYmUoXG4gICAgICAgIHVuYXNzaWduZWRQYXltZW50cyA9PiB7XG4gICAgICAgICAgaWYgKHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnBheW1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UgPSB1bmFzc2lnbmVkUGF5bWVudHNbJ2RhdGEnXS5yZXNwb25zaWJsZV9zZXJ2aWNlX2lkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9ICdlcnJvcic7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy51cFBheW1lbnRFcnJvck1lc3NhZ2UgPSBlcnJvclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeUNDRCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgdW5hc3NpZ25lZFBheW1lbnRzID0+IHtcbiAgICAgICAgICBpZiAodW5hc3NpZ25lZFBheW1lbnRzWydkYXRhJ10ucGF5bWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSA9IHVuYXNzaWduZWRQYXltZW50c1snZGF0YSddLnJlc3BvbnNpYmxlX3NlcnZpY2VfaWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXBQYXltZW50RXJyb3JNZXNzYWdlID0gJ2Vycm9yJztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLnVwUGF5bWVudEVycm9yTWVzc2FnZSA9IGVycm9yXG4gICAgICApO1xuICAgIH1cblxuICB9XG5cbiAgZ2V0UmVtaXNzaW9uQnlGZWVDb2RlKGZlZUNvZGU6IHN0cmluZyk6IElSZW1pc3Npb24ge1xuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cCAmJiB0aGlzLnBheW1lbnRHcm91cC5yZW1pc3Npb25zICYmIHRoaXMucGF5bWVudEdyb3VwLnJlbWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCByZW1pc3Npb24gb2YgdGhpcy5wYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBpZiAocmVtaXNzaW9uLmZlZV9jb2RlID09PSBmZWVDb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlbWlzc2lvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFkZFJlbWlzc2lvbihmZWU6IElGZWUpIHtcbiAgICB0aGlzLmN1cnJlbnRGZWUgPSBmZWU7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ2FkZF9yZW1pc3Npb24nO1xuICB9XG5cbiAgZ2V0UGF5bWVudEdyb3VwKCkge1xuICAgIGxldCBmZWVzID0gW107XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0UGF5bWVudEdyb3VwRGV0YWlscyh0aGlzLnBheW1lbnRHcm91cFJlZikuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG4gICAgICAgIHRoaXMuaXNQYXltZW50RXhpc3QgPSBwYXltZW50R3JvdXAucGF5bWVudHMgPyBwYXltZW50R3JvdXAucGF5bWVudHMubGVuZ3RoID4gMCA6IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc0V4aXN0ID0gcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMgPyBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5sZW5ndGggPiAwIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgdGhpcy50b3RhbEFmdGVyUmVtaXNzaW9uID0gdGhpcy50b3RhbEFmdGVyUmVtaXNzaW9uICsgZmVlLm5ldF9hbW91bnQ7XG4gICAgICAgICAgICBpZiAoZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNGZWVBbW91bnRaZXJvID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVtLmZlZV9jb2RlID09PSBmZWUuY29kZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBmZWVbJ3JlbWlzc2lvbnMnXSA9IHJlbTtcbiAgICAgICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVtaXNzaW9uc01hdGNoKSB7XG4gICAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBheW1lbnRHcm91cC5mZWVzID0gZmVlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3V0U3RhbmRpbmdBbW91bnQgPSB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuY2FsY3VsYXRlT3V0U3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKVxuICAgICk7XG4gIH1cblxuICBjb25maXJtUmVtb3ZlRmVlKGZlZTogSUZlZSkge1xuICAgIHRoaXMuaXNSZW1vdmVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuY3VycmVudEZlZSA9IGZlZTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnZmVlUmVtb3ZhbENvbmZpcm1hdGlvbic7XG4gIH1cblxuICByZW1vdmVGZWUoZmVlOiBhbnkpIHtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmRlbGV0ZUZlZUZyb21QYXltZW50R3JvdXAoZmVlKS5zdWJzY3JpYmUoXG4gICAgICAoc3VjY2VzczogYW55KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBheW1lbnRHcm91cC5mZWVzICYmIHRoaXMucGF5bWVudEdyb3VwLmZlZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRoaXMudG90YWxBZnRlclJlbWlzc2lvbiA9IDA7XG4gICAgICAgICAgdGhpcy5nZXRQYXltZW50R3JvdXAoKTtcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbic7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAgIGZlYXR1cmVzID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGxldCBwYXJ0VXJsID0gYHNlbGVjdGVkT3B0aW9uPSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTn1gO1xuICAgIHBhcnRVcmwgKz0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQVNFVFlQRX1gO1xuXG4gICAgbGV0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnRha2VQYXltZW50PXRydWUmJHtwYXJ0VXJsfWA7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICB9XG4gIGNhbmNlbFJlbWlzc2lvbigpIHtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIH1cbiAgcmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoZXZlbnQ6IGFueSwgcGFnZT86IHN0cmluZykge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1NGRU5BQkxFID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgcGFydFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNBU0VUWVBFfWA7XG5cbiAgICBpZiAodGhpcy52aWV3U3RhdHVzID09PSAnZmVlUmVtb3ZhbENvbmZpcm1hdGlvbicgfHwgdGhpcy52aWV3U3RhdHVzID09PSAnYWRkX3JlbWlzc2lvbicpIHtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHVybCA9IGAvZmVlLXNlYXJjaD9jY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT059JnBheW1lbnRHcm91cFJlZj0ke3RoaXMucGF5bWVudEdyb3VwUmVmfSR7cGFydFVybH1gO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgfVxuICB0YWtlUGF5bWVudCgpIHtcbiAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBheW1lbnRUb1BheWh1YlJlcXVlc3QodGhpcy5jY2RDYXNlTnVtYmVyLCB0aGlzLm91dFN0YW5kaW5nQW1vdW50LCB0aGlzLmNhc2VUeXBlLCB0aGlzLnBheW1lbnRNZXRob2QpLFxuXG4gICAgICBhbnRlbm5hUmVxQm9keSA9IG5ldyBQYXlodWJBbnRlbm5hUmVxdWVzdCh0aGlzLmNjZENhc2VOdW1iZXIsIHRoaXMub3V0U3RhbmRpbmdBbW91bnQsIHRoaXMuY2FzZVR5cGUsIHRoaXMucGF5bWVudE1ldGhvZCxcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTixcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkRDTl9OVU1CRVIsXG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCxcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUudmFsdWVPZigpLFxuICAgICAgICB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlLFxuICAgICAgICB0aGlzLmlzVHVybk9mZixcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTUEFZTUVOVFNUQVRVU0VOQUJMRUQudmFsdWVPZigpLFxuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRVhDX1JFRkVSRU5DRVxuICAgICAgKTtcblxuXG4gICAgaWYgKHRoaXMucGxhdEZvcm0gPT09ICdBbnRlbm5hJykge1xuXG4gICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UGF5bWVudEFudGVubmFUb1BheUh1YihhbnRlbm5hUmVxQm9keSwgdGhpcy5wYXltZW50R3JvdXBSZWYpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHRoaXMuaXNCYWNrQnV0dG9uRW5hYmxlID0gZmFsc2U7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnL21ha2VQYXltZW50QnlUZWxlcGhvbmV5UHJvdmlkZXInO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnL3BjaS1wYWwtZmFpbHVyZScpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9BbGxvY2F0ZVBhZ2Uob3V0U3RhbmRpbmdBbW91bnQ6IG51bWJlciwgaXNGZWVBbW91bnRaZXJvOiBCb29sZWFuKSB7XG4gICAgaWYgKG91dFN0YW5kaW5nQW1vdW50ID4gMCB8fCAob3V0U3RhbmRpbmdBbW91bnQgPT09IDAgJiYgaXNGZWVBbW91bnRaZXJvKSkge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHRoaXMucGF5bWVudEdyb3VwUmVmO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2FsbG9jYXRlLXBheW1lbnRzJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2FkQ2FzZVRyYW5zYWN0aW9uUGFnZSgpO1xuICAgIH1cbiAgfVxuICBpc0NoZWNrQW1vdW50ZHVlRXhpc3QoYW1vdW50RHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGFtb3VudER1ZSA9PT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBnZXRBbnRlbm5hVmFsdWUoKSA6IHN0cmluZ3tcbiAgICByZXR1cm4gQU5URU5OQV9WQUxVRTtcbiAgfVxuXG4gIGdldEtlcnZWYWx1ZSgpIDogc3RyaW5ne1xuICAgIHJldHVybiBLRVJWX1ZBTFVFO1xuICB9XG5cbiAgZ2V0UGF5bWVudE1ldGhvZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBheW1lbnRNZXRob2Q7XG4gIH1cblxuICBzZXRQYXltZW50VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucGF5bWVudE1ldGhvZCA9IHZhbHVlO1xuICB9XG5cblxuICBpc1Rha2VQYXltZW50QnV0dG9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMudGVsZXBob255U2VsZWN0aW9uRW5hYmxlKXtcbiAgICAgIHJldHVybiAodGhpcy5wYXltZW50TWV0aG9kID09PSBudWxsIHx8IHRoaXMucGF5bWVudE1ldGhvZCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucGF5bWVudE1ldGhvZCA9PT0gJycpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc1RlbGVwaG9ueVNlbGVjdGlvbkVuYWJsZSgpIDogYm9vbGVhbntcbiAgICByZXR1cm4gIHRoaXMudGVsZXBob255U2VsZWN0aW9uRW5hYmxlICYmICF0aGlzLmJzUGF5bWVudERjbk51bWJlcjtcbiAgfVxuXG4gIGlzVGVsZXBob255U2VsZWN0aW9uRW5hYmxlTnVsbCgpIHtcbiAgICBpZiAodGhpcy50ZWxlcGhvbnlTZWxlY3Rpb25FbmFibGUgPT09IG51bGwgfHwgdGhpcy50ZWxlcGhvbnlTZWxlY3Rpb25FbmFibGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50ZWxlcGhvbnlTZWxlY3Rpb25FbmFibGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBJc0ZvcmNlVGVsZXBob255RW5hYmxlKCkge1xuXG4gICAgaWYgKHRoaXMuZm9yY2VUZWxlcGhvbnkgPT09ICB0cnVlIHx8IHRoaXMuZm9yY2VUZWxlcGhvbnkgPT09ICAndHJ1ZScgKSB7XG4gICAgICB0aGlzLmJzUGF5bWVudERjbk51bWJlciA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iLCJcbjxkaXYgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic1wiICpuZ0lmPVwiaXNCYWNrQnV0dG9uRW5hYmxlXCI+XG4gIDxvbCBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0XCI+XG4gICAgPGxpIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3QtaXRlbVwiICpuZ0lmPVwiIWlzVHVybk9mZlwiPlxuICAgICAgPGEgKGNsaWNrKT1cImxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKClcIiBjbGFzcz1cImdvdnVrLWJhY2stbGluayBnb3Z1ay1sYWJlbFwiPkJhY2s8L2E+XG4gICAgPC9saT5cbiAgICA8bGkgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdC1pdGVtXCIgKm5nSWY9XCJpc1R1cm5PZmZcIj5cbiAgICAgICAgPGEgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudCwnc3VtbWFyeScpXCIgY2xhc3M9XCJnb3Z1ay1iYWNrLWxpbmsgZ292dWstbGFiZWxcIj5CYWNrPC9hPlxuICAgICAgPC9saT5cbiAgPC9vbD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImZlZS1zdW1tYXJ5XCIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnbWFpbidcIj5cbiAgICA8bWFpbiBjbGFzcz1cImdvdnVrLW1haW4td3JhcHBlclwiPlxuICAgICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdGRUVTVU1NQVJZJz5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5aGVhZGVyXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiaGVhZGluZy1sYXJnZSBnb3Z1ay0hLW1hcmdpbi10b3AtMyBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tNFwiPlN1bW1hcnk8L2gxPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZ292dWstIS1tYXJnaW4tdG9wLTUgY2FzZXJlZlwiPkNhc2UgcmVmZXJlbmNlOnt7Y2NkQ2FzZU51bWJlciB8IGNjZEh5cGhlbnN9fTwvcD5cbiAgICAgIDwvZGl2PlxuXG4gIDwhLS0gPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHNcIj5cbiAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmcteGxhcmdlXCI+RmVlIFN1bW1hcnk8L2gxPlxuICAgIDwvZGl2PlxuXG5cbiAgICDCoDxkaXbCoGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tb25lLXRoaXJkXCLCoGFsaWduPVwicmlnaHRcIj5cbiAgICAgIMKgwqDCoMKgwqDCoDxidXR0b27CoCAqbmdJZj1cIiFpc1R1cm5PZmZcIiAoY2xpY2spPVwicmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoJGV2ZW50LCdzdW1tYXJ5JylcIlxuICAgICAgwqDCoMKgwqDCoMKgW2Rpc2FibGVkXT1cImlzUGF5bWVudEV4aXN0XCJcbiAgICAgIMKgwqDCoMKgwqDCoFtuZ0NsYXNzXT0naXNQYXltZW50RXhpc3QgP8KgXCJidXR0b27CoGJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiwqA6wqBcImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInPlxuICAgICAgICAgICAgICBBZGQgYSBuZXcgZmVlXG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGEgKm5nSWY9XCJpc1R1cm5PZmZcIiAoY2xpY2spPVwicmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoJGV2ZW50LCdzdW1tYXJ5JylcIiBjbGFzcz1cImJ1dHRvblwiPkFkZCBhIG5ldyBmZWU8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiAtLT5cblxuXG5cblxuXG4gIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZy1tZWRpdW0gZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgaWQ9XCJmYWlsdXJlLWVycm9yLXN1bW1hcnktaGVhZGluZ1wiPlxuICAgICAgICBBbiBlcnJvciBoYXMgb2NjdXJyZWQgb24gdGhlIEZlZSBzdW1tYXJ5IHBhZ2UuXG4gICAgICA8L2gyPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICAgICAge3sgZXJyb3JNZXNzYWdlIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLSEtbWFyZ2luLXRvcC0zXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZSAgZ292dWstIS1tYXJnaW4tYm90dG9tLTJcIiAqbmdJZj1cInBheW1lbnRHcm91cFwiPlxuICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiIGNsYXNzPVwiY2xhc3M2MDBcIj5EZXNjcmlwdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIiBjbGFzcz1cImNsYXNzNjBcIj5RdWFudGl0eTwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIiBjbGFzcz1cImNsYXNzODBcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJjbGFzczEwMFwiPkFtb3VudDwvdGg+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cblxuICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAuZmVlc1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmZWUgb2YgcGF5bWVudEdyb3VwLmZlZXM7IGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IGZlZS5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vLWJvcmRlclwiICpuZ0lmPVwiKGlzUGF5bWVudEV4aXN0IHx8IChnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50ID09PSAwIHx8ICFnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50KSkgJiYgIWlzVHVybk9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImNvbmZpcm1SZW1vdmVGZWUoZmVlLmlkKVwiICpuZ0lmPVwiKCFpc1BheW1lbnRFeGlzdCB8fCAhZmVlLnJlbWlzc2lvbnMpXCIgW25nQ2xhc3NdPSdpc1BheW1lbnRFeGlzdCB8fCBmZWUucmVtaXNzaW9ucz8gXCJkaXNhYmxlLWxpbmtcIiA6IFwiXCInPiA8YnI+UmVtb3ZlPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibm8tYm9yZGVyXCIgKm5nSWY9XCIoIWlzUGF5bWVudEV4aXN0IHx8IChnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50ID09PSAwIHx8ICFnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50KSkgJiYgaXNUdXJuT2ZmIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImNvbmZpcm1SZW1vdmVGZWUoZmVlLmlkKVwiPlJlbW92ZTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiYWRkUmVtaXNzaW9uKGZlZSlcIiBjbGFzcz1cInJlbWlzc2lvbkFjdGl2ZVwiICAqbmdJZj1cIihnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50ID09PSAwIHx8ICFnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50KSAmJiAhaXNQYXltZW50RXhpc3QgJiYgIWlzVHVybk9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBoZWxwIHdpdGggZmVlcyBvciByZW1pc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImFkZFJlbWlzc2lvbihmZWUpXCIgY2xhc3M9XCJyZW1pc3Npb25BY3RpdmVcIiAgICpuZ0lmPVwiKGdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQgPT09IDAgfHwgIWdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQpICYmIGlzVHVybk9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBoZWxwIHdpdGggZmVlcyBvciByZW1pc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiICpuZ0lmPVwiZmVlLnZvbHVtZSAmJiBmZWUudm9sdW1lID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmZWUudm9sdW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgYWxpZ25yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBhbGlnbnJpZ2h0XCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZmVlLmNhbGN1bGF0ZWRfYW1vdW50IHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nSWY9XCJnZXRSZW1pc3Npb25CeUZlZUNvZGUoZmVlLmNvZGUpPy5od2ZfYW1vdW50ID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5SZW1pc3Npb24ge3sgZ2V0UmVtaXNzaW9uQnlGZWVDb2RlKGZlZS5jb2RlKT8uaHdmX3JlZmVyZW5jZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj4xPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgLXt7IGdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWUuY29kZSk/Lmh3Zl9hbW91bnQ/ICggZ2V0UmVtaXNzaW9uQnlGZWVDb2RlKGZlZS5jb2RlKT8uaHdmX2Ftb3VudCAgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJykgOiAnLScgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJhZGRmZWVcIj5cbiAgICAgIDxidXR0b24gICpuZ0lmPVwiIWlzVHVybk9mZlwiIChjbGljayk9XCJyZWRpcmVjdFRvRmVlU2VhcmNoUGFnZSgkZXZlbnQsJ3N1bW1hcnknKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1BheW1lbnRFeGlzdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT0naXNQYXltZW50RXhpc3QgPyBcImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBidXR0b24tLWRpc2FibGVkXCIgOiBcImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiJz5cbiAgICAgICAgICAgICAgICBBZGQgZmVlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8YSAqbmdJZj1cImlzVHVybk9mZlwiIChjbGljayk9XCJyZWRpcmVjdFRvRmVlU2VhcmNoUGFnZSgkZXZlbnQsJ3N1bW1hcnknKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+QWRkIGEgbmV3IGZlZTwvYT5cbiAgIDxkaXYgIGNsYXNzPVwiZmVlQWRkQnV0dG9uXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJwYWRkaWdsZWZ0IGdvdnVrLSEtbWFyZ2luLXRvcC0yXCI+VG90YWwgdG8gcGF5OiB7eyBvdXRTdGFuZGluZ0Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX08L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJzdW1tYXJ5aGVhZGVyXCIgKm5nSWY9XCJpc1RlbGVwaG9ueVNlbGVjdGlvbkVuYWJsZSgpXCI+XG4gICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW0gZ292dWstIS1tYXJnaW4tdG9wLTMgZ292dWstIS1tYXJnaW4tYm90dG9tLTRcIj5XaGljaCBzeXN0ZW0gYXJlIHlvdSB1c2luZyB0byB0YWtlIGEgcGF5bWVudD88L2gzPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCIgKm5nSWY9XCJpc1RlbGVwaG9ueVNlbGVjdGlvbkVuYWJsZSgpXCI+XG4gICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwicGF5bWVudFN5c3RlbVwiIG5hbWU9XCJwYXltZW50U3lzdGVtXCIgdHlwZT1cInJhZGlvXCIgICBbdmFsdWVdPVwiZ2V0QW50ZW5uYVZhbHVlKClcIlxuICAgICAgICAgICAoaW5wdXQpPVwic2V0UGF5bWVudFZhbHVlKGdldEFudGVubmFWYWx1ZSgpKVwiXG4gICAgLz5cbiAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbC1mZWUtc3VtbWFyeSBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLSEtbWFyZ2luLXRvcC0yXCI+QW50ZW5uYTwvbGFiZWw+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIiAqbmdJZj1cImlzVGVsZXBob255U2VsZWN0aW9uRW5hYmxlKClcIj5cbiAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCIgaWQ9XCJwYXltZW50U3lzdGVtXCIgbmFtZT1cInBheW1lbnRTeXN0ZW1cIiB0eXBlPVwicmFkaW9cIiBbdmFsdWVdPVwiZ2V0S2VydlZhbHVlKClcIlxuICAgICAgICAgICAoaW5wdXQpPVwic2V0UGF5bWVudFZhbHVlKGdldEtlcnZWYWx1ZSgpKVwiXG4gICAgLz5cbiAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbC1mZWUtc3VtbWFyeSBnb3Z1ay1yYWRpb3NfX2xhYmVsIGdvdnVrLSEtbWFyZ2luLXRvcC0yXCI+TmV4dXM8L2xhYmVsPlxuICA8L2Rpdj5cbjwhLS1cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXAgZ292dWstZm9ybS1ncm91cC0tbWdcIiAqbmdJZj1cIiFic1BheW1lbnREY25OdW1iZXJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGN1c3RvbS1nb3Z1ay1sYWJlbCBnb3Z1ay1maWVsZHNldF9faGVhZGluZy0tZnpcIiBmb3I9XCJyZXNwb25zaWJsZU9mZmljZVwiPlxuICAgICAgICA8c3Ryb25nPldoYXQgc2VydmljZSBpcyB0aGlzIGZlZSBmb3I/PC9zdHJvbmc+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPHNlbGVjdCBjbGFzcz1cImdvdnVrLXNlbGVjdCBnb3Z1ay1zZWxlY3QtLWN1c3RvbVwiIGlkPVwicmVzcG9uc2libGVPZmZpY2VcIiBbKG5nTW9kZWwpXT1cInNlcnZpY2VcIiBuYW1lPVwicmVzcG9uc2libGVPZmZpY2VcIj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiIHNlbGVjdGVkPSdzZWxlY3RlZCc+UGxlYXNlIHNlbGVjdDwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQUEwN1wiPkRpdm9yY2U8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFBMDlcIj5GaW5hbmNpYWwgUmVtZWR5PC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJBQTA4XCI+UHJvYmF0ZTwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gIDwvZGl2PiAtLT5cblxuICA8ZGl2PlxuICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFic1BheW1lbnREY25OdW1iZXJcIiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cInRha2VQYXltZW50KClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidG90YWxGZWUgPD0gMCB8fCBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkIHx8IGlzVGFrZVBheW1lbnRCdXR0b25EaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPSd0b3RhbEZlZSA8PSAwIHx8ICFwbGF0Rm9ybSB8fCAhc2VydmljZSB8fCBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkIHx8IGlzVGFrZVBheW1lbnRCdXR0b25EaXNhYmxlZCgpPyBcImJ1dHRvbiBidXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiYnV0dG9uIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIic+XG4gICAgICAgIFRha2UgcGF5bWVudFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJic1BheW1lbnREY25OdW1iZXJcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImdvVG9BbGxvY2F0ZVBhZ2Uob3V0U3RhbmRpbmdBbW91bnQsIGlzRmVlQW1vdW50WmVybylcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIndoaXRlXCIgKm5nSWY9XCJvdXRTdGFuZGluZ0Ftb3VudCA+IDAgfHwgKGlzRmVlQW1vdW50WmVybyAmJiBvdXRTdGFuZGluZ0Ftb3VudCA9PT0gMClcIj5cbiAgICAgICAgQWxsb2NhdGUgcGF5bWVudFxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ3aGl0ZVwiICpuZ0lmPVwib3V0U3RhbmRpbmdBbW91bnQgPCAwIHx8ICghaXNGZWVBbW91bnRaZXJvICYmIG91dFN0YW5kaW5nQW1vdW50ID09PSAwKVwiPlxuICAgICAgICBDb250aW51ZVxuICAgICAgPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuPC9tYWluPlxuPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdmZWVSZW1vdmFsQ29uZmlybWF0aW9uJ1wiPlxuICAgIDxpbnB1dCAjbXlJbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdpRnJhbWVEcml2ZW5JbWFnZVZhbHVlJyB2YWx1ZT0nRkVFUkVNT1ZBTENPTkZJUk1BVElPTl8xJz5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4hPC9zcGFuPlxuICAgICAgICA8c3Ryb25nIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X190ZXh0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2Fzc2lzdGl2ZVwiPldhcm5pbmc8L3NwYW4+XG4gICAgICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGZlZT9cbiAgICAgICAgPC9zdHJvbmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tZ3JiXCI+XG4gICAgICAgIDxmb3JtIG5vdmFsaWRhdGU+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsUmVtaXNzaW9uKClcIj5cbiAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uXCJcbiAgICAgICAgICAqbmdJZiA9XCIhaXNSZW1vdmVCdG5EaXNhYmxlZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPSdpc1JlbW92ZUJ0bkRpc2FibGVkID8gXCJidXR0b24gYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInXG4gICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZlZShjdXJyZW50RmVlKVwiPlxuICAgICAgICAgICAgUmVtb3ZlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPGNjcGF5LWFkZC1yZW1pc3Npb24gKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnYWRkX3JlbWlzc2lvbicgJiYgY3VycmVudEZlZVwiXG4gW2lzVHVybk9mZl09XCJpc1R1cm5PZmZcIlxuIFtpc1N0cmF0ZWdpY0ZpeEVuYWJsZV09XCJpc1N0cmF0ZWdpY0ZpeEVuYWJsZVwiXG4gW2ZlZV09XCJjdXJyZW50RmVlXCJcbiBbY2FzZVR5cGVdPVwiY2FzZVR5cGVcIlxuIFtjY2RDYXNlTnVtYmVyXT1cImNjZENhc2VOdW1iZXJcIlxuIFtwYXltZW50R3JvdXBSZWZdPVwicGF5bWVudEdyb3VwUmVmXCJcbiAoY2FuY2VsUmVtaXNzaW9uKT1cImNhbmNlbFJlbWlzc2lvbigpXCI+PC9jY3BheS1hZGQtcmVtaXNzaW9uPlxuIDxpbnB1dCAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdwYXlodWJfdmlldycgJiYgcGF5aHViSHRtbFwiICNteUlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdQQ0lQQUwnPlxuIl19