@wertzui/ngx-restworld-client 15.3.2 → 15.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/restworld-inputs/restworld-inputs.mjs +13 -4
- package/fesm2022/wertzui-ngx-restworld-client.mjs +12 -3
- package/fesm2022/wertzui-ngx-restworld-client.mjs.map +1 -1
- package/lib/components/restworld-inputs/restworld-inputs.d.ts +3 -1
- package/lib/components/restworld-inputs/restworld-inputs.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -221,7 +221,16 @@ export class RestWorldInputDropdownComponent {
|
|
|
221
221
|
* The property to display.
|
|
222
222
|
* @required
|
|
223
223
|
*/
|
|
224
|
-
property
|
|
224
|
+
get property() {
|
|
225
|
+
return this._property;
|
|
226
|
+
}
|
|
227
|
+
set property(value) {
|
|
228
|
+
this._property = value;
|
|
229
|
+
// This is for the case that the property is changed after the component is initialized.
|
|
230
|
+
if (value?.options !== undefined && this._formControl !== undefined)
|
|
231
|
+
this.setInitialSelectedOptionsElementForProperty();
|
|
232
|
+
}
|
|
233
|
+
_property;
|
|
225
234
|
/**
|
|
226
235
|
* The name of the API to use for the property.
|
|
227
236
|
* @required
|
|
@@ -556,11 +565,11 @@ export class RestWorldInputSimpleComponent {
|
|
|
556
565
|
this._formControl = formGroup.controls[this.property.name];
|
|
557
566
|
}
|
|
558
567
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: RestWorldInputSimpleComponent, deps: [{ token: i4.ControlContainer }], target: i0.ɵɵFactoryTarget.Component });
|
|
559
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: RestWorldInputSimpleComponent, selector: "rw-input-simple", inputs: { property: "property" }, ngImport: i0, template: "<div [ngSwitch]=\"property.type\">\n\n <input *ngSwitchCase=\"PropertyType.Hidden\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"hidden\" [value]=\"property.value\" />\n\n <input *ngSwitchCase=\"PropertyType.Text\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <textarea *ngSwitchCase=\"PropertyType.Textarea\" [formControlName]=\"property.name\" [id]=\"property.name\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\" [class.p-disabled]=\"property.readOnly\" [cols]=\"property.cols\" [rows]=\"property.rows\"></textarea>\n\n <input *ngSwitchCase=\"PropertyType.Search\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"search\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Tel\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"tel\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Url\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"url\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Email\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"email\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Password\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"password\" pPassword class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <p-calendar *ngSwitchCase=\"PropertyType.Date\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.Month\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <input *ngSwitchCase=\"PropertyType.Week\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"week\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <p-calendar *ngSwitchCase=\"PropertyType.Time\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.DatetimeLocal\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-inputNumber *ngSwitchCase=\"PropertyType.Number\" [formControlName]=\"property.name\" [id]=\"property.name\" mode=\"decimal\" [showButtons]=\"!property.readOnly\" class=\"w-full\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-inputNumber>\n\n <input *ngSwitchCase=\"PropertyType.Range\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"range\" [min]=\"property.min\" [max]=\"property.max\" [step]=\"property.step\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Color\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"color\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <ng-container *ngSwitchCase=\"PropertyType.Bool\">\n <p-checkbox *ngIf=\"property.required\" [binary]=\"true\" [formControl]=\"formControl\" [id]=\"property.name\" [readonly]=\"property.readOnly!\"></p-checkbox>\n <p-triStateCheckbox *ngIf=\"!property.required\" [formControl]=\"formControl\" [id]=\"property.name\" [readonly]=\"property.readOnly!\"></p-triStateCheckbox>\n </ng-container>\n\n <p-calendar *ngSwitchCase=\"PropertyType.DatetimeOffset\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.Duration\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <rw-image *ngSwitchCase=\"PropertyType.Image\" [formControlName]=\"property.name\" [property]=\"$any(property)\"></rw-image>\n\n <rw-file *ngSwitchCase=\"PropertyType.File\" [formControlName]=\"property.name\" [fileName]=\"property.name\" [accept]=\"$any(property.placeholder)\"></rw-file>\n\n <input *ngSwitchDefault [formControlName]=\"property.name\" [id]=\"property.name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n</div>\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"], dependencies: [{ kind: "component", type: i17.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: i18.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i19.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "directive", type: i20.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i21.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabel", "ariaLabelledBy", "variant", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon", "autofocus"], outputs: ["onChange"] }, { kind: "component", type: i22.RestWorldFileComponent, selector: "rw-file", inputs: ["accept", "fileName"] }, { kind: "component", type: i23.RestWorldImageComponent, selector: "rw-image", inputs: ["property"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
568
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: RestWorldInputSimpleComponent, selector: "rw-input-simple", inputs: { property: "property" }, ngImport: i0, template: "<div [ngSwitch]=\"property.type\">\n\n <input *ngSwitchCase=\"PropertyType.Hidden\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"hidden\" [value]=\"property.value\" />\n\n <input *ngSwitchCase=\"PropertyType.Text\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <textarea *ngSwitchCase=\"PropertyType.Textarea\" [formControlName]=\"property.name\" [id]=\"property.name\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\" [class.p-disabled]=\"property.readOnly\" [cols]=\"property.cols\" [rows]=\"property.rows\"></textarea>\n\n <input *ngSwitchCase=\"PropertyType.Search\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"search\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Tel\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"tel\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Url\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"url\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Email\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"email\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Password\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"password\" pPassword class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <p-calendar *ngSwitchCase=\"PropertyType.Date\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.Month\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <input *ngSwitchCase=\"PropertyType.Week\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"week\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <p-calendar *ngSwitchCase=\"PropertyType.Time\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.DatetimeLocal\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-inputNumber *ngSwitchCase=\"PropertyType.Number\" [formControlName]=\"property.name\" [id]=\"property.name\" mode=\"decimal\" [min]=\"property.min\" [max]=\"property.max\" [step]=\"property.step\" [showButtons]=\"!property.readOnly\" class=\"w-full\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-inputNumber>\n\n <input *ngSwitchCase=\"PropertyType.Range\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"range\" [min]=\"property.min\" [max]=\"property.max\" [step]=\"property.step\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Color\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"color\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <ng-container *ngSwitchCase=\"PropertyType.Bool\">\n <p-checkbox *ngIf=\"property.required\" [binary]=\"true\" [formControl]=\"formControl\" [id]=\"property.name\" [readonly]=\"property.readOnly!\"></p-checkbox>\n <p-triStateCheckbox *ngIf=\"!property.required\" [formControl]=\"formControl\" [id]=\"property.name\" [readonly]=\"property.readOnly!\"></p-triStateCheckbox>\n </ng-container>\n\n <p-calendar *ngSwitchCase=\"PropertyType.DatetimeOffset\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.Duration\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <rw-image *ngSwitchCase=\"PropertyType.Image\" [formControlName]=\"property.name\" [property]=\"$any(property)\"></rw-image>\n\n <rw-file *ngSwitchCase=\"PropertyType.File\" [formControlName]=\"property.name\" [fileName]=\"property.name\" [accept]=\"$any(property.placeholder)\"></rw-file>\n\n <input *ngSwitchDefault [formControlName]=\"property.name\" [id]=\"property.name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n</div>\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"], dependencies: [{ kind: "component", type: i17.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: i18.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i19.InputNumber, selector: "p-inputNumber", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "style", "placeholder", "size", "maxlength", "tabindex", "title", "ariaLabelledBy", "ariaLabel", "ariaRequired", "name", "required", "autocomplete", "min", "max", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "step", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "variant", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus", "disabled"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "directive", type: i20.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i21.TriStateCheckbox, selector: "p-triStateCheckbox", inputs: ["disabled", "name", "ariaLabel", "ariaLabelledBy", "variant", "tabindex", "inputId", "style", "styleClass", "label", "readonly", "checkboxTrueIcon", "checkboxFalseIcon", "autofocus"], outputs: ["onChange"] }, { kind: "component", type: i22.RestWorldFileComponent, selector: "rw-file", inputs: ["accept", "fileName"] }, { kind: "component", type: i23.RestWorldImageComponent, selector: "rw-image", inputs: ["property"] }], viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }] });
|
|
560
569
|
}
|
|
561
570
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: RestWorldInputSimpleComponent, decorators: [{
|
|
562
571
|
type: Component,
|
|
563
|
-
args: [{ selector: 'rw-input-simple', viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], template: "<div [ngSwitch]=\"property.type\">\n\n <input *ngSwitchCase=\"PropertyType.Hidden\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"hidden\" [value]=\"property.value\" />\n\n <input *ngSwitchCase=\"PropertyType.Text\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <textarea *ngSwitchCase=\"PropertyType.Textarea\" [formControlName]=\"property.name\" [id]=\"property.name\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\" [class.p-disabled]=\"property.readOnly\" [cols]=\"property.cols\" [rows]=\"property.rows\"></textarea>\n\n <input *ngSwitchCase=\"PropertyType.Search\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"search\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Tel\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"tel\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Url\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"url\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Email\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"email\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Password\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"password\" pPassword class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <p-calendar *ngSwitchCase=\"PropertyType.Date\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.Month\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <input *ngSwitchCase=\"PropertyType.Week\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"week\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <p-calendar *ngSwitchCase=\"PropertyType.Time\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.DatetimeLocal\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-inputNumber *ngSwitchCase=\"PropertyType.Number\" [formControlName]=\"property.name\" [id]=\"property.name\" mode=\"decimal\" [showButtons]=\"!property.readOnly\" class=\"w-full\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-inputNumber>\n\n <input *ngSwitchCase=\"PropertyType.Range\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"range\" [min]=\"property.min\" [max]=\"property.max\" [step]=\"property.step\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Color\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"color\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <ng-container *ngSwitchCase=\"PropertyType.Bool\">\n <p-checkbox *ngIf=\"property.required\" [binary]=\"true\" [formControl]=\"formControl\" [id]=\"property.name\" [readonly]=\"property.readOnly!\"></p-checkbox>\n <p-triStateCheckbox *ngIf=\"!property.required\" [formControl]=\"formControl\" [id]=\"property.name\" [readonly]=\"property.readOnly!\"></p-triStateCheckbox>\n </ng-container>\n\n <p-calendar *ngSwitchCase=\"PropertyType.DatetimeOffset\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.Duration\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <rw-image *ngSwitchCase=\"PropertyType.Image\" [formControlName]=\"property.name\" [property]=\"$any(property)\"></rw-image>\n\n <rw-file *ngSwitchCase=\"PropertyType.File\" [formControlName]=\"property.name\" [fileName]=\"property.name\" [accept]=\"$any(property.placeholder)\"></rw-file>\n\n <input *ngSwitchDefault [formControlName]=\"property.name\" [id]=\"property.name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n</div>\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"] }]
|
|
572
|
+
args: [{ selector: 'rw-input-simple', viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }], template: "<div [ngSwitch]=\"property.type\">\n\n <input *ngSwitchCase=\"PropertyType.Hidden\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"hidden\" [value]=\"property.value\" />\n\n <input *ngSwitchCase=\"PropertyType.Text\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <textarea *ngSwitchCase=\"PropertyType.Textarea\" [formControlName]=\"property.name\" [id]=\"property.name\" pInputTextarea class=\"w-full p-inputtextarea p-inputtext p-component p-element\" [class.p-disabled]=\"property.readOnly\" [cols]=\"property.cols\" [rows]=\"property.rows\"></textarea>\n\n <input *ngSwitchCase=\"PropertyType.Search\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"search\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Tel\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"tel\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Url\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"url\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Email\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"email\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Password\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"password\" pPassword class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <p-calendar *ngSwitchCase=\"PropertyType.Date\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showWeek]=\"true\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.Month\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showWeek]=\"false\" view=\"month\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <input *ngSwitchCase=\"PropertyType.Week\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"week\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <p-calendar *ngSwitchCase=\"PropertyType.Time\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.DatetimeLocal\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-inputNumber *ngSwitchCase=\"PropertyType.Number\" [formControlName]=\"property.name\" [id]=\"property.name\" mode=\"decimal\" [min]=\"property.min\" [max]=\"property.max\" [step]=\"property.step\" [showButtons]=\"!property.readOnly\" class=\"w-full\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-inputNumber>\n\n <input *ngSwitchCase=\"PropertyType.Range\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"range\" [min]=\"property.min\" [max]=\"property.max\" [step]=\"property.step\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <input *ngSwitchCase=\"PropertyType.Color\" [formControlName]=\"property.name\" [id]=\"property.name\" type=\"color\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n\n <ng-container *ngSwitchCase=\"PropertyType.Bool\">\n <p-checkbox *ngIf=\"property.required\" [binary]=\"true\" [formControl]=\"formControl\" [id]=\"property.name\" [readonly]=\"property.readOnly!\"></p-checkbox>\n <p-triStateCheckbox *ngIf=\"!property.required\" [formControl]=\"formControl\" [id]=\"property.name\" [readonly]=\"property.readOnly!\"></p-triStateCheckbox>\n </ng-container>\n\n <p-calendar *ngSwitchCase=\"PropertyType.DatetimeOffset\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"dateFormat\" [showTime]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <p-calendar *ngSwitchCase=\"PropertyType.Duration\" [formControlName]=\"property.name\" [id]=\"property.name\" [dateFormat]=\"timeFormat\" [showTime]=\"true\" [timeOnly]=\"true\" [showWeek]=\"false\" [showIcon]=\"true\" styleClass=\"w-full\" [class.p-disabled]=\"property.readOnly\"></p-calendar>\n\n <rw-image *ngSwitchCase=\"PropertyType.Image\" [formControlName]=\"property.name\" [property]=\"$any(property)\"></rw-image>\n\n <rw-file *ngSwitchCase=\"PropertyType.File\" [formControlName]=\"property.name\" [fileName]=\"property.name\" [accept]=\"$any(property.placeholder)\"></rw-file>\n\n <input *ngSwitchDefault [formControlName]=\"property.name\" [id]=\"property.name\" type=\"text\" pInputText class=\"w-full\" [class.p-disabled]=\"property.readOnly\" />\n</div>\n", styles: [".p-inputtext.ng-touched.ng-invalid{border-color:#e24c4c}\n"] }]
|
|
564
573
|
}], ctorParameters: () => [{ type: i4.ControlContainer }], propDecorators: { property: [{
|
|
565
574
|
type: Input,
|
|
566
575
|
args: [{ required: true }]
|
|
@@ -598,4 +607,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
598
607
|
type: Input,
|
|
599
608
|
args: [{ required: true }]
|
|
600
609
|
}] } });
|
|
601
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWlucHV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtaW5wdXRzL3Jlc3R3b3JsZC1pbnB1dHMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtZm9ybS1lbGVtZW50L3Jlc3R3b3JsZC1mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtaW5wdXQvcmVzdHdvcmxkLWlucHV0LmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24vcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24uY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24vcmVzdHdvcmxkLWlucHV0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LW9iamVjdC9yZXN0d29ybGQtaW5wdXQtb2JqZWN0LmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LXNpbXBsZS9yZXN0d29ybGQtaW5wdXQtc2ltcGxlLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LXRlbXBsYXRlL3Jlc3R3b3JsZC1pbnB1dC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hJLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQXFDLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUgsT0FBTyxFQUFlLGNBQWMsRUFBMkIsY0FBYyxFQUFZLFlBQVksRUFBa0UsTUFBTSx5QkFBeUIsQ0FBQztBQU12TSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUN4RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWxEOzs7Ozs7R0FNRztBQU9ILE1BQU0sT0FBTyw2QkFBNkI7SUFDeEM7OztPQUdHO0lBRUgsUUFBUSxDQUFhO0lBRXJCOzs7O09BSUc7SUFFSCxPQUFPLENBQVU7dUdBZE4sNkJBQTZCOzJGQUE3Qiw2QkFBNkIsNkdDMUIxQyx1UEFJQSw4RURzRGEsdUJBQXVCLHNNQWxDbkIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFB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OztBQW9EM0I7Ozs7OztHQU1HO0FBT0gsTUFBTSxPQUFPLCtCQUErQjtJQUMxQzs7OztPQUlHO0lBRUgsT0FBTyxDQUFVO0lBRWpCOzs7O09BSUc7SUFFSCxRQUFRLENBQVk7dUdBZlQsK0JBQStCOzJGQUEvQiwrQkFBK0IsK0dPbm9CNUMsa0lBQTBILHVMUDBCN0csNkJBQTZCLGtGQXVtQnpCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUM7OzJGQUVwRSwrQkFBK0I7a0JBTjNDLFNBQVM7K0JBQ0UsbUJBQW1CLGlCQUdkLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUM7OEJBUy9FLE9BQU87c0JBRE4sS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBU3pCLFFBQVE7c0JBRFAsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3JtR3JvdXBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlLCBOdW1iZXJUZW1wbGF0ZSwgT3B0aW9ucywgT3B0aW9uc0l0ZW1EdG8sIFByb2JsZW1EZXRhaWxzLCBQcm9wZXJ0eSwgUHJvcGVydHlUeXBlLCBSZXNvdXJjZUR0bywgUmVzb3VyY2VPZkR0bywgU2ltcGxlVmFsdWUsIFRlbXBsYXRlLCBUZW1wbGF0ZUR0byB9IGZyb20gJ0B3ZXJ0enVpL25neC1oYWwtY2xpZW50JztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXZlbnRzJztcclxuaW1wb3J0IHsgUHJvcGVydHlUZW1wbGF0ZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGVtcGxhdGluZyc7XHJcbmltcG9ydCB7IFJlc3RXb3JsZENsaWVudCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQnO1xyXG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzdHdvcmxkLWNsaWVudC1jb2xsZWN0aW9uJztcclxuaW1wb3J0IHsgUHJvcGVydHlXaXRoT3B0aW9ucywgUHJvcGVydHlXaXRoSW1hZ2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvc3BlY2lhbC1wcm9wZXJ0aWVzJ1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJy4uLy4uL3V0aWwvZGVib3VuY2UnO1xyXG5pbXBvcnQgeyBNdWx0aVNlbGVjdCB9IGZyb20gJ3ByaW1lbmcvbXVsdGlzZWxlY3QnO1xyXG5cclxuLyoqXHJcbiAqIEEgZm9ybSBlbGVtZW50IHdpdGggYSBsYWJlbCB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIGEgcHJvcGVydHkgaW4gYSBmb3JtIHRlbXBsYXRlLlxyXG4gKiBUaGlzIG1heSBhbHNvIGJlIGEgY29tcGxleCBvYmplY3Qgb3IgYSBjb2xsZWN0aW9uIGluIHdoaWNoIGNhc2UgbXVsdGlwbGUgYW5kIG5lc3RlZCBpbnB1dCBlbGVtZW50cyBtYXkgYmUgcmVuZGVyZWQuXHJcbiAqIElmIHlvdSB3YW50IGEgZm9ybSBlbGVtZW50IHdpdGhvdXQgYSBsYWJlbCwgdXNlIHtAbGluayBSZXN0V29ybGRGb3JtSW5wdXR9IGA8cnctaW5wdXQ+YC5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWZvcm0tZWxlbWVudCBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1mb3JtLWVsZW1lbnQ+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWZvcm0tZWxlbWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1mb3JtLWVsZW1lbnQvcmVzdHdvcmxkLWZvcm0tZWxlbWVudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWZvcm0tZWxlbWVudC9yZXN0d29ybGQtZm9ybS1lbGVtZW50LmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRGb3JtRWxlbWVudENvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIHByb3BlcnR5IHRvIGRpc3BsYXkuXHJcbiAgICogQHJlcXVpcmVkXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwcm9wZXJ0eSE6IFRQcm9wZXJ0eTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSB0byB1c2UgZm9yIHRoZSBwcm9wZXJ0eS5cclxuICAgKiBAcmVxdWlyZWRcclxuICAgKiBAcmVtYXJrcyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBBUEkgYXMgZGVmaW5lZCBpbiB0aGUgYFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb25gLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgYXBpTmFtZSE6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgZm9ybSBpbnB1dCBlbGVtZW50IHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gYSBwcm9wZXJ0eSBpbiBhIGZvcm0gdGVtcGxhdGUuXHJcbiAqIFRoaXMgbWF5IGFsc28gYmUgYSBjb21wbGV4IG9iamVjdCBvciBhIGNvbGxlY3Rpb24gaW4gd2hpY2ggY2FzZSBtdWx0aXBsZSBhbmQgbmVzdGVkIGlucHV0IGVsZW1lbnRzIG1heSBiZSByZW5kZXJlZC5cclxuICogSWYgeW91IGFsc28gd2FudCBhIGxhYmVsLCB1c2Uge0BsaW5rIFJlc3RXb3JsZEZvcm1FbGVtZW50fSBgPHJ3LWZvcm0tZWxlbWVudD5gLlxyXG4gKiBZb3UgY2FuIGFsc28gdXNlIG9uZSBvZiB0aGUgZGlmZmVyZW50IFJlc3RXb3JsZElucHV0Li4uIGA8cnctaW5wdXQtLi4uPmAgZWxlbWVudHMgdG8gcmVuZGVyIGEgc3BlY2lmaWMgaW5wdXQsXHJcbiAqIGJ1dCBpdCBpcyBhZHZpc2VkIHRvIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGlucHV0IHRocm91Z2ggdGhlIHBhc3NlZCBpbiBwcm9wZXJ0eS5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWlucHV0IFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWlucHV0PlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1pbnB1dC9yZXN0d29ybGQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1pbnB1dC9yZXN0d29ybGQtaW5wdXQuY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZElucHV0Q29tcG9uZW50PFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4+IHtcclxuICAvKipcclxuICAgKiBUaGUgcHJvcGVydHkgdG8gZGlzcGxheS5cclxuICAgKiBAcmVxdWlyZWRcclxuICAgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHByb3BlcnR5ITogVFByb3BlcnR5O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVBJIHRvIHVzZSBmb3IgdGhlIHByb3BlcnR5LlxyXG4gICAqIEByZXF1aXJlZFxyXG4gICAqIEByZW1hcmtzIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIEFQSSBhcyBkZWZpbmVkIGluIHRoZSBgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbmAuXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgZ2V0IFByb3BlcnR5VHlwZSgpIHtcclxuICAgIHJldHVybiBQcm9wZXJ0eVR5cGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IFByb3BlcnR5V2l0aE9wdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gUHJvcGVydHlXaXRoT3B0aW9uczxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+O1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqIFRoZSBjb2xsZWN0aW9uIHN1cHBvcnRzIGRyYWcgJiBkcm9wIHRvIHJlIG9yZGVyIHRoZSBlbGVtZW50cyBhbmQgY2FuIGFsc28gYmUgbmVzdGVkLlxyXG4gKiBAcmVtYXJrcyBJdCBpcyBhZHZpc2VkIHRvIHVzZSB7QGxpbmsgUmVzdFdvcmxkSW5wdXRDb21wb25lbnR9IGA8cnctaW5wdXQ+YCBhbmQgY29udHJvbCB0aGUgcmVuZGVyZWQgaW5wdXRzIHdpdGggdGhlIHBhc3NlZCBpbiBwcm9wZXJ0eVxyXG4gKiBpbnN0ZWFkIG9mIHVzaW5nIHRoaXMgY29tcG9uZW50IGRpcmVjdGx5LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8cnctaW5wdXQtY29sbGVjdGlvbiBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1pbnB1dC1jb2xsZWN0aW9uPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1pbnB1dC1jb2xsZWN0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24vcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1pbnB1dC1jb2xsZWN0aW9uL3Jlc3R3b3JsZC1pbnB1dC1jb2xsZWN0aW9uLmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRJbnB1dENvbGxlY3Rpb25Db21wb25lbnQ8VCBleHRlbmRzIHsgW0sgaW4ga2V5b2YgVF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47IH0+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHByb3BlcnR5IHRvIGRpc3BsYXkuXHJcbiAgICogQHJlcXVpcmVkXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwcm9wZXJ0eSE6IFByb3BlcnR5ICYgeyBfdGVtcGxhdGVzOiB7IGRlZmF1bHQ6IFRlbXBsYXRlIH0gfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSB0byB1c2UgZm9yIHRoZSBwcm9wZXJ0eS5cclxuICAgKiBAcmVxdWlyZWRcclxuICAgKiBAcmVtYXJrcyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBBUEkgYXMgZGVmaW5lZCBpbiB0aGUgYFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb25gLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRDb2xsZWN0aW9uJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRDb2xsZWN0aW9uUmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG5cclxuICBwcml2YXRlIF90ZW1wbGF0ZXM6IE51bWJlclRlbXBsYXRlW10gPSBbXTtcclxuICBwdWJsaWMgZ2V0IHRlbXBsYXRlcygpOiBOdW1iZXJUZW1wbGF0ZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9kZWZhdWx0VGVtcGxhdGU/OiBUZW1wbGF0ZTtcclxuICBwdWJsaWMgZ2V0IGRlZmF1bHRUZW1wbGF0ZSgpOiBUZW1wbGF0ZSB7XHJcbiAgICBpZiAodGhpcy5fZGVmYXVsdFRlbXBsYXRlID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGRlZmF1bHQgdGVtcGxhdGUgZm91bmQuXCIpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbm5lckZvcm1BcnJheT86IEZvcm1BcnJheTxGb3JtR3JvdXA8VD4+O1xyXG4gIHB1YmxpYyBnZXQgaW5uZXJGb3JtQXJyYXkoKSB7XHJcbiAgICBpZiAodGhpcy5faW5uZXJGb3JtQXJyYXkgPT09IHVuZGVmaW5lZClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybUdyb3VwIGlzIG5vdCBzZXQuXCIpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9pbm5lckZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1TZXJ2aWNlOiBGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5fY29udHJvbENvbnRhaW5lci5jb250cm9sIGFzIEZvcm1Hcm91cDxhbnk+O1xyXG4gICAgdGhpcy5faW5uZXJGb3JtQXJyYXkgPSBmb3JtR3JvdXAuY29udHJvbHNbdGhpcy5wcm9wZXJ0eS5uYW1lXSBhcyBGb3JtQXJyYXk8Rm9ybUdyb3VwPFQ+PjtcclxuICAgIHRoaXMuX3RlbXBsYXRlcyA9IFJlc3RXb3JsZElucHV0Q29sbGVjdGlvbkNvbXBvbmVudC5nZXRDb2xsZWN0aW9uRW50cnlUZW1wbGF0ZXModGhpcy5wcm9wZXJ0eSk7XHJcbiAgICB0aGlzLl9kZWZhdWx0VGVtcGxhdGUgPSB0aGlzLnByb3BlcnR5Ll90ZW1wbGF0ZXMuZGVmYXVsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGdldENvbGxlY3Rpb25FbnRyeVRlbXBsYXRlcyhwcm9wZXJ0eT86IFByb3BlcnR5KTogTnVtYmVyVGVtcGxhdGVbXSB7XHJcbiAgICBpZiAoIXByb3BlcnR5KVxyXG4gICAgICByZXR1cm4gW107XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5Ll90ZW1wbGF0ZXMpXHJcbiAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIucGFyc2VJbnQoa2V5KSkgJiYgTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIucGFyc2VJbnQodmFsdWU/LnRpdGxlID8/IFwiXCIpKSlcclxuICAgICAgLm1hcCgoWywgdmFsdWVdKSA9PiBuZXcgTnVtYmVyVGVtcGxhdGUodmFsdWUgYXMgVGVtcGxhdGVEdG8pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGROZXdJdGVtVG9Db2xsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWF4SW5kZXggPSBNYXRoLm1heCguLi5PYmplY3Qua2V5cyh0aGlzLnRlbXBsYXRlcylcclxuICAgICAgLm1hcChrZXkgPT4gTnVtYmVyLnBhcnNlSW50KGtleSkpXHJcbiAgICAgIC5maWx0ZXIoa2V5ID0+IE51bWJlci5pc1NhZmVJbnRlZ2VyKGtleSkpKTtcclxuICAgIGNvbnN0IG5leHRJbmRleCA9IG1heEluZGV4IDwgMCA/IDAgOiBtYXhJbmRleCArIDE7XHJcblxyXG4gICAgY29uc3QgY29waWVkVGVtcGxhdGVEdG8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmYXVsdFRlbXBsYXRlKSkgYXMgVGVtcGxhdGVEdG87XHJcbiAgICBjb3BpZWRUZW1wbGF0ZUR0by50aXRsZSA9IG5leHRJbmRleC50b1N0cmluZygpO1xyXG4gICAgY29uc3QgY29waWVkVGVtcGxhdGUgPSBuZXcgTnVtYmVyVGVtcGxhdGUoY29waWVkVGVtcGxhdGVEdG8pO1xyXG5cclxuICAgIHRoaXMudGVtcGxhdGVzW25leHRJbmRleF0gPSBjb3BpZWRUZW1wbGF0ZTtcclxuICAgIHRoaXMuaW5uZXJGb3JtQXJyYXkucHVzaCh0aGlzLl9mb3JtU2VydmljZS5jcmVhdGVGb3JtR3JvdXBGcm9tVGVtcGxhdGUodGhpcy5kZWZhdWx0VGVtcGxhdGUpIGFzIHVua25vd24gYXMgRm9ybUdyb3VwPFQ+KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVJdGVtRnJvbUNvbGxlY3Rpb24odGVtcGxhdGU6IE51bWJlclRlbXBsYXRlKTogdm9pZCB7XHJcbiAgICBpZiAodGVtcGxhdGUudGl0bGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGRlbGV0ZSBhIHRlbXBsYXRlIHdpdGhvdXQgYSB0aXRsZS5cIik7XHJcblxyXG4gICAgZGVsZXRlIHRoaXMudGVtcGxhdGVzW3RlbXBsYXRlLnRpdGxlXTtcclxuICAgIHRoaXMuaW5uZXJGb3JtQXJyYXkucmVtb3ZlQXQodGVtcGxhdGUudGl0bGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxlY3Rpb25JdGVtRHJvcHBlZCgkZXZlbnQ6IENka0RyYWdEcm9wPHt9Pikge1xyXG4gICAgY29uc3QgcHJldmlvdXNJbmRleCA9ICRldmVudC5wcmV2aW91c0luZGV4O1xyXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gJGV2ZW50LmN1cnJlbnRJbmRleDtcclxuICAgIGNvbnN0IG1vdmVtZW50RGlyZWN0aW9uID0gY3VycmVudEluZGV4ID4gcHJldmlvdXNJbmRleCA/IDEgOiAtMTtcclxuXHJcbiAgICAvLyBNb3ZlIGluIEZvcm1BcnJheVxyXG4gICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gbW92ZSB0aGUgaXRlbSBpbiB0aGUgX3RlbXBsYXRlcyBvYmplY3RcclxuICAgIGNvbnN0IG1vdmVkQ29udHJvbCA9IHRoaXMuaW5uZXJGb3JtQXJyYXkuYXQocHJldmlvdXNJbmRleCk7XHJcbiAgICBmb3IgKGxldCBpID0gcHJldmlvdXNJbmRleDsgaSAqIG1vdmVtZW50RGlyZWN0aW9uIDwgY3VycmVudEluZGV4ICogbW92ZW1lbnREaXJlY3Rpb247IGkgPSBpICsgbW92ZW1lbnREaXJlY3Rpb24pIHtcclxuICAgICAgdGhpcy5pbm5lckZvcm1BcnJheS5zZXRDb250cm9sKGksIHRoaXMuaW5uZXJGb3JtQXJyYXkuYXQoaSArIG1vdmVtZW50RGlyZWN0aW9uKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlubmVyRm9ybUFycmF5LnNldENvbnRyb2woY3VycmVudEluZGV4LCBtb3ZlZENvbnRyb2wpO1xyXG5cclxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFRoaXMgaGVscGVyIHR5cGUgY29udmVydHMgYSBQcm9wZXJ0eTxYLCBZLCBaPiB0byBhbiBPcHRpb25zSXRlbUR0bzxYLCBZLCBaPiBhbmQgcHJlc2VydmVzIHRoZSBnZW5lcmljIHBhcmFtZXRlcnMuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBFeHRyYWN0R2VuZXJpY09wdGlvbnNJdGVtVHlwZTxUUHJvcGVydHk+ID0gVFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8aW5mZXIgWCwgaW5mZXIgWSwgaW5mZXIgWj4gPyBPcHRpb25zSXRlbUR0bzxYLCBZLCBaPiA6IG5ldmVyXHJcbmV4cG9ydCB0eXBlIEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+ID0gVFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8aW5mZXIgWCwgaW5mZXIgWSwgaW5mZXIgWj4gPyBPcHRpb25zPFgsIFksIFo+W1wic2VsZWN0ZWRWYWx1ZXNcIl0gOiBuZXZlclxyXG5leHBvcnQgdHlwZSBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT4gPSBUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxpbmZlciBYLCBpbmZlciBZLCBpbmZlciBaPiA/IFggOiBuZXZlclxyXG5cclxuLyoqXHJcbiAqIEEgZHJvcGRvd24gdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqIFRoZSBkcm9wZG93biBzdXBwb3J0cyBzZWFyY2hpbmcgdGhyb3VnaCBhIFJFU1RXb3JsZCBsaXN0IGVuZHBvaW50IG9uIHRoZSBiYWNrZW5kIGlmIHRoZSBgbGlua2Agb2YgdGhlIG9wdGlvbnMgaXMgc2V0LlxyXG4gKiBPdGhlcndpc2UgdGhlIGRyb3Bkb3duIHdpbGwgdXNlIHRoZSBgaW5saW5lYCBvZiB0aGUgb3B0aW9ucy5cclxuICogQHJlbWFya3MgSXQgaXMgYWR2aXNlZCB0byB1c2Uge0BsaW5rIFJlc3RXb3JsZElucHV0Q29tcG9uZW50fSBgPHJ3LWlucHV0PmAgYW5kIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGlucHV0cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWlucHV0LWRyb3Bkb3duIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWlucHV0LWRyb3Bkb3duPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1pbnB1dC1kcm9wZG93bicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1pbnB1dC1kcm9wZG93bi9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1pbnB1dC1kcm9wZG93bi9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZElucHV0RHJvcGRvd25Db21wb25lbnQ8VFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPiAmIHsgb3B0aW9uczogT3B0aW9uczxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+IH0sIFRPcHRpb25zSXRlbSBleHRlbmRzIEV4dHJhY3RHZW5lcmljT3B0aW9uc0l0ZW1UeXBlPFRQcm9wZXJ0eT4gPSBFeHRyYWN0R2VuZXJpY09wdGlvbnNJdGVtVHlwZTxUUHJvcGVydHk+PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLyoqXHJcbiAgICogVGhlIHByb3BlcnR5IHRvIGRpc3BsYXkuXHJcbiAgICogQHJlcXVpcmVkXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwcm9wZXJ0eSE6IFRQcm9wZXJ0eTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSB0byB1c2UgZm9yIHRoZSBwcm9wZXJ0eS5cclxuICAgKiBAcmVxdWlyZWRcclxuICAgKiBAcmVtYXJrcyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBBUEkgYXMgZGVmaW5lZCBpbiB0aGUgYFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb25gLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGxhYmVsIGZvciB0aGUgZ2l2ZW4gaXRlbS5cclxuICAgKiBUaGUgZGVmYXVsdCByZXR1cm5zIHRoZSBwcm9tcHQgYW5kIG9wdGlvbmFsbHkgdGhlIHZhbHVlIGluIGJyYWNrZXRzLlxyXG4gICAqIFRoZSB2YWx1ZSBpbiBicmFja2V0cyB3aWxsIG9ubHkgYmUgZGlzcGxheWVkIGlmIHRoZSBgY29sc2AgZmllbGQgb2YgdGhlIHByb3BlcnR5IGlzIHVuZGVmaW5lZCBvciBncmVhdGVyIHRoYW4gMS5cclxuICAgKiBPdmVyd3JpdGUgdGhpcyBmdW5jdGlvbiB0byBjaGFuZ2UgdGhlIGxhYmVsLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIHRvIGdldCB0aGUgbGFiZWwgZm9yLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0TGFiZWw6IChpdGVtOiBUT3B0aW9uc0l0ZW0pID0+IHN0cmluZyA9IHRoaXMuZ2V0TGFiZWxJbnRlcm5hbDtcclxuXHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHRvb2x0aXAgZm9yIHRoZSBnaXZlbiBpdGVtLlxyXG4gICAqIFRoZSBkZWZhdWx0IHJldHVybnMgYWxsIHByb3BlcnRpZXMgb2YgdGhlIGl0ZW0gZXhjZXB0IHRoZSBvbmVzIHRoYXQgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlIG9yIHRoZSBvbmVzIHRoYXQgYXJlIGluIHRoZSBsaXN0IG9mIGRlZmF1bHQgcHJvcGVydGllcyB0byBleGNsdWRlLlxyXG4gICAqIFRoZSBkZWZhdWx0IHByb3BlcnRpZXMgdG8gZXhjbHVkZSBhcmU6IGNyZWF0ZWRBdCwgY3JlYXRlZEJ5LCBsYXN0Q2hhbmdlZEF0LCBsYXN0Q2hhbmdlZEJ5LCB0aW1lc3RhbXAsIHByb21wdEZpZWxkLCB2YWx1ZUZpZWxkLlxyXG4gICAqIE92ZXJ3cml0ZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgdG9vbHRpcC5cclxuICAgKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB0byBnZXQgdGhlIGxhYmVsIGZvci5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGdldFRvb2x0aXA6IChpdGVtOiBUT3B0aW9uc0l0ZW0pID0+IHN0cmluZyA9IHRoaXMuZ2V0VG9vbHRpcEludGVybmFsO1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dE9wdGlvbnNTaW5nbGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dE9wdGlvbnNTaW5nbGVSZWY/OiBUZW1wbGF0ZVJlZjxQcm9wZXJ0eVRlbXBsYXRlQ29udGV4dD47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0T3B0aW9uc011bHRpcGxlJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgaW5wdXRPcHRpb25zTXVsdGlwbGVSZWY/OiBUZW1wbGF0ZVJlZjxQcm9wZXJ0eVRlbXBsYXRlQ29udGV4dD47XHJcblxyXG4gIEBWaWV3Q2hpbGQoTXVsdGlTZWxlY3QpXHJcbiAgbXVsdGlTZWxlY3Q/OiBNdWx0aVNlbGVjdDtcclxuXHJcbiAgLyoqXHJcbiAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIHZhbHVlIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEcm9wZG93bkNoYW5nZUV2ZW50PFRPcHRpb25zSXRlbT4+KCk7XHJcblxyXG4gIHByaXZhdGUgX2Zvcm1Db250cm9sITogQWJzdHJhY3RDb250cm9sPEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+PjtcclxuXHJcbiAgcHJpdmF0ZSBfZmlsdGVyVmFsdWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHB1YmxpYyBnZXQgZmlsdGVyVmFsdWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9maWx0ZXJWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbHVlRmllbGQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5Lm9wdGlvbnMudmFsdWVGaWVsZCA/PyBcInZhbHVlXCI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHByb21wdEZpZWxkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5vcHRpb25zLnByb21wdEZpZWxkID8/IFwicHJvbXB0XCI7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NsaWVudHM6IFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb24sXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLl9jb250cm9sQ29udGFpbmVyLmNvbnRyb2wgYXMgRm9ybUdyb3VwPGFueT47XHJcbiAgICB0aGlzLl9mb3JtQ29udHJvbCA9IGZvcm1Hcm91cC5jb250cm9sc1t0aGlzLnByb3BlcnR5Lm5hbWVdIGFzIEFic3RyYWN0Q29udHJvbDxFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5Pj47XHJcbiAgICBhd2FpdCB0aGlzLnNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50Rm9yUHJvcGVydHkoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRWYWx1ZShpdGVtOiBUT3B0aW9uc0l0ZW0pOiBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT4ge1xyXG4gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsIHx8ICFpdGVtLmhhc093blByb3BlcnR5KHRoaXMudmFsdWVGaWVsZCkpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGl0ZW0gZG9lcyBub3QgaGF2ZSBhIHByb3BlcnR5ICR7dGhpcy52YWx1ZUZpZWxkfS5gKTtcclxuXHJcbiAgICByZXR1cm4gaXRlbVt0aGlzLnZhbHVlRmllbGQgYXMga2V5b2YgVE9wdGlvbnNJdGVtXSBhcyBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UHJvbXB0KGl0ZW06IFRPcHRpb25zSXRlbSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwgfHwgIWl0ZW0uaGFzT3duUHJvcGVydHkodGhpcy5wcm9tcHRGaWVsZCkpXHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHJldHVybiBpdGVtW3RoaXMucHJvbXB0RmllbGQgYXMga2V5b2YgVE9wdGlvbnNJdGVtXSBhcyBzdHJpbmcgPz8gXCJcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRMYWJlbEludGVybmFsKGl0ZW06IFRPcHRpb25zSXRlbSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGxldCBsYWJlbCA9IHRoaXMuZ2V0UHJvbXB0KGl0ZW0pO1xyXG4gICAgaWYgKHRoaXMucHJvcGVydHkuY29scyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucHJvcGVydHkuY29scyA+IDEpIHtcclxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKGl0ZW0pO1xyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8ICh2YWx1ZSAhPT0gXCJcIiAmJiB2YWx1ZS50b1VwcGVyQ2FzZSgpICE9PSBsYWJlbC50b1VwcGVyQ2FzZSgpKSlcclxuICAgICAgICBsYWJlbCArPSBgICgke3ZhbHVlfSlgO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYWJlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VG9vbHRpcEludGVybmFsKGl0ZW06IFRPcHRpb25zSXRlbSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG5cclxuICAgIGNvbnN0IHRvb2x0aXAgPSBPYmplY3QuZW50cmllcyhpdGVtKVxyXG4gICAgICAuZmlsdGVyKChba2V5XSkgPT4gIShrZXkuc3RhcnRzV2l0aCgnXycpIHx8IFsnY3JlYXRlZEF0JywgJ2NyZWF0ZWRCeScsICdsYXN0Q2hhbmdlZEF0JywgJ2xhc3RDaGFuZ2VkQnknLCAndGltZXN0YW1wJywgdGhpcy5wcm9tcHRGaWVsZCwgdGhpcy52YWx1ZUZpZWxkXS5pbmNsdWRlcyhrZXkpKSlcclxuICAgICAgLnJlZHVjZSgocHJldiwgW2tleSwgdmFsdWVdLCBpbmRleCkgPT4gYCR7cHJldn0ke2luZGV4ID09PSAwID8gJycgOiAnXFxuJ30ke2tleX06ICR7UmVzdFdvcmxkSW5wdXREcm9wZG93bkNvbXBvbmVudC5qc29uU3RyaW5naWZ5V2l0aEVsaXBzaXModmFsdWUpfWAsICcnKTtcclxuXHJcbiAgICByZXR1cm4gdG9vbHRpcDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJdGVtQnlWYWx1ZSh2YWx1ZTogRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+KTogVE9wdGlvbnNJdGVtIHtcclxuICAgIGlmICh0aGlzLnByb3BlcnR5Lm9wdGlvbnMuaW5saW5lID09PSB1bmRlZmluZWQgfHwgdGhpcy5wcm9wZXJ0eS5vcHRpb25zLmlubGluZSA9PT0gbnVsbClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvcGVydHkgZG9lcyBub3QgaGF2ZSBhbnkgaW5saW5lIG9wdGlvbnMuJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkub3B0aW9ucy5pbmxpbmUuZmluZChpdGVtID0+IHRoaXMuZ2V0VmFsdWUoaXRlbSBhcyBUT3B0aW9uc0l0ZW0pID09PSB2YWx1ZSkgYXMgVE9wdGlvbnNJdGVtO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUJ5VmFsdWUodmFsdWU6IEV4dHJhY3RWYWx1ZVR5cGU8VFByb3BlcnR5Pik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fZm9ybUNvbnRyb2wudmFsdWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZTtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gZm9ybVZhbHVlLmZpbHRlcihpID0+IGkgIT09IHZhbHVlKSBhcyBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PjtcclxuICAgIHRoaXMuX2Zvcm1Db250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk9wdGlvbnNGaWx0ZXJlZCA9IGRlYm91bmNlKHRoaXMub25PcHRpb25zRmlsdGVyZWRJbnRlcm5hbCwgMjAwKTtcclxuXHJcbiAgcHVibGljIGFzeW5jIG9uT3B0aW9uc0ZpbHRlcmVkSW50ZXJuYWwoZXZlbnQ6IHsgb3JpZ2luYWxFdmVudDogRXZlbnQ7IGZpbHRlcjogc3RyaW5nIHwgbnVsbCB9KSB7XHJcbiAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wZXJ0eT8ub3B0aW9ucztcclxuXHJcbiAgICAgIGlmICghKGV2ZW50LmZpbHRlcikgfHwgZXZlbnQuZmlsdGVyID09PSAnJylcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudC50eXBlID09PSBcImlucHV0XCIpIHtcclxuICAgICAgICBjb25zdCBpbnB1dEV2ZW50ID0gKGV2ZW50Lm9yaWdpbmFsRXZlbnQgYXMgSW5wdXRFdmVudCk7XHJcbiAgICAgICAgaWYgKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydEZyb21QYXN0ZVwiKSB7XHJcbiAgICAgICAgICAvLyBJZiB0aGUgdXNlciBwYXN0ZWQgaW4gbXVsdGlwbGUgaWRzIGFzIGNvbW1hIHNlcGFyYXRlZCBsaXN0LCB3ZSB3YW50IHRvIGdldCB0aGVtIGFsbCBhbmQgc2V0IHRoZW0gYXMgdGhlIHNlbGVjdGVkIHZhbHVlLlxyXG5cclxuICAgICAgICAgIHZhciB2YWx1ZXMgPSBldmVudC5maWx0ZXJcclxuICAgICAgICAgICAgLnNwbGl0KFwiLFwiKVxyXG4gICAgICAgICAgICAuZmlsdGVyKHYgPT4gdiAhPT0gJycpXHJcbiAgICAgICAgICAgIC5tYXAodiA9PiB2LnRyaW0oKSlcclxuICAgICAgICAgICAgLm1hcCh2ID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBuID0gTnVtYmVyLnBhcnNlRmxvYXQodik7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IHYgOiBuO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoIXZhbHVlcyB8fCB2YWx1ZXMubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgY29uc3QgYWxsQXJlTnVtYmVycyA9IHZhbHVlcy5ldmVyeSh2ID0+IHR5cGVvZiB2ID09PSBcIm51bWJlclwiICYmICFpc05hTih2KSk7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBhbGxBcmVOdW1iZXJzXHJcbiAgICAgICAgICAgID8gYCR7b3B0aW9ucy52YWx1ZUZpZWxkfSBpbiAoJHt2YWx1ZXMuam9pbignLCcpfSlgXHJcbiAgICAgICAgICAgIDogYGNvbnRhaW5zKCR7b3B0aW9ucy5wcm9tcHRGaWVsZH0sICcke3ZhbHVlcy5qb2luKFwiJywgJ1wiKX0nKWA7XHJcblxyXG4gICAgICAgICAgaWYgKChvcHRpb25zPy5saW5rPy5ocmVmKSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5TZXRJbmxpbmVPcHRpb25zRnJvbUZpbHRlcihmaWx0ZXIsIFwiXCIpO1xyXG5cclxuICAgICAgICAgIGlmIChvcHRpb25zLmlubGluZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlczogRXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT4gPSBvcHRpb25zLmlubGluZVxyXG4gICAgICAgICAgICAgIC5tYXAoaSA9PiB0aGlzLmdldFZhbHVlKGkgYXMgVE9wdGlvbnNJdGVtKSlcclxuICAgICAgICAgICAgICAuZmlsdGVyKHYgPT4gdmFsdWVzLmluY2x1ZGVzKHYgYXMgYW55KSkgYXMgYW55O1xyXG4gICAgICAgICAgICB0aGlzLl9mb3JtQ29udHJvbC5zZXRWYWx1ZShzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3Q/LnJlc2V0RmlsdGVyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gVGhpcyBpcyB0aGUgbm9ybWFsIGNhc2Ugd2hlcmUgdGhlIHVzZXIgdHlwZXMgaW4gYSBmaWx0ZXIuXHJcblxyXG4gICAgICAgICAgbGV0IGZpbHRlciA9IGBjb250YWlucygke29wdGlvbnMucHJvbXB0RmllbGR9LCAnJHtldmVudC5maWx0ZXJ9JylgO1xyXG4gICAgICAgICAgaWYgKG9wdGlvbnMudmFsdWVGaWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gJ2lkJyAmJiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUludChldmVudC5maWx0ZXIpKSlcclxuICAgICAgICAgICAgZmlsdGVyID0gYCgke29wdGlvbnMudmFsdWVGaWVsZH0gZXEgJHtldmVudC5maWx0ZXJ9KSAgb3IgKCR7ZmlsdGVyfSlgO1xyXG5cclxuICAgICAgICAgIGlmICgob3B0aW9ucz8ubGluaz8uaHJlZikpXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuU2V0SW5saW5lT3B0aW9uc0Zyb21GaWx0ZXIoZmlsdGVyLCBldmVudC5maWx0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk9wdGlvbnNDaGFuZ2VkKGV2ZW50OiBEcm9wZG93bkNoYW5nZUV2ZW50PFRPcHRpb25zSXRlbT4pIHtcclxuICAgIHRoaXMub25DaGFuZ2UuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldEluaXRpYWxTZWxlY3RlZE9wdGlvbnNFbGVtZW50Rm9yUHJvcGVydHkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wZXJ0eS5vcHRpb25zO1xyXG5cclxuICAgIGlmICghb3B0aW9ucy5saW5rPy5ocmVmIHx8ICFvcHRpb25zLnNlbGVjdGVkVmFsdWVzKSB7XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25zLmlubGluZSkgfHwgb3B0aW9ucy5pbmxpbmUubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIG9wdGlvbnMuaW5saW5lID0gW107XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXIgPSBgJHtvcHRpb25zLnZhbHVlRmllbGR9IGluICgke29wdGlvbnMuc2VsZWN0ZWRWYWx1ZXN9KWA7XHJcbiAgICBhd2FpdCB0aGlzLlNldElubGluZU9wdGlvbnNGcm9tRmlsdGVyKGZpbHRlciwgXCJcIik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIFNldElubGluZU9wdGlvbnNGcm9tRmlsdGVyKGZpbHRlcjogc3RyaW5nLCBldmVudEZpbHRlcjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5wcm9wZXJ0eS5vcHRpb25zO1xyXG4gICAgaWYgKCFvcHRpb25zLmxpbms/LmhyZWYpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3BlcnR5IGRvZXMgbm90IGhhdmUgYSBsaW5rIGhyZWYuJyk7XHJcblxyXG4gICAgY29uc3QgdGVtcGxhdGVkVXJpID0gb3B0aW9ucy5saW5rLmhyZWY7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCkuZ2V0TGlzdEJ5VXJpPFRPcHRpb25zSXRlbT4odGVtcGxhdGVkVXJpLCB7ICRmaWx0ZXI6IGZpbHRlciwgJHRvcDogMTAgfSk7XHJcbiAgICBpZiAoIXJlc3BvbnNlLm9rIHx8IFByb2JsZW1EZXRhaWxzLmlzUHJvYmxlbURldGFpbHMocmVzcG9uc2UuYm9keSkgfHwgIXJlc3BvbnNlLmJvZHkpIHtcclxuICAgICAgY29uc3QgbWVzc2FnZSA9IGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIHRoZSBzZWxlY3RlZCBpdGVtcyBmb3IgdGhlIHByb3BlcnR5ICR7dGhpcy5wcm9wZXJ0eS5uYW1lfS5gO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiBtZXNzYWdlLCBkYXRhOiByZXNwb25zZSwgc3RpY2t5OiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGl0ZW1zID0gcmVzcG9uc2UuYm9keSEuX2VtYmVkZGVkLml0ZW1zIGFzIFJlc291cmNlT2ZEdG88VE9wdGlvbnNJdGVtPltdO1xyXG4gICAgY29uc3QgbmV3SXRlbXMgPSB0aGlzLmNvbWJpbmVJbmxpbmVXaXRoU2VsZWN0ZWQoaXRlbXMpO1xyXG4gICAgb3B0aW9ucy5pbmxpbmUgPSBuZXdJdGVtcztcclxuXHJcbiAgICAvLyBUaGUgbXVsdGlzZWxlY3QgY29tcG9uZW50IGRvZXMgbm90IHVwZGF0ZSB0aGUgb3B0aW9ucyB3aGVuIHRoZSBpbmxpbmUgb3B0aW9ucyBhcmUgdXBkYXRlZCwgc28gd2UgbmVlZCB0byB0cmlnZ2VyIGEgY2hhbmdlIGRldGVjdGlvbi5cclxuICAgIHRoaXMuX2ZpbHRlclZhbHVlID0gZXZlbnRGaWx0ZXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbWJpbmVJbmxpbmVXaXRoU2VsZWN0ZWQoaXRlbXM6IFJlc291cmNlT2ZEdG88VE9wdGlvbnNJdGVtPltdKTogVE9wdGlvbnNJdGVtW10ge1xyXG4gICAgY29uc3Qgb2xkSW5saW5lID0gdGhpcy5wcm9wZXJ0eS5vcHRpb25zLmlubGluZSBhcyBSZXNvdXJjZU9mRHRvPFRPcHRpb25zSXRlbT5bXTtcclxuICAgIGlmICghb2xkSW5saW5lKVxyXG4gICAgICByZXR1cm4gaXRlbXM7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLmdldFNlbGVjdGVkVmFsdWVzKCk7XHJcbiAgICBjb25zdCBpdGVtc1RvS2VlcCA9IG9sZElubGluZS5maWx0ZXIoaSA9PiBzZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyh0aGlzLmdldFZhbHVlKGkgYXMgVE9wdGlvbnNJdGVtKSkpO1xyXG4gICAgY29uc3QgbmV3VmFsdWVzID0gaXRlbXMubWFwKGkgPT4gdGhpcy5nZXRWYWx1ZShpKSk7XHJcbiAgICBjb25zdCBuZXdJdGVtcyA9IGl0ZW1zLmNvbmNhdChpdGVtc1RvS2VlcC5maWx0ZXIoaSA9PiAhbmV3VmFsdWVzLmluY2x1ZGVzKHRoaXMuZ2V0VmFsdWUoaSkpKSk7XHJcblxyXG4gICAgcmV0dXJuIG5ld0l0ZW1zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZFZhbHVlcygpOiB1bmtub3duW10ge1xyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZTtcclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gW107XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxyXG4gICAgICByZXR1cm4gdmFsdWVcclxuXHJcbiAgICByZXR1cm4gW3ZhbHVlXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2xpZW50KCk6IFJlc3RXb3JsZENsaWVudCB7XHJcbiAgICBpZiAoIXRoaXMuYXBpTmFtZSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IGEgY2xpZW50LCBiZWNhdXNlIHRoZSBhcGlOYW1lIGlzIG5vdCBzZXQuJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudHMuZ2V0Q2xpZW50KHRoaXMuYXBpTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBqc29uU3RyaW5naWZ5V2l0aEVsaXBzaXModmFsdWU6IHVua25vd24pIHtcclxuICAgIGNvbnN0IG1heExlbmd0aCA9IDIwMDtcclxuICAgIGNvbnN0IGVuZCA9IDEwO1xyXG4gICAgY29uc3Qgc3RhcnQgPSBtYXhMZW5ndGggLSBlbmQgLSAyO1xyXG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgIGNvbnN0IHNob3J0ZW5lZCA9IGpzb24ubGVuZ3RoID4gbWF4TGVuZ3RoID8ganNvbi5zdWJzdHJpbmcoMCwgc3RhcnQpICsgJ+KApicgKyBqc29uLnN1YnN0cmluZyhqc29uLmxlbmd0aCAtIGVuZCkgOiBqc29uO1xyXG5cclxuICAgIHJldHVybiBzaG9ydGVuZWQ7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBjb21wbGV4IG9iamVjdCB3aXRoIG11bHRpcGxlIHByb3BlcnRpZXMgdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSB0aGUgZ2l2ZW4gcHJvcGVydHkuXHJcbiAqIFRoZSBvYmplY3QgY2FuIGFsc28gYmUgbmVzdGVkLlxyXG4gKiBAcmVtYXJrcyBJdCBpcyBhZHZpc2VkIHRvIHVzZSB7QGxpbmsgUmVzdFdvcmxkSW5wdXRDb21wb25lbnR9IGA8cnctaW5wdXQ+YCBhbmQgY29udHJvbCB0aGUgcmVuZGVyZWQgaW5wdXRzIHdpdGggdGhlIHBhc3NlZCBpbiBwcm9wZXJ0eVxyXG4gKiBpbnN0ZWFkIG9mIHVzaW5nIHRoaXMgY29tcG9uZW50IGRpcmVjdGx5LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8cnctaW5wdXQtb2JqZWN0IFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWlucHV0LW9iamVjdD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtb2JqZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWlucHV0LW9iamVjdC9yZXN0d29ybGQtaW5wdXQtb2JqZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtb2JqZWN0L3Jlc3R3b3JsZC1pbnB1dC1vYmplY3QuY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZElucHV0T2JqZWN0Q29tcG9uZW50PFQgZXh0ZW5kcyB7IFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+OyB9PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LlxyXG4gICAqIEByZXF1aXJlZFxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHJvcGVydHkhOiBQcm9wZXJ0eTxudWxsLCBuZXZlciwgbmV2ZXI+ICYgeyBfdGVtcGxhdGVzOiB7IGRlZmF1bHQ6IFRlbXBsYXRlIH0gfTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSB0byB1c2UgZm9yIHRoZSBwcm9wZXJ0eS5cclxuICAgKiBAcmVxdWlyZWRcclxuICAgKiBAcmVtYXJrcyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBBUEkgYXMgZGVmaW5lZCBpbiB0aGUgYFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb25gLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRPYmplY3QnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dE9iamVjdFJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICBwcml2YXRlIF9pbm5lckZvcm1Hcm91cD86IEZvcm1Hcm91cDxUPjtcclxuXHJcbiAgcHVibGljIGdldCBpbm5lckZvcm1Hcm91cCgpIHtcclxuICAgIGlmICh0aGlzLl9pbm5lckZvcm1Hcm91cCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtR3JvdXAgaXMgbm90IHNldC5cIik7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2lubmVyRm9ybUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA8YW55PjtcclxuICAgIHRoaXMuX2lubmVyRm9ybUdyb3VwID0gZm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMucHJvcGVydHkubmFtZV0gYXMgRm9ybUdyb3VwPFQ+O1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgc2ltcGxlIGlucHV0IGVsZW1lbnQsIGxpa2UgYSBzdHJpbmcsIGEgbnVtYmVyIG9yIGEgRGF0ZSB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS5cclxuICogQHJlbWFya3MgSXQgaXMgYWR2aXNlZCB0byB1c2Uge0BsaW5rIFJlc3RXb3JsZElucHV0Q29tcG9uZW50fSBgPHJ3LWlucHV0PmAgYW5kIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGlucHV0cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWlucHV0LXNpbXBsZSBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1pbnB1dC1zaW1wbGU+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3J3LWlucHV0LXNpbXBsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1pbnB1dC1zaW1wbGUvcmVzdHdvcmxkLWlucHV0LXNpbXBsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVzdHdvcmxkLWlucHV0LXNpbXBsZS9yZXN0d29ybGQtaW5wdXQtc2ltcGxlLmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRJbnB1dFNpbXBsZUNvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LlxyXG4gICAqIEByZXF1aXJlZFxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHJvcGVydHkhOiBUUHJvcGVydHk7XHJcblxyXG4gIHB1YmxpYyBnZXQgUHJvcGVydHlUeXBlKCkge1xyXG4gICAgcmV0dXJuIFByb3BlcnR5VHlwZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kYXRlRm9ybWF0ID0gbmV3IERhdGUoMzMzMywgMTAsIDIyKSAvLyBtb250aHMgc3RhcnQgYXQgMCBpbiBKU1xyXG4gICAgLnRvTG9jYWxlRGF0ZVN0cmluZygpXHJcbiAgICAucmVwbGFjZShcIjIyXCIsIFwiZGRcIilcclxuICAgIC5yZXBsYWNlKFwiMTFcIiwgXCJtbVwiKVxyXG4gICAgLnJlcGxhY2UoXCIzMzMzXCIsIFwieXlcIilcclxuICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJ5XCIpO1xyXG5cclxuICBwdWJsaWMgZ2V0IGRhdGVGb3JtYXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBSZXN0V29ybGRJbnB1dFNpbXBsZUNvbXBvbmVudC5fZGF0ZUZvcm1hdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90aW1lRm9ybWF0ID0gbmV3IERhdGUoMSwgMSwgMSwgMjIsIDMzLCA0NClcclxuICAgIC50b0xvY2FsZVRpbWVTdHJpbmcoKVxyXG4gICAgLnJlcGxhY2UoXCIyMlwiLCBcImhoXCIpXHJcbiAgICAucmVwbGFjZShcIjMzXCIsIFwibW1cIilcclxuICAgIC5yZXBsYWNlKFwiNDRcIiwgXCJzc1wiKTtcclxuXHJcbiAgcHVibGljIGdldCB0aW1lRm9ybWF0KCkge1xyXG4gICAgcmV0dXJuIFJlc3RXb3JsZElucHV0U2ltcGxlQ29tcG9uZW50Ll90aW1lRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2w/OiBGb3JtQ29udHJvbDxTaW1wbGVWYWx1ZSB8IFNpbXBsZVZhbHVlW10+O1xyXG5cclxuICBwdWJsaWMgZ2V0IGZvcm1Db250cm9sKCkge1xyXG4gICAgaWYgKHRoaXMuX2Zvcm1Db250cm9sID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1Hcm91cCBpcyBub3Qgc2V0LlwiKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IFByb3BlcnR5V2l0aEltYWdlKCkge1xyXG4gICAgcmV0dXJuIFByb3BlcnR5V2l0aEltYWdlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA8YW55PjtcclxuICAgIHRoaXMuX2Zvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMucHJvcGVydHkubmFtZV0gYXMgRm9ybUNvbnRyb2w8U2ltcGxlVmFsdWUgfCBTaW1wbGVWYWx1ZVtdPjtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGNvbGxlY3Rpb24gb2YgYDxydy1mb3JtPmAgZWxlbWVudHMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gYSB0ZW1wbGF0ZS5cclxuICogRG9lcyBub3QgaGF2ZSBhbnkgYnV0dG9ucyBvbiBpdHMgb3duLlxyXG4gKiBJZiB5b3Ugd2FudCBidXR0b25zLCB1c2Uge0BsaW5rIFJlc3RXb3JsZEZvcm19IGA8cnctZm9ybT5gLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8cnctZm9ybS1jb2xsZWN0aW9uIFt0ZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWZvcm0tY29sbGVjdGlvbj5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtaW5wdXQtdGVtcGxhdGUvcmVzdHdvcmxkLWlucHV0LXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtdGVtcGxhdGUvcmVzdHdvcmxkLWlucHV0LXRlbXBsYXRlLmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRJbnB1dFRlbXBsYXRlQ29tcG9uZW50PFQgZXh0ZW5kcyB7IFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+OyB9PiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSB0byB1c2UgZm9yIHRoZSBwcm9wZXJ0eS5cclxuICAgKiBAcmVxdWlyZWRcclxuICAgKiBAcmVtYXJrcyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBBUEkgYXMgZGVmaW5lZCBpbiB0aGUgYFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb25gLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHRlbXBsYXRlIHRvIGRpc3BsYXkuXHJcbiAgICogQHJlcXVpcmVkXHJcbiAgICogQHJlbWFya3MgVGhpcyBpcyB0aGUgdGVtcGxhdGUgdGhhdCBkZWZpbmVzIHRoZSBwcm9wZXJ0aWVzIHRvIGRpc3BsYXkuXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICB0ZW1wbGF0ZSE6IFRlbXBsYXRlO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJncmlkIGZpZWxkXCI+XHJcbiAgICA8cnctbGFiZWwgW3Byb3BlcnR5XT1cInByb3BlcnR5XCIgY2xhc3M9XCJjb2wtMTIgbWQ6Y29sLTIgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj48L3J3LWxhYmVsPlxyXG4gICAgPHJ3LWlucHV0IFthcGlOYW1lXT1cImFwaU5hbWVcIiBbcHJvcGVydHldPVwicHJvcGVydHlcIiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMTBcIj48L3J3LWlucHV0PlxyXG48L2Rpdj5cclxuIiwiPHJ3LWlucHV0LWRyb3Bkb3duICpuZ0lmPVwicHJvcGVydHkub3B0aW9uc1wiIFthcGlOYW1lXT1cImFwaU5hbWVcIiBbcHJvcGVydHldPVwiJGFueShwcm9wZXJ0eSlcIj48L3J3LWlucHV0LWRyb3Bkb3duPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcm9wZXJ0eS5vcHRpb25zXCI+XHJcbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwcm9wZXJ0eS50eXBlXCI+XHJcbiAgICAgICAgPHJ3LWlucHV0LW9iamVjdCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLk9iamVjdFwiIFthcGlOYW1lXT1cImFwaU5hbWVcIiBbcHJvcGVydHldPVwiJGFueShwcm9wZXJ0eSlcIj48L3J3LWlucHV0LW9iamVjdD5cclxuICAgICAgICA8cnctaW5wdXQtY29sbGVjdGlvbiAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkNvbGxlY3Rpb25cIiBbYXBpTmFtZV09XCJhcGlOYW1lXCIgW3Byb3BlcnR5XT1cIiRhbnkocHJvcGVydHkpXCI+PC9ydy1pbnB1dC1jb2xsZWN0aW9uPlxyXG4gICAgICAgIDxydy1pbnB1dC1zaW1wbGUgKm5nU3dpdGNoRGVmYXVsdCBbcHJvcGVydHldPVwicHJvcGVydHlcIj48L3J3LWlucHV0LXNpbXBsZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxydy12YWxpZGF0aW9uLWVycm9ycyBbcHJvcGVydHldPVwicHJvcGVydHlcIj48L3J3LXZhbGlkYXRpb24tZXJyb3JzPlxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYnJhY2VcIj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJjb2xsZWN0aW9uSXRlbURyb3BwZWQoJGV2ZW50KVwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0ZW1wbGF0ZSBvZiB0ZW1wbGF0ZXNcIiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgY2RrRHJhZz5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWdyaXAtbGluZXNcIiBjZGtEcmFnSGFuZGxlPjwvaT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJicmFjZVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgICAgIDxydy1pbnB1dC10ZW1wbGF0ZSBbZm9ybUdyb3VwXT1cImlubmVyRm9ybUFycmF5LmNvbnRyb2xzW3RlbXBsYXRlLnRpdGxlIV1cIiBbdGVtcGxhdGVdPVwiZGVmYXVsdFRlbXBsYXRlXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIGNsYXNzPVwidy1mdWxsXCI+PC9ydy1pbnB1dC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cImZhcyBmYS10cmFzaFwiIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgcC1idXR0b24tZGFuZ2VyIG1sLTIgbWItM1wiIChjbGljayk9XCJkZWxldGVJdGVtRnJvbUNvbGxlY3Rpb24odGVtcGxhdGUpXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cImZhcyBmYS1wbHVzXCIgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1pbmZvXCIgKGNsaWNrKT1cImFkZE5ld0l0ZW1Ub0NvbGxlY3Rpb24oKVwiPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdElucHV0T3B0aW9uc1NpbmdsZSBsZXQtcHJvcGVydHk9XCJwcm9wZXJ0eVwiIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCI+XG4gICAgPHAtZHJvcGRvd25cbiAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiXG4gICAgICBbaWRdPVwicHJvcGVydHkubmFtZVwiXG4gICAgICBbb3B0aW9uc109XCJwcm9wZXJ0eS5vcHRpb25zLmlubGluZVwiXG4gICAgICBbZmlsdGVyQnldPVwicHJvbXB0RmllbGQgKyAnLCcgKyB2YWx1ZUZpZWxkXCJcbiAgICAgIFtvcHRpb25MYWJlbF09XCJwcm9tcHRGaWVsZFwiXG4gICAgICBbb3B0aW9uVmFsdWVdPVwidmFsdWVGaWVsZFwiXG4gICAgICBbcmVhZG9ubHldPVwicHJvcGVydHkucmVhZE9ubHlcIlxuICAgICAgW3JlcXVpcmVkXT1cInByb3BlcnR5LnJlcXVpcmVkIHx8IHByb3BlcnR5Lm9wdGlvbnMubWluSXRlbXMgPiAwXCJcbiAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICBbZmlsdGVyVmFsdWVdPVwiZmlsdGVyVmFsdWVcIlxuICAgICAgW2F1dG9EaXNwbGF5Rmlyc3RdPVwiZmFsc2VcIlxuICAgICAgW3Nob3dDbGVhcl09XCIhcHJvcGVydHkucmVxdWlyZWQgfHwgcHJvcGVydHkub3B0aW9ucy5taW5JdGVtcyA8PSAwXCJcbiAgICAgIChvbkZpbHRlcik9XCJvbk9wdGlvbnNGaWx0ZXJlZCgkZXZlbnQpXCJcbiAgICAgIChvbkNoYW5nZSk9XCJvbk9wdGlvbnNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICBbcGFuZWxTdHlsZUNsYXNzXT1cImxvYWRpbmcgPyAnbG9hZGluZycgOiAnJ1wiXG4gICAgICBbZmlsdGVyUGxhY2Vob2xkZXJdPVwicHJvcGVydHk/Lm9wdGlvbnM/Lmxpbms/LmhyZWYgPyAnc2VhcmNoIGZvciBtb3JlIHJlc3VsdHMnIDogJydcIlxuICAgICAgW2VtcHR5RmlsdGVyTWVzc2FnZV09XCJsb2FkaW5nID8gJ0xvYWRpbmcuLi4nIDogJydcIlxuICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIj5cbiAgICAgICAgICA8c3BhbiBbcFRvb2x0aXBdPVwiZ2V0VG9vbHRpcChpdGVtKVwiPnt7Z2V0TGFiZWwoaXRlbSl9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cbiAgICAgICAgICA8c3BhbiBbcFRvb2x0aXBdPVwiZ2V0VG9vbHRpcChpdGVtKVwiPnt7Z2V0TGFiZWwoaXRlbSl9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlcmljb25cIj5cbiAgICAgICAgICA8U2VhcmNoSWNvbiAqbmdJZj1cIiFsb2FkaW5nXCI+PC9TZWFyY2hJY29uPlxuICAgICAgICAgIDxTcGlubmVySWNvbiAqbmdJZj1cImxvYWRpbmdcIiBbc3Bpbl09XCJ0cnVlXCI+PC9TcGlubmVySWNvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtZHJvcGRvd24+XG48L25nLXRlbXBsYXRlPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwcm9wZXJ0eS5vcHRpb25zLm1heEl0ZW1zIHx8IHByb3BlcnR5Lm9wdGlvbnMubWF4SXRlbXMgPT0gMVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dE9wdGlvbnNTaW5nbGVSZWYgPz8gZGVmYXVsdElucHV0T3B0aW9uc1NpbmdsZTsgY29udGV4dDogeyBwcm9wZXJ0eTogcHJvcGVydHksIGFwaU5hbWU6IGFwaU5hbWUgfVwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdElucHV0T3B0aW9uc011bHRpcGxlIGxldC1wcm9wZXJ0eT1cInByb3BlcnR5XCIgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIj5cbiAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCJcbiAgICAgIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCJcbiAgICAgIFtvcHRpb25zXT1cInByb3BlcnR5Lm9wdGlvbnMuaW5saW5lXCJcbiAgICAgIFtmaWx0ZXJCeV09XCJwcm9tcHRGaWVsZCArICcsJyArIHZhbHVlRmllbGRcIlxuICAgICAgW29wdGlvbkxhYmVsXT1cInByb21wdEZpZWxkXCJcbiAgICAgIFtvcHRpb25WYWx1ZV09XCJ2YWx1ZUZpZWxkXCJcbiAgICAgIFtyZWFkb25seV09XCJwcm9wZXJ0eS5yZWFkT25seVwiXG4gICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHkucmVxdWlyZWQgfHwgcHJvcGVydHkub3B0aW9ucy5taW5JdGVtcyA+IDBcIlxuICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgIFtmaWx0ZXJWYWx1ZV09XCJmaWx0ZXJWYWx1ZVwiXG4gICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxuICAgICAgW3Nob3dUb2dnbGVBbGxdPVwidHJ1ZVwiXG4gICAgICAob25GaWx0ZXIpPVwib25PcHRpb25zRmlsdGVyZWQoJGV2ZW50KVwiXG4gICAgICAob25DaGFuZ2UpPVwib25PcHRpb25zQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgW3BhbmVsU3R5bGVDbGFzc109XCJsb2FkaW5nID8gJ2xvYWRpbmcnIDogJydcIlxuICAgICAgW2ZpbHRlclBsYWNlSG9sZGVyXT1cInByb3BlcnR5Py5vcHRpb25zPy5saW5rPy5ocmVmID8gJ3NlYXJjaCBmb3IgbW9yZSByZXN1bHRzJyA6ICcnXCJcbiAgICAgIFtlbXB0eUZpbHRlck1lc3NhZ2VdPVwibG9hZGluZyA/ICdMb2FkaW5nLi4uJyA6ICcnXCJcbiAgICAgIFtzZWxlY3Rpb25MaW1pdF09XCJwcm9wZXJ0eS5vcHRpb25zLm1heEl0ZW1zXCJcbiAgICAgIGRpc3BsYXk9XCJjaGlwXCJcbiAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgPlxuICAgIDxuZy10ZW1wbGF0ZSBsZXQtdmFsdWUgcFRlbXBsYXRlPVwic2VsZWN0ZWRJdGVtc1wiPlxuICAgICAgPHAtY2hpcFxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiB2YWx1ZTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIFtwVG9vbHRpcF09XCJnZXRUb29sdGlwKGl0ZW0pXCJcbiAgICAgICAgW2xhYmVsXT1cImdldExhYmVsKGl0ZW0pXCJcbiAgICAgICAgW3JlbW92YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgKG9uUmVtb3ZlKT1cInJlbW92ZUJ5VmFsdWUoZ2V0VmFsdWUoaXRlbSkpXCJcbiAgICAgID5cbiAgICAgIDwvcC1jaGlwPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cbiAgICAgICAgPHNwYW4gW3BUb29sdGlwXT1cImdldFRvb2x0aXAoaXRlbSlcIj57e2dldExhYmVsKGl0ZW0pfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyaWNvblwiPlxuICAgICAgPFNlYXJjaEljb24gKm5nSWY9XCIhbG9hZGluZ1wiPjwvU2VhcmNoSWNvbj5cbiAgICAgIDxTcGlubmVySWNvbiAqbmdJZj1cImxvYWRpbmdcIiBbc3Bpbl09XCJ0cnVlXCI+PC9TcGlubmVySWNvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3AtbXVsdGlTZWxlY3Q+XG48L25nLXRlbXBsYXRlPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIihwcm9wZXJ0eS5vcHRpb25zLm1heEl0ZW1zID8/IDApID4gMVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dE9wdGlvbnNNdWx0aXBsZVJlZiA/PyBkZWZhdWx0SW5wdXRPcHRpb25zTXVsdGlwbGU7IGNvbnRleHQ6IHsgcHJvcGVydHk6IHByb3BlcnR5LCBhcGlOYW1lOiBhcGlOYW1lIH1cIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXRPYmplY3QgbGV0LXByb3BlcnR5PVwicHJvcGVydHlcIiBsZXQtdGVtcGxhdGU9XCJ0ZW1wbGF0ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhY2VcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxydy1pbnB1dC10ZW1wbGF0ZSBbZm9ybUdyb3VwXT1cImlubmVyRm9ybUdyb3VwXCIgW3RlbXBsYXRlXT1cInByb3BlcnR5Ll90ZW1wbGF0ZXMuZGVmYXVsdFwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWlucHV0LXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dE9iamVjdFJlZiB8fCBkZWZhdWx0SW5wdXRPYmplY3Q7IGNvbnRleHQ6IHsgcHJvcGVydHk6IHByb3BlcnR5LCBpbm5lckZvcm1Hcm91cDogaW5uZXJGb3JtR3JvdXAsIGFwaU5hbWU6IGFwaU5hbWUgfVwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+IiwiPGRpdiBbbmdTd2l0Y2hdPVwicHJvcGVydHkudHlwZVwiPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuSGlkZGVuXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwiaGlkZGVuXCIgW3ZhbHVlXT1cInByb3BlcnR5LnZhbHVlXCIgLz5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlRleHRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDx0ZXh0YXJlYSAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlRleHRhcmVhXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBwSW5wdXRUZXh0YXJlYSBjbGFzcz1cInctZnVsbCBwLWlucHV0dGV4dGFyZWEgcC1pbnB1dHRleHQgcC1jb21wb25lbnQgcC1lbGVtZW50XCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiBbY29sc109XCJwcm9wZXJ0eS5jb2xzXCIgW3Jvd3NdPVwicHJvcGVydHkucm93c1wiPjwvdGV4dGFyZWE+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5TZWFyY2hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJzZWFyY2hcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGVsXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwidGVsXCIgcElucHV0VGV4dCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlVybFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cInVybFwiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5FbWFpbFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cImVtYWlsXCIgcElucHV0VGV4dCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlBhc3N3b3JkXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwicGFzc3dvcmRcIiBwUGFzc3dvcmQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkRhdGVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtkYXRlRm9ybWF0XT1cImRhdGVGb3JtYXRcIiBbc2hvd1dlZWtdPVwidHJ1ZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWNhbGVuZGFyPlxuXG4gICAgPHAtY2FsZW5kYXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5Nb250aFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW2RhdGVGb3JtYXRdPVwiZGF0ZUZvcm1hdFwiIFtzaG93V2Vla109XCJmYWxzZVwiIHZpZXc9XCJtb250aFwiIFtzaG93SWNvbl09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWNhbGVuZGFyPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuV2Vla1wiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cIndlZWtcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPHAtY2FsZW5kYXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5UaW1lXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBbZGF0ZUZvcm1hdF09XCJ0aW1lRm9ybWF0XCIgW3Nob3dUaW1lXT1cInRydWVcIiBbdGltZU9ubHldPVwidHJ1ZVwiIFtzaG93V2Vla109XCJmYWxzZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWNhbGVuZGFyPlxuXG4gICAgPHAtY2FsZW5kYXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EYXRldGltZUxvY2FsXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCIgW3Nob3dUaW1lXT1cInRydWVcIiBbc2hvd1dlZWtdPVwiZmFsc2VcIiBbc2hvd0ljb25dPVwidHJ1ZVwiIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiPjwvcC1jYWxlbmRhcj5cblxuICAgIDxwLWlucHV0TnVtYmVyICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuTnVtYmVyXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBtb2RlPVwiZGVjaW1hbFwiIFtzaG93QnV0dG9uc109XCIhcHJvcGVydHkucmVhZE9ubHlcIiBjbGFzcz1cInctZnVsbFwiIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiPjwvcC1pbnB1dE51bWJlcj5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlJhbmdlXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwicmFuZ2VcIiBbbWluXT1cInByb3BlcnR5Lm1pblwiIFttYXhdPVwicHJvcGVydHkubWF4XCIgW3N0ZXBdPVwicHJvcGVydHkuc3RlcFwiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5Db2xvclwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cImNvbG9yXCIgcElucHV0VGV4dCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5Cb29sXCI+XG4gICAgICAgIDxwLWNoZWNrYm94ICpuZ0lmPVwicHJvcGVydHkucmVxdWlyZWRcIiBbYmluYXJ5XT1cInRydWVcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtyZWFkb25seV09XCJwcm9wZXJ0eS5yZWFkT25seSFcIj48L3AtY2hlY2tib3g+XG4gICAgICAgIDxwLXRyaVN0YXRlQ2hlY2tib3ggKm5nSWY9XCIhcHJvcGVydHkucmVxdWlyZWRcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtyZWFkb25seV09XCJwcm9wZXJ0eS5yZWFkT25seSFcIj48L3AtdHJpU3RhdGVDaGVja2JveD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxwLWNhbGVuZGFyICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRGF0ZXRpbWVPZmZzZXRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtkYXRlRm9ybWF0XT1cImRhdGVGb3JtYXRcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtzaG93V2Vla109XCJmYWxzZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWNhbGVuZGFyPlxuXG4gICAgPHAtY2FsZW5kYXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5EdXJhdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW2RhdGVGb3JtYXRdPVwidGltZUZvcm1hdFwiIFtzaG93VGltZV09XCJ0cnVlXCIgW3RpbWVPbmx5XT1cInRydWVcIiBbc2hvd1dlZWtdPVwiZmFsc2VcIiBbc2hvd0ljb25dPVwidHJ1ZVwiIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiPjwvcC1jYWxlbmRhcj5cblxuICAgIDxydy1pbWFnZSAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkltYWdlXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW3Byb3BlcnR5XT1cIiRhbnkocHJvcGVydHkpXCI+PC9ydy1pbWFnZT5cblxuICAgIDxydy1maWxlICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRmlsZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtmaWxlTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2FjY2VwdF09XCIkYW55KHByb3BlcnR5LnBsYWNlaG9sZGVyKVwiPjwvcnctZmlsZT5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hEZWZhdWx0IFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuPC9kaXY+XG4iLCI8cnctZm9ybS1lbGVtZW50ICpuZ0Zvcj1cImxldCBwcm9wZXJ0eSBvZiB0ZW1wbGF0ZS5wcm9wZXJ0aWVzXCIgW3Byb3BlcnR5XT1cInByb3BlcnR5XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctZm9ybS1lbGVtZW50PiJdfQ==
|
|
610
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdHdvcmxkLWlucHV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXN0d29ybGQtY2xpZW50L3NyYy9saWIvY29tcG9uZW50cy9yZXN0d29ybGQtaW5wdXRzL3Jlc3R3b3JsZC1pbnB1dHMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtZm9ybS1lbGVtZW50L3Jlc3R3b3JsZC1mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtaW5wdXQvcmVzdHdvcmxkLWlucHV0LmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24vcmVzdHdvcmxkLWlucHV0LWNvbGxlY3Rpb24uY29tcG9uZW50Lmh0bWwiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVzdHdvcmxkLWNsaWVudC9zcmMvbGliL2NvbXBvbmVudHMvcmVzdHdvcmxkLWlucHV0cy9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24vcmVzdHdvcmxkLWlucHV0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LW9iamVjdC9yZXN0d29ybGQtaW5wdXQtb2JqZWN0LmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LXNpbXBsZS9yZXN0d29ybGQtaW5wdXQtc2ltcGxlLmNvbXBvbmVudC5odG1sIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9jb21wb25lbnRzL3Jlc3R3b3JsZC1pbnB1dHMvcmVzdHdvcmxkLWlucHV0LXRlbXBsYXRlL3Jlc3R3b3JsZC1pbnB1dC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hJLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQXFDLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUgsT0FBTyxFQUFlLGNBQWMsRUFBMkIsY0FBYyxFQUFZLFlBQVksRUFBa0UsTUFBTSx5QkFBeUIsQ0FBQztBQU12TSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUN4RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWxEOzs7Ozs7R0FNRztBQU9ILE1BQU0sT0FBTyw2QkFBNkI7SUFDeEM7OztPQUdHO0lBRUgsUUFBUSxDQUFhO0lBRXJCOzs7O09BSUc7SUFFSCxPQUFPLENBQVU7dUdBZE4sNkJBQTZCOzJGQUE3Qiw2QkFBNkIsNkdDMUIxQyx1UEFJQSw4RURzRGEsdUJBQXVCLHNNQWxDbkIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQzs7MkZBRXBFLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQzs4QkFRL0UsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFTekIsT0FBTztzQkFETixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTs7QUFJM0I7Ozs7Ozs7O0dBUUc7QUFPSCxNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDOzs7T0FHRztJQUVILFFBQVEsQ0FBYTtJQUVyQjs7OztPQUlHO0lBRUgsT0FBTyxDQUFVO0lBRWpCLElBQVcsWUFBWTtRQUNyQixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxtQkFBbUI7UUFDNUIsT0FBTyxtQkFBZ0QsQ0FBQztJQUMxRCxDQUFDO3VHQXRCVSx1QkFBdUI7MkZBQXZCLHVCQUF1QixzR0UxRHBDLDhzQkFXQSxraEJGdUZhLGlDQUFpQyxzSEE4SGpDLCtCQUErQixxS0FpVC9CLDZCQUE2QixrSEFxRDdCLDZCQUE2QixpT0E5Z0J6QixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDOzsyRkFFcEUsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLFVBQVUsaUJBR0wsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQzs4QkFRL0UsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFTekIsT0FBTztzQkFETixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTs7QUFhM0I7Ozs7Ozs7R0FPRztBQU9ILE1BQU0sT0FBTyxpQ0FBaUM7SUEyQ3pCO0lBQ0E7SUFDQTtJQTNDbkI7OztPQUdHO0lBRUgsUUFBUSxDQUFvRDtJQUU1RDs7OztPQUlHO0lBRUgsT0FBTyxDQUFVO0lBR2pCLGtCQUFrQixDQUF3QjtJQUdsQyxVQUFVLEdBQXFCLEVBQUUsQ0FBQztJQUMxQyxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBWTtJQUNwQyxJQUFXLGVBQWU7UUFDeEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssU0FBUztZQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFFaEQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVPLGVBQWUsQ0FBMkI7SUFDbEQsSUFBVyxjQUFjO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUUzQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELFlBQ21CLGlCQUFtQyxFQUNuQyxZQUF5QixFQUN6QixrQkFBcUM7UUFGckMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNuQyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO0lBRXhELENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQXlCLENBQUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUE0QixDQUFDO1FBQ3pGLElBQUksQ0FBQyxVQUFVLEdBQUcsaUNBQWlDLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDM0QsQ0FBQztJQUVPLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxRQUFtQjtRQUM1RCxJQUFJLENBQUMsUUFBUTtZQUNYLE9BQU8sRUFBRSxDQUFDO1FBRVosT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7YUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDekgsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxLQUFvQixDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sc0JBQXNCO1FBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDckQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxNQUFNLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFFbEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFnQixDQUFDO1FBQzFGLGlCQUFpQixDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQTRCLENBQUMsQ0FBQztJQUMzSCxDQUFDO0lBRU0sd0JBQXdCLENBQUMsUUFBd0I7UUFDdEQsSUFBSSxRQUFRLENBQUMsS0FBSyxLQUFLLFNBQVM7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBRS9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxNQUF1QjtRQUNsRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQzNDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDekMsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhFLG9CQUFvQjtRQUNwQiwyREFBMkQ7UUFDM0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixHQUFHLFlBQVksR0FBRyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixFQUFFLENBQUM7WUFDaEgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUUzRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQzt1R0FyR1UsaUNBQWlDOzJGQUFqQyxpQ0FBaUMsb09HbEc5QywwbENBaUJNLHcxRUg0bkJPLCtCQUErQixxRkE3aUIzQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDOzsyRkFFcEUsaUNBQWlDO2tCQU43QyxTQUFTOytCQUNFLHFCQUFxQixpQkFHaEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQzsrSUFTL0UsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFTekIsT0FBTztzQkFETixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7QUE4RnBEOzs7Ozs7OztHQVFHO0FBT0gsTUFBTSxPQUFPLCtCQUErQjtJQW9GdkI7SUFDQTtJQUNBO0lBckZuQjs7O09BR0c7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUNXLFFBQVEsQ0FBQyxLQUFnQjtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV2Qix3RkFBd0Y7UUFDeEYsSUFBSSxLQUFLLEVBQUUsT0FBTyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVM7WUFDakUsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUNPLFNBQVMsQ0FBYTtJQUU5Qjs7OztPQUlHO0lBRUgsT0FBTyxDQUFVO0lBRWpCOzs7Ozs7T0FNRztJQUVILFFBQVEsR0FBbUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBRWpFOzs7Ozs7T0FNRztJQUVILFVBQVUsR0FBbUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBR3JFLHFCQUFxQixDQUF3QztJQUc3RCx1QkFBdUIsQ0FBd0M7SUFHL0QsV0FBVyxDQUFlO0lBRTFCOztPQUVHO0lBRUksUUFBUSxHQUFHLElBQUksWUFBWSxFQUFxQyxDQUFDO0lBRWhFLFlBQVksQ0FBdUU7SUFFbkYsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUVsQyxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFTyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRXpCLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUM7SUFDckQsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUM7SUFDdkQsQ0FBQztJQUVELFlBQ21CLGVBQStCLEVBQy9CLFFBQW1DLEVBQ25DLGlCQUFtQztRQUZuQyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsYUFBUSxHQUFSLFFBQVEsQ0FBMkI7UUFDbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtJQUV0RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBeUIsQ0FBQztRQUNuRSxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQXdFLENBQUM7UUFDbEksTUFBTSxJQUFJLENBQUMsMkNBQTJDLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRU0sUUFBUSxDQUFDLElBQWtCO1FBQ2hDLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzlFLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFnQyxDQUFnQyxDQUFDO0lBQ3BGLENBQUM7SUFFTSxTQUFTLENBQUMsSUFBa0I7UUFDakMsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDL0UsT0FBTyxFQUFFLENBQUM7UUFFWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBaUMsQ0FBVyxJQUFJLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsSUFBa0I7UUFDeEMsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJO1lBQ3JDLE9BQU8sRUFBRSxDQUFDO1FBRVosSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM1RixLQUFLLElBQUksS0FBSyxLQUFLLEdBQUcsQ0FBQztRQUMzQixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBa0I7UUFDM0MsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJO1lBQ3JDLE9BQU8sRUFBRSxDQUFDO1FBRVosTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7YUFDakMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3ZLLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSywrQkFBK0IsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTVKLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxjQUFjLENBQUMsS0FBa0M7UUFDdEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxJQUFJO1lBQ3JGLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUVwRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQW9CLENBQUMsS0FBSyxLQUFLLENBQWlCLENBQUM7SUFDbEgsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFrQztRQUNyRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxJQUFJO1lBQzNFLE9BQU87UUFFVCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUMxQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBdUQsQ0FBQztRQUMxRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVsRSxLQUFLLENBQUMseUJBQXlCLENBQUMsS0FBc0Q7UUFDM0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFckIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7WUFFdkMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssRUFBRTtnQkFDeEMsT0FBTztZQUVULElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sVUFBVSxHQUFJLEtBQUssQ0FBQyxhQUE0QixDQUFDO2dCQUN2RCxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztvQkFDL0MsMEhBQTBIO29CQUUxSCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTTt5QkFDdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQzt5QkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3lCQUNyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7eUJBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDUCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMvQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQyxDQUFDLENBQUMsQ0FBQztvQkFFTCxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQzt3QkFDaEMsT0FBTztvQkFFVCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVFLE1BQU0sTUFBTSxHQUFHLGFBQWE7d0JBQzFCLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRzt3QkFDbEQsQ0FBQyxDQUFDLFlBQVksT0FBTyxDQUFDLFdBQVcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBRWpFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQzt3QkFDdkIsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUVwRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDbkIsTUFBTSxjQUFjLEdBQXVELE9BQU8sQ0FBQyxNQUFNOzZCQUN0RixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQWlCLENBQUMsQ0FBQzs2QkFDMUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFRLENBQUMsQ0FBUSxDQUFDO3dCQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQzt3QkFDM0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDbEMsQ0FBQztnQkFDSCxDQUFDO3FCQUNJLENBQUM7b0JBQ0osNERBQTREO29CQUU1RCxJQUFJLE1BQU0sR0FBRyxZQUFZLE9BQU8sQ0FBQyxXQUFXLE1BQU0sS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO29CQUNuRSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDNUYsTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsT0FBTyxLQUFLLENBQUMsTUFBTSxVQUFVLE1BQU0sR0FBRyxDQUFDO29CQUV4RSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7d0JBQ3ZCLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztnQkFDTyxDQUFDO1lBQ1AsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUF3QztRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU8sS0FBSyxDQUFDLDJDQUEyQztRQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUV0QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQy9ELE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxRQUFRLE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQztRQUN0RSxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxNQUFjLEVBQUUsV0FBbUI7UUFDMUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSTtZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFFN0QsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsWUFBWSxDQUFlLFlBQVksRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksY0FBYyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyRixNQUFNLE9BQU8sR0FBRyx1RUFBdUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUM3RyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkgsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFLLENBQUMsU0FBUyxDQUFDLEtBQXNDLENBQUM7UUFDOUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1FBRTFCLHVJQUF1STtRQUN2SSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRU8seUJBQXlCLENBQUMsS0FBb0M7UUFDcEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBdUMsQ0FBQztRQUNoRixJQUFJLENBQUMsU0FBUztZQUNaLE9BQU8sS0FBSyxDQUFDO1FBRWYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDaEQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUYsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUN0QyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUk7WUFDdkMsT0FBTyxFQUFFLENBQUM7UUFFWixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3RCLE9BQU8sS0FBSyxDQUFBO1FBRWQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBRTFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxNQUFNLENBQUMsd0JBQXdCLENBQUMsS0FBYztRQUNwRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDdEIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2YsTUFBTSxLQUFLLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRXRILE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7dUdBaFNVLCtCQUErQjsyRkFBL0IsK0JBQStCLDBkQW9EL0IsV0FBVyxnRElwUnhCLDhzSEFvRkEsKzBJSjBJaUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQzs7MkZBRXBFLCtCQUErQjtrQkFOM0MsU0FBUzsrQkFDRSxtQkFBbUIsaUJBR2QsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQzsySkFXcEUsUUFBUTtzQkFEbEIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBZ0J6QixPQUFPO3NCQUROLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQVd6QixRQUFRO3NCQURQLEtBQUs7Z0JBV04sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLHFCQUFxQjtzQkFEcEIsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXJELHVCQUF1QjtzQkFEdEIsWUFBWTt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXZELFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxXQUFXO2dCQU9mLFFBQVE7c0JBRGQsTUFBTTs7QUF5T1Q7Ozs7Ozs7R0FPRztBQU9ILE1BQU0sT0FBTyw2QkFBNkI7SUE4QnJCO0lBNUJuQjs7O09BR0c7SUFFSCxRQUFRLENBQXdFO0lBRWhGOzs7O09BSUc7SUFFSCxPQUFPLENBQVU7SUFHakIsY0FBYyxDQUF3QjtJQUU5QixlQUFlLENBQWdCO0lBRXZDLElBQVcsY0FBYztRQUN2QixJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFM0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUNtQixpQkFBbUM7UUFBbkMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtJQUV0RCxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUF5QixDQUFDO1FBQ25FLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBaUIsQ0FBQztJQUNoRixDQUFDO3VHQXJDVSw2QkFBNkI7MkZBQTdCLDZCQUE2Qix3TktqaEIxQyxzbUJBV2UsaXhCTGtvQkYsK0JBQStCLHFGQTlIM0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQzs7MkZBRXBFLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztxRkFTL0UsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFTekIsT0FBTztzQkFETixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJekIsY0FBYztzQkFEYixZQUFZO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7O0FBdUJoRDs7Ozs7O0dBTUc7QUFPSCxNQUFNLE9BQU8sNkJBQTZCO0lBZ0RyQjtJQTlDbkI7OztPQUdHO0lBRUgsUUFBUSxDQUFhO0lBRXJCLElBQVcsWUFBWTtRQUNyQixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU8sTUFBTSxDQUFVLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLDBCQUEwQjtTQUNwRixrQkFBa0IsRUFBRTtTQUNwQixPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztTQUNuQixPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztTQUNuQixPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztTQUNyQixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXRCLElBQVcsVUFBVTtRQUNuQixPQUFPLDZCQUE2QixDQUFDLFdBQVcsQ0FBQztJQUNuRCxDQUFDO0lBRU8sTUFBTSxDQUFVLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUNoRSxrQkFBa0IsRUFBRTtTQUNwQixPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztTQUNuQixPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztTQUNuQixPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXZCLElBQVcsVUFBVTtRQUNuQixPQUFPLDZCQUE2QixDQUFDLFdBQVcsQ0FBQztJQUNuRCxDQUFDO0lBRU8sWUFBWSxDQUE0QztJQUVoRSxJQUFXLFdBQVc7UUFDcEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRTNDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFDbUIsaUJBQW1DO1FBQW5DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7SUFFdEQsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBeUIsQ0FBQztRQUNuRSxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQTZDLENBQUM7SUFDekcsQ0FBQzt1R0F2RFUsNkJBQTZCOzJGQUE3Qiw2QkFBNkIseUZNdGtCMUMsNHFLQWlEQSx3d0lObWhCaUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQzs7MkZBRXBFLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztxRkFTL0UsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTs7QUFvRDNCOzs7Ozs7R0FNRztBQU9ILE1BQU0sT0FBTywrQkFBK0I7SUFDMUM7Ozs7T0FJRztJQUVILE9BQU8sQ0FBVTtJQUVqQjs7OztPQUlHO0lBRUgsUUFBUSxDQUFZO3VHQWZULCtCQUErQjsyRkFBL0IsK0JBQStCLCtHTzdvQjVDLGtJQUEwSCx1TFAwQjdHLDZCQUE2QixrRkFpbkJ6QixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDOzsyRkFFcEUsK0JBQStCO2tCQU4zQyxTQUFTOytCQUNFLG1CQUFtQixpQkFHZCxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDOzhCQVMvRSxPQUFPO3NCQUROLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQVN6QixRQUFRO3NCQURQLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSwgTnVtYmVyVGVtcGxhdGUsIE9wdGlvbnMsIE9wdGlvbnNJdGVtRHRvLCBQcm9ibGVtRGV0YWlscywgUHJvcGVydHksIFByb3BlcnR5VHlwZSwgUmVzb3VyY2VEdG8sIFJlc291cmNlT2ZEdG8sIFNpbXBsZVZhbHVlLCBUZW1wbGF0ZSwgVGVtcGxhdGVEdG8gfSBmcm9tICdAd2VydHp1aS9uZ3gtaGFsLWNsaWVudCc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBEcm9wZG93bkNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2V2ZW50cyc7XHJcbmltcG9ydCB7IFByb3BlcnR5VGVtcGxhdGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RlbXBsYXRpbmcnO1xyXG5pbXBvcnQgeyBSZXN0V29ybGRDbGllbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0d29ybGQtY2xpZW50JztcclxuaW1wb3J0IHsgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3R3b3JsZC1jbGllbnQtY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IFByb3BlcnR5V2l0aE9wdGlvbnMsIFByb3BlcnR5V2l0aEltYWdlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NwZWNpYWwtcHJvcGVydGllcydcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICcuLi8uLi91dGlsL2RlYm91bmNlJztcclxuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcclxuXHJcbi8qKlxyXG4gKiBBIGZvcm0gZWxlbWVudCB3aXRoIGEgbGFiZWwgdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSBhIHByb3BlcnR5IGluIGEgZm9ybSB0ZW1wbGF0ZS5cclxuICogVGhpcyBtYXkgYWxzbyBiZSBhIGNvbXBsZXggb2JqZWN0IG9yIGEgY29sbGVjdGlvbiBpbiB3aGljaCBjYXNlIG11bHRpcGxlIGFuZCBuZXN0ZWQgaW5wdXQgZWxlbWVudHMgbWF5IGJlIHJlbmRlcmVkLlxyXG4gKiBJZiB5b3Ugd2FudCBhIGZvcm0gZWxlbWVudCB3aXRob3V0IGEgbGFiZWwsIHVzZSB7QGxpbmsgUmVzdFdvcmxkRm9ybUlucHV0fSBgPHJ3LWlucHV0PmAuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxydy1mb3JtLWVsZW1lbnQgW3Byb3BlcnR5XT1cInByb3BlcnR5XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctZm9ybS1lbGVtZW50PlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1mb3JtLWVsZW1lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtZm9ybS1lbGVtZW50L3Jlc3R3b3JsZC1mb3JtLWVsZW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1mb3JtLWVsZW1lbnQvcmVzdHdvcmxkLWZvcm0tZWxlbWVudC5jb21wb25lbnQuY3NzJ10sXHJcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IEZvcm1Hcm91cERpcmVjdGl2ZSB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkRm9ybUVsZW1lbnRDb21wb25lbnQ8VFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPj4ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LlxyXG4gICAqIEByZXF1aXJlZFxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHJvcGVydHkhOiBUUHJvcGVydHk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBUEkgdG8gdXNlIGZvciB0aGUgcHJvcGVydHkuXHJcbiAgICogQHJlcXVpcmVkXHJcbiAgICogQHJlbWFya3MgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgQVBJIGFzIGRlZmluZWQgaW4gdGhlIGBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uYC5cclxuICAgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIGFwaU5hbWUhOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGZvcm0gaW5wdXQgZWxlbWVudCB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIGEgcHJvcGVydHkgaW4gYSBmb3JtIHRlbXBsYXRlLlxyXG4gKiBUaGlzIG1heSBhbHNvIGJlIGEgY29tcGxleCBvYmplY3Qgb3IgYSBjb2xsZWN0aW9uIGluIHdoaWNoIGNhc2UgbXVsdGlwbGUgYW5kIG5lc3RlZCBpbnB1dCBlbGVtZW50cyBtYXkgYmUgcmVuZGVyZWQuXHJcbiAqIElmIHlvdSBhbHNvIHdhbnQgYSBsYWJlbCwgdXNlIHtAbGluayBSZXN0V29ybGRGb3JtRWxlbWVudH0gYDxydy1mb3JtLWVsZW1lbnQ+YC5cclxuICogWW91IGNhbiBhbHNvIHVzZSBvbmUgb2YgdGhlIGRpZmZlcmVudCBSZXN0V29ybGRJbnB1dC4uLiBgPHJ3LWlucHV0LS4uLj5gIGVsZW1lbnRzIHRvIHJlbmRlciBhIHNwZWNpZmljIGlucHV0LFxyXG4gKiBidXQgaXQgaXMgYWR2aXNlZCB0byBjb250cm9sIHRoZSByZW5kZXJlZCBpbnB1dCB0aHJvdWdoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHkuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxydy1pbnB1dCBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1pbnB1dD5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtaW5wdXQvcmVzdHdvcmxkLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQvcmVzdHdvcmxkLWlucHV0LmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRJbnB1dENvbXBvbmVudDxUUHJvcGVydHkgZXh0ZW5kcyBQcm9wZXJ0eTxTaW1wbGVWYWx1ZSwgc3RyaW5nLCBzdHJpbmc+PiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIHByb3BlcnR5IHRvIGRpc3BsYXkuXHJcbiAgICogQHJlcXVpcmVkXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwcm9wZXJ0eSE6IFRQcm9wZXJ0eTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFQSSB0byB1c2UgZm9yIHRoZSBwcm9wZXJ0eS5cclxuICAgKiBAcmVxdWlyZWRcclxuICAgKiBAcmVtYXJrcyBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBBUEkgYXMgZGVmaW5lZCBpbiB0aGUgYFJlc3RXb3JsZENsaWVudENvbGxlY3Rpb25gLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgYXBpTmFtZSE6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGdldCBQcm9wZXJ0eVR5cGUoKSB7XHJcbiAgICByZXR1cm4gUHJvcGVydHlUeXBlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBQcm9wZXJ0eVdpdGhPcHRpb25zKCkge1xyXG4gICAgcmV0dXJuIFByb3BlcnR5V2l0aE9wdGlvbnM8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPjtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQSBjb2xsZWN0aW9uIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKiBUaGUgY29sbGVjdGlvbiBzdXBwb3J0cyBkcmFnICYgZHJvcCB0byByZSBvcmRlciB0aGUgZWxlbWVudHMgYW5kIGNhbiBhbHNvIGJlIG5lc3RlZC5cclxuICogQHJlbWFya3MgSXQgaXMgYWR2aXNlZCB0byB1c2Uge0BsaW5rIFJlc3RXb3JsZElucHV0Q29tcG9uZW50fSBgPHJ3LWlucHV0PmAgYW5kIGNvbnRyb2wgdGhlIHJlbmRlcmVkIGlucHV0cyB3aXRoIHRoZSBwYXNzZWQgaW4gcHJvcGVydHlcclxuICogaW5zdGVhZCBvZiB1c2luZyB0aGlzIGNvbXBvbmVudCBkaXJlY3RseS5cclxuICogQGV4YW1wbGVcclxuICogPHJ3LWlucHV0LWNvbGxlY3Rpb24gW3Byb3BlcnR5XT1cInByb3BlcnR5XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctaW5wdXQtY29sbGVjdGlvbj5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtY29sbGVjdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1pbnB1dC1jb2xsZWN0aW9uL3Jlc3R3b3JsZC1pbnB1dC1jb2xsZWN0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtY29sbGVjdGlvbi9yZXN0d29ybGQtaW5wdXQtY29sbGVjdGlvbi5jb21wb25lbnQuY3NzJ10sXHJcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IEZvcm1Hcm91cERpcmVjdGl2ZSB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkSW5wdXRDb2xsZWN0aW9uQ29tcG9uZW50PFQgZXh0ZW5kcyB7IFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+OyB9PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LlxyXG4gICAqIEByZXF1aXJlZFxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgcHJvcGVydHkhOiBQcm9wZXJ0eSAmIHsgX3RlbXBsYXRlczogeyBkZWZhdWx0OiBUZW1wbGF0ZSB9IH07XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBUEkgdG8gdXNlIGZvciB0aGUgcHJvcGVydHkuXHJcbiAgICogQHJlcXVpcmVkXHJcbiAgICogQHJlbWFya3MgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgQVBJIGFzIGRlZmluZWQgaW4gdGhlIGBSZXN0V29ybGRDbGllbnRDb2xsZWN0aW9uYC5cclxuICAgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIGFwaU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0Q29sbGVjdGlvbicsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0Q29sbGVjdGlvblJlZj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBfdGVtcGxhdGVzOiBOdW1iZXJUZW1wbGF0ZVtdID0gW107XHJcbiAgcHVibGljIGdldCB0ZW1wbGF0ZXMoKTogTnVtYmVyVGVtcGxhdGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGVmYXVsdFRlbXBsYXRlPzogVGVtcGxhdGU7XHJcbiAgcHVibGljIGdldCBkZWZhdWx0VGVtcGxhdGUoKTogVGVtcGxhdGUge1xyXG4gICAgaWYgKHRoaXMuX2RlZmF1bHRUZW1wbGF0ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBkZWZhdWx0IHRlbXBsYXRlIGZvdW5kLlwiKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFRlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5uZXJGb3JtQXJyYXk/OiBGb3JtQXJyYXk8Rm9ybUdyb3VwPFQ+PjtcclxuICBwdWJsaWMgZ2V0IGlubmVyRm9ybUFycmF5KCkge1xyXG4gICAgaWYgKHRoaXMuX2lubmVyRm9ybUFycmF5ID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1Hcm91cCBpcyBub3Qgc2V0LlwiKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5faW5uZXJGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA8YW55PjtcclxuICAgIHRoaXMuX2lubmVyRm9ybUFycmF5ID0gZm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMucHJvcGVydHkubmFtZV0gYXMgRm9ybUFycmF5PEZvcm1Hcm91cDxUPj47XHJcbiAgICB0aGlzLl90ZW1wbGF0ZXMgPSBSZXN0V29ybGRJbnB1dENvbGxlY3Rpb25Db21wb25lbnQuZ2V0Q29sbGVjdGlvbkVudHJ5VGVtcGxhdGVzKHRoaXMucHJvcGVydHkpO1xyXG4gICAgdGhpcy5fZGVmYXVsdFRlbXBsYXRlID0gdGhpcy5wcm9wZXJ0eS5fdGVtcGxhdGVzLmRlZmF1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRDb2xsZWN0aW9uRW50cnlUZW1wbGF0ZXMocHJvcGVydHk/OiBQcm9wZXJ0eSk6IE51bWJlclRlbXBsYXRlW10ge1xyXG4gICAgaWYgKCFwcm9wZXJ0eSlcclxuICAgICAgcmV0dXJuIFtdO1xyXG5cclxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhwcm9wZXJ0eS5fdGVtcGxhdGVzKVxyXG4gICAgICAuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IE51bWJlci5pc0ludGVnZXIoTnVtYmVyLnBhcnNlSW50KGtleSkpICYmIE51bWJlci5pc0ludGVnZXIoTnVtYmVyLnBhcnNlSW50KHZhbHVlPy50aXRsZSA/PyBcIlwiKSkpXHJcbiAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gbmV3IE51bWJlclRlbXBsYXRlKHZhbHVlIGFzIFRlbXBsYXRlRHRvKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkTmV3SXRlbVRvQ29sbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1heEluZGV4ID0gTWF0aC5tYXgoLi4uT2JqZWN0LmtleXModGhpcy50ZW1wbGF0ZXMpXHJcbiAgICAgIC5tYXAoa2V5ID0+IE51bWJlci5wYXJzZUludChrZXkpKVxyXG4gICAgICAuZmlsdGVyKGtleSA9PiBOdW1iZXIuaXNTYWZlSW50ZWdlcihrZXkpKSk7XHJcbiAgICBjb25zdCBuZXh0SW5kZXggPSBtYXhJbmRleCA8IDAgPyAwIDogbWF4SW5kZXggKyAxO1xyXG5cclxuICAgIGNvbnN0IGNvcGllZFRlbXBsYXRlRHRvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRlZmF1bHRUZW1wbGF0ZSkpIGFzIFRlbXBsYXRlRHRvO1xyXG4gICAgY29waWVkVGVtcGxhdGVEdG8udGl0bGUgPSBuZXh0SW5kZXgudG9TdHJpbmcoKTtcclxuICAgIGNvbnN0IGNvcGllZFRlbXBsYXRlID0gbmV3IE51bWJlclRlbXBsYXRlKGNvcGllZFRlbXBsYXRlRHRvKTtcclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlc1tuZXh0SW5kZXhdID0gY29waWVkVGVtcGxhdGU7XHJcbiAgICB0aGlzLmlubmVyRm9ybUFycmF5LnB1c2godGhpcy5fZm9ybVNlcnZpY2UuY3JlYXRlRm9ybUdyb3VwRnJvbVRlbXBsYXRlKHRoaXMuZGVmYXVsdFRlbXBsYXRlKSBhcyB1bmtub3duIGFzIEZvcm1Hcm91cDxUPik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlSXRlbUZyb21Db2xsZWN0aW9uKHRlbXBsYXRlOiBOdW1iZXJUZW1wbGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKHRlbXBsYXRlLnRpdGxlID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBkZWxldGUgYSB0ZW1wbGF0ZSB3aXRob3V0IGEgdGl0bGUuXCIpO1xyXG5cclxuICAgIGRlbGV0ZSB0aGlzLnRlbXBsYXRlc1t0ZW1wbGF0ZS50aXRsZV07XHJcbiAgICB0aGlzLmlubmVyRm9ybUFycmF5LnJlbW92ZUF0KHRlbXBsYXRlLnRpdGxlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsZWN0aW9uSXRlbURyb3BwZWQoJGV2ZW50OiBDZGtEcmFnRHJvcDx7fT4pIHtcclxuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSAkZXZlbnQucHJldmlvdXNJbmRleDtcclxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9ICRldmVudC5jdXJyZW50SW5kZXg7XHJcbiAgICBjb25zdCBtb3ZlbWVudERpcmVjdGlvbiA9IGN1cnJlbnRJbmRleCA+IHByZXZpb3VzSW5kZXggPyAxIDogLTE7XHJcblxyXG4gICAgLy8gTW92ZSBpbiBGb3JtQXJyYXlcclxuICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIG1vdmUgdGhlIGl0ZW0gaW4gdGhlIF90ZW1wbGF0ZXMgb2JqZWN0XHJcbiAgICBjb25zdCBtb3ZlZENvbnRyb2wgPSB0aGlzLmlubmVyRm9ybUFycmF5LmF0KHByZXZpb3VzSW5kZXgpO1xyXG4gICAgZm9yIChsZXQgaSA9IHByZXZpb3VzSW5kZXg7IGkgKiBtb3ZlbWVudERpcmVjdGlvbiA8IGN1cnJlbnRJbmRleCAqIG1vdmVtZW50RGlyZWN0aW9uOyBpID0gaSArIG1vdmVtZW50RGlyZWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJGb3JtQXJyYXkuc2V0Q29udHJvbChpLCB0aGlzLmlubmVyRm9ybUFycmF5LmF0KGkgKyBtb3ZlbWVudERpcmVjdGlvbikpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbm5lckZvcm1BcnJheS5zZXRDb250cm9sKGN1cnJlbnRJbmRleCwgbW92ZWRDb250cm9sKTtcclxuXHJcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGlzIGhlbHBlciB0eXBlIGNvbnZlcnRzIGEgUHJvcGVydHk8WCwgWSwgWj4gdG8gYW4gT3B0aW9uc0l0ZW1EdG88WCwgWSwgWj4gYW5kIHByZXNlcnZlcyB0aGUgZ2VuZXJpYyBwYXJhbWV0ZXJzLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRXh0cmFjdEdlbmVyaWNPcHRpb25zSXRlbVR5cGU8VFByb3BlcnR5PiA9IFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PGluZmVyIFgsIGluZmVyIFksIGluZmVyIFo+ID8gT3B0aW9uc0l0ZW1EdG88WCwgWSwgWj4gOiBuZXZlclxyXG5leHBvcnQgdHlwZSBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PiA9IFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PGluZmVyIFgsIGluZmVyIFksIGluZmVyIFo+ID8gT3B0aW9uczxYLCBZLCBaPltcInNlbGVjdGVkVmFsdWVzXCJdIDogbmV2ZXJcclxuZXhwb3J0IHR5cGUgRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+ID0gVFByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHk8aW5mZXIgWCwgaW5mZXIgWSwgaW5mZXIgWj4gPyBYIDogbmV2ZXJcclxuXHJcbi8qKlxyXG4gKiBBIGRyb3Bkb3duIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKiBUaGUgZHJvcGRvd24gc3VwcG9ydHMgc2VhcmNoaW5nIHRocm91Z2ggYSBSRVNUV29ybGQgbGlzdCBlbmRwb2ludCBvbiB0aGUgYmFja2VuZCBpZiB0aGUgYGxpbmtgIG9mIHRoZSBvcHRpb25zIGlzIHNldC5cclxuICogT3RoZXJ3aXNlIHRoZSBkcm9wZG93biB3aWxsIHVzZSB0aGUgYGlubGluZWAgb2YgdGhlIG9wdGlvbnMuXHJcbiAqIEByZW1hcmtzIEl0IGlzIGFkdmlzZWQgdG8gdXNlIHtAbGluayBSZXN0V29ybGRJbnB1dENvbXBvbmVudH0gYDxydy1pbnB1dD5gIGFuZCBjb250cm9sIHRoZSByZW5kZXJlZCBpbnB1dHMgd2l0aCB0aGUgcGFzc2VkIGluIHByb3BlcnR5XHJcbiAqIGluc3RlYWQgb2YgdXNpbmcgdGhpcyBjb21wb25lbnQgZGlyZWN0bHkuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxydy1pbnB1dC1kcm9wZG93biBbcHJvcGVydHldPVwicHJvcGVydHlcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCI+PC9ydy1pbnB1dC1kcm9wZG93bj5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24vcmVzdHdvcmxkLWlucHV0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtZHJvcGRvd24vcmVzdHdvcmxkLWlucHV0LWRyb3Bkb3duLmNvbXBvbmVudC5jc3MnXSxcclxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogRm9ybUdyb3VwRGlyZWN0aXZlIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXN0V29ybGRJbnB1dERyb3Bkb3duQ29tcG9uZW50PFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4gJiB7IG9wdGlvbnM6IE9wdGlvbnM8U2ltcGxlVmFsdWUsIHN0cmluZywgc3RyaW5nPiB9LCBUT3B0aW9uc0l0ZW0gZXh0ZW5kcyBFeHRyYWN0R2VuZXJpY09wdGlvbnNJdGVtVHlwZTxUUHJvcGVydHk+ID0gRXh0cmFjdEdlbmVyaWNPcHRpb25zSXRlbVR5cGU8VFByb3BlcnR5Pj4gaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBwcm9wZXJ0eSB0byBkaXNwbGF5LlxyXG4gICAqIEByZXF1aXJlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgcHJvcGVydHkoKTogVFByb3BlcnR5IHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eTtcclxuICB9XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwdWJsaWMgc2V0IHByb3BlcnR5KHZhbHVlOiBUUHJvcGVydHkpIHtcclxuICAgIHRoaXMuX3Byb3BlcnR5ID0gdmFsdWU7XHJcblxyXG4gICAgLy8gVGhpcyBpcyBmb3IgdGhlIGNhc2UgdGhhdCB0aGUgcHJvcGVydHkgaXMgY2hhbmdlZCBhZnRlciB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkLlxyXG4gICAgaWYgKHZhbHVlPy5vcHRpb25zICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fZm9ybUNvbnRyb2wgIT09IHVuZGVmaW5lZClcclxuICAgICAgdGhpcy5zZXRJbml0aWFsU2VsZWN0ZWRPcHRpb25zRWxlbWVudEZvclByb3BlcnR5KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3Byb3BlcnR5ITogVFByb3BlcnR5O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVBJIHRvIHVzZSBmb3IgdGhlIHByb3BlcnR5LlxyXG4gICAqIEByZXF1aXJlZFxyXG4gICAqIEByZW1hcmtzIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIEFQSSBhcyBkZWZpbmVkIGluIHRoZSBgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbmAuXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbGFiZWwgZm9yIHRoZSBnaXZlbiBpdGVtLlxyXG4gICAqIFRoZSBkZWZhdWx0IHJldHVybnMgdGhlIHByb21wdCBhbmQgb3B0aW9uYWxseSB0aGUgdmFsdWUgaW4gYnJhY2tldHMuXHJcbiAgICogVGhlIHZhbHVlIGluIGJyYWNrZXRzIHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgaWYgdGhlIGBjb2xzYCBmaWVsZCBvZiB0aGUgcHJvcGVydHkgaXMgdW5kZWZpbmVkIG9yIGdyZWF0ZXIgdGhhbiAxLlxyXG4gICAqIE92ZXJ3cml0ZSB0aGlzIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgbGFiZWwuXHJcbiAgICogQHBhcmFtIGl0ZW0gVGhlIGl0ZW0gdG8gZ2V0IHRoZSBsYWJlbCBmb3IuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBnZXRMYWJlbDogKGl0ZW06IFRPcHRpb25zSXRlbSkgPT4gc3RyaW5nID0gdGhpcy5nZXRMYWJlbEludGVybmFsO1xyXG5cclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdG9vbHRpcCBmb3IgdGhlIGdpdmVuIGl0ZW0uXHJcbiAgICogVGhlIGRlZmF1bHQgcmV0dXJucyBhbGwgcHJvcGVydGllcyBvZiB0aGUgaXRlbSBleGNlcHQgdGhlIG9uZXMgdGhhdCBzdGFydCB3aXRoIGFuIHVuZGVyc2NvcmUgb3IgdGhlIG9uZXMgdGhhdCBhcmUgaW4gdGhlIGxpc3Qgb2YgZGVmYXVsdCBwcm9wZXJ0aWVzIHRvIGV4Y2x1ZGUuXHJcbiAgICogVGhlIGRlZmF1bHQgcHJvcGVydGllcyB0byBleGNsdWRlIGFyZTogY3JlYXRlZEF0LCBjcmVhdGVkQnksIGxhc3RDaGFuZ2VkQXQsIGxhc3RDaGFuZ2VkQnksIHRpbWVzdGFtcCwgcHJvbXB0RmllbGQsIHZhbHVlRmllbGQuXHJcbiAgICogT3ZlcndyaXRlIHRoaXMgZnVuY3Rpb24gdG8gY2hhbmdlIHRoZSB0b29sdGlwLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIHRvIGdldCB0aGUgbGFiZWwgZm9yLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0VG9vbHRpcDogKGl0ZW06IFRPcHRpb25zSXRlbSkgPT4gc3RyaW5nID0gdGhpcy5nZXRUb29sdGlwSW50ZXJuYWw7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lucHV0T3B0aW9uc1NpbmdsZScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0T3B0aW9uc1NpbmdsZVJlZj86IFRlbXBsYXRlUmVmPFByb3BlcnR5VGVtcGxhdGVDb250ZXh0PjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZCgnaW5wdXRPcHRpb25zTXVsdGlwbGUnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBpbnB1dE9wdGlvbnNNdWx0aXBsZVJlZj86IFRlbXBsYXRlUmVmPFByb3BlcnR5VGVtcGxhdGVDb250ZXh0PjtcclxuXHJcbiAgQFZpZXdDaGlsZChNdWx0aVNlbGVjdClcclxuICBtdWx0aVNlbGVjdD86IE11bHRpU2VsZWN0O1xyXG5cclxuICAvKipcclxuICAgKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgdmFsdWUgY2hhbmdlcy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERyb3Bkb3duQ2hhbmdlRXZlbnQ8VE9wdGlvbnNJdGVtPj4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfZm9ybUNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w8RXh0cmFjdEdlbmVyaWNPcHRpb25zU2VsZWN0ZWRWYWx1ZXNUeXBlPFRQcm9wZXJ0eT4+O1xyXG5cclxuICBwcml2YXRlIF9maWx0ZXJWYWx1ZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgcHVibGljIGdldCBmaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsdWVGaWVsZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHkub3B0aW9ucy52YWx1ZUZpZWxkID8/IFwidmFsdWVcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHJvbXB0RmllbGQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BlcnR5Lm9wdGlvbnMucHJvbXB0RmllbGQgPz8gXCJwcm9tcHRcIjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2xpZW50czogUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA8YW55PjtcclxuICAgIHRoaXMuX2Zvcm1Db250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW3RoaXMucHJvcGVydHkubmFtZV0gYXMgQWJzdHJhY3RDb250cm9sPEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+PjtcclxuICAgIGF3YWl0IHRoaXMuc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRGb3JQcm9wZXJ0eSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFZhbHVlKGl0ZW06IFRPcHRpb25zSXRlbSk6IEV4dHJhY3RWYWx1ZVR5cGU8VFByb3BlcnR5PiB7XHJcbiAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwgfHwgIWl0ZW0uaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZUZpZWxkKSlcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgaXRlbSBkb2VzIG5vdCBoYXZlIGEgcHJvcGVydHkgJHt0aGlzLnZhbHVlRmllbGR9LmApO1xyXG5cclxuICAgIHJldHVybiBpdGVtW3RoaXMudmFsdWVGaWVsZCBhcyBrZXlvZiBUT3B0aW9uc0l0ZW1dIGFzIEV4dHJhY3RWYWx1ZVR5cGU8VFByb3BlcnR5PjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRQcm9tcHQoaXRlbTogVE9wdGlvbnNJdGVtKTogc3RyaW5nIHtcclxuICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCB8fCAhaXRlbS5oYXNPd25Qcm9wZXJ0eSh0aGlzLnByb21wdEZpZWxkKSlcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1bdGhpcy5wcm9tcHRGaWVsZCBhcyBrZXlvZiBUT3B0aW9uc0l0ZW1dIGFzIHN0cmluZyA/PyBcIlwiO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExhYmVsSW50ZXJuYWwoaXRlbTogVE9wdGlvbnNJdGVtKTogc3RyaW5nIHtcclxuICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgbGV0IGxhYmVsID0gdGhpcy5nZXRQcm9tcHQoaXRlbSk7XHJcbiAgICBpZiAodGhpcy5wcm9wZXJ0eS5jb2xzID09PSB1bmRlZmluZWQgfHwgdGhpcy5wcm9wZXJ0eS5jb2xzID4gMSkge1xyXG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoaXRlbSk7XHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgfHwgKHZhbHVlICE9PSBcIlwiICYmIHZhbHVlLnRvVXBwZXJDYXNlKCkgIT09IGxhYmVsLnRvVXBwZXJDYXNlKCkpKVxyXG4gICAgICAgIGxhYmVsICs9IGAgKCR7dmFsdWV9KWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxhYmVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUb29sdGlwSW50ZXJuYWwoaXRlbTogVE9wdGlvbnNJdGVtKTogc3RyaW5nIHtcclxuICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcblxyXG4gICAgY29uc3QgdG9vbHRpcCA9IE9iamVjdC5lbnRyaWVzKGl0ZW0pXHJcbiAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhKGtleS5zdGFydHNXaXRoKCdfJykgfHwgWydjcmVhdGVkQXQnLCAnY3JlYXRlZEJ5JywgJ2xhc3RDaGFuZ2VkQXQnLCAnbGFzdENoYW5nZWRCeScsICd0aW1lc3RhbXAnLCB0aGlzLnByb21wdEZpZWxkLCB0aGlzLnZhbHVlRmllbGRdLmluY2x1ZGVzKGtleSkpKVxyXG4gICAgICAucmVkdWNlKChwcmV2LCBba2V5LCB2YWx1ZV0sIGluZGV4KSA9PiBgJHtwcmV2fSR7aW5kZXggPT09IDAgPyAnJyA6ICdcXG4nfSR7a2V5fTogJHtSZXN0V29ybGRJbnB1dERyb3Bkb3duQ29tcG9uZW50Lmpzb25TdHJpbmdpZnlXaXRoRWxpcHNpcyh2YWx1ZSl9YCwgJycpO1xyXG5cclxuICAgIHJldHVybiB0b29sdGlwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEl0ZW1CeVZhbHVlKHZhbHVlOiBFeHRyYWN0VmFsdWVUeXBlPFRQcm9wZXJ0eT4pOiBUT3B0aW9uc0l0ZW0ge1xyXG4gICAgaWYgKHRoaXMucHJvcGVydHkub3B0aW9ucy5pbmxpbmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnByb3BlcnR5Lm9wdGlvbnMuaW5saW5lID09PSBudWxsKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm9wZXJ0eSBkb2VzIG5vdCBoYXZlIGFueSBpbmxpbmUgb3B0aW9ucy4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5vcHRpb25zLmlubGluZS5maW5kKGl0ZW0gPT4gdGhpcy5nZXRWYWx1ZShpdGVtIGFzIFRPcHRpb25zSXRlbSkgPT09IHZhbHVlKSBhcyBUT3B0aW9uc0l0ZW07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlQnlWYWx1ZSh2YWx1ZTogRXh0cmFjdFZhbHVlVHlwZTxUUHJvcGVydHk+KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZm9ybUNvbnRyb2wudmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgY29uc3QgbmV3VmFsdWUgPSBmb3JtVmFsdWUuZmlsdGVyKGkgPT4gaSAhPT0gdmFsdWUpIGFzIEV4dHJhY3RHZW5lcmljT3B0aW9uc1NlbGVjdGVkVmFsdWVzVHlwZTxUUHJvcGVydHk+O1xyXG4gICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uT3B0aW9uc0ZpbHRlcmVkID0gZGVib3VuY2UodGhpcy5vbk9wdGlvbnNGaWx0ZXJlZEludGVybmFsLCAyMDApO1xyXG5cclxuICBwdWJsaWMgYXN5bmMgb25PcHRpb25zRmlsdGVyZWRJbnRlcm5hbChldmVudDogeyBvcmlnaW5hbEV2ZW50OiBFdmVudDsgZmlsdGVyOiBzdHJpbmcgfCBudWxsIH0pIHtcclxuICAgIHRoaXMuX2xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BlcnR5Py5vcHRpb25zO1xyXG5cclxuICAgICAgaWYgKCEoZXZlbnQuZmlsdGVyKSB8fCBldmVudC5maWx0ZXIgPT09ICcnKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50LnR5cGUgPT09IFwiaW5wdXRcIikge1xyXG4gICAgICAgIGNvbnN0IGlucHV0RXZlbnQgPSAoZXZlbnQub3JpZ2luYWxFdmVudCBhcyBJbnB1dEV2ZW50KTtcclxuICAgICAgICBpZiAoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0RnJvbVBhc3RlXCIpIHtcclxuICAgICAgICAgIC8vIElmIHRoZSB1c2VyIHBhc3RlZCBpbiBtdWx0aXBsZSBpZHMgYXMgY29tbWEgc2VwYXJhdGVkIGxpc3QsIHdlIHdhbnQgdG8gZ2V0IHRoZW0gYWxsIGFuZCBzZXQgdGhlbSBhcyB0aGUgc2VsZWN0ZWQgdmFsdWUuXHJcblxyXG4gICAgICAgICAgdmFyIHZhbHVlcyA9IGV2ZW50LmZpbHRlclxyXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgIC5maWx0ZXIodiA9PiB2ICE9PSAnJylcclxuICAgICAgICAgICAgLm1hcCh2ID0+IHYudHJpbSgpKVxyXG4gICAgICAgICAgICAubWFwKHYgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG4gPSBOdW1iZXIucGFyc2VGbG9hdCh2KTtcclxuICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gdiA6IG47XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmICghdmFsdWVzIHx8IHZhbHVlcy5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICBjb25zdCBhbGxBcmVOdW1iZXJzID0gdmFsdWVzLmV2ZXJ5KHYgPT4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHYpKTtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGFsbEFyZU51bWJlcnNcclxuICAgICAgICAgICAgPyBgJHtvcHRpb25zLnZhbHVlRmllbGR9IGluICgke3ZhbHVlcy5qb2luKCcsJyl9KWBcclxuICAgICAgICAgICAgOiBgY29udGFpbnMoJHtvcHRpb25zLnByb21wdEZpZWxkfSwgJyR7dmFsdWVzLmpvaW4oXCInLCAnXCIpfScpYDtcclxuXHJcbiAgICAgICAgICBpZiAoKG9wdGlvbnM/Lmxpbms/LmhyZWYpKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLlNldElubGluZU9wdGlvbnNGcm9tRmlsdGVyKGZpbHRlciwgXCJcIik7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaW5saW5lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzOiBFeHRyYWN0R2VuZXJpY09wdGlvbnNTZWxlY3RlZFZhbHVlc1R5cGU8VFByb3BlcnR5PiA9IG9wdGlvbnMuaW5saW5lXHJcbiAgICAgICAgICAgICAgLm1hcChpID0+IHRoaXMuZ2V0VmFsdWUoaSBhcyBUT3B0aW9uc0l0ZW0pKVxyXG4gICAgICAgICAgICAgIC5maWx0ZXIodiA9PiB2YWx1ZXMuaW5jbHVkZXModiBhcyBhbnkpKSBhcyBhbnk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnNldFZhbHVlKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdD8ucmVzZXRGaWx0ZXIoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBub3JtYWwgY2FzZSB3aGVyZSB0aGUgdXNlciB0eXBlcyBpbiBhIGZpbHRlci5cclxuXHJcbiAgICAgICAgICBsZXQgZmlsdGVyID0gYGNvbnRhaW5zKCR7b3B0aW9ucy5wcm9tcHRGaWVsZH0sICcke2V2ZW50LmZpbHRlcn0nKWA7XHJcbiAgICAgICAgICBpZiAob3B0aW9ucy52YWx1ZUZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSAnaWQnICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlSW50KGV2ZW50LmZpbHRlcikpKVxyXG4gICAgICAgICAgICBmaWx0ZXIgPSBgKCR7b3B0aW9ucy52YWx1ZUZpZWxkfSBlcSAke2V2ZW50LmZpbHRlcn0pICBvciAoJHtmaWx0ZXJ9KWA7XHJcblxyXG4gICAgICAgICAgaWYgKChvcHRpb25zPy5saW5rPy5ocmVmKSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5TZXRJbmxpbmVPcHRpb25zRnJvbUZpbHRlcihmaWx0ZXIsIGV2ZW50LmZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uT3B0aW9uc0NoYW5nZWQoZXZlbnQ6IERyb3Bkb3duQ2hhbmdlRXZlbnQ8VE9wdGlvbnNJdGVtPikge1xyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0SW5pdGlhbFNlbGVjdGVkT3B0aW9uc0VsZW1lbnRGb3JQcm9wZXJ0eSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BlcnR5Lm9wdGlvbnM7XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLmxpbms/LmhyZWYgfHwgIW9wdGlvbnMuc2VsZWN0ZWRWYWx1ZXMpIHtcclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5saW5lKSB8fCBvcHRpb25zLmlubGluZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgb3B0aW9ucy5pbmxpbmUgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpbHRlciA9IGAke29wdGlvbnMudmFsdWVGaWVsZH0gaW4gKCR7b3B0aW9ucy5zZWxlY3RlZFZhbHVlc30pYDtcclxuICAgIGF3YWl0IHRoaXMuU2V0SW5saW5lT3B0aW9uc0Zyb21GaWx0ZXIoZmlsdGVyLCBcIlwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgU2V0SW5saW5lT3B0aW9uc0Zyb21GaWx0ZXIoZmlsdGVyOiBzdHJpbmcsIGV2ZW50RmlsdGVyOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnByb3BlcnR5Lm9wdGlvbnM7XHJcbiAgICBpZiAoIW9wdGlvbnMubGluaz8uaHJlZilcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvcGVydHkgZG9lcyBub3QgaGF2ZSBhIGxpbmsgaHJlZi4nKTtcclxuXHJcbiAgICBjb25zdCB0ZW1wbGF0ZWRVcmkgPSBvcHRpb25zLmxpbmsuaHJlZjtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKS5nZXRMaXN0QnlVcmk8VE9wdGlvbnNJdGVtPih0ZW1wbGF0ZWRVcmksIHsgJGZpbHRlcjogZmlsdGVyLCAkdG9wOiAxMCB9KTtcclxuICAgIGlmICghcmVzcG9uc2Uub2sgfHwgUHJvYmxlbURldGFpbHMuaXNQcm9ibGVtRGV0YWlscyhyZXNwb25zZS5ib2R5KSB8fCAhcmVzcG9uc2UuYm9keSkge1xyXG4gICAgICBjb25zdCBtZXNzYWdlID0gYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgdGhlIHNlbGVjdGVkIGl0ZW1zIGZvciB0aGUgcHJvcGVydHkgJHt0aGlzLnByb3BlcnR5Lm5hbWV9LmA7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6IG1lc3NhZ2UsIGRhdGE6IHJlc3BvbnNlLCBzdGlja3k6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXRlbXMgPSByZXNwb25zZS5ib2R5IS5fZW1iZWRkZWQuaXRlbXMgYXMgUmVzb3VyY2VPZkR0bzxUT3B0aW9uc0l0ZW0+W107XHJcbiAgICBjb25zdCBuZXdJdGVtcyA9IHRoaXMuY29tYmluZUlubGluZVdpdGhTZWxlY3RlZChpdGVtcyk7XHJcbiAgICBvcHRpb25zLmlubGluZSA9IG5ld0l0ZW1zO1xyXG5cclxuICAgIC8vIFRoZSBtdWx0aXNlbGVjdCBjb21wb25lbnQgZG9lcyBub3QgdXBkYXRlIHRoZSBvcHRpb25zIHdoZW4gdGhlIGlubGluZSBvcHRpb25zIGFyZSB1cGRhdGVkLCBzbyB3ZSBuZWVkIHRvIHRyaWdnZXIgYSBjaGFuZ2UgZGV0ZWN0aW9uLlxyXG4gICAgdGhpcy5fZmlsdGVyVmFsdWUgPSBldmVudEZpbHRlcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tYmluZUlubGluZVdpdGhTZWxlY3RlZChpdGVtczogUmVzb3VyY2VPZkR0bzxUT3B0aW9uc0l0ZW0+W10pOiBUT3B0aW9uc0l0ZW1bXSB7XHJcbiAgICBjb25zdCBvbGRJbmxpbmUgPSB0aGlzLnByb3BlcnR5Lm9wdGlvbnMuaW5saW5lIGFzIFJlc291cmNlT2ZEdG88VE9wdGlvbnNJdGVtPltdO1xyXG4gICAgaWYgKCFvbGRJbmxpbmUpXHJcbiAgICAgIHJldHVybiBpdGVtcztcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZXMoKTtcclxuICAgIGNvbnN0IGl0ZW1zVG9LZWVwID0gb2xkSW5saW5lLmZpbHRlcihpID0+IHNlbGVjdGVkVmFsdWVzLmluY2x1ZGVzKHRoaXMuZ2V0VmFsdWUoaSBhcyBUT3B0aW9uc0l0ZW0pKSk7XHJcbiAgICBjb25zdCBuZXdWYWx1ZXMgPSBpdGVtcy5tYXAoaSA9PiB0aGlzLmdldFZhbHVlKGkpKTtcclxuICAgIGNvbnN0IG5ld0l0ZW1zID0gaXRlbXMuY29uY2F0KGl0ZW1zVG9LZWVwLmZpbHRlcihpID0+ICFuZXdWYWx1ZXMuaW5jbHVkZXModGhpcy5nZXRWYWx1ZShpKSkpKTtcclxuXHJcbiAgICByZXR1cm4gbmV3SXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdGVkVmFsdWVzKCk6IHVua25vd25bXSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBbXTtcclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXHJcbiAgICAgIHJldHVybiB2YWx1ZVxyXG5cclxuICAgIHJldHVybiBbdmFsdWVdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDbGllbnQoKTogUmVzdFdvcmxkQ2xpZW50IHtcclxuICAgIGlmICghdGhpcy5hcGlOYW1lKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgYSBjbGllbnQsIGJlY2F1c2UgdGhlIGFwaU5hbWUgaXMgbm90IHNldC4nKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50cy5nZXRDbGllbnQodGhpcy5hcGlOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGpzb25TdHJpbmdpZnlXaXRoRWxpcHNpcyh2YWx1ZTogdW5rbm93bikge1xyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gMjAwO1xyXG4gICAgY29uc3QgZW5kID0gMTA7XHJcbiAgICBjb25zdCBzdGFydCA9IG1heExlbmd0aCAtIGVuZCAtIDI7XHJcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgY29uc3Qgc2hvcnRlbmVkID0ganNvbi5sZW5ndGggPiBtYXhMZW5ndGggPyBqc29uLnN1YnN0cmluZygwLCBzdGFydCkgKyAn4oCmJyArIGpzb24uc3Vic3RyaW5nKGpzb24ubGVuZ3RoIC0gZW5kKSA6IGpzb247XHJcblxyXG4gICAgcmV0dXJuIHNob3J0ZW5lZDtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIGNvbXBsZXggb2JqZWN0IHdpdGggbXVsdGlwbGUgcHJvcGVydGllcyB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0eS5cclxuICogVGhlIG9iamVjdCBjYW4gYWxzbyBiZSBuZXN0ZWQuXHJcbiAqIEByZW1hcmtzIEl0IGlzIGFkdmlzZWQgdG8gdXNlIHtAbGluayBSZXN0V29ybGRJbnB1dENvbXBvbmVudH0gYDxydy1pbnB1dD5gIGFuZCBjb250cm9sIHRoZSByZW5kZXJlZCBpbnB1dHMgd2l0aCB0aGUgcGFzc2VkIGluIHByb3BlcnR5XHJcbiAqIGluc3RlYWQgb2YgdXNpbmcgdGhpcyBjb21wb25lbnQgZGlyZWN0bHkuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxydy1pbnB1dC1vYmplY3QgW3Byb3BlcnR5XT1cInByb3BlcnR5XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctaW5wdXQtb2JqZWN0PlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1pbnB1dC1vYmplY3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXN0d29ybGQtaW5wdXQtb2JqZWN0L3Jlc3R3b3JsZC1pbnB1dC1vYmplY3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1pbnB1dC1vYmplY3QvcmVzdHdvcmxkLWlucHV0LW9iamVjdC5jb21wb25lbnQuY3NzJ10sXHJcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IEZvcm1Hcm91cERpcmVjdGl2ZSB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzdFdvcmxkSW5wdXRPYmplY3RDb21wb25lbnQ8VCBleHRlbmRzIHsgW0sgaW4ga2V5b2YgVF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47IH0+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHByb3BlcnR5IHRvIGRpc3BsYXkuXHJcbiAgICogQHJlcXVpcmVkXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwcm9wZXJ0eSE6IFByb3BlcnR5PG51bGwsIG5ldmVyLCBuZXZlcj4gJiB7IF90ZW1wbGF0ZXM6IHsgZGVmYXVsdDogVGVtcGxhdGUgfSB9O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVBJIHRvIHVzZSBmb3IgdGhlIHByb3BlcnR5LlxyXG4gICAqIEByZXF1aXJlZFxyXG4gICAqIEByZW1hcmtzIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIEFQSSBhcyBkZWZpbmVkIGluIHRoZSBgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbmAuXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICBAQ29udGVudENoaWxkKCdpbnB1dE9iamVjdCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGlucHV0T2JqZWN0UmVmPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIHByaXZhdGUgX2lubmVyRm9ybUdyb3VwPzogRm9ybUdyb3VwPFQ+O1xyXG5cclxuICBwdWJsaWMgZ2V0IGlubmVyRm9ybUdyb3VwKCkge1xyXG4gICAgaWYgKHRoaXMuX2lubmVyRm9ybUdyb3VwID09PSB1bmRlZmluZWQpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm1Hcm91cCBpcyBub3Qgc2V0LlwiKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5faW5uZXJGb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXJcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5fY29udHJvbENvbnRhaW5lci5jb250cm9sIGFzIEZvcm1Hcm91cDxhbnk+O1xyXG4gICAgdGhpcy5faW5uZXJGb3JtR3JvdXAgPSBmb3JtR3JvdXAuY29udHJvbHNbdGhpcy5wcm9wZXJ0eS5uYW1lXSBhcyBGb3JtR3JvdXA8VD47XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQSBzaW1wbGUgaW5wdXQgZWxlbWVudCwgbGlrZSBhIHN0cmluZywgYSBudW1iZXIgb3IgYSBEYXRlIHRoYXQgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHByb3BlcnR5LlxyXG4gKiBAcmVtYXJrcyBJdCBpcyBhZHZpc2VkIHRvIHVzZSB7QGxpbmsgUmVzdFdvcmxkSW5wdXRDb21wb25lbnR9IGA8cnctaW5wdXQ+YCBhbmQgY29udHJvbCB0aGUgcmVuZGVyZWQgaW5wdXRzIHdpdGggdGhlIHBhc3NlZCBpbiBwcm9wZXJ0eVxyXG4gKiBpbnN0ZWFkIG9mIHVzaW5nIHRoaXMgY29tcG9uZW50IGRpcmVjdGx5LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiA8cnctaW5wdXQtc2ltcGxlIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWlucHV0LXNpbXBsZT5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnctaW5wdXQtc2ltcGxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVzdHdvcmxkLWlucHV0LXNpbXBsZS9yZXN0d29ybGQtaW5wdXQtc2ltcGxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZXN0d29ybGQtaW5wdXQtc2ltcGxlL3Jlc3R3b3JsZC1pbnB1dC1zaW1wbGUuY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZElucHV0U2ltcGxlQ29tcG9uZW50PFRQcm9wZXJ0eSBleHRlbmRzIFByb3BlcnR5PFNpbXBsZVZhbHVlLCBzdHJpbmcsIHN0cmluZz4+IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHByb3BlcnR5IHRvIGRpc3BsYXkuXHJcbiAgICogQHJlcXVpcmVkXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBwcm9wZXJ0eSE6IFRQcm9wZXJ0eTtcclxuXHJcbiAgcHVibGljIGdldCBQcm9wZXJ0eVR5cGUoKSB7XHJcbiAgICByZXR1cm4gUHJvcGVydHlUeXBlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2RhdGVGb3JtYXQgPSBuZXcgRGF0ZSgzMzMzLCAxMCwgMjIpIC8vIG1vbnRocyBzdGFydCBhdCAwIGluIEpTXHJcbiAgICAudG9Mb2NhbGVEYXRlU3RyaW5nKClcclxuICAgIC5yZXBsYWNlKFwiMjJcIiwgXCJkZFwiKVxyXG4gICAgLnJlcGxhY2UoXCIxMVwiLCBcIm1tXCIpXHJcbiAgICAucmVwbGFjZShcIjMzMzNcIiwgXCJ5eVwiKVxyXG4gICAgLnJlcGxhY2UoXCIzM1wiLCBcInlcIik7XHJcblxyXG4gIHB1YmxpYyBnZXQgZGF0ZUZvcm1hdCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFJlc3RXb3JsZElucHV0U2ltcGxlQ29tcG9uZW50Ll9kYXRlRm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3RpbWVGb3JtYXQgPSBuZXcgRGF0ZSgxLCAxLCAxLCAyMiwgMzMsIDQ0KVxyXG4gICAgLnRvTG9jYWxlVGltZVN0cmluZygpXHJcbiAgICAucmVwbGFjZShcIjIyXCIsIFwiaGhcIilcclxuICAgIC5yZXBsYWNlKFwiMzNcIiwgXCJtbVwiKVxyXG4gICAgLnJlcGxhY2UoXCI0NFwiLCBcInNzXCIpO1xyXG5cclxuICBwdWJsaWMgZ2V0IHRpbWVGb3JtYXQoKSB7XHJcbiAgICByZXR1cm4gUmVzdFdvcmxkSW5wdXRTaW1wbGVDb21wb25lbnQuX3RpbWVGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9mb3JtQ29udHJvbD86IEZvcm1Db250cm9sPFNpbXBsZVZhbHVlIHwgU2ltcGxlVmFsdWVbXT47XHJcblxyXG4gIHB1YmxpYyBnZXQgZm9ybUNvbnRyb2woKSB7XHJcbiAgICBpZiAodGhpcy5fZm9ybUNvbnRyb2wgPT09IHVuZGVmaW5lZClcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybUdyb3VwIGlzIG5vdCBzZXQuXCIpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9mb3JtQ29udHJvbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgUHJvcGVydHlXaXRoSW1hZ2UoKSB7XHJcbiAgICByZXR1cm4gUHJvcGVydHlXaXRoSW1hZ2U7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXJcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5fY29udHJvbENvbnRhaW5lci5jb250cm9sIGFzIEZvcm1Hcm91cDxhbnk+O1xyXG4gICAgdGhpcy5fZm9ybUNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNbdGhpcy5wcm9wZXJ0eS5uYW1lXSBhcyBGb3JtQ29udHJvbDxTaW1wbGVWYWx1ZSB8IFNpbXBsZVZhbHVlW10+O1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgY29sbGVjdGlvbiBvZiBgPHJ3LWZvcm0+YCBlbGVtZW50cyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZnJvbSBhIHRlbXBsYXRlLlxyXG4gKiBEb2VzIG5vdCBoYXZlIGFueSBidXR0b25zIG9uIGl0cyBvd24uXHJcbiAqIElmIHlvdSB3YW50IGJ1dHRvbnMsIHVzZSB7QGxpbmsgUmVzdFdvcmxkRm9ybX0gYDxydy1mb3JtPmAuXHJcbiAqIEBleGFtcGxlXHJcbiAqIDxydy1mb3JtLWNvbGxlY3Rpb24gW3RlbXBsYXRlXT1cInRlbXBsYXRlXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctZm9ybS1jb2xsZWN0aW9uPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdydy1pbnB1dC10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc3R3b3JsZC1pbnB1dC10ZW1wbGF0ZS9yZXN0d29ybGQtaW5wdXQtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Jlc3R3b3JsZC1pbnB1dC10ZW1wbGF0ZS9yZXN0d29ybGQtaW5wdXQtdGVtcGxhdGUuY29tcG9uZW50LmNzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBGb3JtR3JvdXBEaXJlY3RpdmUgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RXb3JsZElucHV0VGVtcGxhdGVDb21wb25lbnQ8VCBleHRlbmRzIHsgW0sgaW4ga2V5b2YgVF06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47IH0+IHtcclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVBJIHRvIHVzZSBmb3IgdGhlIHByb3BlcnR5LlxyXG4gICAqIEByZXF1aXJlZFxyXG4gICAqIEByZW1hcmtzIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIEFQSSBhcyBkZWZpbmVkIGluIHRoZSBgUmVzdFdvcmxkQ2xpZW50Q29sbGVjdGlvbmAuXHJcbiAgICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICBhcGlOYW1lITogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGVtcGxhdGUgdG8gZGlzcGxheS5cclxuICAgKiBAcmVxdWlyZWRcclxuICAgKiBAcmVtYXJrcyBUaGlzIGlzIHRoZSB0ZW1wbGF0ZSB0aGF0IGRlZmluZXMgdGhlIHByb3BlcnRpZXMgdG8gZGlzcGxheS5cclxuICAgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHRlbXBsYXRlITogVGVtcGxhdGU7XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdyaWQgZmllbGRcIj5cclxuICAgIDxydy1sYWJlbCBbcHJvcGVydHldPVwicHJvcGVydHlcIiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPjwvcnctbGFiZWw+XHJcbiAgICA8cnctaW5wdXQgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIGNsYXNzPVwiY29sLTEyIG1kOmNvbC0xMFwiPjwvcnctaW5wdXQ+XHJcbjwvZGl2PlxyXG4iLCI8cnctaW5wdXQtZHJvcGRvd24gKm5nSWY9XCJwcm9wZXJ0eS5vcHRpb25zXCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIFtwcm9wZXJ0eV09XCIkYW55KHByb3BlcnR5KVwiPjwvcnctaW5wdXQtZHJvcGRvd24+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIXByb3BlcnR5Lm9wdGlvbnNcIj5cclxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInByb3BlcnR5LnR5cGVcIj5cclxuICAgICAgICA8cnctaW5wdXQtb2JqZWN0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuT2JqZWN0XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiIFtwcm9wZXJ0eV09XCIkYW55KHByb3BlcnR5KVwiPjwvcnctaW5wdXQtb2JqZWN0PlxyXG4gICAgICAgIDxydy1pbnB1dC1jb2xsZWN0aW9uICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQ29sbGVjdGlvblwiIFthcGlOYW1lXT1cImFwaU5hbWVcIiBbcHJvcGVydHldPVwiJGFueShwcm9wZXJ0eSlcIj48L3J3LWlucHV0LWNvbGxlY3Rpb24+XHJcbiAgICAgICAgPHJ3LWlucHV0LXNpbXBsZSAqbmdTd2l0Y2hEZWZhdWx0IFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiPjwvcnctaW5wdXQtc2ltcGxlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPHJ3LXZhbGlkYXRpb24tZXJyb3JzIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiPjwvcnctdmFsaWRhdGlvbi1lcnJvcnM+XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJicmFjZVwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImNvbGxlY3Rpb25JdGVtRHJvcHBlZCgkZXZlbnQpXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHRlbXBsYXRlIG9mIHRlbXBsYXRlc1wiIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBjZGtEcmFnPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZ3JpcC1saW5lc1wiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJyYWNlXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgPHJ3LWlucHV0LXRlbXBsYXRlIFtmb3JtR3JvdXBdPVwiaW5uZXJGb3JtQXJyYXkuY29udHJvbHNbdGVtcGxhdGUudGl0bGUhXVwiIFt0ZW1wbGF0ZV09XCJkZWZhdWx0VGVtcGxhdGVcIiBbYXBpTmFtZV09XCJhcGlOYW1lXCIgY2xhc3M9XCJ3LWZ1bGxcIj48L3J3LWlucHV0LXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwiZmFzIGZhLXRyYXNoXCIgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1kYW5nZXIgbWwtMiBtYi0zXCIgKGNsaWNrKT1cImRlbGV0ZUl0ZW1Gcm9tQ29sbGVjdGlvbih0ZW1wbGF0ZSlcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBpY29uPVwiZmFzIGZhLXBsdXNcIiBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLWluZm9cIiAoY2xpY2spPVwiYWRkTmV3SXRlbVRvQ29sbGVjdGlvbigpXCI+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+IiwiPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXRPcHRpb25zU2luZ2xlIGxldC1wcm9wZXJ0eT1cInByb3BlcnR5XCIgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIj5cbiAgICA8cC1kcm9wZG93blxuICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCJcbiAgICAgIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCJcbiAgICAgIFtvcHRpb25zXT1cInByb3BlcnR5Lm9wdGlvbnMuaW5saW5lXCJcbiAgICAgIFtmaWx0ZXJCeV09XCJwcm9tcHRGaWVsZCArICcsJyArIHZhbHVlRmllbGRcIlxuICAgICAgW29wdGlvbkxhYmVsXT1cInByb21wdEZpZWxkXCJcbiAgICAgIFtvcHRpb25WYWx1ZV09XCJ2YWx1ZUZpZWxkXCJcbiAgICAgIFtyZWFkb25seV09XCJwcm9wZXJ0eS5yZWFkT25seVwiXG4gICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHkucmVxdWlyZWQgfHwgcHJvcGVydHkub3B0aW9ucy5taW5JdGVtcyA+IDBcIlxuICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgIFtmaWx0ZXJWYWx1ZV09XCJmaWx0ZXJWYWx1ZVwiXG4gICAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJmYWxzZVwiXG4gICAgICBbc2hvd0NsZWFyXT1cIiFwcm9wZXJ0eS5yZXF1aXJlZCB8fCBwcm9wZXJ0eS5vcHRpb25zLm1pbkl0ZW1zIDw9IDBcIlxuICAgICAgKG9uRmlsdGVyKT1cIm9uT3B0aW9uc0ZpbHRlcmVkKCRldmVudClcIlxuICAgICAgKG9uQ2hhbmdlKT1cIm9uT3B0aW9uc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgIFtwYW5lbFN0eWxlQ2xhc3NdPVwibG9hZGluZyA/ICdsb2FkaW5nJyA6ICcnXCJcbiAgICAgIFtmaWx0ZXJQbGFjZWhvbGRlcl09XCJwcm9wZXJ0eT8ub3B0aW9ucz8ubGluaz8uaHJlZiA/ICdzZWFyY2ggZm9yIG1vcmUgcmVzdWx0cycgOiAnJ1wiXG4gICAgICBbZW1wdHlGaWx0ZXJNZXNzYWdlXT1cImxvYWRpbmcgPyAnTG9hZGluZy4uLicgOiAnJ1wiXG4gICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgID5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cInNlbGVjdGVkSXRlbVwiPlxuICAgICAgICAgIDxzcGFuIFtwVG9vbHRpcF09XCJnZXRUb29sdGlwKGl0ZW0pXCI+e3tnZXRMYWJlbChpdGVtKX19PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICAgIDxzcGFuIFtwVG9vbHRpcF09XCJnZXRUb29sdGlwKGl0ZW0pXCI+e3tnZXRMYWJlbChpdGVtKX19PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyaWNvblwiPlxuICAgICAgICAgIDxTZWFyY2hJY29uICpuZ0lmPVwiIWxvYWRpbmdcIj48L1NlYXJjaEljb24+XG4gICAgICAgICAgPFNwaW5uZXJJY29uICpuZ0lmPVwibG9hZGluZ1wiIFtzcGluXT1cInRydWVcIj48L1NwaW5uZXJJY29uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC1kcm9wZG93bj5cbjwvbmctdGVtcGxhdGU+XG48bmctY29udGFpbmVyICpuZ0lmPVwiIXByb3BlcnR5Lm9wdGlvbnMubWF4SXRlbXMgfHwgcHJvcGVydHkub3B0aW9ucy5tYXhJdGVtcyA9PSAxXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0T3B0aW9uc1NpbmdsZVJlZiA/PyBkZWZhdWx0SW5wdXRPcHRpb25zU2luZ2xlOyBjb250ZXh0OiB7IHByb3BlcnR5OiBwcm9wZXJ0eSwgYXBpTmFtZTogYXBpTmFtZSB9XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5wdXRPcHRpb25zTXVsdGlwbGUgbGV0LXByb3BlcnR5PVwicHJvcGVydHlcIiBsZXQtdGVtcGxhdGU9XCJ0ZW1wbGF0ZVwiPlxuICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIlxuICAgICAgW2lkXT1cInByb3BlcnR5Lm5hbWVcIlxuICAgICAgW29wdGlvbnNdPVwicHJvcGVydHkub3B0aW9ucy5pbmxpbmVcIlxuICAgICAgW2ZpbHRlckJ5XT1cInByb21wdEZpZWxkICsgJywnICsgdmFsdWVGaWVsZFwiXG4gICAgICBbb3B0aW9uTGFiZWxdPVwicHJvbXB0RmllbGRcIlxuICAgICAgW29wdGlvblZhbHVlXT1cInZhbHVlRmllbGRcIlxuICAgICAgW3JlYWRvbmx5XT1cInByb3BlcnR5LnJlYWRPbmx5XCJcbiAgICAgIFtyZXF1aXJlZF09XCJwcm9wZXJ0eS5yZXF1aXJlZCB8fCBwcm9wZXJ0eS5vcHRpb25zLm1pbkl0ZW1zID4gMFwiXG4gICAgICBbZmlsdGVyXT1cInRydWVcIlxuICAgICAgW2ZpbHRlclZhbHVlXT1cImZpbHRlclZhbHVlXCJcbiAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCJcbiAgICAgIChvbkZpbHRlcik9XCJvbk9wdGlvbnNGaWx0ZXJlZCgkZXZlbnQpXCJcbiAgICAgIChvbkNoYW5nZSk9XCJvbk9wdGlvbnNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICBbcGFuZWxTdHlsZUNsYXNzXT1cImxvYWRpbmcgPyAnbG9hZGluZycgOiAnJ1wiXG4gICAgICBbZmlsdGVyUGxhY2VIb2xkZXJdPVwicHJvcGVydHk/Lm9wdGlvbnM/Lmxpbms/LmhyZWYgPyAnc2VhcmNoIGZvciBtb3JlIHJlc3VsdHMnIDogJydcIlxuICAgICAgW2VtcHR5RmlsdGVyTWVzc2FnZV09XCJsb2FkaW5nID8gJ0xvYWRpbmcuLi4nIDogJydcIlxuICAgICAgW3NlbGVjdGlvbkxpbWl0XT1cInByb3BlcnR5Lm9wdGlvbnMubWF4SXRlbXNcIlxuICAgICAgZGlzcGxheT1cImNoaXBcIlxuICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICA+XG4gICAgPG5nLXRlbXBsYXRlIGxldC12YWx1ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1zXCI+XG4gICAgICA8cC1jaGlwXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZhbHVlOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW3BUb29sdGlwXT1cImdldFRvb2x0aXAoaXRlbSlcIlxuICAgICAgICBbbGFiZWxdPVwiZ2V0TGFiZWwoaXRlbSlcIlxuICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIlxuICAgICAgICAob25SZW1vdmUpPVwicmVtb3ZlQnlWYWx1ZShnZXRWYWx1ZShpdGVtKSlcIlxuICAgICAgPlxuICAgICAgPC9wLWNoaXA+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgbGV0LWl0ZW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICA8c3BhbiBbcFRvb2x0aXBdPVwiZ2V0VG9vbHRpcChpdGVtKVwiPnt7Z2V0TGFiZWwoaXRlbSl9fTwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJpY29uXCI+XG4gICAgICA8U2VhcmNoSWNvbiAqbmdJZj1cIiFsb2FkaW5nXCI+PC9TZWFyY2hJY29uPlxuICAgICAgPFNwaW5uZXJJY29uICpuZ0lmPVwibG9hZGluZ1wiIFtzcGluXT1cInRydWVcIj48L1NwaW5uZXJJY29uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC1tdWx0aVNlbGVjdD5cbjwvbmctdGVtcGxhdGU+XG48bmctY29udGFpbmVyICpuZ0lmPVwiKHByb3BlcnR5Lm9wdGlvbnMubWF4SXRlbXMgPz8gMCkgPiAxXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0T3B0aW9uc011bHRpcGxlUmVmID8/IGRlZmF1bHRJbnB1dE9wdGlvbnNNdWx0aXBsZTsgY29udGV4dDogeyBwcm9wZXJ0eTogcHJvcGVydHksIGFwaU5hbWU6IGFwaU5hbWUgfVwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iLCI8bmctdGVtcGxhdGUgI2RlZmF1bHRJbnB1dE9iamVjdCBsZXQtcHJvcGVydHk9XCJwcm9wZXJ0eVwiIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJicmFjZVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgPHJ3LWlucHV0LXRlbXBsYXRlIFtmb3JtR3JvdXBdPVwiaW5uZXJGb3JtR3JvdXBcIiBbdGVtcGxhdGVdPVwicHJvcGVydHkuX3RlbXBsYXRlcy5kZWZhdWx0XCIgW2FwaU5hbWVdPVwiYXBpTmFtZVwiPjwvcnctaW5wdXQtdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0T2JqZWN0UmVmIHx8IGRlZmF1bHRJbnB1dE9iamVjdDsgY29udGV4dDogeyBwcm9wZXJ0eTogcHJvcGVydHksIGlubmVyRm9ybUdyb3VwOiBpbm5lckZvcm1Hcm91cCwgYXBpTmFtZTogYXBpTmFtZSB9XCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj4iLCI8ZGl2IFtuZ1N3aXRjaF09XCJwcm9wZXJ0eS50eXBlXCI+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5IaWRkZW5cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJoaWRkZW5cIiBbdmFsdWVdPVwicHJvcGVydHkudmFsdWVcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGV4dFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPHRleHRhcmVhICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVGV4dGFyZWFcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHBJbnB1dFRleHRhcmVhIGNsYXNzPVwidy1mdWxsIHAtaW5wdXR0ZXh0YXJlYSBwLWlucHV0dGV4dCBwLWNvbXBvbmVudCBwLWVsZW1lbnRcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIFtjb2xzXT1cInByb3BlcnR5LmNvbHNcIiBbcm93c109XCJwcm9wZXJ0eS5yb3dzXCI+PC90ZXh0YXJlYT5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlNlYXJjaFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cInNlYXJjaFwiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5UZWxcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJ0ZWxcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuVXJsXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwidXJsXCIgcElucHV0VGV4dCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkVtYWlsXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwiZW1haWxcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuUGFzc3dvcmRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJwYXNzd29yZFwiIHBQYXNzd29yZCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cblxuICAgIDxwLWNhbGVuZGFyICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRGF0ZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgW2RhdGVGb3JtYXRdPVwiZGF0ZUZvcm1hdFwiIFtzaG93V2Vla109XCJ0cnVlXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLk1vbnRoXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCIgW3Nob3dXZWVrXT1cImZhbHNlXCIgdmlldz1cIm1vbnRoXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5XZWVrXCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiB0eXBlPVwid2Vla1wiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLlRpbWVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtkYXRlRm9ybWF0XT1cInRpbWVGb3JtYXRcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFt0aW1lT25seV09XCJ0cnVlXCIgW3Nob3dXZWVrXT1cImZhbHNlXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkRhdGV0aW1lTG9jYWxcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtkYXRlRm9ybWF0XT1cImRhdGVGb3JtYXRcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFtzaG93V2Vla109XCJmYWxzZVwiIFtzaG93SWNvbl09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCI+PC9wLWNhbGVuZGFyPlxuXG4gICAgPHAtaW5wdXROdW1iZXIgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5OdW1iZXJcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIG1vZGU9XCJkZWNpbWFsXCIgW21pbl09XCJwcm9wZXJ0eS5taW5cIiBbbWF4XT1cInByb3BlcnR5Lm1heFwiIFtzdGVwXT1cInByb3BlcnR5LnN0ZXBcIiBbc2hvd0J1dHRvbnNdPVwiIXByb3BlcnR5LnJlYWRPbmx5XCIgY2xhc3M9XCJ3LWZ1bGxcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtaW5wdXROdW1iZXI+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5SYW5nZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtpZF09XCJwcm9wZXJ0eS5uYW1lXCIgdHlwZT1cInJhbmdlXCIgW21pbl09XCJwcm9wZXJ0eS5taW5cIiBbbWF4XT1cInByb3BlcnR5Lm1heFwiIFtzdGVwXT1cInByb3BlcnR5LnN0ZXBcIiBwSW5wdXRUZXh0IGNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIiAvPlxuXG4gICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQ29sb3JcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJjb2xvclwiIHBJbnB1dFRleHQgY2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiIC8+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuQm9vbFwiPlxuICAgICAgICA8cC1jaGVja2JveCAqbmdJZj1cInByb3BlcnR5LnJlcXVpcmVkXCIgW2JpbmFyeV09XCJ0cnVlXCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBbcmVhZG9ubHldPVwicHJvcGVydHkucmVhZE9ubHkhXCI+PC9wLWNoZWNrYm94PlxuICAgICAgICA8cC10cmlTdGF0ZUNoZWNrYm94ICpuZ0lmPVwiIXByb3BlcnR5LnJlcXVpcmVkXCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBbcmVhZG9ubHldPVwicHJvcGVydHkucmVhZE9ubHkhXCI+PC9wLXRyaVN0YXRlQ2hlY2tib3g+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8cC1jYWxlbmRhciAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkRhdGV0aW1lT2Zmc2V0XCIgW2Zvcm1Db250cm9sTmFtZV09XCJwcm9wZXJ0eS5uYW1lXCIgW2lkXT1cInByb3BlcnR5Lm5hbWVcIiBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCIgW3Nob3dUaW1lXT1cInRydWVcIiBbc2hvd1dlZWtdPVwiZmFsc2VcIiBbc2hvd0ljb25dPVwidHJ1ZVwiIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIiBbY2xhc3MucC1kaXNhYmxlZF09XCJwcm9wZXJ0eS5yZWFkT25seVwiPjwvcC1jYWxlbmRhcj5cblxuICAgIDxwLWNhbGVuZGFyICpuZ1N3aXRjaENhc2U9XCJQcm9wZXJ0eVR5cGUuRHVyYXRpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIFtkYXRlRm9ybWF0XT1cInRpbWVGb3JtYXRcIiBbc2hvd1RpbWVdPVwidHJ1ZVwiIFt0aW1lT25seV09XCJ0cnVlXCIgW3Nob3dXZWVrXT1cImZhbHNlXCIgW3Nob3dJY29uXT1cInRydWVcIiBzdHlsZUNsYXNzPVwidy1mdWxsXCIgW2NsYXNzLnAtZGlzYWJsZWRdPVwicHJvcGVydHkucmVhZE9ubHlcIj48L3AtY2FsZW5kYXI+XG5cbiAgICA8cnctaW1hZ2UgKm5nU3dpdGNoQ2FzZT1cIlByb3BlcnR5VHlwZS5JbWFnZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwicHJvcGVydHkubmFtZVwiIFtwcm9wZXJ0eV09XCIkYW55KHByb3BlcnR5KVwiPjwvcnctaW1hZ2U+XG5cbiAgICA8cnctZmlsZSAqbmdTd2l0Y2hDYXNlPVwiUHJvcGVydHlUeXBlLkZpbGVcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbZmlsZU5hbWVdPVwicHJvcGVydHkubmFtZVwiIFthY2NlcHRdPVwiJGFueShwcm9wZXJ0eS5wbGFjZWhvbGRlcilcIj48L3J3LWZpbGU+XG5cbiAgICA8aW5wdXQgKm5nU3dpdGNoRGVmYXVsdCBbZm9ybUNvbnRyb2xOYW1lXT1cInByb3BlcnR5Lm5hbWVcIiBbaWRdPVwicHJvcGVydHkubmFtZVwiIHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dCBjbGFzcz1cInctZnVsbFwiIFtjbGFzcy5wLWRpc2FibGVkXT1cInByb3BlcnR5LnJlYWRPbmx5XCIgLz5cbjwvZGl2PlxuIiwiPHJ3LWZvcm0tZWxlbWVudCAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgdGVtcGxhdGUucHJvcGVydGllc1wiIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eVwiIFthcGlOYW1lXT1cImFwaU5hbWVcIj48L3J3LWZvcm0tZWxlbWVudD4iXX0=
|