@hmscore/cordova-plugin-hms-map
Version:
Cordova HMS Map Plugin
314 lines (310 loc) • 64 kB
JavaScript
/*
Copyright 2020-2024. Huawei Technologies Co., Ltd. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License")
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
import { AwesomeCordovaNativePlugin, cordova } from "@awesome-cordova-plugins/core";
var HMSMapOriginal = /** @class */ (function (_super) {
__extends(HMSMapOriginal, _super);
function HMSMapOriginal() {
return _super !== null && _super.apply(this, arguments) || this;
}
HMSMapOriginal.prototype.getMap = function (divId, huaweiMapOptions, bounds) { return cordova(this, "getMap", { "otherPromise": true }, arguments); };
HMSMapOriginal.prototype.showMap = function (divId) { return cordova(this, "showMap", { "otherPromise": true }, arguments); };
HMSMapOriginal.prototype.hasPermission = function () { return cordova(this, "hasPermission", { "otherPromise": true }, arguments); };
HMSMapOriginal.prototype.convertCoordinate = function (LatLngObj) { return cordova(this, "convertCoordinate", { "otherPromise": true }, arguments); };
HMSMapOriginal.prototype.convertCoordinates = function (LatLngListObj) { return cordova(this, "convertCoordinates", { "otherPromise": true }, arguments); };
HMSMapOriginal.prototype.requestPermission = function () { return cordova(this, "requestPermission", { "otherPromise": true }, arguments); };
HMSMapOriginal.prototype.computeDistanceBetween = function (from, to) { return cordova(this, "computeDistanceBetween", { "otherPromise": true }, arguments); };
HMSMapOriginal.prototype.setApiKey = function (apiKey) { return cordova(this, "setApiKey", { "otherPromise": true }, arguments); };
HMSMapOriginal.prototype.disableLogger = function () { return cordova(this, "disableLogger", { "otherPromise": true }, arguments); };
HMSMapOriginal.prototype.enableLogger = function () { return cordova(this, "enableLogger", { "otherPromise": true }, arguments); };
HMSMapOriginal.prototype.initialize = function (routePolicy) { return cordova(this, "initialize", { "otherPromise": true }, arguments); };
HMSMapOriginal.pluginName = "HMSMap";
HMSMapOriginal.plugin = "cordova-plugin-hms-map";
HMSMapOriginal.pluginRef = "HMSMap";
HMSMapOriginal.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
HMSMapOriginal.platforms = ["Android"];
return HMSMapOriginal;
}(AwesomeCordovaNativePlugin));
var HMSMap = new HMSMapOriginal();
export { HMSMap };
var CameraUpdateFactory = /** @class */ (function () {
function CameraUpdateFactory() {
}
CameraUpdateFactory.newCameraPosition = function (cameraPosition) {
return HMSMapOriginal.getPlugin().CameraUpdateFactory.newCameraPosition(cameraPosition);
};
CameraUpdateFactory.newLatLng = function (latLng) {
return HMSMapOriginal.getPlugin().CameraUpdateFactory.newLatLng(latLng);
};
CameraUpdateFactory.newLatLngBounds = function (latLngBounds, padding, width, height) {
return HMSMapOriginal.getPlugin().CameraUpdateFactory.newLatLngBounds(latLngBounds, padding, width, height);
};
CameraUpdateFactory.newLatLngZoom = function (latLng, zoom) {
return HMSMapOriginal.getPlugin().CameraUpdateFactory.newLatLngZoom(latLng, zoom);
};
CameraUpdateFactory.scrollBy = function (xPixel, yPixel) {
return HMSMapOriginal.getPlugin().CameraUpdateFactory.scrollBy(xPixel, yPixel);
};
CameraUpdateFactory.zoomBy = function (amount, focus) {
return HMSMapOriginal.getPlugin().CameraUpdateFactory.zoomBy(amount, focus);
};
CameraUpdateFactory.zoomIn = function () {
return HMSMapOriginal.getPlugin().CameraUpdateFactory.zoomIn();
};
CameraUpdateFactory.zoomOut = function () {
return HMSMapOriginal.getPlugin().CameraUpdateFactory.zoomOut();
};
CameraUpdateFactory.zoomTo = function (zoom) {
return HMSMapOriginal.getPlugin().CameraUpdateFactory.zoomTo(zoom);
};
CameraUpdateFactory.pluginName = "HMSMap";
CameraUpdateFactory.plugin = "cordova-plugin-hms-map";
CameraUpdateFactory.pluginRef = "HMSMap.CameraUpdateFactory";
CameraUpdateFactory.repo = "https://github.com/HMS-Core/hms-cordova-plugin";
CameraUpdateFactory.platforms = ["Android"];
return CameraUpdateFactory;
}());
export { CameraUpdateFactory };
var MapStyleOptions = /** @class */ (function () {
function MapStyleOptions(resourceName) {
this.resourceName = resourceName;
}
MapStyleOptions.loadRawResourceStyle = function (resourceName) {
return new MapStyleOptions(resourceName);
};
MapStyleOptions.prototype.getResourceName = function () {
return this.resourceName;
};
return MapStyleOptions;
}());
export { MapStyleOptions };
var Cap = /** @class */ (function () {
function Cap() {
this.refWidth = null;
this.bitmapDescriptor = null;
}
Cap.prototype.getType = function () {
return this.type;
};
Cap.TYPE_BUTT_CAP = 0;
Cap.TYPE_SQUARE_CAP = 1;
Cap.TYPE_ROUND_CAP = 2;
Cap.TYPE_CUSTOM_CAP = 3;
return Cap;
}());
export { Cap };
var ButtCap = /** @class */ (function (_super) {
__extends(ButtCap, _super);
function ButtCap() {
var _this = _super.call(this) || this;
_this.type = 0;
return _this;
}
return ButtCap;
}(Cap));
export { ButtCap };
var RoundCap = /** @class */ (function (_super) {
__extends(RoundCap, _super);
function RoundCap() {
var _this = _super.call(this) || this;
_this.type = 2;
return _this;
}
return RoundCap;
}(Cap));
export { RoundCap };
var SquareCap = /** @class */ (function (_super) {
__extends(SquareCap, _super);
function SquareCap() {
var _this = _super.call(this) || this;
_this.type = 1;
return _this;
}
return SquareCap;
}(Cap));
export { SquareCap };
var CustomCap = /** @class */ (function (_super) {
__extends(CustomCap, _super);
function CustomCap(bitmapDescriptor, refWidth) {
var _this = _super.call(this) || this;
_this.type = 3;
_this.bitmapDescriptor = bitmapDescriptor;
_this.refWidth = refWidth;
return _this;
}
CustomCap.prototype.getRefWidth = function () {
return this.refWidth;
};
CustomCap.prototype.getBitmapDescriptor = function () {
return this.bitmapDescriptor;
};
return CustomCap;
}(Cap));
export { CustomCap };
var AnimationSet = /** @class */ (function () {
function AnimationSet() {
this.animations = new Map();
}
AnimationSet.prototype.addRotateAnimation = function (animation) {
this.animations.set("Rotate", animation);
};
AnimationSet.prototype.addScaleAnimation = function (animation) {
this.animations.set("Scale", animation);
};
AnimationSet.prototype.addTranslateAnimation = function (animation) {
this.animations.set("Translate", animation);
};
AnimationSet.prototype.addAlphaAnimation = function (animation) {
this.animations.set("Alpha", animation);
};
return AnimationSet;
}());
export { AnimationSet };
export var RadiusUnit;
(function (RadiusUnit) {
RadiusUnit["PIXEL"] = "pixel";
RadiusUnit["METER"] = "meter";
})(RadiusUnit || (RadiusUnit = {}));
/*-------------------------------------------------------------ENUMS----------------------------------------------------------*/
export var TileType;
(function (TileType) {
TileType[TileType["URL_TILE"] = 0] = "URL_TILE";
TileType[TileType["REPETITIVE_TILE"] = 1] = "REPETITIVE_TILE";
TileType[TileType["LOCAL_TILE"] = 2] = "LOCAL_TILE";
})(TileType || (TileType = {}));
export var Color;
(function (Color) {
Color[Color["RED"] = -65536] = "RED";
Color[Color["DARK_GRAY"] = -12303292] = "DARK_GRAY";
Color[Color["GRAY"] = -7829368] = "GRAY";
Color[Color["WHITE"] = -1] = "WHITE";
Color[Color["BLUE"] = -16776961] = "BLUE";
Color[Color["BLACK"] = -16777216] = "BLACK";
Color[Color["LITE_GRAY"] = -3355444] = "LITE_GRAY";
Color[Color["MAGENTA"] = -65281] = "MAGENTA";
Color[Color["YELLOW"] = -256] = "YELLOW";
Color[Color["CYAN"] = -16711681] = "CYAN";
Color[Color["GREEN"] = -16711936] = "GREEN";
Color[Color["TRANSPARENT"] = 0] = "TRANSPARENT";
})(Color || (Color = {}));
export var JointType;
(function (JointType) {
JointType[JointType["ROUND"] = 2] = "ROUND";
JointType[JointType["BEVEL"] = 1] = "BEVEL";
JointType[JointType["DEFAULT"] = 0] = "DEFAULT";
})(JointType || (JointType = {}));
export var MapEvent;
(function (MapEvent) {
MapEvent["ON_INDOOR_BUILDINGS_FOCUSED"] = "onIndoorBuildingsFocused";
MapEvent["ON_INDOOR_LEVEL_ACTIVATED"] = "onIndoorLevelActivated";
MapEvent["ON_MAP_LOADED"] = "onMapLoaded";
MapEvent["ON_CAMERA_IDLE"] = "onCameraIdle";
MapEvent["ON_CAMERA_MOVE_CANCELED"] = "onCameraMoveCanceled";
MapEvent["ON_CAMERA_MOVE"] = "onCameraMove";
MapEvent["ON_CAMERA_MOVE_STARTED"] = "onCameraMoveStarted";
MapEvent["ON_CIRCLE_CLICK"] = "onCircleClick";
MapEvent["ON_GROUND_OVERLAY_CLICK"] = "onGroundOverlayClick";
MapEvent["ON_INFO_WINDOW_CLICK"] = "onInfoWindowClick";
MapEvent["ON_INFO_WINDOW_CLOSE"] = "onInfoWindowClose";
MapEvent["ON_INFO_WINDOW_LONG_CLICK"] = "onInfoWindowLongClick";
MapEvent["ON_MAP_CLICK"] = "onMapClick";
MapEvent["ON_MAP_LONG_CLICK"] = "onMapLongClick";
MapEvent["ON_MARKER_CLICK"] = "onMarkerClick";
MapEvent["ON_MARKER_DRAG_START"] = "onMarkerDragStart";
MapEvent["ON_MARKER_DRAG"] = "onMarkerDrag";
MapEvent["ON_MARKER_DRAG_END"] = "onMarkerDragEnd";
MapEvent["ON_MY_LOCATION_BUTTON_CLICK"] = "onMyLocationButtonClick";
MapEvent["ON_MY_LOCATION_CLICK"] = "onMyLocationClick";
MapEvent["ON_POI_CLICK"] = "onPoiClick";
MapEvent["ON_POLYGON_CLICK"] = "onPolygonClick";
MapEvent["ON_POLYLINE_CLICK"] = "onPolylineClick";
MapEvent["ON_CANCELABLE_CALLBACK_FINISH"] = "onCancelableCallbackFinish";
MapEvent["ON_CANCELABLE_CALLBACK_CANCEL"] = "onCancelableCallbackCancel";
MapEvent["ON_SNAPSHOT_READY_CALLBACK"] = "onSnapshotReadyCallback";
})(MapEvent || (MapEvent = {}));
export var MapType;
(function (MapType) {
MapType[MapType["MAP_TYPE_NONE"] = 0] = "MAP_TYPE_NONE";
MapType[MapType["MAP_TYPE_SATELLITE"] = 2] = "MAP_TYPE_SATELLITE";
MapType[MapType["MAP_TYPE_NORMAL"] = 1] = "MAP_TYPE_NORMAL";
MapType[MapType["MAP_TYPE_HYBRID"] = 4] = "MAP_TYPE_HYBRID";
MapType[MapType["MAP_TYPE_TERRAIN"] = 3] = "MAP_TYPE_TERRAIN";
})(MapType || (MapType = {}));
export var Hue;
(function (Hue) {
Hue[Hue["HUE_GREEN"] = 120] = "HUE_GREEN";
Hue[Hue["HUE_AZURE"] = 210] = "HUE_AZURE";
Hue[Hue["HUE_ROSE"] = 330] = "HUE_ROSE";
Hue[Hue["HUE_CYAN"] = 180] = "HUE_CYAN";
Hue[Hue["HUE_ORANGE"] = 30] = "HUE_ORANGE";
Hue[Hue["HUE_MAGENTA"] = 300] = "HUE_MAGENTA";
Hue[Hue["HUE_VIOLET"] = 270] = "HUE_VIOLET";
Hue[Hue["HUE_YELLOW"] = 60] = "HUE_YELLOW";
Hue[Hue["HUE_BLUE"] = 240] = "HUE_BLUE";
Hue[Hue["HUE_RED"] = 0] = "HUE_RED";
})(Hue || (Hue = {}));
export var PatternItemType;
(function (PatternItemType) {
PatternItemType[PatternItemType["TYPE_GAP"] = 2] = "TYPE_GAP";
PatternItemType[PatternItemType["TYPE_DOT"] = 1] = "TYPE_DOT";
PatternItemType[PatternItemType["TYPE_DASH"] = 0] = "TYPE_DASH";
})(PatternItemType || (PatternItemType = {}));
export var CameraMoveStartedReason;
(function (CameraMoveStartedReason) {
CameraMoveStartedReason[CameraMoveStartedReason["REASON_API_ANIMATION"] = 2] = "REASON_API_ANIMATION";
CameraMoveStartedReason[CameraMoveStartedReason["REASON_DEVELOPER_ANIMATION"] = 3] = "REASON_DEVELOPER_ANIMATION";
CameraMoveStartedReason[CameraMoveStartedReason["REASON_GESTURE"] = 1] = "REASON_GESTURE";
})(CameraMoveStartedReason || (CameraMoveStartedReason = {}));
export var InterpolatorType;
(function (InterpolatorType) {
InterpolatorType[InterpolatorType["LINEAR"] = 0] = "LINEAR";
InterpolatorType[InterpolatorType["ACCELERATE_DECELERATE"] = 1] = "ACCELERATE_DECELERATE";
InterpolatorType[InterpolatorType["ACCELERATE"] = 2] = "ACCELERATE";
InterpolatorType[InterpolatorType["ANTICIPATE"] = 3] = "ANTICIPATE";
InterpolatorType[InterpolatorType["ANTICIPATE_OVERSHOOT"] = 4] = "ANTICIPATE_OVERSHOOT";
InterpolatorType[InterpolatorType["BOUNCE"] = 5] = "BOUNCE";
InterpolatorType[InterpolatorType["CYCLE"] = 6] = "CYCLE";
InterpolatorType[InterpolatorType["DECELERATE"] = 7] = "DECELERATE";
InterpolatorType[InterpolatorType["OVERSHOOT"] = 8] = "OVERSHOOT";
InterpolatorType[InterpolatorType["PATH"] = 9] = "PATH";
})(InterpolatorType || (InterpolatorType = {}));
export var AnimationConstant;
(function (AnimationConstant) {
AnimationConstant[AnimationConstant["FILL_MODE_FORWARDS"] = 0] = "FILL_MODE_FORWARDS";
AnimationConstant[AnimationConstant["FILL_MODE_BACKWARDS"] = 1] = "FILL_MODE_BACKWARDS";
AnimationConstant[AnimationConstant["INFINITE"] = -1] = "INFINITE";
AnimationConstant[AnimationConstant["RESTART"] = 1] = "RESTART";
AnimationConstant[AnimationConstant["REVERSE"] = 2] = "REVERSE";
})(AnimationConstant || (AnimationConstant = {}));
export var Gravity;
(function (Gravity) {
Gravity[Gravity["TOP"] = 48] = "TOP";
Gravity[Gravity["BOTTOM"] = 80] = "BOTTOM";
Gravity[Gravity["START"] = 8388611] = "START";
Gravity[Gravity["END"] = 8388613] = "END";
})(Gravity || (Gravity = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL3BsdWdpbnMvbmF0aXZlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQWlCQSxPQUFPLHVDQUErQyxNQUFNLCtCQUErQixDQUFDOztJQVVoRSwwQkFBMEI7Ozs7SUFFbEQsdUJBQU0sYUFDRixLQUFhLEVBQ2IsZ0JBQWtDLEVBQ2xDLE1BQWtCO0lBTXRCLHdCQUFPLGFBQUMsS0FBYTtJQUtyQiw4QkFBYTtJQUtiLGtDQUFpQixhQUFDLFNBQW9CO0lBS3RDLG1DQUFrQixhQUFDLGFBQTRCO0lBSy9DLGtDQUFpQjtJQUtqQix1Q0FBc0IsYUFDbEIsSUFBWSxFQUNaLEVBQVU7SUFNZCwwQkFBUyxhQUFDLE1BQWM7SUFLeEIsOEJBQWE7SUFLYiw2QkFBWTtJQUtaLDJCQUFVLGFBQUMsV0FBb0I7Ozs7OztpQkF0Rm5DO0VBMkI0QiwwQkFBMEI7U0FBekMsTUFBTTs7SUF3RWY7SUFBd0IsQ0FBQztJQUVsQixxQ0FBaUIsR0FBeEIsVUFBeUIsY0FBOEI7UUFDbkQsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQzNELGNBQWMsQ0FDakIsQ0FBQztJQUNOLENBQUM7SUFFTSw2QkFBUyxHQUFoQixVQUFpQixNQUFjO1FBQzNCLE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBT00sbUNBQWUsR0FBdEIsVUFDSSxZQUEwQixFQUMxQixPQUFlLEVBQ2YsS0FBYyxFQUNkLE1BQWU7UUFFZixPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQ3pELFlBQVksRUFDWixPQUFPLEVBQ1AsS0FBSyxFQUNMLE1BQU0sQ0FDVCxD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Q0FBQTtJQUNiLCtEQUFXLENBQUE7SUFDWCwrREFBVyxDQUFBO0FBQ2YsQ0FBQyxFQU5XLGlCQUFpQixLQUFqQixpQkFBaUIsUUFNNUI7QUFFRCxNQUFNLENBQU4sSUFBWSxPQUtYO0FBTEQsV0FBWSxPQUFPO0lBQ2Ysb0NBQVEsQ0FBQTtJQUNSLDBDQUFXLENBQUE7SUFDWCw2Q0FBZSxDQUFBO0lBQ2YseUNBQWEsQ0FBQTtBQUNqQixDQUFDLEVBTFcsT0FBTyxLQUFQLE9BQU8sUUFLbEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gICAgQ29weXJpZ2h0IDIwMjAtMjAyNC4gSHVhd2VpIFRlY2hub2xvZ2llcyBDby4sIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuXHJcbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpXHJcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuXHJcbiAgICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcclxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcclxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxyXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbiovXHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29yZG92YSwgQXdlc29tZUNvcmRvdmFOYXRpdmVQbHVnaW4sIFBsdWdpbiB9IGZyb20gXCJAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvY29yZVwiO1xyXG5cclxuQFBsdWdpbih7XHJcbiAgICBwbHVnaW5OYW1lOiBcIkhNU01hcFwiLFxyXG4gICAgcGx1Z2luOiBcImNvcmRvdmEtcGx1Z2luLWhtcy1tYXBcIixcclxuICAgIHBsdWdpblJlZjogXCJITVNNYXBcIixcclxuICAgIHJlcG86IFwiaHR0cHM6Ly9naXRodWIuY29tL0hNUy1Db3JlL2htcy1jb3Jkb3ZhLXBsdWdpblwiLFxyXG4gICAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxyXG59KVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBITVNNYXAgZXh0ZW5kcyBBd2Vzb21lQ29yZG92YU5hdGl2ZVBsdWdpbiB7XHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZ2V0TWFwKFxyXG4gICAgICAgIGRpdklkOiBzdHJpbmcsXHJcbiAgICAgICAgaHVhd2VpTWFwT3B0aW9uczogSHVhd2VpTWFwT3B0aW9ucyxcclxuICAgICAgICBib3VuZHM/OiBNYXBCb3VuZHNcclxuICAgICk6IFByb21pc2U8SHVhd2VpTWFwPiB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIEBDb3Jkb3ZhKHsgb3RoZXJQcm9taXNlOiB0cnVlIH0pXHJcbiAgICBzaG93TWFwKGRpdklkOiBzdHJpbmcpOiBQcm9taXNlPEh1YXdlaU1hcD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgaGFzUGVybWlzc2lvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGNvbnZlcnRDb29yZGluYXRlKExhdExuZ09iajogTGF0TG5nT2JqKTogUHJvbWlzZTxMYXRMbmdPYmo+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGNvbnZlcnRDb29yZGluYXRlcyhMYXRMbmdMaXN0T2JqOiBMYXRMbmdMaXN0T2JqKTogUHJvbWlzZTxMYXRMbmdMaXN0T2JqW10+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIHJlcXVlc3RQZXJtaXNzaW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgY29tcHV0ZURpc3RhbmNlQmV0d2VlbihcclxuICAgICAgICBmcm9tOiBMYXRMbmcsXHJcbiAgICAgICAgdG86IExhdExuZ1xyXG4gICAgKTogUHJvbWlzZTxDb21wdXRlRGlzdGFuY2VSZXN1bHQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIHNldEFwaUtleShhcGlLZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBAQ29yZG92YSh7IG90aGVyUHJvbWlzZTogdHJ1ZSB9KVxyXG4gICAgZGlzYWJsZUxvZ2dlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGVuYWJsZUxvZ2dlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgQENvcmRvdmEoeyBvdGhlclByb21pc2U6IHRydWUgfSlcclxuICAgIGluaXRpYWxpemUocm91dGVQb2xpY3k/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbn1cclxuXHJcbkBQbHVnaW4oe1xyXG4gICAgcGx1Z2luTmFtZTogXCJITVNNYXBcIixcclxuICAgIHBsdWdpbjogXCJjb3Jkb3ZhLXBsdWdpbi1obXMtbWFwXCIsXHJcbiAgICBwbHVnaW5SZWY6IFwiSE1TTWFwLkNhbWVyYVVwZGF0ZUZhY3RvcnlcIixcclxuICAgIHJlcG86IFwiaHR0cHM6Ly9naXRodWIuY29tL0hNUy1Db3JlL2htcy1jb3Jkb3ZhLXBsdWdpblwiLFxyXG4gICAgcGxhdGZvcm1zOiBbXCJBbmRyb2lkXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FtZXJhVXBkYXRlRmFjdG9yeSB7XHJcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgc3RhdGljIG5ld0NhbWVyYVBvc2l0aW9uKGNhbWVyYVBvc2l0aW9uOiBDYW1lcmFQb3NpdGlvbik6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lm5ld0NhbWVyYVBvc2l0aW9uKFxyXG4gICAgICAgICAgICBjYW1lcmFQb3NpdGlvblxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5ld0xhdExuZyhsYXRMbmc6IExhdExuZyk6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lm5ld0xhdExuZyhsYXRMbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBuZXdMYXRMbmdCb3VuZHMoXHJcbiAgICAgICAgbGF0TG5nQm91bmRzOiBMYXRMbmdCb3VuZHMsXHJcbiAgICAgICAgcGFkZGluZzogbnVtYmVyXHJcbiAgICApOiBDYW1lcmFVcGRhdGU7XHJcblxyXG4gICAgc3RhdGljIG5ld0xhdExuZ0JvdW5kcyhcclxuICAgICAgICBsYXRMbmdCb3VuZHM6IExhdExuZ0JvdW5kcyxcclxuICAgICAgICBwYWRkaW5nOiBudW1iZXIsXHJcbiAgICAgICAgd2lkdGg/OiBudW1iZXIsXHJcbiAgICAgICAgaGVpZ2h0PzogbnVtYmVyXHJcbiAgICApOiBDYW1lcmFVcGRhdGUge1xyXG4gICAgICAgIHJldHVybiBITVNNYXAuZ2V0UGx1Z2luKCkuQ2FtZXJhVXBkYXRlRmFjdG9yeS5uZXdMYXRMbmdCb3VuZHMoXHJcbiAgICAgICAgICAgIGxhdExuZ0JvdW5kcyxcclxuICAgICAgICAgICAgcGFkZGluZyxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIG5ld0xhdExuZ1pvb20obGF0TG5nOiBMYXRMbmcsIHpvb206IG51bWJlcik6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5Lm5ld0xhdExuZ1pvb20oXHJcbiAgICAgICAgICAgIGxhdExuZyxcclxuICAgICAgICAgICAgem9vbVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNjcm9sbEJ5KHhQaXhlbDogbnVtYmVyLCB5UGl4ZWw6IG51bWJlcik6IENhbWVyYVVwZGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIEhNU01hcC5nZXRQbHVnaW4oKS5DYW1lcmFVcGRhdGVGYWN0b3J5LnNjcm9sbEJ5KHhQaXhlbCwgeVBpeGVsKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgem9vbUJ5KGFtb3VudDogbnVtYmVyKTogQ2FtZXJhVXBkYXRlO1xyXG5cclxuICAgIHN0YXRpYyB6b29tQnkoYW1vdW50OiBudW1iZXIsIGZvY3VzPzogUG9pbnQpOiBDYW1lcmFVcGRhdGUge1xyXG4gICAgICAgIHJldHVybiBITVNNYXAuZ2V0UGx1Z2luKCkuQ2FtZXJhVXBkYXRlRmFjdG9yeS56b29tQnkoYW1vdW50LCBmb2N1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHpvb21JbigpOiBDYW1lcmFVcGRhdGUge1xyXG4gICAgICAgIHJldHVybiBITVNNYXAuZ2V0UGx1Z2luKCkuQ2FtZXJhVXBkYXRlRmFjdG9yeS56b29tSW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgem9vbU91dCgpOiBDYW1lcmFVcGRhdGUge1xyXG4gICAgICAgIHJldHVybiBITVNNYXAuZ2V0UGx1Z2luKCkuQ2FtZXJhVXBkYXRlRmFjdG9yeS56b29tT3V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHpvb21Ubyh6b29tOiBudW1iZXIpOiBDYW1lcmFVcGRhdGUge1xyXG4gICAgICAgIHJldHVybiBITVNNYXAuZ2V0UGx1Z2luKCkuQ2FtZXJhVXBkYXRlRmFjdG9yeS56b29tVG8oem9vbSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXBTdHlsZU9wdGlvbnMge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZU5hbWU6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKHJlc291cmNlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5yZXNvdXJjZU5hbWUgPSByZXNvdXJjZU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBsb2FkUmF3UmVzb3VyY2VTdHlsZShyZXNvdXJjZU5hbWU6IHN0cmluZyk6IE1hcFN0eWxlT3B0aW9ucyB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNYXBTdHlsZU9wdGlvbnMocmVzb3VyY2VOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXNvdXJjZU5hbWUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZU5hbWU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDYXAge1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IFRZUEVfQlVUVF9DQVAgPSAwO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IFRZUEVfU1FVQVJFX0NBUCA9IDE7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgVFlQRV9ST1VORF9DQVAgPSAyO1xyXG4gICAgc3RhdGljIHJlYWRvbmx5IFRZUEVfQ1VTVE9NX0NBUCA9IDM7XHJcbiAgICBwcm90ZWN0ZWQgdHlwZTogbnVtYmVyO1xyXG4gICAgcHJvdGVjdGVkIHJlZldpZHRoPzogbnVtYmVyID0gbnVsbDtcclxuICAgIHByb3RlY3RlZCBiaXRtYXBEZXNjcmlwdG9yPzogQml0bWFwRGVzY3JpcHRvciA9IG51bGw7XHJcblxyXG4gICAgZ2V0VHlwZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnR5cGU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBCdXR0Q2FwIGV4dGVuZHMgQ2FwIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy50eXBlID0gMDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJvdW5kQ2FwIGV4dGVuZHMgQ2FwIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy50eXBlID0gMjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNxdWFyZUNhcCBleHRlbmRzIENhcCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IDE7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21DYXAgZXh0ZW5kcyBDYXAge1xyXG4gICAgY29uc3RydWN0b3IoYml0bWFwRGVzY3JpcHRvcjogQml0bWFwRGVzY3JpcHRvciwgcmVmV2lkdGg/OiBudW1iZXIpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IDM7XHJcbiAgICAgICAgdGhpcy5iaXRtYXBEZXNjcmlwdG9yID0gYml0bWFwRGVzY3JpcHRvcjtcclxuICAgICAgICB0aGlzLnJlZldpZHRoID0gcmVmV2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmVmV2lkdGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWZXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCaXRtYXBEZXNjcmlwdG9yKCk6IEJpdG1hcERlc2NyaXB0b3Ige1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJpdG1hcERlc2NyaXB0b3I7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBbmltYXRpb25TZXQge1xyXG4gICAgcmVhZG9ubHkgYW5pbWF0aW9uczogTWFwPHN0cmluZywgQW5pbWF0aW9uPiA9IG5ldyBNYXA8c3RyaW5nLCBBbmltYXRpb24+KCk7XHJcblxyXG4gICAgYWRkUm90YXRlQW5pbWF0aW9uKGFuaW1hdGlvbjogUm90YXRlQW5pbWF0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25zLnNldChcIlJvdGF0ZVwiLCBhbmltYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFNjYWxlQW5pbWF0aW9uKGFuaW1hdGlvbjogU2NhbGVBbmltYXRpb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFuaW1hdGlvbnMuc2V0KFwiU2NhbGVcIiwgYW5pbWF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUcmFuc2xhdGVBbmltYXRpb24oYW5pbWF0aW9uOiBUcmFuc2xhdGVBbmltYXRpb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFuaW1hdGlvbnMuc2V0KFwiVHJhbnNsYXRlXCIsIGFuaW1hdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWxwaGFBbmltYXRpb24oYW5pbWF0aW9uOiBBbHBoYUFuaW1hdGlvbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0aW9ucy5zZXQoXCJBbHBoYVwiLCBhbmltYXRpb24pO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9JTlRFUkZBQ0VTLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVaVNldHRpbmdzIHtcclxuICAgIGlzQ29tcGFzc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzSW5kb29yTGV2ZWxQaWNrZXJFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc01hcFRvb2xiYXJFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc015TG9jYXRpb25CdXR0b25FbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc1JvdGF0ZUdlc3R1cmVzRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNTY3JvbGxHZXN0dXJlc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzU2Nyb2xsR2VzdHVyZXNFbmFibGVkRHVyaW5nUm90YXRlT3Jab29tKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc1RpbHRHZXN0dXJlc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzWm9vbUNvbnRyb2xzRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNab29tR2VzdHVyZXNFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBzZXRBbGxHZXN0dXJlc0VuYWJsZWQoYWxsR2VzdHVyZXNFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldENvbXBhc3NFbmFibGVkKGNvbXBhc3NFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEluZG9vckxldmVsUGlja2VyRW5hYmxlZChcclxuICAgICAgICBpbmRvb3JMZXZlbFBpY2tlckVuYWJsZWQ6IGJvb2xlYW5cclxuICAgICk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXBUb29sYmFyRW5hYmxlZChtYXBUb29sYmFyRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNeUxvY2F0aW9uQnV0dG9uRW5hYmxlZChteUxvY2F0aW9uQnV0dG9uRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRSb3RhdGVHZXN0dXJlc0VuYWJsZWQocm90YXRlR2VzdHVyZXNFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFNjcm9sbEdlc3R1cmVzRW5hYmxlZChzY3JvbGxHZXN0dXJlc0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U2Nyb2xsR2VzdHVyZXNFbmFibGVkRHVyaW5nUm90YXRlT3Jab29tKFxyXG4gICAgICAgIHNjcm9sbEdlc3R1cmVzRW5hYmxlZER1cmluZ1JvdGF0ZU9yWm9vbTogYm9vbGVhblxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRpbHRHZXN0dXJlc0VuYWJsZWQodGlsdEdlc3R1cmVzRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRab29tQ29udHJvbHNFbmFibGVkKHpvb21Db250cm9sc0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Wm9vbUdlc3R1cmVzRW5hYmxlZCh6b29tR2VzdHVyZXNFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEdlc3R1cmVTY2FsZUJ5TWFwQ2VudGVyKFxyXG4gICAgICAgIGdlc3R1cmVTY2FsZUJ5TWFwQ2VudGVyRW5hYmxlZDogYm9vbGVhblxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcmtlckNsdXN0ZXJDb2xvcihtYXJrZXJDbHVzdGVyQ29sb3I6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXJrZXJDbHVzdGVySWNvbihtYXJrZXJDbHVzdGVySWNvbjogQml0bWFwRGVzY3JpcHRvcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXJrZXJDbHVzdGVyVGV4dENvbG9yKG1hcmtlckNsdXN0ZXJUZXh0Q29sb3I6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRMb2dvUG9zaXRpb24obG9nb1Bvc2l0aW9uOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TG9nb1BhZGRpbmcoXHJcbiAgICAgICAgcGFkZGluZ1N0YXJ0OiBudW1iZXIsXHJcbiAgICAgICAgcGFkZGluZ1RvcDogbnVtYmVyLFxyXG4gICAgICAgIHBhZGRpbmdFbmQ6IG51bWJlcixcclxuICAgICAgICBwYWRkaW5nQm90dG9tOiBudW1iZXJcclxuICAgICk6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSHVhd2VpTWFwIHtcclxuICAgIG9uKGV2ZW50OiBNYXBFdmVudCwgY2FsbGJhY2s6ICh2YWw6IGFueSkgPT4gdm9pZCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBkZXN0cm95TWFwKCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBoaWRlTWFwKCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBnZXRDb21wb25lbnQoa2V5OiBzdHJpbmcpOiBhbnk7XHJcbiAgICByZW1vdmVDb21wb25lbnQoa2V5OiBzdHJpbmcpOiB2b2lkO1xyXG4gICAgZ2V0SWQoKTogbnVtYmVyO1xyXG4gICAgc2Nyb2xsKCk6IHZvaWQ7XHJcbiAgICBzeW5jRGltZW5zaW9ucygpOiB2b2lkO1xyXG4gICAgYWRkQ2lyY2xlKGNpcmNsZU9wdGlvbnM6IENpcmNsZU9wdGlvbnMpOiBQcm9taXNlPENpcmNsZT47XHJcbiAgICBhZGRIZWF0TWFwKGhlYXRNYXBPcHRpb25zOiBIZWF0TWFwT3B0aW9ucyk6IFByb21pc2U8SGVhdE1hcD5cclxuICAgIGFkZE1hcmtlcihtYXJrZXJPcHRpb25zOiBNYXJrZXJPcHRpb25zKTogUHJvbWlzZTxNYXJrZXI+O1xyXG4gICAgYWRkR3JvdW5kT3ZlcmxheShcclxuICAgICAgICBncm91bmRPdmVybGF5T3B0aW9uczogR3JvdW5kT3ZlcmxheU9wdGlvbnNcclxuICAgICk6IFByb21pc2U8R3JvdW5kT3ZlcmxheT47XHJcbiAgICBhZGRUaWxlT3ZlcmxheShcclxuICAgICAgICB0aWxlT3ZlcmxheU9wdGlvbnM6IFRpbGVPdmVybGF5T3B0aW9uc1xyXG4gICAgKTogUHJvbWlzZTxUaWxlT3ZlcmxheT47XHJcbiAgICBhZGRQb2x5Z29uKHBvbHlnb25PcHRpb25zOiBQb2x5Z29uT3B0aW9ucyk6IFByb21pc2U8UG9seWdvbj47XHJcbiAgICBhZGRQb2x5bGluZShwb2x5bGluZU9wdGlvbnM6IFBvbHlsaW5lT3B0aW9ucyk6IFByb21pc2U8UG9seWxpbmU+O1xyXG4gICAgYW5pbWF0ZUNhbWVyYShjYW1lcmFVcGRhdGU6IENhbWVyYVVwZGF0ZSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBhbmltYXRlQ2FtZXJhKFxyXG4gICAgICAgIGNhbWVyYVVwZGF0ZTogQ2FtZXJhVXBkYXRlLFxyXG4gICAgICAgIGNhbmNlbGFibGVDYWxsYmFjazogQ2FuY2VsYWJsZUNhbGxiYWNrXHJcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgYW5pbWF0ZUNhbWVyYShcclxuICAgICAgICBjYW1lcmFVcGRhdGU6IENhbWVyYVVwZGF0ZSxcclxuICAgICAgICBjYW5jZWxhYmxlQ2FsbGJhY2s/OiBDYW5jZWxhYmxlQ2FsbGJhY2ssXHJcbiAgICAgICAgZHVyYXRpb25Ncz86IG51bWJlclxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIG1vdmVDYW1lcmEoY2FtZXJhVXBkYXRlOiBDYW1lcmFVcGRhdGUpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgY2xlYXIoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHJlc2V0TWluTWF4Wm9vbVByZWZlcmVuY2UoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHN0b3BBbmltYXRpb24oKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGdldENhbWVyYVBvc2l0aW9uKCk6IFByb21pc2U8Q2FtZXJhUG9zaXRpb24+O1xyXG4gICAgZ2V0TWFwVHlwZSgpOiBQcm9taXNlPE1hcFR5cGU+O1xyXG4gICAgZ2V0TWF4Wm9vbUxldmVsKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldE1pblpvb21MZXZlbCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRQcm9qZWN0aW9uKCk6IFByb2plY3Rpb247XHJcbiAgICBnZXRVaVNldHRpbmdzKCk6IFVpU2V0dGluZ3M7XHJcbiAgICBnZXRTY2FsZVBlclBpeGVsKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldE15TG9jYXRpb25TdHlsZSgpOiBQcm9taXNlPE15TG9jYXRpb25TdHlsZT47XHJcbiAgICBpc0J1aWxkaW5nc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzRGFyaygpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNNeUxvY2F0aW9uRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNUcmFmZmljRW5hYmxlZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNJbmRvb3JFbmFibGVkKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBcclxuICAgIHNldEJ1aWxkaW5nc0VuYWJsZWQoYnVpbGRpbmdzRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXREYXJrRW5hYmxlZChkYXJrRW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRDb250ZW50RGVzY3JpcHRpb24oY29udGVudERlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0SW5mb1dpbmRvd0FkYXB0ZXIoaW5mb1dpbmRvd0FkYXB0ZXI6IEluZm9XaW5kb3dBZGFwdGVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldExhdExuZ0JvdW5kc0ZvckNhbWVyYVRhcmdldChcclxuICAgICAgICBsYXRMbmdCb3VuZHNGb3JDYW1lcmFUYXJnZXQ6IExhdExuZ0JvdW5kc1xyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldExvY2F0aW9uU291cmNlKGxvY2F0aW9uU291cmNlOiBMb2NhdGlvblNvdXJjZSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXBTdHlsZShtYXBTdHlsZTogTWFwU3R5bGVPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcFR5cGUobWFwVHlwZTogTWFwVHlwZSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXJrZXJzQ2x1c3RlcmluZyhtYXJrZXJzQ2x1c3RlcmluZzogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXhab29tUHJlZmVyZW5jZShtYXhab29tUHJlZmVyZW5jZTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1pblpvb21QcmVmZXJlbmNlKG1pblpvb21QcmVmZXJlbmNlOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0TXlMb2NhdGlvbkVuYWJsZWQobXlMb2NhdGlvbkVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0UGFkZGluZyhcclxuICAgICAgICBsZWZ0OiBudW1iZXIsXHJcbiAgICAgICAgdG9wOiBudW1iZXIsXHJcbiAgICAgICAgcmlnaHQ6IG51bWJlcixcclxuICAgICAgICBib3R0b206IG51bWJlclxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRyYWZmaWNFbmFibGVkKHRyYWZmaWNFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNuYXBzaG90KFxyXG4gICAgICAgIG9uUmVhZHlDYWxsYmFjazogKHNuYXBzaG90OiBTbmFwc2hvdFJlc3VsdCkgPT4gdm9pZFxyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE1hcFBvaW50ZXJzRW5hYmxlZChtYXBQb2ludGVyc0VuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgaXNNYXBQb2ludGVyc0VuYWJsZWQoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIHNldFBvaW50VG9DZW50ZXIoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3R5bGVJZChzdHlsZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgcHJldmlld0lkKHByZXZpZXdJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldE15TG9jYXRpb25TdHlsZShzdHlsZTogTXlMb2NhdGlvblN0eWxlKTogUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYW1lcmFVcGRhdGUge1xyXG4gICAgbW92ZUNhbWVyYShtYXBJZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgYW5pbWF0ZUNhbWVyYShtYXBJZDogc3RyaW5nLCBwcm9wczogYW55KTogUHJvbWlzZTxhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENpcmNsZSB7XHJcbiAgICBnZXRDZW50ZXIoKTogUHJvbWlzZTxMYXRMbmc+O1xyXG4gICAgZ2V0RmlsbENvbG9yKCk6IFByb21pc2U8Q29sb3I+O1xyXG4gICAgZ2V0SWQoKTogc3RyaW5nO1xyXG4gICAgZ2V0UmFkaXVzKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFN0cm9rZUNvbG9yKCk6IFByb21pc2U8Q29sb3I+O1xyXG4gICAgZ2V0U3Ryb2tlUGF0dGVybigpOiBQcm9taXNlPFBhdHRlcm5JdGVtW10+O1xyXG4gICAgZ2V0U3Ryb2tlV2lkdGgoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0VGFnKCk6IFByb21pc2U8YW55PjtcclxuICAgIGdldFpJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBpc0NsaWNrYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNWaXNpYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICByZW1vdmUoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHN0YXJ0QW5pbWF0aW9uKCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBjbGVhckFuaW1hdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+OyBcclxuICAgIHNldENlbnRlcihjZW50ZXI6IExhdExuZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRGaWxsQ29sb3IoZmlsbENvbG9yOiBDb2xvcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRSYWRpdXMocmFkaXVzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3I6IENvbG9yKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFN0cm9rZVBhdHRlcm4oc3Ryb2tlUGF0dGVybjogUGF0dGVybkl0ZW1bXSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTdHJva2VXaWR0aChzdHJva2VXaWR0aDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRhZyh0YWc6IGFueSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRaSW5kZXgoekluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Q2xpY2thYmxlKGNsaWNrYWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0QW5pbWF0aW9uKGFuaW1hdGlvbjogQW5pbWF0aW9uU2V0KTogUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIZWF0TWFwIHtcclxuXHJcbiAgICBnZXRJZCgpOiBzdHJpbmc7XHJcbiAgICByZW1vdmUoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGNoYW5nZURhdGFTZXQoanNvbkRhdGE6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBjaGFuZ2VEYXRhU2V0SWQocmVzb3VyY2VJZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGdldFJhZGl1c1VuaXQoKTogUHJvbWlzZTxSYWRpdXNVbml0PjtcclxuICAgIHNldFJhZGl1c1VuaXQocmFkaXVzVW5pdDogUmFkaXVzVW5pdCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRDb2xvcihjb2xvcjogTWFwPG51bWJlciwgTnVtYmVyW10+KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEludGVuc2l0eShpbnRlbnNpdHk6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRJbnRlbnNpdGllcyhpbnRlbnNpdGllczogTWFwPG51bWJlciwgbnVtYmVyPik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRPcGFjaXR5KG9wYWNpdHk6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRPcGFjaXRpZXMoT3BhY2l0aWVzOiBNYXA8bnVtYmVyLCBudW1iZXI+KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFJhZGl1cyhyYWRpdXM6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRSYWRpdXNlcyhyYWRpdXNlczogTWFwPG51bWJlciwgbnVtYmVyPik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91bmRPdmVybGF5IHtcclxuICAgIGdldEJlYXJpbmcoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgZ2V0Qm91bmRzKCk6IFByb21pc2U8TGF0TG5nQm91bmRzPjtcclxuICAgIGdldEhlaWdodCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRJZCgpOiBzdHJpbmc7XHJcbiAgICBnZXRQb3NpdGlvbigpOiBQcm9taXNlPExhdExuZz47XHJcbiAgICBnZXRUYWcoKTogUHJvbWlzZTxhbnk+O1xyXG4gICAgZ2V0VHJhbnNwYXJlbmN5KCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFdpZHRoKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFpJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBpc0NsaWNrYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNWaXNpYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcblxyXG4gICAgcmVtb3ZlKCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gICAgc2V0QmVhcmluZyhiZWFyaW5nOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Q2xpY2thYmxlKGNsaWNrYWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXREaW1lbnNpb25zKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldERpbWVuc2lvbnMod2lkdGg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRJbWFnZShpbWFnZURlc2NyaXB0b3I6IEJpdG1hcERlc2NyaXB0b3IpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0UG9zaXRpb24ocG9zaXRpb246IExhdExuZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRQb3NpdGlvbkZyb21Cb3VuZHMocG9zaXRpb25MYXRMbmdCb3VuZHM6IExhdExuZ0JvdW5kcyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRUYWcodGFnOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VHJhbnNwYXJlbmN5KHRyYW5zcGFyZW5jeTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRaSW5kZXgoekluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtlciB7XHJcbiAgICBnZXRBbHBoYSgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRJZCgpOiBzdHJpbmc7XHJcbiAgICBnZXRQb3NpdGlvbigpOiBQcm9taXNlPExhdExuZz47XHJcbiAgICBnZXRSb3RhdGlvbigpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRTbmlwcGV0KCk6IFByb21pc2U8c3RyaW5nPjtcclxuICAgIGdldFRhZygpOiBQcm9taXNlPGFueT47XHJcbiAgICBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz47XHJcbiAgICBnZXRaSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgaXNWaXNpYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc0NsdXN0ZXJhYmxlKCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc0RyYWdnYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNGbGF0KCk6IFByb21pc2U8Ym9vbGVhbj47XHJcbiAgICBpc0luZm9XaW5kb3dTaG93bigpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNDbGlja2FibGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuXHJcbiAgICByZW1vdmUoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGhpZGVJbmZvV2luZG93KCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzaG93SW5mb1dpbmRvdygpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc3RhcnRBbmltYXRpb24oKTogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgICBzZXRBbHBoYShhbHBoYTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEFuaW1hdGlvbihhbmltYXRpb246IEFuaW1hdGlvblNldCk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXREcmFnZ2FibGUoZHJhZ2dhYmxlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEZsYXQoZmxhdDogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRJY29uKGljb246IEJpdG1hcERlc2NyaXB0b3IpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0SW5mb1dpbmRvd0FuY2hvcih1OiBudW1iZXIsIHY6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRNYXJrZXJBbmNob3IodTogbnVtYmVyLCB2OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0UG9zaXRpb24obGF0TG5nOiBMYXRMbmcpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Um90YXRpb24ocm90YXRpb246IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTbmlwcGV0KHNuaXBwZXQ6IFN0cmluZyk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFRhZyh0YWc6IGFueSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0WkluZGV4KHpJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldENsaWNrYWJsZShjbGlja2FibGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBvbHlnb24ge1xyXG4gICAgZ2V0RmlsbENvbG9yKCk6IFByb21pc2U8Q29sb3I+O1xyXG4gICAgZ2V0SG9sZXMoKTogUHJvbWlzZTxMYXRMbmdbXVtdPjtcclxuICAgIGdldElkKCk6IHN0cmluZztcclxuICAgIGdldFBvaW50cygpOiBQcm9taXNlPExhdExuZ1tdPjtcclxuICAgIGdldFN0cm9rZUNvbG9yKCk6IFByb21pc2U8Q29sb3I+O1xyXG4gICAgZ2V0U3Ryb2tlSm9pbnRUeXBlKCk6IFByb21pc2U8Sm9pbnRUeXBlPjtcclxuICAgIGdldFN0cm9rZVBhdHRlcm4oKTogUHJvbWlzZTxQYXR0ZXJuSXRlbVtdPjtcclxuICAgIGdldFN0cm9rZVdpZHRoKCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFRhZygpOiBQcm9taXNlPGFueT47XHJcbiAgICBnZXRaSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgaXNDbGlja2FibGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzVmlzaWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgaXNHZW9kZXNpYygpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG5cclxuICAgIHJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAgIHNldENsaWNrYWJsZShjbGlja2FibGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0RmlsbENvbG9yKGNvbG9yOiBDb2xvcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRHZW9kZXNpYyhnZW9kZXNpYzogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRIb2xlcyhob2xlczogTGF0TG5nW11bXSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRQb2ludHMocG9pbnRzOiBMYXRMbmdbXSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRTdHJva2VDb2xvcihjb2xvcjogQ29sb3IpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3Ryb2tlSm9pbnRUeXBlKGpvaW50VHlwZTogSm9pbnRUeXBlKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFN0cm9rZVBhdHRlcm4ocGF0dGVybkl0ZW06IFBhdHRlcm5JdGVtW10pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0U3Ryb2tlV2lkdGgod2lkdGg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRUYWcodGFnOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFpJbmRleCh6SW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUG9seWxpbmUge1xyXG4gICAgZ2V0Q29sb3IoKTogUHJvbWlzZTxDb2xvcj47XHJcbiAgICBnZXRFbmRDYXAoKTogUHJvbWlzZTxDYXA+O1xyXG4gICAgZ2V0U3RhcnRDYXAoKTogUHJvbWlzZTxDYXA+O1xyXG4gICAgZ2V0SWQoKTogc3RyaW5nO1xyXG4gICAgZ2V0Sm9pbnRUeXBlKCk6IFByb21pc2U8Sm9pbnRUeXBlPjtcclxuICAgIGdldFBhdHRlcm4oKTogUHJvbWlzZTxQYXR0ZXJuSXRlbVtdPjtcclxuICAgIGdldFBvaW50cygpOiBQcm9taXNlPExhdExuZ1tdPjtcclxuICAgIGdldFRhZygpOiBQcm9taXNlPGFueT47XHJcbiAgICBnZXRXaWR0aCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBnZXRaSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+O1xyXG4gICAgaXNDbGlja2FibGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzR2VvZGVzaWMoKTogUHJvbWlzZTxib29sZWFuPjtcclxuICAgIGlzVmlzaWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG5cclxuICAgIHJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+O1xyXG5cclxuICAgIHNldENsaWNrYWJsZShjbGlja2FibGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0Q29sb3IoY29sb3I6IENvbG9yKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFN0YXJ0Q2FwKHN0YXJ0Q2FwOiBDYXApOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0RW5kQ2FwKGVuZENhcDogQ2FwKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEdlb2Rlc2ljKGdlb2Rlc2ljOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldEpvaW50VHlwZShqb2ludFR5cGU6IEpvaW50VHlwZSk6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRQYXR0ZXJuKHBhdHRlcm46IFBhdHRlcm5JdGVtW10pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0UG9pbnRzKHBvaW50czogTGF0TG5nW10pOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0VGFnKHRhZzogYW55KTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRXaWR0aCh3aWR0aDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFpJbmRleCh6SW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRHcmFkaWVudChvbjogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRDb2xvclZhbHVlcyhjb2xvcnM6IENvbG9yW10pOiBQcm9taXNlPHZvaWQ+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRpbGVPdmVybGF5IHtcclxuICAgIGdldEZhZGVJbigpOiBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgZ2V0SWQoKTogc3RyaW5nO1xyXG4gICAgZ2V0VHJhbnNwYXJlbmN5KCk6IFByb21pc2U8bnVtYmVyPjtcclxuICAgIGdldFpJbmRleCgpOiBQcm9taXNlPG51bWJlcj47XHJcbiAgICBpc1Zpc2libGUoKTogUHJvbWlzZTxib29sZWFuPjtcclxuXHJcbiAgICByZW1vdmUoKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIGNsZWFyVGlsZUNhY2hlKCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gICAgc2V0RmFkZUluKGZhZGVJbjogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbiAgICBzZXRUcmFuc3BhcmVuY3kodHJhbnNwYXJlbmN5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgc2V0WkluZGV4KHpJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPjtcclxuICAgIHNldFZpc2libGUodmlzaWJsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVjdGlvbiB7XHJcbiAgICBmcm9tU2NyZWVuTG9jYXRpb24ocG9pbnQ6IFBvaW50KTogUHJv