tango-app-ui-manage-billing 3.3.20 → 3.3.21
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/lib/components/billing-summary/billing-summary.component.mjs +25 -17
- package/esm2022/lib/components/brand-invoices/brand-invoices.component.mjs +5 -4
- package/esm2022/lib/components/daily-pricing/daily-pricing.component.mjs +9 -5
- package/esm2022/lib/components/daily-pricing/generate-invoice-modal/generate-invoice-modal.component.mjs +3 -3
- package/esm2022/lib/components/invoice-preview/invoice-preview.component.mjs +3 -3
- package/esm2022/lib/components/purchase-order/purchase-order-details/purchase-order-details.component.mjs +62 -0
- package/esm2022/lib/components/purchase-order/purchase-order-form/purchase-order-form.component.mjs +87 -0
- package/esm2022/lib/components/purchase-order/purchase-order.component.mjs +104 -0
- package/esm2022/lib/components/services/billing.service.mjs +9 -1
- package/esm2022/lib/components/tango-manage-billing/edit-invoice/edit-invoice.component.mjs +25 -3
- package/esm2022/lib/tango-manage-billing.module.mjs +10 -1
- package/fesm2022/tango-app-ui-manage-billing.mjs +394 -118
- package/fesm2022/tango-app-ui-manage-billing.mjs.map +1 -1
- package/lib/components/billing-summary/billing-summary.component.d.ts +1 -0
- package/lib/components/purchase-order/purchase-order-details/purchase-order-details.component.d.ts +18 -0
- package/lib/components/purchase-order/purchase-order-form/purchase-order-form.component.d.ts +25 -0
- package/lib/components/purchase-order/purchase-order.component.d.ts +28 -0
- package/lib/components/services/billing.service.d.ts +2 -0
- package/lib/components/tango-manage-billing/edit-invoice/edit-invoice.component.d.ts +2 -0
- package/lib/tango-manage-billing.module.d.ts +28 -25
- package/package.json +1 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import { PurchaseOrderFormComponent } from './purchase-order-form/purchase-order-form.component';
|
|
4
|
+
import { PurchaseOrderDetailsComponent } from './purchase-order-details/purchase-order-details.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../services/billing.service";
|
|
7
|
+
import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
8
|
+
import * as i3 from "tango-app-ui-shared";
|
|
9
|
+
import * as i4 from "@angular/common";
|
|
10
|
+
export class PurchaseOrderComponent {
|
|
11
|
+
billingService;
|
|
12
|
+
modalService;
|
|
13
|
+
toast;
|
|
14
|
+
changeDetector;
|
|
15
|
+
clientId = '';
|
|
16
|
+
orders = [];
|
|
17
|
+
loading = true;
|
|
18
|
+
noData = false;
|
|
19
|
+
destroy$ = new Subject();
|
|
20
|
+
constructor(billingService, modalService, toast, changeDetector) {
|
|
21
|
+
this.billingService = billingService;
|
|
22
|
+
this.modalService = modalService;
|
|
23
|
+
this.toast = toast;
|
|
24
|
+
this.changeDetector = changeDetector;
|
|
25
|
+
}
|
|
26
|
+
ngOnInit() {
|
|
27
|
+
if (this.clientId) {
|
|
28
|
+
this.loadOrders();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
ngOnChanges(changes) {
|
|
32
|
+
if (changes['clientId'] && !changes['clientId'].firstChange && this.clientId) {
|
|
33
|
+
this.loadOrders();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
ngOnDestroy() {
|
|
37
|
+
this.destroy$.next(true);
|
|
38
|
+
this.destroy$.complete();
|
|
39
|
+
}
|
|
40
|
+
loadOrders() {
|
|
41
|
+
this.loading = true;
|
|
42
|
+
this.noData = false;
|
|
43
|
+
this.billingService.getPurchaseOrders(this.clientId).pipe(takeUntil(this.destroy$)).subscribe({
|
|
44
|
+
next: (res) => {
|
|
45
|
+
this.orders = res?.data?.purchaseOrders || [];
|
|
46
|
+
this.noData = this.orders.length === 0;
|
|
47
|
+
this.loading = false;
|
|
48
|
+
this.changeDetector.detectChanges();
|
|
49
|
+
},
|
|
50
|
+
error: () => {
|
|
51
|
+
this.orders = [];
|
|
52
|
+
this.noData = true;
|
|
53
|
+
this.loading = false;
|
|
54
|
+
this.changeDetector.detectChanges();
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
addPurchaseOrder() {
|
|
59
|
+
const modalRef = this.modalService.open(PurchaseOrderFormComponent, {
|
|
60
|
+
centered: true, scrollable: true,
|
|
61
|
+
});
|
|
62
|
+
modalRef.componentInstance.clientId = this.clientId;
|
|
63
|
+
modalRef.result.then((result) => {
|
|
64
|
+
if (result === 'success') {
|
|
65
|
+
this.loadOrders();
|
|
66
|
+
}
|
|
67
|
+
}, () => { });
|
|
68
|
+
}
|
|
69
|
+
// Human-readable status label.
|
|
70
|
+
statusLabel(status) {
|
|
71
|
+
if (status === 'fullyUsed')
|
|
72
|
+
return 'Fully Used';
|
|
73
|
+
if (status === 'partiallyUsed')
|
|
74
|
+
return 'Partially Used';
|
|
75
|
+
return 'Open';
|
|
76
|
+
}
|
|
77
|
+
statusClass(status) {
|
|
78
|
+
if (status === 'fullyUsed')
|
|
79
|
+
return 'badge badge-light-danger';
|
|
80
|
+
if (status === 'partiallyUsed')
|
|
81
|
+
return 'badge badge-light-warning';
|
|
82
|
+
return 'badge badge-light-success';
|
|
83
|
+
}
|
|
84
|
+
// Invoice numbers that consumed this PO (for the "invoices used" column).
|
|
85
|
+
usedInvoices(order) {
|
|
86
|
+
return (order?.usage || []).map((u) => u.invoice).filter(Boolean).join(', ');
|
|
87
|
+
}
|
|
88
|
+
// Open the usage-details popup (usage rows + clickable invoice previews).
|
|
89
|
+
viewDetails(order) {
|
|
90
|
+
const modalRef = this.modalService.open(PurchaseOrderDetailsComponent, {
|
|
91
|
+
centered: true, size: 'lg', scrollable: true,
|
|
92
|
+
});
|
|
93
|
+
modalRef.componentInstance.order = order;
|
|
94
|
+
}
|
|
95
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PurchaseOrderComponent, deps: [{ token: i1.BillingService }, { token: i2.NgbModal }, { token: i3.ToastService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
96
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PurchaseOrderComponent, selector: "lib-purchase-order", inputs: { clientId: "clientId" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"invoices-section\">\n <div class=\"d-flex justify-content-between align-items-center mb-3\">\n <div class=\"d-flex align-items-center gap-2\">\n <span class=\"billingheader\">Purchase Orders</span>\n <span class=\"badge bg-light text-dark ms-1\">{{ orders.length }} total</span>\n </div>\n <button type=\"button\" (click)=\"addPurchaseOrder()\" class=\"btn btn-primary text-nowrap\">\n <span class=\"ms-1\">Add Purchase Order</span>\n </button>\n </div>\n\n <div *ngIf=\"loading\" class=\"text-muted py-4\">Loading\u2026</div>\n\n <div *ngIf=\"!loading\" class=\"table-responsive\">\n <table class=\"table accordion table bottom-border text-nowrap\">\n <thead>\n <tr>\n <th>Company Name</th>\n <th>PO Number</th>\n <th class=\"text-end\">Total Amount</th>\n <th class=\"text-end\">Remaining</th>\n <th>Date</th>\n <th>Status</th>\n <th>Invoices Used</th>\n <th class=\"text-center\">Action</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let o of orders\">\n <td>{{ o.companyName || '\u2014' }}</td>\n <td><strong>{{ o.purchaseOrderNumber }}</strong></td>\n <td class=\"text-end\">\u20B9{{ o.totalAmount | number:'1.2-2':'en-IN' }}</td>\n <td class=\"text-end\">\u20B9{{ o.remainingAmount | number:'1.2-2':'en-IN' }}</td>\n <td>{{ o.date | date: 'dd MMM yyyy' }}</td>\n <td><span [ngClass]=\"statusClass(o.status)\">{{ statusLabel(o.status) }}</span></td>\n <td>\n <span *ngIf=\"usedInvoices(o)\">{{ usedInvoices(o) }}</span>\n <span *ngIf=\"!usedInvoices(o)\" class=\"text-muted\">\u2014</span>\n </td>\n <td class=\"text-center\">\n <span class=\"cursor-pointer\" (click)=\"viewDetails(o)\" title=\"View details\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z\" stroke=\"#667085\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"#667085\" stroke-width=\"1.6\"/>\n </svg>\n </span>\n </td>\n </tr>\n <tr *ngIf=\"noData\">\n <td colspan=\"8\" class=\"text-center text-muted py-5\">No purchase orders yet.</td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>", styles: [".billingheader{font-size:16px;font-weight:700;color:#101828}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
|
|
97
|
+
}
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PurchaseOrderComponent, decorators: [{
|
|
99
|
+
type: Component,
|
|
100
|
+
args: [{ selector: 'lib-purchase-order', template: "<div class=\"invoices-section\">\n <div class=\"d-flex justify-content-between align-items-center mb-3\">\n <div class=\"d-flex align-items-center gap-2\">\n <span class=\"billingheader\">Purchase Orders</span>\n <span class=\"badge bg-light text-dark ms-1\">{{ orders.length }} total</span>\n </div>\n <button type=\"button\" (click)=\"addPurchaseOrder()\" class=\"btn btn-primary text-nowrap\">\n <span class=\"ms-1\">Add Purchase Order</span>\n </button>\n </div>\n\n <div *ngIf=\"loading\" class=\"text-muted py-4\">Loading\u2026</div>\n\n <div *ngIf=\"!loading\" class=\"table-responsive\">\n <table class=\"table accordion table bottom-border text-nowrap\">\n <thead>\n <tr>\n <th>Company Name</th>\n <th>PO Number</th>\n <th class=\"text-end\">Total Amount</th>\n <th class=\"text-end\">Remaining</th>\n <th>Date</th>\n <th>Status</th>\n <th>Invoices Used</th>\n <th class=\"text-center\">Action</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let o of orders\">\n <td>{{ o.companyName || '\u2014' }}</td>\n <td><strong>{{ o.purchaseOrderNumber }}</strong></td>\n <td class=\"text-end\">\u20B9{{ o.totalAmount | number:'1.2-2':'en-IN' }}</td>\n <td class=\"text-end\">\u20B9{{ o.remainingAmount | number:'1.2-2':'en-IN' }}</td>\n <td>{{ o.date | date: 'dd MMM yyyy' }}</td>\n <td><span [ngClass]=\"statusClass(o.status)\">{{ statusLabel(o.status) }}</span></td>\n <td>\n <span *ngIf=\"usedInvoices(o)\">{{ usedInvoices(o) }}</span>\n <span *ngIf=\"!usedInvoices(o)\" class=\"text-muted\">\u2014</span>\n </td>\n <td class=\"text-center\">\n <span class=\"cursor-pointer\" (click)=\"viewDetails(o)\" title=\"View details\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z\" stroke=\"#667085\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"#667085\" stroke-width=\"1.6\"/>\n </svg>\n </span>\n </td>\n </tr>\n <tr *ngIf=\"noData\">\n <td colspan=\"8\" class=\"text-center text-muted py-5\">No purchase orders yet.</td>\n </tr>\n </tbody>\n </table>\n </div>\n</div>", styles: [".billingheader{font-size:16px;font-weight:700;color:#101828}\n"] }]
|
|
101
|
+
}], ctorParameters: () => [{ type: i1.BillingService }, { type: i2.NgbModal }, { type: i3.ToastService }, { type: i0.ChangeDetectorRef }], propDecorators: { clientId: [{
|
|
102
|
+
type: Input
|
|
103
|
+
}] } });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyY2hhc2Utb3JkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL3B1cmNoYXNlLW9yZGVyL3B1cmNoYXNlLW9yZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy9wdXJjaGFzZS1vcmRlci9wdXJjaGFzZS1vcmRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQStDLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzFDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDOzs7Ozs7QUFPMUcsTUFBTSxPQUFPLHNCQUFzQjtJQVV2QjtJQUNBO0lBQ0E7SUFDQTtJQVpELFFBQVEsR0FBVyxFQUFFLENBQUM7SUFFL0IsTUFBTSxHQUFVLEVBQUUsQ0FBQztJQUNuQixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLE1BQU0sR0FBWSxLQUFLLENBQUM7SUFFUCxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUUxQyxZQUNVLGNBQThCLEVBQzlCLFlBQXNCLEVBQ3RCLEtBQW1CLEVBQ25CLGNBQWlDO1FBSGpDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtJQUN4QyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUks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LEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCwwRUFBMEU7SUFDMUUsV0FBVyxDQUFDLEtBQVU7UUFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7WUFDckUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJO1NBQzdDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQzNDLENBQUM7d0dBeEZVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLGlIQ2JuQyxrNUZBc0RNOzs0RkR6Q08sc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQjtxS0FLckIsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XG5pbXBvcnQgeyBCaWxsaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBQdXJjaGFzZU9yZGVyRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vcHVyY2hhc2Utb3JkZXItZm9ybS9wdXJjaGFzZS1vcmRlci1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQdXJjaGFzZU9yZGVyRGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vcHVyY2hhc2Utb3JkZXItZGV0YWlscy9wdXJjaGFzZS1vcmRlci1kZXRhaWxzLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1wdXJjaGFzZS1vcmRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wdXJjaGFzZS1vcmRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9wdXJjaGFzZS1vcmRlci5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgUHVyY2hhc2VPcmRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBjbGllbnRJZDogc3RyaW5nID0gJyc7XG5cbiAgb3JkZXJzOiBhbnlbXSA9IFtdO1xuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgbm9EYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBiaWxsaW5nU2VydmljZTogQmlsbGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsaWVudElkKSB7XG4gICAgICB0aGlzLmxvYWRPcmRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NsaWVudElkJ10gJiYgIWNoYW5nZXNbJ2NsaWVudElkJ10uZmlyc3RDaGFuZ2UgJiYgdGhpcy5jbGllbnRJZCkge1xuICAgICAgdGhpcy5sb2FkT3JkZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGxvYWRPcmRlcnMoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm5vRGF0YSA9IGZhbHNlO1xuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuZ2V0UHVyY2hhc2VPcmRlcnModGhpcy5jbGllbnRJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vcmRlcnMgPSByZXM/LmRhdGE/LnB1cmNoYXNlT3JkZXJzIHx8IFtdO1xuICAgICAgICB0aGlzLm5vRGF0YSA9IHRoaXMub3JkZXJzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMub3JkZXJzID0gW107XG4gICAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFB1cmNoYXNlT3JkZXIoKSB7XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFB1cmNoYXNlT3JkZXJGb3JtQ29tcG9uZW50LCB7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgc2Nyb2xsYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgdGhpcy5sb2FkT3JkZXJzKCk7XG4gICAgICB9XG4gICAgfSwgKCkgPT4ge30pO1xuICB9XG5cbiAgLy8gSHVtYW4tcmVhZGFibGUgc3RhdHVzIGxhYmVsLlxuICBzdGF0dXNMYWJlbChzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHN0YXR1cyA9PT0gJ2Z1bGx5VXNlZCcpIHJldHVybiAnRnVsbHkgVXNlZCc7XG4gICAgaWYgKHN0YXR1cyA9PT0gJ3BhcnRpYWxseVVzZWQnKSByZXR1cm4gJ1BhcnRpYWxseSBVc2VkJztcbiAgICByZXR1cm4gJ09wZW4nO1xuICB9XG5cbiAgc3RhdHVzQ2xhc3Moc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChzdGF0dXMgPT09ICdmdWxseVVzZWQnKSByZXR1cm4gJ2JhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlcic7XG4gICAgaWYgKHN0YXR1cyA9PT0gJ3BhcnRpYWxseVVzZWQnKSByZXR1cm4gJ2JhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmcnO1xuICAgIHJldHVybiAnYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2Vzcyc7XG4gIH1cblxuICAvLyBJbnZvaWNlIG51bWJlcnMgdGhhdCBjb25zdW1lZCB0aGlzIFBPIChmb3IgdGhlIFwiaW52b2ljZXMgdXNlZFwiIGNvbHVtbikuXG4gIHVzZWRJbnZvaWNlcyhvcmRlcjogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gKG9yZGVyPy51c2FnZSB8fCBbXSkubWFwKCh1OiBhbnkpID0+IHUuaW52b2ljZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJyk7XG4gIH1cblxuICAvLyBPcGVuIHRoZSB1c2FnZS1kZXRhaWxzIHBvcHVwICh1c2FnZSByb3dzICsgY2xpY2thYmxlIGludm9pY2UgcHJldmlld3MpLlxuICB2aWV3RGV0YWlscyhvcmRlcjogYW55KSB7XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFB1cmNoYXNlT3JkZXJEZXRhaWxzQ29tcG9uZW50LCB7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ2xnJywgc2Nyb2xsYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5vcmRlciA9IG9yZGVyO1xuICB9XG59IiwiPGRpdiBjbGFzcz1cImludm9pY2VzLXNlY3Rpb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJpbGxpbmdoZWFkZXJcIj5QdXJjaGFzZSBPcmRlcnM8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtZGFyayBtcy0xXCI+e3sgb3JkZXJzLmxlbmd0aCB9fSB0b3RhbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhZGRQdXJjaGFzZU9yZGVyKClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0xXCI+QWRkIFB1cmNoYXNlIE9yZGVyPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJ0ZXh0LW11dGVkIHB5LTRcIj5Mb2FkaW5n4oCmPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmdcIiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWNjb3JkaW9uIHRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5Db21wYW55IE5hbWU8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+UE8gTnVtYmVyPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1lbmRcIj5Ub3RhbCBBbW91bnQ8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWVuZFwiPlJlbWFpbmluZzwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5EYXRlPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPlN0YXR1czwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5JbnZvaWNlcyBVc2VkPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5BY3Rpb248L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgbyBvZiBvcmRlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7IG8uY29tcGFueU5hbWUgfHwgJ+KAlCcgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+PHN0cm9uZz57eyBvLnB1cmNoYXNlT3JkZXJOdW1iZXIgfX08L3N0cm9uZz48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWVuZFwiPuKCuXt7IG8udG90YWxBbW91bnQgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1lbmRcIj7igrl7eyBvLnJlbWFpbmluZ0Ftb3VudCB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgby5kYXRlIHwgZGF0ZTogJ2RkIE1NTSB5eXl5JyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBbbmdDbGFzc109XCJzdGF0dXNDbGFzcyhvLnN0YXR1cylcIj57eyBzdGF0dXNMYWJlbChvLnN0YXR1cykgfX08L3NwYW4+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ1c2VkSW52b2ljZXMobylcIj57eyB1c2VkSW52b2ljZXMobykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF1c2VkSW52b2ljZXMobylcIiBjbGFzcz1cInRleHQtbXV0ZWRcIj7igJQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInZpZXdEZXRhaWxzKG8pXCIgdGl0bGU9XCJWaWV3IGRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yIDEyczMuNS03IDEwLTcgMTAgNyAxMCA3LTMuNSA3LTEwIDctMTAtNy0xMC03WlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiM1wiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjZcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJub0RhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI4XCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LW11dGVkIHB5LTVcIj5ObyBwdXJjaGFzZSBvcmRlcnMgeWV0LjwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
|
|
@@ -280,6 +280,14 @@ export class BillingService {
|
|
|
280
280
|
getAllBillingGroups(clientId) {
|
|
281
281
|
return this.http.get(`${this.billingApiUrl}/get-all-billing-groups?clientId=${clientId}`);
|
|
282
282
|
}
|
|
283
|
+
// ===== Purchase Orders (brand-view Purchase Order tab) =====
|
|
284
|
+
getPurchaseOrders(clientId) {
|
|
285
|
+
return this.http.get(`${this.billingApiUrl}/purchase-orders?clientId=${clientId}`);
|
|
286
|
+
}
|
|
287
|
+
createPurchaseOrder(data) {
|
|
288
|
+
// data is FormData (may include a PO PDF file).
|
|
289
|
+
return this.http.post(`${this.billingApiUrl}/purchase-orders`, data);
|
|
290
|
+
}
|
|
283
291
|
// ===== Payment Reminders (Billing Settings) =====
|
|
284
292
|
getPaymentReminder(clientId) {
|
|
285
293
|
return this.http.get(`${this.billingApiUrl}/payment-reminder/${clientId}`);
|
|
@@ -347,4 +355,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
347
355
|
providedIn: 'root'
|
|
348
356
|
}]
|
|
349
357
|
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.GlobalStateService }] });
|
|
350
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQThCLE1BQU0sTUFBTSxDQUFDO0FBQ25HLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDOzs7O0FBRTdCLE1BQU0sVUFBVSxHQUFHLGlGQUFpRixDQUFDO0FBQ3JHLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQztBQU1oQyxNQUFNLE9BQU8sY0FBYztJQVdMO0lBQTBCO0lBVjlDLGFBQWEsQ0FBUTtJQUNyQix5QkFBeUIsQ0FBSztJQUV0QixpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNoRSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXBELHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFNLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ3JGLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQTtJQUNoRCxhQUFhLENBQU07SUFDbkIsbUJBQW1CLENBQU07SUFDekIsWUFBb0IsSUFBZ0IsRUFBVSxFQUFzQjtRQUFoRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDbEUsSUFBSSxDQUFDLEVBQUUsQ0FB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QTtJQUM3RSxDQUFDO0lBQ0QsYUFBYSxDQUFDLFNBQWlCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxrQkFBa0IsU0FBUyxFQUFFLENBQUMsQ0FBQTtJQUM3RSxDQUFDO3dHQXhWWSxjQUFjOzRHQUFkLGNBQWMsY0FGYixNQUFNOzs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSxPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGFrZVVudGlsLCBjYXRjaEVycm9yLCBtYXAsdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcblxuY29uc3QgRVhDRUxfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbmNvbnN0IEVYQ0VMX0VYVEVOU0lPTiA9ICcueGxzeCc7XG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcbiBcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJpbGxpbmdTZXJ2aWNlIHtcbiAgaW52b2ljZUFwaVVybDpzdHJpbmc7XG4gIHBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmw6YW55O1xuXG4gIHByaXZhdGUgcmVsb2FkRGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVsb2FkRGF0YSQgPSB0aGlzLnJlbG9hZERhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHBheW1lbnRpbnZvaWNlRm9ybURhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe3ZhbHVlOm51bGwsIHR5cGU6bnVsbCwgZm9ybTpudWxsfSlcbiAgZHJvcERvd25UcmlnZ2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpXG4gIGJpbGxpbmdBcGlVcmw6IGFueTtcbiAgYnJhbmRzQmlsbGluZ0FwaVVybDogYW55O1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSkge1xuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZW52KSA9PiB7XG4gICAgICBpZiAoZW52KSB7XG4gICAgICAgIHRoaXMucGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybCA9IGVudi5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsO1xuICAgICAgICB0aGlzLmludm9pY2VBcGlVcmwgPSBlbnYuaW52b2ljZUFwaVVybFxuICAgICAgICB0aGlzLmJpbGxpbmdBcGlVcmwgPSBlbnYuYmlsbGluZ0FwaVVybFxuICAgICAgICB0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmwgPSBlbnYuYnJhbmRzQmlsbGluZ0FwaVVybFxuXG4gICAgICAgIC8vIHRoaXMuY2xpZW50SWQubmV4dCgnMTEnKVxuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHRoaXMuZ3Muc2VsZWN0ZWRDbGllbnQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZTphbnkpPT57XG4gICAgLy8gICBpZihlKXtcbiAgICAvLyAgICAgY29uc29sZS5sb2coZSwnZScpO1xuICAgIC8vICAgfVxuICAgIC8vIH0pXG4gIH1cbiAgdHJpZ2dlclJlbG9hZCgpIHtcbiAgICB0aGlzLnJlbG9hZERhdGFTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gIH1cblxuICBcbiAgcHVibGljIGV4cG9ydEFzRXhjZWxGaWxlKGpzb246IGFueVtdLCBleGNlbEZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB3b3Jrc2hlZXQ6IFhMU1guV29ya1NoZWV0ID0gWExTWC51dGlscy5qc29uX3RvX3NoZWV0KGpzb24pO1xuICAgIGNvbnN0IHdvcmtib29rOiBYTFNYLldvcmtCb29rID0geyBTaGVldHM6IHsgJ2RhdGEnOiB3b3Jrc2hlZXQgfSwgU2hlZXROYW1lczogWydkYXRhJ10gfTtcbiAgICBjb25zdCBleGNlbEJ1ZmZlcjogYW55ID0gWExTWC53cml0ZSh3b3JrYm9vaywgeyBib29rVHlwZTogJ3hsc3gnLCB0eXBlOiAnYXJyYXknIH0pO1xuICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCBleGNlbEZpbGVOYW1lKTtcbiAgfVxuIFxuICBwdWJsaWMgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XG4gICAgICB0eXBlOiBFWENFTF9UWVBFXG4gICAgfSk7XG4gICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCBmaWxlTmFtZSArICdsaXN0JysgRVhDRUxfRVhURU5TSU9OKTtcbiAgfVxuIFxuICBwdWJsaWMgc2F2ZUFzVGVtcGxhdGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcbiAgICAgIHR5cGU6IEVYQ0VMX1RZUEVcbiAgICB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIGZpbGVOYW1lICsgRVhDRUxfRVhURU5TSU9OKTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuLy8gbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4vLyAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbi8vICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuLy8gfVxuLy8gPT09PT0gRXN0aW1hdGVzIChFc3RpbWF0ZSB0YWIpID09PT09XG5lc3RpbWF0ZUxpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vZXN0aW1hdGUvbGlzdGAsIGRhdGEpXG59XG5lc3RpbWF0ZUxpc3RFeHBvcnQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vZXN0aW1hdGUvbGlzdGAsIGRhdGEsIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXG59XG5jcmVhdGVFc3RpbWF0ZShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9jcmVhdGVgLCBkYXRhKVxufVxudXBkYXRlRXN0aW1hdGUoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vZXN0aW1hdGUvdXBkYXRlYCwgZGF0YSlcbn1cbmdldEVzdGltYXRlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlLyR7aWR9YClcbn1cbmVzdGltYXRlU3RhdHVzVXBkYXRlKGRhdGE6IHsgZXN0aW1hdGVJZDogc3RyaW5nOyBzdGF0dXM6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vZXN0aW1hdGUvc3RhdHVzVXBkYXRlYCwgZGF0YSlcbn1cbnNlbmRFc3RpbWF0ZShlc3RpbWF0ZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9zZW5kYCwgeyBlc3RpbWF0ZUlkIH0pXG59XG5kZWxldGVFc3RpbWF0ZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS8ke2lkfWApXG59XG5kb3dubG9hZEVzdGltYXRlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9kb3dubG9hZC8ke2lkfWAsIHt9LCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxufVxuaW52b2ljZVRhYmxlRGF0YSggZGF0YTphbnkpOk9ic2VydmFibGU8YW55PntcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vY2xpZW50SW52b2ljZUxpc3RgLCBkYXRhKVxufVxudXBkYXRlQ2xpZW50RmlsdGVycyhmaWx0ZXJzOmFueSl7XG4gIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChmaWx0ZXJzKTtcbn1cbmludm9pY2VUYWJsZURhdGFFeHBvcnQoIGRhdGE6YW55KTpPYnNlcnZhYmxlPGFueT57XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2NsaWVudEludm9pY2VMaXN0YCwgZGF0YSwge3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXG59XG5jbGllbnRCaWxsaW5nSW5mbyhwYXJhbXM/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwXG4gICAgLmdldChgJHt0aGlzLnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmx9L2NsaWVudEJpbGxpbmdTdWJzY3JpcHRpb25JbmZvLyR7cGFyYW1zfWApXG59XG5pbnZvaWNlRG93bmxvYWQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vaW52b2ljZURvd25sb2FkLyR7ZGF0YS5faWR9YCwgZGF0YSwge3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXG59XG5idWxrSW52b2ljZURvd25sb2FkKGRhdGE6IHsgaW52b2ljZUlkczogc3RyaW5nW10gfSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2ludm9pY2VEb3dubG9hZC9idWxrYCwgZGF0YSwge3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXG59XG5hcHByb3ZlSW52b2ljZUNzbShpbnZvaWNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2FwcHJvdmVJbnZvaWNlQ3NtYCwgeyBpbnZvaWNlSWQgfSlcbn1cbmFwcHJvdmVJbnZvaWNlRmluYW5jZShpbnZvaWNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2FwcHJvdmVJbnZvaWNlRmluYW5jZWAsIHsgaW52b2ljZUlkIH0pXG59XG5hcHByb3ZlSW52b2ljZUFwcHJvdmFsKGludm9pY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYXBwcm92ZUludm9pY2VBcHByb3ZhbGAsIHsgaW52b2ljZUlkIH0pXG59XG5nZXRJbnZvaWNlSGVhZHMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9nZXRJbnZvaWNlSGVhZHNgKVxufVxudXBkYXRlSW52b2ljZUhlYWRzKGRhdGE6IHsgcm9sZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIHwgc3RyaW5nW10gfVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vdXBkYXRlSW52b2ljZUhlYWRzYCwgeyBkYXRhIH0pXG59XG5pbnZvaWNlcmVnZXJhdGUoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vcmVnZXJhdGVJbnZvaWNlYCwgZGF0YSlcbn1cblxucGF5bWVudFN0YXR1c0NoYW5nZShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9wYXltZW50U3RhdHVzQ2hhbmdlYCwgZGF0YSlcbn1cblxuLy8gUmVjb3JkIGEgZnVsbCBvciBwYXJ0aWFsIHBheW1lbnQgYWdhaW5zdCBhbiBpbnZvaWNlLiBTZXJ2ZXIgYXBwZW5kcyB0b1xuLy8gcGF5bWVudEhpc3RvcnksIGluY3JlbWVudHMgcGFpZEFtb3VudCwgYW5kIHJlY29tcHV0ZXMgcGF5bWVudFN0YXR1c1xuLy8gKHVucGFpZC9wYXJ0aWFsL3BhaWQpLiBSZXR1cm5zIHsgcGFpZEFtb3VudCwgcGVuZGluZ0Ftb3VudCwgcGF5bWVudFN0YXR1cyB9LlxucmVjb3JkUGF5bWVudChkYXRhOiB7XG4gIGludm9pY2VJZDogc3RyaW5nO1xuICBhbW91bnQ6IG51bWJlcjtcbiAgZGF0ZT86IHN0cmluZyB8IERhdGU7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgcmVmZXJlbmNlPzogc3RyaW5nO1xuICBub3Rlcz86IHN0cmluZztcbn0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9yZWNvcmRQYXltZW50YCwgZGF0YSk7XG59XG5pbnZvaWNlU2VudChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9pbnZvaWNlRG93bmxvYWQvJHtkYXRhLl9pZH1gLCBkYXRhKVxufVxuZ2V0aW52b2ljZShpZD86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMucGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybH0vY3JlZGl0Tm90ZXMvaW52b2ljZUxpc3QvJHtpZH1gKVxufVxudHJhbnNhY3Rpb25MaXN0KGRhdGE/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9jcmVkaXRUcmFuc2FjdGlvbmxpc3RgLGRhdGEpXG59XG50cmFuc2FjdGlvblRhYmxlRXhwb3J0KGRhdGE/OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9jcmVkaXRUcmFuc2FjdGlvbmxpc3RgLGRhdGEse3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXG59XG5jcmVkaXRub3RldXBkYXRlKCBkYXRhOmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsfS9jcmVkaXROb3Rlc2AsIGRhdGEpXG59XG5hcHBseURpc2NvdW50KCBkYXRhOmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9hcHBseURpc2NvdW50YCwgZGF0YSlcbn1cbm9uZVRpbWVGZWUoIGRhdGE6YW55LGludm9pY2VJZDphbnkpOk9ic2VydmFibGU8YW55PntcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vb25ldGltZS1wYXltZW50LyR7aW52b2ljZUlkfWAsIGRhdGEpXG59XG5wZW5kaW5nSW52b2ljZXMoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vcGVuZGluZ0ludm9pY2VzYCwgZGF0YSlcbn1cbmJyYW5kc0JpbGxpbmdMaXN0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2JyYW5kc0JpbGxpbmdMaXN0YCwgZGF0YSlcbn1cbmJyYW5kc0JpbGxpbmdMaXN0RXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2JyYW5kc0JpbGxpbmdMaXN0YCwgZGF0YSwge3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXG59XG5icmFuZEludm9pY2VMaXN0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2JyYW5kSW52b2ljZUxpc3RgLCBkYXRhKVxufVxuYnJhbmRJbnZvaWNlTGlzdEV4cG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9icmFuZEludm9pY2VMaXN0YCwgZGF0YSwge3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXG59XG5sYXRlc3REYWlseVByaWNpbmcoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vbGF0ZXN0RGFpbHlQcmljaW5nYCwgZGF0YSlcbn1cbi8vIEFkZGl0aW9uYWwgKG5vbi1zdGFuZGFyZCkgcHJvZHVjdHMgYmlsbGVkIHBlciBzdG9yZSBmb3IgYSBzcGVjaWZpYyBjbGllbnRcbi8vIChjdXJyZW50bHkgb25seSBjbGllbnRJZCAxMSkuIFJldHVybnMgeyBjdXJyZW5jeSwgcHJvZHVjdHNbXSB9LlxuYWRkaXRpb25hbFByb2R1Y3RzKGNsaWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2FkZGl0aW9uYWxQcm9kdWN0cz9jbGllbnRJZD0ke2NsaWVudElkfWApXG59XG5cbi8vIFBlci1wcm9kdWN0IGRldGFpbGVkIEV4Y2VsIGV4cG9ydCBmb3IgdGhlIEFkZGl0aW9uYWwgUHJvZHVjdHMgc2VjdGlvbi5cbi8vIGRhdGUgKFlZWVktTU0tREQpIGlzIG9wdGlvbmFsIOKAlCB1c2VkIGJ5IHByb2R1Y3RzIHRoYXQgcmVwb3J0IGJ5IGEgZGF5LlxuYWRkaXRpb25hbFByb2R1Y3RFeHBvcnQoY2xpZW50SWQ6IHN0cmluZywgcHJvZHVjdDogc3RyaW5nLCBkYXRlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgY29uc3QgZGF0ZVBhcmFtID0gZGF0ZSA/IGAmZGF0ZT0ke2RhdGV9YCA6ICcnO1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2FkZGl0aW9uYWxQcm9kdWN0RXhwb3J0P2NsaWVudElkPSR7Y2xpZW50SWR9JnByb2R1Y3Q9JHtwcm9kdWN0fSR7ZGF0ZVBhcmFtfWAsIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXG59XG5sYXRlc3REYWlseVByaWNpbmdFeHBvcnQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vbGF0ZXN0RGFpbHlQcmljaW5nYCwgZGF0YSwge3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXG59XG5icmFuZEJpbGxpbmdHcm91cHMoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnJhbmRCaWxsaW5nR3JvdXBzYCwgZGF0YSlcbn1cbmJyYW5kQmlsbGluZ0dyb3Vwc0V4cG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9icmFuZEJpbGxpbmdHcm91cHNgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJ1bGtEb3dubG9hZEJpbGxpbmdHcm91cHMoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBjbGllbnRJZCB9KTtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9idWxrLWRvd25sb2FkLWJpbGxpbmctZ3JvdXBzPyR7cGFyYW1zLnRvU3RyaW5nKCl9YCwge3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXG59XG5idWxrVXBkYXRlQmlsbGluZ0dyb3VwcyhmaWxlOiBGaWxlLCBjbGllbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgLy8gUmVhZCB0aGUgZmlsZSBhcyBiYXNlNjQgYW5kIFBPU1QgYXMgSlNPTi4gTXVsdGlwYXJ0L2Zvcm0tZGF0YSB3YXMgaGl0dGluZ1xuICAvLyBtdWx0ZXIgXCJVbmV4cGVjdGVkIGVuZCBvZiBmb3JtXCIgZXJyb3JzOyBzd2l0Y2hpbmcgdG8gSlNPTiBzaWRlc3RlcHMgdGhlXG4gIC8vIG11bHRlciBwaXBlbGluZSBlbnRpcmVseS4gQm9keS1wYXJzZXIgaXMgYWxyZWFkeSBjb25maWd1cmVkIGF0IDUwME1CLlxuICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gc3Vic2NyaWJlci5lcnJvcihyZWFkZXIuZXJyb3IpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcbiAgICAgIC8vIGRhdGFVUkwgaXMgXCJkYXRhOjxtaW1lPjtiYXNlNjQsPHBheWxvYWQ+XCIg4oCUIHN0cmlwIHRoZSBwcmVmaXguXG4gICAgICBjb25zdCBiYXNlNjQgPSByZXN1bHQuaW5jbHVkZXMoJywnKSA/IHJlc3VsdC5zcGxpdCgnLCcpWzFdIDogcmVzdWx0O1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgY2xpZW50SWQsXG4gICAgICAgIGZpbGVuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIGZpbGVCYXNlNjQ6IGJhc2U2NCxcbiAgICAgIH07XG4gICAgICB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2J1bGstdXBkYXRlLWJpbGxpbmctZ3JvdXBzYCwgcGF5bG9hZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4geyBzdWJzY3JpYmVyLm5leHQocmVzKTsgc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4gc3Vic2NyaWJlci5lcnJvcihlcnIpLFxuICAgICAgfSk7XG4gICAgfTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgfSk7XG59XG4vLyA9PT09PSBCYW5rLXN0YXRlbWVudCByZWNvbmNpbGlhdGlvbiAoVHJhbnNhY3Rpb25zIHRhYikgPT09PT1cbnVwbG9hZEJhbmtTdGF0ZW1lbnQoZmlsZTogRmlsZSk6IE9ic2VydmFibGU8YW55PiB7XG4gIC8vIFRoZSBzaGVldCBpcyBwYXJzZWQgaGVyZSB3aXRoIFNoZWV0SlMgYW5kIFBPU1RlZCBhcyBKU09OIHJvd3Mg4oCUIHRoZSBBUElcbiAgLy8gbmV2ZXIgcmVjZWl2ZXMgZmlsZSBieXRlczsgaXQgdmFsaWRhdGVzIGFuZCBjbGFzc2lmaWVzIHRoZSByb3dzLlxuICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gc3Vic2NyaWJlci5lcnJvcihyZWFkZXIuZXJyb3IpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBsZXQgcm93czogYW55W107XG4gICAgICB0cnkge1xuICAgICAgICAvLyByYXc6dHJ1ZSBrZWVwcyBDU1YgY2VsbHMgYXMgcGxhaW4gdGV4dDogd2l0aG91dCBpdCAnMDEvMDQvMjYnXG4gICAgICAgIC8vICgxIEFwciwgREQvTU0pIGlzIGNvZXJjZWQgdG8gYSBKYW4tNCBkYXRlIGNlbGwgKFVTIE1NL0REKSB3aGlsZVxuICAgICAgICAvLyAnMTgvMDQvMjYnIHN0YXlzIHRleHQg4oCUIHNpbGVudGx5IGNvcnJ1cHRpbmcgbWl4ZWQgZGF0ZXMuXG4gICAgICAgIC8vIFNoZWV0SlMgdHlwZTonYXJyYXknIGV4cGVjdHMgYSBieXRlIGFycmF5IChVaW50OEFycmF5KSwgbm90IHRoZSByYXdcbiAgICAgICAgLy8gQXJyYXlCdWZmZXIgRmlsZVJlYWRlciByZXR1cm5zIOKAlCBwYXNzaW5nIHRoZSBBcnJheUJ1ZmZlciBtYWtlcyAueGxzeFxuICAgICAgICAvLyBwYXJzZSB0byBhbiBlbXB0eSB3b3JrYm9vayBhbmQgdGhlIHVwbG9hZCBcImZhaWxzXCIuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShyZWFkZXIucmVzdWx0IGFzIEFycmF5QnVmZmVyKTtcbiAgICAgICAgY29uc3Qgd2IgPSBYTFNYLnJlYWQoZGF0YSwgeyB0eXBlOiAnYXJyYXknLCByYXc6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IHNoZWV0ID0gd2IuU2hlZXRzW3diLlNoZWV0TmFtZXNbMF1dO1xuICAgICAgICByb3dzID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHNoZWV0LCB7IGhlYWRlcjogMSwgZGVmdmFsOiAnJywgcmF3OiBmYWxzZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc3Vic2NyaWJlci5lcnJvcih7IGVycm9yOiB7IG1lc3NhZ2U6ICdGYWlsZWQgdG8gcGFyc2UgdGhlIHN0YXRlbWVudCBmaWxlJyB9IH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBwYXlsb2FkID0geyBmaWxlTmFtZTogZmlsZS5uYW1lLCByb3dzIH07XG4gICAgICB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2JhbmtTdGF0ZW1lbnQvdXBsb2FkYCwgcGF5bG9hZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4geyBzdWJzY3JpYmVyLm5leHQocmVzKTsgc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4gc3Vic2NyaWJlci5lcnJvcihlcnIpLFxuICAgICAgfSk7XG4gICAgfTtcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gIH0pO1xufVxuYmFua1RyYW5zYWN0aW9uTGlzdChmaWx0ZXJzOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9iYW5rU3RhdGVtZW50L2xpc3RgLCBmaWx0ZXJzKVxufVxuYmFua1Jlc29sdmVPcHRpb25zKCk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYmFua1N0YXRlbWVudC9yZXNvbHZlT3B0aW9uc2ApXG59XG5iaWxsaW5nU3VtbWFyeShmaWx0ZXJzPzogeyBjc20/OiBzdHJpbmc7IHByb2R1Y3Q/OiBzdHJpbmc7IHZhcmlhbmNlPzogc3RyaW5nOyBzZWFyY2g/OiBzdHJpbmcgfSk6IE9ic2VydmFibGU8YW55PiB7XG4gIC8vIFBPU1Qgc28gZmlsdGVycyB0cmF2ZWwgaW4gdGhlIGJvZHkg4oCUIGF2b2lkcyBhbnkgcXVlcnktc3RyaW5nIHN0cmlwcGluZyAvXG4gIC8vIGNhY2hpbmcgYW5kIG1hdGNoZXMgaG93IHRoZSBvdGhlciBiaWxsaW5nIGxpc3QgZW5kcG9pbnRzIHNlbmQgZmlsdGVycy5cbiAgY29uc3QgYm9keSA9IHtcbiAgICBjc206IGZpbHRlcnM/LmNzbSAmJiBmaWx0ZXJzLmNzbSAhPT0gJ0FsbCcgPyBmaWx0ZXJzLmNzbSA6ICcnLFxuICAgIHByb2R1Y3Q6IGZpbHRlcnM/LnByb2R1Y3QgJiYgZmlsdGVycy5wcm9kdWN0ICE9PSAnQWxsJyA/IGZpbHRlcnMucHJvZHVjdCA6ICcnLFxuICAgIHZhcmlhbmNlOiBmaWx0ZXJzPy52YXJpYW5jZSAmJiBmaWx0ZXJzLnZhcmlhbmNlICE9PSAnQWxsJyA/IGZpbHRlcnMudmFyaWFuY2UgOiAnJyxcbiAgICBzZWFyY2g6IGZpbHRlcnM/LnNlYXJjaCB8fCAnJyxcbiAgfTtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYmlsbGluZ1N1bW1hcnlgLCBib2R5KVxufVxuYmFua1Jlc29sdmVUcmFuc2FjdGlvbihkYXRhOiB7IHR4bklkOiBzdHJpbmc7IGFjdGlvbjogc3RyaW5nOyBpbnZvaWNlSWQ/OiBzdHJpbmc7IGludm9pY2VJZHM/OiBzdHJpbmdbXTsgY2xpZW50SWQ/OiBzdHJpbmc7IGNsaWVudE5hbWU/OiBzdHJpbmcgfSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2JhbmtTdGF0ZW1lbnQvcmVzb2x2ZWAsIGRhdGEpXG59XG5nZXRBbGxCaWxsaW5nR3JvdXBzKGNsaWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmJpbGxpbmdBcGlVcmx9L2dldC1hbGwtYmlsbGluZy1ncm91cHM/Y2xpZW50SWQ9JHtjbGllbnRJZH1gKVxufVxuLy8gPT09PT0gUGF5bWVudCBSZW1pbmRlcnMgKEJpbGxpbmcgU2V0dGluZ3MpID09PT09XG5nZXRQYXltZW50UmVtaW5kZXIoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vcGF5bWVudC1yZW1pbmRlci8ke2NsaWVudElkfWApXG59XG5zYXZlUGF5bWVudFJlbWluZGVyKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJpbGxpbmdBcGlVcmx9L3BheW1lbnQtcmVtaW5kZXJgLCBkYXRhKVxufVxuZ2V0U3Vic2NyaWJlZFN0b3JlcyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9nZXQtc3Vic2NyaWJlZC1zdG9yZS1saXN0YCwgZGF0YSlcbn1cbmNyZWF0ZUJpbGxpbmdHcm91cChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9jcmVhdGUtZ3JvdXBgLCBkYXRhKVxufVxudXBkYXRlQmlsbGluZ0dyb3VwKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vdXBkYXRlLWdyb3VwYCwgZGF0YSlcbn1cbmRlbGV0ZUJpbGxpbmdHcm91cChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9kZWxldGUtZ3JvdXA/X2lkPSR7aWR9YClcbn1cblxuLy8gR1NUSU4gYWRkcmVzcyBsb29rdXAuIEN1cnJlbnRseSB0aGUgYmFja2VuZCByZXR1cm5zIGEgZGV0ZXJtaW5pc3RpYyBtb2NrXG4vLyBiYXNlZCBvbiB0aGUgR1NUSU4gc3RhdGUtY29kZSBwcmVmaXguIFdoZW4gd2lyZWQgdG8gYSByZWFsIHByb3ZpZGVyLCB0aGVcbi8vIHJlc3BvbnNlIHNoYXBlIHN0YXlzIHRoZSBzYW1lIHNvIGNhbGxlcnMgZG9uJ3QgbmVlZCB0byBjaGFuZ2UuXG5sb29rdXBHc3Rpbihnc3Rpbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9nc3QtbG9va3VwLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGdzdGluKX1gKVxufVxudXBkYXRlRGFpbHlQcmljaW5nV29ya2luZ0RheXMoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS91cGRhdGVEYWlseVByaWNpbmdXb3JraW5nRGF5c2AsIGRhdGEpXG59XG51cGRhdGVEYWlseVByaWNpbmdTdG9yZUZpZWxkKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vdXBkYXRlRGFpbHlQcmljaW5nU3RvcmVGaWVsZGAsIGRhdGEpXG59XG5nZXRDbGllbnRCaWxsaW5nSW5mbyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9nZXRDbGllbnRCaWxsaW5nSW5mb2AsIGRhdGEpXG59XG5nZXRJbnZvaWNlQnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9nZXRJbnZvaWNlLyR7aWR9YClcbn1cbmdldEludm9pY2VCYW5rRGV0YWlscyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9pbnZvaWNlQmFua0RldGFpbHMvJHtpZH1gKVxufVxuZ2V0SW52b2ljZUFubmV4dXJlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2ludm9pY2VBbm5leHVyZS8ke2lkfWApXG59XG51cGRhdGVJbnZvaWNlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vdXBkYXRlSW52b2ljZWAsIGRhdGEpXG59XG5jcmVhdGVJbnZvaWNlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2NyZWF0ZUludm9pY2VgLCBkYXRhKVxufVxuZ2V0Q2xpZW50QmFzZVByaWNpbmcoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vZ2V0Q2xpZW50QmFzZVByaWNpbmcvJHtjbGllbnRJZH1gKVxufVxuZ2V0Q2xpZW50UHJvZHVjdHMoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vZ2V0Q2xpZW50UHJvZHVjdHMvJHtjbGllbnRJZH1gKVxufVxuZGVsZXRlSW52b2ljZShpbnZvaWNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuaW52b2ljZUFwaVVybH0vZGVsZXRlSW52b2ljZS8ke2ludm9pY2VJZH1gKVxufVxuXG59XG4iXX0=
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQThCLE1BQU0sTUFBTSxDQUFDO0FBQ25HLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDOzs7O0FBRTdCLE1BQU0sVUFBVSxHQUFHLGlGQUFpRixDQUFDO0FBQ3JHLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQztBQU1oQyxNQUFNLE9BQU8sY0FBYztJQVdMO0lBQTBCO0lBVjlDLGFBQWEsQ0FBUTtJQUNyQix5QkFBeUIsQ0FBSztJQUV0QixpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNoRSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXBELHNCQUFzQixHQUFHLElBQUksZUFBZSxDQUFNLEVBQUMsS0FBSyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ3JGLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQTtJQUNoRCxhQUFhLENBQU07SUFDbkIsbUJBQW1CLENBQU07SUFDekIsWUFBb0IsSUFBZ0IsRUFBVSxFQUFzQjtRQUFoRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDbEUsSUFBSSxDQUFDLEVBQUUsQ0FB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Z0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUNELG9CQUFvQixDQUFDLFFBQWdCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSx5QkFBeUIsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsUUFBZ0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLHNCQUFzQixRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLENBQUM7SUFDRCxhQUFhLENBQUMsU0FBaUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLGtCQUFrQixTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQzdFLENBQUM7d0dBbFdZLGNBQWM7NEdBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0YWtlVW50aWwsIGNhdGNoRXJyb3IsIG1hcCx0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xuXG5jb25zdCBFWENFTF9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuY29uc3QgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JztcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xuIFxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQmlsbGluZ1NlcnZpY2Uge1xuICBpbnZvaWNlQXBpVXJsOnN0cmluZztcbiAgcGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybDphbnk7XG5cbiAgcHJpdmF0ZSByZWxvYWREYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWxvYWREYXRhJCA9IHRoaXMucmVsb2FkRGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcGF5bWVudGludm9pY2VGb3JtRGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7dmFsdWU6bnVsbCwgdHlwZTpudWxsLCBmb3JtOm51bGx9KVxuICBkcm9wRG93blRyaWdnZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbClcbiAgYmlsbGluZ0FwaVVybDogYW55O1xuICBicmFuZHNCaWxsaW5nQXBpVXJsOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlKSB7XG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcbiAgICAgIGlmIChlbnYpIHtcbiAgICAgICAgdGhpcy5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsID0gZW52LnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmw7XG4gICAgICAgIHRoaXMuaW52b2ljZUFwaVVybCA9IGVudi5pbnZvaWNlQXBpVXJsXG4gICAgICAgIHRoaXMuYmlsbGluZ0FwaVVybCA9IGVudi5iaWxsaW5nQXBpVXJsXG4gICAgICAgIHRoaXMuYnJhbmRzQmlsbGluZ0FwaVVybCA9IGVudi5icmFuZHNCaWxsaW5nQXBpVXJsXG5cbiAgICAgICAgLy8gdGhpcy5jbGllbnRJZC5uZXh0KCcxMScpXG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gdGhpcy5ncy5zZWxlY3RlZENsaWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOmFueSk9PntcbiAgICAvLyAgIGlmKGUpe1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhlLCdlJyk7XG4gICAgLy8gICB9XG4gICAgLy8gfSlcbiAgfVxuICB0cmlnZ2VyUmVsb2FkKCkge1xuICAgIHRoaXMucmVsb2FkRGF0YVN1YmplY3QubmV4dCh0cnVlKTtcbiAgfVxuXG4gIFxuICBwdWJsaWMgZXhwb3J0QXNFeGNlbEZpbGUoanNvbjogYW55W10sIGV4Y2VsRmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHdvcmtzaGVldDogWExTWC5Xb3JrU2hlZXQgPSBYTFNYLnV0aWxzLmpzb25fdG9fc2hlZXQoanNvbik7XG4gICAgY29uc3Qgd29ya2Jvb2s6IFhMU1guV29ya0Jvb2sgPSB7IFNoZWV0czogeyAnZGF0YSc6IHdvcmtzaGVldCB9LCBTaGVldE5hbWVzOiBbJ2RhdGEnXSB9O1xuICAgIGNvbnN0IGV4Y2VsQnVmZmVyOiBhbnkgPSBYTFNYLndyaXRlKHdvcmtib29rLCB7IGJvb2tUeXBlOiAneGxzeCcsIHR5cGU6ICdhcnJheScgfSk7XG4gICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIGV4Y2VsRmlsZU5hbWUpO1xuICB9XG4gXG4gIHB1YmxpYyBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcbiAgICAgIHR5cGU6IEVYQ0VMX1RZUEVcbiAgICB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIGZpbGVOYW1lICsgJ2xpc3QnKyBFWENFTF9FWFRFTlNJT04pO1xuICB9XG4gXG4gIHB1YmxpYyBzYXZlQXNUZW1wbGF0ZShidWZmZXI6IGFueSwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAgICAgdHlwZTogRVhDRUxfVFlQRVxuICAgIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgZmlsZU5hbWUgKyBFWENFTF9FWFRFTlNJT04pO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4vLyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbi8vICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuLy8gICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4vLyB9XG4vLyA9PT09PSBFc3RpbWF0ZXMgKEVzdGltYXRlIHRhYikgPT09PT1cbmVzdGltYXRlTGlzdChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9saXN0YCwgZGF0YSlcbn1cbmVzdGltYXRlTGlzdEV4cG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9saXN0YCwgZGF0YSwgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcbn1cbmNyZWF0ZUVzdGltYXRlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlL2NyZWF0ZWAsIGRhdGEpXG59XG51cGRhdGVFc3RpbWF0ZShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS91cGRhdGVgLCBkYXRhKVxufVxuZ2V0RXN0aW1hdGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vZXN0aW1hdGUvJHtpZH1gKVxufVxuZXN0aW1hdGVTdGF0dXNVcGRhdGUoZGF0YTogeyBlc3RpbWF0ZUlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9lc3RpbWF0ZS9zdGF0dXNVcGRhdGVgLCBkYXRhKVxufVxuc2VuZEVzdGltYXRlKGVzdGltYXRlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlL3NlbmRgLCB7IGVzdGltYXRlSWQgfSlcbn1cbmRlbGV0ZUVzdGltYXRlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlLyR7aWR9YClcbn1cbmRvd25sb2FkRXN0aW1hdGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2VzdGltYXRlL2Rvd25sb2FkLyR7aWR9YCwge30sIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXG59XG5pbnZvaWNlVGFibGVEYXRhKCBkYXRhOmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9jbGllbnRJbnZvaWNlTGlzdGAsIGRhdGEpXG59XG51cGRhdGVDbGllbnRGaWx0ZXJzKGZpbHRlcnM6YW55KXtcbiAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5uZXh0KGZpbHRlcnMpO1xufVxuaW52b2ljZVRhYmxlRGF0YUV4cG9ydCggZGF0YTphbnkpOk9ic2VydmFibGU8YW55PntcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vY2xpZW50SW52b2ljZUxpc3RgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmNsaWVudEJpbGxpbmdJbmZvKHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHBcbiAgICAuZ2V0KGAke3RoaXMucGF5bWVudFN1YnNjcmlwdGlvbkFwaVVybH0vY2xpZW50QmlsbGluZ1N1YnNjcmlwdGlvbkluZm8vJHtwYXJhbXN9YClcbn1cbmludm9pY2VEb3dubG9hZChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9pbnZvaWNlRG93bmxvYWQvJHtkYXRhLl9pZH1gLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJ1bGtJbnZvaWNlRG93bmxvYWQoZGF0YTogeyBpbnZvaWNlSWRzOiBzdHJpbmdbXSB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vaW52b2ljZURvd25sb2FkL2J1bGtgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmFwcHJvdmVJbnZvaWNlQ3NtKGludm9pY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYXBwcm92ZUludm9pY2VDc21gLCB7IGludm9pY2VJZCB9KVxufVxuYXBwcm92ZUludm9pY2VGaW5hbmNlKGludm9pY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYXBwcm92ZUludm9pY2VGaW5hbmNlYCwgeyBpbnZvaWNlSWQgfSlcbn1cbmFwcHJvdmVJbnZvaWNlQXBwcm92YWwoaW52b2ljZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9hcHByb3ZlSW52b2ljZUFwcHJvdmFsYCwgeyBpbnZvaWNlSWQgfSlcbn1cbmdldEludm9pY2VIZWFkcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2dldEludm9pY2VIZWFkc2ApXG59XG51cGRhdGVJbnZvaWNlSGVhZHMoZGF0YTogeyByb2xlOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmcgfCBzdHJpbmdbXSB9W10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS91cGRhdGVJbnZvaWNlSGVhZHNgLCB7IGRhdGEgfSlcbn1cbmludm9pY2VyZWdlcmF0ZShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9yZWdlcmF0ZUludm9pY2VgLCBkYXRhKVxufVxuXG5wYXltZW50U3RhdHVzQ2hhbmdlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L3BheW1lbnRTdGF0dXNDaGFuZ2VgLCBkYXRhKVxufVxuXG4vLyBSZWNvcmQgYSBmdWxsIG9yIHBhcnRpYWwgcGF5bWVudCBhZ2FpbnN0IGFuIGludm9pY2UuIFNlcnZlciBhcHBlbmRzIHRvXG4vLyBwYXltZW50SGlzdG9yeSwgaW5jcmVtZW50cyBwYWlkQW1vdW50LCBhbmQgcmVjb21wdXRlcyBwYXltZW50U3RhdHVzXG4vLyAodW5wYWlkL3BhcnRpYWwvcGFpZCkuIFJldHVybnMgeyBwYWlkQW1vdW50LCBwZW5kaW5nQW1vdW50LCBwYXltZW50U3RhdHVzIH0uXG5yZWNvcmRQYXltZW50KGRhdGE6IHtcbiAgaW52b2ljZUlkOiBzdHJpbmc7XG4gIGFtb3VudDogbnVtYmVyO1xuICBkYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgbWV0aG9kPzogc3RyaW5nO1xuICByZWZlcmVuY2U/OiBzdHJpbmc7XG4gIG5vdGVzPzogc3RyaW5nO1xufSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L3JlY29yZFBheW1lbnRgLCBkYXRhKTtcbn1cbmludm9pY2VTZW50KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2ludm9pY2VEb3dubG9hZC8ke2RhdGEuX2lkfWAsIGRhdGEpXG59XG5nZXRpbnZvaWNlKGlkPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5wYXltZW50U3Vic2NyaXB0aW9uQXBpVXJsfS9jcmVkaXROb3Rlcy9pbnZvaWNlTGlzdC8ke2lkfWApXG59XG50cmFuc2FjdGlvbkxpc3QoZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2NyZWRpdFRyYW5zYWN0aW9ubGlzdGAsZGF0YSlcbn1cbnRyYW5zYWN0aW9uVGFibGVFeHBvcnQoZGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2NyZWRpdFRyYW5zYWN0aW9ubGlzdGAsZGF0YSx7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmNyZWRpdG5vdGV1cGRhdGUoIGRhdGE6YW55KTpPYnNlcnZhYmxlPGFueT57XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnBheW1lbnRTdWJzY3JpcHRpb25BcGlVcmx9L2NyZWRpdE5vdGVzYCwgZGF0YSlcbn1cbmFwcGx5RGlzY291bnQoIGRhdGE6YW55KTpPYnNlcnZhYmxlPGFueT57XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2FwcGx5RGlzY291bnRgLCBkYXRhKVxufVxub25lVGltZUZlZSggZGF0YTphbnksaW52b2ljZUlkOmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9vbmV0aW1lLXBheW1lbnQvJHtpbnZvaWNlSWR9YCwgZGF0YSlcbn1cbnBlbmRpbmdJbnZvaWNlcyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9wZW5kaW5nSW52b2ljZXNgLCBkYXRhKVxufVxuYnJhbmRzQmlsbGluZ0xpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnJhbmRzQmlsbGluZ0xpc3RgLCBkYXRhKVxufVxuYnJhbmRzQmlsbGluZ0xpc3RFeHBvcnQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnJhbmRzQmlsbGluZ0xpc3RgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJyYW5kSW52b2ljZUxpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnJhbmRJbnZvaWNlTGlzdGAsIGRhdGEpXG59XG5icmFuZEludm9pY2VMaXN0RXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2JyYW5kSW52b2ljZUxpc3RgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmxhdGVzdERhaWx5UHJpY2luZyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9sYXRlc3REYWlseVByaWNpbmdgLCBkYXRhKVxufVxuLy8gQWRkaXRpb25hbCAobm9uLXN0YW5kYXJkKSBwcm9kdWN0cyBiaWxsZWQgcGVyIHN0b3JlIGZvciBhIHNwZWNpZmljIGNsaWVudFxuLy8gKGN1cnJlbnRseSBvbmx5IGNsaWVudElkIDExKS4gUmV0dXJucyB7IGN1cnJlbmN5LCBwcm9kdWN0c1tdIH0uXG5hZGRpdGlvbmFsUHJvZHVjdHMoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYWRkaXRpb25hbFByb2R1Y3RzP2NsaWVudElkPSR7Y2xpZW50SWR9YClcbn1cblxuLy8gUGVyLXByb2R1Y3QgZGV0YWlsZWQgRXhjZWwgZXhwb3J0IGZvciB0aGUgQWRkaXRpb25hbCBQcm9kdWN0cyBzZWN0aW9uLlxuLy8gZGF0ZSAoWVlZWS1NTS1ERCkgaXMgb3B0aW9uYWwg4oCUIHVzZWQgYnkgcHJvZHVjdHMgdGhhdCByZXBvcnQgYnkgYSBkYXkuXG5hZGRpdGlvbmFsUHJvZHVjdEV4cG9ydChjbGllbnRJZDogc3RyaW5nLCBwcm9kdWN0OiBzdHJpbmcsIGRhdGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICBjb25zdCBkYXRlUGFyYW0gPSBkYXRlID8gYCZkYXRlPSR7ZGF0ZX1gIDogJyc7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYWRkaXRpb25hbFByb2R1Y3RFeHBvcnQ/Y2xpZW50SWQ9JHtjbGllbnRJZH0mcHJvZHVjdD0ke3Byb2R1Y3R9JHtkYXRlUGFyYW19YCwgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcbn1cbmxhdGVzdERhaWx5UHJpY2luZ0V4cG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9sYXRlc3REYWlseVByaWNpbmdgLCBkYXRhLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJyYW5kQmlsbGluZ0dyb3VwcyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9icmFuZEJpbGxpbmdHcm91cHNgLCBkYXRhKVxufVxuYnJhbmRCaWxsaW5nR3JvdXBzRXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2JyYW5kQmlsbGluZ0dyb3Vwc2AsIGRhdGEsIHtyZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcid9KVxufVxuYnVsa0Rvd25sb2FkQmlsbGluZ0dyb3VwcyhjbGllbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGNsaWVudElkIH0pO1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmJyYW5kc0JpbGxpbmdBcGlVcmx9L2J1bGstZG93bmxvYWQtYmlsbGluZy1ncm91cHM/JHtwYXJhbXMudG9TdHJpbmcoKX1gLCB7cmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInfSlcbn1cbmJ1bGtVcGRhdGVCaWxsaW5nR3JvdXBzKGZpbGU6IEZpbGUsIGNsaWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAvLyBSZWFkIHRoZSBmaWxlIGFzIGJhc2U2NCBhbmQgUE9TVCBhcyBKU09OLiBNdWx0aXBhcnQvZm9ybS1kYXRhIHdhcyBoaXR0aW5nXG4gIC8vIG11bHRlciBcIlVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1cIiBlcnJvcnM7IHN3aXRjaGluZyB0byBKU09OIHNpZGVzdGVwcyB0aGVcbiAgLy8gbXVsdGVyIHBpcGVsaW5lIGVudGlyZWx5LiBCb2R5LXBhcnNlciBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgYXQgNTAwTUIuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiBzdWJzY3JpYmVyLmVycm9yKHJlYWRlci5lcnJvcik7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgLy8gZGF0YVVSTCBpcyBcImRhdGE6PG1pbWU+O2Jhc2U2NCw8cGF5bG9hZD5cIiDigJQgc3RyaXAgdGhlIHByZWZpeC5cbiAgICAgIGNvbnN0IGJhc2U2NCA9IHJlc3VsdC5pbmNsdWRlcygnLCcpID8gcmVzdWx0LnNwbGl0KCcsJylbMV0gOiByZXN1bHQ7XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBjbGllbnRJZCxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgZmlsZUJhc2U2NDogYmFzZTY0LFxuICAgICAgfTtcbiAgICAgIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vYnVsay11cGRhdGUtYmlsbGluZy1ncm91cHNgLCBwYXlsb2FkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzKSA9PiB7IHN1YnNjcmliZXIubmV4dChyZXMpOyBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVyciksXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICB9KTtcbn1cbi8vID09PT09IEJhbmstc3RhdGVtZW50IHJlY29uY2lsaWF0aW9uIChUcmFuc2FjdGlvbnMgdGFiKSA9PT09PVxudXBsb2FkQmFua1N0YXRlbWVudChmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgLy8gVGhlIHNoZWV0IGlzIHBhcnNlZCBoZXJlIHdpdGggU2hlZXRKUyBhbmQgUE9TVGVkIGFzIEpTT04gcm93cyDigJQgdGhlIEFQSVxuICAvLyBuZXZlciByZWNlaXZlcyBmaWxlIGJ5dGVzOyBpdCB2YWxpZGF0ZXMgYW5kIGNsYXNzaWZpZXMgdGhlIHJvd3MuXG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiBzdWJzY3JpYmVyLmVycm9yKHJlYWRlci5lcnJvcik7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGxldCByb3dzOiBhbnlbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHJhdzp0cnVlIGtlZXBzIENTViBjZWxscyBhcyBwbGFpbiB0ZXh0OiB3aXRob3V0IGl0ICcwMS8wNC8yNidcbiAgICAgICAgLy8gKDEgQXByLCBERC9NTSkgaXMgY29lcmNlZCB0byBhIEphbi00IGRhdGUgY2VsbCAoVVMgTU0vREQpIHdoaWxlXG4gICAgICAgIC8vICcxOC8wNC8yNicgc3RheXMgdGV4dCDigJQgc2lsZW50bHkgY29ycnVwdGluZyBtaXhlZCBkYXRlcy5cbiAgICAgICAgLy8gU2hlZXRKUyB0eXBlOidhcnJheScgZXhwZWN0cyBhIGJ5dGUgYXJyYXkgKFVpbnQ4QXJyYXkpLCBub3QgdGhlIHJhd1xuICAgICAgICAvLyBBcnJheUJ1ZmZlciBGaWxlUmVhZGVyIHJldHVybnMg4oCUIHBhc3NpbmcgdGhlIEFycmF5QnVmZmVyIG1ha2VzIC54bHN4XG4gICAgICAgIC8vIHBhcnNlIHRvIGFuIGVtcHR5IHdvcmtib29rIGFuZCB0aGUgdXBsb2FkIFwiZmFpbHNcIi5cbiAgICAgICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OEFycmF5KHJlYWRlci5yZXN1bHQgYXMgQXJyYXlCdWZmZXIpO1xuICAgICAgICBjb25zdCB3YiA9IFhMU1gucmVhZChkYXRhLCB7IHR5cGU6ICdhcnJheScsIHJhdzogdHJ1ZSB9KTtcbiAgICAgICAgY29uc3Qgc2hlZXQgPSB3Yi5TaGVldHNbd2IuU2hlZXROYW1lc1swXV07XG4gICAgICAgIHJvd3MgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24oc2hlZXQsIHsgaGVhZGVyOiAxLCBkZWZ2YWw6ICcnLCByYXc6IGZhbHNlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHsgZXJyb3I6IHsgbWVzc2FnZTogJ0ZhaWxlZCB0byBwYXJzZSB0aGUgc3RhdGVtZW50IGZpbGUnIH0gfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7IGZpbGVOYW1lOiBmaWxlLm5hbWUsIHJvd3MgfTtcbiAgICAgIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYmFua1N0YXRlbWVudC91cGxvYWRgLCBwYXlsb2FkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzKSA9PiB7IHN1YnNjcmliZXIubmV4dChyZXMpOyBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVyciksXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgfSk7XG59XG5iYW5rVHJhbnNhY3Rpb25MaXN0KGZpbHRlcnM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2JhbmtTdGF0ZW1lbnQvbGlzdGAsIGZpbHRlcnMpXG59XG5iYW5rUmVzb2x2ZU9wdGlvbnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9iYW5rU3RhdGVtZW50L3Jlc29sdmVPcHRpb25zYClcbn1cbmJpbGxpbmdTdW1tYXJ5KGZpbHRlcnM/OiB7IGNzbT86IHN0cmluZzsgcHJvZHVjdD86IHN0cmluZzsgdmFyaWFuY2U/OiBzdHJpbmc7IHNlYXJjaD86IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgLy8gUE9TVCBzbyBmaWx0ZXJzIHRyYXZlbCBpbiB0aGUgYm9keSDigJQgYXZvaWRzIGFueSBxdWVyeS1zdHJpbmcgc3RyaXBwaW5nIC9cbiAgLy8gY2FjaGluZyBhbmQgbWF0Y2hlcyBob3cgdGhlIG90aGVyIGJpbGxpbmcgbGlzdCBlbmRwb2ludHMgc2VuZCBmaWx0ZXJzLlxuICBjb25zdCBib2R5ID0ge1xuICAgIGNzbTogZmlsdGVycz8uY3NtICYmIGZpbHRlcnMuY3NtICE9PSAnQWxsJyA/IGZpbHRlcnMuY3NtIDogJycsXG4gICAgcHJvZHVjdDogZmlsdGVycz8ucHJvZHVjdCAmJiBmaWx0ZXJzLnByb2R1Y3QgIT09ICdBbGwnID8gZmlsdGVycy5wcm9kdWN0IDogJycsXG4gICAgdmFyaWFuY2U6IGZpbHRlcnM/LnZhcmlhbmNlICYmIGZpbHRlcnMudmFyaWFuY2UgIT09ICdBbGwnID8gZmlsdGVycy52YXJpYW5jZSA6ICcnLFxuICAgIHNlYXJjaDogZmlsdGVycz8uc2VhcmNoIHx8ICcnLFxuICB9O1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9iaWxsaW5nU3VtbWFyeWAsIGJvZHkpXG59XG5iYW5rUmVzb2x2ZVRyYW5zYWN0aW9uKGRhdGE6IHsgdHhuSWQ6IHN0cmluZzsgYWN0aW9uOiBzdHJpbmc7IGludm9pY2VJZD86IHN0cmluZzsgaW52b2ljZUlkcz86IHN0cmluZ1tdOyBjbGllbnRJZD86IHN0cmluZzsgY2xpZW50TmFtZT86IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vYmFua1N0YXRlbWVudC9yZXNvbHZlYCwgZGF0YSlcbn1cbmdldEFsbEJpbGxpbmdHcm91cHMoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vZ2V0LWFsbC1iaWxsaW5nLWdyb3Vwcz9jbGllbnRJZD0ke2NsaWVudElkfWApXG59XG5cbi8vID09PT09IFB1cmNoYXNlIE9yZGVycyAoYnJhbmQtdmlldyBQdXJjaGFzZSBPcmRlciB0YWIpID09PT09XG5nZXRQdXJjaGFzZU9yZGVycyhjbGllbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9wdXJjaGFzZS1vcmRlcnM/Y2xpZW50SWQ9JHtjbGllbnRJZH1gKVxufVxuY3JlYXRlUHVyY2hhc2VPcmRlcihkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAvLyBkYXRhIGlzIEZvcm1EYXRhIChtYXkgaW5jbHVkZSBhIFBPIFBERiBmaWxlKS5cbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vcHVyY2hhc2Utb3JkZXJzYCwgZGF0YSlcbn1cblxuLy8gPT09PT0gUGF5bWVudCBSZW1pbmRlcnMgKEJpbGxpbmcgU2V0dGluZ3MpID09PT09XG5nZXRQYXltZW50UmVtaW5kZXIoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vcGF5bWVudC1yZW1pbmRlci8ke2NsaWVudElkfWApXG59XG5zYXZlUGF5bWVudFJlbWluZGVyKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJpbGxpbmdBcGlVcmx9L3BheW1lbnQtcmVtaW5kZXJgLCBkYXRhKVxufVxuZ2V0U3Vic2NyaWJlZFN0b3JlcyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9nZXQtc3Vic2NyaWJlZC1zdG9yZS1saXN0YCwgZGF0YSlcbn1cbmNyZWF0ZUJpbGxpbmdHcm91cChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9jcmVhdGUtZ3JvdXBgLCBkYXRhKVxufVxudXBkYXRlQmlsbGluZ0dyb3VwKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vdXBkYXRlLWdyb3VwYCwgZGF0YSlcbn1cbmRlbGV0ZUJpbGxpbmdHcm91cChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9kZWxldGUtZ3JvdXA/X2lkPSR7aWR9YClcbn1cblxuLy8gR1NUSU4gYWRkcmVzcyBsb29rdXAuIEN1cnJlbnRseSB0aGUgYmFja2VuZCByZXR1cm5zIGEgZGV0ZXJtaW5pc3RpYyBtb2NrXG4vLyBiYXNlZCBvbiB0aGUgR1NUSU4gc3RhdGUtY29kZSBwcmVmaXguIFdoZW4gd2lyZWQgdG8gYSByZWFsIHByb3ZpZGVyLCB0aGVcbi8vIHJlc3BvbnNlIHNoYXBlIHN0YXlzIHRoZSBzYW1lIHNvIGNhbGxlcnMgZG9uJ3QgbmVlZCB0byBjaGFuZ2UuXG5sb29rdXBHc3Rpbihnc3Rpbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5iaWxsaW5nQXBpVXJsfS9nc3QtbG9va3VwLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGdzdGluKX1gKVxufVxudXBkYXRlRGFpbHlQcmljaW5nV29ya2luZ0RheXMoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS91cGRhdGVEYWlseVByaWNpbmdXb3JraW5nRGF5c2AsIGRhdGEpXG59XG51cGRhdGVEYWlseVByaWNpbmdTdG9yZUZpZWxkKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuYnJhbmRzQmlsbGluZ0FwaVVybH0vdXBkYXRlRGFpbHlQcmljaW5nU3RvcmVGaWVsZGAsIGRhdGEpXG59XG5nZXRDbGllbnRCaWxsaW5nSW5mbyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5icmFuZHNCaWxsaW5nQXBpVXJsfS9nZXRDbGllbnRCaWxsaW5nSW5mb2AsIGRhdGEpXG59XG5nZXRJbnZvaWNlQnlJZChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9nZXRJbnZvaWNlLyR7aWR9YClcbn1cbmdldEludm9pY2VCYW5rRGV0YWlscyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5pbnZvaWNlQXBpVXJsfS9pbnZvaWNlQmFua0RldGFpbHMvJHtpZH1gKVxufVxuZ2V0SW52b2ljZUFubmV4dXJlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2ludm9pY2VBbm5leHVyZS8ke2lkfWApXG59XG51cGRhdGVJbnZvaWNlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vdXBkYXRlSW52b2ljZWAsIGRhdGEpXG59XG5jcmVhdGVJbnZvaWNlKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmludm9pY2VBcGlVcmx9L2NyZWF0ZUludm9pY2VgLCBkYXRhKVxufVxuZ2V0Q2xpZW50QmFzZVByaWNpbmcoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuaW52b2ljZUFwaVVybH0vZ2V0Q2xpZW50QmFzZVByaWNpbmcvJHtjbGllbnRJZH1gKVxufVxuZ2V0Q2xpZW50UHJvZHVjdHMoY2xpZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmlsbGluZ0FwaVVybH0vZ2V0Q2xpZW50UHJvZHVjdHMvJHtjbGllbnRJZH1gKVxufVxuZGVsZXRlSW52b2ljZShpbnZvaWNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuaW52b2ljZUFwaVVybH0vZGVsZXRlSW52b2ljZS8ke2ludm9pY2VJZH1gKVxufVxuXG59XG4iXX0=
|