UNPKG

ngx-amap

Version:

[![npm](https://img.shields.io/npm/v/ngx-amap.svg)][npm-badge-url] [![npm](https://img.shields.io/npm/dm/ngx-amap.svg)][npm-badge-url] [![Build Status](https://travis-ci.org/xieziyu/ngx-amap.svg?branch=master)][ci-url]

650 lines 46.8 kB
/** * @fileoverview added by tsickle * Generated from: directives/ui-simple-marker/ui-simple-marker.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Input, Output, EventEmitter, ContentChildren, QueryList, } from '@angular/core'; import { zip } from 'rxjs'; import { AMapOverlay, OverlayOptions } from '../../base/amap-overlay'; import { AmapInfoWindowComponent } from '../../components/amap-info-window/amap-info-window.component'; import { getOptions, ChangeFilter } from '../../utils'; /** @type {?} */ export var SimpleMarkerOptions = tslib_1.__spread(OverlayOptions, [ // Marker options without cotent 'position', 'anchor', 'offset', 'icon', 'topWhenClick', 'raiseOnDrag', 'visible', 'zIndex', 'angle', 'autoRotation', 'animation', 'shadow', 'title', 'shape', 'label', // Own options 'iconTheme', 'iconStyle', 'iconLabel', 'showPositionPoint', 'containerClassNames', ]); var UISimpleMarker = /** @class */ (function (_super) { tslib_1.__extends(UISimpleMarker, _super); function UISimpleMarker(os, binder, amaps, pixels, icons, mlabels, logger, ngZone) { var _this = _super.call(this, os, binder) || this; _this.os = os; _this.binder = binder; _this.amaps = amaps; _this.pixels = pixels; _this.icons = icons; _this.mlabels = mlabels; _this.logger = logger; _this.ngZone = ngZone; _this.TAG = 'ui-simple-marker'; /** * 额外: 是否隐藏 */ _this.hidden = false; /** * 额外: 是否包含在点聚合中 */ _this.inCluster = false; /** * 额外: 点击时是否显示信息窗体 */ _this.openInfoWindow = true; // amap-marker events: _this.naReady = new EventEmitter(); // amap info window: _this.infoWindowComponent = new QueryList(); _this.inited = false; /** @type {?} */ var target = _this.os.get(); _this.naMouseOut = _this.binder.bindEvent(target, 'mouseout'); _this.naDragStart = _this.binder.bindEvent(target, 'dragstart'); _this.naDragging = _this.binder.bindEvent(target, 'dragging'); _this.naDragEnd = _this.binder.bindEvent(target, 'dragend'); _this.naMoving = _this.binder.bindEvent(target, 'moving'); _this.naMoveEnd = _this.binder.bindEvent(target, 'moveend'); _this.naMoveAlong = _this.binder.bindEvent(target, 'movealong'); return _this; } /** * @return {?} */ UISimpleMarker.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.subscription) { this.subscription.unsubscribe(); } this.os.destroy(); }; /** * @param {?} changes * @return {?} */ UISimpleMarker.prototype.ngOnChanges = /** * @param {?} changes * @return {?} */ function (changes) { var _this = this; /** @type {?} */ var filter = ChangeFilter.of(changes); /** @type {?} */ var marker = this.get(); if (!this.inited) { // do not draw marker when no poistion defined. if (!this.position) { return; } this.amaps.get().subscribe((/** * @return {?} */ function () { _this.logger.d(_this.TAG, 'initializing ...'); // bind info window events: _this.subscription = _this.binder.bindEvent(marker, 'click').subscribe((/** * @return {?} */ function () { if (_this.openInfoWindow) { _this.infoWindowComponent.forEach((/** * @param {?} w * @return {?} */ function (w) { return w.open(); })); } })); /** @type {?} */ var options = _this.getOptions(); if (_this.icon) { options.icon = _this.icons.create(_this.icon); } if (_this.shadow) { options.shadow = _this.icons.create(_this.shadow); } if (_this.label) { options.label = _this.mlabels.create(_this.label); } if (_this.offset) { options.offset = _this.pixels.create(_this.offset); } _this.logger.d(_this.TAG, 'options:', options); _this.os.create(options).subscribe((/** * @param {?} m * @return {?} */ function (m) { _this.ngZone.run((/** * @return {?} */ function () { return _this.naReady.emit(m); })); _this.logger.d(_this.TAG, 'marker is ready.'); })); _this.inited = true; _this.updateInfoWindow(); _this.updateInfoWindowPosition(); })); } else { zip(filter.has('icon'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setIcon(_this.icons.create(v)); })); zip(filter.has('shadow'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setShadow(_this.icons.create(v)); })); zip(filter.has('label'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setLabel(_this.mlabels.create(v)); })); zip(filter.has('title'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setTitle(v); })); zip(filter.has('extData'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setExtData(v); })); zip(filter.has('clickable'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setClickable(!!v); })); zip(filter.has('draggable'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setDraggable(!!v); })); zip(filter.has('visible'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return (v ? m.show() : m.hide()); })); zip(filter.has('cursor'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setCursor(v); })); zip(filter.has('animation'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setAnimation(v); })); zip(filter.has('angle'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setAngle(v); })); zip(filter.has('zIndex'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setzIndex(v); })); zip(filter.has('shape'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setShape(v); })); zip(filter.notEmpty('offset'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setOffset(_this.pixels.create(v)); })); zip(filter.notEmpty('position'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setPosition(v); })); zip(filter.has('showPositionPoint'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; if (!!v) { m.showPositionPoint(); } else { m.hidePositionPoint(); } })); zip(filter.notEmpty('iconStyle'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; if (changes.iconTheme && changes.iconTheme.currentValue) { m.setIconThemeAndStyle(changes.iconTheme.currentValue, v); } else { m.setIconStyle(v); } })); zip(filter.notEmpty('iconLabel'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setIconLabel(v); })); zip(filter.notEmpty('containerClassNames'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setContainerClassNames(v); })); } zip(filter.has('isTop'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return m.setTop(!!v); })); zip(filter.has('hidden'), marker).subscribe((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1]; return (v ? m.hide() : m.show()); })); }; /** * @return {?} */ UISimpleMarker.prototype.ngAfterContentInit = /** * @return {?} */ function () { var _this = this; this.updateInfoWindow(); this.infoWindowComponent.changes.subscribe((/** * @return {?} */ function () { return _this.updateInfoWindow(); })); }; /** * @private * @return {?} */ UISimpleMarker.prototype.updateInfoWindow = /** * @private * @return {?} */ function () { if (this.infoWindowComponent && this.inited) { if (this.infoWindowComponent.length > 1) { this.logger.e(this.TAG, 'Expected no more than 1 info window.'); return; } /** @type {?} */ var marker_1 = this.os.get(); this.infoWindowComponent.forEach((/** * @param {?} component * @return {?} */ function (component) { component.hostMarker = marker_1; })); } }; /** * @private * @return {?} */ UISimpleMarker.prototype.updateInfoWindowPosition = /** * @private * @return {?} */ function () { if (this.infoWindowComponent && this.inited) { this.infoWindowComponent.forEach((/** * @param {?} component * @return {?} */ function (component) { component.toggleOpen(); })); } }; /** * @return {?} */ UISimpleMarker.prototype.getOptions = /** * @return {?} */ function () { return getOptions(this, SimpleMarkerOptions); }; /** * 获取已创建的 AMapUI 对象 */ /** * 获取已创建的 AMapUI 对象 * @return {?} */ UISimpleMarker.prototype.get = /** * 获取已创建的 AMapUI 对象 * @return {?} */ function () { return this.os.get(); }; UISimpleMarker.propDecorators = { iconTheme: [{ type: Input }], iconStyle: [{ type: Input }], iconLabel: [{ type: Input }], showPositionPoint: [{ type: Input }], containerClassNames: [{ type: Input }], position: [{ type: Input }], anchor: [{ type: Input }], offset: [{ type: Input }], icon: [{ type: Input }], topWhenClick: [{ type: Input }], raiseOnDrag: [{ type: Input }], visible: [{ type: Input }], zIndex: [{ type: Input }], angle: [{ type: Input }], autoRotation: [{ type: Input }], animation: [{ type: Input }], shadow: [{ type: Input }], title: [{ type: Input }], shape: [{ type: Input }], label: [{ type: Input }], isTop: [{ type: Input }], hidden: [{ type: Input }], inCluster: [{ type: Input }], openInfoWindow: [{ type: Input }], naReady: [{ type: Output }], naMouseOut: [{ type: Output }], naDragStart: [{ type: Output }], naDragging: [{ type: Output }], naDragEnd: [{ type: Output }], naMoving: [{ type: Output }], naMoveEnd: [{ type: Output }], naMoveAlong: [{ type: Output }], infoWindowComponent: [{ type: ContentChildren, args: [AmapInfoWindowComponent,] }] }; return UISimpleMarker; }(AMapOverlay)); export { UISimpleMarker }; if (false) { /** @type {?} */ UISimpleMarker.prototype.TAG; /** * 样式主题 * @type {?} */ UISimpleMarker.prototype.iconTheme; /** * 背景图标样式 * @type {?} */ UISimpleMarker.prototype.iconStyle; /** * 图标前景文字 * @type {?} */ UISimpleMarker.prototype.iconLabel; /** * 是否显示定位点 * @type {?} */ UISimpleMarker.prototype.showPositionPoint; /** * 内建的Dom容器上附带的class,多个class name用空格分开 * @type {?} */ UISimpleMarker.prototype.containerClassNames; /** * 点标记在地图上显示的位置 * @type {?} */ UISimpleMarker.prototype.position; /** * 标记锚点 * @type {?} */ UISimpleMarker.prototype.anchor; /** * 点标记显示位置偏移量 * @type {?} */ UISimpleMarker.prototype.offset; /** * 需在点标记中显示的图标 * @type {?} */ UISimpleMarker.prototype.icon; /** * 鼠标点击时marker是否置顶 * @type {?} */ UISimpleMarker.prototype.topWhenClick; /** * 拖拽点标记时是否开启点标记离开地图的效果 * @type {?} */ UISimpleMarker.prototype.raiseOnDrag; /** * 点标记是否可见 * @type {?} */ UISimpleMarker.prototype.visible; /** * 点标记的叠加顺序 * @type {?} */ UISimpleMarker.prototype.zIndex; /** * 点标记的旋转角度 * @type {?} */ UISimpleMarker.prototype.angle; /** * 是否自动旋转 * @type {?} */ UISimpleMarker.prototype.autoRotation; /** * 点标记的动画效果 * @type {?} */ UISimpleMarker.prototype.animation; /** * 点标记阴影 * @type {?} */ UISimpleMarker.prototype.shadow; /** * 鼠标滑过点标记时的文字提示 * @type {?} */ UISimpleMarker.prototype.title; /** * 可点击区域 * @type {?} */ UISimpleMarker.prototype.shape; /** * 文本标注 * @type {?} */ UISimpleMarker.prototype.label; /** * 额外: 是否置顶 * @type {?} */ UISimpleMarker.prototype.isTop; /** * 额外: 是否隐藏 * @type {?} */ UISimpleMarker.prototype.hidden; /** * 额外: 是否包含在点聚合中 * @type {?} */ UISimpleMarker.prototype.inCluster; /** * 额外: 点击时是否显示信息窗体 * @type {?} */ UISimpleMarker.prototype.openInfoWindow; /** @type {?} */ UISimpleMarker.prototype.naReady; /** @type {?} */ UISimpleMarker.prototype.naMouseOut; /** @type {?} */ UISimpleMarker.prototype.naDragStart; /** @type {?} */ UISimpleMarker.prototype.naDragging; /** @type {?} */ UISimpleMarker.prototype.naDragEnd; /** @type {?} */ UISimpleMarker.prototype.naMoving; /** @type {?} */ UISimpleMarker.prototype.naMoveEnd; /** @type {?} */ UISimpleMarker.prototype.naMoveAlong; /** @type {?} */ UISimpleMarker.prototype.infoWindowComponent; /** * @type {?} * @protected */ UISimpleMarker.prototype.inited; /** * @type {?} * @protected */ UISimpleMarker.prototype.subscription; /** * @type {?} * @protected */ UISimpleMarker.prototype.os; /** * @type {?} * @protected */ UISimpleMarker.prototype.binder; /** * @type {?} * @protected */ UISimpleMarker.prototype.amaps; /** * @type {?} * @protected */ UISimpleMarker.prototype.pixels; /** * @type {?} * @protected */ UISimpleMarker.prototype.icons; /** * @type {?} * @protected */ UISimpleMarker.prototype.mlabels; /** * @type {?} * @protected */ UISimpleMarker.prototype.logger; /** * @type {?} * @protected */ UISimpleMarker.prototype.ngZone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktc2ltcGxlLW1hcmtlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hbWFwLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy91aS1zaW1wbGUtbWFya2VyL3VpLXNpbXBsZS1tYXJrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUNMLEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUdaLGVBQWUsRUFDZixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUl2RyxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFNdkQsTUFBTSxLQUFPLG1CQUFtQixvQkFDM0IsY0FBYztJQUNqQixnQ0FBZ0M7SUFDaEMsVUFBVTtJQUNWLFFBQVE7SUFDUixRQUFRO0lBQ1IsTUFBTTtJQUNOLGNBQWM7SUFDZCxhQUFhO0lBQ2IsU0FBUztJQUNULFFBQVE7SUFDUixPQUFPO0lBQ1AsY0FBYztJQUNkLFdBQVc7SUFDWCxRQUFRO0lBQ1IsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsY0FBYztJQUNkLFdBQVc7SUFDWCxXQUFXO0lBQ1gsV0FBVztJQUNYLG1CQUFtQjtJQUNuQixxQkFBcUI7RUFDdEI7QUFFRDtJQUFvQywwQ0FBZ0I7SUFzSGxELHdCQUNZLEVBQW1CLEVBQ25CLE1BQTBCLEVBQzFCLEtBQWtCLEVBQ2xCLE1BQW9CLEVBQ3BCLEtBQWtCLEVBQ2xCLE9BQTJCLEVBQzNCLE1BQXFCLEVBQ3JCLE1BQWM7UUFSMUIsWUFVRSxrQkFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLFNBU2xCO1FBbEJXLFFBQUUsR0FBRixFQUFFLENBQWlCO1FBQ25C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Q0FBK0I7O0lBRy9CLGlDQUF1Qzs7SUFDdkMsb0NBQXdDOztJQUN4QyxxQ0FBeUM7O0lBQ3pDLG9DQUF3Qzs7SUFDeEMsbUNBQXVDOztJQUN2QyxrQ0FBc0M7O0lBQ3RDLG1DQUF1Qzs7SUFDdkMscUNBQXlDOztJQUd6Qyw2Q0FDK0Q7Ozs7O0lBRS9ELGdDQUF5Qjs7Ozs7SUFDekIsc0NBQXFDOzs7OztJQUduQyw0QkFBNkI7Ozs7O0lBQzdCLGdDQUFvQzs7Ozs7SUFDcEMsK0JBQTRCOzs7OztJQUM1QixnQ0FBOEI7Ozs7O0lBQzlCLCtCQUE0Qjs7Ozs7SUFDNUIsaUNBQXFDOzs7OztJQUNyQyxnQ0FBK0I7Ozs7O0lBQy9CLGdDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBOZ1pvbmUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgemlwLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFNYXBPdmVybGF5LCBPdmVybGF5T3B0aW9ucyB9IGZyb20gJy4uLy4uL2Jhc2UvYW1hcC1vdmVybGF5JztcbmltcG9ydCB7IEV2ZW50QmluZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9ldmVudC1iaW5kZXIuc2VydmljZSc7XG5pbXBvcnQgeyBJUGl4ZWwsIElJY29uLCBJTWFya2VyTGFiZWwgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFtYXBJbmZvV2luZG93Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hbWFwLWluZm8td2luZG93L2FtYXAtaW5mby13aW5kb3cuY29tcG9uZW50JztcbmltcG9ydCB7IEFNYXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FtYXAuc2VydmljZSc7XG5pbXBvcnQgeyBXaXRoQ3JlYXRlIH0gZnJvbSAnLi4vLi4vYmFzZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IGdldE9wdGlvbnMsIENoYW5nZUZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFBpeGVsU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9waXhlbC5zZXJ2aWNlJztcbmltcG9ydCB7IEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ljb24uc2VydmljZSc7XG5pbXBvcnQgeyBNYXJrZXJMYWJlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbWFya2VyLWxhYmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQU1hcFVJU2ltcGxlTWFya2VyIH0gZnJvbSAnLi91aS1zaW1wbGUtbWFya2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgU2ltcGxlTWFya2VyT3B0aW9ucyA9IFtcbiAgLi4uT3ZlcmxheU9wdGlvbnMsXG4gIC8vIE1hcmtlciBvcHRpb25zIHdpdGhvdXQgY290ZW50XG4gICdwb3NpdGlvbicsXG4gICdhbmNob3InLFxuICAnb2Zmc2V0JyxcbiAgJ2ljb24nLFxuICAndG9wV2hlbkNsaWNrJyxcbiAgJ3JhaXNlT25EcmFnJyxcbiAgJ3Zpc2libGUnLFxuICAnekluZGV4JyxcbiAgJ2FuZ2xlJyxcbiAgJ2F1dG9Sb3RhdGlvbicsXG4gICdhbmltYXRpb24nLFxuICAnc2hhZG93JyxcbiAgJ3RpdGxlJyxcbiAgJ3NoYXBlJyxcbiAgJ2xhYmVsJyxcbiAgLy8gT3duIG9wdGlvbnNcbiAgJ2ljb25UaGVtZScsXG4gICdpY29uU3R5bGUnLFxuICAnaWNvbkxhYmVsJyxcbiAgJ3Nob3dQb3NpdGlvblBvaW50JyxcbiAgJ2NvbnRhaW5lckNsYXNzTmFtZXMnLFxuXTtcblxuZXhwb3J0IGNsYXNzIFVJU2ltcGxlTWFya2VyIGV4dGVuZHMgQU1hcE92ZXJsYXk8YW55PlxuICBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0IHtcbiAgVEFHID0gJ3VpLXNpbXBsZS1tYXJrZXInO1xuICAvLyAtLS0tIE9wdGlvbnMgLS0tLVxuICAvKipcbiAgICog5qC35byP5Li76aKYXG4gICAqL1xuICBASW5wdXQoKSBpY29uVGhlbWU6ICdkZWZhdWx0JyB8ICdmcmVzaCcgfCAnbnVtdjEnIHwgJ251bXYyJztcbiAgLyoqXG4gICAqIOiDjOaZr+Wbvuagh+agt+W8j1xuICAgKi9cbiAgQElucHV0KCkgaWNvblN0eWxlOiBzdHJpbmcgfCBvYmplY3Q7XG4gIC8qKlxuICAgKiDlm77moIfliY3mma/mloflrZdcbiAgICovXG4gIEBJbnB1dCgpIGljb25MYWJlbDogc3RyaW5nIHwgb2JqZWN0O1xuICAvKipcbiAgICog5piv5ZCm5pi+56S65a6a5L2N54K5XG4gICAqL1xuICBASW5wdXQoKSBzaG93UG9zaXRpb25Qb2ludDogYm9vbGVhbiB8IG9iamVjdDtcbiAgLyoqXG4gICAqIOWGheW7uueahERvbeWuueWZqOS4iumZhOW4pueahGNsYXNz77yM5aSa5LiqY2xhc3MgbmFtZeeUqOepuuagvOWIhuW8gFxuICAgKi9cbiAgQElucHV0KCkgY29udGFpbmVyQ2xhc3NOYW1lczogc3RyaW5nO1xuICAvKipcbiAgICog54K55qCH6K6w5Zyo5Zyw5Zu+5LiK5pi+56S655qE5L2N572uXG4gICAqL1xuICBASW5wdXQoKSBwb3NpdGlvbjogQU1hcC5Mb2NhdGlvblZhbHVlO1xuICAvKipcbiAgICog5qCH6K6w6ZSa54K5XG4gICAqL1xuICBASW5wdXQoKSBhbmNob3I6IEFNYXAuTWFya2VyLkFuY2hvcjtcbiAgLyoqXG4gICAqIOeCueagh+iusOaYvuekuuS9jee9ruWBj+enu+mHj1xuICAgKi9cbiAgQElucHV0KCkgb2Zmc2V0OiBBTWFwLlBpeGVsIHwgSVBpeGVsO1xuICAvKipcbiAgICog6ZyA5Zyo54K55qCH6K6w5Lit5pi+56S655qE5Zu+5qCHXG4gICAqL1xuICBASW5wdXQoKSBpY29uOiBzdHJpbmcgfCBBTWFwLkljb24gfCBJSWNvbjtcbiAgLyoqXG4gICAqIOm8oOagh+eCueWHu+aXtm1hcmtlcuaYr+WQpue9rumhtlxuICAgKi9cbiAgQElucHV0KCkgdG9wV2hlbkNsaWNrOiBib29sZWFuO1xuICAvKipcbiAgICog5ouW5ou954K55qCH6K6w5pe25piv5ZCm5byA5ZCv54K55qCH6K6w56a75byA5Zyw5Zu+55qE5pWI5p6cXG4gICAqL1xuICBASW5wdXQoKSByYWlzZU9uRHJhZzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOeCueagh+iusOaYr+WQpuWPr+ingVxuICAgKi9cbiAgQElucHV0KCkgdmlzaWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOeCueagh+iusOeahOWPoOWKoOmhuuW6j1xuICAgKi9cbiAgQElucHV0KCkgekluZGV4OiBudW1iZXI7XG4gIC8qKlxuICAgKiDngrnmoIforrDnmoTml4vovazop5LluqZcbiAgICovXG4gIEBJbnB1dCgpIGFuZ2xlOiBudW1iZXI7XG4gIC8qKlxuICAgKiDmmK/lkKboh6rliqjml4vovaxcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9Sb3RhdGlvbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOeCueagh+iusOeahOWKqOeUu+aViOaenFxuICAgKi9cbiAgQElucHV0KCkgYW5pbWF0aW9uOiBBTWFwLkFuaW1hdGlvbk5hbWU7XG4gIC8qKlxuICAgKiDngrnmoIforrDpmLTlvbFcbiAgICovXG4gIEBJbnB1dCgpIHNoYWRvdzogQU1hcC5JY29uIHwgc3RyaW5nIHwgSUljb247XG4gIC8qKlxuICAgKiDpvKDmoIfmu5Hov4fngrnmoIforrDml7bnmoTmloflrZfmj5DnpLpcbiAgICovXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDlj6/ngrnlh7vljLrln59cbiAgICovXG4gIEBJbnB1dCgpIHNoYXBlOiBBTWFwLk1hcmtlclNoYXBlO1xuICAvKipcbiAgICog5paH5pys5qCH5rOoXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbDogQU1hcC5NYXJrZXIuTGFiZWwgfCBJTWFya2VyTGFiZWw7XG4gIC8qKlxuICAgKiDpop3lpJY6IOaYr+WQpue9rumhtlxuICAgKi9cbiAgQElucHV0KCkgaXNUb3A6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDpop3lpJY6IOaYr+WQpumakOiXj1xuICAgKi9cbiAgQElucHV0KCkgaGlkZGVuID0gZmFsc2U7XG4gIC8qKlxuICAgKiDpop3lpJY6IOaYr+WQpuWMheWQq+WcqOeCueiBmuWQiOS4rVxuICAgKi9cbiAgQElucHV0KCkgaW5DbHVzdGVyID0gZmFsc2U7XG4gIC8qKlxuICAgKiDpop3lpJY6IOeCueWHu+aXtuaYr+WQpuaYvuekuuS/oeaBr+eql+S9k1xuICAgKi9cbiAgQElucHV0KCkgb3BlbkluZm9XaW5kb3cgPSB0cnVlO1xuXG4gIC8vIGFtYXAtbWFya2VyIGV2ZW50czpcbiAgQE91dHB1dCgpIG5hUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBuYU1vdXNlT3V0OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hRHJhZ1N0YXJ0OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hRHJhZ2dpbmc6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFEcmFnRW5kOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW92aW5nOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW92ZUVuZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYU1vdmVBbG9uZzogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgLy8gYW1hcCBpbmZvIHdpbmRvdzpcbiAgQENvbnRlbnRDaGlsZHJlbihBbWFwSW5mb1dpbmRvd0NvbXBvbmVudClcbiAgaW5mb1dpbmRvd0NvbXBvbmVudCA9IG5ldyBRdWVyeUxpc3Q8QW1hcEluZm9XaW5kb3dDb21wb25lbnQ+KCk7XG5cbiAgcHJvdGVjdGVkIGluaXRlZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG9zOiBXaXRoQ3JlYXRlPGFueT4sXG4gICAgcHJvdGVjdGVkIGJpbmRlcjogRXZlbnRCaW5kZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhbWFwczogQU1hcFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHBpeGVsczogUGl4ZWxTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpY29uczogSWNvblNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG1sYWJlbHM6IE1hcmtlckxhYmVsU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBuZ1pvbmU6IE5nWm9uZSxcbiAgKSB7XG4gICAgc3VwZXIob3MsIGJpbmRlcik7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5vcy5nZXQoKTtcbiAgICB0aGlzLm5hTW91c2VPdXQgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQodGFyZ2V0LCAnbW91c2VvdXQnKTtcbiAgICB0aGlzLm5hRHJhZ1N0YXJ0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ2RyYWdzdGFydCcpO1xuICAgIHRoaXMubmFEcmFnZ2luZyA9IHRoaXMuYmluZGVyLmJpbmRFdmVudCh0YXJnZXQsICdkcmFnZ2luZycpO1xuICAgIHRoaXMubmFEcmFnRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ2RyYWdlbmQnKTtcbiAgICB0aGlzLm5hTW92aW5nID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ21vdmluZycpO1xuICAgIHRoaXMubmFNb3ZlRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ21vdmVlbmQnKTtcbiAgICB0aGlzLm5hTW92ZUFsb25nID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KHRhcmdldCwgJ21vdmVhbG9uZycpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm9zLmRlc3Ryb3koKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBmaWx0ZXIgPSBDaGFuZ2VGaWx0ZXIub2YoY2hhbmdlcyk7XG4gICAgY29uc3QgbWFya2VyID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoIXRoaXMuaW5pdGVkKSB7XG4gICAgICAvLyBkbyBub3QgZHJhdyBtYXJrZXIgd2hlbiBubyBwb2lzdGlvbiBkZWZpbmVkLlxuICAgICAgaWYgKCF0aGlzLnBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYW1hcHMuZ2V0KCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZCh0aGlzLlRBRywgJ2luaXRpYWxpemluZyAuLi4nKTtcbiAgICAgICAgLy8gYmluZCBpbmZvIHdpbmRvdyBldmVudHM6XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG1hcmtlciwgJ2NsaWNrJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5vcGVuSW5mb1dpbmRvdykge1xuICAgICAgICAgICAgdGhpcy5pbmZvV2luZG93Q29tcG9uZW50LmZvckVhY2godyA9PiB3Lm9wZW4oKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgICAgICBpZiAodGhpcy5pY29uKSB7XG4gICAgICAgICAgb3B0aW9ucy5pY29uID0gdGhpcy5pY29ucy5jcmVhdGUodGhpcy5pY29uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaGFkb3cpIHtcbiAgICAgICAgICBvcHRpb25zLnNoYWRvdyA9IHRoaXMuaWNvbnMuY3JlYXRlKHRoaXMuc2hhZG93KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIG9wdGlvbnMubGFiZWwgPSB0aGlzLm1sYWJlbHMuY3JlYXRlKHRoaXMubGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9mZnNldCkge1xuICAgICAgICAgIG9wdGlvbnMub2Zmc2V0ID0gdGhpcy5waXhlbHMuY3JlYXRlKHRoaXMub2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ2dlci5kKHRoaXMuVEFHLCAnb3B0aW9uczonLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5vcy5jcmVhdGUob3B0aW9ucykuc3Vic2NyaWJlKG0gPT4ge1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLm5hUmVhZHkuZW1pdChtKSk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZCh0aGlzLlRBRywgJ21hcmtlciBpcyByZWFkeS4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVJbmZvV2luZG93KCk7XG4gICAgICAgIHRoaXMudXBkYXRlSW5mb1dpbmRvd1Bvc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgemlwKGZpbHRlci5oYXM8c3RyaW5nIHwgQU1hcC5JY29uIHwgSUljb24+KCdpY29uJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+XG4gICAgICAgIG0uc2V0SWNvbih0aGlzLmljb25zLmNyZWF0ZSh2KSksXG4gICAgICApO1xuICAgICAgemlwKGZpbHRlci5oYXM8c3RyaW5nIHwgQU1hcC5JY29uPignc2hhZG93JyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+XG4gICAgICAgIG0uc2V0U2hhZG93KHRoaXMuaWNvbnMuY3JlYXRlKHYpKSxcbiAgICAgICk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxBTWFwLk1hcmtlci5MYWJlbCB8IElNYXJrZXJMYWJlbD4oJ2xhYmVsJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+XG4gICAgICAgIG0uc2V0TGFiZWwodGhpcy5tbGFiZWxzLmNyZWF0ZSh2KSksXG4gICAgICApO1xuICAgICAgemlwKGZpbHRlci5oYXM8c3RyaW5nPigndGl0bGUnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRUaXRsZSh2KSk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxhbnk+KCdleHREYXRhJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IG0uc2V0RXh0RGF0YSh2KSk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxib29sZWFuPignY2xpY2thYmxlJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IG0uc2V0Q2xpY2thYmxlKCEhdikpO1xuICAgICAgemlwKGZpbHRlci5oYXM8Ym9vbGVhbj4oJ2RyYWdnYWJsZScpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PiBtLnNldERyYWdnYWJsZSghIXYpKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPGJvb2xlYW4+KCd2aXNpYmxlJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+ICh2ID8gbS5zaG93KCkgOiBtLmhpZGUoKSkpO1xuICAgICAgemlwKGZpbHRlci5oYXM8c3RyaW5nPignY3Vyc29yJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IG0uc2V0Q3Vyc29yKHYpKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPEFNYXAuQW5pbWF0aW9uTmFtZT4oJ2FuaW1hdGlvbicpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PlxuICAgICAgICBtLnNldEFuaW1hdGlvbih2KSxcbiAgICAgICk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxudW1iZXI+KCdhbmdsZScpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PiBtLnNldEFuZ2xlKHYpKTtcbiAgICAgIHppcChmaWx0ZXIuaGFzPG51bWJlcj4oJ3pJbmRleCcpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PiBtLnNldHpJbmRleCh2KSk7XG4gICAgICB6aXAoZmlsdGVyLmhhczxBTWFwLk1hcmtlclNoYXBlPignc2hhcGUnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRTaGFwZSh2KSk7XG4gICAgICB6aXAoZmlsdGVyLm5vdEVtcHR5PEFNYXAuUGl4ZWwgfCBJUGl4ZWw+KCdvZmZzZXQnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT5cbiAgICAgICAgbS5zZXRPZmZzZXQodGhpcy5waXhlbHMuY3JlYXRlKHYpKSxcbiAgICAgICk7XG4gICAgICB6aXAoZmlsdGVyLm5vdEVtcHR5PEFNYXAuTG9jYXRpb25WYWx1ZT4oJ3Bvc2l0aW9uJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+XG4gICAgICAgIG0uc2V0UG9zaXRpb24odiksXG4gICAgICApO1xuICAgICAgemlwKGZpbHRlci5oYXM8Ym9vbGVhbiB8IG9iamVjdD4oJ3Nob3dQb3NpdGlvblBvaW50JyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+IHtcbiAgICAgICAgaWYgKCEhdikge1xuICAgICAgICAgIG0uc2hvd1Bvc2l0aW9uUG9pbnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtLmhpZGVQb3NpdGlvblBvaW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgemlwKGZpbHRlci5ub3RFbXB0eTxzdHJpbmcgfCBvYmplY3Q+KCdpY29uU3R5bGUnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4ge1xuICAgICAgICBpZiAoY2hhbmdlcy5pY29uVGhlbWUgJiYgY2hhbmdlcy5pY29uVGhlbWUuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgbS5zZXRJY29uVGhlbWVBbmRTdHlsZShjaGFuZ2VzLmljb25UaGVtZS5jdXJyZW50VmFsdWUsIHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG0uc2V0SWNvblN0eWxlKHYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHppcChmaWx0ZXIubm90RW1wdHk8c3RyaW5nIHwgb2JqZWN0PignaWNvbkxhYmVsJyksIG1hcmtlcikuc3Vic2NyaWJlKChbdiwgbV0pID0+XG4gICAgICAgIG0uc2V0SWNvbkxhYmVsKHYpLFxuICAgICAgKTtcbiAgICAgIHppcChmaWx0ZXIubm90RW1wdHk8c3RyaW5nPignY29udGFpbmVyQ2xhc3NOYW1lcycpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PlxuICAgICAgICBtLnNldENvbnRhaW5lckNsYXNzTmFtZXModiksXG4gICAgICApO1xuICAgIH1cbiAgICB6aXAoZmlsdGVyLmhhczxib29sZWFuPignaXNUb3AnKSwgbWFya2VyKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4gbS5zZXRUb3AoISF2KSk7XG4gICAgemlwKGZpbHRlci5oYXM8Ym9vbGVhbj4oJ2hpZGRlbicpLCBtYXJrZXIpLnN1YnNjcmliZSgoW3YsIG1dKSA9PiAodiA/IG0uaGlkZSgpIDogbS5zaG93KCkpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUluZm9XaW5kb3coKTtcbiAgICB0aGlzLmluZm9XaW5kb3dDb21wb25lbnQuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVJbmZvV2luZG93KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbmZvV2luZG93KCkge1xuICAgIGlmICh0aGlzLmluZm9XaW5kb3dDb21wb25lbnQgJiYgdGhpcy5pbml0ZWQpIHtcbiAgICAgIGlmICh0aGlzLmluZm9XaW5kb3dDb21wb25lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5lKHRoaXMuVEFHLCAnRXhwZWN0ZWQgbm8gbW9yZSB0aGFuIDEgaW5mbyB3aW5kb3cuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFya2VyID0gdGhpcy5vcy5nZXQoKTtcbiAgICAgIHRoaXMuaW5mb1dpbmRvd0NvbXBvbmVudC5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGNvbXBvbmVudC5ob3N0TWFya2VyID0gbWFya2VyO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbmZvV2luZG93UG9zaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuaW5mb1dpbmRvd0NvbXBvbmVudCAmJiB0aGlzLmluaXRlZCkge1xuICAgICAgdGhpcy5pbmZvV2luZG93Q29tcG9uZW50LmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgICAgY29tcG9uZW50LnRvZ2dsZU9wZW4oKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldE9wdGlvbnM8QU1hcFVJU2ltcGxlTWFya2VyLk9wdGlvbnM+KHRoaXMsIFNpbXBsZU1hcmtlck9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluW3suWIm+W7uueahCBBTWFwVUkg5a+56LGhXG4gICAqL1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3MuZ2V0KCk7XG4gIH1cbn1cbiJdfQ==