@energycap/components 0.39.16-ECAP-23123-Help-Popover-On-Controls.20240513-1123 → 0.39.16-ECAP-23123-Help-Popover-On-Controls.20240513-1405

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.
@@ -340,10 +340,10 @@ export class NumericboxComponent extends FormControlBase {
340
340
  }
341
341
  }
342
342
  NumericboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NumericboxComponent, deps: [{ token: i1.ValidationMessageService }, { token: i2.FormGroupHelper }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
343
- NumericboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NumericboxComponent, selector: "ec-numericbox", inputs: { placeholder: "placeholder", decimals: "decimals", showPrecision: "showPrecision", maxPrecisionDigits: "maxPrecisionDigits", max: "max", min: "min", leftUnits: "leftUnits", rightUnits: "rightUnits", autoUpdateFormModel: "autoUpdateFormModel" }, viewQueries: [{ propertyName: "textboxEl", first: true, predicate: TextboxComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "textboxInput", first: true, predicate: ["textbox"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"control control-label-{{labelPosition}}\"\r\n [class.invalid]=\"formModel?.invalid && (formModel?.touched)\">\r\n <label *ngIf=\"label && !helpPopover\"\r\n ngPreserveWhitespaces>\r\n <span>{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length && formModel?.touched && formModel?.invalid\">{{validationErrors |\r\n translate}}</span>\r\n </label>\r\n\r\n <div *ngIf=\"label && helpPopover\"\r\n class=\"d-flex align-items-center\">\r\n <label ngPreserveWhitespaces>\r\n <span>{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length && formModel?.touched && formModel?.invalid\">{{validationErrors\r\n |\r\n translate}}</span>\r\n </label>\r\n\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n class=\"my-n2 mx-n1\"\r\n text=\"{{helpPopover | translate}}\">\r\n </ec-help-popover>\r\n </div>\r\n\r\n <!-- Setting the maxlength to 13 to combat the user from entering too large of a number\r\n for javascript to support. If the user enters all 13 characters as numbers and we have showPrecision set, adding the\r\n decimal and the empty zero characters will get them in a situation where to edit it they must remove characters\r\n as we would push them past the limit -->\r\n <ec-textbox [id]=\"id\"\r\n #textbox\r\n class=\"control-input mb-0\"\r\n [placeholder]=\"placeholder\"\r\n [maxlength]=\"maxPrecisionDigits ? maxPrecisionDigits + 3 : 13\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"textboxFormModel\"\r\n [required]=\"required\"\r\n [tabindex]=\"tabindex\"\r\n [readonly]=\"readonly\"\r\n [tooltip]=\"tooltip\"\r\n (focusout)=\"onFocusOut()\">\r\n </ec-textbox>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}ec-textbox ::ng-deep .input-wrapper{position:relative}ec-textbox ::ng-deep input{text-align:right}ec-textbox ::ng-deep input:required.is-empty:not(:disabled)~.units-left{left:1.25rem}ec-textbox ::ng-deep input.ng-invalid.ng-touched~.units-left{left:1.25rem}ec-textbox ::ng-deep .control:not(.is-readonly) input:disabled~.units{color:var(--ec-form-control-color-disabled);opacity:.65}ec-textbox ::ng-deep .units{display:block;position:absolute;top:0;height:2rem;line-height:1.25rem;padding:.375rem .25rem;z-index:2}ec-textbox ::ng-deep .units.units-right{right:0;padding-right:.5rem}ec-textbox ::ng-deep .units.units-left{left:0;padding-left:.5rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}.control.invalid ec-textbox ::ng-deep input.ng-invalid:focus,.control.invalid ec-textbox ::ng-deep input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.units-left,.control.invalid ec-textbox ::ng-deep input.ng-valid~.units-left{left:1.25rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-required,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-required{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.TextboxComponent, selector: "ec-textbox", inputs: ["autocomplete", "type", "placeholder", "maxlength", "minlength", "rows", "selectOnAutofocus", "upperCase"] }, { kind: "component", type: i5.HelpPopoverComponent, selector: "ec-help-popover", inputs: ["id", "text", "contentPosition", "maxWidth"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
343
+ NumericboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: NumericboxComponent, selector: "ec-numericbox", inputs: { placeholder: "placeholder", decimals: "decimals", showPrecision: "showPrecision", maxPrecisionDigits: "maxPrecisionDigits", max: "max", min: "min", leftUnits: "leftUnits", rightUnits: "rightUnits", autoUpdateFormModel: "autoUpdateFormModel" }, viewQueries: [{ propertyName: "textboxEl", first: true, predicate: TextboxComponent, descendants: true, read: ElementRef, static: true }, { propertyName: "textboxInput", first: true, predicate: ["textbox"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"control control-label-{{labelPosition}}\"\r\n [class.invalid]=\"formModel?.invalid && (formModel?.touched)\">\r\n <ng-container *ngIf=\"label && !helpPopover\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n </ng-container>\r\n\r\n <div *ngIf=\"label && helpPopover\"\r\n class=\"d-flex align-items-center\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n class=\"my-n2 mx-n1\"\r\n text=\"{{helpPopover | translate}}\">\r\n </ec-help-popover>\r\n </div>\r\n\r\n <ng-template #sharedLabel>\r\n <label ngPreserveWhitespaces>\r\n <span *ngIf=\"label\">{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length && formModel?.touched && formModel?.invalid\">{{validationErrors\r\n |\r\n translate}}</span>\r\n </label>\r\n </ng-template>\r\n\r\n <!-- Setting the maxlength to 13 to combat the user from entering too large of a number\r\n for javascript to support. If the user enters all 13 characters as numbers and we have showPrecision set, adding the\r\n decimal and the empty zero characters will get them in a situation where to edit it they must remove characters\r\n as we would push them past the limit -->\r\n <ec-textbox [id]=\"id\"\r\n #textbox\r\n class=\"control-input mb-0\"\r\n [placeholder]=\"placeholder\"\r\n [maxlength]=\"maxPrecisionDigits ? maxPrecisionDigits + 3 : 13\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"textboxFormModel\"\r\n [required]=\"required\"\r\n [tabindex]=\"tabindex\"\r\n [readonly]=\"readonly\"\r\n [tooltip]=\"tooltip\"\r\n (focusout)=\"onFocusOut()\">\r\n </ec-textbox>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}ec-textbox ::ng-deep .input-wrapper{position:relative}ec-textbox ::ng-deep input{text-align:right}ec-textbox ::ng-deep input:required.is-empty:not(:disabled)~.units-left{left:1.25rem}ec-textbox ::ng-deep input.ng-invalid.ng-touched~.units-left{left:1.25rem}ec-textbox ::ng-deep .control:not(.is-readonly) input:disabled~.units{color:var(--ec-form-control-color-disabled);opacity:.65}ec-textbox ::ng-deep .units{display:block;position:absolute;top:0;height:2rem;line-height:1.25rem;padding:.375rem .25rem;z-index:2}ec-textbox ::ng-deep .units.units-right{right:0;padding-right:.5rem}ec-textbox ::ng-deep .units.units-left{left:0;padding-left:.5rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}.control.invalid ec-textbox ::ng-deep input.ng-invalid:focus,.control.invalid ec-textbox ::ng-deep input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.units-left,.control.invalid ec-textbox ::ng-deep input.ng-valid~.units-left{left:1.25rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-required,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-required{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.TextboxComponent, selector: "ec-textbox", inputs: ["autocomplete", "type", "placeholder", "maxlength", "minlength", "rows", "selectOnAutofocus", "upperCase"] }, { kind: "component", type: i5.HelpPopoverComponent, selector: "ec-help-popover", inputs: ["id", "text", "contentPosition", "maxWidth"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
344
344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NumericboxComponent, decorators: [{
345
345
  type: Component,
346
- args: [{ selector: 'ec-numericbox', template: "<div class=\"control control-label-{{labelPosition}}\"\r\n [class.invalid]=\"formModel?.invalid && (formModel?.touched)\">\r\n <label *ngIf=\"label && !helpPopover\"\r\n ngPreserveWhitespaces>\r\n <span>{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length && formModel?.touched && formModel?.invalid\">{{validationErrors |\r\n translate}}</span>\r\n </label>\r\n\r\n <div *ngIf=\"label && helpPopover\"\r\n class=\"d-flex align-items-center\">\r\n <label ngPreserveWhitespaces>\r\n <span>{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length && formModel?.touched && formModel?.invalid\">{{validationErrors\r\n |\r\n translate}}</span>\r\n </label>\r\n\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n class=\"my-n2 mx-n1\"\r\n text=\"{{helpPopover | translate}}\">\r\n </ec-help-popover>\r\n </div>\r\n\r\n <!-- Setting the maxlength to 13 to combat the user from entering too large of a number\r\n for javascript to support. If the user enters all 13 characters as numbers and we have showPrecision set, adding the\r\n decimal and the empty zero characters will get them in a situation where to edit it they must remove characters\r\n as we would push them past the limit -->\r\n <ec-textbox [id]=\"id\"\r\n #textbox\r\n class=\"control-input mb-0\"\r\n [placeholder]=\"placeholder\"\r\n [maxlength]=\"maxPrecisionDigits ? maxPrecisionDigits + 3 : 13\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"textboxFormModel\"\r\n [required]=\"required\"\r\n [tabindex]=\"tabindex\"\r\n [readonly]=\"readonly\"\r\n [tooltip]=\"tooltip\"\r\n (focusout)=\"onFocusOut()\">\r\n </ec-textbox>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}ec-textbox ::ng-deep .input-wrapper{position:relative}ec-textbox ::ng-deep input{text-align:right}ec-textbox ::ng-deep input:required.is-empty:not(:disabled)~.units-left{left:1.25rem}ec-textbox ::ng-deep input.ng-invalid.ng-touched~.units-left{left:1.25rem}ec-textbox ::ng-deep .control:not(.is-readonly) input:disabled~.units{color:var(--ec-form-control-color-disabled);opacity:.65}ec-textbox ::ng-deep .units{display:block;position:absolute;top:0;height:2rem;line-height:1.25rem;padding:.375rem .25rem;z-index:2}ec-textbox ::ng-deep .units.units-right{right:0;padding-right:.5rem}ec-textbox ::ng-deep .units.units-left{left:0;padding-left:.5rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}.control.invalid ec-textbox ::ng-deep input.ng-invalid:focus,.control.invalid ec-textbox ::ng-deep input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.units-left,.control.invalid ec-textbox ::ng-deep input.ng-valid~.units-left{left:1.25rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-required,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-required{display:none}\n"] }]
346
+ args: [{ selector: 'ec-numericbox', template: "<div class=\"control control-label-{{labelPosition}}\"\r\n [class.invalid]=\"formModel?.invalid && (formModel?.touched)\">\r\n <ng-container *ngIf=\"label && !helpPopover\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n </ng-container>\r\n\r\n <div *ngIf=\"label && helpPopover\"\r\n class=\"d-flex align-items-center\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n class=\"my-n2 mx-n1\"\r\n text=\"{{helpPopover | translate}}\">\r\n </ec-help-popover>\r\n </div>\r\n\r\n <ng-template #sharedLabel>\r\n <label ngPreserveWhitespaces>\r\n <span *ngIf=\"label\">{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length && formModel?.touched && formModel?.invalid\">{{validationErrors\r\n |\r\n translate}}</span>\r\n </label>\r\n </ng-template>\r\n\r\n <!-- Setting the maxlength to 13 to combat the user from entering too large of a number\r\n for javascript to support. If the user enters all 13 characters as numbers and we have showPrecision set, adding the\r\n decimal and the empty zero characters will get them in a situation where to edit it they must remove characters\r\n as we would push them past the limit -->\r\n <ec-textbox [id]=\"id\"\r\n #textbox\r\n class=\"control-input mb-0\"\r\n [placeholder]=\"placeholder\"\r\n [maxlength]=\"maxPrecisionDigits ? maxPrecisionDigits + 3 : 13\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"textboxFormModel\"\r\n [required]=\"required\"\r\n [tabindex]=\"tabindex\"\r\n [readonly]=\"readonly\"\r\n [tooltip]=\"tooltip\"\r\n (focusout)=\"onFocusOut()\">\r\n </ec-textbox>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}ec-textbox ::ng-deep .input-wrapper{position:relative}ec-textbox ::ng-deep input{text-align:right}ec-textbox ::ng-deep input:required.is-empty:not(:disabled)~.units-left{left:1.25rem}ec-textbox ::ng-deep input.ng-invalid.ng-touched~.units-left{left:1.25rem}ec-textbox ::ng-deep .control:not(.is-readonly) input:disabled~.units{color:var(--ec-form-control-color-disabled);opacity:.65}ec-textbox ::ng-deep .units{display:block;position:absolute;top:0;height:2rem;line-height:1.25rem;padding:.375rem .25rem;z-index:2}ec-textbox ::ng-deep .units.units-right{right:0;padding-right:.5rem}ec-textbox ::ng-deep .units.units-left{left:0;padding-left:.5rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}.control.invalid ec-textbox ::ng-deep input.ng-invalid:focus,.control.invalid ec-textbox ::ng-deep input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.units-left,.control.invalid ec-textbox ::ng-deep input.ng-valid~.units-left{left:1.25rem}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-invalid,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}.control.invalid ec-textbox ::ng-deep input.ng-invalid~.icon-required,.control.invalid ec-textbox ::ng-deep input.ng-valid~.icon-required{display:none}\n"] }]
347
347
  }], ctorParameters: function () { return [{ type: i1.ValidationMessageService }, { type: i2.FormGroupHelper }, { type: i0.Renderer2 }]; }, propDecorators: { placeholder: [{
348
348
  type: Input
349
349
  }], decimals: [{
@@ -369,4 +369,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
369
369
  type: ViewChild,
370
370
  args: ['textbox', { static: true }]
371
371
  }] } });
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpY2JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvbnVtZXJpY2JveC9udW1lcmljYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9udW1lcmljYm94L251bWVyaWNib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBMEQsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pLLE9BQU8sRUFBbUIsa0JBQWtCLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7QUFHaEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUF1QixFQUFFLEdBQXVCLEVBQUUsUUFBNEIsRUFBRSxrQkFBc0MsRUFBZSxFQUFFO0lBQ3hLLE9BQU8sQ0FBQyxPQUF3QixFQUFFLEVBQUU7UUFDaEMsSUFBSSxRQUFRLEdBQVksS0FBSyxDQUFDO1FBRTlCLCtFQUErRTtRQUMvRSwwREFBMEQ7UUFDMUQsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFO1lBRXZDLElBQUksY0FB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VCxXQUFXO3NCQUExQixLQUFLO2dCQU1VLFFBQVE7c0JBQXZCLEtBQUs7Z0JBT1UsYUFBYTtzQkFBNUIsS0FBSztnQkFTVSxrQkFBa0I7c0JBQWpDLEtBQUs7Z0JBVVUsR0FBRztzQkFBbEIsS0FBSztnQkFVVSxHQUFHO3NCQUFsQixLQUFLO2dCQU1VLFNBQVM7c0JBQXhCLEtBQUs7Z0JBTVUsVUFBVTtzQkFBekIsS0FBSztnQkFNVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBS21FLFNBQVM7c0JBQWpGLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBc0JmLFlBQVk7c0JBQTNELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IGdldERlY2ltYWxQYXR0ZXJuLCBpbnRlZ2VyUGF0dGVybiB9IGZyb20gJy4uLy4uL2NvcmUvdmFsaWRhdGlvbi1wYXR0ZXJucyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cEhlbHBlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtLWdyb3VwLmhlbHBlcic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sQmFzZSB9IGZyb20gXCIuLi9mb3JtLWNvbnRyb2wtYmFzZVwiO1xyXG5pbXBvcnQgeyBUZXh0Ym94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSB2YWxpZGF0b3IgdG8gY2hlY2sgdGhhdCBtaW4vbWF4IGFuZCBwYXR0ZXJuIHZhbGlkYXRpb24gaXMgbWV0IG9uIHRoZSBudW1lcmljYm94XHJcbiAqIGNvbXBvbmVudFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG51bWVyaWNib3hWYWxpZGF0aW9uID0gKG1pbjogbnVtYmVyIHwgdW5kZWZpbmVkLCBtYXg6IG51bWJlciB8IHVuZGVmaW5lZCwgZGVjaW1hbHM6IG51bWJlciB8IHVuZGVmaW5lZCwgbWF4UHJlY2lzaW9uRGlnaXRzOiBudW1iZXIgfCB1bmRlZmluZWQpOiBWYWxpZGF0b3JGbiA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICAgIGxldCBoYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgY29udHJvbCBpcyBlbXB0eSB3ZSB3b24ndCBhdHRlbXB0IHRvIHZhbGlkYXRlLCBpZiB0aGVyZSBpcyBhIHJlcXVpcmVkXHJcbiAgICAgICAgLy8gdmFsaWRhdG9yIHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUgdW50aWwgdGhlcmUgaXMgYSB2YWx1ZVxyXG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUgIT09IFwiXCIpIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBudW1lcmljUGF0dGVybjogUmVnRXhwO1xyXG4gICAgICAgICAgICBpZiAoZGVjaW1hbHMgJiYgZGVjaW1hbHMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBudW1lcmljUGF0dGVybiA9IGdldERlY2ltYWxQYXR0ZXJuKGRlY2ltYWxzKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXhQcmVjaXNpb25EaWdpdHMpIHtcclxuICAgICAgICAgICAgICAgIC8vIFN0aWxsIG5lZWQgdG8gY2hlY2sgZm9yIGEgdmFsaWQgbnVtYmVyIGZvcm1hdHRpbmcgd2hlbiBpbiBtYXggcHJlY2lzaW9uIG1vZGVcclxuICAgICAgICAgICAgICAgIG51bWVyaWNQYXR0ZXJuID0gZ2V0RGVjaW1hbFBhdHRlcm4obWF4UHJlY2lzaW9uRGlnaXRzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIEFsbG93IGFuIG9wdGlvbmFsIG5lZ2F0aXZlIHNpZ24gYW5kIGFueSBudW1iZXIgb2YgZGlnaXRzIDAtOVxyXG4gICAgICAgICAgICAgICAgbnVtZXJpY1BhdHRlcm4gPSBpbnRlZ2VyUGF0dGVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFudW1lcmljUGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4UHJlY2lzaW9uRGlnaXRzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0aW5nIHRvIGEgbnVtYmVyIHRoZW4gYmFjayB0byBzdHJpbmcgcmVtb3ZlcyB0cmFpbGluZyB6ZXJvcywgYW5kIHRoZSByZWdleCByZXBsYWNlIHJlbW92ZXNcclxuICAgICAgICAgICAgICAgIC8vIGFueSBuZWdhdGl2ZSBzaWducywgbGVhZGluZyB6ZXJvcyBvciBkZWNpbWFsIHBvaW50cyBmcm9tIHRoZSBudW1iZXIuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBOdW1iZXIoY29udHJvbC52YWx1ZSkudG9TdHJpbmcoKS5yZXBsYWNlKC9eLT8vLCAnJykucmVwbGFjZSgvKF4wXFwuKXwoXFwuKS8sICcnKTtcclxuICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdmFsLmxlbmd0aCA+IG1heFByZWNpc2lvbkRpZ2l0cztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gV2Ugbm93IGtub3cgd2UgaGF2ZSBhIHZhbGlkIG51bWJlciwgc28gd2UgY2FuIGNhc3QgdGhlc2UgdG8gbnVtYmVyc1xyXG4gICAgICAgICAgICAvLyBmb3IgcHJvcGVyIHJhbmdlIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIE51bWJlcihjb250cm9sLnZhbHVlKSA8IG1pbikge1xyXG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQgJiYgTnVtYmVyKGNvbnRyb2wudmFsdWUpID4gbWF4KSB7XHJcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoYXNFcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbnVtZXJpY2JveDoge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBtaW46IG1pbixcclxuICAgICAgICAgICAgICAgICAgICBtYXg6IG1heCxcclxuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsczogZGVjaW1hbHMsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4UHJlY2lzaW9uRGlnaXRzOiBtYXhQcmVjaXNpb25EaWdpdHNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2VjLW51bWVyaWNib3gnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL251bWVyaWNib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbnVtZXJpY2JveC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTnVtZXJpY2JveENvbXBvbmVudCBleHRlbmRzIEZvcm1Db250cm9sQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgdGV4dGJveCBpbnB1dCdzIHBsYWNlaG9sZGVyXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBudW1iZXIgb2YgZGVjaW1hbHMgYWxsb3dlZC4gIElmIG5vdCBzdXBwbGllZCB0aGUgaW5wdXQgdmFsdWUgd2lsbCBiZSB2YWxpZGF0ZWQgYXMgYVxyXG4gICAgICogd2hvbGUgbnVtYmVyXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkZWNpbWFscz86IG51bWJlcjtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IHRyYWlsaW5nIHplcm9zIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LlxyXG4gICAgICogRG8gbm90IHVzZSB3aXRoIG1heFByZWNpc2lvbkRpZ2l0cy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dQcmVjaXNpb24/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1heGltdW0gdG90YWwgZGlnaXRzIGEgbnVtYmVyIGNhbiBoYXZlIGxlZnQgb3IgcmlnaHQgb2YgdGhlIGRlY2ltYWwgcG9pbnQuXHJcbiAgICAgKiBEdWUgdG8gbGltaXRhdGlvbnMgd2l0aCBob3cgSlMgaGFuZGxlcyBudW1iZXJzLCB0aGUgbWF4IHZhbHVlIGZvciB0aGlzIGlzIDE1LlxyXG4gICAgICogTnVtYmVycyBsb25nZXIgdGhhbiAxNSBkaWdpdHMgbWF5IGNhdXNlIHJvdW5kaW5nIGVycm9ycy5cclxuICAgICAqIERvIG5vdCB1c2Ugd2l0aCBzaG93UHJlY2lzaW9uID0gdHJ1ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4UHJlY2lzaW9uRGlnaXRzPzogbnVtYmVyO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIGFsbG93ZWQgaW4gdGhlIGlucHV0XHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBpcyBmb3IgYWRkaW5nIHRoZSBhdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQgdG8gZ2V0IHRoZSBicm93c2VyIGZ1bmN0aW9uYWxpdHlcclxuICAgICAqIGZyb20gdGhlIGlucHV0LiAgSWYgeW91IG5lZWQgdGhlIGZvcm0gdG8gYmUgdmFsaWRhdGVkIGJlZm9yZSBzdWJtaXNzaW9uLCBhcHBseSB0aGVcclxuICAgICAqIG1heCB2YWxpZGF0b3IgdG8gdGhlIGZvcm0gY29ucm9sLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4PzogbnVtYmVyO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtaW5pbXVtIHZhbHVlIGFsbG93ZWQgaW4gdGhlIGlucHV0XHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBpcyBmb3IgYWRkaW5nIHRoZSBhdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQgdG8gZ2V0IHRoZSBicm93c2VyIGZ1bmN0aW9uYWxpdHlcclxuICAgICAqIGZyb20gdGhlIGlucHV0LiAgSWYgeW91IG5lZWQgdGhlIGZvcm0gdG8gYmUgdmFsaWRhdGVkIGJlZm9yZSBzdWJtaXNzaW9uLCBhcHBseSB0aGVcclxuICAgICAqIG1pbiB2YWxpZGF0b3IgdG8gdGhlIGZvcm0gY29ucm9sLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbWluPzogbnVtYmVyO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgdG8gZGlzcGxheSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBpbnB1dFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbGVmdFVuaXRzPzogc3RyaW5nO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgdG8gZGlzcGxheSBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgaW5wdXRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHJpZ2h0VW5pdHM/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSB0aGlzIHdpbGwgdXBkYXRlIHRoZSBmb3JtIG1vZGVsIGFmdGVyIGEgZGVib3VuY2UgYXMgdGhlIHVzZXJcclxuICAgICAqIGludGVyYWN0cyB3aXRoIHRoZSBjb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGF1dG9VcGRhdGVGb3JtTW9kZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0Ym94IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChUZXh0Ym94Q29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHRleHRib3hFbCE6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGludGVybmFsIGZvcm0gbW9kZWwgd2UgdXNlIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHdpdGggZm9ybWF0dGluZ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdGV4dGJveEZvcm1Nb2RlbCE6IFVudHlwZWRGb3JtQ29udHJvbDtcclxuXHJcbiAgICAvKiogRmxhZyB0byB0ZWxsIHRoZSBwYWdlIHdlIGZpbmFsbHkgY29tcHV0ZWQgYSBncmVhdGVyIHRoYW4gemVyb1xyXG4gICAgICogIHdpZHRoIGZvciB1bml0cyAoaWYgYXBwbGljYWJsZSlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1bml0c1dpZHRoQ2FsY3VsYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBGbGFnIHVzZWQgdG8gZmlsdGVyIHRoZSBmb3JtIG1vZGVscyB2YWx1ZSBjaGFuZ2VzIHN1YnNjcmlwdGlvblxyXG4gICAgICogIHRvIHByZXZlbnQgdGhlIHRleHRib3ggbW9kZWwgZnJvbSBiZWluZyBmb3JtYXR0ZWQgYXMgdGhlIGZvcm0gbW9kZWwgaXMgdXBkYXRlZFxyXG4gICAgICogIHByb2dyYW1tYXRpY2FsbHkgd2hlbiB0aGUgdGV4dGJveCBtb2RlbCB1cGRhdGVzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYXV0b1VwZGF0aW5nRm9ybU1vZGVsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICogUmVmZXJlbmNlIHRvIHRoZSB0ZXh0Ym94IGlucHV0IGNvbnRyb2xcclxuICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ3RleHRib3gnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHRleHRib3hJbnB1dCE6IFRleHRib3hDb21wb25lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIHZhbGlkYXRpb25NZXNzYWdlU2VydmljZTogVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBmb3JtR3JvdXBIZWxwZXI6IEZvcm1Hcm91cEhlbHBlcixcclxuICAgICAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMlxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIodmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLCBmb3JtR3JvdXBIZWxwZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW5ndWxhciBBZnRlclZpZXdJbml0IGxpZmUtY3ljbGUgaG9va1xyXG4gICAgICogU3Vic2NyaWJlIHRvIHRleHRib3ggbW9kZWwgdmFsdWUgY2hhbmdlcyBpZiB0aGUgaG9zdGluZ1xyXG4gICAgICogcGFnZSBoYXMgb3B0ZWQgaW4gZm9yIHRoaXMgY29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZUZvcm1Nb2RlbCkge1xyXG4gICAgICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCksXHJcbiAgICAgICAgICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtTW9kZWxWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW5ndWxhciBvbkNoYW5nZXMgbGlmZS1jeWNsZSBob29rXHJcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzIHwgTGlmZS1jeWNsZSBob29rc31cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICAvLyBJZiBlaXRoZXIgdW5pdHMgY2hhbmdlIGFmdGVyIHdlJ3ZlIGNhbGN1bGF0ZWQsXHJcbiAgICAgICAgLy8gcmVzZXQgdGhlIGZsYWcgc28gd2UgY2FuIHJlYWN0IGFuZCByZWRyYXdcclxuICAgICAgICBpZiAoY2hhbmdlcy5yaWdodFVuaXRzIHx8IGNoYW5nZXMubGVmdFVuaXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5pdHNXaWR0aENhbGN1bGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXIgb25Jbml0IGxpZmVjeWNsZSBob29rXHJcbiAgICAgKiBJZiB1bml0cyBpcyBkZWZpbmVkLCBzZXQgdGhlIHBvc2l0aW9uIGFuZCBsaXN0ZW4gZm9yIHN0YXR1cyBjaGFuZ2VzIHNvIHdlXHJcbiAgICAgKiBjYW4gdXBkYXRlIHRoZSBwb3NpdGlvbmluZyBvZiB0aGUgdW5pdHMgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGV4dGJveCBmb3JtIG1vZGVsIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBmb3JtIG1vZGVsIGFuZCBzeW5jaHJvbml6ZVxyXG4gICAgICAgIC8vIGRpc2FibGVkIHN0YXRlXHJcbiAgICAgICAgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiB0aGlzLmZvcm1Nb2RlbC52YWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZm9ybU1vZGVsLmRpc2FibGVkIH0pO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGZvcm0gbW9kZWwncyBlcnJvcnMgd2hlbiB0aGUgdGV4dGJveCBmb3JtIG1vZGVsIHN0YXR1cyBjaGFuZ2VzXHJcbiAgICAgICAgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtTW9kZWwuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0RXJyb3JzKHRoaXMudGV4dGJveEZvcm1Nb2RlbC5lcnJvcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgLy8gU3luY2hyb25pemUgZGlzYWJsZWQgc3RhdGUgYmV0d2VlbiBmb3JtIG1vZGVsIGFuZCBpbnRlcm5hbCB0ZXh0Ym94IGZvcm0gbW9kZWxcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybU1vZGVsLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGV4dGJveEZvcm1Nb2RlbC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dGJveEZvcm1Nb2RlbC5lbmFibGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBTZXQgdGV4dGJveCB2YWxpZGF0b3JzXHJcbiAgICAgICAgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnNldFZhbGlkYXRvcnModGhpcy5nZXRWYWxpZGF0b3JzKCkpO1xyXG5cclxuICAgICAgICAvLyBOb3cgdGhhdCB0aGUgdGV4dGJveCBpcyBzZXQgdXAgd2Ugd2lsbCBzZXQgaXQncyB2YWx1ZSB0byB3aGF0ZXZlciB0aGVcclxuICAgICAgICAvLyBmb3JtIG1vZGVsIGhhZCB3aGVuIHdlIGluaXRpYWxpemVkXHJcbiAgICAgICAgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnNldFZhbHVlKHRoaXMuZm9ybWF0RGlzcGxheU51bWJlcih0aGlzLmZvcm1Nb2RlbC52YWx1ZSkpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgZm9ybSBtb2RlbCdzIHZhbHVlIGNoYW5nZXMgcHJvZ3JhbW1hdGljYWxseSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGVcclxuICAgICAgICAvLyB0ZXh0Ym94IGZvcm0gbW9kZWxcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBmaWx0ZXIgb3V0IHdoZW4gd2UgYXJlIHVwZGF0aW5nIGl0IHByb2dyYW1tYXRpY2FsbHkgaWYgdGhlXHJcbiAgICAgICAgICAgIC8vIGhvc3RpbmcgcGFnZSBoYXMgb3B0ZWQgaW50byB0aGUgYXV0byB1cGRhdGluZyBpbnB1dFxyXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuYXV0b1VwZGF0aW5nRm9ybU1vZGVsKSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dGJveEZvcm1Nb2RlbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdERpc3BsYXlOdW1iZXIodmFsdWUpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0Ym94IHN0YXR1cyBjaGFuZ2VzIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsZWZ0IHVuaXRzIHBvc2l0aW9uIGJlY2F1c2VcclxuICAgICAgICAvLyB3ZSB3YW50IHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGludmFsaWQgaWNvblxyXG4gICAgICAgIGlmICh0aGlzLmxlZnRVbml0cykge1xyXG4gICAgICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uTGVmdFVuaXRzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbmd1bGFyIGFmdGVyVmlld0NoZWNrZWQgbGlmZWN5Y2xlIGhvb2tcclxuICAgICAqIFNob3cgdGhlIHVuaXRzIGVsZW1lbnQgaWYgdW5pdHMgaXMgZGVmaW5lZC4gUnVucyBhZnRlciBldmVyeSBuZ09uQ2hhbmdlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICgodGhpcy5sZWZ0VW5pdHMgfHwgdGhpcy5yaWdodFVuaXRzKSAmJiAhdGhpcy51bml0c1dpZHRoQ2FsY3VsYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dVbml0cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHRoYXQgYnVpbGRzIGFuZCByZXR1cm5zIGEgVmFsaWRhdG9yRm4gYXJyYXkgdG8gc2V0IG9uIHRoZSBmb3JtIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xyXG4gICAgICAgIGxldCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1lcmljYm94VmFsaWRhdGlvbih0aGlzLm1pbiwgdGhpcy5tYXgsIHRoaXMuZGVjaW1hbHMsIHRoaXMubWF4UHJlY2lzaW9uRGlnaXRzKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB2YWxpZGF0b3JzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9jdXMgb3V0IGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBUZXh0Ym94IGNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Gb2N1c091dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1Nb2RlbFZhbHVlKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBGdW5jdGlvbiB0byBzZXQgZm9jdXMgb24gYW4gaW5wdXQgcHJvZ3JhbWF0aWNhbGx5IGFmdGVyIHRoZSBwYWdlXHJcbiAgICAqIGhhZCBiZWVuIHJlbmRlcmVkLiAgVGhlIGhpZ2hsaWdodCB0ZXh0IGZsYWcgd2lsbCBzZWxlY3QgdGhlIHRleHRcclxuICAgICogd2l0aGluIHRoZSBpbnB1dCBpZiBwYXNzZWQgaW4gYW5kIHRydWVcclxuICAgICovXHJcbiAgICBwdWJsaWMgc2V0Rm9jdXMoaGlnaGxpZ2h0VGV4dD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRleHRib3hJbnB1dC5zZXRGb2N1cyhoaWdobGlnaHRUZXh0KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHRoZSB0ZXh0Ym94IG1vZGVsIHVwZGF0ZXMgd2UgbmVlZCB0byBhZGQgc29tZSBkaXNwbGF5IGZvcm1hdHRpbmcgZm9yXHJcbiAgICAgKiBkaXNwbGF5IGluIHRoZSB0ZXh0Ym94IGFuZCBjYXN0IHRoZSB0ZXh0Ym94IG1vZGVsIHRvIGEgbnVtYmVyLiBBdm9pZCB1cGRhdGluZ1xyXG4gICAgICogdGhlIGZvcm0gbW9kZWwgd2hlbiB0aGUgdmFsdWUgZG9lc24ndCBjaGFuZ2UgYmVjYXVzZSBsaXN0ZW5lcnMgd2lsbCBmaXJlIGZvciBubyByZWFzb25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVGb3JtTW9kZWxWYWx1ZShpc0ZvY3VzT3V0PzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGVGb3JtTW9kZWwpIHtcclxuICAgICAgICAgICAgLy8gTWFrZSBpdCBzbyB2YWx1ZSBjaGFuZ2VzIG9uIHRoZSBmb3JtIG1vZGVsIGRvIG5vdCBnZXQgdHJpZ2dlcmVkXHJcbiAgICAgICAgICAgIC8vIGFzIHdlIGNoYW5nZSBpdCBwcm9ncmFtbWF0aWNhbGx5LiAgV2UgZG8gbm90IHdhbnQgdGhlIHRleHRib3hcclxuICAgICAgICAgICAgLy8gbW9kZWwgdG8gYmUgdXBkYXRlZCB3aGlsZSB0aGUgdXNlciBpcyBpbiB0aGUgaW5wdXRcclxuICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRpbmdGb3JtTW9kZWwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWxpZCB8fCB0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IG91dCB3aXRoIG51bGwgZm9yIHRoZSBudW1iZXIsIGlmIHRoZSB0ZXh0Ym94IHZhbHVlIGlzIG5vdCBhIG51bWJlclxyXG4gICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBjbGVhciBpdCBvdXQgb24gZm9jdXMgb3V0XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHRleHRib3ggbW9kZWwgaXMgYSBudW1iZXIgYmVmb3JlIHRyeWluZyB0byB1cGRhdGUgdGhlXHJcbiAgICAgICAgICAgICAgICAvLyBmb3JtIG1vZGVsIHZhbHVlIHdpdGggaXRcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUgJiYgIWlzTmFOKHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBPdXIgdmFsdWUgaXMgYSBsZWdpdCBudW1iZXIsIG9uIGZvY3VzIG91dCB3ZSB3aWxsIGZvcm1hdCBpdCBpZiBuZWVkZWRcclxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBOdW1iZXIodGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2tpbmcgaWYgdGhlIHZhbHVlIGhhcyBhY3R1YWxseSBjaGFuZ2VkLCBpZiBub3QgZG9uJ3Qgc2V0IHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIHRvIGF2b2lkIGV4dHJhIGxpc3RlbmVyIGNhbGxzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybU1vZGVsLnZhbHVlICE9PSBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUobnVtYmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRleHRib3ggbW9kZWwgaXMgbm90IGEgbnVtYmVyLCBjaGVjayB0byBzZWUgaWYgb3VyIGZvcm0gbW9kZWwgaGFzIGEgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaWYgc28gY2xlYXIgaXQgb3V0XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybU1vZGVsLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3aWxsIHVwZGF0ZSB0aGUgdGV4dGJveCBmb3JtIG1vZGVsIHdpdGggZm9ybWF0dGluZyBpZiBuZWVkZWRcclxuICAgICAgICAgICAgICAgIC8vIG9uIEZvY3VzIG91dC4gIFRoaXMgd29ya3Mgd2VsbCBmb3IgdGhlIHVzZXIgd2hldGhlciB0aGUgYXV0byB1cGRhdGVcclxuICAgICAgICAgICAgICAgIC8vIGlzIG9wdGVkIGluIG9yIG5vdFxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRm9jdXNPdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwuc2V0VmFsdWUodGhpcy5mb3JtYXREaXNwbGF5TnVtYmVyKG51bWJlcikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgLy8gTm90aGluZyB0byBkaXNwbGF5LCBqdXN0IGVuc3VyaW5nIHdlIHJlc2V0IG91ciBmbGFnIHRoYXQgZmlsdGVyc1xyXG4gICAgICAgICAgICAvLyB0aGUgZm9ybSBtb2RlbCB2YWx1ZSBjaGFuZ2VzXHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRpbmdGb3JtTW9kZWwgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgbnVtYmVyIHZhbHVlIHRvIHRoZSBmb3JtbWF0ZWQgZGlzcGxheSBzdHJpbmcuIElmIHRoZXJlIGlzIG5vIHZhbHVlXHJcbiAgICAgKiByZXR1cm4gbnVsbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZvcm1hdERpc3BsYXlOdW1iZXIodmFsdWU6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcclxuICAgICAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBjYWxsaW5nIHRvRml4ZWQgaWYgdGhlIHZhbHVlIGlzbid0IGEgbnVtYmVyLiAgVGhpcyBpcyBwb3NzaWJsZVxyXG4gICAgICAgICAgICAvLyBpZiBwYXRjaGluZyBhIHZhbHVlIGZyb20gb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50IGFzIHlvdSBkb24ndCBoYXZlXHJcbiAgICAgICAgICAgIC8vIHR5cGUgY2hlY2tpbmcgdGhlcmVcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1ByZWNpc2lvbiAmJiB0aGlzLmRlY2ltYWxzICYmICFpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b0ZpeGVkKHRoaXMuZGVjaW1hbHMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiB0aGUgdW5pdHMgZWxlbWVudCBhbmQgc2V0IHRoZSBwYWRkaW5nIGluIHRoZSB0ZXh0Ym94IGlucHV0IGJhc2VkXHJcbiAgICAgKiBvbiB0aGUgd2lkdGggb2YgdGhlIHVuaXRzIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwb3NpdGlvblJpZ2h0VW5pdHMoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHVuaXRzRWwgPSB0aGlzLnRleHRib3hFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy51bml0cy1yaWdodCcpO1xyXG4gICAgICAgIGxldCBpbnB1dEVsID0gdGhpcy50ZXh0Ym94RWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xyXG5cclxuICAgICAgICBpZiAodW5pdHNFbCAmJiBpbnB1dEVsKSB7XHJcbiAgICAgICAgICAgIGxldCB1bml0c1dpZHRoID0gdW5pdHNFbC5vZmZzZXRXaWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICh1bml0c1dpZHRoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51bml0c1dpZHRoQ2FsY3VsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBwYWRkaW5nID0gdW5pdHNXaWR0aDtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbnB1dEVsLCAncGFkZGluZy1yaWdodCcsIHBhZGRpbmcgKyAncHgnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgcG9zaXRpb25MZWZ0VW5pdHMoKSB7XHJcbiAgICAgICAgbGV0IHVuaXRzRWwgPSB0aGlzLnRleHRib3hFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy51bml0cy1sZWZ0Jyk7XHJcbiAgICAgICAgbGV0IGlucHV0RWwgPSB0aGlzLnRleHRib3hFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XHJcblxyXG4gICAgICAgIGlmICh1bml0c0VsICYmIGlucHV0RWwpIHtcclxuICAgICAgICAgICAgbGV0IHVuaXRzV2lkdGggPSB1bml0c0VsLm9mZnNldFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHVuaXRzV2lkdGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVuaXRzV2lkdGhDYWxjdWxhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHBhZGRpbmcgPSB1bml0c1dpZHRoO1xyXG4gICAgICAgICAgICBsZXQgbGVmdFBvc2l0aW9uID0gZ2V0Q29tcHV0ZWRTdHlsZSh1bml0c0VsKS5sZWZ0O1xyXG4gICAgICAgICAgICBpZiAobGVmdFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nICs9IHBhcnNlSW50KGxlZnRQb3NpdGlvbi5yZXBsYWNlKCdweCcsICcnKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbnB1dEVsLCAncGFkZGluZy1sZWZ0JywgcGFkZGluZyArICdweCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhbmQgYXBwZW5kIHRoZSB1bml0cyBlbGVtZW50IHRvIHRoZSB0ZXh0Ym94IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzaG93VW5pdHMoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGlucHV0V3JhcHBlciA9IHRoaXMudGV4dGJveEVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmlucHV0LXdyYXBwZXInKTtcclxuXHJcbiAgICAgICAgaWYgKGlucHV0V3JhcHBlcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sZWZ0VW5pdHMpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1bml0c0VsID0gdGhpcy50ZXh0Ym94RWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudW5pdHMtbGVmdCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaXRzRWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHVuaXRzRWwsICdpbm5lckhUTUwnLCB0aGlzLmxlZnRVbml0cyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoaW5wdXRXcmFwcGVyLCB0aGlzLm1ha2VVbml0RWxlbWVudCgnbGVmdCcsIHRoaXMubGVmdFVuaXRzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uTGVmdFVuaXRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJpZ2h0VW5pdHMpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1bml0c0VsID0gdGhpcy50ZXh0Ym94RWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudW5pdHMtcmlnaHQnKTtcclxuICAgICAgICAgICAgICAgIGlmICh1bml0c0VsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh1bml0c0VsLCAnaW5uZXJIVE1MJywgdGhpcy5yaWdodFVuaXRzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChpbnB1dFdyYXBwZXIsIHRoaXMubWFrZVVuaXRFbGVtZW50KCdyaWdodCcsIHRoaXMucmlnaHRVbml0cykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvblJpZ2h0VW5pdHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1ha2VVbml0RWxlbWVudChzaWRlOiAnbGVmdCcgfCAncmlnaHQnLCB0ZXh0OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGxldCB1bml0c0VsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodW5pdHNFbCwgJ2NsYXNzJywgYHVuaXRzIHVuaXRzLSR7c2lkZX1gKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh1bml0c0VsLCAnaWQnLCBgJHt0aGlzLmlkfV91bml0c2ApO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHVuaXRzRWwsICdzdHlsZScsICdwb2ludGVyLWV2ZW50czogbm9uZScpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodW5pdHNFbCwgJ2lubmVySFRNTCcsIHRleHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdW5pdHNFbDtcclxuICAgIH1cclxufSIsIjxkaXYgY2xhc3M9XCJjb250cm9sIGNvbnRyb2wtbGFiZWwte3tsYWJlbFBvc2l0aW9ufX1cIlxyXG4gICAgIFtjbGFzcy5pbnZhbGlkXT1cImZvcm1Nb2RlbD8uaW52YWxpZCAmJiAoZm9ybU1vZGVsPy50b3VjaGVkKVwiPlxyXG4gICAgICAgPGxhYmVsICpuZ0lmPVwibGFiZWwgJiYgIWhlbHBQb3BvdmVyXCJcclxuICAgICAgICAgICAgICBuZ1ByZXNlcnZlV2hpdGVzcGFjZXM+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3tsYWJlbCB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidmFsaWRhdGlvbkVycm9ycy5sZW5ndGggJiYgZm9ybU1vZGVsPy50b3VjaGVkICYmIGZvcm1Nb2RlbD8uaW52YWxpZFwiPnt7dmFsaWRhdGlvbkVycm9ycyB8XHJcbiAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICA8ZGl2ICpuZ0lmPVwibGFiZWwgJiYgaGVscFBvcG92ZXJcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgbmdQcmVzZXJ2ZVdoaXRlc3BhY2VzPlxyXG4gICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e2xhYmVsIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidmFsaWRhdGlvbkVycm9ycy5sZW5ndGggJiYgZm9ybU1vZGVsPy50b3VjaGVkICYmIGZvcm1Nb2RlbD8uaW52YWxpZFwiPnt7dmFsaWRhdGlvbkVycm9yc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgPGVjLWhlbHAtcG9wb3ZlciBpZD1cInt7aWR9fV9oZWxwUG9wb3ZlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LW4yIG14LW4xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7e2hlbHBQb3BvdmVyIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICAgICAgICA8L2VjLWhlbHAtcG9wb3Zlcj5cclxuICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgIDwhLS0gU2V0dGluZyB0aGUgbWF4bGVuZ3RoIHRvIDEzIHRvIGNvbWJhdCB0aGUgdXNlciBmcm9tIGVudGVyaW5nIHRvbyBsYXJnZSBvZiBhIG51bWJlclxyXG4gICAgICAgICBmb3IgamF2YXNjcmlwdCB0byBzdXBwb3J0LiAgSWYgdGhlIHVzZXIgZW50ZXJzIGFsbCAxMyBjaGFyYWN0ZXJzIGFzIG51bWJlcnMgYW5kIHdlIGhhdmUgc2hvd1ByZWNpc2lvbiBzZXQsIGFkZGluZyB0aGVcclxuICAgICAgICAgZGVjaW1hbCBhbmQgdGhlIGVtcHR5IHplcm8gY2hhcmFjdGVycyB3aWxsIGdldCB0aGVtIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRvIGVkaXQgaXQgdGhleSBtdXN0IHJlbW92ZSBjaGFyYWN0ZXJzXHJcbiAgICAgICAgIGFzIHdlIHdvdWxkIHB1c2ggdGhlbSBwYXN0IHRoZSBsaW1pdCAtLT5cclxuICAgICAgIDxlYy10ZXh0Ym94IFtpZF09XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAjdGV4dGJveFxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWlucHV0IG1iLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwibWF4UHJlY2lzaW9uRGlnaXRzID8gbWF4UHJlY2lzaW9uRGlnaXRzICsgMyA6IDEzXCJcclxuICAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcclxuICAgICAgICAgICAgICAgICAgIFtmb3JtTW9kZWxdPVwidGV4dGJveEZvcm1Nb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJ0b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KClcIj5cclxuICAgICAgIDwvZWMtdGV4dGJveD5cclxuPC9kaXY+Il19
372
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpY2JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvbnVtZXJpY2JveC9udW1lcmljYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9udW1lcmljYm94L251bWVyaWNib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBMEQsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pLLE9BQU8sRUFBbUIsa0JBQWtCLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7QUFHaEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUF1QixFQUFFLEdBQXVCLEVBQUUsUUFBNEIsRUFBRSxrQkFBc0MsRUFBZSxFQUFFO0lBQ3hLLE9BQU8sQ0FBQyxPQUF3QixFQUFFLEVBQUU7UUFDaEMsSUFBSSxRQUFRLEdBQVksS0FBSyxDQUFDO1FBRTlCLCtFQUErRTtRQUMvRSwwREFBMEQ7UUFDMUQsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFO1lBRXZDLElBQUksY0FB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VCxXQUFXO3NCQUExQixLQUFLO2dCQU1VLFFBQVE7c0JBQXZCLEtBQUs7Z0JBT1UsYUFBYTtzQkFBNUIsS0FBSztnQkFTVSxrQkFBa0I7c0JBQWpDLEtBQUs7Z0JBVVUsR0FBRztzQkFBbEIsS0FBSztnQkFVVSxHQUFHO3NCQUFsQixLQUFLO2dCQU1VLFNBQVM7c0JBQXhCLEtBQUs7Z0JBTVUsVUFBVTtzQkFBekIsS0FBSztnQkFNVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBS21FLFNBQVM7c0JBQWpGLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBc0JmLFlBQVk7c0JBQTNELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IGdldERlY2ltYWxQYXR0ZXJuLCBpbnRlZ2VyUGF0dGVybiB9IGZyb20gJy4uLy4uL2NvcmUvdmFsaWRhdGlvbi1wYXR0ZXJucyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cEhlbHBlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtLWdyb3VwLmhlbHBlcic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sQmFzZSB9IGZyb20gXCIuLi9mb3JtLWNvbnRyb2wtYmFzZVwiO1xyXG5pbXBvcnQgeyBUZXh0Ym94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XHJcblxyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSB2YWxpZGF0b3IgdG8gY2hlY2sgdGhhdCBtaW4vbWF4IGFuZCBwYXR0ZXJuIHZhbGlkYXRpb24gaXMgbWV0IG9uIHRoZSBudW1lcmljYm94XHJcbiAqIGNvbXBvbmVudFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG51bWVyaWNib3hWYWxpZGF0aW9uID0gKG1pbjogbnVtYmVyIHwgdW5kZWZpbmVkLCBtYXg6IG51bWJlciB8IHVuZGVmaW5lZCwgZGVjaW1hbHM6IG51bWJlciB8IHVuZGVmaW5lZCwgbWF4UHJlY2lzaW9uRGlnaXRzOiBudW1iZXIgfCB1bmRlZmluZWQpOiBWYWxpZGF0b3JGbiA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICAgIGxldCBoYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgY29udHJvbCBpcyBlbXB0eSB3ZSB3b24ndCBhdHRlbXB0IHRvIHZhbGlkYXRlLCBpZiB0aGVyZSBpcyBhIHJlcXVpcmVkXHJcbiAgICAgICAgLy8gdmFsaWRhdG9yIHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUgdW50aWwgdGhlcmUgaXMgYSB2YWx1ZVxyXG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUgIT09IFwiXCIpIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBudW1lcmljUGF0dGVybjogUmVnRXhwO1xyXG4gICAgICAgICAgICBpZiAoZGVjaW1hbHMgJiYgZGVjaW1hbHMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBudW1lcmljUGF0dGVybiA9IGdldERlY2ltYWxQYXR0ZXJuKGRlY2ltYWxzKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXhQcmVjaXNpb25EaWdpdHMpIHtcclxuICAgICAgICAgICAgICAgIC8vIFN0aWxsIG5lZWQgdG8gY2hlY2sgZm9yIGEgdmFsaWQgbnVtYmVyIGZvcm1hdHRpbmcgd2hlbiBpbiBtYXggcHJlY2lzaW9uIG1vZGVcclxuICAgICAgICAgICAgICAgIG51bWVyaWNQYXR0ZXJuID0gZ2V0RGVjaW1hbFBhdHRlcm4obWF4UHJlY2lzaW9uRGlnaXRzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIEFsbG93IGFuIG9wdGlvbmFsIG5lZ2F0aXZlIHNpZ24gYW5kIGFueSBudW1iZXIgb2YgZGlnaXRzIDAtOVxyXG4gICAgICAgICAgICAgICAgbnVtZXJpY1BhdHRlcm4gPSBpbnRlZ2VyUGF0dGVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFudW1lcmljUGF0dGVybi50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4UHJlY2lzaW9uRGlnaXRzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0aW5nIHRvIGEgbnVtYmVyIHRoZW4gYmFjayB0byBzdHJpbmcgcmVtb3ZlcyB0cmFpbGluZyB6ZXJvcywgYW5kIHRoZSByZWdleCByZXBsYWNlIHJlbW92ZXNcclxuICAgICAgICAgICAgICAgIC8vIGFueSBuZWdhdGl2ZSBzaWducywgbGVhZGluZyB6ZXJvcyBvciBkZWNpbWFsIHBvaW50cyBmcm9tIHRoZSBudW1iZXIuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBOdW1iZXIoY29udHJvbC52YWx1ZSkudG9TdHJpbmcoKS5yZXBsYWNlKC9eLT8vLCAnJykucmVwbGFjZSgvKF4wXFwuKXwoXFwuKS8sICcnKTtcclxuICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdmFsLmxlbmd0aCA+IG1heFByZWNpc2lvbkRpZ2l0cztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gV2Ugbm93IGtub3cgd2UgaGF2ZSBhIHZhbGlkIG51bWJlciwgc28gd2UgY2FuIGNhc3QgdGhlc2UgdG8gbnVtYmVyc1xyXG4gICAgICAgICAgICAvLyBmb3IgcHJvcGVyIHJhbmdlIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIE51bWJlcihjb250cm9sLnZhbHVlKSA8IG1pbikge1xyXG4gICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobWF4ICE9PSB1bmRlZmluZWQgJiYgTnVtYmVyKGNvbnRyb2wudmFsdWUpID4gbWF4KSB7XHJcbiAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChoYXNFcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbnVtZXJpY2JveDoge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBtaW46IG1pbixcclxuICAgICAgICAgICAgICAgICAgICBtYXg6IG1heCxcclxuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsczogZGVjaW1hbHMsXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4UHJlY2lzaW9uRGlnaXRzOiBtYXhQcmVjaXNpb25EaWdpdHNcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2VjLW51bWVyaWNib3gnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL251bWVyaWNib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbnVtZXJpY2JveC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgTnVtZXJpY2JveENvbXBvbmVudCBleHRlbmRzIEZvcm1Db250cm9sQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgdGV4dGJveCBpbnB1dCdzIHBsYWNlaG9sZGVyXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBudW1iZXIgb2YgZGVjaW1hbHMgYWxsb3dlZC4gIElmIG5vdCBzdXBwbGllZCB0aGUgaW5wdXQgdmFsdWUgd2lsbCBiZSB2YWxpZGF0ZWQgYXMgYVxyXG4gICAgICogd2hvbGUgbnVtYmVyXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkZWNpbWFscz86IG51bWJlcjtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IHRyYWlsaW5nIHplcm9zIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LlxyXG4gICAgICogRG8gbm90IHVzZSB3aXRoIG1heFByZWNpc2lvbkRpZ2l0cy5cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dQcmVjaXNpb24/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1heGltdW0gdG90YWwgZGlnaXRzIGEgbnVtYmVyIGNhbiBoYXZlIGxlZnQgb3IgcmlnaHQgb2YgdGhlIGRlY2ltYWwgcG9pbnQuXHJcbiAgICAgKiBEdWUgdG8gbGltaXRhdGlvbnMgd2l0aCBob3cgSlMgaGFuZGxlcyBudW1iZXJzLCB0aGUgbWF4IHZhbHVlIGZvciB0aGlzIGlzIDE1LlxyXG4gICAgICogTnVtYmVycyBsb25nZXIgdGhhbiAxNSBkaWdpdHMgbWF5IGNhdXNlIHJvdW5kaW5nIGVycm9ycy5cclxuICAgICAqIERvIG5vdCB1c2Ugd2l0aCBzaG93UHJlY2lzaW9uID0gdHJ1ZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4UHJlY2lzaW9uRGlnaXRzPzogbnVtYmVyO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIGFsbG93ZWQgaW4gdGhlIGlucHV0XHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBpcyBmb3IgYWRkaW5nIHRoZSBhdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQgdG8gZ2V0IHRoZSBicm93c2VyIGZ1bmN0aW9uYWxpdHlcclxuICAgICAqIGZyb20gdGhlIGlucHV0LiAgSWYgeW91IG5lZWQgdGhlIGZvcm0gdG8gYmUgdmFsaWRhdGVkIGJlZm9yZSBzdWJtaXNzaW9uLCBhcHBseSB0aGVcclxuICAgICAqIG1heCB2YWxpZGF0b3IgdG8gdGhlIGZvcm0gY29ucm9sLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4PzogbnVtYmVyO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtaW5pbXVtIHZhbHVlIGFsbG93ZWQgaW4gdGhlIGlucHV0XHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBpcyBmb3IgYWRkaW5nIHRoZSBhdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQgdG8gZ2V0IHRoZSBicm93c2VyIGZ1bmN0aW9uYWxpdHlcclxuICAgICAqIGZyb20gdGhlIGlucHV0LiAgSWYgeW91IG5lZWQgdGhlIGZvcm0gdG8gYmUgdmFsaWRhdGVkIGJlZm9yZSBzdWJtaXNzaW9uLCBhcHBseSB0aGVcclxuICAgICAqIG1pbiB2YWxpZGF0b3IgdG8gdGhlIGZvcm0gY29ucm9sLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbWluPzogbnVtYmVyO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgdG8gZGlzcGxheSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBpbnB1dFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbGVmdFVuaXRzPzogc3RyaW5nO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgdG8gZGlzcGxheSBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgaW5wdXRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHJpZ2h0VW5pdHM/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSB0aGlzIHdpbGwgdXBkYXRlIHRoZSBmb3JtIG1vZGVsIGFmdGVyIGEgZGVib3VuY2UgYXMgdGhlIHVzZXJcclxuICAgICAqIGludGVyYWN0cyB3aXRoIHRoZSBjb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGF1dG9VcGRhdGVGb3JtTW9kZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0Ym94IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChUZXh0Ym94Q29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHRleHRib3hFbCE6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGludGVybmFsIGZvcm0gbW9kZWwgd2UgdXNlIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHdpdGggZm9ybWF0dGluZ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdGV4dGJveEZvcm1Nb2RlbCE6IFVudHlwZWRGb3JtQ29udHJvbDtcclxuXHJcbiAgICAvKiogRmxhZyB0byB0ZWxsIHRoZSBwYWdlIHdlIGZpbmFsbHkgY29tcHV0ZWQgYSBncmVhdGVyIHRoYW4gemVyb1xyXG4gICAgICogIHdpZHRoIGZvciB1bml0cyAoaWYgYXBwbGljYWJsZSlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1bml0c1dpZHRoQ2FsY3VsYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBGbGFnIHVzZWQgdG8gZmlsdGVyIHRoZSBmb3JtIG1vZGVscyB2YWx1ZSBjaGFuZ2VzIHN1YnNjcmlwdGlvblxyXG4gICAgICogIHRvIHByZXZlbnQgdGhlIHRleHRib3ggbW9kZWwgZnJvbSBiZWluZyBmb3JtYXR0ZWQgYXMgdGhlIGZvcm0gbW9kZWwgaXMgdXBkYXRlZFxyXG4gICAgICogIHByb2dyYW1tYXRpY2FsbHkgd2hlbiB0aGUgdGV4dGJveCBtb2RlbCB1cGRhdGVzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYXV0b1VwZGF0aW5nRm9ybU1vZGVsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICogUmVmZXJlbmNlIHRvIHRoZSB0ZXh0Ym94IGlucHV0IGNvbnRyb2xcclxuICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ3RleHRib3gnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHRleHRib3hJbnB1dCE6IFRleHRib3hDb21wb25lbnQ7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIHZhbGlkYXRpb25NZXNzYWdlU2VydmljZTogVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBmb3JtR3JvdXBIZWxwZXI6IEZvcm1Hcm91cEhlbHBlcixcclxuICAgICAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMlxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIodmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLCBmb3JtR3JvdXBIZWxwZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW5ndWxhciBBZnRlclZpZXdJbml0IGxpZmUtY3ljbGUgaG9va1xyXG4gICAgICogU3Vic2NyaWJlIHRvIHRleHRib3ggbW9kZWwgdmFsdWUgY2hhbmdlcyBpZiB0aGUgaG9zdGluZ1xyXG4gICAgICogcGFnZSBoYXMgb3B0ZWQgaW4gZm9yIHRoaXMgY29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZUZvcm1Nb2RlbCkge1xyXG4gICAgICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCksXHJcbiAgICAgICAgICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtTW9kZWxWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQW5ndWxhciBvbkNoYW5nZXMgbGlmZS1jeWNsZSBob29rXHJcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzIHwgTGlmZS1jeWNsZSBob29rc31cclxuICAgICAqL1xyXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICAvLyBJZiBlaXRoZXIgdW5pdHMgY2hhbmdlIGFmdGVyIHdlJ3ZlIGNhbGN1bGF0ZWQsXHJcbiAgICAgICAgLy8gcmVzZXQgdGhlIGZsYWcgc28gd2UgY2FuIHJlYWN0IGFuZCByZWRyYXdcclxuICAgICAgICBpZiAoY2hhbmdlcy5yaWdodFVuaXRzIHx8IGNoYW5nZXMubGVmdFVuaXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5pdHNXaWR0aENhbGN1bGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXIgb25Jbml0IGxpZmVjeWNsZSBob29rXHJcbiAgICAgKiBJZiB1bml0cyBpcyBkZWZpbmVkLCBzZXQgdGhlIHBvc2l0aW9uIGFuZCBsaXN0ZW4gZm9yIHN0YXR1cyBjaGFuZ2VzIHNvIHdlXHJcbiAgICAgKiBjYW4gdXBkYXRlIHRoZSBwb3NpdGlvbmluZyBvZiB0aGUgdW5pdHMgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGV4dGJveCBmb3JtIG1vZGVsIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBmb3JtIG1vZGVsIGFuZCBzeW5jaHJvbml6ZVxyXG4gICAgICAgIC8vIGRpc2FibGVkIHN0YXRlXHJcbiAgICAgICAgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7IHZhbHVlOiB0aGlzLmZvcm1Nb2RlbC52YWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZm9ybU1vZGVsLmRpc2FibGVkIH0pO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGZvcm0gbW9kZWwncyBlcnJvcnMgd2hlbiB0aGUgdGV4dGJveCBmb3JtIG1vZGVsIHN0YXR1cyBjaGFuZ2VzXHJcbiAgICAgICAgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtTW9kZWwuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0RXJyb3JzKHRoaXMudGV4dGJveEZvcm1Nb2RlbC5lcnJvcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgLy8gU3luY2hyb25pemUgZGlzYWJsZWQgc3RhdGUgYmV0d2VlbiBmb3JtIG1vZGVsIGFuZCBpbnRlcm5hbCB0ZXh0Ym94IGZvcm0gbW9kZWxcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybU1vZGVsLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudGV4dGJveEZvcm1Nb2RlbC5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dGJveEZvcm1Nb2RlbC5lbmFibGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBTZXQgdGV4dGJveCB2YWxpZGF0b3JzXHJcbiAgICAgICAgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnNldFZhbGlkYXRvcnModGhpcy5nZXRWYWxpZGF0b3JzKCkpO1xyXG5cclxuICAgICAgICAvLyBOb3cgdGhhdCB0aGUgdGV4dGJveCBpcyBzZXQgdXAgd2Ugd2lsbCBzZXQgaXQncyB2YWx1ZSB0byB3aGF0ZXZlciB0aGVcclxuICAgICAgICAvLyBmb3JtIG1vZGVsIGhhZCB3aGVuIHdlIGluaXRpYWxpemVkXHJcbiAgICAgICAgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnNldFZhbHVlKHRoaXMuZm9ybWF0RGlzcGxheU51bWJlcih0aGlzLmZvcm1Nb2RlbC52YWx1ZSkpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgZm9ybSBtb2RlbCdzIHZhbHVlIGNoYW5nZXMgcHJvZ3JhbW1hdGljYWxseSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGVcclxuICAgICAgICAvLyB0ZXh0Ym94IGZvcm0gbW9kZWxcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBmaWx0ZXIgb3V0IHdoZW4gd2UgYXJlIHVwZGF0aW5nIGl0IHByb2dyYW1tYXRpY2FsbHkgaWYgdGhlXHJcbiAgICAgICAgICAgIC8vIGhvc3RpbmcgcGFnZSBoYXMgb3B0ZWQgaW50byB0aGUgYXV0byB1cGRhdGluZyBpbnB1dFxyXG4gICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuYXV0b1VwZGF0aW5nRm9ybU1vZGVsKSxcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dGJveEZvcm1Nb2RlbC5zZXRWYWx1ZSh0aGlzLmZvcm1hdERpc3BsYXlOdW1iZXIodmFsdWUpKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSB0ZXh0Ym94IHN0YXR1cyBjaGFuZ2VzIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsZWZ0IHVuaXRzIHBvc2l0aW9uIGJlY2F1c2VcclxuICAgICAgICAvLyB3ZSB3YW50IHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGludmFsaWQgaWNvblxyXG4gICAgICAgIGlmICh0aGlzLmxlZnRVbml0cykge1xyXG4gICAgICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwuc3RhdHVzQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uTGVmdFVuaXRzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbmd1bGFyIGFmdGVyVmlld0NoZWNrZWQgbGlmZWN5Y2xlIGhvb2tcclxuICAgICAqIFNob3cgdGhlIHVuaXRzIGVsZW1lbnQgaWYgdW5pdHMgaXMgZGVmaW5lZC4gUnVucyBhZnRlciBldmVyeSBuZ09uQ2hhbmdlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICgodGhpcy5sZWZ0VW5pdHMgfHwgdGhpcy5yaWdodFVuaXRzKSAmJiAhdGhpcy51bml0c1dpZHRoQ2FsY3VsYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dVbml0cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHRoYXQgYnVpbGRzIGFuZCByZXR1cm5zIGEgVmFsaWRhdG9yRm4gYXJyYXkgdG8gc2V0IG9uIHRoZSBmb3JtIGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xyXG4gICAgICAgIGxldCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChudW1lcmljYm94VmFsaWRhdGlvbih0aGlzLm1pbiwgdGhpcy5tYXgsIHRoaXMuZGVjaW1hbHMsIHRoaXMubWF4UHJlY2lzaW9uRGlnaXRzKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB2YWxpZGF0b3JzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRm9jdXMgb3V0IGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBUZXh0Ym94IGNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25Gb2N1c091dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1Nb2RlbFZhbHVlKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBGdW5jdGlvbiB0byBzZXQgZm9jdXMgb24gYW4gaW5wdXQgcHJvZ3JhbWF0aWNhbGx5IGFmdGVyIHRoZSBwYWdlXHJcbiAgICAqIGhhZCBiZWVuIHJlbmRlcmVkLiAgVGhlIGhpZ2hsaWdodCB0ZXh0IGZsYWcgd2lsbCBzZWxlY3QgdGhlIHRleHRcclxuICAgICogd2l0aGluIHRoZSBpbnB1dCBpZiBwYXNzZWQgaW4gYW5kIHRydWVcclxuICAgICovXHJcbiAgICBwdWJsaWMgc2V0Rm9jdXMoaGlnaGxpZ2h0VGV4dD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRleHRib3hJbnB1dC5zZXRGb2N1cyhoaWdobGlnaHRUZXh0KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIHRoZSB0ZXh0Ym94IG1vZGVsIHVwZGF0ZXMgd2UgbmVlZCB0byBhZGQgc29tZSBkaXNwbGF5IGZvcm1hdHRpbmcgZm9yXHJcbiAgICAgKiBkaXNwbGF5IGluIHRoZSB0ZXh0Ym94IGFuZCBjYXN0IHRoZSB0ZXh0Ym94IG1vZGVsIHRvIGEgbnVtYmVyLiBBdm9pZCB1cGRhdGluZ1xyXG4gICAgICogdGhlIGZvcm0gbW9kZWwgd2hlbiB0aGUgdmFsdWUgZG9lc24ndCBjaGFuZ2UgYmVjYXVzZSBsaXN0ZW5lcnMgd2lsbCBmaXJlIGZvciBubyByZWFzb25cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVGb3JtTW9kZWxWYWx1ZShpc0ZvY3VzT3V0PzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9VcGRhdGVGb3JtTW9kZWwpIHtcclxuICAgICAgICAgICAgLy8gTWFrZSBpdCBzbyB2YWx1ZSBjaGFuZ2VzIG9uIHRoZSBmb3JtIG1vZGVsIGRvIG5vdCBnZXQgdHJpZ2dlcmVkXHJcbiAgICAgICAgICAgIC8vIGFzIHdlIGNoYW5nZSBpdCBwcm9ncmFtbWF0aWNhbGx5LiAgV2UgZG8gbm90IHdhbnQgdGhlIHRleHRib3hcclxuICAgICAgICAgICAgLy8gbW9kZWwgdG8gYmUgdXBkYXRlZCB3aGlsZSB0aGUgdXNlciBpcyBpbiB0aGUgaW5wdXRcclxuICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRpbmdGb3JtTW9kZWwgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWxpZCB8fCB0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IG91dCB3aXRoIG51bGwgZm9yIHRoZSBudW1iZXIsIGlmIHRoZSB0ZXh0Ym94IHZhbHVlIGlzIG5vdCBhIG51bWJlclxyXG4gICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBjbGVhciBpdCBvdXQgb24gZm9jdXMgb3V0XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHRleHRib3ggbW9kZWwgaXMgYSBudW1iZXIgYmVmb3JlIHRyeWluZyB0byB1cGRhdGUgdGhlXHJcbiAgICAgICAgICAgICAgICAvLyBmb3JtIG1vZGVsIHZhbHVlIHdpdGggaXRcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUgJiYgIWlzTmFOKHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBPdXIgdmFsdWUgaXMgYSBsZWdpdCBudW1iZXIsIG9uIGZvY3VzIG91dCB3ZSB3aWxsIGZvcm1hdCBpdCBpZiBuZWVkZWRcclxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBOdW1iZXIodGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2tpbmcgaWYgdGhlIHZhbHVlIGhhcyBhY3R1YWxseSBjaGFuZ2VkLCBpZiBub3QgZG9uJ3Qgc2V0IHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIHRvIGF2b2lkIGV4dHJhIGxpc3RlbmVyIGNhbGxzXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybU1vZGVsLnZhbHVlICE9PSBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUobnVtYmVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRleHRib3ggbW9kZWwgaXMgbm90IGEgbnVtYmVyLCBjaGVjayB0byBzZWUgaWYgb3VyIGZvcm0gbW9kZWwgaGFzIGEgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaWYgc28gY2xlYXIgaXQgb3V0XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybU1vZGVsLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3aWxsIHVwZGF0ZSB0aGUgdGV4dGJveCBmb3JtIG1vZGVsIHdpdGggZm9ybWF0dGluZyBpZiBuZWVkZWRcclxuICAgICAgICAgICAgICAgIC8vIG9uIEZvY3VzIG91dC4gIFRoaXMgd29ya3Mgd2VsbCBmb3IgdGhlIHVzZXIgd2hldGhlciB0aGUgYXV0byB1cGRhdGVcclxuICAgICAgICAgICAgICAgIC8vIGlzIG9wdGVkIGluIG9yIG5vdFxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRm9jdXNPdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRib3hGb3JtTW9kZWwuc2V0VmFsdWUodGhpcy5mb3JtYXREaXNwbGF5TnVtYmVyKG51bWJlcikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgLy8gTm90aGluZyB0byBkaXNwbGF5LCBqdXN0IGVuc3VyaW5nIHdlIHJlc2V0IG91ciBmbGFnIHRoYXQgZmlsdGVyc1xyXG4gICAgICAgICAgICAvLyB0aGUgZm9ybSBtb2RlbCB2YWx1ZSBjaGFuZ2VzXHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRpbmdGb3JtTW9kZWwgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb252ZXJ0IGEgbnVtYmVyIHZhbHVlIHRvIHRoZSBmb3JtbWF0ZWQgZGlzcGxheSBzdHJpbmcuIElmIHRoZXJlIGlzIG5vIHZhbHVlXHJcbiAgICAgKiByZXR1cm4gbnVsbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZvcm1hdERpc3BsYXlOdW1iZXIodmFsdWU6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcclxuICAgICAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCBjYWxsaW5nIHRvRml4ZWQgaWYgdGhlIHZhbHVlIGlzbid0IGEgbnVtYmVyLiAgVGhpcyBpcyBwb3NzaWJsZVxyXG4gICAgICAgICAgICAvLyBpZiBwYXRjaGluZyBhIHZhbHVlIGZyb20gb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50IGFzIHlvdSBkb24ndCBoYXZlXHJcbiAgICAgICAgICAgIC8vIHR5cGUgY2hlY2tpbmcgdGhlcmVcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1ByZWNpc2lvbiAmJiB0aGlzLmRlY2ltYWxzICYmICFpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b0ZpeGVkKHRoaXMuZGVjaW1hbHMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiB0aGUgdW5pdHMgZWxlbWVudCBhbmQgc2V0IHRoZSBwYWRkaW5nIGluIHRoZSB0ZXh0Ym94IGlucHV0IGJhc2VkXHJcbiAgICAgKiBvbiB0aGUgd2lkdGggb2YgdGhlIHVuaXRzIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwb3NpdGlvblJpZ2h0VW5pdHMoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHVuaXRzRWwgPSB0aGlzLnRleHRib3hFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy51bml0cy1yaWdodCcpO1xyXG4gICAgICAgIGxldCBpbnB1dEVsID0gdGhpcy50ZXh0Ym94RWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xyXG5cclxuICAgICAgICBpZiAodW5pdHNFbCAmJiBpbnB1dEVsKSB7XHJcbiAgICAgICAgICAgIGxldCB1bml0c1dpZHRoID0gdW5pdHNFbC5vZmZzZXRXaWR0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICh1bml0c1dpZHRoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51bml0c1dpZHRoQ2FsY3VsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBwYWRkaW5nID0gdW5pdHNXaWR0aDtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbnB1dEVsLCAncGFkZGluZy1yaWdodCcsIHBhZGRpbmcgKyAncHgnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgcG9zaXRpb25MZWZ0VW5pdHMoKSB7XHJcbiAgICAgICAgbGV0IHVuaXRzRWwgPSB0aGlzLnRleHRib3hFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy51bml0cy1sZWZ0Jyk7XHJcbiAgICAgICAgbGV0IGlucHV0RWwgPSB0aGlzLnRleHRib3hFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XHJcblxyXG4gICAgICAgIGlmICh1bml0c0VsICYmIGlucHV0RWwpIHtcclxuICAgICAgICAgICAgbGV0IHVuaXRzV2lkdGggPSB1bml0c0VsLm9mZnNldFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHVuaXRzV2lkdGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVuaXRzV2lkdGhDYWxjdWxhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHBhZGRpbmcgPSB1bml0c1dpZHRoO1xyXG4gICAgICAgICAgICBsZXQgbGVmdFBvc2l0aW9uID0gZ2V0Q29tcHV0ZWRTdHlsZSh1bml0c0VsKS5sZWZ0O1xyXG4gICAgICAgICAgICBpZiAobGVmdFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nICs9IHBhcnNlSW50KGxlZnRQb3NpdGlvbi5yZXBsYWNlKCdweCcsICcnKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbnB1dEVsLCAncGFkZGluZy1sZWZ0JywgcGFkZGluZyArICdweCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhbmQgYXBwZW5kIHRoZSB1bml0cyBlbGVtZW50IHRvIHRoZSB0ZXh0Ym94IGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzaG93VW5pdHMoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGlucHV0V3JhcHBlciA9IHRoaXMudGV4dGJveEVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmlucHV0LXdyYXBwZXInKTtcclxuXHJcbiAgICAgICAgaWYgKGlucHV0V3JhcHBlcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5sZWZ0VW5pdHMpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1bml0c0VsID0gdGhpcy50ZXh0Ym94RWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudW5pdHMtbGVmdCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaXRzRWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHVuaXRzRWwsICdpbm5lckhUTUwnLCB0aGlzLmxlZnRVbml0cyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoaW5wdXRXcmFwcGVyLCB0aGlzLm1ha2VVbml0RWxlbWVudCgnbGVmdCcsIHRoaXMubGVmdFVuaXRzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uTGVmdFVuaXRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJpZ2h0VW5pdHMpIHtcclxuICAgICAgICAgICAgICAgIGxldCB1bml0c0VsID0gdGhpcy50ZXh0Ym94RWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudW5pdHMtcmlnaHQnKTtcclxuICAgICAgICAgICAgICAgIGlmICh1bml0c0VsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh1bml0c0VsLCAnaW5uZXJIVE1MJywgdGhpcy5yaWdodFVuaXRzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChpbnB1dFdyYXBwZXIsIHRoaXMubWFrZVVuaXRFbGVtZW50KCdyaWdodCcsIHRoaXMucmlnaHRVbml0cykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvblJpZ2h0VW5pdHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1ha2VVbml0RWxlbWVudChzaWRlOiAnbGVmdCcgfCAncmlnaHQnLCB0ZXh0OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGxldCB1bml0c0VsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodW5pdHNFbCwgJ2NsYXNzJywgYHVuaXRzIHVuaXRzLSR7c2lkZX1gKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh1bml0c0VsLCAnaWQnLCBgJHt0aGlzLmlkfV91bml0c2ApO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHVuaXRzRWwsICdzdHlsZScsICdwb2ludGVyLWV2ZW50czogbm9uZScpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodW5pdHNFbCwgJ2lubmVySFRNTCcsIHRleHQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdW5pdHNFbDtcclxuICAgIH1cclxufSIsIjxkaXYgY2xhc3M9XCJjb250cm9sIGNvbnRyb2wtbGFiZWwte3tsYWJlbFBvc2l0aW9ufX1cIlxyXG4gICAgIFtjbGFzcy5pbnZhbGlkXT1cImZvcm1Nb2RlbD8uaW52YWxpZCAmJiAoZm9ybU1vZGVsPy50b3VjaGVkKVwiPlxyXG4gICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhYmVsICYmICFoZWxwUG9wb3ZlclwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaGFyZWRMYWJlbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgPGRpdiAqbmdJZj1cImxhYmVsICYmIGhlbHBQb3BvdmVyXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNoYXJlZExhYmVsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPGVjLWhlbHAtcG9wb3ZlciBpZD1cInt7aWR9fV9oZWxwUG9wb3ZlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LW4yIG14LW4xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7e2hlbHBQb3BvdmVyIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICAgICAgICA8L2VjLWhlbHAtcG9wb3Zlcj5cclxuICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgIDxuZy10ZW1wbGF0ZSAjc2hhcmVkTGFiZWw+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIG5nUHJlc2VydmVXaGl0ZXNwYWNlcz5cclxuICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCAmJiBmb3JtTW9kZWw/LnRvdWNoZWQgJiYgZm9ybU1vZGVsPy5pbnZhbGlkXCI+e3t2YWxpZGF0aW9uRXJyb3JzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICA8IS0tIFNldHRpbmcgdGhlIG1heGxlbmd0aCB0byAxMyB0byBjb21iYXQgdGhlIHVzZXIgZnJvbSBlbnRlcmluZyB0b28gbGFyZ2Ugb2YgYSBudW1iZXJcclxuICAgICAgICAgZm9yIGphdmFzY3JpcHQgdG8gc3VwcG9ydC4gIElmIHRoZSB1c2VyIGVudGVycyBhbGwgMTMgY2hhcmFjdGVycyBhcyBudW1iZXJzIGFuZCB3ZSBoYXZlIHNob3dQcmVjaXNpb24gc2V0LCBhZGRpbmcgdGhlXHJcbiAgICAgICAgIGRlY2ltYWwgYW5kIHRoZSBlbXB0eSB6ZXJvIGNoYXJhY3RlcnMgd2lsbCBnZXQgdGhlbSBpbiBhIHNpdHVhdGlvbiB3aGVyZSB0byBlZGl0IGl0IHRoZXkgbXVzdCByZW1vdmUgY2hhcmFjdGVyc1xyXG4gICAgICAgICBhcyB3ZSB3b3VsZCBwdXNoIHRoZW0gcGFzdCB0aGUgbGltaXQgLS0+XHJcbiAgICAgICA8ZWMtdGV4dGJveCBbaWRdPVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgI3RleHRib3hcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1pbnB1dCBtYi0wXCJcclxuICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIm1heFByZWNpc2lvbkRpZ2l0cyA/IG1heFByZWNpc2lvbkRpZ2l0cyArIDMgOiAxM1wiXHJcbiAgICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXHJcbiAgICAgICAgICAgICAgICAgICBbZm9ybU1vZGVsXT1cInRleHRib3hGb3JtTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCI+XHJcbiAgICAgICA8L2VjLXRleHRib3g+XHJcbjwvZGl2PiJdfQ==
@@ -63,10 +63,10 @@ export class RadioButtonComponent extends FormControlBase {
63
63
  }
64
64
  }
65
65
  RadioButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RadioButtonComponent, deps: [{ token: i1.ValidationMessageService }, { token: i2.FormGroupHelper }], target: i0.ɵɵFactoryTarget.Component });
