UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

207 lines (206 loc) 19.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, Output, ViewContainerRef, Type, EventEmitter, ComponentFactoryResolver } from '@angular/core'; import { AbstractDataViewWrapper } from '../dataview/AbstractDataViewWrapper'; import { DATA_CHANGE_EVENT } from '../../share/CustomEventType'; var /** @type {?} */ TYPE_NAME = "phx-record-data-view-wrapper"; var RecordDataViewWrapper = /** @class */ (function (_super) { tslib_1.__extends(RecordDataViewWrapper, _super); function RecordDataViewWrapper(target, componentFactoryResolver) { return _super.call(this, target, componentFactoryResolver) || this; } /** * @return {?} */ RecordDataViewWrapper.prototype.ngOnInit = /** * @return {?} */ function () { _super.prototype.ngOnInit.call(this); }; /** * @param {?} key * @param {?} dataObj * @return {?} */ RecordDataViewWrapper.prototype.parseValue = /** * @param {?} key * @param {?} dataObj * @return {?} */ function (key, dataObj) { if (key == null || dataObj == null) { return null; } var /** @type {?} */ result = null; if (key.indexOf(".") > 0) { var /** @type {?} */ splitKeys = key.split("."); if (splitKeys.length > 0) { var /** @type {?} */ firstKey = splitKeys[0]; var /** @type {?} */ firstValue = dataObj[firstKey]; if (firstValue != null && typeof firstValue !== 'undefined') { if (typeof firstValue === 'object') { if (splitKeys.length > 1) { var /** @type {?} */ secondKey = key.substring(key.indexOf(".") + 1, key.length); return this.parseValue(secondKey, firstValue); // recursive beware looping } } } } } else { result = dataObj[key]; } if (result != null && typeof result !== 'undefined') { return result; } return null; }; /** * @param {?} key * @param {?} dataObj * @param {?} value * @return {?} */ RecordDataViewWrapper.prototype.editDataObjectValue = /** * @param {?} key * @param {?} dataObj * @param {?} value * @return {?} */ function (key, dataObj, value) { if (key == null || dataObj == null || value == null) { return; } if (key.indexOf(".") > 0) { var /** @type {?} */ splitKeys = key.split("."); if (splitKeys.length > 0) { var /** @type {?} */ firstKey = splitKeys[0]; var /** @type {?} */ firstValue = dataObj[firstKey]; if (firstValue != null && typeof firstValue !== 'undefined') { if (typeof firstValue === 'object') { if (splitKeys.length > 1) { var /** @type {?} */ secondKey = key.substring(key.indexOf(".") + 1, key.length); this.editDataObjectValue(secondKey, firstValue, value); // recursive beware looping } } } } } else { dataObj[key] = value; } }; /** * @return {?} */ RecordDataViewWrapper.prototype.render = /** * @return {?} */ function () { var _this = this; if (this.componentType != null && (typeof this.componentType !== 'undefined')) { var /** @type {?} */ simpleCompoFactory = this.componentFactoryResolver.resolveComponentFactory(this.componentType); var /** @type {?} */ compRef = this.target.createComponent(simpleCompoFactory); if (typeof compRef.instance.setData === 'function') { compRef.instance.setData(this.data); } if (typeof compRef.instance.setField === 'function') { compRef.instance.setField(this.fieldValue); } if (typeof compRef.instance.setOptions === 'function') { compRef.instance.setOptions(this.options); } var /** @type {?} */ compHandler = null; if (typeof compRef.instance.getEventHandler === 'function') { compHandler = compRef.instance.getEventHandler(); } if (compHandler !== null && typeof compHandler !== 'undefined') { compHandler.subscribe(function (event) { if (event.type == DATA_CHANGE_EVENT) { // update data row if (_this.editorHandler != null) { _this.editorHandler.onDataChange(event.detail.data); } else { _this.editDataObjectValue(_this.fieldValue, _this.data, event.detail.data); } } _this.eventHandler.emit(event); }); } } }; /** * @return {?} */ RecordDataViewWrapper.prototype.getEventHandler = /** * @return {?} */ function () { return this.eventHandler; }; /** * @param {?} event * @return {?} */ RecordDataViewWrapper.prototype.setEventHandler = /** * @param {?} event * @return {?} */ function (event) { this.eventHandler = event; }; RecordDataViewWrapper.TYPE_NAME = TYPE_NAME; RecordDataViewWrapper.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: "" },] }, ]; /** @nocollapse */ RecordDataViewWrapper.ctorParameters = function () { return [ { type: ViewContainerRef, }, { type: ComponentFactoryResolver, }, ]; }; RecordDataViewWrapper.propDecorators = { "componentType": [{ type: Input },], "data": [{ type: Input },], "eventHandler": [{ type: Output },], "fieldValue": [{ type: Input },], "options": [{ type: Input },], "editorHandler": [{ type: Input },], }; return RecordDataViewWrapper; }(AbstractDataViewWrapper)); export { RecordDataViewWrapper }; function RecordDataViewWrapper_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ RecordDataViewWrapper.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ RecordDataViewWrapper.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ RecordDataViewWrapper.propDecorators; /** @type {?} */ RecordDataViewWrapper.TYPE_NAME; /** @type {?} */ RecordDataViewWrapper.prototype.componentType; /** @type {?} */ RecordDataViewWrapper.prototype.data; /** @type {?} */ RecordDataViewWrapper.prototype.eventHandler; /** @type {?} */ RecordDataViewWrapper.prototype.fieldValue; /** @type {?} */ RecordDataViewWrapper.prototype.options; /** @type {?} */ RecordDataViewWrapper.prototype.editorHandler; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkRGF0YVZpZXdXcmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9lZGl0b3IvUmVjb3JkRGF0YVZpZXdXcmFwcGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSWhFLHFCQUFNLFNBQVMsR0FBVyw4QkFBOEIsQ0FBQzs7SUFPZCxpREFBdUI7SUFpQmhFLCtCQUFZLE1BQXdCLEVBQUUsd0JBQWtEO2VBQ3RGLGtCQUFNLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQztLQUN4Qzs7OztJQUVNLHdDQUFROzs7O1FBQ2IsaUJBQU0sUUFBUSxXQUFFLENBQUM7Ozs7Ozs7SUFHWCwwQ0FBVTs7Ozs7Y0FBQyxHQUFXLEVBQUUsT0FBWTtRQUMxQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDYjtRQUVELHFCQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFFbEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLHFCQUFJLFNBQVMsR0FBYSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFD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SSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUMvQixLQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUNwRDt3QkFBQyxJQUFJLENBQUMsQ0FBQzs0QkFDTixLQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSSxDQUFDLFVBQVUsRUFBRSxLQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ3pFO3FCQUNGO29CQUVELEtBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUMvQixDQUFDLENBQUM7YUFDSjtTQUVGOzs7OztJQUdJLCtDQUFlOzs7O1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDOzs7Ozs7SUFHcEIsK0NBQWU7Ozs7Y0FBQyxLQUFVO1FBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDOztzQ0E5SGUsU0FBUzs7Z0JBUHJELFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ25CLFFBQVEsRUFBRSxTQUFTO29CQUNuQixRQUFRLEVBQUUsRUFBRTtpQkFDYjs7OztnQkFiMEMsZ0JBQWdCO2dCQUFzQix3QkFBd0I7OztrQ0FrQnRHLEtBQUs7eUJBRUwsS0FBSztpQ0FFTCxNQUFNOytCQUVOLEtBQUs7NEJBRUwsS0FBSztrQ0FFTCxLQUFLOztnQ0E1QlI7RUFjMkMsdUJBQXVCO1NBQXJELHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBWaWV3Q29udGFpbmVyUmVmLCBUeXBlLCBFdmVudEVtaXR0ZXIsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3REYXRhVmlld1dyYXBwZXIgfSBmcm9tICcuLi9kYXRhdmlldy9BYnN0cmFjdERhdGFWaWV3V3JhcHBlcic7XG5pbXBvcnQgeyBJRWRpdG9ySGFuZGxlciB9IGZyb20gJy4vSUVkaXRvckhhbmRsZXInO1xuaW1wb3J0IHsgREFUQV9DSEFOR0VfRVZFTlQgfSBmcm9tICcuLi8uLi9zaGFyZS9DdXN0b21FdmVudFR5cGUnO1xuXG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtcmVjb3JkLWRhdGEtdmlldy13cmFwcGVyXCI7XG5cbkBDb21wb25lbnQoe1xuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICB0ZW1wbGF0ZTogYGBcbn0pXG5leHBvcnQgY2xhc3MgUmVjb3JkRGF0YVZpZXdXcmFwcGVyIGV4dGVuZHMgQWJzdHJhY3REYXRhVmlld1dyYXBwZXIgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGNvbXBvbmVudFR5cGU6IFR5cGU8YW55PjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgQE91dHB1dCgpXG4gIHByb3RlY3RlZCBldmVudEhhbmRsZXI6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgZmllbGRWYWx1ZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgb3B0aW9uczogYW55O1xuICBASW5wdXQoKVxuICBwcml2YXRlIGVkaXRvckhhbmRsZXI6IElFZGl0b3JIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHRhcmdldDogVmlld0NvbnRhaW5lclJlZiwgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcbiAgICBzdXBlcih0YXJnZXQsIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWx1ZShrZXk6IHN0cmluZywgZGF0YU9iajogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoa2V5ID09IG51bGwgfHwgZGF0YU9iaiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIGlmIChrZXkuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICBsZXQgc3BsaXRLZXlzOiBzdHJpbmdbXSA9IGtleS5zcGxpdChcIi5cIik7XG4gICAgICBpZiAoc3BsaXRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGZpcnN0S2V5OiBzdHJpbmcgPSBzcGxpdEtleXNbMF07XG4gICAgICAgIGxldCBmaXJzdFZhbHVlOiBhbnkgPSBkYXRhT2JqW2ZpcnN0S2V5XTtcblxuICAgICAgICBpZiAoZmlyc3RWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBmaXJzdFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZmlyc3RWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChzcGxpdEtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBsZXQgc2Vjb25kS2V5OiBzdHJpbmcgPSBrZXkuc3Vic3RyaW5nKGtleS5pbmRleE9mKFwiLlwiKSArIDEsIGtleS5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVmFsdWUoc2Vjb25kS2V5LCBmaXJzdFZhbHVlKTsgLy8gcmVjdXJzaXZlIGJld2FyZSBsb29waW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGRhdGFPYmpba2V5XTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0ICE9IG51bGwgJiYgdHlwZW9mIHJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVkaXREYXRhT2JqZWN0VmFsdWUoa2V5OiBzdHJpbmcsIGRhdGFPYmo6IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmIChrZXkgPT0gbnVsbCB8fCBkYXRhT2JqID09IG51bGwgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICBsZXQgc3BsaXRLZXlzOiBzdHJpbmdbXSA9IGtleS5zcGxpdChcIi5cIik7XG4gICAgICBpZiAoc3BsaXRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGZpcnN0S2V5OiBzdHJpbmcgPSBzcGxpdEtleXNbMF07XG4gICAgICAgIGxldCBmaXJzdFZhbHVlOiBhbnkgPSBkYXRhT2JqW2ZpcnN0S2V5XTtcblxuICAgICAgICBpZiAoZmlyc3RWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBmaXJzdFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZmlyc3RWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmIChzcGxpdEtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBsZXQgc2Vjb25kS2V5OiBzdHJpbmcgPSBrZXkuc3Vic3RyaW5nKGtleS5pbmRleE9mKFwiLlwiKSArIDEsIGtleS5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgIHRoaXMuZWRpdERhdGFPYmplY3RWYWx1ZShzZWNvbmRLZXksIGZpcnN0VmFsdWUsIHZhbHVlKTsgLy8gcmVjdXJzaXZlIGJld2FyZSBsb29waW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFPYmpba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50VHlwZSAhPSBudWxsICYmICh0eXBlb2YgdGhpcy5jb21wb25lbnRUeXBlICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgIGNvbnN0IHNpbXBsZUNvbXBvRmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY29tcG9uZW50VHlwZSk7XG4gICAgICBsZXQgY29tcFJlZiA9IHRoaXMudGFyZ2V0LmNyZWF0ZUNvbXBvbmVudChzaW1wbGVDb21wb0ZhY3RvcnkpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBSZWYuaW5zdGFuY2Uuc2V0RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnNldERhdGEodGhpcy5kYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY29tcFJlZi5pbnN0YW5jZS5zZXRGaWVsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnNldEZpZWxkKHRoaXMuZmllbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGNvbXBSZWYuaW5zdGFuY2Uuc2V0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnNldE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGNvbXBIYW5kbGVyID0gbnVsbDtcbiAgICAgIGlmICh0eXBlb2YgY29tcFJlZi5pbnN0YW5jZS5nZXRFdmVudEhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29tcEhhbmRsZXIgPSBjb21wUmVmLmluc3RhbmNlLmdldEV2ZW50SGFuZGxlcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcEhhbmRsZXIgIT09IG51bGwgJiYgdHlwZW9mIGNvbXBIYW5kbGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb21wSGFuZGxlci5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PSBEQVRBX0NIQU5HRV9FVkVOVCkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIGRhdGEgcm93XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JIYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhpcy5lZGl0b3JIYW5kbGVyLm9uRGF0YUNoYW5nZShldmVudC5kZXRhaWwuZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmVkaXREYXRhT2JqZWN0VmFsdWUodGhpcy5maWVsZFZhbHVlLCB0aGlzLmRhdGEsIGV2ZW50LmRldGFpbC5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlci5lbWl0KGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RXZlbnRIYW5kbGVyKCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5ldmVudEhhbmRsZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0RXZlbnRIYW5kbGVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmV2ZW50SGFuZGxlciA9IGV2ZW50O1xuICB9XG5cbn1cbiJdfQ==