@kepler.gl/utils 3.1.0-alpha.3 → 3.1.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.FIELD_DISPLAY_FORMAT = void 0;
7
+ exports.MIN_LONGITUDE = exports.MIN_LATITUDE = exports.MAX_LONGITUDE = exports.MAX_LATITUDE = exports.FIELD_DISPLAY_FORMAT = void 0;
8
8
  exports.applyCustomFormat = applyCustomFormat;
9
9
  exports.applyDefaultFormat = applyDefaultFormat;
10
10
  exports.applyValueMap = applyValueMap;
@@ -30,6 +30,9 @@ exports.roundToFour = roundToFour;
30
30
  exports.roundValToStep = roundValToStep;
31
31
  exports.timeToUnixMilli = timeToUnixMilli;
32
32
  exports.unique = unique;
33
+ exports.validateCoordinate = validateCoordinate;
34
+ exports.validateLatitude = validateLatitude;
35
+ exports.validateLongitude = validateLongitude;
33
36
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
34
37
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
35
38
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
@@ -42,6 +45,56 @@ var _plot = require("./plot");
42
45
  var _utils = require("./utils");
43
46
  var _FIELD_DISPLAY_FORMAT; // SPDX-License-Identifier: MIT
44
47
  // Copyright contributors to the kepler.gl project
