@hmcts/ccpay-web-component 5.0.12 → 5.1.0

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 (389) hide show
  1. package/bundles/hmcts-ccpay-web-component.umd.js +5091 -8699
  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 +2 -6
  6. package/esm2015/lib/components/add-remission/add-remission.component.js +33 -406
  7. package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +37 -348
  8. package/esm2015/lib/components/card-details/card-details.component.js +3 -46
  9. package/esm2015/lib/components/case-transactions/case-transactions.component.js +106 -686
  10. package/esm2015/lib/components/error-banner/error-banner.component.js +2 -14
  11. package/esm2015/lib/components/fee-summary/fee-summary.component.js +28 -254
  12. package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +22 -180
  13. package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +26 -224
  14. package/esm2015/lib/components/page-not-found.component.js +2 -6
  15. package/esm2015/lib/components/payment-list/payment-list.component.js +3 -47
  16. package/esm2015/lib/components/payment-view/payment-view.component.js +38 -335
  17. package/esm2015/lib/components/pba-details/pba-details.component.js +3 -15
  18. package/esm2015/lib/components/pba-payment/pba-payment.component.js +12 -119
  19. package/esm2015/lib/components/process-refund/process-refund.component.js +15 -177
  20. package/esm2015/lib/components/processed-payments/processed-payments.component.js +3 -41
  21. package/esm2015/lib/components/refund-list/refund-list.component.js +9 -77
  22. package/esm2015/lib/components/refund-status/refund-status.component.js +25 -257
  23. package/esm2015/lib/components/reports/reports.component.js +20 -211
  24. package/esm2015/lib/components/service-request/service-request.component.js +35 -369
  25. package/esm2015/lib/components/status-history/status-history.component.js +4 -44
  26. package/esm2015/lib/components/table/table.component.js +5 -105
  27. package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +12 -184
  28. package/esm2015/lib/interfaces/AddRemissionRequest.js +1 -28
  29. package/esm2015/lib/interfaces/AddRetroRemissionRequest.js +1 -15
  30. package/esm2015/lib/interfaces/AllocatePaymentRequest.js +1 -42
  31. package/esm2015/lib/interfaces/IAllocationPaymentsRequest.js +1 -26
  32. package/esm2015/lib/interfaces/IBSPayments.js +2 -45
  33. package/esm2015/lib/interfaces/ICardDetails.js +2 -21
  34. package/esm2015/lib/interfaces/IFee.js +2 -53
  35. package/esm2015/lib/interfaces/IOrderReferenceFee.js +2 -25
  36. package/esm2015/lib/interfaces/IPatchRefundAction.js +2 -15
  37. package/esm2015/lib/interfaces/IPayment.js +2 -65
  38. package/esm2015/lib/interfaces/IPaymentFailure.js +2 -33
  39. package/esm2015/lib/interfaces/IPaymentGroup.js +2 -19
  40. package/esm2015/lib/interfaces/IPaymentStatus.js +1 -25
  41. package/esm2015/lib/interfaces/IPaymentView.js +2 -17
  42. package/esm2015/lib/interfaces/IPayments.js +2 -13
  43. package/esm2015/lib/interfaces/IRefundAction.js +2 -15
  44. package/esm2015/lib/interfaces/IRefundList.js +2 -29
  45. package/esm2015/lib/interfaces/IRefundReasons.js +2 -19
  46. package/esm2015/lib/interfaces/IRefundRejectReason.js +2 -15
  47. package/esm2015/lib/interfaces/IRefundStatus.js +2 -23
  48. package/esm2015/lib/interfaces/IRefundStatusHistory.js +2 -15
  49. package/esm2015/lib/interfaces/IRemission.js +2 -25
  50. package/esm2015/lib/interfaces/IResubmitRefundRequest.js +1 -15
  51. package/esm2015/lib/interfaces/IStatusHistories.js +2 -19
  52. package/esm2015/lib/interfaces/IStatusHistory.js +2 -21
  53. package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +1 -16
  54. package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +1 -23
  55. package/esm2015/lib/interfaces/IssueRefundRequest.js +1 -18
  56. package/esm2015/lib/interfaces/PayhubAntennaRequest.js +2 -21
  57. package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +2 -27
  58. package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +1 -12
  59. package/esm2015/lib/interfaces/PostRefundRetroRemission.js +1 -15
  60. package/esm2015/lib/interfaces/RefundsRequest.js +1 -15
  61. package/esm2015/lib/interfaces/UnidentifiedPaymentsRequest.js +1 -20
  62. package/esm2015/lib/interfaces/UnsolicitedPaymentsRequest.js +1 -29
  63. package/esm2015/lib/payment-lib.component.js +2 -147
  64. package/esm2015/lib/payment-lib.module.js +1 -5
  65. package/esm2015/lib/payment-lib.service.js +2 -45
  66. package/esm2015/lib/pipes/capitalize.pipe.js +1 -11
  67. package/esm2015/lib/pipes/ccd-hyphens.pipe.js +1 -12
  68. package/esm2015/lib/pipes/key-value.pipe.js +1 -11
  69. package/esm2015/lib/pipes/sanitize-html.pipe.js +1 -20
  70. package/esm2015/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +9 -102
  71. package/esm2015/lib/services/card-details/card-details.service.js +2 -39
  72. package/esm2015/lib/services/case-transactions/case-transactions.service.js +2 -39
  73. package/esm2015/lib/services/orderslist.service.js +2 -251
  74. package/esm2015/lib/services/payment-list/payment-list.service.js +2 -42
  75. package/esm2015/lib/services/payment-view/payment-view.service.js +3 -168
  76. package/esm2015/lib/services/refunds/refunds.service.js +7 -109
  77. package/esm2015/lib/services/shared/error-handler.service.js +4 -21
  78. package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +6 -82
  79. package/esm2015/lib/services/shared/logger/console-logger.service.js +3 -27
  80. package/esm2015/lib/services/shared/logger/logger.service.js +3 -35
  81. package/esm2015/lib/services/status-history/status-history.service.js +2 -40
  82. package/esm2015/lib/services/xl-file/xl-file.service.js +2 -60
  83. package/esm2015/public_api.js +4 -8
  84. package/fesm2015/hmcts-ccpay-web-component.js +540 -3545
  85. package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
  86. package/hmcts-ccpay-web-component.d.ts +1 -0
  87. package/hmcts-ccpay-web-component.d.ts.map +1 -0
  88. package/hmcts-ccpay-web-component.metadata.json +1 -1
  89. package/lib/components/add-remission/add-remission.component.d.ts +1 -0
  90. package/lib/components/add-remission/add-remission.component.d.ts.map +1 -0
  91. package/lib/components/add-remission/add-remission.component.ngfactory.d.ts.map +1 -0
  92. package/lib/components/add-remission/add-remission.component.scss.shim.ngstyle.d.ts.map +1 -0
  93. package/lib/components/allocate-payments/allocate-payments.component.d.ts +1 -0
  94. package/lib/components/allocate-payments/allocate-payments.component.d.ts.map +1 -0
  95. package/lib/components/allocate-payments/allocate-payments.component.ngfactory.d.ts.map +1 -0
  96. package/lib/components/allocate-payments/allocate-payments.component.scss.shim.ngstyle.d.ts.map +1 -0
  97. package/lib/components/card-details/card-details.component.css.shim.ngstyle.d.ts.map +1 -0
  98. package/lib/components/card-details/card-details.component.d.ts +2 -1
  99. package/lib/components/card-details/card-details.component.d.ts.map +1 -0
  100. package/lib/components/card-details/card-details.component.ngfactory.d.ts.map +1 -0
  101. package/lib/components/case-transactions/case-transactions.component.css.shim.ngstyle.d.ts.map +1 -0
  102. package/lib/components/case-transactions/case-transactions.component.d.ts +2 -1
  103. package/lib/components/case-transactions/case-transactions.component.d.ts.map +1 -0
  104. package/lib/components/case-transactions/case-transactions.component.ngfactory.d.ts.map +1 -0
  105. package/lib/components/error-banner/error-banner.component.d.ts +1 -0
  106. package/lib/components/error-banner/error-banner.component.d.ts.map +1 -0
  107. package/lib/components/error-banner/error-banner.component.ngfactory.d.ts.map +1 -0
  108. package/lib/components/error-banner/error-banner.component.scss.shim.ngstyle.d.ts.map +1 -0
  109. package/lib/components/fee-summary/fee-summary.component.d.ts +1 -0
  110. package/lib/components/fee-summary/fee-summary.component.d.ts.map +1 -0
  111. package/lib/components/fee-summary/fee-summary.component.ngfactory.d.ts.map +1 -0
  112. package/lib/components/fee-summary/fee-summary.component.scss.shim.ngstyle.d.ts.map +1 -0
  113. package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +1 -0
  114. package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts.map +1 -0
  115. package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.ngfactory.d.ts.map +1 -0
  116. package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.scss.shim.ngstyle.d.ts.map +1 -0
  117. package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +1 -0
  118. package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts.map +1 -0
  119. package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.ngfactory.d.ts.map +1 -0
  120. package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.scss.shim.ngstyle.d.ts.map +1 -0
  121. package/lib/components/page-not-found.component.d.ts +1 -0
  122. package/lib/components/page-not-found.component.d.ts.map +1 -0
  123. package/lib/components/page-not-found.component.ngfactory.d.ts.map +1 -0
  124. package/lib/components/payment-list/payment-list.component.css.shim.ngstyle.d.ts.map +1 -0
  125. package/lib/components/payment-list/payment-list.component.d.ts +1 -0
  126. package/lib/components/payment-list/payment-list.component.d.ts.map +1 -0
  127. package/lib/components/payment-list/payment-list.component.ngfactory.d.ts.map +1 -0
  128. package/lib/components/payment-view/payment-view.component.css.shim.ngstyle.d.ts.map +1 -0
  129. package/lib/components/payment-view/payment-view.component.d.ts +3 -2
  130. package/lib/components/payment-view/payment-view.component.d.ts.map +1 -0
  131. package/lib/components/payment-view/payment-view.component.ngfactory.d.ts.map +1 -0
  132. package/lib/components/pba-details/pba-details.component.css.shim.ngstyle.d.ts.map +1 -0
  133. package/lib/components/pba-details/pba-details.component.d.ts +1 -0
  134. package/lib/components/pba-details/pba-details.component.d.ts.map +1 -0
  135. package/lib/components/pba-details/pba-details.component.ngfactory.d.ts.map +1 -0
  136. package/lib/components/pba-payment/pba-payment.component.d.ts +1 -0
  137. package/lib/components/pba-payment/pba-payment.component.d.ts.map +1 -0
  138. package/lib/components/pba-payment/pba-payment.component.ngfactory.d.ts.map +1 -0
  139. package/lib/components/pba-payment/pba-payment.component.scss.shim.ngstyle.d.ts.map +1 -0
  140. package/lib/components/process-refund/process-refund.component.css.shim.ngstyle.d.ts.map +1 -0
  141. package/lib/components/process-refund/process-refund.component.d.ts +1 -0
  142. package/lib/components/process-refund/process-refund.component.d.ts.map +1 -0
  143. package/lib/components/process-refund/process-refund.component.ngfactory.d.ts.map +1 -0
  144. package/lib/components/processed-payments/processed-payments.component.d.ts +1 -0
  145. package/lib/components/processed-payments/processed-payments.component.d.ts.map +1 -0
  146. package/lib/components/processed-payments/processed-payments.component.ngfactory.d.ts.map +1 -0
  147. package/lib/components/processed-payments/processed-payments.component.scss.shim.ngstyle.d.ts.map +1 -0
  148. package/lib/components/refund-list/refund-list.component.css.shim.ngstyle.d.ts.map +1 -0
  149. package/lib/components/refund-list/refund-list.component.d.ts +1 -0
  150. package/lib/components/refund-list/refund-list.component.d.ts.map +1 -0
  151. package/lib/components/refund-list/refund-list.component.ngfactory.d.ts.map +1 -0
  152. package/lib/components/refund-status/refund-status.component.css.shim.ngstyle.d.ts.map +1 -0
  153. package/lib/components/refund-status/refund-status.component.d.ts +2 -1
  154. package/lib/components/refund-status/refund-status.component.d.ts.map +1 -0
  155. package/lib/components/refund-status/refund-status.component.ngfactory.d.ts.map +1 -0
  156. package/lib/components/reports/reports.component.d.ts +1 -0
  157. package/lib/components/reports/reports.component.d.ts.map +1 -0
  158. package/lib/components/reports/reports.component.ngfactory.d.ts.map +1 -0
  159. package/lib/components/reports/reports.component.scss.shim.ngstyle.d.ts.map +1 -0
  160. package/lib/components/service-request/service-request.component.css.shim.ngstyle.d.ts.map +1 -0
  161. package/lib/components/service-request/service-request.component.d.ts +1 -0
  162. package/lib/components/service-request/service-request.component.d.ts.map +1 -0
  163. package/lib/components/service-request/service-request.component.ngfactory.d.ts.map +1 -0
  164. package/lib/components/status-history/status-history.component.css.shim.ngstyle.d.ts.map +1 -0
  165. package/lib/components/status-history/status-history.component.d.ts +1 -0
  166. package/lib/components/status-history/status-history.component.d.ts.map +1 -0
  167. package/lib/components/status-history/status-history.component.ngfactory.d.ts.map +1 -0
  168. package/lib/components/table/table.component.css.shim.ngstyle.d.ts.map +1 -0
  169. package/lib/components/table/table.component.d.ts +1 -0
  170. package/lib/components/table/table.component.d.ts.map +1 -0
  171. package/lib/components/table/table.component.ngfactory.d.ts.map +1 -0
  172. package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +1 -0
  173. package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts.map +1 -0
  174. package/lib/components/unprocessed-payments/unprocessed-payments.component.ngfactory.d.ts.map +1 -0
  175. package/lib/components/unprocessed-payments/unprocessed-payments.component.scss.shim.ngstyle.d.ts.map +1 -0
  176. package/lib/interfaces/AddRemissionRequest.d.ts +1 -0
  177. package/lib/interfaces/AddRemissionRequest.d.ts.map +1 -0
  178. package/lib/interfaces/AddRetroRemissionRequest.d.ts +1 -0
  179. package/lib/interfaces/AddRetroRemissionRequest.d.ts.map +1 -0
  180. package/lib/interfaces/AllocatePaymentRequest.d.ts +1 -0
  181. package/lib/interfaces/AllocatePaymentRequest.d.ts.map +1 -0
  182. package/lib/interfaces/IAllocationPaymentsRequest.d.ts +1 -0
  183. package/lib/interfaces/IAllocationPaymentsRequest.d.ts.map +1 -0
  184. package/lib/interfaces/IBSPayments.d.ts +1 -0
  185. package/lib/interfaces/IBSPayments.d.ts.map +1 -0
  186. package/lib/interfaces/ICardDetails.d.ts +1 -0
  187. package/lib/interfaces/ICardDetails.d.ts.map +1 -0
  188. package/lib/interfaces/IFee.d.ts +1 -0
  189. package/lib/interfaces/IFee.d.ts.map +1 -0
  190. package/lib/interfaces/IOrderReferenceFee.d.ts +1 -0
  191. package/lib/interfaces/IOrderReferenceFee.d.ts.map +1 -0
  192. package/lib/interfaces/IPatchRefundAction.d.ts +1 -0
  193. package/lib/interfaces/IPatchRefundAction.d.ts.map +1 -0
  194. package/lib/interfaces/IPayment.d.ts +1 -0
  195. package/lib/interfaces/IPayment.d.ts.map +1 -0
  196. package/lib/interfaces/IPaymentFailure.d.ts +1 -0
  197. package/lib/interfaces/IPaymentFailure.d.ts.map +1 -0
  198. package/lib/interfaces/IPaymentGroup.d.ts +1 -0
  199. package/lib/interfaces/IPaymentGroup.d.ts.map +1 -0
  200. package/lib/interfaces/IPaymentStatus.d.ts +1 -0
  201. package/lib/interfaces/IPaymentStatus.d.ts.map +1 -0
  202. package/lib/interfaces/IPaymentView.d.ts +1 -0
  203. package/lib/interfaces/IPaymentView.d.ts.map +1 -0
  204. package/lib/interfaces/IPayments.d.ts +1 -0
  205. package/lib/interfaces/IPayments.d.ts.map +1 -0
  206. package/lib/interfaces/IRefundAction.d.ts +1 -0
  207. package/lib/interfaces/IRefundAction.d.ts.map +1 -0
  208. package/lib/interfaces/IRefundList.d.ts +1 -0
  209. package/lib/interfaces/IRefundList.d.ts.map +1 -0
  210. package/lib/interfaces/IRefundReasons.d.ts +1 -0
  211. package/lib/interfaces/IRefundReasons.d.ts.map +1 -0
  212. package/lib/interfaces/IRefundRejectReason.d.ts +1 -0
  213. package/lib/interfaces/IRefundRejectReason.d.ts.map +1 -0
  214. package/lib/interfaces/IRefundStatus.d.ts +1 -0
  215. package/lib/interfaces/IRefundStatus.d.ts.map +1 -0
  216. package/lib/interfaces/IRefundStatusHistory.d.ts +1 -0
  217. package/lib/interfaces/IRefundStatusHistory.d.ts.map +1 -0
  218. package/lib/interfaces/IRemission.d.ts +1 -0
  219. package/lib/interfaces/IRemission.d.ts.map +1 -0
  220. package/lib/interfaces/IResubmitRefundRequest.d.ts +1 -0
  221. package/lib/interfaces/IResubmitRefundRequest.d.ts.map +1 -0
  222. package/lib/interfaces/IStatusHistories.d.ts +1 -0
  223. package/lib/interfaces/IStatusHistories.d.ts.map +1 -0
  224. package/lib/interfaces/IStatusHistory.d.ts +1 -0
  225. package/lib/interfaces/IStatusHistory.d.ts.map +1 -0
  226. package/lib/interfaces/IserviceRequestCardPayment.d.ts +1 -0
  227. package/lib/interfaces/IserviceRequestCardPayment.d.ts.map +1 -0
  228. package/lib/interfaces/IserviceRequestPbaPayment.d.ts +1 -0
  229. package/lib/interfaces/IserviceRequestPbaPayment.d.ts.map +1 -0
  230. package/lib/interfaces/IssueRefundRequest.d.ts +1 -0
  231. package/lib/interfaces/IssueRefundRequest.d.ts.map +1 -0
  232. package/lib/interfaces/PayhubAntennaRequest.d.ts +1 -0
  233. package/lib/interfaces/PayhubAntennaRequest.d.ts.map +1 -0
  234. package/lib/interfaces/PaymentToPayhubRequest.d.ts +1 -0
  235. package/lib/interfaces/PaymentToPayhubRequest.d.ts.map +1 -0
  236. package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +1 -0
  237. package/lib/interfaces/PostIssueRefundRetroRemission.d.ts.map +1 -0
  238. package/lib/interfaces/PostRefundRetroRemission.d.ts +1 -0
  239. package/lib/interfaces/PostRefundRetroRemission.d.ts.map +1 -0
  240. package/lib/interfaces/RefundsRequest.d.ts +1 -0
  241. package/lib/interfaces/RefundsRequest.d.ts.map +1 -0
  242. package/lib/interfaces/UnidentifiedPaymentsRequest.d.ts +1 -0
  243. package/lib/interfaces/UnidentifiedPaymentsRequest.d.ts.map +1 -0
  244. package/lib/interfaces/UnsolicitedPaymentsRequest.d.ts +1 -0
  245. package/lib/interfaces/UnsolicitedPaymentsRequest.d.ts.map +1 -0
  246. package/lib/payment-lib.component.d.ts +1 -0
  247. package/lib/payment-lib.component.d.ts.map +1 -0
  248. package/lib/payment-lib.component.ngfactory.d.ts.map +1 -0
  249. package/lib/payment-lib.module.d.ts +1 -0
  250. package/lib/payment-lib.module.d.ts.map +1 -0
  251. package/lib/payment-lib.module.ngfactory.d.ts.map +1 -0
  252. package/lib/payment-lib.service.d.ts +1 -0
  253. package/lib/payment-lib.service.d.ts.map +1 -0
  254. package/lib/payment-lib.service.ngfactory.d.ts.map +1 -0
  255. package/lib/pipes/capitalize.pipe.d.ts +1 -0
  256. package/lib/pipes/capitalize.pipe.d.ts.map +1 -0
  257. package/lib/pipes/capitalize.pipe.ngfactory.d.ts.map +1 -0
  258. package/lib/pipes/ccd-hyphens.pipe.d.ts +1 -0
  259. package/lib/pipes/ccd-hyphens.pipe.d.ts.map +1 -0
  260. package/lib/pipes/ccd-hyphens.pipe.ngfactory.d.ts.map +1 -0
  261. package/lib/pipes/key-value.pipe.d.ts +1 -0
  262. package/lib/pipes/key-value.pipe.d.ts.map +1 -0
  263. package/lib/pipes/key-value.pipe.ngfactory.d.ts.map +1 -0
  264. package/lib/pipes/sanitize-html.pipe.d.ts +1 -0
  265. package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -0
  266. package/lib/pipes/sanitize-html.pipe.ngfactory.d.ts.map +1 -0
  267. package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +1 -0
  268. package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts.map +1 -0
  269. package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.ngfactory.d.ts.map +1 -0
  270. package/lib/services/card-details/card-details.service.d.ts +1 -0
  271. package/lib/services/card-details/card-details.service.d.ts.map +1 -0
  272. package/lib/services/card-details/card-details.service.ngfactory.d.ts.map +1 -0
  273. package/lib/services/case-transactions/case-transactions.service.d.ts +1 -0
  274. package/lib/services/case-transactions/case-transactions.service.d.ts.map +1 -0
  275. package/lib/services/case-transactions/case-transactions.service.ngfactory.d.ts.map +1 -0
  276. package/lib/services/orderslist.service.d.ts +1 -0
  277. package/lib/services/orderslist.service.d.ts.map +1 -0
  278. package/lib/services/orderslist.service.ngfactory.d.ts.map +1 -0
  279. package/lib/services/payment-list/payment-list.service.d.ts +1 -0
  280. package/lib/services/payment-list/payment-list.service.d.ts.map +1 -0
  281. package/lib/services/payment-list/payment-list.service.ngfactory.d.ts.map +1 -0
  282. package/lib/services/payment-view/payment-view.service.d.ts +1 -0
  283. package/lib/services/payment-view/payment-view.service.d.ts.map +1 -0
  284. package/lib/services/payment-view/payment-view.service.ngfactory.d.ts.map +1 -0
  285. package/lib/services/refunds/refunds.service.d.ts +1 -0
  286. package/lib/services/refunds/refunds.service.d.ts.map +1 -0
  287. package/lib/services/refunds/refunds.service.ngfactory.d.ts.map +1 -0
  288. package/lib/services/shared/error-handler.service.d.ts +2 -1
  289. package/lib/services/shared/error-handler.service.d.ts.map +1 -0
  290. package/lib/services/shared/error-handler.service.ngfactory.d.ts.map +1 -0
  291. package/lib/services/shared/httpclient/webcomponent.http.client.d.ts +1 -0
  292. package/lib/services/shared/httpclient/webcomponent.http.client.d.ts.map +1 -0
  293. package/lib/services/shared/httpclient/webcomponent.http.client.ngfactory.d.ts.map +1 -0
  294. package/lib/services/shared/logger/console-logger.service.d.ts +4 -3
  295. package/lib/services/shared/logger/console-logger.service.d.ts.map +1 -0
  296. package/lib/services/shared/logger/console-logger.service.ngfactory.d.ts.map +1 -0
  297. package/lib/services/shared/logger/logger.service.d.ts +1 -0
  298. package/lib/services/shared/logger/logger.service.d.ts.map +1 -0
  299. package/lib/services/shared/logger/logger.service.ngfactory.d.ts.map +1 -0
  300. package/lib/services/status-history/status-history.service.d.ts +1 -0
  301. package/lib/services/status-history/status-history.service.d.ts.map +1 -0
  302. package/lib/services/status-history/status-history.service.ngfactory.d.ts.map +1 -0
  303. package/lib/services/xl-file/xl-file.service.d.ts +1 -0
  304. package/lib/services/xl-file/xl-file.service.d.ts.map +1 -0
  305. package/lib/services/xl-file/xl-file.service.ngfactory.d.ts.map +1 -0
  306. package/package.json +6 -8
  307. package/public_api.d.ts +1 -0
  308. package/public_api.d.ts.map +1 -0
  309. package/esm5/hmcts-ccpay-web-component.js +0 -48
  310. package/esm5/lib/components/add-remission/add-remission.component.js +0 -1146
  311. package/esm5/lib/components/allocate-payments/allocate-payments.component.js +0 -745
  312. package/esm5/lib/components/card-details/card-details.component.js +0 -77
  313. package/esm5/lib/components/case-transactions/case-transactions.component.js +0 -1448
  314. package/esm5/lib/components/error-banner/error-banner.component.js +0 -36
  315. package/esm5/lib/components/fee-summary/fee-summary.component.js +0 -504
  316. package/esm5/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +0 -371
  317. package/esm5/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +0 -474
  318. package/esm5/lib/components/page-not-found.component.js +0 -17
  319. package/esm5/lib/components/payment-list/payment-list.component.js +0 -83
  320. package/esm5/lib/components/payment-view/payment-view.component.js +0 -673
  321. package/esm5/lib/components/pba-details/pba-details.component.js +0 -36
  322. package/esm5/lib/components/pba-payment/pba-payment.component.js +0 -269
  323. package/esm5/lib/components/process-refund/process-refund.component.js +0 -536
  324. package/esm5/lib/components/processed-payments/processed-payments.component.js +0 -83
  325. package/esm5/lib/components/refund-list/refund-list.component.js +0 -130
  326. package/esm5/lib/components/refund-status/refund-status.component.js +0 -554
  327. package/esm5/lib/components/reports/reports.component.js +0 -515
  328. package/esm5/lib/components/service-request/service-request.component.js +0 -690
  329. package/esm5/lib/components/status-history/status-history.component.js +0 -70
  330. package/esm5/lib/components/table/table.component.js +0 -229
  331. package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +0 -418
  332. package/esm5/lib/interfaces/AddRemissionRequest.js +0 -32
  333. package/esm5/lib/interfaces/AddRetroRemissionRequest.js +0 -19
  334. package/esm5/lib/interfaces/AllocatePaymentRequest.js +0 -63
  335. package/esm5/lib/interfaces/IAllocationPaymentsRequest.js +0 -34
  336. package/esm5/lib/interfaces/IBSPayments.js +0 -45
  337. package/esm5/lib/interfaces/ICardDetails.js +0 -21
  338. package/esm5/lib/interfaces/IFee.js +0 -53
  339. package/esm5/lib/interfaces/IOrderReferenceFee.js +0 -25
  340. package/esm5/lib/interfaces/IPatchRefundAction.js +0 -15
  341. package/esm5/lib/interfaces/IPayment.js +0 -65
  342. package/esm5/lib/interfaces/IPaymentFailure.js +0 -33
  343. package/esm5/lib/interfaces/IPaymentGroup.js +0 -19
  344. package/esm5/lib/interfaces/IPaymentStatus.js +0 -31
  345. package/esm5/lib/interfaces/IPaymentView.js +0 -17
  346. package/esm5/lib/interfaces/IPayments.js +0 -13
  347. package/esm5/lib/interfaces/IRefundAction.js +0 -15
  348. package/esm5/lib/interfaces/IRefundList.js +0 -29
  349. package/esm5/lib/interfaces/IRefundReasons.js +0 -19
  350. package/esm5/lib/interfaces/IRefundRejectReason.js +0 -15
  351. package/esm5/lib/interfaces/IRefundStatus.js +0 -23
  352. package/esm5/lib/interfaces/IRefundStatusHistory.js +0 -15
  353. package/esm5/lib/interfaces/IRemission.js +0 -25
  354. package/esm5/lib/interfaces/IResubmitRefundRequest.js +0 -19
  355. package/esm5/lib/interfaces/IStatusHistories.js +0 -19
  356. package/esm5/lib/interfaces/IStatusHistory.js +0 -21
  357. package/esm5/lib/interfaces/IserviceRequestCardPayment.js +0 -22
  358. package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +0 -28
  359. package/esm5/lib/interfaces/IssueRefundRequest.js +0 -22
  360. package/esm5/lib/interfaces/PayhubAntennaRequest.js +0 -25
  361. package/esm5/lib/interfaces/PaymentToPayhubRequest.js +0 -34
  362. package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +0 -16
  363. package/esm5/lib/interfaces/PostRefundRetroRemission.js +0 -19
  364. package/esm5/lib/interfaces/RefundsRequest.js +0 -19
  365. package/esm5/lib/interfaces/UnidentifiedPaymentsRequest.js +0 -28
  366. package/esm5/lib/interfaces/UnsolicitedPaymentsRequest.js +0 -37
  367. package/esm5/lib/payment-lib.component.js +0 -237
  368. package/esm5/lib/payment-lib.module.js +0 -103
  369. package/esm5/lib/payment-lib.service.js +0 -111
  370. package/esm5/lib/pipes/capitalize.pipe.js +0 -32
  371. package/esm5/lib/pipes/ccd-hyphens.pipe.js +0 -37
  372. package/esm5/lib/pipes/key-value.pipe.js +0 -37
  373. package/esm5/lib/pipes/sanitize-html.pipe.js +0 -39
  374. package/esm5/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +0 -218
  375. package/esm5/lib/services/card-details/card-details.service.js +0 -76
  376. package/esm5/lib/services/case-transactions/case-transactions.service.js +0 -76
  377. package/esm5/lib/services/orderslist.service.js +0 -531
  378. package/esm5/lib/services/payment-list/payment-list.service.js +0 -80
  379. package/esm5/lib/services/payment-view/payment-view.service.js +0 -416
  380. package/esm5/lib/services/refunds/refunds.service.js +0 -256
  381. package/esm5/lib/services/shared/error-handler.service.js +0 -127
  382. package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +0 -167
  383. package/esm5/lib/services/shared/logger/console-logger.service.js +0 -88
  384. package/esm5/lib/services/shared/logger/logger.service.js +0 -68
  385. package/esm5/lib/services/status-history/status-history.service.js +0 -80
  386. package/esm5/lib/services/xl-file/xl-file.service.js +0 -254
  387. package/esm5/public_api.js +0 -11
  388. package/fesm5/hmcts-ccpay-web-component.js +0 -10021
  389. package/fesm5/hmcts-ccpay-web-component.js.map +0 -1
