@bnsights/bbsf-controls 1.0.188 → 1.0.190

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.
@@ -332,11 +332,11 @@ export class TextboxComponent {
332
332
  this.hasMinLength = password.length >= this.passwordMinLength;
333
333
  }
334
334
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextboxComponent, deps: [{ token: i1.ControlUtility }, { token: i2.ControlContainer, optional: true }, { token: i2.FormGroupDirective }, { token: i3.UtilityService }, { token: i3.ControlValidationService }, { token: i4.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component }); }
335
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TextboxComponent, selector: "BBSF-TextBox", inputs: { group: "group", options: "options" }, outputs: { onChange: "onChange", onBlur: "onBlur" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"options.viewType == 1 ? 'bbsf-vertical' : 'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{ options.labelExtraClasses }}\">\r\n {{ options.labelValue }}\r\n <!--Asterisk-->\r\n @if (((options.showAsterisk && options.isRequired) || options.isRequired) && !options.isReadonly) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <!--MaskPattern-->\r\n @if (maskPattern != null && maskPattern != '' && !options.isReadonly) {\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div *ngIf=\"options.icon != null\" class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }}\" [mask]=\"maskPattern\" placeHolderCharacter=\" \"\r\n [showMaskTyped]=\"true\" [validation]=\"true\" [dir]=\"textDir\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{ options.name }}\" type=\"{{ getInputType(options.type) }}\" [(ngModel)]=\"options.value\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [readonly]=\"options.isReadonly\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n }\r\n <!--NoMaskPattern-->\r\n <div *ngIf=\"maskPattern == null || (maskPattern == '' && !options.isReadonly)\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\" *ngIf=\"options.icon != null\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }} \" [dir]=\"textDir\" (focus)=\"onFocus(true)\"\r\n (focusout)=\"onFocus(false)\" maxlength=\"{{ options.maxLength }}\" minlength=\"{{ options.minLength }}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{ options.name }}\"\r\n type=\"{{ getInputType(options.type) }}\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [(ngModel)]=\"options.value\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n [readonly]=\"options.isReadonly\" #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" triggers=\"click:blur\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n @if (options.isReadonly) {\r\n <div>\r\n <a *ngIf=\"options.type == inputType.Email\" href=\"mailto: {{ options.value }}\">{{ options.value }}</a>\r\n <a *ngIf=\"options.type == inputType.URL\" href=\"{{ options.value }}\" target=\"_blank\">{{ options.value }}</a>\r\n <span *ngIf=\"options.type != inputType.URL && options.type != inputType.Email\"\r\n class=\"readonly-view\">{{ options.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.maxWordCount > 0 && isShowWordCount\">\r\n {{ wordCount }}/{{ options.maxWordCount }} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showCharsLimitMsg\"\r\n [ngClass]=\"{ 'badge-light-warning': charsLimitMsgClass === 'warning', 'badge-light-danger': charsLimitMsgClass === 'danger' }\">\r\n {{ maxLimitWarningMsg }}\r\n </div>\r\n <!-- Password Disclaimer -->\r\n <div class=\"bbsf-password-disclaimer\"\r\n *ngIf=\"options.type == inputType.Password && !options.removeDefaultPasswordValidation && !options.isReadonly\">\r\n <div class=\"password-requirements\">\r\n <div class=\"requirement-title\">{{ passwordRequirementsTitle }}</div>\r\n <ul class=\"requirements-list\">\r\n <li [ngClass]=\"{'requirement-met': hasNumber, 'requirement-not-met': !hasNumber}\">\r\n <i class=\"fas\" [ngClass]=\"hasNumber ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasNumber }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasCapitalLetter, 'requirement-not-met': !hasCapitalLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasCapitalLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasCapitalLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSmallLetter, 'requirement-not-met': !hasSmallLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSmallLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSmallLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSpecialLetter, 'requirement-not-met': !hasSpecialLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSpecialLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSpecialLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasMinLength, 'requirement-not-met': !hasMinLength}\">\r\n <i class=\"fas\" [ngClass]=\"hasMinLength ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ minLengthRequirement }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription != null\">{{ options.labelDescription }}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" [dir]=\"textDir\" *ngIf=\"textBoxFormControl.invalid && textBoxFormControl.touched\">\r\n {{ getErrorValidation(textBoxFormControl.errors | keyvalue) }}\r\n </div>\r\n </div>\r\n\r\n @if ((group.valid && group.dirty && group.touched) || (group.untouched && group.invalid && group.dirty)) {\r\n <div>{{ resetError() }}</div>\r\n }\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i9.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }] }); }
335
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: TextboxComponent, selector: "BBSF-TextBox", inputs: { group: "group", options: "options" }, outputs: { onChange: "onChange", onBlur: "onBlur" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"options.viewType == 1 ? 'bbsf-vertical' : 'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{ options.labelExtraClasses }}\">\r\n {{ options.labelValue }}\r\n <!--Asterisk-->\r\n @if (((options.showAsterisk && options.isRequired) || options.isRequired) && !options.isReadonly) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <!--MaskPattern-->\r\n @if (maskPattern != null && maskPattern != '' && !options.isReadonly) {\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div *ngIf=\"options.icon != null\" class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }}\" [mask]=\"maskPattern\" placeHolderCharacter=\" \"\r\n [showMaskTyped]=\"true\" [validation]=\"true\" [dir]=\"textDir\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{ options.name }}\" type=\"{{ getInputType(options.type) }}\" [(ngModel)]=\"options.value\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [readonly]=\"options.isReadonly\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n }\r\n <!--NoMaskPattern-->\r\n <div *ngIf=\"maskPattern == null || (maskPattern == '' && !options.isReadonly)\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\" *ngIf=\"options.icon != null\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }} \" [dir]=\"textDir\" (focus)=\"onFocus(true)\"\r\n (focusout)=\"onFocus(false)\" maxlength=\"{{ options.maxLength }}\" minlength=\"{{ options.minLength }}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{ options.name }}\"\r\n type=\"{{ getInputType(options.type) }}\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [(ngModel)]=\"options.value\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n [readonly]=\"options.isReadonly\" #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" triggers=\"click:blur\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n @if (options.isReadonly) {\r\n <div>\r\n <a *ngIf=\"options.type == inputType.Email\" href=\"mailto: {{ options.value }}\">{{ options.value }}</a>\r\n <a *ngIf=\"options.type == inputType.URL\" href=\"{{ options.value }}\" target=\"_blank\">{{ options.value }}</a>\r\n <span *ngIf=\"options.type != inputType.URL && options.type != inputType.Email\"\r\n class=\"readonly-view\">{{ options.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.maxWordCount > 0 && isShowWordCount\">\r\n {{ wordCount }}/{{ options.maxWordCount }} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showCharsLimitMsg\"\r\n [ngClass]=\"{ 'badge-light-warning': charsLimitMsgClass === 'warning', 'badge-light-danger': charsLimitMsgClass === 'danger' }\">\r\n {{ maxLimitWarningMsg }}\r\n </div>\r\n <!-- Password Disclaimer -->\r\n <div class=\"bbsf-password-disclaimer\"\r\n *ngIf=\"options.type == inputType.Password && !options.removeDefaultPasswordValidation && !options.isReadonly && options.showPasswordRequirements\">\r\n <div class=\"password-requirements\">\r\n <div class=\"requirement-title\">{{ passwordRequirementsTitle }}</div>\r\n <ul class=\"requirements-list\">\r\n <li [ngClass]=\"{'requirement-met': hasNumber, 'requirement-not-met': !hasNumber}\">\r\n <i class=\"fas\" [ngClass]=\"hasNumber ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasNumber }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasCapitalLetter, 'requirement-not-met': !hasCapitalLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasCapitalLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasCapitalLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSmallLetter, 'requirement-not-met': !hasSmallLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSmallLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSmallLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSpecialLetter, 'requirement-not-met': !hasSpecialLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSpecialLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSpecialLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasMinLength, 'requirement-not-met': !hasMinLength}\">\r\n <i class=\"fas\" [ngClass]=\"hasMinLength ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ minLengthRequirement }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription != null\">{{ options.labelDescription }}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" [dir]=\"textDir\" *ngIf=\"textBoxFormControl.invalid && textBoxFormControl.touched\">\r\n {{ getErrorValidation(textBoxFormControl.errors | keyvalue) }}\r\n </div>\r\n </div>\r\n\r\n @if ((group.valid && group.dirty && group.touched) || (group.untouched && group.invalid && group.dirty)) {\r\n <div>{{ resetError() }}</div>\r\n }\r\n</div>", dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i9.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }] }); }
336
336
  }
