@boldadmin/angular-google-maps
Version:
Google Maps adapter for Angular Framework
279 lines • 23 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Output } from '@angular/core';
import { EventPublisher } from '@boldadmin/event-publisher';
import * as moment from 'moment';
import { mapsText } from './angular-google-maps.constant';
import { AngularGoogleMapsBuilder } from './service/angular-google-maps-builder.service';
import { AngularGoogleMapsGeocoder } from './service/angular-google-maps-geocoder.service';
import { GoogleMapsFactory } from './service/google-maps-factory.service';
import { IconRegistry } from './service/icon-registry/icon-registry';
var AngularGoogleMapsComponent = /** @class */ (function () {
function AngularGoogleMapsComponent(googleMapsFactory, googleMapsBuilder, googleMapsGeocoder, eventPublisher, iconRegistry) {
this.googleMapsFactory = googleMapsFactory;
this.googleMapsBuilder = googleMapsBuilder;
this.googleMapsGeocoder = googleMapsGeocoder;
this.eventPublisher = eventPublisher;
this.iconRegistry = iconRegistry;
this.mapsText = mapsText;
this.address = '';
this.mapOptions = {
center: {
lat: 0,
lng: 0
},
mapTypeControlOptions: {
mapTypeIds: ['roadmap', 'satellite'],
position: this.googleMapsFactory.getGoogleMaps().ControlPosition.LEFT_BOTTOM
},
zoom: 16,
controlSize: 22,
fullscreenControl: false
};
this.markerOptions = {
position: {
lat: 0,
lng: 0
},
draggable: true,
animation: this.googleMapsFactory.getGoogleMaps().Animation.DROP
};
this.circleOptions = {
strokeColor: '#448aff',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#448aff',
fillOpacity: 0.35,
editable: true,
radius: 70
};
this.previousMarkerIcon = {
url: 'http://cdn.boldadmin.com.s3-website-eu-west-1.amazonaws.com/previous-marker.png'
};
this.currentMarkerIcon = {
url: 'http://cdn.boldadmin.com.s3-website-eu-west-1.amazonaws.com/current-marker.png'
};
}
/**
* @return {?}
*/
AngularGoogleMapsComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.eventPublisher.subscribe('addressReverseGeocoded', (/**
* @param {?} address
* @return {?}
*/
function (address) { return _this.address = address; }));
this.iconRegistry.register('expand', './assets/expand.svg');
this.iconRegistry.register('collapse', './assets/collapse.svg');
};
/**
* @return {?}
*/
AngularGoogleMapsComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.eventPublisher.unsubscribeAll('addressReverseGeocoded');
};
/**
* @param {?} focusLocation
* @return {?}
*/
AngularGoogleMapsComponent.prototype.createMapByLocation = /**
* @param {?} focusLocation
* @return {?}
*/
function (focusLocation) {
var _this = this;
this.googleMapsGeocoder.reverseGeocode(focusLocation.coordinates, (/**
* @param {?} address
* @return {?}
*/
function (address) { return _this.address = address; }));
this.circleOptions.radius = focusLocation.radiusInMeters;
this.changeMapCenter(focusLocation.coordinates);
this.googleMapsBuilder
.createMap(this.mapOptions)
.addCenterMarker(this.markerOptions)
.addCircle(this.circleOptions)
.bindCircleToMarker()
.addSearchBox();
};
/**
* @param {?} address
* @return {?}
*/
AngularGoogleMapsComponent.prototype.createMapByAddress = /**
* @param {?} address
* @return {?}
*/
function (address) {
var _this = this;
this.googleMapsGeocoder.geocode(address, (/**
* @param {?} coordinates
* @return {?}
*/
function (coordinates) {
_this.changeMapCenter(coordinates);
_this.googleMapsBuilder
.createMap(_this.mapOptions)
.addCenterMarker(_this.markerOptions)
.addCircle(_this.circleOptions)
.bindCircleToMarker()
.hideMarker()
.hideCircle()
.addSearchBox();
}));
};
/**
* @return {?}
*/
AngularGoogleMapsComponent.prototype.notifyMapResize = /**
* @return {?}
*/
function () {
this.eventPublisher.notify('resizeMap');
};
/**
* @param {?} timestampCoordinatesList
* @param {?} name
* @return {?}
*/
AngularGoogleMapsComponent.prototype.addTravelPath = /**
* @param {?} timestampCoordinatesList
* @param {?} name
* @return {?}
*/
function (timestampCoordinatesList, name) {
var _this = this;
timestampCoordinatesList.forEach((/**
* @param {?} timestampCoordinates
* @param {?} index
* @return {?}
*/
function (timestampCoordinates, index) {
/** @type {?} */
var icon = index === 0 ? _this.currentMarkerIcon : _this.previousMarkerIcon;
/** @type {?} */
var dateTime = moment.utc(timestampCoordinates.timestamp).format('YYYY.MM.DD HH:mm');
_this.googleMapsBuilder.addMarker({
position: _this.googleMapsFactory.createLatLng(timestampCoordinates.coordinates),
title: "Name: " + name + ", Time: " + dateTime,
icon: icon
});
}));
/** @type {?} */
var latLngs = timestampCoordinatesList.map((/**
* @param {?} value
* @return {?}
*/
function (value) { return _this.googleMapsFactory.createLatLng(value.coordinates); }));
this.addPolyline(latLngs, '#' + Math.random().toString(16).substr(2, 6));
};
/**
* @private
* @param {?} path
* @param {?} colorCode
* @return {?}
*/
AngularGoogleMapsComponent.prototype.addPolyline = /**
* @private
* @param {?} path
* @param {?} colorCode
* @return {?}
*/
function (path, colorCode) {
this.googleMapsBuilder.addPolyline({
geodesic: true,
strokeOpacity: 0.8,
strokeWeight: 1,
path: path,
strokeColor: colorCode
});
};
/**
* @private
* @param {?} coordinates
* @return {?}
*/
AngularGoogleMapsComponent.prototype.changeMapCenter = /**
* @private
* @param {?} coordinates
* @return {?}
*/
function (coordinates) {
this.mapOptions.center = { lat: coordinates.latitude, lng: coordinates.longitude };
};
AngularGoogleMapsComponent.decorators = [
{ type: Component, args: [{
selector: 'google-maps',
template: "<input id=\"search-input\" name=\"searchBox\" class=\"controls\" type=\"text\"\n placeholder=\"{{mapsText.searchBox}}\"\n [ngModelOptions]=\"{standalone: true}\"\n [(ngModel)]=\"address\"/>\n<mat-icon id=\"expand-icon\" class=\"resize-control\" svgIcon=\"expand\" (click)=\"notifyMapResize()\"></mat-icon>\n<mat-icon id=\"collapse-icon\" class=\"resize-control\" svgIcon=\"collapse\" (click)=\"notifyMapResize()\"></mat-icon>\n\n<div id=\"map\"></div>\n",
providers: [AngularGoogleMapsBuilder]
}] }
];
/** @nocollapse */
AngularGoogleMapsComponent.ctorParameters = function () { return [
{ type: GoogleMapsFactory },
{ type: AngularGoogleMapsBuilder },
{ type: AngularGoogleMapsGeocoder },
{ type: EventPublisher },
{ type: IconRegistry }
]; };
AngularGoogleMapsComponent.propDecorators = {
mapOptions: [{ type: Output }],
markerOptions: [{ type: Output }],
circleOptions: [{ type: Output }],
previousMarkerIcon: [{ type: Output }],
currentMarkerIcon: [{ type: Output }]
};
return AngularGoogleMapsComponent;
}());
export { AngularGoogleMapsComponent };
if (false) {
/** @type {?} */
AngularGoogleMapsComponent.prototype.mapsText;
/** @type {?} */
AngularGoogleMapsComponent.prototype.address;
/** @type {?} */
AngularGoogleMapsComponent.prototype.mapOptions;
/** @type {?} */
AngularGoogleMapsComponent.prototype.markerOptions;
/** @type {?} */
AngularGoogleMapsComponent.prototype.circleOptions;
/** @type {?} */
AngularGoogleMapsComponent.prototype.previousMarkerIcon;
/** @type {?} */
AngularGoogleMapsComponent.prototype.currentMarkerIcon;
/**
* @type {?}
* @private
*/
AngularGoogleMapsComponent.prototype.googleMapsFactory;
/**
* @type {?}
* @private
*/
AngularGoogleMapsComponent.prototype.googleMapsBuilder;
/**
* @type {?}
* @private
*/
AngularGoogleMapsComponent.prototype.googleMapsGeocoder;
/**
* @type {?}
* @private
*/
AngularGoogleMapsComponent.prototype.eventPublisher;
/**
* @type {?}
* @private
*/
AngularGoogleMapsComponent.prototype.iconRegistry;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1nb29nbGUtbWFwcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYm9sZGFkbWluL2FuZ3VsYXItZ29vZ2xlLW1hcHMvIiwic291cmNlcyI6WyJhbmd1bGFyLWdvb2dsZS1tYXBzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUMzRCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUE7QUFDeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUE7QUFDMUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBVXBFO0lBbURJLG9DQUFvQixpQkFBb0MsRUFDcEMsaUJBQTJDLEVBQzNDLGtCQUE2QyxFQUM3QyxjQUE4QixFQUM5QixZQUEwQjtRQUoxQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMEI7UUFDM0MsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEyQjtRQUM3QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFoRDlDLGFBQVEsR0FBRyxRQUFRLENBQUE7UUFDbkIsWUFBTyxHQUFHLEVBQUUsQ0FBQTtRQUVGLGVBQVUsR0FBZTtZQUMvQixNQUFNLEVBQUU7Z0JBQ0osR0FBRyxFQUFFLENBQUM7Z0JBQ04sR0FBRyxFQUFFLENBQUM7YUFDVDtZQUNELHFCQUFx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SW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEV2ZW50UHVibGlzaGVyIH0gZnJvbSAnQGJvbGRhZG1pbi9ldmVudC1wdWJsaXNoZXInXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IHsgbWFwc1RleHQgfSBmcm9tICcuL2FuZ3VsYXItZ29vZ2xlLW1hcHMuY29uc3RhbnQnXG5pbXBvcnQgeyBBbmd1bGFyR29vZ2xlTWFwc0J1aWxkZXIgfSBmcm9tICcuL3NlcnZpY2UvYW5ndWxhci1nb29nbGUtbWFwcy1idWlsZGVyLnNlcnZpY2UnXG5pbXBvcnQgeyBBbmd1bGFyR29vZ2xlTWFwc0dlb2NvZGVyIH0gZnJvbSAnLi9zZXJ2aWNlL2FuZ3VsYXItZ29vZ2xlLW1hcHMtZ2VvY29kZXIuc2VydmljZSdcbmltcG9ydCB7IEdvb2dsZU1hcHNGYWN0b3J5IH0gZnJvbSAnLi9zZXJ2aWNlL2dvb2dsZS1tYXBzLWZhY3Rvcnkuc2VydmljZSdcbmltcG9ydCB7IEljb25SZWdpc3RyeSB9IGZyb20gJy4vc2VydmljZS9pY29uLXJlZ2lzdHJ5L2ljb24tcmVnaXN0cnknXG5pbXBvcnQgeyBDb29yZGluYXRlcyB9IGZyb20gJy4vdmFsdWUtb2JqZWN0L2Nvb3JkaW5hdGVzJ1xuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICcuL3ZhbHVlLW9iamVjdC9sb2NhdGlvbidcbmltcG9ydCB7IFRpbWVzdGFtcENvb3JkaW5hdGVzIH0gZnJvbSAnLi92YWx1ZS1vYmplY3QvdGltZXN0YW1wLWNvb3JkaW5hdGVzJ1xuaW1wb3J0IENpcmNsZU9wdGlvbnMgPSBnb29nbGUubWFwcy5DaXJjbGVPcHRpb25zXG5pbXBvcnQgSWNvbiA9IGdvb2dsZS5tYXBzLkljb25cbmltcG9ydCBMYXRMbmcgPSBnb29nbGUubWFwcy5MYXRMbmdcbmltcG9ydCBNYXBPcHRpb25zID0gZ29vZ2xlLm1hcHMuTWFwT3B0aW9uc1xuaW1wb3J0IE1hcmtlck9wdGlvbnMgPSBnb29nbGUubWFwcy5NYXJrZXJPcHRpb25zXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZ29vZ2xlLW1hcHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnYW5ndWxhci1nb29nbGUtbWFwcy5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtBbmd1bGFyR29vZ2xlTWFwc0J1aWxkZXJdXG59KVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJHb29nbGVNYXBzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgbWFwc1RleHQgPSBtYXBzVGV4dFxuICAgIGFkZHJlc3MgPSAnJ1xuXG4gICAgQE91dHB1dCgpIG1hcE9wdGlvbnM6IE1hcE9wdGlvbnMgPSB7XG4gICAgICAgIGNlbnRlcjoge1xuICAgICAgICAgICAgbGF0OiAwLFxuICAgICAgICAgICAgbG5nOiAwXG4gICAgICAgIH0sXG4gICAgICAgIG1hcFR5cGVDb250cm9sT3B0aW9uczoge1xuICAgICAgICAgICAgbWFwVHlwZUlkczogWydyb2FkbWFwJywgJ3NhdGVsbGl0ZSddLFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMuZ29vZ2xlTWFwc0ZhY3RvcnkuZ2V0R29vZ2xlTWFwcygpLkNvbnRyb2xQb3NpdGlvbi5MRUZUX0JPVFRPTVxuICAgICAgICB9LFxuICAgICAgICB6b29tOiAxNixcbiAgICAgICAgY29udHJvbFNpemU6IDIyLFxuICAgICAgICBmdWxsc2NyZWVuQ29udHJvbDogZmFsc2VcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgbWFya2VyT3B0aW9uczogTWFya2VyT3B0aW9ucyA9IHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgIGxhdDogMCxcbiAgICAgICAgICAgIGxuZzogMFxuICAgICAgICB9LFxuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAgIGFuaW1hdGlvbjogdGhpcy5nb29nbGVNYXBzRmFjdG9yeS5nZXRHb29nbGVNYXBzKCkuQW5pbWF0aW9uLkRST1BcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgY2lyY2xlT3B0aW9uczogQ2lyY2xlT3B0aW9ucyA9IHtcbiAgICAgICAgc3Ryb2tlQ29sb3I6ICcjNDQ4YWZmJyxcbiAgICAgICAgc3Ryb2tlT3BhY2l0eTogMC44LFxuICAgICAgICBzdHJva2VXZWlnaHQ6IDIsXG4gICAgICAgIGZpbGxDb2xvcjogJyM0NDhhZmYnLFxuICAgICAgICBmaWxsT3BhY2l0eTogMC4zNSxcbiAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIHJhZGl1czogNzBcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgcHJldmlvdXNNYXJrZXJJY29uOiBJY29uID0ge1xuICAgICAgICB1cmw6ICdodHRwOi8vY2RuLmJvbGRhZG1pbi5jb20uczMtd2Vic2l0ZS1ldS13ZXN0LTEuYW1hem9uYXdzLmNvbS9wcmV2aW91cy1tYXJrZXIucG5nJ1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBjdXJyZW50TWFya2VySWNvbjogSWNvbiA9IHtcbiAgICAgICAgdXJsOiAnaHR0cDovL2Nkbi5ib2xkYWRtaW4uY29tLnMzLXdlYnNpdGUtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20vY3VycmVudC1tYXJrZXIucG5nJ1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZ29vZ2xlTWFwc0ZhY3Rvcnk6IEdvb2dsZU1hcHNGYWN0b3J5LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgZ29vZ2xlTWFwc0J1aWxkZXI6IEFuZ3VsYXJHb29nbGVNYXBzQnVpbGRlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGdvb2dsZU1hcHNHZW9jb2RlcjogQW5ndWxhckdvb2dsZU1hcHNHZW9jb2RlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGV2ZW50UHVibGlzaGVyOiBFdmVudFB1Ymxpc2hlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGljb25SZWdpc3RyeTogSWNvblJlZ2lzdHJ5KSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRQdWJsaXNoZXIuc3Vic2NyaWJlKCdhZGRyZXNzUmV2ZXJzZUdlb2NvZGVkJywgKGFkZHJlc3M6IHN0cmluZykgPT4gdGhpcy5hZGRyZXNzID0gYWRkcmVzcylcbiAgICAgICAgdGhpcy5pY29uUmVnaXN0cnkucmVnaXN0ZXIoJ2V4cGFuZCcsICcuL2Fzc2V0cy9leHBhbmQuc3ZnJylcbiAgICAgICAgdGhpcy5pY29uUmVnaXN0cnkucmVnaXN0ZXIoJ2NvbGxhcHNlJywgJy4vYXNzZXRzL2NvbGxhcHNlLnN2ZycpXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZXZlbnRQdWJsaXNoZXIudW5zdWJzY3JpYmVBbGwoJ2FkZHJlc3NSZXZlcnNlR2VvY29kZWQnKVxuICAgIH1cblxuICAgIGNyZWF0ZU1hcEJ5TG9jYXRpb24oZm9jdXNMb2NhdGlvbjogTG9jYXRpb24pIHtcbiAgICAgICAgdGhpcy5nb29nbGVNYXBzR2VvY29kZXIucmV2ZXJzZUdlb2NvZGUoZm9jdXNMb2NhdGlvbi5jb29yZGluYXRlcywgKGFkZHJlc3M6IHN0cmluZykgPT4gdGhpcy5hZGRyZXNzID0gYWRkcmVzcylcbiAgICAgICAgdGhpcy5jaXJjbGVPcHRpb25zLnJhZGl1cyA9IGZvY3VzTG9jYXRpb24ucmFkaXVzSW5NZXRlcnNcbiAgICAgICAgdGhpcy5jaGFuZ2VNYXBDZW50ZXIoZm9jdXNMb2NhdGlvbi5jb29yZGluYXRlcylcbiAgICAgICAgdGhpcy5nb29nbGVNYXBzQnVpbGRlclxuICAgICAgICAgICAgLmNyZWF0ZU1hcCh0aGlzLm1hcE9wdGlvbnMpXG4gICAgICAgICAgICAuYWRkQ2VudGVyTWFya2VyKHRoaXMubWFya2VyT3B0aW9ucylcbiAgICAgICAgICAgIC5hZGRDaXJjbGUodGhpcy5jaXJjbGVPcHRpb25zKVxuICAgICAgICAgICAgLmJpbmRDaXJjbGVUb01hcmtlcigpXG4gICAgICAgICAgICAuYWRkU2VhcmNoQm94KClcbiAgICB9XG5cbiAgICBjcmVhdGVNYXBCeUFkZHJlc3MoYWRkcmVzczogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZ29vZ2xlTWFwc0dlb2NvZGVyLmdlb2NvZGUoYWRkcmVzcywgKGNvb3JkaW5hdGVzOiBDb29yZGluYXRlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlTWFwQ2VudGVyKGNvb3JkaW5hdGVzKVxuICAgICAgICAgICAgICAgIHRoaXMuZ29vZ2xlTWFwc0J1aWxkZXJcbiAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZU1hcCh0aGlzLm1hcE9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDZW50ZXJNYXJrZXIodGhpcy5tYXJrZXJPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAuYWRkQ2lyY2xlKHRoaXMuY2lyY2xlT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgLmJpbmRDaXJjbGVUb01hcmtlcigpXG4gICAgICAgICAgICAgICAgICAgIC5oaWRlTWFya2VyKClcbiAgICAgICAgICAgICAgICAgICAgLmhpZGVDaXJjbGUoKVxuICAgICAgICAgICAgICAgICAgICAuYWRkU2VhcmNoQm94KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgIH1cblxuICAgIG5vdGlmeU1hcFJlc2l6ZSgpIHtcbiAgICAgICAgdGhpcy5ldmVudFB1Ymxpc2hlci5ub3RpZnkoJ3Jlc2l6ZU1hcCcpXG4gICAgfVxuXG4gICAgYWRkVHJhdmVsUGF0aCh0aW1lc3RhbXBDb29yZGluYXRlc0xpc3Q6IEFycmF5PFRpbWVzdGFtcENvb3JkaW5hdGVzPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRpbWVzdGFtcENvb3JkaW5hdGVzTGlzdC5mb3JFYWNoKCh0aW1lc3RhbXBDb29yZGluYXRlczogVGltZXN0YW1wQ29vcmRpbmF0ZXMsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGljb24gPSBpbmRleCA9PT0gMCA/IHRoaXMuY3VycmVudE1hcmtlckljb24gOiB0aGlzLnByZXZpb3VzTWFya2VySWNvblxuICAgICAgICAgICAgY29uc3QgZGF0ZVRpbWUgPSBtb21lbnQudXRjKHRpbWVzdGFtcENvb3JkaW5hdGVzLnRpbWVzdGFtcCkuZm9ybWF0KCdZWVlZLk1NLkREIEhIOm1tJylcbiAgICAgICAgICAgIHRoaXMuZ29vZ2xlTWFwc0J1aWxkZXIuYWRkTWFya2VyKHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogdGhpcy5nb29nbGVNYXBzRmFjdG9yeS5jcmVhdGVMYXRMbmcodGltZXN0YW1wQ29vcmRpbmF0ZXMuY29vcmRpbmF0ZXMpLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBgTmFtZTogJHtuYW1lfSwgVGltZTogJHtkYXRlVGltZX1gLFxuICAgICAgICAgICAgICAgIGljb246IGljb25cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgbGF0TG5ncyA9IHRpbWVzdGFtcENvb3JkaW5hdGVzTGlzdC5tYXAodmFsdWUgPT4gdGhpcy5nb29nbGVNYXBzRmFjdG9yeS5jcmVhdGVMYXRMbmcodmFsdWUuY29vcmRpbmF0ZXMpKVxuICAgICAgICB0aGlzLmFkZFBvbHlsaW5lKGxhdExuZ3MsICcjJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnN1YnN0cigyLCA2KSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFBvbHlsaW5lKHBhdGg6IEFycmF5PExhdExuZz4sIGNvbG9yQ29kZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZ29vZ2xlTWFwc0J1aWxkZXIuYWRkUG9seWxpbmUoe1xuICAgICAgICAgICAgZ2VvZGVzaWM6IHRydWUsXG4gICAgICAgICAgICBzdHJva2VPcGFjaXR5OiAwLjgsXG4gICAgICAgICAgICBzdHJva2VXZWlnaHQ6IDEsXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgc3Ryb2tlQ29sb3I6IGNvbG9yQ29kZVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlTWFwQ2VudGVyKGNvb3JkaW5hdGVzOiBDb29yZGluYXRlcykge1xuICAgICAgICB0aGlzLm1hcE9wdGlvbnMuY2VudGVyID0ge2xhdDogY29vcmRpbmF0ZXMubGF0aXR1ZGUsIGxuZzogY29vcmRpbmF0ZXMubG9uZ2l0dWRlfVxuICAgIH1cbn1cbiJdfQ==