@hmcts/ccpay-web-component 6.0.0-beta9 → 6.0.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.
- package/esm2022/hmcts-ccpay-web-component.mjs +5 -0
- package/esm2022/lib/components/add-remission/add-remission.component.mjs +1189 -0
- package/esm2022/lib/components/allocate-payments/allocate-payments.component.mjs +407 -0
- package/esm2022/lib/components/card-details/card-details.component.mjs +32 -0
- package/esm2022/lib/components/case-transactions/case-transactions.component.mjs +798 -0
- package/esm2022/lib/components/contact-details/contact-details.component.mjs +338 -0
- package/esm2022/lib/components/error-banner/error-banner.component.mjs +18 -0
- package/esm2022/lib/components/fee-summary/fee-summary.component.mjs +247 -0
- package/esm2022/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.mjs +195 -0
- package/esm2022/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.mjs +255 -0
- package/esm2022/lib/components/notification-preview/notification-preview.component.mjs +79 -0
- package/esm2022/lib/components/page-not-found.component.mjs +17 -0
- package/esm2022/lib/components/payment-list/payment-list.component.mjs +36 -0
- package/esm2022/lib/components/payment-view/payment-view.component.mjs +416 -0
- package/esm2022/lib/components/pba-details/pba-details.component.mjs +18 -0
- package/esm2022/lib/components/pba-payment/pba-payment.component.mjs +151 -0
- package/esm2022/lib/components/process-refund/process-refund.component.mjs +417 -0
- package/esm2022/lib/components/processed-payments/processed-payments.component.mjs +37 -0
- package/esm2022/lib/components/refund-list/refund-list.component.mjs +73 -0
- package/esm2022/lib/components/refund-status/refund-status.component.mjs +453 -0
- package/esm2022/lib/components/reports/reports.component.mjs +291 -0
- package/esm2022/lib/components/service-request/service-request.component.mjs +456 -0
- package/esm2022/lib/components/status-history/status-history.component.mjs +33 -0
- package/esm2022/lib/components/table/table.component.mjs +128 -0
- package/esm2022/lib/components/unprocessed-payments/unprocessed-payments.component.mjs +236 -0
- package/esm2022/lib/interfaces/AddRemissionRequest.mjs +17 -0
- package/esm2022/lib/interfaces/AddRetroRemissionRequest.mjs +9 -0
- package/esm2022/lib/interfaces/AllocatePaymentRequest.mjs +41 -0
- package/esm2022/lib/interfaces/IAllocationPaymentsRequest.mjs +20 -0
- package/esm2022/lib/interfaces/IBSPayments.mjs +2 -0
- package/esm2022/lib/interfaces/ICardDetails.mjs +2 -0
- package/esm2022/lib/interfaces/IFee.mjs +2 -0
- package/esm2022/lib/interfaces/INotificationPreview.mjs +2 -0
- package/esm2022/lib/interfaces/IOrderReferenceFee.mjs +2 -0
- package/esm2022/lib/interfaces/IPatchRefundAction.mjs +2 -0
- package/esm2022/lib/interfaces/IPayment.mjs +2 -0
- package/esm2022/lib/interfaces/IPaymentFailure.mjs +2 -0
- package/esm2022/lib/interfaces/IPaymentGroup.mjs +2 -0
- package/esm2022/lib/interfaces/IPaymentStatus.mjs +12 -0
- package/esm2022/lib/interfaces/IPaymentView.mjs +2 -0
- package/esm2022/lib/interfaces/IPayments.mjs +2 -0
- package/esm2022/lib/interfaces/IPutNotificationRequest.mjs +13 -0
- package/esm2022/lib/interfaces/IRefundAction.mjs +2 -0
- package/esm2022/lib/interfaces/IRefundContactDetails.mjs +2 -0
- package/esm2022/lib/interfaces/IRefundFee.mjs +2 -0
- package/esm2022/lib/interfaces/IRefundList.mjs +2 -0
- package/esm2022/lib/interfaces/IRefundReasons.mjs +2 -0
- package/esm2022/lib/interfaces/IRefundRejectReason.mjs +2 -0
- package/esm2022/lib/interfaces/IRefundStatus.mjs +2 -0
- package/esm2022/lib/interfaces/IRefundStatusHistory.mjs +2 -0
- package/esm2022/lib/interfaces/IRefundsNotifications.mjs +2 -0
- package/esm2022/lib/interfaces/IRemission.mjs +2 -0
- package/esm2022/lib/interfaces/IResubmitRefundRequest.mjs +13 -0
- package/esm2022/lib/interfaces/IStatusHistories.mjs +2 -0
- package/esm2022/lib/interfaces/IStatusHistory.mjs +2 -0
- package/esm2022/lib/interfaces/IserviceRequestCardPayment.mjs +11 -0
- package/esm2022/lib/interfaces/IserviceRequestPbaPayment.mjs +15 -0
- package/esm2022/lib/interfaces/IssueRefundRequest.mjs +11 -0
- package/esm2022/lib/interfaces/NotificationPreviewRequest.mjs +45 -0
- package/esm2022/lib/interfaces/PayhubAntennaRequest.mjs +12 -0
- package/esm2022/lib/interfaces/PaymentToPayhubRequest.mjs +15 -0
- package/esm2022/lib/interfaces/PostIssueRefundRetroRemission.mjs +9 -0
- package/esm2022/lib/interfaces/PostRefundRetroRemission.mjs +18 -0
- package/esm2022/lib/interfaces/RefundsRequest.mjs +9 -0
- package/esm2022/lib/interfaces/UnidentifiedPaymentsRequest.mjs +16 -0
- package/esm2022/lib/interfaces/UnsolicitedPaymentsRequest.mjs +22 -0
- package/esm2022/lib/payment-lib.component.mjs +288 -0
- package/esm2022/lib/payment-lib.module.mjs +187 -0
- package/esm2022/lib/payment-lib.service.mjs +49 -0
- package/esm2022/lib/pipes/capitalize.pipe.mjs +18 -0
- package/esm2022/lib/pipes/ccd-hyphens.pipe.mjs +22 -0
- package/esm2022/lib/pipes/key-value.pipe.mjs +23 -0
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
- package/esm2022/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.mjs +87 -0
- package/esm2022/lib/services/card-details/card-details.service.mjs +39 -0
- package/esm2022/lib/services/case-transactions/case-transactions.service.mjs +39 -0
- package/esm2022/lib/services/notification/notification.service.mjs +70 -0
- package/esm2022/lib/services/orderslist.service.mjs +154 -0
- package/esm2022/lib/services/payment-list/payment-list.service.mjs +40 -0
- package/esm2022/lib/services/payment-view/payment-view.service.mjs +152 -0
- package/esm2022/lib/services/refunds/refunds.service.mjs +117 -0
- package/esm2022/lib/services/shared/error-handler.service.mjs +96 -0
- package/esm2022/lib/services/shared/httpclient/webcomponent.http.client.mjs +64 -0
- package/esm2022/lib/services/shared/logger/console-logger.service.mjs +43 -0
- package/esm2022/lib/services/shared/logger/logger.service.mjs +23 -0
- package/{esm2015/lib/services/status-history/status-history.service.js → esm2022/lib/services/status-history/status-history.service.mjs} +13 -51
- package/esm2022/lib/services/xl-file/xl-file.service.mjs +153 -0
- package/esm2022/public_api.mjs +7 -0
- package/fesm2022/hmcts-ccpay-web-component.mjs +7874 -0
- package/fesm2022/hmcts-ccpay-web-component.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/add-remission/add-remission.component.d.ts +59 -7
- package/lib/components/allocate-payments/allocate-payments.component.d.ts +5 -6
- package/lib/components/card-details/card-details.component.d.ts +4 -1
- package/lib/components/case-transactions/case-transactions.component.d.ts +9 -7
- package/lib/components/contact-details/contact-details.component.d.ts +52 -0
- package/lib/components/error-banner/error-banner.component.d.ts +3 -0
- package/lib/components/fee-summary/fee-summary.component.d.ts +4 -3
- package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +4 -1
- package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +4 -1
- package/lib/components/notification-preview/notification-preview.component.d.ts +30 -0
- package/lib/components/page-not-found.component.d.ts +3 -0
- package/lib/components/payment-list/payment-list.component.d.ts +4 -1
- package/lib/components/payment-view/payment-view.component.d.ts +46 -12
- package/lib/components/pba-details/pba-details.component.d.ts +3 -0
- package/lib/components/pba-payment/pba-payment.component.d.ts +9 -1
- package/lib/components/process-refund/process-refund.component.d.ts +22 -2
- package/lib/components/processed-payments/processed-payments.component.d.ts +3 -0
- package/lib/components/refund-list/refund-list.component.d.ts +3 -0
- package/lib/components/refund-status/refund-status.component.d.ts +50 -10
- package/lib/components/reports/reports.component.d.ts +10 -5
- package/lib/components/service-request/service-request.component.d.ts +42 -14
- package/lib/components/status-history/status-history.component.d.ts +4 -1
- package/lib/components/table/table.component.d.ts +5 -1
- package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +4 -5
- package/lib/interfaces/IFee.d.ts +6 -0
- package/lib/interfaces/INotificationPreview.d.ts +27 -0
- package/lib/interfaces/IPayment.d.ts +3 -0
- package/lib/interfaces/IPaymentFailure.d.ts +13 -0
- package/lib/interfaces/IPutNotificationRequest.d.ts +6 -0
- package/lib/interfaces/IRefundContactDetails.d.ts +9 -0
- package/lib/interfaces/IRefundFee.d.ts +7 -0
- package/lib/interfaces/IRefundList.d.ts +5 -0
- package/lib/interfaces/IRefundsNotifications.d.ts +16 -0
- package/lib/interfaces/IRemission.d.ts +3 -0
- package/lib/interfaces/IResubmitRefundRequest.d.ts +5 -1
- package/lib/interfaces/IserviceRequestPbaPayment.d.ts +2 -1
- package/lib/interfaces/NotificationPreviewRequest.d.ts +24 -0
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +3 -1
- package/lib/interfaces/PostRefundRetroRemission.d.ts +7 -1
- package/lib/payment-lib.component.d.ts +7 -5
- package/lib/payment-lib.module.d.ts +40 -0
- package/lib/payment-lib.service.d.ts +9 -3
- package/lib/pipes/capitalize.pipe.d.ts +3 -0
- package/lib/pipes/ccd-hyphens.pipe.d.ts +3 -0
- package/lib/pipes/key-value.pipe.d.ts +3 -0
- package/lib/pipes/sanitize-html.pipe.d.ts +3 -0
- package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +4 -1
- package/lib/services/card-details/card-details.service.d.ts +3 -0
- package/lib/services/case-transactions/case-transactions.service.d.ts +4 -1
- package/lib/services/notification/notification.service.d.ts +21 -0
- package/lib/services/orderslist.service.d.ts +3 -0
- package/lib/services/payment-list/payment-list.service.d.ts +3 -0
- package/lib/services/payment-view/payment-view.service.d.ts +6 -1
- package/lib/services/refunds/refunds.service.d.ts +6 -1
- package/lib/services/shared/error-handler.service.d.ts +5 -2
- package/lib/services/shared/httpclient/webcomponent.http.client.d.ts +3 -0
- package/lib/services/shared/logger/console-logger.service.d.ts +6 -3
- package/lib/services/shared/logger/logger.service.d.ts +3 -0
- package/lib/services/status-history/status-history.service.d.ts +3 -0
- package/lib/services/xl-file/xl-file.service.d.ts +4 -0
- package/package.json +18 -14
- package/bundles/hmcts-ccpay-web-component.umd.js +0 -9664
- package/bundles/hmcts-ccpay-web-component.umd.js.map +0 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js +0 -2
- package/bundles/hmcts-ccpay-web-component.umd.min.js.map +0 -1
- package/esm2015/hmcts-ccpay-web-component.js +0 -48
- package/esm2015/lib/components/add-remission/add-remission.component.js +0 -1083
- package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +0 -692
- package/esm2015/lib/components/card-details/card-details.component.js +0 -71
- package/esm2015/lib/components/case-transactions/case-transactions.component.js +0 -1298
- package/esm2015/lib/components/error-banner/error-banner.component.js +0 -30
- package/esm2015/lib/components/fee-summary/fee-summary.component.js +0 -482
- package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +0 -342
- package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +0 -436
- package/esm2015/lib/components/page-not-found.component.js +0 -15
- package/esm2015/lib/components/payment-list/payment-list.component.js +0 -75
- package/esm2015/lib/components/payment-view/payment-view.component.js +0 -514
- package/esm2015/lib/components/pba-details/pba-details.component.js +0 -30
- package/esm2015/lib/components/pba-payment/pba-payment.component.js +0 -205
- package/esm2015/lib/components/process-refund/process-refund.component.js +0 -455
- package/esm2015/lib/components/processed-payments/processed-payments.component.js +0 -72
- package/esm2015/lib/components/refund-list/refund-list.component.js +0 -127
- package/esm2015/lib/components/refund-status/refund-status.component.js +0 -497
- package/esm2015/lib/components/reports/reports.component.js +0 -357
- package/esm2015/lib/components/service-request/service-request.component.js +0 -626
- package/esm2015/lib/components/status-history/status-history.component.js +0 -68
- package/esm2015/lib/components/table/table.component.js +0 -196
- package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +0 -385
- package/esm2015/lib/interfaces/AddRemissionRequest.js +0 -37
- package/esm2015/lib/interfaces/AddRetroRemissionRequest.js +0 -21
- package/esm2015/lib/interfaces/AllocatePaymentRequest.js +0 -68
- package/esm2015/lib/interfaces/IAllocationPaymentsRequest.js +0 -39
- package/esm2015/lib/interfaces/IBSPayments.js +0 -45
- package/esm2015/lib/interfaces/ICardDetails.js +0 -21
- package/esm2015/lib/interfaces/IFee.js +0 -53
- package/esm2015/lib/interfaces/IOrderReferenceFee.js +0 -25
- package/esm2015/lib/interfaces/IPatchRefundAction.js +0 -15
- package/esm2015/lib/interfaces/IPayment.js +0 -65
- package/esm2015/lib/interfaces/IPaymentGroup.js +0 -19
- package/esm2015/lib/interfaces/IPaymentStatus.js +0 -27
- package/esm2015/lib/interfaces/IPaymentView.js +0 -17
- package/esm2015/lib/interfaces/IPayments.js +0 -13
- package/esm2015/lib/interfaces/IRefundAction.js +0 -15
- package/esm2015/lib/interfaces/IRefundList.js +0 -29
- package/esm2015/lib/interfaces/IRefundReasons.js +0 -19
- package/esm2015/lib/interfaces/IRefundRejectReason.js +0 -15
- package/esm2015/lib/interfaces/IRefundStatus.js +0 -23
- package/esm2015/lib/interfaces/IRefundStatusHistory.js +0 -15
- package/esm2015/lib/interfaces/IRemission.js +0 -25
- package/esm2015/lib/interfaces/IResubmitRefundRequest.js +0 -21
- package/esm2015/lib/interfaces/IStatusHistories.js +0 -19
- package/esm2015/lib/interfaces/IStatusHistory.js +0 -21
- package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +0 -23
- package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +0 -28
- package/esm2015/lib/interfaces/IssueRefundRequest.js +0 -25
- package/esm2015/lib/interfaces/PayhubAntennaRequest.js +0 -28
- package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +0 -37
- package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +0 -17
- package/esm2015/lib/interfaces/PostRefundRetroRemission.js +0 -21
- package/esm2015/lib/interfaces/RefundsRequest.js +0 -21
- package/esm2015/lib/interfaces/UnidentifiedPaymentsRequest.js +0 -31
- package/esm2015/lib/interfaces/UnsolicitedPaymentsRequest.js +0 -43
- package/esm2015/lib/payment-lib.component.js +0 -275
- package/esm2015/lib/payment-lib.module.js +0 -99
- package/esm2015/lib/payment-lib.service.js +0 -80
- package/esm2015/lib/pipes/capitalize.pipe.js +0 -24
- package/esm2015/lib/pipes/ccd-hyphens.pipe.js +0 -29
- package/esm2015/lib/pipes/key-value.pipe.js +0 -30
- package/esm2015/lib/pipes/sanitize-html.pipe.js +0 -36
- package/esm2015/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +0 -180
- package/esm2015/lib/services/card-details/card-details.service.js +0 -76
- package/esm2015/lib/services/case-transactions/case-transactions.service.js +0 -76
- package/esm2015/lib/services/orderslist.service.js +0 -403
- package/esm2015/lib/services/payment-list/payment-list.service.js +0 -79
- package/esm2015/lib/services/payment-view/payment-view.service.js +0 -285
- package/esm2015/lib/services/refunds/refunds.service.js +0 -203
- package/esm2015/lib/services/shared/error-handler.service.js +0 -108
- package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +0 -124
- package/esm2015/lib/services/shared/logger/console-logger.service.js +0 -67
- package/esm2015/lib/services/shared/logger/logger.service.js +0 -49
- package/esm2015/lib/services/xl-file/xl-file.service.js +0 -181
- package/esm2015/public_api.js +0 -11
- package/esm5/hmcts-ccpay-web-component.js +0 -48
- package/esm5/lib/components/add-remission/add-remission.component.js +0 -1168
- package/esm5/lib/components/allocate-payments/allocate-payments.component.js +0 -745
- package/esm5/lib/components/card-details/card-details.component.js +0 -77
- package/esm5/lib/components/case-transactions/case-transactions.component.js +0 -1443
- package/esm5/lib/components/error-banner/error-banner.component.js +0 -36
- package/esm5/lib/components/fee-summary/fee-summary.component.js +0 -542
- package/esm5/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +0 -371
- package/esm5/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +0 -474
- package/esm5/lib/components/page-not-found.component.js +0 -17
- package/esm5/lib/components/payment-list/payment-list.component.js +0 -83
- package/esm5/lib/components/payment-view/payment-view.component.js +0 -602
- package/esm5/lib/components/pba-details/pba-details.component.js +0 -36
- package/esm5/lib/components/pba-payment/pba-payment.component.js +0 -222
- package/esm5/lib/components/process-refund/process-refund.component.js +0 -536
- package/esm5/lib/components/processed-payments/processed-payments.component.js +0 -83
- package/esm5/lib/components/refund-list/refund-list.component.js +0 -130
- package/esm5/lib/components/refund-status/refund-status.component.js +0 -558
- package/esm5/lib/components/reports/reports.component.js +0 -398
- package/esm5/lib/components/service-request/service-request.component.js +0 -702
- package/esm5/lib/components/status-history/status-history.component.js +0 -70
- package/esm5/lib/components/table/table.component.js +0 -229
- package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +0 -434
- package/esm5/lib/interfaces/AddRemissionRequest.js +0 -32
- package/esm5/lib/interfaces/AddRetroRemissionRequest.js +0 -19
- package/esm5/lib/interfaces/AllocatePaymentRequest.js +0 -63
- package/esm5/lib/interfaces/IAllocationPaymentsRequest.js +0 -34
- package/esm5/lib/interfaces/IBSPayments.js +0 -45
- package/esm5/lib/interfaces/ICardDetails.js +0 -21
- package/esm5/lib/interfaces/IFee.js +0 -53
- package/esm5/lib/interfaces/IOrderReferenceFee.js +0 -25
- package/esm5/lib/interfaces/IPatchRefundAction.js +0 -15
- package/esm5/lib/interfaces/IPayment.js +0 -65
- package/esm5/lib/interfaces/IPaymentGroup.js +0 -19
- package/esm5/lib/interfaces/IPaymentStatus.js +0 -31
- package/esm5/lib/interfaces/IPaymentView.js +0 -17
- package/esm5/lib/interfaces/IPayments.js +0 -13
- package/esm5/lib/interfaces/IRefundAction.js +0 -15
- package/esm5/lib/interfaces/IRefundList.js +0 -29
- package/esm5/lib/interfaces/IRefundReasons.js +0 -19
- package/esm5/lib/interfaces/IRefundRejectReason.js +0 -15
- package/esm5/lib/interfaces/IRefundStatus.js +0 -23
- package/esm5/lib/interfaces/IRefundStatusHistory.js +0 -15
- package/esm5/lib/interfaces/IRemission.js +0 -25
- package/esm5/lib/interfaces/IResubmitRefundRequest.js +0 -19
- package/esm5/lib/interfaces/IStatusHistories.js +0 -19
- package/esm5/lib/interfaces/IStatusHistory.js +0 -21
- package/esm5/lib/interfaces/IserviceRequestCardPayment.js +0 -22
- package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +0 -25
- package/esm5/lib/interfaces/IssueRefundRequest.js +0 -22
- package/esm5/lib/interfaces/PayhubAntennaRequest.js +0 -25
- package/esm5/lib/interfaces/PaymentToPayhubRequest.js +0 -34
- package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +0 -16
- package/esm5/lib/interfaces/PostRefundRetroRemission.js +0 -19
- package/esm5/lib/interfaces/RefundsRequest.js +0 -19
- package/esm5/lib/interfaces/UnidentifiedPaymentsRequest.js +0 -28
- package/esm5/lib/interfaces/UnsolicitedPaymentsRequest.js +0 -37
- package/esm5/lib/payment-lib.component.js +0 -244
- package/esm5/lib/payment-lib.module.js +0 -103
- package/esm5/lib/payment-lib.service.js +0 -111
- package/esm5/lib/pipes/capitalize.pipe.js +0 -32
- package/esm5/lib/pipes/ccd-hyphens.pipe.js +0 -37
- package/esm5/lib/pipes/key-value.pipe.js +0 -37
- package/esm5/lib/pipes/sanitize-html.pipe.js +0 -39
- package/esm5/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +0 -218
- package/esm5/lib/services/card-details/card-details.service.js +0 -76
- package/esm5/lib/services/case-transactions/case-transactions.service.js +0 -76
- package/esm5/lib/services/orderslist.service.js +0 -531
- package/esm5/lib/services/payment-list/payment-list.service.js +0 -80
- package/esm5/lib/services/payment-view/payment-view.service.js +0 -385
- package/esm5/lib/services/refunds/refunds.service.js +0 -243
- package/esm5/lib/services/shared/error-handler.service.js +0 -119
- package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +0 -154
- package/esm5/lib/services/shared/logger/console-logger.service.js +0 -88
- package/esm5/lib/services/shared/logger/logger.service.js +0 -68
- package/esm5/lib/services/status-history/status-history.service.js +0 -80
- package/esm5/lib/services/xl-file/xl-file.service.js +0 -221
- package/esm5/public_api.js +0 -11
- package/fesm2015/hmcts-ccpay-web-component.js +0 -8525
- package/fesm2015/hmcts-ccpay-web-component.js.map +0 -1
- package/fesm5/hmcts-ccpay-web-component.js +0 -9773
- package/fesm5/hmcts-ccpay-web-component.js.map +0 -1
- package/hmcts-ccpay-web-component.d.ts +0 -43
- package/hmcts-ccpay-web-component.metadata.json +0 -1
|
@@ -0,0 +1,798 @@
|
|
|
1
|
+
import { Component, Input, Inject, forwardRef } from '@angular/core';
|
|
2
|
+
import { CaseTransactionsService } from '../../services/case-transactions/case-transactions.service';
|
|
3
|
+
import { BulkScaningPaymentService } from '../../services/bulk-scaning-payment/bulk-scaning-payment.service';
|
|
4
|
+
import { PaymentViewService } from '../../services/payment-view/payment-view.service';
|
|
5
|
+
import { OrderslistService } from '../../services/orderslist.service';
|
|
6
|
+
import { Router } from '@angular/router';
|
|
7
|
+
import { ServiceRequestComponent } from '../service-request/service-request.component';
|
|
8
|
+
import { UnprocessedPaymentsComponent } from '../unprocessed-payments/unprocessed-payments.component';
|
|
9
|
+
import { CommonModule } from '@angular/common';
|
|
10
|
+
import { AddRemissionComponent } from '../add-remission/add-remission.component';
|
|
11
|
+
import { RefundStatusComponent } from '../refund-status/refund-status.component';
|
|
12
|
+
import { CcdHyphensPipe } from '../../pipes/ccd-hyphens.pipe';
|
|
13
|
+
import { CapitalizePipe } from '../../pipes/capitalize.pipe';
|
|
14
|
+
import { FormsModule } from '@angular/forms';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
import * as i1 from "@angular/router";
|
|
17
|
+
import * as i2 from "../../services/payment-view/payment-view.service";
|
|
18
|
+
import * as i3 from "../../services/bulk-scaning-payment/bulk-scaning-payment.service";
|
|
19
|
+
import * as i4 from "../../services/case-transactions/case-transactions.service";
|
|
20
|
+
import * as i5 from "../../services/orderslist.service";
|
|
21
|
+
import * as i6 from "@angular/common";
|
|
22
|
+
import * as i7 from "@angular/forms";
|
|
23
|
+
const BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
|
|
24
|
+
export class CaseTransactionsComponent {
|
|
25
|
+
router;
|
|
26
|
+
paymentViewService;
|
|
27
|
+
bulkScaningPaymentService;
|
|
28
|
+
caseTransactionsService;
|
|
29
|
+
paymentLibComponent;
|
|
30
|
+
OrderslistService;
|
|
31
|
+
LOGGEDINUSERROLES;
|
|
32
|
+
isTakePayment;
|
|
33
|
+
isFromServiceRequestPage;
|
|
34
|
+
takePayment;
|
|
35
|
+
ccdCaseNumber;
|
|
36
|
+
excReference;
|
|
37
|
+
paymentGroups = [];
|
|
38
|
+
payments = [];
|
|
39
|
+
nonPayments = [];
|
|
40
|
+
allPayments = [];
|
|
41
|
+
remissions = [];
|
|
42
|
+
fees = [];
|
|
43
|
+
errorMessage;
|
|
44
|
+
totalFees;
|
|
45
|
+
totalPayments = 0;
|
|
46
|
+
totalNonOffPayments;
|
|
47
|
+
totalRemissions = 0;
|
|
48
|
+
selectedOption;
|
|
49
|
+
dcnNumber;
|
|
50
|
+
paymentRef;
|
|
51
|
+
isTurnOff;
|
|
52
|
+
isRefundRemission = true;
|
|
53
|
+
isStrategicFixEnable;
|
|
54
|
+
isAddFeeBtnEnabled = true;
|
|
55
|
+
isExceptionRecord = false;
|
|
56
|
+
isUnprocessedRecordSelected = false;
|
|
57
|
+
exceptionRecordReference;
|
|
58
|
+
isAnyFeeGroupAvilable = true;
|
|
59
|
+
isHistoricGroupAvailable = false;
|
|
60
|
+
isBulkScanEnable;
|
|
61
|
+
isRemissionsMatch;
|
|
62
|
+
viewStatus = 'main';
|
|
63
|
+
isRemoveBtnDisabled = false;
|
|
64
|
+
feeId;
|
|
65
|
+
clAmountDue = 0;
|
|
66
|
+
overPaymentAmount = 0;
|
|
67
|
+
unprocessedRecordCount;
|
|
68
|
+
isFeeRecordsExist = false;
|
|
69
|
+
isGrpOutstandingAmtPositive = false;
|
|
70
|
+
totalRefundAmount;
|
|
71
|
+
caseType;
|
|
72
|
+
// lsCcdNumber: any = ls.get<any>('ccdNumber');
|
|
73
|
+
payment;
|
|
74
|
+
paymentGroup;
|
|
75
|
+
paymentView;
|
|
76
|
+
//Order changes
|
|
77
|
+
orderDetail = [];
|
|
78
|
+
isAddRemissionEnable = false;
|
|
79
|
+
orderRemissionDetails = [];
|
|
80
|
+
orderLevelFees = [];
|
|
81
|
+
ispaymentGroupApisuccess = false;
|
|
82
|
+
cpoDetails = null;
|
|
83
|
+
orderRef;
|
|
84
|
+
orderStatus;
|
|
85
|
+
orderParty;
|
|
86
|
+
orderCreated;
|
|
87
|
+
orderCCDEvent;
|
|
88
|
+
serviceRequestValue;
|
|
89
|
+
orderAddBtnEnable;
|
|
90
|
+
orderFeesTotal = 0.00;
|
|
91
|
+
orderRemissionTotal = 0.00;
|
|
92
|
+
orderTotalPayments = 0.00;
|
|
93
|
+
orderPendingPayments = 0.00;
|
|
94
|
+
isCPODown;
|
|
95
|
+
test;
|
|
96
|
+
isPBA = false;
|
|
97
|
+
isIssueRefunfBtnEnable = false;
|
|
98
|
+
isAddRemissionBtnEnabled = false;
|
|
99
|
+
isRefundRemissionBtnEnable = false;
|
|
100
|
+
allowedRolesToAccessRefund = ['payments-refund-approver', 'payments-refund'];
|
|
101
|
+
isEligible4PBAPayment = ['pui-finance-manager', 'pui-user-manager', 'pui-organisation-manager', 'pui-case-manager'];
|
|
102
|
+
currentDate = new Date();
|
|
103
|
+
//isFromServiceRequestPage: boolean;
|
|
104
|
+
navigationpage;
|
|
105
|
+
remissionFeeAmt;
|
|
106
|
+
constructor(router, paymentViewService, bulkScaningPaymentService, caseTransactionsService, paymentLibComponent, OrderslistService) {
|
|
107
|
+
this.router = router;
|
|
108
|
+
this.paymentViewService = paymentViewService;
|
|
109
|
+
this.bulkScaningPaymentService = bulkScaningPaymentService;
|
|
110
|
+
this.caseTransactionsService = caseTransactionsService;
|
|
111
|
+
this.paymentLibComponent = paymentLibComponent;
|
|
112
|
+
this.OrderslistService = OrderslistService;
|
|
113
|
+
}
|
|
114
|
+
ngOnInit() {
|
|
115
|
+
this.navigationpage = '';
|
|
116
|
+
if (this.OrderslistService.getpaymentPageView() !== null) {
|
|
117
|
+
this.OrderslistService.getpaymentPageView().subscribe((data) => this.paymentView = data);
|
|
118
|
+
}
|
|
119
|
+
if ((this.LOGGEDINUSERROLES === undefined || this.LOGGEDINUSERROLES.length === 0) && this.OrderslistService.getUserRolesList() !== null) {
|
|
120
|
+
this.OrderslistService.getUserRolesList().subscribe((data) => this.LOGGEDINUSERROLES = data);
|
|
121
|
+
}
|
|
122
|
+
if (this.OrderslistService.getnavigationPageValue() !== null) {
|
|
123
|
+
this.OrderslistService.getnavigationPageValue().subscribe((data) => this.navigationpage = data);
|
|
124
|
+
}
|
|
125
|
+
if (this.paymentView !== undefined && this.paymentView !== null && this.paymentView.payment_group_reference !== undefined && this.navigationpage === 'paymentdetailspage') {
|
|
126
|
+
this.goToPayementView(this.paymentView.payment_group_reference, this.paymentView.reference, this.paymentView.method);
|
|
127
|
+
}
|
|
128
|
+
this.isGrpOutstandingAmtPositive = false;
|
|
129
|
+
this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
|
|
130
|
+
this.caseType = this.paymentLibComponent.CASETYPE;
|
|
131
|
+
if (this.paymentLibComponent.CCD_CASE_NUMBER === '') {
|
|
132
|
+
this.ccdCaseNumber = this.paymentLibComponent.EXC_REFERENCE;
|
|
133
|
+
}
|
|
134
|
+
this.excReference = this.paymentLibComponent.EXC_REFERENCE;
|
|
135
|
+
this.takePayment = this.paymentLibComponent.TAKEPAYMENT;
|
|
136
|
+
const serviceRequest = this.paymentLibComponent.SERVICEREQUEST;
|
|
137
|
+
if (serviceRequest !== undefined && serviceRequest.toString() === 'true') {
|
|
138
|
+
this.serviceRequestValue = 'true';
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
this.serviceRequestValue = 'false';
|
|
142
|
+
this.paymentLibComponent.isFromServiceRequestPage = false;
|
|
143
|
+
}
|
|
144
|
+
this.isBulkScanEnable = this.paymentLibComponent.ISBSENABLE;
|
|
145
|
+
this.dcnNumber = this.paymentLibComponent.DCN_NUMBER;
|
|
146
|
+
this.selectedOption = this.paymentLibComponent.SELECTED_OPTION.toLocaleLowerCase();
|
|
147
|
+
this.isTurnOff = this.paymentLibComponent.ISTURNOFF;
|
|
148
|
+
this.isStrategicFixEnable = this.paymentLibComponent.ISSFENABLE;
|
|
149
|
+
if (!this.isTurnOff) {
|
|
150
|
+
// if (this.lsCcdNumber !== this.ccdCaseNumber) {
|
|
151
|
+
// this.router.navigateByUrl(`/ccd-search?takePayment=true`);
|
|
152
|
+
// }
|
|
153
|
+
this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe(paymentGroups => {
|
|
154
|
+
this.isAnyFeeGroupAvilable = true;
|
|
155
|
+
this.paymentGroups = paymentGroups['payment_groups'];
|
|
156
|
+
this.calculateAmounts();
|
|
157
|
+
this.calculateOrderFeesAmounts();
|
|
158
|
+
this.calculateRefundAmount();
|
|
159
|
+
if (this.isFromServiceRequestPage) {
|
|
160
|
+
this.OrderslistService.getSelectedOrderRefId().subscribe((data) => this.orderRef = data);
|
|
161
|
+
this.goToOrderViewDetailSection(this.orderRef);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
this.paymentViewService.getPartyDetails(this.ccdCaseNumber).subscribe(response => {
|
|
165
|
+
this.cpoDetails = JSON.parse(response).content;
|
|
166
|
+
}, (error) => {
|
|
167
|
+
this.errorMessage = error ? error.replace(/"/g, "") : "";
|
|
168
|
+
this.isCPODown = true;
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}, (error) => {
|
|
172
|
+
this.errorMessage = error ? error.replace(/"/g, "") : "";
|
|
173
|
+
this.isAnyFeeGroupAvilable = false;
|
|
174
|
+
this.setDefaults();
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
this.caseTransactionsService.getPaymentGroups(this.ccdCaseNumber).subscribe(paymentGroups => {
|
|
179
|
+
this.isAnyFeeGroupAvilable = true;
|
|
180
|
+
this.paymentGroups = paymentGroups['payment_groups'];
|
|
181
|
+
this.calculateAmounts();
|
|
182
|
+
this.calculateOrderFeesAmounts();
|
|
183
|
+
this.totalRefundAmount = this.calculateRefundAmount();
|
|
184
|
+
this.paymentViewService.getPartyDetails(this.ccdCaseNumber).subscribe(response => {
|
|
185
|
+
this.cpoDetails = JSON.parse(response).content;
|
|
186
|
+
}, (error) => {
|
|
187
|
+
this.errorMessage = error ? error.replace(/"/g, "") : "";
|
|
188
|
+
this.setDefaults();
|
|
189
|
+
this.isCPODown = true;
|
|
190
|
+
});
|
|
191
|
+
}, (error) => {
|
|
192
|
+
this.errorMessage = error ? error.replace(/"/g, "") : "";
|
|
193
|
+
this.isAnyFeeGroupAvilable = false;
|
|
194
|
+
this.setDefaults();
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
if (this.paymentGroups !== undefined) {
|
|
198
|
+
this.checkForExceptionRecord();
|
|
199
|
+
}
|
|
200
|
+
if (this.OrderslistService.getisFromServiceRequestPages() !== null) {
|
|
201
|
+
this.OrderslistService.getisFromServiceRequestPages().subscribe((data) => this.isFromServiceRequestPage = data);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
setDefaults() {
|
|
205
|
+
this.totalPayments = 0.00;
|
|
206
|
+
this.totalRemissions = 0.00;
|
|
207
|
+
this.totalNonOffPayments = 0.00;
|
|
208
|
+
this.totalFees = 0.00;
|
|
209
|
+
}
|
|
210
|
+
getAllocationStatus(payments) {
|
|
211
|
+
let paymentAllocation = payments.payment_allocation, isAllocationStatusExist = paymentAllocation.length > 0;
|
|
212
|
+
return isAllocationStatusExist ? paymentAllocation[0].allocation_status : '-';
|
|
213
|
+
//return "-";
|
|
214
|
+
}
|
|
215
|
+
checkForExceptionRecord() {
|
|
216
|
+
if (this.paymentGroups.length === 0 && (this.selectedOption.toLocaleLowerCase() === 'ccdorexception' || this.selectedOption.toLocaleLowerCase() === 'rc')) {
|
|
217
|
+
this.bulkScaningPaymentService.getBSPaymentsByCCD(this.ccdCaseNumber).subscribe(recordData => {
|
|
218
|
+
if (recordData['data'] && recordData['data'].exception_record_reference && recordData['data'].exception_record_reference.length > 0 && recordData['data'].ccd_reference > 0) {
|
|
219
|
+
this.isExceptionRecord = false;
|
|
220
|
+
this.isAddFeeBtnEnabled = true;
|
|
221
|
+
}
|
|
222
|
+
if (recordData['data'] && recordData['data'].exception_record_reference && recordData['data'].exception_record_reference.length > 0 && recordData['data'].ccd_reference === undefined) {
|
|
223
|
+
this.isExceptionRecord = true;
|
|
224
|
+
this.isAddFeeBtnEnabled = false;
|
|
225
|
+
}
|
|
226
|
+
if (recordData['data'] && recordData['data'].exception_record_reference && recordData['data'].exception_record_reference.length === undefined && recordData['data'].ccd_reference > 0) {
|
|
227
|
+
this.isExceptionRecord = false;
|
|
228
|
+
this.isAddFeeBtnEnabled = true;
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
if (this.paymentGroups.length === 0 && this.selectedOption.toLocaleLowerCase() === 'dcn') {
|
|
233
|
+
if (this.paymentLibComponent.CCD_CASE_NUMBER.length > 0 && this.paymentLibComponent.EXC_REFERENCE.length > 0) {
|
|
234
|
+
this.isExceptionRecord = false;
|
|
235
|
+
this.isAddFeeBtnEnabled = true;
|
|
236
|
+
}
|
|
237
|
+
else if (this.paymentLibComponent.CCD_CASE_NUMBER.length === 0 && this.paymentLibComponent.EXC_REFERENCE.length > 0) {
|
|
238
|
+
this.isExceptionRecord = true;
|
|
239
|
+
this.isAddFeeBtnEnabled = false;
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
this.isExceptionRecord = false;
|
|
243
|
+
this.isAddFeeBtnEnabled = true;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (this.paymentGroups.length > 0)
|
|
247
|
+
this.paymentGroups.forEach(paymentGroup => {
|
|
248
|
+
if (paymentGroup.payments) {
|
|
249
|
+
paymentGroup.payments.forEach(payment => {
|
|
250
|
+
if (payment.case_reference !== undefined && payment.ccd_case_number === undefined) {
|
|
251
|
+
this.isExceptionRecord = true;
|
|
252
|
+
this.isAddFeeBtnEnabled = false;
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
this.isExceptionRecord = false;
|
|
256
|
+
this.isAddFeeBtnEnabled = true;
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
calculateOrderFeesAmounts() {
|
|
263
|
+
let feesTotal = 0.00;
|
|
264
|
+
this.paymentGroups.forEach(paymentGroup => {
|
|
265
|
+
this.resetOrderVariables();
|
|
266
|
+
if (paymentGroup.fees) {
|
|
267
|
+
paymentGroup.fees.forEach(fee => {
|
|
268
|
+
this.orderFeesTotal = this.orderFeesTotal + fee.calculated_amount;
|
|
269
|
+
this.overPaymentAmount = this.overPaymentAmount + fee.over_payment;
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
if (paymentGroup.remissions) {
|
|
273
|
+
paymentGroup.remissions.forEach(remission => {
|
|
274
|
+
this.orderRemissionTotal = this.orderRemissionTotal + remission.hwf_amount;
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
if (paymentGroup.payments) {
|
|
278
|
+
const isFeeOverPaymentExist = this.overPaymentAmount === 0;
|
|
279
|
+
paymentGroup.payments.forEach(payment => {
|
|
280
|
+
if (isFeeOverPaymentExist) {
|
|
281
|
+
this.overPaymentAmount = this.overPaymentAmount + payment.over_payment;
|
|
282
|
+
}
|
|
283
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
284
|
+
this.orderTotalPayments = this.orderTotalPayments + payment.amount;
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
// this.orderPendingPayments = (this.orderFeesTotal - this.orderRemissionTotal) - this.orderTotalPayments;
|
|
289
|
+
if (paymentGroup.service_request_status === 'Paid') {
|
|
290
|
+
this.orderStatus = paymentGroup.service_request_status;
|
|
291
|
+
this.orderAddBtnEnable = false;
|
|
292
|
+
}
|
|
293
|
+
else if (paymentGroup.service_request_status === 'Partially paid' || paymentGroup.service_request_status === 'Not paid') {
|
|
294
|
+
this.orderStatus = paymentGroup.service_request_status;
|
|
295
|
+
this.orderAddBtnEnable = true;
|
|
296
|
+
}
|
|
297
|
+
else if (paymentGroup.service_request_status === 'Disputed') {
|
|
298
|
+
this.orderStatus = paymentGroup.service_request_status;
|
|
299
|
+
this.orderAddBtnEnable = true;
|
|
300
|
+
}
|
|
301
|
+
if (this.cpoDetails !== null && this.cpoDetails.length !== 0) {
|
|
302
|
+
let index = -1;
|
|
303
|
+
this.cpoDetails.forEach((cpo, i) => {
|
|
304
|
+
if (cpo.orderReference == this.orderRef) {
|
|
305
|
+
index = i;
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
this.orderLevelFees.push({ orderRefId: paymentGroup['payment_group_reference'], orderTotalFees: this.orderFeesTotal, orderStatus: this.orderStatus, orderParty: this.cpoDetails[index].responsibleParty, orderCCDEvent: this.cpoDetails[index].action, orderCreated: paymentGroup['date_created'], orderAddBtnEnable: this.orderAddBtnEnable });
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
this.orderLevelFees.push({ orderRefId: paymentGroup['payment_group_reference'], orderTotalFees: this.orderFeesTotal, orderStatus: this.orderStatus, orderParty: '', orderCCDEvent: '', orderCreated: paymentGroup['date_created'], orderAddBtnEnable: this.orderAddBtnEnable });
|
|
312
|
+
}
|
|
313
|
+
if (this.orderStatus !== 'Paid') {
|
|
314
|
+
this.OrderslistService.setOrdersList(this.orderLevelFees);
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
;
|
|
319
|
+
resetOrderVariables() {
|
|
320
|
+
this.orderFeesTotal = 0.00;
|
|
321
|
+
this.orderTotalPayments = 0.00;
|
|
322
|
+
this.orderRemissionTotal = 0.00;
|
|
323
|
+
this.orderPendingPayments = 0.00;
|
|
324
|
+
this.isAddFeeBtnEnabled = true;
|
|
325
|
+
}
|
|
326
|
+
;
|
|
327
|
+
goToOrderViewDetailSection(orderReferenceObj) {
|
|
328
|
+
if (this.isFromServiceRequestPage) {
|
|
329
|
+
this.OrderslistService.setOrderRefId(orderReferenceObj);
|
|
330
|
+
this.orderRef = orderReferenceObj;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
this.OrderslistService.setOrderRefId(orderReferenceObj.orderRefId);
|
|
334
|
+
this.orderRef = orderReferenceObj.orderRefId;
|
|
335
|
+
}
|
|
336
|
+
this.orderFeesTotal = 0.00;
|
|
337
|
+
this.orderRemissionTotal = 0.00;
|
|
338
|
+
this.orderTotalPayments = 0.00;
|
|
339
|
+
this.orderPendingPayments = 0.00;
|
|
340
|
+
this.orderDetail = this.paymentGroups.filter(x => x.payment_group_reference === this.orderRef);
|
|
341
|
+
this.orderDetail.forEach(orderDetail => {
|
|
342
|
+
if (orderDetail.fees) {
|
|
343
|
+
orderDetail.fees.forEach(fee => {
|
|
344
|
+
this.orderFeesTotal = this.orderFeesTotal + fee.calculated_amount;
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
if (orderDetail.remissions) {
|
|
348
|
+
orderDetail.remissions.forEach(remission => {
|
|
349
|
+
this.orderRemissionTotal = this.orderRemissionTotal + remission.hwf_amount;
|
|
350
|
+
});
|
|
351
|
+
if (orderDetail.payments) {
|
|
352
|
+
this.payment = orderDetail.payments[0];
|
|
353
|
+
orderDetail.payments.forEach(payment => {
|
|
354
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
355
|
+
this.orderTotalPayments = this.orderTotalPayments + payment.amount;
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
this.orderStatus = orderDetail.service_request_status;
|
|
361
|
+
});
|
|
362
|
+
let position = -1;
|
|
363
|
+
if (this.cpoDetails !== null && this.cpoDetails.length !== 0) {
|
|
364
|
+
this.cpoDetails.forEach((cpo, i) => {
|
|
365
|
+
if (cpo.orderReference == this.orderRef) {
|
|
366
|
+
position = i;
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
if (position !== -1) {
|
|
370
|
+
this.orderParty = this.cpoDetails[position].responsibleParty;
|
|
371
|
+
this.orderCreated = this.cpoDetails[position].createdTimestamp;
|
|
372
|
+
this.orderCCDEvent = this.cpoDetails[position].action;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
this.orderParty = '';
|
|
377
|
+
this.orderCCDEvent = '';
|
|
378
|
+
this.orderCreated = orderReferenceObj.orderCreated;
|
|
379
|
+
}
|
|
380
|
+
this.viewStatus = 'order-full-view';
|
|
381
|
+
}
|
|
382
|
+
redirectToOrderFeeSearchPage(event, orderef) {
|
|
383
|
+
if (orderef.orderAddBtnEnable) {
|
|
384
|
+
event.preventDefault();
|
|
385
|
+
this.paymentLibComponent.bspaymentdcn = null;
|
|
386
|
+
this.paymentLibComponent.paymentGroupReference = orderef.orderRefId;
|
|
387
|
+
this.paymentLibComponent.isTurnOff = this.isTurnOff;
|
|
388
|
+
this.paymentLibComponent.viewName = 'fee-summary';
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
calculateAmounts() {
|
|
392
|
+
let feesTotal = 0.00, paymentsTotal = 0.00, remissionsTotal = 0.00, nonOffLinePayment = 0.00;
|
|
393
|
+
this.paymentGroups.forEach(paymentGroup => {
|
|
394
|
+
if (paymentGroup.fees) {
|
|
395
|
+
paymentGroup.fees.forEach(fee => {
|
|
396
|
+
// new feature Apportionment toggle changes
|
|
397
|
+
if (!this.isTurnOff) {
|
|
398
|
+
if (fee.date_created) {
|
|
399
|
+
let a = fee.amount_due === undefined;
|
|
400
|
+
let b = fee.amount_due <= 0;
|
|
401
|
+
this.clAmountDue = a ? this.clAmountDue + fee.net_amount : b ? this.clAmountDue + 0 : this.clAmountDue + fee.amount_due;
|
|
402
|
+
}
|
|
403
|
+
fee['payment_group_reference'] = paymentGroup['payment_group_reference'];
|
|
404
|
+
this.fees.push(fee);
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
feesTotal = feesTotal + fee.calculated_amount;
|
|
408
|
+
this.fees.push(fee);
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
if (this.isTurnOff) {
|
|
413
|
+
this.totalFees = feesTotal;
|
|
414
|
+
}
|
|
415
|
+
if (paymentGroup.payments) {
|
|
416
|
+
paymentGroup.payments.forEach(payment => {
|
|
417
|
+
// new feature Apportionment toggle changes
|
|
418
|
+
if (!this.isTurnOff) {
|
|
419
|
+
let allocationLen = payment.payment_allocation;
|
|
420
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
421
|
+
paymentsTotal = paymentsTotal + payment.amount;
|
|
422
|
+
if (allocationLen.length === 0 || allocationLen.length > 0 && allocationLen[0].allocation_status === 'Allocated') {
|
|
423
|
+
nonOffLinePayment = nonOffLinePayment + payment.amount;
|
|
424
|
+
}
|
|
425
|
+
if (allocationLen.length > 0) {
|
|
426
|
+
this.nonPayments.push(payment);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
if (allocationLen.length === 0) {
|
|
430
|
+
this.payments.push(payment);
|
|
431
|
+
}
|
|
432
|
+
payment.paymentGroupReference = paymentGroup.payment_group_reference;
|
|
433
|
+
this.allPayments.push(payment);
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
437
|
+
paymentsTotal = paymentsTotal + payment.amount;
|
|
438
|
+
this.payments.push(payment);
|
|
439
|
+
}
|
|
440
|
+
payment.paymentGroupReference = paymentGroup.payment_group_reference;
|
|
441
|
+
this.allPayments.push(payment);
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
this.totalPayments = paymentsTotal;
|
|
446
|
+
// new feature Apportionment toggle changes
|
|
447
|
+
if (!this.isTurnOff) {
|
|
448
|
+
this.totalNonOffPayments = nonOffLinePayment;
|
|
449
|
+
}
|
|
450
|
+
if (paymentGroup.remissions) {
|
|
451
|
+
paymentGroup.remissions.forEach(remisison => {
|
|
452
|
+
remissionsTotal = remissionsTotal + remisison.hwf_amount;
|
|
453
|
+
this.remissions.push(remisison);
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
this.totalRemissions = remissionsTotal;
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
calculateRefundAmount() {
|
|
460
|
+
if (!this.isTurnOff) {
|
|
461
|
+
let isNewPaymentGroup = false;
|
|
462
|
+
this.paymentGroups.forEach((paymentGroup, index) => {
|
|
463
|
+
let grpOutstandingAmount = 0.00, feesTotal = 0.00, paymentsTotal = 0.00, remissionsTotal = 0.00, fees = [];
|
|
464
|
+
if (paymentGroup.fees) {
|
|
465
|
+
// this.isFeeRecordsExist = true;
|
|
466
|
+
paymentGroup.fees.forEach(fee => {
|
|
467
|
+
feesTotal = feesTotal + fee.calculated_amount;
|
|
468
|
+
this.isRemissionsMatch = false;
|
|
469
|
+
if (paymentGroup.remissions) {
|
|
470
|
+
paymentGroup.remissions.forEach(rem => {
|
|
471
|
+
if (rem.fee_code === fee.code) {
|
|
472
|
+
this.isRemissionsMatch = true;
|
|
473
|
+
fee['remissions'] = rem;
|
|
474
|
+
// if(!fees.find(k => k.code=fee.code))
|
|
475
|
+
// {
|
|
476
|
+
fees.push(fee);
|
|
477
|
+
//}
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
if (!this.isRemissionsMatch) {
|
|
482
|
+
fees.push(fee);
|
|
483
|
+
}
|
|
484
|
+
if (fee.date_created) {
|
|
485
|
+
isNewPaymentGroup = true;
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
this.isHistoricGroupAvailable = true;
|
|
489
|
+
this.paymentGroups[index]['old'] = true;
|
|
490
|
+
}
|
|
491
|
+
});
|
|
492
|
+
this.paymentGroups[index].fees = fees;
|
|
493
|
+
}
|
|
494
|
+
if (paymentGroup.payments) {
|
|
495
|
+
paymentGroup.payments.forEach(payment => {
|
|
496
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
497
|
+
paymentsTotal = paymentsTotal + payment.amount;
|
|
498
|
+
}
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
if (paymentGroup.remissions) {
|
|
502
|
+
paymentGroup.remissions.forEach(remission => {
|
|
503
|
+
remissionsTotal = remissionsTotal + remission.hwf_amount;
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
grpOutstandingAmount = (feesTotal - remissionsTotal) - paymentsTotal;
|
|
507
|
+
if (grpOutstandingAmount > 0 && isNewPaymentGroup) {
|
|
508
|
+
this.isAnyFeeGroupAvilable = true;
|
|
509
|
+
this.isFeeRecordsExist = true;
|
|
510
|
+
this.paymentRef = paymentGroup.payment_group_reference;
|
|
511
|
+
}
|
|
512
|
+
if (paymentGroup.fees && paymentGroup.fees.length > 0 && grpOutstandingAmount <= 0 && isNewPaymentGroup) {
|
|
513
|
+
this.isAnyFeeGroupAvilable = false;
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
if ((!isNewPaymentGroup && this.isHistoricGroupAvailable) || (!isNewPaymentGroup && !this.isHistoricGroupAvailable)) {
|
|
517
|
+
this.isAnyFeeGroupAvilable = false;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
else {
|
|
521
|
+
let totalRefundAmount = 0, isFeeAmountZero = false;
|
|
522
|
+
this.paymentGroups.forEach(paymentGroup => {
|
|
523
|
+
let grpOutstandingAmount = 0.00, feesTotal = 0.00, paymentsTotal = 0.00, remissionsTotal = 0.00;
|
|
524
|
+
if (paymentGroup.fees) {
|
|
525
|
+
this.isFeeRecordsExist = true;
|
|
526
|
+
paymentGroup.fees.forEach(fee => {
|
|
527
|
+
feesTotal = feesTotal + fee.calculated_amount;
|
|
528
|
+
if (fee.calculated_amount === 0) {
|
|
529
|
+
isFeeAmountZero = true;
|
|
530
|
+
}
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
if (paymentGroup.payments) {
|
|
534
|
+
paymentGroup.payments.forEach(payment => {
|
|
535
|
+
if (payment.status.toUpperCase() === 'SUCCESS') {
|
|
536
|
+
paymentsTotal = paymentsTotal + payment.amount;
|
|
537
|
+
}
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
if (paymentGroup.remissions) {
|
|
541
|
+
paymentGroup.remissions.forEach(remission => {
|
|
542
|
+
remissionsTotal = remissionsTotal + remission.hwf_amount;
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
grpOutstandingAmount = (feesTotal - remissionsTotal) - paymentsTotal;
|
|
546
|
+
if (grpOutstandingAmount < 0) {
|
|
547
|
+
if (totalRefundAmount === 0) {
|
|
548
|
+
totalRefundAmount = grpOutstandingAmount;
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
totalRefundAmount = (totalRefundAmount + grpOutstandingAmount);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
else if (grpOutstandingAmount > 0 || (grpOutstandingAmount === 0 && isFeeAmountZero)) {
|
|
555
|
+
this.isGrpOutstandingAmtPositive = true;
|
|
556
|
+
}
|
|
557
|
+
});
|
|
558
|
+
return totalRefundAmount * -1;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
getGroupOutstandingAmount(paymentGroup) {
|
|
562
|
+
return this.bulkScaningPaymentService.calculateOutStandingAmount(paymentGroup);
|
|
563
|
+
}
|
|
564
|
+
redirectToFeeSearchPage(event) {
|
|
565
|
+
event.preventDefault();
|
|
566
|
+
let url = this.isBulkScanEnable ? '&isBulkScanning=Enable' : '&isBulkScanning=Disable';
|
|
567
|
+
url += this.isTurnOff ? '&isTurnOff=Enable' : '&isTurnOff=Disable';
|
|
568
|
+
url += this.isStrategicFixEnable ? '&isStFixEnable=Enable' : '&isStFixEnable=Disable';
|
|
569
|
+
url += `&caseType=${this.caseType}`;
|
|
570
|
+
this.router.navigateByUrl(`/fee-search?selectedOption=${this.selectedOption}&ccdCaseNumber=${this.ccdCaseNumber}${url}`);
|
|
571
|
+
}
|
|
572
|
+
addRemission(fee) {
|
|
573
|
+
if (this.chkForAddRemission(fee.code)) {
|
|
574
|
+
this.feeId = fee;
|
|
575
|
+
this.viewStatus = 'addremission';
|
|
576
|
+
this.paymentViewService.getApportionPaymentDetails(this.payment.reference).subscribe(paymentGroup => {
|
|
577
|
+
this.paymentGroup = paymentGroup;
|
|
578
|
+
this.paymentGroup.payments = this.paymentGroup.payments.filter(paymentGroupObj => paymentGroupObj['reference'].includes(this.paymentLibComponent.paymentReference));
|
|
579
|
+
this.payment = this.paymentGroup.payments[0];
|
|
580
|
+
// const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
|
|
581
|
+
// this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
|
|
582
|
+
}, (error) => this.errorMessage = error ? error.replace(/"/g, "") : "");
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
addRefundForRemission(payment, remission, fees) {
|
|
586
|
+
this.paymentViewService.getApportionPaymentDetails(payment.reference).subscribe(paymentGroup => {
|
|
587
|
+
this.paymentGroup = paymentGroup;
|
|
588
|
+
this.paymentGroup.payments = paymentGroup.payments.filter(paymentGroupObj => paymentGroupObj.reference === payment.reference);
|
|
589
|
+
this.payment = this.paymentGroup.payments[0];
|
|
590
|
+
this.remissions = remission;
|
|
591
|
+
this.remissionFeeAmt = fees.filter(data => data.code === this.remissions['fee_code'])[0].net_amount;
|
|
592
|
+
this.viewStatus = 'addrefundforremission';
|
|
593
|
+
// const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
|
|
594
|
+
// this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
|
|
595
|
+
}, (error) => this.errorMessage = error);
|
|
596
|
+
}
|
|
597
|
+
redirectToremissionPage(event) {
|
|
598
|
+
event.preventDefault();
|
|
599
|
+
this.paymentLibComponent.viewName = 'remission';
|
|
600
|
+
}
|
|
601
|
+
goToServiceRequestPage() {
|
|
602
|
+
this.paymentLibComponent.viewName = 'case-transactions';
|
|
603
|
+
this.paymentLibComponent.TAKEPAYMENT = false;
|
|
604
|
+
this.paymentLibComponent.SERVICEREQUEST = 'true';
|
|
605
|
+
this.paymentLibComponent.isFromServiceRequestPage = true;
|
|
606
|
+
window.location.reload();
|
|
607
|
+
}
|
|
608
|
+
redirectToReportsPage(event) {
|
|
609
|
+
event.preventDefault();
|
|
610
|
+
this.router.navigateByUrl(`/reports?selectedOption=${this.selectedOption}&ccdCaseNumber=${this.ccdCaseNumber}`);
|
|
611
|
+
}
|
|
612
|
+
loadFeeSummaryPage(paymentGroup) {
|
|
613
|
+
this.paymentLibComponent.bspaymentdcn = null;
|
|
614
|
+
this.paymentLibComponent.paymentGroupReference = paymentGroup.payment_group_reference;
|
|
615
|
+
this.paymentLibComponent.isTurnOff = this.isTurnOff;
|
|
616
|
+
this.paymentLibComponent.viewName = 'fee-summary';
|
|
617
|
+
}
|
|
618
|
+
goToPaymentViewComponent(paymentGroup) {
|
|
619
|
+
this.paymentLibComponent.paymentMethod = paymentGroup.paymentMethod;
|
|
620
|
+
this.paymentLibComponent.paymentGroupReference = paymentGroup.paymentGroupReference;
|
|
621
|
+
this.paymentLibComponent.paymentReference = paymentGroup.paymentReference;
|
|
622
|
+
this.paymentLibComponent.viewName = 'payment-view';
|
|
623
|
+
}
|
|
624
|
+
goToPayementView(paymentGroupReference, paymentReference, paymentMethod) {
|
|
625
|
+
this.goToPaymentViewComponent({ paymentGroupReference, paymentReference, paymentMethod });
|
|
626
|
+
}
|
|
627
|
+
selectedUnprocessedFeeEvent(unprocessedRecordId) {
|
|
628
|
+
if (unprocessedRecordId) {
|
|
629
|
+
if (this.isTurnOff) {
|
|
630
|
+
this.isAddFeeBtnEnabled = false;
|
|
631
|
+
}
|
|
632
|
+
this.isUnprocessedRecordSelected = true;
|
|
633
|
+
}
|
|
634
|
+
else {
|
|
635
|
+
if (this.isTurnOff) {
|
|
636
|
+
this.isAddFeeBtnEnabled = true;
|
|
637
|
+
}
|
|
638
|
+
this.isUnprocessedRecordSelected = false;
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
getUnprocessedFeeCount(unProcessedRecordCount) {
|
|
642
|
+
this.unprocessedRecordCount = unProcessedRecordCount;
|
|
643
|
+
}
|
|
644
|
+
calculateAmountDue(fee) {
|
|
645
|
+
if (fee.date_created) {
|
|
646
|
+
return fee.amount_due !== undefined ? fee.amount_due : fee.net_amount;
|
|
647
|
+
}
|
|
648
|
+
else {
|
|
649
|
+
return "0.00";
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
confirmRemoveFee(fee) {
|
|
653
|
+
this.isRemoveBtnDisabled = false;
|
|
654
|
+
this.feeId = fee;
|
|
655
|
+
this.viewStatus = 'feeRemovalConfirmation';
|
|
656
|
+
}
|
|
657
|
+
cancelRemoval() {
|
|
658
|
+
this.viewStatus = 'main';
|
|
659
|
+
}
|
|
660
|
+
removeFee(fee) {
|
|
661
|
+
this.isRemoveBtnDisabled = true;
|
|
662
|
+
this.paymentViewService.deleteFeeFromPaymentGroup(fee).subscribe((success) => {
|
|
663
|
+
window.location.reload();
|
|
664
|
+
}, (error) => {
|
|
665
|
+
this.errorMessage = error;
|
|
666
|
+
this.isRemoveBtnDisabled = false;
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
isCheckAmountdueExist(amountDue) {
|
|
670
|
+
return typeof amountDue === 'undefined';
|
|
671
|
+
}
|
|
672
|
+
issueRefund(payment) {
|
|
673
|
+
if (payment !== null && payment !== undefined) {
|
|
674
|
+
if (this.chkIssueRefundBtnEnable(payment)) {
|
|
675
|
+
this.viewStatus = 'issuerefund';
|
|
676
|
+
this.payment = payment;
|
|
677
|
+
this.paymentLibComponent.isFromServiceRequestPage = true;
|
|
678
|
+
this.isRefundRemission = true;
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
chkForAddRemission(feeCode) {
|
|
683
|
+
if (this.chkForPBAPayment() && this.check4AllowedRoles2AccessRefund()) {
|
|
684
|
+
if (this.orderDetail[0]['remissions'].length > 0) {
|
|
685
|
+
for (const remission of this.orderDetail[0]['remissions']) {
|
|
686
|
+
if (remission.fee_code === feeCode) {
|
|
687
|
+
return false;
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
return true;
|
|
692
|
+
}
|
|
693
|
+
else {
|
|
694
|
+
return false;
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
chkForPBAPayment() {
|
|
698
|
+
if (this.orderDetail !== null && this.orderDetail !== undefined) {
|
|
699
|
+
this.orderDetail.forEach(orderDetail => {
|
|
700
|
+
if (orderDetail.payments) {
|
|
701
|
+
orderDetail.payments.forEach(payment => {
|
|
702
|
+
if (payment.method.toLocaleLowerCase() === 'payment by account' && this.allowFurtherAccessAfter4Days(payment)) {
|
|
703
|
+
this.isPBA = true;
|
|
704
|
+
}
|
|
705
|
+
});
|
|
706
|
+
}
|
|
707
|
+
});
|
|
708
|
+
if (this.isPBA) {
|
|
709
|
+
return true;
|
|
710
|
+
}
|
|
711
|
+
else {
|
|
712
|
+
return false;
|
|
713
|
+
}
|
|
714
|
+
;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
chkIssueRefundBtnEnable(payment) {
|
|
718
|
+
if (payment !== null && payment !== undefined) {
|
|
719
|
+
return payment.issue_refund && payment.refund_enable;
|
|
720
|
+
}
|
|
721
|
+
else {
|
|
722
|
+
return false;
|
|
723
|
+
}
|
|
724
|
+
// if (this.check4AllowedRoles2AccessRefund() && this.allowFurtherAccessAfter4Days(payment) &&
|
|
725
|
+
// payment.method === 'payment by account' && payment.status.toLocaleLowerCase() === 'success') {
|
|
726
|
+
// this.isIssueRefunfBtnEnable = true;
|
|
727
|
+
// }
|
|
728
|
+
// if (this.isIssueRefunfBtnEnable) {
|
|
729
|
+
// return true;
|
|
730
|
+
// } else {
|
|
731
|
+
// return false;
|
|
732
|
+
// };
|
|
733
|
+
}
|
|
734
|
+
chkIsRefundRemissionBtnEnable() {
|
|
735
|
+
if (this.orderDetail !== null && this.orderDetail !== undefined) {
|
|
736
|
+
this.paymentLibComponent.isFromServiceRequestPage = true;
|
|
737
|
+
this.orderDetail.forEach(orderDetail => {
|
|
738
|
+
if (orderDetail.payments) {
|
|
739
|
+
orderDetail.payments.forEach(payment => {
|
|
740
|
+
if (payment.method.toLocaleLowerCase() === 'payment by account' && payment.status.toLocaleLowerCase() === 'success' && this.allowFurtherAccessAfter4Days(payment)) {
|
|
741
|
+
this.isRefundRemissionBtnEnable = true;
|
|
742
|
+
}
|
|
743
|
+
});
|
|
744
|
+
}
|
|
745
|
+
});
|
|
746
|
+
if (this.isRefundRemissionBtnEnable) {
|
|
747
|
+
return true;
|
|
748
|
+
}
|
|
749
|
+
else {
|
|
750
|
+
return false;
|
|
751
|
+
}
|
|
752
|
+
;
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
check4AllowedRoles2AccessRefund = () => {
|
|
756
|
+
return this.allowedRolesToAccessRefund.some(role => this.LOGGEDINUSERROLES.indexOf(role) !== -1);
|
|
757
|
+
};
|
|
758
|
+
check4AllowedRoles2AccessPBApayment = () => {
|
|
759
|
+
return this.isEligible4PBAPayment.some(role => this.LOGGEDINUSERROLES.indexOf(role) !== -1);
|
|
760
|
+
};
|
|
761
|
+
allowFurtherAccessAfter4Days = (payment) => {
|
|
762
|
+
if (payment !== null && payment !== undefined) {
|
|
763
|
+
let tmp4DayAgo = new Date();
|
|
764
|
+
tmp4DayAgo.setDate(tmp4DayAgo.getDate() - 4);
|
|
765
|
+
return tmp4DayAgo >= new Date(payment.date_created);
|
|
766
|
+
}
|
|
767
|
+
};
|
|
768
|
+
loadPBAAccountPage(orderRef) {
|
|
769
|
+
this.paymentLibComponent.pbaPayOrderRef = orderRef;
|
|
770
|
+
this.paymentLibComponent.viewName = 'pba-payment';
|
|
771
|
+
}
|
|
772
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CaseTransactionsComponent, deps: [{ token: i1.Router }, { token: i2.PaymentViewService }, { token: i3.BulkScaningPaymentService }, { token: i4.CaseTransactionsService }, { token: 'PAYMENT_LIB' }, { token: i5.OrderslistService }], target: i0.ɵɵFactoryTarget.Component });
|
|
773
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CaseTransactionsComponent, isStandalone: true, selector: "ccpay-case-transactions", inputs: { LOGGEDINUSERROLES: "LOGGEDINUSERROLES", isTakePayment: "isTakePayment", isFromServiceRequestPage: "isFromServiceRequestPage" }, ngImport: i0, template: "<div>\n <main>\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-20\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header col-20\" scope=\"col\">Over payment</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 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 <td class=\"govuk-table__cell summary-table-font\">{{ overPaymentAmount | currency :'GBP':'symbol':'1.2-2'}}</td>\n\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 && cpoDetails.length !== 0\" class=\"govuk-table__cell whitespace-inherit\">\n <ng-container *ngFor=\"let cpo of cpoDetails\">\n <ng-container *ngIf=\"cpo.orderReference == orderRef.orderRefId\">\n {{cpo.responsibleParty}}\n </ng-container>\n </ng-container>\n </td>\n <td *ngIf=\"cpoDetails === null || cpoDetails.length === 0\" 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 [orderParty]=\"orderParty\"\n [LOGGEDINUSERROLES]=\"LOGGEDINUSERROLES\"\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 && cpoDetails.length !== 0\" class=\"govuk-table__cell whitespace-inherit\">\n <ng-container *ngFor=\"let cpo of cpoDetails\">\n <ng-container *ngIf=\"cpo.orderReference == orderRef.orderRefId\">\n {{cpo.responsibleParty}}\n </ng-container>\n </ng-container>\n </td>\n <td *ngIf=\"cpoDetails === null || cpoDetails.length === 0\" 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 <!-- </div> -->\n </div>\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 [orderParty] =\"orderParty\"\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 [paymentGroupList] = \"paymentGroups\"\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<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</main>\n</div>\n<!-- </main> -->\n<!-- </div class=\"govuk-width-container\"> -->\n", styles: [".govuk-grid-column-full--gr{position:relative;margin-bottom:10px}.disable{text-decoration:none;cursor:default;color:#fff;background-color:gray;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:0px}.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 black}.totalpayments.govuk-table__row{border-bottom:2px solid black!important}.govuk-inset-text{margin-left:1em}.govuk-button{font-size:19px;margin-bottom:0!important}.groupamount.govuk-table__header,.govuk-table__cell.govuk-table__cell--col6.govuk-table__custom--col6{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 black!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__header:last-child{text-align:right}.govuk-table__cell: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%}th,td{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}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(function () { return CommonModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i6.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i6.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i6.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i0.forwardRef(function () { return i6.LowerCasePipe; }), name: "lowercase" }, { kind: "pipe", type: i0.forwardRef(function () { return i6.CurrencyPipe; }), name: "currency" }, { kind: "pipe", type: i0.forwardRef(function () { return i6.DatePipe; }), name: "date" }, { kind: "component", type: i0.forwardRef(function () { return ServiceRequestComponent; }), selector: "ccpay-service-request", inputs: ["LOGGEDINUSERROLES", "viewStatus", "orderDetail", "orderRef", "orderStatus", "orderParty", "orderCreated", "orderCCDEvent", "orderFeesTotal", "orderTotalPayments", "orderRemissionTotal", "paymentGroupList", "takePayment", "ccdCaseNumber", "isServiceRequest"], outputs: ["goToServiceRquestComponent"] }, { kind: "component", type: i0.forwardRef(function () { return UnprocessedPaymentsComponent; }), selector: "ccpay-app-unprocessed-payments", inputs: ["FEE_RECORDS_EXISTS", "PAYMENTREF", "ISTURNOFF", "IS_BUTTON_ENABLE", "IS_OS_AMT_AVAILABLE", "ISSFENABLE", "PAYMENTSLENGTH", "LEVEL"], outputs: ["selectedUnprocessedFeeEvent", "getUnprocessedFeeCount"] }, { kind: "component", type: i0.forwardRef(function () { return AddRemissionComponent; }), selector: "ccpay-add-remission", inputs: ["fee", "fees", "payment", "remission", "ccdCaseNumber", "caseType", "viewCompStatus", "paymentGroupRef", "isTurnOff", "isRefundRemission", "isStrategicFixEnable", "paidAmount", "isFromRefundListPage", "isFromPaymentDetailPage", "isFromServiceRequestPage", "isFullyRefund", "feeamount", "refundPaymentReference", "isFromRefundStatusPage", "changeRefundReason", "isServiceRequest", "LOGGEDINUSERROLES", "orderDetail", "orderRef", "orderStatus", "orderParty", "orderCreated", "orderCCDEvent", "takepayment", "orderFeesTotal", "orderTotalPayments", "orderRemissionTotal"], outputs: ["cancelRemission", "refundListReason", "refundListAmount", "refundFees"] }, { kind: "component", type: i0.forwardRef(function () { return RefundStatusComponent; }), selector: "ccpay-refund-status", inputs: ["LOGGEDINUSERROLES", "API_ROOT", "ccdCaseNumber", "isTurnOff", "orderParty"] }, { kind: "pipe", type: i0.forwardRef(function () { return CcdHyphensPipe; }), name: "ccdHyphens" }, { kind: "ngmodule", type: i0.forwardRef(function () { return FormsModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i7.ɵNgNoValidate; }), selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i0.forwardRef(function () { return i7.NgControlStatusGroup; }), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(function () { return i7.NgForm; }), selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
|
|
774
|
+
}
|
|
775
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CaseTransactionsComponent, decorators: [{
|
|
776
|
+
type: Component,
|
|
777
|
+
args: [{ selector: 'ccpay-case-transactions', imports: [
|
|
778
|
+
CommonModule,
|
|
779
|
+
forwardRef(() => ServiceRequestComponent),
|
|
780
|
+
forwardRef(() => UnprocessedPaymentsComponent),
|
|
781
|
+
forwardRef(() => AddRemissionComponent),
|
|
782
|
+
RefundStatusComponent,
|
|
783
|
+
CcdHyphensPipe,
|
|
784
|
+
CapitalizePipe,
|
|
785
|
+
FormsModule
|
|
786
|
+
], standalone: true, template: "<div>\n <main>\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-20\" scope=\"col\">Amount due</td>\n <td class=\"govuk-table__header col-20\" scope=\"col\">Over payment</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 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 <td class=\"govuk-table__cell summary-table-font\">{{ overPaymentAmount | currency :'GBP':'symbol':'1.2-2'}}</td>\n\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 && cpoDetails.length !== 0\" class=\"govuk-table__cell whitespace-inherit\">\n <ng-container *ngFor=\"let cpo of cpoDetails\">\n <ng-container *ngIf=\"cpo.orderReference == orderRef.orderRefId\">\n {{cpo.responsibleParty}}\n </ng-container>\n </ng-container>\n </td>\n <td *ngIf=\"cpoDetails === null || cpoDetails.length === 0\" 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 [orderParty]=\"orderParty\"\n [LOGGEDINUSERROLES]=\"LOGGEDINUSERROLES\"\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 && cpoDetails.length !== 0\" class=\"govuk-table__cell whitespace-inherit\">\n <ng-container *ngFor=\"let cpo of cpoDetails\">\n <ng-container *ngIf=\"cpo.orderReference == orderRef.orderRefId\">\n {{cpo.responsibleParty}}\n </ng-container>\n </ng-container>\n </td>\n <td *ngIf=\"cpoDetails === null || cpoDetails.length === 0\" 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 <!-- </div> -->\n </div>\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 [orderParty] =\"orderParty\"\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 [paymentGroupList] = \"paymentGroups\"\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<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</main>\n</div>\n<!-- </main> -->\n<!-- </div class=\"govuk-width-container\"> -->\n", styles: [".govuk-grid-column-full--gr{position:relative;margin-bottom:10px}.disable{text-decoration:none;cursor:default;color:#fff;background-color:gray;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:0px}.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 black}.totalpayments.govuk-table__row{border-bottom:2px solid black!important}.govuk-inset-text{margin-left:1em}.govuk-button{font-size:19px;margin-bottom:0!important}.groupamount.govuk-table__header,.govuk-table__cell.govuk-table__cell--col6.govuk-table__custom--col6{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 black!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__header:last-child{text-align:right}.govuk-table__cell: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%}th,td{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}\n"] }]
|
|
787
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.PaymentViewService }, { type: i3.BulkScaningPaymentService }, { type: i4.CaseTransactionsService }, { type: undefined, decorators: [{
|
|
788
|
+
type: Inject,
|
|
789
|
+
args: ['PAYMENT_LIB']
|
|
790
|
+
}] }, { type: i5.OrderslistService }]; }, propDecorators: { LOGGEDINUSERROLES: [{
|
|
791
|
+
type: Input,
|
|
792
|
+
args: ['LOGGEDINUSERROLES']
|
|
793
|
+
}], isTakePayment: [{
|
|
794
|
+
type: Input
|
|
795
|
+
}], isFromServiceRequestPage: [{
|
|
796
|
+
type: Input
|
|
797
|
+
}] } });
|
|
798
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS10cmFuc2FjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGF5bWVudC1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Nhc2UtdHJhbnNhY3Rpb25zL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BheW1lbnQtbGliL3NyYy9saWIvY29tcG9uZW50cy9jYXNlLXRyYW5zYWN0aW9ucy9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBTXRFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUN0RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxj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QUMsUUFBa0I7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7SUFDcEQsQ0FBQzt1R0FwMEJVLHlCQUF5QiwwSkFrRjFCLGFBQWE7MkZBbEZaLHlCQUF5Qiw2TkN4Q3RDLHUwNkNBc3hCQSx1bkhEenZCSSxZQUFZLDB4QkFDSyx1QkFBdUIsK1pBQ3ZCLDRCQUE0QixxVUFDNUIscUJBQXFCLDZ2QkFDdEMscUJBQXFCLHlMQUNyQixjQUFjLHlGQUVkLFdBQVc7OzJGQUlGLHlCQUF5QjtrQkFoQnJDLFNBQVM7K0JBQ0UseUJBQXlCLFdBRzFCO3dCQUNQLFlBQVk7d0JBQ1osVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO3dCQUN6QyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLENBQUM7d0JBQzlDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQzt3QkFDdkMscUJBQXFCO3dCQUNyQixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsV0FBVztxQkFDWixjQUNXLElBQUk7OzBCQW9GYixNQUFNOzJCQUFDLGFBQWE7NEVBakZLLGlCQUFpQjtzQkFBNUMsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBQ2pCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBJbmplY3QsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUGF5bWVudExpYkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BheW1lbnQtbGliLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJUGF5bWVudEdyb3VwIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudEdyb3VwJztcbmltcG9ydCB7IENhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FzZS10cmFuc2FjdGlvbnMvY2FzZS10cmFuc2FjdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnVsay1zY2FuaW5nLXBheW1lbnQvYnVsay1zY2FuaW5nLXBheW1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50Vmlld1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYXltZW50LXZpZXcvcGF5bWVudC12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JkZXJzbGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcmRlcnNsaXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZlZSc7XG5pbXBvcnQgeyBJUGF5bWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHsgSVJlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5pbXBvcnQgeyBJUGF5bWVudFZpZXcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50Vmlldyc7XG5pbXBvcnQgeyBJT3JkZXJSZWZlcmVuY2VGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lPcmRlclJlZmVyZW5jZUZlZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU2VydmljZVJlcXVlc3RDb21wb25lbnQgfSBmcm9tICcuLi9zZXJ2aWNlLXJlcXVlc3Qvc2VydmljZS1yZXF1ZXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVbnByb2Nlc3NlZFBheW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vdW5wcm9jZXNzZWQtcGF5bWVudHMvdW5wcm9jZXNzZWQtcGF5bWVudHMuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBZGRSZW1pc3Npb25Db21wb25lbnQgfSBmcm9tICcuLi9hZGQtcmVtaXNzaW9uL2FkZC1yZW1pc3Npb24uY29tcG9uZW50JztcbmltcG9ydCB7IFJlZnVuZFN0YXR1c0NvbXBvbmVudCB9IGZyb20gJy4uL3JlZnVuZC1zdGF0dXMvcmVmdW5kLXN0YXR1cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2NkSHlwaGVuc1BpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9jY2QtaHlwaGVucy5waXBlJztcbmltcG9ydCB7IENhcGl0YWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvY2FwaXRhbGl6ZS5waXBlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1jYXNlLXRyYW5zYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXNlLXRyYW5zYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Nhc2UtdHJhbnNhY3Rpb25zLmNvbXBvbmVudC5jc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBmb3J3YXJkUmVmKCgpID0+IFNlcnZpY2VSZXF1ZXN0Q29tcG9uZW50KSxcbiAgICBmb3J3YXJkUmVmKCgpID0+IFVucHJvY2Vzc2VkUGF5bWVudHNDb21wb25lbnQpLFxuICAgIGZvcndhcmRSZWYoKCkgPT4gQWRkUmVtaXNzaW9uQ29tcG9uZW50KSxcbiAgICBSZWZ1bmRTdGF0dXNDb21wb25lbnQsXG4gICAgQ2NkSHlwaGVuc1BpcGUsXG4gICAgQ2FwaXRhbGl6ZVBpcGUsXG4gICAgRm9ybXNNb2R1bGVcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDYXNlVHJhbnNhY3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdMT0dHRURJTlVTRVJST0xFUycpIExPR0dFRElOVVNFUlJPTEVTOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgaXNUYWtlUGF5bWVudDogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlOiBib29sZWFuO1xuICB0YWtlUGF5bWVudDogYm9vbGVhbjtcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBleGNSZWZlcmVuY2U6IHN0cmluZztcbiAgcGF5bWVudEdyb3VwczogYW55W10gPSBbXTtcbiAgcGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgbm9uUGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgYWxsUGF5bWVudHM6IElQYXltZW50W10gPSBbXTtcbiAgcmVtaXNzaW9uczogSVJlbWlzc2lvbltdID0gW107XG4gIGZlZXM6IElGZWVbXSA9IFtdO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgdG90YWxGZWVzOiBudW1iZXI7XG4gIHRvdGFsUGF5bWVudHM6IG51bWJlciA9IDA7XG4gIHRvdGFsTm9uT2ZmUGF5bWVudHM6IG51bWJlcjtcbiAgdG90YWxSZW1pc3Npb25zOiBudW1iZXIgPSAwO1xuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nO1xuICBkY25OdW1iZXI6IHN0cmluZztcbiAgcGF5bWVudFJlZjogc3RyaW5nO1xuICBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIGlzUmVmdW5kUmVtaXNzaW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNTdHJhdGVnaWNGaXhFbmFibGU6IGJvb2xlYW47XG4gIGlzQWRkRmVlQnRuRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIGlzRXhjZXB0aW9uUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBleGNlcHRpb25SZWNvcmRSZWZlcmVuY2U6IHN0cmluZztcbiAgaXNBbnlGZWVHcm91cEF2aWxhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQnVsa1NjYW5FbmFibGU7XG4gIGlzUmVtaXNzaW9uc01hdGNoOiBib29sZWFuO1xuICB2aWV3U3RhdHVzID0gJ21haW4nO1xuICBpc1JlbW92ZUJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGZlZUlkOiBJRmVlO1xuICBjbEFtb3VudER1ZTogbnVtYmVyID0gMDtcbiAgb3ZlclBheW1lbnRBbW91bnQ6IG51bWJlciA9IDA7XG4gIHVucHJvY2Vzc2VkUmVjb3JkQ291bnQ6IG51bWJlcjtcbiAgaXNGZWVSZWNvcmRzRXhpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNHcnBPdXRzdGFuZGluZ0FtdFBvc2l0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIHRvdGFsUmVmdW5kQW1vdW50OiBudW1iZXI7XG4gIGNhc2VUeXBlOiBTdHJpbmc7XG4gIC8vIGxzQ2NkTnVtYmVyOiBhbnkgPSBscy5nZXQ8YW55PignY2NkTnVtYmVyJyk7XG4gIHBheW1lbnQ6IElQYXltZW50O1xuICBwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXA7XG4gIHBheW1lbnRWaWV3OiBJUGF5bWVudFZpZXc7XG5cbiAgLy9PcmRlciBjaGFuZ2VzXG4gIG9yZGVyRGV0YWlsOiBhbnlbXSA9IFtdO1xuXG4gIGlzQWRkUmVtaXNzaW9uRW5hYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIG9yZGVyUmVtaXNzaW9uRGV0YWlsczogYW55W10gPSBbXTtcbiAgb3JkZXJMZXZlbEZlZXM6IElPcmRlclJlZmVyZW5jZUZlZVtdID0gW107XG4gIGlzcGF5bWVudEdyb3VwQXBpc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuICBjcG9EZXRhaWxzOiBhbnlbXSA9IG51bGw7XG4gIG9yZGVyUmVmOiBzdHJpbmc7XG4gIG9yZGVyU3RhdHVzOiBzdHJpbmc7XG4gIG9yZGVyUGFydHk6IHN0cmluZztcbiAgb3JkZXJDcmVhdGVkOiBEYXRlO1xuICBvcmRlckNDREV2ZW50OiBzdHJpbmc7XG4gIHNlcnZpY2VSZXF1ZXN0VmFsdWU6IHN0cmluZztcbiAgb3JkZXJBZGRCdG5FbmFibGU6IGJvb2xlYW47XG4gIG9yZGVyRmVlc1RvdGFsOiBudW1iZXIgPSAwLjAwO1xuICBvcmRlclJlbWlzc2lvblRvdGFsOiBudW1iZXIgPSAwLjAwO1xuICBvcmRlclRvdGFsUGF5bWVudHM6IG51bWJlciA9IDAuMDA7XG4gIG9yZGVyUGVuZGluZ1BheW1lbnRzOiBudW1iZXIgPSAwLjAwO1xuICBpc0NQT0Rvd246IGJvb2xlYW47XG4gIHRlc3Q6IGJvb2xlYW47XG4gIGlzUEJBOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSXNzdWVSZWZ1bmZCdG5FbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNBZGRSZW1pc3Npb25CdG5FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kID0gWydwYXltZW50cy1yZWZ1bmQtYXBwcm92ZXInLCAncGF5bWVudHMtcmVmdW5kJ107XG4gIGlzRWxpZ2libGU0UEJBUGF5bWVudCA9IFsncHVpLWZpbmFuY2UtbWFuYWdlcicsICdwdWktdXNlci1tYW5hZ2VyJywgJ3B1aS1vcmdhbmlzYXRpb24tbWFuYWdlcicsICdwdWktY2FzZS1tYW5hZ2VyJ107XG4gIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgLy9pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2U6IGJvb2xlYW47XG4gIG5hdmlnYXRpb25wYWdlOiBzdHJpbmc7XG4gIHJlbWlzc2lvbkZlZUFtdDogbnVtYmVyO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBidWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlOiBCdWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2U6IENhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ1BBWU1FTlRfTElCJykgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9ucGFnZSA9ICcnO1xuICAgIGlmICh0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldHBheW1lbnRQYWdlVmlldygpICE9PSBudWxsKSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldHBheW1lbnRQYWdlVmlldygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5wYXltZW50VmlldyA9IGRhdGEpO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuTE9HR0VESU5VU0VSUk9MRVMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLkxPR0dFRElOVVNFUlJPTEVTLmxlbmd0aCA9PT0gMCkgJiYgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRVc2VyUm9sZXNMaXN0KCkgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0VXNlclJvbGVzTGlzdCgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5MT0dHRURJTlVTRVJST0xFUyA9IGRhdGEpO1xuICAgIH1cbiAgICBpZiAodGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRuYXZpZ2F0aW9uUGFnZVZhbHVlKCkgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0bmF2aWdhdGlvblBhZ2VWYWx1ZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5uYXZpZ2F0aW9ucGFnZSA9IGRhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBheW1lbnRWaWV3ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5wYXltZW50VmlldyAhPT0gbnVsbCAmJiB0aGlzLnBheW1lbnRWaWV3LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5uYXZpZ2F0aW9ucGFnZSA9PT0gJ3BheW1lbnRkZXRhaWxzcGFnZScpIHtcbiAgICAgIHRoaXMuZ29Ub1BheWVtZW50Vmlldyh0aGlzLnBheW1lbnRWaWV3LnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlLCB0aGlzLnBheW1lbnRWaWV3LnJlZmVyZW5jZSwgdGhpcy5wYXltZW50Vmlldy5tZXRob2QpO1xuICAgIH1cbiAgICB0aGlzLmlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVI7XG4gICAgdGhpcy5jYXNlVHlwZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQVNFVFlQRTtcbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUiA9PT0gJycpIHtcbiAgICAgIHRoaXMuY2NkQ2FzZU51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5FWENfUkVGRVJFTkNFO1xuICAgIH1cbiAgICB0aGlzLmV4Y1JlZmVyZW5jZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5FWENfUkVGRVJFTkNFO1xuICAgIHRoaXMudGFrZVBheW1lbnQgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQ7XG5cbiAgICBjb25zdCBzZXJ2aWNlUmVxdWVzdCA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVDtcbiAgICBpZiAoc2VydmljZVJlcXVlc3QgIT09IHVuZGVmaW5lZCAmJiBzZXJ2aWNlUmVxdWVzdC50b1N0cmluZygpID09PSAndHJ1ZScpIHtcbiAgICAgIHRoaXMuc2VydmljZVJlcXVlc3RWYWx1ZSA9ICd0cnVlJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXJ2aWNlUmVxdWVzdFZhbHVlID0gJ2ZhbHNlJztcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5pc0J1bGtTY2FuRW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEU7XG4gICAgdGhpcy5kY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRENOX05VTUJFUjtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTi50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRjtcbiAgICB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTU0ZFTkFCTEU7XG4gICAgaWYgKCF0aGlzLmlzVHVybk9mZikge1xuICAgICAgLy8gaWYgKHRoaXMubHNDY2ROdW1iZXIgIT09IHRoaXMuY2NkQ2FzZU51bWJlcikge1xuICAgICAgLy8gICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvY2NkLXNlYXJjaD90YWtlUGF5bWVudD10cnVlYCk7XG4gICAgICAvLyB9XG5cbiAgICAgIHRoaXMuY2FzZVRyYW5zYWN0aW9uc1NlcnZpY2UuZ2V0UGF5bWVudEdyb3Vwcyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudEdyb3VwcyA9PiB7XG4gICAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwcyA9IHBheW1lbnRHcm91cHNbJ3BheW1lbnRfZ3JvdXBzJ107XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVBbW91bnRzKCk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVPcmRlckZlZXNBbW91bnRzKCk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVSZWZ1bmRBbW91bnQoKTtcbiAgICAgICAgICBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0U2VsZWN0ZWRPcmRlclJlZklkKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLm9yZGVyUmVmID0gZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmdvVG9PcmRlclZpZXdEZXRhaWxTZWN0aW9uKHRoaXMub3JkZXJSZWYpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRQYXJ0eURldGFpbHModGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNwb0RldGFpbHMgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5jb250ZW50O1xuXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSA8YW55PmVycm9yID8gZXJyb3IucmVwbGFjZSgvXCIvZywgXCJcIikgOiBcIlwiO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDUE9Eb3duID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIH1cblxuXG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSA8YW55PmVycm9yID8gZXJyb3IucmVwbGFjZSgvXCIvZywgXCJcIikgOiBcIlwiO1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zZXREZWZhdWx0cygpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhc2VUcmFuc2FjdGlvbnNTZXJ2aWNlLmdldFBheW1lbnRHcm91cHModGhpcy5jY2RDYXNlTnVtYmVyKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cHMgPT4ge1xuICAgICAgICAgIHRoaXMuaXNBbnlGZWVHcm91cEF2aWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cHMgPSBwYXltZW50R3JvdXBzWydwYXltZW50X2dyb3VwcyddO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlT3JkZXJGZWVzQW1vdW50cygpO1xuICAgICAgICAgIHRoaXMudG90YWxSZWZ1bmRBbW91bnQgPSB0aGlzLmNhbGN1bGF0ZVJlZnVuZEFtb3VudCgpO1xuICAgICAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBhcnR5RGV0YWlscyh0aGlzLmNjZENhc2VOdW1iZXIpLnN1YnNjcmliZShcbiAgICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jcG9EZXRhaWxzID0gSlNPTi5wYXJzZShyZXNwb25zZSkuY29udGVudDtcblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gPGFueT5lcnJvciA/IGVycm9yLnJlcGxhY2UoL1wiL2csIFwiXCIpIDogXCJcIjtcbiAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0cygpO1xuICAgICAgICAgICAgICB0aGlzLmlzQ1BPRG93biA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gPGFueT5lcnJvciA/IGVycm9yLnJlcGxhY2UoL1wiL2csIFwiXCIpIDogXCJcIjtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdHMoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYXltZW50R3JvdXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hlY2tGb3JFeGNlcHRpb25SZWNvcmQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2VzKCkgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0aXNGcm9tU2VydmljZVJlcXVlc3RQYWdlcygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSBkYXRhKTtcbiAgICB9XG5cbiAgfVxuXG4gIHNldERlZmF1bHRzKCk6IHZvaWQge1xuICAgIHRoaXMudG90YWxQYXltZW50cyA9IDAuMDA7XG4gICAgdGhpcy50b3RhbFJlbWlzc2lvbnMgPSAwLjAwO1xuICAgIHRoaXMudG90YWxOb25PZmZQYXltZW50cyA9IDAuMDA7XG4gICAgdGhpcy50b3RhbEZlZXMgPSAwLjAwO1xuICB9XG5cbiAgZ2V0QWxsb2NhdGlvblN0YXR1cyhwYXltZW50czogYW55KSB7XG5cbiAgICBsZXQgcGF5bWVudEFsbG9jYXRpb24gPSBwYXltZW50cy5wYXltZW50X2FsbG9jYXRpb24sXG4gICAgICBpc0FsbG9jYXRpb25TdGF0dXNFeGlzdCA9IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA+IDA7XG4gICAgcmV0dXJuIGlzQWxsb2NhdGlvblN0YXR1c0V4aXN0ID8gcGF5bWVudEFsbG9jYXRpb25bMF0uYWxsb2NhdGlvbl9zdGF0dXMgOiAnLSc7XG4gICAgLy9yZXR1cm4gXCItXCI7XG5cbiAgfVxuXG4gIGNoZWNrRm9yRXhjZXB0aW9uUmVjb3JkKCk6IHZvaWQge1xuXG4gICAgaWYgKHRoaXMucGF5bWVudEdyb3Vwcy5sZW5ndGggPT09IDAgJiYgKHRoaXMuc2VsZWN0ZWRPcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ2NjZG9yZXhjZXB0aW9uJyB8fCB0aGlzLnNlbGVjdGVkT3B0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdyYycpKSB7XG4gICAgICB0aGlzLmJ1bGtTY2FuaW5nUGF5bWVudFNlcnZpY2UuZ2V0QlNQYXltZW50c0J5Q0NEKHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICByZWNvcmREYXRhID0+IHtcbiAgICAgICAgICBpZiAocmVjb3JkRGF0YVsnZGF0YSddICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UubGVuZ3RoID4gMCAmJiByZWNvcmREYXRhWydkYXRhJ10uY2NkX3JlZmVyZW5jZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVjb3JkRGF0YVsnZGF0YSddICYmIHJlY29yZERhdGFbJ2RhdGEnXS5leGNlcHRpb25fcmVjb3JkX3JlZmVyZW5jZSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UubGVuZ3RoID4gMCAmJiByZWNvcmREYXRhWydkYXRhJ10uY2NkX3JlZmVyZW5jZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlY29yZERhdGFbJ2RhdGEnXSAmJiByZWNvcmREYXRhWydkYXRhJ10uZXhjZXB0aW9uX3JlY29yZF9yZWZlcmVuY2UgJiYgcmVjb3JkRGF0YVsnZGF0YSddLmV4Y2VwdGlvbl9yZWNvcmRfcmVmZXJlbmNlLmxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHJlY29yZERhdGFbJ2RhdGEnXS5jY2RfcmVmZXJlbmNlID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGF5bWVudEdyb3Vwcy5sZW5ndGggPT09IDAgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnZGNuJykge1xuICAgICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5DQ0RfQ0FTRV9OVU1CRVIubGVuZ3RoID4gMCAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRVhDX1JFRkVSRU5DRS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuRVhDX1JFRkVSRU5DRS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0V4Y2VwdGlvblJlY29yZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnBheW1lbnRHcm91cHMubGVuZ3RoID4gMClcbiAgICAgIHRoaXMucGF5bWVudEdyb3Vwcy5mb3JFYWNoKHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIGlmIChwYXltZW50R3JvdXAucGF5bWVudHMpIHtcbiAgICAgICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChwYXltZW50LmNhc2VfcmVmZXJlbmNlICE9PSB1bmRlZmluZWQgJiYgcGF5bWVudC5jY2RfY2FzZV9udW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB0aGlzLmlzRXhjZXB0aW9uUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNFeGNlcHRpb25SZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgY2FsY3VsYXRlT3JkZXJGZWVzQW1vdW50cygpOiB2b2lkIHtcbiAgICBsZXQgZmVlc1RvdGFsID0gMC4wMDtcbiAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuXG4gICAgICB0aGlzLnJlc2V0T3JkZXJWYXJpYWJsZXMoKTtcbiAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgdGhpcy5vcmRlckZlZXNUb3RhbCA9IHRoaXMub3JkZXJGZWVzVG90YWwgKyBmZWUuY2FsY3VsYXRlZF9hbW91bnRcbiAgICAgICAgICB0aGlzLm92ZXJQYXltZW50QW1vdW50ID0gdGhpcy5vdmVyUGF5bWVudEFtb3VudCArIGZlZS5vdmVyX3BheW1lbnRcbiAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc3Npb24gPT4ge1xuICAgICAgICAgIHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA9IHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCArIHJlbWlzc2lvbi5od2ZfYW1vdW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgICBjb25zdCBpc0ZlZU92ZXJQYXltZW50RXhpc3QgPSB0aGlzLm92ZXJQYXltZW50QW1vdW50ID09PSAwO1xuICAgICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICBpZiAoaXNGZWVPdmVyUGF5bWVudEV4aXN0KSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJQYXltZW50QW1vdW50ID0gdGhpcy5vdmVyUGF5bWVudEFtb3VudCArIHBheW1lbnQub3Zlcl9wYXltZW50XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzID0gKHRoaXMub3JkZXJGZWVzVG90YWwgLSB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwpIC0gdGhpcy5vcmRlclRvdGFsUGF5bWVudHM7XG4gICAgICBpZiAocGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXMgPT09ICdQYWlkJykge1xuICAgICAgICB0aGlzLm9yZGVyU3RhdHVzID0gcGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXM7XG4gICAgICAgIHRoaXMub3JkZXJBZGRCdG5FbmFibGUgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAocGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXMgPT09ICdQYXJ0aWFsbHkgcGFpZCcgfHwgcGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXMgPT09ICdOb3QgcGFpZCcpIHtcbiAgICAgICAgdGhpcy5vcmRlclN0YXR1cyA9IHBheW1lbnRHcm91cC5zZXJ2aWNlX3JlcXVlc3Rfc3RhdHVzO1xuICAgICAgICB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGF5bWVudEdyb3VwLnNlcnZpY2VfcmVxdWVzdF9zdGF0dXMgPT09ICdEaXNwdXRlZCcpIHtcbiAgICAgICAgdGhpcy5vcmRlclN0YXR1cyA9IHBheW1lbnRHcm91cC5zZXJ2aWNlX3JlcXVlc3Rfc3RhdHVzO1xuICAgICAgICB0aGlzLm9yZGVyQWRkQnRuRW5hYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY3BvRGV0YWlscyAhPT0gbnVsbCAmJiB0aGlzLmNwb0RldGFpbHMubGVuZ3RoICE9PSAwICkge1xuICAgICAgICBsZXQgaW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5jcG9EZXRhaWxzLmZvckVhY2goKGNwbywgaSkgPT57XG4gICAgICAgICAgICAgICAgICAgIGlmKGNwby5vcmRlclJlZmVyZW5jZSA9PSB0aGlzLm9yZGVyUmVmKXtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9yZGVyTGV2ZWxGZWVzLnB1c2goeyBvcmRlclJlZklkOiBwYXltZW50R3JvdXBbJ3BheW1lbnRfZ3JvdXBfcmVmZXJlbmNlJ10sIG9yZGVyVG90YWxGZWVzOiB0aGlzLm9yZGVyRmVlc1RvdGFsLCBvcmRlclN0YXR1czogdGhpcy5vcmRlclN0YXR1cywgb3JkZXJQYXJ0eTogdGhpcy5jcG9EZXRhaWxzW2luZGV4XS5yZXNwb25zaWJsZVBhcnR5LCBvcmRlckNDREV2ZW50OiB0aGlzLmNwb0RldGFpbHNbaW5kZXhdLmFjdGlvbiwgb3JkZXJDcmVhdGVkOiBwYXltZW50R3JvdXBbJ2RhdGVfY3JlYXRlZCddLCBvcmRlckFkZEJ0bkVuYWJsZTogdGhpcy5vcmRlckFkZEJ0bkVuYWJsZSB9KTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcmRlckxldmVsRmVlcy5wdXNoKHsgb3JkZXJSZWZJZDogcGF5bWVudEdyb3VwWydwYXltZW50X2dyb3VwX3JlZmVyZW5jZSddLCBvcmRlclRvdGFsRmVlczogdGhpcy5vcmRlckZlZXNUb3RhbCwgb3JkZXJTdGF0dXM6IHRoaXMub3JkZXJTdGF0dXMsIG9yZGVyUGFydHk6ICcnLCBvcmRlckNDREV2ZW50OiAnJywgb3JkZXJDcmVhdGVkOiBwYXltZW50R3JvdXBbJ2RhdGVfY3JlYXRlZCddLCBvcmRlckFkZEJ0bkVuYWJsZTogdGhpcy5vcmRlckFkZEJ0bkVuYWJsZSB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3JkZXJTdGF0dXMgIT09ICdQYWlkJykge1xuICAgICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldE9yZGVyc0xpc3QodGhpcy5vcmRlckxldmVsRmVlcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcmVzZXRPcmRlclZhcmlhYmxlcygpOiB2b2lkIHtcbiAgICB0aGlzLm9yZGVyRmVlc1RvdGFsID0gMC4wMDtcbiAgICB0aGlzLm9yZGVyVG90YWxQYXltZW50cyA9IDAuMDA7XG4gICAgdGhpcy5vcmRlclJlbWlzc2lvblRvdGFsID0gMC4wMDtcbiAgICB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzID0gMC4wMDtcbiAgICB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG5cbiAgfTtcblxuICBnb1RvT3JkZXJWaWV3RGV0YWlsU2VjdGlvbihvcmRlclJlZmVyZW5jZU9iajogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldE9yZGVyUmVmSWQob3JkZXJSZWZlcmVuY2VPYmopO1xuICAgICAgdGhpcy5vcmRlclJlZiA9IG9yZGVyUmVmZXJlbmNlT2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldE9yZGVyUmVmSWQob3JkZXJSZWZlcmVuY2VPYmoub3JkZXJSZWZJZCk7XG4gICAgICB0aGlzLm9yZGVyUmVmID0gb3JkZXJSZWZlcmVuY2VPYmoub3JkZXJSZWZJZDtcbiAgICB9XG5cbiAgICB0aGlzLm9yZGVyRmVlc1RvdGFsID0gMC4wMDtcbiAgICB0aGlzLm9yZGVyUmVtaXNzaW9uVG90YWwgPSAwLjAwO1xuICAgIHRoaXMub3JkZXJUb3RhbFBheW1lbnRzID0gMC4wMDtcbiAgICB0aGlzLm9yZGVyUGVuZGluZ1BheW1lbnRzID0gMC4wMDtcblxuICAgIHRoaXMub3JkZXJEZXRhaWwgPSB0aGlzLnBheW1lbnRHcm91cHMuZmlsdGVyKHggPT4geC5wYXltZW50X2dyb3VwX3JlZmVyZW5jZSA9PT0gdGhpcy5vcmRlclJlZik7XG4gICAgdGhpcy5vcmRlckRldGFpbC5mb3JFYWNoKG9yZGVyRGV0YWlsID0+IHtcbiAgICAgIGlmIChvcmRlckRldGFpbC5mZWVzKSB7XG4gICAgICAgIG9yZGVyRGV0YWlsLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgIHRoaXMub3JkZXJGZWVzVG90YWwgPSB0aGlzLm9yZGVyRmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChvcmRlckRldGFpbC5yZW1pc3Npb25zKSB7XG4gICAgICAgIG9yZGVyRGV0YWlsLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc3Npb24gPT4ge1xuICAgICAgICAgIHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCA9IHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCArIHJlbWlzc2lvbi5od2ZfYW1vdW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9yZGVyRGV0YWlsLnBheW1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5wYXltZW50ID0gb3JkZXJEZXRhaWwucGF5bWVudHNbMF07XG4gICAgICAgICAgb3JkZXJEZXRhaWwucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcmRlclRvdGFsUGF5bWVudHMgPSB0aGlzLm9yZGVyVG90YWxQYXltZW50cyArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm9yZGVyU3RhdHVzID0gb3JkZXJEZXRhaWwuc2VydmljZV9yZXF1ZXN0X3N0YXR1cztcbiAgICB9KTtcblxuICAgIGxldCBwb3NpdGlvbiA9IC0xO1xuICAgIGlmICh0aGlzLmNwb0RldGFpbHMgIT09IG51bGwgJiYgdGhpcy5jcG9EZXRhaWxzLmxlbmd0aCAhPT0wKSB7XG4gICAgdGhpcy5jcG9EZXRhaWxzLmZvckVhY2goKGNwbywgaSkgPT57XG4gICAgICBpZihjcG8ub3JkZXJSZWZlcmVuY2UgPT0gdGhpcy5vcmRlclJlZil7XG4gICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAgIGlmIChwb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLm9yZGVyUGFydHkgPSB0aGlzLmNwb0RldGFpbHNbcG9zaXRpb25dLnJlc3BvbnNpYmxlUGFydHk7XG4gICAgICAgICAgdGhpcy5vcmRlckNyZWF0ZWQgPSB0aGlzLmNwb0RldGFpbHNbcG9zaXRpb25dLmNyZWF0ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgdGhpcy5vcmRlckNDREV2ZW50ID0gdGhpcy5jcG9EZXRhaWxzW3Bvc2l0aW9uXS5hY3Rpb247XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3JkZXJQYXJ0eSA9ICcnO1xuICAgICAgdGhpcy5vcmRlckNDREV2ZW50ID0gJyc7XG4gICAgICB0aGlzLm9yZGVyQ3JlYXRlZCA9IG9yZGVyUmVmZXJlbmNlT2JqLm9yZGVyQ3JlYXRlZDtcbiAgICB9XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ29yZGVyLWZ1bGwtdmlldyc7XG4gIH1cblxuICByZWRpcmVjdFRvT3JkZXJGZWVTZWFyY2hQYWdlKGV2ZW50OiBhbnksIG9yZGVyZWY6IGFueSkge1xuICAgIGlmIChvcmRlcmVmLm9yZGVyQWRkQnRuRW5hYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbiA9IG51bGw7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gb3JkZXJlZi5vcmRlclJlZklkO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2ZlZS1zdW1tYXJ5JztcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVBbW91bnRzKCk6IHZvaWQge1xuICAgIGxldCBmZWVzVG90YWwgPSAwLjAwLFxuICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICByZW1pc3Npb25zVG90YWwgPSAwLjAwLFxuICAgICAgbm9uT2ZmTGluZVBheW1lbnQgPSAwLjAwO1xuXG4gICAgdGhpcy5wYXltZW50R3JvdXBzLmZvckVhY2gocGF5bWVudEdyb3VwID0+IHtcbiAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcykge1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgLy8gbmV3IGZlYXR1cmUgQXBwb3J0aW9ubWVudCB0b2dnbGUgY2hhbmdlc1xuICAgICAgICAgIGlmICghdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgICAgIGlmIChmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICAgICAgICAgIGxldCBhID0gZmVlLmFtb3VudF9kdWUgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgbGV0IGIgPSBmZWUuYW1vdW50X2R1ZSA8PSAwO1xuICAgICAgICAgICAgICB0aGlzLmNsQW1vdW50RHVlID0gYSA/IHRoaXMuY2xBbW91bnREdWUgKyBmZWUubmV0X2Ftb3VudCA6IGIgPyB0aGlzLmNsQW1vdW50RHVlICsgMCA6IHRoaXMuY2xBbW91bnREdWUgKyBmZWUuYW1vdW50X2R1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlZVsncGF5bWVudF9ncm91cF9yZWZlcmVuY2UnXSA9IHBheW1lbnRHcm91cFsncGF5bWVudF9ncm91cF9yZWZlcmVuY2UnXTtcbiAgICAgICAgICAgIHRoaXMuZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZlZXNUb3RhbCA9IGZlZXNUb3RhbCArIGZlZS5jYWxjdWxhdGVkX2Ftb3VudDtcbiAgICAgICAgICAgIHRoaXMuZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgIHRoaXMudG90YWxGZWVzID0gZmVlc1RvdGFsO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bWVudEdyb3VwLnBheW1lbnRzKSB7XG4gICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgICAgICBpZiAoIXRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgICAgICBsZXQgYWxsb2NhdGlvbkxlbiA9IHBheW1lbnQucGF5bWVudF9hbGxvY2F0aW9uO1xuXG4gICAgICAgICAgICBpZiAocGF5bWVudC5zdGF0dXMudG9VcHBlckNhc2UoKSA9PT0gJ1NVQ0NFU1MnKSB7XG4gICAgICAgICAgICAgIHBheW1lbnRzVG90YWwgPSBwYXltZW50c1RvdGFsICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uTGVuLmxlbmd0aCA9PT0gMCB8fCBhbGxvY2F0aW9uTGVuLmxlbmd0aCA+IDAgJiYgYWxsb2NhdGlvbkxlblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcpIHtcbiAgICAgICAgICAgICAgICBub25PZmZMaW5lUGF5bWVudCA9IG5vbk9mZkxpbmVQYXltZW50ICsgcGF5bWVudC5hbW91bnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25MZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9uUGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbG9jYXRpb25MZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlXG4gICAgICAgICAgICB0aGlzLmFsbFBheW1lbnRzLnB1c2gocGF5bWVudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50cy5wdXNoKHBheW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF5bWVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2VcbiAgICAgICAgICAgIHRoaXMuYWxsUGF5bWVudHMucHVzaChwYXltZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy50b3RhbFBheW1lbnRzID0gcGF5bWVudHNUb3RhbDtcbiAgICAgIC8vIG5ldyBmZWF0dXJlIEFwcG9ydGlvbm1lbnQgdG9nZ2xlIGNoYW5nZXNcbiAgICAgIGlmICghdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgdGhpcy50b3RhbE5vbk9mZlBheW1lbnRzID0gbm9uT2ZmTGluZVBheW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICBwYXltZW50R3JvdXAucmVtaXNzaW9ucy5mb3JFYWNoKHJlbWlzaXNvbiA9PiB7XG4gICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNpc29uLmh3Zl9hbW91bnQ7XG4gICAgICAgICAgdGhpcy5yZW1pc3Npb25zLnB1c2gocmVtaXNpc29uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvdGFsUmVtaXNzaW9ucyA9IHJlbWlzc2lvbnNUb3RhbDtcbiAgICB9KTtcblxuICB9XG5cbiAgY2FsY3VsYXRlUmVmdW5kQW1vdW50KCkge1xuICAgIGlmICghdGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgIGxldCBpc05ld1BheW1lbnRHcm91cCA9IGZhbHNlO1xuXG4gICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaCgocGF5bWVudEdyb3VwLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAwLjAwLFxuICAgICAgICAgIGZlZXNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gMC4wMCxcbiAgICAgICAgICBmZWVzID0gW107XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgICAgLy8gdGhpcy5pc0ZlZVJlY29yZHNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgZmVlc1RvdGFsID0gZmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuXG4gICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAocGF5bWVudEdyb3VwLnJlbWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZW0uZmVlX2NvZGUgPT09IGZlZS5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGZlZVsncmVtaXNzaW9ucyddID0gcmVtO1xuICAgICAgICAgICAgICAgICAgLy8gaWYoIWZlZXMuZmluZChrID0+IGsuY29kZT1mZWUuY29kZSkpXG4gICAgICAgICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgICAgICAgIC8vfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSZW1pc3Npb25zTWF0Y2gpIHtcbiAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmZWUuZGF0ZV9jcmVhdGVkKSB7XG4gICAgICAgICAgICAgIGlzTmV3UGF5bWVudEdyb3VwID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50R3JvdXBzW2luZGV4XVsnb2xkJ10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3Vwc1tpbmRleF0uZmVlcyA9IGZlZXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5wYXltZW50cykge1xuICAgICAgICAgIHBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheW1lbnQuc3RhdHVzLnRvVXBwZXJDYXNlKCkgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgICAgICBwYXltZW50c1RvdGFsID0gcGF5bWVudHNUb3RhbCArIHBheW1lbnQuYW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5yZW1pc3Npb25zKSB7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW1pc3Npb24gPT4ge1xuICAgICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gcmVtaXNzaW9uc1RvdGFsICsgcmVtaXNzaW9uLmh3Zl9hbW91bnQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAoZmVlc1RvdGFsIC0gcmVtaXNzaW9uc1RvdGFsKSAtIHBheW1lbnRzVG90YWw7XG4gICAgICAgIGlmIChncnBPdXRzdGFuZGluZ0Ftb3VudCA+IDAgJiYgaXNOZXdQYXltZW50R3JvdXApIHtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0ZlZVJlY29yZHNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wYXltZW50UmVmID0gcGF5bWVudEdyb3VwLnBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXltZW50R3JvdXAuZmVlcyAmJiBwYXltZW50R3JvdXAuZmVlcy5sZW5ndGggPiAwICYmIGdycE91dHN0YW5kaW5nQW1vdW50IDw9IDAgJiYgaXNOZXdQYXltZW50R3JvdXApIHtcbiAgICAgICAgICB0aGlzLmlzQW55RmVlR3JvdXBBdmlsYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICgoIWlzTmV3UGF5bWVudEdyb3VwICYmIHRoaXMuaXNIaXN0b3JpY0dyb3VwQXZhaWxhYmxlKSB8fCAoIWlzTmV3UGF5bWVudEdyb3VwICYmICF0aGlzLmlzSGlzdG9yaWNHcm91cEF2YWlsYWJsZSkpIHtcbiAgICAgICAgdGhpcy5pc0FueUZlZUdyb3VwQXZpbGFibGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRvdGFsUmVmdW5kQW1vdW50ID0gMCxcbiAgICAgICAgaXNGZWVBbW91bnRaZXJvID0gZmFsc2U7XG4gICAgICB0aGlzLnBheW1lbnRHcm91cHMuZm9yRWFjaChwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICBsZXQgZ3JwT3V0c3RhbmRpbmdBbW91bnQgPSAwLjAwLFxuICAgICAgICAgIGZlZXNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgcGF5bWVudHNUb3RhbCA9IDAuMDAsXG4gICAgICAgICAgcmVtaXNzaW9uc1RvdGFsID0gMC4wMDtcbiAgICAgICAgaWYgKHBheW1lbnRHcm91cC5mZWVzKSB7XG4gICAgICAgICAgdGhpcy5pc0ZlZVJlY29yZHNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgZmVlc1RvdGFsID0gZmVlc1RvdGFsICsgZmVlLmNhbGN1bGF0ZWRfYW1vdW50O1xuICAgICAgICAgICAgaWYgKGZlZS5jYWxjdWxhdGVkX2Ftb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICBpc0ZlZUFtb3VudFplcm8gPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXltZW50R3JvdXAucGF5bWVudHMpIHtcbiAgICAgICAgICBwYXltZW50R3JvdXAucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChwYXltZW50LnN0YXR1cy50b1VwcGVyQ2FzZSgpID09PSAnU1VDQ0VTUycpIHtcbiAgICAgICAgICAgICAgcGF5bWVudHNUb3RhbCA9IHBheW1lbnRzVG90YWwgKyBwYXltZW50LmFtb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtaXNzaW9uID0+IHtcbiAgICAgICAgICAgIHJlbWlzc2lvbnNUb3RhbCA9IHJlbWlzc2lvbnNUb3RhbCArIHJlbWlzc2lvbi5od2ZfYW1vdW50O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdycE91dHN0YW5kaW5nQW1vdW50ID0gKGZlZXNUb3RhbCAtIHJlbWlzc2lvbnNUb3RhbCkgLSBwYXltZW50c1RvdGFsO1xuICAgICAgICBpZiAoZ3JwT3V0c3RhbmRpbmdBbW91bnQgPCAwKSB7XG4gICAgICAgICAgaWYgKHRvdGFsUmVmdW5kQW1vdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0b3RhbFJlZnVuZEFtb3VudCA9IGdycE91dHN0YW5kaW5nQW1vdW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b3RhbFJlZnVuZEFtb3VudCA9ICh0b3RhbFJlZnVuZEFtb3VudCArIGdycE91dHN0YW5kaW5nQW1vdW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZ3JwT3V0c3RhbmRpbmdBbW91bnQgPiAwIHx8IChncnBPdXRzdGFuZGluZ0Ftb3VudCA9PT0gMCAmJiBpc0ZlZUFtb3VudFplcm8pKSB7XG4gICAgICAgICAgdGhpcy5pc0dycE91dHN0YW5kaW5nQW10UG9zaXRpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0b3RhbFJlZnVuZEFtb3VudCAqIC0xO1xuICAgIH1cbiAgfVxuXG4gIGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwOiBJUGF5bWVudEdyb3VwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5idWxrU2NhbmluZ1BheW1lbnRTZXJ2aWNlLmNhbGN1bGF0ZU91dFN0YW5kaW5nQW1vdW50KHBheW1lbnRHcm91cCk7XG4gIH1cblxuICByZWRpcmVjdFRvRmVlU2VhcmNoUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBsZXQgdXJsID0gdGhpcy5pc0J1bGtTY2FuRW5hYmxlID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICB1cmwgKz0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgdXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICB1cmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YFxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9mZWUtc2VhcmNoP3NlbGVjdGVkT3B0aW9uPSR7dGhpcy5zZWxlY3RlZE9wdGlvbn0mY2NkQ2FzZU51bWJlcj0ke3RoaXMuY2NkQ2FzZU51bWJlcn0ke3VybH1gKTtcbiAgfVxuXG4gIGFkZFJlbWlzc2lvbihmZWU6IElGZWUpIHtcbiAgICBpZiAodGhpcy5jaGtGb3JBZGRSZW1pc3Npb24oZmVlLmNvZGUpKSB7XG4gICAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2FkZHJlbWlzc2lvbic7XG4gICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRBcHBvcnRpb25QYXltZW50RGV0YWlscyh0aGlzLnBheW1lbnQucmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKSk7XG4gICAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgICAgLy8gY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgICAgLy8gdGhpcy5pc1N0YXR1c0FsbG9jYXRlZCA9IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA+IDAgJiYgcGF5bWVudEFsbG9jYXRpb25bMF0uYWxsb2NhdGlvbl9zdGF0dXMgPT09ICdBbGxvY2F0ZWQnIHx8IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IgPyBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKSA6IFwiXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYWRkUmVmdW5kRm9yUmVtaXNzaW9uKHBheW1lbnQ6IElQYXltZW50LCByZW1pc3Npb246IElSZW1pc3Npb25bXSwgZmVlczogYW55KSB7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QXBwb3J0aW9uUGF5bWVudERldGFpbHMocGF5bWVudC5yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9iai5yZWZlcmVuY2UgPT09IHBheW1lbnQucmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgIHRoaXMucmVtaXNzaW9ucyA9IHJlbWlzc2lvbjtcbiAgICAgICAgdGhpcy5yZW1pc3Npb25GZWVBbXQgPSBmZWVzLmZpbHRlcihkYXRhID0+IGRhdGEuY29kZSA9PT0gdGhpcy5yZW1pc3Npb25zWydmZWVfY29kZSddKVswXS5uZXRfYW1vdW50O1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJztcbiAgICAgICAgLy8gY29uc3QgcGF5bWVudEFsbG9jYXRpb24gPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXS5wYXltZW50X2FsbG9jYXRpb247XG4gICAgICAgIC8vIHRoaXMuaXNTdGF0dXNBbGxvY2F0ZWQgPSBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPiAwICYmIHBheW1lbnRBbGxvY2F0aW9uWzBdLmFsbG9jYXRpb25fc3RhdHVzID09PSAnQWxsb2NhdGVkJyB8fCBwYXltZW50QWxsb2NhdGlvbi5sZW5ndGggPT09IDA7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICB9XG5cbiAgcmVkaXJlY3RUb3JlbWlzc2lvblBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlbWlzc2lvbidcbiAgfVxuICBnb1RvU2VydmljZVJlcXVlc3RQYWdlKCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gZmFsc2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUID0gJ3RydWUnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSB0cnVlO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuICByZWRpcmVjdFRvUmVwb3J0c1BhZ2UoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL3JlcG9ydHM/c2VsZWN0ZWRPcHRpb249JHt0aGlzLnNlbGVjdGVkT3B0aW9ufSZjY2RDYXNlTnVtYmVyPSR7dGhpcy5jY2RDYXNlTnVtYmVyfWApO1xuICB9XG5cbiAgbG9hZEZlZVN1bW1hcnlQYWdlKHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY24gPSBudWxsO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzVHVybk9mZiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdmZWUtc3VtbWFyeSc7XG4gIH1cblxuICBnb1RvUGF5bWVudFZpZXdDb21wb25lbnQocGF5bWVudEdyb3VwOiBhbnkpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudE1ldGhvZCA9IHBheW1lbnRHcm91cC5wYXltZW50TWV0aG9kO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UgPSBwYXltZW50R3JvdXAucGF5bWVudEdyb3VwUmVmZXJlbmNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlID0gcGF5bWVudEdyb3VwLnBheW1lbnRSZWZlcmVuY2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtdmlldyc7XG4gIH1cblxuICBnb1RvUGF5ZW1lbnRWaWV3KHBheW1lbnRHcm91cFJlZmVyZW5jZTogc3RyaW5nLCBwYXltZW50UmVmZXJlbmNlOiBzdHJpbmcsIHBheW1lbnRNZXRob2Q6IHN0cmluZykge1xuICAgIHRoaXMuZ29Ub1BheW1lbnRWaWV3Q29tcG9uZW50KHsgcGF5bWVudEdyb3VwUmVmZXJlbmNlLCBwYXltZW50UmVmZXJlbmNlLCBwYXltZW50TWV0aG9kIH0pO1xuICB9XG5cbiAgc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KHVucHJvY2Vzc2VkUmVjb3JkSWQ6IHN0cmluZykge1xuICAgIGlmICh1bnByb2Nlc3NlZFJlY29yZElkKSB7XG4gICAgICBpZiAodGhpcy5pc1R1cm5PZmYpIHtcbiAgICAgICAgdGhpcy5pc0FkZEZlZUJ0bkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNUdXJuT2ZmKSB7XG4gICAgICAgIHRoaXMuaXNBZGRGZWVCdG5FbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNVbnByb2Nlc3NlZFJlY29yZFNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0VW5wcm9jZXNzZWRGZWVDb3VudCh1blByb2Nlc3NlZFJlY29yZENvdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnVucHJvY2Vzc2VkUmVjb3JkQ291bnQgPSB1blByb2Nlc3NlZFJlY29yZENvdW50O1xuICB9XG5cbiAgY2FsY3VsYXRlQW1vdW50RHVlKGZlZTogSUZlZSkge1xuXG4gICAgaWYgKGZlZS5kYXRlX2NyZWF0ZWQpIHtcbiAgICAgIHJldHVybiBmZWUuYW1vdW50X2R1ZSAhPT0gdW5kZWZpbmVkID8gZmVlLmFtb3VudF9kdWUgOiBmZWUubmV0X2Ftb3VudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiMC4wMFwiO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1SZW1vdmVGZWUoZmVlOiBJRmVlKSB7XG4gICAgdGhpcy5pc1JlbW92ZUJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5mZWVJZCA9IGZlZTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnZmVlUmVtb3ZhbENvbmZpcm1hdGlvbic7XG4gIH1cblxuICBjYW5jZWxSZW1vdmFsKCkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgfVxuXG4gIHJlbW92ZUZlZShmZWU6IGFueSkge1xuICAgIHRoaXMuaXNSZW1vdmVCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZGVsZXRlRmVlRnJvbVBheW1lbnRHcm91cChmZWUpLnN1YnNjcmliZShcbiAgICAgIChzdWNjZXNzOiBhbnkpID0+IHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNSZW1vdmVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBpc0NoZWNrQW1vdW50ZHVlRXhpc3QoYW1vdW50RHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGFtb3VudER1ZSA9PT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBpc3N1ZVJlZnVuZChwYXltZW50OiBJUGF5bWVudCkge1xuICAgIGlmIChwYXltZW50ICE9PSBudWxsICYmIHBheW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuY2hrSXNzdWVSZWZ1bmRCdG5FbmFibGUocGF5bWVudCkpIHtcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2lzc3VlcmVmdW5kJztcbiAgICAgICAgdGhpcy5wYXltZW50ID0gcGF5bWVudDtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNoa0ZvckFkZFJlbWlzc2lvbihmZWVDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaGtGb3JQQkFQYXltZW50KCkgJiYgdGhpcy5jaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kKCkpIHtcbiAgICAgIGlmICh0aGlzLm9yZGVyRGV0YWlsWzBdWydyZW1pc3Npb25zJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlbWlzc2lvbiBvZiB0aGlzLm9yZGVyRGV0YWlsWzBdWydyZW1pc3Npb25zJ10pIHtcbiAgICAgICAgICBpZiAocmVtaXNzaW9uLmZlZV9jb2RlID09PSBmZWVDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNoa0ZvclBCQVBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMub3JkZXJEZXRhaWwgIT09IG51bGwgJiYgdGhpcy5vcmRlckRldGFpbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm9yZGVyRGV0YWlsLmZvckVhY2gob3JkZXJEZXRhaWwgPT4ge1xuICAgICAgICBpZiAob3JkZXJEZXRhaWwucGF5bWVudHMpIHtcbiAgICAgICAgICBvcmRlckRldGFpbC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgICAgaWYgKHBheW1lbnQubWV0aG9kLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09ICdwYXltZW50IGJ5IGFjY291bnQnICYmIHRoaXMuYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyhwYXltZW50KSkge1xuICAgICAgICAgICAgICB0aGlzLmlzUEJBID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5pc1BCQSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY2hrSXNzdWVSZWZ1bmRCdG5FbmFibGUocGF5bWVudDogSVBheW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAocGF5bWVudCAhPT0gbnVsbCAmJiBwYXltZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBwYXltZW50Lmlzc3VlX3JlZnVuZCAmJiBwYXltZW50LnJlZnVuZF9lbmFibGVcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBpZiAodGhpcy5jaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kKCkgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpICYmXG4gICAgLy8gICBwYXltZW50Lm1ldGhvZCA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCcgJiYgcGF5bWVudC5zdGF0dXMudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgLy8gICB0aGlzLmlzSXNzdWVSZWZ1bmZCdG5FbmFibGUgPSB0cnVlO1xuICAgIC8vIH1cbiAgICAvLyBpZiAodGhpcy5pc0lzc3VlUmVmdW5mQnRuRW5hYmxlKSB7XG4gICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIH07XG4gIH1cblxuICBjaGtJc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5vcmRlckRldGFpbCAhPT0gbnVsbCAmJiB0aGlzLm9yZGVyRGV0YWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSB0cnVlO1xuICAgICAgdGhpcy5vcmRlckRldGFpbC5mb3JFYWNoKG9yZGVyRGV0YWlsID0+IHtcbiAgICAgICAgaWYgKG9yZGVyRGV0YWlsLnBheW1lbnRzKSB7XG4gICAgICAgICAgb3JkZXJEZXRhaWwucGF5bWVudHMuZm9yRWFjaChwYXltZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChwYXltZW50Lm1ldGhvZC50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAncGF5bWVudCBieSBhY2NvdW50JyAmJiBwYXltZW50LnN0YXR1cy50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb25CdG5FbmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUmVmdW5kID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kLnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH1cbiAgY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1BCQXBheW1lbnQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbGlnaWJsZTRQQkFQYXltZW50LnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH1cblxuICBhbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzID0gKHBheW1lbnQ6IElQYXltZW50KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHBheW1lbnQgIT09IG51bGwgJiYgcGF5bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgdG1wNERheUFnbyA9IG5ldyBEYXRlKCk7XG4gICAgICB0bXA0RGF5QWdvLnNldERhdGUodG1wNERheUFnby5nZXREYXRlKCkgLSA0KTtcbiAgICAgIHJldHVybiB0bXA0RGF5QWdvID49IG5ldyBEYXRlKHBheW1lbnQuZGF0ZV9jcmVhdGVkKTtcbiAgICB9XG4gIH1cblxuICBsb2FkUEJBQWNjb3VudFBhZ2Uob3JkZXJSZWY6IElQYXltZW50KSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBiYVBheU9yZGVyUmVmID0gb3JkZXJSZWY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BiYS1wYXltZW50JztcbiAgfVxufVxuIiwiPGRpdj5cbiAgPG1haW4+XG4gICAgPG5nLWNvbnRhaW5lciAgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnbWFpbjEnXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ21haW4xJyYmICFpc1R1cm5PZmYgJiYgdGFrZVBheW1lbnRcIj5cbiAgICAgICAgICA8ZGl2ICAgKm5nSWY9XCJ0YWtlUGF5bWVudFwiIGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLXR3by10aGlyZHNcIj5cbiAgICAgICAgICAgICAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy14bFwiPkNhc2UgdHJhbnNhY3Rpb25zPC9oMT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAgICpuZ0lmPVwidGFrZVBheW1lbnRcIiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSchaXNFeGNlcHRpb25SZWNvcmQnIGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkcyBnb3Z1ay0hLXBhZGRpbmctYm90dG9tLTYgZ292dWstIS1wYWRkaW5nLXRvcC02XCI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+Q0NEIHJlZmVyZW5jZTo8L2gzPlxuICAgICAgICAgICAgICA8c3Bhbj4ge3sgY2NkQ2FzZU51bWJlciB8IGNjZEh5cGhlbnMgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj0naXNFeGNlcHRpb25SZWNvcmQnIGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkcyBnb3Z1ay0hLXBhZGRpbmctYm90dG9tLTYgZ292dWstIS1wYWRkaW5nLXRvcC02XCI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+RXhjZXB0aW9uIHJlZmVyZW5jZTo8L2gzPlxuICAgICAgICAgICAgICA8c3Bhbj4ge3sgY2NkQ2FzZU51bWJlciB8IGNjZEh5cGhlbnMgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJnb3Z1ay1zZWN0aW9uLWJyZWFrIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj5cbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Ub3RhbCBwYXltZW50czwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlRvdGFsIHJlbWlzc2lvbnM8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQgZHVlPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBnb3Z1ay10YWJsZV9faGVhZGVyLS1jdXN0b21cIiBzY29wZT1cImNvbFwiICpuZ0lmPVwiaXNCdWxrU2NhbkVuYWJsZVwiPlVuYWxsb2NhdGVkIHBheW1lbnRzPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidG90YWxwYXltZW50cyBnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHN1bW1hcnktdGFibGUtZm9udFwiPnt7IHRvdGFsUGF5bWVudHMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHN1bW1hcnktdGFibGUtZm9udFwiPnt7IHRvdGFsUmVtaXNzaW9ucyB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgc3VtbWFyeS10YWJsZS1mb250XCI+e3sgY2xBbW91bnREdWUgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJ319PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY2FzZS10cmFuc2FjdGlvbl9fY29sb3Igc3VtbWFyeS10YWJsZS1mb250XCIgKm5nSWY9XCJpc0J1bGtTY2FuRW5hYmxlXCI+e3t1bnByb2Nlc3NlZFJlY29yZENvdW50fX08L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzXCIgKm5nSWY9XCJ0YWtlUGF5bWVudFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwicmVkaXJlY3RUb0ZlZVNlYXJjaFBhZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FkZEZlZUJ0bkVuYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0nIWlzQWRkRmVlQnRuRW5hYmxlZCA/IFwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLWJ1dHRvbi0tZGlzYWJsZWQgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiIDogXCJnb3Z1ay1idXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnkgZ292dWstIS1tYXJnaW4tcmlnaHQtMVwiJz5cbiAgICAgICAgICAgICAgICBUYWtlIHRlbGVwaG9ueSBwYXltZW50XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICAqbmdJZj1cInRha2VQYXltZW50XCIgY2xhc3M9XCIgZ292dWstIS1tYXJnaW4tdG9wLTlcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkZlZXM8L2gzPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q29kZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRlc2NyaXB0aW9uPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Vm9sdW1lPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RmVlIGFtb3VudDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNhbGN1bGF0ZWQgYW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QW1vdW50IGR1ZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFjdGlvbjwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdGb3I9XCJsZXQgcGF5bWVudEdyb3VwIG9mIHBheW1lbnRHcm91cHM7XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdGb3I9XCJsZXQgZmVlIG9mIHBheW1lbnRHcm91cC5mZWVzOyBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+XHR7e2ZlZS5jb2RlfX0gPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7ZmVlLmRlc2NyaXB0aW9ufX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tmZWUudm9sdW1lPyBmZWUudm9sdW1lIDogJy0nfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgZmVlLm5ldF9hbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57e2ZlZS5jYWxjdWxhdGVkX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIiAgW2F0dHIucm93c3Bhbl09XCJwYXltZW50R3JvdXAuZmVlcy5sZW5ndGhcIiAqbmdJZj1cInBheW1lbnRHcm91cC5vbGQgJiYgaT09MFwiPiB7e2dldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKXwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMid9fSogPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiICpuZ0lmPVwiIXBheW1lbnRHcm91cC5vbGRcIj4ge3tjYWxjdWxhdGVBbW91bnREdWUoZmVlKSB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX0gPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiICpuZ0lmPVwiIXBheW1lbnRHcm91cC5vbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJjb25maXJtUmVtb3ZlRmVlKGZlZS5pZClcIiBbbmdDbGFzc109JyFpc0NoZWNrQW1vdW50ZHVlRXhpc3QoZmVlLmFtb3VudF9kdWUpIHx8IGZlZS5yZW1pc3Npb25zID8gXCJkaXNhYmxlLWxpbmtcIiA6IFwiXCInPlJlbW92ZTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCIgKm5nSWY9XCJwYXltZW50R3JvdXAub2xkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwiY29uZmlybVJlbW92ZUZlZShmZWUuaWQpXCIgW25nQ2xhc3NdPSdwYXltZW50R3JvdXAucGF5bWVudHM/Lmxlbmd0aCA+IDAgfHwgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnM/Lmxlbmd0aCA+IDAgPyBcImRpc2FibGUtbGlua1wiIDogXCJcIic+UmVtb3ZlPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXBzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiID5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI3XCI+Tm8gZmVlcyByZWNvcmRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG1jdHMtYmFubmVyXCIgKm5nSWY9XCJpc0hpc3RvcmljR3JvdXBBdmFpbGFibGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImhtY3RzLWJhbm5lcl9faWNvblwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgZm9jdXNhYmxlPVwiZmFsc2VcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNSAyNVwiIGhlaWdodD1cIjI1XCIgd2lkdGg9XCIyNVwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMy43LDE4LjVoLTIuNHYtMi40aDIuNFYxOC41eiBNMTIuNSwxMy43Yy0wLjcsMC0xLjItMC41LTEuMi0xLjJWNy43YzAtMC43LDAuNS0xLjIsMS4yLTEuMnMxLjIsMC41LDEuMiwxLjJ2NC44XG4gICAgICAgICAgICAgICAgQzEzLjcsMTMuMiwxMy4yLDEzLjcsMTIuNSwxMy43eiBNMTIuNSwwLjVjLTYuNiwwLTEyLDUuNC0xMiwxMnM1LjQsMTIsMTIsMTJzMTItNS40LDEyLTEyUzE5LjEsMC41LDEyLjUsMC41elwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJobWN0cy1iYW5uZXJfX21lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhtY3RzLWJhbm5lcl9fYXNzaXN0aXZlXCI+aW5mb3JtYXRpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgKiBUaGVzZSBmZWVzIGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBvZmZsaW5lLiBDaGVjayB0aGUgbm90ZXMgaW4gQ0NEIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLW5vLS1zdHlsZVwiICpuZ0lmPVwiYWxsUGF5bWVudHM/Lmxlbmd0aCA+IDAgfHwgcmVtaXNzaW9ucz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gcGF5bWVudHMgLS0+XG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5QYXltZW50czwvaDM+XG4gICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMjhcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSBjcmVhdGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q2hhbm5lbDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPk1ldGhvZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTE1XCIgc2NvcGU9XCJjb2xcIj5BbW91bnQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5BbGxvY2F0aW9uIHN0YXR1czwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlBheW1lbnQgc3RhdHVzPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJhbGxQYXltZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAgKm5nRm9yPVwibGV0IHBheW1lbnQgb2YgYWxsUGF5bWVudHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvUGF5ZW1lbnRWaWV3KHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlLCBwYXltZW50LnJlZmVyZW5jZSwgcGF5bWVudC5tZXRob2QpXCI+e3sgcGF5bWVudC5yZWZlcmVuY2UgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXknIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY2hhbm5lbCBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmNoYW5uZWwgfCBsb3dlcmNhc2UgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBjYXBpdGFsaXplIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQubWV0aG9kIHwgbG93ZXJjYXNlfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmFtb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+IHt7Z2V0QWxsb2NhdGlvblN0YXR1cyhwYXltZW50KX19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5zdGF0dXMgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cImFsbFBheW1lbnRzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI3XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgPC90YWJsZT5cblxuICAgICAgICAgICAgICAgICAgPCEtLSByZW1pc3Npb25zIC0tPlxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5SZW1pc3Npb25zPC9oMz5cbiAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGF0ZSBjcmVhdGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UmVtaXNzaW9uIGNvZGU8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5GZWUgY29kZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlJlbWlzc2lvbiBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInJlbWlzc2lvbnM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgKm5nRm9yPVwibGV0IHJlbWlzc2lvbiBvZiByZW1pc3Npb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5yZW1pc3Npb25fcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5JyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5od2ZfcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLmZlZV9jb2RlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLmh3Zl9hbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJ319PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJyZW1pc3Npb25zPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiIGNvbHNwYW49XCI1XCI+Tm8gcmVtaXNzaW9ucyByZWNvcmRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAgKm5nSWY9XCJ0YWtlUGF5bWVudCAmJiBpc1R1cm5PZmZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkc1wiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmcteGxcIj5DYXNlIHRyYW5zYWN0aW9uczwvaDE+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgIGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tb25lLXRoaXJkXCIgYWxpZ249XCJyaWdodFwiID5cbiAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7ICdkaXNhYmxlJzogIWlzQWRkRmVlQnRuRW5hYmxlZH0gXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9GZWVTZWFyY2hQYWdlKCRldmVudClcIiBjbGFzcz1cImJ1dHRvblwiPkFkZCBhIG5ldyBmZWU8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tdHdvLXRoaXJkcyBnb3Z1ay0hLXBhZGRpbmctYm90dG9tLTZcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkNDRCByZWZlcmVuY2U6PC9oMz5cbiAgICAgICAgICA8c3Bhbj4ge3sgY2NkQ2FzZU51bWJlciB8IGNjZEh5cGhlbnMgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLSEtcGFkZGluZy1ib3R0b20tM1wiPlxuICAgICAgICAgIDxociBjbGFzcz1cImdvdnVrLXNlY3Rpb24tYnJlYWsgZ292dWstc2VjdGlvbi1icmVhay0tdmlzaWJsZVwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+VG90YWwgcGF5bWVudHM8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlRvdGFsIHJlbWlzc2lvbnM8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkFtb3VudCBkdWU8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRvdGFscGF5bWVudHMgZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgdG90YWxQYXltZW50cyB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IHRvdGFsUmVtaXNzaW9ucyB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7ICh0b3RhbEZlZXMgLSB0b3RhbFJlbWlzc2lvbnMpIC0gdG90YWxQYXltZW50cyB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG5cbiAgICAgIDwhLS0gTm8gZmVlcyBzdGFydCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJwYXltZW50R3JvdXBzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1zbWFsbFwiPkV4aXN0aW5nIGZlZXM8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNvZGU8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkRlc2NyaXB0aW9uPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Wb2x1bWU8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkZlZSBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkNhbGN1bGF0ZWQgYW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Hcm91cCBhbW91bnQgb3V0c3RhbmRpbmc8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIGZlZXMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBObyBmZWVzIGVuZCAtLT5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGF5bWVudEdyb3VwIG9mIHBheW1lbnRHcm91cHNcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsIGdvdnVrLWdyaWQtY29sdW1uLWZ1bGwtLWdyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkdyb3VwIHJlZmVyZW5jZToge3twYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2V9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG5cbiAgICAgICAgICA8IS0tTmV3IENvZGUgc3RhcnQtLT5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctc21hbGxcIj5FeGlzaXRpbmcgZmVlczwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPWZlZWNsYXNzPlxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Db2RlPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+RGVzY3JpcHRpb248L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Wb2x1bWU8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5GZWUgYW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+Q2FsY3VsYXRlZCBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJncm91cGFtb3VudCBnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5Hcm91cCBhbW91bnQgb3V0c3RhbmRpbmc8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiID5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAgKm5nRm9yPVwibGV0IGZlZSBvZiBwYXltZW50R3JvdXAuZmVlczsgIGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2wxXCI+e3tmZWUuY29kZX19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDJcIj4ge3tmZWUuZGVzY3JpcHRpb259fSA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sMyBhbGlnbi1jZW50ZXJcIj4ge3tmZWUudm9sdW1lPyBmZWUudm9sdW1lIDogJy0nfX0gPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstdGFibGVfX2NlbGwtLWNvbDRcIj4ge3sgZmVlLm5ldF9hbW91bnQgfCBjdXJyZW5jeTonR0JQJzonc3ltYm9sLW5hcnJvdyc6JzEuMi0yJyB9fSA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay10YWJsZV9fY2VsbC0tY29sNVwiPiB7e2ZlZS5jYWxjdWxhdGVkX2Ftb3VudCB8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInIH19IDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLXRhYmxlX19jZWxsLS1jb2w2IGdvdnVrLXRhYmxlX19jdXN0b20tLWNvbDZcIiBbYXR0ci5yb3dzcGFuXT1cInBheW1lbnRHcm91cC5mZWVzLmxlbmd0aFwiICpuZ0lmPVwiaT09MFwiPlxuICAgICAgICAgICAgICAgIHt7Z2V0R3JvdXBPdXRzdGFuZGluZ0Ftb3VudChwYXltZW50R3JvdXApIHwgY3VycmVuY3k6J0dCUCc6J3N5bWJvbC1uYXJyb3cnOicxLjItMicgfX0gPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInBheW1lbnRHcm91cC5mZWVzLmxlbmd0aD09MFwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHBheW1lbnRzIHJlY29yZGVkPC90ZD5cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWluc2V0LXRleHQgZ292dWstaW5zZXQtdGV4dF9fbm8tYm9yZGVyXCIgKm5nSWY9XCJwYXltZW50R3JvdXAucGF5bWVudHMgfHwgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnNcIj5cbiAgICAgICAgPGRldGFpbHM+XG4gICAgICAgICAgPHN1bW1hcnkgY2xhc3M9XCJnb3Z1ay1oaWRldGV4dFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeVwiPkFsbG9jYXRlZCBwYXltZW50cyBhbmQgcmVtaXNzaW9uczwvc3Bhbj5cbiAgICAgICAgICA8L3N1bW1hcnk+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1ib3JkZXItbmFycm93XCI+XG4gICAgICAgICAgICAgICAgPCEtLSBwYXltZW50cyAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+UGF5bWVudHM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+UGF5bWVudCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EYXRlIGNyZWF0ZWQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5DaGFubmVsPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+TWV0aG9kPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlclwiIHNjb3BlPVwiY29sXCI+QWxsb2NhdGlvbiBzdGF0dXM8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5TdGF0dXM8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInBheW1lbnRHcm91cC5wYXltZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAgKm5nRm9yPVwibGV0IHBheW1lbnQgb2YgcGF5bWVudEdyb3VwLnBheW1lbnRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29Ub1BheWVtZW50VmlldyhwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UsIHBheW1lbnQucmVmZXJlbmNlLCBwYXltZW50Lm1ldGhvZClcIj57eyBwYXltZW50LnJlZmVyZW5jZSB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5kYXRlX2NyZWF0ZWQgfCBkYXRlOidkZCBNTU0geXl5eScgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjaGFubmVsIGdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuY2hhbm5lbCB8IGxvd2VyY2FzZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGNhcGl0YWxpemUgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5tZXRob2QgfCBsb3dlcmNhc2V9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuYW1vdW50IH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+IHt7Z2V0QWxsb2NhdGlvblN0YXR1cyhwYXltZW50KX19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5zdGF0dXMgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cInBheW1lbnRHcm91cC5wYXltZW50cz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHBheW1lbnRzIHJlY29yZGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gcmVtaXNzaW9ucyAtLT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5SZW1pc3Npb25zPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPlJlbWlzc2lvbiByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5EYXRlIGNyZWF0ZWQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gY29kZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPkZlZSBhcHBsaWVkIGFnYWluc3Q8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj5SZW1pc3Npb24gYW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAucmVtaXNzaW9ucz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdGb3I9XCJsZXQgcmVtaXNzaW9uIG9mIHBheW1lbnRHcm91cC5yZW1pc3Npb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5yZW1pc3Npb25fcmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVtaXNzaW9uLmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTScgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyByZW1pc3Npb24uaHdmX3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5mZWVfY29kZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlbWlzc2lvbi5od2ZfYW1vdW50IH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJwYXltZW50R3JvdXAucmVtaXNzaW9ucz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNVwiPk5vIHJlbWlzc2lvbnMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kZXRhaWxzPlxuXG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGFrZVBheW1lbnRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cImxvYWRGZWVTdW1tYXJ5UGFnZShwYXltZW50R3JvdXApXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKSA8PSAwIHx8IGlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0nKGdldEdyb3VwT3V0c3RhbmRpbmdBbW91bnQocGF5bWVudEdyb3VwKSA8PSAwIHx8IGlzVW5wcm9jZXNzZWRSZWNvcmRTZWxlY3RlZCkgPyBcImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay1idXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIic+XG4gICAgICAgICAgICAgICAgICBBZGQgdGVsZXBob25lIHBheW1lbnRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICAgIDxjY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHNcbiAgICAgICAgKm5nSWY9XCJpc0J1bGtTY2FuRW5hYmxlXCJcbiAgICAgICAgW0lTX0JVVFRPTl9FTkFCTEVdPVwidGFrZVBheW1lbnRcIlxuICAgICAgICBbTEVWRUxdPVwiNVwiXG4gICAgICAgIFtQQVlNRU5UU0xFTkdUSF09XCJhbGxQYXltZW50cz8ubGVuZ3RoXCJcbiAgICAgICAgW1BBWU1FTlRSRUZdPVwicGF5bWVudFJlZlwiXG4gICAgICAgIFtJU1RVUk5PRkZdPVwiaXNUdXJuT2ZmXCJcbiAgICAgICAgW0lTU0ZFTkFCTEVdPVwiaXNTdHJhdGVnaWNGaXhFbmFibGVcIlxuICAgICAgICBbRkVFX1JFQ09SRFNfRVhJU1RTXT1cImlzRmVlUmVjb3Jkc0V4aXN0XCJcbiAgICAgICAgKGdldFVucHJvY2Vzc2VkRmVlQ291bnQpID0gXCJnZXRVbnByb2Nlc3NlZEZlZUNvdW50KCRldmVudClcIlxuICAgICAgICBbSVNfT1NfQU1UX0FWQUlMQUJMRV09XCJpc0dycE91dHN0YW5kaW5nQW10UG9zaXRpdmVcIlxuICAgICAgICAoc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KSA9IFwic2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KCRldmVudClcIj5cbiAgICAgIDwvY2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93IGdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHNcIiAgKm5nSWY9XCJ0b3RhbFJlZnVuZEFtb3VudCA+IDAgJiYgdGFrZVBheW1lbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGwgZ292dWstZ3JpZF9fc3VycGx1cy1wYXltZW50cy1jb2wxXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5TdXJwbHVzIHBheW1lbnRzPC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi1mdWxsXCI+XG4gICAgICAgICAgVG90YWwgc3VycGx1cyBwYXltZW50cyByZWNlaXZlZDoge3t0b3RhbFJlZnVuZEFtb3VudCB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICAqbmdJZj1cInRha2VQYXltZW50XCI+XG4gICAgICAgIDxjY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHNcbiAgICAgICAgKm5nSWY9XCJpc0J1bGtTY2FuRW5hYmxlICYmICF0YWtlUGF5bWVudFwiXG4gICAgICAgIFtJU19CVVRUT05fRU5BQkxFXT1cInRha2VQYXltZW50XCJcbiAgICAgICAgW0xFVkVMXT1cIjFcIlxuICAgICAgICBbSVNUVVJOT0ZGXT1cImlzVHVybk9mZlwiXG4gICAgICAgIFtJU1NGRU5BQkxFXT1cImlzU3RyYXRlZ2ljRml4RW5hYmxlXCJcbiAgICAgICAgW0ZFRV9SRUNPUkRTX0VYSVNUU109XCJpc0ZlZVJlY29yZHNFeGlzdFwiXG4gICAgICAgIFtJU19PU19BTVRfQVZBSUxBQkxFXT1cImlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZVwiXG4gICAgICAgIChnZXRVbnByb2Nlc3NlZEZlZUNvdW50KSA9IFwiZ2V0VW5wcm9jZXNzZWRGZWVDb3VudCgkZXZlbnQpXCJcbiAgICAgICAgW1BBWU1FTlRTTEVOR1RIXT1cImFsbFBheW1lbnRzPy5sZW5ndGhcIlxuICAgICAgICBbUEFZTUVOVFJFRl09XCJwYXltZW50UmVmXCJcbiAgICAgICAgKHNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCkgPSBcInNlbGVjdGVkVW5wcm9jZXNzZWRGZWVFdmVudCgkZXZlbnQpXCI+XG4gICAgICAgIDwvY2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCIhdGFrZVBheW1lbnRcIiBjbGFzcz1cImdvdnVrLWdyaWQtcm93IGdvdnVrLWdyaWRfX3N1cnBsdXMtcGF5bWVudHNcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlBheW1lbnRzPC9zcGFuPlxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0xM1wiIHNjb3BlPVwiY29sXCI+U3RhdHVzPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMTBcIiBzY29wZT1cImNvbFwiPkFtb3VudDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTE0XCIgc2NvcGU9XCJjb2xcIj5EYXRlIGFsbG9jYXRlZDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTIwXCIgc2NvcGU9XCJjb2xcIj5SZXF1ZXN0IHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTlcIiBzY29wZT1cImNvbFwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwiYWxsUGF5bWVudHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIGFsbFBheW1lbnRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGNvbC0xMyB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LnN0YXR1cyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGNvbC0xMCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmFtb3VudCB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY29sLTE3IHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXkgSEg6bW06c3MnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY29sLTI0IHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY29sLTEzIHdoaXRlc3BhY2UtaW5oZXJpdFwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvUGF5ZW1lbnRWaWV3KHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlLCBwYXltZW50LnJlZmVyZW5jZSwgcGF5bWVudC5tZXRob2QpXCI+UmV2aWV3PC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuXG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPGNjcGF5LWFwcC11bnByb2Nlc3NlZC1wYXltZW50cyBjbGFzcz1cImdvdnVrLXRhYmxlXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNCdWxrU2NhbkVuYWJsZSAmJiAhdGFrZVBheW1lbnRcIlxuICAgICAgICAgICAgW0lTX0JVVFRPTl9FTkFCTEVdPVwidGFrZVBheW1lbnRcIlxuICAgICAgICAgICAgW0xFVkVMXT1cIjJcIlxuICAgICAgICAgICAgW0lTVFVSTk9GRl09XCJpc1R1cm5PZmZcIlxuICAgICAgICAgICAgW0lTU0ZFTkFCTEVdPVwiaXNTdHJhdGVnaWNGaXhFbmFibGVcIlxuICAgICAgICAgICAgW0ZFRV9SRUNPUkRTX0VYSVNUU109XCJpc0ZlZVJlY29yZHNFeGlzdFwiXG4gICAgICAgICAgICBbSVNfT1NfQU1UX0FWQUlMQUJMRV09XCJpc0dycE91dHN0YW5kaW5nQW10UG9zaXRpdmVcIlxuICAgICAgICAgICAgW1BBWU1FTlRTTEVOR1RIXT1cImFsbFBheW1lbnRzPy5sZW5ndGhcIlxuICAgICAgICAgICAgW1BBWU1FTlRSRUZdPVwicGF5bWVudFJlZlwiXG4gICAgICAgICAgICAoZ2V0VW5wcm9jZXNzZWRGZWVDb3VudCkgPSBcImdldFVucHJvY2Vzc2VkRmVlQ291bnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KSA9IFwic2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KCRldmVudClcIj5cbiAgICAgICAgPC9jY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbjwhLS1PcmRlciBDYXNlIFRyYW5zYWN0aW9ucyBQYWdlLS0+XG4gICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1N0YXR1cyA9PT0gJ21haW4nICYmICFpc1R1cm5PZmYgJiYgdGFrZVBheW1lbnRcIj5cbiAgICAgIDxkaXY+XG5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1ncmlkLWNvbHVtbi10d28tdGhpcmRzIGdvdnVrLWhlYWRpbmctbCBnb3Z1ay0hLW1hcmdpbi10b3AtMFwiPkNhc2UgdHJhbnNhY3Rpb25zPC9oMT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nIWlzRXhjZXB0aW9uUmVjb3JkJyBjbGFzcz1cIiBnb3Z1ay0hLW1hcmdpbi1ib3R0b20tNiBhbGlnbnNlbGZcIj5cbiAgICAgICAgICAgICAgICAgPGI+IENhc2UgcmVmZXJlbmNlOiA8L2I+e3sgY2NkQ2FzZU51bWJlciB8IGNjZEh5cGhlbnMgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9J2lzRXhjZXB0aW9uUmVjb3JkJyBjbGFzcz1cImdvdnVrLSEtbWFyZ2luLWJvdHRvbS0zIGNvbC01NSBhbGlnbnNlbGZcIiA+XG4gICAgICAgICAgICAgICAgICA8Yj4gRXhjZXB0aW9uIHJlZmVyZW5jZTo8L2I+e3sgY2NkQ2FzZU51bWJlciB8IGNjZEh5cGhlbnMgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMjVcIiBzY29wZT1cImNvbFwiPlRvdGFsIHBheW1lbnRzPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBnb3Z1ay10YWJsZV9faGVhZGVyLS1jdXN0b20gY29sLTI1XCIgc2NvcGU9XCJjb2xcIiAqbmdJZj1cImlzQnVsa1NjYW5FbmFibGVcIj5VbmFsbG9jYXRlZCBwYXltZW50czwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI1XCIgc2NvcGU9XCJjb2xcIj5Ub3RhbCByZW1pc3Npb25zPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMjBcIiBzY29wZT1cImNvbFwiPkFtb3VudCBkdWU8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0yMFwiIHNjb3BlPVwiY29sXCI+T3ZlciBwYXltZW50PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiPlxuICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidG90YWxwYXltZW50cyBnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHN1bW1hcnktdGFibGUtZm9udFwiPnt7IHRvdGFsUGF5bWVudHMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGNhc2UtdHJhbnNhY3Rpb25fX2NvbG9yIHN1bW1hcnktdGFibGUtZm9udFwiICpuZ0lmPVwiaXNCdWxrU2NhbkVuYWJsZVwiPnt7dW5wcm9jZXNzZWRSZWNvcmRDb3VudH19PC90ZD5cblxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBzdW1tYXJ5LXRhYmxlLWZvbnRcIj57eyB0b3RhbFJlbWlzc2lvbnMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHN1bW1hcnktdGFibGUtZm9udFwiPnt7IGNsQW1vdW50RHVlIHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHN1bW1hcnktdGFibGUtZm9udFwiPnt7IG92ZXJQYXltZW50QW1vdW50IHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMid9fTwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdPUkRFUklEREVUQUlMUyc+XG5cbiAgICAgICAgICAgIDwhLS1QYXltZW50IFJlcXVlc3QtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGF5bWVudHJlcXVlc3RcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPlNlcnZpY2UgcmVxdWVzdHM8L3NwYW4+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyICBjb2wtMTRcIiBzY29wZT1cImNvbFwiPlN0YXR1czwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgIGNvbC0xMFwiIHNjb3BlPVwiY29sXCI+QW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciAgY29sLTE4XCIgc2NvcGU9XCJjb2xcIj5QYXJ0eTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgIGNvbC0yMVwiIHNjb3BlPVwiY29sXCI+UmVxdWVzdCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyICBjb2wtOVwiIHNjb3BlPVwiY29sXCI+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2xcIiBzY29wZT1cImNvbFwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgICpuZ0lmPVwib3JkZXJMZXZlbEZlZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvcmRlclJlZiBvZiBvcmRlckxldmVsRmVlcztsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7b3JkZXJSZWYub3JkZXJTdGF0dXN9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgb3JkZXJSZWYub3JkZXJUb3RhbEZlZXMgfCBjdXJyZW5jeSA6J0dCUCc6J3N5bWJvbCc6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY3BvRGV0YWlscyAhPT0gbnVsbCAmJiBjcG9EZXRhaWxzLmxlbmd0aCAhPT0gMFwiIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3BvIG9mIGNwb0RldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNwby5vcmRlclJlZmVyZW5jZSA9PSBvcmRlclJlZi5vcmRlclJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjcG8ucmVzcG9uc2libGVQYXJ0eX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJjcG9EZXRhaWxzID09PSBudWxsIHx8IGNwb0RldGFpbHMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7b3JkZXJSZWYub3JkZXJSZWZJZH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvT3JkZXJWaWV3RGV0YWlsU2VjdGlvbihvcmRlclJlZilcIj5SZXZpZXc8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgIGNsYXNzPVwiYWxpZ25yaWdodFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAoY2xpY2spPVwicmVkaXJlY3RUb09yZGVyRmVlU2VhcmNoUGFnZSgkZXZlbnQsb3JkZXJSZWYpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhb3JkZXJSZWYub3JkZXJBZGRCdG5FbmFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSchb3JkZXJSZWYub3JkZXJBZGRCdG5FbmFibGUgPyBcImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBnb3Z1ay1idXR0b24tLWRpc2FibGVkIGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIiA6IFwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5IGdvdnVrLSEtbWFyZ2luLXJpZ2h0LTFcIic+XG4gICAgICAgICAgICAgICAgICAgICAgICBUYWtlIHRlbGVwaG9ueSBwYXltZW50XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keSBhbGlnbmxlZnRcIiAqbmdJZj1cIm9yZGVyTGV2ZWxGZWVzPy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI2XCI+Tm8gc2VydmljZSByZXF1ZXN0cyBvbiB0aGlzIGNhc2UuPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwib3JkZXJMZXZlbEZlZXM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgPGJyLz5ObyBzZXJ2aWNlIHJlcXVlc3RzIG9uIHRoaXMgY2FzZS48YnIvPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPGJyLz5cbiAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJyZWRpcmVjdFRvRmVlU2VhcmNoUGFnZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGUtbGlua109XCIhaXNBZGRGZWVCdG5FbmFibGVkXCI+Q3JlYXRlIHNlcnZpY2UgcmVxdWVzdCBhbmQgcGF5PC9hPjxici8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPjxici8+UGF5bWVudHM8L3NwYW4+XG4gICAgICAgICAgICAgIDxjY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHNcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc0J1bGtTY2FuRW5hYmxlXCJcbiAgICAgICAgICAgICAgW0lTX0JVVFRPTl9FTkFCTEVdPVwidGFrZVBheW1lbnRcIlxuICAgICAgICAgICAgICBbTEVWRUxdPVwiM1wiXG4gICAgICAgICAgICAgIFtQQVlNRU5UU0xFTkdUSF09XCJhbGxQYXltZW50cz8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgW0lTVFVSTk9GRl09XCJpc1R1cm5PZmZcIlxuICAgICAgICAgICAgICBbSVNTRkVOQUJMRV09XCJpc1N0cmF0ZWdpY0ZpeEVuYWJsZVwiXG4gICAgICAgICAgICAgIFtQQVlNRU5UUkVGXT1cInBheW1lbnRSZWZcIlxuICAgICAgICAgICAgICBbRkVFX1JFQ09SRFNfRVhJU1RTXT1cImlzRmVlUmVjb3Jkc0V4aXN0XCJcbiAgICAgICAgICAgICAgKGdldFVucHJvY2Vzc2VkRmVlQ291bnQpID0gXCJnZXRVbnByb2Nlc3NlZEZlZUNvdW50KCRldmVudClcIlxuICAgICAgICAgICAgICBbSVNfT1NfQU1UX0FWQUlMQUJMRV09XCJpc0dycE91dHN0YW5kaW5nQW10UG9zaXRpdmVcIlxuICAgICAgICAgICAgICAoc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KSA9IFwic2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KCRldmVudClcIj5cbiAgICAgICAgICAgICAgIDwvY2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJhbGxQYXltZW50cz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCIgICpuZ0Zvcj1cImxldCBwYXltZW50IG9mIGFsbFBheW1lbnRzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBjb2wtMTQgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcGF5bWVudC5zdGF0dXMgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY29sLTEwIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuYW1vdW50IHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgY29sLTE3IHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuZGF0ZV9jcmVhdGVkIHwgZGF0ZTonZGQgTU1NIHl5eXknIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGNvbC0yNCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBjb2wtMTMgd2hpdGVzcGFjZS1pbmhlcml0XCI+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29Ub1BheWVtZW50VmlldyhwYXltZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSwgcGF5bWVudC5yZWZlcmVuY2UsIHBheW1lbnQubWV0aG9kKVwiPlJldmlldzwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cblxuICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cImFsbFBheW1lbnRzPy5sZW5ndGggPT09IDAgJiYgdW5wcm9jZXNzZWRSZWNvcmRDb3VudCA8PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNlwiPk5vIHBheW1lbnRzIHJlY29yZGVkPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cblxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1BCQXBheW1lbnQoKVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+PGJyLz5SZWZ1bmRzPC9zcGFuPlxuICAgICAgICAgICAgICA8Y2NwYXktcmVmdW5kLXN0YXR1c1xuICAgICAgICAgICAgICBbY2NkQ2FzZU51bWJlcl09XCJjY2RDYXNlTnVtYmVyXCJcbiAgICAgICAgICAgICAgW2lzVHVybk9mZl09XCJpc1R1cm5PZmZcIlxuICAgICAgICAgICAgICBbb3JkZXJQYXJ0eV09XCJvcmRlclBhcnR5XCJcbiAgICAgICAgICAgICAgW0xPR0dFRElOVVNFUlJPTEVTXT1cIkxPR0dFRElOVVNFUlJPTEVTXCJcbiAgICAgICAgICAgICAgPjwvY2NwYXktcmVmdW5kLXN0YXR1cz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgPC9uZy1jb250YWluZXI+XG5cbiAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFrZVBheW1lbnQgJiYgdmlld1N0YXR1cyA9PT0gJ21haW4nXCI+XG4gICAgICA8ZGl2ICBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIiBbbmdDbGFzc109J3NlcnZpY2VSZXF1ZXN0VmFsdWUhPT0gXCJmYWxzZVwiID8gXCJnb3Z1ay1tYXJnaW4tYnRtLTIwcHhcIiA6IFwiXCInPlxuICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwic2VydmljZVJlcXVlc3RWYWx1ZSA9PT0gJ2ZhbHNlJ1wiIGNsYXNzPVwiaGVhZGluZy1tZWRpdW1cIj5TZXJ2aWNlIHJlcXVlc3RzPC9zcGFuPiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEob3JkZXJMZXZlbEZlZXM/Lmxlbmd0aCA9PT0gMCAmJiAhaXNBbnlGZWVHcm91cEF2aWxhYmxlKSAmJiBzZXJ2aWNlUmVxdWVzdFZhbHVlICE9PSAnZmFsc2UnIFwiPlxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0xNFwiIHNjb3BlPVwiY29sXCI+U3RhdHVzPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0xOFwiIHNjb3BlPVwiY29sXCI+QW1vdW50PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0xOFwiIHNjb3BlPVwiY29sXCI+UGFydHk8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI0XCIgc2NvcGU9XCJjb2xcIj5SZXF1ZXN0IHJlZmVyZW5jZVx0PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC05XCIgc2NvcGU9XCJjb2xcIj48L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXJcIiBzY29wZT1cImNvbFwiPjwvdGQ+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJvcmRlckxldmVsRmVlcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAgKm5nRm9yPVwibGV0IG9yZGVyUmVmIG9mIG9yZGVyTGV2ZWxGZWVzO2xldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57e29yZGVyUmVmLm9yZGVyU3RhdHVzfX08L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3tvcmRlclJlZi5vcmRlclRvdGFsRmVlcyB8IGN1cnJlbmN5IDonR0JQJzonc3ltYm9sJzonMS4yLTInfX08L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY3BvRGV0YWlscyAhPT0gbnVsbCAmJiBjcG9EZXRhaWxzLmxlbmd0aCAhPT0gMFwiIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjcG8gb2YgY3BvRGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjcG8ub3JkZXJSZWZlcmVuY2UgPT0gb3JkZXJSZWYub3JkZXJSZWZJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjcG8ucmVzcG9uc2libGVQYXJ0eX19XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImNwb0RldGFpbHMgPT09IG51bGwgfHwgY3BvRGV0YWlscy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57e29yZGVyUmVmLm9yZGVyUmVmSWR9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBvZi12aXNpYmxlXCI+IDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwibG9hZFBCQUFjY291bnRQYWdlKG9yZGVyUmVmKVwiICpuZ0lmPVwic2VydmljZVJlcXVlc3RWYWx1ZSAhPT0gJ2ZhbHNlJyAmJiBjaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUEJBcGF5bWVudCgpICYmIG9yZGVyUmVmLm9yZGVyU3RhdHVzID09PSAnTm90IHBhaWQnXCI+IFBheSBub3c8L2E+PC90ZD5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvT3JkZXJWaWV3RGV0YWlsU2VjdGlvbihvcmRlclJlZilcIj5SZXZpZXc8L2E+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0lmPVwib3JkZXJMZXZlbEZlZXM/Lmxlbmd0aCA9PT0gMCAmJiBzZXJ2aWNlUmVxdWVzdFZhbHVlID09PSAnZmFsc2UnXCI+XG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiID5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWdubGVmdFwiIGNvbHNwYW49XCI3XCI+Tm8gc2VydmljZSByZXF1ZXN0cyBvbiB0aGlzIGNhc2UuPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3JkZXJMZXZlbEZlZXM/Lmxlbmd0aCA9PT0gMCAmJiBzZXJ2aWNlUmVxdWVzdFZhbHVlICE9PSAnZmFsc2UnICYmICFpc0FueUZlZUdyb3VwQXZpbGFibGVcIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWwgZ292dWstaGVhZGluZy1sd1wiPklmIHlvdSBhcmUgZXhwZWN0aW5nIHRvIHBheSBhbmQgYXJlIG5vdCBhYmxlIHRvIHNlZSBhIHNlcnZpY2UgcmVxdWVzdCw8L2gxPlxuICAgICAgICAgIDxwPnBsZWFzZSByZWZyZXNoIGFuZCB0cnkgaW4gc29tZSB0aW1lLjwvcD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1jb2x1bW4tZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiAgKm5nSWY9XCJzZXJ2aWNlUmVxdWVzdFZhbHVlID09PSAnZmFsc2UnXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+PGJyLz5QYXltZW50czwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgPlxuICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZFwiPlxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMTRcIiBzY29wZT1cImNvbFwiPlN0YXR1czwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTEwXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQ8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0xN1wiIHNjb3BlPVwiY29sXCI+RGF0ZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI0XCIgc2NvcGU9XCJjb2xcIj5QYXltZW50IHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTEzXCIgc2NvcGU9XCJjb2xcIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj48L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cImFsbFBheW1lbnRzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiICAqbmdGb3I9XCJsZXQgcGF5bWVudCBvZiBhbGxQYXltZW50c1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LnN0YXR1cyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQuYW1vdW50IHwgY3VycmVuY3kgOidHQlAnOidzeW1ib2wnOicxLjItMicgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj57eyBwYXltZW50LmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5JyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHBheW1lbnQ/LnJlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb1RvUGF5ZW1lbnRWaWV3KHBheW1lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlLCBwYXltZW50LnJlZmVyZW5jZSwgcGF5bWVudC5tZXRob2QpXCI+UmV2aWV3PC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuXG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJhbGxQYXltZW50cz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI2XCI+Tm8gcGF5bWVudHMgcmVjb3JkZWQ8L3RkPlxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICA8Y2NwYXktYXBwLXVucHJvY2Vzc2VkLXBheW1lbnRzIGNsYXNzPVwiZ292dWstdGFibGVcIlxuICAgICAgICAgICAgKm5nSWY9XCJpc0J1bGtTY2FuRW5hYmxlICYmICF0YWtlUGF5bWVudFwiXG4gICAgICAgICAgICBbSVNfQlVUVE9OX0VOQUJMRV09XCJ0YWtlUGF5bWVudFwiXG4gICAgICAgICAgICBbTEVWRUxdPVwiNFwiXG4gICAgICAgICAgICBbSVNUVVJOT0ZGXT1cImlzVHVybk9mZlwiXG4gICAgICAgICAgICBbSVNTRkVOQUJMRV09XCJpc1N0cmF0ZWdpY0ZpeEVuYWJsZVwiXG4gICAgICAgICAgICBbUEFZTUVOVFNMRU5HVEhdPVwiYWxsUGF5bWVudHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBbUEFZTUVOVFJFRl09XCJwYXltZW50UmVmXCJcbiAgICAgICAgICAgIChnZXRVbnByb2Nlc3NlZEZlZUNvdW50KSA9IFwiZ2V0VW5wcm9jZXNzZWRGZWVDb3VudCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtGRUVfUkVDT1JEU19FWElTVFNdPVwiaXNBbnlGZWVHcm91cEF2aWxhYmxlXCJcbiAgICAgICAgICAgIFtJU19PU19BTVRfQVZBSUxBQkxFXT1cImlzR3JwT3V0c3RhbmRpbmdBbXRQb3NpdGl2ZVwiXG4gICAgICAgICAgICAoc2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KSA9IFwic2VsZWN0ZWRVbnByb2Nlc3NlZEZlZUV2ZW50KCRldmVudClcIj5cbiAgICAgICAgICAgICAgPC9jY3BheS1hcHAtdW5wcm9jZXNzZWQtcGF5bWVudHM+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtY29sdW1uLWZ1bGxcIiAqbmdJZj1cIiFjaGVjazRBbGxvd2VkUm9sZXMyQWNjZXNzUEJBcGF5bWVudCgpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+PGJyLz5SZWZ1bmRzPC9zcGFuPlxuICAgICAgICAgICAgPGNjcGF5LXJlZnVuZC1zdGF0dXNcbiAgICAgICAgICAgIFtjY2RDYXNlTnVtYmVyXT1cImNjZENhc2VOdW1iZXJcIlxuICAgICAgICAgICAgW29yZGVyUGFydHldID1cIm9yZGVyUGFydHlcIlxuICAgICAgICAgICAgID48L2NjcGF5LXJlZnVuZC1zdGF0dXM+XG4gICAgICAgIDwvZGl2PlxuXG4gICA8L25nLWNvbnRhaW5lcj5cblxuXG48aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0ZFRVJFTU9WQUxDT05GSVJNQVRJT05fMic+XG5cbjwhLS0gT3JkZXIgRnVsbCBWaWV3IERldGFpbHMtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnb3JkZXItZnVsbC12aWV3J1wiPlxuICA8Y2NwYXktc2VydmljZS1yZXF1ZXN0XG4gIFt2aWV3U3RhdHVzXSA9IFwidmlld1N0YXR1c1wiXG4gIFtvcmRlclJlZl0gPSBcIm9yZGVyUmVmXCJcbiAgW29yZGVyU3RhdHVzXSA9IFwib3JkZXJTdGF0dXNcIlxuICBbb3JkZXJDcmVhdGVkXSA9IFwib3JkZXJDcmVhdGVkXCJcbiAgW29yZGVyUGFydHldID0gXCJvcmRlclBhcnR5XCJcbiAgW29yZGVyQ0NERXZlbnRdID0gXCJvcmRlckNDREV2ZW50XCJcbiAgW29yZGVyRGV0YWlsXSA9IFwib3JkZXJEZXRhaWxcIlxuICBbcGF5bWVudEdyb3VwTGlzdF0gPSBcInBheW1lbnRHcm91cHNcIlxuICBbTE9HR0VESU5VU0VSUk9MRVNdID0gXCJMT0dHRURJTlVTRVJST0xFU1wiXG4gIFtjY2RDYXNlTnVtYmVyXSA9IFwiY2NkQ2FzZU51bWJlclwiXG4gIFtvcmRlckZlZXNUb3RhbF0gPSBcIm9yZGVyRmVlc1RvdGFsXCJcbiAgW29yZGVyVG90YWxQYXltZW50c10gPSBcIm9yZGVyVG90YWxQYXltZW50c1wiXG4gIFtvcmRlclJlbWlzc2lvblRvdGFsXSA9IFwib3JkZXJSZW1pc3Npb25Ub3RhbFwiXG4gIFtpc1NlcnZpY2VSZXF1ZXN0XSA9IFwic2VydmljZVJlcXVlc3RWYWx1ZVwiXG4gIChnb1RvU2VydmljZVJxdWVzdENvbXBvbmVudCkgPSBcImdvVG9TZXJ2aWNlUmVxdWVzdFBhZ2UoKVwiXG4gID48L2NjcGF5LXNlcnZpY2UtcmVxdWVzdD5cblxuPC9uZy1jb250YWluZXI+XG48Y2NwYXktYWRkLXJlbWlzc2lvbiAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdhZGRyZW1pc3Npb24nICYmIGZlZUlkXCJcbltpc1R1cm5PZmZdPVwiaXNUdXJuT2ZmXCJcbltpc1N0cmF0ZWdpY0ZpeEVuYWJsZV09XCJpc1N0cmF0ZWdpY0ZpeEVuYWJsZVwiXG5bdmlld0NvbXBTdGF0dXNdPSBcInZpZXdTdGF0dXNcIlxuW2ZlZV09XCJmZWVJZFwiXG5bb3JkZXJTdGF0dXNdID1cIm9yZGVyU3RhdHVzXCJcbltwYWlkQW1vdW50XT0gXCJvcmRlclRvdGFsUGF5bWVudHNcIlxuW2lzUmVmdW5kUmVtaXNzaW9uXT1cImlzUmVmdW5kUmVtaXNzaW9uXCJcbltjYXNlVHlwZV09XCJjYXNlVHlwZVwiXG5bcGF5bWVudEdyb3VwUmVmXT1cIm9yZGVyUmVmXCJcbltpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2VdID0gXCJ0cnVlXCJcbltwYXltZW50XSA9IFwicGF5bWVudFwiXG5bY2NkQ2FzZU51bWJlcl09XCJjY2RDYXNlTnVtYmVyXCI+PC9jY3BheS1hZGQtcmVtaXNzaW9uPlxuXG48Y2NwYXktYWRkLXJlbWlzc2lvbiAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdpc3N1ZXJlZnVuZCcgJiYgcGF5bWVudFwiXG5baXNUdXJuT2ZmXT1cImlzVHVybk9mZlwiXG5baXNTdHJhdGVnaWNGaXhFbmFibGVdPVwiaXNTdHJhdGVnaWNGaXhFbmFibGVcIlxuW3ZpZXdDb21wU3RhdHVzXT0gXCJ2aWV3U3RhdHVzXCJcbltpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2VdID0gXCJ0cnVlXCJcbltwYXltZW50XT1cInBheW1lbnRcIlxuW29yZGVyU3RhdHVzXSA9XCJvcmRlclN0YXR1c1wiXG5bcGFpZEFtb3VudF09IFwib3JkZXJUb3RhbFBheW1lbnRzXCJcbltpc1JlZnVuZFJlbWlzc2lvbl09XCJpc1JlZnVuZFJlbWlzc2lvblwiXG5bY2FzZVR5cGVdPVwiY2FzZVR5cGVcIlxuW3BheW1lbnRHcm91cFJlZl09XCJvcmRlclJlZlwiXG5bY2NkQ2FzZU51bWJlcl09XCJjY2RDYXNlTnVtYmVyXCI+PC9jY3BheS1hZGQtcmVtaXNzaW9uPlxuPGNjcGF5LWFkZC1yZW1pc3Npb24gKm5nSWY9XCJ2aWV3U3RhdHVzID09PSAnYWRkcmVmdW5kZm9ycmVtaXNzaW9uJyAmJiBwYXltZW50XCJcbltpc1R1cm5PZmZdPVwiaXNUdXJuT2ZmXCJcbltpc1N0cmF0ZWdpY0ZpeEVuYWJsZV09XCJpc1N0cmF0ZWdpY0ZpeEVuYWJsZVwiXG5bdmlld0NvbXBTdGF0dXNdPSBcInZpZXdTdGF0dXNcIlxuW3BheW1lbnRdPVwicGF5bWVudFwiXG5bb3JkZXJTdGF0dXNdID1cIm9yZGVyU3RhdHVzXCJcbltwYWlkQW1vdW50XT0gXCJvcmRlclRvdGFsUGF5bWVudHNcIlxuW2lzUmVmdW5kUmVtaXNzaW9uXT1cImlzUmVmdW5kUmVtaXNzaW9uXCJcbltjYXNlVHlwZV09XCJjYXNlVHlwZVwiXG5bZmVlYW1vdW50XT1cInJlbWlzc2lvbkZlZUFtdFwiXG5bcmVtaXNzaW9uXSA9IFwicmVtaXNzaW9uc1wiXG5baXNGcm9tU2VydmljZVJlcXVlc3RQYWdlXT1cInRydWVcIlxuW2NjZENhc2VOdW1iZXJdPVwiY2NkQ2FzZU51bWJlclwiPjwvY2NwYXktYWRkLXJlbWlzc2lvbj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdTdGF0dXMgPT09ICdmZWVSZW1vdmFsQ29uZmlybWF0aW9uJ1wiPlxuICA8ZGl2IGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX2ljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj4hPC9zcGFuPlxuICAgIDxzdHJvbmcgY2xhc3M9XCJnb3Z1ay13YXJuaW5nLXRleHRfX3RleHRcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZ292dWstd2FybmluZy10ZXh0X19hc3Npc3RpdmVcIj5XYXJuaW5nPC9zcGFuPlxuICAgICAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGZlZT9cbiAgICA8L3N0cm9uZz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tZ3JiXCI+XG4gICAgPGZvcm0gbm92YWxpZGF0ZT5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbFJlbW92YWwoKVwiPlxuICAgICAgICBDYW5jZWxcbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidXR0b25cIlxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVtb3ZlQnRuRGlzYWJsZWRcIlxuICAgICAgW25nQ2xhc3NdPSdpc1JlbW92ZUJ0bkRpc2FibGVkID8gXCJidXR0b24gYnV0dG9uLS1kaXNhYmxlZCBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCIgOiBcImJ1dHRvbiBnb3Z1ay0hLW1hcmdpbi1yaWdodC0xXCInXG4gICAgICAoY2xpY2spPVwicmVtb3ZlRmVlKGZlZUlkKVwiPlxuICAgICAgICBSZW1vdmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjwvbWFpbj5cbjwvZGl2PlxuPCEtLSA8L21haW4+IC0tPlxuPCEtLSA8L2RpdiBjbGFzcz1cImdvdnVrLXdpZHRoLWNvbnRhaW5lclwiPiAtLT5cbiJdfQ==
|