tango-app-ui-manage-billing 3.3.39 → 3.3.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/brand-invoices/brand-invoices.component.mjs +6 -4
- package/esm2022/lib/components/tango-manage-billing/tango-manage-billing.component.mjs +6 -4
- package/fesm2022/tango-app-ui-manage-billing.mjs +10 -6
- package/fesm2022/tango-app-ui-manage-billing.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -619,7 +619,9 @@ export class TangoManageBillingComponent {
|
|
|
619
619
|
// Cancellable only while approved and still unpaid — matches the backend's
|
|
620
620
|
// own gate in cancelInvoice.
|
|
621
621
|
canCancelInvoice(inv) {
|
|
622
|
-
|
|
622
|
+
// Cancellable once the invoice number is minted (pendingApproval and
|
|
623
|
+
// approved) while still unpaid — mirrors the backend cancelInvoice guard.
|
|
624
|
+
return (inv?.status === 'approved' || inv?.status === 'pendingApproval') && inv?.paymentStatus === 'unpaid';
|
|
623
625
|
}
|
|
624
626
|
// Maps both pipeline status and payment status into the badge text/class
|
|
625
627
|
// shown in the table. Mirrors brand-invoices for consistency.
|
|
@@ -1137,13 +1139,13 @@ export class TangoManageBillingComponent {
|
|
|
1137
1139
|
}
|
|
1138
1140
|
}
|
|
1139
1141
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoManageBillingComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BillingService }, { token: i0.ChangeDetectorRef }, { token: i3.ToastService }, { token: i4.Router }, { token: i5.GlobalStateService }, { token: i0.ElementRef }, { token: i6.NgbModal }, { token: i5.PageInfoService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1140
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TangoManageBillingComponent, selector: "lib-tango-manage-billing", host: { listeners: { "document:click": "clickout($event)" } }, ngImport: i0, template: "<div>\n <!-- <div *ngIf=\"invoicetransaction\" class=\"mt-4 paymenthistory\">\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3 me-2\"\n [ngClass]=\"invoiceplans === 'invoice' ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\n data-kt-plan=\"invoice\" (click)=\"selectInvoicePlan('invoice')\">\n Invoice\n </button>\n\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\n [ngClass]=\"invoiceplans === 'credittransaction' ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\n data-kt-plan=\"credittransaction\" (click)=\"selectInvoicePlan('credittransaction')\">\n Credit Transactions\n </button>\n </div> -->\n <!-- Header summary cards \u2014 Outstanding / Overdue / Pending Payment.\n Totals are scoped to the user's full client access, NOT the current\n filter/search/page, so they stay stable as the user narrows the list. -->\n <!-- Sub-toggle: regular invoices vs advance (TINV-*) invoices. -->\n <div *ngIf=\"invoiceplans === 'invoice'\" class=\"invoice-type-toggle mt-3 mx-2\">\n <button type=\"button\"\n [ngClass]=\"invoiceType === 'all' ? 'invoice-type-btn active' : 'invoice-type-btn'\"\n (click)=\"selectInvoiceType('all')\">All Invoices</button>\n <button type=\"button\"\n [ngClass]=\"invoiceType === 'advance' ? 'invoice-type-btn active' : 'invoice-type-btn'\"\n (click)=\"selectInvoiceType('advance')\">Advance Invoice</button>\n </div>\n <div *ngIf=\"invoiceplans === 'invoice'\" class=\"row g-3 mt-3 mb-2 mx-2\">\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Outstanding\n <svg class=\"info-ic\" ngbTooltip=\"Total unpaid balance across all invoices in the current view (dollar invoices converted to \u20B9).\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value\">\u20B9{{ invoiceCards.outstandingExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value\">\u20B9{{ invoiceCards.outstandingInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.outstandingCount }} {{ invoiceCards.outstandingCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Overdue\n <svg class=\"info-ic\" ngbTooltip=\"Unpaid invoices whose due date has already passed.\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value text-danger\">\u20B9{{ invoiceCards.overdueExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value text-danger\">\u20B9{{ invoiceCards.overdueInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.overdueCount }} {{ invoiceCards.overdueCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Pending Payment\n <svg class=\"info-ic\" ngbTooltip=\"Approved invoices that are still awaiting payment.\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value text-warning\">\u20B9{{ invoiceCards.pendingPaymentExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value text-warning\">\u20B9{{ invoiceCards.pendingPaymentInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.pendingPaymentCount }} {{ invoiceCards.pendingPaymentCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"card-header paymenthistory border-0\">\n <div *ngIf=\"invoiceplans === 'credittransaction'\" class=\"billingheader ms-1 mt-6\">Credit Transactions</div>\n <div class=\"card-toolbar ms-auto\">\n <div class=\"d-flex\">\n <div class=\"d-flex align-items-center position-relative my-1\">\n <span class=\"svg-icon invoicesearch svg-icon-1 position-absolute search-ic-center ms-3\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\n </rect>\n <path\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\n fill=\"currentColor\"></path>\n </svg>\n </span>\n <input [(ngModel)]=\"len\" type=\"text\" class=\"form-control ps-14 invoicesearch\"\n placeholder=\"Search...\" autocomplete=\"off\" (change)=\"searchField()\"\n [disabled]=\"searchDisabled\" />\n <lib-filters *ngIf=\"invoiceplans === 'invoice'\" [dataObject]=\"invoiceFilterObject\" (appliedFilters)=\"applyInvoiceFilters($event)\"></lib-filters>\n\n <!-- <div class=\"me-3 monthwidth\">\n <div class=\"dropdown invheader\">\n <select class=\"form-select invheader\" aria-label=\"Default select example\"\n [(ngModel)]=\"isFilter\" (change)=\"invoiceFilter()\">\n <option value=\"current\">Current Month</option>\n <option value=\"prev\">Previous Month</option>\n <option value=\"last\">Last 3 Months</option>\n </select>\n </div>\n </div> -->\n\n <!-- <button (click)=\"creditnote()\" type=\"button\"\n class=\"btn-outline btn align-items-end invheader text-nowrap me-4\"\n *ngIf=\"(gs.userAccess | async)?.userType === 'tango' && (gs.userAccess | async)?.settings_paymentSubscriptions_isEdit\"\n [disabled]=\"!invoiceList.length\"><svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\n viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M10.4993 4.16675V15.8334M4.66602 10.0001H16.3327\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg><span>Credit Note</span> </button> -->\n <button type=\"button\" (click)=\"onExport()\"\n class=\"btn-outline btn align-items-end text-nowrap invheader\"\n *ngIf=\"invoiceplans === 'invoice'\"\n [disabled]=\"!invoiceList.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\n viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg><span class=\"ms-2\"></span> Export</button>\n\n\n <button type=\"button\" (click)=\"onExportTransaction()\"\n class=\"btn-outline btn align-items-end text-nowrap invheader ms-4\"\n *ngIf=\"invoiceplans === 'credittransaction'\"\n [disabled]=\"!transactionList.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg><span class=\"ms-2\"></span> Export</button>\n\n\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"invoiceplans === 'invoice'\">\n\n <!-- Bulk actions toolbar (status filter tabs removed \u2014 statuses are\n reachable via the Filter popover, matching the prototype) -->\n <div class=\"card-header paymenthistory border-0 px-0\" *ngIf=\"selectedInvoices.size > 0\">\n <div></div>\n <div class=\"card-toolbar\">\n <div class=\"d-flex\">\n <button type=\"button\" (click)=\"downloadSelected()\"\n class=\"btn btn-outline-primary btn-sm align-items-end text-nowrap invheader me-2\"\n *ngIf=\"selectedInvoices.size > 0\"\n [disabled]=\"bulkDownloading\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\n stroke=\"currentColor\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"ms-1\" *ngIf=\"!bulkDownloading\">Download Selected ({{ selectedInvoices.size }})</span>\n <span class=\"ms-1\" *ngIf=\"bulkDownloading\">Preparing ZIP...</span>\n </button>\n <button type=\"button\" (click)=\"approveSelected()\"\n class=\"btn btn-success btn-sm align-items-end text-nowrap invheader me-2\"\n *ngIf=\"selectedInvoices.size > 0\"\n [disabled]=\"bulkApproving\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M16.6667 5L7.50001 14.1667L3.33334 10\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"ms-1\" *ngIf=\"!bulkApproving\">Approve Selected ({{ selectedInvoices.size }})</span>\n <span class=\"ms-1\" *ngIf=\"bulkApproving\">Approving...</span>\n </button>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"invoiceLoading\">\n <div class=\"row loader d-flex justify-content-center align-items-center\">\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n\n </div>\n </ng-container>\n <ng-container *ngIf=\"invoiceNoData\">\n <div class=\"row\">\n <div class=\"col-lg-12 mb-3\">\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\n </div>\n </div>\n </div>\n </ng-container>\n <!-- invoice table start -->\n <div *ngIf=\"!invoiceLoading && !invoiceNoData\" class=\"table-responsive\">\n <table class=\"table accordion table bottom-border invoivetable text-nowrap\">\n <thead>\n <tr>\n <th style=\"width: 40px;\">\n <input type=\"checkbox\" [(ngModel)]=\"selectAll\" (change)=\"toggleSelectAll()\"\n class=\"form-check-input\" [disabled]=\"invoiceList.length === 0\">\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('clientName')\" >Brand Name\n <svg [ngClass]=\"sortColumName === 'clientName' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('companyName')\">Registered Name\n <svg [ngClass]=\"sortColumName === 'companyName' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'companyName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('invoice')\" >Invoice #\n <svg [ngClass]=\"sortColumName === 'invoice' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'invoice' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('billingDate')\">Billing Date\n <svg [ngClass]=\"sortColumName === 'billingDate' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'billingDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('dueDate')\">Due Status\n <svg [ngClass]=\"sortColumName === 'dueDate' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'dueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th>Group Name</th>\n <th class=\"cursor-pointer\" (click)=\"sortData('amount')\">Amount Excl. GST\n <svg [ngClass]=\"sortColumName === 'amount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'amount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('gstAmount')\">GST Amount\n <svg [ngClass]=\"sortColumName === 'gstAmount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'gstAmount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('totalAmount')\">Amount Incl. GST\n <svg [ngClass]=\"sortColumName === 'totalAmount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'totalAmount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th>Stores</th>\n <th>Payment Status</th>\n <th>Approval Status</th>\n <th scope=\"col\">Action</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let invoice of invoiceList; let i = index\">\n <td>\n <input type=\"checkbox\"\n [checked]=\"isSelected(invoice)\"\n (change)=\"toggleInvoiceSelect(invoice)\"\n class=\"form-check-input\">\n </td>\n <td>\n <div class=\"table-title table-title-primary d-flex \">\n <div class=\"symbol symbol-35px symbol-circle me-2\"><span\n class=\"symbol-label text-symbol\">\n <span *ngIf=\"!invoice?.logo\" class=\"symbol-label bg-light-primary text-symbol\">\n {{invoice?.clientName?.charAt(0)}} </span>\n <!-- (error): broken/expired logo URL falls back to the letter avatar -->\n <img *ngIf=\"invoice?.logo\" class=\"logo-img\" [src]=\"invoice?.logo\" (error)=\"invoice.logo = ''\" alt=\"\">\n </span></div>\n <div><u class=\"cursor-pointer\" (click)=\"viewBrand(invoice)\"> {{invoice?.clientName | uppercase}}</u></div>\n </div>\n </td>\n <td>\n <div class=\"table-title registered-name\">{{ invoice?.companyName || '\u2014' }}</div>\n </td>\n <td>\n <div class=\"table-title table-title-primary\">\n <a class=\"invoice-link\" (click)=\"openInvoicePreview(invoice); $event.stopPropagation()\">{{ invoice?.invoice }}</a>\n </div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.billingDate | date: 'dd MMM, yyyy' }}</div>\n </td>\n <td>\n <div class=\"table-title\" [ngClass]=\"getDueStatusClass(invoice)\">{{ getDueStatus(invoice) }}</div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.groupName }}</div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoiceCurrencySymbol(invoice) }} {{ invoice?.amount | number:amountFormat(invoice):'en-IN' }}</div>\n </td>\n <td>\n <div class=\"table-title\" *ngIf=\"isGstApplicable(invoice); else noGst\">{{ invoiceCurrencySymbol(invoice) }} {{ gstAmount(invoice) | number:amountFormat(invoice):'en-IN' }}</div>\n <ng-template #noGst><div class=\"table-title\">\u2014</div></ng-template>\n </td>\n <td>\n <div class=\"table-title\"><strong>{{ invoiceCurrencySymbol(invoice) }} {{ invoice?.totalAmount | number:amountFormat(invoice):'en-IN' }}</strong></div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.stores }} {{ invoice?.stores === 1 ? 'Store' : 'Stores' }}</div>\n </td>\n <td>\n <span [ngClass]=\"getPaymentPillClass(invoice)\">{{ getPaymentLabel(invoice) }}</span>\n <div *ngIf=\"hasPending(invoice)\" class=\"pending-note mt-1\">\n {{ invoiceCurrencySymbol(invoice) }}{{ pendingAmount(invoice) | number:'1.2-2':'en-IN' }} pending\n </div>\n </td>\n <td>\n <span [ngClass]=\"getApprovalPillClass(invoice)\" class=\"cursor-pointer\"\n title=\"View activity\"\n (click)=\"openInvoiceLogs(invoice); $event.stopPropagation()\">{{ getApprovalLabel(invoice) }}</span>\n </td>\n <td>\n <div class=\"table-title d-flex justify-content-around \">\n <!-- Edit invoice (locked when approved) -->\n <span [class.cursor-pointer]=\"!isInvoiceLocked(invoice)\"\n [class.locked-action]=\"isInvoiceLocked(invoice)\"\n (click)=\"!isInvoiceLocked(invoice) && editInvoice(invoice)\"\n [ngbTooltip]=\"isInvoiceLocked(invoice) ? 'Approved invoice \u2014 editing is disabled' : 'Edit Invoice'\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M26.5 14.5L29.5 17.5M14.5 29.5H17.5L28 19C28.3978 18.6022 28.6213 18.0663 28.6213 17.5C28.6213 16.9337 28.3978 16.3978 28 16C27.6022 15.6022 27.0663 15.3787 26.5 15.3787C25.9337 15.3787 25.3978 15.6022 25 16L14.5 26.5V29.5Z\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n\n <!-- Approve (stage-aware) -->\n <span class=\"cursor-pointer\" (click)=\"approveInvoice(invoice)\"\n [ngbTooltip]=\"getApproveTooltip(invoice)\"\n *ngIf=\"canApprove(invoice, userAccess)\">\n\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_16478_43040)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <g clip-path=\"url(#clip0_16478_43040)\">\n <path\n d=\"M30.3346 20.2335V21.0002C30.3336 22.7972 29.7517 24.5458 28.6757 25.9851C27.5998 27.4244 26.0874 28.4773 24.3641 28.9868C22.6408 29.4963 20.799 29.4351 19.1134 28.8124C17.4277 28.1896 15.9885 27.0386 15.0104 25.5311C14.0324 24.0236 13.5678 22.2403 13.686 20.4471C13.8043 18.654 14.499 16.9472 15.6665 15.5811C16.8341 14.2151 18.412 13.263 20.1648 12.867C21.9176 12.471 23.7515 12.6522 25.393 13.3835M30.3346 14.3335L22.0013 22.6752L19.5013 20.1752\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </g>\n <defs>\n <filter id=\"filter0_d_16478_43040\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_16478_43040\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_16478_43040\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_16478_43040\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(12 11)\" />\n </clipPath>\n </defs>\n </svg>\n\n </span>\n <span class=\"cursor-pointer\" *ngIf=\"invoice.status==='approved' && (gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\"> <svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\"\n fill=\"none\">\n <g filter=\"url(#filter0_d_16630_8062)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#EAECF0\" />\n <g clip-path=\"url(#clip0_16630_8062)\">\n <path\n d=\"M30.3346 20.2335V21.0002C30.3336 22.7972 29.7517 24.5458 28.6757 25.9851C27.5998 27.4244 26.0874 28.4773 24.3641 28.9868C22.6408 29.4963 20.799 29.4351 19.1134 28.8124C17.4277 28.1896 15.9885 27.0386 15.0104 25.5311C14.0324 24.0236 13.5678 22.2403 13.686 20.4471C13.8043 18.654 14.499 16.9472 15.6665 15.5811C16.8341 14.2151 18.412 13.263 20.1648 12.867C21.9176 12.471 23.7515 12.6522 25.393 13.3835M30.3346 14.3335L22.0013 22.6752L19.5013 20.1752\"\n stroke=\"#D0D5DD\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </g>\n <defs>\n <filter id=\"filter0_d_16630_8062\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_16630_8062\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_16630_8062\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_16630_8062\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(12 11)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\" class=\"cursor-pointer\" (click)=\"regenerateInvoice(invoice)\"><svg width=\"44\"\n height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" />\n <g filter=\"url(#filter0_d_15530_60395)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path\n d=\"M31.1654 14.3333V19.3333M31.1654 19.3333H26.1654M31.1654 19.3333L27.2987 15.7C26.4031 14.8039 25.2951 14.1493 24.078 13.7973C22.861 13.4453 21.5746 13.4073 20.3389 13.6869C19.1033 13.9665 17.9585 14.5545 17.0116 15.3962C16.0646 16.2378 15.3463 17.3056 14.9237 18.5M12.832 27.6666V22.6666M12.832 22.6666H17.832M12.832 22.6666L16.6987 26.3C17.5943 27.1961 18.7023 27.8506 19.9194 28.2027C21.1364 28.5547 22.4228 28.5927 23.6585 28.3131C24.8941 28.0335 26.0389 27.4455 26.9858 26.6038C27.9328 25.7621 28.6511 24.6943 29.0737 23.5\"\n stroke=\"#344054\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_15530_60395\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_15530_60395\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_15530_60395\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit && invoice?.status === 'approved' && invoice?.paymentStatus !== 'paid'\" class=\"cursor-pointer\" (click)=\"paymentstatusChange(invoice)\" >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\n <!-- Border Rectangle -->\n <rect x=\"2.5\" y=\"2.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" fill=\"none\" />\n \n <!-- Background Rectangle -->\n <rect x=\"2.5\" y=\"2.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" fill=\"white\" />\n \n <!-- Inner Icon -->\n <g transform=\"translate(13, 11)\"> <!-- Adjusted position for centering -->\n <path d=\"M2.9987 8.00065V6.33398C2.9987 5.0079 3.52548 3.73613 4.46316 2.79845C5.40085 1.86077 6.67262 1.33398 7.9987 1.33398C9.32478 1.33398 10.5966 1.86077 11.5342 2.79845C12.4719 3.73613 12.9987 5.0079 12.9987 6.33398V8.00065M1.33203 13.0007C1.33203 13.4427 1.50763 13.8666 1.82019 14.1792C2.13275 14.4917 2.55667 14.6673 2.9987 14.6673C3.44073 14.6673 3.86465 14.4917 4.17721 14.1792C4.48977 13.8666 4.66536 13.4427 4.66536 13.0007C4.66536 12.5586 4.48977 12.1347 4.17721 11.8221C3.86465 11.5096 3.44073 11.334 2.9987 11.334C2.55667 11.334 2.13275 11.5096 1.82019 11.8221C1.50763 12.1347 1.33203 12.5586 1.33203 13.0007ZM11.332 13.0007C11.332 13.4427 11.5076 13.8666 11.8202 14.1792C12.1327 14.4917 12.5567 14.6673 12.9987 14.6673C13.4407 14.6673 13.8646 14.4917 14.1772 14.1792C14.4898 13.8666 14.6654 13.4427 14.6654 13.0007C14.6654 12.5586 14.4898 12.1347 14.1772 11.8221C13.8646 11.5096 13.4407 11.334 12.9987 11.334C12.5567 11.334 12.1327 11.5096 11.8202 11.8221C11.5076 12.1347 11.332 12.5586 11.332 13.0007Z\" stroke=\"#667085\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M10.5 5.5L13 8L15.5 5.5\" stroke=\"#667085\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n </svg>\n \n \n </span>\n <!-- (click)=\"downloadInvoice(invoice)\" -->\n <span (click)=\"downloadInvoice(invoice)\" class=\"cursor-pointer\"><svg width=\"44\"\n height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" />\n <g filter=\"url(#filter0_d_15530_60396)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\n stroke=\"#344054\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_15530_60396\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_15530_60396\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_15530_60396\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n\n <!-- Cancel invoice (approved + unpaid only) \u2014 replaces the disabled\n delete slot for cancellable rows. -->\n <span *ngIf=\"canCancelInvoice(invoice)\" class=\"cursor-pointer\"\n (click)=\"cancelInvoice(invoice)\"\n ngbTooltip=\"Cancel Invoice\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M28.5 15.5L15.5 28.5M15.5 15.5L28.5 28.5\" stroke=\"#D92D20\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n\n <!-- Delete invoice (locked when approved/cancelled) -->\n <span *ngIf=\"!canCancelInvoice(invoice)\" [class.cursor-pointer]=\"!isInvoiceLocked(invoice)\"\n [class.locked-action]=\"isInvoiceLocked(invoice)\"\n (click)=\"!isInvoiceLocked(invoice) && deleteInvoice(invoice)\"\n [ngbTooltip]=\"isInvoiceLocked(invoice) ? 'Approved invoice \u2014 delete is disabled' : 'Delete Invoice'\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M17 21H27M15.5 17H28.5M19.5 25H24.5M16.1667 28.5H27.8333C28.7538 28.5 29.5 27.7538 29.5 26.8333V15.1667C29.5 14.2462 28.7538 13.5 27.8333 13.5H16.1667C15.2462 13.5 14.5 14.2462 14.5 15.1667V26.8333C14.5 27.7538 15.2462 28.5 16.1667 28.5Z\"\n stroke=\"#D92D20\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <div *ngIf=\"!invoiceLoading && !invoiceNoData\">\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\n </div>\n </div>\n </div>\n <div *ngIf=\"invoiceplans === 'credittransaction'\">\n <ng-container *ngIf=\"transactionLoading\">\n <div class=\"row loader d-flex justify-content-center align-items-center\">\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n \n </div>\n </ng-container>\n <ng-container *ngIf=\"transactionNoData\">\n <div class=\"row\">\n <div class=\"col-lg-12 mb-3\">\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\n </div>\n </div>\n </div>\n </ng-container>\n \n <div class=\"table-responsive\" *ngIf=\"!transactionLoading && !transactionNoData\">\n <table class=\"table accordion table bottom-border \">\n <thead>\n <tr>\n <th class=\"cursor-pointer\" (click)=\"sortDataTrans('clientName')\" >Client Name\n <svg [ngClass]=\"sortColumNametran === 'clientName' && sortBytran === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumNametran === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th> \n <th class=\"cursor-pointer\" (click)=\"sortDataTrans('credit')\" >Balance Credits\n <svg [ngClass]=\"sortColumNametran === 'credit' && sortBytran === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumNametran === 'credit' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\" scope=\"col\">Action</th>\n </tr>\n </thead>\n <tbody>\n <ng-container>\n <tr *ngFor=\"let transaction of transactionList; let i = index\">\n <td>\n <div class=\"table-title table-title-primary d-flex \">\n <div class=\"symbol symbol-35px symbol-circle me-2\"><span\n class=\"symbol-label text-symbol\">\n <span *ngIf=\"!transaction?.logo\"\n class=\"symbol-label bg-light-primary text-symbol\">\n {{transaction?.clientName?.charAt(0)}} </span>\n <img *ngIf=\"transaction?.logo\" class=\"logo-img\" [src]=\"transaction?.logo\"\n (error)=\"transaction.logo = ''\" alt=\"\">\n </span></div>\n <div><u> {{transaction?.clientName | uppercase}}</u>\n </div>\n </div>\n \n </td>\n \n <td>\n <div class=\"table-title\">\n <span *ngIf=\"transaction?.currencyType === 'inr'\">\u20B9</span>\n <span *ngIf=\"transaction?.currencyType === 'dollar'\">$</span>\n {{transaction?.credit | number:'1.0-2':'en-IN'}}\n </div>\n </td>\n <td *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\">\n <div class=\"table-title position-relative\">\n <div class=\"position-relative cursor-pointer\" (click)=\"toggleDropdown(i)\">\n <div class=\"ms-5\">\n <span class=\"justify-content-end cursor-pointer\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_16522_57254)\">\n <path\n d=\"M19.9987 22.5006C21.3794 22.5006 22.4987 21.3814 22.4987 20.0007C22.4987 18.6199 21.3794 17.5007 19.9987 17.5007C18.618 17.5007 17.4987 18.6199 17.4987 20.0007C17.4987 21.3814 18.618 22.5006 19.9987 22.5006Z\"\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M26.1654 22.5006C26.0544 22.752 26.0213 23.0308 26.0704 23.3011C26.1194 23.5715 26.2482 23.8209 26.4404 24.0173L26.4904 24.0673C26.6453 24.2221 26.7683 24.4059 26.8521 24.6082C26.936 24.8106 26.9792 25.0275 26.9792 25.2465C26.9792 25.4655 26.936 25.6824 26.8521 25.8847C26.7683 26.087 26.6453 26.2709 26.4904 26.4256C26.3356 26.5806 26.1518 26.7035 25.9494 26.7874C25.7471 26.8713 25.5302 26.9145 25.3112 26.9145C25.0922 26.9145 24.8753 26.8713 24.673 26.7874C24.4706 26.7035 24.2868 26.5806 24.132 26.4256L24.082 26.3756C23.8856 26.1835 23.6362 26.0547 23.3659 26.0056C23.0955 25.9566 22.8167 25.9897 22.5654 26.1006C22.3189 26.2063 22.1087 26.3817 21.9606 26.6053C21.8126 26.8288 21.7331 27.0908 21.732 27.359V27.5006C21.732 27.9427 21.5564 28.3666 21.2439 28.6792C20.9313 28.9917 20.5074 29.1673 20.0654 29.1673C19.6233 29.1673 19.1994 28.9917 18.8869 28.6792C18.5743 28.3666 18.3987 27.9427 18.3987 27.5006V27.4256C18.3922 27.1498 18.303 26.8823 18.1425 26.6579C17.9819 26.4335 17.7576 26.2626 17.4987 26.1673C17.2474 26.0564 16.9685 26.0233 16.6982 26.0723C16.4279 26.1213 16.1784 26.2502 15.982 26.4423L15.932 26.4923C15.7772 26.6473 15.5934 26.7702 15.3911 26.8541C15.1888 26.938 14.9719 26.9811 14.7529 26.9811C14.5338 26.9811 14.317 26.938 14.1146 26.8541C13.9123 26.7702 13.7285 26.6473 13.5737 26.4923C13.4187 26.3375 13.2958 26.1537 13.2119 25.9514C13.1281 25.7491 13.0849 25.5322 13.0849 25.3131C13.0849 25.0941 13.1281 24.8772 13.2119 24.6749C13.2958 24.4726 13.4187 24.2888 13.5737 24.134L13.6237 24.084C13.8158 23.8876 13.9447 23.6381 13.9937 23.3678C14.0427 23.0975 14.0096 22.8187 13.8987 22.5673C13.7931 22.3208 13.6177 22.1106 13.3941 21.9626C13.1705 21.8145 12.9085 21.7351 12.6404 21.734H12.4987C12.0567 21.734 11.6327 21.5584 11.3202 21.2458C11.0076 20.9333 10.832 20.5093 10.832 20.0673C10.832 19.6253 11.0076 19.2014 11.3202 18.8888C11.6327 18.5762 12.0567 18.4007 12.4987 18.4007H12.5737C12.8495 18.3942 13.117 18.3049 13.3414 18.1444C13.5659 17.9839 13.7368 17.7596 13.832 17.5007C13.943 17.2493 13.9761 16.9705 13.927 16.7002C13.878 16.4298 13.7491 16.1804 13.557 15.984L13.507 15.934C13.3521 15.7792 13.2291 15.5954 13.1453 15.3931C13.0614 15.1907 13.0182 14.9738 13.0182 14.7548C13.0182 14.5358 13.0614 14.3189 13.1453 14.1166C13.2291 13.9143 13.3521 13.7304 13.507 13.5757C13.6618 13.4207 13.8456 13.2978 14.048 13.2139C14.2503 13.13 14.4672 13.0868 14.6862 13.0868C14.9052 13.0868 15.1221 13.13 15.3244 13.2139C15.5268 13.2978 15.7106 13.4207 15.8654 13.5757L15.9154 13.6257C16.1118 13.8178 16.3612 13.9466 16.6315 13.9957C16.9019 14.0447 17.1807 14.0116 17.432 13.9007H17.4987C17.7452 13.795 17.9554 13.6196 18.1034 13.396C18.2515 13.1725 18.331 12.9105 18.332 12.6423V12.5007C18.332 12.0586 18.5076 11.6347 18.8202 11.3221C19.1327 11.0096 19.5567 10.834 19.9987 10.834C20.4407 10.834 20.8646 11.0096 21.1772 11.3221C21.4898 11.6347 21.6654 12.0586 21.6654 12.5007V12.5757C21.6664 12.8438 21.7459 13.1058 21.894 13.3294C22.042 13.5529 22.2522 13.7283 22.4987 13.834C22.75 13.9449 23.0289 13.978 23.2992 13.929C23.5695 13.88 23.819 13.7511 24.0154 13.559L24.0654 13.509C24.2202 13.354 24.404 13.2311 24.6063 13.1472C24.8086 13.0633 25.0255 13.0202 25.2445 13.0202C25.4636 13.0202 25.6804 13.0633 25.8828 13.1472C26.0851 13.2311 26.2689 13.354 26.4237 13.509C26.5787 13.6638 26.7016 13.8476 26.7855 14.0499C26.8693 14.2522 26.9125 14.4691 26.9125 14.6882C26.9125 14.9072 26.8693 15.1241 26.7855 15.3264C26.7016 15.5287 26.5787 15.7125 26.4237 15.8673L26.3737 15.9173C26.1816 16.1137 26.0527 16.3632 26.0037 16.6335C25.9547 16.9038 25.9878 17.1826 26.0987 17.434V17.5007C26.2043 17.7471 26.3797 17.9573 26.6033 18.1054C26.8269 18.2535 27.0889 18.3329 27.357 18.334H27.4987C27.9407 18.334 28.3646 18.5096 28.6772 18.8221C28.9898 19.1347 29.1654 19.5586 29.1654 20.0007C29.1654 20.4427 28.9898 20.8666 28.6772 21.1792C28.3646 21.4917 27.9407 21.6673 27.4987 21.6673H27.4237C27.1555 21.6684 26.8936 21.7478 26.67 21.8959C26.4464 22.044 26.271 22.2542 26.1654 22.5006Z\"\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_16522_57254\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(10 10)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <div class=\"dropdown-menu position-absolute mt-2 bg-white shadow rounded\"\n [ngClass]=\"{'d-block': openDropdownIndex === i, 'd-none': openDropdownIndex !== i}\">\n <div class=\"dropdown-item\" *ngFor=\"let option of options\"\n (click)=\"selectOption(option,transaction?.clientId)\">\n {{ option.label }}\n </div>\n </div>\n </div>\n </div>\n </td>\n </tr>\n </ng-container>\n \n </tbody>\n </table>\n <div *ngIf=\"!transactionLoading && !transactionNoData\">\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPagetran\" [currentPage]=\"currenttranPage\"\n [totalItems]=\"transactionItems\" [paginationSizes]=\"paginationSizestran\" [pageSize]=\"pagetransSize\"\n (pageChange)=\"onPageChangetran($event)\" (pageSizeChange)=\"onPageSizeChangeTran($event)\"></lib-pagination>\n </div>\n \n \n \n </div>\n </div>\n</div>\n<!-- invoice table end -->\n<!-- invoice table start -->\n\n\n<!-- invoice table end -->", styles: ["@charset \"UTF-8\";.paymenthistory{padding:0px 1.25rem!important}.invoice{width:120%}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.activePlanBtnprimary{border-radius:6px;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Primary-700, #009BF3);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.activePlanBtn{border-radius:6px;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.rotate{rotate:180deg;transition:1s}.invoicesearch{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;height:100%}.invoicesearch::placeholder{color:var(--Gray-700, #344054)!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.invheader{color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.invoivetable{overflow-x:scroll!important;overflow-y:scroll!important;width:110%!important}.viewdetails{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF);background:var(--Primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;color:var(--Primary-700, #009BF3);padding:10px 16px;justify-content:center;align-items:center;gap:10px;font-size:12px;font-style:normal;font-weight:600;line-height:18px;text-transform:capitalize}.invoicesubtab{background:var(--Gray-50, #F9FAFB)}.form-control{display:block;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px;border:none!important}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.monthwidth{width:70%}.update{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px}.debitvalue{color:var(--Error-500, #F04438);font-size:14px;font-weight:500;line-height:20px}.creditvalue{color:var(--Success-500, #12B76A);font-size:14px;font-weight:500;line-height:20px}.table-title{line-height:3!important}.product-traffic{color:var(--Blue-700, #175CD3);text-align:center;font-family:Inter;font-size:12px;font-weight:500;border-radius:16px;background:var(--Blue-50, #EFF8FF)}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important;line-height:3!important}.text-symbol{color:var(--primary-600, #00A3FF)}.symbol-label{font-family:Inter;font-size:16px;font-weight:500;line-height:24px;letter-spacing:0em;text-align:center}.dropdown-menu{display:none;background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;right:0;top:100%;width:65%!important;left:5%!important}.dropdown-item{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:25px}.table-title .show{display:block}.producttext{color:#333;text-align:left;cursor:pointer;padding:10px}.producttext:hover{background:#f5f5f5}.logo-img{border-radius:50%;width:100%;height:100%;object-fit:cover}.billingheader{color:var(--Gray-900, #101828);font-size:18px;font-style:normal;font-weight:600;line-height:28px}.locked-action{opacity:.4;cursor:not-allowed}.pending-note{color:#b54708;font-size:11px;font-weight:600}.invoice-link{color:#00a3ff;cursor:pointer;text-decoration:none}.invoice-link:hover{text-decoration:underline}.invoice-card{border:1px solid #E4E7EC;border-radius:12px;padding:18px 22px;background:#fff;transition:box-shadow .15s}.invoice-type-toggle{display:inline-flex;gap:4px;padding:4px;background:#f2f4f7;border-radius:10px}.invoice-type-btn{border:0;background:transparent;color:#475467;font-size:13.5px;font-weight:600;padding:7px 16px;border-radius:7px;cursor:pointer;transition:background .15s,color .15s}.invoice-type-btn:hover{color:#101828}.invoice-type-btn.active{background:#fff;color:#00a3ff;box-shadow:0 1px 2px #10182814}.invoice-card-label{display:flex;align-items:center;gap:6px;color:#475467;font-size:13.5px;font-weight:500}.invoice-card-label .info-ic{color:#c4c9d2;cursor:help;vertical-align:middle}.invoice-card-value{font-size:22px;font-weight:700;color:#101828;margin-top:6px;letter-spacing:-.3px}.invoice-card-value.text-danger{color:#d64545}.invoice-card-value.text-warning{color:#b9740a}.invoice-card-split{display:flex;gap:28px;margin-top:8px;flex-wrap:wrap}.invoice-card-split-item{display:flex;flex-direction:column;gap:2px}.invoice-card-split-item .invoice-card-value{font-size:19px;margin-top:0}.invoice-card-split-label{color:#98a2b3;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.invoice-card-sub{color:#98a2b3;font-size:12.5px;margin-top:4px}.pill{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}.pill-green{background:#e7f7ee;color:#138a52}.pill-amber{background:#fdf0dc;color:#b9740a}.due-overdue{color:#d64545;font-weight:600}.due-today{color:#b9740a;font-weight:600}.due-upcoming{color:#475467;font-weight:600}.due-muted{color:#98a2b3}.registered-name{max-width:180px;white-space:normal;line-height:1.35}.svg-icon.search-ic-center.position-absolute{top:50%!important;transform:translateY(-50%);margin-top:0!important;height:auto!important;display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.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: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i3.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i3.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
|
|
1142
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TangoManageBillingComponent, selector: "lib-tango-manage-billing", host: { listeners: { "document:click": "clickout($event)" } }, ngImport: i0, template: "<div>\n <!-- <div *ngIf=\"invoicetransaction\" class=\"mt-4 paymenthistory\">\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3 me-2\"\n [ngClass]=\"invoiceplans === 'invoice' ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\n data-kt-plan=\"invoice\" (click)=\"selectInvoicePlan('invoice')\">\n Invoice\n </button>\n\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\n [ngClass]=\"invoiceplans === 'credittransaction' ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\n data-kt-plan=\"credittransaction\" (click)=\"selectInvoicePlan('credittransaction')\">\n Credit Transactions\n </button>\n </div> -->\n <!-- Header summary cards \u2014 Outstanding / Overdue / Pending Payment.\n Totals are scoped to the user's full client access, NOT the current\n filter/search/page, so they stay stable as the user narrows the list. -->\n <!-- Sub-toggle: regular invoices vs advance (TINV-*) invoices. -->\n <div *ngIf=\"invoiceplans === 'invoice'\" class=\"invoice-type-toggle mt-3 mx-2\">\n <button type=\"button\"\n [ngClass]=\"invoiceType === 'all' ? 'invoice-type-btn active' : 'invoice-type-btn'\"\n (click)=\"selectInvoiceType('all')\">All Invoices</button>\n <button type=\"button\"\n [ngClass]=\"invoiceType === 'advance' ? 'invoice-type-btn active' : 'invoice-type-btn'\"\n (click)=\"selectInvoiceType('advance')\">Advance Invoice</button>\n </div>\n <div *ngIf=\"invoiceplans === 'invoice'\" class=\"row g-3 mt-3 mb-2 mx-2\">\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Outstanding\n <svg class=\"info-ic\" ngbTooltip=\"Total unpaid balance across all invoices in the current view (dollar invoices converted to \u20B9).\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value\">\u20B9{{ invoiceCards.outstandingExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value\">\u20B9{{ invoiceCards.outstandingInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.outstandingCount }} {{ invoiceCards.outstandingCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Overdue\n <svg class=\"info-ic\" ngbTooltip=\"Unpaid invoices whose due date has already passed.\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value text-danger\">\u20B9{{ invoiceCards.overdueExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value text-danger\">\u20B9{{ invoiceCards.overdueInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.overdueCount }} {{ invoiceCards.overdueCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Pending Payment\n <svg class=\"info-ic\" ngbTooltip=\"Approved invoices that are still awaiting payment.\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value text-warning\">\u20B9{{ invoiceCards.pendingPaymentExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value text-warning\">\u20B9{{ invoiceCards.pendingPaymentInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.pendingPaymentCount }} {{ invoiceCards.pendingPaymentCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"card-header paymenthistory border-0\">\n <div *ngIf=\"invoiceplans === 'credittransaction'\" class=\"billingheader ms-1 mt-6\">Credit Transactions</div>\n <div class=\"card-toolbar ms-auto\">\n <div class=\"d-flex\">\n <div class=\"d-flex align-items-center position-relative my-1\">\n <span class=\"svg-icon invoicesearch svg-icon-1 position-absolute search-ic-center ms-3\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\n </rect>\n <path\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\n fill=\"currentColor\"></path>\n </svg>\n </span>\n <input [(ngModel)]=\"len\" type=\"text\" class=\"form-control ps-14 invoicesearch\"\n placeholder=\"Search...\" autocomplete=\"off\" (change)=\"searchField()\"\n [disabled]=\"searchDisabled\" />\n <lib-filters *ngIf=\"invoiceplans === 'invoice'\" [dataObject]=\"invoiceFilterObject\" (appliedFilters)=\"applyInvoiceFilters($event)\"></lib-filters>\n\n <!-- <div class=\"me-3 monthwidth\">\n <div class=\"dropdown invheader\">\n <select class=\"form-select invheader\" aria-label=\"Default select example\"\n [(ngModel)]=\"isFilter\" (change)=\"invoiceFilter()\">\n <option value=\"current\">Current Month</option>\n <option value=\"prev\">Previous Month</option>\n <option value=\"last\">Last 3 Months</option>\n </select>\n </div>\n </div> -->\n\n <!-- <button (click)=\"creditnote()\" type=\"button\"\n class=\"btn-outline btn align-items-end invheader text-nowrap me-4\"\n *ngIf=\"(gs.userAccess | async)?.userType === 'tango' && (gs.userAccess | async)?.settings_paymentSubscriptions_isEdit\"\n [disabled]=\"!invoiceList.length\"><svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\n viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M10.4993 4.16675V15.8334M4.66602 10.0001H16.3327\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg><span>Credit Note</span> </button> -->\n <button type=\"button\" (click)=\"onExport()\"\n class=\"btn-outline btn align-items-end text-nowrap invheader\"\n *ngIf=\"invoiceplans === 'invoice'\"\n [disabled]=\"!invoiceList.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\n viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg><span class=\"ms-2\"></span> Export</button>\n\n\n <button type=\"button\" (click)=\"onExportTransaction()\"\n class=\"btn-outline btn align-items-end text-nowrap invheader ms-4\"\n *ngIf=\"invoiceplans === 'credittransaction'\"\n [disabled]=\"!transactionList.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg><span class=\"ms-2\"></span> Export</button>\n\n\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"invoiceplans === 'invoice'\">\n\n <!-- Bulk actions toolbar (status filter tabs removed \u2014 statuses are\n reachable via the Filter popover, matching the prototype) -->\n <div class=\"card-header paymenthistory border-0 px-0\" *ngIf=\"selectedInvoices.size > 0\">\n <div></div>\n <div class=\"card-toolbar\">\n <div class=\"d-flex\">\n <button type=\"button\" (click)=\"downloadSelected()\"\n class=\"btn btn-outline-primary btn-sm align-items-end text-nowrap invheader me-2\"\n *ngIf=\"selectedInvoices.size > 0\"\n [disabled]=\"bulkDownloading\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\n stroke=\"currentColor\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"ms-1\" *ngIf=\"!bulkDownloading\">Download Selected ({{ selectedInvoices.size }})</span>\n <span class=\"ms-1\" *ngIf=\"bulkDownloading\">Preparing ZIP...</span>\n </button>\n <button type=\"button\" (click)=\"approveSelected()\"\n class=\"btn btn-success btn-sm align-items-end text-nowrap invheader me-2\"\n *ngIf=\"selectedInvoices.size > 0\"\n [disabled]=\"bulkApproving\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M16.6667 5L7.50001 14.1667L3.33334 10\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"ms-1\" *ngIf=\"!bulkApproving\">Approve Selected ({{ selectedInvoices.size }})</span>\n <span class=\"ms-1\" *ngIf=\"bulkApproving\">Approving...</span>\n </button>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"invoiceLoading\">\n <div class=\"row loader d-flex justify-content-center align-items-center\">\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n\n </div>\n </ng-container>\n <ng-container *ngIf=\"invoiceNoData\">\n <div class=\"row\">\n <div class=\"col-lg-12 mb-3\">\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\n </div>\n </div>\n </div>\n </ng-container>\n <!-- invoice table start -->\n <div *ngIf=\"!invoiceLoading && !invoiceNoData\" class=\"table-responsive\">\n <table class=\"table accordion table bottom-border invoivetable text-nowrap\">\n <thead>\n <tr>\n <th style=\"width: 40px;\">\n <input type=\"checkbox\" [(ngModel)]=\"selectAll\" (change)=\"toggleSelectAll()\"\n class=\"form-check-input\" [disabled]=\"invoiceList.length === 0\">\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('clientName')\" >Brand Name\n <svg [ngClass]=\"sortColumName === 'clientName' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('companyName')\">Registered Name\n <svg [ngClass]=\"sortColumName === 'companyName' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'companyName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('invoice')\" >Invoice #\n <svg [ngClass]=\"sortColumName === 'invoice' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'invoice' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('billingDate')\">Billing Date\n <svg [ngClass]=\"sortColumName === 'billingDate' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'billingDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('dueDate')\">Due Status\n <svg [ngClass]=\"sortColumName === 'dueDate' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'dueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th>Group Name</th>\n <th class=\"cursor-pointer\" (click)=\"sortData('amount')\">Amount Excl. GST\n <svg [ngClass]=\"sortColumName === 'amount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'amount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('gstAmount')\">GST Amount\n <svg [ngClass]=\"sortColumName === 'gstAmount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'gstAmount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('totalAmount')\">Amount Incl. GST\n <svg [ngClass]=\"sortColumName === 'totalAmount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'totalAmount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th>Stores</th>\n <th>Payment Status</th>\n <th>Approval Status</th>\n <th scope=\"col\">Action</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let invoice of invoiceList; let i = index\">\n <td>\n <input type=\"checkbox\"\n [checked]=\"isSelected(invoice)\"\n (change)=\"toggleInvoiceSelect(invoice)\"\n class=\"form-check-input\">\n </td>\n <td>\n <div class=\"table-title table-title-primary d-flex \">\n <div class=\"symbol symbol-35px symbol-circle me-2\"><span\n class=\"symbol-label text-symbol\">\n <span *ngIf=\"!invoice?.logo\" class=\"symbol-label bg-light-primary text-symbol\">\n {{invoice?.clientName?.charAt(0)}} </span>\n <!-- (error): broken/expired logo URL falls back to the letter avatar -->\n <img *ngIf=\"invoice?.logo\" class=\"logo-img\" [src]=\"invoice?.logo\" (error)=\"invoice.logo = ''\" alt=\"\">\n </span></div>\n <div><u class=\"cursor-pointer\" (click)=\"viewBrand(invoice)\"> {{invoice?.clientName | uppercase}}</u></div>\n </div>\n </td>\n <td>\n <div class=\"table-title registered-name\">{{ invoice?.companyName || '\u2014' }}</div>\n </td>\n <td>\n <div class=\"table-title table-title-primary\">\n <a class=\"invoice-link\" (click)=\"openInvoicePreview(invoice); $event.stopPropagation()\">{{ invoice?.invoice }}</a>\n </div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.billingDate | date: 'dd MMM, yyyy' }}</div>\n </td>\n <td>\n <div class=\"table-title\" [ngClass]=\"getDueStatusClass(invoice)\">{{ getDueStatus(invoice) }}</div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.groupName }}</div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoiceCurrencySymbol(invoice) }} {{ invoice?.amount | number:amountFormat(invoice):'en-IN' }}</div>\n </td>\n <td>\n <div class=\"table-title\" *ngIf=\"isGstApplicable(invoice); else noGst\">{{ invoiceCurrencySymbol(invoice) }} {{ gstAmount(invoice) | number:amountFormat(invoice):'en-IN' }}</div>\n <ng-template #noGst><div class=\"table-title\">\u2014</div></ng-template>\n </td>\n <td>\n <div class=\"table-title\"><strong>{{ invoiceCurrencySymbol(invoice) }} {{ invoice?.totalAmount | number:amountFormat(invoice):'en-IN' }}</strong></div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.stores }} {{ invoice?.stores === 1 ? 'Store' : 'Stores' }}</div>\n </td>\n <td>\n <span [ngClass]=\"getPaymentPillClass(invoice)\">{{ getPaymentLabel(invoice) }}</span>\n <div *ngIf=\"hasPending(invoice)\" class=\"pending-note mt-1\">\n {{ invoiceCurrencySymbol(invoice) }}{{ pendingAmount(invoice) | number:'1.2-2':'en-IN' }} pending\n </div>\n </td>\n <td>\n <span [ngClass]=\"getApprovalPillClass(invoice)\" class=\"cursor-pointer\"\n title=\"View activity\"\n (click)=\"openInvoiceLogs(invoice); $event.stopPropagation()\">{{ getApprovalLabel(invoice) }}</span>\n </td>\n <td>\n <div class=\"table-title d-flex justify-content-around \">\n <!-- Edit invoice (locked when approved) -->\n <span [class.cursor-pointer]=\"!isInvoiceLocked(invoice)\"\n [class.locked-action]=\"isInvoiceLocked(invoice)\"\n (click)=\"!isInvoiceLocked(invoice) && editInvoice(invoice)\"\n [ngbTooltip]=\"isInvoiceLocked(invoice) ? 'Approved invoice \u2014 editing is disabled' : 'Edit Invoice'\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M26.5 14.5L29.5 17.5M14.5 29.5H17.5L28 19C28.3978 18.6022 28.6213 18.0663 28.6213 17.5C28.6213 16.9337 28.3978 16.3978 28 16C27.6022 15.6022 27.0663 15.3787 26.5 15.3787C25.9337 15.3787 25.3978 15.6022 25 16L14.5 26.5V29.5Z\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n\n <!-- Approve (stage-aware) -->\n <span class=\"cursor-pointer\" (click)=\"approveInvoice(invoice)\"\n [ngbTooltip]=\"getApproveTooltip(invoice)\"\n *ngIf=\"canApprove(invoice, userAccess)\">\n\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_16478_43040)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <g clip-path=\"url(#clip0_16478_43040)\">\n <path\n d=\"M30.3346 20.2335V21.0002C30.3336 22.7972 29.7517 24.5458 28.6757 25.9851C27.5998 27.4244 26.0874 28.4773 24.3641 28.9868C22.6408 29.4963 20.799 29.4351 19.1134 28.8124C17.4277 28.1896 15.9885 27.0386 15.0104 25.5311C14.0324 24.0236 13.5678 22.2403 13.686 20.4471C13.8043 18.654 14.499 16.9472 15.6665 15.5811C16.8341 14.2151 18.412 13.263 20.1648 12.867C21.9176 12.471 23.7515 12.6522 25.393 13.3835M30.3346 14.3335L22.0013 22.6752L19.5013 20.1752\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </g>\n <defs>\n <filter id=\"filter0_d_16478_43040\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_16478_43040\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_16478_43040\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_16478_43040\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(12 11)\" />\n </clipPath>\n </defs>\n </svg>\n\n </span>\n <span class=\"cursor-pointer\" *ngIf=\"invoice.status==='approved' && (gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\"> <svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\"\n fill=\"none\">\n <g filter=\"url(#filter0_d_16630_8062)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#EAECF0\" />\n <g clip-path=\"url(#clip0_16630_8062)\">\n <path\n d=\"M30.3346 20.2335V21.0002C30.3336 22.7972 29.7517 24.5458 28.6757 25.9851C27.5998 27.4244 26.0874 28.4773 24.3641 28.9868C22.6408 29.4963 20.799 29.4351 19.1134 28.8124C17.4277 28.1896 15.9885 27.0386 15.0104 25.5311C14.0324 24.0236 13.5678 22.2403 13.686 20.4471C13.8043 18.654 14.499 16.9472 15.6665 15.5811C16.8341 14.2151 18.412 13.263 20.1648 12.867C21.9176 12.471 23.7515 12.6522 25.393 13.3835M30.3346 14.3335L22.0013 22.6752L19.5013 20.1752\"\n stroke=\"#D0D5DD\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </g>\n <defs>\n <filter id=\"filter0_d_16630_8062\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_16630_8062\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_16630_8062\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_16630_8062\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(12 11)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\" class=\"cursor-pointer\" (click)=\"regenerateInvoice(invoice)\"><svg width=\"44\"\n height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" />\n <g filter=\"url(#filter0_d_15530_60395)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path\n d=\"M31.1654 14.3333V19.3333M31.1654 19.3333H26.1654M31.1654 19.3333L27.2987 15.7C26.4031 14.8039 25.2951 14.1493 24.078 13.7973C22.861 13.4453 21.5746 13.4073 20.3389 13.6869C19.1033 13.9665 17.9585 14.5545 17.0116 15.3962C16.0646 16.2378 15.3463 17.3056 14.9237 18.5M12.832 27.6666V22.6666M12.832 22.6666H17.832M12.832 22.6666L16.6987 26.3C17.5943 27.1961 18.7023 27.8506 19.9194 28.2027C21.1364 28.5547 22.4228 28.5927 23.6585 28.3131C24.8941 28.0335 26.0389 27.4455 26.9858 26.6038C27.9328 25.7621 28.6511 24.6943 29.0737 23.5\"\n stroke=\"#344054\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_15530_60395\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_15530_60395\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_15530_60395\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit && invoice?.status === 'approved' && invoice?.paymentStatus !== 'paid'\" class=\"cursor-pointer\" (click)=\"paymentstatusChange(invoice)\" >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\n <!-- Border Rectangle -->\n <rect x=\"2.5\" y=\"2.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" fill=\"none\" />\n \n <!-- Background Rectangle -->\n <rect x=\"2.5\" y=\"2.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" fill=\"white\" />\n \n <!-- Inner Icon -->\n <g transform=\"translate(13, 11)\"> <!-- Adjusted position for centering -->\n <path d=\"M2.9987 8.00065V6.33398C2.9987 5.0079 3.52548 3.73613 4.46316 2.79845C5.40085 1.86077 6.67262 1.33398 7.9987 1.33398C9.32478 1.33398 10.5966 1.86077 11.5342 2.79845C12.4719 3.73613 12.9987 5.0079 12.9987 6.33398V8.00065M1.33203 13.0007C1.33203 13.4427 1.50763 13.8666 1.82019 14.1792C2.13275 14.4917 2.55667 14.6673 2.9987 14.6673C3.44073 14.6673 3.86465 14.4917 4.17721 14.1792C4.48977 13.8666 4.66536 13.4427 4.66536 13.0007C4.66536 12.5586 4.48977 12.1347 4.17721 11.8221C3.86465 11.5096 3.44073 11.334 2.9987 11.334C2.55667 11.334 2.13275 11.5096 1.82019 11.8221C1.50763 12.1347 1.33203 12.5586 1.33203 13.0007ZM11.332 13.0007C11.332 13.4427 11.5076 13.8666 11.8202 14.1792C12.1327 14.4917 12.5567 14.6673 12.9987 14.6673C13.4407 14.6673 13.8646 14.4917 14.1772 14.1792C14.4898 13.8666 14.6654 13.4427 14.6654 13.0007C14.6654 12.5586 14.4898 12.1347 14.1772 11.8221C13.8646 11.5096 13.4407 11.334 12.9987 11.334C12.5567 11.334 12.1327 11.5096 11.8202 11.8221C11.5076 12.1347 11.332 12.5586 11.332 13.0007Z\" stroke=\"#667085\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M10.5 5.5L13 8L15.5 5.5\" stroke=\"#667085\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n </svg>\n \n \n </span>\n <!-- (click)=\"downloadInvoice(invoice)\" -->\n <span (click)=\"downloadInvoice(invoice)\" class=\"cursor-pointer\"><svg width=\"44\"\n height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" />\n <g filter=\"url(#filter0_d_15530_60396)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\n stroke=\"#344054\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_15530_60396\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_15530_60396\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_15530_60396\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n\n <!-- Cancel invoice (approved + unpaid only) \u2014 replaces the disabled\n delete slot for cancellable rows. -->\n <span *ngIf=\"canCancelInvoice(invoice)\" class=\"cursor-pointer\"\n (click)=\"cancelInvoice(invoice)\"\n ngbTooltip=\"Cancel Invoice\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M28.5 15.5L15.5 28.5M15.5 15.5L28.5 28.5\" stroke=\"#D92D20\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n\n <!-- Delete invoice \u2014 HIDDEN (not disabled) once it no longer\n applies: cancellable rows show Cancel instead, and\n locked (approved/cancelled) rows show neither. -->\n <span *ngIf=\"!canCancelInvoice(invoice) && !isInvoiceLocked(invoice)\" class=\"cursor-pointer\"\n (click)=\"deleteInvoice(invoice)\"\n ngbTooltip=\"Delete Invoice\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M17 21H27M15.5 17H28.5M19.5 25H24.5M16.1667 28.5H27.8333C28.7538 28.5 29.5 27.7538 29.5 26.8333V15.1667C29.5 14.2462 28.7538 13.5 27.8333 13.5H16.1667C15.2462 13.5 14.5 14.2462 14.5 15.1667V26.8333C14.5 27.7538 15.2462 28.5 16.1667 28.5Z\"\n stroke=\"#D92D20\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <div *ngIf=\"!invoiceLoading && !invoiceNoData\">\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\n </div>\n </div>\n </div>\n <div *ngIf=\"invoiceplans === 'credittransaction'\">\n <ng-container *ngIf=\"transactionLoading\">\n <div class=\"row loader d-flex justify-content-center align-items-center\">\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n \n </div>\n </ng-container>\n <ng-container *ngIf=\"transactionNoData\">\n <div class=\"row\">\n <div class=\"col-lg-12 mb-3\">\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\n </div>\n </div>\n </div>\n </ng-container>\n \n <div class=\"table-responsive\" *ngIf=\"!transactionLoading && !transactionNoData\">\n <table class=\"table accordion table bottom-border \">\n <thead>\n <tr>\n <th class=\"cursor-pointer\" (click)=\"sortDataTrans('clientName')\" >Client Name\n <svg [ngClass]=\"sortColumNametran === 'clientName' && sortBytran === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumNametran === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th> \n <th class=\"cursor-pointer\" (click)=\"sortDataTrans('credit')\" >Balance Credits\n <svg [ngClass]=\"sortColumNametran === 'credit' && sortBytran === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumNametran === 'credit' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\" scope=\"col\">Action</th>\n </tr>\n </thead>\n <tbody>\n <ng-container>\n <tr *ngFor=\"let transaction of transactionList; let i = index\">\n <td>\n <div class=\"table-title table-title-primary d-flex \">\n <div class=\"symbol symbol-35px symbol-circle me-2\"><span\n class=\"symbol-label text-symbol\">\n <span *ngIf=\"!transaction?.logo\"\n class=\"symbol-label bg-light-primary text-symbol\">\n {{transaction?.clientName?.charAt(0)}} </span>\n <img *ngIf=\"transaction?.logo\" class=\"logo-img\" [src]=\"transaction?.logo\"\n (error)=\"transaction.logo = ''\" alt=\"\">\n </span></div>\n <div><u> {{transaction?.clientName | uppercase}}</u>\n </div>\n </div>\n \n </td>\n \n <td>\n <div class=\"table-title\">\n <span *ngIf=\"transaction?.currencyType === 'inr'\">\u20B9</span>\n <span *ngIf=\"transaction?.currencyType === 'dollar'\">$</span>\n {{transaction?.credit | number:'1.0-2':'en-IN'}}\n </div>\n </td>\n <td *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\">\n <div class=\"table-title position-relative\">\n <div class=\"position-relative cursor-pointer\" (click)=\"toggleDropdown(i)\">\n <div class=\"ms-5\">\n <span class=\"justify-content-end cursor-pointer\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_16522_57254)\">\n <path\n d=\"M19.9987 22.5006C21.3794 22.5006 22.4987 21.3814 22.4987 20.0007C22.4987 18.6199 21.3794 17.5007 19.9987 17.5007C18.618 17.5007 17.4987 18.6199 17.4987 20.0007C17.4987 21.3814 18.618 22.5006 19.9987 22.5006Z\"\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M26.1654 22.5006C26.0544 22.752 26.0213 23.0308 26.0704 23.3011C26.1194 23.5715 26.2482 23.8209 26.4404 24.0173L26.4904 24.0673C26.6453 24.2221 26.7683 24.4059 26.8521 24.6082C26.936 24.8106 26.9792 25.0275 26.9792 25.2465C26.9792 25.4655 26.936 25.6824 26.8521 25.8847C26.7683 26.087 26.6453 26.2709 26.4904 26.4256C26.3356 26.5806 26.1518 26.7035 25.9494 26.7874C25.7471 26.8713 25.5302 26.9145 25.3112 26.9145C25.0922 26.9145 24.8753 26.8713 24.673 26.7874C24.4706 26.7035 24.2868 26.5806 24.132 26.4256L24.082 26.3756C23.8856 26.1835 23.6362 26.0547 23.3659 26.0056C23.0955 25.9566 22.8167 25.9897 22.5654 26.1006C22.3189 26.2063 22.1087 26.3817 21.9606 26.6053C21.8126 26.8288 21.7331 27.0908 21.732 27.359V27.5006C21.732 27.9427 21.5564 28.3666 21.2439 28.6792C20.9313 28.9917 20.5074 29.1673 20.0654 29.1673C19.6233 29.1673 19.1994 28.9917 18.8869 28.6792C18.5743 28.3666 18.3987 27.9427 18.3987 27.5006V27.4256C18.3922 27.1498 18.303 26.8823 18.1425 26.6579C17.9819 26.4335 17.7576 26.2626 17.4987 26.1673C17.2474 26.0564 16.9685 26.0233 16.6982 26.0723C16.4279 26.1213 16.1784 26.2502 15.982 26.4423L15.932 26.4923C15.7772 26.6473 15.5934 26.7702 15.3911 26.8541C15.1888 26.938 14.9719 26.9811 14.7529 26.9811C14.5338 26.9811 14.317 26.938 14.1146 26.8541C13.9123 26.7702 13.7285 26.6473 13.5737 26.4923C13.4187 26.3375 13.2958 26.1537 13.2119 25.9514C13.1281 25.7491 13.0849 25.5322 13.0849 25.3131C13.0849 25.0941 13.1281 24.8772 13.2119 24.6749C13.2958 24.4726 13.4187 24.2888 13.5737 24.134L13.6237 24.084C13.8158 23.8876 13.9447 23.6381 13.9937 23.3678C14.0427 23.0975 14.0096 22.8187 13.8987 22.5673C13.7931 22.3208 13.6177 22.1106 13.3941 21.9626C13.1705 21.8145 12.9085 21.7351 12.6404 21.734H12.4987C12.0567 21.734 11.6327 21.5584 11.3202 21.2458C11.0076 20.9333 10.832 20.5093 10.832 20.0673C10.832 19.6253 11.0076 19.2014 11.3202 18.8888C11.6327 18.5762 12.0567 18.4007 12.4987 18.4007H12.5737C12.8495 18.3942 13.117 18.3049 13.3414 18.1444C13.5659 17.9839 13.7368 17.7596 13.832 17.5007C13.943 17.2493 13.9761 16.9705 13.927 16.7002C13.878 16.4298 13.7491 16.1804 13.557 15.984L13.507 15.934C13.3521 15.7792 13.2291 15.5954 13.1453 15.3931C13.0614 15.1907 13.0182 14.9738 13.0182 14.7548C13.0182 14.5358 13.0614 14.3189 13.1453 14.1166C13.2291 13.9143 13.3521 13.7304 13.507 13.5757C13.6618 13.4207 13.8456 13.2978 14.048 13.2139C14.2503 13.13 14.4672 13.0868 14.6862 13.0868C14.9052 13.0868 15.1221 13.13 15.3244 13.2139C15.5268 13.2978 15.7106 13.4207 15.8654 13.5757L15.9154 13.6257C16.1118 13.8178 16.3612 13.9466 16.6315 13.9957C16.9019 14.0447 17.1807 14.0116 17.432 13.9007H17.4987C17.7452 13.795 17.9554 13.6196 18.1034 13.396C18.2515 13.1725 18.331 12.9105 18.332 12.6423V12.5007C18.332 12.0586 18.5076 11.6347 18.8202 11.3221C19.1327 11.0096 19.5567 10.834 19.9987 10.834C20.4407 10.834 20.8646 11.0096 21.1772 11.3221C21.4898 11.6347 21.6654 12.0586 21.6654 12.5007V12.5757C21.6664 12.8438 21.7459 13.1058 21.894 13.3294C22.042 13.5529 22.2522 13.7283 22.4987 13.834C22.75 13.9449 23.0289 13.978 23.2992 13.929C23.5695 13.88 23.819 13.7511 24.0154 13.559L24.0654 13.509C24.2202 13.354 24.404 13.2311 24.6063 13.1472C24.8086 13.0633 25.0255 13.0202 25.2445 13.0202C25.4636 13.0202 25.6804 13.0633 25.8828 13.1472C26.0851 13.2311 26.2689 13.354 26.4237 13.509C26.5787 13.6638 26.7016 13.8476 26.7855 14.0499C26.8693 14.2522 26.9125 14.4691 26.9125 14.6882C26.9125 14.9072 26.8693 15.1241 26.7855 15.3264C26.7016 15.5287 26.5787 15.7125 26.4237 15.8673L26.3737 15.9173C26.1816 16.1137 26.0527 16.3632 26.0037 16.6335C25.9547 16.9038 25.9878 17.1826 26.0987 17.434V17.5007C26.2043 17.7471 26.3797 17.9573 26.6033 18.1054C26.8269 18.2535 27.0889 18.3329 27.357 18.334H27.4987C27.9407 18.334 28.3646 18.5096 28.6772 18.8221C28.9898 19.1347 29.1654 19.5586 29.1654 20.0007C29.1654 20.4427 28.9898 20.8666 28.6772 21.1792C28.3646 21.4917 27.9407 21.6673 27.4987 21.6673H27.4237C27.1555 21.6684 26.8936 21.7478 26.67 21.8959C26.4464 22.044 26.271 22.2542 26.1654 22.5006Z\"\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_16522_57254\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(10 10)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <div class=\"dropdown-menu position-absolute mt-2 bg-white shadow rounded\"\n [ngClass]=\"{'d-block': openDropdownIndex === i, 'd-none': openDropdownIndex !== i}\">\n <div class=\"dropdown-item\" *ngFor=\"let option of options\"\n (click)=\"selectOption(option,transaction?.clientId)\">\n {{ option.label }}\n </div>\n </div>\n </div>\n </div>\n </td>\n </tr>\n </ng-container>\n \n </tbody>\n </table>\n <div *ngIf=\"!transactionLoading && !transactionNoData\">\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPagetran\" [currentPage]=\"currenttranPage\"\n [totalItems]=\"transactionItems\" [paginationSizes]=\"paginationSizestran\" [pageSize]=\"pagetransSize\"\n (pageChange)=\"onPageChangetran($event)\" (pageSizeChange)=\"onPageSizeChangeTran($event)\"></lib-pagination>\n </div>\n \n \n \n </div>\n </div>\n</div>\n<!-- invoice table end -->\n<!-- invoice table start -->\n\n\n<!-- invoice table end -->", styles: ["@charset \"UTF-8\";.paymenthistory{padding:0px 1.25rem!important}.invoice{width:120%}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.activePlanBtnprimary{border-radius:6px;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Primary-700, #009BF3);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.activePlanBtn{border-radius:6px;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.rotate{rotate:180deg;transition:1s}.invoicesearch{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;height:100%}.invoicesearch::placeholder{color:var(--Gray-700, #344054)!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.invheader{color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.invoivetable{overflow-x:scroll!important;overflow-y:scroll!important;width:110%!important}.viewdetails{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF);background:var(--Primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;color:var(--Primary-700, #009BF3);padding:10px 16px;justify-content:center;align-items:center;gap:10px;font-size:12px;font-style:normal;font-weight:600;line-height:18px;text-transform:capitalize}.invoicesubtab{background:var(--Gray-50, #F9FAFB)}.form-control{display:block;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px;border:none!important}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.monthwidth{width:70%}.update{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px}.debitvalue{color:var(--Error-500, #F04438);font-size:14px;font-weight:500;line-height:20px}.creditvalue{color:var(--Success-500, #12B76A);font-size:14px;font-weight:500;line-height:20px}.table-title{line-height:3!important}.product-traffic{color:var(--Blue-700, #175CD3);text-align:center;font-family:Inter;font-size:12px;font-weight:500;border-radius:16px;background:var(--Blue-50, #EFF8FF)}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important;line-height:3!important}.text-symbol{color:var(--primary-600, #00A3FF)}.symbol-label{font-family:Inter;font-size:16px;font-weight:500;line-height:24px;letter-spacing:0em;text-align:center}.dropdown-menu{display:none;background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;right:0;top:100%;width:65%!important;left:5%!important}.dropdown-item{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:25px}.table-title .show{display:block}.producttext{color:#333;text-align:left;cursor:pointer;padding:10px}.producttext:hover{background:#f5f5f5}.logo-img{border-radius:50%;width:100%;height:100%;object-fit:cover}.billingheader{color:var(--Gray-900, #101828);font-size:18px;font-style:normal;font-weight:600;line-height:28px}.locked-action{opacity:.4;cursor:not-allowed}.pending-note{color:#b54708;font-size:11px;font-weight:600}.invoice-link{color:#00a3ff;cursor:pointer;text-decoration:none}.invoice-link:hover{text-decoration:underline}.invoice-card{border:1px solid #E4E7EC;border-radius:12px;padding:18px 22px;background:#fff;transition:box-shadow .15s}.invoice-type-toggle{display:inline-flex;gap:4px;padding:4px;background:#f2f4f7;border-radius:10px}.invoice-type-btn{border:0;background:transparent;color:#475467;font-size:13.5px;font-weight:600;padding:7px 16px;border-radius:7px;cursor:pointer;transition:background .15s,color .15s}.invoice-type-btn:hover{color:#101828}.invoice-type-btn.active{background:#fff;color:#00a3ff;box-shadow:0 1px 2px #10182814}.invoice-card-label{display:flex;align-items:center;gap:6px;color:#475467;font-size:13.5px;font-weight:500}.invoice-card-label .info-ic{color:#c4c9d2;cursor:help;vertical-align:middle}.invoice-card-value{font-size:22px;font-weight:700;color:#101828;margin-top:6px;letter-spacing:-.3px}.invoice-card-value.text-danger{color:#d64545}.invoice-card-value.text-warning{color:#b9740a}.invoice-card-split{display:flex;gap:28px;margin-top:8px;flex-wrap:wrap}.invoice-card-split-item{display:flex;flex-direction:column;gap:2px}.invoice-card-split-item .invoice-card-value{font-size:19px;margin-top:0}.invoice-card-split-label{color:#98a2b3;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.invoice-card-sub{color:#98a2b3;font-size:12.5px;margin-top:4px}.pill{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}.pill-green{background:#e7f7ee;color:#138a52}.pill-amber{background:#fdf0dc;color:#b9740a}.due-overdue{color:#d64545;font-weight:600}.due-today{color:#b9740a;font-weight:600}.due-upcoming{color:#475467;font-weight:600}.due-muted{color:#98a2b3}.registered-name{max-width:180px;white-space:normal;line-height:1.35}.svg-icon.search-ic-center.position-absolute{top:50%!important;transform:translateY(-50%);margin-top:0!important;height:auto!important;display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.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: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "component", type: i3.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i3.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
|
|
1141
1143
|
}
|
|
1142
1144
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoManageBillingComponent, decorators: [{
|
|
1143
1145
|
type: Component,
|
|
1144
|
-
args: [{ selector: 'lib-tango-manage-billing', template: "<div>\n <!-- <div *ngIf=\"invoicetransaction\" class=\"mt-4 paymenthistory\">\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3 me-2\"\n [ngClass]=\"invoiceplans === 'invoice' ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\n data-kt-plan=\"invoice\" (click)=\"selectInvoicePlan('invoice')\">\n Invoice\n </button>\n\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\n [ngClass]=\"invoiceplans === 'credittransaction' ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\n data-kt-plan=\"credittransaction\" (click)=\"selectInvoicePlan('credittransaction')\">\n Credit Transactions\n </button>\n </div> -->\n <!-- Header summary cards \u2014 Outstanding / Overdue / Pending Payment.\n Totals are scoped to the user's full client access, NOT the current\n filter/search/page, so they stay stable as the user narrows the list. -->\n <!-- Sub-toggle: regular invoices vs advance (TINV-*) invoices. -->\n <div *ngIf=\"invoiceplans === 'invoice'\" class=\"invoice-type-toggle mt-3 mx-2\">\n <button type=\"button\"\n [ngClass]=\"invoiceType === 'all' ? 'invoice-type-btn active' : 'invoice-type-btn'\"\n (click)=\"selectInvoiceType('all')\">All Invoices</button>\n <button type=\"button\"\n [ngClass]=\"invoiceType === 'advance' ? 'invoice-type-btn active' : 'invoice-type-btn'\"\n (click)=\"selectInvoiceType('advance')\">Advance Invoice</button>\n </div>\n <div *ngIf=\"invoiceplans === 'invoice'\" class=\"row g-3 mt-3 mb-2 mx-2\">\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Outstanding\n <svg class=\"info-ic\" ngbTooltip=\"Total unpaid balance across all invoices in the current view (dollar invoices converted to \u20B9).\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value\">\u20B9{{ invoiceCards.outstandingExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value\">\u20B9{{ invoiceCards.outstandingInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.outstandingCount }} {{ invoiceCards.outstandingCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Overdue\n <svg class=\"info-ic\" ngbTooltip=\"Unpaid invoices whose due date has already passed.\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value text-danger\">\u20B9{{ invoiceCards.overdueExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value text-danger\">\u20B9{{ invoiceCards.overdueInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.overdueCount }} {{ invoiceCards.overdueCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Pending Payment\n <svg class=\"info-ic\" ngbTooltip=\"Approved invoices that are still awaiting payment.\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value text-warning\">\u20B9{{ invoiceCards.pendingPaymentExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value text-warning\">\u20B9{{ invoiceCards.pendingPaymentInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.pendingPaymentCount }} {{ invoiceCards.pendingPaymentCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"card-header paymenthistory border-0\">\n <div *ngIf=\"invoiceplans === 'credittransaction'\" class=\"billingheader ms-1 mt-6\">Credit Transactions</div>\n <div class=\"card-toolbar ms-auto\">\n <div class=\"d-flex\">\n <div class=\"d-flex align-items-center position-relative my-1\">\n <span class=\"svg-icon invoicesearch svg-icon-1 position-absolute search-ic-center ms-3\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\n </rect>\n <path\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\n fill=\"currentColor\"></path>\n </svg>\n </span>\n <input [(ngModel)]=\"len\" type=\"text\" class=\"form-control ps-14 invoicesearch\"\n placeholder=\"Search...\" autocomplete=\"off\" (change)=\"searchField()\"\n [disabled]=\"searchDisabled\" />\n <lib-filters *ngIf=\"invoiceplans === 'invoice'\" [dataObject]=\"invoiceFilterObject\" (appliedFilters)=\"applyInvoiceFilters($event)\"></lib-filters>\n\n <!-- <div class=\"me-3 monthwidth\">\n <div class=\"dropdown invheader\">\n <select class=\"form-select invheader\" aria-label=\"Default select example\"\n [(ngModel)]=\"isFilter\" (change)=\"invoiceFilter()\">\n <option value=\"current\">Current Month</option>\n <option value=\"prev\">Previous Month</option>\n <option value=\"last\">Last 3 Months</option>\n </select>\n </div>\n </div> -->\n\n <!-- <button (click)=\"creditnote()\" type=\"button\"\n class=\"btn-outline btn align-items-end invheader text-nowrap me-4\"\n *ngIf=\"(gs.userAccess | async)?.userType === 'tango' && (gs.userAccess | async)?.settings_paymentSubscriptions_isEdit\"\n [disabled]=\"!invoiceList.length\"><svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\n viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M10.4993 4.16675V15.8334M4.66602 10.0001H16.3327\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg><span>Credit Note</span> </button> -->\n <button type=\"button\" (click)=\"onExport()\"\n class=\"btn-outline btn align-items-end text-nowrap invheader\"\n *ngIf=\"invoiceplans === 'invoice'\"\n [disabled]=\"!invoiceList.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\n viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg><span class=\"ms-2\"></span> Export</button>\n\n\n <button type=\"button\" (click)=\"onExportTransaction()\"\n class=\"btn-outline btn align-items-end text-nowrap invheader ms-4\"\n *ngIf=\"invoiceplans === 'credittransaction'\"\n [disabled]=\"!transactionList.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg><span class=\"ms-2\"></span> Export</button>\n\n\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"invoiceplans === 'invoice'\">\n\n <!-- Bulk actions toolbar (status filter tabs removed \u2014 statuses are\n reachable via the Filter popover, matching the prototype) -->\n <div class=\"card-header paymenthistory border-0 px-0\" *ngIf=\"selectedInvoices.size > 0\">\n <div></div>\n <div class=\"card-toolbar\">\n <div class=\"d-flex\">\n <button type=\"button\" (click)=\"downloadSelected()\"\n class=\"btn btn-outline-primary btn-sm align-items-end text-nowrap invheader me-2\"\n *ngIf=\"selectedInvoices.size > 0\"\n [disabled]=\"bulkDownloading\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\n stroke=\"currentColor\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"ms-1\" *ngIf=\"!bulkDownloading\">Download Selected ({{ selectedInvoices.size }})</span>\n <span class=\"ms-1\" *ngIf=\"bulkDownloading\">Preparing ZIP...</span>\n </button>\n <button type=\"button\" (click)=\"approveSelected()\"\n class=\"btn btn-success btn-sm align-items-end text-nowrap invheader me-2\"\n *ngIf=\"selectedInvoices.size > 0\"\n [disabled]=\"bulkApproving\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M16.6667 5L7.50001 14.1667L3.33334 10\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"ms-1\" *ngIf=\"!bulkApproving\">Approve Selected ({{ selectedInvoices.size }})</span>\n <span class=\"ms-1\" *ngIf=\"bulkApproving\">Approving...</span>\n </button>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"invoiceLoading\">\n <div class=\"row loader d-flex justify-content-center align-items-center\">\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n\n </div>\n </ng-container>\n <ng-container *ngIf=\"invoiceNoData\">\n <div class=\"row\">\n <div class=\"col-lg-12 mb-3\">\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\n </div>\n </div>\n </div>\n </ng-container>\n <!-- invoice table start -->\n <div *ngIf=\"!invoiceLoading && !invoiceNoData\" class=\"table-responsive\">\n <table class=\"table accordion table bottom-border invoivetable text-nowrap\">\n <thead>\n <tr>\n <th style=\"width: 40px;\">\n <input type=\"checkbox\" [(ngModel)]=\"selectAll\" (change)=\"toggleSelectAll()\"\n class=\"form-check-input\" [disabled]=\"invoiceList.length === 0\">\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('clientName')\" >Brand Name\n <svg [ngClass]=\"sortColumName === 'clientName' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('companyName')\">Registered Name\n <svg [ngClass]=\"sortColumName === 'companyName' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'companyName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('invoice')\" >Invoice #\n <svg [ngClass]=\"sortColumName === 'invoice' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'invoice' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('billingDate')\">Billing Date\n <svg [ngClass]=\"sortColumName === 'billingDate' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'billingDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('dueDate')\">Due Status\n <svg [ngClass]=\"sortColumName === 'dueDate' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'dueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th>Group Name</th>\n <th class=\"cursor-pointer\" (click)=\"sortData('amount')\">Amount Excl. GST\n <svg [ngClass]=\"sortColumName === 'amount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'amount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('gstAmount')\">GST Amount\n <svg [ngClass]=\"sortColumName === 'gstAmount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'gstAmount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('totalAmount')\">Amount Incl. GST\n <svg [ngClass]=\"sortColumName === 'totalAmount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'totalAmount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th>Stores</th>\n <th>Payment Status</th>\n <th>Approval Status</th>\n <th scope=\"col\">Action</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let invoice of invoiceList; let i = index\">\n <td>\n <input type=\"checkbox\"\n [checked]=\"isSelected(invoice)\"\n (change)=\"toggleInvoiceSelect(invoice)\"\n class=\"form-check-input\">\n </td>\n <td>\n <div class=\"table-title table-title-primary d-flex \">\n <div class=\"symbol symbol-35px symbol-circle me-2\"><span\n class=\"symbol-label text-symbol\">\n <span *ngIf=\"!invoice?.logo\" class=\"symbol-label bg-light-primary text-symbol\">\n {{invoice?.clientName?.charAt(0)}} </span>\n <!-- (error): broken/expired logo URL falls back to the letter avatar -->\n <img *ngIf=\"invoice?.logo\" class=\"logo-img\" [src]=\"invoice?.logo\" (error)=\"invoice.logo = ''\" alt=\"\">\n </span></div>\n <div><u class=\"cursor-pointer\" (click)=\"viewBrand(invoice)\"> {{invoice?.clientName | uppercase}}</u></div>\n </div>\n </td>\n <td>\n <div class=\"table-title registered-name\">{{ invoice?.companyName || '\u2014' }}</div>\n </td>\n <td>\n <div class=\"table-title table-title-primary\">\n <a class=\"invoice-link\" (click)=\"openInvoicePreview(invoice); $event.stopPropagation()\">{{ invoice?.invoice }}</a>\n </div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.billingDate | date: 'dd MMM, yyyy' }}</div>\n </td>\n <td>\n <div class=\"table-title\" [ngClass]=\"getDueStatusClass(invoice)\">{{ getDueStatus(invoice) }}</div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.groupName }}</div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoiceCurrencySymbol(invoice) }} {{ invoice?.amount | number:amountFormat(invoice):'en-IN' }}</div>\n </td>\n <td>\n <div class=\"table-title\" *ngIf=\"isGstApplicable(invoice); else noGst\">{{ invoiceCurrencySymbol(invoice) }} {{ gstAmount(invoice) | number:amountFormat(invoice):'en-IN' }}</div>\n <ng-template #noGst><div class=\"table-title\">\u2014</div></ng-template>\n </td>\n <td>\n <div class=\"table-title\"><strong>{{ invoiceCurrencySymbol(invoice) }} {{ invoice?.totalAmount | number:amountFormat(invoice):'en-IN' }}</strong></div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.stores }} {{ invoice?.stores === 1 ? 'Store' : 'Stores' }}</div>\n </td>\n <td>\n <span [ngClass]=\"getPaymentPillClass(invoice)\">{{ getPaymentLabel(invoice) }}</span>\n <div *ngIf=\"hasPending(invoice)\" class=\"pending-note mt-1\">\n {{ invoiceCurrencySymbol(invoice) }}{{ pendingAmount(invoice) | number:'1.2-2':'en-IN' }} pending\n </div>\n </td>\n <td>\n <span [ngClass]=\"getApprovalPillClass(invoice)\" class=\"cursor-pointer\"\n title=\"View activity\"\n (click)=\"openInvoiceLogs(invoice); $event.stopPropagation()\">{{ getApprovalLabel(invoice) }}</span>\n </td>\n <td>\n <div class=\"table-title d-flex justify-content-around \">\n <!-- Edit invoice (locked when approved) -->\n <span [class.cursor-pointer]=\"!isInvoiceLocked(invoice)\"\n [class.locked-action]=\"isInvoiceLocked(invoice)\"\n (click)=\"!isInvoiceLocked(invoice) && editInvoice(invoice)\"\n [ngbTooltip]=\"isInvoiceLocked(invoice) ? 'Approved invoice \u2014 editing is disabled' : 'Edit Invoice'\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M26.5 14.5L29.5 17.5M14.5 29.5H17.5L28 19C28.3978 18.6022 28.6213 18.0663 28.6213 17.5C28.6213 16.9337 28.3978 16.3978 28 16C27.6022 15.6022 27.0663 15.3787 26.5 15.3787C25.9337 15.3787 25.3978 15.6022 25 16L14.5 26.5V29.5Z\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n\n <!-- Approve (stage-aware) -->\n <span class=\"cursor-pointer\" (click)=\"approveInvoice(invoice)\"\n [ngbTooltip]=\"getApproveTooltip(invoice)\"\n *ngIf=\"canApprove(invoice, userAccess)\">\n\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_16478_43040)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <g clip-path=\"url(#clip0_16478_43040)\">\n <path\n d=\"M30.3346 20.2335V21.0002C30.3336 22.7972 29.7517 24.5458 28.6757 25.9851C27.5998 27.4244 26.0874 28.4773 24.3641 28.9868C22.6408 29.4963 20.799 29.4351 19.1134 28.8124C17.4277 28.1896 15.9885 27.0386 15.0104 25.5311C14.0324 24.0236 13.5678 22.2403 13.686 20.4471C13.8043 18.654 14.499 16.9472 15.6665 15.5811C16.8341 14.2151 18.412 13.263 20.1648 12.867C21.9176 12.471 23.7515 12.6522 25.393 13.3835M30.3346 14.3335L22.0013 22.6752L19.5013 20.1752\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </g>\n <defs>\n <filter id=\"filter0_d_16478_43040\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_16478_43040\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_16478_43040\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_16478_43040\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(12 11)\" />\n </clipPath>\n </defs>\n </svg>\n\n </span>\n <span class=\"cursor-pointer\" *ngIf=\"invoice.status==='approved' && (gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\"> <svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\"\n fill=\"none\">\n <g filter=\"url(#filter0_d_16630_8062)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#EAECF0\" />\n <g clip-path=\"url(#clip0_16630_8062)\">\n <path\n d=\"M30.3346 20.2335V21.0002C30.3336 22.7972 29.7517 24.5458 28.6757 25.9851C27.5998 27.4244 26.0874 28.4773 24.3641 28.9868C22.6408 29.4963 20.799 29.4351 19.1134 28.8124C17.4277 28.1896 15.9885 27.0386 15.0104 25.5311C14.0324 24.0236 13.5678 22.2403 13.686 20.4471C13.8043 18.654 14.499 16.9472 15.6665 15.5811C16.8341 14.2151 18.412 13.263 20.1648 12.867C21.9176 12.471 23.7515 12.6522 25.393 13.3835M30.3346 14.3335L22.0013 22.6752L19.5013 20.1752\"\n stroke=\"#D0D5DD\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </g>\n <defs>\n <filter id=\"filter0_d_16630_8062\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_16630_8062\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_16630_8062\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_16630_8062\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(12 11)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\" class=\"cursor-pointer\" (click)=\"regenerateInvoice(invoice)\"><svg width=\"44\"\n height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" />\n <g filter=\"url(#filter0_d_15530_60395)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path\n d=\"M31.1654 14.3333V19.3333M31.1654 19.3333H26.1654M31.1654 19.3333L27.2987 15.7C26.4031 14.8039 25.2951 14.1493 24.078 13.7973C22.861 13.4453 21.5746 13.4073 20.3389 13.6869C19.1033 13.9665 17.9585 14.5545 17.0116 15.3962C16.0646 16.2378 15.3463 17.3056 14.9237 18.5M12.832 27.6666V22.6666M12.832 22.6666H17.832M12.832 22.6666L16.6987 26.3C17.5943 27.1961 18.7023 27.8506 19.9194 28.2027C21.1364 28.5547 22.4228 28.5927 23.6585 28.3131C24.8941 28.0335 26.0389 27.4455 26.9858 26.6038C27.9328 25.7621 28.6511 24.6943 29.0737 23.5\"\n stroke=\"#344054\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_15530_60395\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_15530_60395\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_15530_60395\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit && invoice?.status === 'approved' && invoice?.paymentStatus !== 'paid'\" class=\"cursor-pointer\" (click)=\"paymentstatusChange(invoice)\" >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\n <!-- Border Rectangle -->\n <rect x=\"2.5\" y=\"2.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" fill=\"none\" />\n \n <!-- Background Rectangle -->\n <rect x=\"2.5\" y=\"2.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" fill=\"white\" />\n \n <!-- Inner Icon -->\n <g transform=\"translate(13, 11)\"> <!-- Adjusted position for centering -->\n <path d=\"M2.9987 8.00065V6.33398C2.9987 5.0079 3.52548 3.73613 4.46316 2.79845C5.40085 1.86077 6.67262 1.33398 7.9987 1.33398C9.32478 1.33398 10.5966 1.86077 11.5342 2.79845C12.4719 3.73613 12.9987 5.0079 12.9987 6.33398V8.00065M1.33203 13.0007C1.33203 13.4427 1.50763 13.8666 1.82019 14.1792C2.13275 14.4917 2.55667 14.6673 2.9987 14.6673C3.44073 14.6673 3.86465 14.4917 4.17721 14.1792C4.48977 13.8666 4.66536 13.4427 4.66536 13.0007C4.66536 12.5586 4.48977 12.1347 4.17721 11.8221C3.86465 11.5096 3.44073 11.334 2.9987 11.334C2.55667 11.334 2.13275 11.5096 1.82019 11.8221C1.50763 12.1347 1.33203 12.5586 1.33203 13.0007ZM11.332 13.0007C11.332 13.4427 11.5076 13.8666 11.8202 14.1792C12.1327 14.4917 12.5567 14.6673 12.9987 14.6673C13.4407 14.6673 13.8646 14.4917 14.1772 14.1792C14.4898 13.8666 14.6654 13.4427 14.6654 13.0007C14.6654 12.5586 14.4898 12.1347 14.1772 11.8221C13.8646 11.5096 13.4407 11.334 12.9987 11.334C12.5567 11.334 12.1327 11.5096 11.8202 11.8221C11.5076 12.1347 11.332 12.5586 11.332 13.0007Z\" stroke=\"#667085\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M10.5 5.5L13 8L15.5 5.5\" stroke=\"#667085\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n </svg>\n \n \n </span>\n <!-- (click)=\"downloadInvoice(invoice)\" -->\n <span (click)=\"downloadInvoice(invoice)\" class=\"cursor-pointer\"><svg width=\"44\"\n height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" />\n <g filter=\"url(#filter0_d_15530_60396)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\n stroke=\"#344054\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_15530_60396\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_15530_60396\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_15530_60396\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n\n <!-- Cancel invoice (approved + unpaid only) \u2014 replaces the disabled\n delete slot for cancellable rows. -->\n <span *ngIf=\"canCancelInvoice(invoice)\" class=\"cursor-pointer\"\n (click)=\"cancelInvoice(invoice)\"\n ngbTooltip=\"Cancel Invoice\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M28.5 15.5L15.5 28.5M15.5 15.5L28.5 28.5\" stroke=\"#D92D20\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n\n <!-- Delete invoice (locked when approved/cancelled) -->\n <span *ngIf=\"!canCancelInvoice(invoice)\" [class.cursor-pointer]=\"!isInvoiceLocked(invoice)\"\n [class.locked-action]=\"isInvoiceLocked(invoice)\"\n (click)=\"!isInvoiceLocked(invoice) && deleteInvoice(invoice)\"\n [ngbTooltip]=\"isInvoiceLocked(invoice) ? 'Approved invoice \u2014 delete is disabled' : 'Delete Invoice'\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M17 21H27M15.5 17H28.5M19.5 25H24.5M16.1667 28.5H27.8333C28.7538 28.5 29.5 27.7538 29.5 26.8333V15.1667C29.5 14.2462 28.7538 13.5 27.8333 13.5H16.1667C15.2462 13.5 14.5 14.2462 14.5 15.1667V26.8333C14.5 27.7538 15.2462 28.5 16.1667 28.5Z\"\n stroke=\"#D92D20\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <div *ngIf=\"!invoiceLoading && !invoiceNoData\">\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\n </div>\n </div>\n </div>\n <div *ngIf=\"invoiceplans === 'credittransaction'\">\n <ng-container *ngIf=\"transactionLoading\">\n <div class=\"row loader d-flex justify-content-center align-items-center\">\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n \n </div>\n </ng-container>\n <ng-container *ngIf=\"transactionNoData\">\n <div class=\"row\">\n <div class=\"col-lg-12 mb-3\">\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\n </div>\n </div>\n </div>\n </ng-container>\n \n <div class=\"table-responsive\" *ngIf=\"!transactionLoading && !transactionNoData\">\n <table class=\"table accordion table bottom-border \">\n <thead>\n <tr>\n <th class=\"cursor-pointer\" (click)=\"sortDataTrans('clientName')\" >Client Name\n <svg [ngClass]=\"sortColumNametran === 'clientName' && sortBytran === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumNametran === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th> \n <th class=\"cursor-pointer\" (click)=\"sortDataTrans('credit')\" >Balance Credits\n <svg [ngClass]=\"sortColumNametran === 'credit' && sortBytran === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumNametran === 'credit' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\" scope=\"col\">Action</th>\n </tr>\n </thead>\n <tbody>\n <ng-container>\n <tr *ngFor=\"let transaction of transactionList; let i = index\">\n <td>\n <div class=\"table-title table-title-primary d-flex \">\n <div class=\"symbol symbol-35px symbol-circle me-2\"><span\n class=\"symbol-label text-symbol\">\n <span *ngIf=\"!transaction?.logo\"\n class=\"symbol-label bg-light-primary text-symbol\">\n {{transaction?.clientName?.charAt(0)}} </span>\n <img *ngIf=\"transaction?.logo\" class=\"logo-img\" [src]=\"transaction?.logo\"\n (error)=\"transaction.logo = ''\" alt=\"\">\n </span></div>\n <div><u> {{transaction?.clientName | uppercase}}</u>\n </div>\n </div>\n \n </td>\n \n <td>\n <div class=\"table-title\">\n <span *ngIf=\"transaction?.currencyType === 'inr'\">\u20B9</span>\n <span *ngIf=\"transaction?.currencyType === 'dollar'\">$</span>\n {{transaction?.credit | number:'1.0-2':'en-IN'}}\n </div>\n </td>\n <td *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\">\n <div class=\"table-title position-relative\">\n <div class=\"position-relative cursor-pointer\" (click)=\"toggleDropdown(i)\">\n <div class=\"ms-5\">\n <span class=\"justify-content-end cursor-pointer\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_16522_57254)\">\n <path\n d=\"M19.9987 22.5006C21.3794 22.5006 22.4987 21.3814 22.4987 20.0007C22.4987 18.6199 21.3794 17.5007 19.9987 17.5007C18.618 17.5007 17.4987 18.6199 17.4987 20.0007C17.4987 21.3814 18.618 22.5006 19.9987 22.5006Z\"\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M26.1654 22.5006C26.0544 22.752 26.0213 23.0308 26.0704 23.3011C26.1194 23.5715 26.2482 23.8209 26.4404 24.0173L26.4904 24.0673C26.6453 24.2221 26.7683 24.4059 26.8521 24.6082C26.936 24.8106 26.9792 25.0275 26.9792 25.2465C26.9792 25.4655 26.936 25.6824 26.8521 25.8847C26.7683 26.087 26.6453 26.2709 26.4904 26.4256C26.3356 26.5806 26.1518 26.7035 25.9494 26.7874C25.7471 26.8713 25.5302 26.9145 25.3112 26.9145C25.0922 26.9145 24.8753 26.8713 24.673 26.7874C24.4706 26.7035 24.2868 26.5806 24.132 26.4256L24.082 26.3756C23.8856 26.1835 23.6362 26.0547 23.3659 26.0056C23.0955 25.9566 22.8167 25.9897 22.5654 26.1006C22.3189 26.2063 22.1087 26.3817 21.9606 26.6053C21.8126 26.8288 21.7331 27.0908 21.732 27.359V27.5006C21.732 27.9427 21.5564 28.3666 21.2439 28.6792C20.9313 28.9917 20.5074 29.1673 20.0654 29.1673C19.6233 29.1673 19.1994 28.9917 18.8869 28.6792C18.5743 28.3666 18.3987 27.9427 18.3987 27.5006V27.4256C18.3922 27.1498 18.303 26.8823 18.1425 26.6579C17.9819 26.4335 17.7576 26.2626 17.4987 26.1673C17.2474 26.0564 16.9685 26.0233 16.6982 26.0723C16.4279 26.1213 16.1784 26.2502 15.982 26.4423L15.932 26.4923C15.7772 26.6473 15.5934 26.7702 15.3911 26.8541C15.1888 26.938 14.9719 26.9811 14.7529 26.9811C14.5338 26.9811 14.317 26.938 14.1146 26.8541C13.9123 26.7702 13.7285 26.6473 13.5737 26.4923C13.4187 26.3375 13.2958 26.1537 13.2119 25.9514C13.1281 25.7491 13.0849 25.5322 13.0849 25.3131C13.0849 25.0941 13.1281 24.8772 13.2119 24.6749C13.2958 24.4726 13.4187 24.2888 13.5737 24.134L13.6237 24.084C13.8158 23.8876 13.9447 23.6381 13.9937 23.3678C14.0427 23.0975 14.0096 22.8187 13.8987 22.5673C13.7931 22.3208 13.6177 22.1106 13.3941 21.9626C13.1705 21.8145 12.9085 21.7351 12.6404 21.734H12.4987C12.0567 21.734 11.6327 21.5584 11.3202 21.2458C11.0076 20.9333 10.832 20.5093 10.832 20.0673C10.832 19.6253 11.0076 19.2014 11.3202 18.8888C11.6327 18.5762 12.0567 18.4007 12.4987 18.4007H12.5737C12.8495 18.3942 13.117 18.3049 13.3414 18.1444C13.5659 17.9839 13.7368 17.7596 13.832 17.5007C13.943 17.2493 13.9761 16.9705 13.927 16.7002C13.878 16.4298 13.7491 16.1804 13.557 15.984L13.507 15.934C13.3521 15.7792 13.2291 15.5954 13.1453 15.3931C13.0614 15.1907 13.0182 14.9738 13.0182 14.7548C13.0182 14.5358 13.0614 14.3189 13.1453 14.1166C13.2291 13.9143 13.3521 13.7304 13.507 13.5757C13.6618 13.4207 13.8456 13.2978 14.048 13.2139C14.2503 13.13 14.4672 13.0868 14.6862 13.0868C14.9052 13.0868 15.1221 13.13 15.3244 13.2139C15.5268 13.2978 15.7106 13.4207 15.8654 13.5757L15.9154 13.6257C16.1118 13.8178 16.3612 13.9466 16.6315 13.9957C16.9019 14.0447 17.1807 14.0116 17.432 13.9007H17.4987C17.7452 13.795 17.9554 13.6196 18.1034 13.396C18.2515 13.1725 18.331 12.9105 18.332 12.6423V12.5007C18.332 12.0586 18.5076 11.6347 18.8202 11.3221C19.1327 11.0096 19.5567 10.834 19.9987 10.834C20.4407 10.834 20.8646 11.0096 21.1772 11.3221C21.4898 11.6347 21.6654 12.0586 21.6654 12.5007V12.5757C21.6664 12.8438 21.7459 13.1058 21.894 13.3294C22.042 13.5529 22.2522 13.7283 22.4987 13.834C22.75 13.9449 23.0289 13.978 23.2992 13.929C23.5695 13.88 23.819 13.7511 24.0154 13.559L24.0654 13.509C24.2202 13.354 24.404 13.2311 24.6063 13.1472C24.8086 13.0633 25.0255 13.0202 25.2445 13.0202C25.4636 13.0202 25.6804 13.0633 25.8828 13.1472C26.0851 13.2311 26.2689 13.354 26.4237 13.509C26.5787 13.6638 26.7016 13.8476 26.7855 14.0499C26.8693 14.2522 26.9125 14.4691 26.9125 14.6882C26.9125 14.9072 26.8693 15.1241 26.7855 15.3264C26.7016 15.5287 26.5787 15.7125 26.4237 15.8673L26.3737 15.9173C26.1816 16.1137 26.0527 16.3632 26.0037 16.6335C25.9547 16.9038 25.9878 17.1826 26.0987 17.434V17.5007C26.2043 17.7471 26.3797 17.9573 26.6033 18.1054C26.8269 18.2535 27.0889 18.3329 27.357 18.334H27.4987C27.9407 18.334 28.3646 18.5096 28.6772 18.8221C28.9898 19.1347 29.1654 19.5586 29.1654 20.0007C29.1654 20.4427 28.9898 20.8666 28.6772 21.1792C28.3646 21.4917 27.9407 21.6673 27.4987 21.6673H27.4237C27.1555 21.6684 26.8936 21.7478 26.67 21.8959C26.4464 22.044 26.271 22.2542 26.1654 22.5006Z\"\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_16522_57254\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(10 10)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <div class=\"dropdown-menu position-absolute mt-2 bg-white shadow rounded\"\n [ngClass]=\"{'d-block': openDropdownIndex === i, 'd-none': openDropdownIndex !== i}\">\n <div class=\"dropdown-item\" *ngFor=\"let option of options\"\n (click)=\"selectOption(option,transaction?.clientId)\">\n {{ option.label }}\n </div>\n </div>\n </div>\n </div>\n </td>\n </tr>\n </ng-container>\n \n </tbody>\n </table>\n <div *ngIf=\"!transactionLoading && !transactionNoData\">\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPagetran\" [currentPage]=\"currenttranPage\"\n [totalItems]=\"transactionItems\" [paginationSizes]=\"paginationSizestran\" [pageSize]=\"pagetransSize\"\n (pageChange)=\"onPageChangetran($event)\" (pageSizeChange)=\"onPageSizeChangeTran($event)\"></lib-pagination>\n </div>\n \n \n \n </div>\n </div>\n</div>\n<!-- invoice table end -->\n<!-- invoice table start -->\n\n\n<!-- invoice table end -->", styles: ["@charset \"UTF-8\";.paymenthistory{padding:0px 1.25rem!important}.invoice{width:120%}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.activePlanBtnprimary{border-radius:6px;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Primary-700, #009BF3);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.activePlanBtn{border-radius:6px;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.rotate{rotate:180deg;transition:1s}.invoicesearch{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;height:100%}.invoicesearch::placeholder{color:var(--Gray-700, #344054)!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.invheader{color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.invoivetable{overflow-x:scroll!important;overflow-y:scroll!important;width:110%!important}.viewdetails{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF);background:var(--Primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;color:var(--Primary-700, #009BF3);padding:10px 16px;justify-content:center;align-items:center;gap:10px;font-size:12px;font-style:normal;font-weight:600;line-height:18px;text-transform:capitalize}.invoicesubtab{background:var(--Gray-50, #F9FAFB)}.form-control{display:block;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px;border:none!important}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.monthwidth{width:70%}.update{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px}.debitvalue{color:var(--Error-500, #F04438);font-size:14px;font-weight:500;line-height:20px}.creditvalue{color:var(--Success-500, #12B76A);font-size:14px;font-weight:500;line-height:20px}.table-title{line-height:3!important}.product-traffic{color:var(--Blue-700, #175CD3);text-align:center;font-family:Inter;font-size:12px;font-weight:500;border-radius:16px;background:var(--Blue-50, #EFF8FF)}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important;line-height:3!important}.text-symbol{color:var(--primary-600, #00A3FF)}.symbol-label{font-family:Inter;font-size:16px;font-weight:500;line-height:24px;letter-spacing:0em;text-align:center}.dropdown-menu{display:none;background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;right:0;top:100%;width:65%!important;left:5%!important}.dropdown-item{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:25px}.table-title .show{display:block}.producttext{color:#333;text-align:left;cursor:pointer;padding:10px}.producttext:hover{background:#f5f5f5}.logo-img{border-radius:50%;width:100%;height:100%;object-fit:cover}.billingheader{color:var(--Gray-900, #101828);font-size:18px;font-style:normal;font-weight:600;line-height:28px}.locked-action{opacity:.4;cursor:not-allowed}.pending-note{color:#b54708;font-size:11px;font-weight:600}.invoice-link{color:#00a3ff;cursor:pointer;text-decoration:none}.invoice-link:hover{text-decoration:underline}.invoice-card{border:1px solid #E4E7EC;border-radius:12px;padding:18px 22px;background:#fff;transition:box-shadow .15s}.invoice-type-toggle{display:inline-flex;gap:4px;padding:4px;background:#f2f4f7;border-radius:10px}.invoice-type-btn{border:0;background:transparent;color:#475467;font-size:13.5px;font-weight:600;padding:7px 16px;border-radius:7px;cursor:pointer;transition:background .15s,color .15s}.invoice-type-btn:hover{color:#101828}.invoice-type-btn.active{background:#fff;color:#00a3ff;box-shadow:0 1px 2px #10182814}.invoice-card-label{display:flex;align-items:center;gap:6px;color:#475467;font-size:13.5px;font-weight:500}.invoice-card-label .info-ic{color:#c4c9d2;cursor:help;vertical-align:middle}.invoice-card-value{font-size:22px;font-weight:700;color:#101828;margin-top:6px;letter-spacing:-.3px}.invoice-card-value.text-danger{color:#d64545}.invoice-card-value.text-warning{color:#b9740a}.invoice-card-split{display:flex;gap:28px;margin-top:8px;flex-wrap:wrap}.invoice-card-split-item{display:flex;flex-direction:column;gap:2px}.invoice-card-split-item .invoice-card-value{font-size:19px;margin-top:0}.invoice-card-split-label{color:#98a2b3;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.invoice-card-sub{color:#98a2b3;font-size:12.5px;margin-top:4px}.pill{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}.pill-green{background:#e7f7ee;color:#138a52}.pill-amber{background:#fdf0dc;color:#b9740a}.due-overdue{color:#d64545;font-weight:600}.due-today{color:#b9740a;font-weight:600}.due-upcoming{color:#475467;font-weight:600}.due-muted{color:#98a2b3}.registered-name{max-width:180px;white-space:normal;line-height:1.35}.svg-icon.search-ic-center.position-absolute{top:50%!important;transform:translateY(-50%);margin-top:0!important;height:auto!important;display:flex;align-items:center}\n"] }]
|
|
1146
|
+
args: [{ selector: 'lib-tango-manage-billing', template: "<div>\n <!-- <div *ngIf=\"invoicetransaction\" class=\"mt-4 paymenthistory\">\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3 me-2\"\n [ngClass]=\"invoiceplans === 'invoice' ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\n data-kt-plan=\"invoice\" (click)=\"selectInvoicePlan('invoice')\">\n Invoice\n </button>\n\n <button class=\"btn btn-color-gray-600 btn-active btn-active-secondary px-6 py-3\"\n [ngClass]=\"invoiceplans === 'credittransaction' ? 'activePlanBtnprimary' : 'inactivePlanBtn'\"\n data-kt-plan=\"credittransaction\" (click)=\"selectInvoicePlan('credittransaction')\">\n Credit Transactions\n </button>\n </div> -->\n <!-- Header summary cards \u2014 Outstanding / Overdue / Pending Payment.\n Totals are scoped to the user's full client access, NOT the current\n filter/search/page, so they stay stable as the user narrows the list. -->\n <!-- Sub-toggle: regular invoices vs advance (TINV-*) invoices. -->\n <div *ngIf=\"invoiceplans === 'invoice'\" class=\"invoice-type-toggle mt-3 mx-2\">\n <button type=\"button\"\n [ngClass]=\"invoiceType === 'all' ? 'invoice-type-btn active' : 'invoice-type-btn'\"\n (click)=\"selectInvoiceType('all')\">All Invoices</button>\n <button type=\"button\"\n [ngClass]=\"invoiceType === 'advance' ? 'invoice-type-btn active' : 'invoice-type-btn'\"\n (click)=\"selectInvoiceType('advance')\">Advance Invoice</button>\n </div>\n <div *ngIf=\"invoiceplans === 'invoice'\" class=\"row g-3 mt-3 mb-2 mx-2\">\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Outstanding\n <svg class=\"info-ic\" ngbTooltip=\"Total unpaid balance across all invoices in the current view (dollar invoices converted to \u20B9).\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value\">\u20B9{{ invoiceCards.outstandingExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value\">\u20B9{{ invoiceCards.outstandingInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.outstandingCount }} {{ invoiceCards.outstandingCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Overdue\n <svg class=\"info-ic\" ngbTooltip=\"Unpaid invoices whose due date has already passed.\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value text-danger\">\u20B9{{ invoiceCards.overdueExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value text-danger\">\u20B9{{ invoiceCards.overdueInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.overdueCount }} {{ invoiceCards.overdueCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"invoice-card\">\n <div class=\"invoice-card-label\">\n Pending Payment\n <svg class=\"info-ic\" ngbTooltip=\"Approved invoices that are still awaiting payment.\" placement=\"top\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8h.01\"/></svg>\n </div>\n <div class=\"invoice-card-split\">\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Excl. GST</span>\n <span class=\"invoice-card-value text-warning\">\u20B9{{ invoiceCards.pendingPaymentExclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n <div class=\"invoice-card-split-item\">\n <span class=\"invoice-card-split-label\">Incl. GST</span>\n <span class=\"invoice-card-value text-warning\">\u20B9{{ invoiceCards.pendingPaymentInclAmount | number:'1.2-2':'en-IN' }}</span>\n </div>\n </div>\n <div class=\"invoice-card-sub\">{{ invoiceCards.pendingPaymentCount }} {{ invoiceCards.pendingPaymentCount === 1 ? 'invoice' : 'invoices' }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"card-header paymenthistory border-0\">\n <div *ngIf=\"invoiceplans === 'credittransaction'\" class=\"billingheader ms-1 mt-6\">Credit Transactions</div>\n <div class=\"card-toolbar ms-auto\">\n <div class=\"d-flex\">\n <div class=\"d-flex align-items-center position-relative my-1\">\n <span class=\"svg-icon invoicesearch svg-icon-1 position-absolute search-ic-center ms-3\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\n </rect>\n <path\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\n fill=\"currentColor\"></path>\n </svg>\n </span>\n <input [(ngModel)]=\"len\" type=\"text\" class=\"form-control ps-14 invoicesearch\"\n placeholder=\"Search...\" autocomplete=\"off\" (change)=\"searchField()\"\n [disabled]=\"searchDisabled\" />\n <lib-filters *ngIf=\"invoiceplans === 'invoice'\" [dataObject]=\"invoiceFilterObject\" (appliedFilters)=\"applyInvoiceFilters($event)\"></lib-filters>\n\n <!-- <div class=\"me-3 monthwidth\">\n <div class=\"dropdown invheader\">\n <select class=\"form-select invheader\" aria-label=\"Default select example\"\n [(ngModel)]=\"isFilter\" (change)=\"invoiceFilter()\">\n <option value=\"current\">Current Month</option>\n <option value=\"prev\">Previous Month</option>\n <option value=\"last\">Last 3 Months</option>\n </select>\n </div>\n </div> -->\n\n <!-- <button (click)=\"creditnote()\" type=\"button\"\n class=\"btn-outline btn align-items-end invheader text-nowrap me-4\"\n *ngIf=\"(gs.userAccess | async)?.userType === 'tango' && (gs.userAccess | async)?.settings_paymentSubscriptions_isEdit\"\n [disabled]=\"!invoiceList.length\"><svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\n viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M10.4993 4.16675V15.8334M4.66602 10.0001H16.3327\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg><span>Credit Note</span> </button> -->\n <button type=\"button\" (click)=\"onExport()\"\n class=\"btn-outline btn align-items-end text-nowrap invheader\"\n *ngIf=\"invoiceplans === 'invoice'\"\n [disabled]=\"!invoiceList.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\n viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg><span class=\"ms-2\"></span> Export</button>\n\n\n <button type=\"button\" (click)=\"onExportTransaction()\"\n class=\"btn-outline btn align-items-end text-nowrap invheader ms-4\"\n *ngIf=\"invoiceplans === 'credittransaction'\"\n [disabled]=\"!transactionList.length\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg><span class=\"ms-2\"></span> Export</button>\n\n\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"invoiceplans === 'invoice'\">\n\n <!-- Bulk actions toolbar (status filter tabs removed \u2014 statuses are\n reachable via the Filter popover, matching the prototype) -->\n <div class=\"card-header paymenthistory border-0 px-0\" *ngIf=\"selectedInvoices.size > 0\">\n <div></div>\n <div class=\"card-toolbar\">\n <div class=\"d-flex\">\n <button type=\"button\" (click)=\"downloadSelected()\"\n class=\"btn btn-outline-primary btn-sm align-items-end text-nowrap invheader me-2\"\n *ngIf=\"selectedInvoices.size > 0\"\n [disabled]=\"bulkDownloading\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\n stroke=\"currentColor\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"ms-1\" *ngIf=\"!bulkDownloading\">Download Selected ({{ selectedInvoices.size }})</span>\n <span class=\"ms-1\" *ngIf=\"bulkDownloading\">Preparing ZIP...</span>\n </button>\n <button type=\"button\" (click)=\"approveSelected()\"\n class=\"btn btn-success btn-sm align-items-end text-nowrap invheader me-2\"\n *ngIf=\"selectedInvoices.size > 0\"\n [disabled]=\"bulkApproving\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M16.6667 5L7.50001 14.1667L3.33334 10\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"ms-1\" *ngIf=\"!bulkApproving\">Approve Selected ({{ selectedInvoices.size }})</span>\n <span class=\"ms-1\" *ngIf=\"bulkApproving\">Approving...</span>\n </button>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"invoiceLoading\">\n <div class=\"row loader d-flex justify-content-center align-items-center\">\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n\n </div>\n </ng-container>\n <ng-container *ngIf=\"invoiceNoData\">\n <div class=\"row\">\n <div class=\"col-lg-12 mb-3\">\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\n </div>\n </div>\n </div>\n </ng-container>\n <!-- invoice table start -->\n <div *ngIf=\"!invoiceLoading && !invoiceNoData\" class=\"table-responsive\">\n <table class=\"table accordion table bottom-border invoivetable text-nowrap\">\n <thead>\n <tr>\n <th style=\"width: 40px;\">\n <input type=\"checkbox\" [(ngModel)]=\"selectAll\" (change)=\"toggleSelectAll()\"\n class=\"form-check-input\" [disabled]=\"invoiceList.length === 0\">\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('clientName')\" >Brand Name\n <svg [ngClass]=\"sortColumName === 'clientName' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('companyName')\">Registered Name\n <svg [ngClass]=\"sortColumName === 'companyName' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'companyName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('invoice')\" >Invoice #\n <svg [ngClass]=\"sortColumName === 'invoice' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'invoice' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('billingDate')\">Billing Date\n <svg [ngClass]=\"sortColumName === 'billingDate' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'billingDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('dueDate')\">Due Status\n <svg [ngClass]=\"sortColumName === 'dueDate' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'dueDate' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th>Group Name</th>\n <th class=\"cursor-pointer\" (click)=\"sortData('amount')\">Amount Excl. GST\n <svg [ngClass]=\"sortColumName === 'amount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'amount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('gstAmount')\">GST Amount\n <svg [ngClass]=\"sortColumName === 'gstAmount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'gstAmount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th class=\"cursor-pointer\" (click)=\"sortData('totalAmount')\">Amount Incl. GST\n <svg [ngClass]=\"sortColumName === 'totalAmount' && sortBy === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumName === 'totalAmount' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th>Stores</th>\n <th>Payment Status</th>\n <th>Approval Status</th>\n <th scope=\"col\">Action</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let invoice of invoiceList; let i = index\">\n <td>\n <input type=\"checkbox\"\n [checked]=\"isSelected(invoice)\"\n (change)=\"toggleInvoiceSelect(invoice)\"\n class=\"form-check-input\">\n </td>\n <td>\n <div class=\"table-title table-title-primary d-flex \">\n <div class=\"symbol symbol-35px symbol-circle me-2\"><span\n class=\"symbol-label text-symbol\">\n <span *ngIf=\"!invoice?.logo\" class=\"symbol-label bg-light-primary text-symbol\">\n {{invoice?.clientName?.charAt(0)}} </span>\n <!-- (error): broken/expired logo URL falls back to the letter avatar -->\n <img *ngIf=\"invoice?.logo\" class=\"logo-img\" [src]=\"invoice?.logo\" (error)=\"invoice.logo = ''\" alt=\"\">\n </span></div>\n <div><u class=\"cursor-pointer\" (click)=\"viewBrand(invoice)\"> {{invoice?.clientName | uppercase}}</u></div>\n </div>\n </td>\n <td>\n <div class=\"table-title registered-name\">{{ invoice?.companyName || '\u2014' }}</div>\n </td>\n <td>\n <div class=\"table-title table-title-primary\">\n <a class=\"invoice-link\" (click)=\"openInvoicePreview(invoice); $event.stopPropagation()\">{{ invoice?.invoice }}</a>\n </div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.billingDate | date: 'dd MMM, yyyy' }}</div>\n </td>\n <td>\n <div class=\"table-title\" [ngClass]=\"getDueStatusClass(invoice)\">{{ getDueStatus(invoice) }}</div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.groupName }}</div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoiceCurrencySymbol(invoice) }} {{ invoice?.amount | number:amountFormat(invoice):'en-IN' }}</div>\n </td>\n <td>\n <div class=\"table-title\" *ngIf=\"isGstApplicable(invoice); else noGst\">{{ invoiceCurrencySymbol(invoice) }} {{ gstAmount(invoice) | number:amountFormat(invoice):'en-IN' }}</div>\n <ng-template #noGst><div class=\"table-title\">\u2014</div></ng-template>\n </td>\n <td>\n <div class=\"table-title\"><strong>{{ invoiceCurrencySymbol(invoice) }} {{ invoice?.totalAmount | number:amountFormat(invoice):'en-IN' }}</strong></div>\n </td>\n <td>\n <div class=\"table-title\">{{ invoice?.stores }} {{ invoice?.stores === 1 ? 'Store' : 'Stores' }}</div>\n </td>\n <td>\n <span [ngClass]=\"getPaymentPillClass(invoice)\">{{ getPaymentLabel(invoice) }}</span>\n <div *ngIf=\"hasPending(invoice)\" class=\"pending-note mt-1\">\n {{ invoiceCurrencySymbol(invoice) }}{{ pendingAmount(invoice) | number:'1.2-2':'en-IN' }} pending\n </div>\n </td>\n <td>\n <span [ngClass]=\"getApprovalPillClass(invoice)\" class=\"cursor-pointer\"\n title=\"View activity\"\n (click)=\"openInvoiceLogs(invoice); $event.stopPropagation()\">{{ getApprovalLabel(invoice) }}</span>\n </td>\n <td>\n <div class=\"table-title d-flex justify-content-around \">\n <!-- Edit invoice (locked when approved) -->\n <span [class.cursor-pointer]=\"!isInvoiceLocked(invoice)\"\n [class.locked-action]=\"isInvoiceLocked(invoice)\"\n (click)=\"!isInvoiceLocked(invoice) && editInvoice(invoice)\"\n [ngbTooltip]=\"isInvoiceLocked(invoice) ? 'Approved invoice \u2014 editing is disabled' : 'Edit Invoice'\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M26.5 14.5L29.5 17.5M14.5 29.5H17.5L28 19C28.3978 18.6022 28.6213 18.0663 28.6213 17.5C28.6213 16.9337 28.3978 16.3978 28 16C27.6022 15.6022 27.0663 15.3787 26.5 15.3787C25.9337 15.3787 25.3978 15.6022 25 16L14.5 26.5V29.5Z\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n\n <!-- Approve (stage-aware) -->\n <span class=\"cursor-pointer\" (click)=\"approveInvoice(invoice)\"\n [ngbTooltip]=\"getApproveTooltip(invoice)\"\n *ngIf=\"canApprove(invoice, userAccess)\">\n\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g filter=\"url(#filter0_d_16478_43040)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <g clip-path=\"url(#clip0_16478_43040)\">\n <path\n d=\"M30.3346 20.2335V21.0002C30.3336 22.7972 29.7517 24.5458 28.6757 25.9851C27.5998 27.4244 26.0874 28.4773 24.3641 28.9868C22.6408 29.4963 20.799 29.4351 19.1134 28.8124C17.4277 28.1896 15.9885 27.0386 15.0104 25.5311C14.0324 24.0236 13.5678 22.2403 13.686 20.4471C13.8043 18.654 14.499 16.9472 15.6665 15.5811C16.8341 14.2151 18.412 13.263 20.1648 12.867C21.9176 12.471 23.7515 12.6522 25.393 13.3835M30.3346 14.3335L22.0013 22.6752L19.5013 20.1752\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </g>\n <defs>\n <filter id=\"filter0_d_16478_43040\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_16478_43040\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_16478_43040\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_16478_43040\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(12 11)\" />\n </clipPath>\n </defs>\n </svg>\n\n </span>\n <span class=\"cursor-pointer\" *ngIf=\"invoice.status==='approved' && (gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\"> <svg\n xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\"\n fill=\"none\">\n <g filter=\"url(#filter0_d_16630_8062)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#EAECF0\" />\n <g clip-path=\"url(#clip0_16630_8062)\">\n <path\n d=\"M30.3346 20.2335V21.0002C30.3336 22.7972 29.7517 24.5458 28.6757 25.9851C27.5998 27.4244 26.0874 28.4773 24.3641 28.9868C22.6408 29.4963 20.799 29.4351 19.1134 28.8124C17.4277 28.1896 15.9885 27.0386 15.0104 25.5311C14.0324 24.0236 13.5678 22.2403 13.686 20.4471C13.8043 18.654 14.499 16.9472 15.6665 15.5811C16.8341 14.2151 18.412 13.263 20.1648 12.867C21.9176 12.471 23.7515 12.6522 25.393 13.3835M30.3346 14.3335L22.0013 22.6752L19.5013 20.1752\"\n stroke=\"#D0D5DD\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n </g>\n <defs>\n <filter id=\"filter0_d_16630_8062\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_16630_8062\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_16630_8062\" result=\"shape\" />\n </filter>\n <clipPath id=\"clip0_16630_8062\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(12 11)\" />\n </clipPath>\n </defs>\n </svg></span>\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\" class=\"cursor-pointer\" (click)=\"regenerateInvoice(invoice)\"><svg width=\"44\"\n height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" />\n <g filter=\"url(#filter0_d_15530_60395)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path\n d=\"M31.1654 14.3333V19.3333M31.1654 19.3333H26.1654M31.1654 19.3333L27.2987 15.7C26.4031 14.8039 25.2951 14.1493 24.078 13.7973C22.861 13.4453 21.5746 13.4073 20.3389 13.6869C19.1033 13.9665 17.9585 14.5545 17.0116 15.3962C16.0646 16.2378 15.3463 17.3056 14.9237 18.5M12.832 27.6666V22.6666M12.832 22.6666H17.832M12.832 22.6666L16.6987 26.3C17.5943 27.1961 18.7023 27.8506 19.9194 28.2027C21.1364 28.5547 22.4228 28.5927 23.6585 28.3131C24.8941 28.0335 26.0389 27.4455 26.9858 26.6038C27.9328 25.7621 28.6511 24.6943 29.0737 23.5\"\n stroke=\"#344054\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_15530_60395\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_15530_60395\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_15530_60395\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n <span *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit && invoice?.status === 'approved' && invoice?.paymentStatus !== 'paid'\" class=\"cursor-pointer\" (click)=\"paymentstatusChange(invoice)\" >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\">\n <!-- Border Rectangle -->\n <rect x=\"2.5\" y=\"2.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" fill=\"none\" />\n \n <!-- Background Rectangle -->\n <rect x=\"2.5\" y=\"2.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" fill=\"white\" />\n \n <!-- Inner Icon -->\n <g transform=\"translate(13, 11)\"> <!-- Adjusted position for centering -->\n <path d=\"M2.9987 8.00065V6.33398C2.9987 5.0079 3.52548 3.73613 4.46316 2.79845C5.40085 1.86077 6.67262 1.33398 7.9987 1.33398C9.32478 1.33398 10.5966 1.86077 11.5342 2.79845C12.4719 3.73613 12.9987 5.0079 12.9987 6.33398V8.00065M1.33203 13.0007C1.33203 13.4427 1.50763 13.8666 1.82019 14.1792C2.13275 14.4917 2.55667 14.6673 2.9987 14.6673C3.44073 14.6673 3.86465 14.4917 4.17721 14.1792C4.48977 13.8666 4.66536 13.4427 4.66536 13.0007C4.66536 12.5586 4.48977 12.1347 4.17721 11.8221C3.86465 11.5096 3.44073 11.334 2.9987 11.334C2.55667 11.334 2.13275 11.5096 1.82019 11.8221C1.50763 12.1347 1.33203 12.5586 1.33203 13.0007ZM11.332 13.0007C11.332 13.4427 11.5076 13.8666 11.8202 14.1792C12.1327 14.4917 12.5567 14.6673 12.9987 14.6673C13.4407 14.6673 13.8646 14.4917 14.1772 14.1792C14.4898 13.8666 14.6654 13.4427 14.6654 13.0007C14.6654 12.5586 14.4898 12.1347 14.1772 11.8221C13.8646 11.5096 13.4407 11.334 12.9987 11.334C12.5567 11.334 12.1327 11.5096 11.8202 11.8221C11.5076 12.1347 11.332 12.5586 11.332 13.0007Z\" stroke=\"#667085\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M10.5 5.5L13 8L15.5 5.5\" stroke=\"#667085\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n </svg>\n \n \n </span>\n <!-- (click)=\"downloadInvoice(invoice)\" -->\n <span (click)=\"downloadInvoice(invoice)\" class=\"cursor-pointer\"><svg width=\"44\"\n height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#33B5FF\" />\n <g filter=\"url(#filter0_d_15530_60396)\">\n <rect x=\"2\" y=\"1\" width=\"40\" height=\"40\" rx=\"8\" fill=\"white\" />\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" stroke=\"#D0D5DD\" />\n <path\n d=\"M29.5 23.5V26.8333C29.5 27.2754 29.3244 27.6993 29.0118 28.0118C28.6993 28.3244 28.2754 28.5 27.8333 28.5H16.1667C15.7246 28.5 15.3007 28.3244 14.9882 28.0118C14.6756 27.6993 14.5 27.2754 14.5 26.8333V23.5M17.8333 19.3333L22 23.5M22 23.5L26.1667 19.3333M22 23.5V13.5\"\n stroke=\"#344054\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <filter id=\"filter0_d_15530_60396\" x=\"0\" y=\"0\" width=\"44\" height=\"44\"\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\" />\n <feOffset dy=\"1\" />\n <feGaussianBlur stdDeviation=\"1\" />\n <feColorMatrix type=\"matrix\"\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_15530_60396\" />\n <feBlend mode=\"normal\" in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_15530_60396\" result=\"shape\" />\n </filter>\n </defs>\n </svg>\n </span>\n\n <!-- Cancel invoice (approved + unpaid only) \u2014 replaces the disabled\n delete slot for cancellable rows. -->\n <span *ngIf=\"canCancelInvoice(invoice)\" class=\"cursor-pointer\"\n (click)=\"cancelInvoice(invoice)\"\n ngbTooltip=\"Cancel Invoice\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M28.5 15.5L15.5 28.5M15.5 15.5L28.5 28.5\" stroke=\"#D92D20\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n\n <!-- Delete invoice \u2014 HIDDEN (not disabled) once it no longer\n applies: cancellable rows show Cancel instead, and\n locked (approved/cancelled) rows show neither. -->\n <span *ngIf=\"!canCancelInvoice(invoice) && !isInvoiceLocked(invoice)\" class=\"cursor-pointer\"\n (click)=\"deleteInvoice(invoice)\"\n ngbTooltip=\"Delete Invoice\">\n <svg width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2.5\" y=\"1.5\" width=\"39\" height=\"39\" rx=\"7.5\" fill=\"white\" stroke=\"#D0D5DD\"/>\n <path d=\"M17 21H27M15.5 17H28.5M19.5 25H24.5M16.1667 28.5H27.8333C28.7538 28.5 29.5 27.7538 29.5 26.8333V15.1667C29.5 14.2462 28.7538 13.5 27.8333 13.5H16.1667C15.2462 13.5 14.5 14.2462 14.5 15.1667V26.8333C14.5 27.7538 15.2462 28.5 16.1667 28.5Z\"\n stroke=\"#D92D20\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n </span>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <div *ngIf=\"!invoiceLoading && !invoiceNoData\">\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\n </div>\n </div>\n </div>\n <div *ngIf=\"invoiceplans === 'credittransaction'\">\n <ng-container *ngIf=\"transactionLoading\">\n <div class=\"row loader d-flex justify-content-center align-items-center\">\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n <div class=\"shimmer\">\n <div class=\"wrapper\">\n <div class=\"stroke animate title\"></div>\n <div class=\"stroke animate link\"></div>\n <div class=\"stroke animate description\"></div>\n </div>\n </div>\n \n </div>\n </ng-container>\n <ng-container *ngIf=\"transactionNoData\">\n <div class=\"row\">\n <div class=\"col-lg-12 mb-3\">\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\n <img class=\"img-src w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\n </div>\n </div>\n </div>\n </ng-container>\n \n <div class=\"table-responsive\" *ngIf=\"!transactionLoading && !transactionNoData\">\n <table class=\"table accordion table bottom-border \">\n <thead>\n <tr>\n <th class=\"cursor-pointer\" (click)=\"sortDataTrans('clientName')\" >Client Name\n <svg [ngClass]=\"sortColumNametran === 'clientName' && sortBytran === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumNametran === 'clientName' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th> \n <th class=\"cursor-pointer\" (click)=\"sortDataTrans('credit')\" >Balance Credits\n <svg [ngClass]=\"sortColumNametran === 'credit' && sortBytran === 1 ? 'rotate' : ''\" xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\n [attr.stroke]=\"sortColumNametran === 'credit' ? '#00A3FF' : '#667085'\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </th>\n <th *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\" scope=\"col\">Action</th>\n </tr>\n </thead>\n <tbody>\n <ng-container>\n <tr *ngFor=\"let transaction of transactionList; let i = index\">\n <td>\n <div class=\"table-title table-title-primary d-flex \">\n <div class=\"symbol symbol-35px symbol-circle me-2\"><span\n class=\"symbol-label text-symbol\">\n <span *ngIf=\"!transaction?.logo\"\n class=\"symbol-label bg-light-primary text-symbol\">\n {{transaction?.clientName?.charAt(0)}} </span>\n <img *ngIf=\"transaction?.logo\" class=\"logo-img\" [src]=\"transaction?.logo\"\n (error)=\"transaction.logo = ''\" alt=\"\">\n </span></div>\n <div><u> {{transaction?.clientName | uppercase}}</u>\n </div>\n </div>\n \n </td>\n \n <td>\n <div class=\"table-title\">\n <span *ngIf=\"transaction?.currencyType === 'inr'\">\u20B9</span>\n <span *ngIf=\"transaction?.currencyType === 'dollar'\">$</span>\n {{transaction?.credit | number:'1.0-2':'en-IN'}}\n </div>\n </td>\n <td *ngIf=\"(gs.userAccess | async)?.TangoAdmin_invoiceApproval_isEdit\">\n <div class=\"table-title position-relative\">\n <div class=\"position-relative cursor-pointer\" (click)=\"toggleDropdown(i)\">\n <div class=\"ms-5\">\n <span class=\"justify-content-end cursor-pointer\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_16522_57254)\">\n <path\n d=\"M19.9987 22.5006C21.3794 22.5006 22.4987 21.3814 22.4987 20.0007C22.4987 18.6199 21.3794 17.5007 19.9987 17.5007C18.618 17.5007 17.4987 18.6199 17.4987 20.0007C17.4987 21.3814 18.618 22.5006 19.9987 22.5006Z\"\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M26.1654 22.5006C26.0544 22.752 26.0213 23.0308 26.0704 23.3011C26.1194 23.5715 26.2482 23.8209 26.4404 24.0173L26.4904 24.0673C26.6453 24.2221 26.7683 24.4059 26.8521 24.6082C26.936 24.8106 26.9792 25.0275 26.9792 25.2465C26.9792 25.4655 26.936 25.6824 26.8521 25.8847C26.7683 26.087 26.6453 26.2709 26.4904 26.4256C26.3356 26.5806 26.1518 26.7035 25.9494 26.7874C25.7471 26.8713 25.5302 26.9145 25.3112 26.9145C25.0922 26.9145 24.8753 26.8713 24.673 26.7874C24.4706 26.7035 24.2868 26.5806 24.132 26.4256L24.082 26.3756C23.8856 26.1835 23.6362 26.0547 23.3659 26.0056C23.0955 25.9566 22.8167 25.9897 22.5654 26.1006C22.3189 26.2063 22.1087 26.3817 21.9606 26.6053C21.8126 26.8288 21.7331 27.0908 21.732 27.359V27.5006C21.732 27.9427 21.5564 28.3666 21.2439 28.6792C20.9313 28.9917 20.5074 29.1673 20.0654 29.1673C19.6233 29.1673 19.1994 28.9917 18.8869 28.6792C18.5743 28.3666 18.3987 27.9427 18.3987 27.5006V27.4256C18.3922 27.1498 18.303 26.8823 18.1425 26.6579C17.9819 26.4335 17.7576 26.2626 17.4987 26.1673C17.2474 26.0564 16.9685 26.0233 16.6982 26.0723C16.4279 26.1213 16.1784 26.2502 15.982 26.4423L15.932 26.4923C15.7772 26.6473 15.5934 26.7702 15.3911 26.8541C15.1888 26.938 14.9719 26.9811 14.7529 26.9811C14.5338 26.9811 14.317 26.938 14.1146 26.8541C13.9123 26.7702 13.7285 26.6473 13.5737 26.4923C13.4187 26.3375 13.2958 26.1537 13.2119 25.9514C13.1281 25.7491 13.0849 25.5322 13.0849 25.3131C13.0849 25.0941 13.1281 24.8772 13.2119 24.6749C13.2958 24.4726 13.4187 24.2888 13.5737 24.134L13.6237 24.084C13.8158 23.8876 13.9447 23.6381 13.9937 23.3678C14.0427 23.0975 14.0096 22.8187 13.8987 22.5673C13.7931 22.3208 13.6177 22.1106 13.3941 21.9626C13.1705 21.8145 12.9085 21.7351 12.6404 21.734H12.4987C12.0567 21.734 11.6327 21.5584 11.3202 21.2458C11.0076 20.9333 10.832 20.5093 10.832 20.0673C10.832 19.6253 11.0076 19.2014 11.3202 18.8888C11.6327 18.5762 12.0567 18.4007 12.4987 18.4007H12.5737C12.8495 18.3942 13.117 18.3049 13.3414 18.1444C13.5659 17.9839 13.7368 17.7596 13.832 17.5007C13.943 17.2493 13.9761 16.9705 13.927 16.7002C13.878 16.4298 13.7491 16.1804 13.557 15.984L13.507 15.934C13.3521 15.7792 13.2291 15.5954 13.1453 15.3931C13.0614 15.1907 13.0182 14.9738 13.0182 14.7548C13.0182 14.5358 13.0614 14.3189 13.1453 14.1166C13.2291 13.9143 13.3521 13.7304 13.507 13.5757C13.6618 13.4207 13.8456 13.2978 14.048 13.2139C14.2503 13.13 14.4672 13.0868 14.6862 13.0868C14.9052 13.0868 15.1221 13.13 15.3244 13.2139C15.5268 13.2978 15.7106 13.4207 15.8654 13.5757L15.9154 13.6257C16.1118 13.8178 16.3612 13.9466 16.6315 13.9957C16.9019 14.0447 17.1807 14.0116 17.432 13.9007H17.4987C17.7452 13.795 17.9554 13.6196 18.1034 13.396C18.2515 13.1725 18.331 12.9105 18.332 12.6423V12.5007C18.332 12.0586 18.5076 11.6347 18.8202 11.3221C19.1327 11.0096 19.5567 10.834 19.9987 10.834C20.4407 10.834 20.8646 11.0096 21.1772 11.3221C21.4898 11.6347 21.6654 12.0586 21.6654 12.5007V12.5757C21.6664 12.8438 21.7459 13.1058 21.894 13.3294C22.042 13.5529 22.2522 13.7283 22.4987 13.834C22.75 13.9449 23.0289 13.978 23.2992 13.929C23.5695 13.88 23.819 13.7511 24.0154 13.559L24.0654 13.509C24.2202 13.354 24.404 13.2311 24.6063 13.1472C24.8086 13.0633 25.0255 13.0202 25.2445 13.0202C25.4636 13.0202 25.6804 13.0633 25.8828 13.1472C26.0851 13.2311 26.2689 13.354 26.4237 13.509C26.5787 13.6638 26.7016 13.8476 26.7855 14.0499C26.8693 14.2522 26.9125 14.4691 26.9125 14.6882C26.9125 14.9072 26.8693 15.1241 26.7855 15.3264C26.7016 15.5287 26.5787 15.7125 26.4237 15.8673L26.3737 15.9173C26.1816 16.1137 26.0527 16.3632 26.0037 16.6335C25.9547 16.9038 25.9878 17.1826 26.0987 17.434V17.5007C26.2043 17.7471 26.3797 17.9573 26.6033 18.1054C26.8269 18.2535 27.0889 18.3329 27.357 18.334H27.4987C27.9407 18.334 28.3646 18.5096 28.6772 18.8221C28.9898 19.1347 29.1654 19.5586 29.1654 20.0007C29.1654 20.4427 28.9898 20.8666 28.6772 21.1792C28.3646 21.4917 27.9407 21.6673 27.4987 21.6673H27.4237C27.1555 21.6684 26.8936 21.7478 26.67 21.8959C26.4464 22.044 26.271 22.2542 26.1654 22.5006Z\"\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_16522_57254\">\n <rect width=\"20\" height=\"20\" fill=\"white\"\n transform=\"translate(10 10)\" />\n </clipPath>\n </defs>\n </svg>\n </span>\n </div>\n <div class=\"dropdown-menu position-absolute mt-2 bg-white shadow rounded\"\n [ngClass]=\"{'d-block': openDropdownIndex === i, 'd-none': openDropdownIndex !== i}\">\n <div class=\"dropdown-item\" *ngFor=\"let option of options\"\n (click)=\"selectOption(option,transaction?.clientId)\">\n {{ option.label }}\n </div>\n </div>\n </div>\n </div>\n </td>\n </tr>\n </ng-container>\n \n </tbody>\n </table>\n <div *ngIf=\"!transactionLoading && !transactionNoData\">\n <lib-pagination class=\"text-start\" [itemsPerPage]=\"itemsPerPagetran\" [currentPage]=\"currenttranPage\"\n [totalItems]=\"transactionItems\" [paginationSizes]=\"paginationSizestran\" [pageSize]=\"pagetransSize\"\n (pageChange)=\"onPageChangetran($event)\" (pageSizeChange)=\"onPageSizeChangeTran($event)\"></lib-pagination>\n </div>\n \n \n \n </div>\n </div>\n</div>\n<!-- invoice table end -->\n<!-- invoice table start -->\n\n\n<!-- invoice table end -->", styles: ["@charset \"UTF-8\";.paymenthistory{padding:0px 1.25rem!important}.invoice{width:120%}.inactivePlanBtn{color:var(--Gray-500, #667085)!important;font-size:14px;font-weight:500!important;line-height:20px}.activePlanBtnprimary{border-radius:6px;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Primary-700, #009BF3);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.activePlanBtn{border-radius:6px;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a!important;color:var(--Gray-700, #344054);font-size:14px!important;font-weight:500!important;line-height:20px}.rotate{rotate:180deg;transition:1s}.invoicesearch{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;height:100%}.invoicesearch::placeholder{color:var(--Gray-700, #344054)!important}.loader .title{width:65%}.loader .link{width:85%}.loader .description{width:95%}.loader .shimmer{padding:15px;width:95%;height:120px;margin:10px auto;background:#fff}.loader .shimmer .image-card{height:90px;width:90px;float:right;border-radius:8px}.loader .stroke{height:15px;background:#777;margin-top:20px}.loader .wrapper{width:0px;animation:fullView .5s forwards linear}@keyframes fullView{to{width:100%}}.loader .animate{animation:shimmer 3s;animation-iteration-count:infinite;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%}@keyframes shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.invheader{color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px;text-transform:capitalize}.invoivetable{overflow-x:scroll!important;overflow-y:scroll!important;width:110%!important}.viewdetails{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF);background:var(--Primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;color:var(--Primary-700, #009BF3);padding:10px 16px;justify-content:center;align-items:center;gap:10px;font-size:12px;font-style:normal;font-weight:600;line-height:18px;text-transform:capitalize}.invoicesubtab{background:var(--Gray-50, #F9FAFB)}.form-control{display:block;padding:.5rem 1rem;font-size:1.1rem;font-weight:400;color:var(--Gray-500, #667085);-webkit-appearance:none;appearance:none;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.outer-container{position:relative}.outer-container .form-control{padding-top:0;padding-bottom:0}.outer-container .input-container{border:1px solid black;height:100%;width:100%;display:flex;flex-wrap:wrap}.outer-container .input-container input{all:unset;flex:1;min-width:50px;border:none!important}.outer-container .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.outer-container .input-container .chip:nth-child(1){margin-left:0}.monthwidth{width:70%}.update{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:20px}.debitvalue{color:var(--Error-500, #F04438);font-size:14px;font-weight:500;line-height:20px}.creditvalue{color:var(--Success-500, #12B76A);font-size:14px;font-weight:500;line-height:20px}.table-title{line-height:3!important}.product-traffic{color:var(--Blue-700, #175CD3);text-align:center;font-family:Inter;font-size:12px;font-weight:500;border-radius:16px;background:var(--Blue-50, #EFF8FF)}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important;line-height:3!important}.text-symbol{color:var(--primary-600, #00A3FF)}.symbol-label{font-family:Inter;font-size:16px;font-weight:500;line-height:24px;letter-spacing:0em;text-align:center}.dropdown-menu{display:none;background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 10px #0000001a;right:0;top:100%;width:65%!important;left:5%!important}.dropdown-item{color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:25px}.table-title .show{display:block}.producttext{color:#333;text-align:left;cursor:pointer;padding:10px}.producttext:hover{background:#f5f5f5}.logo-img{border-radius:50%;width:100%;height:100%;object-fit:cover}.billingheader{color:var(--Gray-900, #101828);font-size:18px;font-style:normal;font-weight:600;line-height:28px}.locked-action{opacity:.4;cursor:not-allowed}.pending-note{color:#b54708;font-size:11px;font-weight:600}.invoice-link{color:#00a3ff;cursor:pointer;text-decoration:none}.invoice-link:hover{text-decoration:underline}.invoice-card{border:1px solid #E4E7EC;border-radius:12px;padding:18px 22px;background:#fff;transition:box-shadow .15s}.invoice-type-toggle{display:inline-flex;gap:4px;padding:4px;background:#f2f4f7;border-radius:10px}.invoice-type-btn{border:0;background:transparent;color:#475467;font-size:13.5px;font-weight:600;padding:7px 16px;border-radius:7px;cursor:pointer;transition:background .15s,color .15s}.invoice-type-btn:hover{color:#101828}.invoice-type-btn.active{background:#fff;color:#00a3ff;box-shadow:0 1px 2px #10182814}.invoice-card-label{display:flex;align-items:center;gap:6px;color:#475467;font-size:13.5px;font-weight:500}.invoice-card-label .info-ic{color:#c4c9d2;cursor:help;vertical-align:middle}.invoice-card-value{font-size:22px;font-weight:700;color:#101828;margin-top:6px;letter-spacing:-.3px}.invoice-card-value.text-danger{color:#d64545}.invoice-card-value.text-warning{color:#b9740a}.invoice-card-split{display:flex;gap:28px;margin-top:8px;flex-wrap:wrap}.invoice-card-split-item{display:flex;flex-direction:column;gap:2px}.invoice-card-split-item .invoice-card-value{font-size:19px;margin-top:0}.invoice-card-split-label{color:#98a2b3;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.invoice-card-sub{color:#98a2b3;font-size:12.5px;margin-top:4px}.pill{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600;white-space:nowrap}.pill-green{background:#e7f7ee;color:#138a52}.pill-amber{background:#fdf0dc;color:#b9740a}.due-overdue{color:#d64545;font-weight:600}.due-today{color:#b9740a;font-weight:600}.due-upcoming{color:#475467;font-weight:600}.due-muted{color:#98a2b3}.registered-name{max-width:180px;white-space:normal;line-height:1.35}.svg-icon.search-ic-center.position-absolute{top:50%!important;transform:translateY(-50%);margin-top:0!important;height:auto!important;display:flex;align-items:center}\n"] }]
|
|
1145
1147
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.BillingService }, { type: i0.ChangeDetectorRef }, { type: i3.ToastService }, { type: i4.Router }, { type: i5.GlobalStateService }, { type: i0.ElementRef }, { type: i6.NgbModal }, { type: i5.PageInfoService }], propDecorators: { clickout: [{
|
|
1146
1148
|
type: HostListener,
|
|
1147
1149
|
args: ['document:click', ['$event']]
|
|
1148
1150
|
}] } });
|
|
1149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tbWFuYWdlLWJpbGxpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3RhbmdvLW1hbmFnZS1iaWxsaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2UtYmlsbGluZy90YW5nby1tYW5hZ2UtYmlsbGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDckcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFekYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDckcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENB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U0FDL0I7SUFDSCxDQUFDO3dHQTdsQ1UsMkJBQTJCOzRGQUEzQiwyQkFBMkIsK0hDMUJ4Qyw4NDBEQTZxQjBCOzs0RkRucEJiLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSwwQkFBMEI7NFNBNmxDcEMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuLy8gaW1wb3J0IHsgUGF5bm93Q29tcG9uZW50IH0gZnJvbSAnLi9wYXlub3cvcGF5bm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEJpbGxpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmlsbGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IENyZWRpdE5vdGVDb21wb25lbnQgfSBmcm9tICcuL2NyZWRpdC1ub3RlL2NyZWRpdC1ub3RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPbmVUaW1lRmVlQ29tcG9uZW50IH0gZnJvbSAnLi9vbmUtdGltZS1mZWUvb25lLXRpbWUtZmVlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXF1ZXN0Q29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9yZXF1ZXN0LWNvbmZpcm1hdGlvbi9yZXF1ZXN0LWNvbmZpcm1hdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVnZXJhdGVJbnZvaWNlQ29tcG9uZW50IH0gZnJvbSAnLi9yZWdlcmF0ZS1pbnZvaWNlL3JlZ2VyYXRlLWludm9pY2UuY29tcG9uZW50JztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBQYXltZW50U3RhdHVzY2hhbmdlQ29tcG9uZW50IH0gZnJvbSAnLi9wYXltZW50LXN0YXR1c2NoYW5nZS9wYXltZW50LXN0YXR1c2NoYW5nZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWRpdEludm9pY2VDb21wb25lbnQgfSBmcm9tICcuL2VkaXQtaW52b2ljZS9lZGl0LWludm9pY2UuY29tcG9uZW50JztcbmltcG9ydCB7IERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vZGVsZXRlLWNvbmZpcm1hdGlvbi9kZWxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYW5jZWxJbnZvaWNlQ29tcG9uZW50IH0gZnJvbSAnLi9jYW5jZWwtaW52b2ljZS9jYW5jZWwtaW52b2ljZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW52b2ljZUxvZ3NDb21wb25lbnQgfSBmcm9tICcuL2ludm9pY2UtbG9ncy9pbnZvaWNlLWxvZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IEludm9pY2VQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vaW52b2ljZS1wcmV2aWV3L2ludm9pY2UtcHJldmlldy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGFuZ28tbWFuYWdlLWJpbGxpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFuZ28tbWFuYWdlLWJpbGxpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGFuZ28tbWFuYWdlLWJpbGxpbmcuY29tcG9uZW50LnNjc3MnXG59KVxuXG5leHBvcnQgY2xhc3MgVGFuZ29NYW5hZ2VCaWxsaW5nQ29tcG9uZW50IHtcbiAgaW52b2ljZXRyYW5zYWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgaW52b2ljZXBsYW5zOiBzdHJpbmcgPSAnaW52b2ljZSc7XG4gIGxlbjogYW55O1xuICBzZWFyY2hEaXNhYmxlZDogYW55ID0gZmFsc2U7XG4gIHBhZ2VTaXplID0gMTA7XG4gIGN1cnJlbnRQYWdlID0gMTtcbiAgY3VycmVudHRyYW5QYWdlID0gMTtcbiAgcGFnZXRyYW5zU2l6ZT0xMDtcbiAgRHVyYXRpb25GaWx0ZXIgPSAnY3VycmVudCc7XG4gIHBheW1lbnRGaWx0ZXI6IGFueSA9IFtdO1xuICBBcHByb3ZhbEZpbHRlcjogYW55ID0gW107XG4gIC8vIEFsbCBJbnZvaWNlcyBzdWItdG9nZ2xlOiAnYWxsJyA9IHJlZ3VsYXIgSU5WLSogaW52b2ljZXMsICdhZHZhbmNlJyA9IFRJTlYtKlxuICAvLyBhZHZhbmNlIGludm9pY2VzLiBTZW50IHRvIHRoZSBiYWNrZW5kIGFzIGludm9pY2VUeXBlOyB0aGUgbGlzdCwgY291bnQgYW5kXG4gIC8vIGNhcmRzIGFsbCBob25vciBpdC5cbiAgaW52b2ljZVR5cGU6ICdhbGwnIHwgJ2FkdmFuY2UnID0gJ2FsbCc7XG5cbiAgY2xpZW50SWQ6IHN0cmluZyA9ICcnO1xuICBzb3J0Q29sdW1OYW1lOiBzdHJpbmcgPSBcImNsaWVudE5hbWVcIjtcbiAgc29ydEJ5OiBudW1iZXIgPSAtMTtcbiAgZHluYW1pY0RhdGE6IGFueSA9IHtcbiAgICBsaW1pdDogMTAsXG4gICAgb2Zmc2V0OiAxLFxuICAgIGNsaWVudElkOiBcIlwiLFxuICAgIHNlYXJjaFZhbHVlOiBcIlwiLFxuICAgIHNvcnRDb2x1bW46ICcnLFxuICAgIHNvcnRCeTogJycsXG4gICAgcHJvZHVjdDogW10sXG4gICAgc3RvcmU6IFtdLFxuICAgIGxvY2F0aW9uOiBbXVxuICB9XG4gIHVzZXJUeXBlOiBhbnkgPSAnJztcbiAgaW52b2ljZUxpc3Q6IGFueSA9IFtdO1xuICBpbnZvaWNlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XG4gIGludm9pY2VOb0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdHJhbnNhY3Rpb25Ob0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdHJhbnNhY3Rpb25Mb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcblxuICB0b3RhbEl0ZW1zID0gMDtcbiAgLy8gSGVhZGVyIGNhcmQgdG90YWxzIHNob3duIGFib3ZlIHRoZSBBbGwgSW52b2ljZXMgdGFibGUuIFN0YWJsZSBhY3Jvc3NcbiAgLy8gZmlsdGVyL3NlYXJjaC9wYWdlIGNoYW5nZXMgYmVjYXVzZSB0aGUgYmFja2VuZCBjb21wdXRlcyB0aGVtIG92ZXIgdGhlXG4gIC8vIHVzZXIncyBmdWxsIGNsaWVudCBzY29wZSwgbm90IHRoZSBjdXJyZW50bHktcGFnZWQgcXVlcnkuXG4gIGludm9pY2VDYXJkcyA9IHtcbiAgICBvdXRzdGFuZGluZ0Ftb3VudDogMCwgb3V0c3RhbmRpbmdFeGNsQW1vdW50OiAwLCBvdXRzdGFuZGluZ0luY2xBbW91bnQ6IDAsIG91dHN0YW5kaW5nQ291bnQ6IDAsXG4gICAgb3ZlcmR1ZUFtb3VudDogMCwgb3ZlcmR1ZUV4Y2xBbW91bnQ6IDAsIG92ZXJkdWVJbmNsQW1vdW50OiAwLCBvdmVyZHVlQ291bnQ6IDAsXG4gICAgcGVuZGluZ1BheW1lbnRBbW91bnQ6IDAsIHBlbmRpbmdQYXltZW50RXhjbEFtb3VudDogMCwgcGVuZGluZ1BheW1lbnRJbmNsQW1vdW50OiAwLCBwZW5kaW5nUGF5bWVudENvdW50OiAwLFxuICB9O1xuICBjbGllbnRpbmZvOiBhbnk7XG4gIGl0ZW1zUGVyUGFnZSA9IDEwO1xuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMCwgNTAsIDEwMCwgNTAwXTtcbiAgaXRlbXNQZXJQYWdldHJhbiA9IDEwO1xuICBwYWdpbmF0aW9uU2l6ZXN0cmFuID0gWzEwLCAyMCwgMzAsIDUwLCAxMDAsIDUwMF07XG4gIGV4cGFuZGVkUm93SW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcm9kdWN0dHJhaWxkcm9wRG93bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIG9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZyB9W10gPSBbXG4gICAgeyBsYWJlbDogJ0NyZWRpdCBOb3RlJyB9LFxuICAgIHsgbGFiZWw6ICdBZGQgb25lIHRpbWUgZmVlJyB9XG4gIF07XG4gIGlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gIGRyb3Bkb3duSWQ6IG51bWJlcjtcbiAgYWN0aXZlRHJvcGRvd25JZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHBheW1lbnRTdGF0dXM6IHN0cmluZztcbiAgaW52b2ljZTogeyBwYXltZW50U3RhdHVzOiBzdHJpbmcgfSA9IHsgcGF5bWVudFN0YXR1czogJ3VucGFpZCcgfTtcbiAgb3BlbkRyb3Bkb3duSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICB0cmFuc2FjdGlvbkxpc3Q6IGFueTtcbiAgdHJhbnNhY3Rpb25JdGVtczogYW55O1xuICBzb3J0Q29sdW1OYW1ldHJhbjogYW55ID0gJ2NsaWVudE5hbWUnO1xuICBzb3J0Qnl0cmFuOiBhbnkgPSAxO1xuXG4gIGludm9pY2VGaWx0ZXJPYmplY3QgPSBbXG4gICAgeyBEZXNjcmlwdGlvbjogJ0R1cmF0aW9uJywgdHlwZTogJ3NpbmdsZScsIElzc3VlczogW3sgaWQ6ICdjdXJyZW50JywgdGV4dDogXCJDdXJyZW50IE1vbnRoXCIgfSwgeyBpZDogJ3ByZXYnLCB0ZXh0OiBcIlByZXZpb3VzIE1vbnRoXCIgfSwgeyBpZDogJ2xhc3QzJywgdGV4dDogXCJMYXN0IDMgTW9udGhzXCIgfSwgeyBpZDogJ2xhc3Q2JywgdGV4dDogXCJMYXN0IDYgTW9udGhzXCIgfSwgeyBpZDogJ2xhc3QxMicsIHRleHQ6IFwiTGFzdCAxIFllYXJcIiB9XSB9LFxuICAgIHsgRGVzY3JpcHRpb246ICdQYXltZW50IFN0YXR1cycsIHR5cGU6ICdtdWx0aScsIElzc3VlczogW3sgaWQ6ICdwYWlkJywgdGV4dDogXCJQYWlkXCIgfSwgeyBpZDogJ3VucGFpZCcsIHRleHQ6IFwiVW5wYWlkXCIgfV0gfSxcbiAgICAvLyBBcHByb3ZhbCBTdGF0dXMgcmVzdG9yZWQg4oCUIHRoZSBxdWljayBmaWx0ZXIgdGFicyBhYm92ZSB0aGUgdGFibGUgd2VyZVxuICAgIC8vIHJlbW92ZWQgKHByb3RvdHlwZSBwYXJpdHkpLCBzbyB0aGUgcG9wb3ZlciBpcyBub3cgdGhlIG9ubHkgd2F5IHRvXG4gICAgLy8gbmFycm93IGJ5IGFwcHJvdmFsIHN0YWdlLlxuICAgIHsgRGVzY3JpcHRpb246ICdBcHByb3ZhbCBTdGF0dXMnLCB0eXBlOiAnbXVsdGknLCBJc3N1ZXM6IFtcbiAgICAgIHsgaWQ6ICdwZW5kaW5nQ3NtJywgdGV4dDogJ1BlbmRpbmcgQ1NNJyB9LFxuICAgICAgeyBpZDogJ3BlbmRpbmdGaW5hbmNlJywgdGV4dDogJ1BlbmRpbmcgRmluYW5jZScgfSxcbiAgICAgIHsgaWQ6ICdwZW5kaW5nQXBwcm92YWwnLCB0ZXh0OiAnUGVuZGluZyBBcHByb3ZhbCcgfSxcbiAgICAgIHsgaWQ6ICdhcHByb3ZlZCcsIHRleHQ6ICdBcHByb3ZlZCcgfSxcbiAgICAgIHsgaWQ6ICdjYW5jZWxsZWQnLCB0ZXh0OiAnQ2FuY2VsbGVkJyB9LFxuICAgIF0gfSxcbiAgICB7IERlc2NyaXB0aW9uOiAnTW9udGgnLCB0eXBlOiAnc2luZ2xlJywgSXNzdWVzOiBbXG4gICAgICB7IGlkOiAnMScsIHRleHQ6ICdKYW51YXJ5JyB9LCB7IGlkOiAnMicsIHRleHQ6ICdGZWJydWFyeScgfSwgeyBpZDogJzMnLCB0ZXh0OiAnTWFyY2gnIH0sXG4gICAgICB7IGlkOiAnNCcsIHRleHQ6ICdBcHJpbCcgfSwgeyBpZDogJzUnLCB0ZXh0OiAnTWF5JyB9LCB7IGlkOiAnNicsIHRleHQ6ICdKdW5lJyB9LFxuICAgICAgeyBpZDogJzcnLCB0ZXh0OiAnSnVseScgfSwgeyBpZDogJzgnLCB0ZXh0OiAnQXVndXN0JyB9LCB7IGlkOiAnOScsIHRleHQ6ICdTZXB0ZW1iZXInIH0sXG4gICAgICB7IGlkOiAnMTAnLCB0ZXh0OiAnT2N0b2JlcicgfSwgeyBpZDogJzExJywgdGV4dDogJ05vdmVtYmVyJyB9LCB7IGlkOiAnMTInLCB0ZXh0OiAnRGVjZW1iZXInIH1cbiAgICBdIH0sXG4gICAgeyBEZXNjcmlwdGlvbjogJ1llYXInLCB0eXBlOiAnc2luZ2xlJywgSXNzdWVzOiAoKCkgPT4ge1xuICAgICAgLy8gQ3VycmVudCB5ZWFyIMKxNSDigJQga2VlcCBpbiBzeW5jIHdpdGggYnJhbmQtaW52b2ljZXMgZm9yIHBhcml0eS5cbiAgICAgIC8vIFVzaW5nIGEgZml4ZWQgc2VlZCB0byBhdm9pZCBTU1IvdGVzdCBtaXNtYXRjaGVzIGlzbid0IG5lZWRlZCBoZXJlXG4gICAgICAvLyBzaW5jZSB0aGlzIGxpc3QgaXMgcmVnZW5lcmF0ZWQgb24gZWFjaCBicm93c2VyIGxvYWQuXG4gICAgICBjb25zdCBjdXJyZW50WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IHllYXJzOiB7IGlkOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9W10gPSBbXTtcbiAgICAgIGZvciAobGV0IHkgPSBjdXJyZW50WWVhciArIDE7IHkgPj0gY3VycmVudFllYXIgLSA1OyB5LS0pIHtcbiAgICAgICAgeWVhcnMucHVzaCh7IGlkOiBTdHJpbmcoeSksIHRleHQ6IFN0cmluZyh5KSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB5ZWFycztcbiAgICB9KSgpIH0sXG4gIF07XG5cbiAgLy8gTW9udGggLyBZZWFyIHBpY2tlciBzdGF0ZSAocGFyc2VkIGZyb20gYXBwbHlJbnZvaWNlRmlsdGVycyBpbnRvIHRoZXNlXG4gIC8vIGZpZWxkcywgdGhlbiBzZW50IHRvIHRoZSBiYWNrZW5kIGluIGludm9pY2VUYWJsZURhdGEoKSkuXG4gIG1vbnRoRmlsdGVyOiBzdHJpbmcgPSAnJztcbiAgeWVhckZpbHRlcjogc3RyaW5nID0gJyc7XG5cbiAgLy8gPT09PT0gUG9ydGVkIGZyb20gYnJhbmQtaW52b2ljZXM6IGZpbHRlciB0YWJzLCBzZWxlY3Rpb24sIGJ1bGsgYWN0aW9ucyA9PT09PVxuICAvLyBRdWljayBmaWx0ZXIgdGFicyBzaG93biBhYm92ZSB0aGUgdGFibGUg4oCUIHNhbWUgc2V0IGFzIHRoZSBwZXItYnJhbmQgdmlldy5cbiAgZmlsdGVyVGFicyA9IFsnQWxsJywgJ1BlbmRpbmcgQXBwcm92YWwnLCAnUGVuZGluZyBQYXltZW50JywgJ1BhaWQnLCAnQ2FuY2VsbGVkJ107XG4gIGFjdGl2ZUZpbHRlcjogc3RyaW5nID0gJ0FsbCc7XG5cbiAgLy8gQ2FjaGVkIGZsYXQgdXNlci1hY2Nlc3Mgb2JqZWN0IHNvIHN5bmNocm9ub3VzIGdhdGVzIChjYW5BcHByb3ZlLFxuICAvLyBwZW5kaW5nSW5TZWxlY3Rpb24pIGNhbiBydW4gd2l0aG91dCBhd2FpdGluZyB0aGUgb2JzZXJ2YWJsZS5cbiAgdXNlckFjY2VzczogYW55ID0ge307XG5cbiAgLy8gTXVsdGktc2VsZWN0ICsgYnVsayBhY3Rpb24gc3RhdGUuXG4gIHNlbGVjdGVkSW52b2ljZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBzZWxlY3RBbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYnVsa0FwcHJvdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBidWxrRG93bmxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBEaXNwbGF5IGhlbHBlcnMg4oCUIG1pcnJvciB1dGlscy9jdXJyZW5jeS5qcyBzbyB0aGUgdGFibGUgc2hvd3MgdGhlIHNhbWVcbiAgLy8gc3ltYm9sIHRoZSBQREYgd2lsbCByZW5kZXIuIEZhbGxiYWNrICckJyBmb3IgdW5rbm93biBjb2Rlcy5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW5jeVN5bWJvbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgaW5yOiAn4oK5JywgZG9sbGFyOiAnJCcsIHNpbmdhcG9yZWRvbGxhcjogJ1MkJywgZXVybzogJ+KCrCcsXG4gICAgYWVkOiAnQUVEJyxcbiAgfTtcblxuICAvLyBQaXBlbGluZSBsYWJlbCBtYXBzICsgbmV4dC1zdGFnZSB0cmFuc2l0aW9ucywgdXNlZCBieSB0aGUgYXBwcm92ZSBhY3Rpb25cbiAgLy8gY29uZmlybWF0aW9uIHBvcHVwIChmcm9tIOKGkiB0byBicmVha2Rvd24pLlxuICBwcml2YXRlIHJlYWRvbmx5IHN0YWdlTGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHBlbmRpbmdDc206ICdQZW5kaW5nIENTTScsXG4gICAgcGVuZGluZ0ZpbmFuY2U6ICdQZW5kaW5nIEZpbmFuY2UnLFxuICAgIHBlbmRpbmdBcHByb3ZhbDogJ1BlbmRpbmcgQXBwcm92YWwnLFxuICAgIGFwcHJvdmVkOiAnQXBwcm92ZWQnLFxuICB9O1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWdlTmV4dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBwZW5kaW5nQ3NtOiAncGVuZGluZ0ZpbmFuY2UnLFxuICAgIHBlbmRpbmdGaW5hbmNlOiAncGVuZGluZ0FwcHJvdmFsJyxcbiAgICBwZW5kaW5nQXBwcm92YWw6ICdhcHByb3ZlZCcsXG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgQmlsbGluZ1NlcnZpY2U6IEJpbGxpbmdTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLHByaXZhdGUgcm91dGVyOlJvdXRlciwgcHVibGljIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHVibGljIG1vZGFsU2VydmljZTogTmdiTW9kYWwscHJpdmF0ZSBwYWdlSW5mbzpQYWdlSW5mb1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5CaWxsaW5nU2VydmljZS5wYXltZW50aW52b2ljZUZvcm1EYXRhLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBpZiAocmVzLnR5cGUgPT09ICdpbnB1dCcgJiYgcmVzLmZvcm0gPT09ICdwYXltZW50LWludm9pY2UnKSB7XG4gICAgICAgICAgLy8gdGhpcy5nZXRwYXltZW50aW52b2ljZShyZXMudmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIC8vIENhY2hlIHVzZXItYWNjZXNzIHNvIHN5bmNocm9ub3VzIGNvZGUgKGNhbkFwcHJvdmUsIHBlbmRpbmdJblNlbGVjdGlvbixcbiAgICAvLyBidWxrIGZpbHRlcnMpIGNhbiBnYXRlIHdpdGhvdXQgYW4gYXN5bmMgcGlwZS5cbiAgICB0aGlzLmdzLnVzZXJBY2Nlc3MucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoYWNjZXNzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudXNlckFjY2VzcyA9IGFjY2VzcyB8fCB7fTtcbiAgICB9KTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFBhZ2VEYXRhKClcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGEuY2xpZW50cztcbiAgICAgICAgdGhpcy5keW5hbWljRGF0YS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWRcbiAgICAgICAgdGhpcy5ncy51c2VyQWNjZXNzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJUeXBlID0gZGF0YS51c2VyVHlwZTtcbiAgICAgICAgICAgIGlmIChkYXRhPy51c2VyVHlwZSA9PSAndGFuZ28nKSB7XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Mb2FkaW5nID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKTtcbiAgICAgICAgICAgICAgdGhpcy5jcmVkaXRUcmFuc2FjdGlvbmxpc3QoKVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBzZXRQYWdlRGF0YSgpIHtcbiAgICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKCdCaWxsaW5nJylcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKCdFZGl0IGFuZCBjb25maWd1cmUgYmlsbGluZyBkZXRhaWxzJylcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcbiAgICAgIHsgdGl0bGU6ICdNYW5hZ2UnLCBwYXRoOiAnL21hbmFnZScsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IGZhbHNlIH0sXG4gICAgICB7IHRpdGxlOiAnTWFuYWdlJywgcGF0aDogJy9tYW5hZ2UnLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXG4gICAgXSlcbiAgfVxuXG5cblxuXG4gIHNlbGVjdEludm9pY2VQbGFuKGludm9pY2VwbGFuczogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnZvaWNlcGxhbnMgPSBpbnZvaWNlcGxhbnM7XG4gICAgdGhpcy5jcmVkaXRUcmFuc2FjdGlvbmxpc3QoKVxuXG4gIH1cbiAgLy8gQWxsIEludm9pY2VzIHN1Yi10b2dnbGU6IHN3aXRjaCBiZXR3ZWVuIHJlZ3VsYXIgKGFsbCkgYW5kIGFkdmFuY2UgKFRJTlYtKilcbiAgLy8gaW52b2ljZXMuIFJlc2V0cyB0byBwYWdlIDEgYW5kIHJlbG9hZHMgdGhlIGxpc3QgKyBjYXJkcy5cbiAgc2VsZWN0SW52b2ljZVR5cGUodHlwZTogJ2FsbCcgfCAnYWR2YW5jZScpIHtcbiAgICBpZiAodGhpcy5pbnZvaWNlVHlwZSA9PT0gdHlwZSkgeyByZXR1cm47IH1cbiAgICB0aGlzLmludm9pY2VUeXBlID0gdHlwZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKTtcbiAgfVxuICBpbnZvaWNlVGFibGVEYXRhKCkge1xuICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmludm9pY2VMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmludm9pY2VOb0RhdGEgPSBmYWxzZTtcbiAgICBsZXQgZmlsdGVyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgIGxpbWl0OiB0aGlzLnBhZ2VTaXplLFxuICAgICAgb2Zmc2V0OiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgZmlsdGVyOiB0aGlzLkR1cmF0aW9uRmlsdGVyLFxuICAgICAgcGF5bWVudFN0YXR1czogdGhpcy5wYXltZW50RmlsdGVyLFxuICAgICAgc3RhdHVzOiB0aGlzLkFwcHJvdmFsRmlsdGVyLFxuICAgICAgbW9udGhGaWx0ZXI6IHRoaXMubW9udGhGaWx0ZXIsXG4gICAgICB5ZWFyRmlsdGVyOiB0aGlzLnllYXJGaWx0ZXIsXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmxlbixcbiAgICAgIGV4cG9ydDogZmFsc2UsXG4gICAgICBpbnZvaWNlVHlwZTogdGhpcy5pbnZvaWNlVHlwZSxcbiAgICAgIHNvcnRDb2x1bU5hbWU6IHRoaXMuc29ydENvbHVtTmFtZSxcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0QnlcbiAgICB9XG4gICAgdGhpcy5CaWxsaW5nU2VydmljZS5pbnZvaWNlVGFibGVEYXRhKGZpbHRlcnMpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuXG4gICAgICBuZXh0OiAoZSkgPT4ge1xuXG4gICAgICAgIGlmIChlPy5kYXRhPy5jb3VudCkge1xuICAgICAgICAgIHRoaXMuaW52b2ljZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmludm9pY2VOb0RhdGEgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmludm9pY2VMaXN0ID0gZS5kYXRhPy5kYXRhXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gZS5kYXRhPy5jb3VudFxuICAgICAgICAgIC8vIENhcmRzIHBheWxvYWQgZnJvbSB0aGUgc2FtZSByZXNwb25zZSAoYWRkZWQgaW4gY2xpZW50SW52b2ljZUxpc3QpLlxuICAgICAgICAgIC8vIERlZmF1bHRzIHByZXNlcnZlIHRoZSB6ZXJvLXN0YXRlIHNoYXBlIGlmIHRoZSBBUEkgZXZlciBkcm9wcyBpdC5cbiAgICAgICAgICBjb25zdCBjYXJkcyA9IGUuZGF0YT8uY2FyZHM7XG4gICAgICAgICAgaWYgKGNhcmRzKSB7XG4gICAgICAgICAgICB0aGlzLmludm9pY2VDYXJkcyA9IHtcbiAgICAgICAgICAgICAgb3V0c3RhbmRpbmdBbW91bnQ6IGNhcmRzLm91dHN0YW5kaW5nQW1vdW50IHx8IDAsXG4gICAgICAgICAgICAgIG91dHN0YW5kaW5nRXhjbEFtb3VudDogY2FyZHMub3V0c3RhbmRpbmdFeGNsQW1vdW50IHx8IDAsXG4gICAgICAgICAgICAgIG91dHN0YW5kaW5nSW5jbEFtb3VudDogY2FyZHMub3V0c3RhbmRpbmdJbmNsQW1vdW50IHx8IDAsXG4gICAgICAgICAgICAgIG91dHN0YW5kaW5nQ291bnQ6IGNhcmRzLm91dHN0YW5kaW5nQ291bnQgfHwgMCxcbiAgICAgICAgICAgICAgb3ZlcmR1ZUFtb3VudDogY2FyZHMub3ZlcmR1ZUFtb3VudCB8fCAwLFxuICAgICAgICAgICAgICBvdmVyZHVlRXhjbEFtb3VudDogY2FyZHMub3ZlcmR1ZUV4Y2xBbW91bnQgfHwgMCxcbiAgICAgICAgICAgICAgb3ZlcmR1ZUluY2xBbW91bnQ6IGNhcmRzLm92ZXJkdWVJbmNsQW1vdW50IHx8IDAsXG4gICAgICAgICAgICAgIG92ZXJkdWVDb3VudDogY2FyZHMub3ZlcmR1ZUNvdW50IHx8IDAsXG4gICAgICAgICAgICAgIHBlbmRpbmdQYXltZW50QW1vdW50OiBjYXJkcy5wZW5kaW5nUGF5bWVudEFtb3VudCB8fCAwLFxuICAgICAgICAgICAgICBwZW5kaW5nUGF5bWVudEV4Y2xBbW91bnQ6IGNhcmRzLnBlbmRpbmdQYXltZW50RXhjbEFtb3VudCB8fCAwLFxuICAgICAgICAgICAgICBwZW5kaW5nUGF5bWVudEluY2xBbW91bnQ6IGNhcmRzLnBlbmRpbmdQYXltZW50SW5jbEFtb3VudCB8fCAwLFxuICAgICAgICAgICAgICBwZW5kaW5nUGF5bWVudENvdW50OiBjYXJkcy5wZW5kaW5nUGF5bWVudENvdW50IHx8IDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaW52b2ljZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmludm9pY2VOb0RhdGEgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aGlzLmxlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pbnZvaWNlTGlzdCA9IFtdXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMFxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH1cblxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICB0aGlzLmludm9pY2VMaXN0ID0gW11cbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMFxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgZGF0YVZhbHVlKGRhdGE6IGFueSkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2Uvc3RvcmVzXCJdKVxuICAgIGNvbnN0IGRhdGF2YWx1ZTogYW55ID0gSlNPTi5wYXJzZShcbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJ7fVwiXG4gICAgKTtcbiAgICBkYXRhdmFsdWUuY2xpZW50ID0gZGF0YS5jbGllbnRJZC50b1N0cmluZygpO1xuICAgIGRhdGF2YWx1ZS5jbGllbnROYW1lID0gZGF0YS5jbGllbnROYW1lXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcbiAgICB0aGlzLkJpbGxpbmdTZXJ2aWNlLnVwZGF0ZUNsaWVudEZpbHRlcnMoZGF0YSk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJywgSlNPTi5zdHJpbmdpZnkoZGF0YXZhbHVlKSlcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQoZGF0YXZhbHVlKVxufVxuXG4gIC8vIENsaWNraW5nIGEgYnJhbmQgbmFtZSBpbiB0aGUgQWxsIEludm9pY2VzIHRhYmxlIG9wZW5zIHRoYXQgYnJhbmQncyB2aWV3XG4gIC8vIChwZXItYnJhbmQgaW52b2ljZXMgcGFnZSkuIE1pcnJvcnMgdGhlIEJyYW5kcyAmIEJpbGxpbmcgbGlzdCBuYXZpZ2F0aW9uLlxuICB2aWV3QnJhbmQoaW52b2ljZTogYW55KSB7XG4gICAgaWYgKCFpbnZvaWNlPy5jbGllbnRJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkYXRhdmFsdWU6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJykgfHwgJ3t9Jyk7XG4gICAgZGF0YXZhbHVlLmNsaWVudCA9IGludm9pY2UuY2xpZW50SWQudG9TdHJpbmcoKTtcbiAgICBkYXRhdmFsdWUuY2xpZW50TmFtZSA9IGludm9pY2UuY2xpZW50TmFtZTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeShkYXRhdmFsdWUpKTtcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQoZGF0YXZhbHVlKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvYmlsbGluZy9icmFuZC1pbnZvaWNlcyddKTtcbiAgfVxuXG4gIGNyZWRpdFRyYW5zYWN0aW9ubGlzdCgpIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy50cmFuc2FjdGlvbk5vRGF0YSA9IHRydWU7XG4gICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlO1xuICAgIGxldCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgbGltaXQ6IHRoaXMucGFnZXRyYW5zU2l6ZSxcbiAgICAgIG9mZnNldDogdGhpcy5jdXJyZW50dHJhblBhZ2UsXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmxlbixcbiAgICAgIGV4cG9ydDogZmFsc2UsXG4gICAgICBzb3J0Q29sdW1OYW1lOiB0aGlzLnNvcnRDb2x1bU5hbWV0cmFuLFxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeXRyYW5cbiAgICB9XG4gICAgdGhpcy5CaWxsaW5nU2VydmljZS50cmFuc2FjdGlvbkxpc3QoZmlsdGVycykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG5cbiAgICAgIG5leHQ6IChlKSA9PiB7XG5cbiAgICAgICAgaWYgKGU/LmRhdGE/LmNvdW50KSB7XG5cbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Ob0RhdGEgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTGlzdCA9IGUuZGF0YT8uZGF0YVxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25JdGVtcyA9IGUuZGF0YT8uY291bnRcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbk5vRGF0YSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMubGVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTGlzdCA9IFtdXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMFxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH1cblxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTGlzdCA9IFtdXG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDBcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIG9uRXhwb3J0KCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIGxldCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgZmlsdGVyOiB0aGlzLkR1cmF0aW9uRmlsdGVyLFxuICAgICAgcGF5bWVudFN0YXR1czogdGhpcy5wYXltZW50RmlsdGVyLFxuICAgICAgc3RhdHVzOiB0aGlzLkFwcHJvdmFsRmlsdGVyLFxuICAgICAgbW9udGhGaWx0ZXI6IHRoaXMubW9udGhGaWx0ZXIsXG4gICAgICB5ZWFyRmlsdGVyOiB0aGlzLnllYXJGaWx0ZXIsXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmxlbixcbiAgICAgIGV4cG9ydDogdHJ1ZSxcbiAgICAgIGludm9pY2VUeXBlOiB0aGlzLmludm9pY2VUeXBlLFxuICAgICAgc29ydENvbHVtTmFtZTogdGhpcy5zb3J0Q29sdW1OYW1lLFxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeVxuICAgIH1cbiAgICB0aGlzLkJpbGxpbmdTZXJ2aWNlLmludm9pY2VUYWJsZURhdGFFeHBvcnQoZmlsdGVycykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuQmlsbGluZ1NlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ2ludm9pY2UnKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdTb21ldGhpbmcgd2VudCBXcm9uZy4uJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIG9uRXhwb3J0VHJhbnNhY3Rpb24oKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBmaWx0ZXI6IHRoaXMuRHVyYXRpb25GaWx0ZXIsXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmxlbixcbiAgICAgIGV4cG9ydDogdHJ1ZVxuICAgIH1cbiAgICB0aGlzLkJpbGxpbmdTZXJ2aWNlLnRyYW5zYWN0aW9uVGFibGVFeHBvcnQoZmlsdGVycykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuQmlsbGluZ1NlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ1RyYW5zYWN0aW9uJyk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlKSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnU29tZXRoaW5nIHdlbnQgV3JvbmcuLicpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICByZWdlbmVyYXRlSW52b2ljZShkYXRhOiBhbnkpIHtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUmVnZXJhdGVJbnZvaWNlQ29tcG9uZW50LCB7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJywgc2Nyb2xsYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ1llcycpIHtcbiAgICAgICAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgIGludm9pY2VJZDogZGF0YS5pbnZvaWNlLFxuICAgICAgICAgICAgYWxsQ2xpZW50OiBmYWxzZSxcbiAgICAgICAgICAgIHJlZ2VucmF0ZTp0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UuaW52b2ljZXJlZ2VyYXRlKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoJ1RoZSBpbnZvaWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWdlbmVyYXRlZC4nKTtcbiAgICAgICAgICAgICAgdGhpcy5pbnZvaWNlVGFibGVEYXRhKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHBheW1lbnRzdGF0dXNDaGFuZ2UoZGF0YTogYW55KSB7XG4gICAgLy8gUGF5bWVudCBjYW4gb25seSBiZSByZWNvcmRlZCBvbmNlIHRoZSBpbnZvaWNlIGlzIGFwcHJvdmVkLlxuICAgIGlmIChkYXRhPy5zdGF0dXMgIT09ICdhcHByb3ZlZCcpIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnUGF5bWVudCBjYW4gYmUgcmVjb3JkZWQgb25seSBhZnRlciB0aGUgaW52b2ljZSBpcyBhcHByb3ZlZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQSBwYWlkIGludm9pY2UgaXMgbG9ja2VkIOKAlCBpdHMgcGF5bWVudCBzdGF0dXMgY2FuJ3QgYmUgY2hhbmdlZC5cbiAgICBpZiAoZGF0YT8ucGF5bWVudFN0YXR1cyA9PT0gJ3BhaWQnKSB7XG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1RoaXMgaW52b2ljZSBpcyBhbHJlYWR5IHBhaWQ7IGl0cyBwYXltZW50IHN0YXR1cyBjYW5ub3QgYmUgY2hhbmdlZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTW9kYWwgbm93IGNvbGxlY3RzIGEgcmVhbCBwYXltZW50IGVudHJ5IChhbW91bnQsIGRhdGUsIG1ldGhvZCwgcmVmLFxuICAgIC8vIG5vdGVzKS4gT24gc3VibWl0IHRoZSBzZXJ2ZXIgYXBwZW5kcyB0byBwYXltZW50SGlzdG9yeSBhbmQgcmVjb21wdXRlc1xuICAgIC8vIHBheW1lbnRTdGF0dXMgKHVucGFpZC9wYXJ0aWFsL3BhaWQpLlxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihQYXltZW50U3RhdHVzY2hhbmdlQ29tcG9uZW50LCB7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJywgc2Nyb2xsYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pbnZvaWNlID0gZGF0YTtcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbiA9PT0gJ3JlY29yZCcgJiYgcmVzdWx0LnBheWxvYWQpIHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHsgaW52b2ljZUlkOiBkYXRhLmludm9pY2UsIC4uLnJlc3VsdC5wYXlsb2FkIH07XG4gICAgICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UucmVjb3JkUGF5bWVudChwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlcz8uZGF0YT8ucGF5bWVudFN0YXR1cyB8fCByZXM/LnBheW1lbnRTdGF0dXMgfHwgJ3VwZGF0ZWQnO1xuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoYFBheW1lbnQgcmVjb3JkZWQg4oCUIHN0YXR1czogJHtzdGF0dXN9YCk7XG4gICAgICAgICAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5lcnJvcj8uZXJyb3IgfHwgJ0ZhaWxlZCB0byByZWNvcmQgcGF5bWVudCc7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QobXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuICAvLyA9PT09PSBBcHByb3ZlIGZsb3cgKHBvcnRlZCBmcm9tIGJyYW5kLWludm9pY2VzKSA9PT09PVxuICAvLyBTdGFnZS1hd2FyZSBhcHByb3ZlOiB1c2VzIGRlZGljYXRlZCB0cmFuc2l0aW9uIGVuZHBvaW50IHBlciBzdGF0dXMuIEZpbmFsXG4gIC8vIHN0YWdlIChwZW5kaW5nQXBwcm92YWwg4oaSIGFwcHJvdmVkKSBoaXRzIGludm9pY2VEb3dubG9hZCB3aXRoIHNlbmRJbnZvaWNlXG4gIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGV4aXN0aW5nIFVJIGZsb3cgb24gdGhpcyB0YWIuXG4gIGNhbkFwcHJvdmUoaW52OiBhbnksIHVzZXJBY2Nlc3M6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdXNlckFjY2VzcykgcmV0dXJuIGZhbHNlO1xuICAgIC8vIExlZ2FjeSAncGVuZGluZycgaW52b2ljZXMgYXJlIHRoZSBmaXJzdCAoQ1NNKSBzdGFnZS5cbiAgICBpZiAodXNlckFjY2Vzcy5yb2xlID09PSAnc3VwZXJhZG1pbicpIHtcbiAgICAgIHJldHVybiBbJ3BlbmRpbmcnLCAncGVuZGluZ0NzbScsICdwZW5kaW5nRmluYW5jZScsICdwZW5kaW5nQXBwcm92YWwnXS5pbmNsdWRlcyhpbnY/LnN0YXR1cyk7XG4gICAgfVxuICAgIGlmIChpbnY/LnN0YXR1cyA9PT0gJ3BlbmRpbmdDc20nIHx8IGludj8uc3RhdHVzID09PSAncGVuZGluZycpIHJldHVybiAhIXVzZXJBY2Nlc3MuVGFuZ29BZG1pbl9jc21BcHByb3ZhbF9pc0VkaXQ7XG4gICAgaWYgKGludj8uc3RhdHVzID09PSAncGVuZGluZ0ZpbmFuY2UnKSByZXR1cm4gISF1c2VyQWNjZXNzLlRhbmdvQWRtaW5fZmluYW5jZUFwcHJvdmFsX2lzRWRpdDtcbiAgICBpZiAoaW52Py5zdGF0dXMgPT09ICdwZW5kaW5nQXBwcm92YWwnKSByZXR1cm4gISF1c2VyQWNjZXNzLlRhbmdvQWRtaW5faW52b2ljZUFwcHJvdmFsX2lzRWRpdDtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRBcHByb3ZlVG9vbHRpcChpbnY6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGludj8uc3RhdHVzID09PSAncGVuZGluZ0NzbScpIHJldHVybiAnQXBwcm92ZSBhcyBDU00nO1xuICAgIGlmIChpbnY/LnN0YXR1cyA9PT0gJ3BlbmRpbmdGaW5hbmNlJykgcmV0dXJuICdBcHByb3ZlIGFzIEZpbmFuY2UnO1xuICAgIGlmIChpbnY/LnN0YXR1cyA9PT0gJ3BlbmRpbmdBcHByb3ZhbCcpIHJldHVybiAnRmluYWwgQXBwcm92ZSc7XG4gICAgcmV0dXJuICdBcHByb3ZlIEludm9pY2UnO1xuICB9XG5cbiAgcHJpdmF0ZSBhZHZhbmNlSW52b2ljZUJ5U3RhdHVzKGludjogYW55KSB7XG4gICAgLy8gTGVnYWN5ICdwZW5kaW5nJyBpbnZvaWNlcyBhcmUgdHJlYXRlZCBhcyB0aGUgZmlyc3QgKENTTSkgc3RhZ2Ugc28gdGhleVxuICAgIC8vIHJlbWFpbiBhcHByb3ZhYmxlIGFmdGVyIHRoZSBwaXBlbGluZSBtaWdyYXRpb24uXG4gICAgaWYgKGludj8uc3RhdHVzID09PSAncGVuZGluZ0NzbScgfHwgaW52Py5zdGF0dXMgPT09ICdwZW5kaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuQmlsbGluZ1NlcnZpY2UuYXBwcm92ZUludm9pY2VDc20oaW52Ll9pZCk7XG4gICAgfVxuICAgIGlmIChpbnY/LnN0YXR1cyA9PT0gJ3BlbmRpbmdGaW5hbmNlJykge1xuICAgICAgcmV0dXJuIHRoaXMuQmlsbGluZ1NlcnZpY2UuYXBwcm92ZUludm9pY2VGaW5hbmNlKGludi5faWQpO1xuICAgIH1cbiAgICBpZiAoaW52Py5zdGF0dXMgPT09ICdwZW5kaW5nQXBwcm92YWwnKSB7XG4gICAgICAvLyBGaW5hbCBzdGFnZTogZ2VuZXJhdGUgdGhlIFBERiBhbmQgZW1haWwgdGhlIGludm9pY2UgKHNlbmRJbnZvaWNlKSB3aGlsZVxuICAgICAgLy8gYWR2YW5jaW5nIHRoZSBzdGF0dXMgdG8gJ2FwcHJvdmVkJy4gTWlycm9ycyB0aGUgYnJhbmQtaW52b2ljZXMgZmxvdyBzb1xuICAgICAgLy8gdGhlIGludm9pY2UgbWFpbCBpcyBhY3R1YWxseSBzZW50IG9uIGZpbmFsIGFwcHJvdmFsLlxuICAgICAgY29uc3QgcGF5bG9hZCA9IHsgLi4uaW52LCBzZW5kSW52b2ljZTogdHJ1ZSwgc3RhdHVzOiAnYXBwcm92ZWQnIH07XG4gICAgICByZXR1cm4gdGhpcy5CaWxsaW5nU2VydmljZS5pbnZvaWNlRG93bmxvYWQocGF5bG9hZCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gUmV0dXJucyBbe2Zyb20sIHRvLCBjb3VudH1dIGZvciB0aGUgY29uZmlybWF0aW9uIHBvcHVwIGJyZWFrZG93bi5cbiAgcHJpdmF0ZSBidWlsZFRyYW5zaXRpb25zKGludm9pY2VzOiBhbnlbXSk6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nOyBjb3VudDogbnVtYmVyIH1bXSB7XG4gICAgY29uc3Qgb3JkZXIgPSBbJ3BlbmRpbmdDc20nLCAncGVuZGluZ0ZpbmFuY2UnLCAncGVuZGluZ0FwcHJvdmFsJ107XG4gICAgY29uc3QgY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgaW52b2ljZXMuZm9yRWFjaCgoaW52KSA9PiB7XG4gICAgICBjb25zdCBzdGF0dXMgPSBpbnY/LnN0YXR1cztcbiAgICAgIGlmICh0aGlzLnN0YWdlTmV4dFtzdGF0dXNdKSB7XG4gICAgICAgIGNvdW50c1tzdGF0dXNdID0gKGNvdW50c1tzdGF0dXNdIHx8IDApICsgMTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb3JkZXJcbiAgICAgIC5maWx0ZXIoKHMpID0+IGNvdW50c1tzXSlcbiAgICAgIC5tYXAoKHMpID0+ICh7IGZyb206IHRoaXMuc3RhZ2VMYWJlbHNbc10sIHRvOiB0aGlzLnN0YWdlTGFiZWxzW3RoaXMuc3RhZ2VOZXh0W3NdXSwgY291bnQ6IGNvdW50c1tzXSB9KSk7XG4gIH1cblxuICBhcHByb3ZlSW52b2ljZShkYXRhOiBhbnkpIHtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUmVxdWVzdENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIHNjcm9sbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHJhbnNpdGlvbnMgPSB0aGlzLmJ1aWxkVHJhbnNpdGlvbnMoW2RhdGFdKTtcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT09ICdZZXMnKSB7XG4gICAgICAgIGNvbnN0IGNhbGwgPSB0aGlzLmFkdmFuY2VJbnZvaWNlQnlTdGF0dXMoZGF0YSk7XG4gICAgICAgIGlmICghY2FsbCkgcmV0dXJuO1xuICAgICAgICBjYWxsLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KCdJbnZvaWNlIGFkdmFuY2VkIHRvIHRoZSBuZXh0IHN0YWdlJyk7XG4gICAgICAgICAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIFRoZSBmaW5hbCBzdGFnZSBjYWxscyBpbnZvaWNlRG93bmxvYWQgKHJlc3BvbnNlVHlwZTonYXJyYXlidWZmZXInKSxcbiAgICAgICAgICAgIC8vIHNvIGFuIGVycm9yIGJvZHkgY29tZXMgYmFjayBhcyBhbiBBcnJheUJ1ZmZlci9CbG9iIHJhdGhlciB0aGFuIGFcbiAgICAgICAgICAgIC8vIHBhcnNlZCBvYmplY3Qg4oCUIGVyci5lcnJvci5tZXNzYWdlIGlzIHVuZGVmaW5lZCBhbmQgdGhlIHJlYWxcbiAgICAgICAgICAgIC8vIGJhY2tlbmQgbWVzc2FnZSBpcyBsb3N0LiBEZWNvZGUgaXQgYmVmb3JlIGZhbGxpbmcgYmFjay5cbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdEh0dHBFcnJvck1lc3NhZ2UoZXJyLCAnRmFpbGVkIHRvIGFkdmFuY2UgaW52b2ljZScpLnRoZW4oKG1zZzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChtc2cpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaCgoKSA9PiB7fSk7XG4gIH1cblxuICAvLyBFeHRyYWN0IGEgaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBmcm9tIGFuIEh0dHBFcnJvclJlc3BvbnNlLiBXaGVuIHRoZSByZXF1ZXN0XG4gIC8vIHVzZWQgcmVzcG9uc2VUeXBlICdhcnJheWJ1ZmZlcicvJ2Jsb2InIChlLmcuIGludm9pY2VEb3dubG9hZCBvbiBmaW5hbFxuICAvLyBhcHByb3ZhbCksIGFuIGVycm9yIGJvZHkgaXMgcmV0dXJuZWQgYXMgYmluYXJ5IHJhdGhlciB0aGFuIHBhcnNlZCBKU09OLCBzb1xuICAvLyBlcnIuZXJyb3IubWVzc2FnZSBpcyB1bmRlZmluZWQuIERlY29kZSB0aGUgYmluYXJ5IGJhY2sgdG8gdGV4dC9KU09OIGhlcmUgc29cbiAgLy8gdGhlIHJlYWwgYmFja2VuZCBtZXNzYWdlIHN1cmZhY2VzIGluc3RlYWQgb2YgdGhlIGdlbmVyaWMgZmFsbGJhY2suXG4gIHByaXZhdGUgYXN5bmMgZXh0cmFjdEh0dHBFcnJvck1lc3NhZ2UoZXJyOiBhbnksIGZhbGxiYWNrOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJvZHkgPSBlcnI/LmVycm9yO1xuICAgIHRyeSB7XG4gICAgICBsZXQgdGV4dDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgIHRleHQgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYm9keSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBib2R5IGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICB0ZXh0ID0gYXdhaXQgYm9keS50ZXh0KCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0ZXh0ID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoYm9keSAmJiB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gQWxyZWFkeSBwYXJzZWQgSlNPTiBlcnJvciBvYmplY3QuXG4gICAgICAgIHJldHVybiBib2R5Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8IGZhbGxiYWNrO1xuICAgICAgfVxuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgICAgIHJldHVybiBwYXJzZWQ/Lm1lc3NhZ2UgfHwgZmFsbGJhY2s7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIE5vdCBKU09OIOKAlCB1c2UgdGhlIHJhdyB0ZXh0IGlmIGl0J3MgbWVhbmluZ2Z1bC5cbiAgICAgICAgICByZXR1cm4gdGV4dC50cmltKCkgfHwgZmFsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIERlY29kaW5nIGZhaWxlZCDigJQgZmFsbCB0aHJvdWdoIHRvIHRoZSBmYWxsYmFjay5cbiAgICB9XG4gICAgcmV0dXJuIGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8IGZhbGxiYWNrO1xuICB9XG5cbiAgLy8gPT09PT0gRmlsdGVyIHRhYnMgPT09PT1cbiAgc2V0RmlsdGVyKGZpbHRlcjogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgLy8gUmVzZXQgc2VsZWN0aW9uIHdoZW4gc3dpdGNoaW5nIGZpbHRlcnMg4oCUIGRpZmZlcmVudCB2aXNpYmxlIHNldC5cbiAgICB0aGlzLnNlbGVjdGVkSW52b2ljZXMuY2xlYXIoKTtcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xuXG4gICAgaWYgKGZpbHRlciA9PT0gJ1BlbmRpbmcgQXBwcm92YWwnKSB7XG4gICAgICB0aGlzLkFwcHJvdmFsRmlsdGVyID0gWydwZW5kaW5nQ3NtJywgJ3BlbmRpbmdGaW5hbmNlJywgJ3BlbmRpbmdBcHByb3ZhbCddO1xuICAgICAgdGhpcy5wYXltZW50RmlsdGVyID0gW107XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIgPT09ICdQZW5kaW5nIFBheW1lbnQnKSB7XG4gICAgICB0aGlzLkFwcHJvdmFsRmlsdGVyID0gWydhcHByb3ZlZCddO1xuICAgICAgdGhpcy5wYXltZW50RmlsdGVyID0gWyd1bnBhaWQnXTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gJ1BhaWQnKSB7XG4gICAgICB0aGlzLkFwcHJvdmFsRmlsdGVyID0gW107XG4gICAgICB0aGlzLnBheW1lbnRGaWx0ZXIgPSBbJ3BhaWQnXTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gJ0NhbmNlbGxlZCcpIHtcbiAgICAgIHRoaXMuQXBwcm92YWxGaWx0ZXIgPSBbJ2NhbmNlbGxlZCddO1xuICAgICAgdGhpcy5wYXltZW50RmlsdGVyID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuQXBwcm92YWxGaWx0ZXIgPSBbXTtcbiAgICAgIHRoaXMucGF5bWVudEZpbHRlciA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKTtcbiAgfVxuXG4gIC8vID09PT09IERpc3BsYXkgaGVscGVycyA9PT09PVxuICBpbnZvaWNlQ3VycmVuY3lTeW1ib2woaW52OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbmN5U3ltYm9sc1tpbnY/LmN1cnJlbmN5IHx8ICcnXSB8fCAnJCc7XG4gIH1cblxuICAvLyBMb2NrZWQgb25jZSBmaW5hbC1hcHByb3ZlZCBvciBjYW5jZWxsZWQg4oCUIEVkaXQgYW5kIERlbGV0ZSBtdXN0IG5vdCBtdXRhdGUuXG4gIGlzSW52b2ljZUxvY2tlZChpbnY6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbnY/LnN0YXR1cyA9PT0gJ2FwcHJvdmVkJyB8fCBpbnY/LnN0YXR1cyA9PT0gJ2NhbmNlbGxlZCc7XG4gIH1cblxuICAvLyBDYW5jZWxsYWJsZSBvbmx5IHdoaWxlIGFwcHJvdmVkIGFuZCBzdGlsbCB1bnBhaWQg4oCUIG1hdGNoZXMgdGhlIGJhY2tlbmQnc1xuICAvLyBvd24gZ2F0ZSBpbiBjYW5jZWxJbnZvaWNlLlxuICBjYW5DYW5jZWxJbnZvaWNlKGludjogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGludj8uc3RhdHVzID09PSAnYXBwcm92ZWQnICYmIGludj8ucGF5bWVudFN0YXR1cyA9PT0gJ3VucGFpZCc7XG4gIH1cblxuICAvLyBNYXBzIGJvdGggcGlwZWxpbmUgc3RhdHVzIGFuZCBwYXltZW50IHN0YXR1cyBpbnRvIHRoZSBiYWRnZSB0ZXh0L2NsYXNzXG4gIC8vIHNob3duIGluIHRoZSB0YWJsZS4gTWlycm9ycyBicmFuZC1pbnZvaWNlcyBmb3IgY29uc2lzdGVuY3kuXG4gIGdldEludm9pY2VTdGF0dXMoaW52b2ljZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoaW52b2ljZS5zdGF0dXMgPT09ICdjYW5jZWxsZWQnKSByZXR1cm4gJ0NhbmNlbGxlZCc7XG4gICAgaWYgKGludm9pY2Uuc3RhdHVzID09PSAncGVuZGluZ0NzbScpIHJldHVybiAnUGVuZGluZyBDU00nO1xuICAgIGlmIChpbnZvaWNlLnN0YXR1cyA9PT0gJ3BlbmRpbmdGaW5hbmNlJykgcmV0dXJuICdQZW5kaW5nIEZpbmFuY2UnO1xuICAgIGlmIChpbnZvaWNlLnN0YXR1cyA9PT0gJ3BlbmRpbmdBcHByb3ZhbCcpIHJldHVybiAnUGVuZGluZyBBcHByb3ZhbCc7XG4gICAgaWYgKGludm9pY2Uuc3RhdHVzID09PSAncGVuZGluZycpIHJldHVybiAnUGVuZGluZyBBcHByb3ZhbCc7XG4gICAgaWYgKGludm9pY2UucGF5bWVudFN0YXR1cyA9PT0gJ3BhcnRpYWwnKSByZXR1cm4gJ1BhcnRpYWwnO1xuICAgIGlmIChpbnZvaWNlLnBheW1lbnRTdGF0dXMgPT09ICd1bnBhaWQnKSByZXR1cm4gJ1BlbmRpbmcgUGF5bWVudCc7XG4gICAgaWYgKGludm9pY2UucGF5bWVudFN0YXR1cyA9PT0gJ3BhaWQnKSByZXR1cm4gJ1BhaWQnO1xuICAgIHJldHVybiBpbnZvaWNlLnN0YXR1cztcbiAgfVxuXG4gIGdldFN0YXR1c0NsYXNzKGludm9pY2U6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGludm9pY2Uuc3RhdHVzID09PSAnY2FuY2VsbGVkJykgcmV0dXJuICdiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0JztcbiAgICBpZiAoaW52b2ljZS5zdGF0dXMgPT09ICdwZW5kaW5nQ3NtJykgcmV0dXJuICdiYWRnZSBiYWRnZS1saWdodC13YXJuaW5nJztcbiAgICBpZiAoaW52b2ljZS5zdGF0dXMgPT09ICdwZW5kaW5nRmluYW5jZScpIHJldHVybiAnYmFkZ2UgYmFkZ2UtbGlnaHQtaW5mbyc7XG4gICAgaWYgKGludm9pY2Uuc3RhdHVzID09PSAncGVuZGluZ0FwcHJvdmFsJykgcmV0dXJuICdiYWRnZSBiYWRnZS1saWdodC1kYXJrJztcbiAgICBpZiAoaW52b2ljZS5zdGF0dXMgPT09ICdwZW5kaW5nJykgcmV0dXJuICdiYWRnZSBiYWRnZS1saWdodC13YXJuaW5nJztcbiAgICBpZiAoaW52b2ljZS5wYXltZW50U3RhdHVzID09PSAncGFpZCcpIHJldHVybiAnYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2Vzcyc7XG4gICAgaWYgKGludm9pY2UucGF5bWVudFN0YXR1cyA9PT0gJ3BhcnRpYWwnKSByZXR1cm4gJ2JhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmcnO1xuICAgIGlmIChpbnZvaWNlLnBheW1lbnRTdGF0dXMgPT09ICd1bnBhaWQnKSByZXR1cm4gJ2JhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnknO1xuICAgIHJldHVybiAnYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyJztcbiAgfVxuXG4gIC8vID09PT09IFByb3RvdHlwZS1wYXJpdHkgaGVscGVycyAoQWxsIEludm9pY2VzIHJlZGVzaWduKSA9PT09PVxuICAvLyBEdWUgU3RhdHVzIGNlbGwg4oCUIFwiRHVlIGluIE4gZGF5c1wiIC8gXCJEdWUgdG9kYXlcIiAvIFwiT3ZlcmR1ZSBieSBOIGRheXNcIi5cbiAgLy8gUGFpZCBpbnZvaWNlcyBzaG93IGEgZGFzaDogdGhlIGR1ZSBkYXRlIG5vIGxvbmdlciBtYXR0ZXJzIG9uY2Ugc2V0dGxlZC5cbiAgZ2V0RHVlU3RhdHVzKGludm9pY2U6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGludm9pY2U/LnBheW1lbnRTdGF0dXMgPT09ICdwYWlkJykgcmV0dXJuICfigJQnO1xuICAgIGlmICghaW52b2ljZT8uZHVlRGF0ZSkgcmV0dXJuICfigJQnO1xuICAgIGNvbnN0IGR1ZSA9IG5ldyBEYXRlKGludm9pY2UuZHVlRGF0ZSk7IGR1ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7IHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIGNvbnN0IGRheXMgPSBNYXRoLnJvdW5kKChkdWUuZ2V0VGltZSgpIC0gdG9kYXkuZ2V0VGltZSgpKSAvIDg2NDAwMDAwKTtcbiAgICBpZiAoZGF5cyA8IDApIHJldHVybiBgT3ZlcmR1ZSBieSAkey1kYXlzfSBkYXkke2RheXMgPT09IC0xID8gJycgOiAncyd9YDtcbiAgICBpZiAoZGF5cyA9PT0gMCkgcmV0dXJuICdEdWUgdG9kYXknO1xuICAgIHJldHVybiBgRHVlIGluICR7ZGF5c30gZGF5JHtkYXlzID09PSAxID8gJycgOiAncyd9YDtcbiAgfVxuXG4gIGdldER1ZVN0YXR1c0NsYXNzKGludm9pY2U6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGludm9pY2U/LnBheW1lbnRTdGF0dXMgPT09ICdwYWlkJyB8fCAhaW52b2ljZT8uZHVlRGF0ZSkgcmV0dXJuICdkdWUtbXV0ZWQnO1xuICAgIGNvbnN0IGR1ZSA9IG5ldyBEYXRlKGludm9pY2UuZHVlRGF0ZSk7IGR1ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7IHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIGNvbnN0IGRheXMgPSBNYXRoLnJvdW5kKChkdWUuZ2V0VGltZSgpIC0gdG9kYXkuZ2V0VGltZSgpKSAvIDg2NDAwMDAwKTtcbiAgICBpZiAoZGF5cyA8IDApIHJldHVybiAnZHVlLW92ZXJkdWUnO1xuICAgIGlmIChkYXlzID09PSAwKSByZXR1cm4gJ2R1ZS10b2RheSc7XG4gICAgcmV0dXJuICdkdWUtdXBjb21pbmcnO1xuICB9XG5cbiAgLy8gR1NUIGNvbHVtbiDigJQgcHJlZmVyIHRoZSBiYWNrZW5kLWNvbXB1dGVkIHZhbHVlOyBmYWxsIGJhY2sgdG8gdGhlXG4gIC8vIGRpZmZlcmVuY2Ugc28gb2xkZXIgY2FjaGVkIHJlc3BvbnNlcyBzdGlsbCByZW5kZXIuXG4gIGdzdEFtb3VudChpbnZvaWNlOiBhbnkpOiBudW1iZXIge1xuICAgIGlmIChpbnZvaWNlPy5nc3RBbW91bnQgIT0gbnVsbCkgcmV0dXJuIE51bWJlcihpbnZvaWNlLmdzdEFtb3VudCkgfHwgMDtcbiAgICBjb25zdCB0b3RhbCA9IE51bWJlcihpbnZvaWNlPy50b3RhbEFtb3VudCkgfHwgMDtcbiAgICBjb25zdCBhbW91bnQgPSBOdW1iZXIoaW52b2ljZT8uYW1vdW50KSB8fCAwO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKCh0b3RhbCAtIGFtb3VudCkgKiAxMDApIC8gMTAwKTtcbiAgfVxuXG4gIC8vIEdTVCBvbmx5IGFwcGxpZXMgdG8gZG9tZXN0aWMgKElOUikgaW52b2ljZXMuIEludGVybmF0aW9uYWwgaW52b2ljZXNcbiAgLy8gKGRvbGxhciAvIGV1cm8gLyBldGMuKSBhcmUgYmlsbGVkIHdpdGhvdXQgR1NULCBzbyB0aGUgY29sdW1uIHNob3dzIGEgZGFzaFxuICAvLyByYXRoZXIgdGhhbiBhIG1lYW5pbmdsZXNzIFwiJCAwXCIuXG4gIGlzR3N0QXBwbGljYWJsZShpbnZvaWNlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGludm9pY2U/LmN1cnJlbmN5IHx8ICdpbnInKSA9PT0gJ2lucic7XG4gIH1cblxuICAvLyBOdW1iZXIgZm9ybWF0IGZvciB0aGUgYW1vdW50IGNvbHVtbnMuIElOUiBpbnZvaWNlcyBhcmUgc2hvd24gYXMgd2hvbGVcbiAgLy8gcnVwZWVzICgnMS4wLTAnKSwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIGRpc3BsYXkuIE5vbi1JTlIgKGRvbGxhciAvIGV1cm8gL1xuICAvLyBldGMuKSBpbnZvaWNlcyBrZWVwIHRoZWlyIGRlY2ltYWxzICgnMS4yLTInKSBzbyB0aGUgdmFsdWUgaXNuJ3Qgcm91bmRlZCBvZmYuXG4gIGFtb3VudEZvcm1hdChpbnZvaWNlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiAoaW52b2ljZT8uY3VycmVuY3kgfHwgJ2lucicpID09PSAnaW5yJyA/ICcxLjAtMCcgOiAnMS4yLTInO1xuICB9XG5cbiAgLy8gUGF5bWVudCAvIEFwcHJvdmFsIHNwbGl0IGludG8gdHdvIHBpbGwgY29sdW1ucyAocHJvdG90eXBlIGxheW91dCkuXG4gIGdldFBheW1lbnRMYWJlbChpbnZvaWNlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChpbnZvaWNlPy5wYXltZW50U3RhdHVzID09PSAncGFpZCcpIHJldHVybiAnUGFpZCc7XG4gICAgaWYgKGludm9pY2U/LnBheW1lbnRTdGF0dXMgPT09ICdwYXJ0aWFsJykgcmV0dXJuICdQYXJ0aWFsJztcbiAgICByZXR1cm4gJ1VucGFpZCc7XG4gIH1cblxuICBnZXRQYXltZW50UGlsbENsYXNzKGludm9pY2U6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGludm9pY2U/LnBheW1lbnRTdGF0dXMgPT09ICdwYWlkJykgcmV0dXJuICdwaWxsIHBpbGwtZ3JlZW4nO1xuICAgIGlmIChpbnZvaWNlPy5wYXltZW50U3RhdHVzID09PSAncGFydGlhbCcpIHJldHVybiAncGlsbCBwaWxsLWFtYmVyJztcbiAgICByZXR1cm4gJ3BpbGwgcGlsbC1hbWJlcic7XG4gIH1cblxuICBnZXRBcHByb3ZhbExhYmVsKGludm9pY2U6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhZ2VMYWJlbHNbaW52b2ljZT8uc3RhdHVzXSB8fCBpbnZvaWNlPy5zdGF0dXMgfHwgJ+KAlCc7XG4gIH1cblxuICBnZXRBcHByb3ZhbFBpbGxDbGFzcyhpbnZvaWNlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBpbnZvaWNlPy5zdGF0dXMgPT09ICdhcHByb3ZlZCcgPyAncGlsbCBwaWxsLWdyZWVuJyA6ICdwaWxsIHBpbGwtYW1iZXInO1xuICB9XG5cbiAgcGVuZGluZ0Ftb3VudChpbnZvaWNlOiBhbnkpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsID0gTnVtYmVyKGludm9pY2U/LnRvdGFsQW1vdW50KSB8fCAwO1xuICAgIGNvbnN0IHBhaWQgPSBOdW1iZXIoaW52b2ljZT8ucGFpZEFtb3VudCkgfHwgMDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgodG90YWwgLSBwYWlkKSAqIDEwMCkgLyAxMDApO1xuICB9XG5cbiAgaGFzUGVuZGluZyhpbnZvaWNlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYWlkID0gTnVtYmVyKGludm9pY2U/LnBhaWRBbW91bnQpIHx8IDA7XG4gICAgcmV0dXJuIHBhaWQgPiAwICYmIHRoaXMucGVuZGluZ0Ftb3VudChpbnZvaWNlKSA+IDA7XG4gIH1cblxuICAvLyA9PT09PSBNdWx0aS1zZWxlY3QgPT09PT1cbiAgdG9nZ2xlU2VsZWN0QWxsKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5pbnZvaWNlTGlzdC5mb3JFYWNoKChpbnY6IGFueSkgPT4gdGhpcy5zZWxlY3RlZEludm9pY2VzLmFkZChpbnYuX2lkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbnZvaWNlcy5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUludm9pY2VTZWxlY3QoaW52OiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEludm9pY2VzLmhhcyhpbnYuX2lkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEludm9pY2VzLmRlbGV0ZShpbnYuX2lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEludm9pY2VzLmFkZChpbnYuX2lkKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RBbGwgPSB0aGlzLmludm9pY2VMaXN0Lmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuaW52b2ljZUxpc3QuZXZlcnkoKGk6IGFueSkgPT4gdGhpcy5zZWxlY3RlZEludm9pY2VzLmhhcyhpLl9pZCkpO1xuICB9XG5cbiAgaXNTZWxlY3RlZChpbnY6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSW52b2ljZXMuaGFzKGludi5faWQpO1xuICB9XG5cbiAgLy8gQ291bnQgb2Ygc2VsZWN0ZWQgaW52b2ljZXMgdGhlIGN1cnJlbnQgdXNlciBpcyBhY3R1YWxseSBhbGxvd2VkIHRvIGFwcHJvdmUuXG4gIC8vIERyaXZlcyB0aGUgYnVsayBBcHByb3ZlIGJ1dHRvbidzIGVuYWJsZWQgc3RhdGUgYW5kIGl0cyBcIihOKVwiIGxhYmVsLlxuICBwZW5kaW5nSW5TZWxlY3Rpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pbnZvaWNlTGlzdC5maWx0ZXIoKGludjogYW55KSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZEludm9pY2VzLmhhcyhpbnYuX2lkKSAmJiB0aGlzLmNhbkFwcHJvdmUoaW52LCB0aGlzLnVzZXJBY2Nlc3MpXG4gICAgKS5sZW5ndGg7XG4gIH1cblxuICAvLyA9PT09PSBCdWxrIGFwcHJvdmUgPT09PT1cbiAgYXBwcm92ZVNlbGVjdGVkKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW52b2ljZXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGVjdGVkTGlzdCA9IHRoaXMuaW52b2ljZUxpc3QuZmlsdGVyKChpbnY6IGFueSkgPT5cbiAgICAgIHRoaXMuc2VsZWN0ZWRJbnZvaWNlcy5oYXMoaW52Ll9pZCkgJiYgdGhpcy5jYW5BcHByb3ZlKGludiwgdGhpcy51c2VyQWNjZXNzKVxuICAgICk7XG4gICAgaWYgKHNlbGVjdGVkTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnTm8gcGVuZGluZyBpbnZvaWNlcyBpbiBzZWxlY3Rpb24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFJlcXVlc3RDb25maXJtYXRpb25Db21wb25lbnQsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRyYW5zaXRpb25zID0gdGhpcy5idWlsZFRyYW5zaXRpb25zKHNlbGVjdGVkTGlzdCk7XG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnWWVzJykge1xuICAgICAgICB0aGlzLmJ1bGtBcHByb3ZpbmcgPSB0cnVlO1xuICAgICAgICBsZXQgY29tcGxldGVkID0gMDtcbiAgICAgICAgbGV0IHN1Y2NlZWRlZCA9IDA7XG4gICAgICAgIGxldCBmYWlsZWQgPSAwO1xuICAgICAgICBzZWxlY3RlZExpc3QuZm9yRWFjaCgoaW52OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjYWxsID0gdGhpcy5hZHZhbmNlSW52b2ljZUJ5U3RhdHVzKGludik7XG4gICAgICAgICAgaWYgKCFjYWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQrKzsgZmFpbGVkKys7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGwucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCsrOyBzdWNjZWVkZWQrKztcbiAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gc2VsZWN0ZWRMaXN0Lmxlbmd0aCkgdGhpcy5maW5pc2hCdWxrQXBwcm92ZShzdWNjZWVkZWQsIGZhaWxlZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgY29tcGxldGVkKys7IGZhaWxlZCsrO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSBzZWxlY3RlZExpc3QubGVuZ3RoKSB0aGlzLmZpbmlzaEJ1bGtBcHByb3ZlKHN1Y2NlZWRlZCwgZmFpbGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5pc2hCdWxrQXBwcm92ZShzdWNjZWVkZWQ6IG51bWJlciwgZmFpbGVkOiBudW1iZXIpIHtcbiAgICB0aGlzLmJ1bGtBcHByb3ZpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkSW52b2ljZXMuY2xlYXIoKTtcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIGlmIChmYWlsZWQgPT09IDApIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KGAke3N1Y2NlZWRlZH0gaW52b2ljZShzKSBhZHZhbmNlZCB0byBuZXh0IHN0YWdlYCk7XG4gICAgfSBlbHNlIGlmIChzdWNjZWVkZWQgPT09IDApIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgQWxsICR7ZmFpbGVkfSBpbnZvaWNlKHMpIGZhaWxlZCB0byBhZHZhbmNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgJHtzdWNjZWVkZWR9IGFkdmFuY2VkLCAke2ZhaWxlZH0gZmFpbGVkYCk7XG4gICAgfVxuICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICB9XG5cbiAgLy8gPT09PT0gQnVsayBkb3dubG9hZCAoemlwKSA9PT09PVxuICBkb3dubG9hZFNlbGVjdGVkKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW52b2ljZXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgIHRoaXMuYnVsa0Rvd25sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBwYXlsb2FkID0geyBpbnZvaWNlSWRzOiBbLi4udGhpcy5zZWxlY3RlZEludm9pY2VzXSB9O1xuICAgIGNvbnN0IGNvdW50ID0gcGF5bG9hZC5pbnZvaWNlSWRzLmxlbmd0aDtcbiAgICB0aGlzLkJpbGxpbmdTZXJ2aWNlLmJ1bGtJbnZvaWNlRG93bmxvYWQocGF5bG9hZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyZXNdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi96aXAnIH0pO1xuICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgaW52b2ljZXMtJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApfS56aXBgO1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLmhyZWYgPSB1cmw7IGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgbGluay5jbGljaygpOyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICB0aGlzLmJ1bGtEb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW52b2ljZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoYERvd25sb2FkZWQgJHtjb3VudH0gaW52b2ljZShzKWApO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmJ1bGtEb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ZhaWxlZCB0byBkb3dubG9hZCBpbnZvaWNlcycpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09IFZpZXcgLyBFZGl0IC8gRGVsZXRlIChtb2RhbCB3aXJpbmcpID09PT09XG4gIG9wZW5JbnZvaWNlUHJldmlldyhpbnY6IGFueSkge1xuICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UuZ2V0SW52b2ljZUJ5SWQoaW52Ll9pZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaW52b2ljZURhdGEgPSByZXM/LmRhdGEgfHwgaW52O1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oSW52b2ljZVByZXZpZXdDb21wb25lbnQsIHtcbiAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ3hsJywgc2Nyb2xsYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmludm9pY2VEYXRhID0gaW52b2ljZURhdGE7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnRmFpbGVkIHRvIGxvYWQgaW52b2ljZScpXG4gICAgfSk7XG4gIH1cblxuICBlZGl0SW52b2ljZShpbnY6IGFueSkge1xuICAgIGlmICh0aGlzLmlzSW52b2ljZUxvY2tlZChpbnYpKSByZXR1cm47XG4gICAgdGhpcy5CaWxsaW5nU2VydmljZS5nZXRJbnZvaWNlQnlJZChpbnYuX2lkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBmdWxsSW52b2ljZSA9IHJlcz8uZGF0YSB8fCBpbnY7XG4gICAgICAgIHRoaXMub3BlbkVkaXRNb2RhbChmdWxsSW52b2ljZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMub3BlbkVkaXRNb2RhbChpbnYpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5FZGl0TW9kYWwoaW52b2ljZURhdGE6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihFZGl0SW52b2ljZUNvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICd4bCcsIHNjcm9sbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW52b2ljZURhdGEgPSBpbnZvaWNlRGF0YTtcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5tb2RlID0gJ2VkaXQnO1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNsaWVudElkID0gaW52b2ljZURhdGE/LmNsaWVudElkO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3VwZGF0ZWQnIHx8IHJlc3VsdCA9PT0gJ2NyZWRpdEFwcGxpZWQnIHx8IHJlc3VsdCA9PT0gJ2ZlZUFwcGxpZWQnKSB7XG4gICAgICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIGRlbGV0ZUludm9pY2UoaW52OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0ludm9pY2VMb2NrZWQoaW52KSkgcmV0dXJuO1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ1llcycpIHtcbiAgICAgICAgdGhpcy5CaWxsaW5nU2VydmljZS5kZWxldGVJbnZvaWNlKGludi5faWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KCdJbnZvaWNlIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBkZWxldGUgaW52b2ljZSc7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QobXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIC8vIENhbmNlbCBhbiBhcHByb3ZlZCt1bnBhaWQgaW52b2ljZS4gQ29uZmlybWF0aW9uIG1vZGFsIGNvbGxlY3RzIGFcbiAgLy8gbWFuZGF0b3J5IHJlYXNvbjsgdGhlIGJhY2tlbmQgcmUtdmFsaWRhdGVzIHN0YXR1cy9wYXltZW50U3RhdHVzIGFuZCB0aGVcbiAgLy8gcmVhc29uIGJlZm9yZSBmbGlwcGluZyBzdGF0dXMgdG8gJ2NhbmNlbGxlZCcuXG4gIGNhbmNlbEludm9pY2UoaW52OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuY2FuQ2FuY2VsSW52b2ljZShpbnYpKSByZXR1cm47XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKENhbmNlbEludm9pY2VDb21wb25lbnQsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdD8ucmVhc29uKSB7XG4gICAgICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UuY2FuY2VsSW52b2ljZShpbnYuX2lkLCB7IHJlYXNvbjogcmVzdWx0LnJlYXNvbiB9KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnSW52b2ljZSBjYW5jZWxsZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjYW5jZWwgaW52b2ljZSc7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QobXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIC8vIE9wZW5zIHRoZSBhY3Rpdml0eS1sb2cgdGltZWxpbmUgZm9yIGEgc2luZ2xlIGludm9pY2Ug4oCUIHRyaWdnZXJlZCBieVxuICAvLyBjbGlja2luZyBpdHMgc3RhdHVzIGJhZGdlLiBSZWFkLW9ubHk7IHRoZSBtb2RhbCBmZXRjaGVzIG9uIGluaXQuXG4gIG9wZW5JbnZvaWNlTG9ncyhpbnY6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihJbnZvaWNlTG9nc0NvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIHNjcm9sbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW52b2ljZSA9IGludjtcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IGFueSkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMucGFnZVNpemUgPSBwYXJzZUludChwYWdlU2l6ZSlcbiAgICAvLyBLZWVwIGl0ZW1zUGVyUGFnZSBpbiBzeW5jIOKAlCB0aGUgcGFnaW5hdGlvbiBjb250cm9sIGRlcml2ZXMgaXRzIHBhZ2UgY291bnRcbiAgICAvLyBmcm9tIGl0ZW1zUGVyUGFnZSwgc28gYSBzdGFsZSAxMCBicm9rZSB0aGUgcGFnZSBudW1iZXJzIGZvciBvdGhlciBzaXplcy5cbiAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IHRoaXMucGFnZVNpemU7XG4gICAgdGhpcy5pbnZvaWNlVGFibGVEYXRhKClcblxuICB9XG4gIG9uUGFnZVNpemVDaGFuZ2VUcmFuKHBhZ2VTaXplOiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnR0cmFuUGFnZSA9IDE7XG4gICAgdGhpcy5wYWdldHJhbnNTaXplID0gcGFyc2VJbnQocGFnZVNpemUpXG4gICAgdGhpcy5pdGVtc1BlclBhZ2V0cmFuID0gdGhpcy5wYWdldHJhbnNTaXplO1xuICAgIHRoaXMuY3JlZGl0VHJhbnNhY3Rpb25saXN0KClcbiAgfVxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhcnNlSW50KHBhZ2VPZmZzZXQpXG4gICAgdGhpcy5pbnZvaWNlVGFibGVEYXRhKClcbiAgICBcbiAgfVxuICBvblBhZ2VDaGFuZ2V0cmFuKHBhZ2VPZmZzZXQ6IGFueSkge1xuICAgIHRoaXMuY3VycmVudHRyYW5QYWdlID0gcGFyc2VJbnQocGFnZU9mZnNldClcbiAgICB0aGlzLmNyZWRpdFRyYW5zYWN0aW9ubGlzdCgpXG4gIH1cbiAgaW52b2ljZUZpbHRlcigpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMVxuICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpXG4gICAgdGhpcy5jcmVkaXRUcmFuc2FjdGlvbmxpc3QoKVxuXG4gIH1cblxuICBzb3J0RGF0YShjb2x1bW46IGFueSkge1xuICAgIHRoaXMuc29ydENvbHVtTmFtZSA9IGNvbHVtblxuICAgIHRoaXMuc29ydEJ5ICo9IC0xO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpXG4gIH1cbiAgc29ydERhdGFUcmFucyhjb2x1bW46IGFueSkge1xuICAgIGlmICh0aGlzLnNvcnRDb2x1bU5hbWV0cmFuID09PSBjb2x1bW4pIHtcbiAgICAgIHRoaXMuc29ydEJ5dHJhbiA9IHRoaXMuc29ydEJ5dHJhbiA9PT0gMSA/IC0xIDogMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0Q29sdW1OYW1ldHJhbiA9IGNvbHVtbjtcbiAgICAgIHRoaXMuc29ydEJ5dHJhbiA9IDE7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuY3JlZGl0VHJhbnNhY3Rpb25saXN0KClcbiAgfVxuICBzZWFyY2hGaWVsZCgpIHtcbiAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKVxuICAgIHRoaXMuY3JlZGl0VHJhbnNhY3Rpb25saXN0KClcbiAgfVxuXG4gIHNob3dQcm9kdWN0KGRhdGE6IHN0cmluZykge1xuICAgIHJldHVybiBkYXRhLnNsaWNlKDIgLSBkYXRhLmxlbmd0aClcbiAgfVxuICBjbGllbnRCaWxsaW5nSW5mbyhpZDogYW55KSB7XG4gICAgdGhpcy5CaWxsaW5nU2VydmljZS5jbGllbnRCaWxsaW5nSW5mbyhpZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XG4gICAgICAgIHRoaXMuY2xpZW50aW5mbyA9IHJlcy5kYXRhO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KVxuXG4gIH1cbiAgZG93bmxvYWRJbnZvaWNlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IHJlcSA9IHsuLi5kYXRhfVxuICAgIHJlcS5jbGllbnRJZCA9IFtkYXRhLmNsaWVudElkXVxuICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UuaW52b2ljZURvd25sb2FkKHJlcSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlc10sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XG4gICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICBjb25zdCBtb250aCA9IGRhdGE/LmJpbGxpbmdEYXRlID8gbmV3IERhdGUoZGF0YS5iaWxsaW5nRGF0ZSkudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ2xvbmcnIH0pIDogJyc7XG4gICAgICAgIGNvbnN0IGJyYW5kTmFtZSA9IGRhdGE/LnJlZ2lzdGVyZWRDb21wYW55TmFtZSB8fCBkYXRhPy5jb21wYW55TmFtZSB8fCAnJztcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHtkYXRhPy5pbnZvaWNlIHx8ICdpbnZvaWNlJ30tJHttb250aH0tJHticmFuZE5hbWV9LnBkZmAucmVwbGFjZSgvW1xcXFwvOio/XCI8PnxcXHJcXG5dL2csICcnKS50cmltKCk7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICB9XG5cbiAgICB9KVxuICB9XG4gIHRvZ2dsZURyb3Bkb3duKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuRHJvcGRvd25JbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duSW5kZXggPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW5Ecm9wZG93bkluZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cblxuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBhbnksIGNsaWVudElkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5Ecm9wZG93bkluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgaWYgKG9wdGlvbi5sYWJlbCA9PT0gJ0NyZWRpdCBOb3RlJykge1xuICAgICAgdGhpcy5jcmVkaXRub3RlKGNsaWVudElkKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbi5sYWJlbCA9PT0gJ0FkZCBvbmUgdGltZSBmZWUnKSB7XG4gICAgICB0aGlzLm9uZXRpbWVmZWUoY2xpZW50SWQpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWRpdG5vdGUoY2xpZW50SWQ6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihDcmVkaXROb3RlQ29tcG9uZW50LCB7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgIHNpemU6ICdtZCcsXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSBjbGllbnRJZDtcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc3VjY2Vzc2NyZWRpdCcpIHtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoJ1RoZSBpbnZvaWNlIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHJlc3BlY3RpdmUgZW1haWwgSURzIHdpdGggdGhlIGRpc2NvdW50LicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG9uZXRpbWVmZWUoY2xpZW50SWQ6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihPbmVUaW1lRmVlQ29tcG9uZW50LCB7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgIHNpemU6ICdtZCcsXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSBjbGllbnRJZDtcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09ICdzdWNjZXNzY3JlZGl0Jykge1xuICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnT25lIHRpbWUgZmVlIGFkZGVkIHN1Y2Nlc3NmdWxseS4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cblxuICAvLyBwYXlub3coKSB7XG4gIC8vICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBheW5vd0NvbXBvbmVudCwge1xuICAvLyAgICAgY2VudGVyZWQ6IHRydWUsXG4gIC8vICAgICBzaXplOiAnbGcnLFxuICAvLyAgICAgc2Nyb2xsYWJsZTogdHJ1ZVxuICAvLyAgIH0pO1xuICAvLyAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNsaWVudElkID0gdGhpcy5jbGllbnRJZDtcbiAgLy8gICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gIC8vICAgICAvLyBpZiAocmVzdWx0ID09ICdzdWNjZXNzY3JlZGl0Jykge1xuICAvLyAgICAgLy8gICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnVGhlIGludm9pY2UgaGFzIGJlZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBlbWFpbCBJRHMgd2l0aCB0aGUgZGlzY291bnQuJyk7XG4gIC8vICAgICAvLyAgIC8vIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICAvLyAgICAgLy8gfVxuICAvLyAgIH0pO1xuICAvLyB9XG4gIHRvZ2dsZVJvdyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZFJvd0luZGV4ID0gdGhpcy5leHBhbmRlZFJvd0luZGV4ID09PSBpbmRleCA/IG51bGwgOiBpbmRleDtcbiAgfVxuXG4gIGFwcGx5SW52b2ljZUZpbHRlcnMoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudD8ubGVuZ3RoKSB7XG4gICAgICAvLyBSZXNldCBtdWx0aS1zZWxlY3QgZmlsdGVycyBiZWZvcmUgZWFjaCBwYXNzIHNvIHJlbW92aW5nIGEgY2hpcCBpblxuICAgICAgLy8gdGhlIGxpYi1maWx0ZXJzIGRyb3Bkb3duIGFjdHVhbGx5IGNsZWFycyB0aGUgYmFja2VuZCBmaWx0ZXIuXG4gICAgICB0aGlzLnBheW1lbnRGaWx0ZXIgPSBbXTtcbiAgICAgIHRoaXMuQXBwcm92YWxGaWx0ZXIgPSBbXTtcbiAgICAgIHRoaXMubW9udGhGaWx0ZXIgPSAnJztcbiAgICAgIHRoaXMueWVhckZpbHRlciA9ICcnO1xuICAgICAgZXZlbnQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIkR1cmF0aW9uXCIpIHtcbiAgICAgICAgICB0aGlzLkR1cmF0aW9uRmlsdGVyID0gZWxlbWVudC5Jc3N1ZXMuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQuRGVzY3JpcHRpb24gPT09IFwiUGF5bWVudCBTdGF0dXNcIikge1xuICAgICAgICAgIGlmKGVsZW1lbnQuSXNzdWVzLmxlbmd0aD4wKXtcbiAgICAgICAgICAgIGVsZW1lbnQuSXNzdWVzLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnBheW1lbnRGaWx0ZXIucHVzaChkYXRhLmlkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIkFwcHJvdmFsIFN0YXR1c1wiKSB7XG4gICAgICAgICAgaWYoZWxlbWVudC5Jc3N1ZXMubGVuZ3RoPjApe1xuICAgICAgICAgICAgZWxlbWVudC5Jc3N1ZXMuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuQXBwcm92YWxGaWx0ZXIucHVzaChkYXRhLmlkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIk1vbnRoXCIpIHtcbiAgICAgICAgICB0aGlzLm1vbnRoRmlsdGVyID0gZWxlbWVudC5Jc3N1ZXM/LmlkIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlllYXJcIikge1xuICAgICAgICAgIHRoaXMueWVhckZpbHRlciA9IGVsZW1lbnQuSXNzdWVzPy5pZCB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDFcbiAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBjbGlja291dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLnRhYmxlLXRpdGxlJykpIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duSW5kZXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG5cblxuXG59XG4iLCI8ZGl2PlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cImludm9pY2V0cmFuc2FjdGlvblwiIGNsYXNzPVwibXQtNCBwYXltZW50aGlzdG9yeVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1jb2xvci1ncmF5LTYwMCBidG4tYWN0aXZlIGJ0bi1hY3RpdmUtc2Vjb25kYXJ5IHB4LTYgcHktMyBtZS0yXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImludm9pY2VwbGFucyA9PT0gJ2ludm9pY2UnID8gJ2FjdGl2ZVBsYW5CdG5wcmltYXJ5JyA6ICdpbmFjdGl2ZVBsYW5CdG4nXCJcbiAgICAgICAgICAgIGRhdGEta3QtcGxhbj1cImludm9pY2VcIiAoY2xpY2spPVwic2VsZWN0SW52b2ljZVBsYW4oJ2ludm9pY2UnKVwiPlxuICAgICAgICAgICAgSW52b2ljZVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1jb2xvci1ncmF5LTYwMCBidG4tYWN0aXZlIGJ0bi1hY3RpdmUtc2Vjb25kYXJ5IHB4LTYgcHktM1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpbnZvaWNlcGxhbnMgPT09ICdjcmVkaXR0cmFuc2FjdGlvbicgPyAnYWN0aXZlUGxhbkJ0bnByaW1hcnknIDogJ2luYWN0aXZlUGxhbkJ0bidcIlxuICAgICAgICAgICAgZGF0YS1rdC1wbGFuPVwiY3JlZGl0dHJhbnNhY3Rpb25cIiAoY2xpY2spPVwic2VsZWN0SW52b2ljZVBsYW4oJ2NyZWRpdHRyYW5zYWN0aW9uJylcIj5cbiAgICAgICAgICAgIENyZWRpdCBUcmFuc2FjdGlvbnNcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+IC0tPlxuICAgIDwhLS0gSGVhZGVyIHN1bW1hcnkgY2FyZHMg4oCUIE91dHN0YW5kaW5nIC8gT3ZlcmR1ZSAvIFBlbmRpbmcgUGF5bWVudC5cbiAgICAgICAgIFRvdGFscyBhcmUgc2NvcGVkIHRvIHRoZSB1c2VyJ3MgZnVsbCBjbGllbnQgYWNjZXNzLCBOT1QgdGhlIGN1cnJlbnRcbiAgICAgICAgIGZpbHRlci9zZWFyY2gvcGFnZSwgc28gdGhleSBzdGF5IHN0YWJsZSBhcyB0aGUgdXNlciBuYXJyb3dzIHRoZSBsaXN0LiAtLT5cbiAgICA8IS0tIFN1Yi10b2dnbGU6IHJlZ3VsYXIgaW52b2ljZXMgdnMgYWR2YW5jZSAoVElOVi0qKSBpbnZvaWNlcy4gLS0+XG4gICAgPGRpdiAqbmdJZj1cImludm9pY2VwbGFucyA9PT0gJ2ludm9pY2UnXCIgY2xhc3M9XCJpbnZvaWNlLXR5cGUtdG9nZ2xlIG10LTMgbXgtMlwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaW52b2ljZVR5cGUgPT09ICdhbGwnID8gJ2ludm9pY2UtdHlwZS1idG4gYWN0aXZlJyA6ICdpbnZvaWNlLXR5cGUtYnRuJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SW52b2ljZVR5cGUoJ2FsbCcpXCI+QWxsIEludm9pY2VzPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpbnZvaWNlVHlwZSA9PT0gJ2FkdmFuY2UnID8gJ2ludm9pY2UtdHlwZS1idG4gYWN0aXZlJyA6ICdpbnZvaWNlLXR5cGUtYnRuJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SW52b2ljZVR5cGUoJ2FkdmFuY2UnKVwiPkFkdmFuY2UgSW52b2ljZTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJpbnZvaWNlcGxhbnMgPT09ICdpbnZvaWNlJ1wiIGNsYXNzPVwicm93IGctMyBtdC0zIG1iLTIgbXgtMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICBPdXRzdGFuZGluZ1xuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaW5mby1pY1wiIG5nYlRvb2x0aXA9XCJUb3RhbCB1bnBhaWQgYmFsYW5jZSBhY3Jvc3MgYWxsIGludm9pY2VzIGluIHRoZSBjdXJyZW50IHZpZXcgKGRvbGxhciBpbnZvaWNlcyBjb252ZXJ0ZWQgdG8g4oK5KS5cIiBwbGFjZW1lbnQ9XCJ0b3BcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiOVwiLz48cGF0aCBkPVwiTTEyIDExdjVNMTIgOGguMDFcIi8+PC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1zcGxpdFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWxhYmVsXCI+RXhjbC4gR1NUPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWNhcmQtdmFsdWVcIj7igrl7eyBpbnZvaWNlQ2FyZHMub3V0c3RhbmRpbmdFeGNsQW1vdW50IHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3BsaXQtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3BsaXQtbGFiZWxcIj5JbmNsLiBHU1Q8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImludm9pY2UtY2FyZC12YWx1ZVwiPuKCuXt7IGludm9pY2VDYXJkcy5vdXRzdGFuZGluZ0luY2xBbW91bnQgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkLXN1YlwiPnt7IGludm9pY2VDYXJkcy5vdXRzdGFuZGluZ0NvdW50IH19IHt7IGludm9pY2VDYXJkcy5vdXRzdGFuZGluZ0NvdW50ID09PSAxID8gJ2ludm9pY2UnIDogJ2ludm9pY2VzJyB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICBPdmVyZHVlXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJpbmZvLWljXCIgbmdiVG9vbHRpcD1cIlVucGFpZCBpbnZvaWNlcyB3aG9zZSBkdWUgZGF0ZSBoYXMgYWxyZWFkeSBwYXNzZWQuXCIgcGxhY2VtZW50PVwidG9wXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjlcIi8+PHBhdGggZD1cIk0xMiAxMXY1TTEyIDhoLjAxXCIvPjwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3BsaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1zcGxpdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImludm9pY2UtY2FyZC1zcGxpdC1sYWJlbFwiPkV4Y2wuIEdTVDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW52b2ljZS1jYXJkLXZhbHVlIHRleHQtZGFuZ2VyXCI+4oK5e3sgaW52b2ljZUNhcmRzLm92ZXJkdWVFeGNsQW1vdW50IHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3BsaXQtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3BsaXQtbGFiZWxcIj5JbmNsLiBHU1Q8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImludm9pY2UtY2FyZC12YWx1ZSB0ZXh0LWRhbmdlclwiPuKCuXt7IGludm9pY2VDYXJkcy5vdmVyZHVlSW5jbEFtb3VudCB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3ViXCI+e3sgaW52b2ljZUNhcmRzLm92ZXJkdWVDb3VudCB9fSB7eyBpbnZvaWNlQ2FyZHMub3ZlcmR1ZUNvdW50ID09PSAxID8gJ2ludm9pY2UnIDogJ2ludm9pY2VzJyB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICBQZW5kaW5nIFBheW1lbnRcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImluZm8taWNcIiBuZ2JUb29sdGlwPVwiQXBwcm92ZWQgaW52b2ljZXMgdGhhdCBhcmUgc3RpbGwgYXdhaXRpbmcgcGF5bWVudC5cIiBwbGFjZW1lbnQ9XCJ0b3BcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiOVwiLz48cGF0aCBkPVwiTTEyIDExdjVNMTIgOGguMDFcIi8+PC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1zcGxpdFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWxhYmVsXCI+RXhjbC4gR1NUPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWNhcmQtdmFsdWUgdGV4dC13YXJuaW5nXCI+4oK5e3sgaW52b2ljZUNhcmRzLnBlbmRpbmdQYXltZW50RXhjbEFtb3VudCB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWxhYmVsXCI+SW5jbC4gR1NUPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWNhcmQtdmFsdWUgdGV4dC13YXJuaW5nXCI+4oK5e3sgaW52b2ljZUNhcmRzLnBlbmRpbmdQYXltZW50SW5jbEFtb3VudCB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3ViXCI+e3sgaW52b2ljZUNhcmRzLnBlbmRpbmdQYXltZW50Q291bnQgfX0ge3sgaW52b2ljZUNhcmRzLnBlbmRpbmdQYXltZW50Q291bnQgPT09IDEgPyAnaW52b2ljZScgOiAnaW52b2ljZXMnIH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcGF5bWVudGhpc3RvcnkgYm9yZGVyLTBcIj5cbiAgICAgICA8ZGl2ICpuZ0lmPVwiaW52b2ljZXBsYW5zID09PSAnY3JlZGl0dHJhbnNhY3Rpb24nXCIgY2xhc3M9XCJiaWxsaW5naGVhZGVyIG1zLTEgbXQtNlwiPkNyZWRpdCBUcmFuc2FjdGlvbnM8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhciBtcy1hdXRvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBpbnZvaWNlc2VhcmNoIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgc2VhcmNoLWljLWNlbnRlciBtcy0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJsZW5cIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IGludm9pY2VzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoY2hhbmdlKT1cInNlYXJjaEZpZWxkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlYXJjaERpc2FibGVkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1maWx0ZXJzICpuZ0lmPVwiaW52b2ljZXBsYW5zID09PSAnaW52b2ljZSdcIiBbZGF0YU9iamVjdF09XCJpbnZvaWNlRmlsdGVyT2JqZWN0XCIgKGFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5SW52b2ljZUZpbHRlcnMoJGV2ZW50KVwiPjwvbGliLWZpbHRlcnM+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibWUtMyAgbW9udGh3aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duIGludmhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBpbnZoZWFkZXJcIiBhcmlhLWxhYmVsPVwiRGVmYXVsdCBzZWxlY3QgZXhhbXBsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXNGaWx0ZXJcIiAoY2hhbmdlKT1cImludm9pY2VGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY3VycmVudFwiPkN1cnJlbnQgTW9udGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByZXZcIj5QcmV2aW91cyBNb250aDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGFzdFwiPkxhc3QgMyBNb250aHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIChjbGljayk9XCJjcmVkaXRub3RlKClcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSAgYnRuIGFsaWduLWl0ZW1zLWVuZCBpbnZoZWFkZXIgdGV4dC1ub3dyYXAgbWUtNFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nICYmIChncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5zZXR0aW5nc19wYXltZW50U3Vic2NyaXB0aW9uc19pc0VkaXRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWludm9pY2VMaXN0Lmxlbmd0aFwiPjxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjQ5OTMgNC4xNjY3NVYxNS44MzM0TTQuNjY2MDIgMTAuMDAwMUgxNi4zMzI3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4+Q3JlZGl0IE5vdGU8L3NwYW4+IDwvYnV0dG9uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRXhwb3J0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gYWxpZ24taXRlbXMtZW5kIHRleHQtbm93cmFwIGludmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImludm9pY2VwbGFucyA9PT0gJ2ludm9pY2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaW52b2ljZUxpc3QubGVuZ3RoXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+PC9zcGFuPiBFeHBvcnQ8L2J1dHRvbj5cblxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkV4cG9ydFRyYW5zYWN0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gYWxpZ24taXRlbXMtZW5kIHRleHQtbm93cmFwIGludmhlYWRlciBtcy00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW52b2ljZXBsYW5zID09PSAnY3JlZGl0dHJhbnNhY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdHJhbnNhY3Rpb25MaXN0Lmxlbmd0aFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMlwiPjwvc3Bhbj4gRXhwb3J0PC9idXR0b24+XG5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJpbnZvaWNlcGxhbnMgPT09ICdpbnZvaWNlJ1wiPlxuXG4gICAgICAgIDwhLS0gQnVsayBhY3Rpb25zIHRvb2xiYXIgKHN0YXR1cyBmaWx0ZXIgdGFicyByZW1vdmVkIOKAlCBzdGF0dXNlcyBhcmVcbiAgICAgICAgICAgICByZWFjaGFibGUgdmlhIHRoZSBGaWx0ZXIgcG9wb3ZlciwgbWF0Y2hpbmcgdGhlIHByb3RvdHlwZSkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBwYXltZW50aGlzdG9yeSBib3JkZXItMCBweC0wXCIgKm5nSWY9XCJzZWxlY3RlZEludm9pY2VzLnNpemUgPiAwXCI+XG4gICAgICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRvd25sb2FkU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi1zbSBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEludm9pY2VzLnNpemUgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidWxrRG93bmxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU01LjgzMzMzIDguMzMzMzNMMTAgMTIuNU0xMCAxMi41TDE0LjE2NjcgOC4zMzMzM00xMCAxMi41VjIuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiICpuZ0lmPVwiIWJ1bGtEb3dubG9hZGluZ1wiPkRvd25sb2FkIFNlbGVjdGVkICh7eyBzZWxlY3RlZEludm9pY2VzLnNpemUgfX0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0xXCIgKm5nSWY9XCJidWxrRG93bmxvYWRpbmdcIj5QcmVwYXJpbmcgWklQLi4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFwcHJvdmVTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1zbSBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEludm9pY2VzLnNpemUgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidWxrQXBwcm92aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE2LjY2NjcgNUw3LjUwMDAxIDE0LjE2NjdMMy4zMzMzNCAxMFwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0xXCIgKm5nSWY9XCIhYnVsa0FwcHJvdmluZ1wiPkFwcHJvdmUgU2VsZWN0ZWQgKHt7IHNlbGVjdGVkSW52b2ljZXMuc2l6ZSB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTFcIiAqbmdJZj1cImJ1bGtBcHByb3ZpbmdcIj5BcHByb3ZpbmcuLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbnZvaWNlTG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW52b2ljZU5vRGF0YVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgdy0yNVwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YS5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gaW52b2ljZSB0YWJsZSBzdGFydCAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpbnZvaWNlTG9hZGluZyAmJiAhaW52b2ljZU5vRGF0YVwiIGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWNjb3JkaW9uIHRhYmxlIGJvdHRvbS1ib3JkZXIgaW52b2l2ZXRhYmxlIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogNDBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxcIiAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgW2Rpc2FibGVkXT1cImludm9pY2VMaXN0Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdjbGllbnROYW1lJylcIiA+QnJhbmQgTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NsaWVudE5hbWUnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnY2xpZW50TmFtZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2NvbXBhbnlOYW1lJylcIj5SZWdpc3RlcmVkIE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdjb21wYW55TmFtZScgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NvbXBhbnlOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdpbnZvaWNlJylcIiA+SW52b2ljZSAjXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnaW52b2ljZScgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdpbnZvaWNlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnYmlsbGluZ0RhdGUnKVwiPkJpbGxpbmcgRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2JpbGxpbmdEYXRlJyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnYmlsbGluZ0RhdGUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2R1ZURhdGUnKVwiPkR1ZSBTdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdkdWVEYXRlJyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnZHVlRGF0ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+R3JvdXAgTmFtZTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnYW1vdW50JylcIj5BbW91bnQgRXhjbC4gR1NUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnYW1vdW50JyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnYW1vdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdnc3RBbW91bnQnKVwiPkdTVCBBbW91bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdnc3RBbW91bnQnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdnc3RBbW91bnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3RvdGFsQW1vdW50JylcIj5BbW91bnQgSW5jbC4gR1NUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAndG90YWxBbW91bnQnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICd0b3RhbEFtb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+U3RvcmVzPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QYXltZW50IFN0YXR1czwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+QXBwcm92YWwgU3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPkFjdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaW52b2ljZSBvZiBpbnZvaWNlTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVJbnZvaWNlU2VsZWN0KGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSB0YWJsZS10aXRsZS1wcmltYXJ5IGQtZmxleCBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtMzVweCBzeW1ib2wtY2lyY2xlIG1lLTJcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sLWxhYmVsIHRleHQtc3ltYm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaW52b2ljZT8ubG9nb1wiIGNsYXNzPVwic3ltYm9sLWxhYmVsIGJnLWxpZ2h0LXByaW1hcnkgdGV4dC1zeW1ib2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpbnZvaWNlPy5jbGllbnROYW1lPy5jaGFyQXQoMCl9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAoZXJyb3IpOiBicm9rZW4vZXhwaXJlZCBsb2dvIFVSTCBmYWxscyBiYWNrIHRvIHRoZSBsZXR0ZXIgYXZhdGFyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpbnZvaWNlPy5sb2dvXCIgY2xhc3M9XCJsb2dvLWltZ1wiIFtzcmNdPVwiaW52b2ljZT8ubG9nb1wiIChlcnJvcik9XCJpbnZvaWNlLmxvZ28gPSAnJ1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pjx1IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidmlld0JyYW5kKGludm9pY2UpXCI+IHt7aW52b2ljZT8uY2xpZW50TmFtZSB8IHVwcGVyY2FzZX19PC91PjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgcmVnaXN0ZXJlZC1uYW1lXCI+e3sgaW52b2ljZT8uY29tcGFueU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIHRhYmxlLXRpdGxlLXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpbnZvaWNlLWxpbmtcIiAoY2xpY2spPVwib3Blbkludm9pY2VQcmV2aWV3KGludm9pY2UpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj57eyBpbnZvaWNlPy5pbnZvaWNlIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBpbnZvaWNlPy5iaWxsaW5nRGF0ZSB8IGRhdGU6ICdkZCBNTU0sIHl5eXknIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiIFtuZ0NsYXNzXT1cImdldER1ZVN0YXR1c0NsYXNzKGludm9pY2UpXCI+e3sgZ2V0RHVlU3RhdHVzKGludm9pY2UpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IGludm9pY2U/Lmdyb3VwTmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBpbnZvaWNlQ3VycmVuY3lTeW1ib2woaW52b2ljZSkgfX0ge3sgaW52b2ljZT8uYW1vdW50IHwgbnVtYmVyOmFtb3VudEZvcm1hdChpbnZvaWNlKTonZW4tSU4nIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiICpuZ0lmPVwiaXNHc3RBcHBsaWNhYmxlKGludm9pY2UpOyBlbHNlIG5vR3N0XCI+e3sgaW52b2ljZUN1cnJlbmN5U3ltYm9sKGludm9pY2UpIH19IHt7IGdzdEFtb3VudChpbnZvaWNlKSB8IG51bWJlcjphbW91bnRGb3JtYXQoaW52b2ljZSk6J2VuLUlOJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9Hc3Q+PGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+4oCUPC9kaXY+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+PHN0cm9uZz57eyBpbnZvaWNlQ3VycmVuY3lTeW1ib2woaW52b2ljZSkgfX0ge3sgaW52b2ljZT8udG90YWxBbW91bnQgfCBudW1iZXI6YW1vdW50Rm9ybWF0KGludm9pY2UpOidlbi1JTicgfX08L3N0cm9uZz48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgaW52b2ljZT8uc3RvcmVzIH19IHt7IGludm9pY2U/LnN0b3JlcyA9PT0gMSA/ICdTdG9yZScgOiAnU3RvcmVzJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJnZXRQYXltZW50UGlsbENsYXNzKGludm9pY2UpXCI+e3sgZ2V0UGF5bWVudExhYmVsKGludm9pY2UpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNQZW5kaW5nKGludm9pY2UpXCIgY2xhc3M9XCJwZW5kaW5nLW5vdGUgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpbnZvaWNlQ3VycmVuY3lTeW1ib2woaW52b2ljZSkgfX17eyBwZW5kaW5nQW1vdW50KGludm9pY2UpIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fSBwZW5kaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImdldEFwcHJvdmFsUGlsbENsYXNzKGludm9pY2UpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVmlldyBhY3Rpdml0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW52b2ljZUxvZ3MoaW52b2ljZSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPnt7IGdldEFwcHJvdmFsTGFiZWwoaW52b2ljZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBkLWZsZXgganVzdGlmeS1jb250ZW50LWFyb3VuZCBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFZGl0IGludm9pY2UgKGxvY2tlZCB3aGVuIGFwcHJvdmVkKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiFpc0ludm9pY2VMb2NrZWQoaW52b2ljZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxvY2tlZC1hY3Rpb25dPVwiaXNJbnZvaWNlTG9ja2VkKGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIhaXNJbnZvaWNlTG9ja2VkKGludm9pY2UpICYmIGVkaXRJbnZvaWNlKGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImlzSW52b2ljZUxvY2tlZChpbnZvaWNlKSA/ICdBcHByb3ZlZCBpbnZvaWNlIOKAlCBlZGl0aW5nIGlzIGRpc2FibGVkJyA6ICdFZGl0IEludm9pY2UnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCIgZmlsbD1cIndoaXRlXCIgc3Ryb2tlPVwiI0QwRDVERFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI2LjUgMTQuNUwyOS41IDE3LjVNMTQuNSAyOS41SDE3LjVMMjggMTlDMjguMzk3OCAxOC42MDIyIDI4LjYyMTMgMTguMDY2MyAyOC42MjEzIDE3LjVDMjguNjIxMyAxNi45MzM3IDI4LjM5NzggMTYuMzk3OCAyOCAxNkMyNy42MDIyIDE1LjYwMjIgMjcuMDY2MyAxNS4zNzg3IDI2LjUgMTUuMzc4N0MyNS45MzM3IDE1LjM3ODcgMjUuMzk3OCAxNS42MDIyIDI1IDE2TDE0LjUgMjYuNVYyOS41WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQXBwcm92ZSAoc3RhZ2UtYXdhcmUpIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFwcHJvdmVJbnZvaWNlKGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImdldEFwcHJvdmVUb29sdGlwKGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuQXBwcm92ZShpbnZvaWNlLCB1c2VyQWNjZXNzKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzE2NDc4XzQzMDQwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE2NDc4XzQzMDQwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMwLjMzNDYgMjAuMjMzNVYyMS4wMDAyQzMwLjMzMzYgMjIuNzk3MiAyOS43NTE3IDI0LjU0NTggMjguNjc1NyAyNS45ODUxQzI3LjU5OTggMjcuNDI0NCAyNi4wODc0IDI4LjQ3NzMgMjQuMzY0MSAyOC45ODY4QzIyLjY0MDggMjkuNDk2MyAyMC43OTkgMjkuNDM1MSAxOS4xMTM0IDI4LjgxMjRDMTcuNDI3NyAyOC4xODk2IDE1Ljk4ODUgMjcuMDM4NiAxNS4wMTA0IDI1LjUzMTFDMTQuMDMyNCAyNC4wMjM2IDEzLjU2NzggMjIuMjQwMyAxMy42ODYgMjAuNDQ3MUMxMy44MDQzIDE4LjY1NCAxNC40OTkgMTYuOTQ3MiAxNS42NjY1IDE1LjU4MTFDMTYuODM0MSAxNC4yMTUxIDE4LjQxMiAxMy4yNjMgMjAuMTY0OCAxMi44NjdDMjEuOTE3NiAxMi40NzEgMjMuNzUxNSAxMi42NTIyIDI1LjM5MyAxMy4zODM1TTMwLjMzNDYgMTQuMzMzNUwyMi4wMDEzIDIyLjY3NTJMMTkuNTAxMyAyMC4xNzUyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8xNjQ3OF80MzA0MFwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzE2NDc4XzQzMDQwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd18xNjQ3OF80MzA0MFwiIHJlc3VsdD1cInNoYXBlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE2NDc4XzQzMDQwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMiAxMSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwiaW52b2ljZS5zdGF0dXM9PT0nYXBwcm92ZWQnICYmIChncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5UYW5nb0FkbWluX2ludm9pY2VBcHByb3ZhbF9pc0VkaXRcIj4gPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIiB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzE2NjMwXzgwNjIpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0VBRUNGMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTY2MzBfODA2MilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMC4zMzQ2IDIwLjIzMzVWMjEuMDAwMkMzMC4zMzM2IDIyLjc5NzIgMjkuNzUxNyAyNC41NDU4IDI4LjY3NTcgMjUuOTg1MUMyNy41OTk4IDI3LjQyNDQgMjYuMDg3NCAyOC40NzczIDI0LjM2NDEgMjguOTg2OEMyMi42NDA4IDI5LjQ5NjMgMjAuNzk5IDI5LjQzNTEgMTkuMTEzNCAyOC44MTI0QzE3LjQyNzcgMjguMTg5NiAxNS45ODg1IDI3LjAzODYgMTUuMDEwNCAyNS41MzExQzE0LjAzMjQgMjQuMDIzNiAxMy41Njc4IDIyLjI0MDMgMTMuNjg2IDIwLjQ0NzFDMTMuODA0MyAxOC42NTQgMTQuNDk5IDE2Ljk0NzIgMTUuNjY2NSAxNS41ODExQzE2LjgzNDEgMTQuMjE1MSAxOC40MTIgMTMuMjYzIDIwLjE2NDggMTIuODY3QzIxLjkxNzYgMTIuNDcxIDIzLjc1MTUgMTIuNjUyMiAyNS4zOTMgMTMuMzgzNU0zMC4zMzQ2IDE0LjMzMzVMMjIuMDAxMyAyMi42NzUyTDE5LjUwMTMgMjAuMTc1MlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0QwRDVERFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMTY2MzBfODA2MlwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzE2NjMwXzgwNjJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzE2NjMwXzgwNjJcIiByZXN1bHQ9XCJzaGFwZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNjYzMF84MDYyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMiAxMSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29BZG1pbl9pbnZvaWNlQXBwcm92YWxfaXNFZGl0XCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZWdlbmVyYXRlSW52b2ljZShpbnZvaWNlKVwiPjxzdmcgd2lkdGg9XCI0NFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNDRcIiB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiMzM0I1RkZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzE1NTMwXzYwMzk1KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMS4xNjU0IDE0LjMzMzNWMTkuMzMzM00zMS4xNjU0IDE5LjMzMzNIMjYuMTY1NE0zMS4xNjU0IDE5LjMzMzNMMjcuMjk4NyAxNS43QzI2LjQwMzEgMTQuODAzOSAyNS4yOTUxIDE0LjE0OTMgMjQuMDc4IDEzLjc5NzNDMjIuODYxIDEzLjQ0NTMgMjEuNTc0NiAxMy40MDczIDIwLjMzODkgMTMuNjg2OUMxOS4xMDMzIDEzLjk2NjUgMTcuOTU4NSAxNC41NTQ1IDE3LjAxMTYgMTUuMzk2MkMxNi4wNjQ2IDE2LjIzNzggMTUuMzQ2MyAxNy4zMDU2IDE0LjkyMzcgMTguNU0xMi44MzIgMjcuNjY2NlYyMi42NjY2TTEyLjgzMiAyMi42NjY2SDE3LjgzMk0xMi44MzIgMjIuNjY2NkwxNi42OTg3IDI2LjNDMTcuNTk0MyAyNy4xOTYxIDE4LjcwMjMgMjcuODUwNiAxOS45MTk0IDI4LjIwMjdDMjEuMTM2NCAyOC41NTQ3IDIyLjQyMjggMjguNTkyNyAyMy42NTg1IDI4LjMxMzFDMjQuODk0MSAyOC4wMzM1IDI2LjAzODkgMjcuNDQ1NSAyNi45ODU4IDI2LjYwMzhDMjcuOTMyOCAyNS43NjIxIDI4LjY1MTEgMjQuNjk0MyAyOS4wNzM3IDIzLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMTU1MzBfNjAzOTVcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18xNTUzMF82MDM5NVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMTU1MzBfNjAzOTVcIiByZXN1bHQ9XCJzaGFwZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LlRhbmdvQWRtaW5faW52b2ljZUFwcHJvdmFsX2lzRWRpdCAmJiBpbnZvaWNlPy5zdGF0dXMgPT09ICdhcHByb3ZlZCcgJiYgaW52b2ljZT8ucGF5bWVudFN0YXR1cyAhPT0gJ3BhaWQnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJwYXltZW50c3RhdHVzQ2hhbmdlKGludm9pY2UpXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCb3JkZXIgUmVjdGFuZ2xlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMi41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjMzNCNUZGXCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQmFja2dyb3VuZCBSZWN0YW5nbGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIyLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5uZXIgSWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMTMsIDExKVwiPiA8IS0tIEFkanVzdGVkIHBvc2l0aW9uIGZvciBjZW50ZXJpbmcgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMi45OTg3IDguMDAwNjVWNi4zMzM5OEMyLjk5ODcgNS4wMDc5IDMuNTI1NDggMy43MzYxMyA0LjQ2MzE2IDIuNzk4NDVDNS40MDA4NSAxLjg2MDc3IDYuNjcyNjIgMS4zMzM5OCA3Ljk5ODcgMS4zMzM5OEM5LjMyNDc4IDEuMzMzOTggMTAuNTk2NiAxLjg2MDc3IDExLjUzNDIgMi43OTg0NUMxMi40NzE5IDMuNzM2MTMgMTIuOTk4NyA1LjAwNzkgMTIuOTk4NyA2LjMzMzk4VjguMDAwNjVNMS4zMzIwMyAxMy4wMDA3QzEuMzMyMDMgMTMuNDQyNyAxLjUwNzYzIDEzLjg2NjYgMS44MjAxOSAxNC4xNzkyQzIuMTMyNzUgMTQuNDkxNyAyLjU1NjY3IDE0LjY2NzMgMi45OTg3IDE0LjY2NzNDMy40NDA3MyAxNC42NjczIDMuODY0NjUgMTQuNDkxNyA0LjE3NzIxIDE0LjE3OTJDNC40ODk3NyAxMy44NjY2IDQuNjY1MzYgMTMuNDQyNyA0LjY2NTM2IDEzLjAwMDdDNC42NjUzNiAxMi41NTg2IDQuNDg5NzcgMTIuMTM0NyA0LjE3NzIxIDExLjgyMjFDMy44NjQ2NSAxMS41MDk2IDMuNDQwNzMgMTEuMzM0IDIuOTk4NyAxMS4zMzRDMi41NTY2NyAxMS4zMzQgMi4xMzI3NSAxMS41MDk2IDEuODIwMTkgMTEuODIyMUMxLjUwNzYzIDEyLjEzNDcgMS4zMzIwMyAxMi41NTg2IDEuMzMyMDMgMTMuMDAwN1pNMTEuMzMyIDEzLjAwMDdDMTEuMzMyIDEzLjQ0MjcgMTEuNTA3NiAxMy44NjY2IDExLjgyMDIgMTQuMTc5MkMxMi4xMzI3IDE0LjQ5MTcgMTIuNTU2NyAxNC42NjczIDEyLjk5ODcgMTQuNjY3M0MxMy40NDA3IDE0LjY2NzMgMTMuODY0NiAxNC40OTE3IDE0LjE3NzIgMTQuMTc5MkMxNC40ODk4IDEzLjg2NjYgMTQuNjY1NCAxMy40NDI3IDE0LjY2NTQgMTMuMDAwN0MxNC42NjU0IDEyLjU1ODYgMTQuNDg5OCAxMi4xMzQ3IDE0LjE3NzIgMTEuODIyMUMxMy44NjQ2IDExLjUwOTYgMTMuNDQwNyAxMS4zMzQgMTIuOTk4NyAxMS4zMzRDMTIuNTU2NyAxMS4zMzQgMTIuMTMyNyAxMS41MDk2IDExLjgyMDIgMTEuODIyMUMxMS41MDc2IDEyLjEzNDcgMTEuMzMyIDEyLjU1ODYgMTEuMzMyIDEzLjAwMDdaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuNSA1LjVMMTMgOEwxNS41IDUuNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImRvd25sb2FkSW52b2ljZShpbnZvaWNlKVwiIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiZG93bmxvYWRJbnZvaWNlKGludm9pY2UpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjxzdmcgd2lkdGg9XCI0NFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNDRcIiB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiMzM0I1RkZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzE1NTMwXzYwMzk2KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yOS41IDIzLjVWMjYuODMzM0MyOS41IDI3LjI3NTQgMjkuMzI0NCAyNy42OTkzIDI5LjAxMTggMjguMDExOEMyOC42OTkzIDI4LjMyNDQgMjguMjc1NCAyOC41IDI3LjgzMzMgMjguNUgxNi4xNjY3QzE1LjcyNDYgMjguNSAxNS4zMDA3IDI4LjMyNDQgMTQuOTg4MiAyOC4wMTE4QzE0LjY3NTYgMjcuNjk5MyAxNC41IDI3LjI3NTQgMTQuNSAyNi44MzMzVjIzLjVNMTcuODMzMyAxOS4zMzMzTDIyIDIzLjVNMjIgMjMuNUwyNi4xNjY3IDE5LjMzMzNNMjIgMjMuNVYxMy41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzE1NTMwXzYwMzk2XCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMTU1MzBfNjAzOTZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzE1NTMwXzYwMzk2XCIgcmVzdWx0PVwic2hhcGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2FuY2VsIGludm9pY2UgKGFwcHJvdmVkICsgdW5wYWlkIG9ubHkpIOKAlCByZXBsYWNlcyB0aGUgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2xvdCBmb3IgY2FuY2VsbGFibGUgcm93cy4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2FuQ2FuY2VsSW52b2ljZShpbnZvaWNlKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEludm9pY2UoaW52b2ljZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIkNhbmNlbCBJbnZvaWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCIgZmlsbD1cIndoaXRlXCIgc3Ryb2tlPVwiI0QwRDVERFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI4LjUgMTUuNUwxNS41IDI4LjVNMTUuNSAxNS41TDI4LjUgMjguNVwiIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGVsZXRlIGludm9pY2UgKGxvY2tlZCB3aGVuIGFwcHJvdmVkL2NhbmNlbGxlZCkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNhbkNhbmNlbEludm9pY2UoaW52b2ljZSlcIiBbY2xhc3MuY3Vyc29yLXBvaW50ZXJdPVwiIWlzSW52b2ljZUxvY2tlZChpbnZvaWNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubG9ja2VkLWFjdGlvbl09XCJpc0ludm9pY2VMb2NrZWQoaW52b2ljZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiFpc0ludm9pY2VMb2NrZWQoaW52b2ljZSkgJiYgZGVsZXRlSW52b2ljZShpbnZvaWNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJpc0ludm9pY2VMb2NrZWQoaW52b2ljZSkgPyAnQXBwcm92ZWQgaW52b2ljZSDigJQgZGVsZXRlIGlzIGRpc2FibGVkJyA6ICdEZWxldGUgSW52b2ljZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBmaWxsPVwid2hpdGVcIiBzdHJva2U9XCIjRDBENUREXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcgMjFIMjdNMTUuNSAxN0gyOC41TTE5LjUgMjVIMjQuNU0xNi4xNjY3IDI4LjVIMjcuODMzM0MyOC43NTM4IDI4LjUgMjkuNSAyNy43NTM4IDI5LjUgMjYuODMzM1YxNS4xNjY3QzI5LjUgMTQuMjQ2MiAyOC43NTM4IDEzLjUgMjcuODMzMyAxMy41SDE2LjE2NjdDMTUuMjQ2MiAxMy41IDE0LjUgMTQuMjQ2MiAxNC41IDE1LjE2NjdWMjYuODMzM0MxNC41IDI3Ljc1MzggMTUuMjQ2MiAyOC41IDE2LjE2NjcgMjguNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGZpbGw9XCJub25lXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWludm9pY2VMb2FkaW5nICYmICFpbnZvaWNlTm9EYXRhXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIGNsYXNzPVwidGV4dC1zdGFydFwiIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCIgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIiAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiaW52b2ljZXBsYW5zID09PSAnY3JlZGl0dHJhbnNhY3Rpb24nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmFuc2FjdGlvbkxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmFuc2FjdGlvbk5vRGF0YVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgdy0yNVwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YS5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgKm5nSWY9XCIhdHJhbnNhY3Rpb25Mb2FkaW5nICYmICF0cmFuc2FjdGlvbk5vRGF0YVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWNjb3JkaW9uIHRhYmxlIGJvdHRvbS1ib3JkZXIgXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YVRyYW5zKCdjbGllbnROYW1lJylcIiA+Q2xpZW50IE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWV0cmFuID09PSAnY2xpZW50TmFtZScgJiYgc29ydEJ5dHJhbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1ldHJhbiA9PT0gJ2NsaWVudE5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhVHJhbnMoJ2NyZWRpdCcpXCIgPkJhbGFuY2UgQ3JlZGl0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWV0cmFuID09PSAnY3JlZGl0JyAmJiBzb3J0Qnl0cmFuID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1ldHJhbiA9PT0gJ2NyZWRpdCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LlRhbmdvQWRtaW5faW52b2ljZUFwcHJvdmFsX2lzRWRpdFwiIHNjb3BlPVwiY29sXCI+QWN0aW9uPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdHJhbnNhY3Rpb24gb2YgdHJhbnNhY3Rpb25MaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgdGFibGUtdGl0bGUtcHJpbWFyeSBkLWZsZXggXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ltYm9sIHN5bWJvbC0zNXB4IHN5bWJvbC1jaXJjbGUgbWUtMlwiPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sLWxhYmVsIHRleHQtc3ltYm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRyYW5zYWN0aW9uPy5sb2dvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sLWxhYmVsIGJnLWxpZ2h0LXByaW1hcnkgdGV4dC1zeW1ib2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dHJhbnNhY3Rpb24/LmNsaWVudE5hbWU/LmNoYXJBdCgwKX19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInRyYW5zYWN0aW9uPy5sb2dvXCIgY2xhc3M9XCJsb2dvLWltZ1wiIFtzcmNdPVwidHJhbnNhY3Rpb24/LmxvZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cInRyYW5zYWN0aW9uLmxvZ28gPSAnJ1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHU+IHt7dHJhbnNhY3Rpb24/LmNsaWVudE5hbWUgfCB1cHBlcmNhc2V9fTwvdT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRyYW5zYWN0aW9uPy5jdXJyZW5jeVR5cGUgPT09ICdpbnInXCI+4oK5PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0cmFuc2FjdGlvbj8uY3VycmVuY3lUeXBlID09PSAnZG9sbGFyJ1wiPiQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RyYW5zYWN0aW9uPy5jcmVkaXQgfCBudW1iZXI6JzEuMC0yJzonZW4tSU4nfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29BZG1pbl9pbnZvaWNlQXBwcm92YWxfaXNFZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bihpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWVuZCBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE2NTIyXzU3MjU0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS45OTg3IDIyLjUwMDZDMjEuMzc5NCAyMi41MDA2IDIyLjQ5ODcgMjEuMzgxNCAyMi40OTg3IDIwLjAwMDdDMjIuNDk4NyAxOC42MTk5IDIxLjM3OTQgMTcuNTAwNyAxOS45OTg3IDE3LjUwMDdDMTguNjE4IDE3LjUwMDcgMTcuNDk4NyAxOC42MTk5IDE3LjQ5ODcgMjAuMDAwN0MxNy40OTg3IDIxLjM4MTQgMTguNjE4IDIyLjUwMDYgMTkuOTk4NyAyMi41MDA2WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yNi4xNjU0IDIyLjUwMDZDMjYuMDU0NCAyMi43NTIgMjYuMDIxMyAyMy4wMzA4IDI2LjA3MDQgMjMuMzAxMUMyNi4xMTk0IDIzLjU3MTUgMjYuMjQ4MiAyMy44MjA5IDI2LjQ0MDQgMjQuMDE3M0wyNi40OTA0IDI0LjA2NzNDMjYuNjQ1MyAyNC4yMjIxIDI2Ljc2ODMgMjQuNDA1OSAyNi44NTIxIDI0LjYwODJDMjYuOTM2IDI0LjgxMDYgMjYuOTc5MiAyNS4wMjc1IDI2Ljk3OTIgMjUuMjQ2NUMyNi45NzkyIDI1LjQ2NTUgMjYuOTM2IDI1LjY4MjQgMjYuODUyMSAyNS44ODQ3QzI2Ljc2ODMgMjYuMDg3IDI2LjY0NTMgMjYuMjcwOSAyNi40OTA0IDI2LjQyNTZDMjYuMzM1NiAyNi41ODA2IDI2LjE1MTggMjYuNzAzNSAyNS45NDk0IDI2Ljc4NzRDMjUuNzQ3MSAyNi44NzEzIDI1LjUzMDIgMjYuOTE0NSAyNS4zMTEyIDI2LjkxNDVDMjUuMDkyMiAyNi45MTQ1IDI0Ljg3NTMgMjYuODcxMyAyNC42NzMgMjYuNzg3NEMyNC40NzA2IDI2LjcwMzUgMjQuMjg2OCAyNi41ODA2IDI0LjEzMiAyNi40MjU2TDI0LjA4MiAyNi4zNzU2QzIzLjg4NTYgMjYuMTgzNSAyMy42MzYyIDI2LjA1NDcgMjMuMzY1OSAyNi4wMDU2QzIzLjA5NTUgMjUuOTU2NiAyMi44MTY3IDI1Ljk4OTcgMjIuNTY1NCAyNi4xMDA2QzIyLjMxODkgMjYuMjA2MyAyMi4xMDg3IDI2LjM4MTcgMjEuOTYwNiAyNi42MDUzQzIxLjgxMjYgMjYuODI4OCAyMS43MzMxIDI3LjA5MDggMjEuNzMyIDI3LjM1OVYyNy41MDA2QzIxLjczMiAyNy45NDI3IDIxLjU1NjQgMjguMzY2NiAyMS4yNDM5IDI4LjY3OTJDMjAuOTMxMyAyOC45OTE3IDIwLjUwNzQgMjkuMTY3MyAyMC4wNjU0IDI5LjE2NzNDMTkuNjIzMyAyOS4xNjczIDE5LjE5OTQgMjguOTkxNyAxOC44ODY5IDI4LjY3OTJDMTguNTc0MyAyOC4zNjY2IDE4LjM5ODcgMjcuOTQyNyAxOC4zOTg3IDI3LjUwMDZWMjcuNDI1NkMxOC4zOTIyIDI3LjE0OTggMTguMzAzIDI2Ljg4MjMgMTguMTQyNSAyNi42NTc5QzE3Ljk4MTkgMjYuNDMzNSAxNy43NTc2IDI2LjI2MjYgMTcuNDk4NyAyNi4xNjczQzE3LjI0NzQgMjYuMDU2NCAxNi45Njg1IDI2LjAyMzMgMTYuNjk4MiAyNi4wNzIzQzE2LjQyNzkgMjYuMTIxMyAxNi4xNzg0IDI2LjI1MDIgMTUuOTgyIDI2LjQ0MjNMMTUuOTMyIDI2LjQ5MjNDMTUuNzc3MiAyNi42NDczIDE1LjU5MzQgMjYuNzcwMiAxNS4zOTExIDI2Ljg1NDFDMTUuMTg4OCAyNi45MzggMTQuOTcxOSAyNi45ODExIDE0Ljc1MjkgMjYuOTgxMUMxNC41MzM4IDI2Ljk4MTEgMTQuMzE3IDI2LjkzOCAxNC4xMTQ2IDI2Ljg1NDFDMTMuOTEyMyAyNi43NzAyIDEzLjcyODUgMjYuNjQ3MyAxMy41NzM3IDI2LjQ5MjNDMTMuNDE4NyAyNi4zMzc1IDEzLjI5NTggMjYuMTUzNyAxMy4yMTE5IDI1Ljk1MTRDMTMuMTI4MSAyNS43NDkxIDEzLjA4NDkgMjUuNTMyMiAxMy4wODQ5IDI1LjMxMzFDMTMuMDg0OSAyNS4wOTQxIDEzLjEyODEgMjQuODc3MiAxMy4yMTE5IDI0LjY3NDlDMTMuMjk1OCAyNC40NzI2IDEzLjQxODcgMjQuMjg4OCAxMy41NzM3IDI0LjEzNEwxMy42MjM3IDI0LjA4NEMxMy44MTU4IDIzLjg4NzYgMTMuOTQ0NyAyMy42MzgxIDEzLjk5MzcgMjMuMzY3OEMxNC4wNDI3IDIzLjA5NzUgMTQuMDA5NiAyMi44MTg3IDEzLjg5ODcgMjIuNTY3M0MxMy43OTMxIDIyLjMyMDggMTMuNjE3NyAyMi4xMTA2IDEzLjM5NDEgMjEuOTYyNkMxMy4xNzA1IDIxLjgxNDUgMTIuOTA4NSAyMS43MzUxIDEyLjY0MDQgMjEuNzM0SDEyLjQ5ODdDMTIuMDU2NyAyMS43MzQgMTEuNjMyNyAyMS41NTg0IDExLjMyMDIgMjEuMjQ1OEMxMS4wMDc2IDIwLjkzMzMgMTAuODMyIDIwLjUwOTMgMTAuODMyIDIwLjA2NzNDMTAuODMyIDE5LjYyNTMgMTEuMDA3NiAxOS4yMDE0IDExLjMyMDIgMTguODg4OEMxMS42MzI3IDE4LjU3NjIgMTIuMDU2NyAxOC40MDA3IDEyLjQ5ODcgMTguNDAwN0gxMi41NzM3QzEyLjg0OTUgMTguMzk0MiAxMy4xMTcgMTguMzA0OSAxMy4zNDE0IDE4LjE0NDRDMTMuNTY1OSAxNy45ODM5IDEzLjczNjggMTcuNzU5NiAxMy44MzIgMTcuNTAwN0MxMy45NDMgMTcuMjQ5MyAxMy45NzYxIDE2Ljk3MDUgMTMuOTI3IDE2LjcwMDJDMTMuODc4IDE2LjQyOTggMTMuNzQ5MSAxNi4xODA0IDEzLjU1NyAxNS45ODRMMTMuNTA3IDE1LjkzNEMxMy4zNTIxIDE1Ljc3OTIgMTMuMjI5MSAxNS41OTU0IDEzLjE0NTMgMTUuMzkzMUMxMy4wNjE0IDE1LjE5MDcgMTMuMDE4MiAxNC45NzM4IDEzLjAxODIgMTQuNzU0OEMxMy4wMTgyIDE0LjUzNTggMTMuMDYxNCAxNC4zMTg5IDEzLjE0NTMgMTQuMTE2NkMxMy4yMjkxIDEzLjkxNDMgMTMuMzUyMSAxMy43MzA0IDEzLjUwNyAxMy41NzU3QzEzLjY2MTggMTMuNDIwNyAxMy44NDU2IDEzLjI5NzggMTQuMDQ4IDEzLjIxMzlDMTQuMjUwMyAxMy4xMyAxNC40NjcyIDEzLjA4NjggMTQuNjg2MiAxMy4wODY4QzE0LjkwNTIgMTMuMDg2OCAxNS4xMjIxIDEzLjEzIDE1LjMyNDQgMTMuMjEzOUMxNS41MjY4IDEzLjI5NzggMTUuNzEwNiAxMy40MjA3IDE1Ljg2NTQgMTMuNTc1N0wxNS45MTU0IDEzLjYyNTdDMTYuMTExOCAxMy44MTc4IDE2LjM2MTIgMTMuOTQ2NiAxNi42MzE1IDEzLjk5NTdDMTYuOTAxOSAxNC4wNDQ3IDE3LjE4MDcgMTQuMDExNiAxNy40MzIgMTMuOTAwN0gxNy40OTg3QzE3Ljc0NTIgMTMuNzk1IDE3Ljk1NTQgMTMuNjE5NiAxOC4xMDM0IDEzLjM5NkMxOC4yNTE1IDEzLjE3MjUgMTguMzMxIDEyLjkxMDUgMTguMzMyIDEyLjY0MjNWMTIuNTAwN0MxOC4zMzIgMTIuMDU4NiAxOC41MDc2IDExLjYzNDcgMTguODIwMiAxMS4zMjIxQzE5LjEzMjcgMTEuMDA5NiAxOS41NTY3IDEwLjgzNCAxOS45OTg3IDEwLjgzNEMyMC40NDA3IDEwLjgzNCAyMC44NjQ2IDExLjAwOTYgMjEuMTc3MiAxMS4zMjIxQzIxLjQ4OTggMTEuNjM0NyAyMS42NjU0IDEyLjA1ODYgMjEuNjY1NCAxMi41MDA3VjEyLjU3NTdDMjEuNjY2NCAxMi44NDM4IDIxLjc0NTkgMTMuMTA1OCAyMS44OTQgMTMuMzI5NEMyMi4wNDIgMTMuNTUyOSAyMi4yNTIyIDEzLjcyODMgMjIuNDk4NyAxMy44MzRDMjIuNzUgMTMuOTQ0OSAyMy4wMjg5IDEzLjk3OCAyMy4yOTkyIDEzLjkyOUMyMy41Njk1IDEzLjg4IDIzLjgxOSAxMy43NTExIDI0LjAxNTQgMTMuNTU5TDI0LjA2NTQgMTMuNTA5QzI0LjIyMDIgMTMuMzU0IDI0LjQwNCAxMy4yMzExIDI0LjYwNjMgMTMuMTQ3MkMyNC44MDg2IDEzLjA2MzMgMjUuMDI1NSAxMy4wMjAyIDI1LjI0NDUgMTMuMDIwMkMyNS40NjM2IDEzLjAyMDIgMjUuNjgwNCAxMy4wNjMzIDI1Ljg4MjggMTMuMTQ3MkMyNi4wODUxIDEzLjIzMTEgMjYuMjY4OSAxMy4zNTQgMjYuNDIzNyAxMy41MDlDMjYuNTc4NyAxMy42NjM4IDI2LjcwMTYgMTMuODQ3NiAyNi43ODU1IDE0LjA0OTlDMjYuODY5MyAxNC4yNTIyIDI2LjkxMjUgMTQuNDY5MSAyNi45MTI1IDE0LjY4ODJDMjYuOTEyNSAxNC45MDcyIDI2Ljg2OTMgMTUuMTI0MSAyNi43ODU1IDE1LjMyNjRDMjYuNzAxNiAxNS41Mjg3IDI2LjU3ODcgMTUuNzEyNSAyNi40MjM3IDE1Ljg2NzNMMjYuMzczNyAxNS45MTczQzI2LjE4MTYgMTYuMTEzNyAyNi4wNTI3IDE2LjM2MzIgMjYuMDAzNyAxNi42MzM1QzI1Ljk1NDcgMTYuOTAzOCAyNS45ODc4IDE3LjE4MjYgMjYuMDk4NyAxNy40MzRWMTcuNTAwN0MyNi4yMDQzIDE3Ljc0NzEgMjYuMzc5NyAxNy45NTczIDI2LjYwMzMgMTguMTA1NEMyNi44MjY5IDE4LjI1MzUgMjcuMDg4OSAxOC4zMzI5IDI3LjM1NyAxOC4zMzRIMjcuNDk4N0MyNy45NDA3IDE4LjMzNCAyOC4zNjQ2IDE4LjUwOTYgMjguNjc3MiAxOC44MjIxQzI4Ljk4OTggMTkuMTM0NyAyOS4xNjU0IDE5LjU1ODYgMjkuMTY1NCAyMC4wMDA3QzI5LjE2NTQgMjAuNDQyNyAyOC45ODk4IDIwLjg2NjYgMjguNjc3MiAyMS4xNzkyQzI4LjM2NDYgMjEuNDkxNyAyNy45NDA3IDIxLjY2NzMgMjcuNDk4NyAyMS42NjczSDI3LjQyMzdDMjcuMTU1NSAyMS42Njg0IDI2Ljg5MzYgMjEuNzQ3OCAyNi42NyAyMS44OTU5QzI2LjQ0NjQgMjIuMDQ0IDI2LjI3MSAyMi4yNTQyIDI2LjE2NTQgMjIuNTAwNlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE2NTIyXzU3MjU0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMCAxMClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcG9zaXRpb24tYWJzb2x1dGUgbXQtMiAgYmctd2hpdGUgc2hhZG93IHJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkLWJsb2NrJzogb3BlbkRyb3Bkb3duSW5kZXggPT09IGksICdkLW5vbmUnOiBvcGVuRHJvcGRvd25JbmRleCAhPT0gaX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihvcHRpb24sdHJhbnNhY3Rpb24/LmNsaWVudElkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhdHJhbnNhY3Rpb25Mb2FkaW5nICYmICF0cmFuc2FjdGlvbk5vRGF0YVwiPlxuICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBjbGFzcz1cInRleHQtc3RhcnRcIiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZXRyYW5cIiBbY3VycmVudFBhZ2VdPVwiY3VycmVudHRyYW5QYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidHJhbnNhY3Rpb25JdGVtc1wiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzdHJhblwiIFtwYWdlU2l6ZV09XCJwYWdldHJhbnNTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdldHJhbigkZXZlbnQpXCIgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2VUcmFuKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgXG4gICAgXG4gICAgXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48IS0tIGludm9pY2UgdGFibGUgZW5kIC0tPlxuPCEtLSBpbnZvaWNlIHRhYmxlIHN0YXJ0IC0tPlxuXG5cbjwhLS0gaW52b2ljZSB0YWJsZSBlbmQgLS0+Il19
|
|
1151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tbWFuYWdlLWJpbGxpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3RhbmdvLW1hbmFnZS1iaWxsaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2UtYmlsbGluZy90YW5nby1tYW5hZ2UtYmlsbGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDckcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFekYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDckcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDbEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENB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Q0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztTQUMvQjtJQUNILENBQUM7d0dBL2xDVSwyQkFBMkI7NEZBQTNCLDJCQUEyQiwrSEMxQnhDLHc0MERBOHFCMEI7OzRGRHBwQmIsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNFLDBCQUEwQjs0U0ErbENwQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG4vLyBpbXBvcnQgeyBQYXlub3dDb21wb25lbnQgfSBmcm9tICcuL3BheW5vdy9wYXlub3cuY29tcG9uZW50JztcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgQmlsbGluZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9iaWxsaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3JlZGl0Tm90ZUNvbXBvbmVudCB9IGZyb20gJy4vY3JlZGl0LW5vdGUvY3JlZGl0LW5vdGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9uZVRpbWVGZWVDb21wb25lbnQgfSBmcm9tICcuL29uZS10aW1lLWZlZS9vbmUtdGltZS1mZWUuY29tcG9uZW50JztcbmltcG9ydCB7IFJlcXVlc3RDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tICcuL3JlcXVlc3QtY29uZmlybWF0aW9uL3JlcXVlc3QtY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWdlcmF0ZUludm9pY2VDb21wb25lbnQgfSBmcm9tICcuL3JlZ2VyYXRlLWludm9pY2UvcmVnZXJhdGUtaW52b2ljZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFBheW1lbnRTdGF0dXNjaGFuZ2VDb21wb25lbnQgfSBmcm9tICcuL3BheW1lbnQtc3RhdHVzY2hhbmdlL3BheW1lbnQtc3RhdHVzY2hhbmdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0SW52b2ljZUNvbXBvbmVudCB9IGZyb20gJy4vZWRpdC1pbnZvaWNlL2VkaXQtaW52b2ljZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IENhbmNlbEludm9pY2VDb21wb25lbnQgfSBmcm9tICcuL2NhbmNlbC1pbnZvaWNlL2NhbmNlbC1pbnZvaWNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnZvaWNlTG9nc0NvbXBvbmVudCB9IGZyb20gJy4vaW52b2ljZS1sb2dzL2ludm9pY2UtbG9ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW52b2ljZVByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9pbnZvaWNlLXByZXZpZXcvaW52b2ljZS1wcmV2aWV3LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10YW5nby1tYW5hZ2UtYmlsbGluZycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YW5nby1tYW5hZ2UtYmlsbGluZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi90YW5nby1tYW5hZ2UtYmlsbGluZy5jb21wb25lbnQuc2Nzcydcbn0pXG5cbmV4cG9ydCBjbGFzcyBUYW5nb01hbmFnZUJpbGxpbmdDb21wb25lbnQge1xuICBpbnZvaWNldHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICBpbnZvaWNlcGxhbnM6IHN0cmluZyA9ICdpbnZvaWNlJztcbiAgbGVuOiBhbnk7XG4gIHNlYXJjaERpc2FibGVkOiBhbnkgPSBmYWxzZTtcbiAgcGFnZVNpemUgPSAxMDtcbiAgY3VycmVudFBhZ2UgPSAxO1xuICBjdXJyZW50dHJhblBhZ2UgPSAxO1xuICBwYWdldHJhbnNTaXplPTEwO1xuICBEdXJhdGlvbkZpbHRlciA9ICdjdXJyZW50JztcbiAgcGF5bWVudEZpbHRlcjogYW55ID0gW107XG4gIEFwcHJvdmFsRmlsdGVyOiBhbnkgPSBbXTtcbiAgLy8gQWxsIEludm9pY2VzIHN1Yi10b2dnbGU6ICdhbGwnID0gcmVndWxhciBJTlYtKiBpbnZvaWNlcywgJ2FkdmFuY2UnID0gVElOVi0qXG4gIC8vIGFkdmFuY2UgaW52b2ljZXMuIFNlbnQgdG8gdGhlIGJhY2tlbmQgYXMgaW52b2ljZVR5cGU7IHRoZSBsaXN0LCBjb3VudCBhbmRcbiAgLy8gY2FyZHMgYWxsIGhvbm9yIGl0LlxuICBpbnZvaWNlVHlwZTogJ2FsbCcgfCAnYWR2YW5jZScgPSAnYWxsJztcblxuICBjbGllbnRJZDogc3RyaW5nID0gJyc7XG4gIHNvcnRDb2x1bU5hbWU6IHN0cmluZyA9IFwiY2xpZW50TmFtZVwiO1xuICBzb3J0Qnk6IG51bWJlciA9IC0xO1xuICBkeW5hbWljRGF0YTogYW55ID0ge1xuICAgIGxpbWl0OiAxMCxcbiAgICBvZmZzZXQ6IDEsXG4gICAgY2xpZW50SWQ6IFwiXCIsXG4gICAgc2VhcmNoVmFsdWU6IFwiXCIsXG4gICAgc29ydENvbHVtbjogJycsXG4gICAgc29ydEJ5OiAnJyxcbiAgICBwcm9kdWN0OiBbXSxcbiAgICBzdG9yZTogW10sXG4gICAgbG9jYXRpb246IFtdXG4gIH1cbiAgdXNlclR5cGU6IGFueSA9ICcnO1xuICBpbnZvaWNlTGlzdDogYW55ID0gW107XG4gIGludm9pY2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgaW52b2ljZU5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICB0cmFuc2FjdGlvbk5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICB0cmFuc2FjdGlvbkxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHRvdGFsSXRlbXMgPSAwO1xuICAvLyBIZWFkZXIgY2FyZCB0b3RhbHMgc2hvd24gYWJvdmUgdGhlIEFsbCBJbnZvaWNlcyB0YWJsZS4gU3RhYmxlIGFjcm9zc1xuICAvLyBmaWx0ZXIvc2VhcmNoL3BhZ2UgY2hhbmdlcyBiZWNhdXNlIHRoZSBiYWNrZW5kIGNvbXB1dGVzIHRoZW0gb3ZlciB0aGVcbiAgLy8gdXNlcidzIGZ1bGwgY2xpZW50IHNjb3BlLCBub3QgdGhlIGN1cnJlbnRseS1wYWdlZCBxdWVyeS5cbiAgaW52b2ljZUNhcmRzID0ge1xuICAgIG91dHN0YW5kaW5nQW1vdW50OiAwLCBvdXRzdGFuZGluZ0V4Y2xBbW91bnQ6IDAsIG91dHN0YW5kaW5nSW5jbEFtb3VudDogMCwgb3V0c3RhbmRpbmdDb3VudDogMCxcbiAgICBvdmVyZHVlQW1vdW50OiAwLCBvdmVyZHVlRXhjbEFtb3VudDogMCwgb3ZlcmR1ZUluY2xBbW91bnQ6IDAsIG92ZXJkdWVDb3VudDogMCxcbiAgICBwZW5kaW5nUGF5bWVudEFtb3VudDogMCwgcGVuZGluZ1BheW1lbnRFeGNsQW1vdW50OiAwLCBwZW5kaW5nUGF5bWVudEluY2xBbW91bnQ6IDAsIHBlbmRpbmdQYXltZW50Q291bnQ6IDAsXG4gIH07XG4gIGNsaWVudGluZm86IGFueTtcbiAgaXRlbXNQZXJQYWdlID0gMTA7XG4gIHBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwLCA1MCwgMTAwLCA1MDBdO1xuICBpdGVtc1BlclBhZ2V0cmFuID0gMTA7XG4gIHBhZ2luYXRpb25TaXplc3RyYW4gPSBbMTAsIDIwLCAzMCwgNTAsIDEwMCwgNTAwXTtcbiAgZXhwYW5kZWRSb3dJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByb2R1Y3R0cmFpbGRyb3BEb3duOiBib29sZWFuID0gZmFsc2U7XG5cbiAgb3B0aW9uczogeyBsYWJlbDogc3RyaW5nIH1bXSA9IFtcbiAgICB7IGxhYmVsOiAnQ3JlZGl0IE5vdGUnIH0sXG4gICAgeyBsYWJlbDogJ0FkZCBvbmUgdGltZSBmZWUnIH1cbiAgXTtcbiAgaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgZHJvcGRvd25JZDogbnVtYmVyO1xuICBhY3RpdmVEcm9wZG93bklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcGF5bWVudFN0YXR1czogc3RyaW5nO1xuICBpbnZvaWNlOiB7IHBheW1lbnRTdGF0dXM6IHN0cmluZyB9ID0geyBwYXltZW50U3RhdHVzOiAndW5wYWlkJyB9O1xuICBvcGVuRHJvcGRvd25JbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG4gIHRyYW5zYWN0aW9uTGlzdDogYW55O1xuICB0cmFuc2FjdGlvbkl0ZW1zOiBhbnk7XG4gIHNvcnRDb2x1bU5hbWV0cmFuOiBhbnkgPSAnY2xpZW50TmFtZSc7XG4gIHNvcnRCeXRyYW46IGFueSA9IDE7XG5cbiAgaW52b2ljZUZpbHRlck9iamVjdCA9IFtcbiAgICB7IERlc2NyaXB0aW9uOiAnRHVyYXRpb24nLCB0eXBlOiAnc2luZ2xlJywgSXNzdWVzOiBbeyBpZDogJ2N1cnJlbnQnLCB0ZXh0OiBcIkN1cnJlbnQgTW9udGhcIiB9LCB7IGlkOiAncHJldicsIHRleHQ6IFwiUHJldmlvdXMgTW9udGhcIiB9LCB7IGlkOiAnbGFzdDMnLCB0ZXh0OiBcIkxhc3QgMyBNb250aHNcIiB9LCB7IGlkOiAnbGFzdDYnLCB0ZXh0OiBcIkxhc3QgNiBNb250aHNcIiB9LCB7IGlkOiAnbGFzdDEyJywgdGV4dDogXCJMYXN0IDEgWWVhclwiIH1dIH0sXG4gICAgeyBEZXNjcmlwdGlvbjogJ1BheW1lbnQgU3RhdHVzJywgdHlwZTogJ211bHRpJywgSXNzdWVzOiBbeyBpZDogJ3BhaWQnLCB0ZXh0OiBcIlBhaWRcIiB9LCB7IGlkOiAndW5wYWlkJywgdGV4dDogXCJVbnBhaWRcIiB9XSB9LFxuICAgIC8vIEFwcHJvdmFsIFN0YXR1cyByZXN0b3JlZCDigJQgdGhlIHF1aWNrIGZpbHRlciB0YWJzIGFib3ZlIHRoZSB0YWJsZSB3ZXJlXG4gICAgLy8gcmVtb3ZlZCAocHJvdG90eXBlIHBhcml0eSksIHNvIHRoZSBwb3BvdmVyIGlzIG5vdyB0aGUgb25seSB3YXkgdG9cbiAgICAvLyBuYXJyb3cgYnkgYXBwcm92YWwgc3RhZ2UuXG4gICAgeyBEZXNjcmlwdGlvbjogJ0FwcHJvdmFsIFN0YXR1cycsIHR5cGU6ICdtdWx0aScsIElzc3VlczogW1xuICAgICAgeyBpZDogJ3BlbmRpbmdDc20nLCB0ZXh0OiAnUGVuZGluZyBDU00nIH0sXG4gICAgICB7IGlkOiAncGVuZGluZ0ZpbmFuY2UnLCB0ZXh0OiAnUGVuZGluZyBGaW5hbmNlJyB9LFxuICAgICAgeyBpZDogJ3BlbmRpbmdBcHByb3ZhbCcsIHRleHQ6ICdQZW5kaW5nIEFwcHJvdmFsJyB9LFxuICAgICAgeyBpZDogJ2FwcHJvdmVkJywgdGV4dDogJ0FwcHJvdmVkJyB9LFxuICAgICAgeyBpZDogJ2NhbmNlbGxlZCcsIHRleHQ6ICdDYW5jZWxsZWQnIH0sXG4gICAgXSB9LFxuICAgIHsgRGVzY3JpcHRpb246ICdNb250aCcsIHR5cGU6ICdzaW5nbGUnLCBJc3N1ZXM6IFtcbiAgICAgIHsgaWQ6ICcxJywgdGV4dDogJ0phbnVhcnknIH0sIHsgaWQ6ICcyJywgdGV4dDogJ0ZlYnJ1YXJ5JyB9LCB7IGlkOiAnMycsIHRleHQ6ICdNYXJjaCcgfSxcbiAgICAgIHsgaWQ6ICc0JywgdGV4dDogJ0FwcmlsJyB9LCB7IGlkOiAnNScsIHRleHQ6ICdNYXknIH0sIHsgaWQ6ICc2JywgdGV4dDogJ0p1bmUnIH0sXG4gICAgICB7IGlkOiAnNycsIHRleHQ6ICdKdWx5JyB9LCB7IGlkOiAnOCcsIHRleHQ6ICdBdWd1c3QnIH0sIHsgaWQ6ICc5JywgdGV4dDogJ1NlcHRlbWJlcicgfSxcbiAgICAgIHsgaWQ6ICcxMCcsIHRleHQ6ICdPY3RvYmVyJyB9LCB7IGlkOiAnMTEnLCB0ZXh0OiAnTm92ZW1iZXInIH0sIHsgaWQ6ICcxMicsIHRleHQ6ICdEZWNlbWJlcicgfVxuICAgIF0gfSxcbiAgICB7IERlc2NyaXB0aW9uOiAnWWVhcicsIHR5cGU6ICdzaW5nbGUnLCBJc3N1ZXM6ICgoKSA9PiB7XG4gICAgICAvLyBDdXJyZW50IHllYXIgwrE1IOKAlCBrZWVwIGluIHN5bmMgd2l0aCBicmFuZC1pbnZvaWNlcyBmb3IgcGFyaXR5LlxuICAgICAgLy8gVXNpbmcgYSBmaXhlZCBzZWVkIHRvIGF2b2lkIFNTUi90ZXN0IG1pc21hdGNoZXMgaXNuJ3QgbmVlZGVkIGhlcmVcbiAgICAgIC8vIHNpbmNlIHRoaXMgbGlzdCBpcyByZWdlbmVyYXRlZCBvbiBlYWNoIGJyb3dzZXIgbG9hZC5cbiAgICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgeWVhcnM6IHsgaWQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXSA9IFtdO1xuICAgICAgZm9yIChsZXQgeSA9IGN1cnJlbnRZZWFyICsgMTsgeSA+PSBjdXJyZW50WWVhciAtIDU7IHktLSkge1xuICAgICAgICB5ZWFycy5wdXNoKHsgaWQ6IFN0cmluZyh5KSwgdGV4dDogU3RyaW5nKHkpIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHllYXJzO1xuICAgIH0pKCkgfSxcbiAgXTtcblxuICAvLyBNb250aCAvIFllYXIgcGlja2VyIHN0YXRlIChwYXJzZWQgZnJvbSBhcHBseUludm9pY2VGaWx0ZXJzIGludG8gdGhlc2VcbiAgLy8gZmllbGRzLCB0aGVuIHNlbnQgdG8gdGhlIGJhY2tlbmQgaW4gaW52b2ljZVRhYmxlRGF0YSgpKS5cbiAgbW9udGhGaWx0ZXI6IHN0cmluZyA9ICcnO1xuICB5ZWFyRmlsdGVyOiBzdHJpbmcgPSAnJztcblxuICAvLyA9PT09PSBQb3J0ZWQgZnJvbSBicmFuZC1pbnZvaWNlczogZmlsdGVyIHRhYnMsIHNlbGVjdGlvbiwgYnVsayBhY3Rpb25zID09PT09XG4gIC8vIFF1aWNrIGZpbHRlciB0YWJzIHNob3duIGFib3ZlIHRoZSB0YWJsZSDigJQgc2FtZSBzZXQgYXMgdGhlIHBlci1icmFuZCB2aWV3LlxuICBmaWx0ZXJUYWJzID0gWydBbGwnLCAnUGVuZGluZyBBcHByb3ZhbCcsICdQZW5kaW5nIFBheW1lbnQnLCAnUGFpZCcsICdDYW5jZWxsZWQnXTtcbiAgYWN0aXZlRmlsdGVyOiBzdHJpbmcgPSAnQWxsJztcblxuICAvLyBDYWNoZWQgZmxhdCB1c2VyLWFjY2VzcyBvYmplY3Qgc28gc3luY2hyb25vdXMgZ2F0ZXMgKGNhbkFwcHJvdmUsXG4gIC8vIHBlbmRpbmdJblNlbGVjdGlvbikgY2FuIHJ1biB3aXRob3V0IGF3YWl0aW5nIHRoZSBvYnNlcnZhYmxlLlxuICB1c2VyQWNjZXNzOiBhbnkgPSB7fTtcblxuICAvLyBNdWx0aS1zZWxlY3QgKyBidWxrIGFjdGlvbiBzdGF0ZS5cbiAgc2VsZWN0ZWRJbnZvaWNlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHNlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBidWxrQXBwcm92aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGJ1bGtEb3dubG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIERpc3BsYXkgaGVscGVycyDigJQgbWlycm9yIHV0aWxzL2N1cnJlbmN5LmpzIHNvIHRoZSB0YWJsZSBzaG93cyB0aGUgc2FtZVxuICAvLyBzeW1ib2wgdGhlIFBERiB3aWxsIHJlbmRlci4gRmFsbGJhY2sgJyQnIGZvciB1bmtub3duIGNvZGVzLlxuICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbmN5U3ltYm9sczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICBpbnI6ICfigrknLCBkb2xsYXI6ICckJywgc2luZ2Fwb3JlZG9sbGFyOiAnUyQnLCBldXJvOiAn4oKsJyxcbiAgICBhZWQ6ICdBRUQnLFxuICB9O1xuXG4gIC8vIFBpcGVsaW5lIGxhYmVsIG1hcHMgKyBuZXh0LXN0YWdlIHRyYW5zaXRpb25zLCB1c2VkIGJ5IHRoZSBhcHByb3ZlIGFjdGlvblxuICAvLyBjb25maXJtYXRpb24gcG9wdXAgKGZyb20g4oaSIHRvIGJyZWFrZG93bikuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhZ2VMYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgcGVuZGluZ0NzbTogJ1BlbmRpbmcgQ1NNJyxcbiAgICBwZW5kaW5nRmluYW5jZTogJ1BlbmRpbmcgRmluYW5jZScsXG4gICAgcGVuZGluZ0FwcHJvdmFsOiAnUGVuZGluZyBBcHByb3ZhbCcsXG4gICAgYXBwcm92ZWQ6ICdBcHByb3ZlZCcsXG4gIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhZ2VOZXh0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIHBlbmRpbmdDc206ICdwZW5kaW5nRmluYW5jZScsXG4gICAgcGVuZGluZ0ZpbmFuY2U6ICdwZW5kaW5nQXBwcm92YWwnLFxuICAgIHBlbmRpbmdBcHByb3ZhbDogJ2FwcHJvdmVkJyxcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSBCaWxsaW5nU2VydmljZTogQmlsbGluZ1NlcnZpY2UsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UscHJpdmF0ZSByb3V0ZXI6Um91dGVyLCBwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxwcml2YXRlIHBhZ2VJbmZvOlBhZ2VJbmZvU2VydmljZVxuICApIHtcbiAgICB0aGlzLkJpbGxpbmdTZXJ2aWNlLnBheW1lbnRpbnZvaWNlRm9ybURhdGEucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIGlmIChyZXMudHlwZSA9PT0gJ2lucHV0JyAmJiByZXMuZm9ybSA9PT0gJ3BheW1lbnQtaW52b2ljZScpIHtcbiAgICAgICAgICAvLyB0aGlzLmdldHBheW1lbnRpbnZvaWNlKHJlcy52YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgLy8gQ2FjaGUgdXNlci1hY2Nlc3Mgc28gc3luY2hyb25vdXMgY29kZSAoY2FuQXBwcm92ZSwgcGVuZGluZ0luU2VsZWN0aW9uLFxuICAgIC8vIGJ1bGsgZmlsdGVycykgY2FuIGdhdGUgd2l0aG91dCBhbiBhc3luYyBwaXBlLlxuICAgIHRoaXMuZ3MudXNlckFjY2Vzcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChhY2Nlc3M6IGFueSkgPT4ge1xuICAgICAgdGhpcy51c2VyQWNjZXNzID0gYWNjZXNzIHx8IHt9O1xuICAgIH0pO1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UGFnZURhdGEoKVxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YS5jbGllbnRzO1xuICAgICAgICB0aGlzLmR5bmFtaWNEYXRhLmNsaWVudElkID0gdGhpcy5jbGllbnRJZFxuICAgICAgICB0aGlzLmdzLnVzZXJBY2Nlc3MucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclR5cGUgPSBkYXRhLnVzZXJUeXBlO1xuICAgICAgICAgICAgaWYgKGRhdGE/LnVzZXJUeXBlID09ICd0YW5nbycpIHtcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICAgICAgICAgICAgICB0aGlzLmNyZWRpdFRyYW5zYWN0aW9ubGlzdCgpXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG5cbiAgfVxuXG4gIHNldFBhZ2VEYXRhKCkge1xuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoJ0JpbGxpbmcnKVxuICAgIHRoaXMucGFnZUluZm8uc2V0RGVzY3JpcHRpb24oJ0VkaXQgYW5kIGNvbmZpZ3VyZSBiaWxsaW5nIGRldGFpbHMnKVxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xuICAgICAgeyB0aXRsZTogJ01hbmFnZScsIHBhdGg6ICcvbWFuYWdlJywgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcbiAgICAgIHsgdGl0bGU6ICdNYW5hZ2UnLCBwYXRoOiAnL21hbmFnZScsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcbiAgICBdKVxuICB9XG5cblxuXG5cbiAgc2VsZWN0SW52b2ljZVBsYW4oaW52b2ljZXBsYW5zOiBzdHJpbmcpIHtcbiAgICB0aGlzLmludm9pY2VwbGFucyA9IGludm9pY2VwbGFucztcbiAgICB0aGlzLmNyZWRpdFRyYW5zYWN0aW9ubGlzdCgpXG5cbiAgfVxuICAvLyBBbGwgSW52b2ljZXMgc3ViLXRvZ2dsZTogc3dpdGNoIGJldHdlZW4gcmVndWxhciAoYWxsKSBhbmQgYWR2YW5jZSAoVElOVi0qKVxuICAvLyBpbnZvaWNlcy4gUmVzZXRzIHRvIHBhZ2UgMSBhbmQgcmVsb2FkcyB0aGUgbGlzdCArIGNhcmRzLlxuICBzZWxlY3RJbnZvaWNlVHlwZSh0eXBlOiAnYWxsJyB8ICdhZHZhbmNlJykge1xuICAgIGlmICh0aGlzLmludm9pY2VUeXBlID09PSB0eXBlKSB7IHJldHVybjsgfVxuICAgIHRoaXMuaW52b2ljZVR5cGUgPSB0eXBlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICB9XG4gIGludm9pY2VUYWJsZURhdGEoKSB7XG4gICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuaW52b2ljZUxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaW52b2ljZU5vRGF0YSA9IGZhbHNlO1xuICAgIGxldCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgbGltaXQ6IHRoaXMucGFnZVNpemUsXG4gICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UsXG4gICAgICBmaWx0ZXI6IHRoaXMuRHVyYXRpb25GaWx0ZXIsXG4gICAgICBwYXltZW50U3RhdHVzOiB0aGlzLnBheW1lbnRGaWx0ZXIsXG4gICAgICBzdGF0dXM6IHRoaXMuQXBwcm92YWxGaWx0ZXIsXG4gICAgICBtb250aEZpbHRlcjogdGhpcy5tb250aEZpbHRlcixcbiAgICAgIHllYXJGaWx0ZXI6IHRoaXMueWVhckZpbHRlcixcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMubGVuLFxuICAgICAgZXhwb3J0OiBmYWxzZSxcbiAgICAgIGludm9pY2VUeXBlOiB0aGlzLmludm9pY2VUeXBlLFxuICAgICAgc29ydENvbHVtTmFtZTogdGhpcy5zb3J0Q29sdW1OYW1lLFxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeVxuICAgIH1cbiAgICB0aGlzLkJpbGxpbmdTZXJ2aWNlLmludm9pY2VUYWJsZURhdGEoZmlsdGVycykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG5cbiAgICAgIG5leHQ6IChlKSA9PiB7XG5cbiAgICAgICAgaWYgKGU/LmRhdGE/LmNvdW50KSB7XG4gICAgICAgICAgdGhpcy5pbnZvaWNlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaW52b2ljZU5vRGF0YSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaW52b2ljZUxpc3QgPSBlLmRhdGE/LmRhdGFcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBlLmRhdGE/LmNvdW50XG4gICAgICAgICAgLy8gQ2FyZHMgcGF5bG9hZCBmcm9tIHRoZSBzYW1lIHJlc3BvbnNlIChhZGRlZCBpbiBjbGllbnRJbnZvaWNlTGlzdCkuXG4gICAgICAgICAgLy8gRGVmYXVsdHMgcHJlc2VydmUgdGhlIHplcm8tc3RhdGUgc2hhcGUgaWYgdGhlIEFQSSBldmVyIGRyb3BzIGl0LlxuICAgICAgICAgIGNvbnN0IGNhcmRzID0gZS5kYXRhPy5jYXJkcztcbiAgICAgICAgICBpZiAoY2FyZHMpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2ljZUNhcmRzID0ge1xuICAgICAgICAgICAgICBvdXRzdGFuZGluZ0Ftb3VudDogY2FyZHMub3V0c3RhbmRpbmdBbW91bnQgfHwgMCxcbiAgICAgICAgICAgICAgb3V0c3RhbmRpbmdFeGNsQW1vdW50OiBjYXJkcy5vdXRzdGFuZGluZ0V4Y2xBbW91bnQgfHwgMCxcbiAgICAgICAgICAgICAgb3V0c3RhbmRpbmdJbmNsQW1vdW50OiBjYXJkcy5vdXRzdGFuZGluZ0luY2xBbW91bnQgfHwgMCxcbiAgICAgICAgICAgICAgb3V0c3RhbmRpbmdDb3VudDogY2FyZHMub3V0c3RhbmRpbmdDb3VudCB8fCAwLFxuICAgICAgICAgICAgICBvdmVyZHVlQW1vdW50OiBjYXJkcy5vdmVyZHVlQW1vdW50IHx8IDAsXG4gICAgICAgICAgICAgIG92ZXJkdWVFeGNsQW1vdW50OiBjYXJkcy5vdmVyZHVlRXhjbEFtb3VudCB8fCAwLFxuICAgICAgICAgICAgICBvdmVyZHVlSW5jbEFtb3VudDogY2FyZHMub3ZlcmR1ZUluY2xBbW91bnQgfHwgMCxcbiAgICAgICAgICAgICAgb3ZlcmR1ZUNvdW50OiBjYXJkcy5vdmVyZHVlQ291bnQgfHwgMCxcbiAgICAgICAgICAgICAgcGVuZGluZ1BheW1lbnRBbW91bnQ6IGNhcmRzLnBlbmRpbmdQYXltZW50QW1vdW50IHx8IDAsXG4gICAgICAgICAgICAgIHBlbmRpbmdQYXltZW50RXhjbEFtb3VudDogY2FyZHMucGVuZGluZ1BheW1lbnRFeGNsQW1vdW50IHx8IDAsXG4gICAgICAgICAgICAgIHBlbmRpbmdQYXltZW50SW5jbEFtb3VudDogY2FyZHMucGVuZGluZ1BheW1lbnRJbmNsQW1vdW50IHx8IDAsXG4gICAgICAgICAgICAgIHBlbmRpbmdQYXltZW50Q291bnQ6IGNhcmRzLnBlbmRpbmdQYXltZW50Q291bnQgfHwgMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pbnZvaWNlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaW52b2ljZU5vRGF0YSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMubGVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmludm9pY2VMaXN0ID0gW11cbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgfVxuXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlKSA9PiB7XG4gICAgICAgIHRoaXMuaW52b2ljZUxpc3QgPSBbXVxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBkYXRhVmFsdWUoZGF0YTogYW55KSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL21hbmFnZS9zdG9yZXNcIl0pXG4gICAgY29uc3QgZGF0YXZhbHVlOiBhbnkgPSBKU09OLnBhcnNlKFxuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSB8fCBcInt9XCJcbiAgICApO1xuICAgIGRhdGF2YWx1ZS5jbGllbnQgPSBkYXRhLmNsaWVudElkLnRvU3RyaW5nKCk7XG4gICAgZGF0YXZhbHVlLmNsaWVudE5hbWUgPSBkYXRhLmNsaWVudE5hbWVcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxuICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UudXBkYXRlQ2xpZW50RmlsdGVycyhkYXRhKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeShkYXRhdmFsdWUpKVxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhdmFsdWUpXG59XG5cbiAgLy8gQ2xpY2tpbmcgYSBicmFuZCBuYW1lIGluIHRoZSBBbGwgSW52b2ljZXMgdGFibGUgb3BlbnMgdGhhdCBicmFuZCdzIHZpZXdcbiAgLy8gKHBlci1icmFuZCBpbnZvaWNlcyBwYWdlKS4gTWlycm9ycyB0aGUgQnJhbmRzICYgQmlsbGluZyBsaXN0IG5hdmlnYXRpb24uXG4gIHZpZXdCcmFuZChpbnZvaWNlOiBhbnkpIHtcbiAgICBpZiAoIWludm9pY2U/LmNsaWVudElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGF2YWx1ZTogYW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnKSB8fCAne30nKTtcbiAgICBkYXRhdmFsdWUuY2xpZW50ID0gaW52b2ljZS5jbGllbnRJZC50b1N0cmluZygpO1xuICAgIGRhdGF2YWx1ZS5jbGllbnROYW1lID0gaW52b2ljZS5jbGllbnROYW1lO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoZWFkZXItZmlsdGVycycsIEpTT04uc3RyaW5naWZ5KGRhdGF2YWx1ZSkpO1xuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dChkYXRhdmFsdWUpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9iaWxsaW5nL2JyYW5kLWludm9pY2VzJ10pO1xuICB9XG5cbiAgY3JlZGl0VHJhbnNhY3Rpb25saXN0KCkge1xuICAgIHRoaXMudHJhbnNhY3Rpb25Mb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uTm9EYXRhID0gdHJ1ZTtcbiAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gZmFsc2U7XG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBsaW1pdDogdGhpcy5wYWdldHJhbnNTaXplLFxuICAgICAgb2Zmc2V0OiB0aGlzLmN1cnJlbnR0cmFuUGFnZSxcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMubGVuLFxuICAgICAgZXhwb3J0OiBmYWxzZSxcbiAgICAgIHNvcnRDb2x1bU5hbWU6IHRoaXMuc29ydENvbHVtTmFtZXRyYW4sXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5dHJhblxuICAgIH1cbiAgICB0aGlzLkJpbGxpbmdTZXJ2aWNlLnRyYW5zYWN0aW9uTGlzdChmaWx0ZXJzKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcblxuICAgICAgbmV4dDogKGUpID0+IHtcblxuICAgICAgICBpZiAoZT8uZGF0YT8uY291bnQpIHtcblxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Mb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbk5vRGF0YSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25MaXN0ID0gZS5kYXRhPy5kYXRhXG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkl0ZW1zID0gZS5kYXRhPy5jb3VudFxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTm9EYXRhID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy5sZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25MaXN0ID0gW11cbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgfVxuXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25MaXN0ID0gW11cbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMFxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgb25FeHBvcnQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBmaWx0ZXI6IHRoaXMuRHVyYXRpb25GaWx0ZXIsXG4gICAgICBwYXltZW50U3RhdHVzOiB0aGlzLnBheW1lbnRGaWx0ZXIsXG4gICAgICBzdGF0dXM6IHRoaXMuQXBwcm92YWxGaWx0ZXIsXG4gICAgICBtb250aEZpbHRlcjogdGhpcy5tb250aEZpbHRlcixcbiAgICAgIHllYXJGaWx0ZXI6IHRoaXMueWVhckZpbHRlcixcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMubGVuLFxuICAgICAgZXhwb3J0OiB0cnVlLFxuICAgICAgaW52b2ljZVR5cGU6IHRoaXMuaW52b2ljZVR5cGUsXG4gICAgICBzb3J0Q29sdW1OYW1lOiB0aGlzLnNvcnRDb2x1bU5hbWUsXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5XG4gICAgfVxuICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UuaW52b2ljZVRhYmxlRGF0YUV4cG9ydChmaWx0ZXJzKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5CaWxsaW5nU2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnaW52b2ljZScpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1NvbWV0aGluZyB3ZW50IFdyb25nLi4nKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgb25FeHBvcnRUcmFuc2FjdGlvbigpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICBsZXQgZmlsdGVyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgIGZpbHRlcjogdGhpcy5EdXJhdGlvbkZpbHRlcixcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMubGVuLFxuICAgICAgZXhwb3J0OiB0cnVlXG4gICAgfVxuICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UudHJhbnNhY3Rpb25UYWJsZUV4cG9ydChmaWx0ZXJzKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5CaWxsaW5nU2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnVHJhbnNhY3Rpb24nKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdTb21ldGhpbmcgd2VudCBXcm9uZy4uJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIHJlZ2VuZXJhdGVJbnZvaWNlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihSZWdlcmF0ZUludm9pY2VDb21wb25lbnQsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0ID09PSAnWWVzJykge1xuICAgICAgICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgaW52b2ljZUlkOiBkYXRhLmludm9pY2UsXG4gICAgICAgICAgICBhbGxDbGllbnQ6IGZhbHNlLFxuICAgICAgICAgICAgcmVnZW5yYXRlOnRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5CaWxsaW5nU2VydmljZS5pbnZvaWNlcmVnZXJhdGUocGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnVGhlIGludm9pY2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlZ2VuZXJhdGVkLicpO1xuICAgICAgICAgICAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcGF5bWVudHN0YXR1c0NoYW5nZShkYXRhOiBhbnkpIHtcbiAgICAvLyBQYXltZW50IGNhbiBvbmx5IGJlIHJlY29yZGVkIG9uY2UgdGhlIGludm9pY2UgaXMgYXBwcm92ZWQuXG4gICAgaWYgKGRhdGE/LnN0YXR1cyAhPT0gJ2FwcHJvdmVkJykge1xuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdQYXltZW50IGNhbiBiZSByZWNvcmRlZCBvbmx5IGFmdGVyIHRoZSBpbnZvaWNlIGlzIGFwcHJvdmVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBBIHBhaWQgaW52b2ljZSBpcyBsb2NrZWQg4oCUIGl0cyBwYXltZW50IHN0YXR1cyBjYW4ndCBiZSBjaGFuZ2VkLlxuICAgIGlmIChkYXRhPy5wYXltZW50U3RhdHVzID09PSAncGFpZCcpIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnVGhpcyBpbnZvaWNlIGlzIGFscmVhZHkgcGFpZDsgaXRzIHBheW1lbnQgc3RhdHVzIGNhbm5vdCBiZSBjaGFuZ2VkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBNb2RhbCBub3cgY29sbGVjdHMgYSByZWFsIHBheW1lbnQgZW50cnkgKGFtb3VudCwgZGF0ZSwgbWV0aG9kLCByZWYsXG4gICAgLy8gbm90ZXMpLiBPbiBzdWJtaXQgdGhlIHNlcnZlciBhcHBlbmRzIHRvIHBheW1lbnRIaXN0b3J5IGFuZCByZWNvbXB1dGVzXG4gICAgLy8gcGF5bWVudFN0YXR1cyAodW5wYWlkL3BhcnRpYWwvcGFpZCkuXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBheW1lbnRTdGF0dXNjaGFuZ2VDb21wb25lbnQsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmludm9pY2UgPSBkYXRhO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdD8uYWN0aW9uID09PSAncmVjb3JkJyAmJiByZXN1bHQucGF5bG9hZCkge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0geyBpbnZvaWNlSWQ6IGRhdGEuaW52b2ljZSwgLi4ucmVzdWx0LnBheWxvYWQgfTtcbiAgICAgICAgdGhpcy5CaWxsaW5nU2VydmljZS5yZWNvcmRQYXltZW50KHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzPy5kYXRhPy5wYXltZW50U3RhdHVzIHx8IHJlcz8ucGF5bWVudFN0YXR1cyB8fCAndXBkYXRlZCc7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdChgUGF5bWVudCByZWNvcmRlZCDigJQgc3RhdHVzOiAke3N0YXR1c31gKTtcbiAgICAgICAgICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/LmVycm9yPy5lcnJvciB8fCAnRmFpbGVkIHRvIHJlY29yZCBwYXltZW50JztcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChtc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG4gIC8vID09PT09IEFwcHJvdmUgZmxvdyAocG9ydGVkIGZyb20gYnJhbmQtaW52b2ljZXMpID09PT09XG4gIC8vIFN0YWdlLWF3YXJlIGFwcHJvdmU6IHVzZXMgZGVkaWNhdGVkIHRyYW5zaXRpb24gZW5kcG9pbnQgcGVyIHN0YXR1cy4gRmluYWxcbiAgLy8gc3RhZ2UgKHBlbmRpbmdBcHByb3ZhbCDihpIgYXBwcm92ZWQpIGhpdHMgaW52b2ljZURvd25sb2FkIHdpdGggc2VuZEludm9pY2VcbiAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgZXhpc3RpbmcgVUkgZmxvdyBvbiB0aGlzIHRhYi5cbiAgY2FuQXBwcm92ZShpbnY6IGFueSwgdXNlckFjY2VzczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCF1c2VyQWNjZXNzKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gTGVnYWN5ICdwZW5kaW5nJyBpbnZvaWNlcyBhcmUgdGhlIGZpcnN0IChDU00pIHN0YWdlLlxuICAgIGlmICh1c2VyQWNjZXNzLnJvbGUgPT09ICdzdXBlcmFkbWluJykge1xuICAgICAgcmV0dXJuIFsncGVuZGluZycsICdwZW5kaW5nQ3NtJywgJ3BlbmRpbmdGaW5hbmNlJywgJ3BlbmRpbmdBcHByb3ZhbCddLmluY2x1ZGVzKGludj8uc3RhdHVzKTtcbiAgICB9XG4gICAgaWYgKGludj8uc3RhdHVzID09PSAncGVuZGluZ0NzbScgfHwgaW52Py5zdGF0dXMgPT09ICdwZW5kaW5nJykgcmV0dXJuICEhdXNlckFjY2Vzcy5UYW5nb0FkbWluX2NzbUFwcHJvdmFsX2lzRWRpdDtcbiAgICBpZiAoaW52Py5zdGF0dXMgPT09ICdwZW5kaW5nRmluYW5jZScpIHJldHVybiAhIXVzZXJBY2Nlc3MuVGFuZ29BZG1pbl9maW5hbmNlQXBwcm92YWxfaXNFZGl0O1xuICAgIGlmIChpbnY/LnN0YXR1cyA9PT0gJ3BlbmRpbmdBcHByb3ZhbCcpIHJldHVybiAhIXVzZXJBY2Nlc3MuVGFuZ29BZG1pbl9pbnZvaWNlQXBwcm92YWxfaXNFZGl0O1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldEFwcHJvdmVUb29sdGlwKGludjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoaW52Py5zdGF0dXMgPT09ICdwZW5kaW5nQ3NtJykgcmV0dXJuICdBcHByb3ZlIGFzIENTTSc7XG4gICAgaWYgKGludj8uc3RhdHVzID09PSAncGVuZGluZ0ZpbmFuY2UnKSByZXR1cm4gJ0FwcHJvdmUgYXMgRmluYW5jZSc7XG4gICAgaWYgKGludj8uc3RhdHVzID09PSAncGVuZGluZ0FwcHJvdmFsJykgcmV0dXJuICdGaW5hbCBBcHByb3ZlJztcbiAgICByZXR1cm4gJ0FwcHJvdmUgSW52b2ljZSc7XG4gIH1cblxuICBwcml2YXRlIGFkdmFuY2VJbnZvaWNlQnlTdGF0dXMoaW52OiBhbnkpIHtcbiAgICAvLyBMZWdhY3kgJ3BlbmRpbmcnIGludm9pY2VzIGFyZSB0cmVhdGVkIGFzIHRoZSBmaXJzdCAoQ1NNKSBzdGFnZSBzbyB0aGV5XG4gICAgLy8gcmVtYWluIGFwcHJvdmFibGUgYWZ0ZXIgdGhlIHBpcGVsaW5lIG1pZ3JhdGlvbi5cbiAgICBpZiAoaW52Py5zdGF0dXMgPT09ICdwZW5kaW5nQ3NtJyB8fCBpbnY/LnN0YXR1cyA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5CaWxsaW5nU2VydmljZS5hcHByb3ZlSW52b2ljZUNzbShpbnYuX2lkKTtcbiAgICB9XG4gICAgaWYgKGludj8uc3RhdHVzID09PSAncGVuZGluZ0ZpbmFuY2UnKSB7XG4gICAgICByZXR1cm4gdGhpcy5CaWxsaW5nU2VydmljZS5hcHByb3ZlSW52b2ljZUZpbmFuY2UoaW52Ll9pZCk7XG4gICAgfVxuICAgIGlmIChpbnY/LnN0YXR1cyA9PT0gJ3BlbmRpbmdBcHByb3ZhbCcpIHtcbiAgICAgIC8vIEZpbmFsIHN0YWdlOiBnZW5lcmF0ZSB0aGUgUERGIGFuZCBlbWFpbCB0aGUgaW52b2ljZSAoc2VuZEludm9pY2UpIHdoaWxlXG4gICAgICAvLyBhZHZhbmNpbmcgdGhlIHN0YXR1cyB0byAnYXBwcm92ZWQnLiBNaXJyb3JzIHRoZSBicmFuZC1pbnZvaWNlcyBmbG93IHNvXG4gICAgICAvLyB0aGUgaW52b2ljZSBtYWlsIGlzIGFjdHVhbGx5IHNlbnQgb24gZmluYWwgYXBwcm92YWwuXG4gICAgICBjb25zdCBwYXlsb2FkID0geyAuLi5pbnYsIHNlbmRJbnZvaWNlOiB0cnVlLCBzdGF0dXM6ICdhcHByb3ZlZCcgfTtcbiAgICAgIHJldHVybiB0aGlzLkJpbGxpbmdTZXJ2aWNlLmludm9pY2VEb3dubG9hZChwYXlsb2FkKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBSZXR1cm5zIFt7ZnJvbSwgdG8sIGNvdW50fV0gZm9yIHRoZSBjb25maXJtYXRpb24gcG9wdXAgYnJlYWtkb3duLlxuICBwcml2YXRlIGJ1aWxkVHJhbnNpdGlvbnMoaW52b2ljZXM6IGFueVtdKTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmc7IGNvdW50OiBudW1iZXIgfVtdIHtcbiAgICBjb25zdCBvcmRlciA9IFsncGVuZGluZ0NzbScsICdwZW5kaW5nRmluYW5jZScsICdwZW5kaW5nQXBwcm92YWwnXTtcbiAgICBjb25zdCBjb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICBpbnZvaWNlcy5mb3JFYWNoKChpbnYpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGludj8uc3RhdHVzO1xuICAgICAgaWYgKHRoaXMuc3RhZ2VOZXh0W3N0YXR1c10pIHtcbiAgICAgICAgY291bnRzW3N0YXR1c10gPSAoY291bnRzW3N0YXR1c10gfHwgMCkgKyAxO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvcmRlclxuICAgICAgLmZpbHRlcigocykgPT4gY291bnRzW3NdKVxuICAgICAgLm1hcCgocykgPT4gKHsgZnJvbTogdGhpcy5zdGFnZUxhYmVsc1tzXSwgdG86IHRoaXMuc3RhZ2VMYWJlbHNbdGhpcy5zdGFnZU5leHRbc11dLCBjb3VudDogY291bnRzW3NdIH0pKTtcbiAgfVxuXG4gIGFwcHJvdmVJbnZvaWNlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihSZXF1ZXN0Q29uZmlybWF0aW9uQ29tcG9uZW50LCB7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJywgc2Nyb2xsYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50cmFuc2l0aW9ucyA9IHRoaXMuYnVpbGRUcmFuc2l0aW9ucyhbZGF0YV0pO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ1llcycpIHtcbiAgICAgICAgY29uc3QgY2FsbCA9IHRoaXMuYWR2YW5jZUludm9pY2VCeVN0YXR1cyhkYXRhKTtcbiAgICAgICAgaWYgKCFjYWxsKSByZXR1cm47XG4gICAgICAgIGNhbGwucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoJ0ludm9pY2UgYWR2YW5jZWQgdG8gdGhlIG5leHQgc3RhZ2UnKTtcbiAgICAgICAgICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gVGhlIGZpbmFsIHN0YWdlIGNhbGxzIGludm9pY2VEb3dubG9hZCAocmVzcG9uc2VUeXBlOidhcnJheWJ1ZmZlcicpLFxuICAgICAgICAgICAgLy8gc28gYW4gZXJyb3IgYm9keSBjb21lcyBiYWNrIGFzIGFuIEFycmF5QnVmZmVyL0Jsb2IgcmF0aGVyIHRoYW4gYVxuICAgICAgICAgICAgLy8gcGFyc2VkIG9iamVjdCDigJQgZXJyLmVycm9yLm1lc3NhZ2UgaXMgdW5kZWZpbmVkIGFuZCB0aGUgcmVhbFxuICAgICAgICAgICAgLy8gYmFja2VuZCBtZXNzYWdlIGlzIGxvc3QuIERlY29kZSBpdCBiZWZvcmUgZmFsbGluZyBiYWNrLlxuICAgICAgICAgICAgdGhpcy5leHRyYWN0SHR0cEVycm9yTWVzc2FnZShlcnIsICdGYWlsZWQgdG8gYWR2YW5jZSBpbnZvaWNlJykudGhlbigobXNnOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIC8vIEV4dHJhY3QgYSBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGZyb20gYW4gSHR0cEVycm9yUmVzcG9uc2UuIFdoZW4gdGhlIHJlcXVlc3RcbiAgLy8gdXNlZCByZXNwb25zZVR5cGUgJ2FycmF5YnVmZmVyJy8nYmxvYicgKGUuZy4gaW52b2ljZURvd25sb2FkIG9uIGZpbmFsXG4gIC8vIGFwcHJvdmFsKSwgYW4gZXJyb3IgYm9keSBpcyByZXR1cm5lZCBhcyBiaW5hcnkgcmF0aGVyIHRoYW4gcGFyc2VkIEpTT04sIHNvXG4gIC8vIGVyci5lcnJvci5tZXNzYWdlIGlzIHVuZGVmaW5lZC4gRGVjb2RlIHRoZSBiaW5hcnkgYmFjayB0byB0ZXh0L0pTT04gaGVyZSBzb1xuICAvLyB0aGUgcmVhbCBiYWNrZW5kIG1lc3NhZ2Ugc3VyZmFjZXMgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBmYWxsYmFjay5cbiAgcHJpdmF0ZSBhc3luYyBleHRyYWN0SHR0cEVycm9yTWVzc2FnZShlcnI6IGFueSwgZmFsbGJhY2s6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYm9keSA9IGVycj8uZXJyb3I7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB0ZXh0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdGV4dCA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShib2R5KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIGJvZHkgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIHRleHQgPSBhd2FpdCBib2R5LnRleHQoKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRleHQgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChib2R5ICYmIHR5cGVvZiBib2R5ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBBbHJlYWR5IHBhcnNlZCBKU09OIGVycm9yIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIGJvZHkubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBpZiAodGV4dCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlZD8ubWVzc2FnZSB8fCBmYWxsYmFjaztcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gTm90IEpTT04g4oCUIHVzZSB0aGUgcmF3IHRleHQgaWYgaXQncyBtZWFuaW5nZnVsLlxuICAgICAgICAgIHJldHVybiB0ZXh0LnRyaW0oKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRGVjb2RpbmcgZmFpbGVkIOKAlCBmYWxsIHRocm91Z2ggdG8gdGhlIGZhbGxiYWNrLlxuICAgIH1cbiAgICByZXR1cm4gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgZmFsbGJhY2s7XG4gIH1cblxuICAvLyA9PT09PSBGaWx0ZXIgdGFicyA9PT09PVxuICBzZXRGaWx0ZXIoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlciA9IGZpbHRlcjtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICAvLyBSZXNldCBzZWxlY3Rpb24gd2hlbiBzd2l0Y2hpbmcgZmlsdGVycyDigJQgZGlmZmVyZW50IHZpc2libGUgc2V0LlxuICAgIHRoaXMuc2VsZWN0ZWRJbnZvaWNlcy5jbGVhcigpO1xuICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XG5cbiAgICBpZiAoZmlsdGVyID09PSAnUGVuZGluZyBBcHByb3ZhbCcpIHtcbiAgICAgIHRoaXMuQXBwcm92YWxGaWx0ZXIgPSBbJ3BlbmRpbmdDc20nLCAncGVuZGluZ0ZpbmFuY2UnLCAncGVuZGluZ0FwcHJvdmFsJ107XG4gICAgICB0aGlzLnBheW1lbnRGaWx0ZXIgPSBbXTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciA9PT0gJ1BlbmRpbmcgUGF5bWVudCcpIHtcbiAgICAgIHRoaXMuQXBwcm92YWxGaWx0ZXIgPSBbJ2FwcHJvdmVkJ107XG4gICAgICB0aGlzLnBheW1lbnRGaWx0ZXIgPSBbJ3VucGFpZCddO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyID09PSAnUGFpZCcpIHtcbiAgICAgIHRoaXMuQXBwcm92YWxGaWx0ZXIgPSBbXTtcbiAgICAgIHRoaXMucGF5bWVudEZpbHRlciA9IFsncGFpZCddO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyID09PSAnQ2FuY2VsbGVkJykge1xuICAgICAgdGhpcy5BcHByb3ZhbEZpbHRlciA9IFsnY2FuY2VsbGVkJ107XG4gICAgICB0aGlzLnBheW1lbnRGaWx0ZXIgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5BcHByb3ZhbEZpbHRlciA9IFtdO1xuICAgICAgdGhpcy5wYXltZW50RmlsdGVyID0gW107XG4gICAgfVxuICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICB9XG5cbiAgLy8gPT09PT0gRGlzcGxheSBoZWxwZXJzID09PT09XG4gIGludm9pY2VDdXJyZW5jeVN5bWJvbChpbnY6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVuY3lTeW1ib2xzW2ludj8uY3VycmVuY3kgfHwgJyddIHx8ICckJztcbiAgfVxuXG4gIC8vIExvY2tlZCBvbmNlIGZpbmFsLWFwcHJvdmVkIG9yIGNhbmNlbGxlZCDigJQgRWRpdCBhbmQgRGVsZXRlIG11c3Qgbm90IG11dGF0ZS5cbiAgaXNJbnZvaWNlTG9ja2VkKGludjogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGludj8uc3RhdHVzID09PSAnYXBwcm92ZWQnIHx8IGludj8uc3RhdHVzID09PSAnY2FuY2VsbGVkJztcbiAgfVxuXG4gIC8vIENhbmNlbGxhYmxlIG9ubHkgd2hpbGUgYXBwcm92ZWQgYW5kIHN0aWxsIHVucGFpZCDigJQgbWF0Y2hlcyB0aGUgYmFja2VuZCdzXG4gIC8vIG93biBnYXRlIGluIGNhbmNlbEludm9pY2UuXG4gIGNhbkNhbmNlbEludm9pY2UoaW52OiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBDYW5jZWxsYWJsZSBvbmNlIHRoZSBpbnZvaWNlIG51bWJlciBpcyBtaW50ZWQgKHBlbmRpbmdBcHByb3ZhbCBhbmRcbiAgICAvLyBhcHByb3ZlZCkgd2hpbGUgc3RpbGwgdW5wYWlkIOKAlCBtaXJyb3JzIHRoZSBiYWNrZW5kIGNhbmNlbEludm9pY2UgZ3VhcmQuXG4gICAgcmV0dXJuIChpbnY/LnN0YXR1cyA9PT0gJ2FwcHJvdmVkJyB8fCBpbnY/LnN0YXR1cyA9PT0gJ3BlbmRpbmdBcHByb3ZhbCcpICYmIGludj8ucGF5bWVudFN0YXR1cyA9PT0gJ3VucGFpZCc7XG4gIH1cblxuICAvLyBNYXBzIGJvdGggcGlwZWxpbmUgc3RhdHVzIGFuZCBwYXltZW50IHN0YXR1cyBpbnRvIHRoZSBiYWRnZSB0ZXh0L2NsYXNzXG4gIC8vIHNob3duIGluIHRoZSB0YWJsZS4gTWlycm9ycyBicmFuZC1pbnZvaWNlcyBmb3IgY29uc2lzdGVuY3kuXG4gIGdldEludm9pY2VTdGF0dXMoaW52b2ljZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoaW52b2ljZS5zdGF0dXMgPT09ICdjYW5jZWxsZWQnKSByZXR1cm4gJ0NhbmNlbGxlZCc7XG4gICAgaWYgKGludm9pY2Uuc3RhdHVzID09PSAncGVuZGluZ0NzbScpIHJldHVybiAnUGVuZGluZyBDU00nO1xuICAgIGlmIChpbnZvaWNlLnN0YXR1cyA9PT0gJ3BlbmRpbmdGaW5hbmNlJykgcmV0dXJuICdQZW5kaW5nIEZpbmFuY2UnO1xuICAgIGlmIChpbnZvaWNlLnN0YXR1cyA9PT0gJ3BlbmRpbmdBcHByb3ZhbCcpIHJldHVybiAnUGVuZGluZyBBcHByb3ZhbCc7XG4gICAgaWYgKGludm9pY2Uuc3RhdHVzID09PSAncGVuZGluZycpIHJldHVybiAnUGVuZGluZyBBcHByb3ZhbCc7XG4gICAgaWYgKGludm9pY2UucGF5bWVudFN0YXR1cyA9PT0gJ3BhcnRpYWwnKSByZXR1cm4gJ1BhcnRpYWwnO1xuICAgIGlmIChpbnZvaWNlLnBheW1lbnRTdGF0dXMgPT09ICd1bnBhaWQnKSByZXR1cm4gJ1BlbmRpbmcgUGF5bWVudCc7XG4gICAgaWYgKGludm9pY2UucGF5bWVudFN0YXR1cyA9PT0gJ3BhaWQnKSByZXR1cm4gJ1BhaWQnO1xuICAgIHJldHVybiBpbnZvaWNlLnN0YXR1cztcbiAgfVxuXG4gIGdldFN0YXR1c0NsYXNzKGludm9pY2U6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGludm9pY2Uuc3RhdHVzID09PSAnY2FuY2VsbGVkJykgcmV0dXJuICdiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0JztcbiAgICBpZiAoaW52b2ljZS5zdGF0dXMgPT09ICdwZW5kaW5nQ3NtJykgcmV0dXJuICdiYWRnZSBiYWRnZS1saWdodC13YXJuaW5nJztcbiAgICBpZiAoaW52b2ljZS5zdGF0dXMgPT09ICdwZW5kaW5nRmluYW5jZScpIHJldHVybiAnYmFkZ2UgYmFkZ2UtbGlnaHQtaW5mbyc7XG4gICAgaWYgKGludm9pY2Uuc3RhdHVzID09PSAncGVuZGluZ0FwcHJvdmFsJykgcmV0dXJuICdiYWRnZSBiYWRnZS1saWdodC1kYXJrJztcbiAgICBpZiAoaW52b2ljZS5zdGF0dXMgPT09ICdwZW5kaW5nJykgcmV0dXJuICdiYWRnZSBiYWRnZS1saWdodC13YXJuaW5nJztcbiAgICBpZiAoaW52b2ljZS5wYXltZW50U3RhdHVzID09PSAncGFpZCcpIHJldHVybiAnYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2Vzcyc7XG4gICAgaWYgKGludm9pY2UucGF5bWVudFN0YXR1cyA9PT0gJ3BhcnRpYWwnKSByZXR1cm4gJ2JhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmcnO1xuICAgIGlmIChpbnZvaWNlLnBheW1lbnRTdGF0dXMgPT09ICd1bnBhaWQnKSByZXR1cm4gJ2JhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnknO1xuICAgIHJldHVybiAnYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyJztcbiAgfVxuXG4gIC8vID09PT09IFByb3RvdHlwZS1wYXJpdHkgaGVscGVycyAoQWxsIEludm9pY2VzIHJlZGVzaWduKSA9PT09PVxuICAvLyBEdWUgU3RhdHVzIGNlbGwg4oCUIFwiRHVlIGluIE4gZGF5c1wiIC8gXCJEdWUgdG9kYXlcIiAvIFwiT3ZlcmR1ZSBieSBOIGRheXNcIi5cbiAgLy8gUGFpZCBpbnZvaWNlcyBzaG93IGEgZGFzaDogdGhlIGR1ZSBkYXRlIG5vIGxvbmdlciBtYXR0ZXJzIG9uY2Ugc2V0dGxlZC5cbiAgZ2V0RHVlU3RhdHVzKGludm9pY2U6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGludm9pY2U/LnBheW1lbnRTdGF0dXMgPT09ICdwYWlkJykgcmV0dXJuICfigJQnO1xuICAgIGlmICghaW52b2ljZT8uZHVlRGF0ZSkgcmV0dXJuICfigJQnO1xuICAgIGNvbnN0IGR1ZSA9IG5ldyBEYXRlKGludm9pY2UuZHVlRGF0ZSk7IGR1ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7IHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIGNvbnN0IGRheXMgPSBNYXRoLnJvdW5kKChkdWUuZ2V0VGltZSgpIC0gdG9kYXkuZ2V0VGltZSgpKSAvIDg2NDAwMDAwKTtcbiAgICBpZiAoZGF5cyA8IDApIHJldHVybiBgT3ZlcmR1ZSBieSAkey1kYXlzfSBkYXkke2RheXMgPT09IC0xID8gJycgOiAncyd9YDtcbiAgICBpZiAoZGF5cyA9PT0gMCkgcmV0dXJuICdEdWUgdG9kYXknO1xuICAgIHJldHVybiBgRHVlIGluICR7ZGF5c30gZGF5JHtkYXlzID09PSAxID8gJycgOiAncyd9YDtcbiAgfVxuXG4gIGdldER1ZVN0YXR1c0NsYXNzKGludm9pY2U6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGludm9pY2U/LnBheW1lbnRTdGF0dXMgPT09ICdwYWlkJyB8fCAhaW52b2ljZT8uZHVlRGF0ZSkgcmV0dXJuICdkdWUtbXV0ZWQnO1xuICAgIGNvbnN0IGR1ZSA9IG5ldyBEYXRlKGludm9pY2UuZHVlRGF0ZSk7IGR1ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7IHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIGNvbnN0IGRheXMgPSBNYXRoLnJvdW5kKChkdWUuZ2V0VGltZSgpIC0gdG9kYXkuZ2V0VGltZSgpKSAvIDg2NDAwMDAwKTtcbiAgICBpZiAoZGF5cyA8IDApIHJldHVybiAnZHVlLW92ZXJkdWUnO1xuICAgIGlmIChkYXlzID09PSAwKSByZXR1cm4gJ2R1ZS10b2RheSc7XG4gICAgcmV0dXJuICdkdWUtdXBjb21pbmcnO1xuICB9XG5cbiAgLy8gR1NUIGNvbHVtbiDigJQgcHJlZmVyIHRoZSBiYWNrZW5kLWNvbXB1dGVkIHZhbHVlOyBmYWxsIGJhY2sgdG8gdGhlXG4gIC8vIGRpZmZlcmVuY2Ugc28gb2xkZXIgY2FjaGVkIHJlc3BvbnNlcyBzdGlsbCByZW5kZXIuXG4gIGdzdEFtb3VudChpbnZvaWNlOiBhbnkpOiBudW1iZXIge1xuICAgIGlmIChpbnZvaWNlPy5nc3RBbW91bnQgIT0gbnVsbCkgcmV0dXJuIE51bWJlcihpbnZvaWNlLmdzdEFtb3VudCkgfHwgMDtcbiAgICBjb25zdCB0b3RhbCA9IE51bWJlcihpbnZvaWNlPy50b3RhbEFtb3VudCkgfHwgMDtcbiAgICBjb25zdCBhbW91bnQgPSBOdW1iZXIoaW52b2ljZT8uYW1vdW50KSB8fCAwO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKCh0b3RhbCAtIGFtb3VudCkgKiAxMDApIC8gMTAwKTtcbiAgfVxuXG4gIC8vIEdTVCBvbmx5IGFwcGxpZXMgdG8gZG9tZXN0aWMgKElOUikgaW52b2ljZXMuIEludGVybmF0aW9uYWwgaW52b2ljZXNcbiAgLy8gKGRvbGxhciAvIGV1cm8gLyBldGMuKSBhcmUgYmlsbGVkIHdpdGhvdXQgR1NULCBzbyB0aGUgY29sdW1uIHNob3dzIGEgZGFzaFxuICAvLyByYXRoZXIgdGhhbiBhIG1lYW5pbmdsZXNzIFwiJCAwXCIuXG4gIGlzR3N0QXBwbGljYWJsZShpbnZvaWNlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGludm9pY2U/LmN1cnJlbmN5IHx8ICdpbnInKSA9PT0gJ2lucic7XG4gIH1cblxuICAvLyBOdW1iZXIgZm9ybWF0IGZvciB0aGUgYW1vdW50IGNvbHVtbnMuIElOUiBpbnZvaWNlcyBhcmUgc2hvd24gYXMgd2hvbGVcbiAgLy8gcnVwZWVzICgnMS4wLTAnKSwgbWF0Y2hpbmcgdGhlIGV4aXN0aW5nIGRpc3BsYXkuIE5vbi1JTlIgKGRvbGxhciAvIGV1cm8gL1xuICAvLyBldGMuKSBpbnZvaWNlcyBrZWVwIHRoZWlyIGRlY2ltYWxzICgnMS4yLTInKSBzbyB0aGUgdmFsdWUgaXNuJ3Qgcm91bmRlZCBvZmYuXG4gIGFtb3VudEZvcm1hdChpbnZvaWNlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiAoaW52b2ljZT8uY3VycmVuY3kgfHwgJ2lucicpID09PSAnaW5yJyA/ICcxLjAtMCcgOiAnMS4yLTInO1xuICB9XG5cbiAgLy8gUGF5bWVudCAvIEFwcHJvdmFsIHNwbGl0IGludG8gdHdvIHBpbGwgY29sdW1ucyAocHJvdG90eXBlIGxheW91dCkuXG4gIGdldFBheW1lbnRMYWJlbChpbnZvaWNlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChpbnZvaWNlPy5wYXltZW50U3RhdHVzID09PSAncGFpZCcpIHJldHVybiAnUGFpZCc7XG4gICAgaWYgKGludm9pY2U/LnBheW1lbnRTdGF0dXMgPT09ICdwYXJ0aWFsJykgcmV0dXJuICdQYXJ0aWFsJztcbiAgICByZXR1cm4gJ1VucGFpZCc7XG4gIH1cblxuICBnZXRQYXltZW50UGlsbENsYXNzKGludm9pY2U6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGludm9pY2U/LnBheW1lbnRTdGF0dXMgPT09ICdwYWlkJykgcmV0dXJuICdwaWxsIHBpbGwtZ3JlZW4nO1xuICAgIGlmIChpbnZvaWNlPy5wYXltZW50U3RhdHVzID09PSAncGFydGlhbCcpIHJldHVybiAncGlsbCBwaWxsLWFtYmVyJztcbiAgICByZXR1cm4gJ3BpbGwgcGlsbC1hbWJlcic7XG4gIH1cblxuICBnZXRBcHByb3ZhbExhYmVsKGludm9pY2U6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhZ2VMYWJlbHNbaW52b2ljZT8uc3RhdHVzXSB8fCBpbnZvaWNlPy5zdGF0dXMgfHwgJ+KAlCc7XG4gIH1cblxuICBnZXRBcHByb3ZhbFBpbGxDbGFzcyhpbnZvaWNlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBpbnZvaWNlPy5zdGF0dXMgPT09ICdhcHByb3ZlZCcgPyAncGlsbCBwaWxsLWdyZWVuJyA6ICdwaWxsIHBpbGwtYW1iZXInO1xuICB9XG5cbiAgcGVuZGluZ0Ftb3VudChpbnZvaWNlOiBhbnkpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsID0gTnVtYmVyKGludm9pY2U/LnRvdGFsQW1vdW50KSB8fCAwO1xuICAgIGNvbnN0IHBhaWQgPSBOdW1iZXIoaW52b2ljZT8ucGFpZEFtb3VudCkgfHwgMDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgodG90YWwgLSBwYWlkKSAqIDEwMCkgLyAxMDApO1xuICB9XG5cbiAgaGFzUGVuZGluZyhpbnZvaWNlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYWlkID0gTnVtYmVyKGludm9pY2U/LnBhaWRBbW91bnQpIHx8IDA7XG4gICAgcmV0dXJuIHBhaWQgPiAwICYmIHRoaXMucGVuZGluZ0Ftb3VudChpbnZvaWNlKSA+IDA7XG4gIH1cblxuICAvLyA9PT09PSBNdWx0aS1zZWxlY3QgPT09PT1cbiAgdG9nZ2xlU2VsZWN0QWxsKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5pbnZvaWNlTGlzdC5mb3JFYWNoKChpbnY6IGFueSkgPT4gdGhpcy5zZWxlY3RlZEludm9pY2VzLmFkZChpbnYuX2lkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbnZvaWNlcy5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUludm9pY2VTZWxlY3QoaW52OiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEludm9pY2VzLmhhcyhpbnYuX2lkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEludm9pY2VzLmRlbGV0ZShpbnYuX2lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEludm9pY2VzLmFkZChpbnYuX2lkKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RBbGwgPSB0aGlzLmludm9pY2VMaXN0Lmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuaW52b2ljZUxpc3QuZXZlcnkoKGk6IGFueSkgPT4gdGhpcy5zZWxlY3RlZEludm9pY2VzLmhhcyhpLl9pZCkpO1xuICB9XG5cbiAgaXNTZWxlY3RlZChpbnY6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSW52b2ljZXMuaGFzKGludi5faWQpO1xuICB9XG5cbiAgLy8gQ291bnQgb2Ygc2VsZWN0ZWQgaW52b2ljZXMgdGhlIGN1cnJlbnQgdXNlciBpcyBhY3R1YWxseSBhbGxvd2VkIHRvIGFwcHJvdmUuXG4gIC8vIERyaXZlcyB0aGUgYnVsayBBcHByb3ZlIGJ1dHRvbidzIGVuYWJsZWQgc3RhdGUgYW5kIGl0cyBcIihOKVwiIGxhYmVsLlxuICBwZW5kaW5nSW5TZWxlY3Rpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pbnZvaWNlTGlzdC5maWx0ZXIoKGludjogYW55KSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZEludm9pY2VzLmhhcyhpbnYuX2lkKSAmJiB0aGlzLmNhbkFwcHJvdmUoaW52LCB0aGlzLnVzZXJBY2Nlc3MpXG4gICAgKS5sZW5ndGg7XG4gIH1cblxuICAvLyA9PT09PSBCdWxrIGFwcHJvdmUgPT09PT1cbiAgYXBwcm92ZVNlbGVjdGVkKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW52b2ljZXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGVjdGVkTGlzdCA9IHRoaXMuaW52b2ljZUxpc3QuZmlsdGVyKChpbnY6IGFueSkgPT5cbiAgICAgIHRoaXMuc2VsZWN0ZWRJbnZvaWNlcy5oYXMoaW52Ll9pZCkgJiYgdGhpcy5jYW5BcHByb3ZlKGludiwgdGhpcy51c2VyQWNjZXNzKVxuICAgICk7XG4gICAgaWYgKHNlbGVjdGVkTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnTm8gcGVuZGluZyBpbnZvaWNlcyBpbiBzZWxlY3Rpb24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFJlcXVlc3RDb25maXJtYXRpb25Db21wb25lbnQsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRyYW5zaXRpb25zID0gdGhpcy5idWlsZFRyYW5zaXRpb25zKHNlbGVjdGVkTGlzdCk7XG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnWWVzJykge1xuICAgICAgICB0aGlzLmJ1bGtBcHByb3ZpbmcgPSB0cnVlO1xuICAgICAgICBsZXQgY29tcGxldGVkID0gMDtcbiAgICAgICAgbGV0IHN1Y2NlZWRlZCA9IDA7XG4gICAgICAgIGxldCBmYWlsZWQgPSAwO1xuICAgICAgICBzZWxlY3RlZExpc3QuZm9yRWFjaCgoaW52OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjYWxsID0gdGhpcy5hZHZhbmNlSW52b2ljZUJ5U3RhdHVzKGludik7XG4gICAgICAgICAgaWYgKCFjYWxsKSB7XG4gICAgICAgICAgICBjb21wbGV0ZWQrKzsgZmFpbGVkKys7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGwucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbXBsZXRlZCsrOyBzdWNjZWVkZWQrKztcbiAgICAgICAgICAgICAgaWYgKGNvbXBsZXRlZCA9PT0gc2VsZWN0ZWRMaXN0Lmxlbmd0aCkgdGhpcy5maW5pc2hCdWxrQXBwcm92ZShzdWNjZWVkZWQsIGZhaWxlZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgY29tcGxldGVkKys7IGZhaWxlZCsrO1xuICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSBzZWxlY3RlZExpc3QubGVuZ3RoKSB0aGlzLmZpbmlzaEJ1bGtBcHByb3ZlKHN1Y2NlZWRlZCwgZmFpbGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5pc2hCdWxrQXBwcm92ZShzdWNjZWVkZWQ6IG51bWJlciwgZmFpbGVkOiBudW1iZXIpIHtcbiAgICB0aGlzLmJ1bGtBcHByb3ZpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkSW52b2ljZXMuY2xlYXIoKTtcbiAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIGlmIChmYWlsZWQgPT09IDApIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KGAke3N1Y2NlZWRlZH0gaW52b2ljZShzKSBhZHZhbmNlZCB0byBuZXh0IHN0YWdlYCk7XG4gICAgfSBlbHNlIGlmIChzdWNjZWVkZWQgPT09IDApIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgQWxsICR7ZmFpbGVkfSBpbnZvaWNlKHMpIGZhaWxlZCB0byBhZHZhbmNlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgJHtzdWNjZWVkZWR9IGFkdmFuY2VkLCAke2ZhaWxlZH0gZmFpbGVkYCk7XG4gICAgfVxuICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICB9XG5cbiAgLy8gPT09PT0gQnVsayBkb3dubG9hZCAoemlwKSA9PT09PVxuICBkb3dubG9hZFNlbGVjdGVkKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW52b2ljZXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgIHRoaXMuYnVsa0Rvd25sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBwYXlsb2FkID0geyBpbnZvaWNlSWRzOiBbLi4udGhpcy5zZWxlY3RlZEludm9pY2VzXSB9O1xuICAgIGNvbnN0IGNvdW50ID0gcGF5bG9hZC5pbnZvaWNlSWRzLmxlbmd0aDtcbiAgICB0aGlzLkJpbGxpbmdTZXJ2aWNlLmJ1bGtJbnZvaWNlRG93bmxvYWQocGF5bG9hZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyZXNdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi96aXAnIH0pO1xuICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgaW52b2ljZXMtJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApfS56aXBgO1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLmhyZWYgPSB1cmw7IGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTsgbGluay5jbGljaygpOyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICB0aGlzLmJ1bGtEb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW52b2ljZXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoYERvd25sb2FkZWQgJHtjb3VudH0gaW52b2ljZShzKWApO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmJ1bGtEb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ZhaWxlZCB0byBkb3dubG9hZCBpbnZvaWNlcycpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09IFZpZXcgLyBFZGl0IC8gRGVsZXRlIChtb2RhbCB3aXJpbmcpID09PT09XG4gIG9wZW5JbnZvaWNlUHJldmlldyhpbnY6IGFueSkge1xuICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UuZ2V0SW52b2ljZUJ5SWQoaW52Ll9pZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaW52b2ljZURhdGEgPSByZXM/LmRhdGEgfHwgaW52O1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oSW52b2ljZVByZXZpZXdDb21wb25lbnQsIHtcbiAgICAgICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ3hsJywgc2Nyb2xsYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmludm9pY2VEYXRhID0gaW52b2ljZURhdGE7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnRmFpbGVkIHRvIGxvYWQgaW52b2ljZScpXG4gICAgfSk7XG4gIH1cblxuICBlZGl0SW52b2ljZShpbnY6IGFueSkge1xuICAgIGlmICh0aGlzLmlzSW52b2ljZUxvY2tlZChpbnYpKSByZXR1cm47XG4gICAgdGhpcy5CaWxsaW5nU2VydmljZS5nZXRJbnZvaWNlQnlJZChpbnYuX2lkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBmdWxsSW52b2ljZSA9IHJlcz8uZGF0YSB8fCBpbnY7XG4gICAgICAgIHRoaXMub3BlbkVkaXRNb2RhbChmdWxsSW52b2ljZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMub3BlbkVkaXRNb2RhbChpbnYpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5FZGl0TW9kYWwoaW52b2ljZURhdGE6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihFZGl0SW52b2ljZUNvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICd4bCcsIHNjcm9sbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW52b2ljZURhdGEgPSBpbnZvaWNlRGF0YTtcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5tb2RlID0gJ2VkaXQnO1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNsaWVudElkID0gaW52b2ljZURhdGE/LmNsaWVudElkO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3VwZGF0ZWQnIHx8IHJlc3VsdCA9PT0gJ2NyZWRpdEFwcGxpZWQnIHx8IHJlc3VsdCA9PT0gJ2ZlZUFwcGxpZWQnKSB7XG4gICAgICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIGRlbGV0ZUludm9pY2UoaW52OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0ludm9pY2VMb2NrZWQoaW52KSkgcmV0dXJuO1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PT0gJ1llcycpIHtcbiAgICAgICAgdGhpcy5CaWxsaW5nU2VydmljZS5kZWxldGVJbnZvaWNlKGludi5faWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KCdJbnZvaWNlIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBkZWxldGUgaW52b2ljZSc7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QobXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIC8vIENhbmNlbCBhbiBhcHByb3ZlZCt1bnBhaWQgaW52b2ljZS4gQ29uZmlybWF0aW9uIG1vZGFsIGNvbGxlY3RzIGFcbiAgLy8gbWFuZGF0b3J5IHJlYXNvbjsgdGhlIGJhY2tlbmQgcmUtdmFsaWRhdGVzIHN0YXR1cy9wYXltZW50U3RhdHVzIGFuZCB0aGVcbiAgLy8gcmVhc29uIGJlZm9yZSBmbGlwcGluZyBzdGF0dXMgdG8gJ2NhbmNlbGxlZCcuXG4gIGNhbmNlbEludm9pY2UoaW52OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuY2FuQ2FuY2VsSW52b2ljZShpbnYpKSByZXR1cm47XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKENhbmNlbEludm9pY2VDb21wb25lbnQsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdD8ucmVhc29uKSB7XG4gICAgICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UuY2FuY2VsSW52b2ljZShpbnYuX2lkLCB7IHJlYXNvbjogcmVzdWx0LnJlYXNvbiB9KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnSW52b2ljZSBjYW5jZWxsZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjYW5jZWwgaW52b2ljZSc7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QobXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIC8vIE9wZW5zIHRoZSBhY3Rpdml0eS1sb2cgdGltZWxpbmUgZm9yIGEgc2luZ2xlIGludm9pY2Ug4oCUIHRyaWdnZXJlZCBieVxuICAvLyBjbGlja2luZyBpdHMgc3RhdHVzIGJhZGdlLiBSZWFkLW9ubHk7IHRoZSBtb2RhbCBmZXRjaGVzIG9uIGluaXQuXG4gIG9wZW5JbnZvaWNlTG9ncyhpbnY6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihJbnZvaWNlTG9nc0NvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIHNjcm9sbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW52b2ljZSA9IGludjtcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IGFueSkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMucGFnZVNpemUgPSBwYXJzZUludChwYWdlU2l6ZSlcbiAgICAvLyBLZWVwIGl0ZW1zUGVyUGFnZSBpbiBzeW5jIOKAlCB0aGUgcGFnaW5hdGlvbiBjb250cm9sIGRlcml2ZXMgaXRzIHBhZ2UgY291bnRcbiAgICAvLyBmcm9tIGl0ZW1zUGVyUGFnZSwgc28gYSBzdGFsZSAxMCBicm9rZSB0aGUgcGFnZSBudW1iZXJzIGZvciBvdGhlciBzaXplcy5cbiAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IHRoaXMucGFnZVNpemU7XG4gICAgdGhpcy5pbnZvaWNlVGFibGVEYXRhKClcblxuICB9XG4gIG9uUGFnZVNpemVDaGFuZ2VUcmFuKHBhZ2VTaXplOiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnR0cmFuUGFnZSA9IDE7XG4gICAgdGhpcy5wYWdldHJhbnNTaXplID0gcGFyc2VJbnQocGFnZVNpemUpXG4gICAgdGhpcy5pdGVtc1BlclBhZ2V0cmFuID0gdGhpcy5wYWdldHJhbnNTaXplO1xuICAgIHRoaXMuY3JlZGl0VHJhbnNhY3Rpb25saXN0KClcbiAgfVxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhcnNlSW50KHBhZ2VPZmZzZXQpXG4gICAgdGhpcy5pbnZvaWNlVGFibGVEYXRhKClcbiAgICBcbiAgfVxuICBvblBhZ2VDaGFuZ2V0cmFuKHBhZ2VPZmZzZXQ6IGFueSkge1xuICAgIHRoaXMuY3VycmVudHRyYW5QYWdlID0gcGFyc2VJbnQocGFnZU9mZnNldClcbiAgICB0aGlzLmNyZWRpdFRyYW5zYWN0aW9ubGlzdCgpXG4gIH1cbiAgaW52b2ljZUZpbHRlcigpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMVxuICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpXG4gICAgdGhpcy5jcmVkaXRUcmFuc2FjdGlvbmxpc3QoKVxuXG4gIH1cblxuICBzb3J0RGF0YShjb2x1bW46IGFueSkge1xuICAgIHRoaXMuc29ydENvbHVtTmFtZSA9IGNvbHVtblxuICAgIHRoaXMuc29ydEJ5ICo9IC0xO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpXG4gIH1cbiAgc29ydERhdGFUcmFucyhjb2x1bW46IGFueSkge1xuICAgIGlmICh0aGlzLnNvcnRDb2x1bU5hbWV0cmFuID09PSBjb2x1bW4pIHtcbiAgICAgIHRoaXMuc29ydEJ5dHJhbiA9IHRoaXMuc29ydEJ5dHJhbiA9PT0gMSA/IC0xIDogMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0Q29sdW1OYW1ldHJhbiA9IGNvbHVtbjtcbiAgICAgIHRoaXMuc29ydEJ5dHJhbiA9IDE7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuY3JlZGl0VHJhbnNhY3Rpb25saXN0KClcbiAgfVxuICBzZWFyY2hGaWVsZCgpIHtcbiAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKVxuICAgIHRoaXMuY3JlZGl0VHJhbnNhY3Rpb25saXN0KClcbiAgfVxuXG4gIHNob3dQcm9kdWN0KGRhdGE6IHN0cmluZykge1xuICAgIHJldHVybiBkYXRhLnNsaWNlKDIgLSBkYXRhLmxlbmd0aClcbiAgfVxuICBjbGllbnRCaWxsaW5nSW5mbyhpZDogYW55KSB7XG4gICAgdGhpcy5CaWxsaW5nU2VydmljZS5jbGllbnRCaWxsaW5nSW5mbyhpZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XG4gICAgICAgIHRoaXMuY2xpZW50aW5mbyA9IHJlcy5kYXRhO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KVxuXG4gIH1cbiAgZG93bmxvYWRJbnZvaWNlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IHJlcSA9IHsuLi5kYXRhfVxuICAgIHJlcS5jbGllbnRJZCA9IFtkYXRhLmNsaWVudElkXVxuICAgIHRoaXMuQmlsbGluZ1NlcnZpY2UuaW52b2ljZURvd25sb2FkKHJlcSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlc10sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3BkZicgfSk7XG4gICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICBjb25zdCBtb250aCA9IGRhdGE/LmJpbGxpbmdEYXRlID8gbmV3IERhdGUoZGF0YS5iaWxsaW5nRGF0ZSkudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ2xvbmcnIH0pIDogJyc7XG4gICAgICAgIGNvbnN0IGJyYW5kTmFtZSA9IGRhdGE/LnJlZ2lzdGVyZWRDb21wYW55TmFtZSB8fCBkYXRhPy5jb21wYW55TmFtZSB8fCAnJztcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHtkYXRhPy5pbnZvaWNlIHx8ICdpbnZvaWNlJ30tJHttb250aH0tJHticmFuZE5hbWV9LnBkZmAucmVwbGFjZSgvW1xcXFwvOio/XCI8PnxcXHJcXG5dL2csICcnKS50cmltKCk7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICB9XG5cbiAgICB9KVxuICB9XG4gIHRvZ2dsZURyb3Bkb3duKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuRHJvcGRvd25JbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duSW5kZXggPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW5Ecm9wZG93bkluZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cblxuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBhbnksIGNsaWVudElkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5Ecm9wZG93bkluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgaWYgKG9wdGlvbi5sYWJlbCA9PT0gJ0NyZWRpdCBOb3RlJykge1xuICAgICAgdGhpcy5jcmVkaXRub3RlKGNsaWVudElkKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbi5sYWJlbCA9PT0gJ0FkZCBvbmUgdGltZSBmZWUnKSB7XG4gICAgICB0aGlzLm9uZXRpbWVmZWUoY2xpZW50SWQpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWRpdG5vdGUoY2xpZW50SWQ6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihDcmVkaXROb3RlQ29tcG9uZW50LCB7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgIHNpemU6ICdtZCcsXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSBjbGllbnRJZDtcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSAnc3VjY2Vzc2NyZWRpdCcpIHtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoJ1RoZSBpbnZvaWNlIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHJlc3BlY3RpdmUgZW1haWwgSURzIHdpdGggdGhlIGRpc2NvdW50LicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG9uZXRpbWVmZWUoY2xpZW50SWQ6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihPbmVUaW1lRmVlQ29tcG9uZW50LCB7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcbiAgICAgIHNpemU6ICdtZCcsXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSBjbGllbnRJZDtcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09ICdzdWNjZXNzY3JlZGl0Jykge1xuICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnT25lIHRpbWUgZmVlIGFkZGVkIHN1Y2Nlc3NmdWxseS4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cblxuICAvLyBwYXlub3coKSB7XG4gIC8vICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBheW5vd0NvbXBvbmVudCwge1xuICAvLyAgICAgY2VudGVyZWQ6IHRydWUsXG4gIC8vICAgICBzaXplOiAnbGcnLFxuICAvLyAgICAgc2Nyb2xsYWJsZTogdHJ1ZVxuICAvLyAgIH0pO1xuICAvLyAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNsaWVudElkID0gdGhpcy5jbGllbnRJZDtcbiAgLy8gICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gIC8vICAgICAvLyBpZiAocmVzdWx0ID09ICdzdWNjZXNzY3JlZGl0Jykge1xuICAvLyAgICAgLy8gICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdCgnVGhlIGludm9pY2UgaGFzIGJlZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBlbWFpbCBJRHMgd2l0aCB0aGUgZGlzY291bnQuJyk7XG4gIC8vICAgICAvLyAgIC8vIHRoaXMuaW52b2ljZVRhYmxlRGF0YSgpO1xuICAvLyAgICAgLy8gfVxuICAvLyAgIH0pO1xuICAvLyB9XG4gIHRvZ2dsZVJvdyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZFJvd0luZGV4ID0gdGhpcy5leHBhbmRlZFJvd0luZGV4ID09PSBpbmRleCA/IG51bGwgOiBpbmRleDtcbiAgfVxuXG4gIGFwcGx5SW52b2ljZUZpbHRlcnMoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudD8ubGVuZ3RoKSB7XG4gICAgICAvLyBSZXNldCBtdWx0aS1zZWxlY3QgZmlsdGVycyBiZWZvcmUgZWFjaCBwYXNzIHNvIHJlbW92aW5nIGEgY2hpcCBpblxuICAgICAgLy8gdGhlIGxpYi1maWx0ZXJzIGRyb3Bkb3duIGFjdHVhbGx5IGNsZWFycyB0aGUgYmFja2VuZCBmaWx0ZXIuXG4gICAgICB0aGlzLnBheW1lbnRGaWx0ZXIgPSBbXTtcbiAgICAgIHRoaXMuQXBwcm92YWxGaWx0ZXIgPSBbXTtcbiAgICAgIHRoaXMubW9udGhGaWx0ZXIgPSAnJztcbiAgICAgIHRoaXMueWVhckZpbHRlciA9ICcnO1xuICAgICAgZXZlbnQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIkR1cmF0aW9uXCIpIHtcbiAgICAgICAgICB0aGlzLkR1cmF0aW9uRmlsdGVyID0gZWxlbWVudC5Jc3N1ZXMuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQuRGVzY3JpcHRpb24gPT09IFwiUGF5bWVudCBTdGF0dXNcIikge1xuICAgICAgICAgIGlmKGVsZW1lbnQuSXNzdWVzLmxlbmd0aD4wKXtcbiAgICAgICAgICAgIGVsZW1lbnQuSXNzdWVzLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnBheW1lbnRGaWx0ZXIucHVzaChkYXRhLmlkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIkFwcHJvdmFsIFN0YXR1c1wiKSB7XG4gICAgICAgICAgaWYoZWxlbWVudC5Jc3N1ZXMubGVuZ3RoPjApe1xuICAgICAgICAgICAgZWxlbWVudC5Jc3N1ZXMuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuQXBwcm92YWxGaWx0ZXIucHVzaChkYXRhLmlkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIk1vbnRoXCIpIHtcbiAgICAgICAgICB0aGlzLm1vbnRoRmlsdGVyID0gZWxlbWVudC5Jc3N1ZXM/LmlkIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlllYXJcIikge1xuICAgICAgICAgIHRoaXMueWVhckZpbHRlciA9IGVsZW1lbnQuSXNzdWVzPy5pZCB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDFcbiAgICB0aGlzLmludm9pY2VUYWJsZURhdGEoKVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBjbGlja291dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLnRhYmxlLXRpdGxlJykpIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duSW5kZXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG5cblxuXG59XG4iLCI8ZGl2PlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cImludm9pY2V0cmFuc2FjdGlvblwiIGNsYXNzPVwibXQtNCBwYXltZW50aGlzdG9yeVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1jb2xvci1ncmF5LTYwMCBidG4tYWN0aXZlIGJ0bi1hY3RpdmUtc2Vjb25kYXJ5IHB4LTYgcHktMyBtZS0yXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImludm9pY2VwbGFucyA9PT0gJ2ludm9pY2UnID8gJ2FjdGl2ZVBsYW5CdG5wcmltYXJ5JyA6ICdpbmFjdGl2ZVBsYW5CdG4nXCJcbiAgICAgICAgICAgIGRhdGEta3QtcGxhbj1cImludm9pY2VcIiAoY2xpY2spPVwic2VsZWN0SW52b2ljZVBsYW4oJ2ludm9pY2UnKVwiPlxuICAgICAgICAgICAgSW52b2ljZVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1jb2xvci1ncmF5LTYwMCBidG4tYWN0aXZlIGJ0bi1hY3RpdmUtc2Vjb25kYXJ5IHB4LTYgcHktM1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpbnZvaWNlcGxhbnMgPT09ICdjcmVkaXR0cmFuc2FjdGlvbicgPyAnYWN0aXZlUGxhbkJ0bnByaW1hcnknIDogJ2luYWN0aXZlUGxhbkJ0bidcIlxuICAgICAgICAgICAgZGF0YS1rdC1wbGFuPVwiY3JlZGl0dHJhbnNhY3Rpb25cIiAoY2xpY2spPVwic2VsZWN0SW52b2ljZVBsYW4oJ2NyZWRpdHRyYW5zYWN0aW9uJylcIj5cbiAgICAgICAgICAgIENyZWRpdCBUcmFuc2FjdGlvbnNcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+IC0tPlxuICAgIDwhLS0gSGVhZGVyIHN1bW1hcnkgY2FyZHMg4oCUIE91dHN0YW5kaW5nIC8gT3ZlcmR1ZSAvIFBlbmRpbmcgUGF5bWVudC5cbiAgICAgICAgIFRvdGFscyBhcmUgc2NvcGVkIHRvIHRoZSB1c2VyJ3MgZnVsbCBjbGllbnQgYWNjZXNzLCBOT1QgdGhlIGN1cnJlbnRcbiAgICAgICAgIGZpbHRlci9zZWFyY2gvcGFnZSwgc28gdGhleSBzdGF5IHN0YWJsZSBhcyB0aGUgdXNlciBuYXJyb3dzIHRoZSBsaXN0LiAtLT5cbiAgICA8IS0tIFN1Yi10b2dnbGU6IHJlZ3VsYXIgaW52b2ljZXMgdnMgYWR2YW5jZSAoVElOVi0qKSBpbnZvaWNlcy4gLS0+XG4gICAgPGRpdiAqbmdJZj1cImludm9pY2VwbGFucyA9PT0gJ2ludm9pY2UnXCIgY2xhc3M9XCJpbnZvaWNlLXR5cGUtdG9nZ2xlIG10LTMgbXgtMlwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaW52b2ljZVR5cGUgPT09ICdhbGwnID8gJ2ludm9pY2UtdHlwZS1idG4gYWN0aXZlJyA6ICdpbnZvaWNlLXR5cGUtYnRuJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SW52b2ljZVR5cGUoJ2FsbCcpXCI+QWxsIEludm9pY2VzPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpbnZvaWNlVHlwZSA9PT0gJ2FkdmFuY2UnID8gJ2ludm9pY2UtdHlwZS1idG4gYWN0aXZlJyA6ICdpbnZvaWNlLXR5cGUtYnRuJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SW52b2ljZVR5cGUoJ2FkdmFuY2UnKVwiPkFkdmFuY2UgSW52b2ljZTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJpbnZvaWNlcGxhbnMgPT09ICdpbnZvaWNlJ1wiIGNsYXNzPVwicm93IGctMyBtdC0zIG1iLTIgbXgtMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICBPdXRzdGFuZGluZ1xuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaW5mby1pY1wiIG5nYlRvb2x0aXA9XCJUb3RhbCB1bnBhaWQgYmFsYW5jZSBhY3Jvc3MgYWxsIGludm9pY2VzIGluIHRoZSBjdXJyZW50IHZpZXcgKGRvbGxhciBpbnZvaWNlcyBjb252ZXJ0ZWQgdG8g4oK5KS5cIiBwbGFjZW1lbnQ9XCJ0b3BcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiOVwiLz48cGF0aCBkPVwiTTEyIDExdjVNMTIgOGguMDFcIi8+PC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1zcGxpdFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWxhYmVsXCI+RXhjbC4gR1NUPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWNhcmQtdmFsdWVcIj7igrl7eyBpbnZvaWNlQ2FyZHMub3V0c3RhbmRpbmdFeGNsQW1vdW50IHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3BsaXQtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3BsaXQtbGFiZWxcIj5JbmNsLiBHU1Q8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImludm9pY2UtY2FyZC12YWx1ZVwiPuKCuXt7IGludm9pY2VDYXJkcy5vdXRzdGFuZGluZ0luY2xBbW91bnQgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkLXN1YlwiPnt7IGludm9pY2VDYXJkcy5vdXRzdGFuZGluZ0NvdW50IH19IHt7IGludm9pY2VDYXJkcy5vdXRzdGFuZGluZ0NvdW50ID09PSAxID8gJ2ludm9pY2UnIDogJ2ludm9pY2VzJyB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICBPdmVyZHVlXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJpbmZvLWljXCIgbmdiVG9vbHRpcD1cIlVucGFpZCBpbnZvaWNlcyB3aG9zZSBkdWUgZGF0ZSBoYXMgYWxyZWFkeSBwYXNzZWQuXCIgcGxhY2VtZW50PVwidG9wXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIj48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjlcIi8+PHBhdGggZD1cIk0xMiAxMXY1TTEyIDhoLjAxXCIvPjwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3BsaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1zcGxpdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImludm9pY2UtY2FyZC1zcGxpdC1sYWJlbFwiPkV4Y2wuIEdTVDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW52b2ljZS1jYXJkLXZhbHVlIHRleHQtZGFuZ2VyXCI+4oK5e3sgaW52b2ljZUNhcmRzLm92ZXJkdWVFeGNsQW1vdW50IHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3BsaXQtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3BsaXQtbGFiZWxcIj5JbmNsLiBHU1Q8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImludm9pY2UtY2FyZC12YWx1ZSB0ZXh0LWRhbmdlclwiPuKCuXt7IGludm9pY2VDYXJkcy5vdmVyZHVlSW5jbEFtb3VudCB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3ViXCI+e3sgaW52b2ljZUNhcmRzLm92ZXJkdWVDb3VudCB9fSB7eyBpbnZvaWNlQ2FyZHMub3ZlcmR1ZUNvdW50ID09PSAxID8gJ2ludm9pY2UnIDogJ2ludm9pY2VzJyB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICBQZW5kaW5nIFBheW1lbnRcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImluZm8taWNcIiBuZ2JUb29sdGlwPVwiQXBwcm92ZWQgaW52b2ljZXMgdGhhdCBhcmUgc3RpbGwgYXdhaXRpbmcgcGF5bWVudC5cIiBwbGFjZW1lbnQ9XCJ0b3BcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiOVwiLz48cGF0aCBkPVwiTTEyIDExdjVNMTIgOGguMDFcIi8+PC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludm9pY2UtY2FyZC1zcGxpdFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWxhYmVsXCI+RXhjbC4gR1NUPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWNhcmQtdmFsdWUgdGV4dC13YXJuaW5nXCI+4oK5e3sgaW52b2ljZUNhcmRzLnBlbmRpbmdQYXltZW50RXhjbEFtb3VudCB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW52b2ljZS1jYXJkLXNwbGl0LWxhYmVsXCI+SW5jbC4gR1NUPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnZvaWNlLWNhcmQtdmFsdWUgdGV4dC13YXJuaW5nXCI+4oK5e3sgaW52b2ljZUNhcmRzLnBlbmRpbmdQYXltZW50SW5jbEFtb3VudCB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZvaWNlLWNhcmQtc3ViXCI+e3sgaW52b2ljZUNhcmRzLnBlbmRpbmdQYXltZW50Q291bnQgfX0ge3sgaW52b2ljZUNhcmRzLnBlbmRpbmdQYXltZW50Q291bnQgPT09IDEgPyAnaW52b2ljZScgOiAnaW52b2ljZXMnIH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcGF5bWVudGhpc3RvcnkgYm9yZGVyLTBcIj5cbiAgICAgICA8ZGl2ICpuZ0lmPVwiaW52b2ljZXBsYW5zID09PSAnY3JlZGl0dHJhbnNhY3Rpb24nXCIgY2xhc3M9XCJiaWxsaW5naGVhZGVyIG1zLTEgbXQtNlwiPkNyZWRpdCBUcmFuc2FjdGlvbnM8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhciBtcy1hdXRvXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBpbnZvaWNlc2VhcmNoIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgc2VhcmNoLWljLWNlbnRlciBtcy0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJsZW5cIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IGludm9pY2VzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoY2hhbmdlKT1cInNlYXJjaEZpZWxkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlYXJjaERpc2FibGVkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1maWx0ZXJzICpuZ0lmPVwiaW52b2ljZXBsYW5zID09PSAnaW52b2ljZSdcIiBbZGF0YU9iamVjdF09XCJpbnZvaWNlRmlsdGVyT2JqZWN0XCIgKGFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5SW52b2ljZUZpbHRlcnMoJGV2ZW50KVwiPjwvbGliLWZpbHRlcnM+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibWUtMyAgbW9udGh3aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duIGludmhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBpbnZoZWFkZXJcIiBhcmlhLWxhYmVsPVwiRGVmYXVsdCBzZWxlY3QgZXhhbXBsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXNGaWx0ZXJcIiAoY2hhbmdlKT1cImludm9pY2VGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY3VycmVudFwiPkN1cnJlbnQgTW9udGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInByZXZcIj5QcmV2aW91cyBNb250aDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGFzdFwiPkxhc3QgMyBNb250aHM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIChjbGljayk9XCJjcmVkaXRub3RlKClcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSAgYnRuIGFsaWduLWl0ZW1zLWVuZCBpbnZoZWFkZXIgdGV4dC1ub3dyYXAgbWUtNFwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LnVzZXJUeXBlID09PSAndGFuZ28nICYmIChncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5zZXR0aW5nc19wYXltZW50U3Vic2NyaXB0aW9uc19pc0VkaXRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWludm9pY2VMaXN0Lmxlbmd0aFwiPjxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjQ5OTMgNC4xNjY3NVYxNS44MzM0TTQuNjY2MDIgMTAuMDAwMUgxNi4zMzI3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4+Q3JlZGl0IE5vdGU8L3NwYW4+IDwvYnV0dG9uPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRXhwb3J0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gYWxpZ24taXRlbXMtZW5kIHRleHQtbm93cmFwIGludmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImludm9pY2VwbGFucyA9PT0gJ2ludm9pY2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaW52b2ljZUxpc3QubGVuZ3RoXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+PC9zcGFuPiBFeHBvcnQ8L2J1dHRvbj5cblxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkV4cG9ydFRyYW5zYWN0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gYWxpZ24taXRlbXMtZW5kIHRleHQtbm93cmFwIGludmhlYWRlciBtcy00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW52b2ljZXBsYW5zID09PSAnY3JlZGl0dHJhbnNhY3Rpb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdHJhbnNhY3Rpb25MaXN0Lmxlbmd0aFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMlwiPjwvc3Bhbj4gRXhwb3J0PC9idXR0b24+XG5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJpbnZvaWNlcGxhbnMgPT09ICdpbnZvaWNlJ1wiPlxuXG4gICAgICAgIDwhLS0gQnVsayBhY3Rpb25zIHRvb2xiYXIgKHN0YXR1cyBmaWx0ZXIgdGFicyByZW1vdmVkIOKAlCBzdGF0dXNlcyBhcmVcbiAgICAgICAgICAgICByZWFjaGFibGUgdmlhIHRoZSBGaWx0ZXIgcG9wb3ZlciwgbWF0Y2hpbmcgdGhlIHByb3RvdHlwZSkgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBwYXltZW50aGlzdG9yeSBib3JkZXItMCBweC0wXCIgKm5nSWY9XCJzZWxlY3RlZEludm9pY2VzLnNpemUgPiAwXCI+XG4gICAgICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRvd25sb2FkU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi1zbSBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEludm9pY2VzLnNpemUgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidWxrRG93bmxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU01LjgzMzMzIDguMzMzMzNMMTAgMTIuNU0xMCAxMi41TDE0LjE2NjcgOC4zMzMzM00xMCAxMi41VjIuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiICpuZ0lmPVwiIWJ1bGtEb3dubG9hZGluZ1wiPkRvd25sb2FkIFNlbGVjdGVkICh7eyBzZWxlY3RlZEludm9pY2VzLnNpemUgfX0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0xXCIgKm5nSWY9XCJidWxrRG93bmxvYWRpbmdcIj5QcmVwYXJpbmcgWklQLi4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFwcHJvdmVTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1zbSBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEludm9pY2VzLnNpemUgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidWxrQXBwcm92aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE2LjY2NjcgNUw3LjUwMDAxIDE0LjE2NjdMMy4zMzMzNCAxMFwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0xXCIgKm5nSWY9XCIhYnVsa0FwcHJvdmluZ1wiPkFwcHJvdmUgU2VsZWN0ZWQgKHt7IHNlbGVjdGVkSW52b2ljZXMuc2l6ZSB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTFcIiAqbmdJZj1cImJ1bGtBcHByb3ZpbmdcIj5BcHByb3ZpbmcuLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbnZvaWNlTG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW52b2ljZU5vRGF0YVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgdy0yNVwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YS5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gaW52b2ljZSB0YWJsZSBzdGFydCAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpbnZvaWNlTG9hZGluZyAmJiAhaW52b2ljZU5vRGF0YVwiIGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWNjb3JkaW9uIHRhYmxlIGJvdHRvbS1ib3JkZXIgaW52b2l2ZXRhYmxlIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDogNDBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxcIiAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgW2Rpc2FibGVkXT1cImludm9pY2VMaXN0Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdjbGllbnROYW1lJylcIiA+QnJhbmQgTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NsaWVudE5hbWUnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnY2xpZW50TmFtZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2NvbXBhbnlOYW1lJylcIj5SZWdpc3RlcmVkIE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdjb21wYW55TmFtZScgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NvbXBhbnlOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdpbnZvaWNlJylcIiA+SW52b2ljZSAjXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnaW52b2ljZScgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdpbnZvaWNlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnYmlsbGluZ0RhdGUnKVwiPkJpbGxpbmcgRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2JpbGxpbmdEYXRlJyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnYmlsbGluZ0RhdGUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2R1ZURhdGUnKVwiPkR1ZSBTdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdkdWVEYXRlJyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnZHVlRGF0ZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+R3JvdXAgTmFtZTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnYW1vdW50JylcIj5BbW91bnQgRXhjbC4gR1NUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnYW1vdW50JyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnYW1vdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdnc3RBbW91bnQnKVwiPkdTVCBBbW91bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdnc3RBbW91bnQnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdnc3RBbW91bnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3RvdGFsQW1vdW50JylcIj5BbW91bnQgSW5jbC4gR1NUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAndG90YWxBbW91bnQnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICd0b3RhbEFtb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+U3RvcmVzPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5QYXltZW50IFN0YXR1czwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+QXBwcm92YWwgU3RhdHVzPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPkFjdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaW52b2ljZSBvZiBpbnZvaWNlTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVJbnZvaWNlU2VsZWN0KGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSB0YWJsZS10aXRsZS1wcmltYXJ5IGQtZmxleCBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtMzVweCBzeW1ib2wtY2lyY2xlIG1lLTJcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sLWxhYmVsIHRleHQtc3ltYm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaW52b2ljZT8ubG9nb1wiIGNsYXNzPVwic3ltYm9sLWxhYmVsIGJnLWxpZ2h0LXByaW1hcnkgdGV4dC1zeW1ib2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpbnZvaWNlPy5jbGllbnROYW1lPy5jaGFyQXQoMCl9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAoZXJyb3IpOiBicm9rZW4vZXhwaXJlZCBsb2dvIFVSTCBmYWxscyBiYWNrIHRvIHRoZSBsZXR0ZXIgYXZhdGFyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJpbnZvaWNlPy5sb2dvXCIgY2xhc3M9XCJsb2dvLWltZ1wiIFtzcmNdPVwiaW52b2ljZT8ubG9nb1wiIChlcnJvcik9XCJpbnZvaWNlLmxvZ28gPSAnJ1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pjx1IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidmlld0JyYW5kKGludm9pY2UpXCI+IHt7aW52b2ljZT8uY2xpZW50TmFtZSB8IHVwcGVyY2FzZX19PC91PjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgcmVnaXN0ZXJlZC1uYW1lXCI+e3sgaW52b2ljZT8uY29tcGFueU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIHRhYmxlLXRpdGxlLXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpbnZvaWNlLWxpbmtcIiAoY2xpY2spPVwib3Blbkludm9pY2VQcmV2aWV3KGludm9pY2UpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj57eyBpbnZvaWNlPy5pbnZvaWNlIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBpbnZvaWNlPy5iaWxsaW5nRGF0ZSB8IGRhdGU6ICdkZCBNTU0sIHl5eXknIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiIFtuZ0NsYXNzXT1cImdldER1ZVN0YXR1c0NsYXNzKGludm9pY2UpXCI+e3sgZ2V0RHVlU3RhdHVzKGludm9pY2UpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IGludm9pY2U/Lmdyb3VwTmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBpbnZvaWNlQ3VycmVuY3lTeW1ib2woaW52b2ljZSkgfX0ge3sgaW52b2ljZT8uYW1vdW50IHwgbnVtYmVyOmFtb3VudEZvcm1hdChpbnZvaWNlKTonZW4tSU4nIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiICpuZ0lmPVwiaXNHc3RBcHBsaWNhYmxlKGludm9pY2UpOyBlbHNlIG5vR3N0XCI+e3sgaW52b2ljZUN1cnJlbmN5U3ltYm9sKGludm9pY2UpIH19IHt7IGdzdEFtb3VudChpbnZvaWNlKSB8IG51bWJlcjphbW91bnRGb3JtYXQoaW52b2ljZSk6J2VuLUlOJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9Hc3Q+PGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+4oCUPC9kaXY+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+PHN0cm9uZz57eyBpbnZvaWNlQ3VycmVuY3lTeW1ib2woaW52b2ljZSkgfX0ge3sgaW52b2ljZT8udG90YWxBbW91bnQgfCBudW1iZXI6YW1vdW50Rm9ybWF0KGludm9pY2UpOidlbi1JTicgfX08L3N0cm9uZz48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgaW52b2ljZT8uc3RvcmVzIH19IHt7IGludm9pY2U/LnN0b3JlcyA9PT0gMSA/ICdTdG9yZScgOiAnU3RvcmVzJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJnZXRQYXltZW50UGlsbENsYXNzKGludm9pY2UpXCI+e3sgZ2V0UGF5bWVudExhYmVsKGludm9pY2UpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNQZW5kaW5nKGludm9pY2UpXCIgY2xhc3M9XCJwZW5kaW5nLW5vdGUgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpbnZvaWNlQ3VycmVuY3lTeW1ib2woaW52b2ljZSkgfX17eyBwZW5kaW5nQW1vdW50KGludm9pY2UpIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fSBwZW5kaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImdldEFwcHJvdmFsUGlsbENsYXNzKGludm9pY2UpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVmlldyBhY3Rpdml0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW52b2ljZUxvZ3MoaW52b2ljZSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPnt7IGdldEFwcHJvdmFsTGFiZWwoaW52b2ljZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBkLWZsZXgganVzdGlmeS1jb250ZW50LWFyb3VuZCBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFZGl0IGludm9pY2UgKGxvY2tlZCB3aGVuIGFwcHJvdmVkKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiFpc0ludm9pY2VMb2NrZWQoaW52b2ljZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmxvY2tlZC1hY3Rpb25dPVwiaXNJbnZvaWNlTG9ja2VkKGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIhaXNJbnZvaWNlTG9ja2VkKGludm9pY2UpICYmIGVkaXRJbnZvaWNlKGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImlzSW52b2ljZUxvY2tlZChpbnZvaWNlKSA/ICdBcHByb3ZlZCBpbnZvaWNlIOKAlCBlZGl0aW5nIGlzIGRpc2FibGVkJyA6ICdFZGl0IEludm9pY2UnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCIgZmlsbD1cIndoaXRlXCIgc3Ryb2tlPVwiI0QwRDVERFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI2LjUgMTQuNUwyOS41IDE3LjVNMTQuNSAyOS41SDE3LjVMMjggMTlDMjguMzk3OCAxOC42MDIyIDI4LjYyMTMgMTguMDY2MyAyOC42MjEzIDE3LjVDMjguNjIxMyAxNi45MzM3IDI4LjM5NzggMTYuMzk3OCAyOCAxNkMyNy42MDIyIDE1LjYwMjIgMjcuMDY2MyAxNS4zNzg3IDI2LjUgMTUuMzc4N0MyNS45MzM3IDE1LjM3ODcgMjUuMzk3OCAxNS42MDIyIDI1IDE2TDE0LjUgMjYuNVYyOS41WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQXBwcm92ZSAoc3RhZ2UtYXdhcmUpIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImFwcHJvdmVJbnZvaWNlKGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImdldEFwcHJvdmVUb29sdGlwKGludm9pY2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuQXBwcm92ZShpbnZvaWNlLCB1c2VyQWNjZXNzKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzE2NDc4XzQzMDQwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE2NDc4XzQzMDQwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMwLjMzNDYgMjAuMjMzNVYyMS4wMDAyQzMwLjMzMzYgMjIuNzk3MiAyOS43NTE3IDI0LjU0NTggMjguNjc1NyAyNS45ODUxQzI3LjU5OTggMjcuNDI0NCAyNi4wODc0IDI4LjQ3NzMgMjQuMzY0MSAyOC45ODY4QzIyLjY0MDggMjkuNDk2MyAyMC43OTkgMjkuNDM1MSAxOS4xMTM0IDI4LjgxMjRDMTcuNDI3NyAyOC4xODk2IDE1Ljk4ODUgMjcuMDM4NiAxNS4wMTA0IDI1LjUzMTFDMTQuMDMyNCAyNC4wMjM2IDEzLjU2NzggMjIuMjQwMyAxMy42ODYgMjAuNDQ3MUMxMy44MDQzIDE4LjY1NCAxNC40OTkgMTYuOTQ3MiAxNS42NjY1IDE1LjU4MTFDMTYuODM0MSAxNC4yMTUxIDE4LjQxMiAxMy4yNjMgMjAuMTY0OCAxMi44NjdDMjEuOTE3NiAxMi40NzEgMjMuNzUxNSAxMi42NTIyIDI1LjM5MyAxMy4zODM1TTMwLjMzNDYgMTQuMzMzNUwyMi4wMDEzIDIyLjY3NTJMMTkuNTAxMyAyMC4xNzUyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8xNjQ3OF80MzA0MFwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzE2NDc4XzQzMDQwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd18xNjQ3OF80MzA0MFwiIHJlc3VsdD1cInNoYXBlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE2NDc4XzQzMDQwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMiAxMSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0lmPVwiaW52b2ljZS5zdGF0dXM9PT0nYXBwcm92ZWQnICYmIChncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5UYW5nb0FkbWluX2ludm9pY2VBcHByb3ZhbF9pc0VkaXRcIj4gPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIiB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzE2NjMwXzgwNjIpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0VBRUNGMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTY2MzBfODA2MilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMC4zMzQ2IDIwLjIzMzVWMjEuMDAwMkMzMC4zMzM2IDIyLjc5NzIgMjkuNzUxNyAyNC41NDU4IDI4LjY3NTcgMjUuOTg1MUMyNy41OTk4IDI3LjQyNDQgMjYuMDg3NCAyOC40NzczIDI0LjM2NDEgMjguOTg2OEMyMi42NDA4IDI5LjQ5NjMgMjAuNzk5IDI5LjQzNTEgMTkuMTEzNCAyOC44MTI0QzE3LjQyNzcgMjguMTg5NiAxNS45ODg1IDI3LjAzODYgMTUuMDEwNCAyNS41MzExQzE0LjAzMjQgMjQuMDIzNiAxMy41Njc4IDIyLjI0MDMgMTMuNjg2IDIwLjQ0NzFDMTMuODA0MyAxOC42NTQgMTQuNDk5IDE2Ljk0NzIgMTUuNjY2NSAxNS41ODExQzE2LjgzNDEgMTQuMjE1MSAxOC40MTIgMTMuMjYzIDIwLjE2NDggMTIuODY3QzIxLjkxNzYgMTIuNDcxIDIzLjc1MTUgMTIuNjUyMiAyNS4zOTMgMTMuMzgzNU0zMC4zMzQ2IDE0LjMzMzVMMjIuMDAxMyAyMi42NzUyTDE5LjUwMTMgMjAuMTc1MlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0QwRDVERFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMTY2MzBfODA2MlwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQ0XCIgaGVpZ2h0PVwiNDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz1cInNSR0JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZU9mZnNldCBkeT1cIjFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwLjA2Mjc0NTEgMCAwIDAgMCAwLjA5NDExNzYgMCAwIDAgMCAwLjE1Njg2MyAwIDAgMCAwLjA1IDBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PVwiZWZmZWN0MV9kcm9wU2hhZG93XzE2NjMwXzgwNjJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzE2NjMwXzgwNjJcIiByZXN1bHQ9XCJzaGFwZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNjYzMF84MDYyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMiAxMSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29BZG1pbl9pbnZvaWNlQXBwcm92YWxfaXNFZGl0XCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJyZWdlbmVyYXRlSW52b2ljZShpbnZvaWNlKVwiPjxzdmcgd2lkdGg9XCI0NFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNDRcIiB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiMzM0I1RkZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzE1NTMwXzYwMzk1KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMS4xNjU0IDE0LjMzMzNWMTkuMzMzM00zMS4xNjU0IDE5LjMzMzNIMjYuMTY1NE0zMS4xNjU0IDE5LjMzMzNMMjcuMjk4NyAxNS43QzI2LjQwMzEgMTQuODAzOSAyNS4yOTUxIDE0LjE0OTMgMjQuMDc4IDEzLjc5NzNDMjIuODYxIDEzLjQ0NTMgMjEuNTc0NiAxMy40MDczIDIwLjMzODkgMTMuNjg2OUMxOS4xMDMzIDEzLjk2NjUgMTcuOTU4NSAxNC41NTQ1IDE3LjAxMTYgMTUuMzk2MkMxNi4wNjQ2IDE2LjIzNzggMTUuMzQ2MyAxNy4zMDU2IDE0LjkyMzcgMTguNU0xMi44MzIgMjcuNjY2NlYyMi42NjY2TTEyLjgzMiAyMi42NjY2SDE3LjgzMk0xMi44MzIgMjIuNjY2NkwxNi42OTg3IDI2LjNDMTcuNTk0MyAyNy4xOTYxIDE4LjcwMjMgMjcuODUwNiAxOS45MTk0IDI4LjIwMjdDMjEuMTM2NCAyOC41NTQ3IDIyLjQyMjggMjguNTkyNyAyMy42NTg1IDI4LjMxMzFDMjQuODk0MSAyOC4wMzM1IDI2LjAzODkgMjcuNDQ1NSAyNi45ODU4IDI2LjYwMzhDMjcuOTMyOCAyNS43NjIxIDI4LjY1MTEgMjQuNjk0MyAyOS4wNzM3IDIzLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMTU1MzBfNjAzOTVcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCBpbj1cIlNvdXJjZUFscGhhXCIgdHlwZT1cIm1hdHJpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImhhcmRBbHBoYVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9XCJtYXRyaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18xNTUzMF82MDM5NVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW49XCJTb3VyY2VHcmFwaGljXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMTU1MzBfNjAzOTVcIiByZXN1bHQ9XCJzaGFwZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LlRhbmdvQWRtaW5faW52b2ljZUFwcHJvdmFsX2lzRWRpdCAmJiBpbnZvaWNlPy5zdGF0dXMgPT09ICdhcHByb3ZlZCcgJiYgaW52b2ljZT8ucGF5bWVudFN0YXR1cyAhPT0gJ3BhaWQnXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJwYXltZW50c3RhdHVzQ2hhbmdlKGludm9pY2UpXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBCb3JkZXIgUmVjdGFuZ2xlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMi41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjMzNCNUZGXCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQmFja2dyb3VuZCBSZWN0YW5nbGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIyLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5uZXIgSWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMTMsIDExKVwiPiA8IS0tIEFkanVzdGVkIHBvc2l0aW9uIGZvciBjZW50ZXJpbmcgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMi45OTg3IDguMDAwNjVWNi4zMzM5OEMyLjk5ODcgNS4wMDc5IDMuNTI1NDggMy43MzYxMyA0LjQ2MzE2IDIuNzk4NDVDNS40MDA4NSAxLjg2MDc3IDYuNjcyNjIgMS4zMzM5OCA3Ljk5ODcgMS4zMzM5OEM5LjMyNDc4IDEuMzMzOTggMTAuNTk2NiAxLjg2MDc3IDExLjUzNDIgMi43OTg0NUMxMi40NzE5IDMuNzM2MTMgMTIuOTk4NyA1LjAwNzkgMTIuOTk4NyA2LjMzMzk4VjguMDAwNjVNMS4zMzIwMyAxMy4wMDA3QzEuMzMyMDMgMTMuNDQyNyAxLjUwNzYzIDEzLjg2NjYgMS44MjAxOSAxNC4xNzkyQzIuMTMyNzUgMTQuNDkxNyAyLjU1NjY3IDE0LjY2NzMgMi45OTg3IDE0LjY2NzNDMy40NDA3MyAxNC42NjczIDMuODY0NjUgMTQuNDkxNyA0LjE3NzIxIDE0LjE3OTJDNC40ODk3NyAxMy44NjY2IDQuNjY1MzYgMTMuNDQyNyA0LjY2NTM2IDEzLjAwMDdDNC42NjUzNiAxMi41NTg2IDQuNDg5NzcgMTIuMTM0NyA0LjE3NzIxIDExLjgyMjFDMy44NjQ2NSAxMS41MDk2IDMuNDQwNzMgMTEuMzM0IDIuOTk4NyAxMS4zMzRDMi41NTY2NyAxMS4zMzQgMi4xMzI3NSAxMS41MDk2IDEuODIwMTkgMTEuODIyMUMxLjUwNzYzIDEyLjEzNDcgMS4zMzIwMyAxMi41NTg2IDEuMzMyMDMgMTMuMDAwN1pNMTEuMzMyIDEzLjAwMDdDMTEuMzMyIDEzLjQ0MjcgMTEuNTA3NiAxMy44NjY2IDExLjgyMDIgMTQuMTc5MkMxMi4xMzI3IDE0LjQ5MTcgMTIuNTU2NyAxNC42NjczIDEyLjk5ODcgMTQuNjY3M0MxMy40NDA3IDE0LjY2NzMgMTMuODY0NiAxNC40OTE3IDE0LjE3NzIgMTQuMTc5MkMxNC40ODk4IDEzLjg2NjYgMTQuNjY1NCAxMy40NDI3IDE0LjY2NTQgMTMuMDAwN0MxNC42NjU0IDEyLjU1ODYgMTQuNDg5OCAxMi4xMzQ3IDE0LjE3NzIgMTEuODIyMUMxMy44NjQ2IDExLjUwOTYgMTMuNDQwNyAxMS4zMzQgMTIuOTk4NyAxMS4zMzRDMTIuNTU2NyAxMS4zMzQgMTIuMTMyNyAxMS41MDk2IDExLjgyMDIgMTEuODIyMUMxMS41MDc2IDEyLjEzNDcgMTEuMzMyIDEyLjU1ODYgMTEuMzMyIDEzLjAwMDdaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuNSA1LjVMMTMgOEwxNS41IDUuNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImRvd25sb2FkSW52b2ljZShpbnZvaWNlKVwiIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiZG93bmxvYWRJbnZvaWNlKGludm9pY2UpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjxzdmcgd2lkdGg9XCI0NFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNDRcIiB2aWV3Qm94PVwiMCAwIDQ0IDQ0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiMzM0I1RkZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbHRlcj1cInVybCgjZmlsdGVyMF9kXzE1NTMwXzYwMzk2KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIuNVwiIHk9XCIxLjVcIiB3aWR0aD1cIjM5XCIgaGVpZ2h0PVwiMzlcIiByeD1cIjcuNVwiIHN0cm9rZT1cIiNEMEQ1RERcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yOS41IDIzLjVWMjYuODMzM0MyOS41IDI3LjI3NTQgMjkuMzI0NCAyNy42OTkzIDI5LjAxMTggMjguMDExOEMyOC42OTkzIDI4LjMyNDQgMjguMjc1NCAyOC41IDI3LjgzMzMgMjguNUgxNi4xNjY3QzE1LjcyNDYgMjguNSAxNS4zMDA3IDI4LjMyNDQgMTQuOTg4MiAyOC4wMTE4QzE0LjY3NTYgMjcuNjk5MyAxNC41IDI3LjI3NTQgMTQuNSAyNi44MzMzVjIzLjVNMTcuODMzMyAxOS4zMzMzTDIyIDIzLjVNMjIgMjMuNUwyNi4xNjY3IDE5LjMzMzNNMjIgMjMuNVYxMy41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsdGVyIGlkPVwiZmlsdGVyMF9kXzE1NTMwXzYwMzk2XCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT1cIjBcIiByZXN1bHQ9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPVwiMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVCbGVuZCBtb2RlPVwibm9ybWFsXCIgaW4yPVwiQmFja2dyb3VuZEltYWdlRml4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMTU1MzBfNjAzOTZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4yPVwiZWZmZWN0MV9kcm9wU2hhZG93XzE1NTMwXzYwMzk2XCIgcmVzdWx0PVwic2hhcGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2FuY2VsIGludm9pY2UgKGFwcHJvdmVkICsgdW5wYWlkIG9ubHkpIOKAlCByZXBsYWNlcyB0aGUgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2xvdCBmb3IgY2FuY2VsbGFibGUgcm93cy4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2FuQ2FuY2VsSW52b2ljZShpbnZvaWNlKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEludm9pY2UoaW52b2ljZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIkNhbmNlbCBJbnZvaWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDRcIiBoZWlnaHQ9XCI0NFwiIHZpZXdCb3g9XCIwIDAgNDQgNDRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzlcIiBoZWlnaHQ9XCIzOVwiIHJ4PVwiNy41XCIgZmlsbD1cIndoaXRlXCIgc3Ryb2tlPVwiI0QwRDVERFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI4LjUgMTUuNUwxNS41IDI4LjVNMTUuNSAxNS41TDI4LjUgMjguNVwiIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgZmlsbD1cIm5vbmVcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGVsZXRlIGludm9pY2Ug4oCUIEhJRERFTiAobm90IGRpc2FibGVkKSBvbmNlIGl0IG5vIGxvbmdlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZXM6IGNhbmNlbGxhYmxlIHJvd3Mgc2hvdyBDYW5jZWwgaW5zdGVhZCwgYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkIChhcHByb3ZlZC9jYW5jZWxsZWQpIHJvd3Mgc2hvdyBuZWl0aGVyLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY2FuQ2FuY2VsSW52b2ljZShpbnZvaWNlKSAmJiAhaXNJbnZvaWNlTG9ja2VkKGludm9pY2UpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlSW52b2ljZShpbnZvaWNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiRGVsZXRlIEludm9pY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0NFwiIGhlaWdodD1cIjQ0XCIgdmlld0JveD1cIjAgMCA0NCA0NFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzOVwiIGhlaWdodD1cIjM5XCIgcng9XCI3LjVcIiBmaWxsPVwid2hpdGVcIiBzdHJva2U9XCIjRDBENUREXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcgMjFIMjdNMTUuNSAxN0gyOC41TTE5LjUgMjVIMjQuNU0xNi4xNjY3IDI4LjVIMjcuODMzM0MyOC43NTM4IDI4LjUgMjkuNSAyNy43NTM4IDI5LjUgMjYuODMzM1YxNS4xNjY3QzI5LjUgMTQuMjQ2MiAyOC43NTM4IDEzLjUgMjcuODMzMyAxMy41SDE2LjE2NjdDMTUuMjQ2MiAxMy41IDE0LjUgMTQuMjQ2MiAxNC41IDE1LjE2NjdWMjYuODMzM0MxNC41IDI3Ljc1MzggMTUuMjQ2MiAyOC41IDE2LjE2NjcgMjguNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGZpbGw9XCJub25lXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWludm9pY2VMb2FkaW5nICYmICFpbnZvaWNlTm9EYXRhXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIGNsYXNzPVwidGV4dC1zdGFydFwiIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCIgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIiAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiaW52b2ljZXBsYW5zID09PSAnY3JlZGl0dHJhbnNhY3Rpb24nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmFuc2FjdGlvbkxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmFuc2FjdGlvbk5vRGF0YVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmMgdy0yNVwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YS5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgKm5nSWY9XCIhdHJhbnNhY3Rpb25Mb2FkaW5nICYmICF0cmFuc2FjdGlvbk5vRGF0YVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWNjb3JkaW9uIHRhYmxlIGJvdHRvbS1ib3JkZXIgXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YVRyYW5zKCdjbGllbnROYW1lJylcIiA+Q2xpZW50IE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWV0cmFuID09PSAnY2xpZW50TmFtZScgJiYgc29ydEJ5dHJhbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1ldHJhbiA9PT0gJ2NsaWVudE5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhVHJhbnMoJ2NyZWRpdCcpXCIgPkJhbGFuY2UgQ3JlZGl0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWV0cmFuID09PSAnY3JlZGl0JyAmJiBzb3J0Qnl0cmFuID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1ldHJhbiA9PT0gJ2NyZWRpdCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/LlRhbmdvQWRtaW5faW52b2ljZUFwcHJvdmFsX2lzRWRpdFwiIHNjb3BlPVwiY29sXCI+QWN0aW9uPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdHJhbnNhY3Rpb24gb2YgdHJhbnNhY3Rpb25MaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgdGFibGUtdGl0bGUtcHJpbWFyeSBkLWZsZXggXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ltYm9sIHN5bWJvbC0zNXB4IHN5bWJvbC1jaXJjbGUgbWUtMlwiPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sLWxhYmVsIHRleHQtc3ltYm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXRyYW5zYWN0aW9uPy5sb2dvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ltYm9sLWxhYmVsIGJnLWxpZ2h0LXByaW1hcnkgdGV4dC1zeW1ib2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dHJhbnNhY3Rpb24/LmNsaWVudE5hbWU/LmNoYXJBdCgwKX19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInRyYW5zYWN0aW9uPy5sb2dvXCIgY2xhc3M9XCJsb2dvLWltZ1wiIFtzcmNdPVwidHJhbnNhY3Rpb24/LmxvZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cInRyYW5zYWN0aW9uLmxvZ28gPSAnJ1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHU+IHt7dHJhbnNhY3Rpb24/LmNsaWVudE5hbWUgfCB1cHBlcmNhc2V9fTwvdT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRyYW5zYWN0aW9uPy5jdXJyZW5jeVR5cGUgPT09ICdpbnInXCI+4oK5PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0cmFuc2FjdGlvbj8uY3VycmVuY3lUeXBlID09PSAnZG9sbGFyJ1wiPiQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RyYW5zYWN0aW9uPy5jcmVkaXQgfCBudW1iZXI6JzEuMC0yJzonZW4tSU4nfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uVGFuZ29BZG1pbl9pbnZvaWNlQXBwcm92YWxfaXNFZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bihpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianVzdGlmeS1jb250ZW50LWVuZCBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE2NTIyXzU3MjU0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS45OTg3IDIyLjUwMDZDMjEuMzc5NCAyMi41MDA2IDIyLjQ5ODcgMjEuMzgxNCAyMi40OTg3IDIwLjAwMDdDMjIuNDk4NyAxOC42MTk5IDIxLjM3OTQgMTcuNTAwNyAxOS45OTg3IDE3LjUwMDdDMTguNjE4IDE3LjUwMDcgMTcuNDk4NyAxOC42MTk5IDE3LjQ5ODcgMjAuMDAwN0MxNy40OTg3IDIxLjM4MTQgMTguNjE4IDIyLjUwMDYgMTkuOTk4NyAyMi41MDA2WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yNi4xNjU0IDIyLjUwMDZDMjYuMDU0NCAyMi43NTIgMjYuMDIxMyAyMy4wMzA4IDI2LjA3MDQgMjMuMzAxMUMyNi4xMTk0IDIzLjU3MTUgMjYuMjQ4MiAyMy44MjA5IDI2LjQ0MDQgMjQuMDE3M0wyNi40OTA0IDI0LjA2NzNDMjYuNjQ1MyAyNC4yMjIxIDI2Ljc2ODMgMjQuNDA1OSAyNi44NTIxIDI0LjYwODJDMjYuOTM2IDI0LjgxMDYgMjYuOTc5MiAyNS4wMjc1IDI2Ljk3OTIgMjUuMjQ2NUMyNi45NzkyIDI1LjQ2NTUgMjYuOTM2IDI1LjY4MjQgMjYuODUyMSAyNS44ODQ3QzI2Ljc2ODMgMjYuMDg3IDI2LjY0NTMgMjYuMjcwOSAyNi40OTA0IDI2LjQyNTZDMjYuMzM1NiAyNi41ODA2IDI2LjE1MTggMjYuNzAzNSAyNS45NDk0IDI2Ljc4NzRDMjUuNzQ3MSAyNi44NzEzIDI1LjUzMDIgMjYuOTE0NSAyNS4zMTEyIDI2LjkxNDVDMjUuMDkyMiAyNi45MTQ1IDI0Ljg3NTMgMjYuODcxMyAyNC42NzMgMjYuNzg3NEMyNC40NzA2IDI2LjcwMzUgMjQuMjg2OCAyNi41ODA2IDI0LjEzMiAyNi40MjU2TDI0LjA4MiAyNi4zNzU2QzIzLjg4NTYgMjYuMTgzNSAyMy42MzYyIDI2LjA1NDcgMjMuMzY1OSAyNi4wMDU2QzIzLjA5NTUgMjUuOTU2NiAyMi44MTY3IDI1Ljk4OTcgMjIuNTY1NCAyNi4xMDA2QzIyLjMxODkgMjYuMjA2MyAyMi4xMDg3IDI2LjM4MTcgMjEuOTYwNiAyNi42MDUzQzIxLjgxMjYgMjYuODI4OCAyMS43MzMxIDI3LjA5MDggMjEuNzMyIDI3LjM1OVYyNy41MDA2QzIxLjczMiAyNy45NDI3IDIxLjU1NjQgMjguMzY2NiAyMS4yNDM5IDI4LjY3OTJDMjAuOTMxMyAyOC45OTE3IDIwLjUwNzQgMjkuMTY3MyAyMC4wNjU0IDI5LjE2NzNDMTkuNjIzMyAyOS4xNjczIDE5LjE5OTQgMjguOTkxNyAxOC44ODY5IDI4LjY3OTJDMTguNTc0MyAyOC4zNjY2IDE4LjM5ODcgMjcuOTQyNyAxOC4zOTg3IDI3LjUwMDZWMjcuNDI1NkMxOC4zOTIyIDI3LjE0OTggMTguMzAzIDI2Ljg4MjMgMTguMTQyNSAyNi42NTc5QzE3Ljk4MTkgMjYuNDMzNSAxNy43NTc2IDI2LjI2MjYgMTcuNDk4NyAyNi4xNjczQzE3LjI0NzQgMjYuMDU2NCAxNi45Njg1IDI2LjAyMzMgMTYuNjk4MiAyNi4wNzIzQzE2LjQyNzkgMjYuMTIxMyAxNi4xNzg0IDI2LjI1MDIgMTUuOTgyIDI2LjQ0MjNMMTUuOTMyIDI2LjQ5MjNDMTUuNzc3MiAyNi42NDczIDE1LjU5MzQgMjYuNzcwMiAxNS4zOTExIDI2Ljg1NDFDMTUuMTg4OCAyNi45MzggMTQuOTcxOSAyNi45ODExIDE0Ljc1MjkgMjYuOTgxMUMxNC41MzM4IDI2Ljk4MTEgMTQuMzE3IDI2LjkzOCAxNC4xMTQ2IDI2Ljg1NDFDMTMuOTEyMyAyNi43NzAyIDEzLjcyODUgMjYuNjQ3MyAxMy41NzM3IDI2LjQ5MjNDMTMuNDE4NyAyNi4zMzc1IDEzLjI5NTggMjYuMTUzNyAxMy4yMTE5IDI1Ljk1MTRDMTMuMTI4MSAyNS43NDkxIDEzLjA4NDkgMjUuNTMyMiAxMy4wODQ5IDI1LjMxMzFDMTMuMDg0OSAyNS4wOTQxIDEzLjEyODEgMjQuODc3MiAxMy4yMTE5IDI0LjY3NDlDMTMuMjk1OCAyNC40NzI2IDEzLjQxODcgMjQuMjg4OCAxMy41NzM3IDI0LjEzNEwxMy42MjM3IDI0LjA4NEMxMy44MTU4IDIzLjg4NzYgMTMuOTQ0NyAyMy42MzgxIDEzLjk5MzcgMjMuMzY3OEMxNC4wNDI3IDIzLjA5NzUgMTQuMDA5NiAyMi44MTg3IDEzLjg5ODcgMjIuNTY3M0MxMy43OTMxIDIyLjMyMDggMTMuNjE3NyAyMi4xMTA2IDEzLjM5NDEgMjEuOTYyNkMxMy4xNzA1IDIxLjgxNDUgMTIuOTA4NSAyMS43MzUxIDEyLjY0MDQgMjEuNzM0SDEyLjQ5ODdDMTIuMDU2NyAyMS43MzQgMTEuNjMyNyAyMS41NTg0IDExLjMyMDIgMjEuMjQ1OEMxMS4wMDc2IDIwLjkzMzMgMTAuODMyIDIwLjUwOTMgMTAuODMyIDIwLjA2NzNDMTAuODMyIDE5LjYyNTMgMTEuMDA3NiAxOS4yMDE0IDExLjMyMDIgMTguODg4OEMxMS42MzI3IDE4LjU3NjIgMTIuMDU2NyAxOC40MDA3IDEyLjQ5ODcgMTguNDAwN0gxMi41NzM3QzEyLjg0OTUgMTguMzk0MiAxMy4xMTcgMTguMzA0OSAxMy4zNDE0IDE4LjE0NDRDMTMuNTY1OSAxNy45ODM5IDEzLjczNjggMTcuNzU5NiAxMy44MzIgMTcuNTAwN0MxMy45NDMgMTcuMjQ5MyAxMy45NzYxIDE2Ljk3MDUgMTMuOTI3IDE2LjcwMDJDMTMuODc4IDE2LjQyOTggMTMuNzQ5MSAxNi4xODA0IDEzLjU1NyAxNS45ODRMMTMuNTA3IDE1LjkzNEMxMy4zNTIxIDE1Ljc3OTIgMTMuMjI5MSAxNS41OTU0IDEzLjE0NTMgMTUuMzkzMUMxMy4wNjE0IDE1LjE5MDcgMTMuMDE4MiAxNC45NzM4IDEzLjAxODIgMTQuNzU0OEMxMy4wMTgyIDE0LjUzNTggMTMuMDYxNCAxNC4zMTg5IDEzLjE0NTMgMTQuMTE2NkMxMy4yMjkxIDEzLjkxNDMgMTMuMzUyMSAxMy43MzA0IDEzLjUwNyAxMy41NzU3QzEzLjY2MTggMTMuNDIwNyAxMy44NDU2IDEzLjI5NzggMTQuMDQ4IDEzLjIxMzlDMTQuMjUwMyAxMy4xMyAxNC40NjcyIDEzLjA4NjggMTQuNjg2MiAxMy4wODY4QzE0LjkwNTIgMTMuMDg2OCAxNS4xMjIxIDEzLjEzIDE1LjMyNDQgMTMuMjEzOUMxNS41MjY4IDEzLjI5NzggMTUuNzEwNiAxMy40MjA3IDE1Ljg2NTQgMTMuNTc1N0wxNS45MTU0IDEzLjYyNTdDMTYuMTExOCAxMy44MTc4IDE2LjM2MTIgMTMuOTQ2NiAxNi42MzE1IDEzLjk5NTdDMTYuOTAxOSAxNC4wNDQ3IDE3LjE4MDcgMTQuMDExNiAxNy40MzIgMTMuOTAwN0gxNy40OTg3QzE3Ljc0NTIgMTMuNzk1IDE3Ljk1NTQgMTMuNjE5NiAxOC4xMDM0IDEzLjM5NkMxOC4yNTE1IDEzLjE3MjUgMTguMzMxIDEyLjkxMDUgMTguMzMyIDEyLjY0MjNWMTIuNTAwN0MxOC4zMzIgMTIuMDU4NiAxOC41MDc2IDExLjYzNDcgMTguODIwMiAxMS4zMjIxQzE5LjEzMjcgMTEuMDA5NiAxOS41NTY3IDEwLjgzNCAxOS45OTg3IDEwLjgzNEMyMC40NDA3IDEwLjgzNCAyMC44NjQ2IDExLjAwOTYgMjEuMTc3MiAxMS4zMjIxQzIxLjQ4OTggMTEuNjM0NyAyMS42NjU0IDEyLjA1ODYgMjEuNjY1NCAxMi41MDA3VjEyLjU3NTdDMjEuNjY2NCAxMi44NDM4IDIxLjc0NTkgMTMuMTA1OCAyMS44OTQgMTMuMzI5NEMyMi4wNDIgMTMuNTUyOSAyMi4yNTIyIDEzLjcyODMgMjIuNDk4NyAxMy44MzRDMjIuNzUgMTMuOTQ0OSAyMy4wMjg5IDEzLjk3OCAyMy4yOTkyIDEzLjkyOUMyMy41Njk1IDEzLjg4IDIzLjgxOSAxMy43NTExIDI0LjAxNTQgMTMuNTU5TDI0LjA2NTQgMTMuNTA5QzI0LjIyMDIgMTMuMzU0IDI0LjQwNCAxMy4yMzExIDI0LjYwNjMgMTMuMTQ3MkMyNC44MDg2IDEzLjA2MzMgMjUuMDI1NSAxMy4wMjAyIDI1LjI0NDUgMTMuMDIwMkMyNS40NjM2IDEzLjAyMDIgMjUuNjgwNCAxMy4wNjMzIDI1Ljg4MjggMTMuMTQ3MkMyNi4wODUxIDEzLjIzMTEgMjYuMjY4OSAxMy4zNTQgMjYuNDIzNyAxMy41MDlDMjYuNTc4NyAxMy42NjM4IDI2LjcwMTYgMTMuODQ3NiAyNi43ODU1IDE0LjA0OTlDMjYuODY5MyAxNC4yNTIyIDI2LjkxMjUgMTQuNDY5MSAyNi45MTI1IDE0LjY4ODJDMjYuOTEyNSAxNC45MDcyIDI2Ljg2OTMgMTUuMTI0MSAyNi43ODU1IDE1LjMyNjRDMjYuNzAxNiAxNS41Mjg3IDI2LjU3ODcgMTUuNzEyNSAyNi40MjM3IDE1Ljg2NzNMMjYuMzczNyAxNS45MTczQzI2LjE4MTYgMTYuMTEzNyAyNi4wNTI3IDE2LjM2MzIgMjYuMDAzNyAxNi42MzM1QzI1Ljk1NDcgMTYuOTAzOCAyNS45ODc4IDE3LjE4MjYgMjYuMDk4NyAxNy40MzRWMTcuNTAwN0MyNi4yMDQzIDE3Ljc0NzEgMjYuMzc5NyAxNy45NTczIDI2LjYwMzMgMTguMTA1NEMyNi44MjY5IDE4LjI1MzUgMjcuMDg4OSAxOC4zMzI5IDI3LjM1NyAxOC4zMzRIMjcuNDk4N0MyNy45NDA3IDE4LjMzNCAyOC4zNjQ2IDE4LjUwOTYgMjguNjc3MiAxOC44MjIxQzI4Ljk4OTggMTkuMTM0NyAyOS4xNjU0IDE5LjU1ODYgMjkuMTY1NCAyMC4wMDA3QzI5LjE2NTQgMjAuNDQyNyAyOC45ODk4IDIwLjg2NjYgMjguNjc3MiAyMS4xNzkyQzI4LjM2NDYgMjEuNDkxNyAyNy45NDA3IDIxLjY2NzMgMjcuNDk4NyAyMS42NjczSDI3LjQyMzdDMjcuMTU1NSAyMS42Njg0IDI2Ljg5MzYgMjEuNzQ3OCAyNi42NyAyMS44OTU5QzI2LjQ0NjQgMjIuMDQ0IDI2LjI3MSAyMi4yNTQyIDI2LjE2NTQgMjIuNTAwNlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE2NTIyXzU3MjU0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMCAxMClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcG9zaXRpb24tYWJzb2x1dGUgbXQtMiAgYmctd2hpdGUgc2hhZG93IHJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkLWJsb2NrJzogb3BlbkRyb3Bkb3duSW5kZXggPT09IGksICdkLW5vbmUnOiBvcGVuRHJvcGRvd25JbmRleCAhPT0gaX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9wdGlvbihvcHRpb24sdHJhbnNhY3Rpb24/LmNsaWVudElkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhdHJhbnNhY3Rpb25Mb2FkaW5nICYmICF0cmFuc2FjdGlvbk5vRGF0YVwiPlxuICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBjbGFzcz1cInRleHQtc3RhcnRcIiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZXRyYW5cIiBbY3VycmVudFBhZ2VdPVwiY3VycmVudHRyYW5QYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidHJhbnNhY3Rpb25JdGVtc1wiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzdHJhblwiIFtwYWdlU2l6ZV09XCJwYWdldHJhbnNTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdldHJhbigkZXZlbnQpXCIgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2VUcmFuKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgXG4gICAgXG4gICAgXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48IS0tIGludm9pY2UgdGFibGUgZW5kIC0tPlxuPCEtLSBpbnZvaWNlIHRhYmxlIHN0YXJ0IC0tPlxuXG5cbjwhLS0gaW52b2ljZSB0YWJsZSBlbmQgLS0+Il19
|