48
+ // We need threat latitude differently otherwise marcator project view throws
49
+ // a projection matrix error
50
+ // Uncaught Error: Pixel project matrix not invertible
51
+ // at WebMercatorViewport16.Viewport6 (viewport.js:81:13)
52
+ var MAX_LATITUDE = exports.MAX_LATITUDE = 89.9;
53
+ var MIN_LATITUDE = exports.MIN_LATITUDE = -89.9;
54
+ var MAX_LONGITUDE = exports.MAX_LONGITUDE = 180;
55
+ var MIN_LONGITUDE = exports.MIN_LONGITUDE = -180;
56
+
57
+ /**
58
+ * Validates a latitude value.
59
+ * Ensures that the latitude is within the defined minimum and maximum latitude bounds.
60
+ * If the value is out of bounds, it returns the nearest bound value.
61
+ * @param latitude - The latitude value to validate.
62
+ * @returns The validated latitude value.
63
+ */
64
+ function validateLatitude(latitude) {
65
+ return validateCoordinate(latitude !== null && latitude !== void 0 ? latitude : 0, MIN_LATITUDE, MAX_LATITUDE);
66
+ }
67
+
68
+ /**
69
+ * Validates a longitude value.
70
+ * Ensures that the longitude is within the defined minimum and maximum longitude bounds.
71
+ * If the value is out of bounds, it returns the nearest bound value.
72
+ * @param longitude - The longitude value to validate.
73
+ * @returns The validated longitude value.
74
+ */
75
+ function validateLongitude(longitude) {
76
+ return validateCoordinate(longitude !== null && longitude !== void 0 ? longitude : 0, MIN_LONGITUDE, MAX_LONGITUDE);
77
+ }
78
+
79
+ /**
80
+ * Validates a coordinate value.
81
+ * Ensures that the value is within the specified minimum and maximum bounds.
82
+ * If the value is out of bounds, it returns the nearest bound value.
83
+ * @param value - The coordinate value to validate.
84
+ * @param minValue - The minimum bound for the value.
85
+ * @param maxValue - The maximum bound for the value.
86
+ * @returns The validated coordinate value.
87
+ */
88
+ function validateCoordinate(value, minValue, maxValue) {
89
+ if (value <= minValue) {
90
+ return minValue;
91
+ }
92
+ if (value >= maxValue) {
93
+ return maxValue;
94
+ }
95
+ return value;
96
+ }
97
+
45
98
  /**
46
99
  * simple getting unique values of an array
47
100
  *
@@ -433,4 +486,4 @@ function datetimeFormatter(timezone) {
433
486
  };
434
487
  };
435
488
  }
436
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZDNGb3JtYXQiLCJfbW9tZW50VGltZXpvbmUiLCJfY29uc3RhbnRzIiwiX2NvbW1vblV0aWxzIiwiX3Bsb3QiLCJfdXRpbHMiLCJfRklFTERfRElTUExBWV9GT1JNQVQiLCJ1bmlxdWUiLCJ2YWx1ZXMiLCJyZXN1bHRzIiwidW5pcXVlU2V0IiwiU2V0IiwiZm9yRWFjaCIsInYiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJwdXNoIiwiZ2V0TGF0TG5nQm91bmRzIiwicG9pbnRzIiwiaWR4IiwibGltaXQiLCJsYXRzIiwibWFwIiwiZCIsIk51bWJlciIsIkFycmF5IiwiaXNBcnJheSIsImZpbHRlciIsImlzRmluaXRlIiwic29ydCIsIm51bWJlclNvcnQiLCJsZW5ndGgiLCJNYXRoIiwibWF4IiwibWluIiwiY2xhbXAiLCJfcmVmIiwiX3JlZjIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2YWwiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJnZXRTYW1wbGVEYXRhIiwiZGF0YSIsInNhbXBsZVNpemUiLCJnZXRWYWx1ZSIsInNhbXBsZVN0ZXAiLCJmbG9vciIsIm91dHB1dCIsImkiLCJ0aW1lVG9Vbml4TWlsbGkiLCJ2YWx1ZSIsImZvcm1hdCIsIm1vbWVudCIsInV0YyIsInZhbHVlT2YiLCJEYXRlIiwiaXNOdW1iZXIiLCJoYXNPd25Qcm9wZXJ0eSIsIm9iaiIsInByb3AiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJjYWxsIiwiYSIsImIiLCJnZXRTb3J0aW5nRnVuY3Rpb24iLCJmaWVsZFR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJyZWFsIiwiaW50ZWdlciIsInRpbWVzdGFtcCIsInByZWNpc2VSb3VuZCIsIm51bSIsImRlY2ltYWxzIiwidCIsInBvdyIsInJvdW5kIiwic2lnbiIsInRvRml4ZWQiLCJyb3VuZFRvRm91ciIsImNvbmNhdCIsImdldFJvdW5kaW5nRGVjaW1hbEZyb21TdGVwIiwic3RlcCIsImlzTmFOIiwiYXNzZXJ0Iiwic3RlcFN0ciIsInRvU3RyaW5nIiwic3BsaXRFeHBvbmVudGlhbCIsInNwbGl0IiwiY29lZmZaZXJvIiwiY29lZmZEZWNpbWFsIiwicGFyc2VJbnQiLCJzcGxpdFplcm8iLCJub3JtYWxpemVTbGlkZXJWYWx1ZSIsIm1pblZhbHVlIiwibWFya3MiLCJzbmFwVG9NYXJrcyIsInJvdW5kVmFsVG9TdGVwIiwiZGVjaW1hbCIsInN0ZXBzIiwicmVtYWluIiwiY2xvc2VzdCIsInJvdW5kZWQiLCJkZWZhdWx0Rm9ybWF0dGVyIiwiZXhwb3J0cyIsIlN0cmluZyIsImZsb2F0Rm9ybWF0dGVyIiwiRklFTERfRElTUExBWV9GT1JNQVQiLCJfZGVmaW5lUHJvcGVydHkyIiwic3RyaW5nIiwiZGF0ZSIsImdlb2pzb24iLCJpc1BsYWluT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImdlb2Fycm93Iiwib2JqZWN0IiwiYXJyYXkiLCJoMyIsInBhcnNlRmllbGRWYWx1ZSIsInR5cGUiLCJnZXRGb3JtYXR0ZXIiLCJmaWVsZCIsInRvb2x0aXBGb3JtYXQiLCJUT09MVElQX0ZPUk1BVFMiLCJmaW5kIiwiZiIsIlRPT0xUSVBfS0VZIiwiYXBwbHlEZWZhdWx0Rm9ybWF0IiwiYXBwbHlDdXN0b21Gb3JtYXQiLCJnZXRDb2x1bW5Gb3JtYXR0ZXIiLCJkaXNwbGF5Rm9ybWF0IiwiX3R5cGVvZjIiLCJhcHBseVZhbHVlTWFwIiwiVE9PTFRJUF9GT1JNQVRfVFlQRVMiLCJERUNJTUFMIiwiZDNGb3JtYXQiLCJEQVRFIiwiREFURV9USU1FIiwiZGF0ZXRpbWVGb3JtYXR0ZXIiLCJQRVJDRU5UQUdFIiwiREVDSU1BTF9ERUNJTUFMX0ZJWEVEXzIiLCJCT09MRUFOIiwiZ2V0Qm9vbGVhbkZvcm1hdHRlciIsImZvcm1hdExhcmdlTnVtYmVyIiwibiIsImZvcm1hdE51bWJlciIsInRyYW5zZm9ybWF0aW9uIiwiWSIsIloiLCJFIiwiUCIsIlQiLCJHIiwiTSIsImsiLCJoIiwiZGEiLCJjIiwibSIsIs68IiwicCIsInoiLCJ5IiwicmV2ZXJzZUZvcm1hdE51bWJlciIsInN0ciIsInJldHVyblZhbHVlIiwic3RyTnVtIiwidHJpbSIsInJlcGxhY2UiLCJlbnRyaWVzIiwiaW5jbHVkZXMiLCJwYXJzZUZsb2F0IiwidGltZXpvbmUiLCJ0cyIsInR6Il0sInNvdXJjZXMiOlsiLi4vc3JjL2RhdGEtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtmb3JtYXQgYXMgZDNGb3JtYXR9IGZyb20gJ2QzLWZvcm1hdCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5cbmltcG9ydCB7XG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgVE9PTFRJUF9GT1JNQVRTLFxuICBUT09MVElQX0ZPUk1BVF9UWVBFUyxcbiAgVE9PTFRJUF9LRVksXG4gIFRvb2x0aXBGb3JtYXRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7RmllbGQsIE1pbGxpc2Vjb25kfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtzbmFwVG9NYXJrc30gZnJvbSAnLi9wbG90JztcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIEZpZWxkRm9ybWF0dGVyID0gKHZhbHVlOiBhbnkpID0+IHN0cmluZztcblxuLyoqXG4gKiBzaW1wbGUgZ2V0dGluZyB1bmlxdWUgdmFsdWVzIG9mIGFuIGFycmF5XG4gKlxuICogQHBhcmFtIHZhbHVlc1xuICogQHJldHVybnMgdW5pcXVlIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlPFQ+KHZhbHVlczogVFtdKSB7XG4gIGNvbnN0IHJlc3VsdHM6IFRbXSA9IFtdO1xuICBjb25zdCB1bmlxdWVTZXQgPSBuZXcgU2V0KHZhbHVlcyk7XG4gIHVuaXF1ZVNldC5mb3JFYWNoKHYgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodikpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh2KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhdExuZ0JvdW5kcyhcbiAgcG9pbnRzOiBudW1iZXJbXVtdLFxuICBpZHg6IG51bWJlcixcbiAgbGltaXQ6IFtudW1iZXIsIG51bWJlcl1cbik6IFtudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgY29uc3QgbGF0cyA9IHBvaW50c1xuICAgIC5tYXAoZCA9PiBOdW1iZXIoQXJyYXkuaXNBcnJheShkKSkgJiYgZFtpZHhdKVxuICAgIC5maWx0ZXIoTnVtYmVyLmlzRmluaXRlKVxuICAgIC5zb3J0KG51bWJlclNvcnQpO1xuXG4gIGlmICghbGF0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGNsYW1wIHRvIGxpbWl0XG4gIHJldHVybiBbTWF0aC5tYXgobGF0c1swXSwgbGltaXRbMF0pLCBNYXRoLm1pbihsYXRzW2xhdHMubGVuZ3RoIC0gMV0sIGxpbWl0WzFdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChbbWluLCBtYXhdOiBbbnVtYmVyLCBudW1iZXJdLCB2YWwgPSAwKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbCA8PSBtaW4gPyBtaW4gOiB2YWwgPj0gbWF4ID8gbWF4IDogdmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FtcGxlRGF0YShkYXRhLCBzYW1wbGVTaXplID0gNTAwLCBnZXRWYWx1ZSA9IGQgPT4gZCkge1xuICBjb25zdCBzYW1wbGVTdGVwID0gTWF0aC5tYXgoTWF0aC5mbG9vcihkYXRhLmxlbmd0aCAvIHNhbXBsZVNpemUpLCAxKTtcbiAgY29uc3Qgb3V0cHV0OiBhbnlbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IHNhbXBsZVN0ZXApIHtcbiAgICBvdXRwdXQucHVzaChnZXRWYWx1ZShkYXRhW2ldKSk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZGlmZmVyZW50IHRpbWUgZm9ybWF0IHRvIHVuaXggbWlsbGlzZWNvbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVG9Vbml4TWlsbGkodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IERhdGUsIGZvcm1hdDogc3RyaW5nKTogTWlsbGlzZWNvbmQgfCBudWxsIHtcbiAgaWYgKG5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG1vbWVudC51dGModmFsdWUsIGZvcm1hdCkudmFsdWVPZigpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGZvcm1hdCA9PT0gJ3gnID8gdmFsdWUgKiAxMDAwIDogdmFsdWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgZCBpcyBhIG51bWJlciwgdGhpcyBmaWx0ZXJlZCBvdXQgTmFOIGFzIHdlbGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKGQ6IHVua25vd24pOiBkIGlzIG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoZCk7XG59XG5cbi8qKlxuICogd2hldGhlciBvYmplY3QgaGFzIHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcFxuICogQHJldHVybnMge2Jvb2xlYW59IC0geWVzIG9yIG5vXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eTxYIGV4dGVuZHMgb2JqZWN0LCBZIGV4dGVuZHMgUHJvcGVydHlLZXk+KFxuICBvYmo6IFgsXG4gIHByb3A6IFlcbik6IG9iaiBpcyBYICYgUmVjb3JkPFksIHVua25vd24+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyU29ydChhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBhIC0gYjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvcnRpbmdGdW5jdGlvbihmaWVsZFR5cGU6IHN0cmluZyk6IHR5cGVvZiBudW1iZXJTb3J0IHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgcmV0dXJuIG51bWJlclNvcnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiByb3VuZCBudW1iZXIgd2l0aCBleGFjdCBudW1iZXIgb2YgZGVjaW1hbHNcbiAqIHJldHVybiBhcyBhIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlY2lzZVJvdW5kKG51bTogbnVtYmVyLCBkZWNpbWFsczogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgdCA9IE1hdGgucG93KDEwLCBkZWNpbWFscyk7XG4gIHJldHVybiAoXG4gICAgTWF0aC5yb3VuZChcbiAgICAgIG51bSAqIHQgKyAoZGVjaW1hbHMgPiAwID8gMSA6IDApICogKE1hdGguc2lnbihudW0pICogKDEwIC8gTWF0aC5wb3coMTAwLCBkZWNpbWFscykpKVxuICAgICkgLyB0XG4gICkudG9GaXhlZChkZWNpbWFscyk7XG59XG5cbi8qKlxuICogcm91bmQgYSBnaXZpbmcgbnVtYmVyIGF0IG1vc3QgNCBkZWNpbWFsIHBsYWNlc1xuICogZS5nLiAxMCAtPiAxMCwgMS4xMjM0NSAtPiAxLjIzNDUsIDIuMCAtPiAyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFRvRm91cihudW06IG51bWJlcik6IG51bWJlciB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIE51bWJlcihgJHtNYXRoLnJvdW5kKGAke251bX1lKzRgKX1lLTRgKTtcbn1cbi8qKlxuICogZ2V0IG51bWJlciBvZiBkZWNpbWFscyB0byByb3VuZCB0byBmb3Igc2xpZGVyIGZyb20gc3RlcFxuICogQHBhcmFtIHN0ZXBcbiAqIEByZXR1cm5zLSBudW1iZXIgb2YgZGVjaW1hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91bmRpbmdEZWNpbWFsRnJvbVN0ZXAoc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGlzTmFOKHN0ZXApKSB7XG4gICAgYXNzZXJ0KCdzdGVwIGlzIG5vdCBhIG51bWJlcicpO1xuICAgIGFzc2VydChzdGVwKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHIgPSBzdGVwLnRvU3RyaW5nKCk7XG5cbiAgLy8gaW4gY2FzZSB0aGUgc3RlcCBpcyBhIHZlcnkgc21hbGwgbnVtYmVyIGUuZy4gMWUtNywgcmV0dXJuIGRlY2ltYWwgZS5nLiA3IGRpcmVjdGx5XG4gIGNvbnN0IHNwbGl0RXhwb25lbnRpYWwgPSBzdGVwU3RyLnNwbGl0KCdlLScpO1xuICBpZiAoc3BsaXRFeHBvbmVudGlhbC5sZW5ndGggPT09IDIpIHtcbiAgICBjb25zdCBjb2VmZlplcm8gPSBzcGxpdEV4cG9uZW50aWFsWzBdLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgY29lZmZEZWNpbWFsID0gY29lZmZaZXJvLmxlbmd0aCA9PT0gMSA/IDAgOiBjb2VmZlplcm9bMV0ubGVuZ3RoO1xuICAgIHJldHVybiBwYXJzZUludChzcGxpdEV4cG9uZW50aWFsWzFdLCAxMCkgKyBjb2VmZkRlY2ltYWw7XG4gIH1cblxuICBjb25zdCBzcGxpdFplcm8gPSBzdGVwU3RyLnNwbGl0KCcuJyk7XG4gIGlmIChzcGxpdFplcm8ubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHNwbGl0WmVyb1sxXS5sZW5ndGg7XG59XG5cbi8qKlxuICogSWYgbWFya3MgaXMgcHJvdmlkZWQsIHNuYXAgdG8gbWFya3MsIGlmIG5vdCBub3JtYWxpemUgdG8gc3RlcFxuICogQHBhcmFtIHZhbFxuICogQHBhcmFtIG1pblZhbHVlXG4gKiBAcGFyYW0gc3RlcFxuICogQHBhcmFtIG1hcmtzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTbGlkZXJWYWx1ZShcbiAgdmFsOiBudW1iZXIsXG4gIG1pblZhbHVlOiBudW1iZXIsXG4gIHN0ZXA6IG51bWJlcixcbiAgbWFya3M/OiBudW1iZXJbXSB8IG51bGxcbik6IG51bWJlciB7XG4gIGlmIChtYXJrcyAmJiBtYXJrcy5sZW5ndGgpIHtcbiAgICAvLyBVc2UgaW4gc2xpZGVyLCBnaXZlbiBhIG51bWJlciBhbmQgYW4gYXJyYXkgb2YgbnVtYmVycywgcmV0dXJuIHRoZSBuZWFycyBudW1iZXIgZnJvbSB0aGUgYXJyYXlcbiAgICByZXR1cm4gc25hcFRvTWFya3ModmFsLCBtYXJrcyk7XG4gIH1cblxuICByZXR1cm4gcm91bmRWYWxUb1N0ZXAobWluVmFsdWUsIHN0ZXAsIHZhbCk7XG59XG5cbi8qKlxuICogcm91bmQgdGhlIHZhbHVlIHRvIHN0ZXAgZm9yIHRoZSBzbGlkZXJcbiAqIEBwYXJhbSBtaW5WYWx1ZVxuICogQHBhcmFtIHN0ZXBcbiAqIEBwYXJhbSB2YWxcbiAqIEByZXR1cm5zIC0gcm91bmRlZCBudW1iZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVmFsVG9TdGVwKG1pblZhbHVlOiBudW1iZXIsIHN0ZXA6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoIWlzTnVtYmVyKHN0ZXApIHx8ICFpc051bWJlcihtaW5WYWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgY29uc3QgZGVjaW1hbCA9IGdldFJvdW5kaW5nRGVjaW1hbEZyb21TdGVwKHN0ZXApO1xuICBjb25zdCBzdGVwcyA9IE1hdGguZmxvb3IoKHZhbCAtIG1pblZhbHVlKSAvIHN0ZXApO1xuICBsZXQgcmVtYWluID0gdmFsIC0gKHN0ZXBzICogc3RlcCArIG1pblZhbHVlKTtcblxuICAvLyBoYXMgdG8gcm91bmQgYmVjYXVzZSBqYXZhc2NyaXB0IHR1cm5zIDAuMSBpbnRvIDAuOTk5OTk5OTk5OTk5OTk4N1xuICByZW1haW4gPSBOdW1iZXIocHJlY2lzZVJvdW5kKHJlbWFpbiwgOCkpO1xuXG4gIGxldCBjbG9zZXN0OiBudW1iZXI7XG4gIGlmIChyZW1haW4gPT09IDApIHtcbiAgICBjbG9zZXN0ID0gdmFsO1xuICB9IGVsc2UgaWYgKHJlbWFpbiA8IHN0ZXAgLyAyKSB7XG4gICAgY2xvc2VzdCA9IHN0ZXBzICogc3RlcCArIG1pblZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNsb3Nlc3QgPSAoc3RlcHMgKyAxKSAqIHN0ZXAgKyBtaW5WYWx1ZTtcbiAgfVxuXG4gIC8vIHByZWNpc2Ugcm91bmQgcmV0dXJuIGEgc3RyaW5nIHJvdW5kZWQgdG8gdGhlIGRlZmluZWQgZGVjaW1hbFxuICBjb25zdCByb3VuZGVkID0gcHJlY2lzZVJvdW5kKGNsb3Nlc3QsIGRlY2ltYWwpO1xuXG4gIHJldHVybiBOdW1iZXIocm91bmRlZCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3JtYXQgYmFzZWQgb24gZmllbGQgYW5kIGZvcm1hdCBvcHRpb25zXG4gKiBVc2VkIGluIHJlbmRlciB0b29sdGlwIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0Rm9ybWF0dGVyOiBGaWVsZEZvcm1hdHRlciA9IHYgPT4gKG5vdE51bGxvclVuZGVmaW5lZCh2KSA/IFN0cmluZyh2KSA6ICcnKTtcblxuZXhwb3J0IGNvbnN0IGZsb2F0Rm9ybWF0dGVyID0gdiA9PiAoaXNOdW1iZXIodikgPyBTdHJpbmcocm91bmRUb0ZvdXIodikpIDogJycpO1xuXG5leHBvcnQgY29uc3QgRklFTERfRElTUExBWV9GT1JNQVQ6IHtcbiAgW2tleTogc3RyaW5nXTogRmllbGRGb3JtYXR0ZXI7XG59ID0ge1xuICBbQUxMX0ZJRUxEX1RZUEVTLnN0cmluZ106IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5ib29sZWFuXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5kYXRlXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5nZW9qc29uXTogZCA9PlxuICAgIHR5cGVvZiBkID09PSAnc3RyaW5nJ1xuICAgICAgPyBkXG4gICAgICA6IGlzUGxhaW5PYmplY3QoZClcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkoZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShkKVxuICAgICAgPyBgWyR7U3RyaW5nKGQpfV1gXG4gICAgICA6ICcnLFxuICBbQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93XTogZCA9PiBkLFxuICBbQUxMX0ZJRUxEX1RZUEVTLm9iamVjdF06IEpTT04uc3RyaW5naWZ5LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmFycmF5XTogSlNPTi5zdHJpbmdpZnksXG4gIFtBTExfRklFTERfVFlQRVMuaDNdOiBkZWZhdWx0Rm9ybWF0dGVyXG59O1xuXG4vKipcbiAqIFBhcnNlIGZpZWxkIHZhbHVlIGFuZCB0eXBlIGFuZCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlRmllbGRWYWx1ZSA9ICh2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIEZJRUxEX0RJU1BMQVlfRk9STUFUW3R5cGVdID8gRklFTERfRElTUExBWV9GT1JNQVRbdHlwZV0odmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3JtYXQgYmFzZWQgb24gZmllbGQgYW5kIGZvcm1hdCBvcHRpb25zXG4gKiBVc2VkIGluIHJlbmRlciB0b29sdGlwIHZhbHVlXG4gKiBAcGFyYW0gZm9ybWF0XG4gKiBAcGFyYW0gZmllbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdHRlcihcbiAgZm9ybWF0OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbCxcbiAgZmllbGQ/OiBGaWVsZFxuKTogRmllbGRGb3JtYXR0ZXIge1xuICBpZiAoIWZvcm1hdCkge1xuICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG4gIGNvbnN0IHRvb2x0aXBGb3JtYXQgPSBPYmplY3QudmFsdWVzKFRPT0xUSVBfRk9STUFUUykuZmluZChmID0+IGZbVE9PTFRJUF9LRVldID09PSBmb3JtYXQpO1xuXG4gIGlmICh0b29sdGlwRm9ybWF0KSB7XG4gICAgcmV0dXJuIGFwcGx5RGVmYXVsdEZvcm1hdCh0b29sdGlwRm9ybWF0IGFzIFRvb2x0aXBGb3JtYXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnICYmIGZpZWxkKSB7XG4gICAgcmV0dXJuIGFwcGx5Q3VzdG9tRm9ybWF0KGZvcm1hdCwgZmllbGQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5Gb3JtYXR0ZXIoXG4gIGZpZWxkOiBQaWNrPEZpZWxkLCAndHlwZSc+ICYgUGFydGlhbDxQaWNrPEZpZWxkLCAnZm9ybWF0JyB8ICdkaXNwbGF5Rm9ybWF0Jz4+XG4pOiBGaWVsZEZvcm1hdHRlciB7XG4gIGNvbnN0IHtmb3JtYXQsIGRpc3BsYXlGb3JtYXR9ID0gZmllbGQ7XG5cbiAgaWYgKCFmb3JtYXQgJiYgIWRpc3BsYXlGb3JtYXQpIHtcbiAgICByZXR1cm4gRklFTERfRElTUExBWV9GT1JNQVRbZmllbGQudHlwZV07XG4gIH1cbiAgY29uc3QgdG9vbHRpcEZvcm1hdCA9IE9iamVjdC52YWx1ZXMoVE9PTFRJUF9GT1JNQVRTKS5maW5kKGYgPT4gZltUT09MVElQX0tFWV0gPT09IGRpc3BsYXlGb3JtYXQpO1xuXG4gIGlmICh0b29sdGlwRm9ybWF0KSB7XG4gICAgcmV0dXJuIGFwcGx5RGVmYXVsdEZvcm1hdCh0b29sdGlwRm9ybWF0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGlzcGxheUZvcm1hdCA9PT0gJ3N0cmluZycgJiYgZmllbGQpIHtcbiAgICByZXR1cm4gYXBwbHlDdXN0b21Gb3JtYXQoZGlzcGxheUZvcm1hdCwgZmllbGQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkaXNwbGF5Rm9ybWF0ID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBhcHBseVZhbHVlTWFwKGRpc3BsYXlGb3JtYXQpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVZhbHVlTWFwKGZvcm1hdCkge1xuICByZXR1cm4gdiA9PiBmb3JtYXRbdl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseURlZmF1bHRGb3JtYXQodG9vbHRpcEZvcm1hdDogVG9vbHRpcEZvcm1hdCk6ICh2OiBhbnkpID0+IHN0cmluZyB7XG4gIGlmICghdG9vbHRpcEZvcm1hdCB8fCAhdG9vbHRpcEZvcm1hdC5mb3JtYXQpIHtcbiAgICByZXR1cm4gZGVmYXVsdEZvcm1hdHRlcjtcbiAgfVxuXG4gIHN3aXRjaCAodG9vbHRpcEZvcm1hdC50eXBlKSB7XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5ERUNJTUFMOlxuICAgICAgcmV0dXJuIGQzRm9ybWF0KHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBjYXNlIFRPT0xUSVBfRk9STUFUX1RZUEVTLkRBVEU6XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5EQVRFX1RJTUU6XG4gICAgICByZXR1cm4gZGF0ZXRpbWVGb3JtYXR0ZXIobnVsbCkodG9vbHRpcEZvcm1hdC5mb3JtYXQpO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuUEVSQ0VOVEFHRTpcbiAgICAgIHJldHVybiB2ID0+IGAke2QzRm9ybWF0KFRPT0xUSVBfRk9STUFUUy5ERUNJTUFMX0RFQ0lNQUxfRklYRURfMi5mb3JtYXQpKHYpfSVgO1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuQk9PTEVBTjpcbiAgICAgIHJldHVybiBnZXRCb29sZWFuRm9ybWF0dGVyKHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2xlYW5Gb3JtYXR0ZXIoZm9ybWF0OiBzdHJpbmcpOiBGaWVsZEZvcm1hdHRlciB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAnMDEnOlxuICAgICAgcmV0dXJuICh2OiBib29sZWFuKSA9PiAodiA/ICcxJyA6ICcwJyk7XG4gICAgY2FzZSAneW4nOlxuICAgICAgcmV0dXJuICh2OiBib29sZWFuKSA9PiAodiA/ICd5ZXMnIDogJ25vJyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG59XG4vLyBBbGxvdyB1c2VyIHRvIHNwZWNpZnkgY3VzdG9tIHRvb2x0aXAgZm9ybWF0IHZpYSBjb25maWdcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUN1c3RvbUZvcm1hdChmb3JtYXQsIGZpZWxkOiB7dHlwZT86IHN0cmluZ30pOiBGaWVsZEZvcm1hdHRlciB7XG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIHJldHVybiBkM0Zvcm1hdChmb3JtYXQpO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmRhdGU6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgcmV0dXJuIGRhdGV0aW1lRm9ybWF0dGVyKG51bGwpKGZvcm1hdCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB2ID0+IHY7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0TGFyZ2VOdW1iZXIobikge1xuICAvLyBTSS1wcmVmaXggd2l0aCA0IHNpZ25pZmljYW50IGRpZ2l0c1xuICByZXR1cm4gZDNGb3JtYXQoJy40fnMnKShuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE51bWJlcihuOiBudW1iZXIsIHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBgLSR7Zm9ybWF0TnVtYmVyKC1uLCAnaW50ZWdlcicpfWA7XG4gICAgICB9XG4gICAgICBpZiAobiA8IDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGAke01hdGgucm91bmQobil9YDtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgMTAgKiAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLCcpKE1hdGgucm91bmQobikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdExhcmdlTnVtYmVyKG4pO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgcmV0dXJuIGAtJHtmb3JtYXROdW1iZXIoLW4sICdudW1iZXInKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLjR+cicpKG4pO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMCAqIDEwMDApIHtcbiAgICAgICAgcmV0dXJuIGQzRm9ybWF0KCcsLjJ+ZicpKG4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1hdExhcmdlTnVtYmVyKG4pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXROdW1iZXIobiwgJ3JlYWwnKTtcbiAgfVxufVxuXG5jb25zdCB0cmFuc2Zvcm1hdGlvbiA9IHtcbiAgWTogTWF0aC5wb3coMTAsIDI0KSxcbiAgWjogTWF0aC5wb3coMTAsIDIxKSxcbiAgRTogTWF0aC5wb3coMTAsIDE4KSxcbiAgUDogTWF0aC5wb3coMTAsIDE1KSxcbiAgVDogTWF0aC5wb3coMTAsIDEyKSxcbiAgRzogTWF0aC5wb3coMTAsIDkpLFxuICBNOiBNYXRoLnBvdygxMCwgNiksXG4gIGs6IE1hdGgucG93KDEwLCAzKSxcbiAgaDogTWF0aC5wb3coMTAsIDIpLFxuICBkYTogTWF0aC5wb3coMTAsIDEpLFxuICBkOiBNYXRoLnBvdygxMCwgLTEpLFxuICBjOiBNYXRoLnBvdygxMCwgLTIpLFxuICBtOiBNYXRoLnBvdygxMCwgLTMpLFxuICDOvDogTWF0aC5wb3coMTAsIC02KSxcbiAgbjogTWF0aC5wb3coMTAsIC05KSxcbiAgcDogTWF0aC5wb3coMTAsIC0xMiksXG4gIGY6IE1hdGgucG93KDEwLCAtMTUpLFxuICBhOiBNYXRoLnBvdygxMCwgLTE4KSxcbiAgejogTWF0aC5wb3coMTAsIC0yMSksXG4gIHk6IE1hdGgucG93KDEwLCAtMjQpXG59O1xuXG4vKipcbiAqIENvbnZlcnQgYSBmb3JtYXR0ZWQgbnVtYmVyIGZyb20gc3RyaW5nIGJhY2sgdG8gbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXZlcnNlRm9ybWF0TnVtYmVyKHN0cjogc3RyaW5nKTogbnVtYmVyIHtcbiAgbGV0IHJldHVyblZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgY29uc3Qgc3RyTnVtID0gc3RyLnRyaW0oKS5yZXBsYWNlKC8sL2csICcnKTtcbiAgT2JqZWN0LmVudHJpZXModHJhbnNmb3JtYXRpb24pLmZvckVhY2goZCA9PiB7XG4gICAgaWYgKHN0ck51bS5pbmNsdWRlcyhkWzBdKSkge1xuICAgICAgcmV0dXJuVmFsdWUgPSBwYXJzZUZsb2F0KHN0ck51bSkgKiBkWzFdO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG5cbiAgLy8gaWYgbm8gdHJhbnNmb3JtZXIgZm91bmQsIGNvbnZlcnQgdG8gbnViZXIgcmVnYXJkbGVzc1xuICByZXR1cm4gcmV0dXJuVmFsdWUgPT09IG51bGwgPyBOdW1iZXIoc3RyTnVtKSA6IHJldHVyblZhbHVlO1xufVxuXG4vKipcbiAqIEZvcm1hdCBlcG9jaCBtaWxsaXNlY29uZHMgd2l0aCBhIGZvcm1hdCBzdHJpbmdcbiAqIEB0eXBlIHRpbWV6b25lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRldGltZUZvcm1hdHRlcihcbiAgdGltZXpvbmU/OiBzdHJpbmcgfCBudWxsXG4pOiAoZm9ybWF0Pzogc3RyaW5nKSA9PiAodHM6IG51bWJlcikgPT4gc3RyaW5nIHtcbiAgcmV0dXJuIHRpbWV6b25lXG4gICAgPyBmb3JtYXQgPT4gdHMgPT4gbW9tZW50LnV0Yyh0cykudHoodGltZXpvbmUpLmZvcm1hdChmb3JtYXQpXG4gICAgOiAvLyByZXR1cm4gZW1wdHkgc3RyaW5nIGluc3RlYWQgb2YgJ0ludmFsaWQgZGF0ZScgaWYgdHMgaXMgdW5kZWZpbmVkL251bGxcbiAgICAgIGZvcm1hdCA9PiB0cyA9PiB0cyA/IG1vbWVudC51dGModHMpLmZvcm1hdChmb3JtYXQpIDogJyc7XG59XG4iXSwi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
489
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZDNGb3JtYXQiLCJfbW9tZW50VGltZXpvbmUiLCJfY29uc3RhbnRzIiwiX2NvbW1vblV0aWxzIiwiX3Bsb3QiLCJfdXRpbHMiLCJfRklFTERfRElTUExBWV9GT1JNQVQiLCJNQVhfTEFUSVRVREUiLCJleHBvcnRzIiwiTUlOX0xBVElUVURFIiwiTUFYX0xPTkdJVFVERSIsIk1JTl9MT05HSVRVREUiLCJ2YWxpZGF0ZUxhdGl0dWRlIiwibGF0aXR1ZGUiLCJ2YWxpZGF0ZUNvb3JkaW5hdGUiLCJ2YWxpZGF0ZUxvbmdpdHVkZSIsImxvbmdpdHVkZSIsInZhbHVlIiwibWluVmFsdWUiLCJtYXhWYWx1ZSIsInVuaXF1ZSIsInZhbHVlcyIsInJlc3VsdHMiLCJ1bmlxdWVTZXQiLCJTZXQiLCJmb3JFYWNoIiwidiIsIm5vdE51bGxvclVuZGVmaW5lZCIsInB1c2giLCJnZXRMYXRMbmdCb3VuZHMiLCJwb2ludHMiLCJpZHgiLCJsaW1pdCIsImxhdHMiLCJtYXAiLCJkIiwiTnVtYmVyIiwiQXJyYXkiLCJpc0FycmF5IiwiZmlsdGVyIiwiaXNGaW5pdGUiLCJzb3J0IiwibnVtYmVyU29ydCIsImxlbmd0aCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJjbGFtcCIsIl9yZWYiLCJfcmVmMiIsIl9zbGljZWRUb0FycmF5MiIsInZhbCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImdldFNhbXBsZURhdGEiLCJkYXRhIiwic2FtcGxlU2l6ZSIsImdldFZhbHVlIiwic2FtcGxlU3RlcCIsImZsb29yIiwib3V0cHV0IiwiaSIsInRpbWVUb1VuaXhNaWxsaSIsImZvcm1hdCIsIm1vbWVudCIsInV0YyIsInZhbHVlT2YiLCJEYXRlIiwiaXNOdW1iZXIiLCJoYXNPd25Qcm9wZXJ0eSIsIm9iaiIsInByb3AiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJjYWxsIiwiYSIsImIiLCJnZXRTb3J0aW5nRnVuY3Rpb24iLCJmaWVsZFR5cGUiLCJBTExfRklFTERfVFlQRVMiLCJyZWFsIiwiaW50ZWdlciIsInRpbWVzdGFtcCIsInByZWNpc2VSb3VuZCIsIm51bSIsImRlY2ltYWxzIiwidCIsInBvdyIsInJvdW5kIiwic2lnbiIsInRvRml4ZWQiLCJyb3VuZFRvRm91ciIsImNvbmNhdCIsImdldFJvdW5kaW5nRGVjaW1hbEZyb21TdGVwIiwic3RlcCIsImlzTmFOIiwiYXNzZXJ0Iiwic3RlcFN0ciIsInRvU3RyaW5nIiwic3BsaXRFeHBvbmVudGlhbCIsInNwbGl0IiwiY29lZmZaZXJvIiwiY29lZmZEZWNpbWFsIiwicGFyc2VJbnQiLCJzcGxpdFplcm8iLCJub3JtYWxpemVTbGlkZXJWYWx1ZSIsIm1hcmtzIiwic25hcFRvTWFya3MiLCJyb3VuZFZhbFRvU3RlcCIsImRlY2ltYWwiLCJzdGVwcyIsInJlbWFpbiIsImNsb3Nlc3QiLCJyb3VuZGVkIiwiZGVmYXVsdEZvcm1hdHRlciIsIlN0cmluZyIsImZsb2F0Rm9ybWF0dGVyIiwiRklFTERfRElTUExBWV9GT1JNQVQiLCJfZGVmaW5lUHJvcGVydHkyIiwic3RyaW5nIiwiZGF0ZSIsImdlb2pzb24iLCJpc1BsYWluT2JqZWN0IiwiSlNPTiIsInN0cmluZ2lmeSIsImdlb2Fycm93Iiwib2JqZWN0IiwiYXJyYXkiLCJoMyIsInBhcnNlRmllbGRWYWx1ZSIsInR5cGUiLCJnZXRGb3JtYXR0ZXIiLCJmaWVsZCIsInRvb2x0aXBGb3JtYXQiLCJUT09MVElQX0ZPUk1BVFMiLCJmaW5kIiwiZiIsIlRPT0xUSVBfS0VZIiwiYXBwbHlEZWZhdWx0Rm9ybWF0IiwiYXBwbHlDdXN0b21Gb3JtYXQiLCJnZXRDb2x1bW5Gb3JtYXR0ZXIiLCJkaXNwbGF5Rm9ybWF0IiwiX3R5cGVvZjIiLCJhcHBseVZhbHVlTWFwIiwiVE9PTFRJUF9GT1JNQVRfVFlQRVMiLCJERUNJTUFMIiwiZDNGb3JtYXQiLCJEQVRFIiwiREFURV9USU1FIiwiZGF0ZXRpbWVGb3JtYXR0ZXIiLCJQRVJDRU5UQUdFIiwiREVDSU1BTF9ERUNJTUFMX0ZJWEVEXzIiLCJCT09MRUFOIiwiZ2V0Qm9vbGVhbkZvcm1hdHRlciIsImZvcm1hdExhcmdlTnVtYmVyIiwibiIsImZvcm1hdE51bWJlciIsInRyYW5zZm9ybWF0aW9uIiwiWSIsIloiLCJFIiwiUCIsIlQiLCJHIiwiTSIsImsiLCJoIiwiZGEiLCJjIiwibSIsIs68IiwicCIsInoiLCJ5IiwicmV2ZXJzZUZvcm1hdE51bWJlciIsInN0ciIsInJldHVyblZhbHVlIiwic3RyTnVtIiwidHJpbSIsInJlcGxhY2UiLCJlbnRyaWVzIiwiaW5jbHVkZXMiLCJwYXJzZUZsb2F0IiwidGltZXpvbmUiLCJ0cyIsInR6Il0sInNvdXJjZXMiOlsiLi4vc3JjL2RhdGEtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtmb3JtYXQgYXMgZDNGb3JtYXR9IGZyb20gJ2QzLWZvcm1hdCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5cbmltcG9ydCB7XG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgVE9PTFRJUF9GT1JNQVRTLFxuICBUT09MVElQX0ZPUk1BVF9UWVBFUyxcbiAgVE9PTFRJUF9LRVksXG4gIFRvb2x0aXBGb3JtYXRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7RmllbGQsIE1pbGxpc2Vjb25kfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtzbmFwVG9NYXJrc30gZnJvbSAnLi9wbG90JztcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB0eXBlIEZpZWxkRm9ybWF0dGVyID0gKHZhbHVlOiBhbnkpID0+IHN0cmluZztcblxuLy8gV2UgbmVlZCB0aHJlYXQgbGF0aXR1ZGUgZGlmZmVyZW50bHkgb3RoZXJ3aXNlIG1hcmNhdG9yIHByb2plY3QgdmlldyB0aHJvd3Ncbi8vIGEgcHJvamVjdGlvbiBtYXRyaXggZXJyb3Jcbi8vIFVuY2F1Z2h0IEVycm9yOiBQaXhlbCBwcm9qZWN0IG1hdHJpeCBub3QgaW52ZXJ0aWJsZVxuLy8gYXQgV2ViTWVyY2F0b3JWaWV3cG9ydDE2LlZpZXdwb3J0NiAodmlld3BvcnQuanM6ODE6MTMpXG5leHBvcnQgY29uc3QgTUFYX0xBVElUVURFID0gODkuOTtcbmV4cG9ydCBjb25zdCBNSU5fTEFUSVRVREUgPSAtODkuOTtcbmV4cG9ydCBjb25zdCBNQVhfTE9OR0lUVURFID0gMTgwO1xuZXhwb3J0IGNvbnN0IE1JTl9MT05HSVRVREUgPSAtMTgwO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGxhdGl0dWRlIHZhbHVlLlxuICogRW5zdXJlcyB0aGF0IHRoZSBsYXRpdHVkZSBpcyB3aXRoaW4gdGhlIGRlZmluZWQgbWluaW11bSBhbmQgbWF4aW11bSBsYXRpdHVkZSBib3VuZHMuXG4gKiBJZiB0aGUgdmFsdWUgaXMgb3V0IG9mIGJvdW5kcywgaXQgcmV0dXJucyB0aGUgbmVhcmVzdCBib3VuZCB2YWx1ZS5cbiAqIEBwYXJhbSBsYXRpdHVkZSAtIFRoZSBsYXRpdHVkZSB2YWx1ZSB0byB2YWxpZGF0ZS5cbiAqIEByZXR1cm5zIFRoZSB2YWxpZGF0ZWQgbGF0aXR1ZGUgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxhdGl0dWRlKGxhdGl0dWRlOiBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICByZXR1cm4gdmFsaWRhdGVDb29yZGluYXRlKGxhdGl0dWRlID8/IDAsIE1JTl9MQVRJVFVERSwgTUFYX0xBVElUVURFKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBsb25naXR1ZGUgdmFsdWUuXG4gKiBFbnN1cmVzIHRoYXQgdGhlIGxvbmdpdHVkZSBpcyB3aXRoaW4gdGhlIGRlZmluZWQgbWluaW11bSBhbmQgbWF4aW11bSBsb25naXR1ZGUgYm91bmRzLlxuICogSWYgdGhlIHZhbHVlIGlzIG91dCBvZiBib3VuZHMsIGl0IHJldHVybnMgdGhlIG5lYXJlc3QgYm91bmQgdmFsdWUuXG4gKiBAcGFyYW0gbG9uZ2l0dWRlIC0gVGhlIGxvbmdpdHVkZSB2YWx1ZSB0byB2YWxpZGF0ZS5cbiAqIEByZXR1cm5zIFRoZSB2YWxpZGF0ZWQgbG9uZ2l0dWRlIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMb25naXR1ZGUobG9uZ2l0dWRlOiBudW1iZXIgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICByZXR1cm4gdmFsaWRhdGVDb29yZGluYXRlKGxvbmdpdHVkZSA/PyAwLCBNSU5fTE9OR0lUVURFLCBNQVhfTE9OR0lUVURFKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBjb29yZGluYXRlIHZhbHVlLlxuICogRW5zdXJlcyB0aGF0IHRoZSB2YWx1ZSBpcyB3aXRoaW4gdGhlIHNwZWNpZmllZCBtaW5pbXVtIGFuZCBtYXhpbXVtIGJvdW5kcy5cbiAqIElmIHRoZSB2YWx1ZSBpcyBvdXQgb2YgYm91bmRzLCBpdCByZXR1cm5zIHRoZSBuZWFyZXN0IGJvdW5kIHZhbHVlLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIGNvb3JkaW5hdGUgdmFsdWUgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0gbWluVmFsdWUgLSBUaGUgbWluaW11bSBib3VuZCBmb3IgdGhlIHZhbHVlLlxuICogQHBhcmFtIG1heFZhbHVlIC0gVGhlIG1heGltdW0gYm91bmQgZm9yIHRoZSB2YWx1ZS5cbiAqIEByZXR1cm5zIFRoZSB2YWxpZGF0ZWQgY29vcmRpbmF0ZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ29vcmRpbmF0ZSh2YWx1ZTogbnVtYmVyLCBtaW5WYWx1ZTogbnVtYmVyLCBtYXhWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHZhbHVlIDw9IG1pblZhbHVlKSB7XG4gICAgcmV0dXJuIG1pblZhbHVlO1xuICB9XG4gIGlmICh2YWx1ZSA+PSBtYXhWYWx1ZSkge1xuICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBzaW1wbGUgZ2V0dGluZyB1bmlxdWUgdmFsdWVzIG9mIGFuIGFycmF5XG4gKlxuICogQHBhcmFtIHZhbHVlc1xuICogQHJldHVybnMgdW5pcXVlIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlPFQ+KHZhbHVlczogVFtdKSB7XG4gIGNvbnN0IHJlc3VsdHM6IFRbXSA9IFtdO1xuICBjb25zdCB1bmlxdWVTZXQgPSBuZXcgU2V0KHZhbHVlcyk7XG4gIHVuaXF1ZVNldC5mb3JFYWNoKHYgPT4ge1xuICAgIGlmIChub3ROdWxsb3JVbmRlZmluZWQodikpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh2KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhdExuZ0JvdW5kcyhcbiAgcG9pbnRzOiBudW1iZXJbXVtdLFxuICBpZHg6IG51bWJlcixcbiAgbGltaXQ6IFtudW1iZXIsIG51bWJlcl1cbik6IFtudW1iZXIsIG51bWJlcl0gfCBudWxsIHtcbiAgY29uc3QgbGF0cyA9IHBvaW50c1xuICAgIC5tYXAoZCA9PiBOdW1iZXIoQXJyYXkuaXNBcnJheShkKSkgJiYgZFtpZHhdKVxuICAgIC5maWx0ZXIoTnVtYmVyLmlzRmluaXRlKVxuICAgIC5zb3J0KG51bWJlclNvcnQpO1xuXG4gIGlmICghbGF0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGNsYW1wIHRvIGxpbWl0XG4gIHJldHVybiBbTWF0aC5tYXgobGF0c1swXSwgbGltaXRbMF0pLCBNYXRoLm1pbihsYXRzW2xhdHMubGVuZ3RoIC0gMV0sIGxpbWl0WzFdKV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChbbWluLCBtYXhdOiBbbnVtYmVyLCBudW1iZXJdLCB2YWwgPSAwKTogbnVtYmVyIHtcbiAgcmV0dXJuIHZhbCA8PSBtaW4gPyBtaW4gOiB2YWwgPj0gbWF4ID8gbWF4IDogdmFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2FtcGxlRGF0YShkYXRhLCBzYW1wbGVTaXplID0gNTAwLCBnZXRWYWx1ZSA9IGQgPT4gZCkge1xuICBjb25zdCBzYW1wbGVTdGVwID0gTWF0aC5tYXgoTWF0aC5mbG9vcihkYXRhLmxlbmd0aCAvIHNhbXBsZVNpemUpLCAxKTtcbiAgY29uc3Qgb3V0cHV0OiBhbnlbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IHNhbXBsZVN0ZXApIHtcbiAgICBvdXRwdXQucHVzaChnZXRWYWx1ZShkYXRhW2ldKSk7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZGlmZmVyZW50IHRpbWUgZm9ybWF0IHRvIHVuaXggbWlsbGlzZWNvbmRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVG9Vbml4TWlsbGkodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IERhdGUsIGZvcm1hdDogc3RyaW5nKTogTWlsbGlzZWNvbmQgfCBudWxsIHtcbiAgaWYgKG5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG1vbWVudC51dGModmFsdWUsIGZvcm1hdCkudmFsdWVPZigpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGZvcm1hdCA9PT0gJ3gnID8gdmFsdWUgKiAxMDAwIDogdmFsdWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS52YWx1ZU9mKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgZCBpcyBhIG51bWJlciwgdGhpcyBmaWx0ZXJlZCBvdXQgTmFOIGFzIHdlbGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKGQ6IHVua25vd24pOiBkIGlzIG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoZCk7XG59XG5cbi8qKlxuICogd2hldGhlciBvYmplY3QgaGFzIHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcFxuICogQHJldHVybnMge2Jvb2xlYW59IC0geWVzIG9yIG5vXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eTxYIGV4dGVuZHMgb2JqZWN0LCBZIGV4dGVuZHMgUHJvcGVydHlLZXk+KFxuICBvYmo6IFgsXG4gIHByb3A6IFlcbik6IG9iaiBpcyBYICYgUmVjb3JkPFksIHVua25vd24+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyU29ydChhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBhIC0gYjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvcnRpbmdGdW5jdGlvbihmaWVsZFR5cGU6IHN0cmluZyk6IHR5cGVvZiBudW1iZXJTb3J0IHwgdW5kZWZpbmVkIHtcbiAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wOlxuICAgICAgcmV0dXJuIG51bWJlclNvcnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiByb3VuZCBudW1iZXIgd2l0aCBleGFjdCBudW1iZXIgb2YgZGVjaW1hbHNcbiAqIHJldHVybiBhcyBhIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlY2lzZVJvdW5kKG51bTogbnVtYmVyLCBkZWNpbWFsczogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgdCA9IE1hdGgucG93KDEwLCBkZWNpbWFscyk7XG4gIHJldHVybiAoXG4gICAgTWF0aC5yb3VuZChcbiAgICAgIG51bSAqIHQgKyAoZGVjaW1hbHMgPiAwID8gMSA6IDApICogKE1hdGguc2lnbihudW0pICogKDEwIC8gTWF0aC5wb3coMTAwLCBkZWNpbWFscykpKVxuICAgICkgLyB0XG4gICkudG9GaXhlZChkZWNpbWFscyk7XG59XG5cbi8qKlxuICogcm91bmQgYSBnaXZpbmcgbnVtYmVyIGF0IG1vc3QgNCBkZWNpbWFsIHBsYWNlc1xuICogZS5nLiAxMCAtPiAxMCwgMS4xMjM0NSAtPiAxLjIzNDUsIDIuMCAtPiAyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZFRvRm91cihudW06IG51bWJlcik6IG51bWJlciB7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgcmV0dXJuIE51bWJlcihgJHtNYXRoLnJvdW5kKGAke251bX1lKzRgKX1lLTRgKTtcbn1cbi8qKlxuICogZ2V0IG51bWJlciBvZiBkZWNpbWFscyB0byByb3VuZCB0byBmb3Igc2xpZGVyIGZyb20gc3RlcFxuICogQHBhcmFtIHN0ZXBcbiAqIEByZXR1cm5zLSBudW1iZXIgb2YgZGVjaW1hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91bmRpbmdEZWNpbWFsRnJvbVN0ZXAoc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKGlzTmFOKHN0ZXApKSB7XG4gICAgYXNzZXJ0KCdzdGVwIGlzIG5vdCBhIG51bWJlcicpO1xuICAgIGFzc2VydChzdGVwKTtcbiAgfVxuXG4gIGNvbnN0IHN0ZXBTdHIgPSBzdGVwLnRvU3RyaW5nKCk7XG5cbiAgLy8gaW4gY2FzZSB0aGUgc3RlcCBpcyBhIHZlcnkgc21hbGwgbnVtYmVyIGUuZy4gMWUtNywgcmV0dXJuIGRlY2ltYWwgZS5nLiA3IGRpcmVjdGx5XG4gIGNvbnN0IHNwbGl0RXhwb25lbnRpYWwgPSBzdGVwU3RyLnNwbGl0KCdlLScpO1xuICBpZiAoc3BsaXRFeHBvbmVudGlhbC5sZW5ndGggPT09IDIpIHtcbiAgICBjb25zdCBjb2VmZlplcm8gPSBzcGxpdEV4cG9uZW50aWFsWzBdLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgY29lZmZEZWNpbWFsID0gY29lZmZaZXJvLmxlbmd0aCA9PT0gMSA/IDAgOiBjb2VmZlplcm9bMV0ubGVuZ3RoO1xuICAgIHJldHVybiBwYXJzZUludChzcGxpdEV4cG9uZW50aWFsWzFdLCAxMCkgKyBjb2VmZkRlY2ltYWw7XG4gIH1cblxuICBjb25zdCBzcGxpdFplcm8gPSBzdGVwU3RyLnNwbGl0KCcuJyk7XG4gIGlmIChzcGxpdFplcm8ubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcmV0dXJuIHNwbGl0WmVyb1sxXS5sZW5ndGg7XG59XG5cbi8qKlxuICogSWYgbWFya3MgaXMgcHJvdmlkZWQsIHNuYXAgdG8gbWFya3MsIGlmIG5vdCBub3JtYWxpemUgdG8gc3RlcFxuICogQHBhcmFtIHZhbFxuICogQHBhcmFtIG1pblZhbHVlXG4gKiBAcGFyYW0gc3RlcFxuICogQHBhcmFtIG1hcmtzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTbGlkZXJWYWx1ZShcbiAgdmFsOiBudW1iZXIsXG4gIG1pblZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIHN0ZXA6IG51bWJlcixcbiAgbWFya3M/OiBudW1iZXJbXSB8IG51bGxcbik6IG51bWJlciB7XG4gIGlmIChtYXJrcyAmJiBtYXJrcy5sZW5ndGgpIHtcbiAgICAvLyBVc2UgaW4gc2xpZGVyLCBnaXZlbiBhIG51bWJlciBhbmQgYW4gYXJyYXkgb2YgbnVtYmVycywgcmV0dXJuIHRoZSBuZWFycyBudW1iZXIgZnJvbSB0aGUgYXJyYXlcbiAgICByZXR1cm4gc25hcFRvTWFya3ModmFsLCBtYXJrcyk7XG4gIH1cblxuICByZXR1cm4gcm91bmRWYWxUb1N0ZXAobWluVmFsdWUsIHN0ZXAsIHZhbCk7XG59XG5cbi8qKlxuICogcm91bmQgdGhlIHZhbHVlIHRvIHN0ZXAgZm9yIHRoZSBzbGlkZXJcbiAqIEBwYXJhbSBtaW5WYWx1ZVxuICogQHBhcmFtIHN0ZXBcbiAqIEBwYXJhbSB2YWxcbiAqIEByZXR1cm5zIC0gcm91bmRlZCBudW1iZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kVmFsVG9TdGVwKG1pblZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQsIHN0ZXA6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoIWlzTnVtYmVyKHN0ZXApIHx8ICFpc051bWJlcihtaW5WYWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgY29uc3QgZGVjaW1hbCA9IGdldFJvdW5kaW5nRGVjaW1hbEZyb21TdGVwKHN0ZXApO1xuICBjb25zdCBzdGVwcyA9IE1hdGguZmxvb3IoKHZhbCAtIG1pblZhbHVlKSAvIHN0ZXApO1xuICBsZXQgcmVtYWluID0gdmFsIC0gKHN0ZXBzICogc3RlcCArIG1pblZhbHVlKTtcblxuICAvLyBoYXMgdG8gcm91bmQgYmVjYXVzZSBqYXZhc2NyaXB0IHR1cm5zIDAuMSBpbnRvIDAuOTk5OTk5OTk5OTk5OTk4N1xuICByZW1haW4gPSBOdW1iZXIocHJlY2lzZVJvdW5kKHJlbWFpbiwgOCkpO1xuXG4gIGxldCBjbG9zZXN0OiBudW1iZXI7XG4gIGlmIChyZW1haW4gPT09IDApIHtcbiAgICBjbG9zZXN0ID0gdmFsO1xuICB9IGVsc2UgaWYgKHJlbWFpbiA8IHN0ZXAgLyAyKSB7XG4gICAgY2xvc2VzdCA9IHN0ZXBzICogc3RlcCArIG1pblZhbHVlO1xuICB9IGVsc2Uge1xuICAgIGNsb3Nlc3QgPSAoc3RlcHMgKyAxKSAqIHN0ZXAgKyBtaW5WYWx1ZTtcbiAgfVxuXG4gIC8vIHByZWNpc2Ugcm91bmQgcmV0dXJuIGEgc3RyaW5nIHJvdW5kZWQgdG8gdGhlIGRlZmluZWQgZGVjaW1hbFxuICBjb25zdCByb3VuZGVkID0gcHJlY2lzZVJvdW5kKGNsb3Nlc3QsIGRlY2ltYWwpO1xuXG4gIHJldHVybiBOdW1iZXIocm91bmRlZCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3JtYXQgYmFzZWQgb24gZmllbGQgYW5kIGZvcm1hdCBvcHRpb25zXG4gKiBVc2VkIGluIHJlbmRlciB0b29sdGlwIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0Rm9ybWF0dGVyOiBGaWVsZEZvcm1hdHRlciA9IHYgPT4gKG5vdE51bGxvclVuZGVmaW5lZCh2KSA/IFN0cmluZyh2KSA6ICcnKTtcblxuZXhwb3J0IGNvbnN0IGZsb2F0Rm9ybWF0dGVyID0gdiA9PiAoaXNOdW1iZXIodikgPyBTdHJpbmcocm91bmRUb0ZvdXIodikpIDogJycpO1xuXG5leHBvcnQgY29uc3QgRklFTERfRElTUExBWV9GT1JNQVQ6IHtcbiAgW2tleTogc3RyaW5nXTogRmllbGRGb3JtYXR0ZXI7XG59ID0ge1xuICBbQUxMX0ZJRUxEX1RZUEVTLnN0cmluZ106IGRlZmF1bHRGb3JtYXR0ZXIsXG4gIFtBTExfRklFTERfVFlQRVMudGltZXN0YW1wXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5yZWFsXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5ib29sZWFuXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5kYXRlXTogZGVmYXVsdEZvcm1hdHRlcixcbiAgW0FMTF9GSUVMRF9UWVBFUy5nZW9qc29uXTogZCA9PlxuICAgIHR5cGVvZiBkID09PSAnc3RyaW5nJ1xuICAgICAgPyBkXG4gICAgICA6IGlzUGxhaW5PYmplY3QoZClcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkoZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShkKVxuICAgICAgPyBgWyR7U3RyaW5nKGQpfV1gXG4gICAgICA6ICcnLFxuICBbQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93XTogZCA9PiBkLFxuICBbQUxMX0ZJRUxEX1RZUEVTLm9iamVjdF06IEpTT04uc3RyaW5naWZ5LFxuICBbQUxMX0ZJRUxEX1RZUEVTLmFycmF5XTogSlNPTi5zdHJpbmdpZnksXG4gIFtBTExfRklFTERfVFlQRVMuaDNdOiBkZWZhdWx0Rm9ybWF0dGVyXG59O1xuXG4vKipcbiAqIFBhcnNlIGZpZWxkIHZhbHVlIGFuZCB0eXBlIGFuZCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlRmllbGRWYWx1ZSA9ICh2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIW5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIEZJRUxEX0RJU1BMQVlfRk9STUFUW3R5cGVdID8gRklFTERfRElTUExBWV9GT1JNQVRbdHlwZV0odmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn07XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3JtYXQgYmFzZWQgb24gZmllbGQgYW5kIGZvcm1hdCBvcHRpb25zXG4gKiBVc2VkIGluIHJlbmRlciB0b29sdGlwIHZhbHVlXG4gKiBAcGFyYW0gZm9ybWF0XG4gKiBAcGFyYW0gZmllbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1hdHRlcihcbiAgZm9ybWF0Pzogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IG51bGwsXG4gIGZpZWxkPzogRmllbGRcbik6IEZpZWxkRm9ybWF0dGVyIHtcbiAgaWYgKCFmb3JtYXQpIHtcbiAgICByZXR1cm4gZGVmYXVsdEZvcm1hdHRlcjtcbiAgfVxuICBjb25zdCB0b29sdGlwRm9ybWF0ID0gT2JqZWN0LnZhbHVlcyhUT09MVElQX0ZPUk1BVFMpLmZpbmQoZiA9PiBmW1RPT0xUSVBfS0VZXSA9PT0gZm9ybWF0KTtcblxuICBpZiAodG9vbHRpcEZvcm1hdCkge1xuICAgIHJldHVybiBhcHBseURlZmF1bHRGb3JtYXQodG9vbHRpcEZvcm1hdCBhcyBUb29sdGlwRm9ybWF0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJiBmaWVsZCkge1xuICAgIHJldHVybiBhcHBseUN1c3RvbUZvcm1hdChmb3JtYXQsIGZpZWxkKTtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uRm9ybWF0dGVyKFxuICBmaWVsZDogUGljazxGaWVsZCwgJ3R5cGUnPiAmIFBhcnRpYWw8UGljazxGaWVsZCwgJ2Zvcm1hdCcgfCAnZGlzcGxheUZvcm1hdCc+PlxuKTogRmllbGRGb3JtYXR0ZXIge1xuICBjb25zdCB7Zm9ybWF0LCBkaXNwbGF5Rm9ybWF0fSA9IGZpZWxkO1xuXG4gIGlmICghZm9ybWF0ICYmICFkaXNwbGF5Rm9ybWF0KSB7XG4gICAgcmV0dXJuIEZJRUxEX0RJU1BMQVlfRk9STUFUW2ZpZWxkLnR5cGVdO1xuICB9XG4gIGNvbnN0IHRvb2x0aXBGb3JtYXQgPSBPYmplY3QudmFsdWVzKFRPT0xUSVBfRk9STUFUUykuZmluZChmID0+IGZbVE9PTFRJUF9LRVldID09PSBkaXNwbGF5Rm9ybWF0KTtcblxuICBpZiAodG9vbHRpcEZvcm1hdCkge1xuICAgIHJldHVybiBhcHBseURlZmF1bHRGb3JtYXQodG9vbHRpcEZvcm1hdCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRpc3BsYXlGb3JtYXQgPT09ICdzdHJpbmcnICYmIGZpZWxkKSB7XG4gICAgcmV0dXJuIGFwcGx5Q3VzdG9tRm9ybWF0KGRpc3BsYXlGb3JtYXQsIGZpZWxkKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGlzcGxheUZvcm1hdCA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gYXBwbHlWYWx1ZU1hcChkaXNwbGF5Rm9ybWF0KTtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlWYWx1ZU1hcChmb3JtYXQpIHtcbiAgcmV0dXJuIHYgPT4gZm9ybWF0W3ZdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlEZWZhdWx0Rm9ybWF0KHRvb2x0aXBGb3JtYXQ6IFRvb2x0aXBGb3JtYXQpOiAodjogYW55KSA9PiBzdHJpbmcge1xuICBpZiAoIXRvb2x0aXBGb3JtYXQgfHwgIXRvb2x0aXBGb3JtYXQuZm9ybWF0KSB7XG4gICAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZXI7XG4gIH1cblxuICBzd2l0Y2ggKHRvb2x0aXBGb3JtYXQudHlwZSkge1xuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREVDSU1BTDpcbiAgICAgIHJldHVybiBkM0Zvcm1hdCh0b29sdGlwRm9ybWF0LmZvcm1hdCk7XG4gICAgY2FzZSBUT09MVElQX0ZPUk1BVF9UWVBFUy5EQVRFOlxuICAgIGNhc2UgVE9PTFRJUF9GT1JNQVRfVFlQRVMuREFURV9USU1FOlxuICAgICAgcmV0dXJuIGRhdGV0aW1lRm9ybWF0dGVyKG51bGwpKHRvb2x0aXBGb3JtYXQuZm9ybWF0KTtcbiAgICBjYXNlIFRPT0xUSVBfRk9STUFUX1RZUEVTLlBFUkNFTlRBR0U6XG4gICAgICByZXR1cm4gdiA9PiBgJHtkM0Zvcm1hdChUT09MVElQX0ZPUk1BVFMuREVDSU1BTF9ERUNJTUFMX0ZJWEVEXzIuZm9ybWF0KSh2KX0lYDtcbiAgICBjYXNlIFRPT0xUSVBfRk9STUFUX1RZUEVTLkJPT0xFQU46XG4gICAgICByZXR1cm4gZ2V0Qm9vbGVhbkZvcm1hdHRlcih0b29sdGlwRm9ybWF0LmZvcm1hdCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVyO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb29sZWFuRm9ybWF0dGVyKGZvcm1hdDogc3RyaW5nKTogRmllbGRGb3JtYXR0ZXIge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgJzAxJzpcbiAgICAgIHJldHVybiAodjogYm9vbGVhbikgPT4gKHYgPyAnMScgOiAnMCcpO1xuICAgIGNhc2UgJ3luJzpcbiAgICAgIHJldHVybiAodjogYm9vbGVhbikgPT4gKHYgPyAneWVzJyA6ICdubycpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGVmYXVsdEZvcm1hdHRlcjtcbiAgfVxufVxuLy8gQWxsb3cgdXNlciB0byBzcGVjaWZ5IGN1c3RvbSB0b29sdGlwIGZvcm1hdCB2aWEgY29uZmlnXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlDdXN0b21Gb3JtYXQoZm9ybWF0LCBmaWVsZDoge3R5cGU/OiBzdHJpbmd9KTogRmllbGRGb3JtYXR0ZXIge1xuICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICByZXR1cm4gZDNGb3JtYXQoZm9ybWF0KTtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIHJldHVybiBkYXRldGltZUZvcm1hdHRlcihudWxsKShmb3JtYXQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdiA9PiB2O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExhcmdlTnVtYmVyKG4pIHtcbiAgLy8gU0ktcHJlZml4IHdpdGggNCBzaWduaWZpY2FudCBkaWdpdHNcbiAgcmV0dXJuIGQzRm9ybWF0KCcuNH5zJykobik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROdW1iZXIobjogbnVtYmVyLCB0eXBlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuaW50ZWdlcjpcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gYC0ke2Zvcm1hdE51bWJlcigtbiwgJ2ludGVnZXInKX1gO1xuICAgICAgfVxuICAgICAgaWYgKG4gPCAxMDAwKSB7XG4gICAgICAgIHJldHVybiBgJHtNYXRoLnJvdW5kKG4pfWA7XG4gICAgICB9XG4gICAgICBpZiAobiA8IDEwICogMTAwMCkge1xuICAgICAgICByZXR1cm4gZDNGb3JtYXQoJywnKShNYXRoLnJvdW5kKG4pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXRMYXJnZU51bWJlcihuKTtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5yZWFsOlxuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHJldHVybiBgLSR7Zm9ybWF0TnVtYmVyKC1uLCAnbnVtYmVyJyl9YDtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgMTAwMCkge1xuICAgICAgICByZXR1cm4gZDNGb3JtYXQoJy40fnInKShuKTtcbiAgICAgIH1cbiAgICAgIGlmIChuIDwgMTAgKiAxMDAwKSB7XG4gICAgICAgIHJldHVybiBkM0Zvcm1hdCgnLC4yfmYnKShuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXRMYXJnZU51bWJlcihuKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKG4sICdyZWFsJyk7XG4gIH1cbn1cblxuY29uc3QgdHJhbnNmb3JtYXRpb24gPSB7XG4gIFk6IE1hdGgucG93KDEwLCAyNCksXG4gIFo6IE1hdGgucG93KDEwLCAyMSksXG4gIEU6IE1hdGgucG93KDEwLCAxOCksXG4gIFA6IE1hdGgucG93KDEwLCAxNSksXG4gIFQ6IE1hdGgucG93KDEwLCAxMiksXG4gIEc6IE1hdGgucG93KDEwLCA5KSxcbiAgTTogTWF0aC5wb3coMTAsIDYpLFxuICBrOiBNYXRoLnBvdygxMCwgMyksXG4gIGg6IE1hdGgucG93KDEwLCAyKSxcbiAgZGE6IE1hdGgucG93KDEwLCAxKSxcbiAgZDogTWF0aC5wb3coMTAsIC0xKSxcbiAgYzogTWF0aC5wb3coMTAsIC0yKSxcbiAgbTogTWF0aC5wb3coMTAsIC0zKSxcbiAgzrw6IE1hdGgucG93KDEwLCAtNiksXG4gIG46IE1hdGgucG93KDEwLCAtOSksXG4gIHA6IE1hdGgucG93KDEwLCAtMTIpLFxuICBmOiBNYXRoLnBvdygxMCwgLTE1KSxcbiAgYTogTWF0aC5wb3coMTAsIC0xOCksXG4gIHo6IE1hdGgucG93KDEwLCAtMjEpLFxuICB5OiBNYXRoLnBvdygxMCwgLTI0KVxufTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZm9ybWF0dGVkIG51bWJlciBmcm9tIHN0cmluZyBiYWNrIHRvIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJzZUZvcm1hdE51bWJlcihzdHI6IHN0cmluZyk6IG51bWJlciB7XG4gIGxldCByZXR1cm5WYWx1ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHN0ck51bSA9IHN0ci50cmltKCkucmVwbGFjZSgvLC9nLCAnJyk7XG4gIE9iamVjdC5lbnRyaWVzKHRyYW5zZm9ybWF0aW9uKS5mb3JFYWNoKGQgPT4ge1xuICAgIGlmIChzdHJOdW0uaW5jbHVkZXMoZFswXSkpIHtcbiAgICAgIHJldHVyblZhbHVlID0gcGFyc2VGbG9hdChzdHJOdW0pICogZFsxXTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuXG4gIC8vIGlmIG5vIHRyYW5zZm9ybWVyIGZvdW5kLCBjb252ZXJ0IHRvIG51YmVyIHJlZ2FyZGxlc3NcbiAgcmV0dXJuIHJldHVyblZhbHVlID09PSBudWxsID8gTnVtYmVyKHN0ck51bSkgOiByZXR1cm5WYWx1ZTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgZXBvY2ggbWlsbGlzZWNvbmRzIHdpdGggYSBmb3JtYXQgc3RyaW5nXG4gKiBAdHlwZSB0aW1lem9uZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0ZXRpbWVGb3JtYXR0ZXIoXG4gIHRpbWV6b25lPzogc3RyaW5nIHwgbnVsbFxuKTogKGZvcm1hdD86IHN0cmluZykgPT4gKHRzOiBudW1iZXIpID0+IHN0cmluZyB7XG4gIHJldHVybiB0aW1lem9uZVxuICAgID8gZm9ybWF0ID0+IHRzID0+IG1vbWVudC51dGModHMpLnR6KHRpbWV6b25lKS5mb3JtYXQoZm9ybWF0KVxuICAgIDogLy8gcmV0dXJuIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mICdJbnZhbGlkIGRhdGUnIGlmIHRzIGlzIHVuZGVmaW5lZC9udWxsXG4gICAgICBmb3JtYXQgPT4gdHMgPT4gdHMgPyBtb21lbnQudXRjKHRzKS5mb3JtYXQoZm9ybWF0KSA6ICcnO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQU9BLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUdBLElBQUFLLEtBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE1BQUEsR0FBQU4sT0FBQTtBQUFzQyxJQUFBTyxxQkFBQSxFQWxCdEM7QUFDQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLFlBQVksR0FBQUMsT0FBQSxDQUFBRCxZQUFBLEdBQUcsSUFBSTtBQUN6QixJQUFNRSxZQUFZLEdBQUFELE9BQUEsQ0FBQUMsWUFBQSxHQUFHLENBQUMsSUFBSTtBQUMxQixJQUFNQyxhQUFhLEdBQUFGLE9BQUEsQ0FBQUUsYUFBQSxHQUFHLEdBQUc7QUFDekIsSUFBTUMsYUFBYSxHQUFBSCxPQUFBLENBQUFHLGFBQUEsR0FBRyxDQUFDLEdBQUc7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsZ0JBQWdCQSxDQUFDQyxRQUE0QixFQUFVO0VBQ3JFLE9BQU9DLGtCQUFrQixDQUFDRCxRQUFRLGFBQVJBLFFBQVEsY0FBUkEsUUFBUSxHQUFJLENBQUMsRUFBRUosWUFBWSxFQUFFRixZQUFZLENBQUM7QUFDdEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTUSxpQkFBaUJBLENBQUNDLFNBQTZCLEVBQVU7RUFDdkUsT0FBT0Ysa0JBQWtCLENBQUNFLFNBQVMsYUFBVEEsU0FBUyxjQUFUQSxTQUFTLEdBQUksQ0FBQyxFQUFFTCxhQUFhLEVBQUVELGFBQWEsQ0FBQztBQUN6RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSxrQkFBa0JBLENBQUNHLEtBQWEsRUFBRUMsUUFBZ0IsRUFBRUMsUUFBZ0IsRUFBVTtFQUM1RixJQUFJRixLQUFLLElBQUlDLFFBQVEsRUFBRTtJQUNyQixPQUFPQSxRQUFRO0VBQ2pCO0VBQ0EsSUFBSUQsS0FBSyxJQUFJRSxRQUFRLEVBQUU7SUFDckIsT0FBT0EsUUFBUTtFQUNqQjtFQUVBLE9BQU9GLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRyxNQUFNQSxDQUFJQyxNQUFXLEVBQUU7RUFDckMsSUFBTUMsT0FBWSxHQUFHLEVBQUU7RUFDdkIsSUFBTUMsU0FBUyxHQUFHLElBQUlDLEdBQUcsQ0FBQ0gsTUFBTSxDQUFDO0VBQ2pDRSxTQUFTLENBQUNFLE9BQU8sQ0FBQyxVQUFBQyxDQUFDLEVBQUk7SUFDckIsSUFBSSxJQUFBQywrQkFBa0IsRUFBQ0QsQ0FBQyxDQUFDLEVBQUU7TUFDekJKLE9BQU8sQ0FBQ00sSUFBSSxDQUFDRixDQUFDLENBQUM7SUFDakI7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPSixPQUFPO0FBQ2hCO0FBRU8sU0FBU08sZUFBZUEsQ0FDN0JDLE1BQWtCLEVBQ2xCQyxHQUFXLEVBQ1hDLEtBQXVCLEVBQ0U7RUFDekIsSUFBTUMsSUFBSSxHQUFHSCxNQUFNLENBQ2hCSSxHQUFHLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUlDLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUNILENBQUMsQ0FBQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0osR0FBRyxDQUFDO0VBQUEsRUFBQyxDQUM1Q1EsTUFBTSxDQUFDSCxNQUFNLENBQUNJLFFBQVEsQ0FBQyxDQUN2QkMsSUFBSSxDQUFDQyxVQUFVLENBQUM7RUFFbkIsSUFBSSxDQUFDVCxJQUFJLENBQUNVLE1BQU0sRUFBRTtJQUNoQixPQUFPLElBQUk7RUFDYjs7RUFFQTtFQUNBLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDQyxHQUFHLENBQUNaLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVZLElBQUksQ0FBQ0UsR0FBRyxDQUFDYixJQUFJLENBQUNBLElBQUksQ0FBQ1UsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFWCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRjtBQUVPLFNBQVNlLEtBQUtBLENBQUFDLElBQUEsRUFBZ0Q7RUFBQSxJQUFBQyxLQUFBLE9BQUFDLGVBQUEsYUFBQUYsSUFBQTtJQUE5Q0YsR0FBRyxHQUFBRyxLQUFBO0lBQUVKLEdBQUcsR0FBQUksS0FBQTtFQUFBLElBQXFCRSxHQUFHLEdBQUFDLFNBQUEsQ0FBQVQsTUFBQSxRQUFBUyxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLENBQUM7RUFDekQsT0FBT0QsR0FBRyxJQUFJTCxHQUFHLEdBQUdBLEdBQUcsR0FBR0ssR0FBRyxJQUFJTixHQUFHLEdBQUdBLEdBQUcsR0FBR00sR0FBRztBQUNsRDtBQUVPLFNBQVNHLGFBQWFBLENBQUNDLElBQUksRUFBdUM7RUFBQSxJQUFyQ0MsVUFBVSxHQUFBSixTQUFBLENBQUFULE1BQUEsUUFBQVMsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxHQUFHO0VBQUEsSUFBRUssUUFBUSxHQUFBTCxTQUFBLENBQUFULE1BQUEsUUFBQVMsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxVQUFBakIsQ0FBQztJQUFBLE9BQUlBLENBQUM7RUFBQTtFQUNyRSxJQUFNdUIsVUFBVSxHQUFHZCxJQUFJLENBQUNDLEdBQUcsQ0FBQ0QsSUFBSSxDQUFDZSxLQUFLLENBQUNKLElBQUksQ0FBQ1osTUFBTSxHQUFHYSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEUsSUFBTUksTUFBYSxHQUFHLEVBQUU7RUFDeEIsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdOLElBQUksQ0FBQ1osTUFBTSxFQUFFa0IsQ0FBQyxJQUFJSCxVQUFVLEVBQUU7SUFDaERFLE1BQU0sQ0FBQ2hDLElBQUksQ0FBQzZCLFFBQVEsQ0FBQ0YsSUFBSSxDQUFDTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2hDO0VBRUEsT0FBT0QsTUFBTTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLGVBQWVBLENBQUM3QyxLQUE2QixFQUFFOEMsTUFBYyxFQUFzQjtFQUNqRyxJQUFJLElBQUFwQywrQkFBa0IsRUFBQ1YsS0FBSyxDQUFDLEVBQUU7SUFDN0IsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFO01BQzdCLE9BQU8rQywwQkFBTSxDQUFDQyxHQUFHLENBQUNoRCxLQUFLLEVBQUU4QyxNQUFNLENBQUMsQ0FBQ0csT0FBTyxDQUFDLENBQUM7SUFDNUM7SUFDQSxJQUFJLE9BQU9qRCxLQUFLLEtBQUssUUFBUSxFQUFFO01BQzdCLE9BQU84QyxNQUFNLEtBQUssR0FBRyxHQUFHOUMsS0FBSyxHQUFHLElBQUksR0FBR0EsS0FBSztJQUM5QztJQUNBLElBQUlBLEtBQUssWUFBWWtELElBQUksRUFBRTtNQUN6QixPQUFPbEQsS0FBSyxDQUFDaUQsT0FBTyxDQUFDLENBQUM7SUFDeEI7RUFDRjtFQUNBLE9BQU8sSUFBSTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLFFBQVFBLENBQUNqQyxDQUFVLEVBQWU7RUFDaEQsT0FBT0MsTUFBTSxDQUFDSSxRQUFRLENBQUNMLENBQUMsQ0FBQztBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2tDLGNBQWNBLENBQzVCQyxHQUFNLEVBQ05DLElBQU8sRUFDd0I7RUFDL0IsT0FBT0MsTUFBTSxDQUFDQyxTQUFTLENBQUNKLGNBQWMsQ0FBQ0ssSUFBSSxDQUFDSixHQUFHLEVBQUVDLElBQUksQ0FBQztBQUN4RDtBQUVPLFNBQVM3QixVQUFVQSxDQUFDaUMsQ0FBUyxFQUFFQyxDQUFTLEVBQVU7RUFDdkQsT0FBT0QsQ0FBQyxHQUFHQyxDQUFDO0FBQ2Q7QUFFTyxTQUFTQyxrQkFBa0JBLENBQUNDLFNBQWlCLEVBQWlDO0VBQ25GLFFBQVFBLFNBQVM7SUFDZixLQUFLQywwQkFBZSxDQUFDQyxJQUFJO0lBQ3pCLEtBQUtELDBCQUFlLENBQUNFLE9BQU87SUFDNUIsS0FBS0YsMEJBQWUsQ0FBQ0csU0FBUztNQUM1QixPQUFPeEMsVUFBVTtJQUNuQjtNQUNFLE9BQU9XLFNBQVM7RUFDcEI7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM4QixZQUFZQSxDQUFDQyxHQUFXLEVBQUVDLFFBQWdCLEVBQVU7RUFDbEUsSUFBTUMsQ0FBQyxHQUFHMUMsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRUYsUUFBUSxDQUFDO0VBQ2hDLE9BQU8sQ0FDTHpDLElBQUksQ0FBQzRDLEtBQUssQ0FDUkosR0FBRyxHQUFHRSxDQUFDLEdBQUcsQ0FBQ0QsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLekMsSUFBSSxDQUFDNkMsSUFBSSxDQUFDTCxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUd4QyxJQUFJLENBQUMyQyxHQUFHLENBQUMsR0FBRyxFQUFFRixRQUFRLENBQUMsQ0FBQyxDQUNyRixDQUFDLEdBQUdDLENBQUMsRUFDTEksT0FBTyxDQUFDTCxRQUFRLENBQUM7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTTSxXQUFXQSxDQUFDUCxHQUFXLEVBQVU7RUFDL0M7RUFDQSxPQUFPaEQsTUFBTSxJQUFBd0QsTUFBQSxDQUFJaEQsSUFBSSxDQUFDNEMsS0FBSyxJQUFBSSxNQUFBLENBQUlSLEdBQUcsUUFBSyxDQUFDLFFBQUssQ0FBQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTUywwQkFBMEJBLENBQUNDLElBQVksRUFBVTtFQUMvRCxJQUFJQyxLQUFLLENBQUNELElBQUksQ0FBQyxFQUFFO0lBQ2YsSUFBQUUsa0JBQU0sRUFBQyxzQkFBc0IsQ0FBQztJQUM5QixJQUFBQSxrQkFBTSxFQUFDRixJQUFJLENBQUM7RUFDZDtFQUVBLElBQU1HLE9BQU8sR0FBR0gsSUFBSSxDQUFDSSxRQUFRLENBQUMsQ0FBQzs7RUFFL0I7RUFDQSxJQUFNQyxnQkFBZ0IsR0FBR0YsT0FBTyxDQUFDRyxLQUFLLENBQUMsSUFBSSxDQUFDO0VBQzVDLElBQUlELGdCQUFnQixDQUFDeEQsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUNqQyxJQUFNMEQsU0FBUyxHQUFHRixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUNoRCxJQUFNRSxZQUFZLEdBQUdELFNBQVMsQ0FBQzFELE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHMEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDMUQsTUFBTTtJQUNyRSxPQUFPNEQsUUFBUSxDQUFDSixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBR0csWUFBWTtFQUN6RDtFQUVBLElBQU1FLFNBQVMsR0FBR1AsT0FBTyxDQUFDRyxLQUFLLENBQUMsR0FBRyxDQUFDO0VBQ3BDLElBQUlJLFNBQVMsQ0FBQzdELE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDMUIsT0FBTyxDQUFDO0VBQ1Y7RUFDQSxPQUFPNkQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDN0QsTUFBTTtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM4RCxvQkFBb0JBLENBQ2xDdEQsR0FBVyxFQUNYakMsUUFBNEIsRUFDNUI0RSxJQUFZLEVBQ1pZLEtBQXVCLEVBQ2Y7RUFDUixJQUFJQSxLQUFLLElBQUlBLEtBQUssQ0FBQy9ELE1BQU0sRUFBRTtJQUN6QjtJQUNBLE9BQU8sSUFBQWdFLGlCQUFXLEVBQUN4RCxHQUFHLEVBQUV1RCxLQUFLLENBQUM7RUFDaEM7RUFFQSxPQUFPRSxjQUFjLENBQUMxRixRQUFRLEVBQUU0RSxJQUFJLEVBQUUzQyxHQUFHLENBQUM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTeUQsY0FBY0EsQ0FBQzFGLFFBQTRCLEVBQUU0RSxJQUFZLEVBQUUzQyxHQUFXLEVBQVU7RUFDOUYsSUFBSSxDQUFDaUIsUUFBUSxDQUFDMEIsSUFBSSxDQUFDLElBQUksQ0FBQzFCLFFBQVEsQ0FBQ2xELFFBQVEsQ0FBQyxFQUFFO0lBQzFDLE9BQU9pQyxHQUFHO0VBQ1o7RUFFQSxJQUFNMEQsT0FBTyxHQUFHaEIsMEJBQTBCLENBQUNDLElBQUksQ0FBQztFQUNoRCxJQUFNZ0IsS0FBSyxHQUFHbEUsSUFBSSxDQUFDZSxLQUFLLENBQUMsQ0FBQ1IsR0FBRyxHQUFHakMsUUFBUSxJQUFJNEUsSUFBSSxDQUFDO0VBQ2pELElBQUlpQixNQUFNLEdBQUc1RCxHQUFHLElBQUkyRCxLQUFLLEdBQUdoQixJQUFJLEdBQUc1RSxRQUFRLENBQUM7O0VBRTVDO0VBQ0E2RixNQUFNLEdBQUczRSxNQUFNLENBQUMrQyxZQUFZLENBQUM0QixNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFFeEMsSUFBSUMsT0FBZTtFQUNuQixJQUFJRCxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ2hCQyxPQUFPLEdBQUc3RCxHQUFHO0VBQ2YsQ0FBQyxNQUFNLElBQUk0RCxNQUFNLEdBQUdqQixJQUFJLEdBQUcsQ0FBQyxFQUFFO0lBQzVCa0IsT0FBTyxHQUFHRixLQUFLLEdBQUdoQixJQUFJLEdBQUc1RSxRQUFRO0VBQ25DLENBQUMsTUFBTTtJQUNMOEYsT0FBTyxHQUFHLENBQUNGLEtBQUssR0FBRyxDQUFDLElBQUloQixJQUFJLEdBQUc1RSxRQUFRO0VBQ3pDOztFQUVBO0VBQ0EsSUFBTStGLE9BQU8sR0FBRzlCLFlBQVksQ0FBQzZCLE9BQU8sRUFBRUgsT0FBTyxDQUFDO0VBRTlDLE9BQU96RSxNQUFNLENBQUM2RSxPQUFPLENBQUM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxnQkFBZ0MsR0FBQTFHLE9BQUEsQ0FBQTBHLGdCQUFBLEdBQUcsU0FBbkNBLGdCQUFnQ0EsQ0FBR3hGLENBQUM7RUFBQSxPQUFLLElBQUFDLCtCQUFrQixFQUFDRCxDQUFDLENBQUMsR0FBR3lGLE1BQU0sQ0FBQ3pGLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFBQSxDQUFDO0FBRXRGLElBQU0wRixjQUFjLEdBQUE1RyxPQUFBLENBQUE0RyxjQUFBLEdBQUcsU0FBakJBLGNBQWNBLENBQUcxRixDQUFDO0VBQUEsT0FBSzBDLFFBQVEsQ0FBQzFDLENBQUMsQ0FBQyxHQUFHeUYsTUFBTSxDQUFDeEIsV0FBVyxDQUFDakUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQUEsQ0FBQztBQUV2RSxJQUFNMkYsb0JBRVosR0FBQTdHLE9BQUEsQ0FBQTZHLG9CQUFBLElBQUEvRyxxQkFBQSxXQUFBZ0gsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsYUFBQWhILHFCQUFBLEVBQ0V5RSwwQkFBZSxDQUFDd0MsTUFBTSxFQUFHTCxnQkFBZ0IsR0FDekNuQywwQkFBZSxDQUFDRyxTQUFTLEVBQUdnQyxnQkFBZ0IsR0FDNUNuQywwQkFBZSxDQUFDRSxPQUFPLEVBQUdpQyxnQkFBZ0IsR0FDMUNuQywwQkFBZSxDQUFDQyxJQUFJLEVBQUdrQyxnQkFBZ0IsR0FDdkNuQywwQkFBZSxXQUFRLEVBQUdtQyxnQkFBZ0IsR0FDMUNuQywwQkFBZSxDQUFDeUMsSUFBSSxFQUFHTixnQkFBZ0IsR0FDdkNuQywwQkFBZSxDQUFDMEMsT0FBTyxFQUFHLFVBQUF0RixDQUFDO0VBQUEsT0FDMUIsT0FBT0EsQ0FBQyxLQUFLLFFBQVEsR0FDakJBLENBQUMsR0FDRCxJQUFBdUYsb0JBQWEsRUFBQ3ZGLENBQUMsQ0FBQyxHQUNoQndGLElBQUksQ0FBQ0MsU0FBUyxDQUFDekYsQ0FBQyxDQUFDLEdBQ2pCRSxLQUFLLENBQUNDLE9BQU8sQ0FBQ0gsQ0FBQyxDQUFDLE9BQUF5RCxNQUFBLENBQ1p1QixNQUFNLENBQUNoRixDQUFDLENBQUMsU0FDYixFQUFFO0FBQUEsSUFDUDRDLDBCQUFlLENBQUM4QyxRQUFRLEVBQUcsVUFBQTFGLENBQUM7RUFBQSxPQUFJQSxDQUFDO0FBQUEsSUFDakM0QywwQkFBZSxDQUFDK0MsTUFBTSxFQUFHSCxJQUFJLENBQUNDLFNBQVMsR0FDdkM3QywwQkFBZSxDQUFDZ0QsS0FBSyxFQUFHSixJQUFJLENBQUNDLFNBQVMsT0FBQU4sZ0JBQUEsYUFBQWhILHFCQUFBLEVBQ3RDeUUsMEJBQWUsQ0FBQ2lELEVBQUUsRUFBR2QsZ0JBQWdCLEVBQ3ZDOztBQUVEO0FBQ0E7QUFDQTtBQUNPLElBQU1lLGVBQWUsR0FBQXpILE9BQUEsQ0FBQXlILGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBSWhILEtBQVUsRUFBRWlILElBQVksRUFBYTtFQUNuRSxJQUFJLENBQUMsSUFBQXZHLCtCQUFrQixFQUFDVixLQUFLLENBQUMsRUFBRTtJQUM5QixPQUFPLEVBQUU7RUFDWDtFQUNBLE9BQU9vRyxvQkFBb0IsQ0FBQ2EsSUFBSSxDQUFDLEdBQUdiLG9CQUFvQixDQUFDYSxJQUFJLENBQUMsQ0FBQ2pILEtBQUssQ0FBQyxHQUFHa0csTUFBTSxDQUFDbEcsS0FBSyxDQUFDO0FBQ3ZGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2tILFlBQVlBLENBQzFCcEUsTUFBK0MsRUFDL0NxRSxLQUFhLEVBQ0c7RUFDaEIsSUFBSSxDQUFDckUsTUFBTSxFQUFFO0lBQ1gsT0FBT21ELGdCQUFnQjtFQUN6QjtFQUNBLElBQU1tQixhQUFhLEdBQUc3RCxNQUFNLENBQUNuRCxNQUFNLENBQUNpSCwwQkFBZSxDQUFDLENBQUNDLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDQyxzQkFBVyxDQUFDLEtBQUsxRSxNQUFNO0VBQUEsRUFBQztFQUV6RixJQUFJc0UsYUFBYSxFQUFFO0lBQ2pCLE9BQU9LLGtCQUFrQixDQUFDTCxhQUE4QixDQUFDO0VBQzNELENBQUMsTUFBTSxJQUFJLE9BQU90RSxNQUFNLEtBQUssUUFBUSxJQUFJcUUsS0FBSyxFQUFFO0lBQzlDLE9BQU9PLGlCQUFpQixDQUFDNUUsTUFBTSxFQUFFcUUsS0FBSyxDQUFDO0VBQ3pDO0VBRUEsT0FBT2xCLGdCQUFnQjtBQUN6QjtBQUVPLFNBQVMwQixrQkFBa0JBLENBQ2hDUixLQUE2RSxFQUM3RDtFQUNoQixJQUFPckUsTUFBTSxHQUFtQnFFLEtBQUssQ0FBOUJyRSxNQUFNO0lBQUU4RSxhQUFhLEdBQUlULEtBQUssQ0FBdEJTLGFBQWE7RUFFNUIsSUFBSSxDQUFDOUUsTUFBTSxJQUFJLENBQUM4RSxhQUFhLEVBQUU7SUFDN0IsT0FBT3hCLG9CQUFvQixDQUFDZSxLQUFLLENBQUNGLElBQUksQ0FBQztFQUN6QztFQUNBLElBQU1HLGFBQWEsR0FBRzdELE1BQU0sQ0FBQ25ELE1BQU0sQ0FBQ2lILDBCQUFlLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJQSxDQUFDLENBQUNDLHNCQUFXLENBQUMsS0FBS0ksYUFBYTtFQUFBLEVBQUM7RUFFaEcsSUFBSVIsYUFBYSxFQUFFO0lBQ2pCLE9BQU9LLGtCQUFrQixDQUFDTCxhQUFhLENBQUM7RUFDMUMsQ0FBQyxNQUFNLElBQUksT0FBT1EsYUFBYSxLQUFLLFFBQVEsSUFBSVQsS0FBSyxFQUFFO0lBQ3JELE9BQU9PLGlCQUFpQixDQUFDRSxhQUFhLEVBQUVULEtBQUssQ0FBQztFQUNoRCxDQUFDLE1BQU0sSUFBSSxJQUFBVSxRQUFBLGFBQU9ELGFBQWEsTUFBSyxRQUFRLEVBQUU7SUFDNUMsT0FBT0UsYUFBYSxDQUFDRixhQUFhLENBQUM7RUFDckM7RUFFQSxPQUFPM0IsZ0JBQWdCO0FBQ3pCO0FBRU8sU0FBUzZCLGFBQWFBLENBQUNoRixNQUFNLEVBQUU7RUFDcEMsT0FBTyxVQUFBckMsQ0FBQztJQUFBLE9BQUlxQyxNQUFNLENBQUNyQyxDQUFDLENBQUM7RUFBQTtBQUN2QjtBQUVPLFNBQVNnSCxrQkFBa0JBLENBQUNMLGFBQTRCLEVBQXNCO0VBQ25GLElBQUksQ0FBQ0EsYUFBYSxJQUFJLENBQUNBLGFBQWEsQ0FBQ3RFLE1BQU0sRUFBRTtJQUMzQyxPQUFPbUQsZ0JBQWdCO0VBQ3pCO0VBRUEsUUFBUW1CLGFBQWEsQ0FBQ0gsSUFBSTtJQUN4QixLQUFLYywrQkFBb0IsQ0FBQ0MsT0FBTztNQUMvQixPQUFPLElBQUFDLGdCQUFRLEVBQUNiLGFBQWEsQ0FBQ3RFLE1BQU0sQ0FBQztJQUN2QyxLQUFLaUYsK0JBQW9CLENBQUNHLElBQUk7SUFDOUIsS0FBS0gsK0JBQW9CLENBQUNJLFNBQVM7TUFDakMsT0FBT0MsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUNoQixhQUFhLENBQUN0RSxNQUFNLENBQUM7SUFDdEQsS0FBS2lGLCtCQUFvQixDQUFDTSxVQUFVO01BQ2xDLE9BQU8sVUFBQTVILENBQUM7UUFBQSxVQUFBa0UsTUFBQSxDQUFPLElBQUFzRCxnQkFBUSxFQUFDWiwwQkFBZSxDQUFDaUIsdUJBQXVCLENBQUN4RixNQUFNLENBQUMsQ0FBQ3JDLENBQUMsQ0FBQztNQUFBLENBQUc7SUFDL0UsS0FBS3NILCtCQUFvQixDQUFDUSxPQUFPO01BQy9CLE9BQU9DLG1CQUFtQixDQUFDcEIsYUFBYSxDQUFDdEUsTUFBTSxDQUFDO0lBQ2xEO01BQ0UsT0FBT21ELGdCQUFnQjtFQUMzQjtBQUNGO0FBRU8sU0FBU3VDLG1CQUFtQkEsQ0FBQzFGLE1BQWMsRUFBa0I7RUFDbEUsUUFBUUEsTUFBTTtJQUNaLEtBQUssSUFBSTtNQUNQLE9BQU8sVUFBQ3JDLENBQVU7UUFBQSxPQUFNQSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUc7TUFBQSxDQUFDO0lBQ3hDLEtBQUssSUFBSTtNQUNQLE9BQU8sVUFBQ0EsQ0FBVTtRQUFBLE9BQU1BLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSTtNQUFBLENBQUM7SUFDM0M7TUFDRSxPQUFPd0YsZ0JBQWdCO0VBQzNCO0FBQ0Y7QUFDQTtBQUNPLFNBQVN5QixpQkFBaUJBLENBQUM1RSxNQUFNLEVBQUVxRSxLQUFzQixFQUFrQjtFQUNoRixRQUFRQSxLQUFLLENBQUNGLElBQUk7SUFDaEIsS0FBS25ELDBCQUFlLENBQUNDLElBQUk7SUFDekIsS0FBS0QsMEJBQWUsQ0FBQ0UsT0FBTztNQUMxQixPQUFPLElBQUFpRSxnQkFBUSxFQUFDbkYsTUFBTSxDQUFDO0lBQ3pCLEtBQUtnQiwwQkFBZSxDQUFDeUMsSUFBSTtJQUN6QixLQUFLekMsMEJBQWUsQ0FBQ0csU0FBUztNQUM1QixPQUFPbUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUN0RixNQUFNLENBQUM7SUFDeEM7TUFDRSxPQUFPLFVBQUFyQyxDQUFDO1FBQUEsT0FBSUEsQ0FBQztNQUFBO0VBQ2pCO0FBQ0Y7QUFFQSxTQUFTZ0ksaUJBQWlCQSxDQUFDQyxDQUFDLEVBQUU7RUFDNUI7RUFDQSxPQUFPLElBQUFULGdCQUFRLEVBQUMsTUFBTSxDQUFDLENBQUNTLENBQUMsQ0FBQztBQUM1QjtBQUVPLFNBQVNDLFlBQVlBLENBQUNELENBQVMsRUFBRXpCLElBQWEsRUFBVTtFQUM3RCxRQUFRQSxJQUFJO0lBQ1YsS0FBS25ELDBCQUFlLENBQUNFLE9BQU87TUFDMUIsSUFBSTBFLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDVCxXQUFBL0QsTUFBQSxDQUFXZ0UsWUFBWSxDQUFDLENBQUNELENBQUMsRUFBRSxTQUFTLENBQUM7TUFDeEM7TUFDQSxJQUFJQSxDQUFDLEdBQUcsSUFBSSxFQUFFO1FBQ1osVUFBQS9ELE1BQUEsQ0FBVWhELElBQUksQ0FBQzRDLEtBQUssQ0FBQ21FLENBQUMsQ0FBQztNQUN6QjtNQUNBLElBQUlBLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFO1FBQ2pCLE9BQU8sSUFBQVQsZ0JBQVEsRUFBQyxHQUFHLENBQUMsQ0FBQ3RHLElBQUksQ0FBQzRDLEtBQUssQ0FBQ21FLENBQUMsQ0FBQyxDQUFDO01BQ3JDO01BQ0EsT0FBT0QsaUJBQWlCLENBQUNDLENBQUMsQ0FBQztJQUM3QixLQUFLNUUsMEJBQWUsQ0FBQ0MsSUFBSTtNQUN2QixJQUFJMkUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNULFdBQUEvRCxNQUFBLENBQVdnRSxZQUFZLENBQUMsQ0FBQ0QsQ0FBQyxFQUFFLFFBQVEsQ0FBQztNQUN2QztNQUNBLElBQUlBLENBQUMsR0FBRyxJQUFJLEVBQUU7UUFDWixPQUFPLElBQUFULGdCQUFRLEVBQUMsTUFBTSxDQUFDLENBQUNTLENBQUMsQ0FBQztNQUM1QjtNQUNBLElBQUlBLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFO1FBQ2pCLE9BQU8sSUFBQVQsZ0JBQVEsRUFBQyxPQUFPLENBQUMsQ0FBQ1MsQ0FBQyxDQUFDO01BQzdCO01BQ0EsT0FBT0QsaUJBQWlCLENBQUNDLENBQUMsQ0FBQztJQUU3QjtNQUNFLE9BQU9DLFlBQVksQ0FBQ0QsQ0FBQyxFQUFFLE1BQU0sQ0FBQztFQUNsQztBQUNGO0FBRUEsSUFBTUUsY0FBYyxHQUFHO0VBQ3JCQyxDQUFDLEVBQUVsSCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNuQndFLENBQUMsRUFBRW5ILElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ25CeUUsQ0FBQyxFQUFFcEgsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDbkIwRSxDQUFDLEVBQUVySCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNuQjJFLENBQUMsRUFBRXRILElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ25CNEUsQ0FBQyxFQUFFdkgsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDbEI2RSxDQUFDLEVBQUV4SCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNsQjhFLENBQUMsRUFBRXpILElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ2xCK0UsQ0FBQyxFQUFFMUgsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDbEJnRixFQUFFLEVBQUUzSCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNuQnBELENBQUMsRUFBRVMsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNuQmlGLENBQUMsRUFBRTVILElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDbkJrRixDQUFDLEVBQUU3SCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ25CbUYsQ0FBQyxFQUFFOUgsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUNuQm9FLENBQUMsRUFBRS9HLElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7RUFDbkJvRixDQUFDLEVBQUUvSCxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0VBQ3BCaUQsQ0FBQyxFQUFFNUYsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNwQlosQ0FBQyxFQUFFL0IsSUFBSSxDQUFDMkMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztFQUNwQnFGLENBQUMsRUFBRWhJLElBQUksQ0FBQzJDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDcEJzRixDQUFDLEVBQUVqSSxJQUFJLENBQUMyQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNPLFNBQVN1RixtQkFBbUJBLENBQUNDLEdBQVcsRUFBVTtFQUN2RCxJQUFJQyxXQUEwQixHQUFHLElBQUk7RUFDckMsSUFBTUMsTUFBTSxHQUFHRixHQUFHLENBQUNHLElBQUksQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBQzNDM0csTUFBTSxDQUFDNEcsT0FBTyxDQUFDdkIsY0FBYyxDQUFDLENBQUNwSSxPQUFPLENBQUMsVUFBQVUsQ0FBQyxFQUFJO0lBQzFDLElBQUk4SSxNQUFNLENBQUNJLFFBQVEsQ0FBQ2xKLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ3pCNkksV0FBVyxHQUFHTSxVQUFVLENBQUNMLE1BQU0sQ0FBQyxHQUFHOUksQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN2QyxPQUFPLElBQUk7SUFDYjtJQUNBLE9BQU8sS0FBSztFQUNkLENBQUMsQ0FBQzs7RUFFRjtFQUNBLE9BQU82SSxXQUFXLEtBQUssSUFBSSxHQUFHNUksTUFBTSxDQUFDNkksTUFBTSxDQUFDLEdBQUdELFdBQVc7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTM0IsaUJBQWlCQSxDQUMvQmtDLFFBQXdCLEVBQ3FCO0VBQzdDLE9BQU9BLFFBQVEsR0FDWCxVQUFBeEgsTUFBTTtJQUFBLE9BQUksVUFBQXlILEVBQUU7TUFBQSxPQUFJeEgsMEJBQU0sQ0FBQ0MsR0FBRyxDQUFDdUgsRUFBRSxDQUFDLENBQUNDLEVBQUUsQ0FBQ0YsUUFBUSxDQUFDLENBQUN4SCxNQUFNLENBQUNBLE1BQU0sQ0FBQztJQUFBO0VBQUE7RUFDMUQ7RUFDQSxVQUFBQSxNQUFNO0lBQUEsT0FBSSxVQUFBeUgsRUFBRTtNQUFBLE9BQUlBLEVBQUUsR0FBR3hILDBCQUFNLENBQUNDLEdBQUcsQ0FBQ3VILEVBQUUsQ0FBQyxDQUFDekgsTUFBTSxDQUFDQSxNQUFNLENBQUMsR0FBRyxFQUFFO0lBQUE7RUFBQTtBQUM3RCIsImlnbm9yZUxpc3QiOltdfQ==
@@ -20,6 +20,6 @@ var _constants = require("@kepler.gl/constants");
20
20
  */
