trm-tmpl 3.3.1 → 3.3.3
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/app/pages/components/constructor-form/constructor-form.component.mjs +3 -3
- package/esm2022/lib/app/pages/components/constructor-form/services/constructor-form.service.mjs +1 -1
- package/esm2022/lib/app/shared/components/trm-select/trm-select.component.mjs +3 -3
- package/fesm2022/trm-tmpl.mjs +4 -4
- package/fesm2022/trm-tmpl.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -321,14 +321,14 @@ export class ConstructorFormComponent {
|
|
|
321
321
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ConstructorFormComponent, isStandalone: true, selector: "app-constructor-form", inputs: { step: "step", error: "error", response: "response", feeLoading: "feeLoading", feeOptions: "feeOptions", currency: "currency", userCurrency: "userCurrency", loading: "loading", types: "types", canReturnToProject: "canReturnToProject", tabIndex: "tabIndex" }, outputs: { amountChanged: "amountChanged", back: "back", prepare: "prepare", confirm: "confirm", onPaymentChanged: "onPaymentChanged" }, providers: [
|
|
322
322
|
ConstructorFormService,
|
|
323
323
|
CountryTranslatePipe, CountriesSortPipe
|
|
324
|
-
], viewQueries: [{ propertyName: "requisites", first: true, predicate: ["paymentRequisites"], descendants: true }, { propertyName: "hintMethod", first: true, predicate: ["hintMethod"], descendants: true }, { propertyName: "sdkList", predicate: CardSdkService, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form class=\"constructor\"\n [formGroup]=\"form\"\n (ngSubmit)=\"submit()\"\n >\n @if (loading !== null) {\n @if (step === TERMINAL_STEP.Prepare) {\n <div class=\"constructor__fields\">\n @if (countrySearchString || countriesList.length > 1) {\n <div class=\"constructor__field\">\n <app-trm-select [data]=\"countriesList\"\n @insertRemove\n name=\"country\"\n [label]=\"I18N_KEY.CONSTRUCTOR_LABEL_COUNTRY | trans\"\n formControlName=\"country\"\n class=\"c-field-select trm-form-field\"\n (search)=\"searchCountry($event)\"\n [tabIndex]=\"tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"fi\"\n [ngClass]=\"'fi-' + item.toLowerCase()\"></span>\n <span class=\"method__name\">{{item | country_translate: lang}}</span>\n </ng-template>\n </app-trm-select>\n </div>\n }\n @if (form.country.value) {\n <app-ps-select [methods]=\"methodsList\"\n @insertRemove\n formControlName=\"method\"\n [tabIndex]=\"tabIndex\"\n >\n @if (form.config?.description) {\n <div class=\"constructor__hint text--warn\"\n app-ps-select-hint\n #hintMethod\n @insertRemove\n >\n {{description | trans }}\n </div>\n }\n </app-ps-select>\n\n @if (\n form.method?.hasError('required') &&\n form.method.touched &&\n form.method.dirty\n ) {\n <div class=\"gm-error\" @insertRemove>\n {{ I18N_KEY.VALIDATION_REQUIRED | trans }}\n </div>\n }\n }\n\n @if (form.ready) {\n <div formGroupName=\"payment\"\n @insertRemove\n #paymentRequisites\n class=\"constructor__fields constructor__fields--reverse\">\n @if (form.method.value && form.amountDynamic) {\n <ng-container *ngTemplateOutlet=\"currencyTpl; context: {label: I18N_KEY.CONSTRUCTOR_LABEL_CURRENCY | trans, tabIndex: 0}\"></ng-container>\n }\n @for (field of form.fields; track field.name; let i = $index) {\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Iframe) {\n @if (form.payment.get(field.name)?.hasError('cde_error')) {\n <div class=\"constructor__hint cde-error\" @insertRemove>\n {{\n form.payment.get(field.name).getError('cde_error')\n | trans\n }}\n </div>\n }\n <app-constructor-field-iframe\n [formControlName]=\"field.name\"\n @insertRemove\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n >\n </app-constructor-field-iframe>\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Select) {\n <app-constructor-field-select\n @insertRemove\n [config]=\"field\"\n [items]=\"field?.options?.items\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n ></app-constructor-field-select>\n }\n @if ([CONSTRUCTOR_FIELD_TYPES.Text, CONSTRUCTOR_FIELD_TYPES.Number, CONSTRUCTOR_FIELD_TYPES.Email].includes(field.type)) {\n <app-constructor-field-text\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n (maskedValueChange)=\"changeTextFieldValue($event, field)\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"></app-constructor-field-text>\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Amount) {\n <app-constructor-field-text\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\">\n <app-method-amount-hint app-c-text-hint\n class=\"constructor__hint\"\n [loading]=\"feeLoading\"\n [options]=\"feeOptions || field.options\"\n ></app-method-amount-hint>\n <div app-c-text-suffix\n class=\"constructor__currency\"\n [class.constructor__currency--transparent]=\"form.isAmountEditable\"\n >\n <ng-container *ngTemplateOutlet=\"currencyTpl; context: {tabIndex: form.fields.length - i + tabIndex}\"></ng-container>\n </div>\n </app-constructor-field-text>\n @if (hasCurrencyMethodSelector) {\n <app-trm-select\n @insertRemove\n class=\"constructor-field\"\n [label]=\"I18N_KEY.CONSTRUCTOR_LABEL_CURRENCY | trans\"\n [formControl]=\"form.currency\"\n [searchable]=\"false\"\n [data]=\"currenciesList\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"trm-icon\" [ngClass]=\"'trm-curr-' + item.toLowerCase()\"\n [title]=\"item\"></span>\n {{item}}\n </ng-template>\n </app-trm-select>\n }\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Date) {\n <app-constructor-field-date\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"></app-constructor-field-date>\n }\n }\n <ng-template #currencyTpl let-label=\"label\" let-tabIndex=\"tabIndex\">\n <app-trm-select\n @insertRemove\n [label]=\"label\"\n [formControl]=\"form.userCurrency\"\n [searchable]=\"false\"\n [data]=\"userCurrenciesList\"\n [tabIndex]=\"tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"trm-icon\"\n [ngClass]=\"'trm-curr-' + item.toLowerCase()\"\n [title]=\"item\"></span>\n {{item}}\n </ng-template>\n </app-trm-select>\n </ng-template>\n </div>\n } @else {\n <div class=\"trm-skeleton-fields\">\n @for (i of skeletonLength; track $index) {\n <div class=\"trm-skeleton-field\">\n <gm-skeleton [count]=\"1\" [shape]=\"'rect-md'\" [size]=\"18\"></gm-skeleton>\n <gm-skeleton [count]=\"1\" [size]=\"50\"></gm-skeleton>\n </div>\n }\n </div>\n }\n @if (error && !form.methodInfoLoading) {\n <div class=\"trm-error\"\n @insertRemove\n >\n {{ error | trans }}\n </div>\n }\n </div>\n }\n @if (step === TERMINAL_STEP.Confirmation) {\n <app-constructor-preparation\n @insertRemove\n [currency]=\"response?.currency\"\n [methodName]=\"form.getTypeNameById(response.typeId)\"\n [wallet]=\"response.wallet\"\n [maskedWallet]=\"maskedWallet\"\n [amount]=\"response.amount\"\n [total]=\"response.total\"\n [confirmationText]=\"form.config?.confirmation\"\n >\n @if (error && !form.payment.pending) {\n <div class=\"trm-error\"\n app-constructor-preparation-error\n @insertRemove\n >\n {{ error | trans }}\n </div>\n }\n </app-constructor-preparation>\n }\n <div class=\"constructor__actions\"\n @insertRemove>\n <button class=\"trm-button trm-button--primary constructor__actions-continue\"\n type=\"submit\"\n [tabindex]=\"form.fields.length + tabIndex\">\n {{I18N_KEY.CONSTRUCTOR_LABEL_CONTINUE | trans}}\n @if (loading) {\n <span class=\"trm-spinner trm-spinner-white\"></span>\n }\n </button>\n <button class=\"trm-button trm-button--secondary constructor__actions-back\"\n type=\"button\"\n [tabindex]=\"form.fields.length + tabIndex\"\n (click)=\"back.emit()\"> {{ backBtnLabel | trans}}</button>\n </div>\n } @else {\n <div class=\"trm-skeleton-group\">\n <gm-skeleton [count]=\"4\" [gap]=\"20\" [size]=\"80\"></gm-skeleton>\n <gm-skeleton [count]=\"2\" [gap]=\"10\" [size]=\"48\"></gm-skeleton>\n </div>\n }\n</form>\n", styles: [":host{display:block}.constructor{display:flex;flex-direction:column;gap:32px;justify-content:flex-start;align-items:stretch}.constructor__fields{display:flex;flex-direction:column;gap:20px;justify-content:flex-start;align-items:stretch}.constructor__fields--reverse{flex-direction:column-reverse}.constructor__fields .fi{border-radius:2px;overflow:hidden;border:1px solid rgba(0,0,0,.08);box-sizing:border-box;background-origin:border-box;flex-shrink:0;height:15px}.constructor__fields .fi-other{border-color:transparent}.constructor__currency{--trm-select-border-radius: 0 10px 10px 0;display:flex;align-items:center;position:absolute;bottom:0;right:0;flex-shrink:0;min-height:46px}@media (min-width: 768px){.constructor__currency{min-height:50px}}.constructor__currency .trm-divider{margin:5px 0;align-self:stretch}.constructor__currency--transparent{--trm-select-bg-color: transparent;--trm-select-bg-color--disabled: transparent;--trm-select-border-color: transparent;--trm-select-border-color--hover: transparent;--trm-select-border-color--focus: transparent}.constructor__actions{display:flex;flex-direction:column;gap:10px;justify-content:flex-start;align-items:flex-start}.constructor__hint{font-weight:400;font-size:14px;line-height:22px;color:var(--color-base-350);margin-top:8px}.constructor__hint.cde-error{font-weight:500;font-size:14px;line-height:20px;color:var(--color-red-500)}.constructor .constructor__actions-continue{position:relative}.constructor .constructor__actions-continue .trm-spinner{position:absolute;right:15px}\n"], dependencies: [{ kind: "pipe", type: CountryTranslatePipe, name: "country_translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: TrmSelectComponent, selector: "app-trm-select", inputs: ["label", "hasBorder", "data", "tabIndex", "name", "placeholder", "searchable", "hasScrollbar", "nameId", "nameLabel"], outputs: ["open", "search"] }, { kind: "directive", type: TrmSelectLabelTemplateDirective, selector: "[trmSelectLabelTemplate]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PsSelectComponent, selector: "app-ps-select", inputs: ["methods", "tabIndex"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ConstructorFieldIframeComponent, selector: "app-constructor-field-iframe", inputs: ["tabIndex"] }, { kind: "component", type: ConstructorFieldSelectComponent, selector: "app-constructor-field-select", inputs: ["config", "items", "tabIndex"] }, { kind: "component", type: ConstructorFieldTextComponent, selector: "app-constructor-field-text", inputs: ["config", "matDatepicker", "tabIndex"], outputs: ["maskedValueChange"] }, { kind: "component", type: MethodAmountHintComponent, selector: "app-method-amount-hint", inputs: ["loading", "options"] }, { kind: "component", type: ConstructorFieldDateComponent, selector: "app-constructor-field-date", inputs: ["config", "tabIndex"] }, { kind: "component", type: ConstructorPreparationComponent, selector: "app-constructor-preparation", inputs: ["maskedWallet", "wallet", "confirmationText", "methodName", "currency", "amount", "total"] }, { kind: "directive", type: TabIndexFocusDirective, selector: "[tabindex]" }, { kind: "pipe", type: TranslateByKeyPipe, name: "trans" }, { kind: "component", type: GmSkeletonComponent, selector: "gm-skeleton", inputs: ["shape", "orientation", "count", "size", "gap"] }], animations: [insertRemoveTrigger], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
324
|
+
], viewQueries: [{ propertyName: "requisites", first: true, predicate: ["paymentRequisites"], descendants: true }, { propertyName: "hintMethod", first: true, predicate: ["hintMethod"], descendants: true }, { propertyName: "sdkList", predicate: CardSdkService, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form class=\"constructor\"\n [formGroup]=\"form\"\n (ngSubmit)=\"submit()\"\n >\n @if (loading !== null) {\n @if (step === TERMINAL_STEP.Prepare) {\n <div class=\"constructor__fields\">\n @if (countrySearchString || countriesList.length > 1) {\n <div class=\"constructor__field\">\n <app-trm-select [data]=\"countriesList\"\n @insertRemove\n name=\"country\"\n [label]=\"I18N_KEY.CONSTRUCTOR_LABEL_COUNTRY | trans\"\n formControlName=\"country\"\n class=\"c-field-select trm-form-field\"\n (search)=\"searchCountry($event)\"\n [tabIndex]=\"tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"fi\"\n [ngClass]=\"'fi-' + item.toLowerCase()\"></span>\n <span class=\"method__name\">{{item | country_translate: lang}}</span>\n </ng-template>\n </app-trm-select>\n </div>\n }\n @if (form.country.value) {\n <app-ps-select [methods]=\"methodsList\"\n @insertRemove\n formControlName=\"method\"\n [tabIndex]=\"tabIndex\"\n >\n @if (form.config?.description) {\n <div class=\"constructor__hint text--warn\"\n app-ps-select-hint\n #hintMethod\n @insertRemove\n >\n {{description | trans }}\n </div>\n }\n </app-ps-select>\n\n @if (\n form.method?.hasError('required') &&\n form.method.touched &&\n form.method.dirty\n ) {\n <div class=\"gm-error\" @insertRemove>\n {{ I18N_KEY.VALIDATION_REQUIRED | trans }}\n </div>\n }\n }\n\n @if (form.ready) {\n <div formGroupName=\"payment\"\n @insertRemove\n #paymentRequisites\n class=\"constructor__fields constructor__fields--reverse\">\n @if (form.method.value && form.amountDynamic) {\n <ng-container *ngTemplateOutlet=\"currencyTpl; context: {label: I18N_KEY.CONSTRUCTOR_LABEL_CURRENCY | trans, tabIndex: 0}\"></ng-container>\n }\n @for (field of form.fields; track field.name; let i = $index) {\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Iframe) {\n @if (form.payment.get(field.name)?.hasError('cde_error')) {\n <div class=\"constructor__hint cde-error\" @insertRemove>\n {{\n form.payment.get(field.name).getError('cde_error')\n | trans\n }}\n </div>\n }\n <app-constructor-field-iframe\n [formControlName]=\"field.name\"\n @insertRemove\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n >\n </app-constructor-field-iframe>\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Select) {\n <app-constructor-field-select\n @insertRemove\n [config]=\"field\"\n [items]=\"field?.options?.items\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n ></app-constructor-field-select>\n }\n @if ([CONSTRUCTOR_FIELD_TYPES.Text, CONSTRUCTOR_FIELD_TYPES.Number, CONSTRUCTOR_FIELD_TYPES.Email].includes(field.type)) {\n <app-constructor-field-text\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n (maskedValueChange)=\"changeTextFieldValue($event, field)\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"></app-constructor-field-text>\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Amount) {\n <app-constructor-field-text\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\">\n <app-method-amount-hint app-c-text-hint\n class=\"constructor__hint\"\n [loading]=\"feeLoading\"\n [options]=\"feeOptions || field.options\"\n ></app-method-amount-hint>\n @if (!hasCurrencyMethodSelector) {\n <div app-c-text-suffix\n class=\"constructor__currency\"\n [class.constructor__currency--transparent]=\"form.isAmountEditable\"\n >\n <ng-container *ngTemplateOutlet=\"currencyTpl; context: {tabIndex: form.fields.length - i + tabIndex}\"></ng-container>\n </div>\n }\n </app-constructor-field-text>\n @if (hasCurrencyMethodSelector) {\n <app-trm-select\n @insertRemove\n class=\"constructor-field\"\n [label]=\"I18N_KEY.CONSTRUCTOR_LABEL_CURRENCY | trans\"\n [formControl]=\"form.currency\"\n [searchable]=\"false\"\n [data]=\"currenciesList\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"trm-icon\" [ngClass]=\"'trm-curr-' + item.toLowerCase()\"\n [title]=\"item\"></span>\n {{item}}\n </ng-template>\n </app-trm-select>\n }\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Date) {\n <app-constructor-field-date\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"></app-constructor-field-date>\n }\n }\n <ng-template #currencyTpl let-label=\"label\" let-tabIndex=\"tabIndex\">\n <app-trm-select\n class=\"constructor-field-inner\"\n @insertRemove\n [label]=\"label\"\n [formControl]=\"form.userCurrency\"\n [searchable]=\"false\"\n [data]=\"userCurrenciesList\"\n [tabIndex]=\"tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"trm-icon\"\n [ngClass]=\"'trm-curr-' + item.toLowerCase()\"\n [title]=\"item\"></span>\n {{item}}\n </ng-template>\n </app-trm-select>\n </ng-template>\n </div>\n } @else {\n <div class=\"trm-skeleton-fields\">\n @for (i of skeletonLength; track $index) {\n <div class=\"trm-skeleton-field\">\n <gm-skeleton [count]=\"1\" [shape]=\"'rect-md'\" [size]=\"18\"></gm-skeleton>\n <gm-skeleton [count]=\"1\" [size]=\"50\"></gm-skeleton>\n </div>\n }\n </div>\n }\n @if (error && !form.methodInfoLoading) {\n <div class=\"trm-error\"\n @insertRemove\n >\n {{ error | trans }}\n </div>\n }\n </div>\n }\n @if (step === TERMINAL_STEP.Confirmation) {\n <app-constructor-preparation\n @insertRemove\n [currency]=\"response?.currency\"\n [methodName]=\"form.getTypeNameById(response.typeId)\"\n [wallet]=\"response.wallet\"\n [maskedWallet]=\"maskedWallet\"\n [amount]=\"response.amount\"\n [total]=\"response.total\"\n [confirmationText]=\"form.config?.confirmation\"\n >\n @if (error && !form.payment.pending) {\n <div class=\"trm-error\"\n app-constructor-preparation-error\n @insertRemove\n >\n {{ error | trans }}\n </div>\n }\n </app-constructor-preparation>\n }\n <div class=\"constructor__actions\"\n @insertRemove>\n <button class=\"trm-button trm-button--primary constructor__actions-continue\"\n type=\"submit\"\n [tabindex]=\"form.fields.length + tabIndex\">\n {{I18N_KEY.CONSTRUCTOR_LABEL_CONTINUE | trans}}\n @if (loading) {\n <span class=\"trm-spinner trm-spinner-white\"></span>\n }\n </button>\n <button class=\"trm-button trm-button--secondary constructor__actions-back\"\n type=\"button\"\n [tabindex]=\"form.fields.length + tabIndex\"\n (click)=\"back.emit()\"> {{ backBtnLabel | trans}}</button>\n </div>\n } @else {\n <div class=\"trm-skeleton-group\">\n <gm-skeleton [count]=\"4\" [gap]=\"20\" [size]=\"80\"></gm-skeleton>\n <gm-skeleton [count]=\"2\" [gap]=\"10\" [size]=\"48\"></gm-skeleton>\n </div>\n }\n</form>\n", styles: [":host{display:block}.constructor{display:flex;flex-direction:column;gap:32px;justify-content:flex-start;align-items:stretch}.constructor__fields{display:flex;flex-direction:column;gap:20px;justify-content:flex-start;align-items:stretch}.constructor__fields--reverse{flex-direction:column-reverse}.constructor__fields .fi{border-radius:2px;overflow:hidden;border:1px solid rgba(0,0,0,.08);box-sizing:border-box;background-origin:border-box;flex-shrink:0;height:15px}.constructor__fields .fi-other{border-color:transparent}.constructor__currency{--trm-select-border-radius: 0 10px 10px 0;display:flex;align-items:center;position:absolute;bottom:1px;right:1px;flex-shrink:0;min-height:44px}@media (min-width: 768px){.constructor__currency{min-height:48px}}.constructor__currency .trm-divider{margin:5px 0;align-self:stretch}.constructor__currency--transparent{--trm-select-bg-color: transparent;--trm-select-bg-color--disabled: transparent;--trm-select-border-color: transparent;--trm-select-border-color--hover: transparent;--trm-select-border-color--focus: transparent}.constructor__actions{display:flex;flex-direction:column;gap:10px;justify-content:flex-start;align-items:flex-start}.constructor__hint{font-weight:400;font-size:14px;line-height:22px;color:var(--color-base-350);margin-top:8px}.constructor__hint.cde-error{font-weight:500;font-size:14px;line-height:20px;color:var(--color-red-500)}.constructor .constructor__actions-continue{position:relative}.constructor .constructor__actions-continue .trm-spinner{position:absolute;right:15px}\n"], dependencies: [{ kind: "pipe", type: CountryTranslatePipe, name: "country_translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: TrmSelectComponent, selector: "app-trm-select", inputs: ["label", "hasBorder", "data", "tabIndex", "name", "placeholder", "searchable", "hasScrollbar", "nameId", "nameLabel"], outputs: ["open", "search"] }, { kind: "directive", type: TrmSelectLabelTemplateDirective, selector: "[trmSelectLabelTemplate]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PsSelectComponent, selector: "app-ps-select", inputs: ["methods", "tabIndex"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ConstructorFieldIframeComponent, selector: "app-constructor-field-iframe", inputs: ["tabIndex"] }, { kind: "component", type: ConstructorFieldSelectComponent, selector: "app-constructor-field-select", inputs: ["config", "items", "tabIndex"] }, { kind: "component", type: ConstructorFieldTextComponent, selector: "app-constructor-field-text", inputs: ["config", "matDatepicker", "tabIndex"], outputs: ["maskedValueChange"] }, { kind: "component", type: MethodAmountHintComponent, selector: "app-method-amount-hint", inputs: ["loading", "options"] }, { kind: "component", type: ConstructorFieldDateComponent, selector: "app-constructor-field-date", inputs: ["config", "tabIndex"] }, { kind: "component", type: ConstructorPreparationComponent, selector: "app-constructor-preparation", inputs: ["maskedWallet", "wallet", "confirmationText", "methodName", "currency", "amount", "total"] }, { kind: "directive", type: TabIndexFocusDirective, selector: "[tabindex]" }, { kind: "pipe", type: TranslateByKeyPipe, name: "trans" }, { kind: "component", type: GmSkeletonComponent, selector: "gm-skeleton", inputs: ["shape", "orientation", "count", "size", "gap"] }], animations: [insertRemoveTrigger], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
325
325
|
}
|
|
326
326
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ConstructorFormComponent, decorators: [{
|
|
327
327
|
type: Component,
|
|
328
328
|
args: [{ selector: 'app-constructor-form', changeDetection: ChangeDetectionStrategy.OnPush, animations: [insertRemoveTrigger], providers: [
|
|
329
329
|
ConstructorFormService,
|
|
330
330
|
CountryTranslatePipe, CountriesSortPipe
|
|
331
|
-
], standalone: true, imports: [CountryTranslatePipe, CountriesSortPipe, FormsModule, ReactiveFormsModule, TrmSelectComponent, TrmSelectLabelTemplateDirective, NgClass, PsSelectComponent, NgTemplateOutlet, ConstructorFieldIframeComponent, ConstructorFieldSelectComponent, ConstructorFieldTextComponent, MethodAmountHintComponent, ConstructorFieldDateComponent, ConstructorPreparationComponent, TabIndexFocusDirective, CountryTranslatePipe, TranslateByKeyPipe, GmSkeletonComponent], template: "<form class=\"constructor\"\n [formGroup]=\"form\"\n (ngSubmit)=\"submit()\"\n >\n @if (loading !== null) {\n @if (step === TERMINAL_STEP.Prepare) {\n <div class=\"constructor__fields\">\n @if (countrySearchString || countriesList.length > 1) {\n <div class=\"constructor__field\">\n <app-trm-select [data]=\"countriesList\"\n @insertRemove\n name=\"country\"\n [label]=\"I18N_KEY.CONSTRUCTOR_LABEL_COUNTRY | trans\"\n formControlName=\"country\"\n class=\"c-field-select trm-form-field\"\n (search)=\"searchCountry($event)\"\n [tabIndex]=\"tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"fi\"\n [ngClass]=\"'fi-' + item.toLowerCase()\"></span>\n <span class=\"method__name\">{{item | country_translate: lang}}</span>\n </ng-template>\n </app-trm-select>\n </div>\n }\n @if (form.country.value) {\n <app-ps-select [methods]=\"methodsList\"\n @insertRemove\n formControlName=\"method\"\n [tabIndex]=\"tabIndex\"\n >\n @if (form.config?.description) {\n <div class=\"constructor__hint text--warn\"\n app-ps-select-hint\n #hintMethod\n @insertRemove\n >\n {{description | trans }}\n </div>\n }\n </app-ps-select>\n\n @if (\n form.method?.hasError('required') &&\n form.method.touched &&\n form.method.dirty\n ) {\n <div class=\"gm-error\" @insertRemove>\n {{ I18N_KEY.VALIDATION_REQUIRED | trans }}\n </div>\n }\n }\n\n @if (form.ready) {\n <div formGroupName=\"payment\"\n @insertRemove\n #paymentRequisites\n class=\"constructor__fields constructor__fields--reverse\">\n @if (form.method.value && form.amountDynamic) {\n <ng-container *ngTemplateOutlet=\"currencyTpl; context: {label: I18N_KEY.CONSTRUCTOR_LABEL_CURRENCY | trans, tabIndex: 0}\"></ng-container>\n }\n @for (field of form.fields; track field.name; let i = $index) {\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Iframe) {\n @if (form.payment.get(field.name)?.hasError('cde_error')) {\n <div class=\"constructor__hint cde-error\" @insertRemove>\n {{\n form.payment.get(field.name).getError('cde_error')\n | trans\n }}\n </div>\n }\n <app-constructor-field-iframe\n [formControlName]=\"field.name\"\n @insertRemove\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n >\n </app-constructor-field-iframe>\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Select) {\n <app-constructor-field-select\n @insertRemove\n [config]=\"field\"\n [items]=\"field?.options?.items\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n ></app-constructor-field-select>\n }\n @if ([CONSTRUCTOR_FIELD_TYPES.Text, CONSTRUCTOR_FIELD_TYPES.Number, CONSTRUCTOR_FIELD_TYPES.Email].includes(field.type)) {\n <app-constructor-field-text\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n (maskedValueChange)=\"changeTextFieldValue($event, field)\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"></app-constructor-field-text>\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Amount) {\n <app-constructor-field-text\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\">\n <app-method-amount-hint app-c-text-hint\n class=\"constructor__hint\"\n [loading]=\"feeLoading\"\n [options]=\"feeOptions || field.options\"\n ></app-method-amount-hint>\n <div app-c-text-suffix\n class=\"constructor__currency\"\n [class.constructor__currency--transparent]=\"form.isAmountEditable\"\n >\n <ng-container *ngTemplateOutlet=\"currencyTpl; context: {tabIndex: form.fields.length - i + tabIndex}\"></ng-container>\n </div>\n </app-constructor-field-text>\n @if (hasCurrencyMethodSelector) {\n <app-trm-select\n @insertRemove\n class=\"constructor-field\"\n [label]=\"I18N_KEY.CONSTRUCTOR_LABEL_CURRENCY | trans\"\n [formControl]=\"form.currency\"\n [searchable]=\"false\"\n [data]=\"currenciesList\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"trm-icon\" [ngClass]=\"'trm-curr-' + item.toLowerCase()\"\n [title]=\"item\"></span>\n {{item}}\n </ng-template>\n </app-trm-select>\n }\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Date) {\n <app-constructor-field-date\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"></app-constructor-field-date>\n }\n }\n <ng-template #currencyTpl let-label=\"label\" let-tabIndex=\"tabIndex\">\n <app-trm-select\n @insertRemove\n [label]=\"label\"\n [formControl]=\"form.userCurrency\"\n [searchable]=\"false\"\n [data]=\"userCurrenciesList\"\n [tabIndex]=\"tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"trm-icon\"\n [ngClass]=\"'trm-curr-' + item.toLowerCase()\"\n [title]=\"item\"></span>\n {{item}}\n </ng-template>\n </app-trm-select>\n </ng-template>\n </div>\n } @else {\n <div class=\"trm-skeleton-fields\">\n @for (i of skeletonLength; track $index) {\n <div class=\"trm-skeleton-field\">\n <gm-skeleton [count]=\"1\" [shape]=\"'rect-md'\" [size]=\"18\"></gm-skeleton>\n <gm-skeleton [count]=\"1\" [size]=\"50\"></gm-skeleton>\n </div>\n }\n </div>\n }\n @if (error && !form.methodInfoLoading) {\n <div class=\"trm-error\"\n @insertRemove\n >\n {{ error | trans }}\n </div>\n }\n </div>\n }\n @if (step === TERMINAL_STEP.Confirmation) {\n <app-constructor-preparation\n @insertRemove\n [currency]=\"response?.currency\"\n [methodName]=\"form.getTypeNameById(response.typeId)\"\n [wallet]=\"response.wallet\"\n [maskedWallet]=\"maskedWallet\"\n [amount]=\"response.amount\"\n [total]=\"response.total\"\n [confirmationText]=\"form.config?.confirmation\"\n >\n @if (error && !form.payment.pending) {\n <div class=\"trm-error\"\n app-constructor-preparation-error\n @insertRemove\n >\n {{ error | trans }}\n </div>\n }\n </app-constructor-preparation>\n }\n <div class=\"constructor__actions\"\n @insertRemove>\n <button class=\"trm-button trm-button--primary constructor__actions-continue\"\n type=\"submit\"\n [tabindex]=\"form.fields.length + tabIndex\">\n {{I18N_KEY.CONSTRUCTOR_LABEL_CONTINUE | trans}}\n @if (loading) {\n <span class=\"trm-spinner trm-spinner-white\"></span>\n }\n </button>\n <button class=\"trm-button trm-button--secondary constructor__actions-back\"\n type=\"button\"\n [tabindex]=\"form.fields.length + tabIndex\"\n (click)=\"back.emit()\"> {{ backBtnLabel | trans}}</button>\n </div>\n } @else {\n <div class=\"trm-skeleton-group\">\n <gm-skeleton [count]=\"4\" [gap]=\"20\" [size]=\"80\"></gm-skeleton>\n <gm-skeleton [count]=\"2\" [gap]=\"10\" [size]=\"48\"></gm-skeleton>\n </div>\n }\n</form>\n", styles: [":host{display:block}.constructor{display:flex;flex-direction:column;gap:32px;justify-content:flex-start;align-items:stretch}.constructor__fields{display:flex;flex-direction:column;gap:20px;justify-content:flex-start;align-items:stretch}.constructor__fields--reverse{flex-direction:column-reverse}.constructor__fields .fi{border-radius:2px;overflow:hidden;border:1px solid rgba(0,0,0,.08);box-sizing:border-box;background-origin:border-box;flex-shrink:0;height:15px}.constructor__fields .fi-other{border-color:transparent}.constructor__currency{--trm-select-border-radius: 0 10px 10px 0;display:flex;align-items:center;position:absolute;bottom:0;right:0;flex-shrink:0;min-height:46px}@media (min-width: 768px){.constructor__currency{min-height:50px}}.constructor__currency .trm-divider{margin:5px 0;align-self:stretch}.constructor__currency--transparent{--trm-select-bg-color: transparent;--trm-select-bg-color--disabled: transparent;--trm-select-border-color: transparent;--trm-select-border-color--hover: transparent;--trm-select-border-color--focus: transparent}.constructor__actions{display:flex;flex-direction:column;gap:10px;justify-content:flex-start;align-items:flex-start}.constructor__hint{font-weight:400;font-size:14px;line-height:22px;color:var(--color-base-350);margin-top:8px}.constructor__hint.cde-error{font-weight:500;font-size:14px;line-height:20px;color:var(--color-red-500)}.constructor .constructor__actions-continue{position:relative}.constructor .constructor__actions-continue .trm-spinner{position:absolute;right:15px}\n"] }]
|
|
331
|
+
], standalone: true, imports: [CountryTranslatePipe, CountriesSortPipe, FormsModule, ReactiveFormsModule, TrmSelectComponent, TrmSelectLabelTemplateDirective, NgClass, PsSelectComponent, NgTemplateOutlet, ConstructorFieldIframeComponent, ConstructorFieldSelectComponent, ConstructorFieldTextComponent, MethodAmountHintComponent, ConstructorFieldDateComponent, ConstructorPreparationComponent, TabIndexFocusDirective, CountryTranslatePipe, TranslateByKeyPipe, GmSkeletonComponent], template: "<form class=\"constructor\"\n [formGroup]=\"form\"\n (ngSubmit)=\"submit()\"\n >\n @if (loading !== null) {\n @if (step === TERMINAL_STEP.Prepare) {\n <div class=\"constructor__fields\">\n @if (countrySearchString || countriesList.length > 1) {\n <div class=\"constructor__field\">\n <app-trm-select [data]=\"countriesList\"\n @insertRemove\n name=\"country\"\n [label]=\"I18N_KEY.CONSTRUCTOR_LABEL_COUNTRY | trans\"\n formControlName=\"country\"\n class=\"c-field-select trm-form-field\"\n (search)=\"searchCountry($event)\"\n [tabIndex]=\"tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"fi\"\n [ngClass]=\"'fi-' + item.toLowerCase()\"></span>\n <span class=\"method__name\">{{item | country_translate: lang}}</span>\n </ng-template>\n </app-trm-select>\n </div>\n }\n @if (form.country.value) {\n <app-ps-select [methods]=\"methodsList\"\n @insertRemove\n formControlName=\"method\"\n [tabIndex]=\"tabIndex\"\n >\n @if (form.config?.description) {\n <div class=\"constructor__hint text--warn\"\n app-ps-select-hint\n #hintMethod\n @insertRemove\n >\n {{description | trans }}\n </div>\n }\n </app-ps-select>\n\n @if (\n form.method?.hasError('required') &&\n form.method.touched &&\n form.method.dirty\n ) {\n <div class=\"gm-error\" @insertRemove>\n {{ I18N_KEY.VALIDATION_REQUIRED | trans }}\n </div>\n }\n }\n\n @if (form.ready) {\n <div formGroupName=\"payment\"\n @insertRemove\n #paymentRequisites\n class=\"constructor__fields constructor__fields--reverse\">\n @if (form.method.value && form.amountDynamic) {\n <ng-container *ngTemplateOutlet=\"currencyTpl; context: {label: I18N_KEY.CONSTRUCTOR_LABEL_CURRENCY | trans, tabIndex: 0}\"></ng-container>\n }\n @for (field of form.fields; track field.name; let i = $index) {\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Iframe) {\n @if (form.payment.get(field.name)?.hasError('cde_error')) {\n <div class=\"constructor__hint cde-error\" @insertRemove>\n {{\n form.payment.get(field.name).getError('cde_error')\n | trans\n }}\n </div>\n }\n <app-constructor-field-iframe\n [formControlName]=\"field.name\"\n @insertRemove\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n >\n </app-constructor-field-iframe>\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Select) {\n <app-constructor-field-select\n @insertRemove\n [config]=\"field\"\n [items]=\"field?.options?.items\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n ></app-constructor-field-select>\n }\n @if ([CONSTRUCTOR_FIELD_TYPES.Text, CONSTRUCTOR_FIELD_TYPES.Number, CONSTRUCTOR_FIELD_TYPES.Email].includes(field.type)) {\n <app-constructor-field-text\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n (maskedValueChange)=\"changeTextFieldValue($event, field)\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"></app-constructor-field-text>\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Amount) {\n <app-constructor-field-text\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\">\n <app-method-amount-hint app-c-text-hint\n class=\"constructor__hint\"\n [loading]=\"feeLoading\"\n [options]=\"feeOptions || field.options\"\n ></app-method-amount-hint>\n @if (!hasCurrencyMethodSelector) {\n <div app-c-text-suffix\n class=\"constructor__currency\"\n [class.constructor__currency--transparent]=\"form.isAmountEditable\"\n >\n <ng-container *ngTemplateOutlet=\"currencyTpl; context: {tabIndex: form.fields.length - i + tabIndex}\"></ng-container>\n </div>\n }\n </app-constructor-field-text>\n @if (hasCurrencyMethodSelector) {\n <app-trm-select\n @insertRemove\n class=\"constructor-field\"\n [label]=\"I18N_KEY.CONSTRUCTOR_LABEL_CURRENCY | trans\"\n [formControl]=\"form.currency\"\n [searchable]=\"false\"\n [data]=\"currenciesList\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"trm-icon\" [ngClass]=\"'trm-curr-' + item.toLowerCase()\"\n [title]=\"item\"></span>\n {{item}}\n </ng-template>\n </app-trm-select>\n }\n }\n @if (field.type === CONSTRUCTOR_FIELD_TYPES.Date) {\n <app-constructor-field-date\n @insertRemove\n [config]=\"field\"\n [formControlName]=\"field.name\"\n [tabIndex]=\"form.fields.length - i + tabIndex\"></app-constructor-field-date>\n }\n }\n <ng-template #currencyTpl let-label=\"label\" let-tabIndex=\"tabIndex\">\n <app-trm-select\n class=\"constructor-field-inner\"\n @insertRemove\n [label]=\"label\"\n [formControl]=\"form.userCurrency\"\n [searchable]=\"false\"\n [data]=\"userCurrenciesList\"\n [tabIndex]=\"tabIndex\"\n >\n <ng-template trmSelectLabelTemplate let-item=\"item\">\n <span class=\"trm-icon\"\n [ngClass]=\"'trm-curr-' + item.toLowerCase()\"\n [title]=\"item\"></span>\n {{item}}\n </ng-template>\n </app-trm-select>\n </ng-template>\n </div>\n } @else {\n <div class=\"trm-skeleton-fields\">\n @for (i of skeletonLength; track $index) {\n <div class=\"trm-skeleton-field\">\n <gm-skeleton [count]=\"1\" [shape]=\"'rect-md'\" [size]=\"18\"></gm-skeleton>\n <gm-skeleton [count]=\"1\" [size]=\"50\"></gm-skeleton>\n </div>\n }\n </div>\n }\n @if (error && !form.methodInfoLoading) {\n <div class=\"trm-error\"\n @insertRemove\n >\n {{ error | trans }}\n </div>\n }\n </div>\n }\n @if (step === TERMINAL_STEP.Confirmation) {\n <app-constructor-preparation\n @insertRemove\n [currency]=\"response?.currency\"\n [methodName]=\"form.getTypeNameById(response.typeId)\"\n [wallet]=\"response.wallet\"\n [maskedWallet]=\"maskedWallet\"\n [amount]=\"response.amount\"\n [total]=\"response.total\"\n [confirmationText]=\"form.config?.confirmation\"\n >\n @if (error && !form.payment.pending) {\n <div class=\"trm-error\"\n app-constructor-preparation-error\n @insertRemove\n >\n {{ error | trans }}\n </div>\n }\n </app-constructor-preparation>\n }\n <div class=\"constructor__actions\"\n @insertRemove>\n <button class=\"trm-button trm-button--primary constructor__actions-continue\"\n type=\"submit\"\n [tabindex]=\"form.fields.length + tabIndex\">\n {{I18N_KEY.CONSTRUCTOR_LABEL_CONTINUE | trans}}\n @if (loading) {\n <span class=\"trm-spinner trm-spinner-white\"></span>\n }\n </button>\n <button class=\"trm-button trm-button--secondary constructor__actions-back\"\n type=\"button\"\n [tabindex]=\"form.fields.length + tabIndex\"\n (click)=\"back.emit()\"> {{ backBtnLabel | trans}}</button>\n </div>\n } @else {\n <div class=\"trm-skeleton-group\">\n <gm-skeleton [count]=\"4\" [gap]=\"20\" [size]=\"80\"></gm-skeleton>\n <gm-skeleton [count]=\"2\" [gap]=\"10\" [size]=\"48\"></gm-skeleton>\n </div>\n }\n</form>\n", styles: [":host{display:block}.constructor{display:flex;flex-direction:column;gap:32px;justify-content:flex-start;align-items:stretch}.constructor__fields{display:flex;flex-direction:column;gap:20px;justify-content:flex-start;align-items:stretch}.constructor__fields--reverse{flex-direction:column-reverse}.constructor__fields .fi{border-radius:2px;overflow:hidden;border:1px solid rgba(0,0,0,.08);box-sizing:border-box;background-origin:border-box;flex-shrink:0;height:15px}.constructor__fields .fi-other{border-color:transparent}.constructor__currency{--trm-select-border-radius: 0 10px 10px 0;display:flex;align-items:center;position:absolute;bottom:1px;right:1px;flex-shrink:0;min-height:44px}@media (min-width: 768px){.constructor__currency{min-height:48px}}.constructor__currency .trm-divider{margin:5px 0;align-self:stretch}.constructor__currency--transparent{--trm-select-bg-color: transparent;--trm-select-bg-color--disabled: transparent;--trm-select-border-color: transparent;--trm-select-border-color--hover: transparent;--trm-select-border-color--focus: transparent}.constructor__actions{display:flex;flex-direction:column;gap:10px;justify-content:flex-start;align-items:flex-start}.constructor__hint{font-weight:400;font-size:14px;line-height:22px;color:var(--color-base-350);margin-top:8px}.constructor__hint.cde-error{font-weight:500;font-size:14px;line-height:20px;color:var(--color-red-500)}.constructor .constructor__actions-continue{position:relative}.constructor .constructor__actions-continue .trm-spinner{position:absolute;right:15px}\n"] }]
|
|
332
332
|
}], propDecorators: { step: [{
|
|
333
333
|
type: Input
|
|
334
334
|
}], error: [{
|
|
@@ -371,4 +371,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
|
|
|
371
371
|
type: ViewChildren,
|
|
372
372
|
args: [CardSdkService]
|
|
373
373
|
}] } });
|
|
374
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZXJtaW5hbC10ZW1wbGF0ZS9zcmMvbGliL2FwcC9wYWdlcy9jb21wb25lbnRzL2NvbnN0cnVjdG9yLWZvcm0vY29uc3RydWN0b3ItZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZXJtaW5hbC10ZW1wbGF0ZS9zcmMvbGliL2FwcC9wYWdlcy9jb21wb25lbnRzL2NvbnN0cnVjdG9yLWZvcm0vY29uc3RydWN0b3ItZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFRN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFN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QUFFLCtCQUErQixFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLDZCQUE2QixFQUFFLCtCQUErQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDOzhCQWNqYyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRTJDLFVBQVU7c0JBQTFELFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUNMLFVBQVU7c0JBQW5ELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFDVixPQUFPO3NCQUFwQyxZQUFZO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGF5bWVudEZpZWxkLCBQYXltZW50RmllbGRPcHRpb25zLCBQYXltZW50RmllbGRUeXBlRW51bSwgVGVybWluYWxTdGVwIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3JGb3JtU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29uc3RydWN0b3ItZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE1ldGhvZFR5cGUsXG4gIE1ldGhvZFR5cGVUeXBlLFxuICBUZXJtaW5hbFBheW1lbnRDb25maXJtUmVzcG9uc2UsXG4gIFRlcm1pbmFsUGF5bWVudFByZXBhcmVSZXF1ZXN0LFxuICBUZXJtaW5hbFBheW1lbnRQcmVwYXJlUmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vLi4vLi4vY29kZWdlbi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgaW5zZXJ0UmVtb3ZlVHJpZ2dlciB9IGZyb20gJy4vLi4vLi4vLi4vaGVscGVycy9pbnNlcnRSZW1vdmVUcmlnZ2VyJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ291bnRyaWVzU29ydFBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9jb3VudHJpZXMtc29ydC5waXBlJztcbmltcG9ydCB7IE5nU2Nyb2xsYmFyIH0gZnJvbSAnbmd4LXNjcm9sbGJhcic7XG5pbXBvcnQgeyBJMThOX0tFWSB9IGZyb20gJy4vLi4vLi4vLi4vaTE4bic7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RvckZpZWxkSWZyYW1lQ29tcG9uZW50XG59IGZyb20gXCIuL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtaWZyYW1lL2NvbnN0cnVjdG9yLWZpZWxkLWlmcmFtZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IENvdW50cnlUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvY291bnRyeS10cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBURVJNSU5BTF9WRVJTSU9OX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBWZXJzaW9uU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJtU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvdHJtLXNlbGVjdC90cm0tc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBUcm1TZWxlY3RMYWJlbFRlbXBsYXRlRGlyZWN0aXZlXG59IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL3RybS1zZWxlY3QvdHJtLXNlbGVjdC1sYWJlbC10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUHNTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHMtc2VsZWN0L3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3JGaWVsZFNlbGVjdENvbXBvbmVudFxufSBmcm9tICcuL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtc2VsZWN0L2NvbnN0cnVjdG9yLWZpZWxkLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3JGaWVsZFRleHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtdGV4dC9jb25zdHJ1Y3Rvci1maWVsZC10ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZXRob2RBbW91bnRIaW50Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21ldGhvZC1hbW91bnQtaGludC9tZXRob2QtYW1vdW50LWhpbnQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbnN0cnVjdG9yRmllbGREYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbnN0cnVjdG9yLWZpZWxkLWRhdGUvY29uc3RydWN0b3ItZmllbGQtZGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3JQcmVwYXJhdGlvbkNvbXBvbmVudFxufSBmcm9tICcuL2NvbXBvbmVudHMvY29uc3RydWN0b3ItcHJlcGFyYXRpb24vY29uc3RydWN0b3ItcHJlcGFyYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRhYkluZGV4Rm9jdXNEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RhYi1pbmRleC1mb2N1cy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlQnlLZXlQaXBlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3BpcGVzL3RyYW5zbGF0ZS1ieS1rZXkucGlwZSc7XG5pbXBvcnQgeyBHbVNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnQGdtbW9uZXkvZ20tdWkta2l0JztcbmltcG9ydCB7IE9USEVSX0NPVU5UUllfQ09ERSB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBDYXJkU2RrU2VydmljZSB9IGZyb20gXCIuL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtaWZyYW1lL2NhcmQtc2RrLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNvbnN0cnVjdG9yLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uc3RydWN0b3ItZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnN0cnVjdG9yLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtpbnNlcnRSZW1vdmVUcmlnZ2VyXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQ29uc3RydWN0b3JGb3JtU2VydmljZSxcbiAgICBDb3VudHJ5VHJhbnNsYXRlUGlwZSwgQ291bnRyaWVzU29ydFBpcGVcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvdW50cnlUcmFuc2xhdGVQaXBlLCBDb3VudHJpZXNTb3J0UGlwZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFRybVNlbGVjdENvbXBvbmVudCwgVHJtU2VsZWN0TGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSwgTmdDbGFzcywgUHNTZWxlY3RDb21wb25lbnQsIE5nVGVtcGxhdGVPdXRsZXQsIENvbnN0cnVjdG9yRmllbGRJZnJhbWVDb21wb25lbnQsIENvbnN0cnVjdG9yRmllbGRTZWxlY3RDb21wb25lbnQsIENvbnN0cnVjdG9yRmllbGRUZXh0Q29tcG9uZW50LCBNZXRob2RBbW91bnRIaW50Q29tcG9uZW50LCBDb25zdHJ1Y3RvckZpZWxkRGF0ZUNvbXBvbmVudCwgQ29uc3RydWN0b3JQcmVwYXJhdGlvbkNvbXBvbmVudCwgVGFiSW5kZXhGb2N1c0RpcmVjdGl2ZSwgQ291bnRyeVRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZUJ5S2V5UGlwZSwgR21Ta2VsZXRvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgQ29uc3RydWN0b3JGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgZm9ybSA9IGluamVjdChDb25zdHJ1Y3RvckZvcm1TZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTcnYgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByaXZhdGUgY291bnRyaWVzU29ydFBpcGUgPSBpbmplY3QoQ291bnRyaWVzU29ydFBpcGUpO1xuICBwcml2YXRlIGNvdW50cnlUcmFuc2xhdGVQaXBlID0gaW5qZWN0KENvdW50cnlUcmFuc2xhdGVQaXBlKTtcbiAgcHJpdmF0ZSBuZ1Njcm9sbEJhciA9IGluamVjdChOZ1Njcm9sbGJhcik7XG4gIHByaXZhdGUgdmVyc2lvblNydiA9IGluamVjdDxWZXJzaW9uU2VydmljZUludGVyZmFjZT4oVEVSTUlOQUxfVkVSU0lPTl9TRVJWSUNFX1RPS0VOKTtcblxuICBwcml2YXRlIHVuU3Vic2NyaWJlciA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcHJlcGFyYXRpb25TdGVwRmlsbGVkID0gZmFsc2U7XG4gIFRFUk1JTkFMX1NURVAgPSBUZXJtaW5hbFN0ZXA7XG4gIEBJbnB1dCgpIHN0ZXA6IFRlcm1pbmFsU3RlcDtcbiAgQElucHV0KCkgZXJyb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlc3BvbnNlOiBUZXJtaW5hbFBheW1lbnRQcmVwYXJlUmVzcG9uc2UgJiBUZXJtaW5hbFBheW1lbnRDb25maXJtUmVzcG9uc2UgJiB7XG4gICAgdHlwZUlkPzogbnVtYmVyO1xuICB9O1xuICBDT05TVFJVQ1RPUl9GSUVMRF9UWVBFUyA9IFBheW1lbnRGaWVsZFR5cGVFbnVtO1xuICBASW5wdXQoKSBmZWVMb2FkaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBmZWVPcHRpb25zOiBQYXltZW50RmllbGRPcHRpb25zO1xuICBASW5wdXQoKSBjdXJyZW5jeTogc3RyaW5nO1xuICBASW5wdXQoKSB1c2VyQ3VycmVuY3k6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBsb2FkaW5nID0gbnVsbDtcbiAgQElucHV0KCkgdHlwZXM6IE1ldGhvZFR5cGVbXSA9IFtdO1xuICBASW5wdXQoKSBjYW5SZXR1cm5Ub1Byb2plY3QgPSB0cnVlO1xuICBAT3V0cHV0KCkgYW1vdW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIGJhY2s6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHByZXBhcmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjb25maXJtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25QYXltZW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgdGFiSW5kZXg6IG51bWJlcjtcbiAgY291bnRyeVNlYXJjaFN0cmluZzogc3RyaW5nO1xuICBAVmlld0NoaWxkKCdwYXltZW50UmVxdWlzaXRlcycsIHtzdGF0aWM6IGZhbHNlfSkgcmVxdWlzaXRlczogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaGludE1ldGhvZCcsIHtzdGF0aWM6IGZhbHNlfSkgaGludE1ldGhvZDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbihDYXJkU2RrU2VydmljZSkgc2RrTGlzdDogUXVlcnlMaXN0PENhcmRTZGtTZXJ2aWNlPjtcbiAgbWFza2VkV2FsbGV0OiBzdHJpbmc7XG5cbiAgSTE4Tl9LRVkgPSBJMThOX0tFWTtcblxuICBnZXQgY291bnRyaWVzTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY291bnRyaWVzU29ydFBpcGVcbiAgICAgIC50cmFuc2Zvcm0oXG4gICAgICAgIHRoaXMudHlwZXNcbiAgICAgICAgICAubWFwKHR5cGUgPT4gdHlwZS5jb3VudHJ5SVNPQ29kZSlcbiAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4KVxuICAgICAgKVxuICAgICAgLmZpbHRlcigobTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jb3VudHJ5U2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGl0bGU6IHN0cmluZyA9IHRoaXMuY291bnRyeVRyYW5zbGF0ZVBpcGUudHJhbnNmb3JtKG0pO1xuICAgICAgICAgIHJldHVybiB0aXRsZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuc3BsaXQoJyAnKS5zb21lKFxuICAgICAgICAgICAgICB0cyA9PiB0aGlzLmNvdW50cnlTZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpLnNvbWUocyA9PiB0cy5pbmNsdWRlcyhzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0IG1ldGhvZHNMaXN0KCk6IE1ldGhvZFR5cGVUeXBlW10ge1xuICAgIHJldHVybiB0aGlzLnR5cGVzXG4gICAgICAuZmlsdGVyKHR5cGUgPT4gdHlwZS5jb3VudHJ5SVNPQ29kZSA9PT0gdGhpcy5mb3JtLmNvdW50cnkudmFsdWUpXG4gICAgICAvLyBkaXN0aW5jdFxuICAgICAgLmZpbHRlcigodHlwZSwgaW5kZXgsIHNlbGYpID0+IHNlbGYubWFwKG0gPT4gbS50eXBlLmlkKS5pbmRleE9mKHR5cGUudHlwZS5pZCkgPT09IGluZGV4KVxuICAgICAgLy9zb3J0aW5nIGJ5IHRoZSBwcmlvcml0eVxuICAgICAgLnNvcnQoKG0xLCBtMikgPT4gbTEucHJpb3JpdHkgPiBtMi5wcmlvcml0eSA/IDEgOiAoKG0xLnByaW9yaXR5ID09PSBtMi5wcmlvcml0eSkgPyAwIDogLTEpKVxuICAgICAgLm1hcCh0eXBlID0+IHR5cGUudHlwZSk7XG4gIH1cblxuICBnZXQgY3VycmVuY2llc0xpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZXNcbiAgICAgIC5maWx0ZXIodHlwZSA9PiB0eXBlLmNvdW50cnlJU09Db2RlID09PSB0aGlzLmZvcm0uY291bnRyeS52YWx1ZSAmJiB0eXBlLnR5cGUuaWQgPT09IHRoaXMuZm9ybS5tZXRob2QudmFsdWUpXG4gICAgICAubWFwKHR5cGUgPT4gdHlwZS5jdXJyZW5jeSlcbiAgfVxuXG4gIGdldCB1c2VyQ3VycmVuY2llc0xpc3QoKSB7XG4gICAgY29uc3QgZmlsdGVyZWRUeXBlcyA9IHRoaXMuY3VycmVuY2llc0xpc3Q7XG5cbiAgICBpZiAoIXRoaXMudXNlckN1cnJlbmN5KSB7XG4gICAgICByZXR1cm4gZmlsdGVyZWRUeXBlcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51c2VyQ3VycmVuY3lcbiAgICAgIC5maWx0ZXIodXNlckN1cnJlbmN5ID0+IGZpbHRlcmVkVHlwZXMuaW5jbHVkZXModXNlckN1cnJlbmN5KSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3VycmVuY3lWYWx1ZSgpIHtcbiAgICBsZXQgZGVmYXVsdEN1cnJlbmN5ID0gdGhpcy5mb3JtLmRlZmF1bHRDdXJyZW5jeTtcblxuICAgIGxldCBjdXJyZW5jaWVzID0gdGhpcy5jdXJyZW5jaWVzTGlzdDtcbiAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzWzBdO1xuICAgIGlmIChkZWZhdWx0Q3VycmVuY3kgJiYgdGhpcy5jdXJyZW5jaWVzTGlzdC5pbmNsdWRlcyhkZWZhdWx0Q3VycmVuY3kpKSB7XG4gICAgICBjdXJyZW5jeSA9IGRlZmF1bHRDdXJyZW5jeTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVuY3kgJiYgdGhpcy5jdXJyZW5jaWVzTGlzdC5pbmNsdWRlcyh0aGlzLmN1cnJlbmN5KSkge1xuICAgICAgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmN5O1xuICAgIH1cbiAgICB0aGlzLmZvcm0uY3VycmVuY3kuc2V0VmFsdWUoY3VycmVuY3kpO1xuXG4gICAgY3VycmVuY2llcyA9IHRoaXMudXNlckN1cnJlbmNpZXNMaXN0O1xuICAgIGN1cnJlbmN5ID0gY3VycmVuY2llc1swXTtcbiAgICBpZiAoZGVmYXVsdEN1cnJlbmN5ICYmIHRoaXMudXNlckN1cnJlbmNpZXNMaXN0LmluY2x1ZGVzKGRlZmF1bHRDdXJyZW5jeSkpIHtcbiAgICAgIGN1cnJlbmN5ID0gZGVmYXVsdEN1cnJlbmN5O1xuICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW5jeSAmJiB0aGlzLnVzZXJDdXJyZW5jaWVzTGlzdC5pbmNsdWRlcyh0aGlzLmN1cnJlbmN5KSkge1xuICAgICAgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmN5O1xuICAgIH1cbiAgICB0aGlzLmZvcm0udXNlckN1cnJlbmN5LnNldFZhbHVlKGN1cnJlbmN5LCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIGlmIChjdXJyZW5jaWVzLmxlbmd0aCA9PT0gMSAmJiBjdXJyZW5jeSAmJiB0aGlzLmZvcm0ubWV0aG9kLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmZvcm0udXNlckN1cnJlbmN5LmRpc2FibGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaGFzQ3VycmVuY3lNZXRob2RTZWxlY3RvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uU3J2Lmhhc0N1cnJlbmN5TWV0aG9kU2VsZWN0b3IgPT09IHRydWU7XG4gIH1cblxuICBnZXQgbGFuZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNydi5jdXJyZW50TGFuZztcbiAgfVxuXG4gIGdldCBza2VsZXRvbkxlbmd0aCgpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KHRoaXMuZm9ybS5maWVsZHM/Lmxlbmd0aCB8fCAzKS5maWxsKDApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLnR5cGVzICYmIHRoaXMudHlwZXM/Lmxlbmd0aCB8fCBjaGFuZ2VzLmN1cnJlbmN5ICYmIHRoaXMuY3VycmVuY3kpIHtcbiAgICAgIC8vIEdldCBjb25maWd1cmF0aW9uIGZpZWxkc1xuICAgICAgY29uc3QgY291bnRyaWVzID0gdGhpcy5jb3VudHJpZXNMaXN0O1xuICAgICAgY29uc3QgZGVmYXVsdENvdW50cnkgPSB0aGlzLmZvcm0uZGVmYXVsdENvdW50cnk7XG4gICAgICBsZXQgY291bnRyeSA9IG51bGw7XG4gICAgICBpZiAoIWNvdW50cmllcy5pbmNsdWRlcyhkZWZhdWx0Q291bnRyeSkpIHtcbiAgICAgICAgaWYgKGNvdW50cmllcy5pbmNsdWRlcyhPVEhFUl9DT1VOVFJZX0NPREUpKSB7XG4gICAgICAgICAgY291bnRyeSA9IE9USEVSX0NPVU5UUllfQ09ERTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY291bnRyeSA9IGRlZmF1bHRDb3VudHJ5O1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtLmNvdW50cnkuc2V0VmFsdWUoY291bnRyeSk7XG4gICAgICBpZiAoIWNvdW50cnkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvdW50cmllcy5sZW5ndGggPT09IDEgJiYgdGhpcy5mb3JtLmNvdW50cnkudmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtLmNvdW50cnkuZGlzYWJsZSgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRob2RzID0gdGhpcy5tZXRob2RzTGlzdDtcbiAgICAgIGNvbnN0IGRlZmF1bHRNZXRob2ROYW1lID0gdGhpcy5mb3JtLmRlZmF1bHRNZXRob2ROYW1lO1xuICAgICAgY29uc3QgZGVmYXVsdE1ldGhvZCA9IG1ldGhvZHMuZmluZChtID0+IG0ubmFtZSA9PT0gZGVmYXVsdE1ldGhvZE5hbWUpPy5pZDtcbiAgICAgIHRoaXMuZm9ybS5tZXRob2Quc2V0VmFsdWUoZGVmYXVsdE1ldGhvZCB8fCBtZXRob2RzWzBdPy5pZCk7XG5cbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAxICYmIHRoaXMuZm9ybS5jb3VudHJ5LmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZm9ybS5tZXRob2QuZGlzYWJsZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnNldEN1cnJlbmN5VmFsdWUoKTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICB0aGlzLmZvcm1cbiAgICAgICAgLmRpc3RpbmN0VmFsdWVDaGFuZ2VzKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVyKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblBheW1lbnRDaGFuZ2VkLmVtaXQodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpKTtcbiAgICAgIHRoaXMuZmV0Y2hGb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuc3RlcD8uY3VycmVudFZhbHVlICYmICFjaGFuZ2VzLnR5cGVzICYmICFjaGFuZ2VzLmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLmZldGNoRm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmZlZU9wdGlvbnMgJiYgIWNoYW5nZXMuZmVlT3B0aW9ucy5maXJzdENoYW5nZSkge1xuICAgICAgLy8gbmVlZCBmb3IgdHJpZ2dlcmluZyBvZiB0aGUgY3VzdG9tIHZhbGlkYXRvclxuICAgICAgdGhpcy5mb3JtLmFtb3VudD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0ZXAgPT09IFRlcm1pbmFsU3RlcC5Db25maXJtYXRpb24pIHtcbiAgICAgIHRoaXMucHJlcGFyYXRpb25TdGVwRmlsbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5mb3JtXG4gICAgICAuY291bnRyeVxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhID09PSBiKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmZvcm0uc2F2ZURlZmF1bHRDb3VudHJ5KCk7XG4gICAgICAgIHRoaXMuZm9ybS5tZXRob2Quc2V0VmFsdWUodGhpcy5tZXRob2RzTGlzdFswXS5pZCwge2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgICAgICBjb25zdCBtZXRob2RzID0gdGhpcy5tZXRob2RzTGlzdDtcbiAgICAgICAgY29uc3QgZGVmYXVsdE1ldGhvZE5hbWUgPSB0aGlzLmZvcm0uZGVmYXVsdE1ldGhvZE5hbWU7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRNZXRob2QgPSBtZXRob2RzLmZpbmQobSA9PiBtLm5hbWUgPT09IGRlZmF1bHRNZXRob2ROYW1lKT8uaWQ7XG4gICAgICAgIHRoaXMuZm9ybS5tZXRob2Quc2V0VmFsdWUoZGVmYXVsdE1ldGhvZCB8fCBtZXRob2RzWzBdLmlkLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLnNldEN1cnJlbmN5VmFsdWUoKTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5mZXRjaEZvcm0oKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZm9ybVxuICAgICAgLm1ldGhvZFxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhID09PSBiKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybS5tZXRob2QuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMuZm9ybS5zYXZlRGVmYXVsdE1ldGhvZE5hbWUoKTtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW5jeVZhbHVlKCk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmZldGNoRm9ybSgpO1xuICAgICAgfSlcbiAgICB0aGlzLmZvcm1cbiAgICAgIC5jdXJyZW5jeVxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhID09PSBiKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmV0Y2hGb3JtKCk7XG4gICAgICAgIHRoaXMuZm9ybS5zYXZlRGVmYXVsdEN1cnJlbmN5KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hGb3JtKCkge1xuICAgIGlmICghdGhpcy5mb3JtLm1ldGhvZC52YWx1ZSkge1xuICAgICAgdGhpcy5mb3JtLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb3JtLmNhbmNlbFJlcXVlc3RzKCk7XG4gICAgaWYgKHRoaXMuc3RlcCAhPT0gdGhpcy5URVJNSU5BTF9TVEVQLlByZXBhcmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb3JtLnJlbW92ZVBheW1lbnRGb3JtQ29udHJvbHMoKTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmZvcm1cbiAgICAgIC5pbml0KClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMucHJlcGFyYXRpb25TdGVwRmlsbGVkICYmICF0aGlzLmZvcm0uaGFzV2hhdFRvRmlsbCgpKSB7XG4gICAgICAgICAgdGhpcy5zZW5kKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybS5wYXltZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9SZXF1aXNpdHMoKTtcbiAgICAgICAgdGhpcy5mb3JtLm1hc2tlZFdhbGxldCA9ICcnO1xuICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmZvcm0ucGF5bWVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVG9SZXF1aXNpdHMoKSB7XG4gICAgaWYgKHRoaXMucmVxdWlzaXRlcyB8fCB0aGlzLmhpbnRNZXRob2QpIHtcbiAgICAgIHRoaXMubmdTY3JvbGxCYXI/LnNjcm9sbFRvRWxlbWVudCh0aGlzLmhpbnRNZXRob2Q/Lm5hdGl2ZUVsZW1lbnQgfHwgdGhpcy5yZXF1aXNpdGVzLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMCxcbiAgICAgICAgdG9wOiAtNzVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuZm9ybS5jb25maWc/LmRlc2NyaXB0aW9uID09PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtLmNvbmZpZz8uZGVzY3JpcHRpb24odGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpIDogdGhpcy5mb3JtLmNvbmZpZz8uZGVzY3JpcHRpb247XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgaWYgKHRoaXMuZmVlTG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGVwID09PSBUZXJtaW5hbFN0ZXAuQ29uZmlybWF0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpcm0uZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm0uY29uZmlnID09PSBudWxsIHx8ICF0aGlzLmZvcm0ucmVhZHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VySWZyYW1lU3VibWl0KCk7XG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkIHx8IHRoaXMuZXJyb3IpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtLnBheW1lbnQuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybS5wZW5kaW5nKSB7XG4gICAgICB0aGlzLmZvcm0uc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShmaXJzdCgpLCB0YWtlVW50aWwodGhpcy51blN1YnNjcmliZXIpKVxuICAgICAgICAuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbmQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyaWdnZXJJZnJhbWVTdWJtaXQoKSB7XG4gICAgaWYgKCF0aGlzLmZvcm0ucmVhZHlJZnJhbWVzU3VibWl0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2RrTGlzdD8uZm9yRWFjaCgoc2RrOiBDYXJkU2RrU2VydmljZSkgPT4gc2RrLnN1Ym1pdCgpKTtcbiAgICB0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eUlmcmFtZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZCgpIHtcbiAgICBjb25zdCBkYXRhOiBUZXJtaW5hbFBheW1lbnRQcmVwYXJlUmVxdWVzdCA9IHRoaXMuZm9ybS5nZXRQYXltZW50VmFsdWUoKTtcbiAgICB0aGlzLm1hc2tlZFdhbGxldCA9IHRoaXMuZm9ybS5tYXNrZWRXYWxsZXQ7XG4gICAgdGhpcy5wcmVwYXJlLmVtaXQoZGF0YSk7XG4gIH1cblxuICBzZWFyY2hDb3VudHJ5KHZhbHVlKSB7XG4gICAgdGhpcy5jb3VudHJ5U2VhcmNoU3RyaW5nID0gdmFsdWU7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCBiYWNrQnRuTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zdGVwID09PSBUZXJtaW5hbFN0ZXAuUHJlcGFyZSkge1xuICAgICAgcmV0dXJuIEkxOE5fS0VZLkNPTlNUUlVDVE9SX0xBQkVMX0NBTkNFTF9SRVRVUk47XG4gICAgfVxuICAgIHJldHVybiBJMThOX0tFWS5DT05TVFJVQ1RPUl9MQUJFTF9SRVRVUk47XG4gIH1cblxuICBjaGFuZ2VUZXh0RmllbGRWYWx1ZShtYXNrZWRWYWx1ZSwgZmllbGQ6IFBheW1lbnRGaWVsZCkge1xuICAgIGlmIChmaWVsZC53YWxsZXQpIHtcbiAgICAgIHRoaXMuZm9ybS5tYXNrZWRXYWxsZXQgPSBtYXNrZWRWYWx1ZTtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5TdWJzY3JpYmVyLm5leHQoKTtcbiAgICB0aGlzLnVuU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cImNvbnN0cnVjdG9yXCJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgKG5nU3VibWl0KT1cInN1Ym1pdCgpXCJcbiAgPlxuICBAaWYgKGxvYWRpbmcgIT09IG51bGwpIHtcbiAgICBAaWYgKHN0ZXAgPT09IFRFUk1JTkFMX1NURVAuUHJlcGFyZSkge1xuICAgICAgPGRpdiBjbGFzcz1cImNvbnN0cnVjdG9yX19maWVsZHNcIj5cbiAgICAgICAgQGlmIChjb3VudHJ5U2VhcmNoU3RyaW5nIHx8IGNvdW50cmllc0xpc3QubGVuZ3RoID4gMSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25zdHJ1Y3Rvcl9fZmllbGRcIj5cbiAgICAgICAgICAgIDxhcHAtdHJtLXNlbGVjdCBbZGF0YV09XCJjb3VudHJpZXNMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5zZXJ0UmVtb3ZlXG4gICAgICAgICAgICAgIG5hbWU9XCJjb3VudHJ5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIkkxOE5fS0VZLkNPTlNUUlVDVE9SX0xBQkVMX0NPVU5UUlkgfCB0cmFuc1wiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvdW50cnlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImMtZmllbGQtc2VsZWN0IHRybS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgKHNlYXJjaCk9XCJzZWFyY2hDb3VudHJ5KCRldmVudClcIlxuICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSB0cm1TZWxlY3RMYWJlbFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidmaS0nICsgaXRlbS50b0xvd2VyQ2FzZSgpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWV0aG9kX19uYW1lXCI+e3tpdGVtIHwgY291bnRyeV90cmFuc2xhdGU6IGxhbmd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYXBwLXRybS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmb3JtLmNvdW50cnkudmFsdWUpIHtcbiAgICAgICAgICA8YXBwLXBzLXNlbGVjdCBbbWV0aG9kc109XCJtZXRob2RzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgQGluc2VydFJlbW92ZVxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWV0aG9kXCJcbiAgICAgICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGZvcm0uY29uZmlnPy5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uc3RydWN0b3JfX2hpbnQgdGV4dC0td2FyblwiXG4gICAgICAgICAgICAgICAgYXBwLXBzLXNlbGVjdC1oaW50XG4gICAgICAgICAgICAgICAgI2hpbnRNZXRob2RcbiAgICAgICAgICAgICAgICBAaW5zZXJ0UmVtb3ZlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ZGVzY3JpcHRpb24gfCB0cmFucyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2FwcC1wcy1zZWxlY3Q+XG5cbiAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgZm9ybS5tZXRob2Q/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmXG4gICAgICAgICAgICBmb3JtLm1ldGhvZC50b3VjaGVkICYmXG4gICAgICAgICAgICBmb3JtLm1ldGhvZC5kaXJ0eVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ20tZXJyb3JcIiBAaW5zZXJ0UmVtb3ZlPlxuICAgICAgICAgICAgICB7eyBJMThOX0tFWS5WQUxJREFUSU9OX1JFUVVJUkVEIHwgdHJhbnMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoZm9ybS5yZWFkeSkge1xuICAgICAgICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwicGF5bWVudFwiXG4gICAgICAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgICAgI3BheW1lbnRSZXF1aXNpdGVzXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29uc3RydWN0b3JfX2ZpZWxkcyBjb25zdHJ1Y3Rvcl9fZmllbGRzLS1yZXZlcnNlXCI+XG4gICAgICAgICAgICAgIEBpZiAoZm9ybS5tZXRob2QudmFsdWUgJiYgZm9ybS5hbW91bnREeW5hbWljKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1cnJlbmN5VHBsOyBjb250ZXh0OiB7bGFiZWw6IEkxOE5fS0VZLkNPTlNUUlVDVE9SX0xBQkVMX0NVUlJFTkNZIHwgdHJhbnMsIHRhYkluZGV4OiAwfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGZvcm0uZmllbGRzOyB0cmFjayBmaWVsZC5uYW1lOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBpZiAoZmllbGQudHlwZSA9PT0gQ09OU1RSVUNUT1JfRklFTERfVFlQRVMuSWZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICBAaWYgKGZvcm0ucGF5bWVudC5nZXQoZmllbGQubmFtZSk/Lmhhc0Vycm9yKCdjZGVfZXJyb3InKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uc3RydWN0b3JfX2hpbnQgY2RlLWVycm9yXCIgQGluc2VydFJlbW92ZT5cbiAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5wYXltZW50LmdldChmaWVsZC5uYW1lKS5nZXRFcnJvcignY2RlX2Vycm9yJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPGFwcC1jb25zdHJ1Y3Rvci1maWVsZC1pZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgQGluc2VydFJlbW92ZVxuICAgICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiZm9ybS5maWVsZHMubGVuZ3RoIC0gaSArIHRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYXBwLWNvbnN0cnVjdG9yLWZpZWxkLWlmcmFtZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChmaWVsZC50eXBlID09PSBDT05TVFJVQ1RPUl9GSUVMRF9UWVBFUy5TZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgIDxhcHAtY29uc3RydWN0b3ItZmllbGQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZD8ub3B0aW9ucz8uaXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiZm9ybS5maWVsZHMubGVuZ3RoIC0gaSArIHRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICAgID48L2FwcC1jb25zdHJ1Y3Rvci1maWVsZC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoW0NPTlNUUlVDVE9SX0ZJRUxEX1RZUEVTLlRleHQsIENPTlNUUlVDVE9SX0ZJRUxEX1RZUEVTLk51bWJlciwgQ09OU1RSVUNUT1JfRklFTERfVFlQRVMuRW1haWxdLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICA8YXBwLWNvbnN0cnVjdG9yLWZpZWxkLXRleHRcbiAgICAgICAgICAgICAgICAgICAgQGluc2VydFJlbW92ZVxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgKG1hc2tlZFZhbHVlQ2hhbmdlKT1cImNoYW5nZVRleHRGaWVsZFZhbHVlKCRldmVudCwgZmllbGQpXCJcbiAgICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCJmb3JtLmZpZWxkcy5sZW5ndGggLSBpICsgdGFiSW5kZXhcIj48L2FwcC1jb25zdHJ1Y3Rvci1maWVsZC10ZXh0PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGZpZWxkLnR5cGUgPT09IENPTlNUUlVDVE9SX0ZJRUxEX1RZUEVTLkFtb3VudCkge1xuICAgICAgICAgICAgICAgICAgPGFwcC1jb25zdHJ1Y3Rvci1maWVsZC10ZXh0XG4gICAgICAgICAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCJmb3JtLmZpZWxkcy5sZW5ndGggLSBpICsgdGFiSW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1tZXRob2QtYW1vdW50LWhpbnQgYXBwLWMtdGV4dC1oaW50XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb25zdHJ1Y3Rvcl9faGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiZmVlTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmVlT3B0aW9ucyB8fCBmaWVsZC5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLW1ldGhvZC1hbW91bnQtaGludD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBhcHAtYy10ZXh0LXN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29uc3RydWN0b3JfX2N1cnJlbmN5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY29uc3RydWN0b3JfX2N1cnJlbmN5LS10cmFuc3BhcmVudF09XCJmb3JtLmlzQW1vdW50RWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VycmVuY3lUcGw7IGNvbnRleHQ6IHt0YWJJbmRleDogZm9ybS5maWVsZHMubGVuZ3RoIC0gaSArIHRhYkluZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvYXBwLWNvbnN0cnVjdG9yLWZpZWxkLXRleHQ+XG4gICAgICAgICAgICAgICAgICBAaWYgKGhhc0N1cnJlbmN5TWV0aG9kU2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC10cm0tc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgQGluc2VydFJlbW92ZVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29uc3RydWN0b3ItZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJJMThOX0tFWS5DT05TVFJVQ1RPUl9MQUJFTF9DVVJSRU5DWSB8IHRyYW5zXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jdXJyZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImN1cnJlbmNpZXNMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiZm9ybS5maWVsZHMubGVuZ3RoIC0gaSArIHRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHRybVNlbGVjdExhYmVsVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRybS1pY29uXCIgW25nQ2xhc3NdPVwiJ3RybS1jdXJyLScgKyBpdGVtLnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW19fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLXRybS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoZmllbGQudHlwZSA9PT0gQ09OU1RSVUNUT1JfRklFTERfVFlQRVMuRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgPGFwcC1jb25zdHJ1Y3Rvci1maWVsZC1kYXRlXG4gICAgICAgICAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQubmFtZVwiXG4gICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiZm9ybS5maWVsZHMubGVuZ3RoIC0gaSArIHRhYkluZGV4XCI+PC9hcHAtY29uc3RydWN0b3ItZmllbGQtZGF0ZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXJyZW5jeVRwbCBsZXQtbGFiZWw9XCJsYWJlbFwiIGxldC10YWJJbmRleD1cInRhYkluZGV4XCI+XG4gICAgICAgICAgICAgICAgPGFwcC10cm0tc2VsZWN0XG4gICAgICAgICAgICAgICAgICBAaW5zZXJ0UmVtb3ZlXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0udXNlckN1cnJlbmN5XCJcbiAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInVzZXJDdXJyZW5jaWVzTGlzdFwiXG4gICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHRybVNlbGVjdExhYmVsVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJtLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0cm0tY3Vyci0nICsgaXRlbS50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvYXBwLXRybS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRybS1za2VsZXRvbi1maWVsZHNcIj5cbiAgICAgICAgICAgIEBmb3IgKGkgb2Ygc2tlbGV0b25MZW5ndGg7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJtLXNrZWxldG9uLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGdtLXNrZWxldG9uIFtjb3VudF09XCIxXCIgW3NoYXBlXT1cIidyZWN0LW1kJ1wiIFtzaXplXT1cIjE4XCI+PC9nbS1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICA8Z20tc2tlbGV0b24gW2NvdW50XT1cIjFcIiBbc2l6ZV09XCI1MFwiPjwvZ20tc2tlbGV0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZXJyb3IgJiYgIWZvcm0ubWV0aG9kSW5mb0xvYWRpbmcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJtLWVycm9yXCJcbiAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGVycm9yIHwgdHJhbnMgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoc3RlcCA9PT0gVEVSTUlOQUxfU1RFUC5Db25maXJtYXRpb24pIHtcbiAgICAgIDxhcHAtY29uc3RydWN0b3ItcHJlcGFyYXRpb25cbiAgICAgICAgQGluc2VydFJlbW92ZVxuICAgICAgICBbY3VycmVuY3ldPVwicmVzcG9uc2U/LmN1cnJlbmN5XCJcbiAgICAgICAgW21ldGhvZE5hbWVdPVwiZm9ybS5nZXRUeXBlTmFtZUJ5SWQocmVzcG9uc2UudHlwZUlkKVwiXG4gICAgICAgIFt3YWxsZXRdPVwicmVzcG9uc2Uud2FsbGV0XCJcbiAgICAgICAgW21hc2tlZFdhbGxldF09XCJtYXNrZWRXYWxsZXRcIlxuICAgICAgICBbYW1vdW50XT1cInJlc3BvbnNlLmFtb3VudFwiXG4gICAgICAgIFt0b3RhbF09XCJyZXNwb25zZS50b3RhbFwiXG4gICAgICAgIFtjb25maXJtYXRpb25UZXh0XT1cImZvcm0uY29uZmlnPy5jb25maXJtYXRpb25cIlxuICAgICAgICA+XG4gICAgICAgIEBpZiAoZXJyb3IgJiYgIWZvcm0ucGF5bWVudC5wZW5kaW5nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRybS1lcnJvclwiXG4gICAgICAgICAgICBhcHAtY29uc3RydWN0b3ItcHJlcGFyYXRpb24tZXJyb3JcbiAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGVycm9yIHwgdHJhbnMgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9hcHAtY29uc3RydWN0b3ItcHJlcGFyYXRpb24+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJjb25zdHJ1Y3Rvcl9fYWN0aW9uc1wiXG4gICAgICAgICBAaW5zZXJ0UmVtb3ZlPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInRybS1idXR0b24gdHJtLWJ1dHRvbi0tcHJpbWFyeSBjb25zdHJ1Y3Rvcl9fYWN0aW9ucy1jb250aW51ZVwiXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBbdGFiaW5kZXhdPVwiZm9ybS5maWVsZHMubGVuZ3RoICsgdGFiSW5kZXhcIj5cbiAgICAgICAge3tJMThOX0tFWS5DT05TVFJVQ1RPUl9MQUJFTF9DT05USU5VRSB8IHRyYW5zfX1cbiAgICAgICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cm0tc3Bpbm5lciB0cm0tc3Bpbm5lci13aGl0ZVwiPjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwidHJtLWJ1dHRvbiB0cm0tYnV0dG9uLS1zZWNvbmRhcnkgY29uc3RydWN0b3JfX2FjdGlvbnMtYmFja1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbdGFiaW5kZXhdPVwiZm9ybS5maWVsZHMubGVuZ3RoICsgdGFiSW5kZXhcIlxuICAgICAgKGNsaWNrKT1cImJhY2suZW1pdCgpXCI+IHt7IGJhY2tCdG5MYWJlbCB8IHRyYW5zfX08L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInRybS1za2VsZXRvbi1ncm91cFwiPlxuICAgICAgPGdtLXNrZWxldG9uIFtjb3VudF09XCI0XCIgW2dhcF09XCIyMFwiIFtzaXplXT1cIjgwXCI+PC9nbS1za2VsZXRvbj5cbiAgICAgIDxnbS1za2VsZXRvbiBbY291bnRdPVwiMlwiIFtnYXBdPVwiMTBcIiBbc2l6ZV09XCI0OFwiPjwvZ20tc2tlbGV0b24+XG4gICAgPC9kaXY+XG4gIH1cbjwvZm9ybT5cbiJdfQ==
|
|
374
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZXJtaW5hbC10ZW1wbGF0ZS9zcmMvbGliL2FwcC9wYWdlcy9jb21wb25lbnRzL2NvbnN0cnVjdG9yLWZvcm0vY29uc3RydWN0b3ItZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90ZXJtaW5hbC10ZW1wbGF0ZS9zcmMvbGliL2FwcC9wYWdlcy9jb21wb25lbnRzL2NvbnN0cnVjdG9yLWZvcm0vY29uc3RydWN0b3ItZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFxQyxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFRN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFN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QUFFLCtCQUErQixFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLDZCQUE2QixFQUFFLCtCQUErQixFQUFFLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDOzhCQWNqYyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNFLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRTJDLFVBQVU7c0JBQTFELFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDO2dCQUNMLFVBQVU7c0JBQW5ELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFDVixPQUFPO3NCQUFwQyxZQUFZO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGF5bWVudEZpZWxkLCBQYXltZW50RmllbGRPcHRpb25zLCBQYXltZW50RmllbGRUeXBlRW51bSwgVGVybWluYWxTdGVwIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3JGb3JtU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29uc3RydWN0b3ItZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE1ldGhvZFR5cGUsXG4gIE1ldGhvZFR5cGVUeXBlLFxuICBUZXJtaW5hbFBheW1lbnRDb25maXJtUmVzcG9uc2UsXG4gIFRlcm1pbmFsUGF5bWVudFByZXBhcmVSZXF1ZXN0LFxuICBUZXJtaW5hbFBheW1lbnRQcmVwYXJlUmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vLi4vLi4vY29kZWdlbi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgaW5zZXJ0UmVtb3ZlVHJpZ2dlciB9IGZyb20gJy4vLi4vLi4vLi4vaGVscGVycy9pbnNlcnRSZW1vdmVUcmlnZ2VyJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ291bnRyaWVzU29ydFBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9jb3VudHJpZXMtc29ydC5waXBlJztcbmltcG9ydCB7IE5nU2Nyb2xsYmFyIH0gZnJvbSAnbmd4LXNjcm9sbGJhcic7XG5pbXBvcnQgeyBJMThOX0tFWSB9IGZyb20gJy4vLi4vLi4vLi4vaTE4bic7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RvckZpZWxkSWZyYW1lQ29tcG9uZW50XG59IGZyb20gXCIuL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtaWZyYW1lL2NvbnN0cnVjdG9yLWZpZWxkLWlmcmFtZS5jb21wb25lbnRcIjtcbmltcG9ydCB7IENvdW50cnlUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvY291bnRyeS10cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBURVJNSU5BTF9WRVJTSU9OX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBWZXJzaW9uU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJtU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvdHJtLXNlbGVjdC90cm0tc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBUcm1TZWxlY3RMYWJlbFRlbXBsYXRlRGlyZWN0aXZlXG59IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL3RybS1zZWxlY3QvdHJtLXNlbGVjdC1sYWJlbC10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUHNTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHMtc2VsZWN0L3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3JGaWVsZFNlbGVjdENvbXBvbmVudFxufSBmcm9tICcuL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtc2VsZWN0L2NvbnN0cnVjdG9yLWZpZWxkLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3JGaWVsZFRleHRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtdGV4dC9jb25zdHJ1Y3Rvci1maWVsZC10ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZXRob2RBbW91bnRIaW50Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21ldGhvZC1hbW91bnQtaGludC9tZXRob2QtYW1vdW50LWhpbnQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbnN0cnVjdG9yRmllbGREYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbnN0cnVjdG9yLWZpZWxkLWRhdGUvY29uc3RydWN0b3ItZmllbGQtZGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3JQcmVwYXJhdGlvbkNvbXBvbmVudFxufSBmcm9tICcuL2NvbXBvbmVudHMvY29uc3RydWN0b3ItcHJlcGFyYXRpb24vY29uc3RydWN0b3ItcHJlcGFyYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRhYkluZGV4Rm9jdXNEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RhYi1pbmRleC1mb2N1cy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlQnlLZXlQaXBlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3BpcGVzL3RyYW5zbGF0ZS1ieS1rZXkucGlwZSc7XG5pbXBvcnQgeyBHbVNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnQGdtbW9uZXkvZ20tdWkta2l0JztcbmltcG9ydCB7IE9USEVSX0NPVU5UUllfQ09ERSB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBDYXJkU2RrU2VydmljZSB9IGZyb20gXCIuL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtaWZyYW1lL2NhcmQtc2RrLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNvbnN0cnVjdG9yLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uc3RydWN0b3ItZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnN0cnVjdG9yLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtpbnNlcnRSZW1vdmVUcmlnZ2VyXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQ29uc3RydWN0b3JGb3JtU2VydmljZSxcbiAgICBDb3VudHJ5VHJhbnNsYXRlUGlwZSwgQ291bnRyaWVzU29ydFBpcGVcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvdW50cnlUcmFuc2xhdGVQaXBlLCBDb3VudHJpZXNTb3J0UGlwZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFRybVNlbGVjdENvbXBvbmVudCwgVHJtU2VsZWN0TGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSwgTmdDbGFzcywgUHNTZWxlY3RDb21wb25lbnQsIE5nVGVtcGxhdGVPdXRsZXQsIENvbnN0cnVjdG9yRmllbGRJZnJhbWVDb21wb25lbnQsIENvbnN0cnVjdG9yRmllbGRTZWxlY3RDb21wb25lbnQsIENvbnN0cnVjdG9yRmllbGRUZXh0Q29tcG9uZW50LCBNZXRob2RBbW91bnRIaW50Q29tcG9uZW50LCBDb25zdHJ1Y3RvckZpZWxkRGF0ZUNvbXBvbmVudCwgQ29uc3RydWN0b3JQcmVwYXJhdGlvbkNvbXBvbmVudCwgVGFiSW5kZXhGb2N1c0RpcmVjdGl2ZSwgQ291bnRyeVRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZUJ5S2V5UGlwZSwgR21Ta2VsZXRvbkNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgQ29uc3RydWN0b3JGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgZm9ybSA9IGluamVjdChDb25zdHJ1Y3RvckZvcm1TZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTcnYgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByaXZhdGUgY291bnRyaWVzU29ydFBpcGUgPSBpbmplY3QoQ291bnRyaWVzU29ydFBpcGUpO1xuICBwcml2YXRlIGNvdW50cnlUcmFuc2xhdGVQaXBlID0gaW5qZWN0KENvdW50cnlUcmFuc2xhdGVQaXBlKTtcbiAgcHJpdmF0ZSBuZ1Njcm9sbEJhciA9IGluamVjdChOZ1Njcm9sbGJhcik7XG4gIHByaXZhdGUgdmVyc2lvblNydiA9IGluamVjdDxWZXJzaW9uU2VydmljZUludGVyZmFjZT4oVEVSTUlOQUxfVkVSU0lPTl9TRVJWSUNFX1RPS0VOKTtcblxuICBwcml2YXRlIHVuU3Vic2NyaWJlciA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcHJlcGFyYXRpb25TdGVwRmlsbGVkID0gZmFsc2U7XG4gIFRFUk1JTkFMX1NURVAgPSBUZXJtaW5hbFN0ZXA7XG4gIEBJbnB1dCgpIHN0ZXA6IFRlcm1pbmFsU3RlcDtcbiAgQElucHV0KCkgZXJyb3I/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHJlc3BvbnNlOiBUZXJtaW5hbFBheW1lbnRQcmVwYXJlUmVzcG9uc2UgJiBUZXJtaW5hbFBheW1lbnRDb25maXJtUmVzcG9uc2UgJiB7XG4gICAgdHlwZUlkPzogbnVtYmVyO1xuICB9O1xuICBDT05TVFJVQ1RPUl9GSUVMRF9UWVBFUyA9IFBheW1lbnRGaWVsZFR5cGVFbnVtO1xuICBASW5wdXQoKSBmZWVMb2FkaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBmZWVPcHRpb25zOiBQYXltZW50RmllbGRPcHRpb25zO1xuICBASW5wdXQoKSBjdXJyZW5jeTogc3RyaW5nO1xuICBASW5wdXQoKSB1c2VyQ3VycmVuY3k6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBsb2FkaW5nID0gbnVsbDtcbiAgQElucHV0KCkgdHlwZXM6IE1ldGhvZFR5cGVbXSA9IFtdO1xuICBASW5wdXQoKSBjYW5SZXR1cm5Ub1Byb2plY3QgPSB0cnVlO1xuICBAT3V0cHV0KCkgYW1vdW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIGJhY2s6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHByZXBhcmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjb25maXJtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25QYXltZW50Q2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgdGFiSW5kZXg6IG51bWJlcjtcbiAgY291bnRyeVNlYXJjaFN0cmluZzogc3RyaW5nO1xuICBAVmlld0NoaWxkKCdwYXltZW50UmVxdWlzaXRlcycsIHtzdGF0aWM6IGZhbHNlfSkgcmVxdWlzaXRlczogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaGludE1ldGhvZCcsIHtzdGF0aWM6IGZhbHNlfSkgaGludE1ldGhvZDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbihDYXJkU2RrU2VydmljZSkgc2RrTGlzdDogUXVlcnlMaXN0PENhcmRTZGtTZXJ2aWNlPjtcbiAgbWFza2VkV2FsbGV0OiBzdHJpbmc7XG5cbiAgSTE4Tl9LRVkgPSBJMThOX0tFWTtcblxuICBnZXQgY291bnRyaWVzTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuY291bnRyaWVzU29ydFBpcGVcbiAgICAgIC50cmFuc2Zvcm0oXG4gICAgICAgIHRoaXMudHlwZXNcbiAgICAgICAgICAubWFwKHR5cGUgPT4gdHlwZS5jb3VudHJ5SVNPQ29kZSlcbiAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4KVxuICAgICAgKVxuICAgICAgLmZpbHRlcigobTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jb3VudHJ5U2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdGl0bGU6IHN0cmluZyA9IHRoaXMuY291bnRyeVRyYW5zbGF0ZVBpcGUudHJhbnNmb3JtKG0pO1xuICAgICAgICAgIHJldHVybiB0aXRsZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuc3BsaXQoJyAnKS5zb21lKFxuICAgICAgICAgICAgICB0cyA9PiB0aGlzLmNvdW50cnlTZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpLnNvbWUocyA9PiB0cy5pbmNsdWRlcyhzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0IG1ldGhvZHNMaXN0KCk6IE1ldGhvZFR5cGVUeXBlW10ge1xuICAgIHJldHVybiB0aGlzLnR5cGVzXG4gICAgICAuZmlsdGVyKHR5cGUgPT4gdHlwZS5jb3VudHJ5SVNPQ29kZSA9PT0gdGhpcy5mb3JtLmNvdW50cnkudmFsdWUpXG4gICAgICAvLyBkaXN0aW5jdFxuICAgICAgLmZpbHRlcigodHlwZSwgaW5kZXgsIHNlbGYpID0+IHNlbGYubWFwKG0gPT4gbS50eXBlLmlkKS5pbmRleE9mKHR5cGUudHlwZS5pZCkgPT09IGluZGV4KVxuICAgICAgLy9zb3J0aW5nIGJ5IHRoZSBwcmlvcml0eVxuICAgICAgLnNvcnQoKG0xLCBtMikgPT4gbTEucHJpb3JpdHkgPiBtMi5wcmlvcml0eSA/IDEgOiAoKG0xLnByaW9yaXR5ID09PSBtMi5wcmlvcml0eSkgPyAwIDogLTEpKVxuICAgICAgLm1hcCh0eXBlID0+IHR5cGUudHlwZSk7XG4gIH1cblxuICBnZXQgY3VycmVuY2llc0xpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZXNcbiAgICAgIC5maWx0ZXIodHlwZSA9PiB0eXBlLmNvdW50cnlJU09Db2RlID09PSB0aGlzLmZvcm0uY291bnRyeS52YWx1ZSAmJiB0eXBlLnR5cGUuaWQgPT09IHRoaXMuZm9ybS5tZXRob2QudmFsdWUpXG4gICAgICAubWFwKHR5cGUgPT4gdHlwZS5jdXJyZW5jeSlcbiAgfVxuXG4gIGdldCB1c2VyQ3VycmVuY2llc0xpc3QoKSB7XG4gICAgY29uc3QgZmlsdGVyZWRUeXBlcyA9IHRoaXMuY3VycmVuY2llc0xpc3Q7XG5cbiAgICBpZiAoIXRoaXMudXNlckN1cnJlbmN5KSB7XG4gICAgICByZXR1cm4gZmlsdGVyZWRUeXBlcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51c2VyQ3VycmVuY3lcbiAgICAgIC5maWx0ZXIodXNlckN1cnJlbmN5ID0+IGZpbHRlcmVkVHlwZXMuaW5jbHVkZXModXNlckN1cnJlbmN5KSlcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3VycmVuY3lWYWx1ZSgpIHtcbiAgICBsZXQgZGVmYXVsdEN1cnJlbmN5ID0gdGhpcy5mb3JtLmRlZmF1bHRDdXJyZW5jeTtcblxuICAgIGxldCBjdXJyZW5jaWVzID0gdGhpcy5jdXJyZW5jaWVzTGlzdDtcbiAgICBsZXQgY3VycmVuY3kgPSBjdXJyZW5jaWVzWzBdO1xuICAgIGlmIChkZWZhdWx0Q3VycmVuY3kgJiYgdGhpcy5jdXJyZW5jaWVzTGlzdC5pbmNsdWRlcyhkZWZhdWx0Q3VycmVuY3kpKSB7XG4gICAgICBjdXJyZW5jeSA9IGRlZmF1bHRDdXJyZW5jeTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVuY3kgJiYgdGhpcy5jdXJyZW5jaWVzTGlzdC5pbmNsdWRlcyh0aGlzLmN1cnJlbmN5KSkge1xuICAgICAgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmN5O1xuICAgIH1cbiAgICB0aGlzLmZvcm0uY3VycmVuY3kuc2V0VmFsdWUoY3VycmVuY3kpO1xuXG4gICAgY3VycmVuY2llcyA9IHRoaXMudXNlckN1cnJlbmNpZXNMaXN0O1xuICAgIGN1cnJlbmN5ID0gY3VycmVuY2llc1swXTtcbiAgICBpZiAoZGVmYXVsdEN1cnJlbmN5ICYmIHRoaXMudXNlckN1cnJlbmNpZXNMaXN0LmluY2x1ZGVzKGRlZmF1bHRDdXJyZW5jeSkpIHtcbiAgICAgIGN1cnJlbmN5ID0gZGVmYXVsdEN1cnJlbmN5O1xuICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW5jeSAmJiB0aGlzLnVzZXJDdXJyZW5jaWVzTGlzdC5pbmNsdWRlcyh0aGlzLmN1cnJlbmN5KSkge1xuICAgICAgY3VycmVuY3kgPSB0aGlzLmN1cnJlbmN5O1xuICAgIH1cbiAgICB0aGlzLmZvcm0udXNlckN1cnJlbmN5LnNldFZhbHVlKGN1cnJlbmN5LCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIGlmIChjdXJyZW5jaWVzLmxlbmd0aCA9PT0gMSAmJiBjdXJyZW5jeSAmJiB0aGlzLmZvcm0ubWV0aG9kLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmZvcm0udXNlckN1cnJlbmN5LmRpc2FibGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaGFzQ3VycmVuY3lNZXRob2RTZWxlY3RvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uU3J2Lmhhc0N1cnJlbmN5TWV0aG9kU2VsZWN0b3IgPT09IHRydWU7XG4gIH1cblxuICBnZXQgbGFuZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNydi5jdXJyZW50TGFuZztcbiAgfVxuXG4gIGdldCBza2VsZXRvbkxlbmd0aCgpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KHRoaXMuZm9ybS5maWVsZHM/Lmxlbmd0aCB8fCAzKS5maWxsKDApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLnR5cGVzICYmIHRoaXMudHlwZXM/Lmxlbmd0aCB8fCBjaGFuZ2VzLmN1cnJlbmN5ICYmIHRoaXMuY3VycmVuY3kpIHtcbiAgICAgIC8vIEdldCBjb25maWd1cmF0aW9uIGZpZWxkc1xuICAgICAgY29uc3QgY291bnRyaWVzID0gdGhpcy5jb3VudHJpZXNMaXN0O1xuICAgICAgY29uc3QgZGVmYXVsdENvdW50cnkgPSB0aGlzLmZvcm0uZGVmYXVsdENvdW50cnk7XG4gICAgICBsZXQgY291bnRyeSA9IG51bGw7XG4gICAgICBpZiAoIWNvdW50cmllcy5pbmNsdWRlcyhkZWZhdWx0Q291bnRyeSkpIHtcbiAgICAgICAgaWYgKGNvdW50cmllcy5pbmNsdWRlcyhPVEhFUl9DT1VOVFJZX0NPREUpKSB7XG4gICAgICAgICAgY291bnRyeSA9IE9USEVSX0NPVU5UUllfQ09ERTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY291bnRyeSA9IGRlZmF1bHRDb3VudHJ5O1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtLmNvdW50cnkuc2V0VmFsdWUoY291bnRyeSk7XG4gICAgICBpZiAoIWNvdW50cnkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvdW50cmllcy5sZW5ndGggPT09IDEgJiYgdGhpcy5mb3JtLmNvdW50cnkudmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtLmNvdW50cnkuZGlzYWJsZSgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRob2RzID0gdGhpcy5tZXRob2RzTGlzdDtcbiAgICAgIGNvbnN0IGRlZmF1bHRNZXRob2ROYW1lID0gdGhpcy5mb3JtLmRlZmF1bHRNZXRob2ROYW1lO1xuICAgICAgY29uc3QgZGVmYXVsdE1ldGhvZCA9IG1ldGhvZHMuZmluZChtID0+IG0ubmFtZSA9PT0gZGVmYXVsdE1ldGhvZE5hbWUpPy5pZDtcbiAgICAgIHRoaXMuZm9ybS5tZXRob2Quc2V0VmFsdWUoZGVmYXVsdE1ldGhvZCB8fCBtZXRob2RzWzBdPy5pZCk7XG5cbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAxICYmIHRoaXMuZm9ybS5jb3VudHJ5LmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZm9ybS5tZXRob2QuZGlzYWJsZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0aGlzLnNldEN1cnJlbmN5VmFsdWUoKTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICB0aGlzLmZvcm1cbiAgICAgICAgLmRpc3RpbmN0VmFsdWVDaGFuZ2VzKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVyKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblBheW1lbnRDaGFuZ2VkLmVtaXQodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpKTtcbiAgICAgIHRoaXMuZmV0Y2hGb3JtKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMuc3RlcD8uY3VycmVudFZhbHVlICYmICFjaGFuZ2VzLnR5cGVzICYmICFjaGFuZ2VzLmN1cnJlbmN5KSB7XG4gICAgICB0aGlzLmZldGNoRm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmZlZU9wdGlvbnMgJiYgIWNoYW5nZXMuZmVlT3B0aW9ucy5maXJzdENoYW5nZSkge1xuICAgICAgLy8gbmVlZCBmb3IgdHJpZ2dlcmluZyBvZiB0aGUgY3VzdG9tIHZhbGlkYXRvclxuICAgICAgdGhpcy5mb3JtLmFtb3VudD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0ZXAgPT09IFRlcm1pbmFsU3RlcC5Db25maXJtYXRpb24pIHtcbiAgICAgIHRoaXMucHJlcGFyYXRpb25TdGVwRmlsbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5mb3JtXG4gICAgICAuY291bnRyeVxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhID09PSBiKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmZvcm0uc2F2ZURlZmF1bHRDb3VudHJ5KCk7XG4gICAgICAgIHRoaXMuZm9ybS5tZXRob2Quc2V0VmFsdWUodGhpcy5tZXRob2RzTGlzdFswXS5pZCwge2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgICAgICBjb25zdCBtZXRob2RzID0gdGhpcy5tZXRob2RzTGlzdDtcbiAgICAgICAgY29uc3QgZGVmYXVsdE1ldGhvZE5hbWUgPSB0aGlzLmZvcm0uZGVmYXVsdE1ldGhvZE5hbWU7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRNZXRob2QgPSBtZXRob2RzLmZpbmQobSA9PiBtLm5hbWUgPT09IGRlZmF1bHRNZXRob2ROYW1lKT8uaWQ7XG4gICAgICAgIHRoaXMuZm9ybS5tZXRob2Quc2V0VmFsdWUoZGVmYXVsdE1ldGhvZCB8fCBtZXRob2RzWzBdLmlkLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLnNldEN1cnJlbmN5VmFsdWUoKTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5mZXRjaEZvcm0oKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZm9ybVxuICAgICAgLm1ldGhvZFxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhID09PSBiKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybS5tZXRob2QuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMuZm9ybS5zYXZlRGVmYXVsdE1ldGhvZE5hbWUoKTtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW5jeVZhbHVlKCk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmZldGNoRm9ybSgpO1xuICAgICAgfSlcbiAgICB0aGlzLmZvcm1cbiAgICAgIC5jdXJyZW5jeVxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhID09PSBiKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5TdWJzY3JpYmVyKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmV0Y2hGb3JtKCk7XG4gICAgICAgIHRoaXMuZm9ybS5zYXZlRGVmYXVsdEN1cnJlbmN5KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hGb3JtKCkge1xuICAgIGlmICghdGhpcy5mb3JtLm1ldGhvZC52YWx1ZSkge1xuICAgICAgdGhpcy5mb3JtLnJlYWR5ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb3JtLmNhbmNlbFJlcXVlc3RzKCk7XG4gICAgaWYgKHRoaXMuc3RlcCAhPT0gdGhpcy5URVJNSU5BTF9TVEVQLlByZXBhcmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5mb3JtLnJlbW92ZVBheW1lbnRGb3JtQ29udHJvbHMoKTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmZvcm1cbiAgICAgIC5pbml0KClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMucHJlcGFyYXRpb25TdGVwRmlsbGVkICYmICF0aGlzLmZvcm0uaGFzV2hhdFRvRmlsbCgpKSB7XG4gICAgICAgICAgdGhpcy5zZW5kKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybS5wYXltZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9SZXF1aXNpdHMoKTtcbiAgICAgICAgdGhpcy5mb3JtLm1hc2tlZFdhbGxldCA9ICcnO1xuICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmZvcm0ucGF5bWVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsVG9SZXF1aXNpdHMoKSB7XG4gICAgaWYgKHRoaXMucmVxdWlzaXRlcyB8fCB0aGlzLmhpbnRNZXRob2QpIHtcbiAgICAgIHRoaXMubmdTY3JvbGxCYXI/LnNjcm9sbFRvRWxlbWVudCh0aGlzLmhpbnRNZXRob2Q/Lm5hdGl2ZUVsZW1lbnQgfHwgdGhpcy5yZXF1aXNpdGVzLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgZHVyYXRpb246IDUwMCxcbiAgICAgICAgdG9wOiAtNzVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuZm9ybS5jb25maWc/LmRlc2NyaXB0aW9uID09PSAnZnVuY3Rpb24nID8gdGhpcy5mb3JtLmNvbmZpZz8uZGVzY3JpcHRpb24odGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpIDogdGhpcy5mb3JtLmNvbmZpZz8uZGVzY3JpcHRpb247XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgaWYgKHRoaXMuZmVlTG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGVwID09PSBUZXJtaW5hbFN0ZXAuQ29uZmlybWF0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpcm0uZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm0uY29uZmlnID09PSBudWxsIHx8ICF0aGlzLmZvcm0ucmVhZHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VySWZyYW1lU3VibWl0KCk7XG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkIHx8IHRoaXMuZXJyb3IpIHtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtLnBheW1lbnQuY29udHJvbHMpLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybS5wZW5kaW5nKSB7XG4gICAgICB0aGlzLmZvcm0uc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShmaXJzdCgpLCB0YWtlVW50aWwodGhpcy51blN1YnNjcmliZXIpKVxuICAgICAgICAuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlbmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbmQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyaWdnZXJJZnJhbWVTdWJtaXQoKSB7XG4gICAgaWYgKCF0aGlzLmZvcm0ucmVhZHlJZnJhbWVzU3VibWl0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2RrTGlzdD8uZm9yRWFjaCgoc2RrOiBDYXJkU2RrU2VydmljZSkgPT4gc2RrLnN1Ym1pdCgpKTtcbiAgICB0aGlzLmZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eUlmcmFtZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZCgpIHtcbiAgICBjb25zdCBkYXRhOiBUZXJtaW5hbFBheW1lbnRQcmVwYXJlUmVxdWVzdCA9IHRoaXMuZm9ybS5nZXRQYXltZW50VmFsdWUoKTtcbiAgICB0aGlzLm1hc2tlZFdhbGxldCA9IHRoaXMuZm9ybS5tYXNrZWRXYWxsZXQ7XG4gICAgdGhpcy5wcmVwYXJlLmVtaXQoZGF0YSk7XG4gIH1cblxuICBzZWFyY2hDb3VudHJ5KHZhbHVlKSB7XG4gICAgdGhpcy5jb3VudHJ5U2VhcmNoU3RyaW5nID0gdmFsdWU7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCBiYWNrQnRuTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zdGVwID09PSBUZXJtaW5hbFN0ZXAuUHJlcGFyZSkge1xuICAgICAgcmV0dXJuIEkxOE5fS0VZLkNPTlNUUlVDVE9SX0xBQkVMX0NBTkNFTF9SRVRVUk47XG4gICAgfVxuICAgIHJldHVybiBJMThOX0tFWS5DT05TVFJVQ1RPUl9MQUJFTF9SRVRVUk47XG4gIH1cblxuICBjaGFuZ2VUZXh0RmllbGRWYWx1ZShtYXNrZWRWYWx1ZSwgZmllbGQ6IFBheW1lbnRGaWVsZCkge1xuICAgIGlmIChmaWVsZC53YWxsZXQpIHtcbiAgICAgIHRoaXMuZm9ybS5tYXNrZWRXYWxsZXQgPSBtYXNrZWRWYWx1ZTtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5TdWJzY3JpYmVyLm5leHQoKTtcbiAgICB0aGlzLnVuU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8Zm9ybSBjbGFzcz1cImNvbnN0cnVjdG9yXCJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgKG5nU3VibWl0KT1cInN1Ym1pdCgpXCJcbiAgPlxuICBAaWYgKGxvYWRpbmcgIT09IG51bGwpIHtcbiAgICBAaWYgKHN0ZXAgPT09IFRFUk1JTkFMX1NURVAuUHJlcGFyZSkge1xuICAgICAgPGRpdiBjbGFzcz1cImNvbnN0cnVjdG9yX19maWVsZHNcIj5cbiAgICAgICAgQGlmIChjb3VudHJ5U2VhcmNoU3RyaW5nIHx8IGNvdW50cmllc0xpc3QubGVuZ3RoID4gMSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25zdHJ1Y3Rvcl9fZmllbGRcIj5cbiAgICAgICAgICAgIDxhcHAtdHJtLXNlbGVjdCBbZGF0YV09XCJjb3VudHJpZXNMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5zZXJ0UmVtb3ZlXG4gICAgICAgICAgICAgIG5hbWU9XCJjb3VudHJ5XCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIkkxOE5fS0VZLkNPTlNUUlVDVE9SX0xBQkVMX0NPVU5UUlkgfCB0cmFuc1wiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvdW50cnlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImMtZmllbGQtc2VsZWN0IHRybS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgKHNlYXJjaCk9XCJzZWFyY2hDb3VudHJ5KCRldmVudClcIlxuICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSB0cm1TZWxlY3RMYWJlbFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidmaS0nICsgaXRlbS50b0xvd2VyQ2FzZSgpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWV0aG9kX19uYW1lXCI+e3tpdGVtIHwgY291bnRyeV90cmFuc2xhdGU6IGxhbmd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYXBwLXRybS1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChmb3JtLmNvdW50cnkudmFsdWUpIHtcbiAgICAgICAgICA8YXBwLXBzLXNlbGVjdCBbbWV0aG9kc109XCJtZXRob2RzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgQGluc2VydFJlbW92ZVxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWV0aG9kXCJcbiAgICAgICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGZvcm0uY29uZmlnPy5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uc3RydWN0b3JfX2hpbnQgdGV4dC0td2FyblwiXG4gICAgICAgICAgICAgICAgYXBwLXBzLXNlbGVjdC1oaW50XG4gICAgICAgICAgICAgICAgI2hpbnRNZXRob2RcbiAgICAgICAgICAgICAgICBAaW5zZXJ0UmVtb3ZlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ZGVzY3JpcHRpb24gfCB0cmFucyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2FwcC1wcy1zZWxlY3Q+XG5cbiAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgZm9ybS5tZXRob2Q/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpICYmXG4gICAgICAgICAgICBmb3JtLm1ldGhvZC50b3VjaGVkICYmXG4gICAgICAgICAgICBmb3JtLm1ldGhvZC5kaXJ0eVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ20tZXJyb3JcIiBAaW5zZXJ0UmVtb3ZlPlxuICAgICAgICAgICAgICB7eyBJMThOX0tFWS5WQUxJREFUSU9OX1JFUVVJUkVEIHwgdHJhbnMgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoZm9ybS5yZWFkeSkge1xuICAgICAgICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwicGF5bWVudFwiXG4gICAgICAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgICAgI3BheW1lbnRSZXF1aXNpdGVzXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29uc3RydWN0b3JfX2ZpZWxkcyBjb25zdHJ1Y3Rvcl9fZmllbGRzLS1yZXZlcnNlXCI+XG4gICAgICAgICAgICAgIEBpZiAoZm9ybS5tZXRob2QudmFsdWUgJiYgZm9ybS5hbW91bnREeW5hbWljKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1cnJlbmN5VHBsOyBjb250ZXh0OiB7bGFiZWw6IEkxOE5fS0VZLkNPTlNUUlVDVE9SX0xBQkVMX0NVUlJFTkNZIHwgdHJhbnMsIHRhYkluZGV4OiAwfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGZvcm0uZmllbGRzOyB0cmFjayBmaWVsZC5uYW1lOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBpZiAoZmllbGQudHlwZSA9PT0gQ09OU1RSVUNUT1JfRklFTERfVFlQRVMuSWZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICBAaWYgKGZvcm0ucGF5bWVudC5nZXQoZmllbGQubmFtZSk/Lmhhc0Vycm9yKCdjZGVfZXJyb3InKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uc3RydWN0b3JfX2hpbnQgY2RlLWVycm9yXCIgQGluc2VydFJlbW92ZT5cbiAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5wYXltZW50LmdldChmaWVsZC5uYW1lKS5nZXRFcnJvcignY2RlX2Vycm9yJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc1xuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPGFwcC1jb25zdHJ1Y3Rvci1maWVsZC1pZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgQGluc2VydFJlbW92ZVxuICAgICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiZm9ybS5maWVsZHMubGVuZ3RoIC0gaSArIHRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYXBwLWNvbnN0cnVjdG9yLWZpZWxkLWlmcmFtZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChmaWVsZC50eXBlID09PSBDT05TVFJVQ1RPUl9GSUVMRF9UWVBFUy5TZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgIDxhcHAtY29uc3RydWN0b3ItZmllbGQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJmaWVsZD8ub3B0aW9ucz8uaXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiZm9ybS5maWVsZHMubGVuZ3RoIC0gaSArIHRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICAgID48L2FwcC1jb25zdHJ1Y3Rvci1maWVsZC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoW0NPTlNUUlVDVE9SX0ZJRUxEX1RZUEVTLlRleHQsIENPTlNUUlVDVE9SX0ZJRUxEX1RZUEVTLk51bWJlciwgQ09OU1RSVUNUT1JfRklFTERfVFlQRVMuRW1haWxdLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICA8YXBwLWNvbnN0cnVjdG9yLWZpZWxkLXRleHRcbiAgICAgICAgICAgICAgICAgICAgQGluc2VydFJlbW92ZVxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgKG1hc2tlZFZhbHVlQ2hhbmdlKT1cImNoYW5nZVRleHRGaWVsZFZhbHVlKCRldmVudCwgZmllbGQpXCJcbiAgICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCJmb3JtLmZpZWxkcy5sZW5ndGggLSBpICsgdGFiSW5kZXhcIj48L2FwcC1jb25zdHJ1Y3Rvci1maWVsZC10ZXh0PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGZpZWxkLnR5cGUgPT09IENPTlNUUlVDVE9SX0ZJRUxEX1RZUEVTLkFtb3VudCkge1xuICAgICAgICAgICAgICAgICAgPGFwcC1jb25zdHJ1Y3Rvci1maWVsZC10ZXh0XG4gICAgICAgICAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCJmb3JtLmZpZWxkcy5sZW5ndGggLSBpICsgdGFiSW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1tZXRob2QtYW1vdW50LWhpbnQgYXBwLWMtdGV4dC1oaW50XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb25zdHJ1Y3Rvcl9faGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiZmVlTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmVlT3B0aW9ucyB8fCBmaWVsZC5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLW1ldGhvZC1hbW91bnQtaGludD5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghaGFzQ3VycmVuY3lNZXRob2RTZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgYXBwLWMtdGV4dC1zdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29uc3RydWN0b3JfX2N1cnJlbmN5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jb25zdHJ1Y3Rvcl9fY3VycmVuY3ktLXRyYW5zcGFyZW50XT1cImZvcm0uaXNBbW91bnRFZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VycmVuY3lUcGw7IGNvbnRleHQ6IHt0YWJJbmRleDogZm9ybS5maWVsZHMubGVuZ3RoIC0gaSArIHRhYkluZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2FwcC1jb25zdHJ1Y3Rvci1maWVsZC10ZXh0PlxuICAgICAgICAgICAgICAgICAgQGlmIChoYXNDdXJyZW5jeU1ldGhvZFNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtdHJtLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnN0cnVjdG9yLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiSTE4Tl9LRVkuQ09OU1RSVUNUT1JfTEFCRUxfQ1VSUkVOQ1kgfCB0cmFuc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uY3VycmVuY3lcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJjdXJyZW5jaWVzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cImZvcm0uZmllbGRzLmxlbmd0aCAtIGkgKyB0YWJJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSB0cm1TZWxlY3RMYWJlbFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cm0taWNvblwiIFtuZ0NsYXNzXT1cIid0cm0tY3Vyci0nICsgaXRlbS50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC10cm0tc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGZpZWxkLnR5cGUgPT09IENPTlNUUlVDVE9SX0ZJRUxEX1RZUEVTLkRhdGUpIHtcbiAgICAgICAgICAgICAgICAgIDxhcHAtY29uc3RydWN0b3ItZmllbGQtZGF0ZVxuICAgICAgICAgICAgICAgICAgICBAaW5zZXJ0UmVtb3ZlXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cImZvcm0uZmllbGRzLmxlbmd0aCAtIGkgKyB0YWJJbmRleFwiPjwvYXBwLWNvbnN0cnVjdG9yLWZpZWxkLWRhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY3VycmVuY3lUcGwgbGV0LWxhYmVsPVwibGFiZWxcIiBsZXQtdGFiSW5kZXg9XCJ0YWJJbmRleFwiPlxuICAgICAgICAgICAgICAgIDxhcHAtdHJtLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb25zdHJ1Y3Rvci1maWVsZC1pbm5lclwiXG4gICAgICAgICAgICAgICAgICBAaW5zZXJ0UmVtb3ZlXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0udXNlckN1cnJlbmN5XCJcbiAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInVzZXJDdXJyZW5jaWVzTGlzdFwiXG4gICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHRybVNlbGVjdExhYmVsVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJtLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIid0cm0tY3Vyci0nICsgaXRlbS50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvYXBwLXRybS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRybS1za2VsZXRvbi1maWVsZHNcIj5cbiAgICAgICAgICAgIEBmb3IgKGkgb2Ygc2tlbGV0b25MZW5ndGg7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJtLXNrZWxldG9uLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGdtLXNrZWxldG9uIFtjb3VudF09XCIxXCIgW3NoYXBlXT1cIidyZWN0LW1kJ1wiIFtzaXplXT1cIjE4XCI+PC9nbS1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICA8Z20tc2tlbGV0b24gW2NvdW50XT1cIjFcIiBbc2l6ZV09XCI1MFwiPjwvZ20tc2tlbGV0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZXJyb3IgJiYgIWZvcm0ubWV0aG9kSW5mb0xvYWRpbmcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJtLWVycm9yXCJcbiAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGVycm9yIHwgdHJhbnMgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAoc3RlcCA9PT0gVEVSTUlOQUxfU1RFUC5Db25maXJtYXRpb24pIHtcbiAgICAgIDxhcHAtY29uc3RydWN0b3ItcHJlcGFyYXRpb25cbiAgICAgICAgQGluc2VydFJlbW92ZVxuICAgICAgICBbY3VycmVuY3ldPVwicmVzcG9uc2U/LmN1cnJlbmN5XCJcbiAgICAgICAgW21ldGhvZE5hbWVdPVwiZm9ybS5nZXRUeXBlTmFtZUJ5SWQocmVzcG9uc2UudHlwZUlkKVwiXG4gICAgICAgIFt3YWxsZXRdPVwicmVzcG9uc2Uud2FsbGV0XCJcbiAgICAgICAgW21hc2tlZFdhbGxldF09XCJtYXNrZWRXYWxsZXRcIlxuICAgICAgICBbYW1vdW50XT1cInJlc3BvbnNlLmFtb3VudFwiXG4gICAgICAgIFt0b3RhbF09XCJyZXNwb25zZS50b3RhbFwiXG4gICAgICAgIFtjb25maXJtYXRpb25UZXh0XT1cImZvcm0uY29uZmlnPy5jb25maXJtYXRpb25cIlxuICAgICAgICA+XG4gICAgICAgIEBpZiAoZXJyb3IgJiYgIWZvcm0ucGF5bWVudC5wZW5kaW5nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRybS1lcnJvclwiXG4gICAgICAgICAgICBhcHAtY29uc3RydWN0b3ItcHJlcGFyYXRpb24tZXJyb3JcbiAgICAgICAgICAgIEBpbnNlcnRSZW1vdmVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGVycm9yIHwgdHJhbnMgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9hcHAtY29uc3RydWN0b3ItcHJlcGFyYXRpb24+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJjb25zdHJ1Y3Rvcl9fYWN0aW9uc1wiXG4gICAgICAgICBAaW5zZXJ0UmVtb3ZlPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInRybS1idXR0b24gdHJtLWJ1dHRvbi0tcHJpbWFyeSBjb25zdHJ1Y3Rvcl9fYWN0aW9ucy1jb250aW51ZVwiXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBbdGFiaW5kZXhdPVwiZm9ybS5maWVsZHMubGVuZ3RoICsgdGFiSW5kZXhcIj5cbiAgICAgICAge3tJMThOX0tFWS5DT05TVFJVQ1RPUl9MQUJFTF9DT05USU5VRSB8IHRyYW5zfX1cbiAgICAgICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cm0tc3Bpbm5lciB0cm0tc3Bpbm5lci13aGl0ZVwiPjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwidHJtLWJ1dHRvbiB0cm0tYnV0dG9uLS1zZWNvbmRhcnkgY29uc3RydWN0b3JfX2FjdGlvbnMtYmFja1wiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbdGFiaW5kZXhdPVwiZm9ybS5maWVsZHMubGVuZ3RoICsgdGFiSW5kZXhcIlxuICAgICAgKGNsaWNrKT1cImJhY2suZW1pdCgpXCI+IHt7IGJhY2tCdG5MYWJlbCB8IHRyYW5zfX08L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInRybS1za2VsZXRvbi1ncm91cFwiPlxuICAgICAgPGdtLXNrZWxldG9uIFtjb3VudF09XCI0XCIgW2dhcF09XCIyMFwiIFtzaXplXT1cIjgwXCI+PC9nbS1za2VsZXRvbj5cbiAgICAgIDxnbS1za2VsZXRvbiBbY291bnRdPVwiMlwiIFtnYXBdPVwiMTBcIiBbc2l6ZV09XCI0OFwiPjwvZ20tc2tlbGV0b24+XG4gICAgPC9kaXY+XG4gIH1cbjwvZm9ybT5cbiJdfQ==
|
package/esm2022/lib/app/pages/components/constructor-form/services/constructor-form.service.mjs
CHANGED
|
@@ -307,4 +307,4 @@ export class ConstructorFormService extends FormGroup {
|
|
|
307
307
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ConstructorFormService, decorators: [{
|
|
308
308
|
type: Injectable
|
|
309
309
|
}], ctorParameters: () => [] });
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVybWluYWwtdGVtcGxhdGUvc3JjL2xpYi9hcHAvcGFnZXMvY29tcG9uZW50cy9jb25zdHJ1Y3Rvci1mb3JtL3NlcnZpY2VzL2NvbnN0cnVjdG9yLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBd0Qsb0JBQW9CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRixPQUFPLEVBQUUsb0JBQW9CLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU3RSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBR2xFLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxTQUFxRDtJQWEvRjtRQUNFLEtBQUssQ0FBQztZQUNKLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN4RCxNQUFNLEVBQUUsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFF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dGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbGxlY3Rpb25UeXBlLCBQYXltZW50RmllbGQsIFBheW1lbnRGaWVsZE9wdGlvbnNJdGVtLCBQYXltZW50RmllbGRzLCBQYXltZW50RmllbGRUeXBlRW51bSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBTZXNzaW9uRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24uZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaXJzdCwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1ldGhvZEluZm8sIFRlcm1pbmFsUGF5bWVudFByZXBhcmVSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29kZWdlbi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyByZW1vdmVFbXB0eVByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2hlbHBlcnMvcmVtb3ZlLWVtcHR5LXByb3BzXCI7XG5pbXBvcnQgeyBJMThOX0tFWSB9IGZyb20gXCIuLy4uLy4uLy4uLy4uL2kxOG5cIjtcbmltcG9ydCB7IFRFUk1JTkFMX01FVEhPRF9DT05GSUdVUkFUSU9OX0ZBQ1RPUlkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZVwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29uc3RydWN0b3JGb3JtU2VydmljZSBleHRlbmRzIEZvcm1Hcm91cDx7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIHwgRm9ybUdyb3VwIH0+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzZXNzaW9uRFMgPSBpbmplY3QoU2Vzc2lvbkRhdGFTb3VyY2UpO1xuICBwcml2YXRlIGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uRmFjdG9yeSA9IGluamVjdChURVJNSU5BTF9NRVRIT0RfQ09ORklHVVJBVElPTl9GQUNUT1JZLCB7b3B0aW9uYWw6IHRydWV9KSB8fCAoKG1ldGhvZDogc3RyaW5nLCBkZWZhdWx0Q29uZmlnOiBQYXltZW50RmllbGRzKSA9PiBkZWZhdWx0Q29uZmlnKTtcblxuICBwcml2YXRlIF9zdG9yYWdlOiBMb2NhbFN0b3JhZ2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlKTtcbiAgcHJpdmF0ZSBjYW5jZWxSZXF1ZXN0c1N1YnNjcmliZXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHVuU3Vic2NyaWJlciA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbmZpZzogUGF5bWVudEZpZWxkcztcbiAgZmllbGRzOiBQYXltZW50RmllbGRbXSA9IFtdO1xuICBtYXNrZWRXYWxsZXQ6IHN0cmluZztcbiAgcmVhZHkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7XG4gICAgICBjb3VudHJ5OiBuZXcgRm9ybUNvbnRyb2wodW5kZWZpbmVkLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIG1ldGhvZDogbmV3IEZvcm1Db250cm9sKHVuZGVmaW5lZCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICBjdXJyZW5jeTogbmV3IEZvcm1Db250cm9sKHVuZGVmaW5lZCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICB1c2VyX2N1cnJlbmN5OiBuZXcgRm9ybUNvbnRyb2wodW5kZWZpbmVkLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIHBheW1lbnQ6IG5ldyBGb3JtR3JvdXAoe30pXG4gICAgfSk7XG4gIH1cblxuICBnZXQgbWV0aG9kSW5mb0xvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkRTLmxvYWRpbmdNZXRob2RJbmZvJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IHBheW1lbnRGb3JtRmllbGROYW1lcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXltZW50LmNvbnRyb2xzKTtcbiAgfVxuXG4gIHJlbW92ZVBheW1lbnRGb3JtQ29udHJvbHMoKSB7XG4gICAgdGhpcy5wYXltZW50Rm9ybUZpZWxkTmFtZXNcbiAgICAgIC5mb3JFYWNoKChjb250cm9sTmFtZTogc3RyaW5nKSA9PiB0aGlzLnBheW1lbnQucmVtb3ZlQ29udHJvbChjb250cm9sTmFtZSkpO1xuICB9XG5cbiAgaW5pdCgpIHtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbkZhY3RvcnkpIHtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5jb25maWd1cmF0aW9uRmFjdG9yeShcbiAgICAgICAgdGhpcy5tZXRob2ROYW1lLFxuICAgICAgICB0aGlzLnNlc3Npb25EUy5nZXRDb25maWd1cmF0aW9uKHRoaXMubWV0aG9kTmFtZSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5zZXNzaW9uRFMuZ2V0Q29uZmlndXJhdGlvbih0aGlzLm1ldGhvZE5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMuZmllbGRzID0gWy4uLnRoaXMuY29uZmlnLmZpZWxkc107XG4gICAgLy8gdGhhdCB0cmljayBmb3Igei1pbmRleCBvcmRlciBpbiBwYWdlIChyZXZlcnNlIGFycmF5ICsgcmV2ZXJzZSBmbGV4LWRpcmVjdGlvbilcbiAgICB0aGlzLmZpZWxkcy5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkRTXG4gICAgICAuZ2V0TWV0aG9kSW5mbyhcbiAgICAgICAgdGhpcy5jdXJyZW5jeS52YWx1ZSxcbiAgICAgICAgdGhpcy5tZXRob2QudmFsdWVcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKG1ldGhvZEluZm8pID0+IHRoaXMuZ2VuZXJhdGVGaWVsZHMobWV0aG9kSW5mbykpLFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5jYW5jZWxSZXF1ZXN0c1N1YnNjcmliZXIpXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGFtb3VudER5bmFtaWMgPSBmYWxzZTtcblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlRmllbGRzKG1ldGhvZEluZm86IE1ldGhvZEluZm8pOiBQcm9taXNlPHZvaWQ+ICB7XG4gICAgdGhpcy5maWVsZHNcbiAgICAgIC5mb3JFYWNoKChmaWVsZDogUGF5bWVudEZpZWxkKSA9PiB7XG4gICAgICAgIGlmICghZmllbGQubmFtZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bWJlcj4oe1xuICAgICAgICAgIHZhbHVlOiBmaWVsZC50eXBlID09PSBQYXltZW50RmllbGRUeXBlRW51bS5JZnJhbWUgPyB1bmRlZmluZWQgOiBudWxsLFxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcbiAgICAgICAgdGhpcy5hbW91bnREeW5hbWljID0gbWV0aG9kSW5mby5hbW91bnREeW5hbWljO1xuICAgICAgICBjb25zdCBpc0VkaXRhYmxlID0gIW1ldGhvZEluZm8uYW1vdW50RHluYW1pYyAmJiB0aGlzLmlzQW1vdW50RWRpdGFibGUoKTtcbiAgICAgICAgZmllbGQucGxhY2Vob2xkZXIgPSBmaWVsZC5wbGFjZWhvbGRlciB8fCAnJztcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IFBheW1lbnRGaWVsZFR5cGVFbnVtLkFtb3VudCkge1xuICAgICAgICAgIGlmIChtZXRob2RJbmZvLmRlZmF1bHRBbW91bnQgfHwgbWV0aG9kSW5mby5kZWZhdWx0QW1vdW50ID09PSAwKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG1ldGhvZEluZm8uZGVmYXVsdEFtb3VudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXNFZGl0YWJsZSkge1xuICAgICAgICAgICAgZmllbGQucmVhZG9ubHkgPSB0cnVlO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGNvbnRyb2wpID0+ICtjb250cm9sLnZhbHVlID09PSAwID8ge3JlcXVpcmVkOiB0cnVlfSA6IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZC5vcHRpb25zID0gZmllbGQub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICBmaWVsZC5vcHRpb25zLmN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jeS52YWx1ZTtcbiAgICAgICAgICBpZiAobWV0aG9kSW5mby5mZWUpIHtcbiAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMuZmVlID0gbWV0aG9kSW5mby5mZWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMuZmVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1ldGhvZEluZm8uZml4ZWRGZWUpIHtcbiAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMuZml4ZWRGZWUgPSBtZXRob2RJbmZvLmZpeGVkRmVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZC5vcHRpb25zLmZpeGVkRmVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFtZXRob2RJbmZvLmFtb3VudER5bmFtaWMgJiYgbWV0aG9kSW5mby5saW1pdHM/Lm1heCkge1xuICAgICAgICAgICAgZmllbGQub3B0aW9ucy5tYXggPSBtZXRob2RJbmZvLmxpbWl0cy5tYXg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC5vcHRpb25zLm1heDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFtZXRob2RJbmZvLmFtb3VudER5bmFtaWMgJiYgbWV0aG9kSW5mby5saW1pdHM/Lm1pbikge1xuICAgICAgICAgICAgZmllbGQub3B0aW9ucy5taW4gPSBtZXRob2RJbmZvLmxpbWl0cy5taW47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC5vcHRpb25zLm1pbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLndhbGxldCAmJiBtZXRob2RJbmZvLmRlZmF1bHRXYWxsZXQpIHtcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG1ldGhvZEluZm8uZGVmYXVsdFdhbGxldCk7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kSW5mby5lbWFpbCAmJiBmaWVsZC50eXBlID09PSBQYXltZW50RmllbGRUeXBlRW51bS5FbWFpbCkge1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobWV0aG9kSW5mby5lbWFpbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnJlcXVpcmUpIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnBhdHRlcm4pIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKG5ldyBSZWdFeHAoZmllbGQucGF0dGVybikpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSBQYXltZW50RmllbGRUeXBlRW51bS5FbWFpbCkge1xuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQub3B0aW9ucz8ubWF4ICYmIHR5cGVvZiBmaWVsZC5vcHRpb25zPy5tYXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4KGZpZWxkLm9wdGlvbnM/Lm1heCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC5vcHRpb25zPy5taW4gJiYgdHlwZW9mIGZpZWxkLm9wdGlvbnM/Lm1pbiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oZmllbGQub3B0aW9ucz8ubWluKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLm9wdGlvbnM/Lm1heExlbmd0aCkge1xuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChmaWVsZC5vcHRpb25zPy5tYXhMZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQub3B0aW9ucz8ubWluTGVuZ3RoKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKGZpZWxkLm9wdGlvbnM/Lm1pbkxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSBQYXltZW50RmllbGRUeXBlRW51bS5BbW91bnQgJiYgbWV0aG9kSW5mby5hbW91bnREeW5hbWljKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZmllbGQudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKGZpZWxkLnZhbGlkYXRvcih0aGlzLnBheW1lbnQpKTtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgICAgIHRoaXMucGF5bWVudC5hZGRDb250cm9sKGZpZWxkLm5hbWUsIGNvbnRyb2wpO1xuICAgICAgICB0aGlzLmZldGNoQ29sbGVjdGlvbihmaWVsZClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGZldGNoQ29sbGVjdGlvbihmaWVsZDogUGF5bWVudEZpZWxkKTogT2JzZXJ2YWJsZTxQYXltZW50RmllbGRPcHRpb25zSXRlbVtdPiB7XG4gICAgY29uc3QgRU1QVFlfTElTVCA9IG9mKFtdKS5waXBlKGZpcnN0KCkpO1xuICAgIGlmICghZmllbGQub3B0aW9ucz8uY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIEVNUFRZX0xJU1Q7XG4gICAgfVxuICAgIHN3aXRjaCAoZmllbGQub3B0aW9ucy5jb2xsZWN0aW9uKSB7XG4gICAgICBjYXNlIENvbGxlY3Rpb25UeXBlLkJhbmtzOlxuICAgICAgICBmaWVsZC5vcHRpb25zLml0ZW1zID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb25EU1xuICAgICAgICAgIC5nZXRCYW5rcyh0aGlzLm1ldGhvZC52YWx1ZSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoe2RhdGF9KSA9PiB7XG4gICAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMuaXRlbXMgPSBkYXRhO1xuICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICBjYXNlIENvbGxlY3Rpb25UeXBlLkRvY3VtZW50czpcbiAgICAgICAgZmllbGQub3B0aW9ucy5pdGVtcyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uRFNcbiAgICAgICAgICAuZ2V0RG9jdW1lbnRzKHRoaXMubWV0aG9kLnZhbHVlKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCh7ZGF0YX0pID0+IHtcbiAgICAgICAgICAgICAgZmllbGQub3B0aW9ucy5pdGVtcyA9IGRhdGE7XG4gICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBFTVBUWV9MSVNUO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjb3VudHJ5KCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdjb3VudHJ5JykgYXMgQWJzdHJhY3RDb250cm9sO1xuICB9XG5cbiAgZ2V0IG1ldGhvZCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmdldCgnbWV0aG9kJykgYXMgQWJzdHJhY3RDb250cm9sO1xuICB9XG5cbiAgZ2V0IGN1cnJlbmN5KCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ2N1cnJlbmN5JykgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXQgdXNlckN1cnJlbmN5KCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3VzZXJfY3VycmVuY3knKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGdldCBwYXltZW50KCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdwYXltZW50JykgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgZ2V0IGFtb3VudCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLnBheW1lbnQuZ2V0KHRoaXMuZmllbGRzLmZpbmQoZmllbGQgPT4gZmllbGQudHlwZSA9PT0gUGF5bWVudEZpZWxkVHlwZUVudW0uQW1vdW50KS5uYW1lKSBhcyBBYnN0cmFjdENvbnRyb2w7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1ldGhvZE5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMubWV0aG9kLnZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkRTLmdldFR5cGVOYW1lQnlJZCh0aGlzLm1ldGhvZC52YWx1ZSk7XG4gIH1cblxuICBnZXRUeXBlTmFtZUJ5SWQoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uRFMuZ2V0VHlwZU5hbWVCeUlkKGlkKTtcbiAgfVxuXG4gIHNhdmVEZWZhdWx0Q291bnRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdG9yYWdlLnNhdmVEZWZhdWx0Q291bnRyeSh0aGlzLmNvdW50cnkudmFsdWUpO1xuICB9XG5cbiAgc2F2ZURlZmF1bHRNZXRob2ROYW1lKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0b3JhZ2Uuc2F2ZURlZmF1bHRNZXRob2ROYW1lKHRoaXMubWV0aG9kTmFtZSk7XG4gIH1cblxuICBzYXZlRGVmYXVsdEN1cnJlbmN5KCk6IHZvaWQge1xuICAgIHRoaXMuX3N0b3JhZ2Uuc2F2ZURlZmF1bHRDdXJyZW5jeSh0aGlzLmN1cnJlbmN5LnZhbHVlKTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0Q291bnRyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdG9yYWdlLmRlZmF1bHRDb3VudHJ5O1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRNZXRob2ROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2UuZGVmYXVsdE1ldGhvZE5hbWU7XG4gIH1cblxuICBnZXQgZGVmYXVsdEN1cnJlbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2UuZGVmYXVsdEN1cnJlbmN5O1xuICB9XG5cbiAgcHVibGljIGNhbmNlbFJlcXVlc3RzKCkge1xuICAgIHRoaXMuY2FuY2VsUmVxdWVzdHNTdWJzY3JpYmVyLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXltZW50VmFsdWUoKSB7XG4gICAgY29uc3QgZGF0YTogVGVybWluYWxQYXltZW50UHJlcGFyZVJlcXVlc3QgPSB7XG4gICAgICB0eXBlSWQ6IHRoaXMubWV0aG9kLnZhbHVlLFxuICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3kudmFsdWUsXG4gICAgICB0eXBlOiB0aGlzLmdldFR5cGVOYW1lQnlJZCh0aGlzLm1ldGhvZC52YWx1ZSksXG4gICAgICB1c2VyX2N1cnJlbmN5OiB0aGlzLnVzZXJDdXJyZW5jeS52YWx1ZSxcbiAgICAgIC4uLnRoaXMucGF5bWVudC5nZXRSYXdWYWx1ZSgpXG4gICAgfVxuICAgIHRoaXMuZmllbGRzLmZvckVhY2goKGZpZWxkOiBQYXltZW50RmllbGQpID0+IHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSBQYXltZW50RmllbGRUeXBlRW51bS5BbW91bnQpIHtcbiAgICAgICAgZGF0YVtmaWVsZC5uYW1lXSA9ICtkYXRhW2ZpZWxkLm5hbWVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZW1vdmVFbXB0eVByb3BzKGRhdGEpO1xuICB9XG4gIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHlJZnJhbWVzKCk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRzLmZvckVhY2goKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICBpZiAodHlwZSA9PT0gUGF5bWVudEZpZWxkVHlwZUVudW0uSWZyYW1lKSB7XG4gICAgICAgIHRoaXMucGF5bWVudC5nZXQobmFtZSkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcmVhZHlJZnJhbWVzU3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkc1xuICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IHR5cGUgIT09IFBheW1lbnRGaWVsZFR5cGVFbnVtLklmcmFtZSlcbiAgICAgIC5ldmVyeSgoeyBuYW1lLCB0eXBlIH0pID0+ICF0aGlzLnBheW1lbnQuZ2V0KG5hbWUpLmludmFsaWQpO1xuICB9XG5cbiAgaXNBbW91bnRFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uRFMuZ2V0U2Vzc2lvblZhbHVlKCkuYW1vdW50RWRpdGFibGVcbiAgfVxuXG4gIGhhc1doYXRUb0ZpbGwoKSB7XG4gICAgY29uc3QgX2hhc1doYXRUb0ZpbGwgPSB0aGlzLmNvdW50cnkuZW5hYmxlZCB8fCB0aGlzLm1ldGhvZC5lbmFibGVkIHx8IHRoaXMuY3VycmVuY3kuZW5hYmxlZCB8fCB0aGlzLmlzQW1vdW50RWRpdGFibGUoKTtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcztcbiAgICBpZiAoX2hhc1doYXRUb0ZpbGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkcy5zb21lKChmKSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5wYXltZW50LmdldChmLm5hbWUpO1xuICAgICAgaWYgKGYudHlwZSA9PT0gUGF5bWVudEZpZWxkVHlwZUVudW0uQW1vdW50KSB7XG4gICAgICAgIHJldHVybiAhY29udHJvbC52YWxpZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBheW1lbnQuZ2V0KGYubmFtZSkuZW5hYmxlZDtcbiAgICB9KTtcbiAgfVxuXG4gIHNldENERUVycm9yKGNvZGU6IEkxOE5fS0VZKSB7XG4gICAgdGhpcy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICB0aGlzLnNldFZhbGlkYXRvcnMoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubWV0aG9kTmFtZSA9PT0gJ2NhcmQnKSB7XG4gICAgICAgIHJldHVybiB7Y2RlX2Vycm9yOiBjb2RlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICB9XG5cbiAgZGlzdGluY3RWYWx1ZUNoYW5nZXMoKTogT2JzZXJ2YWJsZTxQYXJ0aWFsPHsgW3g6IHN0cmluZ106IGFueSB9Pj4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXByZXYgfHxcbiAgICAgICAgICAhY3VyciB8fFxuICAgICAgICAgIE9iamVjdC5rZXlzKHByZXYucGF5bWVudCkubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhjdXJyLnBheW1lbnQpLmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBwcmV2LmNvdW50cnkgPT09IGN1cnIuY291bnRyeSAmJlxuICAgICAgICAgIHByZXYubWV0aG9kID09PSBjdXJyLm1ldGhvZCAmJlxuICAgICAgICAgIHByZXYuY3VycmVuY3kgPT09IGN1cnIuY3VycmVuY3kgJiZcbiAgICAgICAgICBwcmV2LnBheW1lbnQuYW1vdW50ID09PSBjdXJyLnBheW1lbnQuYW1vdW50XG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5TdWJzY3JpYmVyLm5leHQoKTtcbiAgICB0aGlzLnVuU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2FuY2VsUmVxdWVzdHNTdWJzY3JpYmVyLm5leHQoKTtcbiAgICB0aGlzLmNhbmNlbFJlcXVlc3RzU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVybWluYWwtdGVtcGxhdGUvc3JjL2xpYi9hcHAvcGFnZXMvY29tcG9uZW50cy9jb25zdHJ1Y3Rvci1mb3JtL3NlcnZpY2VzL2NvbnN0cnVjdG9yLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEcsT0FBTyxFQUFFLGNBQWMsRUFBd0Qsb0JBQW9CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRixPQUFPLEVBQUUsb0JBQW9CLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU3RSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBR2xFLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxTQUFxRDtJQWEvRjtRQUNFLEtBQUssQ0FBQztZQUNKLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUN4RCxNQUFNLEVBQUUsSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFF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dGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbGxlY3Rpb25UeXBlLCBQYXltZW50RmllbGQsIFBheW1lbnRGaWVsZE9wdGlvbnNJdGVtLCBQYXltZW50RmllbGRzLCBQYXltZW50RmllbGRUeXBlRW51bSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBTZXNzaW9uRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24uZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaXJzdCwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1ldGhvZEluZm8sIFRlcm1pbmFsUGF5bWVudFByZXBhcmVSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29kZWdlbi9tb2RlbC9tb2RlbHMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyByZW1vdmVFbXB0eVByb3BzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2hlbHBlcnMvcmVtb3ZlLWVtcHR5LXByb3BzXCI7XG5pbXBvcnQgeyBJMThOX0tFWSB9IGZyb20gXCIuLy4uLy4uLy4uLy4uL2kxOG5cIjtcbmltcG9ydCB7IFRFUk1JTkFMX01FVEhPRF9DT05GSUdVUkFUSU9OX0ZBQ1RPUlkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZVwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29uc3RydWN0b3JGb3JtU2VydmljZSBleHRlbmRzIEZvcm1Hcm91cDx7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIHwgRm9ybUdyb3VwIH0+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzZXNzaW9uRFMgPSBpbmplY3QoU2Vzc2lvbkRhdGFTb3VyY2UpO1xuICBwcml2YXRlIGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBjb25maWd1cmF0aW9uRmFjdG9yeSA9IGluamVjdChURVJNSU5BTF9NRVRIT0RfQ09ORklHVVJBVElPTl9GQUNUT1JZLCB7b3B0aW9uYWw6IHRydWV9KSB8fCAoKG1ldGhvZDogc3RyaW5nLCBkZWZhdWx0Q29uZmlnOiBQYXltZW50RmllbGRzKSA9PiBkZWZhdWx0Q29uZmlnKTtcblxuICBwcml2YXRlIF9zdG9yYWdlOiBMb2NhbFN0b3JhZ2UgPSBpbmplY3QoTG9jYWxTdG9yYWdlKTtcbiAgcHJpdmF0ZSBjYW5jZWxSZXF1ZXN0c1N1YnNjcmliZXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHVuU3Vic2NyaWJlciA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbmZpZzogUGF5bWVudEZpZWxkcztcbiAgZmllbGRzOiBQYXltZW50RmllbGRbXSA9IFtdO1xuICBtYXNrZWRXYWxsZXQ6IHN0cmluZztcbiAgcmVhZHkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7XG4gICAgICBjb3VudHJ5OiBuZXcgRm9ybUNvbnRyb2wodW5kZWZpbmVkLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIG1ldGhvZDogbmV3IEZvcm1Db250cm9sKHVuZGVmaW5lZCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICBjdXJyZW5jeTogbmV3IEZvcm1Db250cm9sKHVuZGVmaW5lZCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICB1c2VyX2N1cnJlbmN5OiBuZXcgRm9ybUNvbnRyb2wodW5kZWZpbmVkLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgIHBheW1lbnQ6IG5ldyBGb3JtR3JvdXAoe30pXG4gICAgfSk7XG4gIH1cblxuICBnZXQgbWV0aG9kSW5mb0xvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkRTLmxvYWRpbmdNZXRob2RJbmZvJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0IHBheW1lbnRGb3JtRmllbGROYW1lcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXltZW50LmNvbnRyb2xzKTtcbiAgfVxuXG4gIHJlbW92ZVBheW1lbnRGb3JtQ29udHJvbHMoKSB7XG4gICAgdGhpcy5wYXltZW50Rm9ybUZpZWxkTmFtZXNcbiAgICAgIC5mb3JFYWNoKChjb250cm9sTmFtZTogc3RyaW5nKSA9PiB0aGlzLnBheW1lbnQucmVtb3ZlQ29udHJvbChjb250cm9sTmFtZSkpO1xuICB9XG5cbiAgaW5pdCgpIHtcbiAgICB0aGlzLnJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbkZhY3RvcnkpIHtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5jb25maWd1cmF0aW9uRmFjdG9yeShcbiAgICAgICAgdGhpcy5tZXRob2ROYW1lLFxuICAgICAgICB0aGlzLnNlc3Npb25EUy5nZXRDb25maWd1cmF0aW9uKHRoaXMubWV0aG9kTmFtZSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5zZXNzaW9uRFMuZ2V0Q29uZmlndXJhdGlvbih0aGlzLm1ldGhvZE5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMuZmllbGRzID0gWy4uLnRoaXMuY29uZmlnLmZpZWxkc107XG4gICAgLy8gdGhhdCB0cmljayBmb3Igei1pbmRleCBvcmRlciBpbiBwYWdlIChyZXZlcnNlIGFycmF5ICsgcmV2ZXJzZSBmbGV4LWRpcmVjdGlvbilcbiAgICB0aGlzLmZpZWxkcy5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkRTXG4gICAgICAuZ2V0TWV0aG9kSW5mbyhcbiAgICAgICAgdGhpcy5jdXJyZW5jeS52YWx1ZSxcbiAgICAgICAgdGhpcy5tZXRob2QudmFsdWVcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKG1ldGhvZEluZm8pID0+IHRoaXMuZ2VuZXJhdGVGaWVsZHMobWV0aG9kSW5mbykpLFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5jYW5jZWxSZXF1ZXN0c1N1YnNjcmliZXIpXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGFtb3VudER5bmFtaWMgPSBmYWxzZTtcblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlRmllbGRzKG1ldGhvZEluZm86IE1ldGhvZEluZm8pOiBQcm9taXNlPHZvaWQ+ICB7XG4gICAgdGhpcy5maWVsZHNcbiAgICAgIC5mb3JFYWNoKChmaWVsZDogUGF5bWVudEZpZWxkKSA9PiB7XG4gICAgICAgIGlmICghZmllbGQubmFtZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bWJlcj4oe1xuICAgICAgICAgIHZhbHVlOiBmaWVsZC50eXBlID09PSBQYXltZW50RmllbGRUeXBlRW51bS5JZnJhbWUgPyB1bmRlZmluZWQgOiBudWxsLFxuICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcbiAgICAgICAgdGhpcy5hbW91bnREeW5hbWljID0gbWV0aG9kSW5mby5hbW91bnREeW5hbWljO1xuICAgICAgICBjb25zdCBpc0VkaXRhYmxlID0gIW1ldGhvZEluZm8uYW1vdW50RHluYW1pYyAmJiB0aGlzLmlzQW1vdW50RWRpdGFibGUoKTtcbiAgICAgICAgZmllbGQucGxhY2Vob2xkZXIgPSBmaWVsZC5wbGFjZWhvbGRlciB8fCAnJztcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IFBheW1lbnRGaWVsZFR5cGVFbnVtLkFtb3VudCkge1xuICAgICAgICAgIGlmIChtZXRob2RJbmZvLmRlZmF1bHRBbW91bnQgfHwgbWV0aG9kSW5mby5kZWZhdWx0QW1vdW50ID09PSAwKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG1ldGhvZEluZm8uZGVmYXVsdEFtb3VudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXNFZGl0YWJsZSkge1xuICAgICAgICAgICAgZmllbGQucmVhZG9ubHkgPSB0cnVlO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkLnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGNvbnRyb2wpID0+ICtjb250cm9sLnZhbHVlID09PSAwID8ge3JlcXVpcmVkOiB0cnVlfSA6IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWVsZC5vcHRpb25zID0gZmllbGQub3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICBmaWVsZC5vcHRpb25zLmN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jeS52YWx1ZTtcbiAgICAgICAgICBpZiAobWV0aG9kSW5mby5mZWUpIHtcbiAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMuZmVlID0gbWV0aG9kSW5mby5mZWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMuZmVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1ldGhvZEluZm8uZml4ZWRGZWUpIHtcbiAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMuZml4ZWRGZWUgPSBtZXRob2RJbmZvLmZpeGVkRmVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZC5vcHRpb25zLmZpeGVkRmVlID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFtZXRob2RJbmZvLmFtb3VudER5bmFtaWMgJiYgbWV0aG9kSW5mby5saW1pdHM/Lm1heCkge1xuICAgICAgICAgICAgZmllbGQub3B0aW9ucy5tYXggPSBtZXRob2RJbmZvLmxpbWl0cy5tYXg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC5vcHRpb25zLm1heDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFtZXRob2RJbmZvLmFtb3VudER5bmFtaWMgJiYgbWV0aG9kSW5mby5saW1pdHM/Lm1pbikge1xuICAgICAgICAgICAgZmllbGQub3B0aW9ucy5taW4gPSBtZXRob2RJbmZvLmxpbWl0cy5taW47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmaWVsZC5vcHRpb25zLm1pbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLndhbGxldCAmJiBtZXRob2RJbmZvLmRlZmF1bHRXYWxsZXQpIHtcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG1ldGhvZEluZm8uZGVmYXVsdFdhbGxldCk7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0aG9kSW5mby5lbWFpbCAmJiBmaWVsZC50eXBlID09PSBQYXltZW50RmllbGRUeXBlRW51bS5FbWFpbCkge1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUobWV0aG9kSW5mby5lbWFpbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnJlcXVpcmUpIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLnBhdHRlcm4pIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKG5ldyBSZWdFeHAoZmllbGQucGF0dGVybikpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSBQYXltZW50RmllbGRUeXBlRW51bS5FbWFpbCkge1xuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQub3B0aW9ucz8ubWF4ICYmIHR5cGVvZiBmaWVsZC5vcHRpb25zPy5tYXggPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4KGZpZWxkLm9wdGlvbnM/Lm1heCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC5vcHRpb25zPy5taW4gJiYgdHlwZW9mIGZpZWxkLm9wdGlvbnM/Lm1pbiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW4oZmllbGQub3B0aW9ucz8ubWluKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLm9wdGlvbnM/Lm1heExlbmd0aCkge1xuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChmaWVsZC5vcHRpb25zPy5tYXhMZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQub3B0aW9ucz8ubWluTGVuZ3RoKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKGZpZWxkLm9wdGlvbnM/Lm1pbkxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSBQYXltZW50RmllbGRUeXBlRW51bS5BbW91bnQgJiYgbWV0aG9kSW5mby5hbW91bnREeW5hbWljKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZmllbGQudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKGZpZWxkLnZhbGlkYXRvcih0aGlzLnBheW1lbnQpKTtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgICAgIHRoaXMucGF5bWVudC5hZGRDb250cm9sKGZpZWxkLm5hbWUsIGNvbnRyb2wpO1xuICAgICAgICB0aGlzLmZldGNoQ29sbGVjdGlvbihmaWVsZClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGZldGNoQ29sbGVjdGlvbihmaWVsZDogUGF5bWVudEZpZWxkKTogT2JzZXJ2YWJsZTxQYXltZW50RmllbGRPcHRpb25zSXRlbVtdPiB7XG4gICAgY29uc3QgRU1QVFlfTElTVCA9IG9mKFtdKS5waXBlKGZpcnN0KCkpO1xuICAgIGlmICghZmllbGQub3B0aW9ucz8uY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIEVNUFRZX0xJU1Q7XG4gICAgfVxuICAgIHN3aXRjaCAoZmllbGQub3B0aW9ucy5jb2xsZWN0aW9uKSB7XG4gICAgICBjYXNlIENvbGxlY3Rpb25UeXBlLkJhbmtzOlxuICAgICAgICBmaWVsZC5vcHRpb25zLml0ZW1zID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb25EU1xuICAgICAgICAgIC5nZXRCYW5rcyh0aGlzLm1ldGhvZC52YWx1ZSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoe2RhdGF9KSA9PiB7XG4gICAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMuaXRlbXMgPSBkYXRhO1xuICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICBjYXNlIENvbGxlY3Rpb25UeXBlLkRvY3VtZW50czpcbiAgICAgICAgZmllbGQub3B0aW9ucy5pdGVtcyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uRFNcbiAgICAgICAgICAuZ2V0RG9jdW1lbnRzKHRoaXMubWV0aG9kLnZhbHVlKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCh7ZGF0YX0pID0+IHtcbiAgICAgICAgICAgICAgZmllbGQub3B0aW9ucy5pdGVtcyA9IGRhdGE7XG4gICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBFTVBUWV9MSVNUO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjb3VudHJ5KCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdjb3VudHJ5JykgYXMgQWJzdHJhY3RDb250cm9sO1xuICB9XG5cbiAgZ2V0IG1ldGhvZCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmdldCgnbWV0aG9kJykgYXMgQWJzdHJhY3RDb250cm9sO1xuICB9XG5cbiAgZ2V0IGN1cnJlbmN5KCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ2N1cnJlbmN5JykgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXQgdXNlckN1cnJlbmN5KCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3VzZXJfY3VycmVuY3knKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGdldCBwYXltZW50KCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdwYXltZW50JykgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgZ2V0IGFtb3VudCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLnBheW1lbnQuZ2V0KHRoaXMuZmllbGRzLmZpbmQoZmllbGQgPT4gZmllbGQudHlwZSA9PT0gUGF5bWVudEZpZWxkVHlwZUVudW0uQW1vdW50KS5uYW1lKSBhcyBBYnN0cmFjdENvbnRyb2w7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1ldGhvZE5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMubWV0aG9kLnZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkRTLmdldFR5cGVOYW1lQnlJZCh0aGlzLm1ldGhvZC52YWx1ZSk7XG4gIH1cblxuICBnZXRUeXBlTmFtZUJ5SWQoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uRFMuZ2V0VHlwZU5hbWVCeUlkKGlkKTtcbiAgfVxuXG4gIHNhdmVEZWZhdWx0Q291bnRyeSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdG9yYWdlLnNhdmVEZWZhdWx0Q291bnRyeSh0aGlzLmNvdW50cnkudmFsdWUpO1xuICB9XG5cbiAgc2F2ZURlZmF1bHRNZXRob2ROYW1lKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0b3JhZ2Uuc2F2ZURlZmF1bHRNZXRob2ROYW1lKHRoaXMubWV0aG9kTmFtZSk7XG4gIH1cblxuICBzYXZlRGVmYXVsdEN1cnJlbmN5KCk6IHZvaWQge1xuICAgIHRoaXMuX3N0b3JhZ2Uuc2F2ZURlZmF1bHRDdXJyZW5jeSh0aGlzLmN1cnJlbmN5LnZhbHVlKTtcbiAgfVxuXG4gIGdldCBkZWZhdWx0Q291bnRyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdG9yYWdlLmRlZmF1bHRDb3VudHJ5O1xuICB9XG5cbiAgZ2V0IGRlZmF1bHRNZXRob2ROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2UuZGVmYXVsdE1ldGhvZE5hbWU7XG4gIH1cblxuICBnZXQgZGVmYXVsdEN1cnJlbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2UuZGVmYXVsdEN1cnJlbmN5O1xuICB9XG5cbiAgcHVibGljIGNhbmNlbFJlcXVlc3RzKCkge1xuICAgIHRoaXMuY2FuY2VsUmVxdWVzdHNTdWJzY3JpYmVyLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXltZW50VmFsdWUoKSB7XG4gICAgY29uc3QgZGF0YTogVGVybWluYWxQYXltZW50UHJlcGFyZVJlcXVlc3QgPSB7XG4gICAgICB0eXBlSWQ6IHRoaXMubWV0aG9kLnZhbHVlLFxuICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3kudmFsdWUsXG4gICAgICB0eXBlOiB0aGlzLmdldFR5cGVOYW1lQnlJZCh0aGlzLm1ldGhvZC52YWx1ZSksXG4gICAgICB1c2VyX2N1cnJlbmN5OiB0aGlzLnVzZXJDdXJyZW5jeS52YWx1ZSxcbiAgICAgIC4uLnRoaXMucGF5bWVudC5nZXRSYXdWYWx1ZSgpXG4gICAgfVxuICAgIHRoaXMuZmllbGRzLmZvckVhY2goKGZpZWxkOiBQYXltZW50RmllbGQpID0+IHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSBQYXltZW50RmllbGRUeXBlRW51bS5BbW91bnQpIHtcbiAgICAgICAgZGF0YVtmaWVsZC5uYW1lXSA9ICtkYXRhW2ZpZWxkLm5hbWVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZW1vdmVFbXB0eVByb3BzKGRhdGEpO1xuICB9XG4gIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHlJZnJhbWVzKCk6IHZvaWQge1xuICAgIHRoaXMuZmllbGRzLmZvckVhY2goKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICBpZiAodHlwZSA9PT0gUGF5bWVudEZpZWxkVHlwZUVudW0uSWZyYW1lKSB7XG4gICAgICAgIHRoaXMucGF5bWVudC5nZXQobmFtZSkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcmVhZHlJZnJhbWVzU3VibWl0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkc1xuICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IHR5cGUgIT09IFBheW1lbnRGaWVsZFR5cGVFbnVtLklmcmFtZSlcbiAgICAgIC5ldmVyeSgoeyBuYW1lLCB0eXBlIH0pID0+ICF0aGlzLnBheW1lbnQuZ2V0KG5hbWUpLmludmFsaWQpO1xuICB9XG5cbiAgaXNBbW91bnRFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uRFMuZ2V0U2Vzc2lvblZhbHVlKCkuYW1vdW50RWRpdGFibGU7XG4gIH1cblxuICBoYXNXaGF0VG9GaWxsKCkge1xuICAgIGNvbnN0IF9oYXNXaGF0VG9GaWxsID0gdGhpcy5jb3VudHJ5LmVuYWJsZWQgfHwgdGhpcy5tZXRob2QuZW5hYmxlZCB8fCB0aGlzLmN1cnJlbmN5LmVuYWJsZWQgfHwgdGhpcy5pc0Ftb3VudEVkaXRhYmxlKCk7XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5maWVsZHM7XG4gICAgaWYgKF9oYXNXaGF0VG9GaWxsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFmaWVsZHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmaWVsZHMuc29tZSgoZikgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMucGF5bWVudC5nZXQoZi5uYW1lKTtcbiAgICAgIGlmIChmLnR5cGUgPT09IFBheW1lbnRGaWVsZFR5cGVFbnVtLkFtb3VudCkge1xuICAgICAgICByZXR1cm4gIWNvbnRyb2wudmFsaWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXltZW50LmdldChmLm5hbWUpLmVuYWJsZWQ7XG4gICAgfSk7XG4gIH1cblxuICBzZXRDREVFcnJvcihjb2RlOiBJMThOX0tFWSkge1xuICAgIHRoaXMuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgdGhpcy5zZXRWYWxpZGF0b3JzKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm1ldGhvZE5hbWUgPT09ICdjYXJkJykge1xuICAgICAgICByZXR1cm4ge2NkZV9lcnJvcjogY29kZX07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDogZmFsc2V9KTtcbiAgfVxuXG4gIGRpc3RpbmN0VmFsdWVDaGFuZ2VzKCk6IE9ic2VydmFibGU8UGFydGlhbDx7IFt4OiBzdHJpbmddOiBhbnkgfT4+IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFwcmV2IHx8XG4gICAgICAgICAgIWN1cnIgfHxcbiAgICAgICAgICBPYmplY3Qua2V5cyhwcmV2LnBheW1lbnQpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoY3Vyci5wYXltZW50KS5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcHJldi5jb3VudHJ5ID09PSBjdXJyLmNvdW50cnkgJiZcbiAgICAgICAgICBwcmV2Lm1ldGhvZCA9PT0gY3Vyci5tZXRob2QgJiZcbiAgICAgICAgICBwcmV2LmN1cnJlbmN5ID09PSBjdXJyLmN1cnJlbmN5ICYmXG4gICAgICAgICAgcHJldi5wYXltZW50LmFtb3VudCA9PT0gY3Vyci5wYXltZW50LmFtb3VudFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuU3Vic2NyaWJlci5uZXh0KCk7XG4gICAgdGhpcy51blN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNhbmNlbFJlcXVlc3RzU3Vic2NyaWJlci5uZXh0KCk7XG4gICAgdGhpcy5jYW5jZWxSZXF1ZXN0c1N1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIl19
|