com.phloxui
Version:
PhloxUI Ng2+ Framework
414 lines (413 loc) • 33.7 kB
JavaScript
/**
* @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 { I18N, Option } from '../../decorator/decorators';
import { DefaultTableBody } from './DefaultTableBody.component';
import { BEFORE_EXPAND_EVENT, EXPAND_EVENT, BEFORE_CONTRACT_EVENT, CONTRACT_EVENT } from '../../share/CustomEventType';
import { EventUtils } from '../../share/utils/EventUtils';
const /** @type {?} */ TYPE_NAME = "phx-table-expand-body";
export class DefaultExpandTableBody extends DefaultTableBody {
/**
* @param {?} elementRef
*/
constructor(elementRef) {
super(elementRef);
this.expandAllEvent = new EventEmitter();
this.contractAllEvent = new EventEmitter();
this.beforeExpandAllEvent = new EventEmitter();
this.beforeContractAllEvent = new EventEmitter();
}
/**
* @return {?}
*/
expandAll() {
let /** @type {?} */ bData = {
isExpand: true
};
let /** @type {?} */ bEV = EventUtils.newCustomEvent(BEFORE_EXPAND_EVENT, this, bData, null);
if (this.beforeExpandAllEvent !== null && this.beforeExpandAllEvent !== undefined) {
this.beforeExpandAllEvent.emit(bEV);
}
for (let /** @type {?} */ controller of this.table.getRowControllers()) {
let /** @type {?} */ tableController = /** @type {?} */ (controller);
tableController.expand();
}
let /** @type {?} */ data = {
isExpand: true
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(EXPAND_EVENT, this, data, null);
if (this.expandAllEvent !== null && this.expandAllEvent !== undefined) {
this.expandAllEvent.emit(ev);
}
}
/**
* @return {?}
*/
contractAll() {
let /** @type {?} */ bData = {
isExpand: false
};
let /** @type {?} */ bEV = EventUtils.newCustomEvent(BEFORE_CONTRACT_EVENT, this, bData, null);
if (this.beforeContractAllEvent !== null && this.beforeContractAllEvent !== undefined) {
this.beforeContractAllEvent.emit(bEV);
}
for (let /** @type {?} */ controller of this.table.getRowControllers()) {
let /** @type {?} */ tableController = /** @type {?} */ (controller);
tableController.contract();
}
let /** @type {?} */ data = {
isExpand: false
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(CONTRACT_EVENT, this, data, null);
if (this.contractAllEvent !== null && this.contractAllEvent !== undefined) {
this.contractAllEvent.emit(ev);
}
}
/**
* @param {?} event
* @return {?}
*/
setExpandAllEvent(event) {
this.expandAllEvent = event;
}
/**
* @return {?}
*/
getExpandAllEvent() {
return this.expandAllEvent;
}
/**
* @param {?} event
* @return {?}
*/
setBeforeExpandAllEvent(event) {
this.beforeExpandAllEvent = event;
}
/**
* @return {?}
*/
getBeforeExpandAllEvent() {
return this.beforeExpandAllEvent;
}
/**
* @param {?} event
* @return {?}
*/
setContractAllEvent(event) {
this.contractAllEvent = event;
}
/**
* @return {?}
*/
getContractAllEvent() {
return this.contractAllEvent;
}
/**
* @param {?} event
* @return {?}
*/
setBeforeContractAllEvent(event) {
this.beforeContractAllEvent = event;
}
/**
* @return {?}
*/
getBeforeContractAllEvent() {
return this.beforeContractAllEvent;
}
}
DefaultExpandTableBody.TYPE_NAME = TYPE_NAME;
DefaultExpandTableBody.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: `<phx-component-wrapper [type]="getTable().getModel().getRowModel().getComponentType()"
[options]="getTable().getModel().getRowModel().getComponentOptions()"
[dataParent]="this"
[ignoreParentData]="true"
[handler]="row.wrapperHandler"
[data]="row.data"
[class]="'phx-table-row' + (getTable().getModel().getRowModel().getCSSClass() ? ' ' + getTable().getModel().getRowModel().getCSSClass() : '')"
*ngFor="let row of getRowControllers(); let idx = index">
</phx-component-wrapper>
`
},] },
];
/** @nocollapse */
DefaultExpandTableBody.ctorParameters = () => [
{ type: ElementRef, },
];
DefaultExpandTableBody.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 },],
"help": [{ type: Input },],
"beforeCellClickEvent": [{ type: Output, args: ['phxBeforeCellClick',] },],
"beforeCellDblClickEvent": [{ type: Output, args: ['phxBeforeCellDblClick',] },],
"beforeCellLostFocusEvent": [{ type: Output, args: ['phxBeforeCellLostFocus',] },],
"beforeCellFocusEvent": [{ type: Output, args: ['phxBeforeCellFocus',] },],
"cellClickEvent": [{ type: Output, args: ['phxCellClick',] },],
"cellDblClickEvent": [{ type: Output, args: ['phxCellDblClick',] },],
"cellLostFocusEvent": [{ type: Output, args: ['phxCellLostFocus',] },],
"cellFocusEvent": [{ type: Output, args: ['phxCellFocus',] },],
"rowDragEvent": [{ type: Output, args: ['phxRowDrag',] },],
"rowDragStartEvent": [{ type: Output, args: ['phxRowDragStart',] },],
"rowDragEndEvent": [{ type: Output, args: ['phxRowDragEnd',] },],
"rowDragEnterEvent": [{ type: Output, args: ['phxRowDragEnter',] },],
"rowDragOverEvent": [{ type: Output, args: ['phxRowDragOver',] },],
"rowDragLeaveEvent": [{ type: Output, args: ['phxRowDragLeave',] },],
"rowDropEvent": [{ type: Output, args: ['phxRowDrop',] },],
"rowDropAcceptedEvent": [{ type: Output, args: ['phxRowDropAccepted',] },],
"rowDropRejectedEvent": [{ type: Output, args: ['phxRowDropRejected',] },],
"changeEvent": [{ type: Output, args: ['phxChange',] },],
"beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },],
"expandAllEvent": [{ type: Output, args: ['phxExpandAll',] },],
"contractAllEvent": [{ type: Output, args: ['phxContractAll',] },],
"beforeExpandAllEvent": [{ type: Output, args: ['phxBeforeExpandAll',] },],
"beforeContractAllEvent": [{ type: Output, args: ['phxBeforeContractAll',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], DefaultExpandTableBody.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], DefaultExpandTableBody.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], DefaultExpandTableBody.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], DefaultExpandTableBody.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], DefaultExpandTableBody.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], DefaultExpandTableBody.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], DefaultExpandTableBody.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], DefaultExpandTableBody.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], DefaultExpandTableBody.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], DefaultExpandTableBody.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], DefaultExpandTableBody.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
I18N(),
tslib_1.__metadata("design:type", Object)
], DefaultExpandTableBody.prototype, "help", void 0);
tslib_1.__decorate([
I18N(),
tslib_1.__metadata("design:type", Array)
], DefaultExpandTableBody.prototype, "rows", void 0);
tslib_1.__decorate([
Option('beforeCellClick'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "beforeCellClickEvent", void 0);
tslib_1.__decorate([
Option('beforeCellDblClick'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "beforeCellDblClickEvent", void 0);
tslib_1.__decorate([
Option('beforeCellLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "beforeCellLostFocusEvent", void 0);
tslib_1.__decorate([
Option('beforeCellFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "beforeCellFocusEvent", void 0);
tslib_1.__decorate([
Option('cellClick'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "cellClickEvent", void 0);
tslib_1.__decorate([
Option('cellDblClick'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "cellDblClickEvent", void 0);
tslib_1.__decorate([
Option('cellLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "cellLostFocusEvent", void 0);
tslib_1.__decorate([
Option('cellFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "cellFocusEvent", void 0);
tslib_1.__decorate([
Option('rowDrag'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "rowDragEvent", void 0);
tslib_1.__decorate([
Option('rowDragStart'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "rowDragStartEvent", void 0);
tslib_1.__decorate([
Option('rowDragEnd'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "rowDragEndEvent", void 0);
tslib_1.__decorate([
Option('rowDragEnter'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "rowDragEnterEvent", void 0);
tslib_1.__decorate([
Option('rowDragOver'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "rowDragOverEvent", void 0);
tslib_1.__decorate([
Option('rowDragLeave'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "rowDragLeaveEvent", void 0);
tslib_1.__decorate([
Option('rowDrop'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "rowDropEvent", void 0);
tslib_1.__decorate([
Option('rowDropAccepted'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "rowDropAcceptedEvent", void 0);
tslib_1.__decorate([
Option('rowDropRejected'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "rowDropRejectedEvent", void 0);
tslib_1.__decorate([
Option('change'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "changeEvent", void 0);
tslib_1.__decorate([
Option('beforeChange'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "beforeChangeEvent", void 0);
tslib_1.__decorate([
Option('expandAll'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "expandAllEvent", void 0);
tslib_1.__decorate([
Option('contractAll'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "contractAllEvent", void 0);
tslib_1.__decorate([
Option('beforeExpandAll'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "beforeExpandAllEvent", void 0);
tslib_1.__decorate([
Option('beforeContractAll'),
tslib_1.__metadata("design:type", EventEmitter)
], DefaultExpandTableBody.prototype, "beforeContractAllEvent", void 0);
function DefaultExpandTableBody_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
DefaultExpandTableBody.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
DefaultExpandTableBody.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
DefaultExpandTableBody.propDecorators;
/** @type {?} */
DefaultExpandTableBody.TYPE_NAME;
/** @type {?} */
DefaultExpandTableBody.prototype.dataParent;
/** @type {?} */
DefaultExpandTableBody.prototype.ignoreParentData;
/** @type {?} */
DefaultExpandTableBody.prototype.data;
/** @type {?} */
DefaultExpandTableBody.prototype.ignoreParentDisabled;
/** @type {?} */
DefaultExpandTableBody.prototype.delegateHistory;
/** @type {?} */
DefaultExpandTableBody.prototype.onDisabled;
/** @type {?} */
DefaultExpandTableBody.prototype.onEnabled;
/** @type {?} */
DefaultExpandTableBody.prototype.loadingEnabled;
/** @type {?} */
DefaultExpandTableBody.prototype.i18nKey;
/** @type {?} */
DefaultExpandTableBody.prototype.bypass;
/** @type {?} */
DefaultExpandTableBody.prototype.options;
/** @type {?} */
DefaultExpandTableBody.prototype.disabled;
/** @type {?} */
DefaultExpandTableBody.prototype.help;
/** @type {?} */
DefaultExpandTableBody.prototype.rows;
/** @type {?} */
DefaultExpandTableBody.prototype.beforeCellClickEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.beforeCellDblClickEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.beforeCellLostFocusEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.beforeCellFocusEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.cellClickEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.cellDblClickEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.cellLostFocusEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.cellFocusEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.rowDragEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.rowDragStartEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.rowDragEndEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.rowDragEnterEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.rowDragOverEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.rowDragLeaveEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.rowDropEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.rowDropAcceptedEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.rowDropRejectedEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.changeEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.beforeChangeEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.expandAllEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.contractAllEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.beforeExpandAllEvent;
/** @type {?} */
DefaultExpandTableBody.prototype.beforeContractAllEvent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmYXVsdEV4cGFuZFRhYmxlQm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvdGFibGUvRGVmYXVsdEV4cGFuZFRhYmxlQm9keS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRzFELHVCQUFNLFNBQVMsR0FBVyx1QkFBdUIsQ0FBQztBQWdCbEQsTUFBTSw2QkFBOEIsU0FBUSxnQkFBZ0I7Ozs7Z0JBMkh2QyxVQUFzQjtRQUN2QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOzs7OztJQUc1QyxTQUFTO1FBQ2QscUJBQUksS0FBSyxHQUFRO1lBQ2YsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBQ0YscUJBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsbUJB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LE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztzQ0FFTSxZQUFZOzs7SUFDM0MsTUFBTSxDQUFDLGlCQUFpQixDQUFDO3NDQUVNLFlBQVk7OztJQUMzQyxNQUFNLENBQUMsUUFBUSxDQUFDO3NDQUVNLFlBQVk7OztJQUNsQyxNQUFNLENBQUMsY0FBYyxDQUFDO3NDQUVNLFlBQVk7OztJQUV4QyxNQUFNLENBQUMsV0FBVyxDQUFDO3NDQUVNLFlBQVk7OztJQUNyQyxNQUFNLENBQUMsYUFBYSxDQUFDO3NDQUVNLFlBQVk7OztJQUN2QyxNQUFNLENBQUMsaUJBQWlCLENBQUM7c0NBRU0sWUFBWTs7O0lBQzNDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztzQ0FFTSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSTE4TiwgT3B0aW9uIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9yL2RlY29yYXRvcnMnO1xyXG5pbXBvcnQgeyBJVGFibGVSb3dDb250cm9sbGVyIH0gZnJvbSAnLi9JVGFibGVSb3dDb250cm9sbGVyJztcclxuaW1wb3J0IHsgSUV4cGFuZGFibGVUYWJsZUJvZHkgfSBmcm9tICcuL0lFeHBhbmRhYmxlVGFibGVCb2R5JztcclxuaW1wb3J0IHsgRGVmYXVsdFRhYmxlQm9keSB9IGZyb20gJy4vRGVmYXVsdFRhYmxlQm9keS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlciB9IGZyb20gJy4vSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXInO1xyXG5pbXBvcnQgeyBCRUZPUkVfRVhQQU5EX0VWRU5ULCBFWFBBTkRfRVZFTlQsIEJFRk9SRV9DT05UUkFDVF9FVkVOVCwgQ09OVFJBQ1RfRVZFTlQgfSBmcm9tICcuLi8uLi9zaGFyZS9DdXN0b21FdmVudFR5cGUnO1xyXG5pbXBvcnQgeyBFdmVudFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmUvdXRpbHMvRXZlbnRVdGlscyc7XHJcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vSUhhc0RhdGEnO1xyXG5cclxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC10YWJsZS1leHBhbmQtYm9keVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcclxuICBzZWxlY3RvcjogVFlQRV9OQU1FLFxyXG4gIHRlbXBsYXRlOiBgPHBoeC1jb21wb25lbnQtd3JhcHBlciBbdHlwZV09XCJnZXRUYWJsZSgpLmdldE1vZGVsKCkuZ2V0Um93TW9kZWwoKS5nZXRDb21wb25lbnRUeXBlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZ2V0VGFibGUoKS5nZXRNb2RlbCgpLmdldFJvd01vZGVsKCkuZ2V0Q29tcG9uZW50T3B0aW9ucygpXCJcclxuICAgICAgICAgICAgICAgICAgIFtkYXRhUGFyZW50XT1cInRoaXNcIlxyXG4gICAgICAgICAgICAgICAgICAgW2lnbm9yZVBhcmVudERhdGFdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICBbaGFuZGxlcl09XCJyb3cud3JhcHBlckhhbmRsZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgW2RhdGFdPVwicm93LmRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidwaHgtdGFibGUtcm93JyArIChnZXRUYWJsZSgpLmdldE1vZGVsKCkuZ2V0Um93TW9kZWwoKS5nZXRDU1NDbGFzcygpID8gJyAnICsgZ2V0VGFibGUoKS5nZXRNb2RlbCgpLmdldFJvd01vZGVsKCkuZ2V0Q1NTQ2xhc3MoKSA6ICcnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcm93IG9mIGdldFJvd0NvbnRyb2xsZXJzKCk7IGxldCBpZHggPSBpbmRleFwiPlxyXG48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cclxuYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGVmYXVsdEV4cGFuZFRhYmxlQm9keSBleHRlbmRzIERlZmF1bHRUYWJsZUJvZHkgaW1wbGVtZW50cyBJRXhwYW5kYWJsZVRhYmxlQm9keSB7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XHJcblxyXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBASW5wdXQuXHJcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZGF0YVBhcmVudDogSUhhc0RhdGE7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGF0YTogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkYXRhOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgaWdub3JlUGFyZW50RGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZGVsZWdhdGVIaXN0b3J5OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIG9uRGlzYWJsZWQ6IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIG9uRW5hYmxlZDogRnVuY3Rpb247XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgbG9hZGluZ0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgaTE4bktleTogc3RyaW5nO1xyXG4gIEBJbnB1dCgnaTE4bkJ5cGFzcycpXHJcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXHJcbiAgcHJvdGVjdGVkIGJ5cGFzczogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgLy8gLS0tIEFic3RyYWN0SGFzRGF0YUhlbHBcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIEBJMThOKClcclxuICBwcm90ZWN0ZWQgaGVscDogYW55O1xyXG4gIC8vIC0tLSBEZWZhdWx0VGFibGVCb2R5XHJcbiAgQEkxOE4oKVxyXG4gIHByb3RlY3RlZCByb3dzOiBJVGFibGVSb3dDb250cm9sbGVyW107XHJcblxyXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBAT3V0cHV0LlxyXG4gIC8vIC0tLSBmcm9tIERlZmF1bHRUYWJsZUJvZHlcclxuICBAT3B0aW9uKCdiZWZvcmVDZWxsQ2xpY2snKVxyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNlbGxDbGljaycpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNlbGxDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdiZWZvcmVDZWxsRGJsQ2xpY2snKVxyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNlbGxEYmxDbGljaycpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNlbGxEYmxDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdiZWZvcmVDZWxsTG9zdEZvY3VzJylcclxuICBAT3V0cHV0KCdwaHhCZWZvcmVDZWxsTG9zdEZvY3VzJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlQ2VsbExvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdiZWZvcmVDZWxsRm9jdXMnKVxyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNlbGxGb2N1cycpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNlbGxGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdjZWxsQ2xpY2snKVxyXG4gIEBPdXRwdXQoJ3BoeENlbGxDbGljaycpXHJcbiAgcHJvdGVjdGVkIGNlbGxDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdjZWxsRGJsQ2xpY2snKVxyXG4gIEBPdXRwdXQoJ3BoeENlbGxEYmxDbGljaycpXHJcbiAgcHJvdGVjdGVkIGNlbGxEYmxDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdjZWxsTG9zdEZvY3VzJylcclxuICBAT3V0cHV0KCdwaHhDZWxsTG9zdEZvY3VzJylcclxuICBwcm90ZWN0ZWQgY2VsbExvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdjZWxsRm9jdXMnKVxyXG4gIEBPdXRwdXQoJ3BoeENlbGxGb2N1cycpXHJcbiAgcHJvdGVjdGVkIGNlbGxGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnJylcclxuICBAT3V0cHV0KCdwaHhSb3dEcmFnJylcclxuICBwcm90ZWN0ZWQgcm93RHJhZ0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnU3RhcnQnKVxyXG4gIEBPdXRwdXQoJ3BoeFJvd0RyYWdTdGFydCcpXHJcbiAgcHJvdGVjdGVkIHJvd0RyYWdTdGFydEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnRW5kJylcclxuICBAT3V0cHV0KCdwaHhSb3dEcmFnRW5kJylcclxuICBwcm90ZWN0ZWQgcm93RHJhZ0VuZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnRW50ZXInKVxyXG4gIEBPdXRwdXQoJ3BoeFJvd0RyYWdFbnRlcicpXHJcbiAgcHJvdGVjdGVkIHJvd0RyYWdFbnRlckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnT3ZlcicpXHJcbiAgQE91dHB1dCgncGh4Um93RHJhZ092ZXInKVxyXG4gIHByb3RlY3RlZCByb3dEcmFnT3ZlckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcmFnTGVhdmUnKVxyXG4gIEBPdXRwdXQoJ3BoeFJvd0RyYWdMZWF2ZScpXHJcbiAgcHJvdGVjdGVkIHJvd0RyYWdMZWF2ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcm9wJylcclxuICBAT3V0cHV0KCdwaHhSb3dEcm9wJylcclxuICBwcm90ZWN0ZWQgcm93RHJvcEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcm9wQWNjZXB0ZWQnKVxyXG4gIEBPdXRwdXQoJ3BoeFJvd0Ryb3BBY2NlcHRlZCcpXHJcbiAgcHJvdGVjdGVkIHJvd0Ryb3BBY2NlcHRlZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdyb3dEcm9wUmVqZWN0ZWQnKVxyXG4gIEBPdXRwdXQoJ3BoeFJvd0Ryb3BSZWplY3RlZCcpXHJcbiAgcHJvdGVjdGVkIHJvd0Ryb3BSZWplY3RlZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdjaGFuZ2UnKVxyXG4gIEBPdXRwdXQoJ3BoeENoYW5nZScpXHJcbiAgcHJvdGVjdGVkIGNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICBAT3B0aW9uKCdiZWZvcmVDaGFuZ2UnKVxyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYW5nZScpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICAvLyAtLS0gc2VsZlxyXG4gIEBPcHRpb24oJ2V4cGFuZEFsbCcpXHJcbiAgQE91dHB1dCgncGh4RXhwYW5kQWxsJylcclxuICBwcm90ZWN0ZWQgZXhwYW5kQWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPcHRpb24oJ2NvbnRyYWN0QWxsJylcclxuICBAT3V0cHV0KCdwaHhDb250cmFjdEFsbCcpXHJcbiAgcHJvdGVjdGVkIGNvbnRyYWN0QWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPcHRpb24oJ2JlZm9yZUV4cGFuZEFsbCcpXHJcbiAgQE91dHB1dCgncGh4QmVmb3JlRXhwYW5kQWxsJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlRXhwYW5kQWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPcHRpb24oJ2JlZm9yZUNvbnRyYWN0QWxsJylcclxuICBAT3V0cHV0KCdwaHhCZWZvcmVDb250cmFjdEFsbCcpXHJcbiAgcHJvdGVjdGVkIGJlZm9yZUNvbnRyYWN0QWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xyXG4gICAgc3VwZXIoZWxlbWVudFJlZik7XHJcblxyXG4gICAgdGhpcy5leHBhbmRBbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIHRoaXMuY29udHJhY3RBbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIHRoaXMuYmVmb3JlRXhwYW5kQWxsRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICB0aGlzLmJlZm9yZUNvbnRyYWN0QWxsRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kQWxsKCk6IHZvaWQge1xyXG4gICAgbGV0IGJEYXRhOiBhbnkgPSB7XHJcbiAgICAgIGlzRXhwYW5kOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgbGV0IGJFViA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoQkVGT1JFX0VYUEFORF9FVkVOVCwgdGhpcywgYkRhdGEsIG51bGwpO1xyXG5cclxuICAgIGlmKHRoaXMuYmVmb3JlRXhwYW5kQWxsRXZlbnQgIT09IG51bGwgJiYgdGhpcy5iZWZvcmVFeHBhbmRBbGxFdmVudCAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgdGhpcy5iZWZvcmVFeHBhbmRBbGxFdmVudC5lbWl0KGJFVik7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgY29udHJvbGxlciBvZiB0aGlzLnRhYmxlLmdldFJvd0NvbnRyb2xsZXJzKCkpIHtcclxuICAgICAgbGV0IHRhYmxlQ29udHJvbGxlcjogSUV4cGFuZGFibGVUYWJsZVJvd0NvbnRyb2xsZXIgPSBjb250cm9sbGVyIGFzIElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyO1xyXG5cclxuICAgICAgdGFibGVDb250cm9sbGVyLmV4cGFuZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhOiBhbnkgPSB7XHJcbiAgICAgIGlzRXhwYW5kOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgbGV0IGV2ID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChFWFBBTkRfRVZFTlQsIHRoaXMsIGRhdGEsIG51bGwpO1xyXG5cclxuICAgIGlmKHRoaXMuZXhwYW5kQWxsRXZlbnQgIT09IG51bGwgJiYgdGhpcy5leHBhbmRBbGxFdmVudCAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgdGhpcy5leHBhbmRBbGxFdmVudC5lbWl0KGV2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb250cmFjdEFsbCgpOiB2b2lkIHtcclxuICAgIGxldCBiRGF0YTogYW55ID0ge1xyXG4gICAgICBpc0V4cGFuZDogZmFsc2VcclxuICAgIH07XHJcbiAgICBsZXQgYkVWID0gRXZlbnRVdGlscy5uZXdDdXN0b21FdmVudChCRUZPUkVfQ09OVFJBQ1RfRVZFTlQsIHRoaXMsIGJEYXRhLCBudWxsKTtcclxuXHJcbiAgICBpZih0aGlzLmJlZm9yZUNvbnRyYWN0QWxsRXZlbnQgIT09IG51bGwgJiYgdGhpcy5iZWZvcmVDb250cmFjdEFsbEV2ZW50ICE9PSB1bmRlZmluZWQpe1xyXG4gICAgICB0aGlzLmJlZm9yZUNvbnRyYWN0QWxsRXZlbnQuZW1pdChiRVYpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGNvbnRyb2xsZXIgb2YgdGhpcy50YWJsZS5nZXRSb3dDb250cm9sbGVycygpKSB7XHJcbiAgICAgIGxldCB0YWJsZUNvbnRyb2xsZXI6IElFeHBhbmRhYmxlVGFibGVSb3dDb250cm9sbGVyID0gY29udHJvbGxlciBhcyBJRXhwYW5kYWJsZVRhYmxlUm93Q29udHJvbGxlcjtcclxuXHJcbiAgICAgIHRhYmxlQ29udHJvbGxlci5jb250cmFjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhOiBhbnkgPSB7XHJcbiAgICAgIGlzRXhwYW5kOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoQ09OVFJBQ1RfRVZFTlQsIHRoaXMsIGRhdGEsIG51bGwpO1xyXG5cclxuICAgIGlmKHRoaXMuY29udHJhY3RBbGxFdmVudCAhPT0gbnVsbCAmJiB0aGlzLmNvbnRyYWN0QWxsRXZlbnQgIT09IHVuZGVmaW5lZCl7XHJcbiAgICAgIHRoaXMuY29udHJhY3RBbGxFdmVudC5lbWl0KGV2KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFeHBhbmRBbGxFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kQWxsRXZlbnQgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRFeHBhbmRBbGxFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5leHBhbmRBbGxFdmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRCZWZvcmVFeHBhbmRBbGxFdmVudChldmVudDogRXZlbnRFbWl0dGVyPGFueT4pOiB2b2lkIHtcclxuICAgIHRoaXMuYmVmb3JlRXhwYW5kQWxsRXZlbnQgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCZWZvcmVFeHBhbmRBbGxFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5iZWZvcmVFeHBhbmRBbGxFdmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRDb250cmFjdEFsbEV2ZW50KGV2ZW50OiBFdmVudEVtaXR0ZXI8YW55Pik6IHZvaWQge1xyXG4gICAgdGhpcy5jb250cmFjdEFsbEV2ZW50ID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29udHJhY3RBbGxFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250cmFjdEFsbEV2ZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEJlZm9yZUNvbnRyYWN0QWxsRXZlbnQoZXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XHJcbiAgICB0aGlzLmJlZm9yZUNvbnRyYWN0QWxsRXZlbnQgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCZWZvcmVDb250cmFjdEFsbEV2ZW50KCk6IEV2ZW50RW1pdHRlcjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmJlZm9yZUNvbnRyYWN0QWxsRXZlbnQ7XHJcbiAgfVxyXG59XHJcbiJdfQ==