ngx-amap
Version:
[][npm-badge-url] [][npm-badge-url] [][ci-url]
650 lines • 46.8 kB
JavaScript
/**
* @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==