@@ -1,1448 +0,0 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import * as tslib_1 from "tslib";
6
- import { Component, Input } from '@angular/core';
7
- import { PaymentLibComponent } from '../../payment-lib.component';
8
- import { CaseTransactionsService } from '../../services/case-transactions/case-transactions.service';
9
- import { BulkScaningPaymentService } from '../../services/bulk-scaning-payment/bulk-scaning-payment.service';
10
- import { PaymentViewService } from '../../services/payment-view/payment-view.service';
11
- import { OrderslistService } from '../../services/orderslist.service';
12
- import { Router } from '@angular/router';
13
- /** @type {?} */
14
- var BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
15
- var CaseTransactionsComponent = /** @class */ (function () {
16
- function CaseTransactionsComponent(router, paymentViewService, bulkScaningPaymentService, caseTransactionsService, paymentLibComponent, OrderslistService) {
17
- var _this = this;
18
- this.router = router;
19
- this.paymentViewService = paymentViewService;
20
- this.bulkScaningPaymentService = bulkScaningPaymentService;
21
- this.caseTransactionsService = caseTransactionsService;
22
- this.paymentLibComponent = paymentLibComponent;
23
- this.OrderslistService = OrderslistService;
24
- this.paymentGroups = [];
25
- this.payments = [];
26
- this.nonPayments = [];
27
- this.allPayments = [];
28
- this.remissions = [];
29
- this.fees = [];
30
- this.isRefundRemission = true;
31
- this.isAddFeeBtnEnabled = true;
32
- this.isExceptionRecord = false;
33
- this.isUnprocessedRecordSelected = false;
34
- this.isAnyFeeGroupAvilable = true;
35
- this.isHistoricGroupAvailable = false;
36
- this.viewStatus = 'main';
37
- this.isRemoveBtnDisabled = false;
38
- this.clAmountDue = 0;
39
- this.isFeeRecordsExist = false;
40
- this.isGrpOutstandingAmtPositive = false;
41
- //Order changes
42
- this.orderDetail = [];
43
- this.isAddRemissionEnable = false;
44
- this.orderRemissionDetails = [];
45
- this.orderLevelFees = [];
46
- this.ispaymentGroupApisuccess = false;
47
- this.cpoDetails = null;
48
- this.orderFeesTotal = 0.00;
49
- this.orderRemissionTotal = 0.00;
50
- this.orderTotalPayments = 0.00;
51
- this.orderPendingPayments = 0.00;
52
- this.isPBA = false;
53
- this.isIssueRefunfBtnEnable = false;
54
- this.isAddRemissionBtnEnabled = false;
55
- this.isRefundRemissionBtnEnable = false;
56
- this.allowedRolesToAccessRefund = ['payments-refund-approver', 'payments-refund'];
57
- this.isEligible4PBAPayment = ['pui-finance-manager', 'pui-user-manager', 'pui-organisation-manager', 'pui-case-manager'];
58
- this.currentDate = new Date();
59
- this.check4AllowedRoles2AccessRefund = (/**
60
- * @return {?}
61
- */
62
- function () {
63
- return _this.allowedRolesToAccessRefund.some((/**
64
- * @param {?} role
65
- * @return {?}
66
- */
67
- function (role) {
68
- return _this.LOGGEDINUSERROLES.indexOf(role) !== -1;
69
- }));
70
- });
71
- this.check4AllowedRoles2AccessPBApayment = (/**
72
- * @return {?}
73
- */
74
- function () {
75
- return _this.isEligible4PBAPayment.some((/**
76
- * @param {?} role
77
- * @return {?}
78
- */
79
- function (role) {
80
- return _this.LOGGEDINUSERROLES.indexOf(role) !== -1;
81
- }));
82
- });
83
- this.allowFurtherAccessAfter4Days = (/**
84
- * @param {?} payment
85
- * @return {?}
86
- */
87
- function (payment) {
88
- if (payment !== null && payment !== undefined) {
89
- /** @type {?} */
90
- var tmp4DayAgo = new Date();
91
- tmp4DayAgo.setDate(tmp4DayAgo.getDate() - 4);
92
- return tmp4DayAgo >= new Date(payment.date_created);
93
- }
94
- });
95
- }
96
- /**
97
- * @return {?}
98
- */
99
- CaseTransactionsComponent.prototype.ngOnInit = /**
100
- * @return {?}
101
- */
102
- function () {
103
- var _this = this;
104
- this.navigationpage = '';
105
- if (this.OrderslistService.getpaymentPageView() !== null) {
106
- this.OrderslistService.getpaymentPageView().subscribe((/**
107
- * @param {?} data
108
- * @return {?}
109
- */
110
- function (data) { return _this.paymentView = data; }));
111
- }
112
- if ((this.LOGGEDINUSERROLES === undefined || this.LOGGEDINUSERROLES.length === 0) && this.OrderslistService.getUserRolesList() !== null) {
113
- this.OrderslistService.getUserRolesList().subscribe((/**
114
- * @param {?} data
115
- * @return {?}
116
- */
117
- function (data) { return _this.LOGGEDINUSERROLES = data; }));
118
- }
119
- if (this.OrderslistService.getnavigationPageValue() !== null) {
120
- this.OrderslistService.getnavigationPageValue().subscribe((/**
121
- * @param {?} data
122
- * @return {?}
123
- */
124
- function (data) { return _this.navigationpage = data; }));
125
- }
126
- if (this.paymentView !== undefined && this.paymentView !== null && this.paymentView.payment_group_reference !== undefined && this.navigationpage === 'paymentdetailspage') {
127
- this.goToPayementView(this.paymentView.payment_group_reference, this.paymentView.reference, this.paymentView.method);
128
- }
129
- this.isGrpOutstandingAmtPositive = false;
130
- this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
131
- this.caseType = this.paymentLibComponent.CASETYPE;
132
- if (this.paymentLibComponent.CCD_CASE_NUMBER === '') {
133
- this.ccdCaseNumber = this.paymentLibComponent.EXC_REFERENCE;
134
- }
135
- this.excReference = this.paymentLibComponent.EXC_REFERENCE;
136
- this.takePayment = this.paymentLibComponent.TAKEPAYMENT;
137
- /** @type {?} */
138
- var serviceRequest = this.paymentLibComponent.SERVICEREQUEST;
139
- if (serviceRequest !== undefined && serviceRequest.toString() === 'true') {
140
- this.serviceRequestValue = 'true';
141
- }
142
- else {
143
- this.serviceRequestValue = 'false';
144
- }
145
- this.isBulkScanEnable = this.paymentLibComponent.ISBSENABLE;
146
- this.dcnNumber = this.paymentLibComponent.DCN_NUMBER;
147
- this.selectedOption = this.paymentLibComponent.SELECTED_OPTION.toLocaleLowerCase();
148
- this.isTurnOff = this.paymentLibComponent.ISTURNOFF;
149
- this.isStrategicFixEnable = this.paymentLibComponent.ISSFENABLE;
150
- if (!this.isTurnOff) {
151
- // if (this.lsCcdNumber !== this.ccdCaseNumber) {
152
- // this.router.navigateByUrl(`/ccd-search?takePayment=true`);
153
- // }
154
- this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe((/**
155
- * @param {?} paymentGroups
156
- * @return {?}
157
- */
158
- function (paymentGroups) {
159
- _this.isAnyFeeGroupAvilable = true;
160
- _this.paymentGroups = paymentGroups['payment_groups'];
161
- _this.calculateAmounts();
162
- _this.calculateOrderFeesAmounts();
163
- _this.calculateRefundAmount();
164
- if (_this.isFromServiceRequestPage) {
165
- _this.OrderslistService.getSelectedOrderRefId().subscribe((/**
166
- * @param {?} data
167
- * @return {?}
168
- */
169
- function (data) { return _this.orderRef = data; }));
170
- _this.goToOrderViewDetailSection(_this.orderRef);
171
- }
172
- else {
173
- _this.paymentViewService.getPartyDetails(_this.ccdCaseNumber).subscribe((/**
174
- * @param {?} response
175
- * @return {?}
176
- */
177
- function (response) {
178
- _this.cpoDetails = JSON.parse(response).content[0];
179
- }), (/**
180
- * @param {?} error
181
- * @return {?}
182
- */
183
- function (error) {
184
- _this.errorMessage = (/** @type {?} */ (error)) ? error.replace(/"/g, "") : "";
185
- _this.isCPODown = true;
186
- }));
187
- }
188
- }), (/**
189
- * @param {?} error
190
- * @return {?}
191
- */
192
- function (error) {
193
- _this.errorMessage = (/** @type {?} */ (error)) ? error.replace(/"/g, "") : "";
194
- _this.isAnyFeeGroupAvilable = false;
195
- _this.setDefaults();
196
- }));
197
- }
198
- else {
199
- this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe((/**
200
- * @param {?} paymentGroups
201
- * @return {?}
202
- */
203
- function (paymentGroups) {
204
- _this.isAnyFeeGroupAvilable = true;
205
- _this.paymentGroups = paymentGroups['payment_groups'];
206
- _this.calculateAmounts();
207
- _this.calculateOrderFeesAmounts();
208
- _this.totalRefundAmount = _this.calculateRefundAmount();
209
- _this.paymentViewService.getPartyDetails(_this.ccdCaseNumber).subscribe((/**
210
- * @param {?} response
211
- * @return {?}
212
- */
213
- function (response) {
214
- _this.cpoDetails = JSON.parse(response).content[0];
215
- }), (/**
216
- * @param {?} error
217
- * @return {?}
218
- */
219
- function (error) {
220
- _this.errorMessage = (/** @type {?} */ (error)) ? error.replace(/"/g, "") : "";
221
- _this.setDefaults();
222
- _this.isCPODown = true;
223
- }));
224
- }), (/**
225
- * @param {?} error
226
- * @return {?}
227
- */
228
- function (error) {
229
- _this.errorMessage = (/** @type {?} */ (error)) ? error.replace(/"/g, "") : "";
230
- _this.isAnyFeeGroupAvilable = false;
231
- _this.setDefaults();
232
- }));
233
- }
234
- if (this.paymentGroups !== undefined) {
235
- this.checkForExceptionRecord();
236
- }
237
- if (this.OrderslistService.getisFromServiceRequestPages() !== null) {
238
- this.OrderslistService.getisFromServiceRequestPages().subscribe((/**
239
- * @param {?} data
240
- * @return {?}
241
- */
242
- function (data) { return _this.isFromServiceRequestPage = data; }));
243
- }
244
- };
245
- /**
246
- * @return {?}
247
- */
248
- CaseTransactionsComponent.prototype.setDefaults = /**
249
- * @return {?}
250
- */
251
- function () {
252
- this.totalPayments = 0.00;
253
- this.totalRemissions = 0.00;
254
- this.totalNonOffPayments = 0.00;
255
- this.totalFees = 0.00;
256
- };
257
- /**
258
- * @param {?} payments
259
- * @return {?}
260
- */
261
- CaseTransactionsComponent.prototype.getAllocationStatus = /**
262
- * @param {?} payments
263
- * @return {?}
264
- */
265
- function (payments) {
266
- /** @type {?} */
267
- var paymentAllocation = payments.payment_allocation;
268
- /** @type {?} */
269
- var isAllocationStatusExist = paymentAllocation.length > 0;
270
- return isAllocationStatusExist ? paymentAllocation[0].allocation_status : '-';
271
- //return "-";
272
- };
273
- /**
274
- * @return {?}
275
- */
276
- CaseTransactionsComponent.prototype.checkForExceptionRecord = /**
277
- * @return {?}
278
- */
279
- function () {
280
- var _this = this;
281
- if (this.paymentGroups.length === 0 && (this.selectedOption.toLocaleLowerCase() === 'ccdorexception' || this.selectedOption.toLocaleLowerCase() === 'rc')) {
282
- this.bulkScaningPaymentService.getBSPaymentsByCCD(this.ccdCaseNumber).subscribe((/**
283
- * @param {?} recordData
284
- * @return {?}
285
- */
286
- function (recordData) {
287
- if (recordData['data'] && recordData['data'].exception_record_reference && recordData['data'].exception_record_reference.length > 0 && recordData['data'].ccd_reference > 0) {
288
- _this.isExceptionRecord = false;
289
- _this.isAddFeeBtnEnabled = true;
290
- }
291
- if (recordData['data'] && recordData['data'].exception_record_reference && recordData['data'].exception_record_reference.length > 0 && recordData['data'].ccd_reference === undefined) {
292
- _this.isExceptionRecord = true;
293
- _this.isAddFeeBtnEnabled = false;
294
- }
295
- if (recordData['data'] && recordData['data'].exception_record_reference && recordData['data'].exception_record_reference.length === undefined && recordData['data'].ccd_reference > 0) {
296
- _this.isExceptionRecord = false;
297
- _this.isAddFeeBtnEnabled = true;
298
- }
299
- }));
300
- }
301
- if (this.paymentGroups.length === 0 && this.selectedOption.toLocaleLowerCase() === 'dcn') {
302
- if (this.paymentLibComponent.CCD_CASE_NUMBER.length > 0 && this.paymentLibComponent.EXC_REFERENCE.length > 0) {
303
- this.isExceptionRecord = false;
304
- this.isAddFeeBtnEnabled = true;
305
- }
306
- else if (this.paymentLibComponent.CCD_CASE_NUMBER.length === 0 && this.paymentLibComponent.EXC_REFERENCE.length > 0) {
307
- this.isExceptionRecord = true;
308
- this.isAddFeeBtnEnabled = false;
309
- }
310
- else {
311
- this.isExceptionRecord = false;
312
- this.isAddFeeBtnEnabled = true;
313
- }
314
- }
315
- if (this.paymentGroups.length > 0)
316
- this.paymentGroups.forEach((/**
317
- * @param {?} paymentGroup
318
- * @return {?}
319
- */
320
- function (paymentGroup) {
321
- if (paymentGroup.payments) {
322
- paymentGroup.payments.forEach((/**
323
- * @param {?} payment
324
- * @return {?}
325
- */
326
- function (payment) {
327
- if (payment.case_reference !== undefined && payment.ccd_case_number === undefined) {
328
- _this.isExceptionRecord = true;
329
- _this.isAddFeeBtnEnabled = false;
330
- }
331
- else {
332
- _this.isExceptionRecord = false;
333
- _this.isAddFeeBtnEnabled = true;
334
- }
335
- }));
336
- }
337
- }));
338
- };
339
- /**
340
- * @return {?}
341
- */
342
- CaseTransactionsComponent.prototype.calculateOrderFeesAmounts = /**
343
- * @return {?}
344
- */
345
- function () {
346
- var _this = this;
347
- /** @type {?} */
348
- var feesTotal = 0.00;
349
- this.paymentGroups.forEach((/**
350
- * @param {?} paymentGroup
351
- * @return {?}
352
- */
353
- function (paymentGroup) {
354
- _this.resetOrderVariables();
355
- if (paymentGroup.fees) {
356
- paymentGroup.fees.forEach((/**
357
- * @param {?} fee
358
- * @return {?}
359
- */
360
- function (fee) {
361
- _this.orderFeesTotal = _this.orderFeesTotal + fee.calculated_amount;
362
- }));
363
- }
364
- if (paymentGroup.remissions) {
365
- paymentGroup.remissions.forEach((/**
366
- * @param {?} remission
367
- * @return {?}
368
- */
369
- function (remission) {
370
- _this.orderRemissionTotal = _this.orderRemissionTotal + remission.hwf_amount;
371
- }));
372
- }
373
- if (paymentGroup.payments) {
374
- paymentGroup.payments.forEach((/**
375
- * @param {?} payment
376
- * @return {?}
377
- */
378
- function (payment) {
379
- if (payment.status.toUpperCase() === 'SUCCESS') {
380
- _this.orderTotalPayments = _this.orderTotalPayments + payment.amount;
381
- }
382
- }));
383
- }
384
- // this.orderPendingPayments = (this.orderFeesTotal - this.orderRemissionTotal) - this.orderTotalPayments;
385
- if (paymentGroup.service_request_status === 'Paid') {
386
- _this.orderStatus = paymentGroup.service_request_status;
387
- _this.orderAddBtnEnable = false;
388
- }
389
- else if (paymentGroup.service_request_status === 'Partially paid' || paymentGroup.service_request_status === 'Not paid') {
390
- _this.orderStatus = paymentGroup.service_request_status;
391
- _this.orderAddBtnEnable = true;
392
- }
393
- else if (paymentGroup.service_request_status === 'Disputed') {
394
- _this.orderStatus = paymentGroup.service_request_status;
395
- _this.orderAddBtnEnable = true;
396
- }
397
- //this.orderLevelFees.push({orderRefId:paymentGroup['payment_group_reference'],orderTotalFees: this.orderFeesTotal,orderStatus: this.orderStatus,orderParty:'Santosh', orderCCDEvent:'Case Creation',orderCreated: new Date(), orderAddBtnEnable: this.orderAddBtnEnable}); this.cpoDetails['createdTimestamp']
398
- if (_this.cpoDetails !== null) {
399
- _this.orderLevelFees.push({ orderRefId: paymentGroup['payment_group_reference'], orderTotalFees: _this.orderFeesTotal, orderStatus: _this.orderStatus, orderParty: _this.cpoDetails['responsibleParty'], orderCCDEvent: _this.cpoDetails['action'], orderCreated: paymentGroup['date_created'], orderAddBtnEnable: _this.orderAddBtnEnable });
400
- }
401
- else {
402
- _this.orderLevelFees.push({ orderRefId: paymentGroup['payment_group_reference'], orderTotalFees: _this.orderFeesTotal, orderStatus: _this.orderStatus, orderParty: '', orderCCDEvent: '', orderCreated: paymentGroup['date_created'], orderAddBtnEnable: _this.orderAddBtnEnable });
403
- }
404
- if (_this.orderStatus !== 'Paid') {
405
- _this.OrderslistService.setOrdersList(_this.orderLevelFees);
406
- }
407
- }));
408
- };
409
- ;
410
- /**
411
- * @return {?}
412
- */
413
- CaseTransactionsComponent.prototype.resetOrderVariables = /**
414
- * @return {?}
415
- */
416
- function () {
417
- this.orderFeesTotal = 0.00;
418
- this.orderTotalPayments = 0.00;
419
- this.orderRemissionTotal = 0.00;
420
- this.orderPendingPayments = 0.00;
421
- this.isAddFeeBtnEnabled = true;
422
- };
423
- ;
424
- /**
425
- * @param {?} orderReferenceObj
426
- * @return {?}
427
- */
428
- CaseTransactionsComponent.prototype.goToOrderViewDetailSection = /**
429
- * @param {?} orderReferenceObj
430
- * @return {?}
431
- */
432
- function (orderReferenceObj) {
433
- var _this = this;
434
- if (this.isFromServiceRequestPage) {
435
- this.OrderslistService.setOrderRefId(orderReferenceObj);
436
- this.orderRef = orderReferenceObj;
437
- }
438
- else {
439
- this.OrderslistService.setOrderRefId(orderReferenceObj.orderRefId);
440
- this.orderRef = orderReferenceObj.orderRefId;
441
- }
442
- this.orderFeesTotal = 0.00;
443
- this.orderRemissionTotal = 0.00;
444
- this.orderTotalPayments = 0.00;
445
- this.orderPendingPayments = 0.00;
446
- this.orderDetail = this.paymentGroups.filter((/**
447
- * @param {?} x
448
- * @return {?}
449
- */
450
- function (x) { return x.payment_group_reference === _this.orderRef; }));
451
- this.orderDetail.forEach((/**
452
- * @param {?} orderDetail
453
- * @return {?}
454
- */
455
- function (orderDetail) {
456
- if (orderDetail.fees) {
457
- orderDetail.fees.forEach((/**
458
- * @param {?} fee
459
- * @return {?}
460
- */
461
- function (fee) {
462
- _this.orderFeesTotal = _this.orderFeesTotal + fee.calculated_amount;
463
- }));
464
- }
465
- if (orderDetail.remissions) {
466
- orderDetail.remissions.forEach((/**
467
- * @param {?} remission
468
- * @return {?}
469
- */
470
- function (remission) {
471
- _this.orderRemissionTotal = _this.orderRemissionTotal + remission.hwf_amount;
472
- }));
473
- if (orderDetail.payments) {
474
- _this.payment = orderDetail.payments[0];
475
- orderDetail.payments.forEach((/**
476
- * @param {?} payment
477
- * @return {?}
478
- */
479
- function (payment) {
480
- if (payment.status.toUpperCase() === 'SUCCESS') {
481
- _this.orderTotalPayments = _this.orderTotalPayments + payment.amount;
482
- }
483
- }));
484
- }
485
- }
486
- _this.orderStatus = orderDetail.service_request_status;
487
- }));
488
- //this.orderPendingPayments = (this.orderFeesTotal - this.orderRemissionTotal) - this.orderTotalPayments;
489
- // this.orderRef = orderReferenceObj.orderRefId;
490
- // if (this.orderPendingPayments <= 0.00) {
491
- // this.orderStatus = 'Paid';
492
- // } else if (this.orderFeesTotal > 0 && (this.orderTotalPayments > 0 || this.orderRemissionTotal > 0) && (this.orderTotalPayments < this.orderPendingPayments)) {
493
- // this.orderStatus = 'Partially paid'
494
- // } else {
495
- // this.orderStatus = 'Not paid'
496
- // }
497
- if (this.cpoDetails !== null) {
498
- this.orderParty = this.cpoDetails['responsibleParty'];
499
- this.orderCreated = this.cpoDetails['createdTimestamp'];
500
- this.orderCCDEvent = this.cpoDetails['action'];
501
- }
502
- else {
503
- this.orderParty = '';
504
- this.orderCCDEvent = '';
505
- this.orderCreated = orderReferenceObj.orderCreated;
506
- }
507
- this.viewStatus = 'order-full-view';
508
- };
509
- /**
510
- * @param {?} event
511
- * @param {?} orderef
512
- * @return {?}
513
- */
514
- CaseTransactionsComponent.prototype.redirectToOrderFeeSearchPage = /**
515
- * @param {?} event
516
- * @param {?} orderef
517
- * @return {?}
518
- */
519
- function (event, orderef) {
520
- if (orderef.orderAddBtnEnable) {
521
- event.preventDefault();
522
- this.paymentLibComponent.bspaymentdcn = null;
523
- this.paymentLibComponent.paymentGroupReference = orderef.orderRefId;
524
- this.paymentLibComponent.isTurnOff = this.isTurnOff;
525
- this.paymentLibComponent.viewName = 'fee-summary';
526
- }
527
- };
528
- /**
529
- * @return {?}
530
- */
531
- CaseTransactionsComponent.prototype.calculateAmounts = /**
532
- * @return {?}
533
- */
534
- function () {
535
- var _this = this;
536
- /** @type {?} */
537
- var feesTotal = 0.00;
538
- /** @type {?} */
539
- var paymentsTotal = 0.00;
540
- /** @type {?} */
541
- var remissionsTotal = 0.00;
542
- /** @type {?} */
543
- var nonOffLinePayment = 0.00;
544
- this.paymentGroups.forEach((/**
545
- * @param {?} paymentGroup
546
- * @return {?}
547
- */
548
- function (paymentGroup) {
549
- if (paymentGroup.fees) {
550
- paymentGroup.fees.forEach((/**
551
- * @param {?} fee
552
- * @return {?}
553
- */
554
- function (fee) {
555
- // new feature Apportionment toggle changes
556
- if (!_this.isTurnOff) {
557
- if (fee.date_created) {
558
- /** @type {?} */
559
- var a = fee.amount_due === undefined;
560
- /** @type {?} */
561
- var b = fee.amount_due <= 0;
562
- _this.clAmountDue = a ? _this.clAmountDue + fee.net_amount : b ? _this.clAmountDue + 0 : _this.clAmountDue + fee.amount_due;
563
- }
564
- fee['payment_group_reference'] = paymentGroup['payment_group_reference'];
565
- _this.fees.push(fee);
566
- }
567
- else {
568
- feesTotal = feesTotal + fee.calculated_amount;
569
- _this.fees.push(fee);
570
- }
571
- }));
572
- }
573
- if (_this.isTurnOff) {
574
- _this.totalFees = feesTotal;
575
- }
576
- if (paymentGroup.payments) {
577
- paymentGroup.payments.forEach((/**
578
- * @param {?} payment
579
- * @return {?}
580
- */
581
- function (payment) {
582
- // new feature Apportionment toggle changes
583
- if (!_this.isTurnOff) {
584
- /** @type {?} */
585
- var allocationLen = payment.payment_allocation;
586
- if (payment.status.toUpperCase() === 'SUCCESS') {
587
- paymentsTotal = paymentsTotal + payment.amount;
588
- if (allocationLen.length === 0 || allocationLen.length > 0 && allocationLen[0].allocation_status === 'Allocated') {
589
- nonOffLinePayment = nonOffLinePayment + payment.amount;
590
- }
591
- if (allocationLen.length > 0) {
592
- _this.nonPayments.push(payment);
593
- }
594
- }
595
- if (allocationLen.length === 0) {
596
- _this.payments.push(payment);
597
- }
598
- payment.paymentGroupReference = paymentGroup.payment_group_reference;
599
- _this.allPayments.push(payment);
600
- }
601
- else {
602
- if (payment.status.toUpperCase() === 'SUCCESS') {
603
- paymentsTotal = paymentsTotal + payment.amount;
604
- _this.payments.push(payment);
605
- }
606
- payment.paymentGroupReference = paymentGroup.payment_group_reference;
607
- _this.allPayments.push(payment);
608
- }
609
- }));
610
- }
611
- _this.totalPayments = paymentsTotal;
612
- // new feature Apportionment toggle changes
613
- if (!_this.isTurnOff) {
614
- _this.totalNonOffPayments = nonOffLinePayment;
615
- }
616
- if (paymentGroup.remissions) {
617
- paymentGroup.remissions.forEach((/**
618
- * @param {?} remisison
619
- * @return {?}
620
- */
621
- function (remisison) {
622
- remissionsTotal = remissionsTotal + remisison.hwf_amount;
623
- _this.remissions.push(remisison);
624
- }));
625
- }
626
- _this.totalRemissions = remissionsTotal;
627
- }));
628
- };
629
- /**
630
- * @return {?}
631
- */
632
- CaseTransactionsComponent.prototype.calculateRefundAmount = /**
633
- * @return {?}
634
- */
635
- function () {
636
- var _this = this;
637
- if (!this.isTurnOff) {
638
- /** @type {?} */
639
- var isNewPaymentGroup_1 = false;
640
- this.paymentGroups.forEach((/**
641
- * @param {?} paymentGroup
642
- * @param {?} index
643
- * @return {?}
644
- */
645
- function (paymentGroup, index) {
646
- /** @type {?} */
647
- var grpOutstandingAmount = 0.00;
648
- /** @type {?} */
649
- var feesTotal = 0.00;
650
- /** @type {?} */
651
- var paymentsTotal = 0.00;
652
- /** @type {?} */
653
- var remissionsTotal = 0.00;
654
- /** @type {?} */
655
- var fees = [];
656
- if (paymentGroup.fees) {
657
- // this.isFeeRecordsExist = true;
658
- paymentGroup.fees.forEach((/**
659
- * @param {?} fee
660
- * @return {?}
661
- */
662
- function (fee) {
663
- feesTotal = feesTotal + fee.calculated_amount;
664
- _this.isRemissionsMatch = false;
665
- if (paymentGroup.remissions) {
666
- paymentGroup.remissions.forEach((/**
667
- * @param {?} rem
668
- * @return {?}
669
- */
670
- function (rem) {
671
- if (rem.fee_code === fee.code) {
672
- _this.isRemissionsMatch = true;
673
- fee['remissions'] = rem;
674
- // if(!fees.find(k => k.code=fee.code))
675
- // {
676
- fees.push(fee);
677
- //}
678
- }
679
- }));
680
- }
681
- if (!_this.isRemissionsMatch) {
682
- fees.push(fee);
683
- }
684
- if (fee.date_created) {
685
- isNewPaymentGroup_1 = true;
686
- }
687
- else {
688
- _this.isHistoricGroupAvailable = true;
689
- _this.paymentGroups[index]['old'] = true;
690
- }
691
- }));
692
- _this.paymentGroups[index].fees = fees;
693
- }
694
- if (paymentGroup.payments) {
695
- paymentGroup.payments.forEach((/**
696
- * @param {?} payment
697
- * @return {?}
698
- */
699
- function (payment) {
700
- if (payment.status.toUpperCase() === 'SUCCESS') {
701
- paymentsTotal = paymentsTotal + payment.amount;
702
- }
703
- }));
704
- }
705
- if (paymentGroup.remissions) {
706
- paymentGroup.remissions.forEach((/**
707
- * @param {?} remission
708
- * @return {?}
709
- */
710
- function (remission) {
711
- remissionsTotal = remissionsTotal + remission.hwf_amount;
712
- }));
713
- }
714
- grpOutstandingAmount = (feesTotal - remissionsTotal) - paymentsTotal;
715
- if (grpOutstandingAmount > 0 && isNewPaymentGroup_1) {
716
- _this.isAnyFeeGroupAvilable = true;
717
- _this.isFeeRecordsExist = true;
718
- _this.paymentRef = paymentGroup.payment_group_reference;
719
- }
720
- if (paymentGroup.fees && paymentGroup.fees.length > 0 && grpOutstandingAmount <= 0 && isNewPaymentGroup_1) {
721
- _this.isAnyFeeGroupAvilable = false;
722
- }
723
- }));
724
- if ((!isNewPaymentGroup_1 && this.isHistoricGroupAvailable) || (!isNewPaymentGroup_1 && !this.isHistoricGroupAvailable)) {
725
- this.isAnyFeeGroupAvilable = false;
726
- }
727
- }
728
- else {
729
- /** @type {?} */
730
- var totalRefundAmount_1 = 0;
731
- /** @type {?} */
732
- var isFeeAmountZero_1 = false;
733
- this.paymentGroups.forEach((/**
734
- * @param {?} paymentGroup
735
- * @return {?}
736
- */
737
- function (paymentGroup) {
738
- /** @type {?} */
739
- var grpOutstandingAmount = 0.00;
740
- /** @type {?} */
741
- var feesTotal = 0.00;
742
- /** @type {?} */
743
- var paymentsTotal = 0.00;
744
- /** @type {?} */
745
- var remissionsTotal = 0.00;
746
- if (paymentGroup.fees) {
747
- _this.isFeeRecordsExist = true;
748
- paymentGroup.fees.forEach((/**
749
- * @param {?} fee
750
- * @return {?}
751
- */
752
- function (fee) {
753
- feesTotal = feesTotal + fee.calculated_amount;
754
- if (fee.calculated_amount === 0) {
755
- isFeeAmountZero_1 = true;
756
- }
757
- }));
758
- }
759
- if (paymentGroup.payments) {
760
- paymentGroup.payments.forEach((/**
761
- * @param {?} payment
762
- * @return {?}
763
- */
764
- function (payment) {
765
- if (payment.status.toUpperCase() === 'SUCCESS') {
766
- paymentsTotal = paymentsTotal + payment.amount;
767
- }
768
- }));
769
- }
770
- if (paymentGroup.remissions) {
771
- paymentGroup.remissions.forEach((/**
772
- * @param {?} remission
773
- * @return {?}
774
- */
775
- function (remission) {
776
- remissionsTotal = remissionsTotal + remission.hwf_amount;
777
- }));
778
- }
779
- grpOutstandingAmount = (feesTotal - remissionsTotal) - paymentsTotal;
780
- if (grpOutstandingAmount < 0) {
781
- if (totalRefundAmount_1 === 0) {
782
- totalRefundAmount_1 = grpOutstandingAmount;
783
- }
784
- else {
785
- totalRefundAmount_1 = (totalRefundAmount_1 + grpOutstandingAmount);
786
- }
787
- }
788
- else if (grpOutstandingAmount > 0 || (grpOutstandingAmount === 0 && isFeeAmountZero_1)) {
789
- _this.isGrpOutstandingAmtPositive = true;
790
- }
791
- }));
792
- return totalRefundAmount_1 * -1;
793
- }
794
- };
795
- /**
796
- * @param {?} paymentGroup
797
- * @return {?}
798
- */
799
- CaseTransactionsComponent.prototype.getGroupOutstandingAmount = /**
800
- * @param {?} paymentGroup
801
- * @return {?}
802
- */
803
- function (paymentGroup) {
804
- return this.bulkScaningPaymentService.calculateOutStandingAmount(paymentGroup);
805
- };
806
- /**
807
- * @param {?} event
808
- * @return {?}
809
- */
810
- CaseTransactionsComponent.prototype.redirectToFeeSearchPage = /**
811
- * @param {?} event
812
- * @return {?}
813
- */
814
- function (event) {
815
- event.preventDefault();
816
- /** @type {?} */
817
- var url = this.isBulkScanEnable ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
818
- url += this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
819
- url += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
820
- url += "&caseType=" + this.caseType;
821
- this.router.navigateByUrl("/fee-search?selectedOption=" + this.selectedOption + "&ccdCaseNumber=" + this.ccdCaseNumber + url);
822
- };
823
- /**
824
- * @param {?} fee
825
- * @return {?}
826
- */
827
- CaseTransactionsComponent.prototype.addRemission = /**
828
- * @param {?} fee
829
- * @return {?}
830
- */
831
- function (fee) {
832
- var _this = this;
833
- if (this.chkForAddRemission(fee.code)) {
834
- this.feeId = fee;
835
- this.viewStatus = 'addremission';
836
- this.paymentViewService.getApportionPaymentDetails(this.payment.reference).subscribe((/**
837
- * @param {?} paymentGroup
838
- * @return {?}
839
- */
840
- function (paymentGroup) {
841
- _this.paymentGroup = paymentGroup;
842
- _this.paymentGroup.payments = _this.paymentGroup.payments.filter((/**
843
- * @param {?} paymentGroupObj
844
- * @return {?}
845
- */
846
- function (paymentGroupObj) { return paymentGroupObj['reference'].includes(_this.paymentLibComponent.paymentReference); }));
847
- _this.payment = _this.paymentGroup.payments[0];
848
- // const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
849
- // this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
850
- }), (/**
851
- * @param {?} error
852
- * @return {?}
853
- */
854
- function (error) { return _this.errorMessage = error ? error.replace(/"/g, "") : ""; }));
855
- }
856
- };
857
- /**
858
- * @param {?} payment
859
- * @param {?} remission
860
- * @param {?} fees
861
- * @return {?}
862
- */
863
- CaseTransactionsComponent.prototype.addRefundForRemission = /**
864
- * @param {?} payment
865
- * @param {?} remission
866
- * @param {?} fees
867
- * @return {?}
868
- */
869
- function (payment, remission, fees) {
870
- var _this = this;
871
- this.viewStatus = 'addrefundforremission';
872
- this.payment = payment;
873
- this.paymentViewService.getApportionPaymentDetails(this.payment.reference).subscribe((/**
874
- * @param {?} paymentGroup
875
- * @return {?}
876
- */
877
- function (paymentGroup) {
878
- _this.paymentGroup = paymentGroup;
879
- _this.paymentGroup.payments = _this.paymentGroup.payments.filter((/**
880
- * @param {?} paymentGroupObj
881
- * @return {?}
882
- */
883
- function (paymentGroupObj) { return paymentGroupObj['reference'].includes(_this.payment.reference); }));
884
- _this.payment = _this.paymentGroup.payments[0];
885
- _this.remissions = remission;
886
- _this.remissionFeeAmt = fees.filter((/**
887
- * @param {?} data
888
- * @return {?}
889
- */
890
- function (data) { return data.code === _this.remissions['fee_code']; }))[0].net_amount;
891
- // const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
892
- // this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
893
- }), (/**
894
- * @param {?} error
895
- * @return {?}
896
- */
897
- function (error) { return _this.errorMessage = error; }));
898
- };
899
- /**
900
- * @param {?} event
901
- * @return {?}
902
- */
903
- CaseTransactionsComponent.prototype.redirectToremissionPage = /**
904
- * @param {?} event
905
- * @return {?}
906
- */
907
- function (event) {
908
- event.preventDefault();
909
- this.paymentLibComponent.viewName = 'remission';
910
- };
911
- /**
912
- * @return {?}
913
- */
914
- CaseTransactionsComponent.prototype.goToServiceRequestPage = /**
915
- * @return {?}
916
- */
917
- function () {
918
- this.paymentLibComponent.viewName = 'case-transactions';
919
- this.paymentLibComponent.TAKEPAYMENT = false;
920
- this.paymentLibComponent.SERVICEREQUEST = 'true';
921
- this.paymentLibComponent.isFromServiceRequestPage = true;
922
- window.location.reload();
923
- };
924
- /**
925
- * @param {?} event
926
- * @return {?}
927
- */
928
- CaseTransactionsComponent.prototype.redirectToReportsPage = /**
929
- * @param {?} event
930
- * @return {?}
931
- */
932
- function (event) {
933
- event.preventDefault();
934
- this.router.navigateByUrl("/reports?selectedOption=" + this.selectedOption + "&ccdCaseNumber=" + this.ccdCaseNumber);
935
- };
936
- /**
937
- * @param {?} paymentGroup
938
- * @return {?}
939
- */
940
- CaseTransactionsComponent.prototype.loadFeeSummaryPage = /**
941
- * @param {?} paymentGroup
942
- * @return {?}
943
- */
944
- function (paymentGroup) {
945
- this.paymentLibComponent.bspaymentdcn = null;
946
- this.paymentLibComponent.paymentGroupReference = paymentGroup.payment_group_reference;
947
- this.paymentLibComponent.isTurnOff = this.isTurnOff;
948
- this.paymentLibComponent.viewName = 'fee-summary';
949
- };
950
- /**
951
- * @param {?} paymentGroup
952
- * @return {?}
953
- */
954
- CaseTransactionsComponent.prototype.goToPaymentViewComponent = /**
955
- * @param {?} paymentGroup
956
- * @return {?}
957
- */
958
- function (paymentGroup) {
959
- this.paymentLibComponent.paymentMethod = paymentGroup.paymentMethod;
960
- this.paymentLibComponent.paymentGroupReference = paymentGroup.paymentGroupReference;
961
- this.paymentLibComponent.paymentReference = paymentGroup.paymentReference;
962
- this.paymentLibComponent.viewName = 'payment-view';
963
- };
964
- /**
965
- * @param {?} paymentGroupReference
966
- * @param {?} paymentReference
967
- * @param {?} paymentMethod
968
- * @return {?}
969
- */
970
- CaseTransactionsComponent.prototype.goToPayementView = /**
971
- * @param {?} paymentGroupReference
972
- * @param {?} paymentReference
973
- * @param {?} paymentMethod
974
- * @return {?}
975
- */
976
- function (paymentGroupReference, paymentReference, paymentMethod) {
977
- this.goToPaymentViewComponent({ paymentGroupReference: paymentGroupReference, paymentReference: paymentReference, paymentMethod: paymentMethod });
978
- };
979
- /**
980
- * @param {?} unprocessedRecordId
981
- * @return {?}
982
- */
983
- CaseTransactionsComponent.prototype.selectedUnprocessedFeeEvent = /**
984
- * @param {?} unprocessedRecordId
985
- * @return {?}
986
- */
987
- function (unprocessedRecordId) {
988
- if (unprocessedRecordId) {
989
- if (this.isTurnOff) {
990
- this.isAddFeeBtnEnabled = false;
991
- }
992
- this.isUnprocessedRecordSelected = true;
993
- }
994
- else {
995
- if (this.isTurnOff) {
996
- this.isAddFeeBtnEnabled = true;
997
- }
998
- this.isUnprocessedRecordSelected = false;
999
- }
1000
- };
1001
- /**
1002
- * @param {?} unProcessedRecordCount
1003
- * @return {?}
1004
- */
1005
- CaseTransactionsComponent.prototype.getUnprocessedFeeCount = /**
1006
- * @param {?} unProcessedRecordCount
1007
- * @return {?}
1008
- */
1009
- function (unProcessedRecordCount) {
1010
- this.unprocessedRecordCount = unProcessedRecordCount;
1011
- };
1012
- /**
1013
- * @param {?} fee
1014
- * @return {?}
1015
- */
1016
- CaseTransactionsComponent.prototype.calculateAmountDue = /**
1017
- * @param {?} fee
1018
- * @return {?}
1019
- */
1020
- function (fee) {
1021
- if (fee.date_created) {
1022
- return fee.amount_due !== undefined ? fee.amount_due : fee.net_amount;
1023
- }
1024
- else {
1025
- return "0.00";
1026
- }
1027
- };
1028
- /**
1029
- * @param {?} fee
1030
- * @return {?}
1031
- */
1032
- CaseTransactionsComponent.prototype.confirmRemoveFee = /**
1033
- * @param {?} fee
1034
- * @return {?}
1035
- */
1036
- function (fee) {
1037
- this.isRemoveBtnDisabled = false;
1038
- this.feeId = fee;
1039
- this.viewStatus = 'feeRemovalConfirmation';
1040
- };
1041
- /**
1042
- * @return {?}
1043
- */
1044
- CaseTransactionsComponent.prototype.cancelRemoval = /**
1045
- * @return {?}
1046
- */
1047
- function () {
1048
- this.viewStatus = 'main';
1049
- };
1050
- /**
1051
- * @param {?} fee
1052
- * @return {?}
1053
- */
1054
- CaseTransactionsComponent.prototype.removeFee = /**
1055
- * @param {?} fee
1056
- * @return {?}
1057
- */
1058
- function (fee) {
1059
- var _this = this;
1060
- this.isRemoveBtnDisabled = true;
1061
- this.paymentViewService.deleteFeeFromPaymentGroup(fee).subscribe((/**
1062
- * @param {?} success
1063
- * @return {?}
1064
- */
1065
- function (success) {
1066
- window.location.reload();
1067
- }), (/**
1068
- * @param {?} error
1069
- * @return {?}
1070
- */
1071
- function (error) {
1072
- _this.errorMessage = error;
1073
- _this.isRemoveBtnDisabled = false;
1074
- }));
1075
- };
1076
- /**
1077
- * @param {?} amountDue
1078
- * @return {?}
1079
- */
1080
- CaseTransactionsComponent.prototype.isCheckAmountdueExist = /**
1081
- * @param {?} amountDue
1082
- * @return {?}
1083
- */
1084
- function (amountDue) {
1085
- return typeof amountDue === 'undefined';
1086
- };
1087
- /**
1088
- * @param {?} payment
1089
- * @return {?}
1090
- */
1091
- CaseTransactionsComponent.prototype.issueRefund = /**
1092
- * @param {?} payment
1093
- * @return {?}
1094
- */
1095
- function (payment) {
1096
- if (payment !== null && payment !== undefined) {
1097
- if (this.chkIssueRefundBtnEnable(payment)) {
1098
- this.viewStatus = 'issuerefund';
1099
- this.payment = payment;
1100
- this.paymentLibComponent.isFromServiceRequestPage = true;
1101
- this.isRefundRemission = true;
1102
- }
1103
- }
1104
- };
1105
- /**
1106
- * @param {?} feeCode
1107
- * @return {?}
1108
- */
1109
- CaseTransactionsComponent.prototype.chkForAddRemission = /**
1110
- * @param {?} feeCode
1111
- * @return {?}
1112
- */
1113
- function (feeCode) {
1114
- var e_1, _a;
1115
- if (this.chkForPBAPayment() && this.check4AllowedRoles2AccessRefund()) {
1116
- if (this.orderDetail[0]['remissions'].length > 0) {
1117
- try {
1118
- for (var _b = tslib_1.__values(this.orderDetail[0]['remissions']), _c = _b.next(); !_c.done; _c = _b.next()) {
1119
- var remission = _c.value;
1120
- if (remission.fee_code === feeCode) {
1121
- return false;
1122
- }
1123
- }
1124
- }
1125
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
1126
- finally {
1127
- try {
1128
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1129
- }
1130
- finally { if (e_1) throw e_1.error; }
1131
- }
1132
- }
1133
- return true;
1134
- }
1135
- else {
1136
- return false;
1137
- }
1138
- };
1139
- /**
1140
- * @return {?}
1141
- */
1142
- CaseTransactionsComponent.prototype.chkForPBAPayment = /**
1143
- * @return {?}
1144
- */
1145
- function () {
1146
- var _this = this;
1147
- if (this.orderDetail !== null && this.orderDetail !== undefined) {
1148
- this.orderDetail.forEach((/**
1149
- * @param {?} orderDetail
1150
- * @return {?}
1151
- */
1152
- function (orderDetail) {
1153
- if (orderDetail.payments) {
1154
- orderDetail.payments.forEach((/**
1155
- * @param {?} payment
1156
- * @return {?}
1157
- */
1158
- function (payment) {
1159
- if (payment.method.toLocaleLowerCase() === 'payment by account' && _this.allowFurtherAccessAfter4Days(payment)) {
1160
- _this.isPBA = true;
1161
- }
1162
- }));
1163
- }
1164
- }));
1165
- if (this.isPBA) {
1166
- return true;
1167
- }
1168
- else {
1169
- return false;
1170
- }
1171
- ;
1172
- }
1173
- };
1174
- /**
1175
- * @param {?} payment
1176
- * @return {?}
1177
- */
1178
- CaseTransactionsComponent.prototype.chkIssueRefundBtnEnable = /**
1179
- * @param {?} payment
1180
- * @return {?}
1181
- */
1182
- function (payment) {
1183
- if (this.check4AllowedRoles2AccessRefund() && this.allowFurtherAccessAfter4Days(payment) &&
1184
- payment.method === 'payment by account' && payment.status.toLocaleLowerCase() === 'success') {
1185
- this.isIssueRefunfBtnEnable = true;
1186
- }
1187
- if (this.isIssueRefunfBtnEnable) {
1188
- return true;
1189
- }
1190
- else {
1191
- return false;
1192
- }
1193
- ;
1194
- };
1195
- /**
1196
- * @return {?}
1197
- */
1198
- CaseTransactionsComponent.prototype.chkIsRefundRemissionBtnEnable = /**
1199
- * @return {?}
1200
- */
1201
- function () {
1202
- var _this = this;
1203
- if (this.orderDetail !== null && this.orderDetail !== undefined) {
1204
- this.paymentLibComponent.isFromServiceRequestPage = true;
1205
- this.orderDetail.forEach((/**
1206
- * @param {?} orderDetail
1207
- * @return {?}
1208
- */
1209
- function (orderDetail) {
1210
- if (orderDetail.payments) {
1211
- orderDetail.payments.forEach((/**
1212
- * @param {?} payment
1213
- * @return {?}
1214
- */
1215
- function (payment) {
1216
- if (payment.method.toLocaleLowerCase() === 'payment by account' && payment.status.toLocaleLowerCase() === 'success' && _this.allowFurtherAccessAfter4Days(payment)) {
1217
- _this.isRefundRemissionBtnEnable = true;
1218
- }
1219
- }));
1220
- }
1221
- }));
1222
- if (this.isRefundRemissionBtnEnable) {
1223
- return true;
1224
- }
1225
- else {
1226
- return false;
1227
- }
1228
- ;
1229
- }
1230
- };
1231
- /**
1232
- * @param {?} orderRef
1233
- * @return {?}
1234
- */
1235
- CaseTransactionsComponent.prototype.loadPBAAccountPage = /**
1236
- * @param {?} orderRef
1237
- * @return {?}
1238
- */
1239
- function (orderRef) {
1240
- this.paymentLibComponent.pbaPayOrderRef = orderRef;
1241
- this.paymentLibComponent.viewName = 'pba-payment';
1242
- };
1243
- CaseTransactionsComponent.decorators = [
1244
- { type: Component, args: [{
1245
- selector: 'ccpay-case-transactions',
1246
- template: "<div class=\"govuk-width-container\">\n\n <main class=\"govuk-main-wrapper\">\n <ng-container *ngIf=\"viewStatus === 'main1'\">\n <div *ngIf=\"viewStatus === 'main1'&& !isTurnOff && takePayment\">\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n </div>\n\n <div *ngIf=\"takePayment\" class=\"govuk-grid-row\">\n <div *ngIf='!isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div *ngIf='isExceptionRecord' class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6 govuk-!-padding-top-6\">\n <h3 class=\"heading-medium\">Exception reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header govuk-table__header--custom\" scope=\"col\" *ngIf=\"isBulkScanEnable\">Unallocated payments</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell summary-table-font\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>\n <td class=\"govuk-table__cell case-transaction__color summary-table-font\" *ngIf=\"isBulkScanEnable\">{{unprocessedRecordCount}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <div class=\"govuk-grid-column-two-thirds\" *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"redirectToFeeSearchPage($event)\"\n [disabled]=\"!isAddFeeBtnEnabled\"\n [ngClass]='!isAddFeeBtnEnabled ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Take telephony payment\n </button>\n </div>\n\n </div>\n <div class=\"govuk-grid-row\">\n\n </div>\n <div *ngIf=\"takePayment\" class=\" govuk-!-margin-top-9\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <h3 class=\"heading-medium\">Fees</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header\" scope=\"col\">Action</td>\n\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let paymentGroup of paymentGroups;\">\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell\">\t{{fee.code}} </td>\n <td class=\"govuk-table__cell\">{{fee.description}}</td>\n <td class=\"govuk-table__cell\">{{fee.volume? fee.volume : '-'}}</td>\n <td class=\"govuk-table__cell\">{{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"paymentGroup.old && i==0\"> {{getGroupOutstandingAmount(paymentGroup)| currency:'GBP':'symbol-narrow':'1.2-2'}}* </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\"> {{calculateAmountDue(fee) | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell\" *ngIf=\"!paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='!isCheckAmountdueExist(fee.amount_due) || fee.remissions ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n <td class=\"govuk-table__cell\" *ngIf=\"paymentGroup.old\">\n <a (click)=\"confirmRemoveFee(fee.id)\" [ngClass]='paymentGroup.payments?.length > 0 || paymentGroup.remissions?.length > 0 ? \"disable-link\" : \"\"'>Remove</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroups?.length === 0\">\n <tr class=\"govuk-table__row\" >\n <td class=\"govuk-table__cell\" colspan=\"7\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"hmcts-banner\" *ngIf=\"isHistoricGroupAvailable\">\n <svg class=\"hmcts-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\">\n <path d=\"M13.7,18.5h-2.4v-2.4h2.4V18.5z M12.5,13.7c-0.7,0-1.2-0.5-1.2-1.2V7.7c0-0.7,0.5-1.2,1.2-1.2s1.2,0.5,1.2,1.2v4.8\n C13.7,13.2,13.2,13.7,12.5,13.7z M12.5,0.5c-6.6,0-12,5.4-12,12s5.4,12,12,12s12-5.4,12-12S19.1,0.5,12.5,0.5z\"></path>\n </svg>\n <div class=\"hmcts-banner__message\">\n <span class=\"hmcts-banner__assistive\">information</span>\n * These fees have already been processed offline. Check the notes in CCD for more information.\n </div>\n </div>\n <div class=\"panel panel-no--style\" *ngIf=\"allPayments?.length > 0 || remissions?.length > 0\">\n <!-- payments -->\n <h3 class=\"heading-medium\">Payments</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-28\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header col-15\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Payment status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"7\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <h3 class=\"heading-medium\">Remissions</h3>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"takePayment && isTurnOff\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds\">\n <h1 class=\"govuk-heading-xl\">Case transactions</h1>\n </div>\n\n <div class=\"govuk-grid-column-one-third\" align=\"right\" >\n <a [ngClass]=\"{ 'disable': !isAddFeeBtnEnabled} \" (click)=\"redirectToFeeSearchPage($event)\" class=\"button\">Add a new fee</a>\n </div>\n </div>\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-two-thirds govuk-!-padding-bottom-6\">\n <h3 class=\"heading-medium\">CCD reference:</h3>\n <span> {{ ccdCaseNumber | ccdHyphens }}</span>\n </div>\n\n <div class=\"govuk-grid-column-full govuk-!-padding-bottom-3\">\n <hr class=\"govuk-section-break govuk-section-break--visible\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount due</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell\">{{ (totalFees - totalRemissions) - totalPayments | currency :'GBP':'symbol':'1.2-2'}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n\n\n <!-- No fees start -->\n <div *ngIf=\"paymentGroups?.length === 0\">\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Existing fees</span>\n </div>\n\n <div class=\"govuk-grid-column-full\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No fees recorded</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- No fees end -->\n\n <div *ngFor=\"let paymentGroup of paymentGroups\">\n\n <div class=\"govuk-grid-row\">\n <div class=\"govuk-grid-column-full govuk-grid-column-full--gr\">\n <span class=\"heading-medium\">Group reference: {{paymentGroup.payment_group_reference}}</span>\n </div>\n </div>\n <div class=\"govuk-grid-row\">\n\n <!--New Code start-->\n\n <div class=\"govuk-grid-column-full\">\n <span class=\"heading-small\">Exisiting fees</span>\n </div>\n <div class=feeclass>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Description</td>\n <td class=\"govuk-table__header\" scope=\"col\">Volume</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Calculated amount</td>\n <td class=\"groupamount govuk-table__header\" scope=\"col\">Group amount outstanding</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" >\n <tr class=\"govuk-table__row\" *ngFor=\"let fee of paymentGroup.fees; let i = index;\">\n <td class=\"govuk-table__cell govuk-table__cell--col1\">{{fee.code}}</td>\n <td class=\"govuk-table__cell govuk-table__cell--col2\"> {{fee.description}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col3 align-center\"> {{fee.volume? fee.volume : '-'}} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col4\"> {{ fee.net_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col5\"> {{fee.calculated_amount | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n <td class=\"govuk-table__cell govuk-table__cell--col6 govuk-table__custom--col6\" [attr.rowspan]=\"paymentGroup.fees.length\" *ngIf=\"i==0\">\n {{getGroupOutstandingAmount(paymentGroup) | currency:'GBP':'symbol-narrow':'1.2-2' }} </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.fees.length==0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n </div>\n </div>\n <div class=\"govuk-inset-text govuk-inset-text__no-border\" *ngIf=\"paymentGroup.payments || paymentGroup.remissions\">\n <details>\n <summary class=\"govuk-hidetext\">\n <span class=\"summary\">Allocated payments and remissions</span>\n </summary>\n\n <div class=\"panel panel-border-narrow\">\n <!-- payments -->\n <span class=\"heading-medium\">Payments</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Channel</td>\n <td class=\"govuk-table__header\" scope=\"col\">Method</td>\n <td class=\"govuk-table__header\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header\" scope=\"col\">Allocation status</td>\n <td class=\"govuk-table__header\" scope=\"col\">Status</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of paymentGroup.payments\">\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(paymentGroup.payment_group_reference, payment.reference, payment.method)\">{{ payment.reference }}</a>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">{{ payment.channel | lowercase }}</td>\n <td class=\"govuk-table__cell capitalize whitespace-inherit\">{{ payment.method | lowercase}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{getAllocationStatus(payment)}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.payments?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n\n <!-- remissions -->\n <span class=\"heading-medium\">Remissions</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header\" scope=\"col\">Remission reference</td>\n <td class=\"govuk-table__header\" scope=\"col\">Date created</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission code</td>\n <td class=\"govuk-table__header\" scope=\"col\">Fee applied against</td>\n <td class=\"govuk-table__header\" scope=\"col\">Remission amount</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let remission of paymentGroup.remissions\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.date_created | date:'dd MMM' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount }}</td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"paymentGroup.remissions?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"5\">No remissions recorded</td>\n </tbody>\n </table>\n </div>\n </details>\n\n\n <div *ngIf=\"takePayment\">\n <button type=\"submit\" (click)=\"loadFeeSummaryPage(paymentGroup)\"\n [disabled]=\"(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected)\"\n [ngClass]='(getGroupOutstandingAmount(paymentGroup) <= 0 || isUnprocessedRecordSelected) ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Add telephone payment\n </button>\n </div>\n </div>\n </div>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"5\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n <div class=\"govuk-grid-row govuk-grid__surplus-payments\" *ngIf=\"totalRefundAmount > 0 && takePayment\">\n <div class=\"govuk-grid-column-full govuk-grid__surplus-payments-col1\">\n <h3 class=\"heading-medium\">Surplus payments</h3>\n </div>\n <div class=\"govuk-grid-column-full\">\n Total surplus payments received: {{totalRefundAmount | currency :'GBP':'symbol':'1.2-2'}}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"takePayment\">\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"1\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </div>\n\n <div *ngIf=\"!takePayment\" class=\"govuk-grid-row govuk-grid__surplus-payments\">\n\n <div class=\"govuk-grid-column-full\">\n\n <span class=\"heading-medium\">Payments</span>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-13\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-14\" scope=\"col\">Date allocated</td>\n <td class=\"govuk-table__header col-20\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell col-13 whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell col-10 whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell col-17 whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy HH:mm:ss' }}</td>\n <td class=\"govuk-table__cell col-24 whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell col-13 whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n\n </table>\n <ccpay-app-unprocessed-payments class=\"govuk-table\"\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"2\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </div>\n </div>\n </ng-container>\n\n<!--Order Case Transactions Page-->\n <ng-container *ngIf=\"viewStatus === 'main' && !isTurnOff && takePayment\">\n <div>\n\n <div>\n <h1 class=\"govuk-grid-column-two-thirds govuk-heading-l govuk-!-margin-top-0\">Case transactions</h1>\n <ng-container *ngIf='!isExceptionRecord' class=\" govuk-!-margin-bottom-6 alignself\">\n <b> Case reference: </b>{{ ccdCaseNumber | ccdHyphens }}\n </ng-container>\n <ng-container *ngIf='isExceptionRecord' class=\"govuk-!-margin-bottom-3 col-55 alignself\" >\n <b> Exception reference:</b>{{ ccdCaseNumber | ccdHyphens }}\n </ng-container>\n <div>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-25\" scope=\"col\">Total payments</td>\n <td class=\"govuk-table__header govuk-table__header--custom col-25\" scope=\"col\" *ngIf=\"isBulkScanEnable\">Unallocated payments</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Total remissions</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Amount due</td>\n\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"totalpayments govuk-table__row\">\n <td class=\"govuk-table__cell summary-table-font\">{{ totalPayments | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell case-transaction__color summary-table-font\" *ngIf=\"isBulkScanEnable\">{{unprocessedRecordCount}}</td>\n\n <td class=\"govuk-table__cell summary-table-font\">{{ totalRemissions | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell summary-table-font\">{{ clAmountDue | currency :'GBP':'symbol':'1.2-2'}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='ORDERIDDETAILS'>\n\n <!--Payment Request-->\n <div class=\"paymentrequest\">\n <span class=\"heading-medium\">Service requests</span>\n <ng-container>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Party</td>\n <td class=\"govuk-table__header col-21\" scope=\"col\">Request reference</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header col\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"orderLevelFees?.length > 0\">\n <tr *ngFor=\"let orderRef of orderLevelFees;let i = index;\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderStatus}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ orderRef.orderTotalFees | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td *ngIf=\"cpoDetails !== null\" class=\"govuk-table__cell whitespace-inherit\">{{cpoDetails['responsibleParty']}}</td>\n <td *ngIf=\"cpoDetails === null\" class=\"govuk-table__cell whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderRefId}}</td>\n <td class=\"govuk-table__cell\">\n <a href=\"javascript:void(0)\" (click)=\"goToOrderViewDetailSection(orderRef)\">Review</a>\n </td>\n <td class=\"alignright\">\n\n <button type=\"submit\" (click)=\"redirectToOrderFeeSearchPage($event,orderRef)\"\n [disabled]=\"!orderRef.orderAddBtnEnable\"\n [ngClass]='!orderRef.orderAddBtnEnable ? \"govuk-button govuk-button--secondary govuk-button--disabled govuk-!-margin-right-1\" : \"govuk-button govuk-button--secondary govuk-!-margin-right-1\"'>\n Take telephony payment\n </button></td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body alignleft\" *ngIf=\"orderLevelFees?.length === 0\">\n <td colspan=\"6\">No service requests on this case.</td>\n </tbody>\n </table>\n </ng-container>\n <!-- <ng-container *ngIf=\"orderLevelFees?.length === 0\">\n <br/>No service requests on this case.<br/>\n </ng-container> -->\n <span>\n <br/>\n <a (click)=\"redirectToFeeSearchPage($event)\"\n [class.disable-link]=\"!isAddFeeBtnEnabled\">Create service request and pay</a><br/>\n </span>\n </div>\n <div>\n <span class=\"heading-medium\"><br/>Payments</span>\n <ccpay-app-unprocessed-payments\n *ngIf=\"isBulkScanEnable\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"3\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTREF]=\"paymentRef\"\n [FEE_RECORDS_EXISTS]=\"isFeeRecordsExist\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n\n <ng-container>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell col-14 whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell col-10 whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell col-17 whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell col-24 whitespace-inherit\">{{ payment.paymentGroupReference }}</td>\n <td class=\"govuk-table__cell col-13 whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0 && unprocessedRecordCount <= 0\">\n <td colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n\n </ng-container>\n\n </div>\n <div *ngIf=\"!check4AllowedRoles2AccessPBApayment()\">\n <span class=\"heading-medium\"><br/>Refunds</span>\n <ccpay-refund-status\n [ccdCaseNumber]=\"ccdCaseNumber\"\n [isTurnOff]=\"isTurnOff\"\n [LOGGEDINUSERROLES]=\"LOGGEDINUSERROLES\" \n [isEliginbleToAccess] = check4AllowedRoles2AccessRefund()\n ></ccpay-refund-status>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!takePayment && viewStatus === 'main'\">\n <div class=\"govuk-grid-column-full\" [ngClass]='serviceRequestValue!== \"false\" ? \"govuk-margin-btm-20px\" : \"\"'>\n <!-- <span *ngIf=\"serviceRequestValue === 'false'\" class=\"heading-medium\">Service requests</span> -->\n <ng-container *ngIf=\"!(orderLevelFees?.length === 0 && !isAnyFeeGroupAvilable) && serviceRequestValue !== 'false' \">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Party</td>\n <td class=\"govuk-table__header col-24\" scope=\"col\">Request reference\t</td>\n <td class=\"govuk-table__header col-9\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"orderLevelFees?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let orderRef of orderLevelFees;let i = index;\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderStatus}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderTotalFees | currency :'GBP':'symbol':'1.2-2'}}</td>\n <td *ngIf=\"cpoDetails !== null\" class=\"govuk-table__cell whitespace-inherit\">{{cpoDetails['responsibleParty']}}</td>\n <td *ngIf=\"cpoDetails === null\" class=\"govuk-table__cell whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderRef.orderRefId}}</td>\n <td class=\"govuk-table__cell of-visible\"> <a href=\"javascript:void(0)\" (click)=\"loadPBAAccountPage(orderRef)\" *ngIf=\"serviceRequestValue !== 'false' && check4AllowedRoles2AccessPBApayment() && orderRef.orderStatus === 'Not paid'\"> Pay now</a></td>\n <td class=\"govuk-table__cell\">\n <a href=\"javascript:void(0)\" (click)=\"goToOrderViewDetailSection(orderRef)\">Review</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"orderLevelFees?.length === 0 && serviceRequestValue === 'false'\">\n <tr class=\"govuk-table__row\" >\n <td class=\"alignleft\" colspan=\"7\">No service requests on this case.</td>\n </tr>\n </tbody>\n </table>\n </ng-container>\n <ng-container *ngIf=\"orderLevelFees?.length === 0 && serviceRequestValue !== 'false' && !isAnyFeeGroupAvilable\">\n <h1 class=\"govuk-heading-l govuk-heading-lw\">If you are expecting to pay and are not able to see a service request,</h1>\n <p>please refresh and try in some time.</p>\n </ng-container>\n\n <!-- </div> -->\n\n </div>\n\n <div class=\"govuk-grid-column-full\">\n <div *ngIf=\"serviceRequestValue === 'false'\">\n <span class=\"heading-medium\"><br/>Payments</span>\n <ng-container >\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-14\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-10\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-17\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header col-24\" scope=\"col\">Payment reference</td>\n <td class=\"govuk-table__header col-13\" scope=\"col\"></td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let payment of allPayments\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.status }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.amount | currency :'GBP':'symbol':'1.2-2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment.date_created | date:'dd MMM yyyy' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ payment?.reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"></td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToPayementView(payment.paymentGroupReference, payment.reference, payment.method)\">Review</a>\n </td>\n </tr>\n </tbody>\n\n <tbody class=\"govuk-table__body\" *ngIf=\"allPayments?.length === 0\">\n <td colspan=\"6\">No payments recorded</td>\n </tbody>\n </table>\n <ccpay-app-unprocessed-payments class=\"govuk-table\"\n *ngIf=\"isBulkScanEnable && !takePayment\"\n [IS_BUTTON_ENABLE]=\"takePayment\"\n [LEVEL]=\"4\"\n [ISTURNOFF]=\"isTurnOff\"\n [ISSFENABLE]=\"isStrategicFixEnable\"\n [PAYMENTSLENGTH]=\"allPayments?.length\"\n [PAYMENTREF]=\"paymentRef\"\n (getUnprocessedFeeCount) = \"getUnprocessedFeeCount($event)\"\n [FEE_RECORDS_EXISTS]=\"isAnyFeeGroupAvilable\"\n [IS_OS_AMT_AVAILABLE]=\"isGrpOutstandingAmtPositive\"\n (selectedUnprocessedFeeEvent) = \"selectedUnprocessedFeeEvent($event)\">\n </ccpay-app-unprocessed-payments>\n </ng-container>\n\n </div>\n </div>\n <div class=\"govuk-grid-column-full\" *ngIf=\"!check4AllowedRoles2AccessPBApayment()\">\n <span class=\"heading-medium\"><br/>Refunds</span>\n <ccpay-refund-status \n [ccdCaseNumber]=\"ccdCaseNumber\"\n [isEliginbleToAccess] = check4AllowedRoles2AccessRefund()\n ></ccpay-refund-status>\n </div>\n\n </ng-container>\n\n\n<input #myInput type='hidden' class='iFrameDrivenImageValue' value='FEEREMOVALCONFIRMATION_2'>\n\n<!-- Order Full View Details-->\n<ng-container *ngIf=\"viewStatus === 'order-full-view'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n [isServiceRequest] = \"serviceRequestValue\"\n (goToServiceRquestComponent) = \"goToServiceRequestPage()\"\n ></ccpay-service-request>\n\n</ng-container>\n<ccpay-add-remission *ngIf=\"viewStatus === 'addremission' && feeId\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[fee]=\"feeId\"\n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[paymentGroupRef]=\"orderRef\"\n[isFromServiceRequestPage] = \"true\"\n[payment] = \"payment\"\n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ccpay-add-remission *ngIf=\"viewStatus === 'issuerefund' && payment\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[isFromServiceRequestPage] = \"true\"\n[payment]=\"payment\"\n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[paymentGroupRef]=\"orderRef\"\n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ccpay-add-remission *ngIf=\"viewStatus === 'addrefundforremission' && payment\"\n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\"\n[viewCompStatus]= \"viewStatus\"\n[payment]=\"payment\"\n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\"\n[feeamount]=\"remissionFeeAmt\"\n[remission] = \"remissions\"\n[isFromServiceRequestPage]=\"true\"\n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n\n<ng-container *ngIf=\"viewStatus === 'feeRemovalConfirmation'\">\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)=\"cancelRemoval()\">\n Cancel\n </button>\n <button type=\"submit\" class=\"button\"\n [disabled]=\"isRemoveBtnDisabled\"\n [ngClass]='isRemoveBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"removeFee(feeId)\">\n Remove\n </button>\n </form>\n </div>\n</ng-container>\n\n</main>\n</div>\n",
1247
- styles: [".govuk-grid-column-full--gr{position:relative;margin-bottom:10px}.disable{text-decoration:none;cursor:default;color:#fff;background-color:grey;pointer-events:none}.govuk-grid__surplus-payments{margin:20px 0}.govuk-grid__surplus-payments>.govuk-grid-column-full{padding:0}.govuk-grid__surplus-payments-col1{margin-bottom:10px}.govuk-inset-text__no-border{border-left:0}.govuk-hidetext{font-size:22px;padding-bottom:10px}.lowercase{text-transform:lowercase}.channel::first-letter{text-transform:uppercase}.govuk-heading-xl{font-size:48px;margin-bottom:1px}.govuk-section-break--visible{border-bottom:2px solid #000}.totalpayments.govuk-table__row{border-bottom:2px solid #000!important}.govuk-inset-text{margin-left:1em}.govuk-button{font-size:19px;margin-bottom:0!important}.govuk-table__cell.govuk-table__cell--col6.govuk-table__custom--col6,.groupamount.govuk-table__header{text-align:right}.feeclass{padding-left:.7em}.align-center{text-align:center}details summary{display:list-item}.case-transaction__color{color:#a71414;font-weight:700;text-align:center}.capitalize::first-letter{text-transform:uppercase}.govuk-inset-text__no-left-margin{margin-left:0;padding-left:0}.whitespace-inherit{white-space:inherit!important}.govuk-section-records-break{margin:10px;border-bottom:2px solid #000!important}.exisitng-fees{margin-left:12px}.add-telephony-payment{margin-top:-2em;margin-left:-2em}.govuk-table__header--custom{text-align:center}.disable-link{cursor:default;pointer-events:none;color:#8e8c8c}.panel-no--style{border-left-style:none}.col-28{width:28%!important}.col-8{width:8%!important}.col-60{width:60%!important}.col-32{width:32%!important}.col-34{width:34%!important}.col-15{width:15%!important;padding-right:0!important;padding-left:0!important}.col-16{width:16%!important}.col-14{width:14%!important}.col-17{width:17%!important}.col-12{width:12%!important}.col-9{width:9%!important}.col-10{width:10%!important}.col-11{width:11%!important}.col-13{width:13%!important}.col-21{width:21%!important}.col-20{width:20%!important}.col-24{width:24%!important}.govuk-table__cell,.govuk-table__header{padding:10px 10px 10px 0}.col-27{width:27%!important}td{white-space:nowrap;overflow:hidden!important}.col-19{width:19%!important;padding-left:0!important}.col-18{width:18%!important;padding-left:0!important;padding-right:0!important}.col-37{width:37%!important}.col-55{width:55%!important}.govuk-table{margin-bottom:1px}.hmcts-banner>.hmcts-banner__message{font-size:19px;line-height:1.25}.summary-table-font{font-size:36px}.order-class{padding-top:3em}.govuk-table__cell:last-child,.govuk-table__header:last-child{text-align:right}.govuk-grid-column-two-thirds{width:64%!important;padding:0!important}.govuk-heading-l{font-size:36px;margin-bottom:10px}.govuk-heading-lw{width:70%}.paymentrequest{margin-top:1em}.mar-17{margin-left:17px}.col-61{width:61px!important;padding:0!important}.error{width:960px;margin:auto}.summarypage{padding-left:36em;margin-top:2em}.summarypagealign{width:100%;text-align:right;margin-top:2em}.govuk-inset-text{font-size:2.1875rem}table{table-layout:fixed;width:100%}td,th{word-wrap:break-word}.totalPay{padding-right:14px;float:right;margin-top:2em}.govuk-back-link{font-size:1.5rem!important}.totalfees{float:right;margin-top:2em}.refundBtn{text-align:right;width:18%}.col-25{width:25%!important}.of-visible{overflow:visible!important}.col-51{width:51%!important}.alignright{text-align:right}.alignleft{text-align:left}.alignself{align-self:flex-end}.maxwidth{width:100%}.govuk-padding-btm{padding-bottom:50px}.govuk-margin-btm-20px{margin-bottom:20px}"]
1248
- }] }
1249
- ];
1250
- /** @nocollapse */
1251
- CaseTransactionsComponent.ctorParameters = function () { return [
1252
- { type: Router },
1253
- { type: PaymentViewService },
1254
- { type: BulkScaningPaymentService },
1255
- { type: CaseTransactionsService },
1256
- { type: PaymentLibComponent },
1257
- { type: OrderslistService }
1258
- ]; };
1259
- CaseTransactionsComponent.propDecorators = {
1260
- LOGGEDINUSERROLES: [{ type: Input, args: ['LOGGEDINUSERROLES',] }],
1261
- isTakePayment: [{ type: Input }]
1262
- };
1263
- return CaseTransactionsComponent;
1264
- }());
1265
- export { CaseTransactionsComponent };
1266
- if (false) {
1267
- /** @type {?} */
1268
- CaseTransactionsComponent.prototype.LOGGEDINUSERROLES;
1269
- /** @type {?} */
1270
- CaseTransactionsComponent.prototype.isTakePayment;
1271
- /** @type {?} */
1272
- CaseTransactionsComponent.prototype.takePayment;
1273
- /** @type {?} */
1274
- CaseTransactionsComponent.prototype.ccdCaseNumber;
1275
- /** @type {?} */
1276
- CaseTransactionsComponent.prototype.excReference;
1277
- /** @type {?} */
1278
- CaseTransactionsComponent.prototype.paymentGroups;
1279
- /** @type {?} */
1280
- CaseTransactionsComponent.prototype.payments;
1281
- /** @type {?} */
1282
- CaseTransactionsComponent.prototype.nonPayments;
1283
- /** @type {?} */
1284
- CaseTransactionsComponent.prototype.allPayments;
1285
- /** @type {?} */
1286
- CaseTransactionsComponent.prototype.remissions;
1287
- /** @type {?} */
1288
- CaseTransactionsComponent.prototype.fees;
1289
- /** @type {?} */
1290
- CaseTransactionsComponent.prototype.errorMessage;
1291
- /** @type {?} */
1292
- CaseTransactionsComponent.prototype.totalFees;
1293
- /** @type {?} */
1294
- CaseTransactionsComponent.prototype.totalPayments;
1295
- /** @type {?} */
1296
- CaseTransactionsComponent.prototype.totalNonOffPayments;
1297
- /** @type {?} */
1298
- CaseTransactionsComponent.prototype.totalRemissions;
1299
- /** @type {?} */
1300
- CaseTransactionsComponent.prototype.selectedOption;
1301
- /** @type {?} */
1302
- CaseTransactionsComponent.prototype.dcnNumber;
1303
- /** @type {?} */
1304
- CaseTransactionsComponent.prototype.paymentRef;
1305
- /** @type {?} */
1306
- CaseTransactionsComponent.prototype.isTurnOff;
1307
- /** @type {?} */
1308
- CaseTransactionsComponent.prototype.isRefundRemission;
1309
- /** @type {?} */
1310
- CaseTransactionsComponent.prototype.isStrategicFixEnable;
1311
- /** @type {?} */
1312
- CaseTransactionsComponent.prototype.isAddFeeBtnEnabled;
1313
- /** @type {?} */
1314
- CaseTransactionsComponent.prototype.isExceptionRecord;
1315
- /** @type {?} */
1316
- CaseTransactionsComponent.prototype.isUnprocessedRecordSelected;
1317
- /** @type {?} */
1318
- CaseTransactionsComponent.prototype.exceptionRecordReference;
1319
- /** @type {?} */
1320
- CaseTransactionsComponent.prototype.isAnyFeeGroupAvilable;
1321
- /** @type {?} */
1322
- CaseTransactionsComponent.prototype.isHistoricGroupAvailable;
1323
- /** @type {?} */
1324
- CaseTransactionsComponent.prototype.isBulkScanEnable;
1325
- /** @type {?} */
1326
- CaseTransactionsComponent.prototype.isRemissionsMatch;
1327
- /** @type {?} */
1328
- CaseTransactionsComponent.prototype.viewStatus;
1329
- /** @type {?} */
1330
- CaseTransactionsComponent.prototype.isRemoveBtnDisabled;
1331
- /** @type {?} */
1332
- CaseTransactionsComponent.prototype.feeId;
1333
- /** @type {?} */
1334
- CaseTransactionsComponent.prototype.clAmountDue;
1335
- /** @type {?} */
1336
- CaseTransactionsComponent.prototype.unprocessedRecordCount;
1337
- /** @type {?} */
1338
- CaseTransactionsComponent.prototype.isFeeRecordsExist;
1339
- /** @type {?} */
1340
- CaseTransactionsComponent.prototype.isGrpOutstandingAmtPositive;
1341
- /** @type {?} */
1342
- CaseTransactionsComponent.prototype.totalRefundAmount;
1343
- /** @type {?} */
1344
- CaseTransactionsComponent.prototype.caseType;
1345
- /** @type {?} */
1346
- CaseTransactionsComponent.prototype.payment;
1347
- /** @type {?} */
1348
- CaseTransactionsComponent.prototype.paymentGroup;
1349
- /** @type {?} */
1350
- CaseTransactionsComponent.prototype.paymentView;
1351
- /** @type {?} */
1352
- CaseTransactionsComponent.prototype.orderDetail;
1353
- /** @type {?} */
1354
- CaseTransactionsComponent.prototype.isAddRemissionEnable;
1355
- /** @type {?} */
1356
- CaseTransactionsComponent.prototype.orderRemissionDetails;
1357
- /** @type {?} */
1358
- CaseTransactionsComponent.prototype.orderLevelFees;
1359
- /** @type {?} */
1360
- CaseTransactionsComponent.prototype.ispaymentGroupApisuccess;
1361
- /** @type {?} */
1362
- CaseTransactionsComponent.prototype.cpoDetails;
1363
- /** @type {?} */
1364
- CaseTransactionsComponent.prototype.orderRef;
1365
- /** @type {?} */
1366
- CaseTransactionsComponent.prototype.orderStatus;
1367
- /** @type {?} */
1368
- CaseTransactionsComponent.prototype.orderParty;
1369
- /** @type {?} */
1370
- CaseTransactionsComponent.prototype.orderCreated;
1371
- /** @type {?} */
1372
- CaseTransactionsComponent.prototype.orderCCDEvent;
1373
- /** @type {?} */
1374
- CaseTransactionsComponent.prototype.serviceRequestValue;
1375
- /** @type {?} */
1376
- CaseTransactionsComponent.prototype.orderAddBtnEnable;
1377
- /** @type {?} */
1378
- CaseTransactionsComponent.prototype.orderFeesTotal;
1379
- /** @type {?} */
1380
- CaseTransactionsComponent.prototype.orderRemissionTotal;
1381
- /** @type {?} */
1382
- CaseTransactionsComponent.prototype.orderTotalPayments;
1383
- /** @type {?} */
1384
- CaseTransactionsComponent.prototype.orderPendingPayments;
1385
- /** @type {?} */
1386
- CaseTransactionsComponent.prototype.isCPODown;
1387
- /** @type {?} */
1388
- CaseTransactionsComponent.prototype.test;
1389
- /** @type {?} */
1390
- CaseTransactionsComponent.prototype.isPBA;
1391
- /** @type {?} */
1392
- CaseTransactionsComponent.prototype.isIssueRefunfBtnEnable;
1393
- /** @type {?} */
1394
- CaseTransactionsComponent.prototype.isAddRemissionBtnEnabled;
1395
- /** @type {?} */
1396
- CaseTransactionsComponent.prototype.isRefundRemissionBtnEnable;
1397
- /** @type {?} */
1398
- CaseTransactionsComponent.prototype.allowedRolesToAccessRefund;
1399
- /** @type {?} */
1400
- CaseTransactionsComponent.prototype.isEligible4PBAPayment;
1401
- /** @type {?} */
1402
- CaseTransactionsComponent.prototype.currentDate;
1403
- /** @type {?} */
1404
- CaseTransactionsComponent.prototype.isFromServiceRequestPage;
1405
- /** @type {?} */
1406
- CaseTransactionsComponent.prototype.navigationpage;
1407
- /** @type {?} */
1408
- CaseTransactionsComponent.prototype.remissionFeeAmt;
1409
- /** @type {?} */
1410
- CaseTransactionsComponent.prototype.check4AllowedRoles2AccessRefund;
1411
- /** @type {?} */
1412
- CaseTransactionsComponent.prototype.check4AllowedRoles2AccessPBApayment;
1413
- /** @type {?} */
1414
- CaseTransactionsComponent.prototype.allowFurtherAccessAfter4Days;
1415
- /**
1416
- * @type {?}
1417
- * @private
1418
- */
1419
- CaseTransactionsComponent.prototype.router;
1420
- /**
1421
- * @type {?}
1422
- * @private
1423
- */
1424
- CaseTransactionsComponent.prototype.paymentViewService;
1425
- /**
1426
- * @type {?}
1427
- * @private
1428
- */
1429
- CaseTransactionsComponent.prototype.bulkScaningPaymentService;
1430
- /**
1431
- * @type {?}
1432
- * @private
1433
- */
1434
- CaseTransactionsComponent.prototype.caseTransactionsService;
1435
- /**
1436
- * @type {?}
1437
- * @private
1438
- */
1439
- CaseTransactionsComponent.prototype.paymentLibComponent;
1440
- /**
1441
- * @type {?}
1442
- * @private
1443
- */
1444
- CaseTransactionsComponent.prototype.OrderslistService;
1445
- /* Skipping unhandled member: ;*/
1446
- /* Skipping unhandled member: ;*/
1447
- }
1448
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS10cmFuc2FjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL2NjcGF5LXdlYi1jb21wb25lbnQvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNyRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQU10RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0lBRW5DLGNBQWMsR0FBRyx1QkFBdUI7QUFFOUM7SUFpRkUsbUNBQW9CLE1BQWMsRUFDeEIsa0JBQXNDLEVBQ3RDLHlCQUFvRCxFQUNwRCx1QkFBZ0QsRUFDaEQsbUJBQXdDLEVBQ3hDLGlCQUFvQztRQUw5QyxpQkFNSztRQU5lLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDeEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBM0U5QyxrQkFBYSxHQUFVLEVBQUUsQ0FBQztRQUMxQixhQUFRLEdBQWUsRUFBRSxDQUFDO1FBQzFCLGdCQUFX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QzlCLHdEQUFtQzs7SUFDbkMsdURBQWtDOztJQUNsQyx5REFBb0M7O0lBQ3BDLDhDQUFtQjs7SUFDbkIseUNBQWM7O0lBQ2QsMENBQXVCOztJQUN2QiwyREFBd0M7O0lBQ3hDLDZEQUEwQzs7SUFDMUMsK0RBQTRDOztJQUM1QywrREFBNkU7O0lBQzdFLDBEQUFvSDs7SUFDcEgsZ0RBQXlCOztJQUN6Qiw2REFBa0M7O0lBQ2xDLG1EQUF1Qjs7SUFDdkIsb0RBQXdCOztJQXV0QnhCLG9FQUlDOztJQUNELHdFQUlDOztJQUVELGlFQU1DOzs7OztJQXZ1QlcsMkNBQXNCOzs7OztJQUNoQyx1REFBOEM7Ozs7O0lBQzlDLDhEQUE0RDs7Ozs7SUFDNUQsNERBQXdEOzs7OztJQUN4RCx3REFBZ0Q7Ozs7O0lBQ2hELHNEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJUGF5bWVudEdyb3VwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudEdyb3VwJztcbmltcG9ydCB7IENhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FzZS10cmFuc2FjdGlvbnMvY2FzZS10cmFuc2FjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnVsay1zY2FuaW5nLXBheW1lbnQvYnVsay1zY2FuaW5nLXBheW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JkZXJzbGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcmRlcnNsaXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZlZSc7XG5pbXBvcnQgeyBJUGF5bWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHsgSVJlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5pbXBvcnQgeyBJUGF5bWVudFZpZXcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50Vmlldyc7XG5pbXBvcnQgeyBJT3JkZXJSZWZlcmVuY2VGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lPcmRlclJlZmVyZW5jZUZlZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1jYXNlLXRyYW5zYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYXNlVHJhbnNhY3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdMT0dHRURJTlVTRVJST0xFUycpIExPR0dFRElOVVNFUlJPTEVTOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgaXNUYWtlUGF5bWVudDogYm9vbGVhbjtcbiAgdGFrZVBheW1lbnQ6IGJvb2xlYW47XG4gIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgZXhjUmVmZXJlbmNlOiBzdHJpbmc7XG4gIHBheW1lbnRHcm91cHM6IGFueVtdID0gW107XG4gIHBheW1lbnRzOiBJUGF5bWVudFtdID0gW107XG4gIG5vblBheW1lbnRzOiBJUGF5bWVudFtdID0gW107XG4gIGFsbFBheW1lbnRzOiBJUGF5bWVudFtdID0gW107XG4gIHJlbWlzc2lvbnM6IElSZW1pc3Npb25bXSA9IFtdO1xuICBmZWVzOiBJRmVlW10gPSBbXTtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIHRvdGFsRmVlczogbnVtYmVyO1xuICB0b3RhbFBheW1lbnRzOiBudW1iZXI7XG4gIHRvdGFsTm9uT2ZmUGF5bWVudHM6IG51bWJlcjtcbiAgdG90YWxSZW1pc3Npb25zOiBudW1iZXI7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGRjbk51bWJlcjogc3RyaW5nO1xuICBwYXltZW50UmVmOiBzdHJpbmc7XG4gIGlzVHVybk9mZjogYm9vbGVhbjtcbiAgaXNSZWZ1bmRSZW1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xuICBpc1N0cmF0ZWdpY0ZpeEVuYWJsZTogYm9vbGVhbjtcbiAgaXNBZGRGZWVCdG5FbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNFeGNlcHRpb25SZWNvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGV4Y2VwdGlvblJlY29yZFJlZmVyZW5jZTogc3RyaW5nO1xuICBpc0FueUZlZUdyb3VwQXZpbGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0hpc3RvcmljR3JvdXBBdmFpbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNCdWxrU2NhbkVuYWJsZTtcbiAgaXNSZW1pc3Npb25zTWF0Y2g6IGJvb2xlYW47XG4gIHZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIGlzUmVtb3ZlQnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmVlSWQ6IElGZWU7XG4gIGNsQW1vdW50RHVlOiBudW1iZXIgPSAwO1xuICB1bnByb2Nlc3NlZFJlY29yZENvdW50OiBudW1iZXI7XG4gIGlzRmVlUmVjb3Jkc0V4aXN0OiBib29sZWFuID0gZmFsc2U7XG4gIGlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICB0b3RhbFJlZnVuZEFtb3VudDogTnVtYmVyO1xuICBjYXNlVHlwZTogU3RyaW5nO1xuICAvLyBsc0NjZE51bWJlcjogYW55ID0gbHMuZ2V0PGFueT4oJ2NjZE51bWJlcicpO1xuICBwYXltZW50OiBJUGF5bWVudDtcbiAgcGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwO1xuICBwYXltZW50VmlldzogSVBheW1lbnRWaWV3O1xuXG4gIC8vT3JkZXIgY2hhbmdlc1xuICBvcmRlckRldGFpbDogYW55W10gPSBbXTtcblxuICBpc0FkZFJlbWlzc2lvbkVuYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBvcmRlclJlbWlzc2lvbkRldGFpbHM6IGFueVtdID0gW107XG4gIG9yZGVyTGV2ZWxGZWVzOiBJT3JkZXJSZWZlcmVuY2VGZWVbXSA9IFtdO1xuICBpc3BheW1lbnRHcm91cEFwaXN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3BvRGV0YWlsczogYW55ID0gbnVsbDtcbiAgb3JkZXJSZWY6IHN0cmluZztcbiAgb3JkZXJTdGF0dXM6IHN0cmluZztcbiAgb3JkZXJQYXJ0eTogc3RyaW5nO1xuICBvcmRlckNyZWF0ZWQ6IERhdGU7XG4gIG9yZGVyQ0NERXZlbnQ6IHN0cmluZztcbiAgc2VydmljZVJlcXVlc3RWYWx1ZTogc3RyaW5nO1xuICBvcmRlckFkZEJ0bkVuYWJsZTogYm9vbGVhbjtcbiAgb3JkZXJGZWVzVG90YWw6IG51bWJlciA9IDAuMDA7XG4gIG9yZGVyUmVtaXNzaW9uVG90YWw6IG51bWJlciA9IDAuMDA7XG4gIG9yZGVyVG90YWxQYXltZW50czogbnVtYmVyID0gMC4wMDtcbiAgb3JkZXJQZW5kaW5nUGF5bWVudHM6IG51bWJlciA9IDAuMDA7XG4gIGlzQ1BPRG93bjogYm9vbGVhbjtcbiAgdGVzdDogYm9vbGVhbjtcbiAgaXNQQkE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJc3N1ZVJlZnVuZkJ0bkVuYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0FkZFJlbWlzc2lvbkJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWZ1bmRSZW1pc3Npb25CdG5FbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWxsb3dlZFJvbGVzVG9BY2Nlc3NSZWZ1bmQgPSBbJ3BheW1lbnRzLXJlZnVuZC1hcHByb3ZlcicsICdwYXltZW50cy1yZWZ1bmQnXTtcbiAgaXNFbGlnaWJsZTRQQkFQYXltZW50ID0gWydwdWktZmluYW5jZS1tYW5hZ2VyJywgJ3B1aS11c2VyLW1hbmFnZXInLCAncHVpLW9yZ2FuaXNhdGlvbi1tYW5hZ2VyJywgJ3B1aS1jYXNlLW1hbmFnZXInXTtcbiAgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICBpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2U6IGJvb2xlYW47XG4gIG5hdmlnYXRpb25wYWdlOiBzdHJpbmc7XG4gIHJlbWlzc2lvbkZlZUFtdDogbnVtYmVyO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBidWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlOiBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2U6IENhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCxcbiAgICBwcml2YXRlIE9yZGVyc2xpc3RTZXJ2aWNlOiBPcmRlcnNsaXN0U2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubmF2aWdhdGlvbnBhZ2UgID0gJyc7XG4gICAgaWYodGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRwYXltZW50UGFnZVZpZXcoKSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRwYXltZW50UGFnZVZpZXcoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMucGF5bWVudFZpZXcgPSBkYXRhKTtcbiAgICB9XG4gICAgaWYoKHRoaXMuTE9HR0VESU5VU0VSUk9MRVMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLkxPR0dFRElOVVNFUlJPTEVTLmxlbmd0aCA9PT0gMCApJiZ0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldFVzZXJSb2xlc0xpc3QoKSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRVc2VyUm9sZXNMaXN0KCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLkxPR0dFRElOVVNFUlJPTEVTID0gZGF0YSk7XG4gICAgfVxuICAgIGlmKHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0bmF2aWdhdGlvblBhZ2VWYWx1ZSgpICE9PSBudWxsKSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldG5hdmlnYXRpb25QYWdlVmFsdWUoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMubmF2aWdhdGlvbnBhZ2UgPSBkYXRhKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMucGF5bWVudFZpZXcgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnBheW1lbnRWaWV3ICE9PSBudWxsICYmIHRoaXMucGF5bWVudFZpZXcucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgIT09IHVuZGVmaW5lZCAmJiB0aGlzLm5hdmlnYXRpb25wYWdlID09PSAncGF5bWVudGRldGFpbHNwYWdlJykge1xuICAgICAgdGhpcy5nb1RvUGF5ZW1lbnRWaWV3KHRoaXMucGF5bWVudFZpZXcucGF5bWVudF9ncm91cF9yZWZlcmVuY2UsIHRoaXMucGF5bWVudFZpZXcucmVmZXJlbmNlLCB0aGlzLnBheW1lbnRWaWV3Lm1ldGhvZCk7XG4gICAgfVxuICAgIHRoaXMuaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmNhc2VUeXBlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNBU0VUWVBFO1xuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID09PSAnJykge1xuICAgICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgfVxuICAgIHRoaXMuZXhjUmVmZXJlbmNlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0U7XG4gICAgdGhpcy50YWtlUGF5bWVudCA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVDtcbiAgICBcbiAgICBjb25zdCBzZXJ2aWNlUmVxdWVzdCA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVDtcbiAgICBpZiAoIHNlcnZpY2VSZXF1ZXN0ICE9PSB1bmRlZmluZWQgJiYgc2VydmljZVJlcXVlc3QudG9TdHJpbmcoKSA9PT0gJ3RydWUnICkge1xuICAgICAgdGhpcy5zZXJ2aWNlUmVxdWVzdFZhbHVlID0gJ3RydWUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2VSZXF1ZXN0VmFsdWUgPSAnZmFsc2UnO1xuICAgIH1cbiAgICB0aGlzLmlzQnVsa1NjYW5FbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRTtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5pc1R1cm5PZmYgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGO1xuICAgIHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNTRkVOQUJMRTtcbiAgICBpZiAoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAvLyBpZiAodGhpcy5sc0NjZE51bWJlciAhPT0gdGhpcy5jY2RDYXNlTnVtYmVyKSB7XG4gICAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9jY2Qtc2VhcmNoP3Rha2VQYXltZW50PXRydWVgKTtcbiAgICAgIC8vIH1cblxuICAgICAgdGhpcy5jYXNlVHJhbnNhY3Rpb25zU2VydmljZS5nZXRQYXltZW50R3JvdXBzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50R3JvdXBzID0+IHtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9dHJ1ZTtcbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHMgPSBwYXltZW50R3JvdXBzWydwYXltZW50X2dyb3VwcyddO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlT3JkZXJGZWVzQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUmVmdW5kQW1vdW50KCk7XG4gICAgICAgICAgaWYgKHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldFNlbGVjdGVkT3JkZXJSZWZJZCgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5vcmRlclJlZiA9IGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5nb1RvT3JkZXJWaWV3RGV0YWlsU2VjdGlvbih0aGlzLm9yZGVyUmVmKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0UGFydHlEZXRhaWxzKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcG9EZXRhaWxzID0gSlNPTi5wYXJzZShyZXNwb25zZSkuY29udGVudFswXTtcblxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gPGFueT5lcnJvciA/IGVycm9yLnJlcGxhY2UoL1wiL2csXCJcIikgOiBcIlwiO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDUE9Eb3duID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIH1cblxuXG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSA8YW55PmVycm9yID8gZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKSA6IFwiXCI7XG4gICAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHRzKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UuZ2V0UGF5bWVudEdyb3Vwcyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwcyA9PiB7XG4gICAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPXRydWU7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzID0gcGF5bWVudEdyb3Vwc1sncGF5bWVudF9ncm91cHMnXTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUFtb3VudHMoKTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZU9yZGVyRmVlc0Ftb3VudHMoKTtcbiAgICAgICAgICB0aGlzLnRvdGFsUmVmdW5kQW1vdW50ID0gdGhpcy5jYWxjdWxhdGVSZWZ1bmRBbW91bnQoKTtcbiAgICAgICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRQYXJ0eURldGFpbHModGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY3BvRGV0YWlscyA9IEpTT04ucGFyc2UocmVzcG9uc2UpLmNvbnRlbnRbMF07XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IDxhbnk+ZXJyb3IgPyBlcnJvci5yZXBsYWNlKC9cIi9nLFwiXCIpIDogXCJcIjtcbiAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0cygpO1xuICAgICAgICAgICAgICB0aGlzLmlzQ1BPRG93biA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gPGFueT5lcnJvciA/IGVycm9yLnJlcGxhY2UoL1wiL2csXCJcIikgOiBcIlwiO1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zZXREZWZhdWx0cygpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmKCB0aGlzLnBheW1lbnRHcm91cHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jaGVja0ZvckV4Y2VwdGlvblJlY29yZCgpO1xuICAgIH1cblxuICAgIGlmKHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0aXNGcm9tU2VydmljZVJlcXVlc3RQYWdlcygpICE9PSBudWxsKSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZXMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlID0gZGF0YSk7XG4gICAgfVxuXG4gIH1cblxuICBzZXREZWZhdWx0cygpOiB2b2lkIHtcbiAgICB0aGlzLnRvdGFsUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxSZW1pc3Npb25zID0gMC4wMDtcbiAgICB0aGlzLnRvdGFsTm9uT2ZmUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxGZWVzID0gMC4wMDtcbiAgfVxuXG4gIGdldEFsbG9jYXRpb25TdGF0dXMocGF5bWVudHM6IGFueSkge1xuXG4gICAgbGV0IHBheW1lbnRBbGxvY2F0aW9uID0gcGF5bWVudHMucGF5bWVudF9hbGxvY2F0aW9uLFxuICAgICAgaXNBbGxvY2F0aW9uU3RhdHVzRXhpc3QgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwO1xuICAgIHJldHVybiBpc0FsbG9jYXRpb25TdGF0dXNFeGlzdCA/IHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzIDogJy0nO1xuICAgIC8vcmV0dXJuIFwiLVwiO1xuXG4gIH1cblxuICBjaGVja0ZvckV4Y2VwdGlvblJlY29yZCgpOiB2b2lkIHtcblxuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID09PSAwICYmICh0aGlzLnNlbGVjdGVkT3B0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdjY2RvcmV4Y2VwdGlvbicgfHwgdGhpcy5zZWxlY3RlZE9wdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAncmMnKSkge1xuICAgICAgdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmdldEJTUGF5bWVudHNCeUNDRCh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcmVjb3JkRGF0YSA9PiB7XG4gICAgICAgICAgaWYgKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmNjZF9yZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWNvcmREYXRhWydkYXRhJ10gJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZS5sZW5ndGggPT09IHVuZGVmaW5lZCAmJiByZWNvcmREYXRhWydkYXRhJ10uY2NkX3JlZmVyZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID09PSAwICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ2RjbicpIHtcbiAgICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLmxlbmd0aCA+IDAgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0UubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUi5sZW5ndGggPT09IDAgJiYgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkVYQ19SRUZFUkVOQ0UubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5wYXltZW50R3JvdXBzLmxlbmd0aCA+IDApXG4gICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bWVudC5jYXNlX3JlZmVyZW5jZSAhPT0gdW5kZWZpbmVkICYmIHBheW1lbnQuY2NkX2Nhc2VfbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU9yZGVyRmVlc0Ftb3VudHMoKTogdm9pZCB7XG4gICAgbGV0IGZlZXNUb3RhbCA9IDAuMDA7XG4gICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2gocGF5bWVudEdyb3VwID0+IHtcbiAgICAgIHRoaXMucmVzZXRPcmRlclZhcmlhYmxlcygpO1xuICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5mZWVzLmZvckVhY2goZmVlID0+IHtcbiAgICAgICAgICB0aGlzLm9yZGVyRmVlc1RvdGFsID0gdGhpcy5vcmRlckZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudFxuICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID0gdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzID0gKHRoaXMub3JkZXJGZWVzVG90YWwgLSB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwpIC0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHM7XG4gICAgICBpZiAocGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXMgPT09ICdQYWlkJykge1xuICAgICAgICB0aGlzLm9yZGVyU3RhdHVzID0gcGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXM7XG4gICAgICAgIHRoaXMub3JkZXJBZGRCdG5FbmFibGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXMgPT09ICdQYXJ0aWFsbHkgcGFpZCcgfHwgcGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXMgPT09ICdOb3QgcGFpZCcpIHtcbiAgICAgICAgdGhpcy5vcmRlclN0YXR1cyA9IHBheW1lbnRHcm91cC5zZXJ2aWNlX3JlcXVlc3Rfc3RhdHVzO1xuICAgICAgICB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXMgPT09ICdEaXNwdXRlZCcpe1xuICAgICAgICB0aGlzLm9yZGVyU3RhdHVzID0gcGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXM7XG4gICAgICAgIHRoaXMub3JkZXJBZGRCdG5FbmFibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvL3RoaXMub3JkZXJMZXZlbEZlZXMucHVzaCh7b3JkZXJSZWZJZDpwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10sb3JkZXJUb3RhbEZlZXM6IHRoaXMub3JkZXJGZWVzVG90YWwsb3JkZXJTdGF0dXM6IHRoaXMub3JkZXJTdGF0dXMsb3JkZXJQYXJ0eTonU2FudG9zaCcsIG9yZGVyQ0NERXZlbnQ6J0Nhc2UgQ3JlYXRpb24nLG9yZGVyQ3JlYXRlZDogbmV3IERhdGUoKSwgb3JkZXJBZGRCdG5FbmFibGU6IHRoaXMub3JkZXJBZGRCdG5FbmFibGV9KTsgdGhpcy5jcG9EZXRhaWxzWydjcmVhdGVkVGltZXN0YW1wJ11cbiAgICAgIGlmICh0aGlzLmNwb0RldGFpbHMgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5vcmRlckxldmVsRmVlcy5wdXNoKHsgb3JkZXJSZWZJZDogcGF5bWVudEdyb3VwWydwYXltZW50X2dyb3VwX3JlZmVyZW5jZSddLCBvcmRlclRvdGFsRmVlczogdGhpcy5vcmRlckZlZXNUb3RhbCwgb3JkZXJTdGF0dXM6IHRoaXMub3JkZXJTdGF0dXMsIG9yZGVyUGFydHk6IHRoaXMuY3BvRGV0YWlsc1sncmVzcG9uc2libGVQYXJ0eSddLCBvcmRlckNDREV2ZW50OiB0aGlzLmNwb0RldGFpbHNbJ2FjdGlvbiddLCBvcmRlckNyZWF0ZWQ6IHBheW1lbnRHcm91cFsnZGF0ZV9jcmVhdGVkJ10sIG9yZGVyQWRkQnRuRW5hYmxlOiB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlIH0pO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9yZGVyTGV2ZWxGZWVzLnB1c2goeyBvcmRlclJlZklkOiBwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10sIG9yZGVyVG90YWxGZWVzOiB0aGlzLm9yZGVyRmVlc1RvdGFsLCBvcmRlclN0YXR1czogdGhpcy5vcmRlclN0YXR1cywgb3JkZXJQYXJ0eTogJycsIG9yZGVyQ0NERXZlbnQ6ICcnLCBvcmRlckNyZWF0ZWQ6IHBheW1lbnRHcm91cFsnZGF0ZV9jcmVhdGVkJ10sIG9yZGVyQWRkQnRuRW5hYmxlOiB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcmRlclN0YXR1cyAhPT0gJ1BhaWQnKSB7XG4gICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJzTGlzdCh0aGlzLm9yZGVyTGV2ZWxGZWVzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICByZXNldE9yZGVyVmFyaWFibGVzKCk6IHZvaWQge1xuICAgIHRoaXMub3JkZXJGZWVzVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gMC4wMDtcbiAgICB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcblxuICB9O1xuXG4gIGdvVG9PcmRlclZpZXdEZXRhaWxTZWN0aW9uKG9yZGVyUmVmZXJlbmNlT2JqOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UpIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWZJZChvcmRlclJlZmVyZW5jZU9iaik7XG4gICAgICB0aGlzLm9yZGVyUmVmID0gb3JkZXJSZWZlcmVuY2VPYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0T3JkZXJSZWZJZChvcmRlclJlZmVyZW5jZU9iai5vcmRlclJlZklkKTtcbiAgICAgIHRoaXMub3JkZXJSZWYgPSBvcmRlclJlZmVyZW5jZU9iai5vcmRlclJlZklkO1xuICAgIH1cblxuICAgIHRoaXMub3JkZXJGZWVzVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA9IDAuMDA7XG4gICAgdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMgPSAwLjAwO1xuXG4gICAgdGhpcy5vcmRlckRldGFpbCA9IHRoaXMucGF5bWVudEdyb3Vwcy5maWx0ZXIoeCA9PiB4LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlID09PSB0aGlzLm9yZGVyUmVmKTtcbiAgICB0aGlzLm9yZGVyRGV0YWlsLmZvckVhY2gob3JkZXJEZXRhaWwgPT4ge1xuICAgICAgaWYgKG9yZGVyRGV0YWlsLmZlZXMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlckZlZXNUb3RhbCA9IHRoaXMub3JkZXJGZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9yZGVyRGV0YWlsLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgb3JkZXJEZXRhaWwucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzc2lvbiA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID0gdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JkZXJEZXRhaWwucGF5bWVudHMpIHtcbiAgICAgICAgICB0aGlzLnBheW1lbnQgPSBvcmRlckRldGFpbC5wYXltZW50c1swXTtcbiAgICAgICAgICBvcmRlckRldGFpbC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICB0aGlzLm9yZGVyVG90YWxQYXltZW50cyA9IHRoaXMub3JkZXJUb3RhbFBheW1lbnRzICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMub3JkZXJTdGF0dXMgPSBvcmRlckRldGFpbC5zZXJ2aWNlX3JlcXVlc3Rfc3RhdHVzO1xuICAgIH0pO1xuICAgIC8vdGhpcy5vcmRlclBlbmRpbmdQYXltZW50cyA9ICh0aGlzLm9yZGVyRmVlc1RvdGFsIC0gdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsKSAtIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzO1xuICAgIC8vIHRoaXMub3JkZXJSZWYgPSBvcmRlclJlZmVyZW5jZU9iai5vcmRlclJlZklkO1xuICAgIC8vIGlmICh0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzIDw9IDAuMDApIHtcbiAgICAvLyAgIHRoaXMub3JkZXJTdGF0dXMgPSAnUGFpZCc7XG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLm9yZGVyRmVlc1RvdGFsID4gMCAmJiAodGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPiAwIHx8IHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA+IDApICYmICh0aGlzLm9yZGVyVG90YWxQYXltZW50cyA8IHRoaXMub3JkZXJQZW5kaW5nUGF5bWVudHMpKSB7XG4gICAgLy8gICB0aGlzLm9yZGVyU3RhdHVzID0gJ1BhcnRpYWxseSBwYWlkJ1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICB0aGlzLm9yZGVyU3RhdHVzID0gJ05vdCBwYWlkJ1xuICAgIC8vIH1cblxuXG4gICAgaWYgKHRoaXMuY3BvRGV0YWlscyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5vcmRlclBhcnR5ID0gdGhpcy5jcG9EZXRhaWxzWydyZXNwb25zaWJsZVBhcnR5J107XG4gICAgICB0aGlzLm9yZGVyQ3JlYXRlZCA9IHRoaXMuY3BvRGV0YWlsc1snY3JlYXRlZFRpbWVzdGFtcCddO1xuICAgICAgdGhpcy5vcmRlckNDREV2ZW50ID0gdGhpcy5jcG9EZXRhaWxzWydhY3Rpb24nXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcmRlclBhcnR5ID0gJyc7XG4gICAgICB0aGlzLm9yZGVyQ0NERXZlbnQgPSAnJztcbiAgICAgIHRoaXMub3JkZXJDcmVhdGVkID0gb3JkZXJSZWZlcmVuY2VPYmoub3JkZXJDcmVhdGVkO1xuICAgIH1cbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnb3JkZXItZnVsbC12aWV3JztcbiAgfVxuXG4gIHJlZGlyZWN0VG9PcmRlckZlZVNlYXJjaFBhZ2UoZXZlbnQ6IGFueSwgb3JkZXJlZjogYW55KSB7XG4gICAgaWYob3JkZXJlZi5vcmRlckFkZEJ0bkVuYWJsZSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IG51bGw7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IG9yZGVyZWYub3JkZXJSZWZJZDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNUdXJuT2ZmID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB9XG4gIH1cblxuXG5cblxuICBjYWxjdWxhdGVBbW91bnRzKCk6IHZvaWQge1xuICAgIGxldCBmZWVzVG90YWwgPSAwLjAwLFxuICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICByZW1pc3Npb25zVG90YWwgPSAwLjAwLFxuICAgICAgbm9uT2ZmTGluZVBheW1lbnQgPSAwLjAwO1xuXG4gICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2gocGF5bWVudEdyb3VwID0+IHtcbiAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgLy8gbmV3IGZlYXR1cmUgQXBwb3J0aW9ubWVudCB0b2dnbGUgY2hhbmdlc1xuICAgICAgICAgIGlmICghdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgICAgIGlmIChmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICAgICAgICAgIGxldCBhID0gZmVlLmFtb3VudF9kdWUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgbGV0IGIgPSBmZWUuYW1vdW50X2R1ZSA8PSAwO1xuICAgICAgICAgICAgICB0aGlzLmNsQW1vdW50RHVlID0gYSA/IHRoaXMuY2xBbW91bnREdWUgKyBmZWUubmV0X2Ftb3VudCA6IGIgPyB0aGlzLmNsQW1vdW50RHVlICsgMCA6IHRoaXMuY2xBbW91bnREdWUgKyBmZWUuYW1vdW50X2R1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlZVsncGF5bWVudF9ncm91cF9yZWZlcmVuY2UnXSA9IHBheW1lbnRHcm91cFsncGF5bWVudF9ncm91cF9yZWZlcmVuY2UnXTtcbiAgICAgICAgICAgIHRoaXMuZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZlZXNUb3RhbCA9IGZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudDtcbiAgICAgICAgICAgIHRoaXMuZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgIHRoaXMudG90YWxGZWVzID0gZmVlc1RvdGFsO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgICAgICBpZiAoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgICAgICBsZXQgYWxsb2NhdGlvbkxlbiA9IHBheW1lbnQucGF5bWVudF9hbGxvY2F0aW9uO1xuXG4gICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uTGVuLmxlbmd0aCA9PT0gMCB8fCBhbGxvY2F0aW9uTGVuLmxlbmd0aCA+IDAgJiYgYWxsb2NhdGlvbkxlblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcpIHtcbiAgICAgICAgICAgICAgICBub25PZmZMaW5lUGF5bWVudCA9IG5vbk9mZkxpbmVQYXltZW50ICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25MZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9uUGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25MZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlXG4gICAgICAgICAgICB0aGlzLmFsbFBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF5bWVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2VcbiAgICAgICAgICAgIHRoaXMuYWxsUGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy50b3RhbFBheW1lbnRzID0gcGF5bWVudHNUb3RhbDtcbiAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgIGlmICghdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgdGhpcy50b3RhbE5vbk9mZlBheW1lbnRzID0gbm9uT2ZmTGluZVBheW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzaXNvbiA9PiB7XG4gICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNpc29uLmh3Zl9hbW91bnQ7XG4gICAgICAgICAgdGhpcy5yZW1pc3Npb25zLnB1c2gocmVtaXNpc29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvdGFsUmVtaXNzaW9ucyA9IHJlbWlzc2lvbnNUb3RhbDtcbiAgICB9KTtcblxuICB9XG5cbiAgY2FsY3VsYXRlUmVmdW5kQW1vdW50KCkge1xuICAgIGlmICghdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgIGxldCBpc05ld1BheW1lbnRHcm91cCA9IGZhbHNlO1xuXG4gICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaCgocGF5bWVudEdyb3VwLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAwLjAwLFxuICAgICAgICAgIGZlZXNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gMC4wMCxcbiAgICAgICAgICBmZWVzID0gW107XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgICAgLy8gdGhpcy5pc0ZlZVJlY29yZHNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgZmVlc1RvdGFsID0gZmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuXG4gICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZW0uZmVlX2NvZGUgPT09IGZlZS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGZlZVsncmVtaXNzaW9ucyddID0gcmVtO1xuICAgICAgICAgICAgICAgICAgLy8gaWYoIWZlZXMuZmluZChrID0+IGsuY29kZT1mZWUuY29kZSkpXG4gICAgICAgICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgICAgICAgIC8vfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSZW1pc3Npb25zTWF0Y2gpIHtcbiAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICAgICAgICAgIGlzTmV3UGF5bWVudEdyb3VwID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzW2luZGV4XVsnb2xkJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3Vwc1tpbmRleF0uZmVlcyA9IGZlZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5yZW1pc3Npb25zKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc3Npb24gPT4ge1xuICAgICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAoZmVlc1RvdGFsIC0gcmVtaXNzaW9uc1RvdGFsKSAtIHBheW1lbnRzVG90YWw7XG4gICAgICAgIGlmIChncnBPdXRzdGFuZGluZ0Ftb3VudCA+IDAgJiYgaXNOZXdQYXltZW50R3JvdXApIHtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0ZlZVJlY29yZHNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wYXltZW50UmVmID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcyAmJiBwYXltZW50R3JvdXAuZmVlcy5sZW5ndGggPiAwICYmIGdycE91dHN0YW5kaW5nQW1vdW50IDw9IDAgJiYgaXNOZXdQYXltZW50R3JvdXApIHtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICgoIWlzTmV3UGF5bWVudEdyb3VwICYmIHRoaXMuaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlKSB8fCAoIWlzTmV3UGF5bWVudEdyb3VwICYmICF0aGlzLmlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZSkpIHtcbiAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRvdGFsUmVmdW5kQW1vdW50ID0gMCxcbiAgICAgICAgaXNGZWVBbW91bnRaZXJvID0gZmFsc2U7XG4gICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICBsZXQgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAwLjAwLFxuICAgICAgICAgIGZlZXNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gMC4wMDtcbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgICAgdGhpcy5pc0ZlZVJlY29yZHNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgZmVlc1RvdGFsID0gZmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuICAgICAgICAgICAgaWYgKGZlZS5jYWxjdWxhdGVkX2Ftb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICBpc0ZlZUFtb3VudFplcm8gPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXltZW50R3JvdXAucGF5bWVudHMpIHtcbiAgICAgICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtaXNzaW9uID0+IHtcbiAgICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IHJlbWlzc2lvbnNUb3RhbCArIHJlbWlzc2lvbi5od2ZfYW1vdW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdycE91dHN0YW5kaW5nQW1vdW50ID0gKGZlZXNUb3RhbCAtIHJlbWlzc2lvbnNUb3RhbCkgLSBwYXltZW50c1RvdGFsO1xuICAgICAgICBpZiAoZ3JwT3V0c3RhbmRpbmdBbW91bnQgPCAwKSB7XG4gICAgICAgICAgaWYgKHRvdGFsUmVmdW5kQW1vdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0b3RhbFJlZnVuZEFtb3VudCA9IGdycE91dHN0YW5kaW5nQW1vdW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b3RhbFJlZnVuZEFtb3VudCA9ICh0b3RhbFJlZnVuZEFtb3VudCArIGdycE91dHN0YW5kaW5nQW1vdW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZ3JwT3V0c3RhbmRpbmdBbW91bnQgPiAwIHx8IChncnBPdXRzdGFuZGluZ0Ftb3VudCA9PT0gMCAmJiBpc0ZlZUFtb3VudFplcm8pKSB7XG4gICAgICAgICAgdGhpcy5pc0dycE91dHN0YW5kaW5nQW10UG9zaXRpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0b3RhbFJlZnVuZEFtb3VudCAqIC0xO1xuICAgIH1cbiAgfVxuXG4gIGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmNhbGN1bGF0ZU91dFN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCk7XG4gIH1cblxuICByZWRpcmVjdFRvRmVlU2VhcmNoUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgdXJsID0gdGhpcy5pc0J1bGtTY2FuRW5hYmxlID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICB1cmwgKz0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgdXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICB1cmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YFxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9mZWUtc2VhcmNoP3NlbGVjdGVkT3B0aW9uPSR7dGhpcy5zZWxlY3RlZE9wdGlvbn0mY2NkQ2FzZU51bWJlcj0ke3RoaXMuY2NkQ2FzZU51bWJlcn0ke3VybH1gKTtcbiAgfVxuXG4gIGFkZFJlbWlzc2lvbihmZWU6IElGZWUpIHtcbiAgICBpZih0aGlzLmNoa0ZvckFkZFJlbWlzc2lvbihmZWUuY29kZSkpIHtcbiAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdhZGRyZW1pc3Npb24nO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHRoaXMucGF5bWVudC5yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1xuXG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMuZmlsdGVyXG4gICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKSk7XG4gICAgICAgIHRoaXMucGF5bWVudCA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdO1xuICAgICAgICAvLyBjb25zdCBwYXltZW50QWxsb2NhdGlvbiA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnBheW1lbnRfYWxsb2NhdGlvbjtcbiAgICAgICAgLy8gdGhpcy5pc1N0YXR1c0FsbG9jYXRlZCA9IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA+IDAgJiYgcGF5bWVudEFsbG9jYXRpb25bMF0uYWxsb2NhdGlvbl9zdGF0dXMgPT09ICdBbGxvY2F0ZWQnIHx8IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA9PT0gMDtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4gdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcj8gZXJyb3IucmVwbGFjZSgvXCIvZyxcIlwiKSA6IFwiXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYWRkUmVmdW5kRm9yUmVtaXNzaW9uKHBheW1lbnQ6IElQYXltZW50LCByZW1pc3Npb246IElSZW1pc3Npb25bXSxmZWVzOmFueSkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdhZGRyZWZ1bmRmb3JyZW1pc3Npb24nO1xuXG4gICAgdGhpcy5wYXltZW50ID0gcGF5bWVudDtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRBcHBvcnRpb25QYXltZW50RGV0YWlscyh0aGlzLnBheW1lbnQucmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRHcm91cDtcblxuICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAgIChwYXltZW50R3JvdXBPYmogPT4gcGF5bWVudEdyb3VwT2JqWydyZWZlcmVuY2UnXS5pbmNsdWRlcyh0aGlzLnBheW1lbnQucmVmZXJlbmNlKSk7XG4gICAgICAgIHRoaXMucGF5bWVudCA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdO1xuICAgICAgICB0aGlzLnJlbWlzc2lvbnMgPSByZW1pc3Npb247XG4gICAgICAgIHRoaXMucmVtaXNzaW9uRmVlQW10ID0gZmVlcy5maWx0ZXIoZGF0YT0+ZGF0YS5jb2RlID09PSB0aGlzLnJlbWlzc2lvbnNbJ2ZlZV9jb2RlJ10pWzBdLm5ldF9hbW91bnQ7XG4gICAgICAgIC8vIGNvbnN0IHBheW1lbnRBbGxvY2F0aW9uID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucGF5bWVudF9hbGxvY2F0aW9uO1xuICAgICAgICAvLyB0aGlzLmlzU3RhdHVzQWxsb2NhdGVkID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4gMCAmJiBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcgfHwgcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID09PSAwO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yXG4gICAgKTtcbiAgfVxuXG4gIHJlZGlyZWN0VG9yZW1pc3Npb25QYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdyZW1pc3Npb24nXG4gIH1cbiAgZ29Ub1NlcnZpY2VSZXF1ZXN0UGFnZSgpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IGZhbHNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVCA9ICd0cnVlJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlID0gdHJ1ZTtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gIH1cbiAgcmVkaXJlY3RUb1JlcG9ydHNQYWdlKGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9yZXBvcnRzP3NlbGVjdGVkT3B0aW9uPSR7dGhpcy5zZWxlY3RlZE9wdGlvbn0mY2NkQ2FzZU51bWJlcj0ke3RoaXMuY2NkQ2FzZU51bWJlcn1gKTtcbiAgfVxuXG4gIGxvYWRGZWVTdW1tYXJ5UGFnZShwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXApIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuID0gbnVsbDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc1R1cm5PZmYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnZmVlLXN1bW1hcnknO1xuICB9XG5cbiAgZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50KHBheW1lbnRHcm91cDogYW55KSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRNZXRob2QgPSBwYXltZW50R3JvdXAucGF5bWVudE1ldGhvZDtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRHcm91cFJlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSA9IHBheW1lbnRHcm91cC5wYXltZW50UmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LXZpZXcnO1xuICB9XG5cbiAgZ29Ub1BheWVtZW50VmlldyhwYXltZW50R3JvdXBSZWZlcmVuY2U6IHN0cmluZywgcGF5bWVudFJlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50TWV0aG9kOiBzdHJpbmcpIHtcbiAgICB0aGlzLmdvVG9QYXltZW50Vmlld0NvbXBvbmVudCh7IHBheW1lbnRHcm91cFJlZmVyZW5jZSwgcGF5bWVudFJlZmVyZW5jZSwgcGF5bWVudE1ldGhvZCB9KTtcbiAgfVxuXG4gIHNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCh1bnByb2Nlc3NlZFJlY29yZElkOiBzdHJpbmcpIHtcbiAgICBpZiAodW5wcm9jZXNzZWRSZWNvcmRJZCkge1xuICAgICAgaWYgKHRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlzVHVybk9mZikge1xuICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldFVucHJvY2Vzc2VkRmVlQ291bnQodW5Qcm9jZXNzZWRSZWNvcmRDb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy51bnByb2Nlc3NlZFJlY29yZENvdW50ID0gdW5Qcm9jZXNzZWRSZWNvcmRDb3VudDtcbiAgfVxuXG4gIGNhbGN1bGF0ZUFtb3VudER1ZShmZWU6IElGZWUpIHtcblxuICAgIGlmIChmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICByZXR1cm4gZmVlLmFtb3VudF9kdWUgIT09IHVuZGVmaW5lZCA/IGZlZS5hbW91bnRfZHVlIDogZmVlLm5ldF9hbW91bnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIjAuMDBcIjtcbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtb3ZlRmVlKGZlZTogSUZlZSkge1xuICAgIHRoaXMuaXNSZW1vdmVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmVlSWQgPSBmZWU7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ2ZlZVJlbW92YWxDb25maXJtYXRpb24nO1xuICB9XG5cbiAgY2FuY2VsUmVtb3ZhbCgpIHtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbic7XG4gIH1cblxuICByZW1vdmVGZWUoZmVlOiBhbnkpIHtcbiAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmRlbGV0ZUZlZUZyb21QYXltZW50R3JvdXAoZmVlKS5zdWJzY3JpYmUoXG4gICAgICAoc3VjY2VzczogYW55KSA9PiB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzUmVtb3ZlQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgaXNDaGVja0Ftb3VudGR1ZUV4aXN0KGFtb3VudER1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhbW91bnREdWUgPT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgaXNzdWVSZWZ1bmQocGF5bWVudDogSVBheW1lbnQpIHtcbiAgICBpZiAocGF5bWVudCAhPT0gbnVsbCAmJiBwYXltZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZih0aGlzLmNoa0lzc3VlUmVmdW5kQnRuRW5hYmxlKHBheW1lbnQpKSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ2lzc3VlcmVmdW5kJztcbiAgICB0aGlzLnBheW1lbnQgPSBwYXltZW50O1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSB0cnVlO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuICB9XG5cbiAgY2hrRm9yQWRkUmVtaXNzaW9uKGZlZUNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoa0ZvclBCQVBheW1lbnQoKSAmJiB0aGlzLmNoZWNrNEFsbG93ZWRSb2xlczJBY2Nlc3NSZWZ1bmQoKSkge1xuICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxbMF1bJ3JlbWlzc2lvbnMnXS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVtaXNzaW9uIG9mIHRoaXMub3JkZXJEZXRhaWxbMF1bJ3JlbWlzc2lvbnMnXSkge1xuICAgICAgICAgIGlmIChyZW1pc3Npb24uZmVlX2NvZGUgPT09IGZlZUNvZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hrRm9yUEJBUGF5bWVudCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5vcmRlckRldGFpbCAhPT0gbnVsbCAmJiAgdGhpcy5vcmRlckRldGFpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5vcmRlckRldGFpbC5mb3JFYWNoKG9yZGVyRGV0YWlsID0+IHtcbiAgICAgIGlmIChvcmRlckRldGFpbC5wYXltZW50cykge1xuICAgICAgICBvcmRlckRldGFpbC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgIGlmIChwYXltZW50Lm1ldGhvZC50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAncGF5bWVudCBieSBhY2NvdW50JyAmJiB0aGlzLmFsbG93RnVydGhlckFjY2Vzc0FmdGVyNERheXMocGF5bWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQQkEgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuaXNQQkEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuICB9XG5cbiAgY2hrSXNzdWVSZWZ1bmRCdG5FbmFibGUocGF5bWVudDogSVBheW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kKCkgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpICYmXG4gICAgICBwYXltZW50Lm1ldGhvZCA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCcgJiYgcGF5bWVudC5zdGF0dXMudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICB0aGlzLmlzSXNzdWVSZWZ1bmZCdG5FbmFibGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0lzc3VlUmVmdW5mQnRuRW5hYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH1cblxuICBjaGtJc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5vcmRlckRldGFpbCAhPT0gbnVsbCAmJiAgdGhpcy5vcmRlckRldGFpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLm9yZGVyRGV0YWlsLmZvckVhY2gob3JkZXJEZXRhaWwgPT4ge1xuICAgICAgaWYgKG9yZGVyRGV0YWlsLnBheW1lbnRzKSB7XG4gICAgICAgIG9yZGVyRGV0YWlsLnBheW1lbnRzLmZvckVhY2gocGF5bWVudCA9PiB7XG4gICAgICAgICAgaWYgKHBheW1lbnQubWV0aG9kLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdwYXltZW50IGJ5IGFjY291bnQnICYmIHBheW1lbnQuc3RhdHVzLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdzdWNjZXNzJyAmJiB0aGlzLmFsbG93RnVydGhlckFjY2Vzc0FmdGVyNERheXMocGF5bWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb25CdG5FbmFibGUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuaXNSZWZ1bmRSZW1pc3Npb25CdG5FbmFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuICB9XG5cbiAgY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1JlZnVuZCA9ICgpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZC5zb21lKHJvbGUgPT5cbiAgICAgIHRoaXMuTE9HR0VESU5VU0VSUk9MRVMuaW5kZXhPZihyb2xlKSAhPT0gLTFcbiAgICApO1xuICB9XG4gIGNoZWNrNEFsbG93ZWRSb2xlczJBY2Nlc3NQQkFwYXltZW50ID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmlzRWxpZ2libGU0UEJBUGF5bWVudC5zb21lKHJvbGUgPT5cbiAgICAgIHRoaXMuTE9HR0VESU5VU0VSUk9MRVMuaW5kZXhPZihyb2xlKSAhPT0gLTFcbiAgICApO1xuICB9XG5cbiAgYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyA9IChwYXltZW50OiBJUGF5bWVudCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmIChwYXltZW50ICE9PSBudWxsICYmIHBheW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCB0bXA0RGF5QWdvID0gbmV3IERhdGUoKTtcbiAgICB0bXA0RGF5QWdvLnNldERhdGUodG1wNERheUFnby5nZXREYXRlKCkgLSA0KTtcbiAgICByZXR1cm4gdG1wNERheUFnbyA+PSBuZXcgRGF0ZShwYXltZW50LmRhdGVfY3JlYXRlZCk7XG4gICAgfVxuICB9XG5cbiAgbG9hZFBCQUFjY291bnRQYWdlKG9yZGVyUmVmOiBJUGF5bWVudCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYmFQYXlPcmRlclJlZiA9IG9yZGVyUmVmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYmEtcGF5bWVudCc7XG4gIH1cbn1cbiJdfQ==