UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

472 lines (471 loc) 34.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { AbstractMultiDropdown } from './AbstractMultiDropdown'; import { NeedFocusService } from '../../../service/NeedFocusService.service'; import { I18N } from '../../../decorator/I18N.decorator'; import { Option } from '../../../decorator/Option.decorator'; import { PhloxAppInfoService } from '../../../service/PhloxAppInfoService.service'; var /** @type {?} */ TYPE_NAME = "phx-simple-multi-dropdown"; var SimpleMultiDropdownList = /** @class */ (function (_super) { tslib_1.__extends(SimpleMultiDropdownList, _super); function SimpleMultiDropdownList(needFocusService, elementRef, phloxAppInfoService) { return _super.call(this, needFocusService, elementRef, phloxAppInfoService) || this; } /** * @return {?} */ SimpleMultiDropdownList.prototype.ngOnInit = /** * @return {?} */ function () { _super.prototype.ngOnInit.call(this); }; /** * @param {?} inputValue * @param {?} results * @return {?} */ SimpleMultiDropdownList.prototype.onValidationEnd = /** * @param {?} inputValue * @param {?} results * @return {?} */ function (inputValue, results) { //! do sthing }; /** * @param {?} data * @param {?} inputVal * @return {?} */ SimpleMultiDropdownList.prototype.onDataChange = /** * @param {?} data * @param {?} inputVal * @return {?} */ function (data, inputVal) { }; /** * @param {?} oldValue * @param {?} inputVal * @param {?=} data * @return {?} */ SimpleMultiDropdownList.prototype.onDataChangePrevented = /** * @param {?} oldValue * @param {?} inputVal * @param {?=} data * @return {?} */ function (oldValue, inputVal, data) { this._setData(oldValue, true, null, false); }; /** * @param {?} $event * @return {?} */ SimpleMultiDropdownList.prototype.doFocus = /** * @param {?} $event * @return {?} */ function ($event) { if (this.isDisabled()) { $(this.elementRef.nativeElement).find(".dropdown > .label > button").blur(); } else { $(this.elementRef.nativeElement).find(".dropdown > .label > button").focus(); } }; /** * @param {?} $event * @return {?} */ SimpleMultiDropdownList.prototype.onCheckBeforeChange = /** * @param {?} $event * @return {?} */ function ($event) { $event.preventDefault(); }; /** * @param {?} $event * @return {?} */ SimpleMultiDropdownList.prototype.doBlur = /** * @param {?} $event * @return {?} */ function ($event) { $(this.elementRef.nativeElement).find(".dropdown > .label > button").blur(); }; /** * @return {?} */ SimpleMultiDropdownList.prototype.getItems = /** * @return {?} */ function () { return this.items; }; /** * @return {?} */ SimpleMultiDropdownList.prototype.getWidth = /** * @return {?} */ function () { return this.width; }; /** * @param {?} width * @return {?} */ SimpleMultiDropdownList.prototype.setWidth = /** * @param {?} width * @return {?} */ function (width) { this.width = width; }; /** * @return {?} */ SimpleMultiDropdownList.prototype.getHeight = /** * @return {?} */ function () { return this.height; }; /** * @param {?} height * @return {?} */ SimpleMultiDropdownList.prototype.setHeight = /** * @param {?} height * @return {?} */ function (height) { this.height = height; }; SimpleMultiDropdownList.TYPE_NAME = TYPE_NAME; SimpleMultiDropdownList.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: "<div class=\"phx-simple-multi-dropdown\" [style.width]=\"getWidth()\" [style.height]=\"getHeight()\">\n\t<div class=\"dropdown-container\">\n\t\t<div class=\"dropdown\">\n\t\t\t<div class=\"label\">\n\t\t\t\t<button type=\"button\" (click)=\"click($event)\" (focusin)=\"onFocusing($event)\" (blur)=\"onLostFocusing($event)\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"table-wrapper fluid\" *ngIf=\"getSelectedItems() !== null\">\n\t\t\t\t\t\t\t<div class=\"table-cell-wrapper middle\" [style.text-align]=\"getAlign()\">\n\t\t\t\t\t\t\t\t{{getSelectedItems().length}}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div class=\"table-wrapper fluid\">\n\t\t\t\t\t\t\t<div class=\"table-cell-wrapper middle\">\n\t\t\t\t\t\t\t\t<div class=\"down-triangle\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t\t<ul class=\"menu\" [class.show]=\"isShow()\" [style.width]=\"getDropdownWidth()\" [style.max-height]=\"getDropdownHeight()\">\n\t\t\t<li *ngFor=\"let item of getItems(); let i = index;\" (mousedown)=\"onSelectItemClicked($event, i)\">\n <div>\n <phx-checkbox [data]=\"isIndexSelected(i)\" (phxBeforeChange)=\"onCheckBeforeChange($event)\"></phx-checkbox>\n <div>{{item.label}}</div>\n </div>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</div>\n" },] }, ]; /** @nocollapse */ SimpleMultiDropdownList.ctorParameters = function () { return [ { type: NeedFocusService, }, { type: ElementRef, }, { type: PhloxAppInfoService, }, ]; }; SimpleMultiDropdownList.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "field": [{ type: Input },], "name": [{ type: Input },], "typeOfData": [{ type: Input },], "readOnly": [{ type: Input },], "help": [{ type: Input },], "dataComparator": [{ type: Input, args: ['comparator',] },], "items": [{ type: Input },], "align": [{ type: Input },], "dropdownWidth": [{ type: Input },], "dropdownHeight": [{ type: Input },], "width": [{ type: Input },], "height": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },], "endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeSelectEvent": [{ type: Output, args: ['phxBeforeSelect',] },], "selectEvent": [{ type: Output, args: ['phxSelect',] },], "beforeClickEvent": [{ type: Output, args: ['phxClick',] },], "clickEvent": [{ type: Output, args: ['phxClick',] },], "beforeShowEvent": [{ type: Output, args: ['phxBeforeShow',] },], "showEvent": [{ type: Output, args: ['phxShow',] },], "beforeHideEvent": [{ type: Output, args: ['phxBeforeHide',] },], "hideEvent": [{ type: Output, args: ['phxHide',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], SimpleMultiDropdownList.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleMultiDropdownList.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], SimpleMultiDropdownList.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleMultiDropdownList.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleMultiDropdownList.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], SimpleMultiDropdownList.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], SimpleMultiDropdownList.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleMultiDropdownList.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleMultiDropdownList.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], SimpleMultiDropdownList.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleMultiDropdownList.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleMultiDropdownList.prototype, "field", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleMultiDropdownList.prototype, "name", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleMultiDropdownList.prototype, "typeOfData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], SimpleMultiDropdownList.prototype, "readOnly", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], SimpleMultiDropdownList.prototype, "help", void 0); tslib_1.__decorate([ Option('comparator'), tslib_1.__metadata("design:type", Object) ], SimpleMultiDropdownList.prototype, "dataComparator", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Array) ], SimpleMultiDropdownList.prototype, "items", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleMultiDropdownList.prototype, "align", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleMultiDropdownList.prototype, "dropdownWidth", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleMultiDropdownList.prototype, "dropdownHeight", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleMultiDropdownList.prototype, "width", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], SimpleMultiDropdownList.prototype, "height", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "endValidateEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option('beforeSelect'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "beforeSelectEvent", void 0); tslib_1.__decorate([ Option('select'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "selectEvent", void 0); tslib_1.__decorate([ Option('beforeClick'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "beforeClickEvent", void 0); tslib_1.__decorate([ Option('click'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "clickEvent", void 0); tslib_1.__decorate([ Option('beforeShow'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "beforeShowEvent", void 0); tslib_1.__decorate([ Option('show'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "showEvent", void 0); tslib_1.__decorate([ Option('beforeHide'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "beforeHideEvent", void 0); tslib_1.__decorate([ Option('hide'), tslib_1.__metadata("design:type", EventEmitter) ], SimpleMultiDropdownList.prototype, "hideEvent", void 0); return SimpleMultiDropdownList; }(AbstractMultiDropdown)); export { SimpleMultiDropdownList }; function SimpleMultiDropdownList_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ SimpleMultiDropdownList.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ SimpleMultiDropdownList.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ SimpleMultiDropdownList.propDecorators; /** @type {?} */ SimpleMultiDropdownList.TYPE_NAME; /** @type {?} */ SimpleMultiDropdownList.prototype.dataParent; /** @type {?} */ SimpleMultiDropdownList.prototype.ignoreParentData; /** @type {?} */ SimpleMultiDropdownList.prototype.data; /** @type {?} */ SimpleMultiDropdownList.prototype.ignoreParentDisabled; /** @type {?} */ SimpleMultiDropdownList.prototype.delegateHistory; /** @type {?} */ SimpleMultiDropdownList.prototype.onDisabled; /** @type {?} */ SimpleMultiDropdownList.prototype.onEnabled; /** @type {?} */ SimpleMultiDropdownList.prototype.loadingEnabled; /** @type {?} */ SimpleMultiDropdownList.prototype.i18nKey; /** @type {?} */ SimpleMultiDropdownList.prototype.bypass; /** @type {?} */ SimpleMultiDropdownList.prototype.options; /** @type {?} */ SimpleMultiDropdownList.prototype.disabled; /** @type {?} */ SimpleMultiDropdownList.prototype.field; /** @type {?} */ SimpleMultiDropdownList.prototype.name; /** @type {?} */ SimpleMultiDropdownList.prototype.typeOfData; /** @type {?} */ SimpleMultiDropdownList.prototype.readOnly; /** @type {?} */ SimpleMultiDropdownList.prototype.help; /** @type {?} */ SimpleMultiDropdownList.prototype.dataComparator; /** @type {?} */ SimpleMultiDropdownList.prototype.items; /** @type {?} */ SimpleMultiDropdownList.prototype.align; /** @type {?} */ SimpleMultiDropdownList.prototype.dropdownWidth; /** @type {?} */ SimpleMultiDropdownList.prototype.dropdownHeight; /** @type {?} */ SimpleMultiDropdownList.prototype.width; /** @type {?} */ SimpleMultiDropdownList.prototype.height; /** @type {?} */ SimpleMultiDropdownList.prototype.loadEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.startValidateEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.endValidateEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.beforeFocusEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.focusEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.beforeLostFocusEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.lostFocusEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.beforeChangeEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.changeEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.beforeSelectEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.selectEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.beforeClickEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.clickEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.beforeShowEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.showEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.beforeHideEvent; /** @type {?} */ SimpleMultiDropdownList.prototype.hideEvent; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2ltcGxlTXVsdGlEcm9wZG93bkxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L1NpbXBsZU11bHRpRHJvcGRvd25MaXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFJbkYscUJBQU0sU0FBUyxHQUFXLDJCQUEyQixDQUFDOztJQXVDVCxtREFBcUI7SUFnSmhFLGlDQUFZLGdCQUFrQyxFQUFFLFVBQXNCLEVBQUUsbUJBQXdDO2VBQzlHLGtCQUFNLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztLQUN6RDs7OztJQUVNLDBDQUFROzs7O1FBQ2IsaUJBQU0sUUFBUSxXQUFFLENBQUM7Ozs7Ozs7SUFHVCxpREFBZTs7Ozs7SUFBekIsVUFBMEIsVUFBZSxFQUFFLE9BQTJCOztLQUVyRTs7Ozs7O0lBRVMsOENBQVk7Ozs7O0lBQXRCLFVBQXVCLElBQVMsRUFBRSxRQUFhO0tBQzlDOzs7Ozs7O0lBRVMsdURBQXFCOzs7Ozs7SUFBL0IsVUFBZ0MsUUFBYSxFQUFFLFFBQWEsRUFBRSxJQUFVO1FBQ3RFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksRUFB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Ozs7UUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQzswQ0FDTSxZQUFZOzs7UUFFaEMsTUFBTSxDQUFDLFlBQVksQ0FBQzswQ0FDTSxZQUFZOzs7UUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQzswQ0FDTSxZQUFZOztrQ0FsTW5DO0VBb0Q2QyxxQkFBcUI7U0FBckQsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdE11bHRpRHJvcGRvd24gfSBmcm9tICcuL0Fic3RyYWN0TXVsdGlEcm9wZG93bic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbC9WYWxpZGF0aW9uUmVzdWx0JztcclxuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuLi8uLi9JSGFzRGF0YSc7XHJcbmltcG9ydCB7IERlZmF1bHRTZWxlY3RJdGVtTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbC9EZWZhdWx0U2VsZWN0SXRlbU1vZGVsJztcclxuaW1wb3J0IHsgSURhdGFDb21wYXJhdG9yIH0gZnJvbSAnLi4vLi4vSURhdGFDb21wYXJhdG9yJztcclxuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgUGhsb3hBcHBJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvUGhsb3hBcHBJbmZvU2VydmljZS5zZXJ2aWNlJztcclxuXHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcbmNvbnN0IFRZUEVfTkFNRTogc3RyaW5nID0gXCJwaHgtc2ltcGxlLW11bHRpLWRyb3Bkb3duXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBtb2R1bGVJZDogbW9kdWxlLmlkLFxyXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXHJcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LXNpbXBsZS1tdWx0aS1kcm9wZG93blwiIFtzdHlsZS53aWR0aF09XCJnZXRXaWR0aCgpXCIgW3N0eWxlLmhlaWdodF09XCJnZXRIZWlnaHQoKVwiPlxyXG5cdDxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250YWluZXJcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJkcm9wZG93blwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwibGFiZWxcIj5cclxuXHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xpY2soJGV2ZW50KVwiIChmb2N1c2luKT1cIm9uRm9jdXNpbmcoJGV2ZW50KVwiIChibHVyKT1cIm9uTG9zdEZvY3VzaW5nKCRldmVudClcIj5cclxuXHRcdFx0XHRcdDxkaXY+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyIGZsdWlkXCIgKm5nSWY9XCJnZXRTZWxlY3RlZEl0ZW1zKCkgIT09IG51bGxcIj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtY2VsbC13cmFwcGVyIG1pZGRsZVwiIFtzdHlsZS50ZXh0LWFsaWduXT1cImdldEFsaWduKClcIj5cclxuXHRcdFx0XHRcdFx0XHRcdHt7Z2V0U2VsZWN0ZWRJdGVtcygpLmxlbmd0aH19XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8ZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlciBmbHVpZFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1jZWxsLXdyYXBwZXIgbWlkZGxlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZG93bi10cmlhbmdsZVwiPjwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PHVsIGNsYXNzPVwibWVudVwiIFtjbGFzcy5zaG93XT1cImlzU2hvdygpXCIgW3N0eWxlLndpZHRoXT1cImdldERyb3Bkb3duV2lkdGgoKVwiIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImdldERyb3Bkb3duSGVpZ2h0KClcIj5cclxuXHRcdFx0PGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEl0ZW1zKCk7IGxldCBpID0gaW5kZXg7XCIgKG1vdXNlZG93bik9XCJvblNlbGVjdEl0ZW1DbGlja2VkKCRldmVudCwgaSlcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPHBoeC1jaGVja2JveCBbZGF0YV09XCJpc0luZGV4U2VsZWN0ZWQoaSlcIiAocGh4QmVmb3JlQ2hhbmdlKT1cIm9uQ2hlY2tCZWZvcmVDaGFuZ2UoJGV2ZW50KVwiPjwvcGh4LWNoZWNrYm94PlxyXG4gICAgICAgICAgPGRpdj57e2l0ZW0ubGFiZWx9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cdFx0XHQ8L2xpPlxyXG5cdFx0PC91bD5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbmBcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZU11bHRpRHJvcGRvd25MaXN0IGV4dGVuZHMgQWJzdHJhY3RNdWx0aURyb3Bkb3duIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcclxuXHJcbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBJbnB1dC5cclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBsb2FkaW5nRW5hYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XHJcbiAgQElucHV0KCdpMThuQnlwYXNzJylcclxuICBAT3B0aW9uKCdpMThuQnlwYXNzJylcclxuICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkaXNhYmxlZDogYm9vbGVhbjtcclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZmllbGQ6IHN0cmluZztcclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBuYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgdHlwZU9mRGF0YTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgQEkxOE4oKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBoZWxwOiBhbnk7XHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RTZWxlY3RJdGVtc1xyXG4gIEBJbnB1dCgnY29tcGFyYXRvcicpXHJcbiAgQE9wdGlvbignY29tcGFyYXRvcicpXHJcbiAgcHJvdGVjdGVkIGRhdGFDb21wYXJhdG9yOiBJRGF0YUNvbXBhcmF0b3I8YW55PjtcclxuICBASW5wdXQoKVxyXG4gIEBJMThOKClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgaXRlbXM6IERlZmF1bHRTZWxlY3RJdGVtTW9kZWxbXTtcclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdE11bHRpRHJvcGRvd25cclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBhbGlnbjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIGRyb3Bkb3duV2lkdGg6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkcm9wZG93bkhlaWdodDogc3RyaW5nO1xyXG4gIC8vIC0tLSBTZWxmXHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgd2lkdGg6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBoZWlnaHQ6IHN0cmluZztcclxuXHJcbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBPdXRwdXQuXHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXHJcbiAgQE91dHB1dCgncGh4TG9hZCcpXHJcbiAgQE9wdGlvbignbG9hZCcpXHJcbiAgcHJvdGVjdGVkIGxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3REYXRhVmlld1xyXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SW5wdXREYXRhVmlld1xyXG4gIEBPdXRwdXQoJ3BoeFN0YXJ0VmFsaWRhdGUnKVxyXG4gIEBPcHRpb24oJ3N0YXJ0VmFsaWRhdGUnKVxyXG4gIHByb3RlY3RlZCBzdGFydFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPdXRwdXQoJ3BoeEVuZFZhbGlkYXRlJylcclxuICBAT3B0aW9uKCdlbmRWYWxpZGF0ZScpXHJcbiAgcHJvdGVjdGVkIGVuZFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUZvY3VzJylcclxuICBAT3B0aW9uKCdiZWZvcmVGb2N1cycpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPdXRwdXQoJ3BoeEZvY3VzJylcclxuICBAT3B0aW9uKCdmb2N1cycpXHJcbiAgcHJvdGVjdGVkIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUxvc3RGb2N1cycpXHJcbiAgQE9wdGlvbignYmVmb3JlTG9zdEZvY3VzJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlTG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPdXRwdXQoJ3BoeExvc3RGb2N1cycpXHJcbiAgQE9wdGlvbignbG9zdEZvY3VzJylcclxuICBwcm90ZWN0ZWQgbG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYW5nZScpXHJcbiAgQE9wdGlvbignYmVmb3JlQ2hhbmdlJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPdXRwdXQoJ3BoeENoYW5nZScpXHJcbiAgQE9wdGlvbignY2hhbmdlJylcclxuICBwcm90ZWN0ZWQgY2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0U2VsZWN0SXRlbXNcclxuICBAT3V0cHV0KCdwaHhCZWZvcmVTZWxlY3QnKVxyXG4gIEBPcHRpb24oJ2JlZm9yZVNlbGVjdCcpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZVNlbGVjdEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3V0cHV0KCdwaHhTZWxlY3QnKVxyXG4gIEBPcHRpb24oJ3NlbGVjdCcpXHJcbiAgcHJvdGVjdGVkIHNlbGVjdEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuXHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RNdWx0aURyb3Bkb3duXHJcbiAgQE91dHB1dCgncGh4Q2xpY2snKVxyXG4gIEBPcHRpb24oJ2JlZm9yZUNsaWNrJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4Q2xpY2snKVxyXG4gIEBPcHRpb24oJ2NsaWNrJylcclxuICBwcm90ZWN0ZWQgY2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4QmVmb3JlU2hvdycpXHJcbiAgQE9wdGlvbignYmVmb3JlU2hvdycpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZVNob3dFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4U2hvdycpXHJcbiAgQE9wdGlvbignc2hvdycpXHJcbiAgcHJvdGVjdGVkIHNob3dFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4QmVmb3JlSGlkZScpXHJcbiAgQE9wdGlvbignYmVmb3JlSGlkZScpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUhpZGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcbiAgQE91dHB1dCgncGh4SGlkZScpXHJcbiAgQE9wdGlvbignaGlkZScpXHJcbiAgcHJvdGVjdGVkIGhpZGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UsIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHBobG94QXBwSW5mb1NlcnZpY2U6IFBobG94QXBwSW5mb1NlcnZpY2UpIHtcclxuICAgIHN1cGVyKG5lZWRGb2N1c1NlcnZpY2UsIGVsZW1lbnRSZWYsIHBobG94QXBwSW5mb1NlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvblZhbGlkYXRpb25FbmQoaW5wdXRWYWx1ZTogYW55LCByZXN1bHRzOiBWYWxpZGF0aW9uUmVzdWx0W10pOiB2b2lkIHtcclxuICAgIC8vISBkbyBzdGhpbmdcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvbkRhdGFDaGFuZ2UoZGF0YTogYW55LCBpbnB1dFZhbDogYW55KTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25EYXRhQ2hhbmdlUHJldmVudGVkKG9sZFZhbHVlOiBhbnksIGlucHV0VmFsOiBhbnksIGRhdGE/OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NldERhdGEob2xkVmFsdWUsIHRydWUsIG51bGwsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBkb0ZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoKSkge1xyXG4gICAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLmRyb3Bkb3duID4gLmxhYmVsID4gYnV0dG9uXCIpLmJsdXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuZHJvcGRvd24gPiAubGFiZWwgPiBidXR0b25cIikuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoZWNrQmVmb3JlQ2hhbmdlKCRldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGRvQmx1cigkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLmRyb3Bkb3duID4gLmxhYmVsID4gYnV0dG9uXCIpLmJsdXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJdGVtcygpOiBEZWZhdWx0U2VsZWN0SXRlbU1vZGVsW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0V2lkdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLndpZHRoO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFdpZHRoKHdpZHRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRIZWlnaHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmhlaWdodDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWlnaHQoaGVpZ2h0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gIH1cclxufVxyXG4iXX0=