21
21
  var exportMapToHTML = exports.exportMapToHTML = function exportMapToHTML(options) {
22
22
  var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _constants.KEPLER_GL_VERSION;
23
- return "\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"UTF-8\"/>\n <title>Kepler.gl embedded map</title>\n\n <!--Uber Font-->\n <link rel=\"stylesheet\" href=\"https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/uber-fonts/4.0.0/superfine.css\">\n\n <!--MapBox css-->\n <link href=\"https://unpkg.com/maplibre-gl@^3/dist/maplibre-gl.css\" rel=\"stylesheet\">\n\n <!-\u2014 facebook open graph tags -->\n <meta property=\"og:url\" content=\"http://kepler.gl/\" />\n <meta property=\"og:title\" content=\"Large-scale WebGL-powered Geospatial Data Visualization Tool\" />\n <meta property=\"og:description\" content=\"Kepler.gl is a powerful web-based geospatial data analysis tool. Built on a high performance rendering engine and designed for large-scale data sets.\" />\n <meta property=\"og:site_name\" content=\"kepler.gl\" />\n <meta property=\"og:image\" content=\"https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/kepler.gl-meta-tag.png\" />\n <meta property=\"og:image:type\" content=\"image/png\" />\n <meta property=\"og:image:width\" content=\"800\" />\n <meta property=\"og:image:height\" content=\"800\" />\n\n <!-\u2014 twitter card tags -->\n <meta name=\"twitter:card\" content=\"summary_large_image\">\n <meta name=\"twitter:site\" content=\"@openjsf\">\n <meta name=\"twitter:creator\" content=\"@openjsf\">\n <meta name=\"twitter:title\" content=\"Large-scale WebGL-powered Geospatial Data Visualization Tool\">\n <meta name=\"twitter:description\" content=\"Kepler.gl is a powerful web-based geospatial data analysis tool. Built on a high performance rendering engine and designed for large-scale data sets.\">\n <meta name=\"twitter:image\" content=\"https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/kepler.gl-meta-tag.png\" />\n\n <!-- Load React/Redux -->\n <script src=\"https://unpkg.com/react@18.3.1/umd/react.production.min.js\" crossorigin></script>\n <script src=\"https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js\" crossorigin></script>\n <script src=\"https://unpkg.com/redux@4.2.1/dist/redux.js\" crossorigin></script>\n <script src=\"https://unpkg.com/react-redux@8.1.2/dist/react-redux.min.js\" crossorigin></script>\n <script src=\"https://unpkg.com/styled-components@4.4.1/dist/styled-components.min.js\" crossorigin></script>\n\n <!-- Load Kepler.gl -->\n <script src=\"https://unpkg.com/kepler.gl@".concat(version, "/umd/keplergl.min.js\" crossorigin></script>\n\n <style type=\"text/css\">\n body {margin: 0; padding: 0; overflow: hidden;}\n </style>\n\n <!--MapBox token-->\n <script>\n /**\n * Provide your MapBox Token\n **/\n const MAPBOX_TOKEN = '").concat(options.mapboxApiAccessToken || 'PROVIDE_MAPBOX_TOKEN', "';\n const WARNING_MESSAGE = 'Please Provide a Mapbox Token in order to use Kepler.gl. Edit this file and fill out MAPBOX_TOKEN with your access key';\n </script>\n\n <!-- GA: Delete this as you wish, However to pat ourselves on the back, we only track anonymous pageview to understand how many people are using kepler.gl. -->\n <script>\n (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n ga('create', 'UA-64694404-19', {\n 'storage': 'none',\n 'clientId': localStorage.getItem('ga:clientId')\n });\n ga(function(tracker) {\n localStorage.setItem('ga:clientId', tracker.get('clientId'));\n });\n ga('set', 'checkProtocolTask', null); // Disable file protocol checking.\n ga('set', 'checkStorageTask', null); // Disable cookie storage checking.\n ga('set', 'historyImportTask', null); // Disable history checking (requires reading from cookies).\n ga('set', 'page', 'keplergl-html');\n ga('send', 'pageview');\n </script>\n </head>\n <body>\n <!-- We will put our React component inside this div. -->\n <div id=\"app\">\n <!-- Kepler.gl map will be placed here-->\n </div>\n\n <!-- Load our React component. -->\n <script>\n /* Validate Mapbox Token */\n if ((MAPBOX_TOKEN || '') === '' || MAPBOX_TOKEN === 'PROVIDE_MAPBOX_TOKEN') {\n alert(WARNING_MESSAGE);\n }\n\n /** STORE **/\n const reducers = (function createReducers(redux, keplerGl) {\n return redux.combineReducers({\n // mount keplerGl reducer\n keplerGl: keplerGl.keplerGlReducer.initialState({\n uiState: {\n readOnly: ").concat(options.mode === _constants.EXPORT_HTML_MAP_MODES.READ, ",\n currentModal: null\n }\n })\n });\n }(Redux, KeplerGl));\n\n const middleWares = (function createMiddlewares(keplerGl) {\n return keplerGl.enhanceReduxMiddleware([\n // Add other middlewares here\n ]);\n }(KeplerGl));\n\n const enhancers = (function craeteEnhancers(redux, middles) {\n return redux.applyMiddleware(...middles);\n }(Redux, middleWares));\n\n const store = (function createStore(redux, enhancers) {\n const initialState = {};\n\n return redux.createStore(\n reducers,\n initialState,\n redux.compose(enhancers)\n );\n }(Redux, enhancers));\n /** END STORE **/\n\n /** COMPONENTS **/\n var KeplerElement = (function makeKeplerElement(react, keplerGl, mapboxToken) {\n var LogoSvg = function LogoSvg() {\n return react.createElement(\n \"div\",\n { className: \"logo-container\", style: {position: 'fixed', zIndex: 10000, padding: '4px'} },\n react.createElement(\n \"svg\",\n {\n className: \"kepler_gl__logo\",\n width: \"107px\",\n height: \"21px\",\n viewBox: \"0 0 124 24\"\n },\n react.createElement(\n \"g\",\n { transform: \"translate(13.500000, 13.500000) rotate(45.000000) translate(-13.500000, -13.500000) translate(4.000000, 4.000000)\" },\n react.createElement(\"rect\", { x: \"0\", y: \"6\", transform: \"matrix(2.535181e-06 1 -1 2.535181e-06 18.1107 6.0369)\", fill: \"#535C6C\", width: \"12.1\", height: \"12.1\" }),\n react.createElement(\"rect\", { x: \"6\", y: \"0\", transform: \"matrix(2.535182e-06 1 -1 2.535182e-06 18.1107 -6.0369)\", fill:\"#1FBAD6\", width: \"12.1\", height: \"12.1\" })\n ),\n react.createElement(\n \"g\",\n {},\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M39,8.7h2.2l-2.8,4.2l2.9,5.1H39l-2.4-4.2h-1.3V18h-2V5l2-0.1v7.3h1.3L39,8.7z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M42.4,13.3c0-1.5,0.4-2.7,1.1-3.5s1.8-1.2,3.1-1.2c1.3,0,2.2,0.4,2.8,1.1c0.6,0.7,0.9,1.8,0.9,3.3 c0,0.4,0,0.8,0,1.1h-5.8c0,1.6,0.8,2.4,2.4,2.4c1,0,2-0.2,2.9-0.6l0.2,1.7c-0.4,0.2-0.9,0.4-1.4,0.5s-1.1,0.2-1.7,0.2 c-1.5,0-2.6-0.4-3.3-1.2C42.8,16.1,42.4,14.9,42.4,13.3z M46.6,10.1c-0.7,0-1.2,0.2-1.5,0.5c-0.4,0.4-0.6,0.9-0.6,1.7h4 c0-0.8-0.2-1.4-0.5-1.7S47.2,10.1,46.6,10.1z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M57.1,18.2c-1,0-1.8-0.3-2.3-0.9l0,0l0,1.3v2.5h-2V8.7h1.5l0.3,0.9h0c0.3-0.3,0.7-0.6,1.2-0.7 c0.4-0.2,0.9-0.3,1.4-0.3c1.2,0,2.1,0.4,2.7,1.1c0.6,0.7,0.9,2,0.9,3.7c0,1.6-0.3,2.8-1,3.7C59.2,17.8,58.3,18.2,57.1,18.2z M56.7,10.3c-0.4,0-0.8,0.1-1.1,0.2c-0.3,0.2-0.6,0.4-0.8,0.7v4.3c0.2,0.3,0.4,0.5,0.7,0.7c0.3,0.2,0.7,0.3,1.1,0.3 c0.7,0,1.2-0.2,1.6-0.7c0.4-0.5,0.5-1.3,0.5-2.5c0-0.8-0.1-1.4-0.2-1.8s-0.4-0.7-0.7-0.9C57.6,10.4,57.2,10.3,56.7,10.3z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M63.2,16V5l2-0.1v10.8c0,0.3,0.1,0.5,0.2,0.6c0.1,0.1,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.9-0.1V18 c-0.4,0.1-1,0.2-1.6,0.2c-0.8,0-1.3-0.2-1.7-0.5S63.2,16.8,63.2,16z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M68.2,13.3c0-1.5,0.4-2.7,1.1-3.5c0.7-0.8,1.8-1.2,3.1-1.2c1.3,0,2.2,0.4,2.8,1.1c0.6,0.7,0.9,1.8,0.9,3.3 c0,0.4,0,0.8,0,1.1h-5.8c0,1.6,0.8,2.4,2.4,2.4c1,0,2-0.2,2.9-0.6l0.2,1.7c-0.4,0.2-0.9,0.4-1.4,0.5s-1.1,0.2-1.7,0.2 c-1.5,0-2.6-0.4-3.3-1.2C68.6,16.1,68.2,14.9,68.2,13.3z M72.4,10.1c-0.7,0-1.2,0.2-1.5,0.5c-0.4,0.4-0.6,0.9-0.6,1.7h4 c0-0.8-0.2-1.4-0.5-1.7S73,10.1,72.4,10.1z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M80.2,8.7l0.1,1.7h0c0.3-0.6,0.7-1.1,1.1-1.4c0.4-0.3,1-0.5,1.6-0.5c0.4,0,0.7,0,1,0.1l-0.1,2 c-0.3-0.1-0.7-0.2-1-0.2c-0.7,0-1.3,0.3-1.7,0.8c-0.4,0.5-0.7,1.2-0.7,2.1V18h-2V8.7H80.2z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M83.8,17c0-0.8,0.4-1.2,1.2-1.2c0.8,0,1.2,0.4,1.2,1.2c0,0.8-0.4,1.1-1.2,1.1C84.2,18.2,83.8,17.8,83.8,17z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M88.5,18.7c0-0.8,0.4-1.4,1.2-1.8c-0.6-0.3-0.9-0.8-0.9-1.5c0-0.7,0.4-1.2,1.1-1.6c-0.3-0.3-0.6-0.6-0.7-0.9 c-0.2-0.4-0.2-0.8-0.2-1.3c0-1,0.3-1.8,0.9-2.3c0.6-0.5,1.6-0.8,2.8-0.8c0.5,0,1,0,1.4,0.1c0.4,0.1,0.8,0.2,1.1,0.4l2.4-0.2v1.5 h-1.5c0.2,0.4,0.2,0.8,0.2,1.3c0,1-0.3,1.7-0.9,2.2s-1.5,0.8-2.7,0.8c-0.7,0-1.2-0.1-1.6-0.2c-0.1,0.1-0.2,0.2-0.3,0.3 c-0.1,0.1-0.1,0.2-0.1,0.4c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.3,0.2,0.6,0.2l2.7,0.2c1,0.1,1.7,0.3,2.2,0.6c0.5,0.3,0.8,0.9,0.8,1.7 c0,0.6-0.2,1.1-0.5,1.5c-0.4,0.4-0.9,0.8-1.5,1c-0.7,0.2-1.5,0.4-2.4,0.4c-1.3,0-2.3-0.2-3-0.6C88.8,20.1,88.5,19.5,88.5,18.7z M95.1,18.4c0-0.3-0.1-0.5-0.3-0.7s-0.6-0.2-1.1-0.3l-2.7-0.3c-0.2,0.1-0.4,0.3-0.5,0.5c-0.1,0.2-0.2,0.4-0.2,0.6 c0,0.4,0.2,0.8,0.5,1c0.4,0.2,1,0.3,1.8,0.3C94.2,19.5,95.1,19.2,95.1,18.4z M94.3,11.5c0-0.6-0.1-1-0.4-1.2 c-0.3-0.2-0.7-0.3-1.3-0.3c-0.7,0-1.1,0.1-1.4,0.3c-0.3,0.2-0.4,0.6-0.4,1.2s0.1,1,0.4,1.2c0.3,0.2,0.7,0.3,1.4,0.3 c0.6,0,1.1-0.1,1.3-0.4S94.3,12,94.3,11.5z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M99.4,16V5l2-0.1v10.8c0,0.3,0.1,0.5,0.2,0.6c0.1,0.1,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.9-0.1V18 c-0.4,0.1-1,0.2-1.6,0.2c-0.8,0-1.3-0.2-1.7-0.5S99.4,16.8,99.4,16z\" })\n )\n )\n );\n };\n\n return function App() {\n var rootElm = react.useRef(null);\n var _useState = react.useState({\n width: window.innerWidth,\n height: window.innerHeight\n });\n var windowDimension = _useState[0];\n var setDimension = _useState[1];\n react.useEffect(function sideEffect(){\n function handleResize() {\n setDimension({width: window.innerWidth, height: window.innerHeight});\n };\n window.addEventListener('resize', handleResize);\n return function() {window.removeEventListener('resize', handleResize);};\n }, []);\n return react.createElement(\n 'div',\n {style: {position: 'absolute', left: 0, width: '100vw', height: '100vh'}},\n ").concat(options.mode === _constants.EXPORT_HTML_MAP_MODES.READ ? 'LogoSvg(),' : '', "\n react.createElement(keplerGl.KeplerGl, {\n mapboxApiAccessToken: mapboxToken,\n id: \"map\",\n width: windowDimension.width,\n height: windowDimension.height\n })\n )\n }\n }(React, KeplerGl, MAPBOX_TOKEN));\n\n const app = (function createReactReduxProvider(react, reactRedux, KeplerElement) {\n return react.createElement(\n reactRedux.Provider,\n {store},\n react.createElement(KeplerElement, null)\n )\n }(React, ReactRedux, KeplerElement));\n /** END COMPONENTS **/\n\n /** Render **/\n (function render(react, reactDOM, app) {\n const container = document.getElementById('app');\n const root = reactDOM.createRoot(container);\n root.render(app);\n }(React, ReactDOM, app));\n </script>\n <!-- The next script will show how to interact directly with Kepler map store -->\n <script>\n /**\n * Customize map.\n * In the following section you can use the store object to dispatch Kepler.gl actions\n * to add new data and customize behavior\n */\n (function customize(keplerGl, store) {\n const datasets = ").concat(JSON.stringify(options.datasets), ";\n const config = ").concat(JSON.stringify(options.config), ";\n\n const loadedData = keplerGl.KeplerGlSchema.load(\n datasets,\n config\n );\n\n // For some reason Kepler overwrites the config without extra wait time\n window.setTimeout(() => {\n store.dispatch(\n keplerGl.addDataToMap({\n datasets: loadedData.datasets,\n config: loadedData.config,\n options: {\n centerMap: false,\n },\n })\n );\n }, 500);\n }(KeplerGl, store))\n </script>\n </body>\n </html>\n ");
23
+ return "\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"UTF-8\"/>\n <title>Kepler.gl embedded map</title>\n\n <!--Uber Font-->\n <link rel=\"stylesheet\" href=\"https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/uber-fonts/4.0.0/superfine.css\">\n\n <!--MapBox css-->\n <link href=\"https://api.tiles.mapbox.com/mapbox-gl-js/v1.1.1/mapbox-gl.css\" rel=\"stylesheet\">\n <link href=\"https://unpkg.com/maplibre-gl@^3/dist/maplibre-gl.css\" rel=\"stylesheet\">\n\n <!-\u2014 facebook open graph tags -->\n <meta property=\"og:url\" content=\"http://kepler.gl/\" />\n <meta property=\"og:title\" content=\"Large-scale WebGL-powered Geospatial Data Visualization Tool\" />\n <meta property=\"og:description\" content=\"Kepler.gl is a powerful web-based geospatial data analysis tool. Built on a high performance rendering engine and designed for large-scale data sets.\" />\n <meta property=\"og:site_name\" content=\"kepler.gl\" />\n <meta property=\"og:image\" content=\"https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/kepler.gl-meta-tag.png\" />\n <meta property=\"og:image:type\" content=\"image/png\" />\n <meta property=\"og:image:width\" content=\"800\" />\n <meta property=\"og:image:height\" content=\"800\" />\n\n <!-\u2014 twitter card tags -->\n <meta name=\"twitter:card\" content=\"summary_large_image\">\n <meta name=\"twitter:site\" content=\"@openjsf\">\n <meta name=\"twitter:creator\" content=\"@openjsf\">\n <meta name=\"twitter:title\" content=\"Large-scale WebGL-powered Geospatial Data Visualization Tool\">\n <meta name=\"twitter:description\" content=\"Kepler.gl is a powerful web-based geospatial data analysis tool. Built on a high performance rendering engine and designed for large-scale data sets.\">\n <meta name=\"twitter:image\" content=\"https://d1a3f4spazzrp4.cloudfront.net/kepler.gl/kepler.gl-meta-tag.png\" />\n\n <!-- Load React/Redux -->\n <script src=\"https://unpkg.com/react@18.3.1/umd/react.production.min.js\" crossorigin></script>\n <script src=\"https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js\" crossorigin></script>\n <script src=\"https://unpkg.com/redux@4.2.1/dist/redux.js\" crossorigin></script>\n <script src=\"https://unpkg.com/react-redux@8.1.2/dist/react-redux.min.js\" crossorigin></script>\n <script src=\"https://unpkg.com/styled-components@6.1.8/dist/styled-components.min.js\" crossorigin></script>\n\n <!-- Load Kepler.gl -->\n <script src=\"https://unpkg.com/kepler.gl@".concat(version, "/umd/keplergl.min.js\" crossorigin></script>\n\n <style type=\"text/css\">\n body {margin: 0; padding: 0; overflow: hidden;}\n </style>\n\n <!--MapBox token-->\n <script>\n /**\n * Provide your MapBox Token\n **/\n const MAPBOX_TOKEN = '").concat(options.mapboxApiAccessToken || 'PROVIDE_MAPBOX_TOKEN', "';\n const WARNING_MESSAGE = 'Please Provide a Mapbox Token in order to use Kepler.gl. Edit this file and fill out MAPBOX_TOKEN with your access key';\n </script>\n\n <!-- GA: Delete this as you wish, However to pat ourselves on the back, we only track anonymous pageview to understand how many people are using kepler.gl. -->\n <script>\n (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');\n ga('create', 'UA-64694404-19', {\n 'storage': 'none',\n 'clientId': localStorage.getItem('ga:clientId')\n });\n ga(function(tracker) {\n localStorage.setItem('ga:clientId', tracker.get('clientId'));\n });\n ga('set', 'checkProtocolTask', null); // Disable file protocol checking.\n ga('set', 'checkStorageTask', null); // Disable cookie storage checking.\n ga('set', 'historyImportTask', null); // Disable history checking (requires reading from cookies).\n ga('set', 'page', 'keplergl-html');\n ga('send', 'pageview');\n </script>\n </head>\n <body>\n <!-- We will put our React component inside this div. -->\n <div id=\"app\">\n <!-- Kepler.gl map will be placed here-->\n </div>\n\n <!-- Load our React component. -->\n <script>\n /* Validate Mapbox Token */\n if ((MAPBOX_TOKEN || '') === '' || MAPBOX_TOKEN === 'PROVIDE_MAPBOX_TOKEN') {\n alert(WARNING_MESSAGE);\n }\n\n /** STORE **/\n const reducers = (function createReducers(redux, keplerGl) {\n return redux.combineReducers({\n // mount keplerGl reducer\n keplerGl: keplerGl.keplerGlReducer.initialState({\n uiState: {\n readOnly: ").concat(options.mode === _constants.EXPORT_HTML_MAP_MODES.READ, ",\n currentModal: null\n }\n })\n });\n }(Redux, KeplerGl));\n\n const middleWares = (function createMiddlewares(keplerGl) {\n return keplerGl.enhanceReduxMiddleware([\n // Add other middlewares here\n ]);\n }(KeplerGl));\n\n const enhancers = (function craeteEnhancers(redux, middles) {\n return redux.applyMiddleware(...middles);\n }(Redux, middleWares));\n\n const store = (function createStore(redux, enhancers) {\n const initialState = {};\n\n return redux.createStore(\n reducers,\n initialState,\n redux.compose(enhancers)\n );\n }(Redux, enhancers));\n /** END STORE **/\n\n /** COMPONENTS **/\n var KeplerElement = (function makeKeplerElement(react, keplerGl, mapboxToken) {\n var LogoSvg = function LogoSvg() {\n return react.createElement(\n \"div\",\n { className: \"logo-container\", style: {position: 'fixed', zIndex: 10000, padding: '4px'} },\n react.createElement(\n \"svg\",\n {\n className: \"kepler_gl__logo\",\n width: \"107px\",\n height: \"21px\",\n viewBox: \"0 0 124 24\"\n },\n react.createElement(\n \"g\",\n { transform: \"translate(13.500000, 13.500000) rotate(45.000000) translate(-13.500000, -13.500000) translate(4.000000, 4.000000)\" },\n react.createElement(\"rect\", { x: \"0\", y: \"6\", transform: \"matrix(2.535181e-06 1 -1 2.535181e-06 18.1107 6.0369)\", fill: \"#535C6C\", width: \"12.1\", height: \"12.1\" }),\n react.createElement(\"rect\", { x: \"6\", y: \"0\", transform: \"matrix(2.535182e-06 1 -1 2.535182e-06 18.1107 -6.0369)\", fill:\"#1FBAD6\", width: \"12.1\", height: \"12.1\" })\n ),\n react.createElement(\n \"g\",\n {},\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M39,8.7h2.2l-2.8,4.2l2.9,5.1H39l-2.4-4.2h-1.3V18h-2V5l2-0.1v7.3h1.3L39,8.7z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M42.4,13.3c0-1.5,0.4-2.7,1.1-3.5s1.8-1.2,3.1-1.2c1.3,0,2.2,0.4,2.8,1.1c0.6,0.7,0.9,1.8,0.9,3.3 c0,0.4,0,0.8,0,1.1h-5.8c0,1.6,0.8,2.4,2.4,2.4c1,0,2-0.2,2.9-0.6l0.2,1.7c-0.4,0.2-0.9,0.4-1.4,0.5s-1.1,0.2-1.7,0.2 c-1.5,0-2.6-0.4-3.3-1.2C42.8,16.1,42.4,14.9,42.4,13.3z M46.6,10.1c-0.7,0-1.2,0.2-1.5,0.5c-0.4,0.4-0.6,0.9-0.6,1.7h4 c0-0.8-0.2-1.4-0.5-1.7S47.2,10.1,46.6,10.1z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M57.1,18.2c-1,0-1.8-0.3-2.3-0.9l0,0l0,1.3v2.5h-2V8.7h1.5l0.3,0.9h0c0.3-0.3,0.7-0.6,1.2-0.7 c0.4-0.2,0.9-0.3,1.4-0.3c1.2,0,2.1,0.4,2.7,1.1c0.6,0.7,0.9,2,0.9,3.7c0,1.6-0.3,2.8-1,3.7C59.2,17.8,58.3,18.2,57.1,18.2z M56.7,10.3c-0.4,0-0.8,0.1-1.1,0.2c-0.3,0.2-0.6,0.4-0.8,0.7v4.3c0.2,0.3,0.4,0.5,0.7,0.7c0.3,0.2,0.7,0.3,1.1,0.3 c0.7,0,1.2-0.2,1.6-0.7c0.4-0.5,0.5-1.3,0.5-2.5c0-0.8-0.1-1.4-0.2-1.8s-0.4-0.7-0.7-0.9C57.6,10.4,57.2,10.3,56.7,10.3z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M63.2,16V5l2-0.1v10.8c0,0.3,0.1,0.5,0.2,0.6c0.1,0.1,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.9-0.1V18 c-0.4,0.1-1,0.2-1.6,0.2c-0.8,0-1.3-0.2-1.7-0.5S63.2,16.8,63.2,16z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M68.2,13.3c0-1.5,0.4-2.7,1.1-3.5c0.7-0.8,1.8-1.2,3.1-1.2c1.3,0,2.2,0.4,2.8,1.1c0.6,0.7,0.9,1.8,0.9,3.3 c0,0.4,0,0.8,0,1.1h-5.8c0,1.6,0.8,2.4,2.4,2.4c1,0,2-0.2,2.9-0.6l0.2,1.7c-0.4,0.2-0.9,0.4-1.4,0.5s-1.1,0.2-1.7,0.2 c-1.5,0-2.6-0.4-3.3-1.2C68.6,16.1,68.2,14.9,68.2,13.3z M72.4,10.1c-0.7,0-1.2,0.2-1.5,0.5c-0.4,0.4-0.6,0.9-0.6,1.7h4 c0-0.8-0.2-1.4-0.5-1.7S73,10.1,72.4,10.1z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M80.2,8.7l0.1,1.7h0c0.3-0.6,0.7-1.1,1.1-1.4c0.4-0.3,1-0.5,1.6-0.5c0.4,0,0.7,0,1,0.1l-0.1,2 c-0.3-0.1-0.7-0.2-1-0.2c-0.7,0-1.3,0.3-1.7,0.8c-0.4,0.5-0.7,1.2-0.7,2.1V18h-2V8.7H80.2z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M83.8,17c0-0.8,0.4-1.2,1.2-1.2c0.8,0,1.2,0.4,1.2,1.2c0,0.8-0.4,1.1-1.2,1.1C84.2,18.2,83.8,17.8,83.8,17z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M88.5,18.7c0-0.8,0.4-1.4,1.2-1.8c-0.6-0.3-0.9-0.8-0.9-1.5c0-0.7,0.4-1.2,1.1-1.6c-0.3-0.3-0.6-0.6-0.7-0.9 c-0.2-0.4-0.2-0.8-0.2-1.3c0-1,0.3-1.8,0.9-2.3c0.6-0.5,1.6-0.8,2.8-0.8c0.5,0,1,0,1.4,0.1c0.4,0.1,0.8,0.2,1.1,0.4l2.4-0.2v1.5 h-1.5c0.2,0.4,0.2,0.8,0.2,1.3c0,1-0.3,1.7-0.9,2.2s-1.5,0.8-2.7,0.8c-0.7,0-1.2-0.1-1.6-0.2c-0.1,0.1-0.2,0.2-0.3,0.3 c-0.1,0.1-0.1,0.2-0.1,0.4c0,0.2,0.1,0.3,0.2,0.4c0.1,0.1,0.3,0.2,0.6,0.2l2.7,0.2c1,0.1,1.7,0.3,2.2,0.6c0.5,0.3,0.8,0.9,0.8,1.7 c0,0.6-0.2,1.1-0.5,1.5c-0.4,0.4-0.9,0.8-1.5,1c-0.7,0.2-1.5,0.4-2.4,0.4c-1.3,0-2.3-0.2-3-0.6C88.8,20.1,88.5,19.5,88.5,18.7z M95.1,18.4c0-0.3-0.1-0.5-0.3-0.7s-0.6-0.2-1.1-0.3l-2.7-0.3c-0.2,0.1-0.4,0.3-0.5,0.5c-0.1,0.2-0.2,0.4-0.2,0.6 c0,0.4,0.2,0.8,0.5,1c0.4,0.2,1,0.3,1.8,0.3C94.2,19.5,95.1,19.2,95.1,18.4z M94.3,11.5c0-0.6-0.1-1-0.4-1.2 c-0.3-0.2-0.7-0.3-1.3-0.3c-0.7,0-1.1,0.1-1.4,0.3c-0.3,0.2-0.4,0.6-0.4,1.2s0.1,1,0.4,1.2c0.3,0.2,0.7,0.3,1.4,0.3 c0.6,0,1.1-0.1,1.3-0.4S94.3,12,94.3,11.5z\" }),\n react.createElement(\"path\", { fill:\"#1FBAD6\", d: \"M99.4,16V5l2-0.1v10.8c0,0.3,0.1,0.5,0.2,0.6c0.1,0.1,0.3,0.2,0.6,0.2c0.3,0,0.6,0,0.9-0.1V18 c-0.4,0.1-1,0.2-1.6,0.2c-0.8,0-1.3-0.2-1.7-0.5S99.4,16.8,99.4,16z\" })\n )\n )\n );\n };\n\n return function App() {\n var rootElm = react.useRef(null);\n var _useState = react.useState({\n width: window.innerWidth,\n height: window.innerHeight\n });\n var windowDimension = _useState[0];\n var setDimension = _useState[1];\n react.useEffect(function sideEffect(){\n function handleResize() {\n setDimension({width: window.innerWidth, height: window.innerHeight});\n };\n window.addEventListener('resize', handleResize);\n return function() {window.removeEventListener('resize', handleResize);};\n }, []);\n return react.createElement(\n 'div',\n {style: {position: 'absolute', left: 0, width: '100vw', height: '100vh'}},\n ").concat(options.mode === _constants.EXPORT_HTML_MAP_MODES.READ ? 'LogoSvg(),' : '', "\n react.createElement(keplerGl.KeplerGl, {\n mapboxApiAccessToken: mapboxToken,\n id: \"map\",\n width: windowDimension.width,\n height: windowDimension.height\n })\n )\n }\n }(React, KeplerGl, MAPBOX_TOKEN));\n\n const app = (function createReactReduxProvider(react, reactRedux, KeplerElement) {\n return react.createElement(\n reactRedux.Provider,\n {store},\n react.createElement(KeplerElement, null)\n )\n }(React, ReactRedux, KeplerElement));\n /** END COMPONENTS **/\n\n /** Render **/\n (function render(react, reactDOM, app) {\n const container = document.getElementById('app');\n const root = reactDOM.createRoot(container);\n root.render(app);\n }(React, ReactDOM, app));\n </script>\n <!-- The next script will show how to interact directly with Kepler map store -->\n <script>\n /**\n * Customize map.\n * In the following section you can use the store object to dispatch Kepler.gl actions\n * to add new data and customize behavior\n */\n (function customize(keplerGl, store) {\n const datasets = ").concat(JSON.stringify(options.datasets), ";\n const config = ").concat(JSON.stringify(options.config), ";\n\n const loadedData = keplerGl.KeplerGlSchema.load(\n datasets,\n config\n );\n\n // For some reason Kepler overwrites the config without extra wait time\n window.setTimeout(() => {\n store.dispatch(\n keplerGl.addDataToMap({\n datasets: loadedData.datasets,\n config: loadedData.config,\n options: {\n centerMap: false,\n },\n })\n );\n }, 500);\n }(KeplerGl, store))\n </script>\n </body>\n </html>\n ");
24
24
  };
25
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsImV4cG9ydE1hcFRvSFRNTCIsImV4cG9ydHMiLCJvcHRpb25zIiwidmVyc2lvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIktFUExFUl9HTF9WRVJTSU9OIiwiY29uY2F0IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtb2RlIiwiRVhQT1JUX0hUTUxfTUFQX01PREVTIiwiUkVBRCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhc2V0cyIsImNvbmZpZyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9leHBvcnQtbWFwLWh0bWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7RVhQT1JUX0hUTUxfTUFQX01PREVTLCBLRVBMRVJfR0xfVkVSU0lPTn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGh0bWwgZmlsZSB3aGljaCB3aWxsIGlubGN1ZGUga2VwbGVyIGFuZCBtYXAgZGF0YVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT2JqZWN0IHRoYXQgY29sbGVjdHMgYWxsIG5lY2Vzc2FyeSBkYXRhIHRvICBjcmVhdGUgdGhlIGh0bWwgZmlsZVxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubWFwYm94QXBpQWNjZXNzVG9rZW4gTWFwYm94IHRva2VuIHVzZWQgdG8gZmV0Y2ggbWFwYm94IHRpbGVzXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IG9wdGlvbnMuZGF0YXNldHMgRGF0YSB0byBpbmNsdWRlIGluIHRoZSBtYXBcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLmNvbmZpZyB0aGlzIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwga2VwbGVyLmdsIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24ge21hcFN0YXRlLCBtYXBTdHlsZSwgdmlzU3RhdGV9XG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiB3aGljaCB2ZXJzaW9uIG9mIEtlcGxlci5nbCB0byBsb2FkLlxuICovXG5leHBvcnQgY29uc3QgZXhwb3J0TWFwVG9IVE1MID0gKG9wdGlvbnMsIHZlcnNpb24gPSBLRVBMRVJfR0xfVkVSU0lPTikgPT4ge1xuICByZXR1cm4gYFxuICAgIDwhRE9DVFlQRSBodG1sPlxuICAgIDxodG1sPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiLz5cbiAgICAgICAgPHRpdGxlPktlcGxlci5nbCBlbWJlZGRlZCBtYXA8L3RpdGxlPlxuXG4gICAgICAgIDwhLS1VYmVyIEZvbnQtLT5cbiAgICAgICAgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczovL2QxYTNmNHNwYXp6cnA0LmNsb3VkZnJvbnQubmV0L2tlcGxlci5nbC91YmVyLWZvbnRzLzQuMC4wL3N1cGVyZmluZS5jc3NcIj5cblxuICAgICAgICA8IS0tTWFwQm94IGNzcy0tPlxuICAgICAgICA8bGluayBocmVmPVwiaHR0cHM6Ly91bnBrZy5jb20vbWFwbGlicmUtZ2xAXjMvZGlzdC9tYXBsaWJyZS1nbC5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCI+XG5cbiAgICAgICAgPCEt4oCUIGZhY2Vib29rIG9wZW4gZ3JhcGggdGFncyAtLT5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzp1cmxcIiBjb250ZW50PVwiaHR0cDovL2tlcGxlci5nbC9cIiAvPlxuICAgICAgICA8bWV0YSBwcm9wZXJ0eT1cIm9nOnRpdGxlXCIgY29udGVudD1cIkxhcmdlLXNjYWxlIFdlYkdMLXBvd2VyZWQgR2Vvc3BhdGlhbCBEYXRhIFZpc3VhbGl6YXRpb24gVG9vbFwiIC8+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6ZGVzY3JpcHRpb25cIiBjb250ZW50PVwiS2VwbGVyLmdsIGlzIGEgcG93ZXJmdWwgd2ViLWJhc2VkIGdlb3NwYXRpYWwgZGF0YSBhbmFseXNpcyB0b29sLiBCdWlsdCBvbiBhIGhpZ2ggcGVyZm9ybWFuY2UgcmVuZGVyaW5nIGVuZ2luZSBhbmQgZGVzaWduZWQgZm9yIGxhcmdlLXNjYWxlIGRhdGEgc2V0cy5cIiAvPlxuICAgICAgICA8bWV0YSBwcm9wZXJ0eT1cIm9nOnNpdGVfbmFtZVwiIGNvbnRlbnQ9XCJrZXBsZXIuZ2xcIiAvPlxuICAgICAgICA8bWV0YSBwcm9wZXJ0eT1cIm9nOmltYWdlXCIgY29udGVudD1cImh0dHBzOi8vZDFhM2Y0c3BhenpycDQuY2xvdWRmcm9udC5uZXQva2VwbGVyLmdsL2tlcGxlci5nbC1tZXRhLXRhZy5wbmdcIiAvPlxuICAgICAgICA8bWV0YSBwcm9wZXJ0eT1cIm9nOmltYWdlOnR5cGVcIiBjb250ZW50PVwiaW1hZ2UvcG5nXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzppbWFnZTp3aWR0aFwiIGNvbnRlbnQ9XCI4MDBcIiAvPlxuICAgICAgICA8bWV0YSBwcm9wZXJ0eT1cIm9nOmltYWdlOmhlaWdodFwiIGNvbnRlbnQ9XCI4MDBcIiAvPlxuXG4gICAgICAgIDwhLeKAlCB0d2l0dGVyIGNhcmQgdGFncyAtLT5cbiAgICAgICAgPG1ldGEgbmFtZT1cInR3aXR0ZXI6Y2FyZFwiIGNvbnRlbnQ9XCJzdW1tYXJ5X2xhcmdlX2ltYWdlXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ0d2l0dGVyOnNpdGVcIiBjb250ZW50PVwiQG9wZW5qc2ZcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInR3aXR0ZXI6Y3JlYXRvclwiIGNvbnRlbnQ9XCJAb3BlbmpzZlwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidHdpdHRlcjp0aXRsZVwiIGNvbnRlbnQ9XCJMYXJnZS1zY2FsZSBXZWJHTC1wb3dlcmVkIEdlb3NwYXRpYWwgRGF0YSBWaXN1YWxpemF0aW9uIFRvb2xcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInR3aXR0ZXI6ZGVzY3JpcHRpb25cIiBjb250ZW50PVwiS2VwbGVyLmdsIGlzIGEgcG93ZXJmdWwgd2ViLWJhc2VkIGdlb3NwYXRpYWwgZGF0YSBhbmFseXNpcyB0b29sLiBCdWlsdCBvbiBhIGhpZ2ggcGVyZm9ybWFuY2UgcmVuZGVyaW5nIGVuZ2luZSBhbmQgZGVzaWduZWQgZm9yIGxhcmdlLXNjYWxlIGRhdGEgc2V0cy5cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInR3aXR0ZXI6aW1hZ2VcIiBjb250ZW50PVwiaHR0cHM6Ly9kMWEzZjRzcGF6enJwNC5jbG91ZGZyb250Lm5ldC9rZXBsZXIuZ2wva2VwbGVyLmdsLW1ldGEtdGFnLnBuZ1wiIC8+XG5cbiAgICAgICAgPCEtLSBMb2FkIFJlYWN0L1JlZHV4IC0tPlxuICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vdW5wa2cuY29tL3JlYWN0QDE4LjMuMS91bWQvcmVhY3QucHJvZHVjdGlvbi5taW4uanNcIiBjcm9zc29yaWdpbj48L3NjcmlwdD5cbiAgICAgICAgPHNjcmlwdCBzcmM9XCJodHRwczovL3VucGtnLmNvbS9yZWFjdC1kb21AMTguMy4xL3VtZC9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanNcIiBjcm9zc29yaWdpbj48L3NjcmlwdD5cbiAgICAgICAgPHNjcmlwdCBzcmM9XCJodHRwczovL3VucGtnLmNvbS9yZWR1eEA0LjIuMS9kaXN0L3JlZHV4LmpzXCIgY3Jvc3NvcmlnaW4+PC9zY3JpcHQ+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly91bnBrZy5jb20vcmVhY3QtcmVkdXhAOC4xLjIvZGlzdC9yZWFjdC1yZWR1eC5taW4uanNcIiBjcm9zc29yaWdpbj48L3NjcmlwdD5cbiAgICAgICAgPHNjcmlwdCBzcmM9XCJodHRwczovL3VucGtnLmNvbS9zdHlsZWQtY29tcG9uZW50c0A0LjQuMS9kaXN0L3N0eWxlZC1jb21wb25lbnRzLm1pbi5qc1wiIGNyb3Nzb3JpZ2luPjwvc2NyaXB0PlxuXG4gICAgICAgIDwhLS0gTG9hZCBLZXBsZXIuZ2wgLS0+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly91bnBrZy5jb20va2VwbGVyLmdsQCR7dmVyc2lvbn0vdW1kL2tlcGxlcmdsLm1pbi5qc1wiIGNyb3Nzb3JpZ2luPjwvc2NyaXB0PlxuXG4gICAgICAgIDxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cbiAgICAgICAgICBib2R5IHttYXJnaW46IDA7IHBhZGRpbmc6IDA7IG92ZXJmbG93OiBoaWRkZW47fVxuICAgICAgICA8L3N0eWxlPlxuXG4gICAgICAgIDwhLS1NYXBCb3ggdG9rZW4tLT5cbiAgICAgICAgPHNjcmlwdD5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQcm92aWRlIHlvdXIgTWFwQm94IFRva2VuXG4gICAgICAgICAgICoqL1xuICAgICAgICAgIGNvbnN0IE1BUEJPWF9UT0tFTiA9ICcke29wdGlvbnMubWFwYm94QXBpQWNjZXNzVG9rZW4gfHwgJ1BST1ZJREVfTUFQQk9YX1RPS0VOJ30nO1xuICAgICAgICAgIGNvbnN0IFdBUk5JTkdfTUVTU0FHRSA9ICdQbGVhc2UgUHJvdmlkZSBhIE1hcGJveCBUb2tlbiBpbiBvcmRlciB0byB1c2UgS2VwbGVyLmdsLiBFZGl0IHRoaXMgZmlsZSBhbmQgZmlsbCBvdXQgTUFQQk9YX1RPS0VOIHdpdGggeW91ciBhY2Nlc3Mga2V5JztcbiAgICAgICAgPC9zY3JpcHQ+XG5cbiAgICAgICAgPCEtLSBHQTogRGVsZXRlIHRoaXMgYXMgeW91IHdpc2gsIEhvd2V2ZXIgdG8gcGF0IG91cnNlbHZlcyBvbiB0aGUgYmFjaywgd2Ugb25seSB0cmFjayBhbm9ueW1vdXMgcGFnZXZpZXcgdG8gdW5kZXJzdGFuZCBob3cgbWFueSBwZW9wbGUgYXJlIHVzaW5nIGtlcGxlci5nbC4gLS0+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgKGZ1bmN0aW9uKGkscyxvLGcscixhLG0pe2lbJ0dvb2dsZUFuYWx5dGljc09iamVjdCddPXI7aVtyXT1pW3JdfHxmdW5jdGlvbigpe1xuICAgICAgICAgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLFxuICAgICAgICAgIG09cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5zcmM9ZzttLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbSlcbiAgICAgICAgICB9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2h0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcycsJ2dhJyk7XG4gICAgICAgICAgZ2EoJ2NyZWF0ZScsICdVQS02NDY5NDQwNC0xOScsIHtcbiAgICAgICAgICAgICdzdG9yYWdlJzogJ25vbmUnLFxuICAgICAgICAgICAgJ2NsaWVudElkJzogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2dhOmNsaWVudElkJylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBnYShmdW5jdGlvbih0cmFja2VyKSB7XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdnYTpjbGllbnRJZCcsIHRyYWNrZXIuZ2V0KCdjbGllbnRJZCcpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBnYSgnc2V0JywgJ2NoZWNrUHJvdG9jb2xUYXNrJywgbnVsbCk7IC8vIERpc2FibGUgZmlsZSBwcm90b2NvbCBjaGVja2luZy5cbiAgICAgICAgICBnYSgnc2V0JywgJ2NoZWNrU3RvcmFnZVRhc2snLCBudWxsKTsgLy8gRGlzYWJsZSBjb29raWUgc3RvcmFnZSBjaGVja2luZy5cbiAgICAgICAgICBnYSgnc2V0JywgJ2hpc3RvcnlJbXBvcnRUYXNrJywgbnVsbCk7IC8vIERpc2FibGUgaGlzdG9yeSBjaGVja2luZyAocmVxdWlyZXMgcmVhZGluZyBmcm9tIGNvb2tpZXMpLlxuICAgICAgICAgIGdhKCdzZXQnLCAncGFnZScsICdrZXBsZXJnbC1odG1sJyk7XG4gICAgICAgICAgZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTtcbiAgICAgICAgPC9zY3JpcHQ+XG4gICAgICA8L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgPCEtLSBXZSB3aWxsIHB1dCBvdXIgUmVhY3QgY29tcG9uZW50IGluc2lkZSB0aGlzIGRpdi4gLS0+XG4gICAgICAgIDxkaXYgaWQ9XCJhcHBcIj5cbiAgICAgICAgICA8IS0tIEtlcGxlci5nbCBtYXAgd2lsbCBiZSBwbGFjZWQgaGVyZS0tPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIExvYWQgb3VyIFJlYWN0IGNvbXBvbmVudC4gLS0+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgLyogVmFsaWRhdGUgTWFwYm94IFRva2VuICovXG4gICAgICAgICAgaWYgKChNQVBCT1hfVE9LRU4gfHwgJycpID09PSAnJyB8fCBNQVBCT1hfVE9LRU4gPT09ICdQUk9WSURFX01BUEJPWF9UT0tFTicpIHtcbiAgICAgICAgICAgIGFsZXJ0KFdBUk5JTkdfTUVTU0FHRSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLyoqIFNUT1JFICoqL1xuICAgICAgICAgIGNvbnN0IHJlZHVjZXJzID0gKGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZXJzKHJlZHV4LCBrZXBsZXJHbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHV4LmNvbWJpbmVSZWR1Y2Vycyh7XG4gICAgICAgICAgICAgIC8vIG1vdW50IGtlcGxlckdsIHJlZHVjZXJcbiAgICAgICAgICAgICAga2VwbGVyR2w6IGtlcGxlckdsLmtlcGxlckdsUmVkdWNlci5pbml0aWFsU3RhdGUoe1xuICAgICAgICAgICAgICAgIHVpU3RhdGU6IHtcbiAgICAgICAgICAgICAgICAgIHJlYWRPbmx5OiAke29wdGlvbnMubW9kZSA9PT0gRVhQT1JUX0hUTUxfTUFQX01PREVTLlJFQUR9LFxuICAgICAgICAgICAgICAgICAgY3VycmVudE1vZGFsOiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfShSZWR1eCwgS2VwbGVyR2wpKTtcblxuICAgICAgICAgIGNvbnN0IG1pZGRsZVdhcmVzID0gKGZ1bmN0aW9uIGNyZWF0ZU1pZGRsZXdhcmVzKGtlcGxlckdsKSB7XG4gICAgICAgICAgICByZXR1cm4ga2VwbGVyR2wuZW5oYW5jZVJlZHV4TWlkZGxld2FyZShbXG4gICAgICAgICAgICAgIC8vIEFkZCBvdGhlciBtaWRkbGV3YXJlcyBoZXJlXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9KEtlcGxlckdsKSk7XG5cbiAgICAgICAgICBjb25zdCBlbmhhbmNlcnMgPSAoZnVuY3Rpb24gY3JhZXRlRW5oYW5jZXJzKHJlZHV4LCBtaWRkbGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdXguYXBwbHlNaWRkbGV3YXJlKC4uLm1pZGRsZXMpO1xuICAgICAgICAgIH0oUmVkdXgsIG1pZGRsZVdhcmVzKSk7XG5cbiAgICAgICAgICBjb25zdCBzdG9yZSA9IChmdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1eCwgZW5oYW5jZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7fTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlZHV4LmNyZWF0ZVN0b3JlKFxuICAgICAgICAgICAgICByZWR1Y2VycyxcbiAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICAgICAgICByZWR1eC5jb21wb3NlKGVuaGFuY2VycylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfShSZWR1eCwgZW5oYW5jZXJzKSk7XG4gICAgICAgICAgLyoqIEVORCBTVE9SRSAqKi9cblxuICAgICAgICAgIC8qKiBDT01QT05FTlRTICoqL1xuICAgICAgICAgIHZhciBLZXBsZXJFbGVtZW50ID0gKGZ1bmN0aW9uIG1ha2VLZXBsZXJFbGVtZW50KHJlYWN0LCBrZXBsZXJHbCwgbWFwYm94VG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBMb2dvU3ZnID0gZnVuY3Rpb24gTG9nb1N2ZygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogXCJsb2dvLWNvbnRhaW5lclwiLCBzdHlsZToge3Bvc2l0aW9uOiAnZml4ZWQnLCB6SW5kZXg6IDEwMDAwLCBwYWRkaW5nOiAnNHB4J30gfSxcbiAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwia2VwbGVyX2dsX19sb2dvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTA3cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMjFweFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDEyNCAyNFwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgXCJnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgeyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDEzLjUwMDAwMCwgMTMuNTAwMDAwKSByb3RhdGUoNDUuMDAwMDAwKSB0cmFuc2xhdGUoLTEzLjUwMDAwMCwgLTEzLjUwMDAwMCkgdHJhbnNsYXRlKDQuMDAwMDAwLCA0LjAwMDAwMClcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHsgeDogXCIwXCIsIHk6IFwiNlwiLCB0cmFuc2Zvcm06IFwibWF0cml4KDIuNTM1MTgxZS0wNiAxIC0xIDIuNTM1MTgxZS0wNiAxOC4xMTA3IDYuMDM2OSlcIiwgZmlsbDogXCIjNTM1QzZDXCIsIHdpZHRoOiBcIjEyLjFcIiwgaGVpZ2h0OiBcIjEyLjFcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7IHg6IFwiNlwiLCB5OiBcIjBcIiwgdHJhbnNmb3JtOiBcIm1hdHJpeCgyLjUzNTE4MmUtMDYgMSAtMSAyLjUzNTE4MmUtMDYgMTguMTEwNyAtNi4wMzY5KVwiLCBmaWxsOlwiIzFGQkFENlwiLCB3aWR0aDogXCIxMi4xXCIsIGhlaWdodDogXCIxMi4xXCIgfSlcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICBcImdcIixcbiAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTM5LDguN2gyLjJsLTIuOCw0LjJsMi45LDUuMUgzOWwtMi40LTQuMmgtMS4zVjE4aC0yVjVsMi0wLjF2Ny4zaDEuM0wzOSw4Ljd6XCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk00Mi40LDEzLjNjMC0xLjUsMC40LTIuNywxLjEtMy41czEuOC0xLjIsMy4xLTEuMmMxLjMsMCwyLjIsMC40LDIuOCwxLjFjMC42LDAuNywwLjksMS44LDAuOSwzLjMgYzAsMC40LDAsMC44LDAsMS4xaC01LjhjMCwxLjYsMC44LDIuNCwyLjQsMi40YzEsMCwyLTAuMiwyLjktMC42bDAuMiwxLjdjLTAuNCwwLjItMC45LDAuNC0xLjQsMC41cy0xLjEsMC4yLTEuNywwLjIgYy0xLjUsMC0yLjYtMC40LTMuMy0xLjJDNDIuOCwxNi4xLDQyLjQsMTQuOSw0Mi40LDEzLjN6IE00Ni42LDEwLjFjLTAuNywwLTEuMiwwLjItMS41LDAuNWMtMC40LDAuNC0wLjYsMC45LTAuNiwxLjdoNCBjMC0wLjgtMC4yLTEuNC0wLjUtMS43UzQ3LjIsMTAuMSw0Ni42LDEwLjF6XCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk01Ny4xLDE4LjJjLTEsMC0xLjgtMC4zLTIuMy0wLjlsMCwwbDAsMS4zdjIuNWgtMlY4LjdoMS41bDAuMywwLjloMGMwLjMtMC4zLDAuNy0wLjYsMS4yLTAuNyBjMC40LTAuMiwwLjktMC4zLDEuNC0wLjNjMS4yLDAsMi4xLDAuNCwyLjcsMS4xYzAuNiwwLjcsMC45LDIsMC45LDMuN2MwLDEuNi0wLjMsMi44LTEsMy43QzU5LjIsMTcuOCw1OC4zLDE4LjIsNTcuMSwxOC4yeiBNNTYuNywxMC4zYy0wLjQsMC0wLjgsMC4xLTEuMSwwLjJjLTAuMywwLjItMC42LDAuNC0wLjgsMC43djQuM2MwLjIsMC4zLDAuNCwwLjUsMC43LDAuN2MwLjMsMC4yLDAuNywwLjMsMS4xLDAuMyBjMC43LDAsMS4yLTAuMiwxLjYtMC43YzAuNC0wLjUsMC41LTEuMywwLjUtMi41YzAtMC44LTAuMS0xLjQtMC4yLTEuOHMtMC40LTAuNy0wLjctMC45QzU3LjYsMTAuNCw1Ny4yLDEwLjMsNTYuNywxMC4zelwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNNjMuMiwxNlY1bDItMC4xdjEwLjhjMCwwLjMsMC4xLDAuNSwwLjIsMC42YzAuMSwwLjEsMC4zLDAuMiwwLjYsMC4yYzAuMywwLDAuNiwwLDAuOS0wLjFWMTggYy0wLjQsMC4xLTEsMC4yLTEuNiwwLjJjLTAuOCwwLTEuMy0wLjItMS43LTAuNVM2My4yLDE2LjgsNjMuMiwxNnpcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTY4LjIsMTMuM2MwLTEuNSwwLjQtMi43LDEuMS0zLjVjMC43LTAuOCwxLjgtMS4yLDMuMS0xLjJjMS4zLDAsMi4yLDAuNCwyLjgsMS4xYzAuNiwwLjcsMC45LDEuOCwwLjksMy4zIGMwLDAuNCwwLDAuOCwwLDEuMWgtNS44YzAsMS42LDAuOCwyLjQsMi40LDIuNGMxLDAsMi0wLjIsMi45LTAuNmwwLjIsMS43Yy0wLjQsMC4yLTAuOSwwLjQtMS40LDAuNXMtMS4xLDAuMi0xLjcsMC4yIGMtMS41LDAtMi42LTAuNC0zLjMtMS4yQzY4LjYsMTYuMSw2OC4yLDE0LjksNjguMiwxMy4zeiBNNzIuNCwxMC4xYy0wLjcsMC0xLjIsMC4yLTEuNSwwLjVjLTAuNCwwLjQtMC42LDAuOS0wLjYsMS43aDQgYzAtMC44LTAuMi0xLjQtMC41LTEuN1M3MywxMC4xLDcyLjQsMTAuMXpcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTgwLjIsOC43bDAuMSwxLjdoMGMwLjMtMC42LDAuNy0xLjEsMS4xLTEuNGMwLjQtMC4zLDEtMC41LDEuNi0wLjVjMC40LDAsMC43LDAsMSwwLjFsLTAuMSwyIGMtMC4zLTAuMS0wLjctMC4yLTEtMC4yYy0wLjcsMC0xLjMsMC4zLTEuNywwLjhjLTAuNCwwLjUtMC43LDEuMi0wLjcsMi4xVjE4aC0yVjguN0g4MC4yelwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNODMuOCwxN2MwLTAuOCwwLjQtMS4yLDEuMi0xLjJjMC44LDAsMS4yLDAuNCwxLjIsMS4yYzAsMC44LTAuNCwxLjEtMS4yLDEuMUM4NC4yLDE4LjIsODMuOCwxNy44LDgzLjgsMTd6XCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk04OC41LDE4LjdjMC0wLjgsMC40LTEuNCwxLjItMS44Yy0wLjYtMC4zLTAuOS0wLjgtMC45LTEuNWMwLTAuNywwLjQtMS4yLDEuMS0xLjZjLTAuMy0wLjMtMC42LTAuNi0wLjctMC45IGMtMC4yLTAuNC0wLjItMC44LTAuMi0xLjNjMC0xLDAuMy0xLjgsMC45LTIuM2MwLjYtMC41LDEuNi0wLjgsMi44LTAuOGMwLjUsMCwxLDAsMS40LDAuMWMwLjQsMC4xLDAuOCwwLjIsMS4xLDAuNGwyLjQtMC4ydjEuNSBoLTEuNWMwLjIsMC40LDAuMiwwLjgsMC4yLDEuM2MwLDEtMC4zLDEuNy0wLjksMi4ycy0xLjUsMC44LTIuNywwLjhjLTAuNywwLTEuMi0wLjEtMS42LTAuMmMtMC4xLDAuMS0wLjIsMC4yLTAuMywwLjMgYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuNGMwLDAuMiwwLjEsMC4zLDAuMiwwLjRjMC4xLDAuMSwwLjMsMC4yLDAuNiwwLjJsMi43LDAuMmMxLDAuMSwxLjcsMC4zLDIuMiwwLjZjMC41LDAuMywwLjgsMC45LDAuOCwxLjcgYzAsMC42LTAuMiwxLjEtMC41LDEuNWMtMC40LDAuNC0wLjksMC44LTEuNSwxYy0wLjcsMC4yLTEuNSwwLjQtMi40LDAuNGMtMS4zLDAtMi4zLTAuMi0zLTAuNkM4OC44LDIwLjEsODguNSwxOS41LDg4LjUsMTguN3ogTTk1LjEsMTguNGMwLTAuMy0wLjEtMC41LTAuMy0wLjdzLTAuNi0wLjItMS4xLTAuM2wtMi43LTAuM2MtMC4yLDAuMS0wLjQsMC4zLTAuNSwwLjVjLTAuMSwwLjItMC4yLDAuNC0wLjIsMC42IGMwLDAuNCwwLjIsMC44LDAuNSwxYzAuNCwwLjIsMSwwLjMsMS44LDAuM0M5NC4yLDE5LjUsOTUuMSwxOS4yLDk1LjEsMTguNHogTTk0LjMsMTEuNWMwLTAuNi0wLjEtMS0wLjQtMS4yIGMtMC4zLTAuMi0wLjctMC4zLTEuMy0wLjNjLTAuNywwLTEuMSwwLjEtMS40LDAuM2MtMC4zLDAuMi0wLjQsMC42LTAuNCwxLjJzMC4xLDEsMC40LDEuMmMwLjMsMC4yLDAuNywwLjMsMS40LDAuMyBjMC42LDAsMS4xLTAuMSwxLjMtMC40Uzk0LjMsMTIsOTQuMywxMS41elwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNOTkuNCwxNlY1bDItMC4xdjEwLjhjMCwwLjMsMC4xLDAuNSwwLjIsMC42YzAuMSwwLjEsMC4zLDAuMiwwLjYsMC4yYzAuMywwLDAuNiwwLDAuOS0wLjFWMTggYy0wLjQsMC4xLTEsMC4yLTEuNiwwLjJjLTAuOCwwLTEuMy0wLjItMS43LTAuNVM5OS40LDE2LjgsOTkuNCwxNnpcIiB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIEFwcCgpIHtcbiAgICAgICAgICAgICAgdmFyIHJvb3RFbG0gPSByZWFjdC51c2VSZWYobnVsbCk7XG4gICAgICAgICAgICAgIHZhciBfdXNlU3RhdGUgPSByZWFjdC51c2VTdGF0ZSh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodDogd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB2YXIgd2luZG93RGltZW5zaW9uID0gX3VzZVN0YXRlWzBdO1xuICAgICAgICAgICAgICB2YXIgc2V0RGltZW5zaW9uID0gX3VzZVN0YXRlWzFdO1xuICAgICAgICAgICAgICByZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gc2lkZUVmZmVjdCgpe1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZVJlc2l6ZSgpIHtcbiAgICAgICAgICAgICAgICAgIHNldERpbWVuc2lvbih7d2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLCBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO307XG4gICAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICAgICAge3N0eWxlOiB7cG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IDAsIHdpZHRoOiAnMTAwdncnLCBoZWlnaHQ6ICcxMDB2aCd9fSxcbiAgICAgICAgICAgICAgICAke29wdGlvbnMubW9kZSA9PT0gRVhQT1JUX0hUTUxfTUFQX01PREVTLlJFQUQgPyAnTG9nb1N2ZygpLCcgOiAnJ31cbiAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KGtlcGxlckdsLktlcGxlckdsLCB7XG4gICAgICAgICAgICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogbWFwYm94VG9rZW4sXG4gICAgICAgICAgICAgICAgICBpZDogXCJtYXBcIixcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aW5kb3dEaW1lbnNpb24ud2lkdGgsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IHdpbmRvd0RpbWVuc2lvbi5oZWlnaHRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfShSZWFjdCwgS2VwbGVyR2wsIE1BUEJPWF9UT0tFTikpO1xuXG4gICAgICAgICAgY29uc3QgYXBwID0gKGZ1bmN0aW9uIGNyZWF0ZVJlYWN0UmVkdXhQcm92aWRlcihyZWFjdCwgcmVhY3RSZWR1eCwgS2VwbGVyRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgIHJlYWN0UmVkdXguUHJvdmlkZXIsXG4gICAgICAgICAgICAgIHtzdG9yZX0sXG4gICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoS2VwbGVyRWxlbWVudCwgbnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KFJlYWN0LCBSZWFjdFJlZHV4LCBLZXBsZXJFbGVtZW50KSk7XG4gICAgICAgICAgLyoqIEVORCBDT01QT05FTlRTICoqL1xuXG4gICAgICAgICAgLyoqIFJlbmRlciAqKi9cbiAgICAgICAgICAoZnVuY3Rpb24gcmVuZGVyKHJlYWN0LCByZWFjdERPTSwgYXBwKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXBwJyk7XG4gICAgICAgICAgICBjb25zdCByb290ID0gcmVhY3RET00uY3JlYXRlUm9vdChjb250YWluZXIpO1xuICAgICAgICAgICAgcm9vdC5yZW5kZXIoYXBwKTtcbiAgICAgICAgICB9KFJlYWN0LCBSZWFjdERPTSwgYXBwKSk7XG4gICAgICAgIDwvc2NyaXB0PlxuICAgICAgICA8IS0tIFRoZSBuZXh0IHNjcmlwdCB3aWxsIHNob3cgaG93IHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggS2VwbGVyIG1hcCBzdG9yZSAtLT5cbiAgICAgICAgPHNjcmlwdD5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBDdXN0b21pemUgbWFwLlxuICAgICAgICAgICAqIEluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiB5b3UgY2FuIHVzZSB0aGUgc3RvcmUgb2JqZWN0IHRvIGRpc3BhdGNoIEtlcGxlci5nbCBhY3Rpb25zXG4gICAgICAgICAgICogdG8gYWRkIG5ldyBkYXRhIGFuZCBjdXN0b21pemUgYmVoYXZpb3JcbiAgICAgICAgICAgKi9cbiAgICAgICAgICAoZnVuY3Rpb24gY3VzdG9taXplKGtlcGxlckdsLCBzdG9yZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNldHMgPSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YXNldHMpfTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucy5jb25maWcpfTtcblxuICAgICAgICAgICAgY29uc3QgbG9hZGVkRGF0YSA9IGtlcGxlckdsLktlcGxlckdsU2NoZW1hLmxvYWQoXG4gICAgICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIEZvciBzb21lIHJlYXNvbiBLZXBsZXIgb3ZlcndyaXRlcyB0aGUgY29uZmlnIHdpdGhvdXQgZXh0cmEgd2FpdCB0aW1lXG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIGtlcGxlckdsLmFkZERhdGFUb01hcCh7XG4gICAgICAgICAgICAgICAgICBkYXRhc2V0czogbG9hZGVkRGF0YS5kYXRhc2V0cyxcbiAgICAgICAgICAgICAgICAgIGNvbmZpZzogbG9hZGVkRGF0YS5jb25maWcsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIGNlbnRlck1hcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgIH0oS2VwbGVyR2wsIHN0b3JlKSlcbiAgICAgICAgPC9zY3JpcHQ+XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICBgO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBSkE7QUFDQTs7QUFFQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsZUFBZSxHQUFBQyxPQUFBLENBQUFELGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBSUUsT0FBTyxFQUFrQztFQUFBLElBQWhDQyxPQUFPLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHRyw0QkFBaUI7RUFDbEUsK2dGQUFBQyxNQUFBLENBdUNpREwsT0FBTyw4VEFBQUssTUFBQSxDQVd4Qk4sT0FBTyxDQUFDTyxvQkFBb0IsSUFBSSxzQkFBc0IscWxFQUFBRCxNQUFBLENBMkMxRE4sT0FBTyxDQUFDUSxJQUFJLEtBQUtDLGdDQUFxQixDQUFDQyxJQUFJLDBvTkFBQUosTUFBQSxDQW1GdkROLE9BQU8sQ0FBQ1EsSUFBSSxLQUFLQyxnQ0FBcUIsQ0FBQ0MsSUFBSSxHQUFHLFlBQVksR0FBRyxFQUFFLDAyQ0FBQUosTUFBQSxDQW1DbERLLElBQUksQ0FBQ0MsU0FBUyxDQUFDWixPQUFPLENBQUNhLFFBQVEsQ0FBQyxvQ0FBQVAsTUFBQSxDQUNsQ0ssSUFBSSxDQUFDQyxTQUFTLENBQUNaLE9BQU8sQ0FBQ2MsTUFBTSxDQUFDO0FBd0IzRCxDQUFDIiwiaWdub3JlTGlzdCI6W119
25
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsImV4cG9ydE1hcFRvSFRNTCIsImV4cG9ydHMiLCJvcHRpb25zIiwidmVyc2lvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIktFUExFUl9HTF9WRVJTSU9OIiwiY29uY2F0IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtb2RlIiwiRVhQT1JUX0hUTUxfTUFQX01PREVTIiwiUkVBRCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhc2V0cyIsImNvbmZpZyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9leHBvcnQtbWFwLWh0bWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCB7RVhQT1JUX0hUTUxfTUFQX01PREVTLCBLRVBMRVJfR0xfVkVSU0lPTn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGh0bWwgZmlsZSB3aGljaCB3aWxsIGlubGN1ZGUga2VwbGVyIGFuZCBtYXAgZGF0YVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT2JqZWN0IHRoYXQgY29sbGVjdHMgYWxsIG5lY2Vzc2FyeSBkYXRhIHRvICBjcmVhdGUgdGhlIGh0bWwgZmlsZVxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubWFwYm94QXBpQWNjZXNzVG9rZW4gTWFwYm94IHRva2VuIHVzZWQgdG8gZmV0Y2ggbWFwYm94IHRpbGVzXG4gKiBAcGFyYW0ge0FycmF5PE9iamVjdD59IG9wdGlvbnMuZGF0YXNldHMgRGF0YSB0byBpbmNsdWRlIGluIHRoZSBtYXBcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLmNvbmZpZyB0aGlzIG9iamVjdCB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwga2VwbGVyLmdsIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24ge21hcFN0YXRlLCBtYXBTdHlsZSwgdmlzU3RhdGV9XG4gKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvbiB3aGljaCB2ZXJzaW9uIG9mIEtlcGxlci5nbCB0byBsb2FkLlxuICovXG5leHBvcnQgY29uc3QgZXhwb3J0TWFwVG9IVE1MID0gKG9wdGlvbnMsIHZlcnNpb24gPSBLRVBMRVJfR0xfVkVSU0lPTikgPT4ge1xuICByZXR1cm4gYFxuICAgIDwhRE9DVFlQRSBodG1sPlxuICAgIDxodG1sPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiLz5cbiAgICAgICAgPHRpdGxlPktlcGxlci5nbCBlbWJlZGRlZCBtYXA8L3RpdGxlPlxuXG4gICAgICAgIDwhLS1VYmVyIEZvbnQtLT5cbiAgICAgICAgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczovL2QxYTNmNHNwYXp6cnA0LmNsb3VkZnJvbnQubmV0L2tlcGxlci5nbC91YmVyLWZvbnRzLzQuMC4wL3N1cGVyZmluZS5jc3NcIj5cblxuICAgICAgICA8IS0tTWFwQm94IGNzcy0tPlxuICAgICAgICA8bGluayBocmVmPVwiaHR0cHM6Ly9hcGkudGlsZXMubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvdjEuMS4xL21hcGJveC1nbC5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCI+XG4gICAgICAgIDxsaW5rIGhyZWY9XCJodHRwczovL3VucGtnLmNvbS9tYXBsaWJyZS1nbEBeMy9kaXN0L21hcGxpYnJlLWdsLmNzc1wiIHJlbD1cInN0eWxlc2hlZXRcIj5cblxuICAgICAgICA8IS3igJQgZmFjZWJvb2sgb3BlbiBncmFwaCB0YWdzIC0tPlxuICAgICAgICA8bWV0YSBwcm9wZXJ0eT1cIm9nOnVybFwiIGNvbnRlbnQ9XCJodHRwOi8va2VwbGVyLmdsL1wiIC8+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6dGl0bGVcIiBjb250ZW50PVwiTGFyZ2Utc2NhbGUgV2ViR0wtcG93ZXJlZCBHZW9zcGF0aWFsIERhdGEgVmlzdWFsaXphdGlvbiBUb29sXCIgLz5cbiAgICAgICAgPG1ldGEgcHJvcGVydHk9XCJvZzpkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJLZXBsZXIuZ2wgaXMgYSBwb3dlcmZ1bCB3ZWItYmFzZWQgZ2Vvc3BhdGlhbCBkYXRhIGFuYWx5c2lzIHRvb2wuIEJ1aWx0IG9uIGEgaGlnaCBwZXJmb3JtYW5jZSByZW5kZXJpbmcgZW5naW5lIGFuZCBkZXNpZ25lZCBmb3IgbGFyZ2Utc2NhbGUgZGF0YSBzZXRzLlwiIC8+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6c2l0ZV9uYW1lXCIgY29udGVudD1cImtlcGxlci5nbFwiIC8+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6aW1hZ2VcIiBjb250ZW50PVwiaHR0cHM6Ly9kMWEzZjRzcGF6enJwNC5jbG91ZGZyb250Lm5ldC9rZXBsZXIuZ2wva2VwbGVyLmdsLW1ldGEtdGFnLnBuZ1wiIC8+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6aW1hZ2U6dHlwZVwiIGNvbnRlbnQ9XCJpbWFnZS9wbmdcIiAvPlxuICAgICAgICA8bWV0YSBwcm9wZXJ0eT1cIm9nOmltYWdlOndpZHRoXCIgY29udGVudD1cIjgwMFwiIC8+XG4gICAgICAgIDxtZXRhIHByb3BlcnR5PVwib2c6aW1hZ2U6aGVpZ2h0XCIgY29udGVudD1cIjgwMFwiIC8+XG5cbiAgICAgICAgPCEt4oCUIHR3aXR0ZXIgY2FyZCB0YWdzIC0tPlxuICAgICAgICA8bWV0YSBuYW1lPVwidHdpdHRlcjpjYXJkXCIgY29udGVudD1cInN1bW1hcnlfbGFyZ2VfaW1hZ2VcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInR3aXR0ZXI6c2l0ZVwiIGNvbnRlbnQ9XCJAb3BlbmpzZlwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidHdpdHRlcjpjcmVhdG9yXCIgY29udGVudD1cIkBvcGVuanNmXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJ0d2l0dGVyOnRpdGxlXCIgY29udGVudD1cIkxhcmdlLXNjYWxlIFdlYkdMLXBvd2VyZWQgR2Vvc3BhdGlhbCBEYXRhIFZpc3VhbGl6YXRpb24gVG9vbFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidHdpdHRlcjpkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJLZXBsZXIuZ2wgaXMgYSBwb3dlcmZ1bCB3ZWItYmFzZWQgZ2Vvc3BhdGlhbCBkYXRhIGFuYWx5c2lzIHRvb2wuIEJ1aWx0IG9uIGEgaGlnaCBwZXJmb3JtYW5jZSByZW5kZXJpbmcgZW5naW5lIGFuZCBkZXNpZ25lZCBmb3IgbGFyZ2Utc2NhbGUgZGF0YSBzZXRzLlwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidHdpdHRlcjppbWFnZVwiIGNvbnRlbnQ9XCJodHRwczovL2QxYTNmNHNwYXp6cnA0LmNsb3VkZnJvbnQubmV0L2tlcGxlci5nbC9rZXBsZXIuZ2wtbWV0YS10YWcucG5nXCIgLz5cblxuICAgICAgICA8IS0tIExvYWQgUmVhY3QvUmVkdXggLS0+XG4gICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly91bnBrZy5jb20vcmVhY3RAMTguMy4xL3VtZC9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qc1wiIGNyb3Nzb3JpZ2luPjwvc2NyaXB0PlxuICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vdW5wa2cuY29tL3JlYWN0LWRvbUAxOC4zLjEvdW1kL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qc1wiIGNyb3Nzb3JpZ2luPjwvc2NyaXB0PlxuICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vdW5wa2cuY29tL3JlZHV4QDQuMi4xL2Rpc3QvcmVkdXguanNcIiBjcm9zc29yaWdpbj48L3NjcmlwdD5cbiAgICAgICAgPHNjcmlwdCBzcmM9XCJodHRwczovL3VucGtnLmNvbS9yZWFjdC1yZWR1eEA4LjEuMi9kaXN0L3JlYWN0LXJlZHV4Lm1pbi5qc1wiIGNyb3Nzb3JpZ2luPjwvc2NyaXB0PlxuICAgICAgICA8c2NyaXB0IHNyYz1cImh0dHBzOi8vdW5wa2cuY29tL3N0eWxlZC1jb21wb25lbnRzQDYuMS44L2Rpc3Qvc3R5bGVkLWNvbXBvbmVudHMubWluLmpzXCIgY3Jvc3NvcmlnaW4+PC9zY3JpcHQ+XG5cbiAgICAgICAgPCEtLSBMb2FkIEtlcGxlci5nbCAtLT5cbiAgICAgICAgPHNjcmlwdCBzcmM9XCJodHRwczovL3VucGtnLmNvbS9rZXBsZXIuZ2xAJHt2ZXJzaW9ufS91bWQva2VwbGVyZ2wubWluLmpzXCIgY3Jvc3NvcmlnaW4+PC9zY3JpcHQ+XG5cbiAgICAgICAgPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuICAgICAgICAgIGJvZHkge21hcmdpbjogMDsgcGFkZGluZzogMDsgb3ZlcmZsb3c6IGhpZGRlbjt9XG4gICAgICAgIDwvc3R5bGU+XG5cbiAgICAgICAgPCEtLU1hcEJveCB0b2tlbi0tPlxuICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFByb3ZpZGUgeW91ciBNYXBCb3ggVG9rZW5cbiAgICAgICAgICAgKiovXG4gICAgICAgICAgY29uc3QgTUFQQk9YX1RPS0VOID0gJyR7b3B0aW9ucy5tYXBib3hBcGlBY2Nlc3NUb2tlbiB8fCAnUFJPVklERV9NQVBCT1hfVE9LRU4nfSc7XG4gICAgICAgICAgY29uc3QgV0FSTklOR19NRVNTQUdFID0gJ1BsZWFzZSBQcm92aWRlIGEgTWFwYm94IFRva2VuIGluIG9yZGVyIHRvIHVzZSBLZXBsZXIuZ2wuIEVkaXQgdGhpcyBmaWxlIGFuZCBmaWxsIG91dCBNQVBCT1hfVE9LRU4gd2l0aCB5b3VyIGFjY2VzcyBrZXknO1xuICAgICAgICA8L3NjcmlwdD5cblxuICAgICAgICA8IS0tIEdBOiBEZWxldGUgdGhpcyBhcyB5b3Ugd2lzaCwgSG93ZXZlciB0byBwYXQgb3Vyc2VsdmVzIG9uIHRoZSBiYWNrLCB3ZSBvbmx5IHRyYWNrIGFub255bW91cyBwYWdldmlldyB0byB1bmRlcnN0YW5kIGhvdyBtYW55IHBlb3BsZSBhcmUgdXNpbmcga2VwbGVyLmdsLiAtLT5cbiAgICAgICAgPHNjcmlwdD5cbiAgICAgICAgICAoZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5hbHl0aWNzT2JqZWN0J109cjtpW3JdPWlbcl18fGZ1bmN0aW9uKCl7XG4gICAgICAgICAgKGlbcl0ucT1pW3JdLnF8fFtdKS5wdXNoKGFyZ3VtZW50cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0ZUVsZW1lbnQobyksXG4gICAgICAgICAgbT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKG8pWzBdO2EuYXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxtKVxuICAgICAgICAgIH0pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnaHR0cHM6Ly93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzJywnZ2EnKTtcbiAgICAgICAgICBnYSgnY3JlYXRlJywgJ1VBLTY0Njk0NDA0LTE5Jywge1xuICAgICAgICAgICAgJ3N0b3JhZ2UnOiAnbm9uZScsXG4gICAgICAgICAgICAnY2xpZW50SWQnOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZ2E6Y2xpZW50SWQnKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGdhKGZ1bmN0aW9uKHRyYWNrZXIpIHtcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2dhOmNsaWVudElkJywgdHJhY2tlci5nZXQoJ2NsaWVudElkJykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGdhKCdzZXQnLCAnY2hlY2tQcm90b2NvbFRhc2snLCBudWxsKTsgLy8gRGlzYWJsZSBmaWxlIHByb3RvY29sIGNoZWNraW5nLlxuICAgICAgICAgIGdhKCdzZXQnLCAnY2hlY2tTdG9yYWdlVGFzaycsIG51bGwpOyAvLyBEaXNhYmxlIGNvb2tpZSBzdG9yYWdlIGNoZWNraW5nLlxuICAgICAgICAgIGdhKCdzZXQnLCAnaGlzdG9yeUltcG9ydFRhc2snLCBudWxsKTsgLy8gRGlzYWJsZSBoaXN0b3J5IGNoZWNraW5nIChyZXF1aXJlcyByZWFkaW5nIGZyb20gY29va2llcykuXG4gICAgICAgICAgZ2EoJ3NldCcsICdwYWdlJywgJ2tlcGxlcmdsLWh0bWwnKTtcbiAgICAgICAgICBnYSgnc2VuZCcsICdwYWdldmlldycpO1xuICAgICAgICA8L3NjcmlwdD5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8IS0tIFdlIHdpbGwgcHV0IG91ciBSZWFjdCBjb21wb25lbnQgaW5zaWRlIHRoaXMgZGl2LiAtLT5cbiAgICAgICAgPGRpdiBpZD1cImFwcFwiPlxuICAgICAgICAgIDwhLS0gS2VwbGVyLmdsIG1hcCB3aWxsIGJlIHBsYWNlZCBoZXJlLS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gTG9hZCBvdXIgUmVhY3QgY29tcG9uZW50LiAtLT5cbiAgICAgICAgPHNjcmlwdD5cbiAgICAgICAgICAvKiBWYWxpZGF0ZSBNYXBib3ggVG9rZW4gKi9cbiAgICAgICAgICBpZiAoKE1BUEJPWF9UT0tFTiB8fCAnJykgPT09ICcnIHx8IE1BUEJPWF9UT0tFTiA9PT0gJ1BST1ZJREVfTUFQQk9YX1RPS0VOJykge1xuICAgICAgICAgICAgYWxlcnQoV0FSTklOR19NRVNTQUdFKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiogU1RPUkUgKiovXG4gICAgICAgICAgY29uc3QgcmVkdWNlcnMgPSAoZnVuY3Rpb24gY3JlYXRlUmVkdWNlcnMocmVkdXgsIGtlcGxlckdsKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdXguY29tYmluZVJlZHVjZXJzKHtcbiAgICAgICAgICAgICAgLy8gbW91bnQga2VwbGVyR2wgcmVkdWNlclxuICAgICAgICAgICAgICBrZXBsZXJHbDoga2VwbGVyR2wua2VwbGVyR2xSZWR1Y2VyLmluaXRpYWxTdGF0ZSh7XG4gICAgICAgICAgICAgICAgdWlTdGF0ZToge1xuICAgICAgICAgICAgICAgICAgcmVhZE9ubHk6ICR7b3B0aW9ucy5tb2RlID09PSBFWFBPUlRfSFRNTF9NQVBfTU9ERVMuUkVBRH0sXG4gICAgICAgICAgICAgICAgICBjdXJyZW50TW9kYWw6IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KFJlZHV4LCBLZXBsZXJHbCkpO1xuXG4gICAgICAgICAgY29uc3QgbWlkZGxlV2FyZXMgPSAoZnVuY3Rpb24gY3JlYXRlTWlkZGxld2FyZXMoa2VwbGVyR2wpIHtcbiAgICAgICAgICAgIHJldHVybiBrZXBsZXJHbC5lbmhhbmNlUmVkdXhNaWRkbGV3YXJlKFtcbiAgICAgICAgICAgICAgLy8gQWRkIG90aGVyIG1pZGRsZXdhcmVzIGhlcmVcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH0oS2VwbGVyR2wpKTtcblxuICAgICAgICAgIGNvbnN0IGVuaGFuY2VycyA9IChmdW5jdGlvbiBjcmFldGVFbmhhbmNlcnMocmVkdXgsIG1pZGRsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1eC5hcHBseU1pZGRsZXdhcmUoLi4ubWlkZGxlcyk7XG4gICAgICAgICAgfShSZWR1eCwgbWlkZGxlV2FyZXMpKTtcblxuICAgICAgICAgIGNvbnN0IHN0b3JlID0gKGZ1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHV4LCBlbmhhbmNlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHt9O1xuXG4gICAgICAgICAgICByZXR1cm4gcmVkdXguY3JlYXRlU3RvcmUoXG4gICAgICAgICAgICAgIHJlZHVjZXJzLFxuICAgICAgICAgICAgICBpbml0aWFsU3RhdGUsXG4gICAgICAgICAgICAgIHJlZHV4LmNvbXBvc2UoZW5oYW5jZXJzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KFJlZHV4LCBlbmhhbmNlcnMpKTtcbiAgICAgICAgICAvKiogRU5EIFNUT1JFICoqL1xuXG4gICAgICAgICAgLyoqIENPTVBPTkVOVFMgKiovXG4gICAgICAgICAgdmFyIEtlcGxlckVsZW1lbnQgPSAoZnVuY3Rpb24gbWFrZUtlcGxlckVsZW1lbnQocmVhY3QsIGtlcGxlckdsLCBtYXBib3hUb2tlbikge1xuICAgICAgICAgICAgdmFyIExvZ29TdmcgPSBmdW5jdGlvbiBMb2dvU3ZnKCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3NOYW1lOiBcImxvZ28tY29udGFpbmVyXCIsIHN0eWxlOiB7cG9zaXRpb246ICdmaXhlZCcsIHpJbmRleDogMTAwMDAsIHBhZGRpbmc6ICc0cHgnfSB9LFxuICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJrZXBsZXJfZ2xfX2xvZ29cIixcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxMDdweFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIyMXB4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMTI0IDI0XCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICBcImdcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTMuNTAwMDAwLCAxMy41MDAwMDApIHJvdGF0ZSg0NS4wMDAwMDApIHRyYW5zbGF0ZSgtMTMuNTAwMDAwLCAtMTMuNTAwMDAwKSB0cmFuc2xhdGUoNC4wMDAwMDAsIDQuMDAwMDAwKVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwgeyB4OiBcIjBcIiwgeTogXCI2XCIsIHRyYW5zZm9ybTogXCJtYXRyaXgoMi41MzUxODFlLTA2IDEgLTEgMi41MzUxODFlLTA2IDE4LjExMDcgNi4wMzY5KVwiLCBmaWxsOiBcIiM1MzVDNkNcIiwgd2lkdGg6IFwiMTIuMVwiLCBoZWlnaHQ6IFwiMTIuMVwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHsgeDogXCI2XCIsIHk6IFwiMFwiLCB0cmFuc2Zvcm06IFwibWF0cml4KDIuNTM1MTgyZS0wNiAxIC0xIDIuNTM1MTgyZS0wNiAxOC4xMTA3IC02LjAzNjkpXCIsIGZpbGw6XCIjMUZCQUQ2XCIsIHdpZHRoOiBcIjEyLjFcIiwgaGVpZ2h0OiBcIjEyLjFcIiB9KVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICAgIFwiZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNMzksOC43aDIuMmwtMi44LDQuMmwyLjksNS4xSDM5bC0yLjQtNC4yaC0xLjNWMThoLTJWNWwyLTAuMXY3LjNoMS4zTDM5LDguN3pcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTQyLjQsMTMuM2MwLTEuNSwwLjQtMi43LDEuMS0zLjVzMS44LTEuMiwzLjEtMS4yYzEuMywwLDIuMiwwLjQsMi44LDEuMWMwLjYsMC43LDAuOSwxLjgsMC45LDMuMyBjMCwwLjQsMCwwLjgsMCwxLjFoLTUuOGMwLDEuNiwwLjgsMi40LDIuNCwyLjRjMSwwLDItMC4yLDIuOS0wLjZsMC4yLDEuN2MtMC40LDAuMi0wLjksMC40LTEuNCwwLjVzLTEuMSwwLjItMS43LDAuMiBjLTEuNSwwLTIuNi0wLjQtMy4zLTEuMkM0Mi44LDE2LjEsNDIuNCwxNC45LDQyLjQsMTMuM3ogTTQ2LjYsMTAuMWMtMC43LDAtMS4yLDAuMi0xLjUsMC41Yy0wLjQsMC40LTAuNiwwLjktMC42LDEuN2g0IGMwLTAuOC0wLjItMS40LTAuNS0xLjdTNDcuMiwxMC4xLDQ2LjYsMTAuMXpcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTU3LjEsMTguMmMtMSwwLTEuOC0wLjMtMi4zLTAuOWwwLDBsMCwxLjN2Mi41aC0yVjguN2gxLjVsMC4zLDAuOWgwYzAuMy0wLjMsMC43LTAuNiwxLjItMC43IGMwLjQtMC4yLDAuOS0wLjMsMS40LTAuM2MxLjIsMCwyLjEsMC40LDIuNywxLjFjMC42LDAuNywwLjksMiwwLjksMy43YzAsMS42LTAuMywyLjgtMSwzLjdDNTkuMiwxNy44LDU4LjMsMTguMiw1Ny4xLDE4LjJ6IE01Ni43LDEwLjNjLTAuNCwwLTAuOCwwLjEtMS4xLDAuMmMtMC4zLDAuMi0wLjYsMC40LTAuOCwwLjd2NC4zYzAuMiwwLjMsMC40LDAuNSwwLjcsMC43YzAuMywwLjIsMC43LDAuMywxLjEsMC4zIGMwLjcsMCwxLjItMC4yLDEuNi0wLjdjMC40LTAuNSwwLjUtMS4zLDAuNS0yLjVjMC0wLjgtMC4xLTEuNC0wLjItMS44cy0wLjQtMC43LTAuNy0wLjlDNTcuNiwxMC40LDU3LjIsMTAuMyw1Ni43LDEwLjN6XCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk02My4yLDE2VjVsMi0wLjF2MTAuOGMwLDAuMywwLjEsMC41LDAuMiwwLjZjMC4xLDAuMSwwLjMsMC4yLDAuNiwwLjJjMC4zLDAsMC42LDAsMC45LTAuMVYxOCBjLTAuNCwwLjEtMSwwLjItMS42LDAuMmMtMC44LDAtMS4zLTAuMi0xLjctMC41UzYzLjIsMTYuOCw2My4yLDE2elwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNNjguMiwxMy4zYzAtMS41LDAuNC0yLjcsMS4xLTMuNWMwLjctMC44LDEuOC0xLjIsMy4xLTEuMmMxLjMsMCwyLjIsMC40LDIuOCwxLjFjMC42LDAuNywwLjksMS44LDAuOSwzLjMgYzAsMC40LDAsMC44LDAsMS4xaC01LjhjMCwxLjYsMC44LDIuNCwyLjQsMi40YzEsMCwyLTAuMiwyLjktMC42bDAuMiwxLjdjLTAuNCwwLjItMC45LDAuNC0xLjQsMC41cy0xLjEsMC4yLTEuNywwLjIgYy0xLjUsMC0yLjYtMC40LTMuMy0xLjJDNjguNiwxNi4xLDY4LjIsMTQuOSw2OC4yLDEzLjN6IE03Mi40LDEwLjFjLTAuNywwLTEuMiwwLjItMS41LDAuNWMtMC40LDAuNC0wLjYsMC45LTAuNiwxLjdoNCBjMC0wLjgtMC4yLTEuNC0wLjUtMS43UzczLDEwLjEsNzIuNCwxMC4xelwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHsgZmlsbDpcIiMxRkJBRDZcIiwgZDogXCJNODAuMiw4LjdsMC4xLDEuN2gwYzAuMy0wLjYsMC43LTEuMSwxLjEtMS40YzAuNC0wLjMsMS0wLjUsMS42LTAuNWMwLjQsMCwwLjcsMCwxLDAuMWwtMC4xLDIgYy0wLjMtMC4xLTAuNy0wLjItMS0wLjJjLTAuNywwLTEuMywwLjMtMS43LDAuOGMtMC40LDAuNS0wLjcsMS4yLTAuNywyLjFWMThoLTJWOC43SDgwLjJ6XCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk04My44LDE3YzAtMC44LDAuNC0xLjIsMS4yLTEuMmMwLjgsMCwxLjIsMC40LDEuMiwxLjJjMCwwLjgtMC40LDEuMS0xLjIsMS4xQzg0LjIsMTguMiw4My44LDE3LjgsODMuOCwxN3pcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICByZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7IGZpbGw6XCIjMUZCQUQ2XCIsIGQ6IFwiTTg4LjUsMTguN2MwLTAuOCwwLjQtMS40LDEuMi0xLjhjLTAuNi0wLjMtMC45LTAuOC0wLjktMS41YzAtMC43LDAuNC0xLjIsMS4xLTEuNmMtMC4zLTAuMy0wLjYtMC42LTAuNy0wLjkgYy0wLjItMC40LTAuMi0wLjgtMC4yLTEuM2MwLTEsMC4zLTEuOCwwLjktMi4zYzAuNi0wLjUsMS42LTAuOCwyLjgtMC44YzAuNSwwLDEsMCwxLjQsMC4xYzAuNCwwLjEsMC44LDAuMiwxLjEsMC40bDIuNC0wLjJ2MS41IGgtMS41YzAuMiwwLjQsMC4yLDAuOCwwLjIsMS4zYzAsMS0wLjMsMS43LTAuOSwyLjJzLTEuNSwwLjgtMi43LDAuOGMtMC43LDAtMS4yLTAuMS0xLjYtMC4yYy0wLjEsMC4xLTAuMiwwLjItMC4zLDAuMyBjLTAuMSwwLjEtMC4xLDAuMi0wLjEsMC40YzAsMC4yLDAuMSwwLjMsMC4yLDAuNGMwLjEsMC4xLDAuMywwLjIsMC42LDAuMmwyLjcsMC4yYzEsMC4xLDEuNywwLjMsMi4yLDAuNmMwLjUsMC4zLDAuOCwwLjksMC44LDEuNyBjMCwwLjYtMC4yLDEuMS0wLjUsMS41Yy0wLjQsMC40LTAuOSwwLjgtMS41LDFjLTAuNywwLjItMS41LDAuNC0yLjQsMC40Yy0xLjMsMC0yLjMtMC4yLTMtMC42Qzg4LjgsMjAuMSw4OC41LDE5LjUsODguNSwxOC43eiBNOTUuMSwxOC40YzAtMC4zLTAuMS0wLjUtMC4zLTAuN3MtMC42LTAuMi0xLjEtMC4zbC0yLjctMC4zYy0wLjIsMC4xLTAuNCwwLjMtMC41LDAuNWMtMC4xLDAuMi0wLjIsMC40LTAuMiwwLjYgYzAsMC40LDAuMiwwLjgsMC41LDFjMC40LDAuMiwxLDAuMywxLjgsMC4zQzk0LjIsMTkuNSw5NS4xLDE5LjIsOTUuMSwxOC40eiBNOTQuMywxMS41YzAtMC42LTAuMS0xLTAuNC0xLjIgYy0wLjMtMC4yLTAuNy0wLjMtMS4zLTAuM2MtMC43LDAtMS4xLDAuMS0xLjQsMC4zYy0wLjMsMC4yLTAuNCwwLjYtMC40LDEuMnMwLjEsMSwwLjQsMS4yYzAuMywwLjIsMC43LDAuMywxLjQsMC4zIGMwLjYsMCwxLjEtMC4xLDEuMy0wLjRTOTQuMywxMiw5NC4zLDExLjV6XCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwgeyBmaWxsOlwiIzFGQkFENlwiLCBkOiBcIk05OS40LDE2VjVsMi0wLjF2MTAuOGMwLDAuMywwLjEsMC41LDAuMiwwLjZjMC4xLDAuMSwwLjMsMC4yLDAuNiwwLjJjMC4zLDAsMC42LDAsMC45LTAuMVYxOCBjLTAuNCwwLjEtMSwwLjItMS42LDAuMmMtMC44LDAtMS4zLTAuMi0xLjctMC41Uzk5LjQsMTYuOCw5OS40LDE2elwiIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gQXBwKCkge1xuICAgICAgICAgICAgICB2YXIgcm9vdEVsbSA9IHJlYWN0LnVzZVJlZihudWxsKTtcbiAgICAgICAgICAgICAgdmFyIF91c2VTdGF0ZSA9IHJlYWN0LnVzZVN0YXRlKHtcbiAgICAgICAgICAgICAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHZhciB3aW5kb3dEaW1lbnNpb24gPSBfdXNlU3RhdGVbMF07XG4gICAgICAgICAgICAgIHZhciBzZXREaW1lbnNpb24gPSBfdXNlU3RhdGVbMV07XG4gICAgICAgICAgICAgIHJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiBzaWRlRWZmZWN0KCl7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzaXplKCkge1xuICAgICAgICAgICAgICAgICAgc2V0RGltZW5zaW9uKHt3aWR0aDogd2luZG93LmlubmVyV2lkdGgsIGhlaWdodDogd2luZG93LmlubmVySGVpZ2h0fSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7fTtcbiAgICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICAgICByZXR1cm4gcmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgICB7c3R5bGU6IHtwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogMCwgd2lkdGg6ICcxMDB2dycsIGhlaWdodDogJzEwMHZoJ319LFxuICAgICAgICAgICAgICAgICR7b3B0aW9ucy5tb2RlID09PSBFWFBPUlRfSFRNTF9NQVBfTU9ERVMuUkVBRCA/ICdMb2dvU3ZnKCksJyA6ICcnfVxuICAgICAgICAgICAgICAgIHJlYWN0LmNyZWF0ZUVsZW1lbnQoa2VwbGVyR2wuS2VwbGVyR2wsIHtcbiAgICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBtYXBib3hUb2tlbixcbiAgICAgICAgICAgICAgICAgIGlkOiBcIm1hcFwiLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpbmRvd0RpbWVuc2lvbi53aWR0aCxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogd2luZG93RGltZW5zaW9uLmhlaWdodFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KFJlYWN0LCBLZXBsZXJHbCwgTUFQQk9YX1RPS0VOKSk7XG5cbiAgICAgICAgICBjb25zdCBhcHAgPSAoZnVuY3Rpb24gY3JlYXRlUmVhY3RSZWR1eFByb3ZpZGVyKHJlYWN0LCByZWFjdFJlZHV4LCBLZXBsZXJFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgcmVhY3RSZWR1eC5Qcm92aWRlcixcbiAgICAgICAgICAgICAge3N0b3JlfSxcbiAgICAgICAgICAgICAgcmVhY3QuY3JlYXRlRWxlbWVudChLZXBsZXJFbGVtZW50LCBudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0oUmVhY3QsIFJlYWN0UmVkdXgsIEtlcGxlckVsZW1lbnQpKTtcbiAgICAgICAgICAvKiogRU5EIENPTVBPTkVOVFMgKiovXG5cbiAgICAgICAgICAvKiogUmVuZGVyICoqL1xuICAgICAgICAgIChmdW5jdGlvbiByZW5kZXIocmVhY3QsIHJlYWN0RE9NLCBhcHApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHAnKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSByZWFjdERPTS5jcmVhdGVSb290KGNvbnRhaW5lcik7XG4gICAgICAgICAgICByb290LnJlbmRlcihhcHApO1xuICAgICAgICAgIH0oUmVhY3QsIFJlYWN0RE9NLCBhcHApKTtcbiAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgIDwhLS0gVGhlIG5leHQgc2NyaXB0IHdpbGwgc2hvdyBob3cgdG8gaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCBLZXBsZXIgbWFwIHN0b3JlIC0tPlxuICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIEN1c3RvbWl6ZSBtYXAuXG4gICAgICAgICAgICogSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uIHlvdSBjYW4gdXNlIHRoZSBzdG9yZSBvYmplY3QgdG8gZGlzcGF0Y2ggS2VwbGVyLmdsIGFjdGlvbnNcbiAgICAgICAgICAgKiB0byBhZGQgbmV3IGRhdGEgYW5kIGN1c3RvbWl6ZSBiZWhhdmlvclxuICAgICAgICAgICAqL1xuICAgICAgICAgIChmdW5jdGlvbiBjdXN0b21pemUoa2VwbGVyR2wsIHN0b3JlKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc2V0cyA9ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucy5kYXRhc2V0cyl9O1xuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLmNvbmZpZyl9O1xuXG4gICAgICAgICAgICBjb25zdCBsb2FkZWREYXRhID0ga2VwbGVyR2wuS2VwbGVyR2xTY2hlbWEubG9hZChcbiAgICAgICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIEtlcGxlciBvdmVyd3JpdGVzIHRoZSBjb25maWcgd2l0aG91dCBleHRyYSB3YWl0IHRpbWVcbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAga2VwbGVyR2wuYWRkRGF0YVRvTWFwKHtcbiAgICAgICAgICAgICAgICAgIGRhdGFzZXRzOiBsb2FkZWREYXRhLmRhdGFzZXRzLFxuICAgICAgICAgICAgICAgICAgY29uZmlnOiBsb2FkZWREYXRhLmNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyTWFwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgfShLZXBsZXJHbCwgc3RvcmUpKVxuICAgICAgICA8L3NjcmlwdD5cbiAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gIGA7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFKQTtBQUNBOztBQUVBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxlQUFlLEdBQUFDLE9BQUEsQ0FBQUQsZUFBQSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJRSxPQUFPLEVBQWtDO0VBQUEsSUFBaENDLE9BQU8sR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUdHLDRCQUFpQjtFQUNsRSwwbkZBQUFDLE1BQUEsQ0F3Q2lETCxPQUFPLDhUQUFBSyxNQUFBLENBV3hCTixPQUFPLENBQUNPLG9CQUFvQixJQUFJLHNCQUFzQixxbEVBQUFELE1BQUEsQ0EyQzFETixPQUFPLENBQUNRLElBQUksS0FBS0MsZ0NBQXFCLENBQUNDLElBQUksMG9OQUFBSixNQUFBLENBbUZ2RE4sT0FBTyxDQUFDUSxJQUFJLEtBQUtDLGdDQUFxQixDQUFDQyxJQUFJLEdBQUcsWUFBWSxHQUFHLEVBQUUsMDJDQUFBSixNQUFBLENBbUNsREssSUFBSSxDQUFDQyxTQUFTLENBQUNaLE9BQU8sQ0FBQ2EsUUFBUSxDQUFDLG9DQUFBUCxNQUFBLENBQ2xDSyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1osT0FBTyxDQUFDYyxNQUFNLENBQUM7QUF3QjNELENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -87,23 +87,25 @@ export declare function validatePolygonFilter<K extends KeplerTableModel<K, L>,
87
87
  };