337
337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TextboxComponent, decorators: [{
338
338
  type: Component,
339
- args: [{ selector: 'BBSF-TextBox', template: "<div class=\"form-group bbsf-control bbsf-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"options.viewType == 1 ? 'bbsf-vertical' : 'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{ options.labelExtraClasses }}\">\r\n {{ options.labelValue }}\r\n <!--Asterisk-->\r\n @if (((options.showAsterisk && options.isRequired) || options.isRequired) && !options.isReadonly) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <!--MaskPattern-->\r\n @if (maskPattern != null && maskPattern != '' && !options.isReadonly) {\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div *ngIf=\"options.icon != null\" class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }}\" [mask]=\"maskPattern\" placeHolderCharacter=\" \"\r\n [showMaskTyped]=\"true\" [validation]=\"true\" [dir]=\"textDir\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{ options.name }}\" type=\"{{ getInputType(options.type) }}\" [(ngModel)]=\"options.value\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [readonly]=\"options.isReadonly\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n }\r\n <!--NoMaskPattern-->\r\n <div *ngIf=\"maskPattern == null || (maskPattern == '' && !options.isReadonly)\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\" *ngIf=\"options.icon != null\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }} \" [dir]=\"textDir\" (focus)=\"onFocus(true)\"\r\n (focusout)=\"onFocus(false)\" maxlength=\"{{ options.maxLength }}\" minlength=\"{{ options.minLength }}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{ options.name }}\"\r\n type=\"{{ getInputType(options.type) }}\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [(ngModel)]=\"options.value\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n [readonly]=\"options.isReadonly\" #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" triggers=\"click:blur\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n @if (options.isReadonly) {\r\n <div>\r\n <a *ngIf=\"options.type == inputType.Email\" href=\"mailto: {{ options.value }}\">{{ options.value }}</a>\r\n <a *ngIf=\"options.type == inputType.URL\" href=\"{{ options.value }}\" target=\"_blank\">{{ options.value }}</a>\r\n <span *ngIf=\"options.type != inputType.URL && options.type != inputType.Email\"\r\n class=\"readonly-view\">{{ options.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.maxWordCount > 0 && isShowWordCount\">\r\n {{ wordCount }}/{{ options.maxWordCount }} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showCharsLimitMsg\"\r\n [ngClass]=\"{ 'badge-light-warning': charsLimitMsgClass === 'warning', 'badge-light-danger': charsLimitMsgClass === 'danger' }\">\r\n {{ maxLimitWarningMsg }}\r\n </div>\r\n <!-- Password Disclaimer -->\r\n <div class=\"bbsf-password-disclaimer\"\r\n *ngIf=\"options.type == inputType.Password && !options.removeDefaultPasswordValidation && !options.isReadonly\">\r\n <div class=\"password-requirements\">\r\n <div class=\"requirement-title\">{{ passwordRequirementsTitle }}</div>\r\n <ul class=\"requirements-list\">\r\n <li [ngClass]=\"{'requirement-met': hasNumber, 'requirement-not-met': !hasNumber}\">\r\n <i class=\"fas\" [ngClass]=\"hasNumber ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasNumber }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasCapitalLetter, 'requirement-not-met': !hasCapitalLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasCapitalLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasCapitalLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSmallLetter, 'requirement-not-met': !hasSmallLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSmallLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSmallLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSpecialLetter, 'requirement-not-met': !hasSpecialLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSpecialLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSpecialLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasMinLength, 'requirement-not-met': !hasMinLength}\">\r\n <i class=\"fas\" [ngClass]=\"hasMinLength ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ minLengthRequirement }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription != null\">{{ options.labelDescription }}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" [dir]=\"textDir\" *ngIf=\"textBoxFormControl.invalid && textBoxFormControl.touched\">\r\n {{ getErrorValidation(textBoxFormControl.errors | keyvalue) }}\r\n </div>\r\n </div>\r\n\r\n @if ((group.valid && group.dirty && group.touched) || (group.untouched && group.invalid && group.dirty)) {\r\n <div>{{ resetError() }}</div>\r\n }\r\n</div>" }]
339
+ args: [{ selector: 'BBSF-TextBox', template: "<div class=\"form-group bbsf-control bbsf-textbox\" [formGroup]=\"group\">\r\n <div [ngClass]=\"options.viewType == 1 ? 'bbsf-vertical' : 'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.hideLabel\" class=\"bbsf-label {{ options.labelExtraClasses }}\">\r\n {{ options.labelValue }}\r\n <!--Asterisk-->\r\n @if (((options.showAsterisk && options.isRequired) || options.isRequired) && !options.isReadonly) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <!--MaskPattern-->\r\n @if (maskPattern != null && maskPattern != '' && !options.isReadonly) {\r\n <div class=\"bbsf-input-container\" [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div *ngIf=\"options.icon != null\" class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }}\" [mask]=\"maskPattern\" placeHolderCharacter=\" \"\r\n [showMaskTyped]=\"true\" [validation]=\"true\" [dir]=\"textDir\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{ options.name }}\" type=\"{{ getInputType(options.type) }}\" [(ngModel)]=\"options.value\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [readonly]=\"options.isReadonly\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n }\r\n <!--NoMaskPattern-->\r\n <div *ngIf=\"maskPattern == null || (maskPattern == '' && !options.isReadonly)\" class=\"bbsf-input-container\"\r\n [ngClass]=\"options.enableCopyToClipboard ? 'p-40px' : ''\">\r\n <!--Icon-->\r\n <div class=\"svg svg-icon-grey bbsf-icon\"\r\n [ngClass]=\"options.iconPosition == 1 ? 'bbsf-left-icon' : 'bbsf-right-icon'\" *ngIf=\"options.icon != null\">\r\n <span [inlineSVG]=\"options.icon\"></span>\r\n </div>\r\n <!--input-->\r\n <input class=\"form-control {{ options.extraClasses }} \" [dir]=\"textDir\" (focus)=\"onFocus(true)\"\r\n (focusout)=\"onFocus(false)\" maxlength=\"{{ options.maxLength }}\" minlength=\"{{ options.minLength }}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\" formControlName=\"{{ options.name }}\"\r\n type=\"{{ getInputType(options.type) }}\"\r\n [class.is-invalid]=\"textBoxFormControl.invalid && textBoxFormControl.touched\"\r\n placeholder=\"{{ options.placeholder }}\" id=\"{{ options.name }}\" autocomplete=\"{{ options.autoComplete }}\"\r\n (change)=\"trimControlValue()\" (keyup)=\"onTextChange()\" [(ngModel)]=\"options.value\"\r\n (keydown)=\"wordCountArray > options.maxWordCount && $event.keyCode != 8 ? $event.preventDefault() : null\"\r\n [readonly]=\"options.isReadonly\" #userInput (blur)=\"onTextBlur()\" />\r\n <!--CopyToClipboard-->\r\n <span class=\"copy-clipboard\" ngbTooltip=\"Copied!\" triggers=\"click:blur\" *ngIf=\"options.enableCopyToClipboard\"\r\n (click)=\"copyInputMessage(userInput)\">\r\n <i class=\"fas fa-copy\"></i>\r\n </span>\r\n </div>\r\n <!-- readonly -->\r\n @if (options.isReadonly) {\r\n <div>\r\n <a *ngIf=\"options.type == inputType.Email\" href=\"mailto: {{ options.value }}\">{{ options.value }}</a>\r\n <a *ngIf=\"options.type == inputType.URL\" href=\"{{ options.value }}\" target=\"_blank\">{{ options.value }}</a>\r\n <span *ngIf=\"options.type != inputType.URL && options.type != inputType.Email\"\r\n class=\"readonly-view\">{{ options.value }}</span>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!--wordCount-->\r\n <div class=\"bbsf-word-count\" *ngIf=\"options.maxWordCount > 0 && isShowWordCount\">\r\n {{ wordCount }}/{{ options.maxWordCount }} Words</div>\r\n <!-- CharsLimitMsg-->\r\n <div class=\"bbsf-character-count\" *ngIf=\"showCharsLimitMsg\"\r\n [ngClass]=\"{ 'badge-light-warning': charsLimitMsgClass === 'warning', 'badge-light-danger': charsLimitMsgClass === 'danger' }\">\r\n {{ maxLimitWarningMsg }}\r\n </div>\r\n <!-- Password Disclaimer -->\r\n <div class=\"bbsf-password-disclaimer\"\r\n *ngIf=\"options.type == inputType.Password && !options.removeDefaultPasswordValidation && !options.isReadonly && options.showPasswordRequirements\">\r\n <div class=\"password-requirements\">\r\n <div class=\"requirement-title\">{{ passwordRequirementsTitle }}</div>\r\n <ul class=\"requirements-list\">\r\n <li [ngClass]=\"{'requirement-met': hasNumber, 'requirement-not-met': !hasNumber}\">\r\n <i class=\"fas\" [ngClass]=\"hasNumber ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasNumber }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasCapitalLetter, 'requirement-not-met': !hasCapitalLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasCapitalLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasCapitalLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSmallLetter, 'requirement-not-met': !hasSmallLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSmallLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSmallLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasSpecialLetter, 'requirement-not-met': !hasSpecialLetter}\">\r\n <i class=\"fas\" [ngClass]=\"hasSpecialLetter ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ passwordComplexityHasSpecialLetter }}\r\n </li>\r\n <li [ngClass]=\"{'requirement-met': hasMinLength, 'requirement-not-met': !hasMinLength}\">\r\n <i class=\"fas\" [ngClass]=\"hasMinLength ? 'fa-check text-success' : 'fa-times text-danger'\"></i>\r\n {{ minLengthRequirement }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.labelDescription != null\">{{ options.labelDescription }}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" [dir]=\"textDir\" *ngIf=\"textBoxFormControl.invalid && textBoxFormControl.touched\">\r\n {{ getErrorValidation(textBoxFormControl.errors | keyvalue) }}\r\n </div>\r\n </div>\r\n\r\n @if ((group.valid && group.dirty && group.touched) || (group.untouched && group.invalid && group.dirty)) {\r\n <div>{{ resetError() }}</div>\r\n }\r\n</div>" }]
340
340
  }], ctorParameters: () => [{ type: i1.ControlUtility }, { type: i2.ControlContainer, decorators: [{
341
341
  type: Optional
342
342
  }] }, { type: i2.FormGroupDirective }, { type: i3.UtilityService }, { type: i3.ControlValidationService }, { type: i4.GlobalSettings }], propDecorators: { group: [{
@@ -348,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
348
348
  }], onBlur: [{
349
349
  type: Output
350
350
  }] } });
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvVGV4dEJveC9UZXh0Qm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9UZXh0Qm94L1RleHRCb3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQW9FLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFNM0UsTUFBTSxPQUFPLGdCQUFnQjthQUNwQiwyQkFBc0IsR0FBRyxJQUFJLEFBQVAsQ0FBUTtJQUNyQyxZQUFvQixjQUE4QixFQUMxQixnQkFBa0MsRUFDL0MsZUFBbUMsRUFDbkMsY0FBOEIsRUFDN0Isd0JBQWtELEVBQ2xELGNBQThCO1FBTHRCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQy9DLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0IsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFLaEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFL0IsY0FB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IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvVGV4dEJveE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvSW5wdXRUeXBlJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IExhbmd1YWdlVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9MYW5ndWFnZVZhbGlkYXRpb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdCQlNGLVRleHRCb3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9UZXh0Qm94LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dGJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgc3RhdGljIGNvbnRyb2xDb250YWluZXJTdGF0aWMgPSBudWxsO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5XHJcbiAgICAsIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lclxyXG4gICAgLCBwdWJsaWMgdGV4dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmVcclxuICAgICwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTogQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZ2xvYmFsU2V0dGluZ3M6IEdsb2JhbFNldHRpbmdzKSB7XHJcbiAgICBUZXh0Ym94Q29tcG9uZW50LmNvbnRyb2xDb250YWluZXJTdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogVGV4dEJveE9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBpbnB1dFR5cGUgPSBJbnB1dFR5cGU7XHJcbiAgdGV4dEJveEZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgbWFza1BhdHRlcm46IHN0cmluZyA9ICcnO1xyXG4gIHdvcmRDb3VudDogbnVtYmVyID0gMDtcclxuICB3b3JkQ291bnRBcnJheTogbnVtYmVyID0gMDtcclxuICBlbWFpbFZhbGlkYXRpb25LZXk6IHN0cmluZztcclxuICB1UkxWYWxpZGF0aW9uS2V5OiBzdHJpbmc7XHJcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzTnVtYmVyOiBzdHJpbmc7XHJcbiAgYXJhYmljTGV0dGVyT25seTogc3RyaW5nO1xyXG4gIGVuZ2xpc2hMZXR0ZXJPbmx5OiBzdHJpbmc7XHJcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlcjogc3RyaW5nO1xyXG4gIHBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyOiBzdHJpbmc7XHJcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlcjogc3RyaW5nO1xyXG4gIG1heFdvcmRDb3VudFZhbGlkYXRpb25LZXk6IHN0cmluZztcclxuICBpc1Nob3dXb3JkQ291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtYXJrQWxsQXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzQXN5bmMgPSBbXTtcclxuXHJcbiAgLy9Gb3IgU2hvdyB3YXJuaW5nIG1lc3NhZ2Ugb2YgbWF4IGxlbmd0aCBsaW1pdFxyXG4gIGN1cnJlbnRDaGFyc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIHNob3dDaGFyc0xpbWl0TXNnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoYXJzTGltaXRNc2dDbGFzczogc3RyaW5nO1xyXG4gIG1pbkNoYXJzTGltaXQ6IG51bWJlciA9IC0xOyAvL1RvIGRpc2FibGUgY2hhcnMgbGltaXQgZmVhdHVyZSBieSBkZWZhdWx0XHJcbiAgbWF4TGltaXRXYXJuaW5nTXNnOiBzdHJpbmcgPSAnJztcclxuICB0ZXh0RGlyOiBhbnk7XHJcblxyXG4gIC8vIFBhc3N3b3JkIGRpc2NsYWltZXIgcHJvcGVydGllc1xyXG4gIHBhc3N3b3JkUmVxdWlyZW1lbnRzVGl0bGU6IHN0cmluZztcclxuICBtaW5MZW5ndGhSZXF1aXJlbWVudDogc3RyaW5nO1xyXG4gIHBhc3N3b3JkTWluTGVuZ3RoOiBudW1iZXIgPSA4OyAvLyBEZWZhdWx0IHZhbHVlLCB3aWxsIGJlIHVwZGF0ZWQgYmFzZWQgb24gYWN0dWFsIHZhbGlkYXRvclxyXG4gIGhhc051bWJlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhc0NhcGl0YWxMZXR0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNTbWFsbExldHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhc1NwZWNpYWxMZXR0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNNaW5MZW5ndGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzUmVhZG9ubHkgJiYgIXRoaXMub3B0aW9ucy52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05BJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlRGlyZWN0aW9uKVxyXG4gICAgICB0aGlzLnRleHREaXIgPSB0aGlzLm9wdGlvbnMuZm9yY2VEaXJlY3Rpb24gPT0gMiA/ICdydGwnIDogJ2x0cic7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMudGV4dERpciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpID09ICdhcicgPyAncnRsJyA6ICdsdHInO1xyXG5cclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICB0aGlzLm9wdGlvbnMubWF4TGVuZ3RoID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5tYXhMZW5ndGhUZXh0Qm94O1xyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLnZpZXdUeXBlKVxyXG4gICAgICB0aGlzLm9wdGlvbnMudmlld1R5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLnZpZXdUeXBlO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubWFza1BhdHRlcm4gIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMubWFza1BhdHRlcm4gIT0gJycpIHtcclxuICAgICAgdGhpcy5tYXNrUGF0dGVybiA9IHRoaXMub3B0aW9ucy5tYXNrUGF0dGVybjtcclxuICAgICAgdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyID0gdGhpcy5tYXNrUGF0dGVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMubmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbCA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLm5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMudmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWxLZXkgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMubGFiZWxLZXkgIT0gJycpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbEtleVxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuZ2V0Q3VzdG9tRXJyb3JzTWFzc2FnZXMoKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNSZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMudHlwZSkge1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5FbWFpbDpcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvLFxyXG4gICAgICAgICAgICAgIHsgRW1haWxWYWxpZGF0aW9uS2V5OiB0aGlzLmVtYWlsVmFsaWRhdGlvbktleSB9XHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLlVSTDpcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gL14oPzpodHRwKHMpPzpcXC9cXC8pP1tcXHcuLV0rKD86XFwuW1xcd1xcLi1dKykrW1xcd1xcLVxcLl9+Oi8/I1tcXF0hXFwkJidcXChcXClcXCpcXCssOz0uXSskLztcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgIHBhdHRlcm4sXHJcbiAgICAgICAgICAgICAgeyBVUkxWYWxpZGF0aW9uS2V5OiB0aGlzLnVSTFZhbGlkYXRpb25LZXkgfVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5FSUQ6XHJcbiAgICAgICAgdGhpcy5tYXNrUGF0dGVybiA9ICcwMDAtMDAwMC0wMDAwMDAwLTAnO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlciA9IHRoaXMubWFza1BhdHRlcm47XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5OdW1iZXI6XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvXlswLTldKiQvLCB7XHJcbiAgICAgICAgICAgICAgICBpbnRlZ2VyTnVtYmVyVmFsaWRhdGlvbktleTogJycsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgICAvXlsrXT8oWy5dXFxkK3xcXGQrWy5dP1xcZCopJC8sXHJcbiAgICAgICAgICAgICAgICB7IHBvc2l0aXZlTnVtYmVyVmFsaWRhdGlvbktleTogJycgfVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm51bWJlclJhbmdlICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWluKHRoaXMub3B0aW9ucy5udW1iZXJSYW5nZS5mcm9tKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KHRoaXMub3B0aW9ucy5udW1iZXJSYW5nZS50bylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5QYXNzd29yZDpcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAvLyBVc2Ugb3B0aW9ucy5taW5MZW5ndGggaWYgc2V0LCBvdGhlcndpc2UgZGVmYXVsdCB0byA4XHJcbiAgICAgICAgICB0aGlzLnBhc3N3b3JkTWluTGVuZ3RoID0gdGhpcy5vcHRpb25zLm1pbkxlbmd0aCA+IDAgPyB0aGlzLm9wdGlvbnMubWluTGVuZ3RoIDogODtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9cXGQvLCB7XHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXI6IHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzTnVtYmVyLFxyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvW0EtWl0vLCB7XHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZENvbXBsZXhpdHlIYXNDYXBpdGFsTGV0dGVyOiB0aGlzLnBhc3N3b3JkQ29tcGxleGl0eUhhc0NhcGl0YWxMZXR0ZXIsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9bYS16XS8sIHtcclxuICAgICAgICAgICAgICAgIHBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyOiB0aGlzLnBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyLFxyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvWyFAIyQlXiYqKCksLj9cIjp7fXw8Pl0vLCB7XHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyOiB0aGlzLnBhc3N3b3JkQ29tcGxleGl0eUhhc1NwZWNpYWxMZXR0ZXIsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5wYXNzd29yZE1pbkxlbmd0aCksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uID09IExhbmd1YWdlVmFsaWRhdGlvbi5BcmFiaWMpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9eW15BLVphLXpdKiQvLCB7XHJcbiAgICAgICAgICAgICAgQXJhYmljTGV0dGVyT25seTogdGhpcy5hcmFiaWNMZXR0ZXJPbmx5LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB0aGlzLm9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uID09IExhbmd1YWdlVmFsaWRhdGlvbi5FbmdsaXNoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgL15bfmAhQCMkJV4mKigp4oCY4oCZ4oCc4oCdXys9W1xcXVxcXFx7fXw7JzpcIiwuXFwvPD4/YS16QS1aMC05LSBdKiQvLFxyXG4gICAgICAgICAgICAgIHsgRW5nbGlzaExldHRlck9ubHk6IHRoaXMuZW5nbGlzaExldHRlck9ubHkgfVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm1pbkxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLm9wdGlvbnMubWluTGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm1heExlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm9wdGlvbnMubWF4TGVuZ3RoKSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5tYXhMZW5ndGhXYXJuaW5nTGltaXQpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heExlbmd0aFdhcm5pbmdMaW1pdCA9XHJcbiAgICAgICAgICB0aGlzLmdsb2JhbFNldHRpbmdzLm1heExlbmd0aFdhcm5pbmdMaW1pdDtcclxuXHJcbiAgICAgIHRoaXMubWluQ2hhcnNMaW1pdCA9XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heExlbmd0aCAtIHRoaXMub3B0aW9ucy5tYXhMZW5ndGhXYXJuaW5nTGltaXQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc0FzeW5jKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50ZXh0Q29udHJvbEhvc3QubmdTdWJtaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICB0aGlzLmdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub3B0aW9ucy52YWxpZGF0aW9uUnVsZXMgPSB0aGlzLnZhbGlkYXRpb25SdWxlcztcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHBhc3N3b3JkIGNvbXBsZXhpdHkgY2hlY2sgaWYgaXQncyBhIHBhc3N3b3JkIGZpZWxkIHdpdGggZXhpc3RpbmcgdmFsdWVcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uICYmIHRoaXMub3B0aW9ucy52YWx1ZSkge1xyXG4gICAgICB0aGlzLmNoZWNrUGFzc3dvcmRDb21wbGV4aXR5KHRoaXMub3B0aW9ucy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNldEF0dHJpYnV0ZUZvckNvbnRyb2wodGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHJlc2V0RXJyb3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5yZW1vdmVHbG9iYWxFcnJvcigpO1xyXG4gIH07XHJcblxyXG4gIHNob3dHbG9iYWxFcnJvcigpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2hvd0dsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpO1xyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9sVXRpbGl0eS5nZXRFcnJvclZhbGlkYXRpb25NYXNzYWdlKEVycm9yTGlzdCwgdGhpcy5ncm91cCwgdGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldElucHV0VHlwZSh0eXBlOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xVdGlsaXR5LmdldElucHV0VHlwZSh0eXBlKTtcclxuICB9XHJcblxyXG4gIHRyaW1Db250cm9sVmFsdWUoKSB7XHJcbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuY29udHJvbFV0aWxpdHkudHJpbUNvbnRyb2xWYWx1ZShcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWVcclxuICAgICk7XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5wYXRjaFZhbHVlKG9yaWdpbmFsVmFsdWUpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9wdGlvbnMucGF0Y2hGdW5jdGlvbiAmJlxyXG4gICAgICB0aGlzLm9wdGlvbnMucGF0Y2hQYXRoICYmXHJcbiAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbGlkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShcclxuICAgICAgICBvcmlnaW5hbFZhbHVlLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaEZ1bmN0aW9uLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaFBhdGhcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvcHlJbnB1dE1lc3NhZ2UoaW5wdXRFbGVtZW50KSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkNvcHlJbnB1dE1lc3NhZ2UoaW5wdXRFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGdldEN1c3RvbUVycm9yc01hc3NhZ2VzKCkge1xyXG4gICAgdGhpcy5lbWFpbFZhbGlkYXRpb25LZXkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VtYWlsVmFsaWRhdGlvbktleScpO1xyXG4gICAgdGhpcy51UkxWYWxpZGF0aW9uS2V5ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCd1cmxWYWxpZGF0aW9uRXJyb3InKTtcclxuICAgIHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlcicpO1xyXG4gICAgdGhpcy5wYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Bhc3N3b3JkQ29tcGxleGl0eUhhc051bWJlcicpO1xyXG4gICAgdGhpcy5wYXNzd29yZENvbXBsZXhpdHlIYXNTbWFsbExldHRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUGFzc3dvcmRDb21wbGV4aXR5SGFzU21hbGxMZXR0ZXInKTtcclxuICAgIHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlcicpO1xyXG4gICAgdGhpcy5tYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5Jyk7XHJcbiAgICB0aGlzLmFyYWJpY0xldHRlck9ubHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1ZBTF9BcmFiaWNJc1JlcXVpcmVkQW5kT25seTUwQ2hhcmFjdGVyc0VuZ2xpc2gnKTtcclxuICAgIHRoaXMuZW5nbGlzaExldHRlck9ubHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VuZ2xpc2hMZXR0ZXJPbmx5Jyk7XHJcblxyXG4gICAgLy8gUGFzc3dvcmQgZGlzY2xhaW1lciBtZXNzYWdlc1xyXG4gICAgdGhpcy5wYXNzd29yZFJlcXVpcmVtZW50c1RpdGxlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdQYXNzd29yZFJlcXVpcmVtZW50c1RpdGxlJyk7XHJcbiAgICB0aGlzLm1pbkxlbmd0aFJlcXVpcmVtZW50ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdNaW5MZW5ndGhSZXF1aXJlbWVudCcpLnJlcGxhY2UoJyR7bWluTGVuZ3RofScsIHRoaXMucGFzc3dvcmRNaW5MZW5ndGgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBvblRleHRDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT0gSW5wdXRUeXBlLk51bWJlcilcclxuICAgICAgaWYgKCF0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnNldEVycm9ycyh7IGludGVnZXJOdW1iZXJWYWxpZGF0aW9uS2V5OiAnJyB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBwYXNzd29yZCBjb21wbGV4aXR5IHJlcXVpcmVtZW50cyBpbiByZWFsLXRpbWVcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tQYXNzd29yZENvbXBsZXhpdHkodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUgfHwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSA9PSAnJykge1xyXG4gICAgICB0aGlzLndvcmRDb3VudEFycmF5ID0gMDtcclxuICAgICAgdGhpcy53b3JkQ291bnQgPSAwO1xyXG4gICAgICB0aGlzLnNob3dDaGFyc0xpbWl0TXNnID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG5cclxuICAgICAgLy8gUmVzZXQgcGFzc3dvcmQgY29tcGxleGl0eSBmbGFncyB3aGVuIGZpZWxkIGlzIGVtcHR5XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5oYXNOdW1iZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc0NhcGl0YWxMZXR0ZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc1NtYWxsTGV0dGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYXNTcGVjaWFsTGV0dGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYXNNaW5MZW5ndGggPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53b3JkQ291bnRBcnJheSA9IHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlPy5zcGxpdCgnICcpLmxlbmd0aDtcclxuICAgICAgaWYgKHRoaXMud29yZENvdW50QXJyYXkgPiAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud29yZENvdW50QXJyYXkgPiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50KSB7XHJcbiAgICAgICAgICB0aGlzLndvcmRDb3VudCA9IHRoaXMub3B0aW9ucy5tYXhXb3JkQ291bnQ7XHJcbiAgICAgICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5zZXRFcnJvcnMoe1xyXG4gICAgICAgICAgICBNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5OiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5pbnZhbGlkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLndvcmRDb3VudCA9IHRoaXMud29yZENvdW50QXJyYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvL0NoZWNrIGZvciBtYXhfbGVuZ3RoIGxpbWl0IGNvdW50XHJcbiAgICAgIC8vTWF4TGVuZ3RoIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWxzIGNoYXJzIGxpbWl0IHNvIHRoYXQgbWluQ2hhcnNMaW1pdCB3b3VsZCBiZSA+PSAwXHJcbiAgICAgIGlmICh0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSAmJiB0aGlzLm9wdGlvbnMubWF4TGVuZ3RoICYmIHRoaXMubWluQ2hhcnNMaW1pdCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcnNDb3VudCA9IHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcnNDb3VudCA+IHRoaXMubWluQ2hhcnNMaW1pdCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmhhc0NoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJzQ291bnQgPT0gdGhpcy5vcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5jaGFyc0xpbWl0TXNnQ2xhc3MgPSAnZGFuZ2VyJztcclxuICAgICAgICAgIGVsc2UgdGhpcy5jaGFyc0xpbWl0TXNnQ2xhc3MgPSAnd2FybmluZyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0NoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1heDogbnVtYmVyID0gdGhpcy5vcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICBsZXQgY3VycmVudDogbnVtYmVyID0gdGhpcy5jdXJyZW50Q2hhcnNDb3VudDtcclxuICAgICAgICBsZXQgbXNnOiBzdHJpbmcgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNYXhMZW5ndGhMaW1pdFdhcm5pbmdcIik7XHJcblxyXG4gICAgICAgIC8vIFJlcGxhY2UgcGxhY2Vob2xkZXJzIHdpdGggYWN0dWFsIHZhbHVlc1xyXG4gICAgICAgIHRoaXMubWF4TGltaXRXYXJuaW5nTXNnID0gbXNnLnJlcGxhY2UoXCIke21heH1cIiwgbWF4LnRvU3RyaW5nKCkpLnJlcGxhY2UoXCIke2N1cnJlbnR9XCIsIGN1cnJlbnQudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoaXNGb2N1czogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc1Nob3dXb3JkQ291bnQgPSBpc0ZvY3VzO1xyXG5cclxuICAgIC8vb25Gb2N1c1xyXG4gICAgaWYgKGlzRm9jdXMpIHtcclxuICAgICAgaWYgKHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvcilcclxuICAgICAgICAvL2NoZWNrIGlmIHRoZXJlIHdhcyBwcmV2aW91cyB2YWxpZGF0aW9uIGVycm9yXHJcbiAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IHRydWU7XHJcbiAgICB9IC8vb25Gb2N1c091dFxyXG4gICAgZWxzZSB0aGlzLnNob3dDaGFyc0xpbWl0TXNnID0gZmFsc2U7XHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgcmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5yZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24oXHJcbiAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLFxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcyxcclxuICAgICAgdGhpcy5vcHRpb25zXHJcbiAgICApO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBhZGRSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmFkZFJlcXVpcmVkVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICB0aGlzLm9wdGlvbnNcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICByZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkucmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICBjdXN0b21WYWxpZGF0aW9uXHJcbiAgICApO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBhZGRDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkQ3VzdG9tVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICBjdXN0b21WYWxpZGF0aW9uXHJcbiAgICApO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBpc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5pc1ZhbGlkKHRoaXMudGV4dEJveEZvcm1Db250cm9sKTtcclxuICB9O1xyXG5cclxuICBvblRleHRCbHVyKCkge1xyXG4gICAgLy8gQ2hlY2sgcGFzc3dvcmQgY29tcGxleGl0eSBvbiBibHVyIGFzIHdlbGxcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tQYXNzd29yZENvbXBsZXhpdHkodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUgfHwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25CbHVyLmVtaXQodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tQYXNzd29yZENvbXBsZXhpdHkocGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5oYXNOdW1iZXIgPSAvXFxkLy50ZXN0KHBhc3N3b3JkKTtcclxuICAgIHRoaXMuaGFzQ2FwaXRhbExldHRlciA9IC9bQS1aXS8udGVzdChwYXNzd29yZCk7XHJcbiAgICB0aGlzLmhhc1NtYWxsTGV0dGVyID0gL1thLXpdLy50ZXN0KHBhc3N3b3JkKTtcclxuICAgIHRoaXMuaGFzU3BlY2lhbExldHRlciA9IC9bIUAjJCVeJiooKSwuP1wiOnt9fDw+XS8udGVzdChwYXNzd29yZCk7XHJcbiAgICB0aGlzLmhhc01pbkxlbmd0aCA9IHBhc3N3b3JkLmxlbmd0aCA+PSB0aGlzLnBhc3N3b3JkTWluTGVuZ3RoO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBiYnNmLWNvbnRyb2wgYmJzZi10ZXh0Ym94XCIgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwib3B0aW9ucy52aWV3VHlwZSA9PSAxID8gJ2Jic2YtdmVydGljYWwnIDogJ2Jic2YtaG9yaXpvbnRhbCdcIj5cclxuICAgIDwhLS1sYWJlbC0tPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwiIW9wdGlvbnMuaGlkZUxhYmVsXCIgY2xhc3M9XCJiYnNmLWxhYmVsIHt7IG9wdGlvbnMubGFiZWxFeHRyYUNsYXNzZXMgfX1cIj5cclxuICAgICAge3sgb3B0aW9ucy5sYWJlbFZhbHVlIH19XHJcbiAgICAgIDwhLS1Bc3Rlcmlzay0tPlxyXG4gICAgICBAaWYgKCgob3B0aW9ucy5zaG93QXN0ZXJpc2sgJiYgb3B0aW9ucy5pc1JlcXVpcmVkKSB8fCBvcHRpb25zLmlzUmVxdWlyZWQpICYmICFvcHRpb25zLmlzUmVhZG9ubHkpIHtcclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8IS0tTWFza1BhdHRlcm4tLT5cclxuICAgIEBpZiAobWFza1BhdHRlcm4gIT0gbnVsbCAmJiBtYXNrUGF0dGVybiAhPSAnJyAmJiAhb3B0aW9ucy5pc1JlYWRvbmx5KSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXJcIiBbbmdDbGFzc109XCJvcHRpb25zLmVuYWJsZUNvcHlUb0NsaXBib2FyZCA/ICdwLTQwcHgnIDogJydcIj5cclxuICAgICAgPCEtLUljb24tLT5cclxuICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnMuaWNvbiAhPSBudWxsXCIgY2xhc3M9XCJzdmcgc3ZnLWljb24tZ3JleSBiYnNmLWljb25cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIm9wdGlvbnMuaWNvblBvc2l0aW9uID09IDEgPyAnYmJzZi1sZWZ0LWljb24nIDogJ2Jic2YtcmlnaHQtaWNvbidcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIm9wdGlvbnMuaWNvblwiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wge3sgb3B0aW9ucy5leHRyYUNsYXNzZXMgfX1cIiBbbWFza109XCJtYXNrUGF0dGVyblwiIHBsYWNlSG9sZGVyQ2hhcmFjdGVyPVwiIFwiXHJcbiAgICAgICAgW3Nob3dNYXNrVHlwZWRdPVwidHJ1ZVwiIFt2YWxpZGF0aW9uXT1cInRydWVcIiBbZGlyXT1cInRleHREaXJcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7eyBvcHRpb25zLm5hbWUgfX1cIiB0eXBlPVwie3sgZ2V0SW5wdXRUeXBlKG9wdGlvbnMudHlwZSkgfX1cIiBbKG5nTW9kZWwpXT1cIm9wdGlvbnMudmFsdWVcIlxyXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInRleHRCb3hGb3JtQ29udHJvbC5pbnZhbGlkICYmIHRleHRCb3hGb3JtQ29udHJvbC50b3VjaGVkXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7IG9wdGlvbnMucGxhY2Vob2xkZXIgfX1cIiBpZD1cInt7IG9wdGlvbnMubmFtZSB9fVwiIGF1dG9jb21wbGV0ZT1cInt7IG9wdGlvbnMuYXV0b0NvbXBsZXRlIH19XCJcclxuICAgICAgICAoY2hhbmdlKT1cInRyaW1Db250cm9sVmFsdWUoKVwiIChrZXl1cCk9XCJvblRleHRDaGFuZ2UoKVwiIFtyZWFkb25seV09XCJvcHRpb25zLmlzUmVhZG9ubHlcIlxyXG4gICAgICAgIChrZXlkb3duKT1cIndvcmRDb3VudEFycmF5ID4gb3B0aW9ucy5tYXhXb3JkQ291bnQgJiYgJGV2ZW50LmtleUNvZGUgIT0gOCA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiXHJcbiAgICAgICAgI3VzZXJJbnB1dCAoYmx1cik9XCJvblRleHRCbHVyKClcIiAvPlxyXG4gICAgICA8IS0tQ29weVRvQ2xpcGJvYXJkLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY29weS1jbGlwYm9hcmRcIiBuZ2JUb29sdGlwPVwiQ29waWVkIVwiICpuZ0lmPVwib3B0aW9ucy5lbmFibGVDb3B5VG9DbGlwYm9hcmRcIlxyXG4gICAgICAgIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKHVzZXJJbnB1dClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb3B5XCI+PC9pPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDwhLS1Ob01hc2tQYXR0ZXJuLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibWFza1BhdHRlcm4gPT0gbnVsbCB8fCAobWFza1BhdHRlcm4gPT0gJycgJiYgIW9wdGlvbnMuaXNSZWFkb25seSlcIiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCJcclxuICAgICAgW25nQ2xhc3NdPVwib3B0aW9ucy5lbmFibGVDb3B5VG9DbGlwYm9hcmQgPyAncC00MHB4JyA6ICcnXCI+XHJcbiAgICAgIDwhLS1JY29uLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdmcgc3ZnLWljb24tZ3JleSBiYnNmLWljb25cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIm9wdGlvbnMuaWNvblBvc2l0aW9uID09IDEgPyAnYmJzZi1sZWZ0LWljb24nIDogJ2Jic2YtcmlnaHQtaWNvbidcIiAqbmdJZj1cIm9wdGlvbnMuaWNvbiAhPSBudWxsXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCJvcHRpb25zLmljb25cIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0taW5wdXQtLT5cclxuICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHt7IG9wdGlvbnMuZXh0cmFDbGFzc2VzIH19IFwiIFtkaXJdPVwidGV4dERpclwiIChmb2N1cyk9XCJvbkZvY3VzKHRydWUpXCJcclxuICAgICAgICAoZm9jdXNvdXQpPVwib25Gb2N1cyhmYWxzZSlcIiBtYXhsZW5ndGg9XCJ7eyBvcHRpb25zLm1heExlbmd0aCB9fVwiIG1pbmxlbmd0aD1cInt7IG9wdGlvbnMubWluTGVuZ3RoIH19XCJcclxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgb3B0aW9ucy5uYW1lIH19XCJcclxuICAgICAgICB0eXBlPVwie3sgZ2V0SW5wdXRUeXBlKG9wdGlvbnMudHlwZSkgfX1cIlxyXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInRleHRCb3hGb3JtQ29udHJvbC5pbnZhbGlkICYmIHRleHRCb3hGb3JtQ29udHJvbC50b3VjaGVkXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7IG9wdGlvbnMucGxhY2Vob2xkZXIgfX1cIiBpZD1cInt7IG9wdGlvbnMubmFtZSB9fVwiIGF1dG9jb21wbGV0ZT1cInt7IG9wdGlvbnMuYXV0b0NvbXBsZXRlIH19XCJcclxuICAgICAgICAoY2hhbmdlKT1cInRyaW1Db250cm9sVmFsdWUoKVwiIChrZXl1cCk9XCJvblRleHRDaGFuZ2UoKVwiIFsobmdNb2RlbCldPVwib3B0aW9ucy52YWx1ZVwiXHJcbiAgICAgICAgKGtleWRvd24pPVwid29yZENvdW50QXJyYXkgPiBvcHRpb25zLm1heFdvcmRDb3VudCAmJiAkZXZlbnQua2V5Q29kZSAhPSA4ID8gJGV2ZW50LnByZXZlbnREZWZhdWx0KCkgOiBudWxsXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwib3B0aW9ucy5pc1JlYWRvbmx5XCIgI3VzZXJJbnB1dCAoYmx1cik9XCJvblRleHRCbHVyKClcIiAvPlxyXG4gICAgICA8IS0tQ29weVRvQ2xpcGJvYXJkLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY29weS1jbGlwYm9hcmRcIiBuZ2JUb29sdGlwPVwiQ29waWVkIVwiIHRyaWdnZXJzPVwiY2xpY2s6Ymx1clwiICpuZ0lmPVwib3B0aW9ucy5lbmFibGVDb3B5VG9DbGlwYm9hcmRcIlxyXG4gICAgICAgIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKHVzZXJJbnB1dClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb3B5XCI+PC9pPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gcmVhZG9ubHkgLS0+XHJcbiAgICBAaWYgKG9wdGlvbnMuaXNSZWFkb25seSkge1xyXG4gICAgPGRpdj5cclxuICAgICAgPGEgKm5nSWY9XCJvcHRpb25zLnR5cGUgPT0gaW5wdXRUeXBlLkVtYWlsXCIgaHJlZj1cIm1haWx0bzoge3sgb3B0aW9ucy52YWx1ZSB9fVwiPnt7IG9wdGlvbnMudmFsdWUgfX08L2E+XHJcbiAgICAgIDxhICpuZ0lmPVwib3B0aW9ucy50eXBlID09IGlucHV0VHlwZS5VUkxcIiBocmVmPVwie3sgb3B0aW9ucy52YWx1ZSB9fVwiIHRhcmdldD1cIl9ibGFua1wiPnt7IG9wdGlvbnMudmFsdWUgfX08L2E+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9ucy50eXBlICE9IGlucHV0VHlwZS5VUkwgJiYgb3B0aW9ucy50eXBlICE9IGlucHV0VHlwZS5FbWFpbFwiXHJcbiAgICAgICAgY2xhc3M9XCJyZWFkb25seS12aWV3XCI+e3sgb3B0aW9ucy52YWx1ZSB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzdWJ0ZXh0LWNvbnRhaW5lclwiPlxyXG4gICAgPCEtLXdvcmRDb3VudC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2Ytd29yZC1jb3VudFwiICpuZ0lmPVwib3B0aW9ucy5tYXhXb3JkQ291bnQgPiAwICYmIGlzU2hvd1dvcmRDb3VudFwiPlxyXG4gICAgICB7eyB3b3JkQ291bnQgfX0ve3sgb3B0aW9ucy5tYXhXb3JkQ291bnQgfX0gV29yZHM8L2Rpdj5cclxuICAgIDwhLS0gQ2hhcnNMaW1pdE1zZy0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtY2hhcmFjdGVyLWNvdW50XCIgKm5nSWY9XCJzaG93Q2hhcnNMaW1pdE1zZ1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2JhZGdlLWxpZ2h0LXdhcm5pbmcnOiBjaGFyc0xpbWl0TXNnQ2xhc3MgPT09ICd3YXJuaW5nJywgJ2JhZGdlLWxpZ2h0LWRhbmdlcic6IGNoYXJzTGltaXRNc2dDbGFzcyA9PT0gJ2RhbmdlcicgfVwiPlxyXG4gICAgICB7eyBtYXhMaW1pdFdhcm5pbmdNc2cgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBQYXNzd29yZCBEaXNjbGFpbWVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtcGFzc3dvcmQtZGlzY2xhaW1lclwiXHJcbiAgICAgICpuZ0lmPVwib3B0aW9ucy50eXBlID09IGlucHV0VHlwZS5QYXNzd29yZCAmJiAhb3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uICYmICFvcHRpb25zLmlzUmVhZG9ubHlcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLXJlcXVpcmVtZW50c1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXF1aXJlbWVudC10aXRsZVwiPnt7IHBhc3N3b3JkUmVxdWlyZW1lbnRzVGl0bGUgfX08L2Rpdj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJyZXF1aXJlbWVudHMtbGlzdFwiPlxyXG4gICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsncmVxdWlyZW1lbnQtbWV0JzogaGFzTnVtYmVyLCAncmVxdWlyZW1lbnQtbm90LW1ldCc6ICFoYXNOdW1iZXJ9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwiaGFzTnVtYmVyID8gJ2ZhLWNoZWNrIHRleHQtc3VjY2VzcycgOiAnZmEtdGltZXMgdGV4dC1kYW5nZXInXCI+PC9pPlxyXG4gICAgICAgICAgICB7eyBwYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXIgfX1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieydyZXF1aXJlbWVudC1tZXQnOiBoYXNDYXBpdGFsTGV0dGVyLCAncmVxdWlyZW1lbnQtbm90LW1ldCc6ICFoYXNDYXBpdGFsTGV0dGVyfVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhc1wiIFtuZ0NsYXNzXT1cImhhc0NhcGl0YWxMZXR0ZXIgPyAnZmEtY2hlY2sgdGV4dC1zdWNjZXNzJyA6ICdmYS10aW1lcyB0ZXh0LWRhbmdlcidcIj48L2k+XHJcbiAgICAgICAgICAgIHt7IHBhc3N3b3JkQ29tcGxleGl0eUhhc0NhcGl0YWxMZXR0ZXIgfX1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieydyZXF1aXJlbWVudC1tZXQnOiBoYXNTbWFsbExldHRlciwgJ3JlcXVpcmVtZW50LW5vdC1tZXQnOiAhaGFzU21hbGxMZXR0ZXJ9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwiaGFzU21hbGxMZXR0ZXIgPyAnZmEtY2hlY2sgdGV4dC1zdWNjZXNzJyA6ICdmYS10aW1lcyB0ZXh0LWRhbmdlcidcIj48L2k+XHJcbiAgICAgICAgICAgIHt7IHBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyIH19XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsncmVxdWlyZW1lbnQtbWV0JzogaGFzU3BlY2lhbExldHRlciwgJ3JlcXVpcmVtZW50LW5vdC1tZXQnOiAhaGFzU3BlY2lhbExldHRlcn1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXNcIiBbbmdDbGFzc109XCJoYXNTcGVjaWFsTGV0dGVyID8gJ2ZhLWNoZWNrIHRleHQtc3VjY2VzcycgOiAnZmEtdGltZXMgdGV4dC1kYW5nZXInXCI+PC9pPlxyXG4gICAgICAgICAgICB7eyBwYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyIH19XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsncmVxdWlyZW1lbnQtbWV0JzogaGFzTWluTGVuZ3RoLCAncmVxdWlyZW1lbnQtbm90LW1ldCc6ICFoYXNNaW5MZW5ndGh9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwiaGFzTWluTGVuZ3RoID8gJ2ZhLWNoZWNrIHRleHQtc3VjY2VzcycgOiAnZmEtdGltZXMgdGV4dC1kYW5nZXInXCI+PC9pPlxyXG4gICAgICAgICAgICB7eyBtaW5MZW5ndGhSZXF1aXJlbWVudCB9fVxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBMYWJlbERlc2NyaXB0aW9uLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIiAqbmdJZj1cIm9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiAhPSBudWxsXCI+e3sgb3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgICA8IS0tIHJlcXVpcmVkVGV4dC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiIFtkaXJdPVwidGV4dERpclwiICpuZ0lmPVwidGV4dEJveEZvcm1Db250cm9sLmludmFsaWQgJiYgdGV4dEJveEZvcm1Db250cm9sLnRvdWNoZWRcIj5cclxuICAgICAge3sgZ2V0RXJyb3JWYWxpZGF0aW9uKHRleHRCb3hGb3JtQ29udHJvbC5lcnJvcnMgfCBrZXl2YWx1ZSkgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICBAaWYgKChncm91cC52YWxpZCAmJiBncm91cC5kaXJ0eSAmJiBncm91cC50b3VjaGVkKSB8fCAoZ3JvdXAudW50b3VjaGVkICYmIGdyb3VwLmludmFsaWQgJiYgZ3JvdXAuZGlydHkpKSB7XHJcbiAgPGRpdj57eyByZXNldEVycm9yKCkgfX08L2Rpdj5cclxuICB9XHJcbjwvZGl2PiJdfQ==
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dEJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWNvbnRyb2xzL3NyYy9saWIvY29udHJvbHMvVGV4dEJveC9UZXh0Qm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9UZXh0Qm94L1RleHRCb3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQW9FLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFNM0UsTUFBTSxPQUFPLGdCQUFnQjthQUNwQiwyQkFBc0IsR0FBRyxJQUFJLEFBQVAsQ0FBUTtJQUNyQyxZQUFvQixjQUE4QixFQUMxQixnQkFBa0MsRUFDL0MsZUFBbUMsRUFDbkMsY0FBOEIsRUFDN0Isd0JBQWtELEVBQ2xELGNBQThCO1FBTHRCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQy9DLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0IsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFLaEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFL0IsY0FB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IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJy4uLy4uL1NoYXJlZC9Nb2RlbHMvVGV4dEJveE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvSW5wdXRUeXBlJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgR2xvYmFsU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IExhbmd1YWdlVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9MYW5ndWFnZVZhbGlkYXRpb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdCQlNGLVRleHRCb3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9UZXh0Qm94LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGV4dGJveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgc3RhdGljIGNvbnRyb2xDb250YWluZXJTdGF0aWMgPSBudWxsO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udHJvbFV0aWxpdHk6IENvbnRyb2xVdGlsaXR5XHJcbiAgICAsIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lclxyXG4gICAgLCBwdWJsaWMgdGV4dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmVcclxuICAgICwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGNvbnRyb2xWYWxpZGF0aW9uU2VydmljZTogQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZ2xvYmFsU2V0dGluZ3M6IEdsb2JhbFNldHRpbmdzKSB7XHJcbiAgICBUZXh0Ym94Q29tcG9uZW50LmNvbnRyb2xDb250YWluZXJTdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogVGV4dEJveE9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyBpbnB1dFR5cGUgPSBJbnB1dFR5cGU7XHJcbiAgdGV4dEJveEZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgbWFza1BhdHRlcm46IHN0cmluZyA9ICcnO1xyXG4gIHdvcmRDb3VudDogbnVtYmVyID0gMDtcclxuICB3b3JkQ291bnRBcnJheTogbnVtYmVyID0gMDtcclxuICBlbWFpbFZhbGlkYXRpb25LZXk6IHN0cmluZztcclxuICB1UkxWYWxpZGF0aW9uS2V5OiBzdHJpbmc7XHJcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzTnVtYmVyOiBzdHJpbmc7XHJcbiAgYXJhYmljTGV0dGVyT25seTogc3RyaW5nO1xyXG4gIGVuZ2xpc2hMZXR0ZXJPbmx5OiBzdHJpbmc7XHJcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlcjogc3RyaW5nO1xyXG4gIHBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyOiBzdHJpbmc7XHJcbiAgcGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlcjogc3RyaW5nO1xyXG4gIG1heFdvcmRDb3VudFZhbGlkYXRpb25LZXk6IHN0cmluZztcclxuICBpc1Nob3dXb3JkQ291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtYXJrQWxsQXNUb3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsaWRhdGlvblJ1bGVzID0gW107XHJcbiAgdmFsaWRhdGlvblJ1bGVzQXN5bmMgPSBbXTtcclxuXHJcbiAgLy9Gb3IgU2hvdyB3YXJuaW5nIG1lc3NhZ2Ugb2YgbWF4IGxlbmd0aCBsaW1pdFxyXG4gIGN1cnJlbnRDaGFyc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIHNob3dDaGFyc0xpbWl0TXNnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNoYXJzTGltaXRNc2dDbGFzczogc3RyaW5nO1xyXG4gIG1pbkNoYXJzTGltaXQ6IG51bWJlciA9IC0xOyAvL1RvIGRpc2FibGUgY2hhcnMgbGltaXQgZmVhdHVyZSBieSBkZWZhdWx0XHJcbiAgbWF4TGltaXRXYXJuaW5nTXNnOiBzdHJpbmcgPSAnJztcclxuICB0ZXh0RGlyOiBhbnk7XHJcblxyXG4gIC8vIFBhc3N3b3JkIGRpc2NsYWltZXIgcHJvcGVydGllc1xyXG4gIHBhc3N3b3JkUmVxdWlyZW1lbnRzVGl0bGU6IHN0cmluZztcclxuICBtaW5MZW5ndGhSZXF1aXJlbWVudDogc3RyaW5nO1xyXG4gIHBhc3N3b3JkTWluTGVuZ3RoOiBudW1iZXIgPSA4OyAvLyBEZWZhdWx0IHZhbHVlLCB3aWxsIGJlIHVwZGF0ZWQgYmFzZWQgb24gYWN0dWFsIHZhbGlkYXRvclxyXG4gIGhhc051bWJlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhc0NhcGl0YWxMZXR0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNTbWFsbExldHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhhc1NwZWNpYWxMZXR0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoYXNNaW5MZW5ndGg6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmlzUmVhZG9ubHkgJiYgIXRoaXMub3B0aW9ucy52YWx1ZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMudmFsdWUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05BJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmZvcmNlRGlyZWN0aW9uKVxyXG4gICAgICB0aGlzLnRleHREaXIgPSB0aGlzLm9wdGlvbnMuZm9yY2VEaXJlY3Rpb24gPT0gMiA/ICdydGwnIDogJ2x0cic7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMudGV4dERpciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpID09ICdhcicgPyAncnRsJyA6ICdsdHInO1xyXG5cclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubWF4TGVuZ3RoKVxyXG4gICAgICB0aGlzLm9wdGlvbnMubWF4TGVuZ3RoID0gdGhpcy5nbG9iYWxTZXR0aW5ncy5tYXhMZW5ndGhUZXh0Qm94O1xyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLnZpZXdUeXBlKVxyXG4gICAgICB0aGlzLm9wdGlvbnMudmlld1R5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLnZpZXdUeXBlO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubWFza1BhdHRlcm4gIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMubWFza1BhdHRlcm4gIT0gJycpIHtcclxuICAgICAgdGhpcy5tYXNrUGF0dGVybiA9IHRoaXMub3B0aW9ucy5tYXNrUGF0dGVybjtcclxuICAgICAgdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyID0gdGhpcy5tYXNrUGF0dGVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMubmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbCA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLm5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMudmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFiZWxLZXkgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMubGFiZWxLZXkgIT0gJycpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5sYWJlbFZhbHVlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbEtleVxyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuZ2V0Q3VzdG9tRXJyb3JzTWFzc2FnZXMoKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNSZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMudHlwZSkge1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5FbWFpbDpcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXF0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvLFxyXG4gICAgICAgICAgICAgIHsgRW1haWxWYWxpZGF0aW9uS2V5OiB0aGlzLmVtYWlsVmFsaWRhdGlvbktleSB9XHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgSW5wdXRUeXBlLlVSTDpcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gL14oPzpodHRwKHMpPzpcXC9cXC8pP1tcXHcuLV0rKD86XFwuW1xcd1xcLi1dKykrW1xcd1xcLVxcLl9+Oi8/I1tcXF0hXFwkJidcXChcXClcXCpcXCssOz0uXSskLztcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgIHBhdHRlcm4sXHJcbiAgICAgICAgICAgICAgeyBVUkxWYWxpZGF0aW9uS2V5OiB0aGlzLnVSTFZhbGlkYXRpb25LZXkgfVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5FSUQ6XHJcbiAgICAgICAgdGhpcy5tYXNrUGF0dGVybiA9ICcwMDAtMDAwMC0wMDAwMDAwLTAnO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlciA9IHRoaXMubWFza1BhdHRlcm47XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5OdW1iZXI6XHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvXlswLTldKiQvLCB7XHJcbiAgICAgICAgICAgICAgICBpbnRlZ2VyTnVtYmVyVmFsaWRhdGlvbktleTogJycsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgICAvXlsrXT8oWy5dXFxkK3xcXGQrWy5dP1xcZCopJC8sXHJcbiAgICAgICAgICAgICAgICB7IHBvc2l0aXZlTnVtYmVyVmFsaWRhdGlvbktleTogJycgfVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm51bWJlclJhbmdlICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWluKHRoaXMub3B0aW9ucy5udW1iZXJSYW5nZS5mcm9tKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4KHRoaXMub3B0aW9ucy5udW1iZXJSYW5nZS50bylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIElucHV0VHlwZS5QYXNzd29yZDpcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgICAvLyBVc2Ugb3B0aW9ucy5taW5MZW5ndGggaWYgc2V0LCBvdGhlcndpc2UgZGVmYXVsdCB0byA4XHJcbiAgICAgICAgICB0aGlzLnBhc3N3b3JkTWluTGVuZ3RoID0gdGhpcy5vcHRpb25zLm1pbkxlbmd0aCA+IDAgPyB0aGlzLm9wdGlvbnMubWluTGVuZ3RoIDogODtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9cXGQvLCB7XHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXI6IHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzTnVtYmVyLFxyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvW0EtWl0vLCB7XHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZENvbXBsZXhpdHlIYXNDYXBpdGFsTGV0dGVyOiB0aGlzLnBhc3N3b3JkQ29tcGxleGl0eUhhc0NhcGl0YWxMZXR0ZXIsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9bYS16XS8sIHtcclxuICAgICAgICAgICAgICAgIHBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyOiB0aGlzLnBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyLFxyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHRoaXMuY29udHJvbFV0aWxpdHkucGF0dGVyblZhbGlkYXRvcigvWyFAIyQlXiYqKCksLj9cIjp7fXw8Pl0vLCB7XHJcbiAgICAgICAgICAgICAgICBwYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyOiB0aGlzLnBhc3N3b3JkQ29tcGxleGl0eUhhc1NwZWNpYWxMZXR0ZXIsXHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5wYXNzd29yZE1pbkxlbmd0aCksXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uID09IExhbmd1YWdlVmFsaWRhdGlvbi5BcmFiaWMpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXR0ZXJuVmFsaWRhdG9yKC9eW15BLVphLXpdKiQvLCB7XHJcbiAgICAgICAgICAgICAgQXJhYmljTGV0dGVyT25seTogdGhpcy5hcmFiaWNMZXR0ZXJPbmx5LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB0aGlzLm9wdGlvbnMubGFuZ3VhZ2VWYWxpZGF0aW9uID09IExhbmd1YWdlVmFsaWRhdGlvbi5FbmdsaXNoXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdHRlcm5WYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgL15bfmAhQCMkJV4mKigp4oCY4oCZ4oCc4oCdXys9W1xcXVxcXFx7fXw7JzpcIiwuXFwvPD4/YS16QS1aMC05LSBdKiQvLFxyXG4gICAgICAgICAgICAgIHsgRW5nbGlzaExldHRlck9ubHk6IHRoaXMuZW5nbGlzaExldHRlck9ubHkgfVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21WYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zID0gdGhpcy5vcHRpb25zLmN1c3RvbVZhbGlkYXRpb247XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm1pbkxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLm9wdGlvbnMubWluTGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLm1heExlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uUnVsZXMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm9wdGlvbnMubWF4TGVuZ3RoKSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5tYXhMZW5ndGhXYXJuaW5nTGltaXQpXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heExlbmd0aFdhcm5pbmdMaW1pdCA9XHJcbiAgICAgICAgICB0aGlzLmdsb2JhbFNldHRpbmdzLm1heExlbmd0aFdhcm5pbmdMaW1pdDtcclxuXHJcbiAgICAgIHRoaXMubWluQ2hhcnNMaW1pdCA9XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heExlbmd0aCAtIHRoaXMub3B0aW9ucy5tYXhMZW5ndGhXYXJuaW5nTGltaXQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc0FzeW5jKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuaXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50ZXh0Q29udHJvbEhvc3QubmdTdWJtaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICB0aGlzLmdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub3B0aW9ucy52YWxpZGF0aW9uUnVsZXMgPSB0aGlzLnZhbGlkYXRpb25SdWxlcztcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHBhc3N3b3JkIGNvbXBsZXhpdHkgY2hlY2sgaWYgaXQncyBhIHBhc3N3b3JkIGZpZWxkIHdpdGggZXhpc3RpbmcgdmFsdWVcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uICYmIHRoaXMub3B0aW9ucy52YWx1ZSkge1xyXG4gICAgICB0aGlzLmNoZWNrUGFzc3dvcmRDb21wbGV4aXR5KHRoaXMub3B0aW9ucy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNldEF0dHJpYnV0ZUZvckNvbnRyb2wodGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHJlc2V0RXJyb3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5yZW1vdmVHbG9iYWxFcnJvcigpO1xyXG4gIH07XHJcblxyXG4gIHNob3dHbG9iYWxFcnJvcigpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2hvd0dsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpO1xyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9sVXRpbGl0eS5nZXRFcnJvclZhbGlkYXRpb25NYXNzYWdlKEVycm9yTGlzdCwgdGhpcy5ncm91cCwgdGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldElucHV0VHlwZSh0eXBlOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xVdGlsaXR5LmdldElucHV0VHlwZSh0eXBlKTtcclxuICB9XHJcblxyXG4gIHRyaW1Db250cm9sVmFsdWUoKSB7XHJcbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuY29udHJvbFV0aWxpdHkudHJpbUNvbnRyb2xWYWx1ZShcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWVcclxuICAgICk7XHJcbiAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5wYXRjaFZhbHVlKG9yaWdpbmFsVmFsdWUpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9wdGlvbnMucGF0Y2hGdW5jdGlvbiAmJlxyXG4gICAgICB0aGlzLm9wdGlvbnMucGF0Y2hQYXRoICYmXHJcbiAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbGlkXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jb250cm9sVXRpbGl0eS5wYXRjaENvbnRyb2xWYWx1ZShcclxuICAgICAgICBvcmlnaW5hbFZhbHVlLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaEZ1bmN0aW9uLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5wYXRjaFBhdGhcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvcHlJbnB1dE1lc3NhZ2UoaW5wdXRFbGVtZW50KSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkNvcHlJbnB1dE1lc3NhZ2UoaW5wdXRFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGdldEN1c3RvbUVycm9yc01hc3NhZ2VzKCkge1xyXG4gICAgdGhpcy5lbWFpbFZhbGlkYXRpb25LZXkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VtYWlsVmFsaWRhdGlvbktleScpO1xyXG4gICAgdGhpcy51UkxWYWxpZGF0aW9uS2V5ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCd1cmxWYWxpZGF0aW9uRXJyb3InKTtcclxuICAgIHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUGFzc3dvcmRDb21wbGV4aXR5SGFzQ2FwaXRhbExldHRlcicpO1xyXG4gICAgdGhpcy5wYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Bhc3N3b3JkQ29tcGxleGl0eUhhc051bWJlcicpO1xyXG4gICAgdGhpcy5wYXNzd29yZENvbXBsZXhpdHlIYXNTbWFsbExldHRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUGFzc3dvcmRDb21wbGV4aXR5SGFzU21hbGxMZXR0ZXInKTtcclxuICAgIHRoaXMucGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnUGFzc3dvcmRDb21wbGV4aXR5SGFzU3BlY2lhbExldHRlcicpO1xyXG4gICAgdGhpcy5tYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5Jyk7XHJcbiAgICB0aGlzLmFyYWJpY0xldHRlck9ubHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1ZBTF9BcmFiaWNJc1JlcXVpcmVkQW5kT25seTUwQ2hhcmFjdGVyc0VuZ2xpc2gnKTtcclxuICAgIHRoaXMuZW5nbGlzaExldHRlck9ubHkgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VuZ2xpc2hMZXR0ZXJPbmx5Jyk7XHJcblxyXG4gICAgLy8gUGFzc3dvcmQgZGlzY2xhaW1lciBtZXNzYWdlc1xyXG4gICAgdGhpcy5wYXNzd29yZFJlcXVpcmVtZW50c1RpdGxlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdQYXNzd29yZFJlcXVpcmVtZW50c1RpdGxlJyk7XHJcbiAgICB0aGlzLm1pbkxlbmd0aFJlcXVpcmVtZW50ID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdNaW5MZW5ndGhSZXF1aXJlbWVudCcpLnJlcGxhY2UoJyR7bWluTGVuZ3RofScsIHRoaXMucGFzc3dvcmRNaW5MZW5ndGgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBvblRleHRDaGFuZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT0gSW5wdXRUeXBlLk51bWJlcilcclxuICAgICAgaWYgKCF0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLnNldEVycm9ycyh7IGludGVnZXJOdW1iZXJWYWxpZGF0aW9uS2V5OiAnJyB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBwYXNzd29yZCBjb21wbGV4aXR5IHJlcXVpcmVtZW50cyBpbiByZWFsLXRpbWVcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tQYXNzd29yZENvbXBsZXhpdHkodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUgfHwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSA9PSAnJykge1xyXG4gICAgICB0aGlzLndvcmRDb3VudEFycmF5ID0gMDtcclxuICAgICAgdGhpcy53b3JkQ291bnQgPSAwO1xyXG4gICAgICB0aGlzLnNob3dDaGFyc0xpbWl0TXNnID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG5cclxuICAgICAgLy8gUmVzZXQgcGFzc3dvcmQgY29tcGxleGl0eSBmbGFncyB3aGVuIGZpZWxkIGlzIGVtcHR5XHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5oYXNOdW1iZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc0NhcGl0YWxMZXR0ZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc1NtYWxsTGV0dGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYXNTcGVjaWFsTGV0dGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYXNNaW5MZW5ndGggPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53b3JkQ291bnRBcnJheSA9IHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlPy5zcGxpdCgnICcpLmxlbmd0aDtcclxuICAgICAgaWYgKHRoaXMud29yZENvdW50QXJyYXkgPiAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud29yZENvdW50QXJyYXkgPiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50KSB7XHJcbiAgICAgICAgICB0aGlzLndvcmRDb3VudCA9IHRoaXMub3B0aW9ucy5tYXhXb3JkQ291bnQ7XHJcbiAgICAgICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5zZXRFcnJvcnMoe1xyXG4gICAgICAgICAgICBNYXhXb3JkQ291bnRWYWxpZGF0aW9uS2V5OiB0aGlzLm9wdGlvbnMubWF4V29yZENvdW50LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICB0aGlzLnRleHRCb3hGb3JtQ29udHJvbC5pbnZhbGlkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLndvcmRDb3VudCA9IHRoaXMud29yZENvdW50QXJyYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvL0NoZWNrIGZvciBtYXhfbGVuZ3RoIGxpbWl0IGNvdW50XHJcbiAgICAgIC8vTWF4TGVuZ3RoIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWxzIGNoYXJzIGxpbWl0IHNvIHRoYXQgbWluQ2hhcnNMaW1pdCB3b3VsZCBiZSA+PSAwXHJcbiAgICAgIGlmICh0aGlzLnRleHRCb3hGb3JtQ29udHJvbC52YWx1ZSAmJiB0aGlzLm9wdGlvbnMubWF4TGVuZ3RoICYmIHRoaXMubWluQ2hhcnNMaW1pdCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcnNDb3VudCA9IHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcnNDb3VudCA+IHRoaXMubWluQ2hhcnNMaW1pdCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmhhc0NoYXJzTGltaXRWYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJzQ291bnQgPT0gdGhpcy5vcHRpb25zLm1heExlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5jaGFyc0xpbWl0TXNnQ2xhc3MgPSAnZGFuZ2VyJztcclxuICAgICAgICAgIGVsc2UgdGhpcy5jaGFyc0xpbWl0TXNnQ2xhc3MgPSAnd2FybmluZyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0NoYXJzTGltaXRNc2cgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1heDogbnVtYmVyID0gdGhpcy5vcHRpb25zLm1heExlbmd0aDtcclxuICAgICAgICBsZXQgY3VycmVudDogbnVtYmVyID0gdGhpcy5jdXJyZW50Q2hhcnNDb3VudDtcclxuICAgICAgICBsZXQgbXNnOiBzdHJpbmcgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNYXhMZW5ndGhMaW1pdFdhcm5pbmdcIik7XHJcblxyXG4gICAgICAgIC8vIFJlcGxhY2UgcGxhY2Vob2xkZXJzIHdpdGggYWN0dWFsIHZhbHVlc1xyXG4gICAgICAgIHRoaXMubWF4TGltaXRXYXJuaW5nTXNnID0gbXNnLnJlcGxhY2UoXCIke21heH1cIiwgbWF4LnRvU3RyaW5nKCkpLnJlcGxhY2UoXCIke2N1cnJlbnR9XCIsIGN1cnJlbnQudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMudGV4dEJveEZvcm1Db250cm9sLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXMoaXNGb2N1czogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc1Nob3dXb3JkQ291bnQgPSBpc0ZvY3VzO1xyXG5cclxuICAgIC8vb25Gb2N1c1xyXG4gICAgaWYgKGlzRm9jdXMpIHtcclxuICAgICAgaWYgKHRoaXMuaGFzQ2hhcnNMaW1pdFZhbGlkYXRpb25FcnJvcilcclxuICAgICAgICAvL2NoZWNrIGlmIHRoZXJlIHdhcyBwcmV2aW91cyB2YWxpZGF0aW9uIGVycm9yXHJcbiAgICAgICAgdGhpcy5zaG93Q2hhcnNMaW1pdE1zZyA9IHRydWU7XHJcbiAgICB9IC8vb25Gb2N1c091dFxyXG4gICAgZWxzZSB0aGlzLnNob3dDaGFyc0xpbWl0TXNnID0gZmFsc2U7XHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgcmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5yZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24oXHJcbiAgICAgIHRoaXMudGV4dEJveEZvcm1Db250cm9sLFxyXG4gICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcyxcclxuICAgICAgdGhpcy5vcHRpb25zXHJcbiAgICApO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBhZGRSZXF1aXJlZFZhbGlkYXRpb24gPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LmFkZFJlcXVpcmVkVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICB0aGlzLm9wdGlvbnNcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICByZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkucmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICBjdXN0b21WYWxpZGF0aW9uXHJcbiAgICApO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBhZGRDdXN0b21WYWxpZGF0aW9uID0gKGN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuYWRkQ3VzdG9tVmFsaWRhdGlvbihcclxuICAgICAgdGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLFxyXG4gICAgICBjdXN0b21WYWxpZGF0aW9uXHJcbiAgICApO1xyXG4gIH07XHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBpc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5pc1ZhbGlkKHRoaXMudGV4dEJveEZvcm1Db250cm9sKTtcclxuICB9O1xyXG5cclxuICBvblRleHRCbHVyKCkge1xyXG4gICAgLy8gQ2hlY2sgcGFzc3dvcmQgY29tcGxleGl0eSBvbiBibHVyIGFzIHdlbGxcclxuICAgIGlmICh0aGlzLm9wdGlvbnMudHlwZSA9PSBJbnB1dFR5cGUuUGFzc3dvcmQgJiYgIXRoaXMub3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tQYXNzd29yZENvbXBsZXhpdHkodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUgfHwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25CbHVyLmVtaXQodGhpcy50ZXh0Qm94Rm9ybUNvbnRyb2wudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tQYXNzd29yZENvbXBsZXhpdHkocGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5oYXNOdW1iZXIgPSAvXFxkLy50ZXN0KHBhc3N3b3JkKTtcclxuICAgIHRoaXMuaGFzQ2FwaXRhbExldHRlciA9IC9bQS1aXS8udGVzdChwYXNzd29yZCk7XHJcbiAgICB0aGlzLmhhc1NtYWxsTGV0dGVyID0gL1thLXpdLy50ZXN0KHBhc3N3b3JkKTtcclxuICAgIHRoaXMuaGFzU3BlY2lhbExldHRlciA9IC9bIUAjJCVeJiooKSwuP1wiOnt9fDw+XS8udGVzdChwYXNzd29yZCk7XHJcbiAgICB0aGlzLmhhc01pbkxlbmd0aCA9IHBhc3N3b3JkLmxlbmd0aCA+PSB0aGlzLnBhc3N3b3JkTWluTGVuZ3RoO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBiYnNmLWNvbnRyb2wgYmJzZi10ZXh0Ym94XCIgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwib3B0aW9ucy52aWV3VHlwZSA9PSAxID8gJ2Jic2YtdmVydGljYWwnIDogJ2Jic2YtaG9yaXpvbnRhbCdcIj5cclxuICAgIDwhLS1sYWJlbC0tPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwiIW9wdGlvbnMuaGlkZUxhYmVsXCIgY2xhc3M9XCJiYnNmLWxhYmVsIHt7IG9wdGlvbnMubGFiZWxFeHRyYUNsYXNzZXMgfX1cIj5cclxuICAgICAge3sgb3B0aW9ucy5sYWJlbFZhbHVlIH19XHJcbiAgICAgIDwhLS1Bc3Rlcmlzay0tPlxyXG4gICAgICBAaWYgKCgob3B0aW9ucy5zaG93QXN0ZXJpc2sgJiYgb3B0aW9ucy5pc1JlcXVpcmVkKSB8fCBvcHRpb25zLmlzUmVxdWlyZWQpICYmICFvcHRpb25zLmlzUmVhZG9ubHkpIHtcclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8IS0tTWFza1BhdHRlcm4tLT5cclxuICAgIEBpZiAobWFza1BhdHRlcm4gIT0gbnVsbCAmJiBtYXNrUGF0dGVybiAhPSAnJyAmJiAhb3B0aW9ucy5pc1JlYWRvbmx5KSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXJcIiBbbmdDbGFzc109XCJvcHRpb25zLmVuYWJsZUNvcHlUb0NsaXBib2FyZCA/ICdwLTQwcHgnIDogJydcIj5cclxuICAgICAgPCEtLUljb24tLT5cclxuICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnMuaWNvbiAhPSBudWxsXCIgY2xhc3M9XCJzdmcgc3ZnLWljb24tZ3JleSBiYnNmLWljb25cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIm9wdGlvbnMuaWNvblBvc2l0aW9uID09IDEgPyAnYmJzZi1sZWZ0LWljb24nIDogJ2Jic2YtcmlnaHQtaWNvbidcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIm9wdGlvbnMuaWNvblwiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wge3sgb3B0aW9ucy5leHRyYUNsYXNzZXMgfX1cIiBbbWFza109XCJtYXNrUGF0dGVyblwiIHBsYWNlSG9sZGVyQ2hhcmFjdGVyPVwiIFwiXHJcbiAgICAgICAgW3Nob3dNYXNrVHlwZWRdPVwidHJ1ZVwiIFt2YWxpZGF0aW9uXT1cInRydWVcIiBbZGlyXT1cInRleHREaXJcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCJcclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ7eyBvcHRpb25zLm5hbWUgfX1cIiB0eXBlPVwie3sgZ2V0SW5wdXRUeXBlKG9wdGlvbnMudHlwZSkgfX1cIiBbKG5nTW9kZWwpXT1cIm9wdGlvbnMudmFsdWVcIlxyXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInRleHRCb3hGb3JtQ29udHJvbC5pbnZhbGlkICYmIHRleHRCb3hGb3JtQ29udHJvbC50b3VjaGVkXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7IG9wdGlvbnMucGxhY2Vob2xkZXIgfX1cIiBpZD1cInt7IG9wdGlvbnMubmFtZSB9fVwiIGF1dG9jb21wbGV0ZT1cInt7IG9wdGlvbnMuYXV0b0NvbXBsZXRlIH19XCJcclxuICAgICAgICAoY2hhbmdlKT1cInRyaW1Db250cm9sVmFsdWUoKVwiIChrZXl1cCk9XCJvblRleHRDaGFuZ2UoKVwiIFtyZWFkb25seV09XCJvcHRpb25zLmlzUmVhZG9ubHlcIlxyXG4gICAgICAgIChrZXlkb3duKT1cIndvcmRDb3VudEFycmF5ID4gb3B0aW9ucy5tYXhXb3JkQ291bnQgJiYgJGV2ZW50LmtleUNvZGUgIT0gOCA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiXHJcbiAgICAgICAgI3VzZXJJbnB1dCAoYmx1cik9XCJvblRleHRCbHVyKClcIiAvPlxyXG4gICAgICA8IS0tQ29weVRvQ2xpcGJvYXJkLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY29weS1jbGlwYm9hcmRcIiBuZ2JUb29sdGlwPVwiQ29waWVkIVwiICpuZ0lmPVwib3B0aW9ucy5lbmFibGVDb3B5VG9DbGlwYm9hcmRcIlxyXG4gICAgICAgIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKHVzZXJJbnB1dClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb3B5XCI+PC9pPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDwhLS1Ob01hc2tQYXR0ZXJuLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibWFza1BhdHRlcm4gPT0gbnVsbCB8fCAobWFza1BhdHRlcm4gPT0gJycgJiYgIW9wdGlvbnMuaXNSZWFkb25seSlcIiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCJcclxuICAgICAgW25nQ2xhc3NdPVwib3B0aW9ucy5lbmFibGVDb3B5VG9DbGlwYm9hcmQgPyAncC00MHB4JyA6ICcnXCI+XHJcbiAgICAgIDwhLS1JY29uLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdmcgc3ZnLWljb24tZ3JleSBiYnNmLWljb25cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIm9wdGlvbnMuaWNvblBvc2l0aW9uID09IDEgPyAnYmJzZi1sZWZ0LWljb24nIDogJ2Jic2YtcmlnaHQtaWNvbidcIiAqbmdJZj1cIm9wdGlvbnMuaWNvbiAhPSBudWxsXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCJvcHRpb25zLmljb25cIj48L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0taW5wdXQtLT5cclxuICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHt7IG9wdGlvbnMuZXh0cmFDbGFzc2VzIH19IFwiIFtkaXJdPVwidGV4dERpclwiIChmb2N1cyk9XCJvbkZvY3VzKHRydWUpXCJcclxuICAgICAgICAoZm9jdXNvdXQpPVwib25Gb2N1cyhmYWxzZSlcIiBtYXhsZW5ndGg9XCJ7eyBvcHRpb25zLm1heExlbmd0aCB9fVwiIG1pbmxlbmd0aD1cInt7IG9wdGlvbnMubWluTGVuZ3RoIH19XCJcclxuICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgb3B0aW9ucy5uYW1lIH19XCJcclxuICAgICAgICB0eXBlPVwie3sgZ2V0SW5wdXRUeXBlKG9wdGlvbnMudHlwZSkgfX1cIlxyXG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cInRleHRCb3hGb3JtQ29udHJvbC5pbnZhbGlkICYmIHRleHRCb3hGb3JtQ29udHJvbC50b3VjaGVkXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7IG9wdGlvbnMucGxhY2Vob2xkZXIgfX1cIiBpZD1cInt7IG9wdGlvbnMubmFtZSB9fVwiIGF1dG9jb21wbGV0ZT1cInt7IG9wdGlvbnMuYXV0b0NvbXBsZXRlIH19XCJcclxuICAgICAgICAoY2hhbmdlKT1cInRyaW1Db250cm9sVmFsdWUoKVwiIChrZXl1cCk9XCJvblRleHRDaGFuZ2UoKVwiIFsobmdNb2RlbCldPVwib3B0aW9ucy52YWx1ZVwiXHJcbiAgICAgICAgKGtleWRvd24pPVwid29yZENvdW50QXJyYXkgPiBvcHRpb25zLm1heFdvcmRDb3VudCAmJiAkZXZlbnQua2V5Q29kZSAhPSA4ID8gJGV2ZW50LnByZXZlbnREZWZhdWx0KCkgOiBudWxsXCJcclxuICAgICAgICBbcmVhZG9ubHldPVwib3B0aW9ucy5pc1JlYWRvbmx5XCIgI3VzZXJJbnB1dCAoYmx1cik9XCJvblRleHRCbHVyKClcIiAvPlxyXG4gICAgICA8IS0tQ29weVRvQ2xpcGJvYXJkLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY29weS1jbGlwYm9hcmRcIiBuZ2JUb29sdGlwPVwiQ29waWVkIVwiIHRyaWdnZXJzPVwiY2xpY2s6Ymx1clwiICpuZ0lmPVwib3B0aW9ucy5lbmFibGVDb3B5VG9DbGlwYm9hcmRcIlxyXG4gICAgICAgIChjbGljayk9XCJjb3B5SW5wdXRNZXNzYWdlKHVzZXJJbnB1dClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb3B5XCI+PC9pPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gcmVhZG9ubHkgLS0+XHJcbiAgICBAaWYgKG9wdGlvbnMuaXNSZWFkb25seSkge1xyXG4gICAgPGRpdj5cclxuICAgICAgPGEgKm5nSWY9XCJvcHRpb25zLnR5cGUgPT0gaW5wdXRUeXBlLkVtYWlsXCIgaHJlZj1cIm1haWx0bzoge3sgb3B0aW9ucy52YWx1ZSB9fVwiPnt7IG9wdGlvbnMudmFsdWUgfX08L2E+XHJcbiAgICAgIDxhICpuZ0lmPVwib3B0aW9ucy50eXBlID09IGlucHV0VHlwZS5VUkxcIiBocmVmPVwie3sgb3B0aW9ucy52YWx1ZSB9fVwiIHRhcmdldD1cIl9ibGFua1wiPnt7IG9wdGlvbnMudmFsdWUgfX08L2E+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9ucy50eXBlICE9IGlucHV0VHlwZS5VUkwgJiYgb3B0aW9ucy50eXBlICE9IGlucHV0VHlwZS5FbWFpbFwiXHJcbiAgICAgICAgY2xhc3M9XCJyZWFkb25seS12aWV3XCI+e3sgb3B0aW9ucy52YWx1ZSB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzdWJ0ZXh0LWNvbnRhaW5lclwiPlxyXG4gICAgPCEtLXdvcmRDb3VudC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2Ytd29yZC1jb3VudFwiICpuZ0lmPVwib3B0aW9ucy5tYXhXb3JkQ291bnQgPiAwICYmIGlzU2hvd1dvcmRDb3VudFwiPlxyXG4gICAgICB7eyB3b3JkQ291bnQgfX0ve3sgb3B0aW9ucy5tYXhXb3JkQ291bnQgfX0gV29yZHM8L2Rpdj5cclxuICAgIDwhLS0gQ2hhcnNMaW1pdE1zZy0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtY2hhcmFjdGVyLWNvdW50XCIgKm5nSWY9XCJzaG93Q2hhcnNMaW1pdE1zZ1wiXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2JhZGdlLWxpZ2h0LXdhcm5pbmcnOiBjaGFyc0xpbWl0TXNnQ2xhc3MgPT09ICd3YXJuaW5nJywgJ2JhZGdlLWxpZ2h0LWRhbmdlcic6IGNoYXJzTGltaXRNc2dDbGFzcyA9PT0gJ2RhbmdlcicgfVwiPlxyXG4gICAgICB7eyBtYXhMaW1pdFdhcm5pbmdNc2cgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBQYXNzd29yZCBEaXNjbGFpbWVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtcGFzc3dvcmQtZGlzY2xhaW1lclwiXHJcbiAgICAgICpuZ0lmPVwib3B0aW9ucy50eXBlID09IGlucHV0VHlwZS5QYXNzd29yZCAmJiAhb3B0aW9ucy5yZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uICYmICFvcHRpb25zLmlzUmVhZG9ubHkgJiYgb3B0aW9ucy5zaG93UGFzc3dvcmRSZXF1aXJlbWVudHNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLXJlcXVpcmVtZW50c1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXF1aXJlbWVudC10aXRsZVwiPnt7IHBhc3N3b3JkUmVxdWlyZW1lbnRzVGl0bGUgfX08L2Rpdj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJyZXF1aXJlbWVudHMtbGlzdFwiPlxyXG4gICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsncmVxdWlyZW1lbnQtbWV0JzogaGFzTnVtYmVyLCAncmVxdWlyZW1lbnQtbm90LW1ldCc6ICFoYXNOdW1iZXJ9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwiaGFzTnVtYmVyID8gJ2ZhLWNoZWNrIHRleHQtc3VjY2VzcycgOiAnZmEtdGltZXMgdGV4dC1kYW5nZXInXCI+PC9pPlxyXG4gICAgICAgICAgICB7eyBwYXNzd29yZENvbXBsZXhpdHlIYXNOdW1iZXIgfX1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieydyZXF1aXJlbWVudC1tZXQnOiBoYXNDYXBpdGFsTGV0dGVyLCAncmVxdWlyZW1lbnQtbm90LW1ldCc6ICFoYXNDYXBpdGFsTGV0dGVyfVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhc1wiIFtuZ0NsYXNzXT1cImhhc0NhcGl0YWxMZXR0ZXIgPyAnZmEtY2hlY2sgdGV4dC1zdWNjZXNzJyA6ICdmYS10aW1lcyB0ZXh0LWRhbmdlcidcIj48L2k+XHJcbiAgICAgICAgICAgIHt7IHBhc3N3b3JkQ29tcGxleGl0eUhhc0NhcGl0YWxMZXR0ZXIgfX1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwieydyZXF1aXJlbWVudC1tZXQnOiBoYXNTbWFsbExldHRlciwgJ3JlcXVpcmVtZW50LW5vdC1tZXQnOiAhaGFzU21hbGxMZXR0ZXJ9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwiaGFzU21hbGxMZXR0ZXIgPyAnZmEtY2hlY2sgdGV4dC1zdWNjZXNzJyA6ICdmYS10aW1lcyB0ZXh0LWRhbmdlcidcIj48L2k+XHJcbiAgICAgICAgICAgIHt7IHBhc3N3b3JkQ29tcGxleGl0eUhhc1NtYWxsTGV0dGVyIH19XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsncmVxdWlyZW1lbnQtbWV0JzogaGFzU3BlY2lhbExldHRlciwgJ3JlcXVpcmVtZW50LW5vdC1tZXQnOiAhaGFzU3BlY2lhbExldHRlcn1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXNcIiBbbmdDbGFzc109XCJoYXNTcGVjaWFsTGV0dGVyID8gJ2ZhLWNoZWNrIHRleHQtc3VjY2VzcycgOiAnZmEtdGltZXMgdGV4dC1kYW5nZXInXCI+PC9pPlxyXG4gICAgICAgICAgICB7eyBwYXNzd29yZENvbXBsZXhpdHlIYXNTcGVjaWFsTGV0dGVyIH19XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgPGxpIFtuZ0NsYXNzXT1cInsncmVxdWlyZW1lbnQtbWV0JzogaGFzTWluTGVuZ3RoLCAncmVxdWlyZW1lbnQtbm90LW1ldCc6ICFoYXNNaW5MZW5ndGh9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzXCIgW25nQ2xhc3NdPVwiaGFzTWluTGVuZ3RoID8gJ2ZhLWNoZWNrIHRleHQtc3VjY2VzcycgOiAnZmEtdGltZXMgdGV4dC1kYW5nZXInXCI+PC9pPlxyXG4gICAgICAgICAgICB7eyBtaW5MZW5ndGhSZXF1aXJlbWVudCB9fVxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBMYWJlbERlc2NyaXB0aW9uLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIiAqbmdJZj1cIm9wdGlvbnMubGFiZWxEZXNjcmlwdGlvbiAhPSBudWxsXCI+e3sgb3B0aW9ucy5sYWJlbERlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgICA8IS0tIHJlcXVpcmVkVGV4dC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiIFtkaXJdPVwidGV4dERpclwiICpuZ0lmPVwidGV4dEJveEZvcm1Db250cm9sLmludmFsaWQgJiYgdGV4dEJveEZvcm1Db250cm9sLnRvdWNoZWRcIj5cclxuICAgICAge3sgZ2V0RXJyb3JWYWxpZGF0aW9uKHRleHRCb3hGb3JtQ29udHJvbC5lcnJvcnMgfCBrZXl2YWx1ZSkgfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICBAaWYgKChncm91cC52YWxpZCAmJiBncm91cC5kaXJ0eSAmJiBncm91cC50b3VjaGVkKSB8fCAoZ3JvdXAudW50b3VjaGVkICYmIGdyb3VwLmludmFsaWQgJiYgZ3JvdXAuZGlydHkpKSB7XHJcbiAgPGRpdj57eyByZXNldEVycm9yKCkgfX08L2Rpdj5cclxuICB9XHJcbjwvZGl2PiJdfQ==
@@ -129,4 +129,5 @@ export * from './lib/Shared/Enums/LanguageValidation';
129
129
  export * from './lib/Shared/Enums/TagInputView';