66
- RadioButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RadioButtonComponent, selector: "ec-radiobutton", inputs: { type: "type", options: "options", direction: "direction", name: "name" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["radioInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"control\"\r\n [class.control-label-bottom]=\"labelPosition === 'bottom'\">\r\n <label *ngIf=\"label && !helpPopover\"\r\n ngPreserveWhitespaces>\r\n <span>{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length > 0 && formModel.touched && formModel.invalid\">{{validationErrors |\r\n translate}}</span>\r\n </label>\r\n\r\n <div *ngIf=\"label && helpPopover\"\r\n class=\"d-flex align-items-center\">\r\n <label ngPreserveWhitespaces>\r\n <span>{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length > 0 && formModel.touched && formModel.invalid\">{{validationErrors |\r\n translate}}</span>\r\n </label>\r\n\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n class=\"my-n2 mx-n1\"\r\n text=\"{{helpPopover | translate}}\">\r\n </ec-help-popover>\r\n </div>\r\n\r\n <div class=\"radio-group {{'toggle-options-' + options.length}}\"\r\n [ngClass]=\"currentClasses\"\r\n [class.is-disabled]=\"formModel.disabled\"\r\n [class.is-readonly]=\"readonly\">\r\n\r\n <!-- RadioButton type=\"toggle\"-->\r\n <!-- There are two ng-templates here due to the fact you can't have ngIf and ngFor on the same element -->\r\n <ng-container *ngIf=\"type === 'toggle'\">\r\n <ng-container *ngFor=\"let option of options; index as i; first as isFirst\">\r\n <!-- The input has two name attributes set, one is for the form model and one is for the broswer. With one set\r\n the tabbing did not work, and with the other the controls were all linked together. They both need set\r\n for the best of both worlds -->\r\n <input [attr.id]=\"inputId + i.toString()\"\r\n [formControl]=\"formModel\"\r\n type=\"radio\"\r\n tabindex=\"{{tabindex}}\"\r\n [value]=\"option.value\"\r\n #radioInput\r\n name=\"{{name}}\"\r\n attr.name=\"{{name}}\"\r\n [attr.cdkFocusInitial]=\"(autofocus && isFirst) || null\">\r\n <label [attr.for]=\"inputId + i.toString()\"\r\n title=\"{{ option.tooltip | translate}}\">\r\n <i class=\"ec-icon {{option.icon}}\"\r\n *ngIf=\"option.icon\"></i>\r\n <span id=\"{{inputId}}_label{{i.toString()}}\"\r\n *ngIf=\"option.label\">{{option.label | translate}}</span>\r\n </label>\r\n </ng-container>\r\n <a>\r\n <div class=\"toggle-handle\"></div>\r\n </a>\r\n <div class=\"toggle-focused\"></div>\r\n </ng-container>\r\n\r\n <!-- RadioButton type=\"radio\"-->\r\n <!-- There are two ng-templates here due to the fact you can't have ngIf and ngFor on the same element -->\r\n <ng-container *ngIf=\"type === 'radio'\">\r\n <ng-container *ngFor=\"let option of options; index as i; first as isFirst\">\r\n <label class='radio-button'\r\n title=\"{{ option.tooltip | translate}}\">\r\n <!-- The input has two name attributes set, one is for the form model and one is for the broswer. With one set\r\n the tabbing did not work, and with the other the controls were all linked together. They both need set\r\n for the best of both worlds -->\r\n <input [attr.id]=\"inputId + i.toString()\"\r\n class=\"input\"\r\n [formControl]=\"formModel\"\r\n type=\"radio\"\r\n value=\"{{option.value}}\"\r\n #radioInput\r\n tabindex=\"{{tabindex}}\"\r\n name=\"{{name}}\"\r\n attr.name=\"{{name}}\"\r\n [attr.cdkFocusInitial]=\"(autofocus && isFirst) || null\">\r\n <span class=\"indicator\"></span>\r\n <span id=\"{{inputId}}_label{{i.toString()}}\"\r\n class=\"label\"\r\n *ngIf=\"option.label\"\r\n [innerHtml]=\"option.label | translate\"></span>\r\n </label>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}:host(.w-auto){width:auto}.control>label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}.radio-group{display:flex;flex-wrap:wrap}.radio-group-column{flex-direction:column}.radio-group-column .radio-button{margin-right:auto}.radio-group.is-disabled .radio-button{cursor:default}.radio-group.is-readonly .radio-button{pointer-events:none}.radio-group.is-readonly .radio-button .input{opacity:0}.radio-group.is-readonly .radio-button .indicator{background-color:var(--ec-form-control-background-color-readonly);border-color:var(--ec-form-control-border-color-readonly)}.radio-group.is-readonly .radio-button .label,.radio-group.is-readonly .radio-button .indicator{opacity:1;color:var(--ec-form-control-color)}.radio-group.is-readonly.radio-group-toggle{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}.radio-group.is-readonly.radio-group-toggle a,.radio-group.is-readonly.radio-group-toggle input:not(:checked),.radio-group.is-readonly.radio-group-toggle input:not(:checked)+label{display:none}.radio-group.is-readonly.radio-group-toggle input:checked+label{color:inherit;justify-content:flex-start}.radio-button{cursor:pointer;display:inline-flex;margin-bottom:0;position:relative}.radio-button:not(:last-child){margin-right:1rem}.input{margin-top:.5rem;opacity:0;position:absolute;z-index:-1}.input:not(:checked)+.indicator{color:var(--ec-form-control-border-color)}.input:not(:checked)+.indicator:before{display:none}.input:focus+.indicator{color:var(--ec-color-interactive);box-shadow:var(--ec-form-control-box-shadow-focus);border-color:var(--ec-form-control-border-color-focus)}.input:disabled+.indicator{color:var(--ec-form-control-color-disabled);background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}.input:disabled~.label{color:var(--ec-form-control-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}.indicator{background-color:var(--ec-form-control-background-color);background-clip:padding-box;border:1px solid currentColor;color:var(--ec-color-interactive);margin-top:.5rem;flex:none;pointer-events:none;display:inline-flex;align-items:center;justify-content:center;height:1em;width:1em;border-radius:50%}.indicator:before{background-color:currentColor;content:\"\";display:block;width:.5em;height:.5em;border-radius:50%}.label{line-height:1.25rem;padding:.375rem 0;margin-left:.5rem;min-height:2rem;height:auto}.radio-group-toggle{font-size:var(--ec-form-control-font-size);background-color:var(--ec-border-color);border-radius:var(--ec-border-radius);border:1px solid var(--ec-border-color);min-height:2em;position:relative;color:var(--ec-color-secondary-dark);display:flex}.radio-group-toggle input{position:absolute;z-index:-1;opacity:0}.radio-group-toggle input:checked+label{color:var(--ec-color-interactive)}.radio-group-toggle input:checked:last-of-type~a{transform:translate(100%)}.radio-group-toggle input:focus~.toggle-focused{display:block}.radio-group-toggle .toggle-focused{position:absolute;inset:0;box-shadow:var(--ec-form-control-box-shadow-focus);border-radius:var(--ec-form-control-border-radius);display:none}.radio-group-toggle label{align-items:center;cursor:pointer;display:flex;flex:1 1 0%;justify-content:center;line-height:1.1em;margin-bottom:0;padding:.375rem .5rem;position:relative;text-align:center;transition:color .3s ease;z-index:2}.radio-group-toggle label .ec-icon{color:inherit}.radio-group-toggle a{border:.1875rem solid transparent;border-radius:calc(var(--ec-form-control-border-radius) * .75);display:block;height:100%;left:0;position:absolute;top:0;transition:transform .25s ease;width:50%;z-index:1}.radio-group-toggle a .toggle-handle{background-color:var(--ec-form-control-background-color);border-radius:calc(var(--ec-form-control-border-radius) * .75);height:100%}.radio-group-toggle.is-disabled{opacity:var(--ec-form-control-opacity-disabled);color:var(--ec-form-control-color-disabled)}.radio-group-toggle.is-disabled label{color:inherit!important;cursor:default}.toggle-options-3 a{width:33.3333333333%}.toggle-options-3 input:checked:last-of-type~a{transform:translate(200%)}.toggle-options-3 input:checked:nth-of-type(2)~a{transform:translate(100%)}.toggle-options-4 a{width:25%}.toggle-options-4 input:checked:last-of-type~a{transform:translate(300%)}.toggle-options-4 input:checked:nth-of-type(3)~a{transform:translate(200%)}.toggle-options-4 input:checked:nth-of-type(2)~a{transform:translate(100%)}.toggle-options-5 a{width:20%}.toggle-options-5 input:checked:last-of-type~a{transform:translate(400%)}.toggle-options-5 input:checked:nth-of-type(4)~a{transform:translate(300%)}.toggle-options-5 input:checked:nth-of-type(3)~a{transform:translate(200%)}.toggle-options-5 input:checked:nth-of-type(2)~a{transform:translate(100%)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.HelpPopoverComponent, selector: "ec-help-popover", inputs: ["id", "text", "contentPosition", "maxWidth"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
66
+ RadioButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: RadioButtonComponent, selector: "ec-radiobutton", inputs: { type: "type", options: "options", direction: "direction", name: "name" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["radioInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"control\"\r\n [class.control-label-bottom]=\"labelPosition === 'bottom'\">\r\n <ng-container *ngIf=\"label && !helpPopover\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n </ng-container>\r\n\r\n <div *ngIf=\"label && helpPopover\"\r\n class=\"d-flex align-items-center\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n class=\"my-n2 mx-n1\"\r\n text=\"{{helpPopover | translate}}\">\r\n </ec-help-popover>\r\n </div>\r\n\r\n <ng-template #sharedLabel>\r\n <label class=\"control-label\" ngPreserveWhitespaces>\r\n <span *ngIf=\"label\">{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length > 0 && formModel.touched && formModel.invalid\">{{validationErrors |\r\n translate}}</span>\r\n </label>\r\n </ng-template>\r\n \r\n <div class=\"radio-group {{'toggle-options-' + options.length}}\"\r\n [ngClass]=\"currentClasses\"\r\n [class.is-disabled]=\"formModel.disabled\"\r\n [class.is-readonly]=\"readonly\">\r\n\r\n <!-- RadioButton type=\"toggle\"-->\r\n <!-- There are two ng-templates here due to the fact you can't have ngIf and ngFor on the same element -->\r\n <ng-container *ngIf=\"type === 'toggle'\">\r\n <ng-container *ngFor=\"let option of options; index as i; first as isFirst\">\r\n <!-- The input has two name attributes set, one is for the form model and one is for the broswer. With one set\r\n the tabbing did not work, and with the other the controls were all linked together. They both need set\r\n for the best of both worlds -->\r\n <input [attr.id]=\"inputId + i.toString()\"\r\n [formControl]=\"formModel\"\r\n type=\"radio\"\r\n tabindex=\"{{tabindex}}\"\r\n [value]=\"option.value\"\r\n #radioInput\r\n name=\"{{name}}\"\r\n attr.name=\"{{name}}\"\r\n [attr.cdkFocusInitial]=\"(autofocus && isFirst) || null\">\r\n <label [attr.for]=\"inputId + i.toString()\"\r\n title=\"{{ option.tooltip | translate}}\">\r\n <i class=\"ec-icon {{option.icon}}\"\r\n *ngIf=\"option.icon\"></i>\r\n <span id=\"{{inputId}}_label{{i.toString()}}\"\r\n *ngIf=\"option.label\">{{option.label | translate}}</span>\r\n </label>\r\n </ng-container>\r\n <a>\r\n <div class=\"toggle-handle\"></div>\r\n </a>\r\n <div class=\"toggle-focused\"></div>\r\n </ng-container>\r\n\r\n <!-- RadioButton type=\"radio\"-->\r\n <!-- There are two ng-templates here due to the fact you can't have ngIf and ngFor on the same element -->\r\n <ng-container *ngIf=\"type === 'radio'\">\r\n <ng-container *ngFor=\"let option of options; index as i; first as isFirst\">\r\n <label class='radio-button'\r\n title=\"{{ option.tooltip | translate}}\">\r\n <!-- The input has two name attributes set, one is for the form model and one is for the broswer. With one set\r\n the tabbing did not work, and with the other the controls were all linked together. They both need set\r\n for the best of both worlds -->\r\n <input [attr.id]=\"inputId + i.toString()\"\r\n class=\"input\"\r\n [formControl]=\"formModel\"\r\n type=\"radio\"\r\n value=\"{{option.value}}\"\r\n #radioInput\r\n tabindex=\"{{tabindex}}\"\r\n name=\"{{name}}\"\r\n attr.name=\"{{name}}\"\r\n [attr.cdkFocusInitial]=\"(autofocus && isFirst) || null\">\r\n <span class=\"indicator\"></span>\r\n <span id=\"{{inputId}}_label{{i.toString()}}\"\r\n class=\"label\"\r\n *ngIf=\"option.label\"\r\n [innerHtml]=\"option.label | translate\"></span>\r\n </label>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}:host(.w-auto){width:auto}.control-label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}.radio-group{display:flex;flex-wrap:wrap}.radio-group-column{flex-direction:column}.radio-group-column .radio-button{margin-right:auto}.radio-group.is-disabled .radio-button{cursor:default}.radio-group.is-readonly .radio-button{pointer-events:none}.radio-group.is-readonly .radio-button .input{opacity:0}.radio-group.is-readonly .radio-button .indicator{background-color:var(--ec-form-control-background-color-readonly);border-color:var(--ec-form-control-border-color-readonly)}.radio-group.is-readonly .radio-button .label,.radio-group.is-readonly .radio-button .indicator{opacity:1;color:var(--ec-form-control-color)}.radio-group.is-readonly.radio-group-toggle{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}.radio-group.is-readonly.radio-group-toggle a,.radio-group.is-readonly.radio-group-toggle input:not(:checked),.radio-group.is-readonly.radio-group-toggle input:not(:checked)+label{display:none}.radio-group.is-readonly.radio-group-toggle input:checked+label{color:inherit;justify-content:flex-start}.radio-button{cursor:pointer;display:inline-flex;margin-bottom:0;position:relative}.radio-button:not(:last-child){margin-right:1rem}.input{margin-top:.5rem;opacity:0;position:absolute;z-index:-1}.input:not(:checked)+.indicator{color:var(--ec-form-control-border-color)}.input:not(:checked)+.indicator:before{display:none}.input:focus+.indicator{color:var(--ec-color-interactive);box-shadow:var(--ec-form-control-box-shadow-focus);border-color:var(--ec-form-control-border-color-focus)}.input:disabled+.indicator{color:var(--ec-form-control-color-disabled);background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}.input:disabled~.label{color:var(--ec-form-control-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}.indicator{background-color:var(--ec-form-control-background-color);background-clip:padding-box;border:1px solid currentColor;color:var(--ec-color-interactive);margin-top:.5rem;flex:none;pointer-events:none;display:inline-flex;align-items:center;justify-content:center;height:1em;width:1em;border-radius:50%}.indicator:before{background-color:currentColor;content:\"\";display:block;width:.5em;height:.5em;border-radius:50%}.label{line-height:1.25rem;padding:.375rem 0;margin-left:.5rem;min-height:2rem;height:auto}.radio-group-toggle{font-size:var(--ec-form-control-font-size);background-color:var(--ec-border-color);border-radius:var(--ec-border-radius);border:1px solid var(--ec-border-color);min-height:2em;position:relative;color:var(--ec-color-secondary-dark);display:flex}.radio-group-toggle input{position:absolute;z-index:-1;opacity:0}.radio-group-toggle input:checked+label{color:var(--ec-color-interactive)}.radio-group-toggle input:checked:last-of-type~a{transform:translate(100%)}.radio-group-toggle input:focus~.toggle-focused{display:block}.radio-group-toggle .toggle-focused{position:absolute;inset:0;box-shadow:var(--ec-form-control-box-shadow-focus);border-radius:var(--ec-form-control-border-radius);display:none}.radio-group-toggle label{align-items:center;cursor:pointer;display:flex;flex:1 1 0%;justify-content:center;line-height:1.1em;margin-bottom:0;padding:.375rem .5rem;position:relative;text-align:center;transition:color .3s ease;z-index:2}.radio-group-toggle label .ec-icon{color:inherit}.radio-group-toggle a{border:.1875rem solid transparent;border-radius:calc(var(--ec-form-control-border-radius) * .75);display:block;height:100%;left:0;position:absolute;top:0;transition:transform .25s ease;width:50%;z-index:1}.radio-group-toggle a .toggle-handle{background-color:var(--ec-form-control-background-color);border-radius:calc(var(--ec-form-control-border-radius) * .75);height:100%}.radio-group-toggle.is-disabled{opacity:var(--ec-form-control-opacity-disabled);color:var(--ec-form-control-color-disabled)}.radio-group-toggle.is-disabled label{color:inherit!important;cursor:default}.toggle-options-3 a{width:33.3333333333%}.toggle-options-3 input:checked:last-of-type~a{transform:translate(200%)}.toggle-options-3 input:checked:nth-of-type(2)~a{transform:translate(100%)}.toggle-options-4 a{width:25%}.toggle-options-4 input:checked:last-of-type~a{transform:translate(300%)}.toggle-options-4 input:checked:nth-of-type(3)~a{transform:translate(200%)}.toggle-options-4 input:checked:nth-of-type(2)~a{transform:translate(100%)}.toggle-options-5 a{width:20%}.toggle-options-5 input:checked:last-of-type~a{transform:translate(400%)}.toggle-options-5 input:checked:nth-of-type(4)~a{transform:translate(300%)}.toggle-options-5 input:checked:nth-of-type(3)~a{transform:translate(200%)}.toggle-options-5 input:checked:nth-of-type(2)~a{transform:translate(100%)}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.HelpPopoverComponent, selector: "ec-help-popover", inputs: ["id", "text", "contentPosition", "maxWidth"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
67
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RadioButtonComponent, decorators: [{
68
68
  type: Component,
69
- args: [{ selector: 'ec-radiobutton', template: "<div class=\"control\"\r\n [class.control-label-bottom]=\"labelPosition === 'bottom'\">\r\n <label *ngIf=\"label && !helpPopover\"\r\n ngPreserveWhitespaces>\r\n <span>{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length > 0 && formModel.touched && formModel.invalid\">{{validationErrors |\r\n translate}}</span>\r\n </label>\r\n\r\n <div *ngIf=\"label && helpPopover\"\r\n class=\"d-flex align-items-center\">\r\n <label ngPreserveWhitespaces>\r\n <span>{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length > 0 && formModel.touched && formModel.invalid\">{{validationErrors |\r\n translate}}</span>\r\n </label>\r\n\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n class=\"my-n2 mx-n1\"\r\n text=\"{{helpPopover | translate}}\">\r\n </ec-help-popover>\r\n </div>\r\n\r\n <div class=\"radio-group {{'toggle-options-' + options.length}}\"\r\n [ngClass]=\"currentClasses\"\r\n [class.is-disabled]=\"formModel.disabled\"\r\n [class.is-readonly]=\"readonly\">\r\n\r\n <!-- RadioButton type=\"toggle\"-->\r\n <!-- There are two ng-templates here due to the fact you can't have ngIf and ngFor on the same element -->\r\n <ng-container *ngIf=\"type === 'toggle'\">\r\n <ng-container *ngFor=\"let option of options; index as i; first as isFirst\">\r\n <!-- The input has two name attributes set, one is for the form model and one is for the broswer. With one set\r\n the tabbing did not work, and with the other the controls were all linked together. They both need set\r\n for the best of both worlds -->\r\n <input [attr.id]=\"inputId + i.toString()\"\r\n [formControl]=\"formModel\"\r\n type=\"radio\"\r\n tabindex=\"{{tabindex}}\"\r\n [value]=\"option.value\"\r\n #radioInput\r\n name=\"{{name}}\"\r\n attr.name=\"{{name}}\"\r\n [attr.cdkFocusInitial]=\"(autofocus && isFirst) || null\">\r\n <label [attr.for]=\"inputId + i.toString()\"\r\n title=\"{{ option.tooltip | translate}}\">\r\n <i class=\"ec-icon {{option.icon}}\"\r\n *ngIf=\"option.icon\"></i>\r\n <span id=\"{{inputId}}_label{{i.toString()}}\"\r\n *ngIf=\"option.label\">{{option.label | translate}}</span>\r\n </label>\r\n </ng-container>\r\n <a>\r\n <div class=\"toggle-handle\"></div>\r\n </a>\r\n <div class=\"toggle-focused\"></div>\r\n </ng-container>\r\n\r\n <!-- RadioButton type=\"radio\"-->\r\n <!-- There are two ng-templates here due to the fact you can't have ngIf and ngFor on the same element -->\r\n <ng-container *ngIf=\"type === 'radio'\">\r\n <ng-container *ngFor=\"let option of options; index as i; first as isFirst\">\r\n <label class='radio-button'\r\n title=\"{{ option.tooltip | translate}}\">\r\n <!-- The input has two name attributes set, one is for the form model and one is for the broswer. With one set\r\n the tabbing did not work, and with the other the controls were all linked together. They both need set\r\n for the best of both worlds -->\r\n <input [attr.id]=\"inputId + i.toString()\"\r\n class=\"input\"\r\n [formControl]=\"formModel\"\r\n type=\"radio\"\r\n value=\"{{option.value}}\"\r\n #radioInput\r\n tabindex=\"{{tabindex}}\"\r\n name=\"{{name}}\"\r\n attr.name=\"{{name}}\"\r\n [attr.cdkFocusInitial]=\"(autofocus && isFirst) || null\">\r\n <span class=\"indicator\"></span>\r\n <span id=\"{{inputId}}_label{{i.toString()}}\"\r\n class=\"label\"\r\n *ngIf=\"option.label\"\r\n [innerHtml]=\"option.label | translate\"></span>\r\n </label>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}:host(.w-auto){width:auto}.control>label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}.radio-group{display:flex;flex-wrap:wrap}.radio-group-column{flex-direction:column}.radio-group-column .radio-button{margin-right:auto}.radio-group.is-disabled .radio-button{cursor:default}.radio-group.is-readonly .radio-button{pointer-events:none}.radio-group.is-readonly .radio-button .input{opacity:0}.radio-group.is-readonly .radio-button .indicator{background-color:var(--ec-form-control-background-color-readonly);border-color:var(--ec-form-control-border-color-readonly)}.radio-group.is-readonly .radio-button .label,.radio-group.is-readonly .radio-button .indicator{opacity:1;color:var(--ec-form-control-color)}.radio-group.is-readonly.radio-group-toggle{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}.radio-group.is-readonly.radio-group-toggle a,.radio-group.is-readonly.radio-group-toggle input:not(:checked),.radio-group.is-readonly.radio-group-toggle input:not(:checked)+label{display:none}.radio-group.is-readonly.radio-group-toggle input:checked+label{color:inherit;justify-content:flex-start}.radio-button{cursor:pointer;display:inline-flex;margin-bottom:0;position:relative}.radio-button:not(:last-child){margin-right:1rem}.input{margin-top:.5rem;opacity:0;position:absolute;z-index:-1}.input:not(:checked)+.indicator{color:var(--ec-form-control-border-color)}.input:not(:checked)+.indicator:before{display:none}.input:focus+.indicator{color:var(--ec-color-interactive);box-shadow:var(--ec-form-control-box-shadow-focus);border-color:var(--ec-form-control-border-color-focus)}.input:disabled+.indicator{color:var(--ec-form-control-color-disabled);background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}.input:disabled~.label{color:var(--ec-form-control-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}.indicator{background-color:var(--ec-form-control-background-color);background-clip:padding-box;border:1px solid currentColor;color:var(--ec-color-interactive);margin-top:.5rem;flex:none;pointer-events:none;display:inline-flex;align-items:center;justify-content:center;height:1em;width:1em;border-radius:50%}.indicator:before{background-color:currentColor;content:\"\";display:block;width:.5em;height:.5em;border-radius:50%}.label{line-height:1.25rem;padding:.375rem 0;margin-left:.5rem;min-height:2rem;height:auto}.radio-group-toggle{font-size:var(--ec-form-control-font-size);background-color:var(--ec-border-color);border-radius:var(--ec-border-radius);border:1px solid var(--ec-border-color);min-height:2em;position:relative;color:var(--ec-color-secondary-dark);display:flex}.radio-group-toggle input{position:absolute;z-index:-1;opacity:0}.radio-group-toggle input:checked+label{color:var(--ec-color-interactive)}.radio-group-toggle input:checked:last-of-type~a{transform:translate(100%)}.radio-group-toggle input:focus~.toggle-focused{display:block}.radio-group-toggle .toggle-focused{position:absolute;inset:0;box-shadow:var(--ec-form-control-box-shadow-focus);border-radius:var(--ec-form-control-border-radius);display:none}.radio-group-toggle label{align-items:center;cursor:pointer;display:flex;flex:1 1 0%;justify-content:center;line-height:1.1em;margin-bottom:0;padding:.375rem .5rem;position:relative;text-align:center;transition:color .3s ease;z-index:2}.radio-group-toggle label .ec-icon{color:inherit}.radio-group-toggle a{border:.1875rem solid transparent;border-radius:calc(var(--ec-form-control-border-radius) * .75);display:block;height:100%;left:0;position:absolute;top:0;transition:transform .25s ease;width:50%;z-index:1}.radio-group-toggle a .toggle-handle{background-color:var(--ec-form-control-background-color);border-radius:calc(var(--ec-form-control-border-radius) * .75);height:100%}.radio-group-toggle.is-disabled{opacity:var(--ec-form-control-opacity-disabled);color:var(--ec-form-control-color-disabled)}.radio-group-toggle.is-disabled label{color:inherit!important;cursor:default}.toggle-options-3 a{width:33.3333333333%}.toggle-options-3 input:checked:last-of-type~a{transform:translate(200%)}.toggle-options-3 input:checked:nth-of-type(2)~a{transform:translate(100%)}.toggle-options-4 a{width:25%}.toggle-options-4 input:checked:last-of-type~a{transform:translate(300%)}.toggle-options-4 input:checked:nth-of-type(3)~a{transform:translate(200%)}.toggle-options-4 input:checked:nth-of-type(2)~a{transform:translate(100%)}.toggle-options-5 a{width:20%}.toggle-options-5 input:checked:last-of-type~a{transform:translate(400%)}.toggle-options-5 input:checked:nth-of-type(4)~a{transform:translate(300%)}.toggle-options-5 input:checked:nth-of-type(3)~a{transform:translate(200%)}.toggle-options-5 input:checked:nth-of-type(2)~a{transform:translate(100%)}\n"] }]
69
+ args: [{ selector: 'ec-radiobutton', template: "<div class=\"control\"\r\n [class.control-label-bottom]=\"labelPosition === 'bottom'\">\r\n <ng-container *ngIf=\"label && !helpPopover\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n </ng-container>\r\n\r\n <div *ngIf=\"label && helpPopover\"\r\n class=\"d-flex align-items-center\">\r\n <ng-container *ngTemplateOutlet=\"sharedLabel\"></ng-container>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n class=\"my-n2 mx-n1\"\r\n text=\"{{helpPopover | translate}}\">\r\n </ec-help-popover>\r\n </div>\r\n\r\n <ng-template #sharedLabel>\r\n <label class=\"control-label\" ngPreserveWhitespaces>\r\n <span *ngIf=\"label\">{{label | translate}}</span>\r\n <span *ngIf=\"validationErrors.length > 0 && formModel.touched && formModel.invalid\">{{validationErrors |\r\n translate}}</span>\r\n </label>\r\n </ng-template>\r\n \r\n <div class=\"radio-group {{'toggle-options-' + options.length}}\"\r\n [ngClass]=\"currentClasses\"\r\n [class.is-disabled]=\"formModel.disabled\"\r\n [class.is-readonly]=\"readonly\">\r\n\r\n <!-- RadioButton type=\"toggle\"-->\r\n <!-- There are two ng-templates here due to the fact you can't have ngIf and ngFor on the same element -->\r\n <ng-container *ngIf=\"type === 'toggle'\">\r\n <ng-container *ngFor=\"let option of options; index as i; first as isFirst\">\r\n <!-- The input has two name attributes set, one is for the form model and one is for the broswer. With one set\r\n the tabbing did not work, and with the other the controls were all linked together. They both need set\r\n for the best of both worlds -->\r\n <input [attr.id]=\"inputId + i.toString()\"\r\n [formControl]=\"formModel\"\r\n type=\"radio\"\r\n tabindex=\"{{tabindex}}\"\r\n [value]=\"option.value\"\r\n #radioInput\r\n name=\"{{name}}\"\r\n attr.name=\"{{name}}\"\r\n [attr.cdkFocusInitial]=\"(autofocus && isFirst) || null\">\r\n <label [attr.for]=\"inputId + i.toString()\"\r\n title=\"{{ option.tooltip | translate}}\">\r\n <i class=\"ec-icon {{option.icon}}\"\r\n *ngIf=\"option.icon\"></i>\r\n <span id=\"{{inputId}}_label{{i.toString()}}\"\r\n *ngIf=\"option.label\">{{option.label | translate}}</span>\r\n </label>\r\n </ng-container>\r\n <a>\r\n <div class=\"toggle-handle\"></div>\r\n </a>\r\n <div class=\"toggle-focused\"></div>\r\n </ng-container>\r\n\r\n <!-- RadioButton type=\"radio\"-->\r\n <!-- There are two ng-templates here due to the fact you can't have ngIf and ngFor on the same element -->\r\n <ng-container *ngIf=\"type === 'radio'\">\r\n <ng-container *ngFor=\"let option of options; index as i; first as isFirst\">\r\n <label class='radio-button'\r\n title=\"{{ option.tooltip | translate}}\">\r\n <!-- The input has two name attributes set, one is for the form model and one is for the broswer. With one set\r\n the tabbing did not work, and with the other the controls were all linked together. They both need set\r\n for the best of both worlds -->\r\n <input [attr.id]=\"inputId + i.toString()\"\r\n class=\"input\"\r\n [formControl]=\"formModel\"\r\n type=\"radio\"\r\n value=\"{{option.value}}\"\r\n #radioInput\r\n tabindex=\"{{tabindex}}\"\r\n name=\"{{name}}\"\r\n attr.name=\"{{name}}\"\r\n [attr.cdkFocusInitial]=\"(autofocus && isFirst) || null\">\r\n <span class=\"indicator\"></span>\r\n <span id=\"{{inputId}}_label{{i.toString()}}\"\r\n class=\"label\"\r\n *ngIf=\"option.label\"\r\n [innerHtml]=\"option.label | translate\"></span>\r\n </label>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}:host(.w-auto){width:auto}.control-label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}.radio-group{display:flex;flex-wrap:wrap}.radio-group-column{flex-direction:column}.radio-group-column .radio-button{margin-right:auto}.radio-group.is-disabled .radio-button{cursor:default}.radio-group.is-readonly .radio-button{pointer-events:none}.radio-group.is-readonly .radio-button .input{opacity:0}.radio-group.is-readonly .radio-button .indicator{background-color:var(--ec-form-control-background-color-readonly);border-color:var(--ec-form-control-border-color-readonly)}.radio-group.is-readonly .radio-button .label,.radio-group.is-readonly .radio-button .indicator{opacity:1;color:var(--ec-form-control-color)}.radio-group.is-readonly.radio-group-toggle{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}.radio-group.is-readonly.radio-group-toggle a,.radio-group.is-readonly.radio-group-toggle input:not(:checked),.radio-group.is-readonly.radio-group-toggle input:not(:checked)+label{display:none}.radio-group.is-readonly.radio-group-toggle input:checked+label{color:inherit;justify-content:flex-start}.radio-button{cursor:pointer;display:inline-flex;margin-bottom:0;position:relative}.radio-button:not(:last-child){margin-right:1rem}.input{margin-top:.5rem;opacity:0;position:absolute;z-index:-1}.input:not(:checked)+.indicator{color:var(--ec-form-control-border-color)}.input:not(:checked)+.indicator:before{display:none}.input:focus+.indicator{color:var(--ec-color-interactive);box-shadow:var(--ec-form-control-box-shadow-focus);border-color:var(--ec-form-control-border-color-focus)}.input:disabled+.indicator{color:var(--ec-form-control-color-disabled);background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}.input:disabled~.label{color:var(--ec-form-control-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}.indicator{background-color:var(--ec-form-control-background-color);background-clip:padding-box;border:1px solid currentColor;color:var(--ec-color-interactive);margin-top:.5rem;flex:none;pointer-events:none;display:inline-flex;align-items:center;justify-content:center;height:1em;width:1em;border-radius:50%}.indicator:before{background-color:currentColor;content:\"\";display:block;width:.5em;height:.5em;border-radius:50%}.label{line-height:1.25rem;padding:.375rem 0;margin-left:.5rem;min-height:2rem;height:auto}.radio-group-toggle{font-size:var(--ec-form-control-font-size);background-color:var(--ec-border-color);border-radius:var(--ec-border-radius);border:1px solid var(--ec-border-color);min-height:2em;position:relative;color:var(--ec-color-secondary-dark);display:flex}.radio-group-toggle input{position:absolute;z-index:-1;opacity:0}.radio-group-toggle input:checked+label{color:var(--ec-color-interactive)}.radio-group-toggle input:checked:last-of-type~a{transform:translate(100%)}.radio-group-toggle input:focus~.toggle-focused{display:block}.radio-group-toggle .toggle-focused{position:absolute;inset:0;box-shadow:var(--ec-form-control-box-shadow-focus);border-radius:var(--ec-form-control-border-radius);display:none}.radio-group-toggle label{align-items:center;cursor:pointer;display:flex;flex:1 1 0%;justify-content:center;line-height:1.1em;margin-bottom:0;padding:.375rem .5rem;position:relative;text-align:center;transition:color .3s ease;z-index:2}.radio-group-toggle label .ec-icon{color:inherit}.radio-group-toggle a{border:.1875rem solid transparent;border-radius:calc(var(--ec-form-control-border-radius) * .75);display:block;height:100%;left:0;position:absolute;top:0;transition:transform .25s ease;width:50%;z-index:1}.radio-group-toggle a .toggle-handle{background-color:var(--ec-form-control-background-color);border-radius:calc(var(--ec-form-control-border-radius) * .75);height:100%}.radio-group-toggle.is-disabled{opacity:var(--ec-form-control-opacity-disabled);color:var(--ec-form-control-color-disabled)}.radio-group-toggle.is-disabled label{color:inherit!important;cursor:default}.toggle-options-3 a{width:33.3333333333%}.toggle-options-3 input:checked:last-of-type~a{transform:translate(200%)}.toggle-options-3 input:checked:nth-of-type(2)~a{transform:translate(100%)}.toggle-options-4 a{width:25%}.toggle-options-4 input:checked:last-of-type~a{transform:translate(300%)}.toggle-options-4 input:checked:nth-of-type(3)~a{transform:translate(200%)}.toggle-options-4 input:checked:nth-of-type(2)~a{transform:translate(100%)}.toggle-options-5 a{width:20%}.toggle-options-5 input:checked:last-of-type~a{transform:translate(400%)}.toggle-options-5 input:checked:nth-of-type(4)~a{transform:translate(300%)}.toggle-options-5 input:checked:nth-of-type(3)~a{transform:translate(200%)}.toggle-options-5 input:checked:nth-of-type(2)~a{transform:translate(100%)}\n"] }]
70
70
  }], ctorParameters: function () { return [{ type: i1.ValidationMessageService }, { type: i2.FormGroupHelper }]; }, propDecorators: { type: [{
71
71
  type: Input
72
72
  }], options: [{
@@ -79,4 +79,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
79
79
  type: ViewChild,
80
80
  args: ['radioInput']
81
81
  }] } });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQW9CdkQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGVBQWU7SUFxQ3ZELFlBQ1ksd0JBQWtELEVBQ2xELGVBQWdDO1FBRTFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUh2Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXRDNUM7Ozs7V0FJRztRQUNhLFNBQUksR0FBcUIsT0FBTyxDQUFDO1FBRWpEOztXQUVHO1FBQ2EsWUFBTyxHQUF3QixFQUFFLENBQUM7UUFFbEQ7OztXQUdHO1FBQ2EsY0FBUyxHQUEwQixLQUFLLENBQUM7UUFFekQ7OztVQUdFO1FBQ2MsU0FBSSxHQUFXLEVBQUUsQ0FBQztJQW1CbEMsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ2hEO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsc0ZBQXNGO1FBQ3RGLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO2dCQUN2RSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hEO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN6QztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsK0VBQStFLENBQUMsQ0FBQztTQUMvRjtJQUNILENBQUM7O2lIQXRFVSxvQkFBb0I7cUdBQXBCLG9CQUFvQiw2UUMzQmpDLGtsSUF3Rk07MkZEN0RPLG9CQUFvQjtrQkFWaEMsU0FBUzsrQkFDRSxnQkFBZ0I7NklBZVYsSUFBSTtzQkFBbkIsS0FBSztnQkFLVSxPQUFPO3NCQUF0QixLQUFLO2dCQU1VLFNBQVM7c0JBQXhCLEtBQUs7Z0JBTVUsSUFBSTtzQkFBbkIsS0FBSztnQkFZNkIsWUFBWTtzQkFBOUMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cEhlbHBlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtLWdyb3VwLmhlbHBlcic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sQmFzZSB9IGZyb20gJy4uL2Zvcm0tY29udHJvbC1iYXNlJztcclxuaW1wb3J0IHsgUmFkaW9CdXR0b25PcHRpb24gfSBmcm9tICcuL3JhZGlvLWJ1dHRvbi1vcHRpb24nO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBSb3cgZGlzcGxheXMgb3B0aW9ucyBob3Jpem9udGFsbHksIGNvbHVtbiBkaXNwbGF5cyBvcHRpb25zIHZlcnRpY2FsbHlcclxuICovXHJcbmV4cG9ydCB0eXBlIFJhZGlvQnV0dG9uRGlyZWN0aW9uID0gXCJyb3dcIiB8IFwiY29sdW1uXCI7XHJcblxyXG4vKipcclxuICogUmFkaW8gaXMgdGhlIGRlZmF1bHQgYnV0dG9uIHN0eWxlLCB0b2dnbGUgd2lsbCBzdHlsZSBhcyBhIHRvZ2dsZSBzd2l0Y2hcclxuICovXHJcbmV4cG9ydCB0eXBlIFJhZGlvQnV0dG9uVHlwZSA9IFwicmFkaW9cIiB8IFwidG9nZ2xlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLXJhZGlvYnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yYWRpby1idXR0b24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuLyoqXHJcbiAqIEEgc2luZ2xlIG9yIGdyb3VwIG9mIHJhZGlvIGJ1dHRvbi4gT25seSBvbmUgb3B0aW9uIGNhbiBiZSBjaGVja2VkXHJcbiAqIGF0IGEgdGltZVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFJhZGlvQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgRm9ybUNvbnRyb2xCYXNlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0IHtcclxuICAvKipcclxuICAgKiBEaXNwbGF5IHRoZSByYWRpbyBidXR0b24gb3B0aW9ucyBhcyBhIGRlZmF1bHQgc2V0IG9mIHJhZGlvIGJ1dHRvbiBpbnB1dHMgb3JcclxuICAgKiBhcyBhIHRvZ2dsZSBzd2l0Y2hcclxuICAgKiBAZGVmYXVsdCAncmFkaW8nXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHR5cGU/OiBSYWRpb0J1dHRvblR5cGUgPSBcInJhZGlvXCI7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uZSBvciBtb3JlIG9wdGlvbnMgdG8gZGlzcGxheVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBSYWRpb0J1dHRvbk9wdGlvbltdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgb3B0aW9uLCBkaXNwbGF5IHRoZW0gaW4gYSByb3cgb3IgY29sdW1uLlxyXG4gICAqIEBkZWZhdWx0ICdyb3cnXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGRpcmVjdGlvbj86IFJhZGlvQnV0dG9uRGlyZWN0aW9uID0gXCJyb3dcIjtcclxuXHJcbiAgLyoqXHJcbiAgKiBUaGUgbmFtZSBvZiB0aGUgcmFkaW8gaW5wdXQgZWxlbWVudCB1c2VkIHRvIGdyb3VwIHJhZGlvIGVsZW1lbnRzXHJcbiAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dC9yYWRpb1xyXG4gICovXHJcbiAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBjbGFzc25hbWVzIHRoYXQgd2lsbCBiZSBwYXNzZWQgaW50byBuZ0NsYXNzXHJcbiAgICovXHJcbiAgcHVibGljIGN1cnJlbnRDbGFzc2VzITogc3RyaW5nW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgZmlyc3QgaW5wdXQgZm91bmQgd2l0aCB0aGUgcmFkaW9JbnB1dCByZWZlcmVuY2UgdmFyaWFibGUuICBBbGwgcmFkaW9cclxuICAgKiBpbnB1dHMgZm9yIHRoaXMgY29tcG9uZW50IHdpbGwgYmUgdGFnZ2VkIHdpdGggdGhpcyByZWYgdmFyaWFibGUsIGJ1dCBvbmx5IHRoZSBmaXJzdCBmb3VuZFxyXG4gICAqIHdpbGwgYmUgc2VsZWN0ZWQgYXMgdGhlIGlucHV0RWxlbWVudCBmb3IgYXV0b2ZvY3VzXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgncmFkaW9JbnB1dCcpIHByb3RlY3RlZCBpbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB2YWxpZGF0aW9uTWVzc2FnZVNlcnZpY2U6IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBmb3JtR3JvdXBIZWxwZXI6IEZvcm1Hcm91cEhlbHBlclxyXG4gICkge1xyXG4gICAgc3VwZXIodmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLCBmb3JtR3JvdXBIZWxwZXIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5jdXJyZW50Q2xhc3NlcyA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICd0b2dnbGUnKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudENsYXNzZXMucHVzaCgncmFkaW8tZ3JvdXAtdG9nZ2xlJyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAnY29sdW1uJykge1xyXG4gICAgICB0aGlzLmN1cnJlbnRDbGFzc2VzLnB1c2goJ3JhZGlvLWdyb3VwLWNvbHVtbicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBmb3JtTW9kZWwgaXMgYXNzaWduZWQgYW4gdW5kZWZpbmVkIG9yIG51bGwgdmFsdWUsIHNldCBpdCB0byB0aGUgZmlyc3Qgb3B0aW9uXHJcbiAgICB0aGlzLmZvcm1Nb2RlbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZm9ybU1vZGVsLnZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy5mb3JtTW9kZWwudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnNbMF0udmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA+IDUgJiYgdGhpcy50eXBlID09PSBcInRvZ2dsZVwiKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIlJhZGlvIGJ1dHRvbiBjb21wb25lbnRzIHdpdGggYSB0eXBlIG9mIHRvZ2dsZSBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gNSBvcHRpb25zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJjb250cm9sXCJcclxuICAgICBbY2xhc3MuY29udHJvbC1sYWJlbC1ib3R0b21dPVwibGFiZWxQb3NpdGlvbiA9PT0gJ2JvdHRvbSdcIj5cclxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbCAmJiAhaGVscFBvcG92ZXJcIlxyXG4gICAgICAgICBuZ1ByZXNlcnZlV2hpdGVzcGFjZXM+XHJcbiAgICA8c3Bhbj57e2xhYmVsIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICA8c3BhbiAqbmdJZj1cInZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCAmJiBmb3JtTW9kZWwudG91Y2hlZCAmJiBmb3JtTW9kZWwuaW52YWxpZFwiPnt7dmFsaWRhdGlvbkVycm9ycyB8XHJcbiAgICAgIHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gIDwvbGFiZWw+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCJsYWJlbCAmJiBoZWxwUG9wb3ZlclwiXHJcbiAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgIDxsYWJlbCBuZ1ByZXNlcnZlV2hpdGVzcGFjZXM+XHJcbiAgICAgIDxzcGFuPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJ2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDAgJiYgZm9ybU1vZGVsLnRvdWNoZWQgJiYgZm9ybU1vZGVsLmludmFsaWRcIj57e3ZhbGlkYXRpb25FcnJvcnMgfFxyXG4gICAgICAgIHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgPC9sYWJlbD5cclxuXHJcbiAgICA8ZWMtaGVscC1wb3BvdmVyIGlkPVwie3tpZH19X2hlbHBQb3BvdmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS1uMiBteC1uMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7e2hlbHBQb3BvdmVyIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgIDwvZWMtaGVscC1wb3BvdmVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwicmFkaW8tZ3JvdXAge3sndG9nZ2xlLW9wdGlvbnMtJyArIG9wdGlvbnMubGVuZ3RofX1cIlxyXG4gICAgICAgW25nQ2xhc3NdPVwiY3VycmVudENsYXNzZXNcIlxyXG4gICAgICAgW2NsYXNzLmlzLWRpc2FibGVkXT1cImZvcm1Nb2RlbC5kaXNhYmxlZFwiXHJcbiAgICAgICBbY2xhc3MuaXMtcmVhZG9ubHldPVwicmVhZG9ubHlcIj5cclxuXHJcbiAgICA8IS0tIFJhZGlvQnV0dG9uIHR5cGU9XCJ0b2dnbGVcIi0tPlxyXG4gICAgPCEtLSBUaGVyZSBhcmUgdHdvIG5nLXRlbXBsYXRlcyBoZXJlIGR1ZSB0byB0aGUgZmFjdCB5b3UgY2FuJ3QgaGF2ZSBuZ0lmIGFuZCBuZ0ZvciBvbiB0aGUgc2FtZSBlbGVtZW50IC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT09ICd0b2dnbGUnXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyBpbmRleCBhcyBpOyBmaXJzdCBhcyBpc0ZpcnN0XCI+XHJcbiAgICAgICAgPCEtLSBUaGUgaW5wdXQgaGFzIHR3byBuYW1lIGF0dHJpYnV0ZXMgc2V0LCBvbmUgaXMgZm9yIHRoZSBmb3JtIG1vZGVsIGFuZCBvbmUgaXMgZm9yIHRoZSBicm9zd2VyLiAgV2l0aCBvbmUgc2V0XHJcbiAgICAgICAgICAgICAgICAgICAgIHRoZSB0YWJiaW5nIGRpZCBub3Qgd29yaywgYW5kIHdpdGggdGhlIG90aGVyIHRoZSBjb250cm9scyB3ZXJlIGFsbCBsaW5rZWQgdG9nZXRoZXIuICBUaGV5IGJvdGggbmVlZCBzZXRcclxuICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBiZXN0IG9mIGJvdGggd29ybGRzIC0tPlxyXG4gICAgICAgIDxpbnB1dCBbYXR0ci5pZF09XCJpbnB1dElkICsgaS50b1N0cmluZygpXCJcclxuICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Nb2RlbFwiXHJcbiAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgIHRhYmluZGV4PVwie3t0YWJpbmRleH19XCJcclxuICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICNyYWRpb0lucHV0XHJcbiAgICAgICAgICAgICAgIG5hbWU9XCJ7e25hbWV9fVwiXHJcbiAgICAgICAgICAgICAgIGF0dHIubmFtZT1cInt7bmFtZX19XCJcclxuICAgICAgICAgICAgICAgW2F0dHIuY2RrRm9jdXNJbml0aWFsXT1cIihhdXRvZm9jdXMgJiYgaXNGaXJzdCkgfHwgbnVsbFwiPlxyXG4gICAgICAgIDxsYWJlbCBbYXR0ci5mb3JdPVwiaW5wdXRJZCArIGkudG9TdHJpbmcoKVwiXHJcbiAgICAgICAgICAgICAgIHRpdGxlPVwie3sgb3B0aW9uLnRvb2x0aXAgfCB0cmFuc2xhdGV9fVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJlYy1pY29uIHt7b3B0aW9uLmljb259fVwiXHJcbiAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5pY29uXCI+PC9pPlxyXG4gICAgICAgICAgPHNwYW4gaWQ9XCJ7e2lucHV0SWR9fV9sYWJlbHt7aS50b1N0cmluZygpfX1cIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb24ubGFiZWxcIj57e29wdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8YT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlLWhhbmRsZVwiPjwvZGl2PlxyXG4gICAgICA8L2E+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtZm9jdXNlZFwiPjwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBSYWRpb0J1dHRvbiB0eXBlPVwicmFkaW9cIi0tPlxyXG4gICAgPCEtLSBUaGVyZSBhcmUgdHdvIG5nLXRlbXBsYXRlcyBoZXJlIGR1ZSB0byB0aGUgZmFjdCB5b3UgY2FuJ3QgaGF2ZSBuZ0lmIGFuZCBuZ0ZvciBvbiB0aGUgc2FtZSBlbGVtZW50IC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT09ICdyYWRpbydcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGluZGV4IGFzIGk7IGZpcnN0IGFzIGlzRmlyc3RcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9J3JhZGlvLWJ1dHRvbidcclxuICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBvcHRpb24udG9vbHRpcCB8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgICA8IS0tIFRoZSBpbnB1dCBoYXMgdHdvIG5hbWUgYXR0cmlidXRlcyBzZXQsIG9uZSBpcyBmb3IgdGhlIGZvcm0gbW9kZWwgYW5kIG9uZSBpcyBmb3IgdGhlIGJyb3N3ZXIuICBXaXRoIG9uZSBzZXRcclxuICAgICAgICAgICAgICAgICAgICAgdGhlIHRhYmJpbmcgZGlkIG5vdCB3b3JrLCBhbmQgd2l0aCB0aGUgb3RoZXIgdGhlIGNvbnRyb2xzIHdlcmUgYWxsIGxpbmtlZCB0b2dldGhlci4gIFRoZXkgYm90aCBuZWVkIHNldFxyXG4gICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJlc3Qgb2YgYm90aCB3b3JsZHMgLS0+XHJcbiAgICAgICAgICA8aW5wdXQgW2F0dHIuaWRdPVwiaW5wdXRJZCArIGkudG9TdHJpbmcoKVwiXHJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Nb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7b3B0aW9uLnZhbHVlfX1cIlxyXG4gICAgICAgICAgICAgICAgICNyYWRpb0lucHV0XHJcbiAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCJ7e3RhYmluZGV4fX1cIlxyXG4gICAgICAgICAgICAgICAgIG5hbWU9XCJ7e25hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgYXR0ci5uYW1lPVwie3tuYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgIFthdHRyLmNka0ZvY3VzSW5pdGlhbF09XCIoYXV0b2ZvY3VzICYmIGlzRmlyc3QpIHx8IG51bGxcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5kaWNhdG9yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gaWQ9XCJ7e2lucHV0SWR9fV9sYWJlbHt7aS50b1N0cmluZygpfX1cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIm9wdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9yYWRpby1idXR0b24vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQW9CdkQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGVBQWU7SUFxQ3ZELFlBQ1ksd0JBQWtELEVBQ2xELGVBQWdDO1FBRTFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUh2Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQXRDNUM7Ozs7V0FJRztRQUNhLFNBQUksR0FBcUIsT0FBTyxDQUFDO1FBRWpEOztXQUVHO1FBQ2EsWUFBTyxHQUF3QixFQUFFLENBQUM7UUFFbEQ7OztXQUdHO1FBQ2EsY0FBUyxHQUEwQixLQUFLLENBQUM7UUFFekQ7OztVQUdFO1FBQ2MsU0FBSSxHQUFXLEVBQUUsQ0FBQztJQW1CbEMsQ0FBQztJQUVELFFBQVE7UUFDTixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ2hEO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsc0ZBQXNGO1FBQ3RGLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO2dCQUN2RSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hEO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN6QztRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsK0VBQStFLENBQUMsQ0FBQztTQUMvRjtJQUNILENBQUM7O2lIQXRFVSxvQkFBb0I7cUdBQXBCLG9CQUFvQiw2UUMzQmpDLGtuSUF3Rk07MkZEN0RPLG9CQUFvQjtrQkFWaEMsU0FBUzsrQkFDRSxnQkFBZ0I7NklBZVYsSUFBSTtzQkFBbkIsS0FBSztnQkFLVSxPQUFPO3NCQUF0QixLQUFLO2dCQU1VLFNBQVM7c0JBQXhCLEtBQUs7Z0JBTVUsSUFBSTtzQkFBbkIsS0FBSztnQkFZNkIsWUFBWTtzQkFBOUMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cEhlbHBlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtLWdyb3VwLmhlbHBlcic7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sQmFzZSB9IGZyb20gJy4uL2Zvcm0tY29udHJvbC1iYXNlJztcclxuaW1wb3J0IHsgUmFkaW9CdXR0b25PcHRpb24gfSBmcm9tICcuL3JhZGlvLWJ1dHRvbi1vcHRpb24nO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBSb3cgZGlzcGxheXMgb3B0aW9ucyBob3Jpem9udGFsbHksIGNvbHVtbiBkaXNwbGF5cyBvcHRpb25zIHZlcnRpY2FsbHlcclxuICovXHJcbmV4cG9ydCB0eXBlIFJhZGlvQnV0dG9uRGlyZWN0aW9uID0gXCJyb3dcIiB8IFwiY29sdW1uXCI7XHJcblxyXG4vKipcclxuICogUmFkaW8gaXMgdGhlIGRlZmF1bHQgYnV0dG9uIHN0eWxlLCB0b2dnbGUgd2lsbCBzdHlsZSBhcyBhIHRvZ2dsZSBzd2l0Y2hcclxuICovXHJcbmV4cG9ydCB0eXBlIFJhZGlvQnV0dG9uVHlwZSA9IFwicmFkaW9cIiB8IFwidG9nZ2xlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLXJhZGlvYnV0dG9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8tYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yYWRpby1idXR0b24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuLyoqXHJcbiAqIEEgc2luZ2xlIG9yIGdyb3VwIG9mIHJhZGlvIGJ1dHRvbi4gT25seSBvbmUgb3B0aW9uIGNhbiBiZSBjaGVja2VkXHJcbiAqIGF0IGEgdGltZVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFJhZGlvQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgRm9ybUNvbnRyb2xCYXNlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0IHtcclxuICAvKipcclxuICAgKiBEaXNwbGF5IHRoZSByYWRpbyBidXR0b24gb3B0aW9ucyBhcyBhIGRlZmF1bHQgc2V0IG9mIHJhZGlvIGJ1dHRvbiBpbnB1dHMgb3JcclxuICAgKiBhcyBhIHRvZ2dsZSBzd2l0Y2hcclxuICAgKiBAZGVmYXVsdCAncmFkaW8nXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHR5cGU/OiBSYWRpb0J1dHRvblR5cGUgPSBcInJhZGlvXCI7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uZSBvciBtb3JlIG9wdGlvbnMgdG8gZGlzcGxheVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBSYWRpb0J1dHRvbk9wdGlvbltdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgb3B0aW9uLCBkaXNwbGF5IHRoZW0gaW4gYSByb3cgb3IgY29sdW1uLlxyXG4gICAqIEBkZWZhdWx0ICdyb3cnXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGRpcmVjdGlvbj86IFJhZGlvQnV0dG9uRGlyZWN0aW9uID0gXCJyb3dcIjtcclxuXHJcbiAgLyoqXHJcbiAgKiBUaGUgbmFtZSBvZiB0aGUgcmFkaW8gaW5wdXQgZWxlbWVudCB1c2VkIHRvIGdyb3VwIHJhZGlvIGVsZW1lbnRzXHJcbiAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dC9yYWRpb1xyXG4gICovXHJcbiAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBBbiBhcnJheSBvZiBjbGFzc25hbWVzIHRoYXQgd2lsbCBiZSBwYXNzZWQgaW50byBuZ0NsYXNzXHJcbiAgICovXHJcbiAgcHVibGljIGN1cnJlbnRDbGFzc2VzITogc3RyaW5nW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgZmlyc3QgaW5wdXQgZm91bmQgd2l0aCB0aGUgcmFkaW9JbnB1dCByZWZlcmVuY2UgdmFyaWFibGUuICBBbGwgcmFkaW9cclxuICAgKiBpbnB1dHMgZm9yIHRoaXMgY29tcG9uZW50IHdpbGwgYmUgdGFnZ2VkIHdpdGggdGhpcyByZWYgdmFyaWFibGUsIGJ1dCBvbmx5IHRoZSBmaXJzdCBmb3VuZFxyXG4gICAqIHdpbGwgYmUgc2VsZWN0ZWQgYXMgdGhlIGlucHV0RWxlbWVudCBmb3IgYXV0b2ZvY3VzXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgncmFkaW9JbnB1dCcpIHByb3RlY3RlZCBpbnB1dEVsZW1lbnQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB2YWxpZGF0aW9uTWVzc2FnZVNlcnZpY2U6IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBmb3JtR3JvdXBIZWxwZXI6IEZvcm1Hcm91cEhlbHBlclxyXG4gICkge1xyXG4gICAgc3VwZXIodmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLCBmb3JtR3JvdXBIZWxwZXIpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5jdXJyZW50Q2xhc3NlcyA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLnR5cGUgPT09ICd0b2dnbGUnKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudENsYXNzZXMucHVzaCgncmFkaW8tZ3JvdXAtdG9nZ2xlJyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAnY29sdW1uJykge1xyXG4gICAgICB0aGlzLmN1cnJlbnRDbGFzc2VzLnB1c2goJ3JhZGlvLWdyb3VwLWNvbHVtbicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHRoZSBmb3JtTW9kZWwgaXMgYXNzaWduZWQgYW4gdW5kZWZpbmVkIG9yIG51bGwgdmFsdWUsIHNldCBpdCB0byB0aGUgZmlyc3Qgb3B0aW9uXHJcbiAgICB0aGlzLmZvcm1Nb2RlbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZm9ybU1vZGVsLnZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy5mb3JtTW9kZWwudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnNbMF0udmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XHJcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA+IDUgJiYgdGhpcy50eXBlID09PSBcInRvZ2dsZVwiKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIlJhZGlvIGJ1dHRvbiBjb21wb25lbnRzIHdpdGggYSB0eXBlIG9mIHRvZ2dsZSBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gNSBvcHRpb25zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxufSIsIjxkaXYgY2xhc3M9XCJjb250cm9sXCJcclxuICAgICBbY2xhc3MuY29udHJvbC1sYWJlbC1ib3R0b21dPVwibGFiZWxQb3NpdGlvbiA9PT0gJ2JvdHRvbSdcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibGFiZWwgJiYgIWhlbHBQb3BvdmVyXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2hhcmVkTGFiZWxcIj48L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImxhYmVsICYmIGhlbHBQb3BvdmVyXCJcclxuICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNoYXJlZExhYmVsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8ZWMtaGVscC1wb3BvdmVyIGlkPVwie3tpZH19X2hlbHBQb3BvdmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS1uMiBteC1uMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7e2hlbHBQb3BvdmVyIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgIDwvZWMtaGVscC1wb3BvdmVyPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bmctdGVtcGxhdGUgI3NoYXJlZExhYmVsPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIG5nUHJlc2VydmVXaGl0ZXNwYWNlcz5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJsYWJlbFwiPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCJ2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDAgJiYgZm9ybU1vZGVsLnRvdWNoZWQgJiYgZm9ybU1vZGVsLmludmFsaWRcIj57e3ZhbGlkYXRpb25FcnJvcnMgfFxyXG4gICAgICAgIHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgPC9sYWJlbD5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIFxyXG4gIDxkaXYgY2xhc3M9XCJyYWRpby1ncm91cCB7eyd0b2dnbGUtb3B0aW9ucy0nICsgb3B0aW9ucy5sZW5ndGh9fVwiXHJcbiAgICAgICBbbmdDbGFzc109XCJjdXJyZW50Q2xhc3Nlc1wiXHJcbiAgICAgICBbY2xhc3MuaXMtZGlzYWJsZWRdPVwiZm9ybU1vZGVsLmRpc2FibGVkXCJcclxuICAgICAgIFtjbGFzcy5pcy1yZWFkb25seV09XCJyZWFkb25seVwiPlxyXG5cclxuICAgIDwhLS0gUmFkaW9CdXR0b24gdHlwZT1cInRvZ2dsZVwiLS0+XHJcbiAgICA8IS0tIFRoZXJlIGFyZSB0d28gbmctdGVtcGxhdGVzIGhlcmUgZHVlIHRvIHRoZSBmYWN0IHlvdSBjYW4ndCBoYXZlIG5nSWYgYW5kIG5nRm9yIG9uIHRoZSBzYW1lIGVsZW1lbnQgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ3RvZ2dsZSdcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGluZGV4IGFzIGk7IGZpcnN0IGFzIGlzRmlyc3RcIj5cclxuICAgICAgICA8IS0tIFRoZSBpbnB1dCBoYXMgdHdvIG5hbWUgYXR0cmlidXRlcyBzZXQsIG9uZSBpcyBmb3IgdGhlIGZvcm0gbW9kZWwgYW5kIG9uZSBpcyBmb3IgdGhlIGJyb3N3ZXIuICBXaXRoIG9uZSBzZXRcclxuICAgICAgICAgICAgICAgICAgICAgdGhlIHRhYmJpbmcgZGlkIG5vdCB3b3JrLCBhbmQgd2l0aCB0aGUgb3RoZXIgdGhlIGNvbnRyb2xzIHdlcmUgYWxsIGxpbmtlZCB0b2dldGhlci4gIFRoZXkgYm90aCBuZWVkIHNldFxyXG4gICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGJlc3Qgb2YgYm90aCB3b3JsZHMgLS0+XHJcbiAgICAgICAgPGlucHV0IFthdHRyLmlkXT1cImlucHV0SWQgKyBpLnRvU3RyaW5nKClcIlxyXG4gICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybU1vZGVsXCJcclxuICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgICAgICAgdGFiaW5kZXg9XCJ7e3RhYmluZGV4fX1cIlxyXG4gICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgI3JhZGlvSW5wdXRcclxuICAgICAgICAgICAgICAgbmFtZT1cInt7bmFtZX19XCJcclxuICAgICAgICAgICAgICAgYXR0ci5uYW1lPVwie3tuYW1lfX1cIlxyXG4gICAgICAgICAgICAgICBbYXR0ci5jZGtGb2N1c0luaXRpYWxdPVwiKGF1dG9mb2N1cyAmJiBpc0ZpcnN0KSB8fCBudWxsXCI+XHJcbiAgICAgICAgPGxhYmVsIFthdHRyLmZvcl09XCJpbnB1dElkICsgaS50b1N0cmluZygpXCJcclxuICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBvcHRpb24udG9vbHRpcCB8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImVjLWljb24ge3tvcHRpb24uaWNvbn19XCJcclxuICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLmljb25cIj48L2k+XHJcbiAgICAgICAgICA8c3BhbiBpZD1cInt7aW5wdXRJZH19X2xhYmVse3tpLnRvU3RyaW5nKCl9fVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5sYWJlbFwiPnt7b3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxhPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtaGFuZGxlXCI+PC9kaXY+XHJcbiAgICAgIDwvYT5cclxuICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1mb2N1c2VkXCI+PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8IS0tIFJhZGlvQnV0dG9uIHR5cGU9XCJyYWRpb1wiLS0+XHJcbiAgICA8IS0tIFRoZXJlIGFyZSB0d28gbmctdGVtcGxhdGVzIGhlcmUgZHVlIHRvIHRoZSBmYWN0IHlvdSBjYW4ndCBoYXZlIG5nSWYgYW5kIG5nRm9yIG9uIHRoZSBzYW1lIGVsZW1lbnQgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHlwZSA9PT0gJ3JhZGlvJ1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uczsgaW5kZXggYXMgaTsgZmlyc3QgYXMgaXNGaXJzdFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz0ncmFkaW8tYnV0dG9uJ1xyXG4gICAgICAgICAgICAgICB0aXRsZT1cInt7IG9wdGlvbi50b29sdGlwIHwgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICAgIDwhLS0gVGhlIGlucHV0IGhhcyB0d28gbmFtZSBhdHRyaWJ1dGVzIHNldCwgb25lIGlzIGZvciB0aGUgZm9ybSBtb2RlbCBhbmQgb25lIGlzIGZvciB0aGUgYnJvc3dlci4gIFdpdGggb25lIHNldFxyXG4gICAgICAgICAgICAgICAgICAgICB0aGUgdGFiYmluZyBkaWQgbm90IHdvcmssIGFuZCB3aXRoIHRoZSBvdGhlciB0aGUgY29udHJvbHMgd2VyZSBhbGwgbGlua2VkIHRvZ2V0aGVyLiAgVGhleSBib3RoIG5lZWQgc2V0XHJcbiAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgYmVzdCBvZiBib3RoIHdvcmxkcyAtLT5cclxuICAgICAgICAgIDxpbnB1dCBbYXR0ci5pZF09XCJpbnB1dElkICsgaS50b1N0cmluZygpXCJcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0XCJcclxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybU1vZGVsXCJcclxuICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgIHZhbHVlPVwie3tvcHRpb24udmFsdWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgI3JhZGlvSW5wdXRcclxuICAgICAgICAgICAgICAgICB0YWJpbmRleD1cInt7dGFiaW5kZXh9fVwiXHJcbiAgICAgICAgICAgICAgICAgbmFtZT1cInt7bmFtZX19XCJcclxuICAgICAgICAgICAgICAgICBhdHRyLm5hbWU9XCJ7e25hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgW2F0dHIuY2RrRm9jdXNJbml0aWFsXT1cIihhdXRvZm9jdXMgJiYgaXNGaXJzdCkgfHwgbnVsbFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmRpY2F0b3JcIj48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBpZD1cInt7aW5wdXRJZH19X2xhYmVse3tpLnRvU3RyaW5nKCl9fVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImxhYmVsXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLmxhYmVsXCJcclxuICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwib3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+Il19