tango-app-ui-manage-billing 3.3.0-alpha.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/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # README #
2
+
3
+ This README would normally document whatever steps are necessary to get your application up and running.
4
+
5
+ ### What is this repository for? ###
6
+
7
+ * Quick summary
8
+ * Version
9
+ * [Learn Markdown](https://bitbucket.org/tutorials/markdowndemo)
10
+
11
+ ### How do I get set up? ###
12
+
13
+ * Summary of set up
14
+ * Configuration
15
+ * Dependencies
16
+ * Database configuration
17
+ * How to run tests
18
+ * Deployment instructions
19
+
20
+ ### Contribution guidelines ###
21
+
22
+ * Writing tests
23
+ * Code review
24
+ * Other guidelines
25
+
26
+ ### Who do I talk to? ###
27
+
28
+ * Repo owner or admin
29
+ * Other community or team contact
@@ -0,0 +1,111 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, Subject, takeUntil } from 'rxjs';
3
+ import * as FileSaver from 'file-saver';
4
+ import * as XLSX from 'xlsx';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ import * as i2 from "tango-app-ui-global";
8
+ const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
9
+ const EXCEL_EXTENSION = '.xlsx';
10
+ export class BillingService {
11
+ http;
12
+ gs;
13
+ invoiceApiUrl;
14
+ paymentSubscriptionApiUrl;
15
+ reloadDataSubject = new BehaviorSubject(false);
16
+ reloadData$ = this.reloadDataSubject.asObservable();
17
+ paymentinvoiceFormData = new BehaviorSubject({ value: null, type: null, form: null });
18
+ billingApiUrl;
19
+ constructor(http, gs) {
20
+ this.http = http;
21
+ this.gs = gs;
22
+ this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => {
23
+ if (env) {
24
+ this.paymentSubscriptionApiUrl = env.paymentSubscriptionApiUrl;
25
+ this.invoiceApiUrl = env.invoiceApiUrl;
26
+ this.billingApiUrl = env.billingApiUrl;
27
+ // this.clientId.next('11')
28
+ }
29
+ });
30
+ // this.gs.selectedClient.pipe(takeUntil(this.destroy$)).subscribe((e:any)=>{
31
+ // if(e){
32
+ // console.log(e,'e');
33
+ // }
34
+ // })
35
+ }
36
+ triggerReload() {
37
+ this.reloadDataSubject.next(true);
38
+ }
39
+ exportAsExcelFile(json, excelFileName) {
40
+ const worksheet = XLSX.utils.json_to_sheet(json);
41
+ const workbook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] };
42
+ const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });
43
+ this.saveAsExcelFile(excelBuffer, excelFileName);
44
+ }
45
+ saveAsExcelFile(buffer, fileName) {
46
+ const data = new Blob([buffer], {
47
+ type: EXCEL_TYPE
48
+ });
49
+ FileSaver.saveAs(data, fileName + 'list' + EXCEL_EXTENSION);
50
+ }
51
+ saveAsTemplate(buffer, fileName) {
52
+ const data = new Blob([buffer], {
53
+ type: EXCEL_TYPE
54
+ });
55
+ FileSaver.saveAs(data, fileName + EXCEL_EXTENSION);
56
+ }
57
+ destroy$ = new Subject();
58
+ ngOnDestroy() {
59
+ this.destroy$.next(true);
60
+ this.destroy$.complete();
61
+ }
62
+ invoiceTableData(data) {
63
+ return this.http.post(`${this.invoiceApiUrl}/clientInvoiceList`, data);
64
+ }
65
+ invoiceTableDataExport(data) {
66
+ return this.http.post(`${this.invoiceApiUrl}/clientInvoiceList`, data, { responseType: 'arraybuffer' });
67
+ }
68
+ clientBillingInfo(params) {
69
+ return this.http
70
+ .get(`${this.paymentSubscriptionApiUrl}/clientBillingSubscriptionInfo/${params}`);
71
+ }
72
+ invoiceDownload(data) {
73
+ return this.http.post(`${this.invoiceApiUrl}/invoiceDownload/${data._id}`, data, { responseType: 'arraybuffer' });
74
+ }
75
+ invoiceregerate(data) {
76
+ return this.http.post(`${this.invoiceApiUrl}/createInvoice/`, data);
77
+ }
78
+ invoiceSent(data) {
79
+ return this.http.post(`${this.invoiceApiUrl}/invoiceDownload/${data._id}`, data);
80
+ }
81
+ getinvoice(id) {
82
+ return this.http.get(`${this.paymentSubscriptionApiUrl}/creditNotes/invoiceList/${id}`);
83
+ }
84
+ transactionList(data) {
85
+ return this.http.post(`${this.invoiceApiUrl}/creditTransactionlist`, data);
86
+ }
87
+ transactionTableExport(data) {
88
+ return this.http.post(`${this.invoiceApiUrl}/creditTransactionlist`, data, { responseType: 'arraybuffer' });
89
+ }
90
+ creditnoteupdate(data) {
91
+ return this.http.post(`${this.paymentSubscriptionApiUrl}/creditNotes`, data);
92
+ }
93
+ applyDiscount(data) {
94
+ return this.http.post(`${this.invoiceApiUrl}/applyDiscount`, data);
95
+ }
96
+ oneTimeFee(data, invoiceId) {
97
+ return this.http.post(`${this.billingApiUrl}/onetime-payment/${invoiceId}`, data);
98
+ }
99
+ pendingInvoices(data) {
100
+ return this.http.post(`${this.invoiceApiUrl}/pendingInvoices`, data);
101
+ }
102
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BillingService, deps: [{ token: i1.HttpClient }, { token: i2.GlobalStateService }], target: i0.ɵɵFactoryTarget.Injectable });
103
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BillingService, providedIn: 'root' });
104
+ }
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BillingService, decorators: [{
106
+ type: Injectable,
107
+ args: [{
108
+ providedIn: 'root'
109
+ }]
110
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.GlobalStateService }] });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxNQUFNLENBQUM7QUFDbkcsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7Ozs7QUFFN0IsTUFBTSxVQUFVLEdBQUcsaUZBQWlGLENBQUM7QUFDckcsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBTWhDLE1BQU0sT0FBTyxjQUFjO0lBU0w7SUFBMEI7SUFSOUMsYUFBYSxDQUFRO0lBQ3JCLHlCQUF5QixDQUFLO0lBRXRCLGlCQUFpQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFcEQsc0JBQXNCLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBQyxLQUFLLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUE7SUFDckYsYUFBYSxDQUFNO0lBQ25CLFlBQW9CLElBQWdCLEVBQVUsRUFBc0I7UUFBaEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQ2xFLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENB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Z0IsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBQ0QsVUFBVSxDQUFFLElBQVEsRUFBQyxTQUFhO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxvQkFBb0IsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUNELGVBQWUsQ0FBQyxJQUFTO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUN0RSxDQUFDO3dHQS9GWSxjQUFjOzRHQUFkLGNBQWMsY0FGYixNQUFNOzs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCwgY2F0Y2hFcnJvciwgbWFwLHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5cclxuY29uc3QgRVhDRUxfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcclxuY29uc3QgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbiBcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmlsbGluZ1NlcnZpY2Uge1xyXG4gIGludm9pY2VBcGlVcmw6c3RyaW5nO1xyXG4gIHBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmw6YW55O1xyXG5cclxuICBwcml2YXRlIHJlbG9hZERhdGFTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVsb2FkRGF0YSQgPSB0aGlzLnJlbG9hZERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwYXltZW50aW52b2ljZUZvcm1EYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt2YWx1ZTpudWxsLCB0eXBlOm51bGwsIGZvcm06bnVsbH0pXHJcbiAgYmlsbGluZ0FwaVVybDogYW55O1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICBpZiAoZW52KSB7XHJcbiAgICAgICAgdGhpcy5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsID0gZW52LnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmw7XHJcbiAgICAgICAgdGhpcy5pbnZvaWNlQXBpVXJsID0gZW52Lmludm9pY2VBcGlVcmxcclxuICAgICAgICB0aGlzLmJpbGxpbmdBcGlVcmwgPSBlbnYuYmlsbGluZ0FwaVVybFxyXG5cclxuICAgICAgICAvLyB0aGlzLmNsaWVudElkLm5leHQoJzExJylcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLmdzLnNlbGVjdGVkQ2xpZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU6YW55KT0+e1xyXG4gICAgLy8gICBpZihlKXtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZyhlLCdlJyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pXHJcbiAgfVxyXG4gIHRyaWdnZXJSZWxvYWQoKSB7XHJcbiAgICB0aGlzLnJlbG9hZERhdGFTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBcclxuICBwdWJsaWMgZXhwb3J0QXNFeGNlbEZpbGUoanNvbjogYW55W10sIGV4Y2VsRmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgd29ya3NoZWV0OiBYTFNYLldvcmtTaGVldCA9IFhMU1gudXRpbHMuanNvbl90b19zaGVldChqc29uKTtcclxuICAgIGNvbnN0IHdvcmtib29rOiBYTFNYLldvcmtCb29rID0geyBTaGVldHM6IHsgJ2RhdGEnOiB3b3Jrc2hlZXQgfSwgU2hlZXROYW1lczogWydkYXRhJ10gfTtcclxuICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSBYTFNYLndyaXRlKHdvcmtib29rLCB7IGJvb2tUeXBlOiAneGxzeCcsIHR5cGU6ICdhcnJheScgfSk7XHJcbiAgICB0aGlzLnNhdmVBc0V4Y2VsRmlsZShleGNlbEJ1ZmZlciwgZXhjZWxGaWxlTmFtZSk7XHJcbiAgfVxyXG4gXHJcbiAgcHVibGljIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XHJcbiAgICAgIHR5cGU6IEVYQ0VMX1RZUEVcclxuICAgIH0pO1xyXG4gICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCBmaWxlTmFtZSArICdsaXN0JysgRVhDRUxfRVhURU5TSU9OKTtcclxuICB9XHJcbiBcclxuICBwdWJsaWMgc2F2ZUFzVGVtcGxhdGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICB0eXBlOiBFWENFTF9UWVBFXHJcbiAgICB9KTtcclxuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyBFWENFTF9FWFRFTlNJT04pO1xyXG4gIH1cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbm5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbn1cclxuaW52b2ljZVRhYmxlRGF0YSggZGF0YTphbnkpOk9ic2VydmFibGU8YW55PntcclxuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9jbGllbnRJbnZvaWNlTGlzdGAsIGRhdGEpXHJcbn1cclxuaW52b2ljZVRhYmxlRGF0YUV4cG9ydCggZGF0YTphbnkpOk9ic2VydmFibGU8YW55PntcclxuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9jbGllbnRJbnZvaWNlTGlzdGAsIGRhdGEsIHtyZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcid9KVxyXG59XHJcbmNsaWVudEJpbGxpbmdJbmZvKHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgLmdldChgJHt0aGlzLnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmx9L2NsaWVudEJpbGxpbmdTdWJzY3JpcHRpb25JbmZvLyR7cGFyYW1zfWApXHJcbn1cclxuaW52b2ljZURvd25sb2FkKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vaW52b2ljZURvd25sb2FkLyR7ZGF0YS5faWR9YCwgZGF0YSwge3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXHJcbn1cclxuaW52b2ljZXJlZ2VyYXRlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vY3JlYXRlSW52b2ljZS9gLCBkYXRhKVxyXG59XHJcbmludm9pY2VTZW50KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vaW52b2ljZURvd25sb2FkLyR7ZGF0YS5faWR9YCwgZGF0YSlcclxufVxyXG5nZXRpbnZvaWNlKGlkPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmx9L2NyZWRpdE5vdGVzL2ludm9pY2VMaXN0LyR7aWR9YClcclxufVxyXG50cmFuc2FjdGlvbkxpc3QoZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vY3JlZGl0VHJhbnNhY3Rpb25saXN0YCxkYXRhKVxyXG59XHJcbnRyYW5zYWN0aW9uVGFibGVFeHBvcnQoZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vY3JlZGl0VHJhbnNhY3Rpb25saXN0YCxkYXRhLHtyZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcid9KVxyXG59XHJcbmNyZWRpdG5vdGV1cGRhdGUoIGRhdGE6YW55KTpPYnNlcnZhYmxlPGFueT57XHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMucGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybH0vY3JlZGl0Tm90ZXNgLCBkYXRhKVxyXG59XHJcbmFwcGx5RGlzY291bnQoIGRhdGE6YW55KTpPYnNlcnZhYmxlPGFueT57XHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYXBwbHlEaXNjb3VudGAsIGRhdGEpXHJcbn1cclxub25lVGltZUZlZSggZGF0YTphbnksaW52b2ljZUlkOmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xyXG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJpbGxpbmdBcGlVcmx9L29uZXRpbWUtcGF5bWVudC8ke2ludm9pY2VJZH1gLCBkYXRhKVxyXG59XHJcbnBlbmRpbmdJbnZvaWNlcyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L3BlbmRpbmdJbnZvaWNlc2AsIGRhdGEpXHJcbn1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,168 @@
1
+ import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { Subject, takeUntil } from 'rxjs';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@ng-bootstrap/ng-bootstrap";
6
+ import * as i2 from "../../services/billing.service";
7
+ import * as i3 from "@angular/forms";
8
+ import * as i4 from "tango-app-ui-shared";
9
+ import * as i5 from "@angular/common";
10
+ export class CreditNoteComponent {
11
+ activeModal;
12
+ BillingService;
13
+ changeDetector;
14
+ fb;
15
+ toast;
16
+ clientId;
17
+ invoiceIssue;
18
+ invoicetype = [];
19
+ invoicetypedropDown = false;
20
+ creditnoteform;
21
+ amount = 0;
22
+ discount;
23
+ revisedAmount = 0;
24
+ moreThanTenPercent = false;
25
+ currency = '';
26
+ transactionvalue = "";
27
+ passEntry = new EventEmitter();
28
+ invoiceitem;
29
+ destroy$ = new Subject();
30
+ constructor(activeModal, BillingService, changeDetector, fb, toast) {
31
+ this.activeModal = activeModal;
32
+ this.BillingService = BillingService;
33
+ this.changeDetector = changeDetector;
34
+ this.fb = fb;
35
+ this.toast = toast;
36
+ }
37
+ ngOnInit() {
38
+ this.creditnote();
39
+ this.creditnoteform = this.fb.group({
40
+ invoicetype: ['', Validators.required],
41
+ amount: ['', Validators.required],
42
+ revisedAmount: ['', Validators.required],
43
+ discount: ['', [Validators.required, Validators.max(10)]],
44
+ });
45
+ this.creditnoteform.get('revisedAmount')?.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((e) => {
46
+ if (e) {
47
+ this.amount = this.creditnoteform.get('amount')?.value;
48
+ this.discount = ((this.amount - e) / this.amount * 100).toFixed(2);
49
+ this.revisedAmount = e;
50
+ if (this.discount > 10 || isNaN(e) || this.discount < 0 || e < 0) {
51
+ this.moreThanTenPercent = true;
52
+ }
53
+ else {
54
+ this.moreThanTenPercent = false;
55
+ }
56
+ this.creditnoteform.get('discount')?.setValue(this.discount, {
57
+ emitEvent: false
58
+ });
59
+ }
60
+ else {
61
+ let emptdiscount = '';
62
+ this.creditnoteform.get('discount')?.setValue(emptdiscount, {
63
+ emitEvent: false
64
+ });
65
+ this.moreThanTenPercent = false;
66
+ }
67
+ });
68
+ this.creditnoteform.get('discount')?.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((e) => {
69
+ if (e) {
70
+ this.amount = this.creditnoteform.get('amount')?.value;
71
+ this.revisedAmount = this.amount * (1 - e / 100);
72
+ this.revisedAmount = parseInt(this.revisedAmount.toFixed());
73
+ this.discount = e;
74
+ if (this.discount > 10 || isNaN(e) || e < 0 || this.revisedAmount < 0) {
75
+ this.moreThanTenPercent = true;
76
+ }
77
+ else {
78
+ this.moreThanTenPercent = false;
79
+ }
80
+ this.creditnoteform.get('revisedAmount')?.setValue(this.revisedAmount, {
81
+ emitEvent: false
82
+ });
83
+ }
84
+ else {
85
+ let emptdiscount = '';
86
+ this.creditnoteform.get('revisedAmount')?.setValue(emptdiscount, {
87
+ emitEvent: false
88
+ });
89
+ this.moreThanTenPercent = false;
90
+ }
91
+ this.changeDetector.detectChanges();
92
+ });
93
+ }
94
+ get revisedamount() { return this.creditnoteform.get('revisedAmount'); }
95
+ get discounts() { return this.creditnoteform.get('discount'); }
96
+ ngOnDestroy() {
97
+ this.destroy$.next(true);
98
+ this.destroy$.complete();
99
+ }
100
+ creditnote() {
101
+ let payload = {
102
+ clientId: this.clientId
103
+ };
104
+ this.BillingService.pendingInvoices(payload).pipe(takeUntil(this.destroy$)).subscribe((res) => {
105
+ if (res && res.code == 200) {
106
+ this.invoiceitem = res?.data;
107
+ this.invoiceIssue = this.invoiceitem[0]?.invoice;
108
+ const amount = this.invoiceitem[0]?.amount || "";
109
+ this.currency = this.invoiceitem[0]?.currency || "";
110
+ this.creditnoteform.patchValue({
111
+ amount: amount,
112
+ discount: this.invoiceitem?.discount
113
+ });
114
+ this.changeDetector.detectChanges();
115
+ }
116
+ });
117
+ }
118
+ invoiceItem(invoicevalue) {
119
+ this.creditnoteform.patchValue({
120
+ amount: invoicevalue.amount,
121
+ ...(invoicevalue?.discount ? { discount: invoicevalue?.discount } : { discount: '' }),
122
+ ...(invoicevalue?.revisedAmount ? { revisedAmount: invoicevalue?.revisedAmount } : { revisedAmount: '' })
123
+ });
124
+ this.invoiceIssue = invoicevalue.invoice;
125
+ this.creditnoteform.get('invoicetype')?.setValue(this.invoiceIssue);
126
+ this.invoicetypedropDown = false;
127
+ }
128
+ invoicetypeDropdown(event) {
129
+ event.stopPropagation();
130
+ this.invoicetypedropDown = !this.invoicetypedropDown;
131
+ this.revisedAmount;
132
+ }
133
+ successcredit() {
134
+ const requestData = {
135
+ invoice: this.invoiceIssue,
136
+ revisedAmount: this.revisedAmount,
137
+ discount: this.discount
138
+ };
139
+ this.BillingService.applyDiscount(requestData).pipe(takeUntil(this.destroy$)).subscribe((res) => {
140
+ if (res && res.code == 200) {
141
+ this.activeModal.close('successcredit');
142
+ // this.toast.getPrimaryToast(res.message);
143
+ this.changeDetector.detectChanges();
144
+ }
145
+ }, (error) => {
146
+ console.error('Error submitting update:', error);
147
+ });
148
+ }
149
+ onDocumentClick(event) {
150
+ this.invoicetypedropDown = false;
151
+ }
152
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreditNoteComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.BillingService }, { token: i0.ChangeDetectorRef }, { token: i3.FormBuilder }, { token: i4.ToastService }], target: i0.ɵɵFactoryTarget.Component });
153
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CreditNoteComponent, selector: "lib-credit-note", inputs: { clientId: "clientId", transactionvalue: "transactionvalue" }, outputs: { passEntry: "passEntry" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<div class=\"modal-content\">\r\n <div class=\"p-5 px-6\">\r\n <div><img src=\"./assets/tango/custompopup-Icons/plus-icon.svg\" alt=\"\"></div>\r\n <div class=\"heading mt-4 ms-1\">Add Credit Note</div>\r\n <div class=\"contenttext mt-4\">\r\n You have the flexibility to select a month in which the brand can make credit payments.\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body mb-8\">\r\n <!--begin::Form-->\r\n <form [formGroup]=\"creditnoteform\" class=\"form fv-plugins-bootstrap5 fv-plugins-framework\" action=\"#\">\r\n\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n <div class=\"form-group py-2\">\r\n <label for=\"invoicetype\" class=\"headingtext mb-2\">Invoice ID</label>\r\n <div class=\"position-relative\">\r\n <div class=\"form-select dropselect\" id=\"invoicetype\"\r\n (click)=\"invoicetypeDropdown($event)\"\r\n aria-label=\"Default select example\">{{invoiceIssue}}</div>\r\n <div *ngIf=\"invoicetypedropDown\"\r\n class=\"card py-2 w-100 invoiceidselect position-absolute end-0 z-1 invoiceDropDown\">\r\n <ul *ngFor=\"let item of invoiceitem\"\r\n class=\"list-unstyled mb-2\">\r\n <li [ngClass]=\"this.invoiceIssue === item?.invoice ? 'active' : ''\"\r\n class=\"producttext px-5 items cursor-pointer py-4\"\r\n (click)=\"invoiceItem(item)\">\r\n {{item?.invoice}}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div for=\"amount\" class=\"form-group py-2\">\r\n <label class=\" headingtext mb-2 \">Total Amount</label>\r\n <div class=\"input-group\">\r\n <span *ngIf=\"currency === 'inr'\" class=\"dollar-sign\">\u20B9</span><span\r\n *ngIf=\"currency === 'dollar'\" class=\"dollar-sign\">$</span><input formControlName=\"amount\" type=\"text\" readonly class=\"ng-pristine ng-invalid ng-touched amount\"\r\n style=\"text-transform: capitalize;\"></div>\r\n\r\n </div>\r\n <div for=\"revisedAmount\" class=\"form-group mt-2\">\r\n <div class=\"py-2\">\r\n <label class=\" headingtext mb-2\"> Revised Amount</label>\r\n <div class=\"input-group dropselect\">\r\n <span *ngIf=\"currency === 'inr'\" class=\"dollar-sign\">\u20B9</span><span\r\n *ngIf=\"currency === 'dollar'\" class=\"dollar-sign\">$</span><input type=\"text\" formControlName=\"revisedAmount\" [ngClass]=\"moreThanTenPercent ? 'errorinput' : ''\"\r\n style=\"text-transform: capitalize;\">\r\n <span class=\"icon\" *ngIf=\"moreThanTenPercent\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_7513_36689)\">\r\n <path d=\"M7.99967 5.33301V7.99967M7.99967 10.6663H8.00634M14.6663 7.99967C14.6663 11.6816 11.6816 14.6663 7.99967 14.6663C4.31778 14.6663 1.33301 11.6816 1.33301 7.99967C1.33301 4.31778 4.31778 1.33301 7.99967 1.33301C11.6816 1.33301 14.6663 4.31778 14.6663 7.99967Z\" stroke=\"#F04438\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_7513_36689\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n <span *ngIf=\"!moreThanTenPercent\" class=\"headingtext contenttext\">More than 10% can\u2019t be revised from total amount</span>\r\n <span *ngIf=\"moreThanTenPercent\" class=\"text-danger contenttext\">More than 10% can\u2019t be revised from total amount</span>\r\n </div>\r\n <div for=\"discount\" class=\"form-group mt-2\">\r\n <div class=\"py-2\">\r\n <label class=\" headingtext mb-2\"> Discount</label>\r\n <div class=\"input-group\"> <input type=\"text\" formControlName=\"discount\" class=\"amount\" [ngClass]=\"moreThanTenPercent ? 'errorinput' : ''\" >\r\n <span class=\"icon\" *ngIf=\"!moreThanTenPercent\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M12.667 3.33366L3.33366 12.667M6.00033 4.33366C6.00033 5.25413 5.25413 6.00033 4.33366 6.00033C3.41318 6.00033 2.66699 5.25413 2.66699 4.33366C2.66699 3.41318 3.41318 2.66699 4.33366 2.66699C5.25413 2.66699 6.00033 3.41318 6.00033 4.33366ZM13.3337 11.667C13.3337 12.5875 12.5875 13.3337 11.667 13.3337C10.7465 13.3337 10.0003 12.5875 10.0003 11.667C10.0003 10.7465 10.7465 10.0003 11.667 10.0003C12.5875 10.0003 13.3337 10.7465 13.3337 11.667Z\" stroke=\"#98A2B3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <span class=\"icon\" *ngIf=\"moreThanTenPercent\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M12.667 3.33366L3.33366 12.667M6.00033 4.33366C6.00033 5.25413 5.25413 6.00033 4.33366 6.00033C3.41318 6.00033 2.66699 5.25413 2.66699 4.33366C2.66699 3.41318 3.41318 2.66699 4.33366 2.66699C5.25413 2.66699 6.00033 3.41318 6.00033 4.33366ZM13.3337 11.667C13.3337 12.5875 12.5875 13.3337 11.667 13.3337C10.7465 13.3337 10.0003 12.5875 10.0003 11.667C10.0003 10.7465 10.7465 10.0003 11.667 10.0003C12.5875 10.0003 13.3337 10.7465 13.3337 11.667Z\" stroke=\"#F04438\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n \r\n </div>\r\n </div>\r\n <span *ngIf=\"!moreThanTenPercent\" class=\"headingtext contenttext\">In percentage</span>\r\n <span *ngIf=\"moreThanTenPercent\" class=\"text-danger contenttext\">In percentage</span>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mt-5\">\r\n <button type=\"submit\" (click)=\"activeModal.dismiss()\"\r\n class=\"btn-outline btn cancel me-4 w-50\">Cancel</button>\r\n <button [disabled]=\"moreThanTenPercent\" type=\"button\" (click)=\"successcredit()\" tabindex=\"0\" \r\n class=\"btn btn-primary px-4 ng-star-inserted w-50\" style=\"white-space: nowrap;\"><span\r\n class=\"submit\">Apply </span></button>\r\n </div>\r\n </form>\r\n </div>\r\n</div>", styles: [".heading{color:var(--Gray-900, #101828);font-family:Inter;font-size:18px;font-style:normal;font-weight:600;line-height:28px}input{color:#101828;border:1px solid #D0D5DD!important;box-shadow:0 1px 2px #1018280d;border-radius:8px;font-size:16px;width:100%;padding:10px 14px;font-family:Inter;font-weight:400;line-height:24px}input:active,input:focus,input:focus-visible{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)!important;box-shadow:0 1px 2px #1018280d;outline:none!important;background:var(--Gray-50, #F9FAFB)}.cancel{color:var(--Gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.contenttext{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.dropselect{color:var(--Gray-900, #101828)!important;font-family:Inter;font-size:16px!important;font-weight:400!important;line-height:24px;height:45px!important}.totalamount{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:16px!important;font-weight:400;line-height:24px}.producttext{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.errorinput{border-radius:8px;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}.errorinput:focus{border:1px solid var(--Error-300, #FDA29B)!important}.input-group .dollar-sign{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--Gray-900, #101828);font-family:Inter;font-size:16px;font-weight:400!important;line-height:24px}.input-group input[type=text]{padding-left:30px}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){border-radius:8px!important}.text-danger{color:var(--Error-500, #F04438)!important;font-family:Inter;font-size:14px!important;font-weight:400;line-height:20px}.input-group{position:relative}.input-group>.icon{position:absolute;top:43%;right:16px;transform:translateY(-50%);color:silver}.input-group>input{padding-left:calc(1em + 18px)}.spritesheet{display:none}.icon{display:inline-block;width:16px!important;height:16px!important}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-radius:8px!important}.invoiceDropDown{min-height:auto!important;max-height:170px!important;overflow:auto}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
154
+ }
155
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CreditNoteComponent, decorators: [{
156
+ type: Component,
157
+ args: [{ selector: 'lib-credit-note', template: "<div class=\"modal-content\">\r\n <div class=\"p-5 px-6\">\r\n <div><img src=\"./assets/tango/custompopup-Icons/plus-icon.svg\" alt=\"\"></div>\r\n <div class=\"heading mt-4 ms-1\">Add Credit Note</div>\r\n <div class=\"contenttext mt-4\">\r\n You have the flexibility to select a month in which the brand can make credit payments.\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body mb-8\">\r\n <!--begin::Form-->\r\n <form [formGroup]=\"creditnoteform\" class=\"form fv-plugins-bootstrap5 fv-plugins-framework\" action=\"#\">\r\n\r\n <div class=\"d-flex flex-column fv-row fv-plugins-icon-container\">\r\n <div class=\"form-group py-2\">\r\n <label for=\"invoicetype\" class=\"headingtext mb-2\">Invoice ID</label>\r\n <div class=\"position-relative\">\r\n <div class=\"form-select dropselect\" id=\"invoicetype\"\r\n (click)=\"invoicetypeDropdown($event)\"\r\n aria-label=\"Default select example\">{{invoiceIssue}}</div>\r\n <div *ngIf=\"invoicetypedropDown\"\r\n class=\"card py-2 w-100 invoiceidselect position-absolute end-0 z-1 invoiceDropDown\">\r\n <ul *ngFor=\"let item of invoiceitem\"\r\n class=\"list-unstyled mb-2\">\r\n <li [ngClass]=\"this.invoiceIssue === item?.invoice ? 'active' : ''\"\r\n class=\"producttext px-5 items cursor-pointer py-4\"\r\n (click)=\"invoiceItem(item)\">\r\n {{item?.invoice}}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div for=\"amount\" class=\"form-group py-2\">\r\n <label class=\" headingtext mb-2 \">Total Amount</label>\r\n <div class=\"input-group\">\r\n <span *ngIf=\"currency === 'inr'\" class=\"dollar-sign\">\u20B9</span><span\r\n *ngIf=\"currency === 'dollar'\" class=\"dollar-sign\">$</span><input formControlName=\"amount\" type=\"text\" readonly class=\"ng-pristine ng-invalid ng-touched amount\"\r\n style=\"text-transform: capitalize;\"></div>\r\n\r\n </div>\r\n <div for=\"revisedAmount\" class=\"form-group mt-2\">\r\n <div class=\"py-2\">\r\n <label class=\" headingtext mb-2\"> Revised Amount</label>\r\n <div class=\"input-group dropselect\">\r\n <span *ngIf=\"currency === 'inr'\" class=\"dollar-sign\">\u20B9</span><span\r\n *ngIf=\"currency === 'dollar'\" class=\"dollar-sign\">$</span><input type=\"text\" formControlName=\"revisedAmount\" [ngClass]=\"moreThanTenPercent ? 'errorinput' : ''\"\r\n style=\"text-transform: capitalize;\">\r\n <span class=\"icon\" *ngIf=\"moreThanTenPercent\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_7513_36689)\">\r\n <path d=\"M7.99967 5.33301V7.99967M7.99967 10.6663H8.00634M14.6663 7.99967C14.6663 11.6816 11.6816 14.6663 7.99967 14.6663C4.31778 14.6663 1.33301 11.6816 1.33301 7.99967C1.33301 4.31778 4.31778 1.33301 7.99967 1.33301C11.6816 1.33301 14.6663 4.31778 14.6663 7.99967Z\" stroke=\"#F04438\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_7513_36689\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg></span></div>\r\n </div>\r\n <span *ngIf=\"!moreThanTenPercent\" class=\"headingtext contenttext\">More than 10% can\u2019t be revised from total amount</span>\r\n <span *ngIf=\"moreThanTenPercent\" class=\"text-danger contenttext\">More than 10% can\u2019t be revised from total amount</span>\r\n </div>\r\n <div for=\"discount\" class=\"form-group mt-2\">\r\n <div class=\"py-2\">\r\n <label class=\" headingtext mb-2\"> Discount</label>\r\n <div class=\"input-group\"> <input type=\"text\" formControlName=\"discount\" class=\"amount\" [ngClass]=\"moreThanTenPercent ? 'errorinput' : ''\" >\r\n <span class=\"icon\" *ngIf=\"!moreThanTenPercent\" >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M12.667 3.33366L3.33366 12.667M6.00033 4.33366C6.00033 5.25413 5.25413 6.00033 4.33366 6.00033C3.41318 6.00033 2.66699 5.25413 2.66699 4.33366C2.66699 3.41318 3.41318 2.66699 4.33366 2.66699C5.25413 2.66699 6.00033 3.41318 6.00033 4.33366ZM13.3337 11.667C13.3337 12.5875 12.5875 13.3337 11.667 13.3337C10.7465 13.3337 10.0003 12.5875 10.0003 11.667C10.0003 10.7465 10.7465 10.0003 11.667 10.0003C12.5875 10.0003 13.3337 10.7465 13.3337 11.667Z\" stroke=\"#98A2B3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <span class=\"icon\" *ngIf=\"moreThanTenPercent\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M12.667 3.33366L3.33366 12.667M6.00033 4.33366C6.00033 5.25413 5.25413 6.00033 4.33366 6.00033C3.41318 6.00033 2.66699 5.25413 2.66699 4.33366C2.66699 3.41318 3.41318 2.66699 4.33366 2.66699C5.25413 2.66699 6.00033 3.41318 6.00033 4.33366ZM13.3337 11.667C13.3337 12.5875 12.5875 13.3337 11.667 13.3337C10.7465 13.3337 10.0003 12.5875 10.0003 11.667C10.0003 10.7465 10.7465 10.0003 11.667 10.0003C12.5875 10.0003 13.3337 10.7465 13.3337 11.667Z\" stroke=\"#F04438\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n \r\n </div>\r\n </div>\r\n <span *ngIf=\"!moreThanTenPercent\" class=\"headingtext contenttext\">In percentage</span>\r\n <span *ngIf=\"moreThanTenPercent\" class=\"text-danger contenttext\">In percentage</span>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mt-5\">\r\n <button type=\"submit\" (click)=\"activeModal.dismiss()\"\r\n class=\"btn-outline btn cancel me-4 w-50\">Cancel</button>\r\n <button [disabled]=\"moreThanTenPercent\" type=\"button\" (click)=\"successcredit()\" tabindex=\"0\" \r\n class=\"btn btn-primary px-4 ng-star-inserted w-50\" style=\"white-space: nowrap;\"><span\r\n class=\"submit\">Apply </span></button>\r\n </div>\r\n </form>\r\n </div>\r\n</div>", styles: [".heading{color:var(--Gray-900, #101828);font-family:Inter;font-size:18px;font-style:normal;font-weight:600;line-height:28px}input{color:#101828;border:1px solid #D0D5DD!important;box-shadow:0 1px 2px #1018280d;border-radius:8px;font-size:16px;width:100%;padding:10px 14px;font-family:Inter;font-weight:400;line-height:24px}input:active,input:focus,input:focus-visible{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)!important;box-shadow:0 1px 2px #1018280d;outline:none!important;background:var(--Gray-50, #F9FAFB)}.cancel{color:var(--Gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.contenttext{color:var(--Gray-500, #667085);font-family:Inter;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.dropselect{color:var(--Gray-900, #101828)!important;font-family:Inter;font-size:16px!important;font-weight:400!important;line-height:24px;height:45px!important}.totalamount{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:16px!important;font-weight:400;line-height:24px}.producttext{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:20px}.errorinput{border-radius:8px;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}.errorinput:focus{border:1px solid var(--Error-300, #FDA29B)!important}.input-group .dollar-sign{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--Gray-900, #101828);font-family:Inter;font-size:16px;font-weight:400!important;line-height:24px}.input-group input[type=text]{padding-left:30px}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){border-radius:8px!important}.text-danger{color:var(--Error-500, #F04438)!important;font-family:Inter;font-size:14px!important;font-weight:400;line-height:20px}.input-group{position:relative}.input-group>.icon{position:absolute;top:43%;right:16px;transform:translateY(-50%);color:silver}.input-group>input{padding-left:calc(1em + 18px)}.spritesheet{display:none}.icon{display:inline-block;width:16px!important;height:16px!important}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-radius:8px!important}.invoiceDropDown{min-height:auto!important;max-height:170px!important;overflow:auto}\n"] }]
158
+ }], ctorParameters: () => [{ type: i1.NgbActiveModal }, { type: i2.BillingService }, { type: i0.ChangeDetectorRef }, { type: i3.FormBuilder }, { type: i4.ToastService }], propDecorators: { clientId: [{
159
+ type: Input
160
+ }], transactionvalue: [{
161
+ type: Input
162
+ }], passEntry: [{
163
+ type: Output
164
+ }], onDocumentClick: [{
165
+ type: HostListener,
166
+ args: ['document:click', ['$event']]
167
+ }] } });
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGl0LW5vdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL2NyZWRpdC1ub3RlL2NyZWRpdC1ub3RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2UtYmlsbGluZy9jcmVkaXQtbm90ZS9jcmVkaXQtbm90ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFXLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFnQyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHNUgsT0FBTyxFQUEwQixVQUFVLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdqRixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQVExQyxNQUFNLE9BQU8sbUJBQW1CO0lBb0JyQjtJQUFvQztJQUF3QztJQUEwQztJQUF3QjtJQW5COUksUUFBUSxDQUFLO0lBQ3RCLFlBQVksQ0FBTTtJQUNsQixXQUFXLEdBQXNDLEVBQUUsQ0FBQztJQUNwRCxtQkFBbUIsR0FBVyxLQUFLLENBQUM7SUFDcEMsY0FBYyxDQUFZO0lBQzFCLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFDbkIsUUFBUSxDQUFNO0lBQ2QsYUFBYSxHQUFXLENBQUMsQ0FBQTtJQUN6QixrQkFBa0IsR0FBVyxLQUFLLENBQUE7SUFDbEMsUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUVmLGdCQUFnQixHQUFXLEVBQUUsQ0FBQTtJQUUxQixTQUFTLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDNUQsV0FBVyxDQUFN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QVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDcEcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN4QywyQ0FBMkM7Z0JBQzNDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUE7YUFDcEM7UUFBQSxDQUFDLEVBQ0YsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBR0QsZUFBZSxDQUFDLEtBQWlCO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQzt3R0FqSlUsbUJBQW1COzRGQUFuQixtQkFBbUIsME9DZGhDLG81T0EyRk07OzRGRDdFTyxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCO3FNQUtsQixRQUFRO3NCQUFoQixLQUFLO2dCQVdDLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFTSxTQUFTO3NCQUFsQixNQUFNO2dCQWlJUCxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsICBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uRGVzdHJveSwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgbGVmdCB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJpbGxpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmlsbGluZy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWNyZWRpdC1ub3RlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JlZGl0LW5vdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jcmVkaXQtbm90ZS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWRpdE5vdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBjbGllbnRJZDphbnk7XHJcbiAgaW52b2ljZUlzc3VlOiBhbnk7XHJcbiAgaW52b2ljZXR5cGU6IHsgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdOyBcclxuICBpbnZvaWNldHlwZWRyb3BEb3duOmJvb2xlYW4gPSBmYWxzZTtcclxuICBjcmVkaXRub3RlZm9ybTogRm9ybUdyb3VwO1xyXG4gIGFtb3VudDogbnVtYmVyID0gMDtcclxuICBkaXNjb3VudDogYW55O1xyXG4gIHJldmlzZWRBbW91bnQ6IG51bWJlciA9IDBcclxuICBtb3JlVGhhblRlblBlcmNlbnQ6Ym9vbGVhbiA9IGZhbHNlXHJcbiAgY3VycmVuY3k6IHN0cmluZyA9ICcnO1xyXG5cclxuQElucHV0KCkgdHJhbnNhY3Rpb252YWx1ZTogc3RyaW5nID0gXCJcIlxyXG5cclxuICBAT3V0cHV0KCkgcGFzc0VudHJ5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBpbnZvaWNlaXRlbTogYW55O1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxwcml2YXRlIEJpbGxpbmdTZXJ2aWNlOiBCaWxsaW5nU2VydmljZSwgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIscHJpdmF0ZSB0b2FzdDpUb2FzdFNlcnZpY2VcclxuICApIHsgXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlZGl0bm90ZSgpO1xyXG4gICAgdGhpcy5jcmVkaXRub3RlZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBpbnZvaWNldHlwZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgYW1vdW50OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLCBcclxuICAgICAgcmV2aXNlZEFtb3VudDpbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdICxcclxuICAgICAgZGlzY291bnQ6IFsnJyxbIFZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4KDEwKV1dLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNyZWRpdG5vdGVmb3JtLmdldCgncmV2aXNlZEFtb3VudCcpPy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZihlKSB7IFxyXG4gICAgICAgIHRoaXMuYW1vdW50ID0gdGhpcy5jcmVkaXRub3RlZm9ybS5nZXQoJ2Ftb3VudCcpPy52YWx1ZTtcclxuICAgICAgICB0aGlzLmRpc2NvdW50ID0gKCh0aGlzLmFtb3VudCAtIGUpIC8gdGhpcy5hbW91bnQgKiAxMDApLnRvRml4ZWQoMik7XHJcbiAgICAgICAgdGhpcy5yZXZpc2VkQW1vdW50PWU7XHJcbiAgICAgICAgaWYodGhpcy5kaXNjb3VudD4xMCB8fCBpc05hTihlKSB8fCB0aGlzLmRpc2NvdW50IDwgMCB8fCBlIDwgMCl7XHJcbiAgICAgICAgICB0aGlzLm1vcmVUaGFuVGVuUGVyY2VudCA9IHRydWU7IFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubW9yZVRoYW5UZW5QZXJjZW50ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3JlZGl0bm90ZWZvcm0uZ2V0KCdkaXNjb3VudCcpPy5zZXRWYWx1ZSh0aGlzLmRpc2NvdW50LCB7XHJcbiAgICAgICAgICBlbWl0RXZlbnRcclxuICAgICAgICAgICAgOiBmYWxzZSB9KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgbGV0IGVtcHRkaXNjb3VudCA9ICcnXHJcbiAgICAgICAgdGhpcy5jcmVkaXRub3RlZm9ybS5nZXQoJ2Rpc2NvdW50Jyk/LnNldFZhbHVlKGVtcHRkaXNjb3VudCwge1xyXG4gICAgICAgICAgZW1pdEV2ZW50XHJcbiAgICAgICAgICAgIDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB0aGlzLm1vcmVUaGFuVGVuUGVyY2VudCA9IGZhbHNlOyBcclxuICAgICAgfSBcclxuICAgIH0pXHJcbiAgICBcclxuICAgIHRoaXMuY3JlZGl0bm90ZWZvcm0uZ2V0KCdkaXNjb3VudCcpPy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZihlKSB7XHJcbiAgICAgICAgdGhpcy5hbW91bnQgPSB0aGlzLmNyZWRpdG5vdGVmb3JtLmdldCgnYW1vdW50Jyk/LnZhbHVlO1xyXG4gICAgICAgIHRoaXMucmV2aXNlZEFtb3VudCA9IHRoaXMuYW1vdW50ICogKDEgLSBlIC8gMTAwKTtcclxuICAgICAgICB0aGlzLnJldmlzZWRBbW91bnQgPSBwYXJzZUludCh0aGlzLnJldmlzZWRBbW91bnQudG9GaXhlZCgpKVxyXG4gICAgICAgIHRoaXMuZGlzY291bnQ9ZTtcclxuICAgICAgICBpZiAodGhpcy5kaXNjb3VudD4xMCB8fCBpc05hTihlKSB8fCBlIDwgMCB8fCB0aGlzLnJldmlzZWRBbW91bnQgPCAwKXtcclxuICAgICAgICAgIHRoaXMubW9yZVRoYW5UZW5QZXJjZW50ID0gdHJ1ZTsgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tb3JlVGhhblRlblBlcmNlbnQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcmVkaXRub3RlZm9ybS5nZXQoJ3JldmlzZWRBbW91bnQnKT8uc2V0VmFsdWUodGhpcy5yZXZpc2VkQW1vdW50LCB7XHJcbiAgICAgICAgICBlbWl0RXZlbnRcclxuICAgICAgICAgIDogZmFsc2UgfSk7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGxldCBlbXB0ZGlzY291bnQgPSAnJ1xyXG4gICAgICAgIHRoaXMuY3JlZGl0bm90ZWZvcm0uZ2V0KCdyZXZpc2VkQW1vdW50Jyk/LnNldFZhbHVlKGVtcHRkaXNjb3VudCwge1xyXG4gICAgICAgICAgZW1pdEV2ZW50XHJcbiAgICAgICAgICAgIDogZmFsc2UgfSk7XHJcbiAgICAgICAgdGhpcy5tb3JlVGhhblRlblBlcmNlbnQgPSBmYWxzZTsgXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgfSlcclxuICB9XHJcbiAgZ2V0IHJldmlzZWRhbW91bnQoKSB7IHJldHVybiB0aGlzLmNyZWRpdG5vdGVmb3JtLmdldCgncmV2aXNlZEFtb3VudCcpOyB9XHJcbiAgZ2V0IGRpc2NvdW50cygpIHsgcmV0dXJuIHRoaXMuY3JlZGl0bm90ZWZvcm0uZ2V0KCdkaXNjb3VudCcpOyB9XHJcbiAgXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBcclxuICBjcmVkaXRub3RlKCl7XHJcbiAgICBsZXQgcGF5bG9hZDphbnk9e1xyXG4gICAgICBjbGllbnRJZDp0aGlzLmNsaWVudElkXHJcbiAgICB9XHJcbiAgdGhpcy5CaWxsaW5nU2VydmljZS5wZW5kaW5nSW52b2ljZXMocGF5bG9hZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLmludm9pY2VpdGVtID0gcmVzPy5kYXRhO1xyXG4gICAgICAgIHRoaXMuaW52b2ljZUlzc3VlID0gdGhpcy5pbnZvaWNlaXRlbVswXT8uaW52b2ljZTtcclxuICAgICAgICBjb25zdCBhbW91bnQgPSB0aGlzLmludm9pY2VpdGVtWzBdPy5hbW91bnQgfHwgXCJcIjtcclxuICAgICAgICB0aGlzLmN1cnJlbmN5ID0gdGhpcy5pbnZvaWNlaXRlbVswXT8uY3VycmVuY3kgfHwgXCJcIjtcclxuICAgICAgICB0aGlzLmNyZWRpdG5vdGVmb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgYW1vdW50OiBhbW91bnQsXHJcbiAgICAgICAgICBkaXNjb3VudDp0aGlzLmludm9pY2VpdGVtPy5kaXNjb3VudFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gIH0pO1xyXG4gIH1cclxuXHJcbiAgaW52b2ljZUl0ZW0oaW52b2ljZXZhbHVlOmFueSl7XHJcbiAgICB0aGlzLmNyZWRpdG5vdGVmb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICBhbW91bnQ6IGludm9pY2V2YWx1ZS5hbW91bnQsXHJcbiAgICAgIC4uLihpbnZvaWNldmFsdWU/LmRpc2NvdW50ID8ge2Rpc2NvdW50Omludm9pY2V2YWx1ZT8uZGlzY291bnR9IDoge2Rpc2NvdW50OicnfSksXHJcbiAgICAgIC4uLihpbnZvaWNldmFsdWU/LnJldmlzZWRBbW91bnQgPyB7cmV2aXNlZEFtb3VudDppbnZvaWNldmFsdWU/LnJldmlzZWRBbW91bnR9IDoge3JldmlzZWRBbW91bnQ6Jyd9KVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmludm9pY2VJc3N1ZSA9IGludm9pY2V2YWx1ZS5pbnZvaWNlO1xyXG4gICAgdGhpcy5jcmVkaXRub3RlZm9ybS5nZXQoJ2ludm9pY2V0eXBlJyk/LnNldFZhbHVlKHRoaXMuaW52b2ljZUlzc3VlKVxyXG4gICAgdGhpcy5pbnZvaWNldHlwZWRyb3BEb3duID0gZmFsc2U7XHJcbiAgfVxyXG4gIGludm9pY2V0eXBlRHJvcGRvd24oZXZlbnQ6TW91c2VFdmVudCl7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuaW52b2ljZXR5cGVkcm9wRG93biA9ICF0aGlzLmludm9pY2V0eXBlZHJvcERvd247XHJcbiAgICB0aGlzLnJldmlzZWRBbW91bnQgICBcclxuICB9XHJcbiAgc3VjY2Vzc2NyZWRpdCgpIHtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhID0ge1xyXG4gICAgICBpbnZvaWNlOnRoaXMuaW52b2ljZUlzc3VlLFxyXG4gICAgICByZXZpc2VkQW1vdW50OnRoaXMucmV2aXNlZEFtb3VudCxcclxuICAgICAgZGlzY291bnQ6dGhpcy5kaXNjb3VudFxyXG4gICAgfTtcclxuICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UuYXBwbHlEaXNjb3VudChyZXF1ZXN0RGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnc3VjY2Vzc2NyZWRpdCcpO1xyXG4gICAgICAgIC8vIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KHJlcy5tZXNzYWdlKTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICB9fSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3VibWl0dGluZyB1cGRhdGU6JywgZXJyb3IpO1xyXG4gICAgICB9KVxyXG4gIH1cclxuICBcclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgIHRoaXMuaW52b2ljZXR5cGVkcm9wRG93biA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuIiwiPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTUgcHgtNlwiPlxyXG4gICAgICAgIDxkaXY+PGltZyBzcmM9XCIuL2Fzc2V0cy90YW5nby9jdXN0b21wb3B1cC1JY29ucy9wbHVzLWljb24uc3ZnXCIgYWx0PVwiXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmcgbXQtNCBtcy0xXCI+QWRkIENyZWRpdCBOb3RlPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnR0ZXh0IG10LTRcIj5cclxuICAgICAgICAgICAgWW91IGhhdmUgdGhlIGZsZXhpYmlsaXR5IHRvIHNlbGVjdCBhIG1vbnRoIGluIHdoaWNoIHRoZSBicmFuZCBjYW4gbWFrZSBjcmVkaXQgcGF5bWVudHMuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBtYi04XCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpGb3JtLS0+XHJcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjcmVkaXRub3RlZm9ybVwiIGNsYXNzPVwiZm9ybSBmdi1wbHVnaW5zLWJvb3RzdHJhcDUgZnYtcGx1Z2lucy1mcmFtZXdvcmtcIiBhY3Rpb249XCIjXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZ2LXJvdyBmdi1wbHVnaW5zLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImludm9pY2V0eXBlXCIgY2xhc3M9XCJoZWFkaW5ndGV4dCBtYi0yXCI+SW52b2ljZSBJRDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXNlbGVjdCBkcm9wc2VsZWN0XCIgaWQ9XCJpbnZvaWNldHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW52b2ljZXR5cGVEcm9wZG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWZhdWx0IHNlbGVjdCBleGFtcGxlXCI+e3tpbnZvaWNlSXNzdWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaW52b2ljZXR5cGVkcm9wRG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQgcHktMiB3LTEwMCBpbnZvaWNlaWRzZWxlY3QgcG9zaXRpb24tYWJzb2x1dGUgZW5kLTAgei0xIGludm9pY2VEcm9wRG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsICpuZ0Zvcj1cImxldCBpdGVtIG9mIGludm9pY2VpdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ0aGlzLmludm9pY2VJc3N1ZSA9PT0gaXRlbT8uaW52b2ljZSA/ICdhY3RpdmUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2R1Y3R0ZXh0IHB4LTUgaXRlbXMgY3Vyc29yLXBvaW50ZXIgcHktNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbnZvaWNlSXRlbShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/Lmludm9pY2V9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmb3I9XCJhbW91bnRcIiBjbGFzcz1cImZvcm0tZ3JvdXAgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIiBoZWFkaW5ndGV4dCBtYi0yIFwiPlRvdGFsIEFtb3VudDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3VycmVuY3kgPT09ICdpbnInXCIgY2xhc3M9XCJkb2xsYXItc2lnblwiPuKCuTwvc3Bhbj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbmN5ID09PSAnZG9sbGFyJ1wiIGNsYXNzPVwiZG9sbGFyLXNpZ25cIj4kPC9zcGFuPjxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhbW91bnRcIiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IGNsYXNzPVwibmctcHJpc3RpbmUgbmctaW52YWxpZCBuZy10b3VjaGVkIGFtb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZvcj1cInJldmlzZWRBbW91bnRcIiBjbGFzcz1cImZvcm0tZ3JvdXAgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIiBoZWFkaW5ndGV4dCBtYi0yXCI+IFJldmlzZWQgQW1vdW50PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGRyb3BzZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY3VycmVuY3kgPT09ICdpbnInXCIgY2xhc3M9XCJkb2xsYXItc2lnblwiPuKCuTwvc3Bhbj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW5jeSA9PT0gJ2RvbGxhcidcIiBjbGFzcz1cImRvbGxhci1zaWduXCI+JDwvc3Bhbj48aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJyZXZpc2VkQW1vdW50XCIgIFtuZ0NsYXNzXT1cIm1vcmVUaGFuVGVuUGVyY2VudCA/ICdlcnJvcmlucHV0JyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIiAqbmdJZj1cIm1vcmVUaGFuVGVuUGVyY2VudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNzUxM18zNjY4OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcuOTk5NjcgNS4zMzMwMVY3Ljk5OTY3TTcuOTk5NjcgMTAuNjY2M0g4LjAwNjM0TTE0LjY2NjMgNy45OTk2N0MxNC42NjYzIDExLjY4MTYgMTEuNjgxNiAxNC42NjYzIDcuOTk5NjcgMTQuNjY2M0M0LjMxNzc4IDE0LjY2NjMgMS4zMzMwMSAxMS42ODE2IDEuMzMzMDEgNy45OTk2N0MxLjMzMzAxIDQuMzE3NzggNC4zMTc3OCAxLjMzMzAxIDcuOTk5NjcgMS4zMzMwMUMxMS42ODE2IDEuMzMzMDEgMTQuNjY2MyA0LjMxNzc4IDE0LjY2NjMgNy45OTk2N1pcIiBzdHJva2U9XCIjRjA0NDM4XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNzUxM18zNjY4OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbW9yZVRoYW5UZW5QZXJjZW50XCIgIGNsYXNzPVwiaGVhZGluZ3RleHQgY29udGVudHRleHRcIj5Nb3JlIHRoYW4gMTAlIGNhbuKAmXQgYmUgcmV2aXNlZCBmcm9tIHRvdGFsIGFtb3VudDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1vcmVUaGFuVGVuUGVyY2VudFwiIGNsYXNzPVwidGV4dC1kYW5nZXIgY29udGVudHRleHRcIj5Nb3JlIHRoYW4gMTAlIGNhbuKAmXQgYmUgcmV2aXNlZCBmcm9tIHRvdGFsIGFtb3VudDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmb3I9XCJkaXNjb3VudFwiIGNsYXNzPVwiZm9ybS1ncm91cCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIiBoZWFkaW5ndGV4dCBtYi0yXCI+IERpc2NvdW50PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj4gIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImRpc2NvdW50XCIgY2xhc3M9XCJhbW91bnRcIiBbbmdDbGFzc109XCJtb3JlVGhhblRlblBlcmNlbnQgPyAnZXJyb3JpbnB1dCcgOiAnJ1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCIgKm5nSWY9XCIhbW9yZVRoYW5UZW5QZXJjZW50XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMi42NjcgMy4zMzM2NkwzLjMzMzY2IDEyLjY2N002LjAwMDMzIDQuMzMzNjZDNi4wMDAzMyA1LjI1NDEzIDUuMjU0MTMgNi4wMDAzMyA0LjMzMzY2IDYuMDAwMzNDMy40MTMxOCA2LjAwMDMzIDIuNjY2OTkgNS4yNTQxMyAyLjY2Njk5IDQuMzMzNjZDMi42NjY5OSAzLjQxMzE4IDMuNDEzMTggMi42NjY5OSA0LjMzMzY2IDIuNjY2OTlDNS4yNTQxMyAyLjY2Njk5IDYuMDAwMzMgMy40MTMxOCA2LjAwMDMzIDQuMzMzNjZaTTEzLjMzMzcgMTEuNjY3QzEzLjMzMzcgMTIuNTg3NSAxMi41ODc1IDEzLjMzMzcgMTEuNjY3IDEzLjMzMzdDMTAuNzQ2NSAxMy4zMzM3IDEwLjAwMDMgMTIuNTg3NSAxMC4wMDAzIDExLjY2N0MxMC4wMDAzIDEwLjc0NjUgMTAuNzQ2NSAxMC4wMDAzIDExLjY2NyAxMC4wMDAzQzEyLjU4NzUgMTAuMDAwMyAxMy4zMzM3IDEwLjc0NjUgMTMuMzMzNyAxMS42NjdaXCIgc3Ryb2tlPVwiIzk4QTJCM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCIgKm5nSWY9XCJtb3JlVGhhblRlblBlcmNlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyLjY2NyAzLjMzMzY2TDMuMzMzNjYgMTIuNjY3TTYuMDAwMzMgNC4zMzM2NkM2LjAwMDMzIDUuMjU0MTMgNS4yNTQxMyA2LjAwMDMzIDQuMzMzNjYgNi4wMDAzM0MzLjQxMzE4IDYuMDAwMzMgMi42NjY5OSA1LjI1NDEzIDIuNjY2OTkgNC4zMzM2NkMyLjY2Njk5IDMuNDEzMTggMy40MTMxOCAyLjY2Njk5IDQuMzMzNjYgMi42NjY5OUM1LjI1NDEzIDIuNjY2OTkgNi4wMDAzMyAzLjQxMzE4IDYuMDAwMzMgNC4zMzM2NlpNMTMuMzMzNyAxMS42NjdDMTMuMzMzNyAxMi41ODc1IDEyLjU4NzUgMTMuMzMzNyAxMS42NjcgMTMuMzMzN0MxMC43NDY1IDEzLjMzMzcgMTAuMDAwMyAxMi41ODc1IDEwLjAwMDMgMTEuNjY3QzEwLjAwMDMgMTAuNzQ2NSAxMC43NDY1IDEwLjAwMDMgMTEuNjY3IDEwLjAwMDNDMTIuNTg3NSAxMC4wMDAzIDEzLjMzMzcgMTAuNzQ2NSAxMy4zMzM3IDExLjY2N1pcIiBzdHJva2U9XCIjRjA0NDM4XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbW9yZVRoYW5UZW5QZXJjZW50XCIgIGNsYXNzPVwiaGVhZGluZ3RleHQgY29udGVudHRleHRcIj5JbiBwZXJjZW50YWdlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtb3JlVGhhblRlblBlcmNlbnRcIiBjbGFzcz1cInRleHQtZGFuZ2VyIGNvbnRlbnR0ZXh0XCI+SW4gcGVyY2VudGFnZTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cImFjdGl2ZU1vZGFsLmRpc21pc3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gY2FuY2VsIG1lLTQgdy01MFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwibW9yZVRoYW5UZW5QZXJjZW50XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzdWNjZXNzY3JlZGl0KClcIiB0YWJpbmRleD1cIjBcIiBcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IG5nLXN0YXItaW5zZXJ0ZWQgdy01MFwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN1Ym1pdFwiPkFwcGx5IDwvc3Bhbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==