@dangl/angular-ava 1.1.2-beta0019 → 1.1.2-beta0031
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/ava-tree/invoice/invoice-display/invoice-display.component.mjs +44 -3
- package/esm2022/lib/ava-tree/tree/components/ava-tree/ava-tree.component.mjs +2 -2
- package/esm2022/lib/ava-tree/tree/model/ava-models.mjs +8 -1
- package/esm2022/lib/ava-tree/tree/model/invoice-models.mjs +9 -10
- package/esm2022/lib/ava-tree/tree/pipes/invoice-attachment-mime-type.pipe.mjs +34 -0
- package/esm2022/lib/version.mjs +7 -7
- package/fesm2022/dangl-angular-ava.mjs +94 -19
- package/fesm2022/dangl-angular-ava.mjs.map +1 -1
- package/lib/ava-tree/invoice/invoice-display/invoice-display.component.d.ts +5 -1
- package/lib/ava-tree/tree/model/ava-models.d.ts +10 -19
- package/lib/ava-tree/tree/model/invoice-models.d.ts +113 -70
- package/lib/ava-tree/tree/pipes/invoice-attachment-mime-type.pipe.d.ts +8 -0
- package/package.json +1 -1
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { CurrencyPipe, DatePipe } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, Input, input } from '@angular/core';
|
|
3
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
+
import { MatExpansionModule } from '@angular/material/expansion';
|
|
3
5
|
import { DEFAULT_TEXT_WORD_INVOICE } from '../../tree/constants/defaultTextWordInvoice';
|
|
6
|
+
import { InvoiceAttachmentMimeTypePipe } from '../../tree/pipes/invoice-attachment-mime-type.pipe';
|
|
4
7
|
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/material/button";
|
|
9
|
+
import * as i2 from "@angular/material/expansion";
|
|
5
10
|
export class InvoiceDisplayComponent {
|
|
6
11
|
/**
|
|
7
12
|
* You can supply a map of strings to be used for the text in the tree. This allows you to translate
|
|
@@ -56,13 +61,49 @@ export class InvoiceDisplayComponent {
|
|
|
56
61
|
this._textWords = null;
|
|
57
62
|
this._textWords = { ...DEFAULT_TEXT_WORD_INVOICE };
|
|
58
63
|
}
|
|
64
|
+
download(documentValue) {
|
|
65
|
+
if (documentValue.externalDocumentUrl) {
|
|
66
|
+
this.downloadLink(documentValue);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.downloadAny(documentValue);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
downloadAny(documentValue) {
|
|
73
|
+
if (documentValue.documentBase64) {
|
|
74
|
+
const byteCharacters = atob(documentValue.documentBase64);
|
|
75
|
+
const byteNumbers = new Array(byteCharacters.length);
|
|
76
|
+
for (let i = 0; i < byteCharacters.length; i++) {
|
|
77
|
+
byteNumbers[i] = byteCharacters.charCodeAt(i);
|
|
78
|
+
}
|
|
79
|
+
const byteArray = new Uint8Array(byteNumbers);
|
|
80
|
+
const blob = new Blob([byteArray], { type: 'application/octet-stream' });
|
|
81
|
+
this.saveAs(blob, documentValue.fileName);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async downloadLink(documentValue) {
|
|
85
|
+
try {
|
|
86
|
+
const response = await fetch(documentValue.externalDocumentUrl);
|
|
87
|
+
const blob = await response.blob();
|
|
88
|
+
this.saveAs(blob, documentValue.fileName);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error(error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
saveAs(blob, fileName) {
|
|
95
|
+
const link = document.createElement('a');
|
|
96
|
+
link.href = URL.createObjectURL(blob);
|
|
97
|
+
link.download = fileName;
|
|
98
|
+
link.click();
|
|
99
|
+
}
|
|
59
100
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InvoiceDisplayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: InvoiceDisplayComponent, isStandalone: true, selector: "ava-invoice-display", inputs: { invoice: { classPropertyName: "invoice", publicName: "invoice", isSignal: true, isRequired: true, transformFunction: null }, textWords: { classPropertyName: "textWords", publicName: "textWords", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n @if (textWords?.invoiceTitle) {\n <h1 class=\"invoice-title\">{{ textWords?.invoiceTitle }}</h1>\n }\n <header class=\"invoice-header\">\n <div class=\"seller-info\">\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n @if (invoice().seller?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().seller?.vatId }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice().invoiceNumber) {\n <p>\n <strong>{{ textWords?.detailsInvoiceNumber }}:</strong>\n <span>{{ invoice().invoiceNumber }}</span>\n </p>\n }\n @if (invoice().invoiceDate) {\n <p>\n <strong>{{ textWords?.detailsInvoiceDate }}:</strong>\n <span>{{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().paymentDueDate) {\n <p>\n <strong>{{ textWords?.detailsPaymentDueDate }}:</strong>\n <span>{{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().currencyCode) {\n <p>\n <strong>{{ textWords?.detailsCurrencyCode }}:</strong>\n <span>{{ invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().paymentTerms) {\n <p>\n <strong>{{ textWords?.detailsPaymentTerms }}:</strong>\n <span>{{ invoice().paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"buyer-info\">\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n @if (invoice().buyer?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().buyer?.vatId }}</span>\n </p>\n }\n </div>\n </header>\n\n <section class=\"invoice-references\">\n @if (textWords?.referencesTopic) {\n <h2>{{ textWords?.referencesTopic }}</h2>\n }\n @if (invoice().references?.buyerReference) {\n <p>\n <strong>{{ textWords?.referencesBuyerReference }}:</strong>\n <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords?.referencesProjectReference }}:</strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords?.referencesContractReference }}:</strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords?.referencesPurchaseOrderReference }}:</strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords?.referencesSalesOrderReference }}:</strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesReceivingAdviceReference }}:</strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesDispatchAdviceReference }}:</strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords?.referencesTenderOrLotReference }}:</strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords?.referencesInvoicedObjectIdentifier }}:</strong>\n <span>{{ invoice().references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords?.tableHeadDescription }}</th>\n <th>{{ textWords?.tableHeadQuantity }}</th>\n <th>{{ textWords?.tableHeadUnit }}</th>\n <th>{{ textWords?.tableHeadNetPrice }}</th>\n <th>{{ textWords?.tableHeadNetAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n @if (textWords?.totalsTopic) {\n <h2>{{ textWords?.totalsTopic }}</h2>\n }\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords?.totalsTotalNet }}:</strong>\n <span>{{ invoice().totals?.totalNet | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAllowances) {\n <p>\n <strong>{{ textWords?.totalsTotalAllowances }}:</strong>\n <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords?.totalsTotalCharges }}:</strong>\n <span> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords?.totalsTotalAfterDeductions }}:</strong>\n <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords?.totalsTotalVatAmount }}:</strong>\n <span>{{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalGross) {\n <p>\n <strong>{{ textWords?.totalsTotalGross }}:</strong>\n <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords?.totalsAlreadyPaidTotal }}:</strong>\n <span>{{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords?.totalsTotalToBePaid }}:</strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\n\n <section class=\"payment-instructions\">\n @if (textWords?.instructionsTopic) {\n <h2>{{ textWords?.instructionsTopic }}</h2>\n }\n @if (invoice().paymentInstructions?.description) {\n <p>{{ invoice().paymentInstructions?.description }}</p>\n }\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsAccountIdentifier }}:</strong>\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords?.instructionsAccountName }}:</strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsServiceProviderIdentifier }}:</strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n @if (textWords?.notesTopic) {\n <h2>{{ textWords?.notesTopic }}</h2>\n }\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n</div>\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.seller-info,.buyer-info,.invoice-details{width:30%}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between}.total{background-color:var(--color-light)}\n"], dependencies: [{ kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
101
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: InvoiceDisplayComponent, isStandalone: true, selector: "ava-invoice-display", inputs: { invoice: { classPropertyName: "invoice", publicName: "invoice", isSignal: true, isRequired: true, transformFunction: null }, textWords: { classPropertyName: "textWords", publicName: "textWords", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n @if (textWords?.invoiceTitle) {\n <h1 class=\"invoice-title\">{{ textWords?.invoiceTitle }}</h1>\n }\n <header class=\"invoice-header\">\n <div class=\"seller-info\">\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n @if (invoice().seller?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().seller?.vatId }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice().invoiceNumber) {\n <p>\n <strong>{{ textWords?.detailsInvoiceNumber }}:</strong>\n <span>{{ invoice().invoiceNumber }}</span>\n </p>\n }\n @if (invoice().invoiceDate) {\n <p>\n <strong>{{ textWords?.detailsInvoiceDate }}:</strong>\n <span>{{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().paymentDueDate) {\n <p>\n <strong>{{ textWords?.detailsPaymentDueDate }}:</strong>\n <span>{{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().currencyCode) {\n <p>\n <strong>{{ textWords?.detailsCurrencyCode }}:</strong>\n <span>{{ invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().paymentTerms) {\n <p>\n <strong>{{ textWords?.detailsPaymentTerms }}:</strong>\n <span>{{ invoice().paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"buyer-info\">\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n @if (invoice().buyer?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().buyer?.vatId }}</span>\n </p>\n }\n </div>\n </header>\n\n <section class=\"invoice-references\">\n @if (textWords?.referencesTopic) {\n <h2>{{ textWords?.referencesTopic }}</h2>\n }\n @if (invoice().references?.buyerReference) {\n <p>\n <strong>{{ textWords?.referencesBuyerReference }}:</strong>\n <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords?.referencesProjectReference }}:</strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords?.referencesContractReference }}:</strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords?.referencesPurchaseOrderReference }}:</strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords?.referencesSalesOrderReference }}:</strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesReceivingAdviceReference }}:</strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesDispatchAdviceReference }}:</strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords?.referencesTenderOrLotReference }}:</strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords?.referencesInvoicedObjectIdentifier }}:</strong>\n <span>{{ invoice().references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords?.tableHeadDescription }}</th>\n <th>{{ textWords?.tableHeadQuantity }}</th>\n <th>{{ textWords?.tableHeadUnit }}</th>\n <th>{{ textWords?.tableHeadNetPrice }}</th>\n <th>{{ textWords?.tableHeadNetAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n @if (textWords?.totalsTopic) {\n <h2>{{ textWords?.totalsTopic }}</h2>\n }\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords?.totalsTotalNet }}:</strong>\n <span>{{ invoice().totals?.totalNet | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAllowances) {\n <p>\n <strong>{{ textWords?.totalsTotalAllowances }}:</strong>\n <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords?.totalsTotalCharges }}:</strong>\n <span> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords?.totalsTotalAfterDeductions }}:</strong>\n <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords?.totalsTotalVatAmount }}:</strong>\n <span>{{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalGross) {\n <p>\n <strong>{{ textWords?.totalsTotalGross }}:</strong>\n <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords?.totalsAlreadyPaidTotal }}:</strong>\n <span>{{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords?.totalsTotalToBePaid }}:</strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\n\n <section class=\"payment-instructions\">\n @if (textWords?.instructionsTopic) {\n <h2>{{ textWords?.instructionsTopic }}</h2>\n }\n @if (invoice().paymentInstructions?.description) {\n <p>{{ invoice().paymentInstructions?.description }}</p>\n }\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsAccountIdentifier }}:</strong>\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords?.instructionsAccountName }}:</strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsServiceProviderIdentifier }}:</strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n @if (textWords?.notesTopic) {\n <h2>{{ textWords?.notesTopic }}</h2>\n }\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n\n @if (invoice().documents?.length) {\n <section class=\"invoice-attachments\">\n <mat-accordion>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>Attachments</mat-panel-title>\n </mat-expansion-panel-header>\n @for (document of invoice().documents; track document) {\n <div class=\"document\">\n @if (document.documentReference) {\n <div>\n <strong>Name: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>Description: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>Url: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>Data size: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>Mime Type: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>File Name: </strong>\n <span>{{ document.fileName }}</span>\n </div>\n }\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"download(document)\"\n [disabled]=\"!document.externalDocumentUrl && !document.documentBase64\"\n >\n Download\n </button>\n </div>\n }\n <pre id=\"fileContent\"></pre>\n </mat-expansion-panel>\n </mat-accordion>\n </section>\n }\n</div>\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.seller-info,.buyer-info,.invoice-details{width:30%}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between}.total{background-color:var(--color-light)}.invoice-attachments,.document{padding-bottom:15px}\n"], dependencies: [{ kind: "pipe", type: CurrencyPipe, name: "currency" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i2.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "pipe", type: InvoiceAttachmentMimeTypePipe, name: "invoiceAttachmentMimeType" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
61
102
|
}
|
|
62
103
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: InvoiceDisplayComponent, decorators: [{
|
|
63
104
|
type: Component,
|
|
64
|
-
args: [{ selector: 'ava-invoice-display', standalone: true, imports: [CurrencyPipe, DatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n @if (textWords?.invoiceTitle) {\n <h1 class=\"invoice-title\">{{ textWords?.invoiceTitle }}</h1>\n }\n <header class=\"invoice-header\">\n <div class=\"seller-info\">\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n @if (invoice().seller?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().seller?.vatId }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice().invoiceNumber) {\n <p>\n <strong>{{ textWords?.detailsInvoiceNumber }}:</strong>\n <span>{{ invoice().invoiceNumber }}</span>\n </p>\n }\n @if (invoice().invoiceDate) {\n <p>\n <strong>{{ textWords?.detailsInvoiceDate }}:</strong>\n <span>{{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().paymentDueDate) {\n <p>\n <strong>{{ textWords?.detailsPaymentDueDate }}:</strong>\n <span>{{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().currencyCode) {\n <p>\n <strong>{{ textWords?.detailsCurrencyCode }}:</strong>\n <span>{{ invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().paymentTerms) {\n <p>\n <strong>{{ textWords?.detailsPaymentTerms }}:</strong>\n <span>{{ invoice().paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"buyer-info\">\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n @if (invoice().buyer?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().buyer?.vatId }}</span>\n </p>\n }\n </div>\n </header>\n\n <section class=\"invoice-references\">\n @if (textWords?.referencesTopic) {\n <h2>{{ textWords?.referencesTopic }}</h2>\n }\n @if (invoice().references?.buyerReference) {\n <p>\n <strong>{{ textWords?.referencesBuyerReference }}:</strong>\n <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords?.referencesProjectReference }}:</strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords?.referencesContractReference }}:</strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords?.referencesPurchaseOrderReference }}:</strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords?.referencesSalesOrderReference }}:</strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesReceivingAdviceReference }}:</strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesDispatchAdviceReference }}:</strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords?.referencesTenderOrLotReference }}:</strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords?.referencesInvoicedObjectIdentifier }}:</strong>\n <span>{{ invoice().references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords?.tableHeadDescription }}</th>\n <th>{{ textWords?.tableHeadQuantity }}</th>\n <th>{{ textWords?.tableHeadUnit }}</th>\n <th>{{ textWords?.tableHeadNetPrice }}</th>\n <th>{{ textWords?.tableHeadNetAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n @if (textWords?.totalsTopic) {\n <h2>{{ textWords?.totalsTopic }}</h2>\n }\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords?.totalsTotalNet }}:</strong>\n <span>{{ invoice().totals?.totalNet | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAllowances) {\n <p>\n <strong>{{ textWords?.totalsTotalAllowances }}:</strong>\n <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords?.totalsTotalCharges }}:</strong>\n <span> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords?.totalsTotalAfterDeductions }}:</strong>\n <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords?.totalsTotalVatAmount }}:</strong>\n <span>{{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalGross) {\n <p>\n <strong>{{ textWords?.totalsTotalGross }}:</strong>\n <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords?.totalsAlreadyPaidTotal }}:</strong>\n <span>{{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords?.totalsTotalToBePaid }}:</strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\n\n <section class=\"payment-instructions\">\n @if (textWords?.instructionsTopic) {\n <h2>{{ textWords?.instructionsTopic }}</h2>\n }\n @if (invoice().paymentInstructions?.description) {\n <p>{{ invoice().paymentInstructions?.description }}</p>\n }\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsAccountIdentifier }}:</strong>\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords?.instructionsAccountName }}:</strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsServiceProviderIdentifier }}:</strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n @if (textWords?.notesTopic) {\n <h2>{{ textWords?.notesTopic }}</h2>\n }\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n</div>\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.seller-info,.buyer-info,.invoice-details{width:30%}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between}.total{background-color:var(--color-light)}\n"] }]
|
|
105
|
+
args: [{ selector: 'ava-invoice-display', standalone: true, imports: [CurrencyPipe, DatePipe, MatButtonModule, MatExpansionModule, InvoiceAttachmentMimeTypePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n @if (textWords?.invoiceTitle) {\n <h1 class=\"invoice-title\">{{ textWords?.invoiceTitle }}</h1>\n }\n <header class=\"invoice-header\">\n <div class=\"seller-info\">\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n @if (invoice().seller?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().seller?.vatId }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n @if (invoice().invoiceNumber) {\n <p>\n <strong>{{ textWords?.detailsInvoiceNumber }}:</strong>\n <span>{{ invoice().invoiceNumber }}</span>\n </p>\n }\n @if (invoice().invoiceDate) {\n <p>\n <strong>{{ textWords?.detailsInvoiceDate }}:</strong>\n <span>{{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().paymentDueDate) {\n <p>\n <strong>{{ textWords?.detailsPaymentDueDate }}:</strong>\n <span>{{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().currencyCode) {\n <p>\n <strong>{{ textWords?.detailsCurrencyCode }}:</strong>\n <span>{{ invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().paymentTerms) {\n <p>\n <strong>{{ textWords?.detailsPaymentTerms }}:</strong>\n <span>{{ invoice().paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"buyer-info\">\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n @if (invoice().buyer?.vatId) {\n <p>\n <strong>{{ textWords?.vatId }}:</strong>\n <span>{{ invoice().buyer?.vatId }}</span>\n </p>\n }\n </div>\n </header>\n\n <section class=\"invoice-references\">\n @if (textWords?.referencesTopic) {\n <h2>{{ textWords?.referencesTopic }}</h2>\n }\n @if (invoice().references?.buyerReference) {\n <p>\n <strong>{{ textWords?.referencesBuyerReference }}:</strong>\n <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords?.referencesProjectReference }}:</strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords?.referencesContractReference }}:</strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords?.referencesPurchaseOrderReference }}:</strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords?.referencesSalesOrderReference }}:</strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesReceivingAdviceReference }}:</strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords?.referencesDispatchAdviceReference }}:</strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords?.referencesTenderOrLotReference }}:</strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords?.referencesInvoicedObjectIdentifier }}:</strong>\n <span>{{ invoice().references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords?.tableHeadDescription }}</th>\n <th>{{ textWords?.tableHeadQuantity }}</th>\n <th>{{ textWords?.tableHeadUnit }}</th>\n <th>{{ textWords?.tableHeadNetPrice }}</th>\n <th>{{ textWords?.tableHeadNetAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td>{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td>{{ item.netAmount | currency: invoice().currencyCode }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n @if (textWords?.totalsTopic) {\n <h2>{{ textWords?.totalsTopic }}</h2>\n }\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords?.totalsTotalNet }}:</strong>\n <span>{{ invoice().totals?.totalNet | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAllowances) {\n <p>\n <strong>{{ textWords?.totalsTotalAllowances }}:</strong>\n <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords?.totalsTotalCharges }}:</strong>\n <span> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords?.totalsTotalAfterDeductions }}:</strong>\n <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords?.totalsTotalVatAmount }}:</strong>\n <span>{{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalGross) {\n <p>\n <strong>{{ textWords?.totalsTotalGross }}:</strong>\n <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords?.totalsAlreadyPaidTotal }}:</strong>\n <span>{{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords?.totalsTotalToBePaid }}:</strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\n\n <section class=\"payment-instructions\">\n @if (textWords?.instructionsTopic) {\n <h2>{{ textWords?.instructionsTopic }}</h2>\n }\n @if (invoice().paymentInstructions?.description) {\n <p>{{ invoice().paymentInstructions?.description }}</p>\n }\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsAccountIdentifier }}:</strong>\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords?.instructionsAccountName }}:</strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords?.instructionsServiceProviderIdentifier }}:</strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n @if (textWords?.notesTopic) {\n <h2>{{ textWords?.notesTopic }}</h2>\n }\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n\n @if (invoice().documents?.length) {\n <section class=\"invoice-attachments\">\n <mat-accordion>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>Attachments</mat-panel-title>\n </mat-expansion-panel-header>\n @for (document of invoice().documents; track document) {\n <div class=\"document\">\n @if (document.documentReference) {\n <div>\n <strong>Name: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>Description: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>Url: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>Data size: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>Mime Type: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>File Name: </strong>\n <span>{{ document.fileName }}</span>\n </div>\n }\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"download(document)\"\n [disabled]=\"!document.externalDocumentUrl && !document.documentBase64\"\n >\n Download\n </button>\n </div>\n }\n <pre id=\"fileContent\"></pre>\n </mat-expansion-panel>\n </mat-accordion>\n </section>\n }\n</div>\n", styles: [".invoice-container{width:100%;max-width:800px;margin:auto;font-family:Arial,sans-serif;line-height:1.5}.invoice-header{display:flex;justify-content:space-between;margin-bottom:20px}.seller-info,.buyer-info,.invoice-details{width:30%}.invoice-title{font-size:48px;margin:20px 0}.invoice-references,.invoice-totals,.payment-instructions,.invoice-notes{margin:20px 0}.invoice-table{width:100%;border-collapse:collapse;margin:20px 0}.invoice-table th,.invoice-table td{border:1px solid #000;padding:8px;text-align:left}.invoice-table th{background-color:var(--color-primary)}.invoice-totals p,.payment-instructions p,.invoice-notes p{margin:5px 0}h2{font-size:18px;margin-bottom:10px}.addition-info{display:flex;justify-content:space-between}.total{background-color:var(--color-light)}.invoice-attachments,.document{padding-bottom:15px}\n"] }]
|
|
65
106
|
}], ctorParameters: () => [], propDecorators: { textWords: [{
|
|
66
107
|
type: Input
|
|
67
108
|
}] } });
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvaW52b2ljZS9pbnZvaWNlLWRpc3BsYXkvaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvaW52b2ljZS9pbnZvaWNlLWRpc3BsYXkvaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOztBQVl4RixNQUFNLE9BQU8sdUJBQXVCO0lBSWxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXlDRztJQUNILElBQWEsU0FBUyxDQUFDLEtBQThCO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNwRCxDQUFDLENBQUMsaURBQWlEO0lBQ25ELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0Q7UUFuREEsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUM1QixlQUFVLEdBQTRCLElBQUksQ0FBQztRQW1EakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztJQUNyRCxDQUFDOzhHQXREVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qiw2VkNmcEMsaTVSQWtRQSxvMEJEeFBZLFlBQVksNENBQUUsUUFBUTs7MkZBS3JCLHVCQUF1QjtrQkFSbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxtQkFHaEIsdUJBQXVCLENBQUMsTUFBTTt3REFnRGxDLFNBQVM7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBERUZBVUxUX1RFWFRfV09SRF9JTlZPSUNFIH0gZnJvbSAnLi4vLi4vdHJlZS9jb25zdGFudHMvZGVmYXVsdFRleHRXb3JkSW52b2ljZSc7XG5pbXBvcnQgeyBJVGV4dFdvcmRJbnZvaWNlIH0gZnJvbSAnLi4vLi4vdHJlZS9tb2RlbCc7XG5pbXBvcnQgeyBJbnZvaWNlIH0gZnJvbSAnLi4vLi4vdHJlZS9tb2RlbC9pbnZvaWNlLW1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F2YS1pbnZvaWNlLWRpc3BsYXknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ3VycmVuY3lQaXBlLCBEYXRlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnZvaWNlLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgSW52b2ljZURpc3BsYXlDb21wb25lbnQge1xuICBpbnZvaWNlID0gaW5wdXQucmVxdWlyZWQ8SW52b2ljZT4oKTtcbiAgcHJpdmF0ZSBfdGV4dFdvcmRzOiBJVGV4dFdvcmRJbnZvaWNlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3VwcGx5IGEgbWFwIG9mIHN0cmluZ3MgdG8gYmUgdXNlZCBmb3IgdGhlIHRleHQgaW4gdGhlIHRyZWUuIFRoaXMgYWxsb3dzIHlvdSB0byB0cmFuc2xhdGVcbiAgICogdGhlIHRleHQgaW4gdGhlIHRyZWUgdG8gb3RoZXIgbGFuZ3VhZ2VzLlxuICAgKiB7XG4gICAqICAgaW52b2ljZVRpdGxlPzogc3RyaW5nO1xuICAgKiAgIHZhdElkPzogc3RyaW5nO1xuICAgKiAgIGRldGFpbHNJbnZvaWNlTnVtYmVyPzogc3RyaW5nO1xuICAgKiAgIGRldGFpbHNJbnZvaWNlRGF0ZT86IHN0cmluZztcbiAgICogICBkZXRhaWxzUGF5bWVudER1ZURhdGU/OiBzdHJpbmc7XG4gICAqICAgZGV0YWlsc0N1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICogICBkZXRhaWxzUGF5bWVudFRlcm1zPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNUb3BpYz86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzQnV5ZXJSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc1Byb2plY3RSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc0NvbnRyYWN0UmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNQdXJjaGFzZU9yZGVyUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNTYWxlc09yZGVyUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNSZWNlaXZpbmdBZHZpY2VSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc0Rpc3BhdGNoQWR2aWNlUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNUZW5kZXJPckxvdFJlZmVyZW5jZT86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzSW52b2ljZWRPYmplY3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZFF1YW50aXR5Pzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZFVuaXQ/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkTmV0UHJpY2U/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkTmV0QW1vdW50Pzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvcGljPzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsTmV0Pzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsQWxsb3dhbmNlcz86IHN0cmluZztcbiAgICogICB0b3RhbHNUb3RhbENoYXJnZXM/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxBZnRlckRlZHVjdGlvbnM/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxWYXRBbW91bnQ/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxHcm9zcz86IHN0cmluZztcbiAgICogICB0b3RhbHNBbHJlYWR5UGFpZFRvdGFsPzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsVG9CZVBhaWQ/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zVG9waWM/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zQWNjb3VudElkZW50aWZpZXI/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zQWNjb3VudE5hbWU/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zU2VydmljZVByb3ZpZGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgICogICBub3Rlc1RvcGljPzogc3RyaW5nO1xuICAgKiB9XG4gICAqL1xuICBASW5wdXQoKSBzZXQgdGV4dFdvcmRzKHdvcmRzOiBJVGV4dFdvcmRJbnZvaWNlIHwgbnVsbCkge1xuICAgIHRoaXMuX3RleHRXb3JkcyA9IHsgLi4udGhpcy50ZXh0V29yZHMsIC4uLndvcmRzIH07XG4gIH0gLy8gYWxsb3cgdG8gdHJhbnNsYXRlIGFsbCB0ZXh0cyB0byBvdGhlciBsYW5ndWFnZVxuICBnZXQgdGV4dFdvcmRzKCkge1xuICAgIHJldHVybiB0aGlzLl90ZXh0V29yZHM7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi5ERUZBVUxUX1RFWFRfV09SRF9JTlZPSUNFIH07XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpbnZvaWNlLWNvbnRhaW5lclwiPlxuICA8IS0tIFNlbGxlciBhbmQgQnV5ZXIgSW5mb3JtYXRpb24gLS0+XG4gIEBpZiAodGV4dFdvcmRzPy5pbnZvaWNlVGl0bGUpIHtcbiAgICA8aDEgY2xhc3M9XCJpbnZvaWNlLXRpdGxlXCI+e3sgdGV4dFdvcmRzPy5pbnZvaWNlVGl0bGUgfX08L2gxPlxuICB9XG4gIDxoZWFkZXIgY2xhc3M9XCJpbnZvaWNlLWhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWxsZXItaW5mb1wiPlxuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgaW52b2ljZSgpLnNlbGxlcj8ubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLnNlbGxlcj8uYWRkcmVzcyB9fTwvcD5cbiAgICAgIDxwPnt7IGludm9pY2UoKS5zZWxsZXI/LmNpdHkgfX0sIHt7IGludm9pY2UoKS5zZWxsZXI/LnppcENvZGUgfX08L3A+XG4gICAgICA8cD57eyBpbnZvaWNlKCkuc2VsbGVyPy5jb3VudHJ5Q29kZSB9fTwvcD5cbiAgICAgIEBpZiAoaW52b2ljZSgpLnNlbGxlcj8udmF0SWQpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnZhdElkIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5zZWxsZXI/LnZhdElkIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImludm9pY2UtZGV0YWlsc1wiPlxuICAgICAgQGlmIChpbnZvaWNlKCkuaW52b2ljZU51bWJlcikge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc0ludm9pY2VOdW1iZXIgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLmludm9pY2VOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLmludm9pY2VEYXRlKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5kZXRhaWxzSW52b2ljZURhdGUgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLmludm9pY2VEYXRlIHwgZGF0ZTogJ2RkLk1NLnl5eXknIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS5wYXltZW50RHVlRGF0ZSkge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc1BheW1lbnREdWVEYXRlIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5wYXltZW50RHVlRGF0ZSB8IGRhdGU6ICdkZC5NTS55eXl5JyB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgICAgQGlmIChpbnZvaWNlKCkuY3VycmVuY3lDb2RlKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5kZXRhaWxzQ3VycmVuY3lDb2RlIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnBheW1lbnRUZXJtcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc1BheW1lbnRUZXJtcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkucGF5bWVudFRlcm1zIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJ1eWVyLWluZm9cIj5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IGludm9pY2UoKS5idXllcj8ubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLmJ1eWVyPy5hZGRyZXNzIH19PC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLmJ1eWVyPy5jaXR5IH19LCB7eyBpbnZvaWNlKCkuYnV5ZXI/LnppcENvZGUgfX08L3A+XG4gICAgICA8cD57eyBpbnZvaWNlKCkuYnV5ZXI/LmNvdW50cnlDb2RlIH19PC9wPlxuICAgICAgQGlmIChpbnZvaWNlKCkuYnV5ZXI/LnZhdElkKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy52YXRJZCB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkuYnV5ZXI/LnZhdElkIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvaGVhZGVyPlxuXG4gIDxzZWN0aW9uIGNsYXNzPVwiaW52b2ljZS1yZWZlcmVuY2VzXCI+XG4gICAgQGlmICh0ZXh0V29yZHM/LnJlZmVyZW5jZXNUb3BpYykge1xuICAgICAgPGgyPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1RvcGljIH19PC9oMj5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uYnV5ZXJSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc0J1eWVyUmVmZXJlbmNlIH19Ojwvc3Ryb25nPlxuICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkucmVmZXJlbmNlcz8uYnV5ZXJSZWZlcmVuY2UgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICAgIEBpZiAoaW52b2ljZSgpLnJlZmVyZW5jZXM/LnByb2plY3RSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1Byb2plY3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5wcm9qZWN0UmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy5jb250cmFjdFJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzQ29udHJhY3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5jb250cmFjdFJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8ucHVyY2hhc2VPcmRlclJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzUHVyY2hhc2VPcmRlclJlZmVyZW5jZSB9fTo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LnB1cmNoYXNlT3JkZXJSZWZlcmVuY2UgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICAgIEBpZiAoaW52b2ljZSgpLnJlZmVyZW5jZXM/LnNhbGVzT3JkZXJSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1NhbGVzT3JkZXJSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5zYWxlc09yZGVyUmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy5yZWNlaXZpbmdBZHZpY2VSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1JlY2VpdmluZ0FkdmljZVJlZmVyZW5jZSB9fTo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LnJlY2VpdmluZ0FkdmljZVJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uZGlzcGF0Y2hBZHZpY2VSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc0Rpc3BhdGNoQWR2aWNlUmVmZXJlbmNlIH19Ojwvc3Ryb25nPlxuICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LmRpc3BhdGNoQWR2aWNlUmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy50ZW5kZXJPckxvdFJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzVGVuZGVyT3JMb3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy50ZW5kZXJPckxvdFJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uaW52b2ljZWRPYmplY3RJZGVudGlmaWVyKSB7XG4gICAgICA8cD5cbiAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnJlZmVyZW5jZXNJbnZvaWNlZE9iamVjdElkZW50aWZpZXIgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5pbnZvaWNlZE9iamVjdElkZW50aWZpZXIgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICA8L3NlY3Rpb24+XG5cbiAgPHRhYmxlIGNsYXNzPVwiaW52b2ljZS10YWJsZVwiPlxuICAgIDx0aGVhZD5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoPiM8L3RoPlxuICAgICAgICA8dGg+e3sgdGV4dFdvcmRzPy50YWJsZUhlYWREZXNjcmlwdGlvbiB9fTwvdGg+XG4gICAgICAgIDx0aD57eyB0ZXh0V29yZHM/LnRhYmxlSGVhZFF1YW50aXR5IH19PC90aD5cbiAgICAgICAgPHRoPnt7IHRleHRXb3Jkcz8udGFibGVIZWFkVW5pdCB9fTwvdGg+XG4gICAgICAgIDx0aD57eyB0ZXh0V29yZHM/LnRhYmxlSGVhZE5ldFByaWNlIH19PC90aD5cbiAgICAgICAgPHRoPnt7IHRleHRXb3Jkcz8udGFibGVIZWFkTmV0QW1vdW50IH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICBAZm9yIChpdGVtIG9mIGludm9pY2UoKS5saW5lSXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+e3sgaSArIDEgfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBpdGVtLml0ZW1JbmZvcm1hdGlvbj8uZGVzY3JpcHRpb24gfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBpdGVtLnF1YW50aXR5IH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaXRlbS51bml0Q29kZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IGl0ZW0ucHJpY2VEZXRhaWxzPy5uZXRQcmljZSB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaXRlbS5uZXRBbW91bnQgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cblxuICA8ZGl2IGNsYXNzPVwiYWRkaXRpb24taW5mb1wiPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaW52b2ljZS10b3RhbHNcIj5cbiAgICAgIEBpZiAodGV4dFdvcmRzPy50b3RhbHNUb3BpYykge1xuICAgICAgICA8aDI+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3BpYyB9fTwvaDI+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsTmV0KSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3RhbE5ldCB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbE5ldCB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsQWxsb3dhbmNlcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udG90YWxzVG90YWxBbGxvd2FuY2VzIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPiB7eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbEFsbG93YW5jZXMgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgICAgQGlmIChpbnZvaWNlKCkudG90YWxzPy50b3RhbENoYXJnZXMpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsQ2hhcmdlcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnRvdGFscz8udG90YWxDaGFyZ2VzIHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxBZnRlckRlZHVjdGlvbnMpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsQWZ0ZXJEZWR1Y3Rpb25zIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsQWZ0ZXJEZWR1Y3Rpb25zIHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxWYXRBbW91bnQpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsVmF0QW1vdW50IH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsVmF0QW1vdW50IHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxHcm9zcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udG90YWxzVG90YWxHcm9zcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnRvdGFscz8udG90YWxHcm9zcyB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LmFscmVhZHlQYWlkVG90YWwpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc0FscmVhZHlQYWlkVG90YWwgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnRvdGFscz8uYWxyZWFkeVBhaWRUb3RhbCB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsVG9CZVBhaWQpIHtcbiAgICAgICAgPHAgY2xhc3M9XCJ0b3RhbFwiPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3RhbFRvQmVQYWlkIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzdHJvbmc+IHt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsVG9CZVBhaWQgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvc3Ryb25nPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJwYXltZW50LWluc3RydWN0aW9uc1wiPlxuICAgICAgQGlmICh0ZXh0V29yZHM/Lmluc3RydWN0aW9uc1RvcGljKSB7XG4gICAgICAgIDxoMj57eyB0ZXh0V29yZHM/Lmluc3RydWN0aW9uc1RvcGljIH19PC9oMj5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnBheW1lbnRJbnN0cnVjdGlvbnM/LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIDxwPnt7IGludm9pY2UoKS5wYXltZW50SW5zdHJ1Y3Rpb25zPy5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgIH1cbiAgICAgIEBmb3IgKG1lYW5zIG9mIGludm9pY2UoKS5wYXltZW50SW5zdHJ1Y3Rpb25zPy5wYXltZW50TWVhbnM7IHRyYWNrIG1lYW5zKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQGlmIChtZWFucy5hY2NvdW50SWRlbnRpZmllcikge1xuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5pbnN0cnVjdGlvbnNBY2NvdW50SWRlbnRpZmllciB9fTo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWVhbnMuYWNjb3VudElkZW50aWZpZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAobWVhbnMuYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uaW5zdHJ1Y3Rpb25zQWNjb3VudE5hbWUgfX06PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IG1lYW5zLmFjY291bnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKG1lYW5zLnNlcnZpY2VQcm92aWRlcklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uaW5zdHJ1Y3Rpb25zU2VydmljZVByb3ZpZGVySWRlbnRpZmllciB9fTo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWVhbnMuc2VydmljZVByb3ZpZGVySWRlbnRpZmllciB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvc2VjdGlvbj5cbiAgPC9kaXY+XG5cbiAgPHNlY3Rpb24gY2xhc3M9XCJpbnZvaWNlLW5vdGVzXCI+XG4gICAgQGlmICh0ZXh0V29yZHM/Lm5vdGVzVG9waWMpIHtcbiAgICAgIDxoMj57eyB0ZXh0V29yZHM/Lm5vdGVzVG9waWMgfX08L2gyPlxuICAgIH1cbiAgICBAZm9yIChub3RlIG9mIGludm9pY2UoKS5pbnZvaWNlTm90ZXM7IHRyYWNrIG5vdGUpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIEBpZiAobm90ZT8uc2hvcnRUZXh0KSB7XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IG5vdGU/LnNob3J0VGV4dCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKG5vdGU/LmxvbmdUZXh0KSB7XG4gICAgICAgICAgPHA+e3sgbm90ZT8ubG9uZ1RleHQgfX08L3A+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvaW52b2ljZS9pbnZvaWNlLWRpc3BsYXkvaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItYXZhL3NyYy9saWIvYXZhLXRyZWUvaW52b2ljZS9pbnZvaWNlLWRpc3BsYXkvaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUd4RixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7OztBQVVuRyxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXlDRztJQUNILElBQWEsU0FBUyxDQUFDLEtBQThCO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNwRCxDQUFDLENBQUMsaURBQWlEO0lBQ25ELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0Q7UUFuREEsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUM1QixlQUFVLEdBQTRCLElBQUksQ0FBQztRQW1EakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsUUFBUSxDQUFDLGFBQWlDO1FBQ3hDLElBQUksYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsYUFBaUM7UUFDM0MsSUFBSSxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDL0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFrQixDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLGFBQWlDO1FBQ2xELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxtQkFBNkIsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxRQUFrQixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVUsRUFBRSxRQUFnQjtRQUNqQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDOzhHQTVGVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qiw2VkNsQnBDLHFpV0ErVEEsdTNCRGxUWSxZQUFZLDRDQUFFLFFBQVEsNENBQUUsZUFBZSwyTkFBRSxrQkFBa0IsbW5CQUFFLDZCQUE2Qjs7MkZBS3pGLHVCQUF1QjtrQkFSbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsNkJBQTZCLENBQUMsbUJBR3BGLHVCQUF1QixDQUFDLE1BQU07d0RBZ0RsQyxTQUFTO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VycmVuY3lQaXBlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuXG5pbXBvcnQgeyBERUZBVUxUX1RFWFRfV09SRF9JTlZPSUNFIH0gZnJvbSAnLi4vLi4vdHJlZS9jb25zdGFudHMvZGVmYXVsdFRleHRXb3JkSW52b2ljZSc7XG5pbXBvcnQgeyBJVGV4dFdvcmRJbnZvaWNlIH0gZnJvbSAnLi4vLi4vdHJlZS9tb2RlbCc7XG5pbXBvcnQgeyBJbnZvaWNlLCBTdXBwb3J0aW5nRG9jdW1lbnQgfSBmcm9tICcuLi8uLi90cmVlL21vZGVsL2ludm9pY2UtbW9kZWxzJztcbmltcG9ydCB7IEludm9pY2VBdHRhY2htZW50TWltZVR5cGVQaXBlIH0gZnJvbSAnLi4vLi4vdHJlZS9waXBlcy9pbnZvaWNlLWF0dGFjaG1lbnQtbWltZS10eXBlLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdmEtaW52b2ljZS1kaXNwbGF5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0N1cnJlbmN5UGlwZSwgRGF0ZVBpcGUsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0RXhwYW5zaW9uTW9kdWxlLCBJbnZvaWNlQXR0YWNobWVudE1pbWVUeXBlUGlwZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnZvaWNlLWRpc3BsYXkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaW52b2ljZS1kaXNwbGF5LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgSW52b2ljZURpc3BsYXlDb21wb25lbnQge1xuICBpbnZvaWNlID0gaW5wdXQucmVxdWlyZWQ8SW52b2ljZT4oKTtcbiAgcHJpdmF0ZSBfdGV4dFdvcmRzOiBJVGV4dFdvcmRJbnZvaWNlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gc3VwcGx5IGEgbWFwIG9mIHN0cmluZ3MgdG8gYmUgdXNlZCBmb3IgdGhlIHRleHQgaW4gdGhlIHRyZWUuIFRoaXMgYWxsb3dzIHlvdSB0byB0cmFuc2xhdGVcbiAgICogdGhlIHRleHQgaW4gdGhlIHRyZWUgdG8gb3RoZXIgbGFuZ3VhZ2VzLlxuICAgKiB7XG4gICAqICAgaW52b2ljZVRpdGxlPzogc3RyaW5nO1xuICAgKiAgIHZhdElkPzogc3RyaW5nO1xuICAgKiAgIGRldGFpbHNJbnZvaWNlTnVtYmVyPzogc3RyaW5nO1xuICAgKiAgIGRldGFpbHNJbnZvaWNlRGF0ZT86IHN0cmluZztcbiAgICogICBkZXRhaWxzUGF5bWVudER1ZURhdGU/OiBzdHJpbmc7XG4gICAqICAgZGV0YWlsc0N1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICogICBkZXRhaWxzUGF5bWVudFRlcm1zPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNUb3BpYz86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzQnV5ZXJSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc1Byb2plY3RSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc0NvbnRyYWN0UmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNQdXJjaGFzZU9yZGVyUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNTYWxlc09yZGVyUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNSZWNlaXZpbmdBZHZpY2VSZWZlcmVuY2U/OiBzdHJpbmc7XG4gICAqICAgcmVmZXJlbmNlc0Rpc3BhdGNoQWR2aWNlUmVmZXJlbmNlPzogc3RyaW5nO1xuICAgKiAgIHJlZmVyZW5jZXNUZW5kZXJPckxvdFJlZmVyZW5jZT86IHN0cmluZztcbiAgICogICByZWZlcmVuY2VzSW52b2ljZWRPYmplY3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZFF1YW50aXR5Pzogc3RyaW5nO1xuICAgKiAgIHRhYmxlSGVhZFVuaXQ/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkTmV0UHJpY2U/OiBzdHJpbmc7XG4gICAqICAgdGFibGVIZWFkTmV0QW1vdW50Pzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvcGljPzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsTmV0Pzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsQWxsb3dhbmNlcz86IHN0cmluZztcbiAgICogICB0b3RhbHNUb3RhbENoYXJnZXM/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxBZnRlckRlZHVjdGlvbnM/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxWYXRBbW91bnQ/OiBzdHJpbmc7XG4gICAqICAgdG90YWxzVG90YWxHcm9zcz86IHN0cmluZztcbiAgICogICB0b3RhbHNBbHJlYWR5UGFpZFRvdGFsPzogc3RyaW5nO1xuICAgKiAgIHRvdGFsc1RvdGFsVG9CZVBhaWQ/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zVG9waWM/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zQWNjb3VudElkZW50aWZpZXI/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zQWNjb3VudE5hbWU/OiBzdHJpbmc7XG4gICAqICAgaW5zdHJ1Y3Rpb25zU2VydmljZVByb3ZpZGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgICogICBub3Rlc1RvcGljPzogc3RyaW5nO1xuICAgKiB9XG4gICAqL1xuICBASW5wdXQoKSBzZXQgdGV4dFdvcmRzKHdvcmRzOiBJVGV4dFdvcmRJbnZvaWNlIHwgbnVsbCkge1xuICAgIHRoaXMuX3RleHRXb3JkcyA9IHsgLi4udGhpcy50ZXh0V29yZHMsIC4uLndvcmRzIH07XG4gIH0gLy8gYWxsb3cgdG8gdHJhbnNsYXRlIGFsbCB0ZXh0cyB0byBvdGhlciBsYW5ndWFnZVxuICBnZXQgdGV4dFdvcmRzKCkge1xuICAgIHJldHVybiB0aGlzLl90ZXh0V29yZHM7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGV4dFdvcmRzID0geyAuLi5ERUZBVUxUX1RFWFRfV09SRF9JTlZPSUNFIH07XG4gIH1cblxuICBkb3dubG9hZChkb2N1bWVudFZhbHVlOiBTdXBwb3J0aW5nRG9jdW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZG9jdW1lbnRWYWx1ZS5leHRlcm5hbERvY3VtZW50VXJsKSB7XG4gICAgICB0aGlzLmRvd25sb2FkTGluayhkb2N1bWVudFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb3dubG9hZEFueShkb2N1bWVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBkb3dubG9hZEFueShkb2N1bWVudFZhbHVlOiBTdXBwb3J0aW5nRG9jdW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZG9jdW1lbnRWYWx1ZS5kb2N1bWVudEJhc2U2NCkge1xuICAgICAgY29uc3QgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGRvY3VtZW50VmFsdWUuZG9jdW1lbnRCYXNlNjQpO1xuICAgICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoYnl0ZUNoYXJhY3RlcnMubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBieXRlQ2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpO1xuICAgICAgfVxuICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xuICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtieXRlQXJyYXldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pO1xuICAgICAgdGhpcy5zYXZlQXMoYmxvYiwgZG9jdW1lbnRWYWx1ZS5maWxlTmFtZSBhcyBzdHJpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkTGluayhkb2N1bWVudFZhbHVlOiBTdXBwb3J0aW5nRG9jdW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChkb2N1bWVudFZhbHVlLmV4dGVybmFsRG9jdW1lbnRVcmwgYXMgc3RyaW5nKTtcbiAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgICB0aGlzLnNhdmVBcyhibG9iLCBkb2N1bWVudFZhbHVlLmZpbGVOYW1lIGFzIHN0cmluZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHNhdmVBcyhibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcbiAgICBsaW5rLmNsaWNrKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpbnZvaWNlLWNvbnRhaW5lclwiPlxuICA8IS0tIFNlbGxlciBhbmQgQnV5ZXIgSW5mb3JtYXRpb24gLS0+XG4gIEBpZiAodGV4dFdvcmRzPy5pbnZvaWNlVGl0bGUpIHtcbiAgICA8aDEgY2xhc3M9XCJpbnZvaWNlLXRpdGxlXCI+e3sgdGV4dFdvcmRzPy5pbnZvaWNlVGl0bGUgfX08L2gxPlxuICB9XG4gIDxoZWFkZXIgY2xhc3M9XCJpbnZvaWNlLWhlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWxsZXItaW5mb1wiPlxuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgaW52b2ljZSgpLnNlbGxlcj8ubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLnNlbGxlcj8uYWRkcmVzcyB9fTwvcD5cbiAgICAgIDxwPnt7IGludm9pY2UoKS5zZWxsZXI/LmNpdHkgfX0sIHt7IGludm9pY2UoKS5zZWxsZXI/LnppcENvZGUgfX08L3A+XG4gICAgICA8cD57eyBpbnZvaWNlKCkuc2VsbGVyPy5jb3VudHJ5Q29kZSB9fTwvcD5cbiAgICAgIEBpZiAoaW52b2ljZSgpLnNlbGxlcj8udmF0SWQpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnZhdElkIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5zZWxsZXI/LnZhdElkIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImludm9pY2UtZGV0YWlsc1wiPlxuICAgICAgQGlmIChpbnZvaWNlKCkuaW52b2ljZU51bWJlcikge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc0ludm9pY2VOdW1iZXIgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLmludm9pY2VOdW1iZXIgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLmludm9pY2VEYXRlKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5kZXRhaWxzSW52b2ljZURhdGUgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLmludm9pY2VEYXRlIHwgZGF0ZTogJ2RkLk1NLnl5eXknIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS5wYXltZW50RHVlRGF0ZSkge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc1BheW1lbnREdWVEYXRlIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5wYXltZW50RHVlRGF0ZSB8IGRhdGU6ICdkZC5NTS55eXl5JyB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgICAgQGlmIChpbnZvaWNlKCkuY3VycmVuY3lDb2RlKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5kZXRhaWxzQ3VycmVuY3lDb2RlIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnBheW1lbnRUZXJtcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uZGV0YWlsc1BheW1lbnRUZXJtcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkucGF5bWVudFRlcm1zIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJ1eWVyLWluZm9cIj5cbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IGludm9pY2UoKS5idXllcj8ubmFtZSB9fTwvc3Ryb25nPlxuICAgICAgPC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLmJ1eWVyPy5hZGRyZXNzIH19PC9wPlxuICAgICAgPHA+e3sgaW52b2ljZSgpLmJ1eWVyPy5jaXR5IH19LCB7eyBpbnZvaWNlKCkuYnV5ZXI/LnppcENvZGUgfX08L3A+XG4gICAgICA8cD57eyBpbnZvaWNlKCkuYnV5ZXI/LmNvdW50cnlDb2RlIH19PC9wPlxuICAgICAgQGlmIChpbnZvaWNlKCkuYnV5ZXI/LnZhdElkKSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy52YXRJZCB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkuYnV5ZXI/LnZhdElkIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvaGVhZGVyPlxuXG4gIDxzZWN0aW9uIGNsYXNzPVwiaW52b2ljZS1yZWZlcmVuY2VzXCI+XG4gICAgQGlmICh0ZXh0V29yZHM/LnJlZmVyZW5jZXNUb3BpYykge1xuICAgICAgPGgyPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1RvcGljIH19PC9oMj5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uYnV5ZXJSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc0J1eWVyUmVmZXJlbmNlIH19Ojwvc3Ryb25nPlxuICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkucmVmZXJlbmNlcz8uYnV5ZXJSZWZlcmVuY2UgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICAgIEBpZiAoaW52b2ljZSgpLnJlZmVyZW5jZXM/LnByb2plY3RSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1Byb2plY3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5wcm9qZWN0UmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy5jb250cmFjdFJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzQ29udHJhY3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5jb250cmFjdFJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8ucHVyY2hhc2VPcmRlclJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzUHVyY2hhc2VPcmRlclJlZmVyZW5jZSB9fTo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LnB1cmNoYXNlT3JkZXJSZWZlcmVuY2UgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICAgIEBpZiAoaW52b2ljZSgpLnJlZmVyZW5jZXM/LnNhbGVzT3JkZXJSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1NhbGVzT3JkZXJSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5zYWxlc09yZGVyUmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy5yZWNlaXZpbmdBZHZpY2VSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc1JlY2VpdmluZ0FkdmljZVJlZmVyZW5jZSB9fTo8L3N0cm9uZz5cbiAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LnJlY2VpdmluZ0FkdmljZVJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uZGlzcGF0Y2hBZHZpY2VSZWZlcmVuY2UpIHtcbiAgICAgIDxwPlxuICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8ucmVmZXJlbmNlc0Rpc3BhdGNoQWR2aWNlUmVmZXJlbmNlIH19Ojwvc3Ryb25nPlxuICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnJlZmVyZW5jZXM/LmRpc3BhdGNoQWR2aWNlUmVmZXJlbmNlIH19PC9zcGFuPlxuICAgICAgPC9wPlxuICAgIH1cbiAgICBAaWYgKGludm9pY2UoKS5yZWZlcmVuY2VzPy50ZW5kZXJPckxvdFJlZmVyZW5jZSkge1xuICAgICAgPHA+XG4gICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5yZWZlcmVuY2VzVGVuZGVyT3JMb3RSZWZlcmVuY2UgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy50ZW5kZXJPckxvdFJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChpbnZvaWNlKCkucmVmZXJlbmNlcz8uaW52b2ljZWRPYmplY3RJZGVudGlmaWVyKSB7XG4gICAgICA8cD5cbiAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnJlZmVyZW5jZXNJbnZvaWNlZE9iamVjdElkZW50aWZpZXIgfX06PC9zdHJvbmc+XG4gICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS5yZWZlcmVuY2VzPy5pbnZvaWNlZE9iamVjdElkZW50aWZpZXIgfX08L3NwYW4+XG4gICAgICA8L3A+XG4gICAgfVxuICA8L3NlY3Rpb24+XG5cbiAgPHRhYmxlIGNsYXNzPVwiaW52b2ljZS10YWJsZVwiPlxuICAgIDx0aGVhZD5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoPiM8L3RoPlxuICAgICAgICA8dGg+e3sgdGV4dFdvcmRzPy50YWJsZUhlYWREZXNjcmlwdGlvbiB9fTwvdGg+XG4gICAgICAgIDx0aD57eyB0ZXh0V29yZHM/LnRhYmxlSGVhZFF1YW50aXR5IH19PC90aD5cbiAgICAgICAgPHRoPnt7IHRleHRXb3Jkcz8udGFibGVIZWFkVW5pdCB9fTwvdGg+XG4gICAgICAgIDx0aD57eyB0ZXh0V29yZHM/LnRhYmxlSGVhZE5ldFByaWNlIH19PC90aD5cbiAgICAgICAgPHRoPnt7IHRleHRXb3Jkcz8udGFibGVIZWFkTmV0QW1vdW50IH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICBAZm9yIChpdGVtIG9mIGludm9pY2UoKS5saW5lSXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+e3sgaSArIDEgfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBpdGVtLml0ZW1JbmZvcm1hdGlvbj8uZGVzY3JpcHRpb24gfX08L3RkPlxuICAgICAgICAgIDx0ZD57eyBpdGVtLnF1YW50aXR5IH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaXRlbS51bml0Q29kZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IGl0ZW0ucHJpY2VEZXRhaWxzPy5uZXRQcmljZSB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaXRlbS5uZXRBbW91bnQgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cblxuICA8ZGl2IGNsYXNzPVwiYWRkaXRpb24taW5mb1wiPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaW52b2ljZS10b3RhbHNcIj5cbiAgICAgIEBpZiAodGV4dFdvcmRzPy50b3RhbHNUb3BpYykge1xuICAgICAgICA8aDI+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3BpYyB9fTwvaDI+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsTmV0KSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3RhbE5ldCB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbE5ldCB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsQWxsb3dhbmNlcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udG90YWxzVG90YWxBbGxvd2FuY2VzIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPiB7eyBpbnZvaWNlKCkudG90YWxzPy50b3RhbEFsbG93YW5jZXMgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgICAgQGlmIChpbnZvaWNlKCkudG90YWxzPy50b3RhbENoYXJnZXMpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsQ2hhcmdlcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnRvdGFscz8udG90YWxDaGFyZ2VzIHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxBZnRlckRlZHVjdGlvbnMpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsQWZ0ZXJEZWR1Y3Rpb25zIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsQWZ0ZXJEZWR1Y3Rpb25zIHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxWYXRBbW91bnQpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc1RvdGFsVmF0QW1vdW50IH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsVmF0QW1vdW50IHwgY3VycmVuY3k6IGludm9pY2UoKS5jdXJyZW5jeUNvZGUgfX08L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnRvdGFscz8udG90YWxHcm9zcykge1xuICAgICAgICA8cD5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8udG90YWxzVG90YWxHcm9zcyB9fTo8L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj4ge3sgaW52b2ljZSgpLnRvdGFscz8udG90YWxHcm9zcyB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LmFscmVhZHlQYWlkVG90YWwpIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAgPHN0cm9uZz57eyB0ZXh0V29yZHM/LnRvdGFsc0FscmVhZHlQYWlkVG90YWwgfX06PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgaW52b2ljZSgpLnRvdGFscz8uYWxyZWFkeVBhaWRUb3RhbCB8IGN1cnJlbmN5OiBpbnZvaWNlKCkuY3VycmVuY3lDb2RlIH19PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgICBAaWYgKGludm9pY2UoKS50b3RhbHM/LnRvdGFsVG9CZVBhaWQpIHtcbiAgICAgICAgPHAgY2xhc3M9XCJ0b3RhbFwiPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy50b3RhbHNUb3RhbFRvQmVQYWlkIH19Ojwvc3Ryb25nPlxuICAgICAgICAgIDxzdHJvbmc+IHt7IGludm9pY2UoKS50b3RhbHM/LnRvdGFsVG9CZVBhaWQgfCBjdXJyZW5jeTogaW52b2ljZSgpLmN1cnJlbmN5Q29kZSB9fTwvc3Ryb25nPlxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJwYXltZW50LWluc3RydWN0aW9uc1wiPlxuICAgICAgQGlmICh0ZXh0V29yZHM/Lmluc3RydWN0aW9uc1RvcGljKSB7XG4gICAgICAgIDxoMj57eyB0ZXh0V29yZHM/Lmluc3RydWN0aW9uc1RvcGljIH19PC9oMj5cbiAgICAgIH1cbiAgICAgIEBpZiAoaW52b2ljZSgpLnBheW1lbnRJbnN0cnVjdGlvbnM/LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIDxwPnt7IGludm9pY2UoKS5wYXltZW50SW5zdHJ1Y3Rpb25zPy5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgICAgIH1cbiAgICAgIEBmb3IgKG1lYW5zIG9mIGludm9pY2UoKS5wYXltZW50SW5zdHJ1Y3Rpb25zPy5wYXltZW50TWVhbnM7IHRyYWNrIG1lYW5zKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgQGlmIChtZWFucy5hY2NvdW50SWRlbnRpZmllcikge1xuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxzdHJvbmc+e3sgdGV4dFdvcmRzPy5pbnN0cnVjdGlvbnNBY2NvdW50SWRlbnRpZmllciB9fTo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWVhbnMuYWNjb3VudElkZW50aWZpZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAobWVhbnMuYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uaW5zdHJ1Y3Rpb25zQWNjb3VudE5hbWUgfX06PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IG1lYW5zLmFjY291bnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKG1lYW5zLnNlcnZpY2VQcm92aWRlcklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRleHRXb3Jkcz8uaW5zdHJ1Y3Rpb25zU2VydmljZVByb3ZpZGVySWRlbnRpZmllciB9fTo8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgbWVhbnMuc2VydmljZVByb3ZpZGVySWRlbnRpZmllciB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvc2VjdGlvbj5cbiAgPC9kaXY+XG5cbiAgPHNlY3Rpb24gY2xhc3M9XCJpbnZvaWNlLW5vdGVzXCI+XG4gICAgQGlmICh0ZXh0V29yZHM/Lm5vdGVzVG9waWMpIHtcbiAgICAgIDxoMj57eyB0ZXh0V29yZHM/Lm5vdGVzVG9waWMgfX08L2gyPlxuICAgIH1cbiAgICBAZm9yIChub3RlIG9mIGludm9pY2UoKS5pbnZvaWNlTm90ZXM7IHRyYWNrIG5vdGUpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIEBpZiAobm90ZT8uc2hvcnRUZXh0KSB7XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IG5vdGU/LnNob3J0VGV4dCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKG5vdGU/LmxvbmdUZXh0KSB7XG4gICAgICAgICAgPHA+e3sgbm90ZT8ubG9uZ1RleHQgfX08L3A+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9zZWN0aW9uPlxuXG4gIEBpZiAoaW52b2ljZSgpLmRvY3VtZW50cz8ubGVuZ3RoKSB7XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpbnZvaWNlLWF0dGFjaG1lbnRzXCI+XG4gICAgICA8bWF0LWFjY29yZGlvbj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5BdHRhY2htZW50czwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgQGZvciAoZG9jdW1lbnQgb2YgaW52b2ljZSgpLmRvY3VtZW50czsgdHJhY2sgZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICBAaWYgKGRvY3VtZW50LmRvY3VtZW50UmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+TmFtZTogPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2N1bWVudC5kb2N1bWVudFJlZmVyZW5jZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGRvY3VtZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RGVzY3JpcHRpb246IDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZG9jdW1lbnQuZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChkb2N1bWVudC5leHRlcm5hbERvY3VtZW50VXJsKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+VXJsOiA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvY3VtZW50LmV4dGVybmFsRG9jdW1lbnRVcmwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGRvY3VtZW50LmRvY3VtZW50QmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RGF0YSBzaXplOiA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvY3VtZW50LmRvY3VtZW50QmFzZTY0Lmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZiAoZG9jdW1lbnQuZG9jdW1lbnRNaW1lVHlwZSkge1xuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5NaW1lIFR5cGU6IDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkb2N1bWVudC5kb2N1bWVudE1pbWVUeXBlIHwgaW52b2ljZUF0dGFjaG1lbnRNaW1lVHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGRvY3VtZW50LmZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+RmlsZSBOYW1lOiA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGRvY3VtZW50LmZpbGVOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkKGRvY3VtZW50KVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFkb2N1bWVudC5leHRlcm5hbERvY3VtZW50VXJsICYmICFkb2N1bWVudC5kb2N1bWVudEJhc2U2NFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBEb3dubG9hZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICA8cHJlIGlkPVwiZmlsZUNvbnRlbnRcIj48L3ByZT5cbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPC9tYXQtYWNjb3JkaW9uPlxuICAgIDwvc2VjdGlvbj5cbiAgfVxuPC9kaXY+XG4iXX0=
|