UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

618 lines (617 loc) 65.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input, ElementRef } from '@angular/core'; import { AbstractAccordion } from './AbstractAccordion'; import { I18N } from '../decorator/I18N.decorator'; import { Option } from '../decorator/Option.decorator'; var /** @type {?} */ TYPE_NAME = "phx-component-accordion"; var ComponentAccordion = /** @class */ (function (_super) { tslib_1.__extends(ComponentAccordion, _super); function ComponentAccordion(elementRef) { var _this = _super.call(this, elementRef) || this; _this.ACCORDIAN_CONTAINER_SELECTOR = ".accordion-container"; _this.inited = false; _this.itemComponents = []; _this.activeItems = []; // imple for component handler // imple for component handler _this.pageComponentHandler = function (data) { if (_this != null && typeof _this !== 'undefined') { if (data.setting !== null && typeof data.setting !== 'undefined') { var /** @type {?} */ index = data.setting.index; if (index > -1) { if (index < _this.itemComponents.length) { _this.itemComponents[index] = data.instance; } else { var /** @type {?} */ count = _this.itemComponents.length; while (count <= index) { if (count === index) { _this.itemComponents.push(data.instance); } else { _this.itemComponents.push(null); } count++; } } } if (_this.items !== null && typeof _this.items !== 'undefined') { if (index < _this.items.length) { var /** @type {?} */ item = _this.items[index]; if (typeof data.instance.setModel === 'function') { data.instance.setModel(item.componentModel); } if (typeof data.instance.setData === 'function') { data.instance.setData(item.componentData); } // by pass child if (_this.dataParent !== null && typeof _this.dataParent !== 'undefined') { if (typeof _this.dataParent.addDataChild === 'function') { var /** @type {?} */ hasDataCompo = /** @type {?} */ (data.instance); if (typeof hasDataCompo !== 'undefined') { _this.dataParent.addDataChild(hasDataCompo); } } } // delegate handler if (item.componentHandler !== null && typeof item.componentHandler !== 'undefined') { item.componentHandler.call(null, data); } } } } } }; return _this; } /** * @return {?} */ ComponentAccordion.prototype.ngOnInit = /** * @return {?} */ function () { _super.prototype.ngOnInit.call(this); this.setDataParent(this.dataParent); // adding all to active because default is allOpen if (this.items !== null && typeof this.items !== 'undefined') { try { for (var _a = tslib_1.__values(this.items), _b = _a.next(); !_b.done; _b = _a.next()) { var item = _b.value; this.activeItems.push(item); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_1) throw e_1.error; } } } var e_1, _c; }; /** * @param {?} id * @return {?} */ ComponentAccordion.prototype.moveUpAccordionBelowId = /** * @param {?} id * @return {?} */ function (id) { if (id === null || typeof id === 'undefined') { return; } if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { var /** @type {?} */ accordionSelector = ".accordion-item"; var /** @type {?} */ selector = "#" + id + accordionSelector; var /** @type {?} */ selectorElement = $(this.elementRef.nativeElement).find(selector); var /** @type {?} */ height = 0; if (typeof selectorElement !== 'undefined') { if (typeof $(selectorElement).height() !== 'undefined') { height = $(selectorElement).height(); } var /** @type {?} */ bodySelector = $(selectorElement).find(".body"); if (typeof bodySelector !== 'undefined') { height = $(bodySelector).height(); } var /** @type {?} */ nextElement = $(selectorElement).next(); if (typeof nextElement !== 'undefined') { $(nextElement).css('margin-top', -height); } } var /** @type {?} */ accContainerSelector = this.ACCORDIAN_CONTAINER_SELECTOR; var /** @type {?} */ accContainerElement = $(this.elementRef.nativeElement).find(accContainerSelector); var /** @type {?} */ containerHeight = 0; if (typeof accContainerElement !== 'undefined') { containerHeight = 0; if (typeof $(accContainerElement).height() !== 'undefined') { containerHeight = $(accContainerElement).height(); } } var /** @type {?} */ fakeAccordionSelector = ".fake"; var /** @type {?} */ fakeAccElement = $(this.elementRef.nativeElement).find(fakeAccordionSelector); var /** @type {?} */ fakeHeight = 0; var /** @type {?} */ oldFakeHeight = 0; if (typeof fakeAccElement !== 'undefined') { if (typeof $(fakeAccElement).height() !== 'undefined') { fakeHeight = $(fakeAccElement).height(); oldFakeHeight = $(fakeAccElement).height(); } fakeHeight = fakeHeight + height; if (!this.multipleExpand) { fakeHeight = 0; } $(fakeAccElement).css('height', fakeHeight); } // set height to container if (!this.fixedHeight && typeof accContainerElement !== 'undefined') { containerHeight = containerHeight + oldFakeHeight - fakeHeight; if (containerHeight < 0) { containerHeight = 0; } $(accContainerElement).css('height', containerHeight); } } }; /** * @param {?} id * @return {?} */ ComponentAccordion.prototype.moveDownAccordionBelowId = /** * @param {?} id * @return {?} */ function (id) { if (id === null || typeof id === 'undefined') { return; } if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { var /** @type {?} */ accordionSelector = ".accordion-item"; var /** @type {?} */ selector = "#" + id + accordionSelector; var /** @type {?} */ selectorElement = $(this.elementRef.nativeElement).find(selector); var /** @type {?} */ height = 0; if (typeof selectorElement !== 'undefined') { if (typeof $(selectorElement).height() !== 'undefined') { height = $(selectorElement).height(); } var /** @type {?} */ bodySelector = $(selectorElement).find(".body"); if (typeof bodySelector !== 'undefined') { height = $(bodySelector).height(); } var /** @type {?} */ nextElement = $(selectorElement).next(); if (typeof nextElement !== 'undefined') { $(nextElement).css('margin-top', ''); } } var /** @type {?} */ oldFakeHeight = 0; var /** @type {?} */ fakeHeight = 0; var /** @type {?} */ fakeAccordionSelector = ".fake"; var /** @type {?} */ fakeAccElement = $(this.elementRef.nativeElement).find(fakeAccordionSelector); if (typeof fakeAccElement !== 'undefined') { if (typeof $(fakeAccordionSelector).height() !== 'undefined') { fakeHeight = $(fakeAccordionSelector).height(); oldFakeHeight = $(fakeAccordionSelector).height(); } fakeHeight = fakeHeight - height; if (!this.multipleExpand) { fakeHeight = 0; } $(fakeAccordionSelector).css('height', fakeHeight); } var /** @type {?} */ accContainerSelector = this.ACCORDIAN_CONTAINER_SELECTOR; var /** @type {?} */ accContainerElement = $(this.elementRef.nativeElement).find(accContainerSelector); if (!this.fixedHeight && typeof accContainerElement !== 'undefined') { var /** @type {?} */ containerHeight = 0; if (typeof $(accContainerElement).height() !== 'undefined') { containerHeight = $(accContainerElement).height(); } containerHeight = containerHeight + (oldFakeHeight - fakeHeight); if (containerHeight < 0) { containerHeight = 0; } $(accContainerElement).css('height', containerHeight); } } }; /** * @return {?} */ ComponentAccordion.prototype.refreshContainerHeight = /** * @return {?} */ function () { var _this = this; if (!this.multipleExpand) { return; } if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { var /** @type {?} */ accContainerSelector = this.ACCORDIAN_CONTAINER_SELECTOR; var /** @type {?} */ accContainerElement = $(this.elementRef.nativeElement).find(accContainerSelector); // reset height $(accContainerElement).css('height', ''); var /** @type {?} */ newContentHeight_1 = 0; var /** @type {?} */ missingHeight_1 = 0; var /** @type {?} */ accordionSelector = ".accordion-item"; $(this.elementRef.nativeElement).find(accordionSelector).each(function (index, element) { var /** @type {?} */ headerHeight = $(element).find('.header').outerHeight(); var /** @type {?} */ bodyHeight = $(element).find('.body').outerHeight(); var /** @type {?} */ eleHeight = $(element).height(); if (!$(element).hasClass("fake")) { var /** @type {?} */ checkItem = null; if (_this.items !== null && typeof _this.items !== 'undefined') { checkItem = _this.items[index]; } if (_this.activeItems !== null && typeof _this.activeItems !== 'undefined') { var /** @type {?} */ isActive = _this.activeItems.indexOf(checkItem) >= 0; if (isActive) { newContentHeight_1 += eleHeight; } else { newContentHeight_1 += headerHeight; missingHeight_1 += bodyHeight; } } } else { // is fake } }); $(accContainerElement).css('height', newContentHeight_1); } }; /** * @param {?} index * @return {?} */ ComponentAccordion.prototype._getItemHeight = /** * @param {?} index * @return {?} */ function (index) { if (index !== null && typeof index !== 'undefined' && index > -1) { if (this.items !== null && typeof this.items !== 'undefined' && index < this.items.length) { var /** @type {?} */ height = this.items[index].height; if (height !== null && typeof height !== 'undefined') { return this.items[index].height.toString() + "px"; } } } return ''; }; /** * @return {?} */ ComponentAccordion.prototype._getPageComponentHandler = /** * @return {?} */ function () { return this.pageComponentHandler; }; /** * @param {?} $event * @param {?} index * @return {?} */ ComponentAccordion.prototype.onShowBodyBtnClick = /** * @param {?} $event * @param {?} index * @return {?} */ function ($event, index) { var /** @type {?} */ isActive = this.isActive(index); var /** @type {?} */ isEnable = this.isEnable(index); if (!isEnable) { if (isActive) { this.deactivate(index); } return; } if (isActive) { this.deactivate(index); } else { this.activate(index); } }; /** * @param {?} index * @return {?} */ ComponentAccordion.prototype.isShow = /** * @param {?} index * @return {?} */ function (index) { var /** @type {?} */ active = this.isActive(index); var /** @type {?} */ enable = this.isEnable(index); return enable && active; }; /** * @return {?} */ ComponentAccordion.prototype.init = /** * @return {?} */ function () { var _this = this; if (this.inited && this.multipleExpand) { return; } if (this.delayTimer !== null && typeof this.delayTimer !== 'undefined') { clearTimeout(this.delayTimer); this.delayTimer = null; } this.delayTimer = setTimeout(function () { for (var /** @type {?} */ i = 0; i < _this.items.length; i++) { var /** @type {?} */ idKey = i + ""; var /** @type {?} */ item = _this.items[i]; if (!item.enable) { _this.moveUpAccordionBelowId(idKey); } else { if (!item.active) { _this.moveUpAccordionBelowId(idKey); } } } }, 1); this.inited = true; }; /** * @return {?} */ ComponentAccordion.prototype.reload = /** * @return {?} */ function () { if (this.itemComponents !== null && typeof this.itemComponents.length) { for (var /** @type {?} */ i = 0; i < this.itemComponents.length; i++) { var /** @type {?} */ component = this.itemComponents[i]; if (component === null || typeof component === 'undefined') { continue; } var /** @type {?} */ item = (i < this.items.length) ? this.items[i] : null; if (item === null || typeof item === 'undefined') { continue; } if (typeof component.setModel === 'function') { component.setModel(item.componentModel); } if (typeof component.setData === 'function') { component.setData(item.componentData); } } } }; /** * @return {?} */ ComponentAccordion.prototype.reRender = /** * @return {?} */ function () { this.refreshContainerHeight(); }; /** * @param {?} index * @return {?} */ ComponentAccordion.prototype.getAccordianComponent = /** * @param {?} index * @return {?} */ function (index) { if (index > -1 && index < this.itemComponents.length) { return this.itemComponents[index]; } return null; }; /** * @param {?} index * @param {?} item * @return {?} */ ComponentAccordion.prototype.onAccordionActived = /** * @param {?} index * @param {?} item * @return {?} */ function (index, item) { var /** @type {?} */ idKey = index + ""; this.moveDownAccordionBelowId(idKey); if (this.activeItems.indexOf(item) < 0) { this.activeItems.push(item); } }; /** * @param {?} index * @param {?} item * @return {?} */ ComponentAccordion.prototype.onAccordionDeactived = /** * @param {?} index * @param {?} item * @return {?} */ function (index, item) { var /** @type {?} */ idKey = index + ""; this.moveUpAccordionBelowId(idKey); if (this.activeItems.indexOf(item) >= 0) { var /** @type {?} */ index_1 = this.activeItems.indexOf(item); this.activeItems.splice(index_1, 1); } }; /** * @param {?} index * @param {?} item * @return {?} */ ComponentAccordion.prototype.onAccordionEnabled = /** * @param {?} index * @param {?} item * @return {?} */ function (index, item) { }; /** * @param {?} index * @param {?} item * @return {?} */ ComponentAccordion.prototype.onAccordionDisabled = /** * @param {?} index * @param {?} item * @return {?} */ function (index, item) { }; /** * @param {?} dataParent * @return {?} */ ComponentAccordion.prototype.setDataParent = /** * @param {?} dataParent * @return {?} */ function (dataParent) { // by pass to children component that was IHasData if (this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent.removeDataChild === 'function') { if (this.itemComponents !== null && typeof this.itemComponents !== 'undefined') { try { for (var _a = tslib_1.__values(this.itemComponents), _b = _a.next(); !_b.done; _b = _a.next()) { var compo = _b.value; var /** @type {?} */ hasDataCompo = /** @type {?} */ (compo); if (typeof hasDataCompo !== 'undefined') { this.dataParent.removeDataChild(hasDataCompo); } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (_b && !_b.done && (_c = _a.return)) _c.call(_a); } finally { if (e_2) throw e_2.error; } } } } } this.dataParent = dataParent; if (this.dataParent !== null && typeof this.dataParent !== 'undefined') { if (typeof this.dataParent.addDataChild === 'function') { try { for (var _d = tslib_1.__values(this.itemComponents), _e = _d.next(); !_e.done; _e = _d.next()) { var compo = _e.value; var /** @type {?} */ hasDataCompo = /** @type {?} */ (compo); if (typeof hasDataCompo !== 'undefined') { this.dataParent.addDataChild(hasDataCompo); } } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (_e && !_e.done && (_f = _d.return)) _f.call(_d); } finally { if (e_3) throw e_3.error; } } } } var e_2, _c, e_3, _f; }; /** * @return {?} */ ComponentAccordion.prototype.getDataParent = /** * @return {?} */ function () { return this.dataParent; }; /** * @return {?} */ ComponentAccordion.prototype.getItems = /** * @return {?} */ function () { return this.items; }; ComponentAccordion.TYPE_NAME = TYPE_NAME; ComponentAccordion.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: "<div class=\"phx-component-accordion\">\n <div class=\"accordion-container\">\n <ng-template ngFor let-item [ngForOf]=\"getItems()\" let-i=\"index\">\n <div class=\"accordion-item\" id=\"{{i+''}}\" [class.hideborder]=\"!isShow(i)\">\n <div class=\"header\">\n <div class=\"header-wrapper\" [class.disable]=\"!isEnable(i)\">\n <div class=\"left\"><h4>{{item.label}}</h4></div>\n <div class=\"right\">\n <div class=\"down-triangle\" (click)=\"onShowBodyBtnClick($event, i)\"></div>\n </div>\n </div>\n </div>\n <div class=\"body\" [style.height]=\"_getItemHeight(i)\">\n <div class=\"body-wrapper\" [class.show]=\"isShow(i)\" [class.disable]=\"!isEnable(i)\">\n <phx-component-wrapper [type]=\"item.componentType\" [data]=\"item.componentData\" [handler]=\"_getPageComponentHandler()\" [setting]=\"{index: i}\" [model]=\"item.componentModel\" [dataParent]=\"this\"></phx-component-wrapper>\n </div>\n </div>\n </div>\n </ng-template>\n <div class=\"accordion-item fake\"><!-- fake for height --></div>\n </div>\n</div>\n" },] }, ]; /** @nocollapse */ ComponentAccordion.ctorParameters = function () { return [ { type: ElementRef, }, ]; }; ComponentAccordion.propDecorators = { "items": [{ type: Input },], "fixedHeight": [{ type: Input },], "dataParent": [{ type: Input },], "name": [{ type: Input },], "multipleExpand": [{ type: Input },], }; tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Array) ], ComponentAccordion.prototype, "items", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentAccordion.prototype, "fixedHeight", void 0); tslib_1.__decorate([ I18N('components'), tslib_1.__metadata("design:type", Array) ], ComponentAccordion.prototype, "itemComponents", void 0); return ComponentAccordion; }(AbstractAccordion)); export { ComponentAccordion }; function ComponentAccordion_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ComponentAccordion.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ComponentAccordion.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ComponentAccordion.propDecorators; /** @type {?} */ ComponentAccordion.TYPE_NAME; /** @type {?} */ ComponentAccordion.prototype.ACCORDIAN_CONTAINER_SELECTOR; /** @type {?} */ ComponentAccordion.prototype.items; /** @type {?} */ ComponentAccordion.prototype.fixedHeight; /** @type {?} */ ComponentAccordion.prototype.dataParent; /** @type {?} */ ComponentAccordion.prototype.name; /** @type {?} */ ComponentAccordion.prototype.multipleExpand; /** @type {?} */ ComponentAccordion.prototype.itemComponents; /** @type {?} */ ComponentAccordion.prototype.delayTimer; /** @type {?} */ ComponentAccordion.prototype.inited; /** @type {?} */ ComponentAccordion.prototype.activeItems; /** @type {?} */ ComponentAccordion.prototype.pageComponentHandler; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50QWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9Db21wb25lbnRBY2NvcmRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJdkQscUJBQU0sU0FBUyxHQUFXLHlCQUF5QixDQUFDOztJQTZCWiw4Q0FBOEM7SUEyQnBGLDRCQUFZLFVBQXNCO1FBQWxDLFlBQ0Usa0JBQU0sVUFBVSxDQUFDLFNBMERsQjs2Q0FsRjhDLHNCQUFzQjtRQTBCbkUsS0FBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsS0FBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsS0FBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7O1FBRXRCLEFBREEsOEJBQThCO1FBQzlCLEtBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFDLElBQVM7WUFDcEMsRUFBRSxDQUFDLENBQUMsS0FBSSxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDakUscUJBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO29CQUMvQixFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNmLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7NEJBQ3ZDLEtBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzt5QkFDNUM7d0JBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ04scUJBQUksS0FBSyxHQUFHLEtBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDOzRCQUN2QyxPQUFPLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztnQ0FDdEIsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7b0NBQ3BCLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQ0FDekM7Z0NBQUMsSUFBSSxDQUFDLENBQUM7b0NBQ04sS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUNBQ2hDO2dDQUNELEtBQUssRUFBRSxDQUFDOzZCQUNUO3lCQUNGO3FCQUNGO29CQUVELEVBQUUsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUM3RCxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDOzRCQUM5QixxQkFBSSxJQUFJLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFFN0IsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dDQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7NkJBQzdDOzRCQUVELEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztnQ0FDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDOzZCQUMzQzs7NEJBR0QsRUFBRSxDQUFDLENBQUMsS0FBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksT0FBTyxLQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0NBQ3ZFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sS0FBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztvQ0FDdkQscUJBQUksWUFBWSxxQkFBRyxJQUFJLENBQUMsUUFBb0IsQ0FBQSxDQUFDO29DQUU3QyxFQUFFLENBQUMsQ0FBQyxPQUFPLFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dDQUN4QyxLQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztxQ0FDNUM7aUNBQ0Y7NkJBQ0Y7OzRCQUdELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztnQ0FDbkYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7NkJBQ3hDO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFBOztLQUNGOzs7O0lBRU0scUNBQVE7Ozs7UUFDYixpQkFBTSxRQUFRLFdBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzs7UUFHcEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7O2dCQUM3RCxHQUFHLENBQUMsQ0FBYSxJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQSxnQkFBQTtvQkFBdEIsSUFBSSxJQUFJLFdBQUE7b0JBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzdCOzs7Ozs7Ozs7U0FDRjs7Ozs7OztJQUdLLG1EQUFzQjs7OztjQUFDLEVBQVU7UUFDdkMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxPQUFPLEVBQUUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sQ0FBQztTQUNSO1FBRUQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdkUscUJBQUksaUJBQWlCLEdBQVcsaUJBQWlCLENBQUM7WUFDbEQscUJBQUksUUFBUSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsaUJBQWlCLENBQUM7WUFFNUMscUJBQUksZUFBZSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RSxxQkFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsRUFBRSxDQUFDLENBQUMsT0FBTyxlQUFlLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDdkQsTUFBTSxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDdEM7Z0JBRUQscUJBQUksWUFBWSxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BELEVBQUUsQ0FBQyxDQUFDLE9BQU8sWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ3hDLE1BQU0sR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ25DO2dCQUVELHFCQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzVDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzNDO2FBQ0Y7WUFFRCxxQkFBSSxvQkFBb0IsR0FBVyxJQUFJLENBQUMsNEJBQTRCLENBQUM7WUFDckUscUJBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDdEYscUJBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztZQUN4QixFQUFFLENBQUMsQ0FBQyxPQUFPLG1CQUFtQixLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLGVBQWUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDM0QsZUFBZSxHQUFHLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUNuRDthQUNGO1lBRUQscUJBQUkscUJBQXFCLEdBQVcsT0FBTyxDQUFDO1lBQzVDLHFCQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNsRixxQkFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLHFCQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDdEIsRUFBRSxDQUFDLENBQUMsT0FBTyxjQUFjLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDdEQsVUFBVSxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDeEMsYUFBYSxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDNUM7Z0JBQ0QsVUFBVSxHQUFHLFVBQVUsR0FBRyxNQUFNLENBQUM7Z0JBRWpDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLFVBQVUsR0FBRyxDQUFDLENBQUM7aUJBQ2hCO2dCQUVELENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQzdDOztZQUdELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLG1CQUFtQixLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BFLGVBQWUsR0FBRyxlQUFlLEdBQUcsYUFBYSxHQUFHLFVBQVUsQ0FBQztnQkFFL0QsRUFBRSxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLGVBQWUsR0FBRyxDQUFDLENBQUM7aUJBQ3JCO2dCQUVELENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7YUFDdkQ7U0FFRjs7Ozs7O0lBR0sscURBQXdCOzs7O2NBQUMsRUFBVTtRQUN6QyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLE9BQU8sRUFBRSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDN0MsTUFBTSxDQUFDO1NBQ1I7UUFFRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN2RSxxQkFBSSxpQkFBaUIsR0FBVyxpQkFBaUIsQ0FBQztZQUNsRCxxQkFBSSxRQUFRLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztZQUU1QyxxQkFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RFLHFCQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixFQUFFLENBQUMsQ0FBQyxPQUFPLGVBQWUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUN2RCxNQUFNLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUN0QztnQkFFRCxxQkFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEQsRUFBRSxDQUFDLENBQUMsT0FBTyxZQUFZLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDeEMsTUFBTSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDbkM7Z0JBRUQscUJBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDNUMsRUFBRSxDQUFDLENBQUMsT0FBTyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDdkMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ3RDO2FBQ0Y7WUFFRCxxQkFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLHFCQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDbkIscUJBQUkscUJBQXFCLEdBQVcsT0FBTyxDQUFDO1lBQzVDLHFCQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNsRixFQUFFLENBQUMsQ0FBQyxPQUFPLGNBQWMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQzdELFVBQVUsR0FBRyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDL0MsYUFBYSxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUNuRDtnQkFDRCxVQUFVLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQztnQkFDakMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDekIsVUFBVSxHQUFHLENBQUMsQ0FBQztpQkFDaEI7Z0JBQ0QsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUNwRDtZQUVELHFCQUFJLG9CQUFvQixHQUFXLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztZQUNyRSxxQkFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN0RixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxtQkFBbUIsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxxQkFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQzNELGVBQWUsR0FBRyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDbkQ7Z0JBQ0QsZUFBZSxHQUFHLGVBQWUsR0FBRyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsQ0FBQztnQkFDakUsRUFBRSxDQUFDLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLGVBQWUsR0FBRyxDQUFDLENBQUM7aUJBQ3JCO2dCQUVELENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7YUFDdkQ7U0FDRjs7Ozs7SUFHSyxtREFBc0I7Ozs7O1FBQzVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDekIsTUFBTSxDQUFDO1NBQ1I7UUFFRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN2RSxxQkFBSSxvQkFBb0IsR0FBVyxJQUFJLENBQUMsNEJBQTRCLENBQUM7WUFDckUscUJBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7O1lBRXRGLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFekMscUJBQUksa0JBQWdCLEdBQVcsQ0FBQyxDQUFDO1lBQ2pDLHFCQUFJLGVBQWEsR0FBVyxDQUFDLENBQUM7WUFFOUIscUJBQUksaUJBQWlCLEdBQVcsaUJBQWlCLENBQUM7WUFDbEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsS0FBYSxFQUFFLE9BQVk7Z0JBQ3hGLHFCQUFJLFlBQVksR0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNwRSxxQkFBSSxVQUFVLEdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDaEUscUJBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFFcEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDakMscUJBQUksU0FBUyxHQUFHLElBQUksQ0FBQztvQkFFckIsRUFBRSxDQUFDLENBQUMsS0FBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQzdELFNBQVMsR0FBRyxLQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUMvQjtvQkFFRCxFQUFFLENBQUMsQ0FBQyxLQUFJLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQzt3QkFDekUscUJBQUksUUFBUSxHQUFHLEtBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFFeEQsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs0QkFDYixrQkFBZ0IsSUFBSSxTQUFTLENBQUM7eUJBQy9CO3dCQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNOLGtCQUFnQixJQUFJLFlBQVksQ0FBQzs0QkFDakMsZUFBYSxJQUFJLFVBQVUsQ0FBQzt5QkFDN0I7cUJBQ0Y7aUJBQ0Y7Z0JBQUMsSUFBSSxDQUFDLENBQUM7O2lCQUVQO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxrQkFBZ0IsQ0FBQyxDQUFDO1NBQ3hEOzs7Ozs7SUFHSSwyQ0FBYzs7OztjQUFDLEtBQWE7UUFDakMsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzFGLHFCQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDdEMsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO2lCQUNuRDthQUNGO1NBQ0Y7UUFDRCxNQUFNLENBQUMsRUFBRSxDQUFDOzs7OztJQUdMLHFEQUF3Qjs7OztRQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDOzs7Ozs7O0lBRzVCLCtDQUFrQjs7Ozs7Y0FBQyxNQUFhLEVBQUUsS0FBYTtRQUNwRCxxQkFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxxQkFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDZCxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEI7WUFDRCxNQUFNLENBQUM7U0FDUjtRQUVELEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCOzs7Ozs7SUFHSSxtQ0FBTTs7OztjQUFDLEtBQWE7UUFDekIscUJBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMscUJBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUM7Ozs7O0lBR25CLGlDQUFJOzs7OztRQUNULEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDO1NBQ1I7UUFFRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN2RSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDM0IsR0FBRyxDQUFDLENBQUMscUJBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDM0MscUJBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLHFCQUFJLElBQUksR0FBRyxLQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNqQixLQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3BDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7d0JBQ2pCLEtBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDcEM7aUJBQ0Y7YUFDRjtTQUNGLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFTixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQzs7Ozs7SUFHZCxtQ0FBTTs7OztRQUNYLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLEdBQUcsQ0FBQyxDQUFDLHFCQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3BELHFCQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQzNELFFBQVEsQ0FBQztpQkFDVjtnQkFFRCxxQkFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMxRCxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ2pELFFBQVEsQ0FBQztpQkFDVjtnQkFFRCxFQUFFLENBQUMsQ0FBQyxPQUFPLFNBQVMsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDN0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ3pDO2dCQUVELEVBQUUsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUM1QyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDdkM7YUFDRjtTQUNGOzs7OztJQUdJLHFDQUFROzs7O1FBQ2IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Ozs7OztJQUd6QixrREFBcUI7Ozs7Y0FBQyxLQUFhO1FBQ3hDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQzs7Ozs7OztJQUdQLCtDQUFrQjs7Ozs7Y0FBQyxLQUFhLEVBQUUsSUFBaUM7UUFDeEUscUJBQUksS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7Ozs7Ozs7SUFHSSxpREFBb0I7Ozs7O2NBQUMsS0FBYSxFQUFFLElBQWlDO1FBQzFFLHFCQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLHFCQUFJLE9BQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbkM7Ozs7Ozs7SUFHSSwrQ0FBa0I7Ozs7O2NBQUMsS0FBYSxFQUFFLElBQWlDOzs7Ozs7O0lBSW5FLGdEQUFtQjs7Ozs7Y0FBQyxLQUFhLEVBQUUsSUFBaUM7Ozs7OztJQUlwRSwwQ0FBYTs7OztjQUFDLFVBQW9COztRQUV2QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN2RSxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDOzt3QkFDL0UsR0FBRyxDQUFDLENBQWMsSUFBQSxLQUFBLGlCQUFBLElBQUksQ0FBQyxjQUFjLENBQUEsZ0JBQUE7NEJBQWhDLElBQUksS0FBSyxXQUFBOzRCQUNaLHFCQUFJLFlBQVkscUJBQUcsS0FBaUIsQ0FBQSxDQUFDOzRCQUVyQyxFQUFFLENBQUMsQ0FBQyxPQUFPLFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dDQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQzs2QkFDL0M7eUJBQ0Y7Ozs7Ozs7OztpQkFDRjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN2RSxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7O29CQUN2RCxHQUFHLENBQUMsQ0FBYyxJQUFBLEtBQUEsaUJBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQSxnQkFBQTt3QkFBaEMsSUFBSSxLQUFLLFdBQUE7d0JBQ1oscUJBQUksWUFBWSxxQkFBRyxLQUFpQixDQUFBLENBQUM7d0JBRXJDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7NEJBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO3lCQUM1QztxQkFDRjs7Ozs7Ozs7O2FBQ0Y7U0FDRjs7Ozs7O0lBR0ksMENBQWE7Ozs7UUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Ozs7O0lBR2xCLHFDQUFROzs7O1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7O21DQXJidUIsU0FBUzs7Z0JBN0JyRCxTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO29CQUNuQixRQUFRLEVBQUUsU0FBUztvQkFDbkIsUUFBUSxFQUFFLDRvQ0FzQlg7aUJBQ0E7Ozs7Z0JBdENrQyxVQUFVOzs7MEJBNkMxQyxLQUFLO2dDQUlMLEtBQUs7K0JBR0wsS0FBSzt5QkFFTCxLQUFLO21DQUVMLEtBQUs7OztRQVZMLElBQUksRUFBRTtRQUNOLE1BQU0sRUFBRTs7OztRQUdSLE1BQU0sRUFBRTs7OztRQVNSLElBQUksQ0FBQyxZQUFZLENBQUM7Ozs2QkEzRHJCO0VBdUN3QyxpQkFBaUI7U0FBNUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRBY2NvcmRpb25JdGVtTW9kZWwgfSBmcm9tICcuL21vZGVsL0NvbXBvbmVudEFjY29yZGlvbkl0ZW1Nb2RlbCc7XG5pbXBvcnQgeyBBYnN0cmFjdEFjY29yZGlvbiB9IGZyb20gJy4vQWJzdHJhY3RBY2NvcmRpb24nO1xuaW1wb3J0IHsgSUhhc0RhdGFQYXJlbnQgfSBmcm9tICcuL0lIYXNEYXRhUGFyZW50JztcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi9JSGFzRGF0YSc7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LWNvbXBvbmVudC1hY2NvcmRpb25cIjtcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1jb21wb25lbnQtYWNjb3JkaW9uXCI+XG4gIDxkaXYgY2xhc3M9XCJhY2NvcmRpb24tY29udGFpbmVyXCI+XG4gICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1pdGVtIFtuZ0Zvck9mXT1cImdldEl0ZW1zKClcIiBsZXQtaT1cImluZGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWl0ZW1cIiBpZD1cInt7aSsnJ319XCIgW2NsYXNzLmhpZGVib3JkZXJdPVwiIWlzU2hvdyhpKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci13cmFwcGVyXCIgW2NsYXNzLmRpc2FibGVdPVwiIWlzRW5hYmxlKGkpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPjxoND57e2l0ZW0ubGFiZWx9fTwvaDQ+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvd24tdHJpYW5nbGVcIiAoY2xpY2spPVwib25TaG93Qm9keUJ0bkNsaWNrKCRldmVudCwgaSlcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJvZHlcIiBbc3R5bGUuaGVpZ2h0XT1cIl9nZXRJdGVtSGVpZ2h0KGkpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvZHktd3JhcHBlclwiIFtjbGFzcy5zaG93XT1cImlzU2hvdyhpKVwiIFtjbGFzcy5kaXNhYmxlXT1cIiFpc0VuYWJsZShpKVwiPlxuICAgICAgICAgICAgICA8cGh4LWNvbXBvbmVudC13cmFwcGVyIFt0eXBlXT1cIml0ZW0uY29tcG9uZW50VHlwZVwiIFtkYXRhXT1cIml0ZW0uY29tcG9uZW50RGF0YVwiIFtoYW5kbGVyXT1cIl9nZXRQYWdlQ29tcG9uZW50SGFuZGxlcigpXCIgW3NldHRpbmddPVwie2luZGV4OiBpfVwiIFttb2RlbF09XCJpdGVtLmNvbXBvbmVudE1vZGVsXCIgW2RhdGFQYXJlbnRdPVwidGhpc1wiPjwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1pdGVtIGZha2VcIj48IS0tIGZha2UgZm9yIGhlaWdodCAtLT48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QWNjb3JkaW9uIGV4dGVuZHMgQWJzdHJhY3RBY2NvcmRpb248Q29tcG9uZW50QWNjb3JkaW9uSXRlbU1vZGVsPiBpbXBsZW1lbnRzIE9uSW5pdCwgSUhhc0RhdGFQYXJlbnQge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgcHJpdmF0ZSBBQ0NPUkRJQU5fQ09OVEFJTkVSX1NFTEVDVE9SOiBzdHJpbmcgPSBcIi5hY2NvcmRpb24tY29udGFpbmVyXCI7XG5cbiAgQElucHV0KClcbiAgQEkxOE4oKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGl0ZW1zOiBDb21wb25lbnRBY2NvcmRpb25JdGVtTW9kZWxbXTtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBmaXhlZEhlaWdodDogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgbXVsdGlwbGVFeHBhbmQ6IGJvb2xlYW47XG5cbiAgQEkxOE4oJ2NvbXBvbmVudHMnKVxuICBwcml2YXRlIGl0ZW1Db21wb25lbnRzOiBhbnlbXTtcbiAgcHJpdmF0ZSBkZWxheVRpbWVyOiBhbnk7XG4gIHByaXZhdGUgaW5pdGVkOiBib29sZWFuO1xuICBwcml2YXRlIGFjdGl2ZUl0ZW1zOiBDb21wb25lbnRBY2NvcmRpb25JdGVtTW9kZWxbXTtcbiAgcHJpdmF0ZSBwYWdlQ29tcG9uZW50SGFuZGxlcjogRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuXG4gICAgdGhpcy5pbml0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLml0ZW1Db21wb25lbnRzID0gW107XG4gICAgdGhpcy5hY3RpdmVJdGVtcyA9IFtdO1xuICAgIC8vIGltcGxlIGZvciBjb21wb25lbnQgaGFuZGxlclxuICAgIHRoaXMucGFnZUNvbXBvbmVudEhhbmRsZXIgPSAoZGF0YTogYW55KSA9PiB7XG4gICAgICBpZiAodGhpcyAhPSBudWxsICYmIHR5cGVvZiB0aGlzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoZGF0YS5zZXR0aW5nICE9PSBudWxsICYmIHR5cGVvZiBkYXRhLnNldHRpbmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbGV0IGluZGV4ID0gZGF0YS5zZXR0aW5nLmluZGV4O1xuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLml0ZW1Db21wb25lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLml0ZW1Db21wb25lbnRzW2luZGV4XSA9IGRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsZXQgY291bnQgPSB0aGlzLml0ZW1Db21wb25lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgd2hpbGUgKGNvdW50IDw9IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtQ29tcG9uZW50cy5wdXNoKGRhdGEuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLml0ZW1Db21wb25lbnRzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5pdGVtcyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5pdGVtcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGxldCBpdGVtID0gdGhpcy5pdGVtc1tpbmRleF07XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmluc3RhbmNlLnNldE1vZGVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5pbnN0YW5jZS5zZXRNb2RlbChpdGVtLmNvbXBvbmVudE1vZGVsKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5pbnN0YW5jZS5zZXREYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5pbnN0YW5jZS5zZXREYXRhKGl0ZW0uY29tcG9uZW50RGF0YSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBieSBwYXNzIGNoaWxkXG4gICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFQYXJlbnQgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZGF0YVBhcmVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGF0YVBhcmVudC5hZGREYXRhQ2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIGxldCBoYXNEYXRhQ29tcG8gPSBkYXRhLmluc3RhbmNlIGFzIElIYXNEYXRhO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGhhc0RhdGFDb21wbyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUGFyZW50LmFkZERhdGFDaGlsZChoYXNEYXRhQ29tcG8pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVx