ng-cw-v12
Version:
Angular UI Component Library
187 lines • 27.3 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
export class LocalService {
constructor() {
this.x_PI = 3.14159265358979324 * 3000.0 / 180.0;
this.PI = 3.1415926535897932384626;
this.a = 6378245.0;
this.ee = 0.00669342162296594323;
}
/**
* 百度坐标系 (BD-09) 与火星坐标系 (GCJ-02) 的转换
* 即百度 转 谷歌、高德
* @param lng 经度
* @param lat 纬度
* @returns [lng, lat]
*/
bd09togcj02(lng, lat) {
var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
var x = lng - 0.0065;
var y = lat - 0.006;
var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
var gg_lng = z * Math.cos(theta);
var gg_lat = z * Math.sin(theta);
return [gg_lng, gg_lat];
}
/**
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
* 即谷歌、高德 转 百度
* @param lng 经度
* @param lat 纬度
* @returns [lng, lat]
*/
gcj02tobd09(lng, lat) {
var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * this.x_PI);
var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * this.x_PI);
var bd_lng = z * Math.cos(theta) + 0.0065;
var bd_lat = z * Math.sin(theta) + 0.006;
return [bd_lng, bd_lat];
}
/**
* WGS84转火星坐标系 (GCJ-02)
* 即WGS84 转 谷歌、高德
* @param lng 经度
* @param lat 纬度
* @returns [lng, lat]
*/
wgs84togcj02(lng, lat) {
if (this.out_of_china(lng, lat)) {
return [lng, lat];
}
else {
var dlat = this.transformlat(lng - 105.0, lat - 35.0);
var dlng = this.transformlng(lng - 105.0, lat - 35.0);
var radlat = lat / 180.0 * this.PI;
var magic = Math.sin(radlat);
magic = 1 - this.ee * magic * magic;
var sqrtmagic = Math.sqrt(magic);
dlat = (dlat * 180.0) / ((this.a * (1 - this.ee)) / (magic * sqrtmagic) * this.PI);
dlng = (dlng * 180.0) / (this.a / sqrtmagic * Math.cos(radlat) * this.PI);
var mglat = lat + dlat;
var mglng = lng + dlng;
return [mglng, mglat];
}
}
/**
* 火星坐标系 (GCJ-02)转WGS84
* 即谷歌、高德 转 WGS84
* @param lng 经度
* @param lat 纬度
* @returns [lng, lat]
*/
gcj02towgs84(lng, lat) {
if (this.out_of_china(lng, lat)) {
return [lng, lat];
}
else {
var dlat = this.transformlat(lng - 105.0, lat - 35.0);
var dlng = this.transformlng(lng - 105.0, lat - 35.0);
var radlat = lat / 180.0 * this.PI;
var magic = Math.sin(radlat);
magic = 1 - this.ee * magic * magic;
var sqrtmagic = Math.sqrt(magic);
dlat = (dlat * 180.0) / ((this.a * (1 - this.ee)) / (magic * sqrtmagic) * this.PI);
dlng = (dlng * 180.0) / (this.a / sqrtmagic * Math.cos(radlat) * this.PI);
let mglat = lat + dlat;
let mglng = lng + dlng;
return [lng * 2 - mglng, lat * 2 - mglat];
}
}
transformlat(lng, lat) {
var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
ret += (20.0 * Math.sin(6.0 * lng * this.PI) + 20.0 * Math.sin(2.0 * lng * this.PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(lat * this.PI) + 40.0 * Math.sin(lat / 3.0 * this.PI)) * 2.0 / 3.0;
ret += (160.0 * Math.sin(lat / 12.0 * this.PI) + 320 * Math.sin(lat * this.PI / 30.0)) * 2.0 / 3.0;
return ret;
}
transformlng(lng, lat) {
var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
ret += (20.0 * Math.sin(6.0 * lng * this.PI) + 20.0 * Math.sin(2.0 * lng * this.PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(lng * this.PI) + 40.0 * Math.sin(lng / 3.0 * this.PI)) * 2.0 / 3.0;
ret += (150.0 * Math.sin(lng / 12.0 * this.PI) + 300.0 * Math.sin(lng / 30.0 * this.PI)) * 2.0 / 3.0;
return ret;
}
/**
* 判断是否在国内,不在国内则不做偏移
*/
out_of_china(lng, lat) {
return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
}
/**
* jsonp封装
* @param obj \{url: '', success: ()=> {}}
*/
jsonpFunction(obj) {
// 创建一个script标签;
var script = document.createElement("script");
// 给函数起名字,定义为全局函数;
var fnName = "jsonp" + new Date().getTime();
var timeout = obj.timeout || 10000; // 默认10秒超时
var called = false; // 标记callback是否已被调用
var timer = null;
// 包装success回调,标记已调用并清除超时
window[fnName] = function () {
called = true;
if (timer) {
clearTimeout(timer);
timer = null;
}
if (obj.success) {
obj.success.apply(null, arguments);
}
};
// 清理函数
var cleanup = function () {
if (timer) {
clearTimeout(timer);
timer = null;
}
if (script.parentNode) {
document.head.removeChild(script);
}
window[fnName] = undefined;
};
// 改变src,添加到head中
if (obj.url.includes('?')) {
script.src = obj.url + "&callback=" + fnName;
}
else {
script.src = obj.url + "?callback=" + fnName;
}
// 把script标签添加到head标签中,就会发送src的请求了
document.head.appendChild(script);
// 代码执行完毕,把script标签删除
script.onload = function () {
// 延迟清理,给callback一点执行时间
setTimeout(function () {
cleanup();
}, 100);
};
// script加载失败时调用error回调
script.onerror = function () {
cleanup();
if (obj.error) {
obj.error({ message: 'JSONP请求失败', url: obj.url });
}
};
// 超时保底:如果超时后callback仍未被调用,触发error
timer = setTimeout(function () {
if (!called) {
cleanup();
if (obj.error) {
obj.error({ message: 'JSONP请求超时', url: obj.url });
}
}
}, timeout);
}
}
LocalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: LocalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
LocalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: LocalService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: LocalService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvcG9pL2xvY2FsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLFlBQVk7SUFDckI7UUFHUSxTQUFJLEdBQUcsbUJBQW1CLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUM1QyxPQUFFLEdBQUcsd0JBQXdCLENBQUM7UUFDOUIsTUFBQyxHQUFHLFNBQVMsQ0FBQztRQUNkLE9BQUUsR0FBRyxzQkFBc0IsQ0FBQztJQUxwQyxDQUFDO0lBT0Q7Ozs7OztPQU1HO0lBQ0gsV0FBVyxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ2hDLElBQUksSUFBSSxHQUFHLG1CQUFtQixHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDaEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUM3RCxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFD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QyxHQUFXLEVBQUUsR0FBVztRQUN6QyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNqRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUMzRixHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDbkcsT0FBTyxHQUFHLENBQUE7SUFDZCxDQUFDO0lBRU8sWUFBWSxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQ3pDLElBQUksR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2pHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQzNGLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNyRyxPQUFPLEdBQUcsQ0FBQTtJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVksQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUN6QyxPQUFPLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxNQUFNLElBQUksR0FBRyxH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SHhCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbFNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB4X1BJID0gMy4xNDE1OTI2NTM1ODk3OTMyNCAqIDMwMDAuMCAvIDE4MC4wO1xyXG4gICAgcHJpdmF0ZSBQSSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjtcclxuICAgIHByaXZhdGUgYSA9IDYzNzgyNDUuMDtcclxuICAgIHByaXZhdGUgZWUgPSAwLjAwNjY5MzQyMTYyMjk2NTk0MzIzO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICog55m+5bqm5Z2Q5qCH57O7IChCRC0wOSkg5LiO54Gr5pif5Z2Q5qCH57O7IChHQ0otMDIpIOeahOi9rOaNolxyXG4gICAgICog5Y2z55m+5bqmIOi9rCDosLfmrYzjgIHpq5jlvrdcclxuICAgICAqIEBwYXJhbSBsbmcg57uP5bqmXHJcbiAgICAgKiBAcGFyYW0gbGF0IOe6rOW6plxyXG4gICAgICogQHJldHVybnMgW2xuZywgbGF0XVxyXG4gICAgICovXHJcbiAgICBiZDA5dG9nY2owMihsbmc6IG51bWJlciwgbGF0OiBudW1iZXIpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgdmFyIHhfcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzI0ICogMzAwMC4wIC8gMTgwLjA7XHJcbiAgICAgICAgdmFyIHggPSBsbmcgLSAwLjAwNjU7XHJcbiAgICAgICAgdmFyIHkgPSBsYXQgLSAwLjAwNjtcclxuICAgICAgICB2YXIgeiA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5KSAtIDAuMDAwMDIgKiBNYXRoLnNpbih5ICogeF9waSk7XHJcbiAgICAgICAgdmFyIHRoZXRhID0gTWF0aC5hdGFuMih5LCB4KSAtIDAuMDAwMDAzICogTWF0aC5jb3MoeCAqIHhfcGkpO1xyXG4gICAgICAgIHZhciBnZ19sbmcgPSB6ICogTWF0aC5jb3ModGhldGEpO1xyXG4gICAgICAgIHZhciBnZ19sYXQgPSB6ICogTWF0aC5zaW4odGhldGEpO1xyXG4gICAgICAgIHJldHVybiBbZ2dfbG5nLCBnZ19sYXRdXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDngavmmJ/lnZDmoIfns7sgKEdDSi0wMikg5LiO55m+5bqm5Z2Q5qCH57O7IChCRC0wOSkg55qE6L2s5o2iXHJcbiAgICAgKiDljbPosLfmrYzjgIHpq5jlvrcg6L2sIOeZvuW6plxyXG4gICAgICogQHBhcmFtIGxuZyDnu4/luqZcclxuICAgICAqIEBwYXJhbSBsYXQg57qs5bqmXHJcbiAgICAgKiBAcmV0dXJucyBbbG5nLCBsYXRdXHJcbiAgICAgKi9cclxuICAgIGdjajAydG9iZDA5KGxuZzogbnVtYmVyLCBsYXQ6IG51bWJlcik6IG51bWJlcltdIHtcclxuICAgICAgICB2YXIgeiA9IE1hdGguc3FydChsbmcgKiBsbmcgKyBsYXQgKiBsYXQpICsgMC4wMDAwMiAqIE1hdGguc2luKGxhdCAqIHRoaXMueF9QSSk7XHJcbiAgICAgICAgdmFyIHRoZXRhID0gTWF0aC5hdGFuMihsYXQsIGxuZykgKyAwLjAwMDAwMyAqIE1hdGguY29zKGxuZyAqIHRoaXMueF9QSSk7XHJcbiAgICAgICAgdmFyIGJkX2xuZyA9IHogKiBNYXRoLmNvcyh0aGV0YSkgKyAwLjAwNjU7XHJcbiAgICAgICAgdmFyIGJkX2xhdCA9IHogKiBNYXRoLnNpbih0aGV0YSkgKyAwLjAwNjtcclxuICAgICAgICByZXR1cm4gW2JkX2xuZywgYmRfbGF0XVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogV0dTODTovazngavmmJ/lnZDmoIfns7sgKEdDSi0wMilcclxuICAgICAqIOWNs1dHUzg0IOi9rCDosLfmrYzjgIHpq5jlvrdcclxuICAgICAqIEBwYXJhbSBsbmcg57uP5bqmXHJcbiAgICAgKiBAcGFyYW0gbGF0IOe6rOW6plxyXG4gICAgICogQHJldHVybnMgW2xuZywgbGF0XVxyXG4gICAgICovXHJcbiAgICB3Z3M4NHRvZ2NqMDIobG5nOiBudW1iZXIsIGxhdDogbnVtYmVyKTogbnVtYmVyW10ge1xyXG4gICAgICAgIGlmICh0aGlzLm91dF9vZl9jaGluYShsbmcsIGxhdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtsbmcsIGxhdF1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBkbGF0ID0gdGhpcy50cmFuc2Zvcm1sYXQobG5nIC0gMTA1LjAsIGxhdCAtIDM1LjApO1xyXG4gICAgICAgICAgICB2YXIgZGxuZyA9IHRoaXMudHJhbnNmb3JtbG5nKGxuZyAtIDEwNS4wLCBsYXQgLSAzNS4wKTtcclxuICAgICAgICAgICAgdmFyIHJhZGxhdCA9IGxhdCAvIDE4MC4wICogdGhpcy5QSTtcclxuICAgICAgICAgICAgdmFyIG1hZ2ljID0gTWF0aC5zaW4ocmFkbGF0KTtcclxuICAgICAgICAgICAgbWFnaWMgPSAxIC0gdGhpcy5lZSAqIG1hZ2ljICogbWFnaWM7XHJcbiAgICAgICAgICAgIHZhciBzcXJ0bWFnaWMgPSBNYXRoLnNxcnQobWFnaWMpO1xyXG4gICAgICAgICAgICBkbGF0ID0gKGRsYXQgKiAxODAuMCkgLyAoKHRoaXMuYSAqICgxIC0gdGhpcy5lZSkpIC8gKG1hZ2ljICogc3FydG1hZ2ljKSAqIHRoaXMuUEkpO1xyXG4gICAgICAgICAgICBkbG5nID0gKGRsbmcgKiAxODAuMCkgLyAodGhpcy5hIC8gc3FydG1hZ2ljICogTWF0aC5jb3MocmFkbGF0KSAqIHRoaXMuUEkpO1xyXG4gICAgICAgICAgICB2YXIgbWdsYXQgPSBsYXQgKyBkbGF0O1xyXG4gICAgICAgICAgICB2YXIgbWdsbmcgPSBsbmcgKyBkbG5nO1xyXG4gICAgICAgICAgICByZXR1cm4gW21nbG5nLCBtZ2xhdF1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDngavmmJ/lnZDmoIfns7sgKEdDSi0wMinovaxXR1M4NFxyXG4gICAgICog5Y2z6LC35q2M44CB6auY5b63IOi9rCBXR1M4NFxyXG4gICAgICogQHBhcmFtIGxuZyDnu4/luqZcclxuICAgICAqIEBwYXJhbSBsYXQg57qs5bqmXHJcbiAgICAgKiBAcmV0dXJucyBbbG5nLCBsYXRdXHJcbiAgICAgKi9cclxuICAgIGdjajAydG93Z3M4NChsbmc6IG51bWJlciwgbGF0OiBudW1iZXIpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3V0X29mX2NoaW5hKGxuZywgbGF0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gW2xuZywgbGF0XVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGRsYXQgPSB0aGlzLnRyYW5zZm9ybWxhdChsbmcgLSAxMDUuMCwgbGF0IC0gMzUuMCk7XHJcbiAgICAgICAgICAgIHZhciBkbG5nID0gdGhpcy50cmFuc2Zvcm1sbmcobG5nIC0gMTA1LjAsIGxhdCAtIDM1LjApO1xyXG4gICAgICAgICAgICB2YXIgcmFkbGF0ID0gbGF0IC8gMTgwLjAgKiB0aGlzLlBJO1xyXG4gICAgICAgICAgICB2YXIgbWFnaWMgPSBNYXRoLnNpbihyYWRsYXQpO1xyXG4gICAgICAgICAgICBtYWdpYyA9IDEgLSB0aGlzLmVlICogbWFnaWMgKiBtYWdpYztcclxuICAgICAgICAgICAgdmFyIHNxcnRtYWdpYyA9IE1hdGguc3FydChtYWdpYyk7XHJcbiAgICAgICAgICAgIGRsYXQgPSAoZGxhdCAqIDE4MC4wKSAvICgodGhpcy5hICogKDEgLSB0aGlzLmVlKSkgLyAobWFnaWMgKiBzcXJ0bWFnaWMpICogdGhpcy5QSSk7XHJcbiAgICAgICAgICAgIGRsbmcgPSAoZGxuZyAqIDE4MC4wKSAvICh0aGlzLmEgLyBzcXJ0bWFnaWMgKiBNYXRoLmNvcyhyYWRsYXQpICogdGhpcy5QSSk7XHJcbiAgICAgICAgICAgIGxldCBtZ2xhdCA9IGxhdCArIGRsYXQ7XHJcbiAgICAgICAgICAgIGxldCBtZ2xuZyA9IGxuZyArIGRsbmc7XHJcbiAgICAgICAgICAgIHJldHVybiBbbG5nICogMiAtIG1nbG5nLCBsYXQgKiAyIC0gbWdsYXRdXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdHJhbnNmb3JtbGF0KGxuZzogbnVtYmVyLCBsYXQ6IG51bWJlcikge1xyXG4gICAgICAgIHZhciByZXQgPSAtMTAwLjAgKyAyLjAgKiBsbmcgKyAzLjAgKiBsYXQgKyAwLjIgKiBsYXQgKiBsYXQgKyAwLjEgKiBsbmcgKiBsYXQgKyAwLjIgKiBNYXRoLnNxcnQoTWF0aC5hYnMobG5nKSk7XHJcbiAgICAgICAgcmV0ICs9ICgyMC4wICogTWF0aC5zaW4oNi4wICogbG5nICogdGhpcy5QSSkgKyAyMC4wICogTWF0aC5zaW4oMi4wICogbG5nICogdGhpcy5QSSkpICogMi4wIC8gMy4wO1xyXG4gICAgICAgIHJldCArPSAoMjAuMCAqIE1hdGguc2luKGxhdCAqIHRoaXMuUEkpICsgNDAuMCAqIE1hdGguc2luKGxhdCAvIDMuMCAqIHRoaXMuUEkpKSAqIDIuMCAvIDMuMDtcclxuICAgICAgICByZXQgKz0gKDE2MC4wICogTWF0aC5zaW4obGF0IC8gMTIuMCAqIHRoaXMuUEkpICsgMzIwICogTWF0aC5zaW4obGF0ICogdGhpcy5QSSAvIDMwLjApKSAqIDIuMCAvIDMuMDtcclxuICAgICAgICByZXR1cm4gcmV0XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1sbmcobG5nOiBudW1iZXIsIGxhdDogbnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIHJldCA9IDMwMC4wICsgbG5nICsgMi4wICogbGF0ICsgMC4xICogbG5nICogbG5nICsgMC4xICogbG5nICogbGF0ICsgMC4xICogTWF0aC5zcXJ0KE1hdGguYWJzKGxuZykpO1xyXG4gICAgICAgIHJldCArPSAoMjAuMCAqIE1hdGguc2luKDYuMCAqIGxuZyAqIHRoaXMuUEkpICsgMjAuMCAqIE1hdGguc2luKDIuMCAqIGxuZyAqIHRoaXMuUEkpKSAqIDIuMCAvIDMuMDtcclxuICAgICAgICByZXQgKz0gKDIwLjAgKiBNYXRoLnNpbihsbmcgKiB0aGlzLlBJKSArIDQwLjAgKiBNYXRoLnNpbihsbmcgLyAzLjAgKiB0aGlzLlBJKSkgKiAyLjAgLyAzLjA7XHJcbiAgICAgICAgcmV0ICs9ICgxNTAuMCAqIE1hdGguc2luKGxuZyAvIDEyLjAgKiB0aGlzLlBJKSArIDMwMC4wICogTWF0aC5zaW4obG5nIC8gMzAuMCAqIHRoaXMuUEkpKSAqIDIuMCAvIDMuMDtcclxuICAgICAgICByZXR1cm4gcmV0XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKTmlq3mmK/lkKblnKjlm73lhoXvvIzkuI3lnKjlm73lhoXliJnkuI3lgZrlgY/np7tcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvdXRfb2ZfY2hpbmEobG5nOiBudW1iZXIsIGxhdDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIChsbmcgPCA3Mi4wMDQgfHwgbG5nID4gMTM3LjgzNDcpIHx8ICgobGF0IDwgMC44MjkzIHx8IGxhdCA+IDU1LjgyNzEpIHx8IGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGpzb25w5bCB6KOFXHJcbiAgICAgKiBAcGFyYW0gb2JqIFxce3VybDogJycsIHN1Y2Nlc3M6ICgpPT4ge319XHJcbiAgICAgKi9cclxuICAgIGpzb25wRnVuY3Rpb24ob2JqOiBhbnkpIHtcclxuICAgICAgICAvLyDliJvlu7rkuIDkuKpzY3JpcHTmoIfnrb47XHJcbiAgICAgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XHJcbiAgICAgICAgLy8g57uZ5Ye95pWw6LW35ZCN5a2X77yM5a6a5LmJ5Li65YWo5bGA5Ye95pWw77ybXHJcbiAgICAgICAgdmFyIGZuTmFtZTogYW55ID0gXCJqc29ucFwiICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgdmFyIHRpbWVvdXQgPSBvYmoudGltZW91dCB8fCAxMDAwMDsgLy8g6buY6K6kMTDnp5LotoXml7ZcclxuICAgICAgICB2YXIgY2FsbGVkID0gZmFsc2U7IC8vIOagh+iusGNhbGxiYWNr5piv5ZCm5bey6KKr6LCD55SoXHJcbiAgICAgICAgdmFyIHRpbWVyOiBhbnkgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyDljIXoo4VzdWNjZXNz5Zue6LCD77yM5qCH6K6w5bey6LCD55So5bm25riF6Zmk6LaF5pe2XHJcbiAgICAgICAgKHdpbmRvdyBhcyBhbnkpW2ZuTmFtZV0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aW1lcikgeyBjbGVhclRpbWVvdXQodGltZXIpOyB0aW1lciA9IG51bGw7IH1cclxuICAgICAgICAgICAgaWYgKG9iai5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBvYmouc3VjY2Vzcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8g5riF55CG5Ye95pWwXHJcbiAgICAgICAgdmFyIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aW1lcikgeyBjbGVhclRpbWVvdXQodGltZXIpOyB0aW1lciA9IG51bGw7IH1cclxuICAgICAgICAgICAgaWYgKHNjcmlwdC5wYXJlbnROb2RlKSB7IGRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTsgfVxyXG4gICAgICAgICAgICAod2luZG93W2ZuTmFtZV0gYXMgYW55KSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyDmlLnlj5hzcmMs5re75Yqg5YiwaGVhZOS4rVxyXG4gICAgICAgIGlmIChvYmoudXJsLmluY2x1ZGVzKCc/JykpIHtcclxuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IG9iai51cmwgKyBcIiZjYWxsYmFjaz1cIiArIGZuTmFtZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gb2JqLnVybCArIFwiP2NhbGxiYWNrPVwiICsgZm5OYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDmiopzY3JpcHTmoIfnrb7mt7vliqDliLBoZWFk5qCH562+5Lit77yM5bCx5Lya5Y+R6YCBc3Jj55qE6K+35rGC5LqGXHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgICAgIC8vIOS7o+eggeaJp+ihjOWujOavle+8jOaKinNjcmlwdOagh+etvuWIoOmZpFxyXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vIOW7tui/n+a4heeQhu+8jOe7mWNhbGxiYWNr5LiA54K55omn6KGM5pe26Ze0XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY2xlYW51cCgpO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzY3JpcHTliqDovb3lpLHotKXml7bosIPnlKhlcnJvcuWbnuiwg1xyXG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjbGVhbnVwKCk7XHJcbiAgICAgICAgICAgIGlmIChvYmouZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIG9iai5lcnJvcih7IG1lc3NhZ2U6ICdKU09OUOivt+axguWksei0pScsIHVybDogb2JqLnVybCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDotoXml7bkv53lupXvvJrlpoLmnpzotoXml7blkI5jYWxsYmFja+S7jeacquiiq+iwg+eUqO+8jOinpuWPkWVycm9yXHJcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKCFjYWxsZWQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFudXAoKTtcclxuICAgICAgICAgICAgICAgIGlmIChvYmouZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmouZXJyb3IoeyBtZXNzYWdlOiAnSlNPTlDor7fmsYLotoXml7YnLCB1cmw6IG9iai51cmwgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgIH1cclxufVxyXG5cclxuIl19