soc-date-box.js 20.9 KB
/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
 */
import * as tslib_1 from "tslib";
import { NgModule, Component, Input, Output, EventEmitter, forwardRef } from '@angular/core';
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
import { CommonModule } from '@angular/common';
import { SharedModule } from 'primeng/primeng';
import { DxDateBoxModule } from 'devextreme-angular/ui/date-box';
import { Common } from '../_services/common.service';
import { formatDate } from "devextreme/localization";
import moment from 'moment-es6';
import { locale } from 'devextreme/localization';
import 'devextreme-intl';
import { baseZIndex } from 'devextreme/ui/overlay';
// # Calendar TH
locale('th'); // # Calendar TH
baseZIndex(9999);
var SocDateBoxComponent = /** @class */ (function () {
    function SocDateBoxComponent(common) {
        var _this = this;
        this.common = common;
        this.id = '';
        this.width = '100%';
        this.type = 'date';
        this.max = undefined;
        this.min = undefined;
        this.acceptCustomValue = true;
        this.maxZoomLevel = 'month';
        this.minZoomLevel = 'century';
        this.valueChange = new EventEmitter();
        this.openOnFieldClick = true;
        this.disabled = false;
        this.interval = 30;
        this.showAnalogClock = false;
        this.format = {
            formatter: function (date) {
                if (_this.type === 'datetime') {
                    return formatDate(date, 'shortDateShortTime');
                }
                else if (_this.type === 'time') {
                    return formatDate(date, 'shortTime');
                }
                else {
                    return formatDate(date, 'shortDate');
                }
            },
            parser: function (date) {
                /** @type {?} */
                var format = 'D/M/YYYY';
                if (_this.type === 'datetime') {
                    format = 'D/M/YYYY HH:mm';
                }
                else if (_this.type === 'time') {
                    format = 'HH:mm';
                }
                /** @type {?} */
                var dateFormated = moment(date, format, true).subtract(543, 'year').toDate();
                return dateFormated;
            }
        };
        /**
         * START Bind Value
         */
        this.onModelChange = function () { };
        this.onModelTouched = function () { };
    }
    /**
     * @return {?}
     */
    SocDateBoxComponent.prototype.ngOnInit = /**
     * @return {?}
     */
    function () {
        return tslib_1.__awaiter(this, void 0, void 0, function () {
            return tslib_1.__generator(this, function (_a) {
                return [2 /*return*/];
            });
        });
    };
    /**
     * @return {?}
     */
    SocDateBoxComponent.prototype.ngAfterViewInit = /**
     * @return {?}
     */
    function () {
    };
    /**
     * @return {?}
     */
    SocDateBoxComponent.prototype.onOpened = /**
     * @return {?}
     */
    function () {
        this.common.fnChangeCalendarYear(); // # Calendar TH
        if (this.maxZoomLevel === 'year' || this.maxZoomLevel === 'decade') {
            this.common.fnChangeCalendarYearOnce(); // # Calendar TH
        }
        /** *
         * SECTION แก้ปัญหา ปฏิทินไม่แสดงใน modal ที่ prod
          @type {?} */
        var element = document.querySelector('.dx-overlay-wrapper.dx-dropdowneditor-overlay.dx-popup-wrapper.dx-datebox-wrapper.dx-datebox-wrapper-date.dx-datebox-wrapper-calendar');
        /** @type {?} */
        var subElement = document.querySelector('.dx-overlay-wrapper.dx-dropdowneditor-overlay.dx-popup-wrapper.dx-datebox-wrapper.dx-datebox-wrapper-date.dx-datebox-wrapper-calendar > .dx-overlay-content.dx-popup-normal');
        if (element) {
            /** @type {?} */
            var style = element.getAttribute('style');
            /** @type {?} */
            var newStyle = style.replace('z-index: 1501;', 'z-index: 2050;');
            console.log('LOG: SocDateBoxComponent -> onOpened -> newStyle element', newStyle);
            element.setAttribute('style', newStyle);
        }
        if (subElement) {
            /** @type {?} */
            var style = subElement.getAttribute('style');
            /** @type {?} */
            var newStyle = style.replace('z-index: 1501;', 'z-index: 2050;');
            console.log('LOG: SocDateBoxComponent -> onOpened -> newStyle subElement', newStyle);
            subElement.setAttribute('style', newStyle);
        }
        /** !SECTION */
    };
    /**
     * @param {?} e
     * @return {?}
     */
    SocDateBoxComponent.prototype.onValueChanged = /**
     * @param {?} e
     * @return {?}
     */
    function (e) {
        console.log("​SocDateBoxComponent -> onValueChanged -> e", e);
        this.valueChange.emit(e.value);
    };
    /**
     * @param {?} value
     * @return {?}
     */
    SocDateBoxComponent.prototype.writeValue = /**
     * @param {?} value
     * @return {?}
     */
    function (value) { };
    /**
     * @param {?} fn
     * @return {?}
     */
    SocDateBoxComponent.prototype.registerOnChange = /**
     * @param {?} fn
     * @return {?}
     */
    function (fn) { };
    /**
     * @param {?} fn
     * @return {?}
     */
    SocDateBoxComponent.prototype.registerOnTouched = /**
     * @param {?} fn
     * @return {?}
     */
    function (fn) { };
    SocDateBoxComponent.decorators = [
        { type: Component, args: [{
                    selector: 'soc-date-box',
                    providers: [{
                            provide: NG_VALUE_ACCESSOR,
                            useExisting: forwardRef(function () { return SocDateBoxComponent; }),
                            multi: true
                        }],
                    template: "\n    <dx-date-box [showAnalogClock]=\"showAnalogClock\" [id]=\"id\" [(value)]=\"value\" [type]=\"type\" [disabled]=\"disabled\" [width]=\"width\" [interval]=\"interval\" [acceptCustomValue]=\"true\" [displayFormat]=\"format\" invalidDateMessage=\"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07 \u0E01\u0E23\u0E38\u0E13\u0E32\u0E01\u0E23\u0E2D\u0E01\u0E40\u0E1B\u0E47\u0E19 \u0E27\u0E31\u0E19/\u0E40\u0E14\u0E37\u0E2D\u0E19/\u0E1B\u0E35\"\n    [openOnFieldClick]=\"openOnFieldClick\" (onOpened)=\"onOpened()\" (onValueChanged)=\"onValueChanged($event)\" [max]=\"max\" [min]=\"min\" [maxZoomLevel]=\"maxZoomLevel\" [minZoomLevel]=\"minZoomLevel\"></dx-date-box>\n\n"
                }] }
    ];
    /** @nocollapse */
    SocDateBoxComponent.ctorParameters = function () { return [
        { type: Common }
    ]; };
    SocDateBoxComponent.propDecorators = {
        id: [{ type: Input }],
        width: [{ type: Input }],
        type: [{ type: Input }],
        value: [{ type: Input }],
        max: [{ type: Input }],
        min: [{ type: Input }],
        acceptCustomValue: [{ type: Input }],
        maxZoomLevel: [{ type: Input }],
        minZoomLevel: [{ type: Input }],
        valueChange: [{ type: Output }],
        openOnFieldClick: [{ type: Input }],
        disabled: [{ type: Input }],
        interval: [{ type: Input }],
        showAnalogClock: [{ type: Input }]
    };
    return SocDateBoxComponent;
}());
export { SocDateBoxComponent };
if (false) {
    /** @type {?} */
    SocDateBoxComponent.prototype.id;
    /** @type {?} */
    SocDateBoxComponent.prototype.width;
    /** @type {?} */
    SocDateBoxComponent.prototype.type;
    /** @type {?} */
    SocDateBoxComponent.prototype.value;
    /** @type {?} */
    SocDateBoxComponent.prototype.max;
    /** @type {?} */
    SocDateBoxComponent.prototype.min;
    /** @type {?} */
    SocDateBoxComponent.prototype.acceptCustomValue;
    /** @type {?} */
    SocDateBoxComponent.prototype.maxZoomLevel;
    /** @type {?} */
    SocDateBoxComponent.prototype.minZoomLevel;
    /** @type {?} */
    SocDateBoxComponent.prototype.valueChange;
    /** @type {?} */
    SocDateBoxComponent.prototype.openOnFieldClick;
    /** @type {?} */
    SocDateBoxComponent.prototype.disabled;
    /** @type {?} */
    SocDateBoxComponent.prototype.interval;
    /** @type {?} */
    SocDateBoxComponent.prototype.showAnalogClock;
    /** @type {?} */
    SocDateBoxComponent.prototype.format;
    /**
     * START Bind Value
     * @type {?}
     */
    SocDateBoxComponent.prototype.onModelChange;
    /** @type {?} */
    SocDateBoxComponent.prototype.onModelTouched;
    /** @type {?} */
    SocDateBoxComponent.prototype.common;
}
var SharedDateBoxModule = /** @class */ (function () {
    function SharedDateBoxModule() {
    }
    SharedDateBoxModule.decorators = [
        { type: NgModule, args: [{
                    imports: [CommonModule, FormsModule, SharedModule, DxDateBoxModule],
                    exports: [SocDateBoxComponent, SharedModule],
                    declarations: [SocDateBoxComponent],
                },] }
    ];
    return SharedDateBoxModule;
}());
export { SharedDateBoxModule };

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29jLWRhdGUtYm94LmpzIiwic291cmNlUm9vdCI6Im5nOi8vc29jLWFwcC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL190ZW1wbGF0ZS9zb2MtZGF0ZS1ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0gsUUFBUSxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQ3ZFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLE1BQU0sTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQUVqRCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDYixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBa0RiLDZCQUFvQixNQUFjO1FBQWxDLGlCQUF3QztRQUFwQixXQUFNLEdBQU4sTUFBTSxDQUFRO2tCQW5DcEIsRUFBRTtxQkFDQyxNQUFNO29CQUNQLE1BQU07bUJBRVAsU0FBUzttQkFDVCxTQUFTO2lDQUNLLElBQUk7NEJBQ1QsT0FBTzs0QkFDUCxTQUFTOzJCQUNhLElBQUksWUFBWSxFQUFVO2dDQUM1QyxJQUFJO3dCQUNaLEtB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QWhCLFVBQWlCLEVBQVksS0FBVzs7Ozs7SUFDeEMsK0NBQWlCOzs7O0lBQWpCLFVBQWtCLEVBQVksS0FBVzs7Z0JBN0Y1QyxTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFNBQVMsRUFBRSxDQUFDOzRCQUNSLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLG1CQUFtQixFQUFuQixDQUFtQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDZCxDQUFDO29CQUNGLFFBQVEsRUFBRSw0c0JBSWI7aUJBQ0E7Ozs7Z0JBckJRLE1BQU07OztxQkF1QlYsS0FBSzt3QkFDTCxLQUFLO3VCQUNMLEtBQUs7d0JBQ0wsS0FBSztzQkFDTCxLQUFLO3NCQUNMLEtBQUs7b0NBQ0wsS0FBSzsrQkFDTCxLQUFLOytCQUNMLEtBQUs7OEJBQ0wsTUFBTTttQ0FDTixLQUFLOzJCQUNMLEtBQUs7MkJBQ0wsS0FBSztrQ0FDTCxLQUFLOzs4QkE3Q1Y7O1NBK0JhLG1CQUFtQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQkFxRi9CLFFBQVEsU0FBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUM7b0JBQ25FLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixFQUFFLFlBQVksQ0FBQztvQkFDNUMsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQ3RDOzs4QkF4SEQ7O1NBeUhhLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgTmdNb2R1bGUsIENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNoYXJlZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcHJpbWVuZyc7XG4vLyBpbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnLi4vX3NlcnZpY2VzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBEeERhdGVCb3hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvZGF0ZS1ib3gnO1xuaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi4vX3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tIFwiZGV2ZXh0cmVtZS9sb2NhbGl6YXRpb25cIjtcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LWVzNic7XG5pbXBvcnQgeyBsb2NhbGUgfSBmcm9tICdkZXZleHRyZW1lL2xvY2FsaXphdGlvbic7IC8vICMgQ2FsZW5kYXIgVEhcbmltcG9ydCAnZGV2ZXh0cmVtZS1pbnRsJztcbmltcG9ydCB7YmFzZVpJbmRleH0gZnJvbSAnZGV2ZXh0cmVtZS91aS9vdmVybGF5Jztcbi8vICMgQ2FsZW5kYXIgVEhcbmxvY2FsZSgndGgnKTsvLyAjIENhbGVuZGFyIFRIXG5iYXNlWkluZGV4KDk5OTkpO1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzb2MtZGF0ZS1ib3gnLFxuICAgIHByb3ZpZGVyczogW3tcbiAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNvY0RhdGVCb3hDb21wb25lbnQpLFxuICAgICAgICBtdWx0aTogdHJ1ZVxuICAgIH1dLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgPGR4LWRhdGUtYm94IFtzaG93QW5hbG9nQ2xvY2tdPVwic2hvd0FuYWxvZ0Nsb2NrXCIgW2lkXT1cImlkXCIgWyh2YWx1ZSldPVwidmFsdWVcIiBbdHlwZV09XCJ0eXBlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3dpZHRoXT1cIndpZHRoXCIgW2ludGVydmFsXT1cImludGVydmFsXCIgW2FjY2VwdEN1c3RvbVZhbHVlXT1cInRydWVcIiBbZGlzcGxheUZvcm1hdF09XCJmb3JtYXRcIiBpbnZhbGlkRGF0ZU1lc3NhZ2U9XCLguKfguLHguJnguJfguLXguYjguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcg4LiB4Lij4Li44LiT4Liy4LiB4Lij4Lit4LiB4LmA4Lib4LmH4LiZIOC4p+C4seC4mS/guYDguJTguLfguK3guJkv4Lib4Li1XCJcbiAgICBbb3Blbk9uRmllbGRDbGlja109XCJvcGVuT25GaWVsZENsaWNrXCIgKG9uT3BlbmVkKT1cIm9uT3BlbmVkKClcIiAob25WYWx1ZUNoYW5nZWQpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiIFttYXhdPVwibWF4XCIgW21pbl09XCJtaW5cIiBbbWF4Wm9vbUxldmVsXT1cIm1heFpvb21MZXZlbFwiIFttaW5ab29tTGV2ZWxdPVwibWluWm9vbUxldmVsXCI+PC9keC1kYXRlLWJveD5cblxuYFxufSlcbmV4cG9ydCBjbGFzcyBTb2NEYXRlQm94Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQElucHV0KCkgaWQgPSAnJztcbiAgICBASW5wdXQoKSB3aWR0aCA9ICcxMDAlJztcbiAgICBASW5wdXQoKSB0eXBlID0gJ2RhdGUnO1xuICAgIEBJbnB1dCgpIHZhbHVlOiBhbnk7XG4gICAgQElucHV0KCkgbWF4ID0gdW5kZWZpbmVkO1xuICAgIEBJbnB1dCgpIG1pbiA9IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSBhY2NlcHRDdXN0b21WYWx1ZSA9IHRydWU7XG4gICAgQElucHV0KCkgbWF4Wm9vbUxldmVsID0gJ21vbnRoJztcbiAgICBASW5wdXQoKSBtaW5ab29tTGV2ZWwgPSAnY2VudHVyeSc7XG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIEBJbnB1dCgpIG9wZW5PbkZpZWxkQ2xpY2sgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gICAgQElucHV0KCkgaW50ZXJ2YWw6IG51bWJlciA9IDMwO1xuICAgIEBJbnB1dCgpIHNob3dBbmFsb2dDbG9jazogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGZvcm1hdCA9IHtcbiAgICAgICAgZm9ybWF0dGVyOiAoZGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXREYXRlKGRhdGUsICdzaG9ydERhdGVTaG9ydFRpbWUnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAndGltZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZShkYXRlLCAnc2hvcnRUaW1lJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXREYXRlKGRhdGUsICdzaG9ydERhdGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGFyc2VyOiAoZGF0ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IGZvcm1hdCA9ICdEL00vWVlZWSc7XG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gJ0QvTS9ZWVlZIEhIOm1tJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAndGltZScpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSAnSEg6bW0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0ZUZvcm1hdGVkID0gbW9tZW50KGRhdGUsIGZvcm1hdCwgdHJ1ZSkuc3VidHJhY3QoNTQzLCAneWVhcicpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVGb3JtYXRlZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb21tb246IENvbW1vbiwpIHsgfVxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgfVxuICAgIG9uT3BlbmVkKCkge1xuICAgICAgICB0aGlzLmNvbW1vbi5mbkNoYW5nZUNhbGVuZGFyWWVhcigpOyAvLyAjIENhbGVuZGFyIFRIXG4gICAgICAgIGlmICh0aGlzLm1heFpvb21MZXZlbCA9PT0gJ3llYXInIHx8IHRoaXMubWF4Wm9vbUxldmVsID09PSAnZGVjYWRlJykge1xuICAgICAgICAgICAgdGhpcy5jb21tb24uZm5DaGFuZ2VDYWxlbmRhclllYXJPbmNlKCk7IC8vICMgQ2FsZW5kYXIgVEhcbiAgICAgICAgfVxuICAgICAgICAvKiogU0VDVElPTiDguYHguIHguYnguJvguLHguI3guKvguLIg4Lib4LiP4Li04LiX4Li04LiZ4LmE4Lih4LmI4LmB4Liq4LiU4LiH4LmD4LiZIG1vZGFsIOC4l+C4teC5iCBwcm9kICovXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHgtb3ZlcmxheS13cmFwcGVyLmR4LWRyb3Bkb3duZWRpdG9yLW92ZXJsYXkuZHgtcG9wdXAtd3JhcHBlci5keC1kYXRlYm94LXdyYXBwZXIuZHgtZGF0ZWJveC13cmFwcGVyLWRhdGUuZHgtZGF0ZWJveC13cmFwcGVyLWNhbGVuZGFyJyk7XG4gICAgICAgIGNvbnN0IHN1YkVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHgtb3ZlcmxheS13cmFwcGVyLmR4LWRyb3Bkb3duZWRpdG9yLW92ZXJsYXkuZHgtcG9wdXAtd3JhcHBlci5keC1kYXRlYm94LXdyYXBwZXIuZHgtZGF0ZWJveC13cmFwcGVyLWRhdGUuZHgtZGF0ZWJveC13cmFwcGVyLWNhbGVuZGFyID4gLmR4LW92ZXJsYXktY29udGVudC5keC1wb3B1cC1ub3JtYWwnKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgICAgICBjb25zdCBuZXdTdHlsZSA9IHN0eWxlLnJlcGxhY2UoJ3otaW5kZXg6IDE1MDE7JywgJ3otaW5kZXg6IDIwNTA7Jyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTE9HOiBTb2NEYXRlQm94Q29tcG9uZW50IC0+IG9uT3BlbmVkIC0+IG5ld1N0eWxlIGVsZW1lbnQnLCBuZXdTdHlsZSk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBuZXdTdHlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1YkVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gc3ViRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgICAgICBjb25zdCBuZXdTdHlsZSA9IHN0eWxlLnJlcGxhY2UoJ3otaW5kZXg6IDE1MDE7JywgJ3otaW5kZXg6IDIwNTA7Jyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTE9HOiBTb2NEYXRlQm94Q29tcG9uZW50IC0+IG9uT3BlbmVkIC0+IG5ld1N0eWxlIHN1YkVsZW1lbnQnLCBuZXdTdHlsZSk7XG4gICAgICAgICAgICBzdWJFbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBuZXdTdHlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqICFTRUNUSU9OICovXG4gICAgfVxuICAgIG9uVmFsdWVDaGFuZ2VkKGU6YW55KSB7XG5cdFx0Y29uc29sZS5sb2coXCLigItTb2NEYXRlQm94Q29tcG9uZW50IC0+IG9uVmFsdWVDaGFuZ2VkIC0+IGVcIiwgZSlcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGUudmFsdWUpO1xuICAgIH1cbiAgICAvLyBkaXNwbGF5Rm9ybWF0ICh2YWx1ZSkge1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhcIuKAi1NvY0RhdGVCb3hDb21wb25lbnQgLT4gZGlzcGxheUZvcm1hdCAtPiB2YWx1ZVwiLCB2YWx1ZSlcbiAgICAvLyAgICAgY29uc3QgeWVhciA9IG1vbWVudCh2YWx1ZSkuZ2V0KCd5ZWFyJyk7XG5cdC8vIFx0Y29uc29sZS5sb2coXCLigItTb2NEYXRlQm94Q29tcG9uZW50IC0+IGRpc3BsYXlGb3JtYXQgLT4geWVhclwiLCB5ZWFyKVxuICAgIC8vICAgICAvLyBsZXQgZGF0ZVN0cmluZyA9IGZvcm1hdERhdGUodmFsdWUsIFwibG9uZ0RhdGVcIik7XG4gICAgLy8gICAgIGxldCBkYXRlU3RyaW5nID0gIG1vbWVudCh2YWx1ZSkuYWRkKDU0MywneWVhcicpLmZvcm1hdCgnREQvTU0vWVlZWScpXG4gICAgLy8gICAgIHJldHVybiBkYXRlU3RyaW5nO1xuICAgIC8vIH1cbiAgICAvKiogU1RBUlQgQmluZCBWYWx1ZSAqL1xuICAgIG9uTW9kZWxDaGFuZ2U6IEZ1bmN0aW9uID0gKCkgPT4geyB9O1xuICAgIG9uTW9kZWxUb3VjaGVkOiBGdW5jdGlvbiA9ICgpID0+IHsgfTtcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHsgfVxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEZ1bmN0aW9uKTogdm9pZCB7IH1cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pOiB2b2lkIHsgfVxuICAgIC8qKiBFTkQgQmluZCBWYWx1ZSAqL1xuXG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFNoYXJlZE1vZHVsZSwgRHhEYXRlQm94TW9kdWxlXSxcbiAgICBleHBvcnRzOiBbU29jRGF0ZUJveENvbXBvbmVudCwgU2hhcmVkTW9kdWxlXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtTb2NEYXRlQm94Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgU2hhcmVkRGF0ZUJveE1vZHVsZSB7IH1cbiJdfQ==