130
130
  export * from './lib/Shared/Enums/map-enums';
131
131
  export * from './lib/Shared/Enums/Markdown';
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxlQUFlO0FBQ2YsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCwyRUFBMkU7QUFFM0UscUJBQXFCO0FBQ3JCLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLG9FQUFvRSxDQUFDO0FBQ25GLGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxnREFBZ0QsQ0FBQztBQUMvRCxjQUFjLHdFQUF3RSxDQUFDO0FBQ3ZGLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxvRUFBb0UsQ0FBQztBQUNuRixjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYyxrRUFBa0UsQ0FBQztBQUNqRixjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsaUVBQWlFLENBQUM7QUFFaEYsY0FBYyxpRkFBaUYsQ0FBQztBQUNoRyxjQUFjLDJFQUEyRSxDQUFDO0FBQzFGLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxzRUFBc0UsQ0FBQztBQUNyRixjQUFjLDRDQUE0QyxDQUFDO0FB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QztBQUN4QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgYm5zaWdodHMtbGlicmFyeVxyXG4gKi9cclxuLy9leHBvcnQgbW9kdWxlXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL2Jic2YtY29udHJvbHMubW9kdWxlJztcclxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvYXJlYXMvYWRtaW4tcGFuZWwvbGF5b3V0LW1vZHVsZXMvYWRtaW5QYWdlLm1vZHVsZSc7XHJcblxyXG4vLyAvL2V4cG9ydCBjb21wb25lbnRcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvVGV4dEJveC9UZXh0Qm94LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL0RhdGVUaW1lUGlja2VyL0RhdGVUaW1lUGlja2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL0ZpbGVVcGxvYWQvRmlsZVVwbG9hZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9NdWx0aUxpbmd1YWxUZXh0Qm94L011bHRpTGluZ3VhbFRleHRCb3guY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvVGV4dEFyZWEvVGV4dEFyZWEuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvTXVsdGlMaW5ndWFsVGV4dEFyZWEvTXVsdGlMaW5ndWFsVGV4dEFyZWEuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvQ2hlY2tCb3gvQ2hlY2tCb3guY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvRHJvcGRvd25MaXN0L0Ryb3Bkb3duTGlzdC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9QaG9uZS9QaG9uZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9Ub2dnbGVzbGlkZS9Ub2dnbGVzbGlkZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9IdG1sRWRpdG9yL0h0bWxFZGl0b3IuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvTXVsdGlMaW5ndWFsSHRtbEVkaXRvci9NdWx0aUxpbmd1YWxIdG1sRWRpdG9yLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL0ltYWdlVXBsb2FkL0ltYWdlVXBsb2FkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL1Byb2ZpbGVJbWFnZVVwbG9hZGVyL1Byb2ZpbGVJbWFnZVVwbG9hZGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL0NhbGVuZGFyL0NhbGVuZGFyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL01hcEF1dG9Db21wbGV0ZS9NYXBBdXRvQ29tcGxldGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvQXV0b2NvbXBsZXRlVGV4dEJveC9BdXRvY29tcGxldGVUZXh0Qm94LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL1RhZ3NJbnB1dC9UYWdzSW5wdXQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvUGFnaW5nL0p3UGFnaW5hdGlvbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9QYWdpbmcvUGFnaW5nLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL1JhZGlvQnV0dG9uL1JhZGlvQnV0dG9uLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL0Zvcm0vRm9ybS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9SZXBlYXRlci9yZXBlYXRlci9yZXBlYXRlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9SZXBlYXRlci9yZXBlYXRlci10YWJsZS9yZXBlYXRlci10YWJsZS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvUmVwZWF0ZXIvcmVwZWF0ZXItZmllbGQtYnVpbGRlci9yZXBlYXRlci1maWVsZC1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL1JlcGVhdGVyL3JlcGVhdGVyLWl0ZW0tZmllbGQvcmVwZWF0ZXItaXRlbS1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9SZWNhcHRjaGEvUmVjYXB0Y2hhLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL3BhZ2UtaGVhZGVyLWNvbXBvbmVudC9wYWdlLWhlYWRlci1jb21wb25lbnQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0NvbXBvbmVudHMvYXBwLWJhc2UtY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvTWFya2Rvd25FZGl0b3IvbWFya2Rvd24tZWRpdG9yLmNvbXBvbmVudCc7XHJcblxyXG5cclxuLy9leHBvcnQgc2VydmljZXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL3NlcnZpY2VzL3ZhbGlkYXRpb25FcnJvck1hc3NhZ2Uuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9zZXJ2aWNlcy9PblBhZ2luZ0ZpbHRlcnNDaGFuZ2Uuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9jb25maWcvZW52aXJvbm1lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvc2VydmljZXMvR2xvYmFsU2V0dGluZ3Muc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9zZXJ2aWNlcy9yZW5kZXItY29tcG9uZW50LXNlcnZpY2Uuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9kZWZhdWx0X2ludGwnO1xyXG5cclxuXHJcblxyXG4vL2V4cG9ydCBNb2RlbHNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9Db250cm9sT3B0aW9uc0Jhc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1JlY2FwdGNoYU9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1JlY2FwdGNoYSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvTXVsdGlsaW5ndWFsQ29udHJvbE9wdGlvbnNCYXNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9DdXN0b21WYWxpZGF0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9EYXRlUGlja2VyT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvVGV4dEJveE9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0ZpbGVVcGxvYWRPcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9GaWxlVXBsb2FkTW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL011bHRpcGxlRmlsZVVwbG9hZE1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9NdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvUmFuZ2VOdW1iZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0VuZ2xpc2hBcmFiaWNEVE8nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0F0dHJpYnV0ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvVGV4dEFyZWFPcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9NdWx0aUxpbmd1YWxUZXh0QXJlYU9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0NoZWNrQm94T3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvRHJvcGRvd25MaXN0SXRlbSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvRHJvcGRvd25PcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9QaG9uZU9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1RvZ2dsZVNsaWRlT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvSHRtbEVkaXRvck9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL011bHRpTGluZ3VhbEh0bWxFZGl0b3JPcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9GaWxlRFRPJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9JbWFnZVVwbG9hZE9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1Byb2ZpbGVJbWFnZVVwbG9hZE9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1Byb2ZpbGVQaWN0dXJlRFRPJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9TYXZlRFRPJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9DYW5jZWxEVE8nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0VkaXRQZXJzb25hbEltYWdlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9VcGxvYWRQZXJzb25hbEltYWdlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9DYWxlbmRhck9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0NhbGVuZGFyRXZlbnREVE8nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL01hcEF1dG9Db21wbGV0ZU9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL01hcEF1dG9jb21wbGV0ZURUTyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvQXV0b2NvbXBsZXRlRFRPJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9BdXRvY29tcGxldGVPcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9UYWdzSW5wdXREVE8nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1RhZ3NJbnB1dE9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0ZpbHRlckl0ZW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1BhZ2luZ0RUTyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvUGFnaW5nT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvUmFkaW9CdXR0b25PcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9SYWRpb0J1dHRvbkl0ZW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0Zvcm1PcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9Db25maXJtYXRpb25Nb2RhbE9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1JlcGVhdGVyRmllbGQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1JlcGVhdGVyT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvcGFnZS1oZWFkZXItb3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvZmlsdGVyLW9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL2NvbnRyb2wtZmlsdGVyLUl0ZW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL2JyZWFkLWNydW1iJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0RpcmVjdGl2ZXMvdGVtcGxhdGUtbmFtZS5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRGlyZWN0aXZlcy9hcHBQcmV2ZW50RG91YmxlQ2xpY2suZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL1BpcGVzL2Jic2YtZGF0ZS10aW1lLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvUGlwZXMvYmJzZi1kYXRlLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL01hcmtkb3duRWRpdG9yT3B0aW9ucyc7XHJcblxyXG5cclxuLy9leHBvcnQgRW51bXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL0lucHV0VHlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9tZW51LWxpc3QtZW51bSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9Db250cm9sTGF5b3V0JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL0ZvcmNlRGlyZWN0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL1BpY2tlclR5cGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvU3RhcnRWaWV3JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL1NlbGVjdE1vZGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvQ291bnRyaWVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL0ZvbnRTaXplJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL0luc2VydCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9NaXNjJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL1BhcmEnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvU3R5bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvRmlsZVR5cGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvSW1hZ2VUeXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL0xhbmd1YWdlTW9kZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9DYWxlbmRhclZpZXcnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvRmlsdGVyVHlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9JY29uUG9zaXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvUGFnaW5nQWN0aW9uTW9kZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9TdHlsZUNvbmZpcm1hdGlvbk1vZGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvRW51bXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvTGFuZ3VhZ2VWYWxpZGF0aW9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL1RhZ0lucHV0Vmlldyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9tYXAtZW51bXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvTWFya2Rvd24nXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuIl19
132
+ export * from './lib/Shared/Enums/ToolbarButtons';
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxlQUFlO0FBQ2YsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCwyRUFBMkU7QUFFM0UscUJBQXFCO0FBQ3JCLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLG9FQUFvRSxDQUFDO0FBQ25GLGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxnREFBZ0QsQ0FBQztBQUMvRCxjQUFjLHdFQUF3RSxDQUFDO0FBQ3ZGLGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxvRUFBb0UsQ0FBQztBQUNuRixjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYyxrRUFBa0UsQ0FBQztBQUNqRixjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsaUVBQWlFLENBQUM7QUFFaEYsY0FBYyxpRkFBaUYsQ0FBQztBQUNoRyxjQUFjLDJFQUEyRSxDQUFDO0FBQzFGLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxzRUFBc0UsQ0FBQztBQUNyRixjQUFjLDRDQUE0QyxDQUFDO0FB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QztBQUN4QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBibnNpZ2h0cy1saWJyYXJ5XHJcbiAqL1xyXG4vL2V4cG9ydCBtb2R1bGVcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvYmJzZi1jb250cm9scy5tb2R1bGUnO1xyXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9hcmVhcy9hZG1pbi1wYW5lbC9sYXlvdXQtbW9kdWxlcy9hZG1pblBhZ2UubW9kdWxlJztcclxuXHJcbi8vIC8vZXhwb3J0IGNvbXBvbmVudFxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9UZXh0Qm94L1RleHRCb3guY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvRGF0ZVRpbWVQaWNrZXIvRGF0ZVRpbWVQaWNrZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvRmlsZVVwbG9hZC9GaWxlVXBsb2FkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL011bHRpTGluZ3VhbFRleHRCb3gvTXVsdGlMaW5ndWFsVGV4dEJveC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9UZXh0QXJlYS9UZXh0QXJlYS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9NdWx0aUxpbmd1YWxUZXh0QXJlYS9NdWx0aUxpbmd1YWxUZXh0QXJlYS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9DaGVja0JveC9DaGVja0JveC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9Ecm9wZG93bkxpc3QvRHJvcGRvd25MaXN0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL1Bob25lL1Bob25lLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL1RvZ2dsZXNsaWRlL1RvZ2dsZXNsaWRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL0h0bWxFZGl0b3IvSHRtbEVkaXRvci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9NdWx0aUxpbmd1YWxIdG1sRWRpdG9yL011bHRpTGluZ3VhbEh0bWxFZGl0b3IuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvSW1hZ2VVcGxvYWQvSW1hZ2VVcGxvYWQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvUHJvZmlsZUltYWdlVXBsb2FkZXIvUHJvZmlsZUltYWdlVXBsb2FkZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvQ2FsZW5kYXIvQ2FsZW5kYXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvTWFwQXV0b0NvbXBsZXRlL01hcEF1dG9Db21wbGV0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9BdXRvY29tcGxldGVUZXh0Qm94L0F1dG9jb21wbGV0ZVRleHRCb3guY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvVGFnc0lucHV0L1RhZ3NJbnB1dC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9QYWdpbmcvSndQYWdpbmF0aW9uLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL1BhZ2luZy9QYWdpbmcuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvUmFkaW9CdXR0b24vUmFkaW9CdXR0b24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvRm9ybS9Gb3JtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL1JlcGVhdGVyL3JlcGVhdGVyL3JlcGVhdGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL1JlcGVhdGVyL3JlcGVhdGVyLXRhYmxlL3JlcGVhdGVyLXRhYmxlLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9SZXBlYXRlci9yZXBlYXRlci1maWVsZC1idWlsZGVyL3JlcGVhdGVyLWZpZWxkLWJ1aWxkZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvUmVwZWF0ZXIvcmVwZWF0ZXItaXRlbS1maWVsZC9yZXBlYXRlci1pdGVtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2xzL1JlY2FwdGNoYS9SZWNhcHRjaGEuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udHJvbHMvcGFnZS1oZWFkZXItY29tcG9uZW50L3BhZ2UtaGVhZGVyLWNvbXBvbmVudC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvQ29tcG9uZW50cy9hcHAtYmFzZS1jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9scy9NYXJrZG93bkVkaXRvci9tYXJrZG93bi1lZGl0b3IuY29tcG9uZW50JztcclxuXHJcblxyXG4vL2V4cG9ydCBzZXJ2aWNlc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvc2VydmljZXMvdmFsaWRhdGlvbkVycm9yTWFzc2FnZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL3NlcnZpY2VzL0NvbnRyb2xVdGlsaXR5JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL3NlcnZpY2VzL09uUGFnaW5nRmlsdGVyc0NoYW5nZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL2NvbmZpZy9lbnZpcm9ubWVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9zZXJ2aWNlcy9HbG9iYWxTZXR0aW5ncy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL3NlcnZpY2VzL3JlbmRlci1jb21wb25lbnQtc2VydmljZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL2RlZmF1bHRfaW50bCc7XHJcblxyXG5cclxuXHJcbi8vZXhwb3J0IE1vZGVsc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0NvbnRyb2xPcHRpb25zQmFzZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvUmVjYXB0Y2hhT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvUmVjYXB0Y2hhJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9NdWx0aWxpbmd1YWxDb250cm9sT3B0aW9uc0Jhc2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0N1c3RvbVZhbGlkYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0RhdGVQaWNrZXJPcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9UZXh0Qm94T3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvRmlsZVVwbG9hZE9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0ZpbGVVcGxvYWRNb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvTXVsdGlwbGVGaWxlVXBsb2FkTW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL011bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9SYW5nZU51bWJlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvRW5nbGlzaEFyYWJpY0RUTyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvQXR0cmlidXRlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9UZXh0QXJlYU9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL011bHRpTGluZ3VhbFRleHRBcmVhT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvQ2hlY2tCb3hPcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9Ecm9wZG93bkxpc3RJdGVtJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9Ecm9wZG93bk9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1Bob25lT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvVG9nZ2xlU2xpZGVPcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9IdG1sRWRpdG9yT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvTXVsdGlMaW5ndWFsSHRtbEVkaXRvck9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0ZpbGVEVE8nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0ltYWdlVXBsb2FkT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvUHJvZmlsZVBpY3R1cmVEVE8nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1NhdmVEVE8nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0NhbmNlbERUTyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvRWRpdFBlcnNvbmFsSW1hZ2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1VwbG9hZFBlcnNvbmFsSW1hZ2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0NhbGVuZGFyT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvQ2FsZW5kYXJFdmVudERUTyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvTWFwQXV0b0NvbXBsZXRlT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvTWFwQXV0b2NvbXBsZXRlRFRPJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9BdXRvY29tcGxldGVEVE8nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0F1dG9jb21wbGV0ZU9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1RhZ3NJbnB1dERUTyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvVGFnc0lucHV0T3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvRmlsdGVySXRlbSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvUGFnaW5nRFRPJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9QYWdpbmdPcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9SYWRpb0J1dHRvbk9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL1JhZGlvQnV0dG9uSXRlbSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvRm9ybU9wdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvTW9kZWxzL0NvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvUmVwZWF0ZXJGaWVsZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvUmVwZWF0ZXJPcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9wYWdlLWhlYWRlci1vcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL01vZGVscy9maWx0ZXItb3B0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvY29udHJvbC1maWx0ZXItSXRlbSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvYnJlYWQtY3J1bWInO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRGlyZWN0aXZlcy90ZW1wbGF0ZS1uYW1lLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9EaXJlY3RpdmVzL2FwcFByZXZlbnREb3VibGVDbGljay5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvUGlwZXMvYmJzZi1kYXRlLXRpbWUucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9QaXBlcy9iYnNmLWRhdGUucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9Nb2RlbHMvTWFya2Rvd25FZGl0b3JPcHRpb25zJztcclxuXHJcblxyXG4vL2V4cG9ydCBFbnVtc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvSW5wdXRUeXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL21lbnUtbGlzdC1lbnVtJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL0NvbnRyb2xMYXlvdXQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvRm9yY2VEaXJlY3Rpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvUGlja2VyVHlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9TdGFydFZpZXcnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvU2VsZWN0TW9kZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9Db3VudHJpZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvRm9udFNpemUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvSW5zZXJ0JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL01pc2MnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvUGFyYSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9TdHlsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9GaWxlVHlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9JbWFnZVR5cGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvTGFuZ3VhZ2VNb2RlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL0NhbGVuZGFyVmlldyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9GaWx0ZXJUeXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL0ljb25Qb3NpdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9QYWdpbmdBY3Rpb25Nb2RlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL1N0eWxlQ29uZmlybWF0aW9uTW9kZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9FbnVtcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9MYW5ndWFnZVZhbGlkYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9TaGFyZWQvRW51bXMvVGFnSW5wdXRWaWV3JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvU2hhcmVkL0VudW1zL21hcC1lbnVtcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9NYXJrZG93bic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL1NoYXJlZC9FbnVtcy9Ub29sYmFyQnV0dG9ucyc7XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuIl19