techlify-inventory-common 18.3.1 → 18.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/inventory-common/product/product-basic-info/product-basic-info.component.mjs +3 -3
- package/esm2022/lib/inventory-common/product/product-list/product-list.component.mjs +27 -10
- package/esm2022/lib/inventory-common/product/product-view-page/product-view-page.component.mjs +7 -8
- package/esm2022/lib/inventory-common/product/product.module.mjs +8 -4
- package/esm2022/lib/inventory-common/reports/inventory-value-report/inventory-value-report.component.mjs +10 -5
- package/esm2022/lib/inventory-common/shared/export-to-excel-button/export-to-excel-button.component.mjs +58 -0
- package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-list/stock-issuances-list.component.mjs +9 -8
- package/esm2022/lib/inventory-common/stock-issuances/stock-issuances-routing.module.mjs +8 -1
- package/esm2022/lib/inventory-common/stock-issuances/stock-issue-import-page/stock-issue-import-page.component.mjs +59 -0
- package/fesm2022/{techlify-inventory-common-category.module-BsvJ6rVx.mjs → techlify-inventory-common-category.module-_JKaLvuW.mjs} +6 -6
- package/fesm2022/{techlify-inventory-common-category.module-BsvJ6rVx.mjs.map → techlify-inventory-common-category.module-_JKaLvuW.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-location.module-Cwx9mHKE.mjs → techlify-inventory-common-location.module-CRNxXB2w.mjs} +2 -2
- package/fesm2022/{techlify-inventory-common-location.module-Cwx9mHKE.mjs.map → techlify-inventory-common-location.module-CRNxXB2w.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-measure.module-C2v0-n_m.mjs → techlify-inventory-common-measure.module-CSIT2OcZ.mjs} +4 -4
- package/fesm2022/{techlify-inventory-common-measure.module-C2v0-n_m.mjs.map → techlify-inventory-common-measure.module-CSIT2OcZ.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-stock-issuances.module-CPccetrp.mjs → techlify-inventory-common-stock-issuances.module-Bb4lQY0y.mjs} +63 -3
- package/fesm2022/techlify-inventory-common-stock-issuances.module-Bb4lQY0y.mjs.map +1 -0
- package/fesm2022/{techlify-inventory-common-supplier.module-CYq-2pV1.mjs → techlify-inventory-common-supplier.module-B3nhDpg0.mjs} +6 -6
- package/fesm2022/{techlify-inventory-common-supplier.module-CYq-2pV1.mjs.map → techlify-inventory-common-supplier.module-B3nhDpg0.mjs.map} +1 -1
- package/fesm2022/{techlify-inventory-common-techlify-inventory-common-BMNkSTd6.mjs → techlify-inventory-common-techlify-inventory-common-BNjTAiEI.mjs} +466 -388
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-BNjTAiEI.mjs.map +1 -0
- package/fesm2022/techlify-inventory-common.mjs +1 -1
- package/lib/inventory-common/product/product-list/product-list.component.d.ts +2 -0
- package/lib/inventory-common/product/product.module.d.ts +2 -1
- package/lib/inventory-common/reports/inventory-value-report/inventory-value-report.component.d.ts +1 -0
- package/lib/inventory-common/shared/export-to-excel-button/export-to-excel-button.component.d.ts +12 -0
- package/lib/inventory-common/stock-issuances/stock-issue-import-page/stock-issue-import-page.component.d.ts +10 -0
- package/package.json +1 -1
- package/fesm2022/techlify-inventory-common-stock-issuances.module-CPccetrp.mjs.map +0 -1
- package/fesm2022/techlify-inventory-common-techlify-inventory-common-BMNkSTd6.mjs.map +0 -1
|
@@ -24,6 +24,7 @@ import { ProductTaxModule } from './product-tax/product-tax.module';
|
|
|
24
24
|
import { ProductBatchUpdateFormComponent } from './product-batch-update-form/product-batch-update-form.component';
|
|
25
25
|
import { ProductLocationListComponent } from './product-location/product-location-list/product-location-list.component';
|
|
26
26
|
import { StockTransferListComponent } from '../stock-transfer/stock-transfer-list/stock-transfer-list.component';
|
|
27
|
+
import { ExportToExcelButtonComponent } from '../shared/export-to-excel-button/export-to-excel-button.component';
|
|
27
28
|
import * as i0 from "@angular/core";
|
|
28
29
|
export class ProductModule {
|
|
29
30
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
@@ -55,7 +56,8 @@ export class ProductModule {
|
|
|
55
56
|
FormsModule,
|
|
56
57
|
ColumnSelectorModule,
|
|
57
58
|
ProductLocationListComponent,
|
|
58
|
-
StockTransferListComponent
|
|
59
|
+
StockTransferListComponent,
|
|
60
|
+
ExportToExcelButtonComponent], exports: [ProductFormComponent,
|
|
59
61
|
ProductBasicInfoComponent,
|
|
60
62
|
ProductFormButtonComponent] });
|
|
61
63
|
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductModule, imports: [CommonModule,
|
|
@@ -76,7 +78,8 @@ export class ProductModule {
|
|
|
76
78
|
FormsModule,
|
|
77
79
|
ColumnSelectorModule,
|
|
78
80
|
ProductLocationListComponent,
|
|
79
|
-
StockTransferListComponent
|
|
81
|
+
StockTransferListComponent,
|
|
82
|
+
ExportToExcelButtonComponent] });
|
|
80
83
|
}
|
|
81
84
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProductModule, decorators: [{
|
|
82
85
|
type: NgModule,
|
|
@@ -113,7 +116,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
113
116
|
FormsModule,
|
|
114
117
|
ColumnSelectorModule,
|
|
115
118
|
ProductLocationListComponent,
|
|
116
|
-
StockTransferListComponent
|
|
119
|
+
StockTransferListComponent,
|
|
120
|
+
ExportToExcelButtonComponent
|
|
117
121
|
],
|
|
118
122
|
exports: [
|
|
119
123
|
ProductFormComponent,
|
|
@@ -122,4 +126,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
122
126
|
],
|
|
123
127
|
}]
|
|
124
128
|
}] });
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9wcm9kdWN0L3Byb2R1Y3QubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLGNBQWMsRUFDZCx3QkFBd0IsRUFDeEIsb0JBQW9CLEdBQ3JCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDdkcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDcEcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDM0YsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDdkcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDeEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkRBQTZELENB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b0JBQW9CO3dCQUNwQix5QkFBeUI7d0JBQ3pCLDBCQUEwQjtxQkFDM0I7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFByb2R1Y3RSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi9wcm9kdWN0LXJvdXRpbmcubW9kdWxlJztcbmltcG9ydCB7IFByb2R1Y3RMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9wcm9kdWN0LWxpc3QvcHJvZHVjdC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9kdWN0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4vcHJvZHVjdC1mb3JtL3Byb2R1Y3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ29sdW1uU2VsZWN0b3JNb2R1bGUsXG4gIEltcG9ydENzdk1vZHVsZSxcbiAgTWF0ZXJpYWxNb2R1bGUsXG4gIFNlYXJjaGFibGVTZWxlY3Rvck1vZHVsZSxcbiAgVGltZWxpbmVGaWx0ZXJNb2R1bGUsXG59IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7IFByb2R1Y3ROYXZCYXJDb21wb25lbnQgfSBmcm9tICcuL3Byb2R1Y3QtbmF2LWJhci9wcm9kdWN0LW5hdi1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1Y3RNZWFzdXJlc0xpc3RDb21wb25lbnQgfSBmcm9tICcuL3Byb2R1Y3QtbWVhc3VyZXMtbGlzdC9wcm9kdWN0LW1lYXN1cmVzLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1Y3RNZWFzdXJlRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vcHJvZHVjdC1tZWFzdXJlLWZvcm0vcHJvZHVjdC1tZWFzdXJlLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1Y3RWaWV3UGFnZUNvbXBvbmVudCB9IGZyb20gJy4vcHJvZHVjdC12aWV3LXBhZ2UvcHJvZHVjdC12aWV3LXBhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1Y3RGb3JtQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9kdWN0LWZvcm0tYnV0dG9uL3Byb2R1Y3QtZm9ybS1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1Y3REZWxldGVCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL3Byb2R1Y3QtZGVsZXRlLWJ1dHRvbi9wcm9kdWN0LWRlbGV0ZS1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1Y3RCYXNpY0luZm9Db21wb25lbnQgfSBmcm9tICcuL3Byb2R1Y3QtYmFzaWMtaW5mby9wcm9kdWN0LWJhc2ljLWluZm8uY29tcG9uZW50JztcbmltcG9ydCB7IFN0b2NrUmVjZWlwdEZvcm1Nb2R1bGUgfSBmcm9tICcuLi9zdG9jay1yZWNlaXB0cy9zdG9jay1yZWNlaXB0LWZvcm0vc3RvY2stcmVjZWlwdC1mb3JtLm1vZHVsZSc7XG5pbXBvcnQgeyBTdG9ja0lzc3VlRm9ybU1vZHVsZSB9IGZyb20gJy4uL3N0b2NrLWlzc3VhbmNlcy9zdG9jay1pc3N1ZS1mb3JtL3N0b2NrLWlzc3VlLWZvcm0ubW9kdWxlJztcbmltcG9ydCB7IFByb2R1Y3RJbXBvcnRQYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9kdWN0LWltcG9ydC1wYWdlL3Byb2R1Y3QtaW1wb3J0LXBhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFN0b2NrUmVjZWlwdHNNb2R1bGUgfSBmcm9tICcuLi9zdG9jay1yZWNlaXB0cy9zdG9jay1yZWNlaXB0cy5tb2R1bGUnO1xuaW1wb3J0IHsgU3RvY2tJc3N1YW5jZXNMaXN0TW9kdWxlIH0gZnJvbSAnLi4vc3RvY2staXNzdWFuY2VzL3N0b2NrLWlzc3VhbmNlcy1saXN0L3N0b2NrLWlzc3VhbmNlcy1saXN0Lm1vZHVsZSc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBJbmZpbml0ZVNjcm9sbE1vZHVsZSB9IGZyb20gJ25neC1pbmZpbml0ZS1zY3JvbGwnO1xuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUHJvZHVjdFRheE1vZHVsZSB9IGZyb20gJy4vcHJvZHVjdC10YXgvcHJvZHVjdC10YXgubW9kdWxlJztcbmltcG9ydCB7IFByb2R1Y3RCYXRjaFVwZGF0ZUZvcm1Db21wb25lbnQgfSBmcm9tICcuL3Byb2R1Y3QtYmF0Y2gtdXBkYXRlLWZvcm0vcHJvZHVjdC1iYXRjaC11cGRhdGUtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdExvY2F0aW9uTGlzdENvbXBvbmVudCB9IGZyb20gJy4vcHJvZHVjdC1sb2NhdGlvbi9wcm9kdWN0LWxvY2F0aW9uLWxpc3QvcHJvZHVjdC1sb2NhdGlvbi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdG9ja1RyYW5zZmVyTGlzdENvbXBvbmVudCB9IGZyb20gJy4uL3N0b2NrLXRyYW5zZmVyL3N0b2NrLXRyYW5zZmVyLWxpc3Qvc3RvY2stdHJhbnNmZXItbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXhwb3J0VG9FeGNlbEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQtdG8tZXhjZWwtYnV0dG9uL2V4cG9ydC10by1leGNlbC1idXR0b24uY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgUHJvZHVjdExpc3RDb21wb25lbnQsXG4gICAgUHJvZHVjdEZvcm1Db21wb25lbnQsXG4gICAgUHJvZHVjdE5hdkJhckNvbXBvbmVudCxcbiAgICBQcm9kdWN0TWVhc3VyZXNMaXN0Q29tcG9uZW50LFxuICAgIFByb2R1Y3RNZWFzdXJlRm9ybUNvbXBvbmVudCxcbiAgICBQcm9kdWN0Vmlld1BhZ2VDb21wb25lbnQsXG4gICAgUHJvZHVjdEZvcm1CdXR0b25Db21wb25lbnQsXG4gICAgUHJvZHVjdERlbGV0ZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBQcm9kdWN0QmFzaWNJbmZvQ29tcG9uZW50LFxuICAgIFByb2R1Y3RJbXBvcnRQYWdlQ29tcG9uZW50LFxuICAgIFByb2R1Y3RCYXRjaFVwZGF0ZUZvcm1Db21wb25lbnQsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUHJvZHVjdFJvdXRpbmdNb2R1bGUsXG4gICAgU2VhcmNoYWJsZVNlbGVjdG9yTW9kdWxlLFxuICAgIFRpbWVsaW5lRmlsdGVyTW9kdWxlLFxuICAgIFN0b2NrUmVjZWlwdEZvcm1Nb2R1bGUsXG4gICAgU3RvY2tJc3N1ZUZvcm1Nb2R1bGUsXG4gICAgSW1wb3J0Q3N2TW9kdWxlLFxuICAgIFN0b2NrUmVjZWlwdHNNb2R1bGUsXG4gICAgU3RvY2tJc3N1YW5jZXNMaXN0TW9kdWxlLFxuICAgIFByb2R1Y3RUYXhNb2R1bGUsXG4gICAgTWF0ZXJpYWxNb2R1bGUsXG4gICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXG4gICAgSW5maW5pdGVTY3JvbGxNb2R1bGUsXG4gICAgRmxleE1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvbHVtblNlbGVjdG9yTW9kdWxlLFxuICAgIFByb2R1Y3RMb2NhdGlvbkxpc3RDb21wb25lbnQsXG4gICAgU3RvY2tUcmFuc2Zlckxpc3RDb21wb25lbnQsXG4gICAgRXhwb3J0VG9FeGNlbEJ1dHRvbkNvbXBvbmVudFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgUHJvZHVjdEZvcm1Db21wb25lbnQsXG4gICAgUHJvZHVjdEJhc2ljSW5mb0NvbXBvbmVudCxcbiAgICBQcm9kdWN0Rm9ybUJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdE1vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -56,17 +56,15 @@ export class InventoryValueReportComponent extends TechlifyListingControllerInte
|
|
|
56
56
|
const params = {
|
|
57
57
|
...this.requestHelperService.convertToFormData(this.filterForm.value),
|
|
58
58
|
page: this.page,
|
|
59
|
-
perPage:
|
|
59
|
+
perPage: 50,
|
|
60
60
|
with: 'categories,lastStockReceipt',
|
|
61
61
|
};
|
|
62
62
|
this.isWorking = true;
|
|
63
63
|
this.service.index(params).subscribe({
|
|
64
64
|
next: (response) => {
|
|
65
65
|
this.models = this.models?.concat(response?.data);
|
|
66
|
+
this.totalInventoryValue += response?.totals?.total_inventory_value;
|
|
66
67
|
this.isWorking = false;
|
|
67
|
-
this.models.forEach((model) => {
|
|
68
|
-
this.totalInventoryValue += model?.inventory_value;
|
|
69
|
-
});
|
|
70
68
|
},
|
|
71
69
|
error: () => (this.isWorking = false),
|
|
72
70
|
});
|
|
@@ -113,6 +111,13 @@ export class InventoryValueReportComponent extends TechlifyListingControllerInte
|
|
|
113
111
|
error: () => (this.isExporting = false),
|
|
114
112
|
});
|
|
115
113
|
}
|
|
114
|
+
// We need to override the reload method to reset the totalInventoryValue
|
|
115
|
+
reload() {
|
|
116
|
+
this.totalInventoryValue = 0;
|
|
117
|
+
this.page = 1;
|
|
118
|
+
this.models = [];
|
|
119
|
+
this.loadData();
|
|
120
|
+
}
|
|
116
121
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InventoryValueReportComponent, deps: [{ token: i1.InventoryValueReportService }, { token: i2.ActivatedRoute }, { token: i3.RequestHelperService }, { token: i4.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
117
122
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InventoryValueReportComponent, isStandalone: true, selector: "app-inventory-value-report", usesInheritance: true, ngImport: i0, template: "<div class=\"container\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">Inventory Value Report</h3>\n <i class=\"fa-solid fa-file-excel cursor-pointer d-print-none\" (click)=\"export('excel')\"></i>\n <i class=\"fa-solid fa-file-pdf cursor-pointer d-print-none\" (click)=\"export('pdf')\"></i>\n </div>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-form-field>\n <mat-label>Search</mat-label>\n <input matInput placeholder=\"Search products\" formControlName=\"search\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Category</mat-label>\n <app-searchable-selector apiUrl=\"api/product-categories\" formControlName=\"category_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"mt-3\">\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n matSort\n (matSortChange)=\"onSortChange($event)\"\n >\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Product Column -->\n <ng-container matColumnDef=\"Product\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"name\">Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a [routerLink]=\"['/inventory/products', element?.id, 'view']\" class=\"text-dark\">\n {{ element?.name }}\n </a>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Description Column -->\n <ng-container matColumnDef=\"Description\">\n <th mat-header-cell *matHeaderCellDef>Description</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.description }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Categories Column -->\n <ng-container matColumnDef=\"Categories\">\n <th mat-header-cell *matHeaderCellDef>Categories</th>\n <td mat-cell *matCellDef=\"let element\">\n <app-product-category-badges [product]=\"element\"></app-product-category-badges>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <strong>Total</strong>\n </td>\n </ng-container>\n\n <!-- Available Stock Column -->\n <ng-container matColumnDef=\"Available Stock\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"current_stock\">Available Stock</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.current_stock }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Average Price Column -->\n <ng-container matColumnDef=\"Average Price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"average_purchase_price\">Average Price</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.average_purchase_price | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Inventory Value Column -->\n <ng-container matColumnDef=\"Inventory Value\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"inventory_value\">Inventory Value</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.inventory_value | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <strong>{{ totalInventoryValue | currency }}</strong>\n </td>\n </ng-container>\n\n <!-- Last Purchase Price Column -->\n <ng-container matColumnDef=\"Last Purchase Price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"last_stock_receipt.purchase_price\">\n Last Purchase Price\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.last_stock_receipt?.purchase_price ?? 0 | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Inventory Value Based On Last Purchase Price Column -->\n <ng-container matColumnDef=\"Inventory Value Based On Last Purchase Price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"last_stock_receipt.amount\">\n <div>\n <p class=\"mb-0\">Inventory Value</p>\n <small class=\"text-secondary\">Based on last purchase price</small>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.inventory_value_based_on_last_price ?? 0 | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: MatCardContent, selector: "mat-card-content" }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ProductCategoryBadgesComponent, selector: "app-product-category-badges", inputs: ["product"] }, { kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "component", type: MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "component", type: MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "directive", type: MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: SearchableSelectorModule }, { kind: "component", type: i3.SearchableSelectorComponent, selector: "app-searchable-selector", inputs: ["valueField", "titleField", "subtitleField", "apiUrl", "multiple", "selectedValue", "enableSearch", "add", "addConfig", "edit", "editConfig", "sort", "sortBy", "searchField", "itemComponent", "items", "apiDataProperty", "cache", "perPage", "inDataSearch", "panelWidth", "focusSearchOnOpen", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }], preserveWhitespaces: true });
|
|
118
123
|
}
|
|
@@ -165,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
165
170
|
MatSortHeader,
|
|
166
171
|
], template: "<div class=\"container\">\n <mat-card>\n <mat-card-content class=\"d-flex justify-content-between align-items-center gap-2\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <h3 class=\"mb-0\">Inventory Value Report</h3>\n <i class=\"fa-solid fa-file-excel cursor-pointer d-print-none\" (click)=\"export('excel')\"></i>\n <i class=\"fa-solid fa-file-pdf cursor-pointer d-print-none\" (click)=\"export('pdf')\"></i>\n </div>\n <form [formGroup]=\"filterForm\" class=\"d-flex justify-content-end align-items-center gap-2\">\n <mat-form-field>\n <mat-label>Search</mat-label>\n <input matInput placeholder=\"Search products\" formControlName=\"search\" />\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Category</mat-label>\n <app-searchable-selector apiUrl=\"api/product-categories\" formControlName=\"category_ids\" [multiple]=\"true\">\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"mt-3\">\n <mat-card-content class=\"p-0\">\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n matSort\n (matSortChange)=\"onSortChange($event)\"\n >\n <!-- # Column -->\n <ng-container matColumnDef=\"#\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Product Column -->\n <ng-container matColumnDef=\"Product\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"name\">Product</th>\n <td mat-cell *matCellDef=\"let element\">\n <a [routerLink]=\"['/inventory/products', element?.id, 'view']\" class=\"text-dark\">\n {{ element?.name }}\n </a>\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Description Column -->\n <ng-container matColumnDef=\"Description\">\n <th mat-header-cell *matHeaderCellDef>Description</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.description }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Categories Column -->\n <ng-container matColumnDef=\"Categories\">\n <th mat-header-cell *matHeaderCellDef>Categories</th>\n <td mat-cell *matCellDef=\"let element\">\n <app-product-category-badges [product]=\"element\"></app-product-category-badges>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <strong>Total</strong>\n </td>\n </ng-container>\n\n <!-- Available Stock Column -->\n <ng-container matColumnDef=\"Available Stock\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"current_stock\">Available Stock</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.current_stock }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Average Price Column -->\n <ng-container matColumnDef=\"Average Price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"average_purchase_price\">Average Price</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.average_purchase_price | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Inventory Value Column -->\n <ng-container matColumnDef=\"Inventory Value\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"inventory_value\">Inventory Value</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.inventory_value | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <strong>{{ totalInventoryValue | currency }}</strong>\n </td>\n </ng-container>\n\n <!-- Last Purchase Price Column -->\n <ng-container matColumnDef=\"Last Purchase Price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"last_stock_receipt.purchase_price\">\n Last Purchase Price\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.last_stock_receipt?.purchase_price ?? 0 | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <!-- Inventory Value Based On Last Purchase Price Column -->\n <ng-container matColumnDef=\"Inventory Value Based On Last Purchase Price\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header=\"last_stock_receipt.amount\">\n <div>\n <p class=\"mb-0\">Inventory Value</p>\n <small class=\"text-secondary\">Based on last purchase price</small>\n </div>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.inventory_value_based_on_last_price ?? 0 | currency }}\n </td>\n <td mat-footer-cell *matFooterCellDef></td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n <tr mat-footer-row *matFooterRowDef=\"displayedColumns\"></tr>\n </table>\n\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>\n" }]
|
|
167
172
|
}], ctorParameters: () => [{ type: i1.InventoryValueReportService }, { type: i2.ActivatedRoute }, { type: i3.RequestHelperService }, { type: i4.FormBuilder }] });
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52ZW50b3J5LXZhbHVlLXJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9yZXBvcnRzL2ludmVudG9yeS12YWx1ZS1yZXBvcnQvaW52ZW50b3J5LXZhbHVlLXJlcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9yZXBvcnRzL2ludmVudG9yeS12YWx1ZS1yZXBvcnQvaW52ZW50b3J5LXZhbHVlLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUNMLE9BQU8sRUFDUCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLGVBQWUsRUFDZixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEdBQ1QsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQXdCLHdCQUF3QixFQUFFLGtDQUFrQyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkgsT0FBTyxFQUFrQixVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpRkFBaUYsQ0FBQztBQUNqSSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FB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d0JBQ1AsY0FBYzt3QkFDZCxRQUFRO3dCQUNSLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixVQUFVO3dCQUNWLE1BQU07d0JBQ04sVUFBVTt3QkFDVixhQUFhO3dCQUNiLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixPQUFPO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxZQUFZO3dCQUNaLE9BQU87d0JBQ1AsVUFBVTt3QkFDVixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLFVBQVU7d0JBQ1YsOEJBQThCO3dCQUM5QixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsSUFBSTt3QkFDSixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsUUFBUTt3QkFDUix1QkFBdUI7d0JBQ3ZCLE9BQU87d0JBQ1AsYUFBYTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRDYXJkLCBNYXRDYXJkQ29udGVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHtcbiAgTWF0Q2VsbCxcbiAgTWF0Q2VsbERlZixcbiAgTWF0Q29sdW1uRGVmLFxuICBNYXRGb290ZXJDZWxsLFxuICBNYXRGb290ZXJDZWxsRGVmLFxuICBNYXRGb290ZXJSb3csXG4gIE1hdEZvb3RlclJvd0RlZixcbiAgTWF0SGVhZGVyQ2VsbCxcbiAgTWF0SGVhZGVyQ2VsbERlZixcbiAgTWF0SGVhZGVyUm93LFxuICBNYXRIZWFkZXJSb3dEZWYsXG4gIE1hdFJvdyxcbiAgTWF0Um93RGVmLFxuICBNYXRUYWJsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgUmVxdWVzdEhlbHBlclNlcnZpY2UsIFNlYXJjaGFibGVTZWxlY3Rvck1vZHVsZSwgVGVjaGxpZnlMaXN0aW5nQ29udHJvbGxlckludGVyZmFjZSB9IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7IEludmVudG9yeVZhbHVlUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL2ludmVudG9yeS12YWx1ZS1yZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQcm9kdWN0Q2F0ZWdvcnlCYWRnZXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wcm9kdWN0L3dpZGdldHMvcHJvZHVjdC1jYXRlZ29yeS1iYWRnZXMvcHJvZHVjdC1jYXRlZ29yeS1iYWRnZXMuY29tcG9uZW50JztcbmltcG9ydCB7IEN1cnJlbmN5UGlwZSwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSB9IGZyb20gJ25neC1pbmZpbml0ZS1zY3JvbGwnO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydEhlYWRlciwgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaW52ZW50b3J5LXZhbHVlLXJlcG9ydCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRDYXJkLFxuICAgIE1hdENhcmRDb250ZW50LFxuICAgIE1hdFRhYmxlLFxuICAgIE1hdENvbHVtbkRlZixcbiAgICBNYXRDb2x1bW5EZWYsXG4gICAgTWF0Q2VsbERlZixcbiAgICBNYXRSb3csXG4gICAgTWF0Q2VsbERlZixcbiAgICBNYXRIZWFkZXJDZWxsLFxuICAgIE1hdENlbGwsXG4gICAgTWF0Um93RGVmLFxuICAgIE1hdENlbGxEZWYsXG4gICAgTWF0SGVhZGVyQ2VsbCxcbiAgICBNYXRDb2x1bW5EZWYsXG4gICAgTWF0Q2VsbCxcbiAgICBNYXRDb2x1bW5EZWYsXG4gICAgTWF0SGVhZGVyQ2VsbCxcbiAgICBNYXRIZWFkZXJSb3dEZWYsXG4gICAgTWF0SGVhZGVyQ2VsbCxcbiAgICBNYXRDZWxsLFxuICAgIE1hdEhlYWRlclJvdyxcbiAgICBNYXRDZWxsLFxuICAgIE1hdENlbGxEZWYsXG4gICAgTWF0SGVhZGVyQ2VsbERlZixcbiAgICBNYXRIZWFkZXJDZWxsRGVmLFxuICAgIE1hdEhlYWRlckNlbGxEZWYsXG4gICAgTWF0SGVhZGVyQ2VsbERlZixcbiAgICBSb3V0ZXJMaW5rLFxuICAgIFByb2R1Y3RDYXRlZ29yeUJhZGdlc0NvbXBvbmVudCxcbiAgICBDdXJyZW5jeVBpcGUsXG4gICAgTWF0UHJvZ3Jlc3NCYXIsXG4gICAgTmdJZixcbiAgICBNYXRGb290ZXJSb3dEZWYsXG4gICAgTWF0Rm9vdGVyUm93LFxuICAgIE1hdEZvb3RlckNlbGxEZWYsXG4gICAgTWF0Rm9vdGVyQ2VsbCxcbiAgICBNYXRGb3JtRmllbGQsXG4gICAgTWF0TGFiZWwsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBTZWFyY2hhYmxlU2VsZWN0b3JNb2R1bGUsXG4gICAgTWF0SW5wdXQsXG4gICAgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmUsXG4gICAgTWF0U29ydCxcbiAgICBNYXRTb3J0SGVhZGVyLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vaW52ZW50b3J5LXZhbHVlLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9pbnZlbnRvcnktdmFsdWUtcmVwb3J0LmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgSW52ZW50b3J5VmFsdWVSZXBvcnRDb21wb25lbnQgZXh0ZW5kcyBUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbXG4gICAgJyMnLFxuICAgICdQcm9kdWN0JyxcbiAgICAnRGVzY3JpcHRpb24nLFxuICAgICdDYXRlZ29yaWVzJyxcbiAgICAnQXZhaWxhYmxlIFN0b2NrJyxcbiAgICAnQXZlcmFnZSBQcmljZScsXG4gICAgJ0ludmVudG9yeSBWYWx1ZScsXG4gICAgJ0xhc3QgUHVyY2hhc2UgUHJpY2UnLFxuICAgICdJbnZlbnRvcnkgVmFsdWUgQmFzZWQgT24gTGFzdCBQdXJjaGFzZSBQcmljZScsXG4gIF07XG4gIHRvdGFsSW52ZW50b3J5VmFsdWUgPSAwO1xuICBpc0V4cG9ydGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VydmljZTogSW52ZW50b3J5VmFsdWVSZXBvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVxdWVzdEhlbHBlclNlcnZpY2U6IFJlcXVlc3RIZWxwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmZpbHRlckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGNhdGVnb3J5X2lkczogWycnXSxcbiAgICAgIHNlYXJjaDogWycnXSxcbiAgICAgIHNvcnRfYnk6IFsnaWR8ZGVzYyddLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVGb3JtV2l0aFF1ZXJ5UGFyYW1zKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0Zvcm1DaGFuZ2VzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1JvdXRlQ2hhbmdlcygpO1xuICB9XG5cbiAgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAuLi50aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1EYXRhKHRoaXMuZmlsdGVyRm9ybS52YWx1ZSksXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICBwZXJQYWdlOiB0aGlzLnBlclBhZ2UsXG4gICAgICB3aXRoOiAnY2F0ZWdvcmllcyxsYXN0U3RvY2tSZWNlaXB0JyxcbiAgICB9O1xuICAgIHRoaXMuaXNXb3JraW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2UuaW5kZXgocGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5tb2RlbHMgPSB0aGlzLm1vZGVscz8uY29uY2F0KHJlc3BvbnNlPy5kYXRhKTtcbiAgICAgICAgdGhpcy5pc1dvcmtpbmcgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm1vZGVscy5mb3JFYWNoKChtb2RlbDogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy50b3RhbEludmVudG9yeVZhbHVlICs9IG1vZGVsPy5pbnZlbnRvcnlfdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5pc1dvcmtpbmcgPSBmYWxzZSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvcm1XaXRoUXVlcnlQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yZXF1ZXN0SGVscGVyU2VydmljZS51cGRhdGVGb3JtV2l0aFF1ZXJ5UGFyYW1zKHRoaXMuZmlsdGVyRm9ybSwge1xuICAgICAgY2F0ZWdvcnlfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvRm9ybUNoYW5nZXMoKTogdm9pZCB7XG4gICAgKHRoaXMuZmlsdGVyRm9ybSBhcyBGb3JtR3JvdXApLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg4MDApKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHRoaXMucmVxdWVzdEhlbHBlclNlcnZpY2UuY29udmVydFRvRm9ybURhdGEodGhpcy5maWx0ZXJGb3JtLnZhbHVlKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1JvdXRlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgb25Tb3J0Q2hhbmdlKHNvcnQ6IFNvcnQpIHtcbiAgICBsZXQgeyBhY3RpdmUsIGRpcmVjdGlvbiB9ID0gc29ydDtcbiAgICBpZiAoIWFjdGl2ZSkgYWN0aXZlID0gJ2lkJztcbiAgICBpZiAoIWRpcmVjdGlvbikgZGlyZWN0aW9uID0gJ2Rlc2MnO1xuICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ3NvcnRfYnknKT8uc2V0VmFsdWUoYWN0aXZlICsgJ3wnICsgZGlyZWN0aW9uKTtcbiAgfVxuXG4gIGV4cG9ydCh0eXBlOiBzdHJpbmcgPSAnZXhjZWwnKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAuLi50aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1EYXRhKHRoaXMuZmlsdGVyRm9ybS52YWx1ZSksXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICBwZXJQYWdlOiA1MDAwMCxcbiAgICAgIHdpdGg6ICdjYXRlZ29yaWVzLGxhc3RTdG9ja1JlY2VpcHQnLFxuICAgICAgZXhwb3J0X3R5cGU6IHR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmlzRXhwb3J0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2UuZXhwb3J0KHBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNFeHBvcnRpbmcgPSBmYWxzZTtcbiAgICAgICAgd2luZG93Lm9wZW4ocmVzcG9uc2U/Lml0ZW0/LmZpbGVfbGluaywgJ19ibGFuaycpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5pc0V4cG9ydGluZyA9IGZhbHNlKSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICA8bWF0LWNhcmQ+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibWItMFwiPkludmVudG9yeSBWYWx1ZSBSZXBvcnQ8L2gzPlxuICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWZpbGUtZXhjZWwgY3Vyc29yLXBvaW50ZXIgZC1wcmludC1ub25lXCIgKGNsaWNrKT1cImV4cG9ydCgnZXhjZWwnKVwiPjwvaT5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1maWxlLXBkZiBjdXJzb3ItcG9pbnRlciBkLXByaW50LW5vbmVcIiAoY2xpY2spPVwiZXhwb3J0KCdwZGYnKVwiPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+U2VhcmNoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIHByb2R1Y3RzXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCIgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5DYXRlZ29yeTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9XCJhcGkvcHJvZHVjdC1jYXRlZ29yaWVzXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2F0ZWdvcnlfaWRzXCIgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICAgICAgICA8L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9mb3JtPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cblxuICA8bWF0LWNhcmQgY2xhc3M9XCJtdC0zXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTBcIj5cbiAgICAgIDx0YWJsZVxuICAgICAgICBtYXQtdGFibGVcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwibW9kZWxzXCJcbiAgICAgICAgY2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgIGluZmluaXRlU2Nyb2xsXG4gICAgICAgIFtpbmZpbml0ZVNjcm9sbERpc3RhbmNlXT1cIjJcIlxuICAgICAgICBbaW5maW5pdGVTY3JvbGxUaHJvdHRsZV09XCI1MFwiXG4gICAgICAgIChzY3JvbGxlZCk9XCJvblNjcm9sbCgpXCJcbiAgICAgICAgbWF0U29ydFxuICAgICAgICAobWF0U29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gIyBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiI1wiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IzwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gaW5kZXhcIj57eyBpICsgMSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFByb2R1Y3QgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIlByb2R1Y3RcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cIm5hbWVcIj5Qcm9kdWN0PC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvaW52ZW50b3J5L3Byb2R1Y3RzJywgZWxlbWVudD8uaWQsICd2aWV3J11cIiBjbGFzcz1cInRleHQtZGFya1wiPlxuICAgICAgICAgICAgICB7eyBlbGVtZW50Py5uYW1lIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gRGVzY3JpcHRpb24gQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIkRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5EZXNjcmlwdGlvbjwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIHt7IGVsZW1lbnQ/LmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gQ2F0ZWdvcmllcyBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiQ2F0ZWdvcmllc1wiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+Q2F0ZWdvcmllczwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxhcHAtcHJvZHVjdC1jYXRlZ29yeS1iYWRnZXMgW3Byb2R1Y3RdPVwiZWxlbWVudFwiPjwvYXBwLXByb2R1Y3QtY2F0ZWdvcnktYmFkZ2VzPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgICAgIDxzdHJvbmc+VG90YWw8L3N0cm9uZz5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEF2YWlsYWJsZSBTdG9jayBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiQXZhaWxhYmxlIFN0b2NrXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI9XCJjdXJyZW50X3N0b2NrXCI+QXZhaWxhYmxlIFN0b2NrPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAge3sgZWxlbWVudD8uY3VycmVudF9zdG9jayB9fVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEF2ZXJhZ2UgUHJpY2UgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIkF2ZXJhZ2UgUHJpY2VcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cImF2ZXJhZ2VfcHVyY2hhc2VfcHJpY2VcIj5BdmVyYWdlIFByaWNlPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAge3sgZWxlbWVudD8uYXZlcmFnZV9wdXJjaGFzZV9wcmljZSB8IGN1cnJlbmN5IH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gSW52ZW50b3J5IFZhbHVlIENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJJbnZlbnRvcnkgVmFsdWVcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cImludmVudG9yeV92YWx1ZVwiPkludmVudG9yeSBWYWx1ZTwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIHt7IGVsZW1lbnQ/LmludmVudG9yeV92YWx1ZSB8IGN1cnJlbmN5IH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICAgICAgPHN0cm9uZz57eyB0b3RhbEludmVudG9yeVZhbHVlIHwgY3VycmVuY3kgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIExhc3QgUHVyY2hhc2UgUHJpY2UgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIkxhc3QgUHVyY2hhc2UgUHJpY2VcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cImxhc3Rfc3RvY2tfcmVjZWlwdC5wdXJjaGFzZV9wcmljZVwiPlxuICAgICAgICAgICAgTGFzdCBQdXJjaGFzZSBQcmljZVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIHt7IGVsZW1lbnQ/Lmxhc3Rfc3RvY2tfcmVjZWlwdD8ucHVyY2hhc2VfcHJpY2UgPz8gMCB8IGN1cnJlbmN5IH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gSW52ZW50b3J5IFZhbHVlIEJhc2VkIE9uIExhc3QgUHVyY2hhc2UgUHJpY2UgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIkludmVudG9yeSBWYWx1ZSBCYXNlZCBPbiBMYXN0IFB1cmNoYXNlIFByaWNlXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI9XCJsYXN0X3N0b2NrX3JlY2VpcHQuYW1vdW50XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIj5JbnZlbnRvcnkgVmFsdWU8L3A+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+QmFzZWQgb24gbGFzdCBwdXJjaGFzZSBwcmljZTwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICB7eyBlbGVtZW50Py5pbnZlbnRvcnlfdmFsdWVfYmFzZWRfb25fbGFzdF9wcmljZSA/PyAwIHwgY3VycmVuY3kgfX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgPC90YWJsZT5cblxuICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAqbmdJZj1cImlzV29ya2luZ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG48L2Rpdj5cbiJdfQ==
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52ZW50b3J5LXZhbHVlLXJlcG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9yZXBvcnRzL2ludmVudG9yeS12YWx1ZS1yZXBvcnQvaW52ZW50b3J5LXZhbHVlLXJlcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9yZXBvcnRzL2ludmVudG9yeS12YWx1ZS1yZXBvcnQvaW52ZW50b3J5LXZhbHVlLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUNMLE9BQU8sRUFDUCxVQUFVLEVBQ1YsWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLGVBQWUsRUFDZixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEdBQ1QsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQXdCLHdCQUF3QixFQUFFLGtDQUFrQyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkgsT0FBTyxFQUFrQixVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxpRkFBaUYsQ0FBQztBQUNqSSxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBMEIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBUSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFzRHRFLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxrQ0FBa0M7SUFnQnpFO0lBQ0E7SUFDQTtJQUNBO0lBbEJWLGdCQUFnQixHQUFhO1FBQzNCLEdBQUc7UUFDSCxTQUFTO1FBQ1QsYUFBYTtRQUNiLFlBQVk7UUFDWixpQkFBaUI7UUFDakIsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixxQkFBcUI7UUFDckIsOENBQThDO0tBQy9DLENBQUM7SUFDRixtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDeEIsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUVwQixZQUNVLE9BQW9DLEVBQ3BDLGNBQThCLEVBQzlCLG9CQUEwQyxFQUMxQyxXQUF3QjtRQUVoQyxLQUFLLEVBQUUsQ0FBQztRQUxBLFlBQU8sR0FBUCxPQUFPLENBQTZCO1FBQ3BDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBSWhDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDdkMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNaLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxNQUFNLEdBQVE7WUFDbEIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDckUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLEVBQUUsNkJBQTZCO1NBQ3BDLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbkMsSUFBSSxFQUFFLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsbUJBQW1CLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDekIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkUsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sc0JBQXNCO1FBQzNCLElBQUksQ0FBQyxVQUF3QixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVFLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbEgsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3RixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVU7UUFDckIsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTO1lBQUUsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQWUsT0FBTztRQUMzQixNQUFNLE1BQU0sR0FBUTtZQUNsQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNyRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixPQUFPLEVBQUUsS0FBSztZQUNkLElBQUksRUFBRSw2QkFBNkI7WUFDbkMsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNwQyxJQUFJLEVBQUUsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ3hDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5RUFBeUU7SUFDaEUsTUFBTTtRQUNiLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQzt3R0F6R1UsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsNkdDbkYxQyxrdkxBeUlBLDBERHRHSSxPQUFPLG9HQUNQLGNBQWMsNkRBQ2QsUUFBUSxnR0FDUixZQUFZLHFGQUVaLFVBQVUseURBQ1YsTUFBTSx1RkFFTixhQUFhLGlGQUNiLE9BQU8sbUVBQ1AsU0FBUyx1R0FPVCxlQUFlLG9IQUdmLFlBQVksMkdBR1osZ0JBQWdCLCtEQUloQixVQUFVLG9PQUNWLDhCQUE4Qix3RkFDOUIsWUFBWSxpREFDWixjQUFjLHlLQUNkLElBQUksNkZBQ0osZUFBZSxvSEFDZixZQUFZLDJHQUNaLGdCQUFnQiwrREFDaEIsYUFBYSxpRkFDYixZQUFZLDRMQUNaLFFBQVEscURBQ1IsbUJBQW1CLDQ4QkFDbkIsd0JBQXdCLG1oQkFDeEIsUUFBUSxpVUFDUix1QkFBdUIsMFdBQ3ZCLE9BQU8sa05BQ1AsYUFBYTs7NEZBS0osNkJBQTZCO2tCQXBEekMsU0FBUzsrQkFDRSw0QkFBNEIsY0FDMUIsSUFBSSxXQUNQO3dCQUNQLE9BQU87d0JBQ1AsY0FBYzt3QkFDZCxRQUFRO3dCQUNSLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixVQUFVO3dCQUNWLE1BQU07d0JBQ04sVUFBVTt3QkFDVixhQUFhO3dCQUNiLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLGFBQWE7d0JBQ2IsWUFBWTt3QkFDWixPQUFPO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsT0FBTzt3QkFDUCxZQUFZO3dCQUNaLE9BQU87d0JBQ1AsVUFBVTt3QkFDVixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLFVBQVU7d0JBQ1YsOEJBQThCO3dCQUM5QixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsSUFBSTt3QkFDSixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsUUFBUTt3QkFDUix1QkFBdUI7d0JBQ3ZCLE9BQU87d0JBQ1AsYUFBYTtxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRDYXJkLCBNYXRDYXJkQ29udGVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHtcbiAgTWF0Q2VsbCxcbiAgTWF0Q2VsbERlZixcbiAgTWF0Q29sdW1uRGVmLFxuICBNYXRGb290ZXJDZWxsLFxuICBNYXRGb290ZXJDZWxsRGVmLFxuICBNYXRGb290ZXJSb3csXG4gIE1hdEZvb3RlclJvd0RlZixcbiAgTWF0SGVhZGVyQ2VsbCxcbiAgTWF0SGVhZGVyQ2VsbERlZixcbiAgTWF0SGVhZGVyUm93LFxuICBNYXRIZWFkZXJSb3dEZWYsXG4gIE1hdFJvdyxcbiAgTWF0Um93RGVmLFxuICBNYXRUYWJsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgUmVxdWVzdEhlbHBlclNlcnZpY2UsIFNlYXJjaGFibGVTZWxlY3Rvck1vZHVsZSwgVGVjaGxpZnlMaXN0aW5nQ29udHJvbGxlckludGVyZmFjZSB9IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7IEludmVudG9yeVZhbHVlUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL2ludmVudG9yeS12YWx1ZS1yZXBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTGluayB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQcm9kdWN0Q2F0ZWdvcnlCYWRnZXNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wcm9kdWN0L3dpZGdldHMvcHJvZHVjdC1jYXRlZ29yeS1iYWRnZXMvcHJvZHVjdC1jYXRlZ29yeS1iYWRnZXMuY29tcG9uZW50JztcbmltcG9ydCB7IEN1cnJlbmN5UGlwZSwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSB9IGZyb20gJ25neC1pbmZpbml0ZS1zY3JvbGwnO1xuaW1wb3J0IHsgTWF0U29ydCwgTWF0U29ydEhlYWRlciwgU29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaW52ZW50b3J5LXZhbHVlLXJlcG9ydCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRDYXJkLFxuICAgIE1hdENhcmRDb250ZW50LFxuICAgIE1hdFRhYmxlLFxuICAgIE1hdENvbHVtbkRlZixcbiAgICBNYXRDb2x1bW5EZWYsXG4gICAgTWF0Q2VsbERlZixcbiAgICBNYXRSb3csXG4gICAgTWF0Q2VsbERlZixcbiAgICBNYXRIZWFkZXJDZWxsLFxuICAgIE1hdENlbGwsXG4gICAgTWF0Um93RGVmLFxuICAgIE1hdENlbGxEZWYsXG4gICAgTWF0SGVhZGVyQ2VsbCxcbiAgICBNYXRDb2x1bW5EZWYsXG4gICAgTWF0Q2VsbCxcbiAgICBNYXRDb2x1bW5EZWYsXG4gICAgTWF0SGVhZGVyQ2VsbCxcbiAgICBNYXRIZWFkZXJSb3dEZWYsXG4gICAgTWF0SGVhZGVyQ2VsbCxcbiAgICBNYXRDZWxsLFxuICAgIE1hdEhlYWRlclJvdyxcbiAgICBNYXRDZWxsLFxuICAgIE1hdENlbGxEZWYsXG4gICAgTWF0SGVhZGVyQ2VsbERlZixcbiAgICBNYXRIZWFkZXJDZWxsRGVmLFxuICAgIE1hdEhlYWRlckNlbGxEZWYsXG4gICAgTWF0SGVhZGVyQ2VsbERlZixcbiAgICBSb3V0ZXJMaW5rLFxuICAgIFByb2R1Y3RDYXRlZ29yeUJhZGdlc0NvbXBvbmVudCxcbiAgICBDdXJyZW5jeVBpcGUsXG4gICAgTWF0UHJvZ3Jlc3NCYXIsXG4gICAgTmdJZixcbiAgICBNYXRGb290ZXJSb3dEZWYsXG4gICAgTWF0Rm9vdGVyUm93LFxuICAgIE1hdEZvb3RlckNlbGxEZWYsXG4gICAgTWF0Rm9vdGVyQ2VsbCxcbiAgICBNYXRGb3JtRmllbGQsXG4gICAgTWF0TGFiZWwsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBTZWFyY2hhYmxlU2VsZWN0b3JNb2R1bGUsXG4gICAgTWF0SW5wdXQsXG4gICAgSW5maW5pdGVTY3JvbGxEaXJlY3RpdmUsXG4gICAgTWF0U29ydCxcbiAgICBNYXRTb3J0SGVhZGVyLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vaW52ZW50b3J5LXZhbHVlLXJlcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9pbnZlbnRvcnktdmFsdWUtcmVwb3J0LmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgSW52ZW50b3J5VmFsdWVSZXBvcnRDb21wb25lbnQgZXh0ZW5kcyBUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbXG4gICAgJyMnLFxuICAgICdQcm9kdWN0JyxcbiAgICAnRGVzY3JpcHRpb24nLFxuICAgICdDYXRlZ29yaWVzJyxcbiAgICAnQXZhaWxhYmxlIFN0b2NrJyxcbiAgICAnQXZlcmFnZSBQcmljZScsXG4gICAgJ0ludmVudG9yeSBWYWx1ZScsXG4gICAgJ0xhc3QgUHVyY2hhc2UgUHJpY2UnLFxuICAgICdJbnZlbnRvcnkgVmFsdWUgQmFzZWQgT24gTGFzdCBQdXJjaGFzZSBQcmljZScsXG4gIF07XG4gIHRvdGFsSW52ZW50b3J5VmFsdWUgPSAwO1xuICBpc0V4cG9ydGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VydmljZTogSW52ZW50b3J5VmFsdWVSZXBvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVxdWVzdEhlbHBlclNlcnZpY2U6IFJlcXVlc3RIZWxwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmZpbHRlckZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGNhdGVnb3J5X2lkczogWycnXSxcbiAgICAgIHNlYXJjaDogWycnXSxcbiAgICAgIHNvcnRfYnk6IFsnaWR8ZGVzYyddLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVGb3JtV2l0aFF1ZXJ5UGFyYW1zKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0Zvcm1DaGFuZ2VzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb1JvdXRlQ2hhbmdlcygpO1xuICB9XG5cbiAgbG9hZERhdGEoKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAuLi50aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1EYXRhKHRoaXMuZmlsdGVyRm9ybS52YWx1ZSksXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICBwZXJQYWdlOiA1MCxcbiAgICAgIHdpdGg6ICdjYXRlZ29yaWVzLGxhc3RTdG9ja1JlY2VpcHQnLFxuICAgIH07XG4gICAgdGhpcy5pc1dvcmtpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2VydmljZS5pbmRleChwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVscyA9IHRoaXMubW9kZWxzPy5jb25jYXQocmVzcG9uc2U/LmRhdGEpO1xuICAgICAgICB0aGlzLnRvdGFsSW52ZW50b3J5VmFsdWUgKz0gcmVzcG9uc2U/LnRvdGFscz8udG90YWxfaW52ZW50b3J5X3ZhbHVlO1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5pc1dvcmtpbmcgPSBmYWxzZSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvcm1XaXRoUXVlcnlQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yZXF1ZXN0SGVscGVyU2VydmljZS51cGRhdGVGb3JtV2l0aFF1ZXJ5UGFyYW1zKHRoaXMuZmlsdGVyRm9ybSwge1xuICAgICAgY2F0ZWdvcnlfaWRzOiB7IG11bHRpcGxlOiB0cnVlIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvRm9ybUNoYW5nZXMoKTogdm9pZCB7XG4gICAgKHRoaXMuZmlsdGVyRm9ybSBhcyBGb3JtR3JvdXApLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSg4MDApKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLnVwZGF0ZVF1ZXJ5UGFyYW1zKHRoaXMucmVxdWVzdEhlbHBlclNlcnZpY2UuY29udmVydFRvRm9ybURhdGEodGhpcy5maWx0ZXJGb3JtLnZhbHVlKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1JvdXRlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgb25Tb3J0Q2hhbmdlKHNvcnQ6IFNvcnQpIHtcbiAgICBsZXQgeyBhY3RpdmUsIGRpcmVjdGlvbiB9ID0gc29ydDtcbiAgICBpZiAoIWFjdGl2ZSkgYWN0aXZlID0gJ2lkJztcbiAgICBpZiAoIWRpcmVjdGlvbikgZGlyZWN0aW9uID0gJ2Rlc2MnO1xuICAgIHRoaXMuZmlsdGVyRm9ybS5nZXQoJ3NvcnRfYnknKT8uc2V0VmFsdWUoYWN0aXZlICsgJ3wnICsgZGlyZWN0aW9uKTtcbiAgfVxuXG4gIGV4cG9ydCh0eXBlOiBzdHJpbmcgPSAnZXhjZWwnKSB7XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAuLi50aGlzLnJlcXVlc3RIZWxwZXJTZXJ2aWNlLmNvbnZlcnRUb0Zvcm1EYXRhKHRoaXMuZmlsdGVyRm9ybS52YWx1ZSksXG4gICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICBwZXJQYWdlOiA1MDAwMCxcbiAgICAgIHdpdGg6ICdjYXRlZ29yaWVzLGxhc3RTdG9ja1JlY2VpcHQnLFxuICAgICAgZXhwb3J0X3R5cGU6IHR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmlzRXhwb3J0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2UuZXhwb3J0KHBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNFeHBvcnRpbmcgPSBmYWxzZTtcbiAgICAgICAgd2luZG93Lm9wZW4ocmVzcG9uc2U/Lml0ZW0/LmZpbGVfbGluaywgJ19ibGFuaycpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5pc0V4cG9ydGluZyA9IGZhbHNlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFdlIG5lZWQgdG8gb3ZlcnJpZGUgdGhlIHJlbG9hZCBtZXRob2QgdG8gcmVzZXQgdGhlIHRvdGFsSW52ZW50b3J5VmFsdWVcbiAgb3ZlcnJpZGUgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMudG90YWxJbnZlbnRvcnlWYWx1ZSA9IDA7XG4gICAgdGhpcy5wYWdlID0gMTtcbiAgICB0aGlzLm1vZGVscyA9IFtdO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICA8bWF0LWNhcmQ+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibWItMFwiPkludmVudG9yeSBWYWx1ZSBSZXBvcnQ8L2gzPlxuICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWZpbGUtZXhjZWwgY3Vyc29yLXBvaW50ZXIgZC1wcmludC1ub25lXCIgKGNsaWNrKT1cImV4cG9ydCgnZXhjZWwnKVwiPjwvaT5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1maWxlLXBkZiBjdXJzb3ItcG9pbnRlciBkLXByaW50LW5vbmVcIiAoY2xpY2spPVwiZXhwb3J0KCdwZGYnKVwiPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+U2VhcmNoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiU2VhcmNoIHByb2R1Y3RzXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCIgLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD5DYXRlZ29yeTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvciBhcGlVcmw9XCJhcGkvcHJvZHVjdC1jYXRlZ29yaWVzXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2F0ZWdvcnlfaWRzXCIgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICAgICAgICA8L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9mb3JtPlxuICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPC9tYXQtY2FyZD5cblxuICA8bWF0LWNhcmQgY2xhc3M9XCJtdC0zXCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTBcIj5cbiAgICAgIDx0YWJsZVxuICAgICAgICBtYXQtdGFibGVcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwibW9kZWxzXCJcbiAgICAgICAgY2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgIGluZmluaXRlU2Nyb2xsXG4gICAgICAgIFtpbmZpbml0ZVNjcm9sbERpc3RhbmNlXT1cIjJcIlxuICAgICAgICBbaW5maW5pdGVTY3JvbGxUaHJvdHRsZV09XCI1MFwiXG4gICAgICAgIChzY3JvbGxlZCk9XCJvblNjcm9sbCgpXCJcbiAgICAgICAgbWF0U29ydFxuICAgICAgICAobWF0U29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gIyBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiI1wiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IzwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gaW5kZXhcIj57eyBpICsgMSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFByb2R1Y3QgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIlByb2R1Y3RcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cIm5hbWVcIj5Qcm9kdWN0PC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvaW52ZW50b3J5L3Byb2R1Y3RzJywgZWxlbWVudD8uaWQsICd2aWV3J11cIiBjbGFzcz1cInRleHQtZGFya1wiPlxuICAgICAgICAgICAgICB7eyBlbGVtZW50Py5uYW1lIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gRGVzY3JpcHRpb24gQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIkRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5EZXNjcmlwdGlvbjwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIHt7IGVsZW1lbnQ/LmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gQ2F0ZWdvcmllcyBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiQ2F0ZWdvcmllc1wiPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+Q2F0ZWdvcmllczwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIDxhcHAtcHJvZHVjdC1jYXRlZ29yeS1iYWRnZXMgW3Byb2R1Y3RdPVwiZWxlbWVudFwiPjwvYXBwLXByb2R1Y3QtY2F0ZWdvcnktYmFkZ2VzPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgICAgIDxzdHJvbmc+VG90YWw8L3N0cm9uZz5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEF2YWlsYWJsZSBTdG9jayBDb2x1bW4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiQXZhaWxhYmxlIFN0b2NrXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI9XCJjdXJyZW50X3N0b2NrXCI+QXZhaWxhYmxlIFN0b2NrPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAge3sgZWxlbWVudD8uY3VycmVudF9zdG9jayB9fVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEF2ZXJhZ2UgUHJpY2UgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIkF2ZXJhZ2UgUHJpY2VcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cImF2ZXJhZ2VfcHVyY2hhc2VfcHJpY2VcIj5BdmVyYWdlIFByaWNlPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgICAge3sgZWxlbWVudD8uYXZlcmFnZV9wdXJjaGFzZV9wcmljZSB8IGN1cnJlbmN5IH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gSW52ZW50b3J5IFZhbHVlIENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJJbnZlbnRvcnkgVmFsdWVcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cImludmVudG9yeV92YWx1ZVwiPkludmVudG9yeSBWYWx1ZTwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIHt7IGVsZW1lbnQ/LmludmVudG9yeV92YWx1ZSB8IGN1cnJlbmN5IH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICAgICAgPHN0cm9uZz57eyB0b3RhbEludmVudG9yeVZhbHVlIHwgY3VycmVuY3kgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIExhc3QgUHVyY2hhc2UgUHJpY2UgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIkxhc3QgUHVyY2hhc2UgUHJpY2VcIj5cbiAgICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj1cImxhc3Rfc3RvY2tfcmVjZWlwdC5wdXJjaGFzZV9wcmljZVwiPlxuICAgICAgICAgICAgTGFzdCBQdXJjaGFzZSBQcmljZVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAgICAgIHt7IGVsZW1lbnQ/Lmxhc3Rfc3RvY2tfcmVjZWlwdD8ucHVyY2hhc2VfcHJpY2UgPz8gMCB8IGN1cnJlbmN5IH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gSW52ZW50b3J5IFZhbHVlIEJhc2VkIE9uIExhc3QgUHVyY2hhc2UgUHJpY2UgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIkludmVudG9yeSBWYWx1ZSBCYXNlZCBPbiBMYXN0IFB1cmNoYXNlIFByaWNlXCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI9XCJsYXN0X3N0b2NrX3JlY2VpcHQuYW1vdW50XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIj5JbnZlbnRvcnkgVmFsdWU8L3A+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+QmFzZWQgb24gbGFzdCBwdXJjaGFzZSBwcmljZTwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgICB7eyBlbGVtZW50Py5pbnZlbnRvcnlfdmFsdWVfYmFzZWRfb25fbGFzdF9wcmljZSA/PyAwIHwgY3VycmVuY3kgfX1cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgICAgPC90YWJsZT5cblxuICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAqbmdJZj1cImlzV29ya2luZ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDwvbWF0LWNhcmQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
3
|
+
import * as XLSX from 'xlsx';
|
|
4
|
+
import { MaterialModule } from '../../material.module';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class ExportToExcelButtonComponent {
|
|
7
|
+
tableId;
|
|
8
|
+
fileName;
|
|
9
|
+
onExportStart = new EventEmitter();
|
|
10
|
+
onExportEnd = new EventEmitter();
|
|
11
|
+
exportexcel() {
|
|
12
|
+
this.onExportStart.emit();
|
|
13
|
+
setTimeout(() => this.downloadExcelSheet(), 1000);
|
|
14
|
+
}
|
|
15
|
+
downloadExcelSheet() {
|
|
16
|
+
/* pass here the table id */
|
|
17
|
+
let element = document.getElementById(this.tableId);
|
|
18
|
+
const ws = XLSX.utils.table_to_sheet(element, { raw: false, dateNF: 'yyyy-mm-dd' });
|
|
19
|
+
// Post-process cells to split concatenated values into separate lines
|
|
20
|
+
Object.keys(ws).forEach((cellAddr) => {
|
|
21
|
+
if (cellAddr.startsWith('!'))
|
|
22
|
+
return;
|
|
23
|
+
const cell = ws[cellAddr];
|
|
24
|
+
if (typeof cell.v === 'string') {
|
|
25
|
+
// Insert a line break between a numeric value and trailing text or between name and type label
|
|
26
|
+
const splitMatch = cell.v.match(/^(.+?)(?:(?<=\d)(?=[a-z])|(?<=[a-z])(?=[A-Z]))(.+)$/);
|
|
27
|
+
if (splitMatch) {
|
|
28
|
+
cell.v = `${splitMatch[1]}\n${splitMatch[2]}`;
|
|
29
|
+
cell.s = { alignment: { wrapText: true } };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
/* generate workbook and add the worksheet */
|
|
34
|
+
const wb = XLSX.utils.book_new();
|
|
35
|
+
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
|
|
36
|
+
/* save to file */
|
|
37
|
+
XLSX.writeFile(wb, this.fileName + '.xlsx');
|
|
38
|
+
this.onExportEnd.emit();
|
|
39
|
+
}
|
|
40
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExportToExcelButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ExportToExcelButtonComponent, isStandalone: true, selector: "app-export-to-excel-button", inputs: { tableId: "tableId", fileName: "fileName" }, outputs: { onExportStart: "onExportStart", onExportEnd: "onExportEnd" }, ngImport: i0, template: "<i (click)=\"exportexcel()\" class=\"fas fa-file-excel cursor-pointer\"></i>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MaterialModule }], preserveWhitespaces: true });
|
|
42
|
+
}
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExportToExcelButtonComponent, decorators: [{
|
|
44
|
+
type: Component,
|
|
45
|
+
args: [{ selector: 'app-export-to-excel-button', standalone: true, imports: [
|
|
46
|
+
CommonModule,
|
|
47
|
+
MaterialModule
|
|
48
|
+
], template: "<i (click)=\"exportexcel()\" class=\"fas fa-file-excel cursor-pointer\"></i>\n" }]
|
|
49
|
+
}], propDecorators: { tableId: [{
|
|
50
|
+
type: Input
|
|
51
|
+
}], fileName: [{
|
|
52
|
+
type: Input
|
|
53
|
+
}], onExportStart: [{
|
|
54
|
+
type: Output
|
|
55
|
+
}], onExportEnd: [{
|
|
56
|
+
type: Output
|
|
57
|
+
}] } });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXRvLWV4Y2VsLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZlbnRvcnktY29tbW9uL3NyYy9saWIvaW52ZW50b3J5LWNvbW1vbi9zaGFyZWQvZXhwb3J0LXRvLWV4Y2VsLWJ1dHRvbi9leHBvcnQtdG8tZXhjZWwtYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ludmVudG9yeS1jb21tb24vc3JjL2xpYi9pbnZlbnRvcnktY29tbW9uL3NoYXJlZC9leHBvcnQtdG8tZXhjZWwtYnV0dG9uL2V4cG9ydC10by1leGNlbC1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQVl2RCxNQUFNLE9BQU8sNEJBQTRCO0lBRTlCLE9BQU8sQ0FBVTtJQUNqQixRQUFRLENBQVU7SUFFakIsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDeEMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFHaEQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsNEJBQTRCO1FBQzVCLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELE1BQU0sRUFBRSxHQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLHNFQUFzRTtRQUN0RSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ25DLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTztZQUNyQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUIsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQy9CLCtGQUErRjtnQkFDL0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztnQkFDdkYsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQzdDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCw2Q0FBNkM7UUFDN0MsTUFBTSxFQUFFLEdBQWtCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRS9DLGtCQUFrQjtRQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQzt3R0F2Q1UsNEJBQTRCOzRGQUE1Qiw0QkFBNEIscU5DZnpDLGdGQUNBLHlERFVJLFlBQVksOEJBQ1osY0FBYzs7NEZBR0wsNEJBQTRCO2tCQVZ4QyxTQUFTOytCQUNFLDRCQUE0QixjQUcxQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3FCQUNmOzhCQUlRLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcbmltcG9ydCB7IE1hdGVyaWFsTW9kdWxlIH0gZnJvbSAnLi4vLi4vbWF0ZXJpYWwubW9kdWxlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWV4cG9ydC10by1leGNlbC1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZXhwb3J0LXRvLWV4Y2VsLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4cG9ydC10by1leGNlbC1idXR0b24uY29tcG9uZW50LmNzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdGVyaWFsTW9kdWxlXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV4cG9ydFRvRXhjZWxCdXR0b25Db21wb25lbnQge1xuXG4gIEBJbnB1dCgpIHRhYmxlSWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZpbGVOYW1lITogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBvbkV4cG9ydFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbkV4cG9ydEVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG5cbiAgZXhwb3J0ZXhjZWwoKTogdm9pZCB7XG4gICAgdGhpcy5vbkV4cG9ydFN0YXJ0LmVtaXQoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZG93bmxvYWRFeGNlbFNoZWV0KCksIDEwMDApO1xuICB9XG5cbiAgZG93bmxvYWRFeGNlbFNoZWV0KCkge1xuICAgIC8qIHBhc3MgaGVyZSB0aGUgdGFibGUgaWQgKi9cbiAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMudGFibGVJZCk7XG4gICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gWExTWC51dGlscy50YWJsZV90b19zaGVldChlbGVtZW50LCB7IHJhdzogZmFsc2UsIGRhdGVORjogJ3l5eXktbW0tZGQnIH0pO1xuICAgIC8vIFBvc3QtcHJvY2VzcyBjZWxscyB0byBzcGxpdCBjb25jYXRlbmF0ZWQgdmFsdWVzIGludG8gc2VwYXJhdGUgbGluZXNcbiAgICBPYmplY3Qua2V5cyh3cykuZm9yRWFjaCgoY2VsbEFkZHIpID0+IHtcbiAgICAgIGlmIChjZWxsQWRkci5zdGFydHNXaXRoKCchJykpIHJldHVybjtcbiAgICAgIGNvbnN0IGNlbGwgPSB3c1tjZWxsQWRkcl07XG4gICAgICBpZiAodHlwZW9mIGNlbGwudiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gSW5zZXJ0IGEgbGluZSBicmVhayBiZXR3ZWVuIGEgbnVtZXJpYyB2YWx1ZSBhbmQgdHJhaWxpbmcgdGV4dCBvciBiZXR3ZWVuIG5hbWUgYW5kIHR5cGUgbGFiZWxcbiAgICAgICAgY29uc3Qgc3BsaXRNYXRjaCA9IGNlbGwudi5tYXRjaCgvXiguKz8pKD86KD88PVxcZCkoPz1bYS16XSl8KD88PVthLXpdKSg/PVtBLVpdKSkoLispJC8pO1xuICAgICAgICBpZiAoc3BsaXRNYXRjaCkge1xuICAgICAgICAgIGNlbGwudiA9IGAke3NwbGl0TWF0Y2hbMV19XFxuJHtzcGxpdE1hdGNoWzJdfWA7XG4gICAgICAgICAgY2VsbC5zID0geyBhbGlnbm1lbnQ6IHsgd3JhcFRleHQ6IHRydWUgfSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKiBnZW5lcmF0ZSB3b3JrYm9vayBhbmQgYWRkIHRoZSB3b3Jrc2hlZXQgKi9cbiAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcbiAgICBYTFNYLnV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KHdiLCB3cywgJ1NoZWV0MScpO1xuXG4gICAgLyogc2F2ZSB0byBmaWxlICovXG4gICAgWExTWC53cml0ZUZpbGUod2IsIHRoaXMuZmlsZU5hbWUgKyAnLnhsc3gnKTtcbiAgICB0aGlzLm9uRXhwb3J0RW5kLmVtaXQoKTtcbiAgfVxuXG59XG4iLCI8aSAoY2xpY2spPVwiZXhwb3J0ZXhjZWwoKVwiIGNsYXNzPVwiZmFzIGZhLWZpbGUtZXhjZWwgY3Vyc29yLXBvaW50ZXJcIj48L2k+XG4iXX0=
|