88
88
  /**
89
89
  * Default validate filter function
90
- * @param dataset
90
+ * @param datasets
91
+ * @param datasetId
91
92
  * @param filter
92
93
  * @return - {filter, dataset}
93
94
  */
94
- export declare function validateFilter<K extends KeplerTableModel<K, L>, L>(dataset: K, filter: ParsedFilter): {
95
+ export declare function validateFilter<K extends KeplerTableModel<K, L>, L>(datasets: Record<string, K>, datasetId: string, filter: ParsedFilter): {
95
96
  filter: Filter | null;
96
97
  dataset: K;
97
98
  };
98
99
  /**
99
100
  * Validate saved filter config with new data
100
101
  *
101
- * @param dataset
102
+ * @param datasets
103
+ * @param datasetId
102
104
  * @param filter - filter to be validate
103
105
  * @param layers - layers
104
106
  * @return validated filter
105
107
  */
106
- export declare function validateFilterWithData<K extends KeplerTableModel<K, L>, L>(dataset: K, filter: ParsedFilter, layers: L[]): {
108
+ export declare function validateFilterWithData<K extends KeplerTableModel<K, L>, L>(datasets: Record<string, K>, datasetId: string, filter: ParsedFilter, layers: L[]): {
107
109
  filter: Filter;
108
110
  dataset: K;
109
111
  };
@@ -238,22 +240,29 @@ export declare function applyFiltersToDatasets<K extends KeplerTableModel<K, L>,
238
240
  /**
239
241
  * Applies a new field name value to filter and update both filter and dataset
240
242
  * @param filter - to be applied the new field name on
241
- * @param dataset - dataset the field belongs to
243
+ * @param datasets - All datasets
244
+ * @param datasetId - Id of the dataset the field belongs to
242
245
  * @param fieldName - field.name
243
246
  * @param filterDatasetIndex - field.name
244
247
  * @param option
245
248
  * @return - {filter, datasets}
246
249
  */
247
- export declare function applyFilterFieldName<K extends KeplerTableModel<K, L>, L>(filter: Filter, dataset: K, fieldName: string, filterDatasetIndex?: number, option?: {
250
+ export declare function applyFilterFieldName<K extends KeplerTableModel<K, L>, L>(filter: Filter, datasets: Record<string, K>, datasetId: string, fieldName: string, filterDatasetIndex?: number, option?: {
248
251
  mergeDomain: boolean;
249
252
  }): {
250
253
  filter: Filter | null;
251
254
  dataset: K;
252
255
  };
256
+ /**
257
+ * Merge the domains of a filter in case it applies to multiple datasets
258
+ */
259
+ export declare function mergeFilterDomain(filter: Filter, datasets: Record<string, KeplerTableModel<any, any>>): (Filter & {
260
+ step?: number;
261
+ }) | null;
253
262
  /**
254
263
  * Merge one filter with other filter prop domain
255
264
  */
256
- export declare function mergeFilterDomainStep(filter: Filter, filterProps?: Partial<Filter>): (Filter & {
265
+ export declare function mergeFilterDomainStep(filter: Filter | null, filterProps?: Partial<Filter>): (Filter & {
257
266
  step?: number;
258
267
  }) | null;
259
268
  /**