@crediblefinance/credible-ui
Version:
Credible's standard UI library
112 lines • 23.5 kB
JavaScript
import { Component, Input, Output, EventEmitter } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms';
import * as i0 from "@angular/core";
import * as i1 from "@angular/cdk/clipboard";
import * as i2 from "../cf-alert/cf-alert.service";
import * as i3 from "@angular/common";
import * as i4 from "../directives/precision-directive";
import * as i5 from "@angular/forms";
import * as i6 from "@angular/material/tooltip";
export class CfInputCurrencyComponent {
clipboardService;
cfAlertService;
label = '';
name;
id;
value = 0;
precision = 8;
precisionType = 'decimal';
currency = '';
currencyLogo = '';
readonly = false;
placeholder = '';
labelRight = '';
copy = false;
theme = 'dark';
maxLength = null;
minLength = null;
valueChanged = new EventEmitter();
formGroup;
control;
// HTML helpers
objectFn = Object;
constructor(clipboardService, cfAlertService) {
this.clipboardService = clipboardService;
this.cfAlertService = cfAlertService;
if (!this.control && !this.formGroup) {
this.formGroup = new FormGroup({});
this.control = new FormControl('');
this.control.setValue(this.value);
}
}
ngOnChanges(changes) {
if (changes?.value) {
const currentValue = changes.value.currentValue.toString();
console.log('ngOnChanges currentValue', currentValue);
if (currentValue.includes('.')) {
const str = currentValue.split('.');
console.log('ngOnChanges str', str);
this.value = str[0] + '.' + str[1].slice(0, this.precision);
console.log('ngOnChanges value', this.value);
}
this.control.setValue(this.value);
}
}
keyUpHandler($event) {
console.log('keyUpHandler', $event, $event.target.value);
this.valueChanged.emit($event.target.value);
}
keyDownHandler($event) {
console.log('keyDownHandler', $event, $event.target.value);
}
inputHandler($event) {
console.log('inputHandler', $event, $event.target.value);
}
copyContent() {
this.clipboardService.copy(this.value.toString());
this.cfAlertService.showSuccess(this.label + ' copied!');
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: CfInputCurrencyComponent, deps: [{ token: i1.Clipboard }, { token: i2.CfAlertService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.9", type: CfInputCurrencyComponent, selector: "cf-input-currency", inputs: { label: "label", name: "name", id: "id", value: "value", precision: "precision", precisionType: "precisionType", currency: "currency", currencyLogo: "currencyLogo", readonly: "readonly", placeholder: "placeholder", labelRight: "labelRight", copy: "copy", theme: "theme", maxLength: "maxLength", minLength: "minLength", formGroup: "formGroup", control: "control" }, outputs: { valueChanged: "valueChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cf-input-currency\" [ngClass]=\"theme\">\n <div class=\"label-wrapper\">\n <label class=\"label\">{{ label }}</label>\n <label class=\"label\">{{ labelRight }}</label>\n </div>\n <div [class.error]=\"control.invalid && control.touched\" class=\"input-holder\" [formGroup]=\"formGroup\">\n <div class=\"d-flex align-items-center w-100\">\n <input type=\"number\" [name]=\"name\" [id]=\"id\" [placeholder]=\"placeholder\" class=\"value-span\" [value]=\"value\"\n [formControl]=\"control\" [maxlength]=\"maxLength\" [minLength]=\"minLength\" (keyup)=\"keyUpHandler($event)\"\n (keydown)=\"keyDownHandler($event)\" [readonly]=\"readonly\" PrecisionDirective (input)=\"inputHandler($event)\"\n [precisionType]=\"precisionType\" [precision]=\"precision\" step=\"any\" />\n\n <i class=\"fa-solid fa-copy\" [matTooltip]=\"'Copy ' + label\" *ngIf=\"copy\" (click)=\"copyContent()\"></i>\n </div>\n <span class=\"currency-span\">\n <img [src]=\"currencyLogo\" [alt]=\"label\" />\n <span class=\"currency-text\">{{ currency | uppercase }}</span>\n </span>\n </div>\n <span class=\"text-danger\" *ngIf=\"control.errors && control.touched\">\n {{ control.errors[objectFn.keys(control.errors)[0]] }}\n </span>\n</div>", styles: [".cf-input-currency{padding:0;height:max-content;margin-left:auto;margin-right:auto}.cf-input-currency .error{border:.5px solid #dc3545!important}.cf-input-currency .error .currency-span{border-left:1px solid #dc3545!important}.cf-input-currency .input-holder{border-radius:9px;padding:9.25px 1rem;display:flex;justify-content:space-between}.cf-input-currency .input-holder .value-span{border:none;width:100%;line-height:2rem;font-size:1rem;background-color:transparent}.cf-input-currency .input-holder .currency-span{padding-left:.5rem;display:flex;align-items:center}.cf-input-currency .input-holder .currency-span img{width:25px;height:25px;margin-right:5px}.cf-input-currency .fa-copy{margin-right:.5rem;margin-left:.5rem;cursor:pointer;align-self:center}.cf-input-currency .label-wrapper{display:flex;justify-content:space-between}.cf-input-currency .label{font-weight:700;font-size:.8rem;margin-bottom:3px}button:focus,input:focus,select:focus,textarea:focus{outline:none}input:-webkit-autofill,input:-webkit-autofill:active,input:-webkit-autofill:focus,input:-webkit-autofill:hover{-webkit-box-shadow:0 0 0 30px white inset!important}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{appearance:textfield}@media only screen and (max-width: 500px){.label,input{font-size:1rem!important}.currency-span img{width:32px;height:32px}}:root.dark{--mat-option-selected-state-label-text-color: white;--mat-option-selected-state-layer-color: lightgrey;--mat-select-panel-background-color: #1D1E22;--mat-select-enabled-arrow-color: grey}:root.light{--mat-option-selected-state-label-text-color: black;--mat-option-selected-state-layer-color: lightgrey;--mat-select-panel-background-color: white;--mat-select-enabled-arrow-color: grey}.cf-input-currency.dark .input-holder{border:.5px solid grey;background-color:#24252a}.cf-input-currency.dark .input-holder .value-span{color:#fff}.cf-input-currency.dark .input-holder .currency-span{border-left:1px solid grey;color:gray}.cf-input-currency.dark .label{color:#fff}.cf-input-currency.light .input-holder{border:.5px solid #f5f5f5}.cf-input-currency.light .input-holder .value-span{color:#000}.cf-input-currency.light .input-holder .currency-span{border-left:1px solid #f5f5f5;color:gray}.cf-input-currency.light .label{color:#000}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.PrecisionDirective, selector: "[PrecisionDirective]", inputs: ["precision", "type", "precisionType"] }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.UpperCasePipe, name: "uppercase" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: CfInputCurrencyComponent, decorators: [{
type: Component,
args: [{ selector: 'cf-input-currency', template: "<div class=\"cf-input-currency\" [ngClass]=\"theme\">\n <div class=\"label-wrapper\">\n <label class=\"label\">{{ label }}</label>\n <label class=\"label\">{{ labelRight }}</label>\n </div>\n <div [class.error]=\"control.invalid && control.touched\" class=\"input-holder\" [formGroup]=\"formGroup\">\n <div class=\"d-flex align-items-center w-100\">\n <input type=\"number\" [name]=\"name\" [id]=\"id\" [placeholder]=\"placeholder\" class=\"value-span\" [value]=\"value\"\n [formControl]=\"control\" [maxlength]=\"maxLength\" [minLength]=\"minLength\" (keyup)=\"keyUpHandler($event)\"\n (keydown)=\"keyDownHandler($event)\" [readonly]=\"readonly\" PrecisionDirective (input)=\"inputHandler($event)\"\n [precisionType]=\"precisionType\" [precision]=\"precision\" step=\"any\" />\n\n <i class=\"fa-solid fa-copy\" [matTooltip]=\"'Copy ' + label\" *ngIf=\"copy\" (click)=\"copyContent()\"></i>\n </div>\n <span class=\"currency-span\">\n <img [src]=\"currencyLogo\" [alt]=\"label\" />\n <span class=\"currency-text\">{{ currency | uppercase }}</span>\n </span>\n </div>\n <span class=\"text-danger\" *ngIf=\"control.errors && control.touched\">\n {{ control.errors[objectFn.keys(control.errors)[0]] }}\n </span>\n</div>", styles: [".cf-input-currency{padding:0;height:max-content;margin-left:auto;margin-right:auto}.cf-input-currency .error{border:.5px solid #dc3545!important}.cf-input-currency .error .currency-span{border-left:1px solid #dc3545!important}.cf-input-currency .input-holder{border-radius:9px;padding:9.25px 1rem;display:flex;justify-content:space-between}.cf-input-currency .input-holder .value-span{border:none;width:100%;line-height:2rem;font-size:1rem;background-color:transparent}.cf-input-currency .input-holder .currency-span{padding-left:.5rem;display:flex;align-items:center}.cf-input-currency .input-holder .currency-span img{width:25px;height:25px;margin-right:5px}.cf-input-currency .fa-copy{margin-right:.5rem;margin-left:.5rem;cursor:pointer;align-self:center}.cf-input-currency .label-wrapper{display:flex;justify-content:space-between}.cf-input-currency .label{font-weight:700;font-size:.8rem;margin-bottom:3px}button:focus,input:focus,select:focus,textarea:focus{outline:none}input:-webkit-autofill,input:-webkit-autofill:active,input:-webkit-autofill:focus,input:-webkit-autofill:hover{-webkit-box-shadow:0 0 0 30px white inset!important}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{appearance:textfield}@media only screen and (max-width: 500px){.label,input{font-size:1rem!important}.currency-span img{width:32px;height:32px}}:root.dark{--mat-option-selected-state-label-text-color: white;--mat-option-selected-state-layer-color: lightgrey;--mat-select-panel-background-color: #1D1E22;--mat-select-enabled-arrow-color: grey}:root.light{--mat-option-selected-state-label-text-color: black;--mat-option-selected-state-layer-color: lightgrey;--mat-select-panel-background-color: white;--mat-select-enabled-arrow-color: grey}.cf-input-currency.dark .input-holder{border:.5px solid grey;background-color:#24252a}.cf-input-currency.dark .input-holder .value-span{color:#fff}.cf-input-currency.dark .input-holder .currency-span{border-left:1px solid grey;color:gray}.cf-input-currency.dark .label{color:#fff}.cf-input-currency.light .input-holder{border:.5px solid #f5f5f5}.cf-input-currency.light .input-holder .value-span{color:#000}.cf-input-currency.light .input-holder .currency-span{border-left:1px solid #f5f5f5;color:gray}.cf-input-currency.light .label{color:#000}\n"] }]
}], ctorParameters: () => [{ type: i1.Clipboard }, { type: i2.CfAlertService }], propDecorators: { label: [{
type: Input
}], name: [{
type: Input
}], id: [{
type: Input
}], value: [{
type: Input
}], precision: [{
type: Input
}], precisionType: [{
type: Input
}], currency: [{
type: Input
}], currencyLogo: [{
type: Input
}], readonly: [{
type: Input
}], placeholder: [{
type: Input
}], labelRight: [{
type: Input
}], copy: [{
type: Input
}], theme: [{
type: Input
}], maxLength: [{
type: Input
}], minLength: [{
type: Input
}], valueChanged: [{
type: Output
}], formGroup: [{
type: Input
}], control: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2YtaW5wdXQtY3VycmVuY3kuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JlZGlibGUtdWkvc3JjL2xpYi9jZi1pbnB1dC1jdXJyZW5jeS9jZi1pbnB1dC1jdXJyZW5jeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVkaWJsZS11aS9zcmMvbGliL2NmLWlucHV0LWN1cnJlbmN5L2NmLWlucHV0LWN1cnJlbmN5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQ3pDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxXQUFXLEVBQUUsU0FBUyxFQUN6QixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQVN4QixNQUFNLE9BQU8sd0JBQXdCO0lBeUJiO0lBQ1I7SUF6QkgsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixJQUFJLENBQVU7SUFDZCxFQUFFLENBQVU7SUFDWixLQUFLLEdBQW9CLENBQUMsQ0FBQztJQUMzQixTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3RCLGFBQWEsR0FBd0IsU0FBUyxDQUFDO0lBQy9DLFFBQVEsR0FBVyxFQUFFLENBQUM7SUFDdEIsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixRQUFRLEdBQWEsS0FBSyxDQUFDO0lBQzNCLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixJQUFJLEdBQVksS0FBSyxDQUFDO0lBQ3RCLEtBQUssR0FBVyxNQUFNLENBQUM7SUFFdkIsU0FBUyxHQUFrQixJQUFJLENBQUM7SUFDaEMsU0FBUyxHQUFrQixJQUFJLENBQUM7SUFFL0IsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFbkMsU0FBUyxDQUFhO0lBQ3RCLE9BQU8sQ0FB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SztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUUsU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEZvcm1Db250cm9sLCBGb3JtR3JvdXBcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBDZkFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2NmLWFsZXJ0L2NmLWFsZXJ0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2NmLWlucHV0LWN1cnJlbmN5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2YtaW5wdXQtY3VycmVuY3kuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NmLWlucHV0LWN1cnJlbmN5LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2ZJbnB1dEN1cnJlbmN5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgbmFtZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBpZD86IHN0cmluZztcbiAgICBASW5wdXQoKSB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nID0gMDtcbiAgICBASW5wdXQoKSBwcmVjaXNpb246IG51bWJlciA9IDg7XG4gICAgQElucHV0KCkgcHJlY2lzaW9uVHlwZTogJ2RlY2ltYWwnIHwgJ2lucHV0JyA9ICdkZWNpbWFsJztcbiAgICBASW5wdXQoKSBjdXJyZW5jeTogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgY3VycmVuY3lMb2dvOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSByZWFkb25seT86IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgbGFiZWxSaWdodDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgY29weTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmcgPSAnZGFyayc7XG5cbiAgICBASW5wdXQoKSBtYXhMZW5ndGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIEBJbnB1dCgpIG1pbkxlbmd0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQElucHV0KCkgZm9ybUdyb3VwITogRm9ybUdyb3VwO1xuICAgIEBJbnB1dCgpIGNvbnRyb2whOiBGb3JtQ29udHJvbDtcblxuICAgIC8vIEhUTUwgaGVscGVyc1xuICAgIG9iamVjdEZuID0gT2JqZWN0O1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2xpcGJvYXJkU2VydmljZTogQ2xpcGJvYXJkLCBcbiAgICAgICAgcHJpdmF0ZSBjZkFsZXJ0U2VydmljZTogQ2ZBbGVydFNlcnZpY2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wgJiYgIXRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXM/LnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjaGFuZ2VzLnZhbHVlLmN1cnJlbnRWYWx1ZS50b1N0cmluZygpO1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnbmdPbkNoYW5nZXMgY3VycmVudFZhbHVlJywgY3VycmVudFZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyID0gY3VycmVudFZhbHVlLnNwbGl0KCcuJyk7XG5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbmdPbkNoYW5nZXMgc3RyJywgc3RyKTtcblxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBzdHJbMF0gKyAnLicgKyBzdHJbMV0uc2xpY2UoMCwgdGhpcy5wcmVjaXNpb24pO1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ25nT25DaGFuZ2VzIHZhbHVlJywgdGhpcy52YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGtleVVwSGFuZGxlcigkZXZlbnQ6IGFueSkge1xuICAgICAgICBjb25zb2xlLmxvZygna2V5VXBIYW5kbGVyJywgJGV2ZW50LCAkZXZlbnQudGFyZ2V0LnZhbHVlKTtcblxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZC5lbWl0KCRldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH1cblxuICAgIGtleURvd25IYW5kbGVyKCRldmVudDogYW55KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdrZXlEb3duSGFuZGxlcicsICRldmVudCwgJGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgfVxuXG4gICAgaW5wdXRIYW5kbGVyKCRldmVudDogYW55KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbnB1dEhhbmRsZXInLCAkZXZlbnQsICRldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH1cblxuICAgIGNvcHlDb250ZW50KCkge1xuICAgICAgICB0aGlzLmNsaXBib2FyZFNlcnZpY2UuY29weSh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIHRoaXMuY2ZBbGVydFNlcnZpY2Uuc2hvd1N1Y2Nlc3ModGhpcy5sYWJlbCArICcgY29waWVkIScpO1xuICAgIH1cbn0iLCI8ZGl2IGNsYXNzPVwiY2YtaW5wdXQtY3VycmVuY3lcIiBbbmdDbGFzc109XCJ0aGVtZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJsYWJlbC13cmFwcGVyXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsXCI+e3sgbGFiZWwgfX08L2xhYmVsPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbFwiPnt7IGxhYmVsUmlnaHQgfX08L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgW2NsYXNzLmVycm9yXT1cImNvbnRyb2wuaW52YWxpZCAmJiBjb250cm9sLnRvdWNoZWRcIiBjbGFzcz1cImlucHV0LWhvbGRlclwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFtuYW1lXT1cIm5hbWVcIiBbaWRdPVwiaWRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBjbGFzcz1cInZhbHVlLXNwYW5cIiBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCIgW21heGxlbmd0aF09XCJtYXhMZW5ndGhcIiBbbWluTGVuZ3RoXT1cIm1pbkxlbmd0aFwiIChrZXl1cCk9XCJrZXlVcEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwia2V5RG93bkhhbmRsZXIoJGV2ZW50KVwiIFtyZWFkb25seV09XCJyZWFkb25seVwiIFByZWNpc2lvbkRpcmVjdGl2ZSAoaW5wdXQpPVwiaW5wdXRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtwcmVjaXNpb25UeXBlXT1cInByZWNpc2lvblR5cGVcIiBbcHJlY2lzaW9uXT1cInByZWNpc2lvblwiIHN0ZXA9XCJhbnlcIiAvPlxuXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNvcHlcIiBbbWF0VG9vbHRpcF09XCInQ29weSAnICsgbGFiZWxcIiAqbmdJZj1cImNvcHlcIiAoY2xpY2spPVwiY29weUNvbnRlbnQoKVwiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVuY3ktc3BhblwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImN1cnJlbmN5TG9nb1wiIFthbHRdPVwibGFiZWxcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJyZW5jeS10ZXh0XCI+e3sgY3VycmVuY3kgfCB1cHBlcmNhc2UgfX08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJjb250cm9sLmVycm9ycyAmJiBjb250cm9sLnRvdWNoZWRcIj5cbiAgICAgICAge3sgY29udHJvbC5lcnJvcnNbb2JqZWN0Rm4ua2V5cyhjb250cm9sLmVycm9ycylbMF1dIH19XG4gICAgPC9zcGFuPlxuPC9kaXY+Il19