ngx-amap
Version:
[][npm-badge-url] [][npm-badge-url] [][ci-url]
606 lines • 42.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: components/ngx-amap/ngx-amap.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Input, ElementRef, Output, EventEmitter, NgZone, } from '@angular/core';
import { zip } from 'rxjs';
import { AMapService } from '../../shared/amap.service';
import { EventBinderService } from '../../shared/event-binder.service';
import { PluginLoaderService } from '../../shared/plugin-loader.service';
import { LoggerService } from '../../shared/logger/logger.service';
import { getOptions, ChangeFilter } from '../../utils';
/** @type {?} */
var TAG = 'ngx-amap';
/** @type {?} */
var ALL_OPTIONS = [
'view',
'layers',
'zoom',
'center',
'labelzIndex',
'zooms',
'lang',
'defaultCursor',
'crs',
'animateEnable',
'isHotspot',
'defaultLayer',
'rotateEnable',
'resizeEnable',
'showIndoorMap',
'indoorMap',
'expandZoomRange',
'dragEnable',
'zoomEnable',
'doubleClickZoom',
'keyboardEnable',
'jogEnable',
'scrollWheel',
'touchZoom',
'touchZoomCenter',
'mapStyle',
'features',
'showBuildingBlock',
'viewMode',
'pitch',
'pitchEnable',
'buildingAnimation',
'skyColor',
'preloadMode',
'mask',
'maxPitch',
'rotation',
'forceVector',
'gridMapForeign',
'vectorMapForeign',
];
var NgxAmapComponent = /** @class */ (function () {
function NgxAmapComponent(el, amap, pluginLoader, logger, binder, ngZone) {
this.el = el;
this.amap = amap;
this.pluginLoader = pluginLoader;
this.logger = logger;
this.binder = binder;
this.ngZone = ngZone;
// ---- Map Events ----
this.naReady = new EventEmitter();
this.naPluginsLoaded = new EventEmitter();
this.inited = false;
/** @type {?} */
var m = this.amap.get();
this.naComplete = this.binder.bindEvent(m, 'complete');
this.naClick = this.binder.bindEvent(m, 'click');
this.naDblClick = this.binder.bindEvent(m, 'dblclick');
this.naRightClick = this.binder.bindEvent(m, 'rightclick');
this.naMouseMove = this.binder.bindEvent(m, 'mousemove');
this.naMouseOver = this.binder.bindEvent(m, 'mouseover');
this.naMouseWheel = this.binder.bindEvent(m, 'mousewheel');
this.naMouseUp = this.binder.bindEvent(m, 'mouseup');
this.naMouseOut = this.binder.bindEvent(m, 'mouseout');
this.naMouseDown = this.binder.bindEvent(m, 'mousedown');
this.naTouchStart = this.binder.bindEvent(m, 'touchstart');
this.naTouchMove = this.binder.bindEvent(m, 'touchmove');
this.naTouchEnd = this.binder.bindEvent(m, 'touchend');
this.naHotspotClick = this.binder.bindEvent(m, 'hotspotclick');
this.naHotspotOver = this.binder.bindEvent(m, 'hotspotover');
this.naHotspotOut = this.binder.bindEvent(m, 'hotspotout');
this.naDragStart = this.binder.bindEvent(m, 'dragstart');
this.naDragging = this.binder.bindEvent(m, 'dragging');
this.naDragEnd = this.binder.bindEvent(m, 'dragend');
this.naResize = this.binder.bindEvent(m, 'resize');
this.naZoomStart = this.binder.bindEvent(m, 'zoomstart');
this.naZoomEnd = this.binder.bindEvent(m, 'zoomend');
this.naZoomChange = this.binder.bindEvent(m, 'zoomchange');
this.naMoveStart = this.binder.bindEvent(m, 'movestart');
this.naMoveEnd = this.binder.bindEvent(m, 'moveend');
this.naMove = this.binder.bindEvent(m, 'mapmove');
}
/**
* @return {?}
*/
NgxAmapComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.logger.d(TAG, 'initializing ...');
/** @type {?} */
var container = this.el.nativeElement.querySelector('div.ngx-amap-container-inner');
/** @type {?} */
var options = getOptions(this, ALL_OPTIONS);
this.logger.d(TAG, 'options:', options);
this.amap.create(container, options).subscribe((/**
* @param {?} amap
* @return {?}
*/
function (amap) {
_this.logger.d(TAG, 'map is ready.');
_this.ngZone.run((/**
* @return {?}
*/
function () { return _this.naReady.emit(amap); }));
}));
this.inited = true;
};
/**
* @return {?}
*/
NgxAmapComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.amap.destroy();
};
/**
* @param {?} changes
* @return {?}
*/
NgxAmapComponent.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
var _this = this;
/** @type {?} */
var filter = ChangeFilter.of(changes);
/** @type {?} */
var amap = this.get();
if (this.inited) {
zip(filter.has('zoom'), amap).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
_this.logger.d(TAG, 'setZoom:', v);
m.setZoom(v);
}));
zip(filter.has('center'), amap).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
_this.logger.d(TAG, 'setCenter:', v);
m.setCenter(v);
}));
}
// Not included in OPTIONS
zip(filter.has('city'), amap).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
m.setCity(v, (/**
* @return {?}
*/
function () {
_this.logger.d(TAG, 'setCity:', v);
}));
}));
zip(filter.notEmpty('plugins'), amap).subscribe((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b = tslib_1.__read(_a, 2), v = _b[0], m = _b[1];
_this.pluginLoader.load(v).subscribe((/**
* @return {?}
*/
function () {
_this.logger.d(TAG, 'plugins loaded.');
_this.ngZone.run((/**
* @return {?}
*/
function () { return _this.naPluginsLoaded.emit(m); }));
}));
}));
};
/**
* 获取已创建的 AMap.Map 对象
*/
/**
* 获取已创建的 AMap.Map 对象
* @return {?}
*/
NgxAmapComponent.prototype.get = /**
* 获取已创建的 AMap.Map 对象
* @return {?}
*/
function () {
return this.amap.get();
};
NgxAmapComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-amap',
exportAs: 'amap',
template: "<div class='ngx-amap-container-inner'></div>\n<div class='ngx-amap-content'>\n <ng-content></ng-content>\n</div>",
providers: [AMapService, PluginLoaderService],
styles: [".ngx-amap-container-inner{width:inherit;height:inherit}.ngx-amap-content{display:none}"]
}] }
];
/** @nocollapse */
NgxAmapComponent.ctorParameters = function () { return [
{ type: ElementRef },
{ type: AMapService },
{ type: PluginLoaderService },
{ type: LoggerService },
{ type: EventBinderService },
{ type: NgZone }
]; };
NgxAmapComponent.propDecorators = {
view: [{ type: Input }],
layers: [{ type: Input }],
zoom: [{ type: Input }],
center: [{ type: Input }],
labelzIndex: [{ type: Input }],
zooms: [{ type: Input }],
lang: [{ type: Input }],
defaultCursor: [{ type: Input }],
crs: [{ type: Input }],
animateEnable: [{ type: Input }],
isHotspot: [{ type: Input }],
defaultLayer: [{ type: Input }],
rotateEnable: [{ type: Input }],
resizeEnable: [{ type: Input }],
showIndoorMap: [{ type: Input }],
indoorMap: [{ type: Input }],
expandZoomRange: [{ type: Input }],
dragEnable: [{ type: Input }],
zoomEnable: [{ type: Input }],
doubleClickZoom: [{ type: Input }],
keyboardEnable: [{ type: Input }],
jogEnable: [{ type: Input }],
scrollWheel: [{ type: Input }],
touchZoom: [{ type: Input }],
touchZoomCenter: [{ type: Input }],
mapStyle: [{ type: Input }],
features: [{ type: Input }],
showBuildingBlock: [{ type: Input }],
viewMode: [{ type: Input }],
pitch: [{ type: Input }],
pitchEnable: [{ type: Input }],
buildingAnimation: [{ type: Input }],
skyColor: [{ type: Input }],
preloadMode: [{ type: Input }],
mask: [{ type: Input }],
maxPitch: [{ type: Input }],
rotation: [{ type: Input }],
forceVector: [{ type: Input }],
gridMapForeign: [{ type: Input }],
vectorMapForeign: [{ type: Input }],
city: [{ type: Input }],
name: [{ type: Input }],
plugins: [{ type: Input }],
naReady: [{ type: Output }],
naComplete: [{ type: Output }],
naClick: [{ type: Output }],
naDblClick: [{ type: Output }],
naRightClick: [{ type: Output }],
naMouseMove: [{ type: Output }],
naMouseOver: [{ type: Output }],
naMouseWheel: [{ type: Output }],
naMouseUp: [{ type: Output }],
naMouseOut: [{ type: Output }],
naMouseDown: [{ type: Output }],
naTouchStart: [{ type: Output }],
naTouchMove: [{ type: Output }],
naTouchEnd: [{ type: Output }],
naHotspotClick: [{ type: Output }],
naHotspotOver: [{ type: Output }],
naHotspotOut: [{ type: Output }],
naDragStart: [{ type: Output }],
naDragging: [{ type: Output }],
naDragEnd: [{ type: Output }],
naResize: [{ type: Output }],
naZoomStart: [{ type: Output }],
naZoomEnd: [{ type: Output }],
naZoomChange: [{ type: Output }],
naMoveStart: [{ type: Output }],
naMoveEnd: [{ type: Output }],
naMove: [{ type: Output }],
naPluginsLoaded: [{ type: Output }]
};
return NgxAmapComponent;
}());
export { NgxAmapComponent };
if (false) {
/**
* 地图视口,用于控制影响地图静态显示的属性
* @type {?}
*/
NgxAmapComponent.prototype.view;
/**
* 地图图层数组,数组可以是图层 中的一个或多个,默认为普通二维地图
* @type {?}
*/
NgxAmapComponent.prototype.layers;
/**
* 地图显示的缩放级别
* @type {?}
*/
NgxAmapComponent.prototype.zoom;
/**
* 地图中心点坐标值
* @type {?}
*/
NgxAmapComponent.prototype.center;
/**
* 地图标注显示顺序
* @type {?}
*/
NgxAmapComponent.prototype.labelzIndex;
/**
* 地图显示的缩放级别范围
* @type {?}
*/
NgxAmapComponent.prototype.zooms;
/**
* 地图语言类型
* @type {?}
*/
NgxAmapComponent.prototype.lang;
/**
* 地图默认鼠标样式
* @type {?}
*/
NgxAmapComponent.prototype.defaultCursor;
/**
* 地图显示的参考坐标系
* @type {?}
*/
NgxAmapComponent.prototype.crs;
/**
* 地图平移过程中是否使用动画
* @type {?}
*/
NgxAmapComponent.prototype.animateEnable;
/**
* 是否开启地图热点和标注的hover效果
* @type {?}
*/
NgxAmapComponent.prototype.isHotspot;
/**
* 当前地图中默认显示的图层
* @type {?}
*/
NgxAmapComponent.prototype.defaultLayer;
/**
* 地图是否可旋转
* @type {?}
*/
NgxAmapComponent.prototype.rotateEnable;
/**
* 是否监控地图容器尺寸变化
* @type {?}
*/
NgxAmapComponent.prototype.resizeEnable;
/**
* 是否在有矢量底图的时候自动展示室内地图
* @type {?}
*/
NgxAmapComponent.prototype.showIndoorMap;
/**
* 在展示矢量图的时候自动展示室内地图图层
* @type {?}
*/
NgxAmapComponent.prototype.indoorMap;
/**
* 是否支持可以扩展最大缩放级别
* @type {?}
*/
NgxAmapComponent.prototype.expandZoomRange;
/**
* 地图是否可通过鼠标拖拽平移
* @type {?}
*/
NgxAmapComponent.prototype.dragEnable;
/**
* 地图是否可缩放
* @type {?}
*/
NgxAmapComponent.prototype.zoomEnable;
/**
* 地图是否可通过双击鼠标放大地图
* @type {?}
*/
NgxAmapComponent.prototype.doubleClickZoom;
/**
* 地图是否可通过键盘控制
* @type {?}
*/
NgxAmapComponent.prototype.keyboardEnable;
/**
* 地图是否使用缓动效果
* @type {?}
*/
NgxAmapComponent.prototype.jogEnable;
/**
* 地图是否可通过鼠标滚轮缩放浏览
* @type {?}
*/
NgxAmapComponent.prototype.scrollWheel;
/**
* 地图在移动终端上是否可通过多点触控缩放浏览地图
* @type {?}
*/
NgxAmapComponent.prototype.touchZoom;
/**
* 当touchZoomCenter=1的时候,手机端双指缩放的以地图中心为中心,否则默认以双指中间点为中心
* @type {?}
*/
NgxAmapComponent.prototype.touchZoomCenter;
/**
* 设置地图的显示样式
* @type {?}
*/
NgxAmapComponent.prototype.mapStyle;
/**
* 设置地图上显示的元素种类
* @type {?}
*/
NgxAmapComponent.prototype.features;
/**
* 设置地图显示3D楼块效果
* @type {?}
*/
NgxAmapComponent.prototype.showBuildingBlock;
/**
* 视图模式
* @type {?}
*/
NgxAmapComponent.prototype.viewMode;
/**
* 俯仰角度
* @type {?}
*/
NgxAmapComponent.prototype.pitch;
/**
* 是否允许设置俯仰角度
* @type {?}
*/
NgxAmapComponent.prototype.pitchEnable;
/**
* 楼块出现和消失的时候是否显示动画过程
* @type {?}
*/
NgxAmapComponent.prototype.buildingAnimation;
/**
* 调整天空颜色
* @type {?}
*/
NgxAmapComponent.prototype.skyColor;
/**
* 设置地图的预加载模式
* @type {?}
*/
NgxAmapComponent.prototype.preloadMode;
/**
* 为 Map 实例指定掩模的路径,各图层将只显示路径范围内图像
* @type {?}
*/
NgxAmapComponent.prototype.mask;
/** @type {?} */
NgxAmapComponent.prototype.maxPitch;
/** @type {?} */
NgxAmapComponent.prototype.rotation;
/** @type {?} */
NgxAmapComponent.prototype.forceVector;
/** @type {?} */
NgxAmapComponent.prototype.gridMapForeign;
/**
* 额外: 海外⽮量地图样式
* @type {?}
*/
NgxAmapComponent.prototype.vectorMapForeign;
/**
* 额外: 设置城市
* @type {?}
*/
NgxAmapComponent.prototype.city;
/**
* 额外: 设置地图名
* @type {?}
*/
NgxAmapComponent.prototype.name;
/**
* 额外:加载插件
* @type {?}
*/
NgxAmapComponent.prototype.plugins;
/** @type {?} */
NgxAmapComponent.prototype.naReady;
/** @type {?} */
NgxAmapComponent.prototype.naComplete;
/** @type {?} */
NgxAmapComponent.prototype.naClick;
/** @type {?} */
NgxAmapComponent.prototype.naDblClick;
/** @type {?} */
NgxAmapComponent.prototype.naRightClick;
/** @type {?} */
NgxAmapComponent.prototype.naMouseMove;
/** @type {?} */
NgxAmapComponent.prototype.naMouseOver;
/** @type {?} */
NgxAmapComponent.prototype.naMouseWheel;
/** @type {?} */
NgxAmapComponent.prototype.naMouseUp;
/** @type {?} */
NgxAmapComponent.prototype.naMouseOut;
/** @type {?} */
NgxAmapComponent.prototype.naMouseDown;
/** @type {?} */
NgxAmapComponent.prototype.naTouchStart;
/** @type {?} */
NgxAmapComponent.prototype.naTouchMove;
/** @type {?} */
NgxAmapComponent.prototype.naTouchEnd;
/** @type {?} */
NgxAmapComponent.prototype.naHotspotClick;
/** @type {?} */
NgxAmapComponent.prototype.naHotspotOver;
/** @type {?} */
NgxAmapComponent.prototype.naHotspotOut;
/** @type {?} */
NgxAmapComponent.prototype.naDragStart;
/** @type {?} */
NgxAmapComponent.prototype.naDragging;
/** @type {?} */
NgxAmapComponent.prototype.naDragEnd;
/** @type {?} */
NgxAmapComponent.prototype.naResize;
/** @type {?} */
NgxAmapComponent.prototype.naZoomStart;
/** @type {?} */
NgxAmapComponent.prototype.naZoomEnd;
/** @type {?} */
NgxAmapComponent.prototype.naZoomChange;
/** @type {?} */
NgxAmapComponent.prototype.naMoveStart;
/** @type {?} */
NgxAmapComponent.prototype.naMoveEnd;
/** @type {?} */
NgxAmapComponent.prototype.naMove;
/** @type {?} */
NgxAmapComponent.prototype.naPluginsLoaded;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.inited;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.el;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.amap;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.pluginLoader;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.logger;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.binder;
/**
* @type {?}
* @private
*/
NgxAmapComponent.prototype.ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFtYXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWFtYXAvIiwic291cmNlcyI6WyJjb21wb25lbnRzL25neC1hbWFwL25neC1hbWFwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxVQUFVLEVBRVYsTUFBTSxFQUNOLFlBQVksRUFHWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDOztJQUVqRCxHQUFHLEdBQUcsVUFBVTs7SUFDaEIsV0FBVyxHQUFHO0lBQ2xCLE1BQU07SUFDTixRQUFRO0lBQ1IsTUFBTTtJQUNOLFFBQVE7SUFDUixhQUFhO0lBQ2IsT0FBTztJQUNQLE1BQU07SUFDTixlQUFlO0lBQ2YsS0FBSztJQUNMLGVBQWU7SUFDZixXQUFXO0lBQ1gsY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsZUFBZTtJQUNmLFdBQVc7SUFDWCxpQkFBaUI7SUFDakIsWUFBWTtJQUNaLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLFdBQVc7SUFDWCxhQUFhO0lBQ2IsV0FBVztJQUNYLGlCQUFpQjtJQUNqQixVQUFVO0lBQ1YsVUFBVTtJQUNWLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsT0FBTztJQUNQLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsVUFBVTtJQUNWLGFBQWE7SUFDYixNQUFNO0lBQ04sVUFBVTtJQUNWLFVBQVU7SUFDVixhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtDQUNuQjtBQUVEO0lBMk1FLDBCQUNVLEVBQWMsRUFDZCxJQUFpQixFQUNqQixZQUFpQyxFQUNqQyxNQUFxQixFQUNyQixNQUEwQixFQUMxQixNQUFjO1FBTGQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTs7UUFyQ2QsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUEyQjdCLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUVqRCxXQUFNLEdBQUcsS0FBSyxDQUFDOztZQVVmLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDOzs7O0lBRUQsbUNBQVE7OztJQUFSO1FBQUEsaUJBVUM7UUFUQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzs7WUFDakMsU0FBUyxHQUFHLElB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OztJQUlwQyxvQ0FBMEI7Ozs7O0lBSTFCLHVDQUE4Qjs7Ozs7SUFJOUIsZ0NBQWtGOztJQUNsRixvQ0FBMEI7O0lBQzFCLG9DQUEwQjs7SUFDMUIsdUNBQThCOztJQUM5QiwwQ0FBaUM7Ozs7O0lBSWpDLDRDQUFrQzs7Ozs7SUFLbEMsZ0NBQXNCOzs7OztJQUl0QixnQ0FBc0I7Ozs7O0lBSXRCLG1DQUEyQjs7SUFHM0IsbUNBQXVDOztJQUN2QyxzQ0FBd0M7O0lBQ3hDLG1DQUFxQzs7SUFDckMsc0NBQXdDOztJQUN4Qyx3Q0FBMEM7O0lBQzFDLHVDQUF5Qzs7SUFDekMsdUNBQXlDOztJQUN6Qyx3Q0FBMEM7O0lBQzFDLHFDQUF1Qzs7SUFDdkMsc0NBQXdDOztJQUN4Qyx1Q0FBeUM7O0lBQ3pDLHdDQUEwQzs7SUFDMUMsdUNBQXlDOztJQUN6QyxzQ0FBd0M7O0lBQ3hDLDBDQUE0Qzs7SUFDNUMseUNBQTJDOztJQUMzQyx3Q0FBMEM7O0lBQzFDLHVDQUF5Qzs7SUFDekMsc0NBQXdDOztJQUN4QyxxQ0FBdUM7O0lBQ3ZDLG9DQUFzQzs7SUFDdEMsdUNBQXlDOztJQUN6QyxxQ0FBdUM7O0lBQ3ZDLHdDQUEwQzs7SUFDMUMsdUNBQXlDOztJQUN6QyxxQ0FBdUM7O0lBQ3ZDLGtDQUFvQzs7SUFDcEMsMkNBQXlEOzs7OztJQUV6RCxrQ0FBdUI7Ozs7O0lBR3JCLDhCQUFzQjs7Ozs7SUFDdEIsZ0NBQXlCOzs7OztJQUN6Qix3Q0FBeUM7Ozs7O0lBQ3pDLGtDQUE2Qjs7Ozs7SUFDN0Isa0NBQWtDOzs7OztJQUNsQyxrQ0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uQ2hhbmdlcyxcbiAgTmdab25lLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQU1hcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvYW1hcC5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50QmluZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9ldmVudC1iaW5kZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQbHVnaW5Mb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsdWdpbi1sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRPcHRpb25zLCBDaGFuZ2VGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IFRBRyA9ICduZ3gtYW1hcCc7XG5jb25zdCBBTExfT1BUSU9OUyA9IFtcbiAgJ3ZpZXcnLFxuICAnbGF5ZXJzJyxcbiAgJ3pvb20nLFxuICAnY2VudGVyJyxcbiAgJ2xhYmVsekluZGV4JyxcbiAgJ3pvb21zJyxcbiAgJ2xhbmcnLFxuICAnZGVmYXVsdEN1cnNvcicsXG4gICdjcnMnLFxuICAnYW5pbWF0ZUVuYWJsZScsXG4gICdpc0hvdHNwb3QnLFxuICAnZGVmYXVsdExheWVyJyxcbiAgJ3JvdGF0ZUVuYWJsZScsXG4gICdyZXNpemVFbmFibGUnLFxuICAnc2hvd0luZG9vck1hcCcsXG4gICdpbmRvb3JNYXAnLFxuICAnZXhwYW5kWm9vbVJhbmdlJyxcbiAgJ2RyYWdFbmFibGUnLFxuICAnem9vbUVuYWJsZScsXG4gICdkb3VibGVDbGlja1pvb20nLFxuICAna2V5Ym9hcmRFbmFibGUnLFxuICAnam9nRW5hYmxlJyxcbiAgJ3Njcm9sbFdoZWVsJyxcbiAgJ3RvdWNoWm9vbScsXG4gICd0b3VjaFpvb21DZW50ZXInLFxuICAnbWFwU3R5bGUnLFxuICAnZmVhdHVyZXMnLFxuICAnc2hvd0J1aWxkaW5nQmxvY2snLFxuICAndmlld01vZGUnLFxuICAncGl0Y2gnLFxuICAncGl0Y2hFbmFibGUnLFxuICAnYnVpbGRpbmdBbmltYXRpb24nLFxuICAnc2t5Q29sb3InLFxuICAncHJlbG9hZE1vZGUnLFxuICAnbWFzaycsXG4gICdtYXhQaXRjaCcsXG4gICdyb3RhdGlvbicsXG4gICdmb3JjZVZlY3RvcicsXG4gICdncmlkTWFwRm9yZWlnbicsXG4gICd2ZWN0b3JNYXBGb3JlaWduJyxcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1hbWFwJyxcbiAgZXhwb3J0QXM6ICdhbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25neC1hbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmd4LWFtYXAuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbQU1hcFNlcnZpY2UsIFBsdWdpbkxvYWRlclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hBbWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIC8vIC0tLS0gTWFwIE9wdGlvbnMgLS0tLVxuICAvKipcbiAgICog5Zyw5Zu+6KeG5Y+j77yM55So5LqO5o6n5Yi25b2x5ZON5Zyw5Zu+6Z2Z5oCB5pi+56S655qE5bGe5oCnXG4gICAqL1xuICBASW5wdXQoKSB2aWV3OiBBTWFwLlZpZXcyRDtcbiAgLyoqXG4gICAqIOWcsOWbvuWbvuWxguaVsOe7hO+8jOaVsOe7hOWPr+S7peaYr+WbvuWxgiDkuK3nmoTkuIDkuKrmiJblpJrkuKrvvIzpu5jorqTkuLrmma7pgJrkuoznu7TlnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIGxheWVyczogQU1hcC5MYXllcltdO1xuICAvKipcbiAgICog5Zyw5Zu+5pi+56S655qE57yp5pS+57qn5YirXG4gICAqL1xuICBASW5wdXQoKSB6b29tOiBudW1iZXI7XG4gIC8qKlxuICAgKiDlnLDlm77kuK3lv4PngrnlnZDmoIflgLxcbiAgICovXG4gIEBJbnB1dCgpIGNlbnRlcjogQU1hcC5Mb2NhdGlvblZhbHVlO1xuICAvKipcbiAgICog5Zyw5Zu+5qCH5rOo5pi+56S66aG65bqPXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbHpJbmRleDogbnVtYmVyO1xuICAvKipcbiAgICog5Zyw5Zu+5pi+56S655qE57yp5pS+57qn5Yir6IyD5Zu0XG4gICAqL1xuICBASW5wdXQoKSB6b29tczogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqXG4gICAqIOWcsOWbvuivreiogOexu+Wei1xuICAgKi9cbiAgQElucHV0KCkgbGFuZzogQU1hcC5MYW5nO1xuICAvKipcbiAgICog5Zyw5Zu+6buY6K6k6byg5qCH5qC35byPXG4gICAqL1xuICBASW5wdXQoKSBkZWZhdWx0Q3Vyc29yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDlnLDlm77mmL7npLrnmoTlj4LogIPlnZDmoIfns7tcbiAgICovXG4gIEBJbnB1dCgpIGNyczogJ0VQU0czODU3JyB8ICdFUFNHMzM5NScgfCAnRVBTRzQzMjYnO1xuICAvKipcbiAgICog5Zyw5Zu+5bmz56e76L+H56iL5Lit5piv5ZCm5L2/55So5Yqo55S7XG4gICAqL1xuICBASW5wdXQoKSBhbmltYXRlRW5hYmxlOiBib29sZWFuO1xuICAvKipcbiAgICog5piv5ZCm5byA5ZCv5Zyw5Zu+54Ot54K55ZKM5qCH5rOo55qEaG92ZXLmlYjmnpxcbiAgICovXG4gIEBJbnB1dCgpIGlzSG90c3BvdDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOW9k+WJjeWcsOWbvuS4rem7mOiupOaYvuekuueahOWbvuWxglxuICAgKi9cbiAgQElucHV0KCkgZGVmYXVsdExheWVyOiBBTWFwLlRpbGVMYXllcjtcbiAgLyoqXG4gICAqIOWcsOWbvuaYr+WQpuWPr+aXi+i9rFxuICAgKi9cbiAgQElucHV0KCkgcm90YXRlRW5hYmxlOiBib29sZWFuO1xuICAvKipcbiAgICog5piv5ZCm55uR5o6n5Zyw5Zu+5a655Zmo5bC65a+45Y+Y5YyWXG4gICAqL1xuICBASW5wdXQoKSByZXNpemVFbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDmmK/lkKblnKjmnInnn6Lph4/lupXlm77nmoTml7blgJnoh6rliqjlsZXnpLrlrqTlhoXlnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIHNob3dJbmRvb3JNYXA6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnKjlsZXnpLrnn6Lph4/lm77nmoTml7blgJnoh6rliqjlsZXnpLrlrqTlhoXlnLDlm77lm77lsYJcbiAgICovXG4gIEBJbnB1dCgpIGluZG9vck1hcDogYW55O1xuICAvKipcbiAgICog5piv5ZCm5pSv5oyB5Y+v5Lul5omp5bGV5pyA5aSn57yp5pS+57qn5YirXG4gICAqL1xuICBASW5wdXQoKSBleHBhbmRab29tUmFuZ2U6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKblj6/pgJrov4fpvKDmoIfmi5bmi73lubPnp7tcbiAgICovXG4gIEBJbnB1dCgpIGRyYWdFbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKblj6/nvKnmlL5cbiAgICovXG4gIEBJbnB1dCgpIHpvb21FbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKblj6/pgJrov4flj4zlh7vpvKDmoIfmlL7lpKflnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIGRvdWJsZUNsaWNrWm9vbTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOWcsOWbvuaYr+WQpuWPr+mAmui/h+mUruebmOaOp+WItlxuICAgKi9cbiAgQElucHV0KCkga2V5Ym9hcmRFbmFibGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77mmK/lkKbkvb/nlKjnvJPliqjmlYjmnpxcbiAgICovXG4gIEBJbnB1dCgpIGpvZ0VuYWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOWcsOWbvuaYr+WQpuWPr+mAmui/h+m8oOagh+a7mui9rue8qeaUvua1j+iniFxuICAgKi9cbiAgQElucHV0KCkgc2Nyb2xsV2hlZWw6IGJvb2xlYW47XG4gIC8qKlxuICAgKiDlnLDlm77lnKjnp7vliqjnu4jnq6/kuIrmmK/lkKblj6/pgJrov4flpJrngrnop6bmjqfnvKnmlL7mtY/op4jlnLDlm75cbiAgICovXG4gIEBJbnB1dCgpIHRvdWNoWm9vbTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOW9k3RvdWNoWm9vbUNlbnRlcj0x55qE5pe25YCZ77yM5omL5py656uv5Y+M5oyH57yp5pS+55qE5Lul5Zyw5Zu+5Lit5b+D5Li65Lit5b+D77yM5ZCm5YiZ6buY6K6k5Lul5Y+M5oyH5Lit6Ze054K55Li65Lit5b+DXG4gICAqL1xuICBASW5wdXQoKSB0b3VjaFpvb21DZW50ZXI6IG51bWJlcjtcbiAgLyoqXG4gICAqIOiuvue9ruWcsOWbvueahOaYvuekuuagt+W8j1xuICAgKi9cbiAgQElucHV0KCkgbWFwU3R5bGU6IHN0cmluZztcbiAgLyoqXG4gICAqIOiuvue9ruWcsOWbvuS4iuaYvuekuueahOWFg+e0oOenjeexu1xuICAgKi9cbiAgQElucHV0KCkgZmVhdHVyZXM6IEFNYXAuTWFwLkZlYXR1cmVbXSB8ICdhbGwnIHwgQU1hcC5NYXAuRmVhdHVyZTtcbiAgLyoqXG4gICAqIOiuvue9ruWcsOWbvuaYvuekujNE5qW85Z2X5pWI5p6cXG4gICAqL1xuICBASW5wdXQoKSBzaG93QnVpbGRpbmdCbG9jazogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOinhuWbvuaooeW8j1xuICAgKi9cbiAgQElucHV0KCkgdmlld01vZGU6IEFNYXAuTWFwLlZpZXdNb2RlO1xuICAvKipcbiAgICog5L+v5Luw6KeS5bqmXG4gICAqL1xuICBASW5wdXQoKSBwaXRjaDogbnVtYmVyO1xuICAvKipcbiAgICog5piv5ZCm5YWB6K646K6+572u5L+v5Luw6KeS5bqmXG4gICAqL1xuICBASW5wdXQoKSBwaXRjaEVuYWJsZTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIOalvOWdl+WHuueOsOWSjOa2iOWkseeahOaXtuWAmeaYr+WQpuaYvuekuuWKqOeUu+i/h+eoi1xuICAgKi9cbiAgQElucHV0KCkgYnVpbGRpbmdBbmltYXRpb246IGJvb2xlYW47XG4gIC8qKlxuICAgKiDosIPmlbTlpKnnqbrpopzoibJcbiAgICovXG4gIEBJbnB1dCgpIHNreUNvbG9yOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDorr7nva7lnLDlm77nmoTpooTliqDovb3mqKHlvI9cbiAgICovXG4gIEBJbnB1dCgpIHByZWxvYWRNb2RlOiBib29sZWFuO1xuICAvKipcbiAgICog5Li6IE1hcCDlrp7kvovmjIflrprmjqnmqKHnmoTot6/lvoTvvIzlkITlm77lsYLlsIblj6rmmL7npLrot6/lvoTojIPlm7TlhoXlm77lg49cbiAgICovXG4gIEBJbnB1dCgpIG1hc2s6IFtudW1iZXIsIG51bWJlcl1bXSB8IFtudW1iZXIsIG51bWJlcl1bXVtdIHwgW251bWJlciwgbnVtYmVyXVtdW11bXTtcbiAgQElucHV0KCkgbWF4UGl0Y2g6IG51bWJlcjtcbiAgQElucHV0KCkgcm90YXRpb246IG51bWJlcjtcbiAgQElucHV0KCkgZm9yY2VWZWN0b3I6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGdyaWRNYXBGb3JlaWduOiBib29sZWFuO1xuICAvKipcbiAgICog6aKd5aSWOiDmtbflpJbiva7ph4/lnLDlm77moLflvI9cbiAgICovXG4gIEBJbnB1dCgpIHZlY3Rvck1hcEZvcmVpZ246IHN0cmluZztcblxuICAvKipcbiAgICog6aKd5aSWOiDorr7nva7ln47luIJcbiAgICovXG4gIEBJbnB1dCgpIGNpdHk6IHN0cmluZztcbiAgLyoqXG4gICAqIOmineWkljog6K6+572u5Zyw5Zu+5ZCNXG4gICAqL1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiDpop3lpJbvvJrliqDovb3mj5Lku7ZcbiAgICovXG4gIEBJbnB1dCgpIHBsdWdpbnM6IHN0cmluZ1tdO1xuXG4gIC8vIC0tLS0gTWFwIEV2ZW50cyAtLS0tXG4gIEBPdXRwdXQoKSBuYVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbmFDb21wbGV0ZTogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYUNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hRGJsQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFSaWdodENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW91c2VNb3ZlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW91c2VPdmVyOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW91c2VXaGVlbDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYU1vdXNlVXA6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFNb3VzZU91dDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYU1vdXNlRG93bjogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVRvdWNoU3RhcnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFUb3VjaE1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFUb3VjaEVuZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYUhvdHNwb3RDbGljazogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYUhvdHNwb3RPdmVyOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hSG90c3BvdE91dDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYURyYWdTdGFydDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYURyYWdnaW5nOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hRHJhZ0VuZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVJlc2l6ZTogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVpvb21TdGFydDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYVpvb21FbmQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFab29tQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW92ZVN0YXJ0OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgpIG5hTW92ZUVuZDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoKSBuYU1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCkgbmFQbHVnaW5zTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBTWFwLk1hcD4oKTtcblxuICBwcml2YXRlIGluaXRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBhbWFwOiBBTWFwU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpbkxvYWRlcjogUGx1Z2luTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGJpbmRlcjogRXZlbnRCaW5kZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICkge1xuICAgIGNvbnN0IG0gPSB0aGlzLmFtYXAuZ2V0KCk7XG4gICAgdGhpcy5uYUNvbXBsZXRlID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdjb21wbGV0ZScpO1xuICAgIHRoaXMubmFDbGljayA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnY2xpY2snKTtcbiAgICB0aGlzLm5hRGJsQ2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ2RibGNsaWNrJyk7XG4gICAgdGhpcy5uYVJpZ2h0Q2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3JpZ2h0Y2xpY2snKTtcbiAgICB0aGlzLm5hTW91c2VNb3ZlID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZW1vdmUnKTtcbiAgICB0aGlzLm5hTW91c2VPdmVyID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZW92ZXInKTtcbiAgICB0aGlzLm5hTW91c2VXaGVlbCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnbW91c2V3aGVlbCcpO1xuICAgIHRoaXMubmFNb3VzZVVwID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZXVwJyk7XG4gICAgdGhpcy5uYU1vdXNlT3V0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3VzZW91dCcpO1xuICAgIHRoaXMubmFNb3VzZURvd24gPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ21vdXNlZG93bicpO1xuICAgIHRoaXMubmFUb3VjaFN0YXJ0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICd0b3VjaHN0YXJ0Jyk7XG4gICAgdGhpcy5uYVRvdWNoTW92ZSA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAndG91Y2htb3ZlJyk7XG4gICAgdGhpcy5uYVRvdWNoRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICd0b3VjaGVuZCcpO1xuICAgIHRoaXMubmFIb3RzcG90Q2xpY2sgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ2hvdHNwb3RjbGljaycpO1xuICAgIHRoaXMubmFIb3RzcG90T3ZlciA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnaG90c3BvdG92ZXInKTtcbiAgICB0aGlzLm5hSG90c3BvdE91dCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnaG90c3BvdG91dCcpO1xuICAgIHRoaXMubmFEcmFnU3RhcnQgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ2RyYWdzdGFydCcpO1xuICAgIHRoaXMubmFEcmFnZ2luZyA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnZHJhZ2dpbmcnKTtcbiAgICB0aGlzLm5hRHJhZ0VuZCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnZHJhZ2VuZCcpO1xuICAgIHRoaXMubmFSZXNpemUgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3Jlc2l6ZScpO1xuICAgIHRoaXMubmFab29tU3RhcnQgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3pvb21zdGFydCcpO1xuICAgIHRoaXMubmFab29tRW5kID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICd6b29tZW5kJyk7XG4gICAgdGhpcy5uYVpvb21DaGFuZ2UgPSB0aGlzLmJpbmRlci5iaW5kRXZlbnQobSwgJ3pvb21jaGFuZ2UnKTtcbiAgICB0aGlzLm5hTW92ZVN0YXJ0ID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtb3Zlc3RhcnQnKTtcbiAgICB0aGlzLm5hTW92ZUVuZCA9IHRoaXMuYmluZGVyLmJpbmRFdmVudChtLCAnbW92ZWVuZCcpO1xuICAgIHRoaXMubmFNb3ZlID0gdGhpcy5iaW5kZXIuYmluZEV2ZW50KG0sICdtYXBtb3ZlJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ2luaXRpYWxpemluZyAuLi4nKTtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZGl2Lm5neC1hbWFwLWNvbnRhaW5lci1pbm5lcicpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zPEFNYXAuTWFwLk9wdGlvbnM+KHRoaXMsIEFMTF9PUFRJT05TKTtcbiAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ29wdGlvbnM6Jywgb3B0aW9ucyk7XG4gICAgdGhpcy5hbWFwLmNyZWF0ZShjb250YWluZXIsIG9wdGlvbnMpLnN1YnNjcmliZShhbWFwID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnbWFwIGlzIHJlYWR5LicpO1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMubmFSZWFkeS5lbWl0KGFtYXApKTtcbiAgICB9KTtcbiAgICB0aGlzLmluaXRlZCA9IHRydWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmFtYXAuZGVzdHJveSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IGZpbHRlciA9IENoYW5nZUZpbHRlci5vZihjaGFuZ2VzKTtcbiAgICBjb25zdCBhbWFwID0gdGhpcy5nZXQoKTtcblxuICAgIGlmICh0aGlzLmluaXRlZCkge1xuICAgICAgemlwKGZpbHRlci5oYXM8bnVtYmVyPignem9vbScpLCBhbWFwKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kKFRBRywgJ3NldFpvb206Jywgdik7XG4gICAgICAgIG0uc2V0Wm9vbSh2KTtcbiAgICAgIH0pO1xuICAgICAgemlwKGZpbHRlci5oYXM8QU1hcC5Mb2NhdGlvblZhbHVlPignY2VudGVyJyksIGFtYXApLnN1YnNjcmliZSgoW3YsIG1dKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmQoVEFHLCAnc2V0Q2VudGVyOicsIHYpO1xuICAgICAgICBtLnNldENlbnRlcih2KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE5vdCBpbmNsdWRlZCBpbiBPUFRJT05TXG4gICAgemlwKGZpbHRlci5oYXM8c3RyaW5nPignY2l0eScpLCBhbWFwKS5zdWJzY3JpYmUoKFt2LCBtXSkgPT4ge1xuICAgICAgbS5zZXRDaXR5KHYsICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdzZXRDaXR5OicsIHYpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgemlwKGZpbHRlci5ub3RFbXB0eTxzdHJpbmdbXT4oJ3BsdWdpbnMnKSwgYW1hcCkuc3Vic2NyaWJlKChbdiwgbV0pID0+IHtcbiAgICAgIHRoaXMucGx1Z2luTG9hZGVyLmxvYWQodikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICdwbHVnaW5zIGxvYWRlZC4nKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMubmFQbHVnaW5zTG9hZGVkLmVtaXQobSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5bey5Yib5bu655qEIEFNYXAuTWFwIOWvueixoVxuICAgKi9cbiAgZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLmFtYXAuZ2V0KCk7XG4gIH1cbn1cbiJdfQ==