@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
261 lines • 37.4 kB
JavaScript
import { Component } from '@angular/core';
import { ObjectPropertySchemaFieldLoaderComponent } from '../../../schema/schema-field-host.component';
import { SchemaPrimitiveType } from '../../../schema/schema-models';
import { SchemaDataTypeStore } from '../../../schema/schema-store';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../../../layout/layout.component";
import * as i3 from "../../../layout/layout-item.component";
import * as i4 from "../../../layout/layout-definition.component";
import * as i5 from "../../../schema/schema-field-host.component";
import * as i6 from "../../../../directives/disabled/disabled.directive";
import * as i7 from "../../../loading-wheel/loading-wheel.component";
import * as i8 from "../../validation-alert/validation-alert.component";
import * as i9 from "../../fieldset/fieldset.directive";
function ObjectDefaultFormFieldLoaderComponent_sme_loading_wheel_1_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "sme-loading-wheel");
} }
const _c0 = function (a0, a1) { return { "sme-icon-chevronDown": a0, "sme-icon-chevronRight": a1 }; };
function ObjectDefaultFormFieldLoaderComponent_fieldset_2_a_1_Template(rf, ctx) { if (rf & 1) {
const _r8 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "a", 13);
i0.ɵɵlistener("click", function ObjectDefaultFormFieldLoaderComponent_fieldset_2_a_1_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r7.clickToggle()); });
i0.ɵɵelement(1, "span", 14);
i0.ɵɵelementStart(2, "b", 15);
i0.ɵɵtext(3);
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(2, _c0, ctx_r2.isExpanded(), !ctx_r2.isExpanded()));
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r2.localize(ctx_r2.propertySchema.label));
} }
function ObjectDefaultFormFieldLoaderComponent_fieldset_2_b_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "b", 16);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r3 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx_r3.localize(ctx_r3.propertySchema.label));
} }
function ObjectDefaultFormFieldLoaderComponent_fieldset_2_p_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "p", 17);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r4 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", ctx_r4.localize(ctx_r4.propertySchema.options.subTitle), "");
} }
function ObjectDefaultFormFieldLoaderComponent_fieldset_2_sme_layout_item_7_sme_schema_field_host_1_Template(rf, ctx) { if (rf & 1) {
const _r13 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "sme-schema-field-host", 19);
i0.ɵɵlistener("dataChange", function ObjectDefaultFormFieldLoaderComponent_fieldset_2_sme_layout_item_7_sme_schema_field_host_1_Template_sme_schema_field_host_dataChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const property_r9 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r12.data && (ctx_r12.data[property_r9.name] = $event)); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r15 = i0.ɵɵnextContext();
const i_r10 = ctx_r15.index;
const property_r9 = ctx_r15.$implicit;
const ctx_r11 = i0.ɵɵnextContext(2);
i0.ɵɵclassProp("sme-schema-field-host-not-first", i_r10 >= (ctx_r11.propertySchema.options && ctx_r11.propertySchema.options.columnCount || 1));
i0.ɵɵproperty("propertySchema", property_r9)("context", ctx_r11.context)("data", ctx_r11.data && ctx_r11.data[property_r9.name]);
i0.ɵɵattribute("data-property-name", property_r9.name);
} }
function ObjectDefaultFormFieldLoaderComponent_fieldset_2_sme_layout_item_7_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "sme-layout-item");
i0.ɵɵtemplate(1, ObjectDefaultFormFieldLoaderComponent_fieldset_2_sme_layout_item_7_sme_schema_field_host_1_Template, 1, 6, "sme-schema-field-host", 18);
i0.ɵɵelementEnd();
} if (rf & 2) {
const property_r9 = ctx.$implicit;
const ctx_r5 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", !(property_r9.format == "*data-only" || property_r9.hideCondition && ctx_r5.evalExpression(property_r9.hideCondition)));
} }
function ObjectDefaultFormFieldLoaderComponent_fieldset_2_p_8_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "p", 20);
i0.ɵɵtext(1);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r6 = i0.ɵɵnextContext(2);
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate1(" ", ctx_r6.localize(ctx_r6.propertySchema.options.additionalDescription), "");
} }
function ObjectDefaultFormFieldLoaderComponent_fieldset_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "fieldset", 4);
i0.ɵɵtemplate(1, ObjectDefaultFormFieldLoaderComponent_fieldset_2_a_1_Template, 4, 5, "a", 5);
i0.ɵɵtemplate(2, ObjectDefaultFormFieldLoaderComponent_fieldset_2_b_2_Template, 2, 1, "b", 6);
i0.ɵɵtemplate(3, ObjectDefaultFormFieldLoaderComponent_fieldset_2_p_3_Template, 2, 1, "p", 7);
i0.ɵɵelementStart(4, "div", 8)(5, "sme-layout", 9);
i0.ɵɵelement(6, "sme-layout-definition", 10);
i0.ɵɵtemplate(7, ObjectDefaultFormFieldLoaderComponent_fieldset_2_sme_layout_item_7_Template, 2, 1, "sme-layout-item", 11);
i0.ɵɵelementEnd()();
i0.ɵɵtemplate(8, ObjectDefaultFormFieldLoaderComponent_fieldset_2_p_8_Template, 2, 1, "p", 12);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵproperty("smeDisabled", ctx_r1.propertySchema.disabledCondition && ctx_r1.evalExpression(ctx_r1.propertySchema.disabledCondition));
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r1.shouldShowHeader() && ctx_r1.propertySchema.label && ctx_r1.isCollapsible());
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r1.shouldShowHeader() && ctx_r1.propertySchema.label && !ctx_r1.isCollapsible());
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r1.propertySchema.options && ctx_r1.propertySchema.options.subTitle);
i0.ɵɵadvance(1);
i0.ɵɵclassProp("sme-layout-none", !ctx_r1.isExpanded());
i0.ɵɵadvance(1);
i0.ɵɵproperty("itemVerticalSpace", 0)("itemHorizontalSpace", 10);
i0.ɵɵadvance(1);
i0.ɵɵproperty("columns", ctx_r1.propertySchema.options && ctx_r1.propertySchema.options.columnCount || 1);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngForOf", ctx_r1.propertySchema.properties);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r1.propertySchema.options && ctx_r1.propertySchema.options.additionalDescription);
} }
export class ObjectDefaultFormFieldLoaderComponent extends ObjectPropertySchemaFieldLoaderComponent {
static registerDataType() {
SchemaDataTypeStore.registerDataType({
type: SchemaPrimitiveType.Object,
format: 'default',
isDefaultFormat: true,
description: 'It\'s a special form field control that recursively renders all the properties as fields. '
+ 'This is like a container of other schema items.',
loaderComponent: ObjectDefaultFormFieldLoaderComponent,
optionProperties: [
{
type: SchemaPrimitiveType.String,
format: 'resource-string-picker',
name: 'subTitle',
label: 'actual_string:Subtitle'
},
{
type: SchemaPrimitiveType.String,
format: 'resource-string-picker',
name: 'additionalDescription',
label: 'actual_string:Additional Description'
},
{
type: SchemaPrimitiveType.String,
format: 'textbox',
name: 'busyCondition',
label: 'actual_string:Busy Condition'
},
{
type: SchemaPrimitiveType.Number,
format: 'textbox',
name: 'columnCount',
label: 'resources:strings:MsftSmeShell.Angular.SchemaForm.Editor.PropertyForm.ObjectType.ColumnCount',
defaultValue: 1
},
{
type: SchemaPrimitiveType.Boolean,
format: 'checkbox',
name: 'hideHeader',
label: 'resources:strings:MsftSmeShell.Angular.SchemaForm.Editor.PropertyForm.ObjectType.HideHeader'
},
{
type: SchemaPrimitiveType.Object,
format: 'default',
name: 'collapsible',
label: 'resources:strings:MsftSmeShell.Angular.SchemaForm.Editor.PropertyForm.ObjectType.Collapsible',
required: false,
properties: [
{
type: SchemaPrimitiveType.Boolean,
format: 'checkbox',
name: 'yes',
label: 'resources:strings:MsftSmeShell.Angular.SchemaForm.Editor.PropertyForm.ObjectType.Yes',
required: false,
options: {}
},
{
type: SchemaPrimitiveType.String,
format: 'combobox',
name: 'state',
label: 'resources:strings:MsftSmeShell.Angular.SchemaForm.Editor.PropertyForm.ObjectType.State',
required: false,
defaultValue: 'collapsed',
options: {
items: [
{
label: 'resources:strings:MsftSmeShell.Angular.SchemaForm.Editor.PropertyForm.ObjectType.Collapsed',
value: 'collapsed'
},
{
label: 'resources:strings:MsftSmeShell.Angular.SchemaForm.Editor.PropertyForm.ObjectType.Expanded',
value: 'expanded'
}
]
}
}
]
}
],
predefinedObjectProperties: [
{
type: SchemaPrimitiveType.String,
format: 'textbox'
}
]
});
}
isValid() {
let result = super.isValid();
this.alert = null;
if (this.isDirty()) {
const customValidationHandler = this.propertySchema.customValidation
&& this.resolveFunction(this.propertySchema.customValidation);
if (customValidationHandler) {
const errorMessage = customValidationHandler(this.data);
if (errorMessage) {
this.alert = {
message: errorMessage
};
result = false;
}
}
}
return result;
}
shouldShowHeader() {
return !(this.propertySchema.options && this.propertySchema.options.hideHeader);
}
isCollapsible() {
return this.propertySchema.options && this.propertySchema.options.collapsible && this.propertySchema.options.collapsible.yes;
}
isExpanded() {
return !(this.isCollapsible() && this.propertySchema.options.collapsible.state === 'collapsed');
}
clickToggle() {
if (this.isCollapsible()) {
this.propertySchema.options.collapsible.state =
this.propertySchema.options.collapsible.state === 'expanded' ? 'collapsed' : 'expanded';
}
}
shouldShowLoadingWheel() {
return this.propertySchema.options && this.propertySchema.options.busyCondition
&& this.evalExpression(this.propertySchema.options.busyCondition);
}
}
/** @nocollapse */ ObjectDefaultFormFieldLoaderComponent.ɵfac = /** @pureOrBreakMyCode */ function () { let ɵObjectDefaultFormFieldLoaderComponent_BaseFactory; return function ObjectDefaultFormFieldLoaderComponent_Factory(t) { return (ɵObjectDefaultFormFieldLoaderComponent_BaseFactory || (ɵObjectDefaultFormFieldLoaderComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ObjectDefaultFormFieldLoaderComponent)))(t || ObjectDefaultFormFieldLoaderComponent); }; }();
/** @nocollapse */ ObjectDefaultFormFieldLoaderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ObjectDefaultFormFieldLoaderComponent, selectors: [["ng-component"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 9, consts: [[1, "sme-layout-relative"], [4, "ngIf"], ["style", "margin:0 !important", 3, "smeDisabled", 4, "ngIf"], [3, "alert"], [2, "margin", "0 !important", 3, "smeDisabled"], ["class", "sme-padding-bottom-xs sme-arrange-stack-h", 3, "click", 4, "ngIf"], ["class", "sme-layout-block sme-margin-top-xxxs sme-padding-bottom-xs", 4, "ngIf"], ["class", "sme-margin-vertical-xs", 4, "ngIf"], [1, "sme-object-field-content"], [3, "itemVerticalSpace", "itemHorizontalSpace"], ["name", "wide", 3, "columns"], [4, "ngFor", "ngForOf"], ["class", "sme-margin-top-xs", 4, "ngIf"], [1, "sme-padding-bottom-xs", "sme-arrange-stack-h", 3, "click"], [1, "sme-position-flex-none", "sme-icon", "sme-padding-right-xxs", 3, "ngClass"], [1, "sme-position-flex-auto", "sme-margin-top-xxxs"], [1, "sme-layout-block", "sme-margin-top-xxxs", "sme-padding-bottom-xs"], [1, "sme-margin-vertical-xs"], ["class", "sme-layout-relative", 3, "sme-schema-field-host-not-first", "propertySchema", "context", "data", "dataChange", 4, "ngIf"], [1, "sme-layout-relative", 3, "propertySchema", "context", "data", "dataChange"], [1, "sme-margin-top-xs"]], template: function ObjectDefaultFormFieldLoaderComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 0);
i0.ɵɵtemplate(1, ObjectDefaultFormFieldLoaderComponent_sme_loading_wheel_1_Template, 1, 0, "sme-loading-wheel", 1);
i0.ɵɵtemplate(2, ObjectDefaultFormFieldLoaderComponent_fieldset_2_Template, 9, 11, "fieldset", 2);
i0.ɵɵelementEnd();
i0.ɵɵelement(3, "sme-validation-alert", 3);
} if (rf & 2) {
i0.ɵɵclassProp("sme-margin-bottom-xl", ctx.shouldShowLoadingWheel())("sme-height-xxxl", ctx.shouldShowLoadingWheel())("sme-width-xxxl", ctx.shouldShowLoadingWheel());
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.shouldShowLoadingWheel());
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", !ctx.shouldShowLoadingWheel());
i0.ɵɵadvance(1);
i0.ɵɵproperty("alert", ctx.alert);
} }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i2.LayoutComponent, i3.LayoutItemComponent, i4.LayoutDefinitionComponent, i5.SchemaFieldHostComponent, i6.DisabledDirective, i7.LoadingWheelComponent, i8.ValidationAlertComponent, i9.FieldsetDirective], encapsulation: 2 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ObjectDefaultFormFieldLoaderComponent, [{
type: Component,
args: [{ template: "<div class=\"sme-layout-relative\" [class.sme-margin-bottom-xl]=\"shouldShowLoadingWheel()\"\r\n [class.sme-height-xxxl]=\"shouldShowLoadingWheel()\" [class.sme-width-xxxl]=\"shouldShowLoadingWheel()\">\r\n <sme-loading-wheel *ngIf=\"shouldShowLoadingWheel()\"></sme-loading-wheel>\r\n <fieldset *ngIf=\"!shouldShowLoadingWheel()\"\r\n [smeDisabled]=\"propertySchema.disabledCondition && evalExpression(propertySchema.disabledCondition)\"\r\n style=\"margin:0 !important\">\r\n <a *ngIf=\"shouldShowHeader() && propertySchema.label && isCollapsible()\" (click)='clickToggle()'\r\n class=\"sme-padding-bottom-xs sme-arrange-stack-h\">\r\n <span class=\"sme-position-flex-none sme-icon sme-padding-right-xxs\"\r\n [ngClass]=\"{'sme-icon-chevronDown':isExpanded(), 'sme-icon-chevronRight':!isExpanded()}\">\r\n </span>\r\n <b class=\"sme-position-flex-auto sme-margin-top-xxxs\">{{localize(propertySchema.label)}}</b>\r\n </a>\r\n <b *ngIf=\"shouldShowHeader() && propertySchema.label && !isCollapsible()\"\r\n class=\"sme-layout-block sme-margin-top-xxxs sme-padding-bottom-xs\">{{localize(propertySchema.label)}}</b>\r\n <p *ngIf=\"propertySchema.options && propertySchema.options.subTitle\" class=\"sme-margin-vertical-xs\">\r\n {{localize(propertySchema.options.subTitle)}}</p>\r\n <div class=\"sme-object-field-content\" [class.sme-layout-none]=\"!isExpanded()\">\r\n <sme-layout [itemVerticalSpace]=\"0\" [itemHorizontalSpace]=\"10\">\r\n <sme-layout-definition name=\"wide\"\r\n [columns]=\"(propertySchema.options && propertySchema.options.columnCount) || 1\">\r\n </sme-layout-definition>\r\n <sme-layout-item *ngFor=\"let property of propertySchema.properties; let i = index\">\r\n <sme-schema-field-host *ngIf=\"!(property.format=='*data-only' || (property.hideCondition && evalExpression(property.hideCondition)))\"\r\n class=\"sme-layout-relative\"\r\n [class.sme-schema-field-host-not-first]=\"i>=(propertySchema.options && propertySchema.options.columnCount || 1)\"\r\n [propertySchema]=\"property\" [context]=\"context\" [(data)]=\"data && data[property.name]\"\r\n [attr.data-property-name]=\"property.name\">\r\n </sme-schema-field-host>\r\n </sme-layout-item>\r\n </sme-layout>\r\n </div>\r\n <p *ngIf=\"propertySchema.options && propertySchema.options.additionalDescription\" class=\"sme-margin-top-xs\">\r\n {{localize(propertySchema.options.additionalDescription)}}</p>\r\n </fieldset>\r\n</div>\r\n<sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n" }]
}], null, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWRlZmF1bHQtZm9ybS1maWVsZC1sb2FkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvZm9ybS9mb3JtLWZpZWxkL29iamVjdC9vYmplY3QtZGVmYXVsdC1mb3JtLWZpZWxkLWxvYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvb2JqZWN0L29iamVjdC1kZWZhdWx0LWZvcm0tZmllbGQtbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkcsT0FBTyxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7Ozs7SUNEakUsb0NBQXdFOzs7OztJQUl0RSw2QkFDcUQ7SUFEb0IsdUxBQVMsZUFBQSxvQkFBYSxDQUFBLElBQUM7SUFFOUYsMkJBRU87SUFDUCw2QkFBc0Q7SUFBQSxZQUFrQztJQUFBLGlCQUFJLEVBQUE7OztJQUZ0RixlQUF3RjtJQUF4RiwrRkFBd0Y7SUFFeEMsZUFBa0M7SUFBbEMsa0VBQWtDOzs7SUFFMUYsNkJBQ3NFO0lBQUEsWUFBa0M7SUFBQSxpQkFBSTs7O0lBQXRDLGVBQWtDO0lBQWxDLGtFQUFrQzs7O0lBQ3hHLDZCQUFvRztJQUNsRyxZQUE2QztJQUFBLGlCQUFJOzs7SUFBakQsZUFBNkM7SUFBN0MsdUZBQTZDOzs7O0lBT3pDLGlEQUlpRTtJQURNLHFUQUFVLHlFQUN0RixJQURrSDtJQUU3RyxpQkFBd0I7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O1FBQWYsaUNBQWU7O3VGRDNCeEIscUNBQXFDO2NBSGpELFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JqZWN0UHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtZmllbGQtaG9zdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTY2hlbWFPYmplY3RQcm9wZXJ0eSwgU2NoZW1hUHJpbWl0aXZlVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtbW9kZWxzJztcclxuaW1wb3J0IHsgU2NoZW1hRGF0YVR5cGVTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtc3RvcmUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uQWxlcnQgfSBmcm9tICcuLi8uLi92YWxpZGF0aW9uLWFsZXJ0L3ZhbGlkYXRpb24tYWxlcnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vb2JqZWN0LWRlZmF1bHQtZm9ybS1maWVsZC1sb2FkZXIuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPYmplY3REZWZhdWx0Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50IGV4dGVuZHMgT2JqZWN0UHJvcGVydHlTY2hlbWFGaWVsZExvYWRlckNvbXBvbmVudCB7XHJcbiAgICBwdWJsaWMgYWxlcnQ6IFZhbGlkYXRpb25BbGVydDtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyRGF0YVR5cGUoKSB7XHJcbiAgICAgICAgU2NoZW1hRGF0YVR5cGVTdG9yZS5yZWdpc3RlckRhdGFUeXBlKHtcclxuICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5PYmplY3QsXHJcbiAgICAgICAgICAgIGZvcm1hdDogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICBpc0RlZmF1bHRGb3JtYXQ6IHRydWUsXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSXRcXCdzIGEgc3BlY2lhbCBmb3JtIGZpZWxkIGNvbnRyb2wgdGhhdCByZWN1cnNpdmVseSByZW5kZXJzIGFsbCB0aGUgcHJvcGVydGllcyBhcyBmaWVsZHMuICdcclxuICAgICAgICAgICAgICAgICsgJ1RoaXMgaXMgbGlrZSBhIGNvbnRhaW5lciBvZiBvdGhlciBzY2hlbWEgaXRlbXMuJyxcclxuICAgICAgICAgICAgbG9hZGVyQ29tcG9uZW50OiBPYmplY3REZWZhdWx0Rm9ybUZpZWxkTG9hZGVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBvcHRpb25Qcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU2NoZW1hUHJpbWl0aXZlVHlwZS5TdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAncmVzb3VyY2Utc3RyaW5nLXBpY2tlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3N1YlRpdGxlJyxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ2FjdHVhbF9zdHJpbmc6U3VidGl0bGUnXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ3Jlc291cmNlLXN0cmluZy1waWNrZXInLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdhZGRpdGlvbmFsRGVzY3JpcHRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnYWN0dWFsX3N0cmluZzpBZGRpdGlvbmFsIERlc2NyaXB0aW9uJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICd0ZXh0Ym94JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYnVzeUNvbmRpdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdhY3R1YWxfc3RyaW5nOkJ1c3kgQ29uZGl0aW9uJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICd0ZXh0Ym94JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY29sdW1uQ291bnQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9iamVjdFR5cGUuQ29sdW1uQ291bnQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogMVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLkJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnY2hlY2tib3gnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdoaWRlSGVhZGVyJyxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PYmplY3RUeXBlLkhpZGVIZWFkZXInXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgPFNjaGVtYU9iamVjdFByb3BlcnR5PntcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLk9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY29sbGFwc2libGUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9iamVjdFR5cGUuQ29sbGFwc2libGUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNjaGVtYVByaW1pdGl2ZVR5cGUuQm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2NoZWNrYm94JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd5ZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT2JqZWN0VHlwZS5ZZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogJ2NvbWJvYm94JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdzdGF0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ3Jlc291cmNlczpzdHJpbmdzOk1zZnRTbWVTaGVsbC5Bbmd1bGFyLlNjaGVtYUZvcm0uRWRpdG9yLlByb3BlcnR5Rm9ybS5PYmplY3RUeXBlLlN0YXRlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ2NvbGxhcHNlZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdyZXNvdXJjZXM6c3RyaW5nczpNc2Z0U21lU2hlbGwuQW5ndWxhci5TY2hlbWFGb3JtLkVkaXRvci5Qcm9wZXJ0eUZvcm0uT2JqZWN0VHlwZS5Db2xsYXBzZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdjb2xsYXBzZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAncmVzb3VyY2VzOnN0cmluZ3M6TXNmdFNtZVNoZWxsLkFuZ3VsYXIuU2NoZW1hRm9ybS5FZGl0b3IuUHJvcGVydHlGb3JtLk9iamVjdFR5cGUuRXhwYW5kZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdleHBhbmRlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgcHJlZGVmaW5lZE9iamVjdFByb3BlcnRpZXM6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTY2hlbWFQcmltaXRpdmVUeXBlLlN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICd0ZXh0Ym94J1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHN1cGVyLmlzVmFsaWQoKTtcclxuICAgICAgICB0aGlzLmFsZXJ0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbVZhbGlkYXRpb25IYW5kbGVyID0gdGhpcy5wcm9wZXJ0eVNjaGVtYS5jdXN0b21WYWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnJlc29sdmVGdW5jdGlvbih0aGlzLnByb3BlcnR5U2NoZW1hLmN1c3RvbVZhbGlkYXRpb24pO1xyXG4gICAgICAgICAgICBpZiAoY3VzdG9tVmFsaWRhdGlvbkhhbmRsZXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGN1c3RvbVZhbGlkYXRpb25IYW5kbGVyKHRoaXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydCA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvdWxkU2hvd0hlYWRlcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISh0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmhpZGVIZWFkZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0NvbGxhcHNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmNvbGxhcHNpYmxlICYmIHRoaXMucHJvcGVydHlTY2hlbWEub3B0aW9ucy5jb2xsYXBzaWJsZS55ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEodGhpcy5pc0NvbGxhcHNpYmxlKCkgJiYgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmNvbGxhcHNpYmxlLnN0YXRlID09PSAnY29sbGFwc2VkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsaWNrVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29sbGFwc2libGUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BlcnR5U2NoZW1hLm9wdGlvbnMuY29sbGFwc2libGUuc3RhdGUgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmNvbGxhcHNpYmxlLnN0YXRlID09PSAnZXhwYW5kZWQnID8gJ2NvbGxhcHNlZCcgOiAnZXhwYW5kZWQnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvdWxkU2hvd0xvYWRpbmdXaGVlbCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zICYmIHRoaXMucHJvcGVydHlTY2hlbWEub3B0aW9ucy5idXN5Q29uZGl0aW9uXHJcbiAgICAgICAgICAgICYmIHRoaXMuZXZhbEV4cHJlc3Npb24odGhpcy5wcm9wZXJ0eVNjaGVtYS5vcHRpb25zLmJ1c3lDb25kaXRpb24pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlXCIgW2NsYXNzLnNtZS1tYXJnaW4tYm90dG9tLXhsXT1cInNob3VsZFNob3dMb2FkaW5nV2hlZWwoKVwiXHJcbiAgICAgW2NsYXNzLnNtZS1oZWlnaHQteHh4bF09XCJzaG91bGRTaG93TG9hZGluZ1doZWVsKClcIiBbY2xhc3Muc21lLXdpZHRoLXh4eGxdPVwic2hvdWxkU2hvd0xvYWRpbmdXaGVlbCgpXCI+XHJcbiAgPHNtZS1sb2FkaW5nLXdoZWVsICpuZ0lmPVwic2hvdWxkU2hvd0xvYWRpbmdXaGVlbCgpXCI+PC9zbWUtbG9hZGluZy13aGVlbD5cclxuICA8ZmllbGRzZXQgKm5nSWY9XCIhc2hvdWxkU2hvd0xvYWRpbmdXaGVlbCgpXCJcclxuICAgICAgICAgICAgW3NtZURpc2FibGVkXT1cInByb3BlcnR5U2NoZW1hLmRpc2FibGVkQ29uZGl0aW9uICYmIGV2YWxFeHByZXNzaW9uKHByb3BlcnR5U2NoZW1hLmRpc2FibGVkQ29uZGl0aW9uKVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luOjAgIWltcG9ydGFudFwiPlxyXG4gICAgPGEgKm5nSWY9XCJzaG91bGRTaG93SGVhZGVyKCkgJiYgcHJvcGVydHlTY2hlbWEubGFiZWwgJiYgaXNDb2xsYXBzaWJsZSgpXCIgKGNsaWNrKT0nY2xpY2tUb2dnbGUoKSdcclxuICAgICAgIGNsYXNzPVwic21lLXBhZGRpbmctYm90dG9tLXhzIHNtZS1hcnJhbmdlLXN0YWNrLWhcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzbWUtcG9zaXRpb24tZmxleC1ub25lIHNtZS1pY29uIHNtZS1wYWRkaW5nLXJpZ2h0LXh4c1wiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc21lLWljb24tY2hldnJvbkRvd24nOmlzRXhwYW5kZWQoKSwgJ3NtZS1pY29uLWNoZXZyb25SaWdodCc6IWlzRXhwYW5kZWQoKX1cIj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8YiBjbGFzcz1cInNtZS1wb3NpdGlvbi1mbGV4LWF1dG8gc21lLW1hcmdpbi10b3AteHh4c1wiPnt7bG9jYWxpemUocHJvcGVydHlTY2hlbWEubGFiZWwpfX08L2I+XHJcbiAgICA8L2E+XHJcbiAgICA8YiAqbmdJZj1cInNob3VsZFNob3dIZWFkZXIoKSAmJiBwcm9wZXJ0eVNjaGVtYS5sYWJlbCAmJiAhaXNDb2xsYXBzaWJsZSgpXCJcclxuICAgICAgIGNsYXNzPVwic21lLWxheW91dC1ibG9jayBzbWUtbWFyZ2luLXRvcC14eHhzIHNtZS1wYWRkaW5nLWJvdHRvbS14c1wiPnt7bG9jYWxpemUocHJvcGVydHlTY2hlbWEubGFiZWwpfX08L2I+XHJcbiAgICA8cCAqbmdJZj1cInByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5zdWJUaXRsZVwiIGNsYXNzPVwic21lLW1hcmdpbi12ZXJ0aWNhbC14c1wiPlxyXG4gICAgICB7e2xvY2FsaXplKHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuc3ViVGl0bGUpfX08L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwic21lLW9iamVjdC1maWVsZC1jb250ZW50XCIgW2NsYXNzLnNtZS1sYXlvdXQtbm9uZV09XCIhaXNFeHBhbmRlZCgpXCI+XHJcbiAgICAgIDxzbWUtbGF5b3V0IFtpdGVtVmVydGljYWxTcGFjZV09XCIwXCIgW2l0ZW1Ib3Jpem9udGFsU3BhY2VdPVwiMTBcIj5cclxuICAgICAgICA8c21lLWxheW91dC1kZWZpbml0aW9uIG5hbWU9XCJ3aWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cIihwcm9wZXJ0eVNjaGVtYS5vcHRpb25zICYmIHByb3BlcnR5U2NoZW1hLm9wdGlvbnMuY29sdW1uQ291bnQpIHx8IDFcIj5cclxuICAgICAgICA8L3NtZS1sYXlvdXQtZGVmaW5pdGlvbj5cclxuICAgICAgICA8c21lLWxheW91dC1pdGVtICpuZ0Zvcj1cImxldCBwcm9wZXJ0eSBvZiBwcm9wZXJ0eVNjaGVtYS5wcm9wZXJ0aWVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICA8c21lLXNjaGVtYS1maWVsZC1ob3N0ICpuZ0lmPVwiIShwcm9wZXJ0eS5mb3JtYXQ9PScqZGF0YS1vbmx5JyB8fCAocHJvcGVydHkuaGlkZUNvbmRpdGlvbiAmJiBldmFsRXhwcmVzc2lvbihwcm9wZXJ0eS5oaWRlQ29uZGl0aW9uKSkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzbWUtbGF5b3V0LXJlbGF0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNtZS1zY2hlbWEtZmllbGQtaG9zdC1ub3QtZmlyc3RdPVwiaT49KHByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5jb2x1bW5Db3VudCB8fCAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wZXJ0eVNjaGVtYV09XCJwcm9wZXJ0eVwiIFtjb250ZXh0XT1cImNvbnRleHRcIiBbKGRhdGEpXT1cImRhdGEgJiYgZGF0YVtwcm9wZXJ0eS5uYW1lXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcHJvcGVydHktbmFtZV09XCJwcm9wZXJ0eS5uYW1lXCI+XHJcbiAgICAgICAgICA8L3NtZS1zY2hlbWEtZmllbGQtaG9zdD5cclxuICAgICAgICA8L3NtZS1sYXlvdXQtaXRlbT5cclxuICAgICAgPC9zbWUtbGF5b3V0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8cCAqbmdJZj1cInByb3BlcnR5U2NoZW1hLm9wdGlvbnMgJiYgcHJvcGVydHlTY2hlbWEub3B0aW9ucy5hZGRpdGlvbmFsRGVzY3JpcHRpb25cIiBjbGFzcz1cInNtZS1tYXJnaW4tdG9wLXhzXCI+XHJcbiAgICAgIHt7bG9jYWxpemUocHJvcGVydHlTY2hlbWEub3B0aW9ucy5hZGRpdGlvbmFsRGVzY3JpcHRpb24pfX08L3A+XHJcbiAgPC9maWVsZHNldD5cclxuPC9kaXY+XHJcbjxzbWUtdmFsaWRhdGlvbi1hbGVydCBbYWxlcnRdPVwiYWxlcnRcIj48L3NtZS12YWxpZGF0aW9uLWFsZXJ0PlxyXG4iXX0=