-
Glenn Vorhes authoredGlenn Vorhes authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
quickMapBase.js 29.74 KiB
/**
* Created by gavorhes on 12/15/2015.
*/
"use strict";
var provide_1 = require("../util/provide");
var ol = require("custom-ol");
var $ = require("jquery");
var nm = provide_1.default('olHelpers');
/**
* Sets up a map with some default parameters and initializes
* mapMove and mapPopup
*
* @param [options={}] config options
* @param [options.divId=map] map div id
* @param [options.center={}] center config object
* @param [options.center.x=-10018378] center x, web mercator x or lon
* @param [options.center.y=5574910] center y, web mercator y or lat
* @param [options.zoom=7] zoom level
* @param [options.minZoom=undefined] min zoom
* @param [options.maxZoom=undefined] max zoom
* @param [options.baseSwitcher=true] if add base map switcher
* @param [options.fullScreen=false] if add base map switcher
* @returns the ol map
*/
function quickMapBase(options) {
options = options || {};
options.divId = options.divId || 'map';
options.center = options.center || { x: -10018378, y: 5574910 };
options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;
options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;
options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;
var $mapDiv = $('#' + options.divId);
$mapDiv.css('position', 'relative');
var osmLayer = new ol.layer.Tile({ source: new ol.source.OSM() });
// let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});
var osmCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')";
var aerialCss = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')";
if (options.baseSwitcher) {
}
if (options.zoom < 0 || options.zoom > 28) {
throw 'zoom out of range';
}
if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {
var p = new ol.geom.Point([options.center.x, options.center.y]);
new ol.proj.Projection({ code: "EPSG:4326" });
p.transform(new ol.proj.Projection({ code: "EPSG:4326" }), new ol.proj.Projection({ code: "EPSG:3857" }));
var coordinates = p.getCoordinates();
options.center.x = coordinates[0];
options.center.y = coordinates[1];
}
var controls = ol.control.defaults({
attributionOptions: { collapsible: false }
});
var view = new ol.View({
center: [options.center.x, options.center.y],
zoom: options.zoom,
minZoom: options.minZoom,
maxZoom: options.maxZoom
});
var map = new ol.Map({
layers: [osmLayer],
target: options.divId,
controls: controls,
view: view
});
if (options.fullScreen) {
map.addControl(new ol.control.FullScreen({}));
}
return map;
}
exports.quickMapBase = quickMapBase;
nm.quickMapBase = quickMapBase;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = quickMapBase;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tNYXBCYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29sSGVscGVycy9xdWlja01hcEJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7O0FBRUgsMkNBQXNDO0FBQ3RDLDhCQUFpQztBQUNqQywwQkFBNkI7QUFDN0IsSUFBTSxFQUFFLEdBQUcsaUJBQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQVloQzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxzQkFBNkIsT0FBeUI7SUFDbEQsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFxQixDQUFDO0lBQzNDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7SUFDdkMsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUMsQ0FBQztJQUM5RCxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDbEUsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLE9BQU8sQ0FBQyxZQUFZLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzlGLE9BQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxPQUFPLENBQUMsVUFBVSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUd6RixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUVwQyxJQUFJLFFBQVEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFB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QUVELEVBQUUsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDOztBQUMvQixrQkFBZSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ3JlYXRlZCBieSBnYXZvcmhlcyBvbiAxMi8xNS8yMDE1LlxyXG4gKi9cclxuXHJcbmltcG9ydCBwcm92aWRlIGZyb20gJy4uL3V0aWwvcHJvdmlkZSc7XHJcbmltcG9ydCBvbCA9IHJlcXVpcmUoJ2N1c3RvbS1vbCcpO1xyXG5pbXBvcnQgJCA9IHJlcXVpcmUoJ2pxdWVyeScpO1xyXG5jb25zdCBubSA9IHByb3ZpZGUoJ29sSGVscGVycycpO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBxdWlja01hcE9wdGlvbnMge1xyXG4gICAgZGl2SWQ/OiBzdHJpbmc7XHJcbiAgICBjZW50ZXI/OiB7eDogbnVtYmVyLCB5OiBudW1iZXJ9O1xyXG4gICAgem9vbT86IG51bWJlcjtcclxuICAgIG1pblpvb20/OiBudW1iZXI7XHJcbiAgICBtYXhab29tPzogbnVtYmVyO1xyXG4gICAgYmFzZVN3aXRjaGVyPzogYm9vbGVhbjtcclxuICAgIGZ1bGxTY3JlZW4/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0cyB1cCBhIG1hcCB3aXRoIHNvbWUgZGVmYXVsdCBwYXJhbWV0ZXJzIGFuZCBpbml0aWFsaXplc1xyXG4gKiBtYXBNb3ZlIGFuZCBtYXBQb3B1cFxyXG4gKlxyXG4gKiBAcGFyYW0gW29wdGlvbnM9e31dIGNvbmZpZyBvcHRpb25zXHJcbiAqIEBwYXJhbSBbb3B0aW9ucy5kaXZJZD1tYXBdIG1hcCBkaXYgaWRcclxuICogQHBhcmFtIFtvcHRpb25zLmNlbnRlcj17fV0gY2VudGVyIGNvbmZpZyBvYmplY3RcclxuICogQHBhcmFtIFtvcHRpb25zLmNlbnRlci54PS0xMDAxODM3OF0gY2VudGVyIHgsIHdlYiBtZXJjYXRvciB4IG9yIGxvblxyXG4gKiBAcGFyYW0gW29wdGlvbnMuY2VudGVyLnk9NTU3NDkxMF0gY2VudGVyIHksIHdlYiBtZXJjYXRvciB5IG9yIGxhdFxyXG4gKiBAcGFyYW0gW29wdGlvbnMuem9vbT03XSB6b29tIGxldmVsXHJcbiAqIEBwYXJhbSBbb3B0aW9ucy5taW5ab29tPXVuZGVmaW5lZF0gbWluIHpvb21cclxuICogQHBhcmFtIFtvcHRpb25zLm1heFpvb209dW5kZWZpbmVkXSBtYXggem9vbVxyXG4gKiBAcGFyYW0gW29wdGlvbnMuYmFzZVN3aXRjaGVyPXRydWVdIGlmIGFkZCBiYXNlIG1hcCBzd2l0Y2hlclxyXG4gKiBAcGFyYW0gW29wdGlvbnMuZnVsbFNjcmVlbj1mYWxzZV0gaWYgYWRkIGJhc2UgbWFwIHN3aXRjaGVyXHJcbiAqIEByZXR1cm5zIHRoZSBvbCBtYXBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBxdWlja01hcEJhc2Uob3B0aW9ucz86IHF1aWNrTWFwT3B0aW9ucyk6IG9sLk1hcCB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fSBhcyBxdWlja01hcE9wdGlvbnM7XHJcbiAgICBvcHRpb25zLmRpdklkID0gb3B0aW9ucy5kaXZJZCB8fCAnbWFwJztcclxuICAgIG9wdGlvbnMuY2VudGVyID0gb3B0aW9ucy5jZW50ZXIgfHwge3g6IC0xMDAxODM3OCwgeTogNTU3NDkxMH07XHJcbiAgICBvcHRpb25zLnpvb20gPSB0eXBlb2Ygb3B0aW9ucy56b29tID09ICdudW1iZXInID8gb3B0aW9ucy56b29tIDogNztcclxuICAgIG9wdGlvbnMuYmFzZVN3aXRjaGVyID0gdHlwZW9mIG9wdGlvbnMuYmFzZVN3aXRjaGVyID09ICdib29sZWFuJyA/IG9wdGlvbnMuYmFzZVN3aXRjaGVyIDogdHJ1ZTtcclxuICAgIG9wdGlvbnMuZnVsbFNjcmVlbiA9IHR5cGVvZiBvcHRpb25zLmZ1bGxTY3JlZW4gPT0gJ2Jvb2xlYW4nID8gb3B0aW9ucy5mdWxsU2NyZWVuIDogZmFsc2U7XHJcblxyXG5cclxuICAgIGxldCAkbWFwRGl2ID0gJCgnIycgKyBvcHRpb25zLmRpdklkKTtcclxuICAgICRtYXBEaXYuY3NzKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xyXG5cclxuICAgIGxldCBvc21MYXllciA9IG5ldyBvbC5sYXllci5UaWxlKHtzb3VyY2U6IG5ldyBvbC5zb3VyY2UuT1NNKCl9KTtcclxuICAgIC8vIGxldCBzYXRMYXllciA9IG5ldyBvbC5sYXllci5UaWxlKHt2aXNpYmxlOiBmYWxzZSwgc291cmNlOiBuZXcgb2wuc291cmNlLk1hcFF1ZXN0KHtsYXllcjogJ3NhdCd9KX0pO1xyXG5cclxuICAgIGxldCBvc21Dc3MgPSBcInVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3Q0FNQUFBQmczQW0xQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBTUFVRXhVUlFBQUFEUTFORGs1T1VSRlJFdExTMUZIU0ZsWldHSlJWR0ppWVdkbVpXeHNiSFJtYVhCcGFuTjBjM1YwZEhwNWVYNStmSVZ6ZDRGM2VlVjBqdWQ1anVaOGs0YUhob21IaG95R2g1ZUdqNU9WbEppVmxaaVlsNXFabUp5ZG5LT1RsYUtabXFLZG5hT2lvYXFxcUt1enNiT3ZyclN5c0xhM3RiVzR1TG02dWIyN3ViKy92YkdYd2JDWndiQ2d4TEtseHJPcXlMU3R5Yk8zeXJTeHlyV3p6YlcyeTdhMXpiSzR5N1c2emJXOHk3NjB5clRBemJURnpyUEt6ckxPenJUSnpyVE96cjdDd2JYQzBMWEswTFRPMEwzSTBiUFF6N1RRejdQUzBiWFEwTG5SMGJyVzFielQwcjdVMDc3VjFMemMyZHFOcXRlVXNkeVhzY2FxdXVPSG5lYUdtdWVIbk9lSm51aUJsZWlLbitlTm9PaU9vT1dVcE9pUm8raVNwZWlVcGVxWXB1bWFxT21kclBTeW5lbWdydVNxdE9taXNPbWxzdXVxdGVxdXVPVzF2T3V4dSt1eHZPcTF2ZSt4dlBLMHB2VzNvL1c1cGZPNXF2UzdxZkN3dk1PdXdjMi93TmVueE55eXpOZS8wTnEzMU5xNTFkeTcyT3kzd091NHdPdSt4ZXk0d08rNnhPMit4ZlRBci9UQ3N2ZkZ0UEhMdnZUSnVNUER3TWZIeGNYS3ljM0R4TXZGeU12THlNM1B6Y0RWMDhEVjFNVFgxY2JZMXM3WDFzaloxc3JhMk1uZDNNN2IyYzdjMnRmSDF0bkIxdDdGMmQ3TTI5ZlgxdExZMXREZDJ0SGUzTlRmM05uUzE5cloxdHZhMk5uZjN0M2QyOHJoM3RYZzNObmgzdHpqMzkzazM5bmk0TjdrNE43bjV1WER5T2ZMeit6QXh1M0N5T3pFeWV6S3plREozZUxNM3V2UDB1M1AwZVBmMis3UjB1N1ExdS9VMCs3VTFlemMwKzdhMmUvZDIrM2YzdmJGenZMT3dmSE4wUFBRdy9UVXgvTFd5dkxZelBEUTFmUGUwdWJjNHZ2ZTR1SGgzK25oMysvaDJ1L2gzdkhqMnZIbDN1SG00ZVRuNHVEcDVlYm80K1hvNU9EcTZlYnE2T1R2NitubDQrL2o0TzdsNGU3bjV1anA0K25wNU96cTVlN3M1dXJ0Nk83dDZPcnc2dTd4NnUzeDd2UGo1UERsNGZEbzR2RHE1ZkR0NXZEdTZQRHY3UFR2NmZEeDZ2SHg3ZkgxN2ZYdzZmWHk3ZmIwNy9iejhmVDE4dm4zOHZyMzlmcjQ4L3I1OVByNitQMysrLy8rL2dBQUFMTlRTazBBQUFFQWRGSk9VLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL3dCVDl3Y2xBQUFBQ1hCSVdYTUFBQTdEQUFBT3d3SEhiNmhrQUFBQUdIUkZXSFJUYjJaMGQyRnlaUUJ3WVdsdWRDNXVaWFFnTkM0d0xqbHNNMzVPQUFBRk5FbEVRVlJJUzFWVkNaeFZVeGkvOWwwVUlVVDJiTW5ZNDNiVkkyYzBZMDFrU1dJYVMwajJKRXRrTjQxcGlvbVpyUFBLUTJhUTdKS0ltT1psbm0yNDkzVEp6RHVmdVUxWmkrdi9mZWUrbVovLzc5M3ZuUE9kN3p2ZmVzNXpEQkVaa0JCakFjSWpiK0lpb3RxZ2RoYXQ4QU1LMHZsNy9SOU43R2lXdHNocUlyK0VaNWdZS2lieVVzWFkxbC9tZkZwc3N2VWxXUTBGa1UzZ3k0K1JCLytrd1ljTzhwUlNubGRjT1UvcjJsQUhBUlN3azJPUmdFbU9kQzFFc3VSaVlTcU1Qd3dyb01JcmFaazVWMmZZSlFqQ0tmWnJSbWgzZ1NBWmkyaTRiN3dTeWxXdThFcVp3UzU5SmtGVWFXOTZKYk5TYytDRVVtdDRyb3J3dVptV2REYW9jK3VaRVR1UWxUQ1U1eFl6UjdtdVVuVlVWbytCY1JocmUvVndVcGFzZ0p3aEg3SmtZSVlBMHNOeGhtQ3dVSytsdzZ2Q0tCWmVodzAxZEVpeXc0UTRhRTBaNGFoRGhLYUZRc0duSjJCZ3FLb1RCc05qRnkwU2xXNndoUkFaVGRtOERCSm1rQlpoRGkxajR4SlFCazZ5d3JXVVR5bWFDeGFjOGxST2NkYXVSR3pRU050QTdFSFVZaFh5RXdoaGdqRlVxUnVPK3JhdWhGMWF3RnB6Q3Ntd1ViaklGQlIwdTFiS3R5R3B1bFcvSC9jVlZ6a3lHYUlXVElSOXBGQVY2R0syZ1BNWE1YOGdQazl6enhYZ0kxa2ltY0FsdEVZcitjamlvMWltbEtwRWE5ck9pcExtK3ArQ1o2QncvL3FkMS9mL08rR3dNeGJTTHB5b1pFY3dreWgyaklrcyszaG1kZDJqV1V3NHNjeE55c25IeFU3blNzcFRSY0pqQ1pHTDNJc2pzWUpNTWc1bXdneDdnYUlPTEJGQ29nQWdCQm9OYTl3K0RFNkkrQnM3RlRnd3dySmJIaldEZ3BZbzJLd3RCVGNZRUR1bG9DOWdlUXcrazJSR25QR3BUYU9scTdBUytZSUNVejREWlZhWDJUaU5EaHVZZlR0WTRnZUxpMElvQ20zWGNjd005aHg0a1UyOFN0UUVsakRzM1pFcEZHQSs4ZEt6TG1WOXltSXdGNUZPR24yR2RKTThLTEhESmJYeWlZVk1HOU1SVExpWEdHZzJRS2F4TTNraFBTUnJ3TTl6RUlhcmR4VTJ3L0VpQTBnT2VZS0h6RFIwVjcvUUdWM2xLSUE5a3RyREFyeE8zZ2RBK2s2U0tvQmlWd2NtN05qWmI5K0huenRnMjgyVHVIVlo5TE9JU0ZOdDlNZ3lDZXRaVmN6U3hueURibDE3UGVucTZtcXBnMUloUmFFTzJhVkxVTzQvcjE3SDh0VHY2ZjEzaDcxZGR1dlpJM1krdU1kV2tzTlNhdUxvdkp3NWhzcWlQSVV2dDBrdTcvaUJlVVIzc2tzbW9tWVd0UmJBamJpTGZ2MmxYOS9WN0xWRzR1WW5VWlhoUTdmMk9QQ1pFeDl3cllXVGNlUEVRcVBFTUw4cGw0bU1kci9qbFhsdkhpUmlKMitNU1RGWTRUVFNZU3R1dnoyUi9KWGgrUFBlR1htMDU1SiszL1lEV3VOdTNSM0RBclB1dHlnMFpneWtNVkRVOU5kbTIyK3dZYWxyMnJzZTQ4Q25zVElGY01uNzN2ZmhOcmt0eDFFVWNablB2NmFoM1l5NWNEVFJkQkVvR29CZWFoNzFkcUZ5alpESkxrV2szTjN2NHV1a3Rzc2pXcHpjaU1QeFFlSGo4bk1LemNHdUIwdEF5ekZoZENLT1lXdjRId09RVndJeExHOTlhNnV2SDNzSkN5TzNoK2s0RVorRzcreGo1ZjRYWGtzb2FHcmRNUnpTYzhBUkE4K2NkT3VrMng2ZmZmTk50NXgrUm8xb21QbHJUL0NRRGxjTmxweDROQklXWGhreDdZM1pwM29mTlI3VXY4OU9tL2JlVzBUTEl5bkh2M3ZzMVZzT0ZwU1dTWHZmdVBVZjlCclJGeXhnWGRIb0tKblFGZWdQT292dnp6NTludHJ6eWUyNDBpZzhVUTNsREkyVnF3YWdyS0lRY0xYTkZMM3dnbE4yT0hkQlE2L3ZJM2tFTkRWQndSYjNrMVh0Y3pGYmpXbjRFek1ZaTdDRjMxMjkrSlRZdVJTZHJHdVM5Mmc1ZHBxbjZxWG9KUXM1eG1MOHArV3Q0aExidDBteDJPTE5aUjJiYlB5OHpKTlFHRk0vZi9DZlhaZWtSWUZqR0NXaklKcE0rV2lDekdCUFdIaG95YUFzalJUL0IyR3k1eXpZSmt3VUFBQUFBRWxGVGtTdVFtQ0MnKVwiO1xyXG4gICAgbGV0IGFlcmlhbENzcyA9IFwidXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdDQU1BQUFCZzNBbTFBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFNQVVFeFVSUUFMQmdJTURRZ09Cd1FPRVFjVEJ3VVNDd29WREF3ZEJ3OFpEZ1VSRXdZVUdBWVpGUVlaR2drVEZRb1ZHUXNaRkF3WkhCTWVEaEliRkJFYkhBd1dJQTRiSVJFY0lRNGhDUXdqRnc0bEhCZ2tEQjhzRHhVaUV4SWlHaEFvR3hvaEZSc2hHUm9ySFFjcktRc2lJUXdtS2dvb0pBMHBLUTgxSnc4eUxSTWlJeEltS3hVckpSRXVLaHNsSkIwcklob29LUlV1TUJNeUxoa3dKaG96S2g0OEx4VXpNUk05TUJ3ek1pVXZGQ010R2lNd0Vpd3pGQ2d6SERJK0dTSXNJU2t2SlNReElpTTJMaVk1SmljK0x5azBKU28wS3k0OUpTczlLU1UxTlNNN05DczJOUzgrTkRNMUp6VTlMamc3SURKQ0hTMURMU05BTWl0Q01TeElPalJFSVRaTElEWkpLRGxGSWpwRkt6dEtKVDFMS3pKQk16cEhNRDFKTWpwS1BEMVJLamxRTkMxRFFqNVFRRUE4TUVKR0prQktKVUpOSzBsTExFSk1Na1ZNUEVwT05FTlNMVWRaTDBwVExrcGFMa1JVTWtSU1BFVlpNa3RVTTBwVk9rbFpNa2xaTkVwY05VMVpNazFaTlV4Zk1rNWROa3hjT1ZGVU0xUlVPRkpiTlZGWk9WTllQVkZkT1ZKZFBGVmFPVlZhUFZWZE9sVmRQVnBhTmxwZE8wcGhOMDFoT2xCaU4xTmhQRk5vUDFwaVBXRmJQbVJqUEVOT1FFdFBTVVJUUWtKVlMweFZRazFWU2t4YlFreGNTMGhlVVZGWFJGUmNRbEpmVEZ4ZVFscGVTMDVsUWsxa1NGUmpRVlJqU2xacFExdGtRbHhsU2x4cFJGMXJTVlZuVVZ0bFUxbGxYRjl0VTF4b1hseHdTbDlyYW1SZlFtSmxRMkZoU1dGbFNXRmxUbVZsU1dSbVRHRm9RV0ZwUldGc1JtVnBSV1Z0Um1Oc1NtdGxSR3BxUm1wc1MyQm1XR1JzVW1GclcycHRVbVp5UjJSeFRHcHhUV1Z5VTJSeVcyZDVWMnR6VW10MFdXMTVWRzE1V1hGdVRITnRWbkZ4VFhGNFQzaDBUbkp6VW5KMVhISjRWWE42V25wMFZIeDFXMzE1VlhwOFhHUjBZR3gwWUhWelpYSjBhSFI5WlhWK2FIbDlZSE9DWFhxQlhYZUNZSHlDWTNpRWFIeUlZbitKYVhxS2NZQjVXSU42WTRTQ1hvQ0RaSUdFYVlDSVpvT0xhNGlDYUltSmJJT09kWXVNY282T2VJdVZjcE9LYlpLUGM1YVFiNWVYZTV1Zmc2S2poQUFBQUFBQUFBQUFBQUFBQU9HQ2VRZ0FBQUVBZEZKT1UvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vd0JUOXdjbEFBQUFDWEJJV1hNQUFBN0RBQUFPd3dISGI2aGtBQUFBR0hSRldIUlRiMlowZDJGeVpRQndZV2x1ZEM1dVpYUWdOQzR3TGpsc00zNU9BQUFIODBsRVFWUklTeTFXYlhRVVZ4bSs2d3FuazNabXB4bDJGRzJFR2c5MkM4R0RsV3B0VlR3YSt1RjN4Y0ttRGZGekNVekRzSk5zdW5YaXBnbEpYSmJydEpXbXdaTlNuSEQzam9qUmdVSW0yVXVtSVowSlo3SkJ5ckFMYk1XVzBJQlc4YVJhNCtjZjc2VGVYM05tM3VjK3ovcys3L3Z1Z2w0ci9hTVRyVDRlMXBQVHFubm1KTm41QXlVelJuclJsZS9xRTMzZHN2ckJ0QVFWb3h0cFpOSzN6U3pZalVqdmlXTzJBZytSNzdkbDdXMzZuLzFFcDlLQlBHL1MrUHkwUGtqVS9nUEtRR3F3VEhyeWlXWUZBWFN2TWFpcnNpbzdTanlOc25DemgwcUtJbVY5LzdtaGZIUVp4MnlOMU8rN3JYVW0zM01VUGFib09rQUpIYW9JZFhmSmoyeFdleUQ4ak1GRVhrdkl1NXF6cFU5ODhnV0I1emwrR1Mrc0ZlNTV0ckVWUGRXWkIybWlxOGJCVmtORk8yUjBxbnJma2lYaGNKaHRETlhFNnRiVzk3L3M5TzkvN1pmVmh4ODYvQ3dyUk9wZnZ2eGJvTXFlTHN1cVByMWo0NHFFd0ROTU9CeGltVWlZb1U4c3c3QkMvYTdUNzJ1RW55SkRsR3haOUtjZ2xaUnl1cXFydi90U1pFcmdPSTROZ1JCVEl3OUVtSEFvRkdaWm5wNmFHYUoyR1R4ZnhZczhrS1ZVUWg3V0I1aFFlQzNMc1V4b3hWS1cxNGwzQlgyV2NvVVlQaVp5TExlOHRlWitpdVQ0R0dodlY1S3BLV2tweXp4RXIyTVpnUTF4ZFJqZlJCb0grMms2bElIaktUSFBQQm84Q1NKSVNxcXE0d0dHT2NXeWxJR2xndmdOWDFHZDh2RjVmK0lVSXdiMzBuZytHZzJRZkJSSU12eTBqRzhTVmtZbzROMHp2VVhWUnp0YkovTDZ4TDdsVVpFWEJFSGt1WnFsUzZnRUFVZ0tKdXJuaEZ0ZnBBQ09ZZDhiL2hWYkpQcXdpNDRhNktBMHNQVmpJaS9TSXl4YjN1OEtsQUowUzhqUlZncmxXK25WSFBkcmhpWEN4dTQyZDg2Qnlrc0RjODBQM01rSkZCRlE4SG8xbFFlZ3BXSlJXRkdzRHNSd3d2N3BJeXZ1UVcwWmtyWDZORFZGYnFjdmFRSTh2YnlxenQ1QUFScnNiS3g1eWhRRUdzK3dQTzU2Yk9LKzByY3dNck9La3BVYlpXWXhWMDRVZVpadi9jQktGaFJMNlFkdjl5NExmRURBNy90aGc3dFRtdjFhNS9Hbk8wd2wwZFFnODB3Z2xaYUhVbXhSdmp3QUhPZnlOMG14cnBxTFVwY2pzSzNOSFlNbzRSMW82ZWhvMlp5SWIyRm9lT0MzSUxLOGtaMkhRTU91V3l3R1hVa0pCQ2VUYllGUzAreW0xaDIvNlVnbXZucnZLWVpadElFWEdmNzVDMmNJQXA1TEhOZDcxeDd1UG9UamFrcldIOWUzS0ZwYWF0alV2SlV5c0Z3MEtyTE1ZTVcybFRnNFBlVVF4NmtKRUFMdnhYRW1DZFZ5UExIdENTakJoYzAxWENqSWdhZnhvdStQRTZLQzFkaHhTQ3dvQkNjK040UDNidE04NHBtZFNTakpuak8vbnZZNExRZlZ5ejUvSSt2Nkl3alVPTWp5K01WQ3hJYkt1cFRKYUVrdHA3Y1RLVTQyUHZqaDJtLzhjU3BDNmFQc2FYL01IU3VVUUxWVnNJYTRSVVRzL3IvQlZBZXhOZGpkbnNORzdqL3JWOTN4aGVMTXpLbkZyUGVURVFjaEN5Q2NLYjI1YUFJbjdsckFlcnRyWnd5TlhNOE42emZXckZvM2QyU21PRWNGODN4L3IrT09GZ3JBSFlXRjdjRUxqaFY3VVFvLzZXQUlVVmw5SkZsOGEvL0haNjZWcGJZM0k5UUtacVBydTc3bEEraU9XQUlyMGhLeEhDbW1yMG90aFN5ZUlsNXkzcXQ0eFQ4Z1NOcktFWm96czhFbHM2N3Jnc0xPWit5Z3p3TWZidE5ob2JmZ3pwRXlHbno3aHRQdHpVaTZQdU9vajdLMFdGL01YaVVGeHdHYWpSRDFoallYSFhJOXA0MDZxT3lpbnA1L3RpV2NESFkwakl1NG42NFFmcTdrbGlCMmdlbWFnOVFiT2lhMFBiYkRNYmQ0M1NIdXZ4RnhyQW9jeGluczdNWDVLcWJlMVFpeEtCeG9WNC8vUGZBZ0dDdStSbG00U3ZaaXp5REgrMHJlREhwOTJpTzBCdVgzYkNmSXRsMFBFd3ZZTHFwd1hHMk1IbEdzUTRTOHBNSlp2MUpHbUhpRW9IUURkT2p3bVZsRVAvbkU5QURLakk4eExJME9PR0lUZnkwU2JlRy9DMmpLVURHU2xEaE05STNJcEs5aXVwNlhuYlJOQzd5cXVlTnNKQ0NJaVh6ZFFobmFHTis0NnVtbkVkeTVVNVViVUo0OExGTTlHa0pvOEJkRE9pQVo3WklRYktoWUxNcXZoVTJ3bU54akVBc1MyQUk3eTRuV0Y2NGR1ZVBiazdZVjN6dkFWTEVNRDlBeEpSTmEzS0RVaWJWN0Rqbmt1cHJNRVlqU2NGTmNhUjJjZVAydTlSLzVrMTA1MlJ5bWU1cGhBRlJzd2xIakF1ZGlQNGRPeTdDYXhMZ2RKaDl2VWxVMTcwMi8rTFBhMVU5ZnZQaTlxbEE0WEVVQkpjM2RGbHBzUjQ1N0lEbDFpUHFMcDdvODFOUWd5VjE5aVlVMzh1VGl2OTc1UGQzU2l3UWNzR2p4K3Y0LzZmbDVUN0VPT01UQ3RwYkt4ZmVtc1FxLzNvbFFaY21pbkFEQUFJMGN1R0xIYUhPRnhidUd2UmsvWjl1N0NVTHFvVlI2TkUweXgxYXZqMzBvUmhjL2pXVW9JQUxHeGt6MGRnMURsOWlhSTdMcU9PWEtzWEpGd2ppdUVBaTcwSnJhMm5XMVBMMDh6TEJoWnNNQUJwVzVjc0k3VFBmZXc5aXBGS2NuNWsxaSsxS3lDV0tqQzNXLzhkRjFkNjY2K1JhYWJCVlRGVEhhY2pvb2pCTkRoME5EeGsrSVBUbHdmcUprV3BibnBGSFhJYkxibXB4RVEzZmYvWjBnL21hdVhzb2xuOXdEUmp5L05Ic1FGdzNQNnZXdVRKNDMvK0ZacmsyY3ZBRlJpcENLZGZEOXkyK3BqUmo3OHMwS2RDVURLSnZkVjkxQ2huZ1YzOFQyMFRNK2dnaGpwSmFQbHBGcjJ4YkV6NWc0QS9OR3Q1ck53ZHdtWUdlZWVNWEJTTEhIVUljKzZSc29qUkg5VlRVbTMvbUxmLzY0YjQ3MFh2b3hvVEtobE1CUTJqTUV6bzJQanhkR01wcG1uMVJNMjRiV0ZKcWFRdjRCY3VKYTJTYW03Wm9rcTFsZENzejA2TkNCSHJod3FWUVlwZkZqNDJOWmV4ejFFVzlTUi9rVDU4bkVlUUtKYjJmUFhqanAwdS9ZVWt3SEVnTGVPbmYybk91ZjFUUlRNMDJDTEtMVFB5NjAveDFDQ3p0cW43RXYrQmRzQzNtKzMwZGVjUXZXL3dCTlR3VStDZlVRQVFBQUFBQkpSVTVFcmtKZ2dnPT0nKVwiO1xyXG5cclxuICAgIGlmIChvcHRpb25zLmJhc2VTd2l0Y2hlcikge1xyXG4gICAgICAgIC8vICBsZXQgc3dpdGNoZXJDb250ZW50ID0gJzxkaXYgY2xhc3M9XCJiYXNlLW1hcC1zd2l0Y2hlclwiIHRpdGxlPVwiVG9nZ2xlIEJhc2UgTGF5ZXJcIiBzdHlsZT1cIic7XHJcbiAgICAgICAgLy8gIHN3aXRjaGVyQ29udGVudCArPSAncG9zaXRpb246IGFic29sdXRlOyB0b3A6IDcwcHg7IGxlZnQ6IDRweDsgYm9yZGVyOiBzb2xpZCBibGFjayAxcHg7ICc7XHJcbiAgICAgICAgLy8gIHN3aXRjaGVyQ29udGVudCArPSBgaGVpZ2h0OiA1MHB4OyB3aWR0aDogNTBweDsgei1pbmRleDogMTA7IGJvcmRlci1yYWRpdXM6IDRweDsgYmFja2dyb3VuZDogJHthZXJpYWxDc3N9O2A7XHJcbiAgICAgICAgLy8gIHN3aXRjaGVyQ29udGVudCArPSAnXCI+PC9kaXY+JztcclxuICAgICAgICAvLyAgJG1hcERpdi5hcHBlbmQoc3dpdGNoZXJDb250ZW50KTtcclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vICRtYXBEaXYuZmluZCgnLmJhc2UtbWFwLXN3aXRjaGVyJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gICAgICBcInVzZSBzdHJpY3RcIjtcclxuICAgICAgICAvLyAgICAgIG9zbUxheWVyLnNldFZpc2libGUoIW9zbUxheWVyLmdldFZpc2libGUoKSk7XHJcbiAgICAgICAgLy8gICAgICBzYXRMYXllci5zZXRWaXNpYmxlKCFzYXRMYXllci5nZXRWaXNpYmxlKCkpO1xyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gICAgICBpZiAob3NtTGF5ZXIuZ2V0VmlzaWJsZSgpKXtcclxuICAgICAgICAvLyAgICAgICAgICAkKHRoaXMpLmNzcygnYmFja2dyb3VuZCcsIGFlcmlhbENzcyk7XHJcbiAgICAgICAgLy8gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICAgICAgICQodGhpcykuY3NzKCdiYWNrZ3JvdW5kJywgb3NtQ3NzKTtcclxuICAgICAgICAvLyAgICAgIH1cclxuICAgICAgICAvLyAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuem9vbSA8IDAgfHwgb3B0aW9ucy56b29tID4gMjgpIHtcclxuICAgICAgICB0aHJvdyAnem9vbSBvdXQgb2YgcmFuZ2UnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zLmNlbnRlci54ID49IC0xODAgJiYgb3B0aW9ucy5jZW50ZXIueCA8PSAxODAgJiYgb3B0aW9ucy5jZW50ZXIueSA+PSAtOTAgJiYgb3B0aW9ucy5jZW50ZXIueSA8PSA5MCkge1xyXG4gICAgICAgIGxldCBwID0gbmV3IG9sLmdlb20uUG9pbnQoW29wdGlvbnMuY2VudGVyLngsIG9wdGlvbnMuY2VudGVyLnldKTtcclxuICAgICAgICBuZXcgb2wucHJvai5Qcm9qZWN0aW9uKHtjb2RlOiBcIkVQU0c6NDMyNlwifSk7XHJcblxyXG4gICAgICAgIHAudHJhbnNmb3JtKG5ldyBvbC5wcm9qLlByb2plY3Rpb24oe2NvZGU6IFwiRVBTRzo0MzI2XCJ9KSwgbmV3IG9sLnByb2ouUHJvamVjdGlvbih7Y29kZTogXCJFUFNHOjM4NTdcIn0pKTtcclxuICAgICAgICBsZXQgY29vcmRpbmF0ZXMgPSBwLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgb3B0aW9ucy5jZW50ZXIueCA9IGNvb3JkaW5hdGVzWzBdO1xyXG4gICAgICAgIG9wdGlvbnMuY2VudGVyLnkgPSBjb29yZGluYXRlc1sxXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250cm9scyA9IG9sLmNvbnRyb2wuZGVmYXVsdHMoe1xyXG4gICAgICAgICAgICBhdHRyaWJ1dGlvbk9wdGlvbnM6IHtjb2xsYXBzaWJsZTogZmFsc2V9XHJcbiAgICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB2aWV3ID0gbmV3IG9sLlZpZXcoe1xyXG4gICAgICAgIGNlbnRlcjogW29wdGlvbnMuY2VudGVyLngsIG9wdGlvbnMuY2VudGVyLnldLFxyXG4gICAgICAgIHpvb206IG9wdGlvbnMuem9vbSxcclxuICAgICAgICBtaW5ab29tOiBvcHRpb25zLm1pblpvb20sXHJcbiAgICAgICAgbWF4Wm9vbTogb3B0aW9ucy5tYXhab29tXHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgbWFwID0gbmV3IG9sLk1hcCh7XHJcbiAgICAgICAgbGF5ZXJzOiBbb3NtTGF5ZXJdLFxyXG4gICAgICAgIHRhcmdldDogb3B0aW9ucy5kaXZJZCxcclxuICAgICAgICBjb250cm9sczogY29udHJvbHMsXHJcbiAgICAgICAgdmlldzogdmlld1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuZnVsbFNjcmVlbikge1xyXG4gICAgICAgIG1hcC5hZGRDb250cm9sKG5ldyBvbC5jb250cm9sLkZ1bGxTY3JlZW4oe30pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWFwO1xyXG59XHJcblxyXG5ubS5xdWlja01hcEJhc2UgPSBxdWlja01hcEJhc2U7XHJcbmV4cG9ydCBkZWZhdWx0IHF1aWNrTWFwQmFzZTtcclxuIl19