ngx-form-control
Version:
Form controls for angular 6
200 lines (199 loc) • 18.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, ViewChild } from '@angular/core';
import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
import { BaseListControlComponent } from '../../utils/base-list-control.component';
var FormCheckboxComponent = /** @class */ (function (_super) {
tslib_1.__extends(FormCheckboxComponent, _super);
function FormCheckboxComponent() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this._isTouched = false;
return _this;
}
Object.defineProperty(FormCheckboxComponent.prototype, "isEmpty", {
get: /**
* @return {?}
*/
function () {
return !this._selectedIndexes || !this._selectedIndexes.length;
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormCheckboxComponent.prototype, "value", {
get: /**
* @return {?}
*/
function () {
var _this = this;
return this.isEmpty ? null : this._selectedIndexes.map(function (index) { return _this._selectOptions[index].value; });
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormCheckboxComponent.prototype, "invalid", {
get: /**
* @return {?}
*/
function () {
if (this.hasCustomError) {
return true;
}
if (!this._isTouched) {
return false;
}
return this.hasRequiredError;
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormCheckboxComponent.prototype, "valid", {
get: /**
* @return {?}
*/
function () {
if (this.hasCustomError) {
return false;
}
if (!this._isTouched) {
return false;
}
return !this.hasRequiredError;
},
enumerable: true,
configurable: true
});
Object.defineProperty(FormCheckboxComponent.prototype, "errorMessages", {
get: /**
* @return {?}
*/
function () {
if (this.hasCustomError) {
return this.innerCustomErrorMessages;
}
if (this.hasRequiredError) {
return [this.requiredErrorMessage];
}
},
enumerable: true,
configurable: true
});
/**
* @param {?} value
* @return {?}
*/
FormCheckboxComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
var _this = this;
/** @type {?} */
var listElement = this.listRadioElement.nativeElement.querySelectorAll('.custom-control-input');
try {
for (var listElement_1 = tslib_1.__values(listElement), listElement_1_1 = listElement_1.next(); !listElement_1_1.done; listElement_1_1 = listElement_1.next()) {
var element = listElement_1_1.value;
element.checked = false;
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (listElement_1_1 && !listElement_1_1.done && (_a = listElement_1.return)) _a.call(listElement_1);
}
finally { if (e_1) throw e_1.error; }
}
if (!value) {
return;
}
this._selectedIndexes = this.findIndexes(value);
if (!this.listRadioElement || !this.listRadioElement.nativeElement) {
return;
}
if (this.value) {
setTimeout(function () {
_this._selectedIndexes.map(function (index) {
listElement[index].checked = true;
});
});
}
var e_1, _a;
};
/**
* @return {?}
*/
FormCheckboxComponent.prototype.validate = /**
* @return {?}
*/
function () {
/** @type {?} */
var result = {};
if (this.hasRequiredError) {
result['required'] = true;
}
return result;
};
// noinspection JSMethodCanBeStatic
/**
* @param {?} index
* @param {?} event
* @return {?}
*/
FormCheckboxComponent.prototype.toggle = /**
* @param {?} index
* @param {?} event
* @return {?}
*/
function (index, event) {
this._isTouched = true;
/** @type {?} */
var checked = event.target.checked;
index = +index;
if (checked) {
this._selectedIndexes.push(index);
}
else {
/** @type {?} */
var indexOfIndex = this._selectedIndexes.indexOf(index);
if (indexOfIndex > -1) {
this._selectedIndexes.splice(indexOfIndex, 1);
}
}
this.triggerChange();
};
/**
* @return {?}
*/
FormCheckboxComponent.prototype.reset = /**
* @return {?}
*/
function () {
this._isTouched = false;
};
FormCheckboxComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-form-checkbox',
template: "<label *ngIf=\"label\" [for]=\"id\">{{label}}</label>\n\n<div #listRadioElement>\n <div class=\"custom-control custom-checkbox\" *ngFor=\"let option of selectOptions; let index = index;\">\n <input class=\"custom-control-input\"\n [ngClass]=\"{'is-invalid': invalid, 'is-valid': valid}\"\n type=\"checkbox\"\n [id]=\"id + '-' + index\"\n [name]=\"id\"\n (click)=\"toggle(index, $event)\"\n title=\"\">\n <label class=\"custom-control-label\" [for]=\"id + '-' + index\">{{option.text}}</label>\n </div>\n</div>\n\n<ng-container *ngIf=\"valid && validMessage\">\n <div class=\"custom-control-input is-valid\"></div>\n <div class=\"valid-feedback\">{{validMessage}}</div>\n</ng-container>\n\n<ng-container *ngIf=\"invalid\">\n <div class=\"custom-control-input is-invalid\"></div>\n <div class=\"invalid-feedback\">\n <span *ngFor=\"let message of errorMessages; let last = last;\">\n {{message}}<br *ngIf=\"!last\">\n </span>\n </div>\n</ng-container>\n",
styles: [":host .form-check.is-valid~.invalid-feedback,:host .form-check.is-valid~.invalid-tooltip,:host .form-check.is-valid~.valid-feedback,:host .form-check.is-valid~.valid-tooltip,:host .was-validated~.invalid-feedback,:host .was-validated~.invalid-tooltip,:host .was-validated~.valid-feedback,:host .was-validated~.valid-tooltip{display:block}"],
providers: [
{ provide: NG_VALUE_ACCESSOR, useExisting: FormCheckboxComponent, multi: true },
{ provide: NG_VALIDATORS, useExisting: FormCheckboxComponent, multi: true }
]
},] },
];
FormCheckboxComponent.propDecorators = {
listRadioElement: [{ type: ViewChild, args: ['listRadioElement',] }]
};
return FormCheckboxComponent;
}(BaseListControlComponent));
export { FormCheckboxComponent };
if (false) {
/** @type {?} */
FormCheckboxComponent.prototype.listRadioElement;
/** @type {?} */
FormCheckboxComponent.prototype._isTouched;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jaGVja2JveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZm9ybS1jb250cm9sLyIsInNvdXJjZXMiOlsibGliL2Zvcm0tY2hlY2tib3gvZm9ybS1jaGVja2JveC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7SUF1Q3hDLGlEQUF3Qjs7OzJCQUk1QyxLQUFLOzs7SUFFMUIsc0JBQUksMENBQU87Ozs7UUFBWDtZQUNFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7U0FDaEU7OztPQUFBO0lBRUQsc0JBQUksd0NBQUs7Ozs7UUFBVDtZQUFBLGlCQUVDO1lBREMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxVQUFBLEtBQUssSUFBSSxPQUFBLEtBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFoQyxDQUFnQyxDQUFDLENBQUM7U0FDbkc7OztPQUFBO0lBRUQsc0JBQUksMENBQU87Ozs7UUFBWDtZQUNFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2I7WUFFRCxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixNQUFNLENBQUMsS0FBSyxDQUFD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O1lBRTFELEVBQUUsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQy9DO1NBQ0Y7UUFFRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7S0FDdEI7Ozs7SUFFRCxxQ0FBSzs7O0lBQUw7UUFDRSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztLQUN6Qjs7Z0JBL0lGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixRQUFRLEVBQUUsNmdDQTRCWDtvQkFDQyxNQUFNLEVBQUUsQ0FBQyxvVkFBb1YsQ0FBQztvQkFDOVYsU0FBUyxFQUFFO3dCQUNULEVBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDO3dCQUM3RSxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUM7cUJBQzFFO2lCQUNGOzs7bUNBR0UsU0FBUyxTQUFDLGtCQUFrQjs7Z0NBM0MvQjtFQXlDMkMsd0JBQXdCO1NBQXRELHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYXNlTGlzdENvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuLi8uLi91dGlscy9iYXNlLWxpc3QtY29udHJvbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtZm9ybS1jaGVja2JveCcsXHJcbiAgdGVtcGxhdGU6IGA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JdPVwiaWRcIj57e2xhYmVsfX08L2xhYmVsPlxyXG5cclxuPGRpdiAjbGlzdFJhZGlvRWxlbWVudD5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wgY3VzdG9tLWNoZWNrYm94XCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RPcHRpb25zOyBsZXQgaW5kZXggPSBpbmRleDtcIj5cclxuICAgIDxpbnB1dCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWlucHV0XCJcclxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOiBpbnZhbGlkLCAnaXMtdmFsaWQnOiB2YWxpZH1cIlxyXG4gICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgW2lkXT1cImlkICsgJy0nICsgaW5kZXhcIlxyXG4gICAgICAgICAgIFtuYW1lXT1cImlkXCJcclxuICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlKGluZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICB0aXRsZT1cIlwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBbZm9yXT1cImlkICsgJy0nICsgaW5kZXhcIj57e29wdGlvbi50ZXh0fX08L2xhYmVsPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2YWxpZCAmJiB2YWxpZE1lc3NhZ2VcIj5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXQgaXMtdmFsaWRcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidmFsaWQtZmVlZGJhY2tcIj57e3ZhbGlkTWVzc2FnZX19PC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImludmFsaWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXQgaXMtaW52YWxpZFwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XHJcbiAgICA8c3BhbiAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBlcnJvck1lc3NhZ2VzOyBsZXQgbGFzdCA9IGxhc3Q7XCI+XHJcbiAgICAgIHt7bWVzc2FnZX19PGJyICpuZ0lmPVwiIWxhc3RcIj5cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbmAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IC5mb3JtLWNoZWNrLmlzLXZhbGlkfi5pbnZhbGlkLWZlZWRiYWNrLDpob3N0IC5mb3JtLWNoZWNrLmlzLXZhbGlkfi5pbnZhbGlkLXRvb2x0aXAsOmhvc3QgLmZvcm0tY2hlY2suaXMtdmFsaWR+LnZhbGlkLWZlZWRiYWNrLDpob3N0IC5mb3JtLWNoZWNrLmlzLXZhbGlkfi52YWxpZC10b29sdGlwLDpob3N0IC53YXMtdmFsaWRhdGVkfi5pbnZhbGlkLWZlZWRiYWNrLDpob3N0IC53YXMtdmFsaWRhdGVkfi5pbnZhbGlkLXRvb2x0aXAsOmhvc3QgLndhcy12YWxpZGF0ZWR+LnZhbGlkLWZlZWRiYWNrLDpob3N0IC53YXMtdmFsaWRhdGVkfi52YWxpZC10b29sdGlwe2Rpc3BsYXk6YmxvY2t9YF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBGb3JtQ2hlY2tib3hDb21wb25lbnQsIG11bHRpOiB0cnVlfSxcclxuICAgIHtwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogRm9ybUNoZWNrYm94Q29tcG9uZW50LCBtdWx0aTogdHJ1ZX1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBCYXNlTGlzdENvbnRyb2xDb21wb25lbnQge1xyXG5cclxuICBAVmlld0NoaWxkKCdsaXN0UmFkaW9FbGVtZW50JykgbGlzdFJhZGlvRWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgcHJpdmF0ZSBfaXNUb3VjaGVkID0gZmFsc2U7XHJcblxyXG4gIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl9zZWxlY3RlZEluZGV4ZXMgfHwgIXRoaXMuX3NlbGVjdGVkSW5kZXhlcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmlzRW1wdHkgPyBudWxsIDogdGhpcy5fc2VsZWN0ZWRJbmRleGVzLm1hcChpbmRleCA9PiB0aGlzLl9zZWxlY3RPcHRpb25zW2luZGV4XS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmhhc0N1c3RvbUVycm9yKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5faXNUb3VjaGVkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5oYXNSZXF1aXJlZEVycm9yO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5faXNUb3VjaGVkKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gIXRoaXMuaGFzUmVxdWlyZWRFcnJvcjtcclxuICB9XHJcblxyXG4gIGdldCBlcnJvck1lc3NhZ2VzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgaWYgKHRoaXMuaGFzQ3VzdG9tRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5uZXJDdXN0b21FcnJvck1lc3NhZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc1JlcXVpcmVkRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIFt0aGlzLnJlcXVpcmVkRXJyb3JNZXNzYWdlXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IEFycmF5PGFueT4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGxpc3RFbGVtZW50ID0gdGhpcy5saXN0UmFkaW9FbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmN1c3RvbS1jb250cm9sLWlucHV0Jyk7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGxpc3RFbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3NlbGVjdGVkSW5kZXhlcyA9IHRoaXMuZmluZEluZGV4ZXModmFsdWUpO1xyXG5cclxuICAgIGlmICghdGhpcy5saXN0UmFkaW9FbGVtZW50IHx8ICF0aGlzLmxpc3RSYWRpb0VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleGVzLm1hcChpbmRleCA9PiB7XHJcbiAgICAgICAgICBsaXN0RWxlbWVudFtpbmRleF0uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB7XHJcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcbiAgICBpZiAodGhpcy5oYXNSZXF1aXJlZEVycm9yKSB7XHJcbiAgICAgIHJlc3VsdFsncmVxdWlyZWQnXSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXHJcbiAgdG9nZ2xlKGluZGV4LCBldmVudCkge1xyXG4gICAgdGhpcy5faXNUb3VjaGVkID0gdHJ1ZTtcclxuICAgIGNvbnN0IGNoZWNrZWQgPSBldmVudC50YXJnZXQuY2hlY2tlZDtcclxuXHJcbiAgICBpbmRleCA9ICtpbmRleDtcclxuXHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ZXMucHVzaChpbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleE9mSW5kZXggPSB0aGlzLl9zZWxlY3RlZEluZGV4ZXMuaW5kZXhPZihpbmRleCk7XHJcblxyXG4gICAgICBpZiAoaW5kZXhPZkluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ZXMuc3BsaWNlKGluZGV4T2ZJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5faXNUb3VjaGVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=