@carto/kepler.gl 0.0.70-alpha.hackaton-vite → 0.0.71-alpha.1

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.
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.scaleHexColor = scaleHexColor;
7
+
8
+ var _colorUtils = require("./color-utils");
9
+
10
+ function scaleHexColor() {
11
+ var unknown;
12
+
13
+ function scale(x) {
14
+ return x === null ? unknown : (0, _colorUtils.hexToRgb)(x);
15
+ }
16
+
17
+ scale.invert = scale;
18
+ scale.domain = scale.range = scaleHexColor;
19
+
20
+ scale.unknown = function (u) {
21
+ if (u) {
22
+ unknown = u;
23
+ }
24
+
25
+ return scale;
26
+ };
27
+
28
+ return scale;
29
+ }
30
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jdXN0b20tc2NhbGUuanMiXSwibmFtZXMiOlsic2NhbGVIZXhDb2xvciIsInVua25vd24iLCJzY2FsZSIsIngiLCJpbnZlcnQiLCJkb21haW4iLCJyYW5nZSIsInUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFTyxTQUFTQSxhQUFULEdBQXlCO0FBQzlCLE1BQUlDLE9BQUo7O0FBQ0EsV0FBU0MsS0FBVCxDQUFlQyxDQUFmLEVBQWtCO0FBQ2hCLFdBQU9BLENBQUMsS0FBSyxJQUFOLEdBQWFGLE9BQWIsR0FBdUIsMEJBQVNFLENBQVQsQ0FBOUI7QUFDRDs7QUFFREQsRUFBQUEsS0FBSyxDQUFDRSxNQUFOLEdBQWVGLEtBQWY7QUFFQUEsRUFBQUEsS0FBSyxDQUFDRyxNQUFOLEdBQWVILEtBQUssQ0FBQ0ksS0FBTixHQUFjTixhQUE3Qjs7QUFFQUUsRUFBQUEsS0FBSyxDQUFDRCxPQUFOLEdBQWdCLFVBQUFNLENBQUMsRUFBSTtBQUNuQixRQUFJQSxDQUFKLEVBQU87QUFDTE4sTUFBQUEsT0FBTyxHQUFHTSxDQUFWO0FBQ0Q7O0FBRUQsV0FBT0wsS0FBUDtBQUNELEdBTkQ7O0FBUUEsU0FBT0EsS0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtoZXhUb1JnYn0gZnJvbSAnLi9jb2xvci11dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUhleENvbG9yKCkge1xuICBsZXQgdW5rbm93bjtcbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09PSBudWxsID8gdW5rbm93biA6IGhleFRvUmdiKHgpO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gc2NhbGU7XG5cbiAgc2NhbGUuZG9tYWluID0gc2NhbGUucmFuZ2UgPSBzY2FsZUhleENvbG9yO1xuXG4gIHNjYWxlLnVua25vd24gPSB1ID0+IHtcbiAgICBpZiAodSkge1xuICAgICAgdW5rbm93biA9IHU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiJdfQ==
@@ -362,6 +362,7 @@ var KeplerTable = /*#__PURE__*/function () {
362
362
  switch (scaleType) {
363
363
  case _defaultSettings.SCALE_TYPES.ordinal:
364
364
  case _defaultSettings.SCALE_TYPES.point:
365
+ case _defaultSettings.SCALE_TYPES.hexColor:
365
366
  // do not recalculate ordinal domain based on filtered data
366
367
  // don't need to update ordinal domain every time
367
368
  return (0, _dataScaleUtils.getOrdinalDomain)(dataContainer, valueAccessor);
@@ -541,4 +542,4 @@ function copyTableAndUpdate(original) {
541
542
 
542
543
  var _default = KeplerTable;
543
544
  exports["default"] = _default;
544
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy90YWJsZS11dGlscy9rZXBsZXItdGFibGUuanMiXSwibmFtZXMiOlsiRklEX0tFWSIsIktlcGxlclRhYmxlIiwiaW5mbyIsImRhdGEiLCJjb2xvciIsIm1ldGFkYXRhIiwic3VwcG9ydGVkRmlsdGVyVHlwZXMiLCJkYXRhQ29udGFpbmVyIiwicm93cyIsImZpZWxkcyIsImRhdGFzZXRJbmZvIiwiaWQiLCJsYWJlbCIsImRhdGFJZCIsIm1hcCIsImYiLCJpIiwiZmllbGRJZHgiLCJuYW1lIiwiZGlzcGxheU5hbWUiLCJ2YWx1ZUFjY2Vzc29yIiwibWF5YmVUb0RhdGUiLCJiaW5kIiwidHlwZSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsImRhdGUiLCJmb3JtYXQiLCJhbGxJbmRleGVzIiwiZ2V0UGxhaW5JbmRleCIsImZpbHRlcmVkSW5kZXgiLCJmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIiwiZmllbGRQYWlycyIsImZpbmRQb2ludEZpZWxkUGFpcnMiLCJncHVGaWx0ZXIiLCJjb2x1bW5OYW1lIiwiZmllbGQiLCJmaW5kIiwiZmQiLCJfYXNzZXRGaWVsZCIsImZpbmRJbmRleCIsIkJvb2xlYW4iLCJyb3dJZHgiLCJnZXRDb2x1bW5GaWVsZCIsImluZGV4IiwibmV3RmllbGQiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRDb2x1bW5GaWVsZElkeCIsImhhc093blByb3BlcnR5IiwiZmlsdGVyUHJvcHMiLCJmaWVsZERvbWFpbiIsImdldENvbHVtbkZpbHRlckRvbWFpbiIsInVwZGF0ZUNvbHVtbkZpZWxkIiwiZmlsdGVycyIsImxheWVycyIsIm9wdCIsIm9sZEZpbHRlclJlY29yZCIsImZpbHRlclJlY29yZCIsImxlbmd0aCIsImNoYW5nZWRGaWx0ZXJzIiwic2hvdWxkQ2FsRG9tYWluIiwiZHluYW1pY0RvbWFpbiIsInNob3VsZENhbEluZGV4IiwiY3B1IiwiZmlsdGVyUmVzdWx0IiwiZHluYW1pY0RvbWFpbkZpbHRlcnMiLCJjcHVGaWx0ZXJzIiwiZmlsdGVyRnVuY3MiLCJyZWR1Y2UiLCJhY2MiLCJmaWx0ZXIiLCJmaWVsZEluZGV4IiwiY3B1T25seSIsImlnbm9yZURvbWFpbiIsImZpbHRlcmVkSWR4Q1BVIiwiZmlsdGVyUmVjb3JkQ1BVIiwiZ3B1IiwiY29waWVkIiwiY29weVRhYmxlIiwiZmlsdGVyZWQiLCJmaWx0ZXJUYWJsZSIsImRvbWFpbiIsInJlYWwiLCJpbnRlZ2VyIiwic3RyaW5nIiwic2NhbGVUeXBlIiwiU0NBTEVfVFlQRVMiLCJDb25zb2xlIiwiZXJyb3IiLCJpbmRleFZhbHVlQWNjZXNzb3IiLCJzb3J0RnVuY3Rpb24iLCJvcmRpbmFsIiwicG9pbnQiLCJxdWFudGlsZSIsImxvZyIsInF1YW50aXplIiwibGluZWFyIiwic3FydCIsImZpZWxkTmFtZSIsImNvbmRpdGlvbiIsInJlbW92ZVN1ZmZpeEFuZERlbGltaXRlcnMiLCJsYXllck5hbWUiLCJzdWZmaXgiLCJyZXBsYWNlIiwiUmVnRXhwIiwidHJpbSIsImFsbE5hbWVzIiwidG9Mb3dlckNhc2UiLCJyZXN1bHQiLCJjYXJyeSIsImlkeCIsIlRSSVBfUE9JTlRfRklFTERTIiwic3VmZml4UGFpciIsImVuZHNXaXRoIiwib3RoZXJQYXR0ZXJuIiwicGFydG5lciIsInBhcnRuZXJJZHgiLCJkIiwiZGVmYXVsdE5hbWUiLCJwdXNoIiwicGFpciIsImxhdCIsInZhbHVlIiwibG5nIiwic29ydCIsImEiLCJiIiwic29ydERhdGFzZXRCeUNvbHVtbiIsImRhdGFzZXQiLCJjb2x1bW4iLCJtb2RlIiwic29ydEJ5IiwiU09SVF9PUkRFUiIsIkFTQ0VORElORyIsIlVOU09SVCIsInNvcnRDb2x1bW4iLCJzb3J0T3JkZXIiLCJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIiwic2xpY2UiLCJ2YWx1ZUF0Iiwib3JpZ2luYWwiLCJjcmVhdGUiLCJnZXRQcm90b3R5cGVPZiIsImNvcHlUYWJsZUFuZFVwZGF0ZSIsIm9wdGlvbnMiLCJlbnRyaWVzIiwiZW50cnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFTQTs7QUFDQTs7QUFTQTs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQSxJQUFNQSxPQUFPLEdBQUcsTUFBaEI7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0lBQ01DLFc7QUFDSiw2QkFBc0U7QUFBQSx5QkFBekRDLElBQXlEO0FBQUEsUUFBekRBLElBQXlELDBCQUFsRCxFQUFrRDtBQUFBLFFBQTlDQyxJQUE4QyxRQUE5Q0EsSUFBOEM7QUFBQSxRQUF4Q0MsS0FBd0MsUUFBeENBLEtBQXdDO0FBQUEsUUFBakNDLFFBQWlDLFFBQWpDQSxRQUFpQztBQUFBLFFBQXZCQyxvQkFBdUIsUUFBdkJBLG9CQUF1QjtBQUFBO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxRQUFNQyxhQUFhLEdBQUcsNkNBQW9CSixJQUFJLENBQUNLLElBQXpCLEVBQStCO0FBQUNDLE1BQUFBLE1BQU0sRUFBRU4sSUFBSSxDQUFDTTtBQUFkLEtBQS9CLENBQXRCOztBQUVBLFFBQU1DLFdBQVc7QUFDZkMsTUFBQUEsRUFBRSxFQUFFLDJCQUFlLENBQWYsQ0FEVztBQUVmQyxNQUFBQSxLQUFLLEVBQUU7QUFGUSxPQUdYVixJQUFJLElBQUksRUFIRyxDQUFqQjs7QUFLQSxRQUFNVyxNQUFNLEdBQUdILFdBQVcsQ0FBQ0MsRUFBM0I7QUFFQSxRQUFNRixNQUFNLEdBQUdOLElBQUksQ0FBQ00sTUFBTCxDQUFZSyxHQUFaLENBQWdCLFVBQUNDLENBQUQsRUFBSUMsQ0FBSjtBQUFBLDZDQUMxQkQsQ0FEMEI7QUFFN0JFLFFBQUFBLFFBQVEsRUFBRUQsQ0FGbUI7QUFHN0JMLFFBQUFBLEVBQUUsRUFBRUksQ0FBQyxDQUFDRyxJQUh1QjtBQUk3QkMsUUFBQUEsV0FBVyxFQUFFSixDQUFDLENBQUNJLFdBQUYsSUFBaUJKLENBQUMsQ0FBQ0csSUFKSDtBQUs3QkUsUUFBQUEsYUFBYSxFQUFFQyx1QkFBWUMsSUFBWixDQUNiLElBRGEsRUFFYjtBQUNBUCxRQUFBQSxDQUFDLENBQUNRLElBQUYsS0FBV0MsaUNBQWdCQyxTQUEzQixJQUF3Q1YsQ0FBQyxDQUFDUSxJQUFGLEtBQVdDLGlDQUFnQkUsSUFIdEQsRUFJYlYsQ0FKYSxFQUtiRCxDQUFDLENBQUNZLE1BTFcsRUFNYnBCLGFBTmE7QUFMYztBQUFBLEtBQWhCLENBQWY7QUFlQSxRQUFNcUIsVUFBVSxHQUFHckIsYUFBYSxDQUFDc0IsYUFBZCxFQUFuQjtBQUVBLFNBQUtsQixFQUFMLEdBQVVELFdBQVcsQ0FBQ0MsRUFBdEI7QUFDQSxTQUFLQyxLQUFMLEdBQWFGLFdBQVcsQ0FBQ0UsS0FBekI7QUFDQSxTQUFLUixLQUFMLEdBQWFBLEtBQWI7QUFDQSxTQUFLQyxRQUFMLG1DQUNLQSxRQURMO0FBRUVNLE1BQUFBLEVBQUUsRUFBRUQsV0FBVyxDQUFDQyxFQUZsQjtBQUdFQyxNQUFBQSxLQUFLLEVBQUVGLFdBQVcsQ0FBQ0U7QUFIckI7QUFNQSxTQUFLTCxhQUFMLEdBQXFCQSxhQUFyQjtBQUNBLFNBQUtxQixVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLFNBQUtFLGFBQUwsR0FBcUJGLFVBQXJCO0FBQ0EsU0FBS0csc0JBQUwsR0FBOEJILFVBQTlCO0FBQ0EsU0FBS0ksVUFBTCxHQUFrQkMsbUJBQW1CLENBQUN4QixNQUFELENBQXJDO0FBQ0EsU0FBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS3lCLFNBQUwsR0FBaUIsdUNBQWtCLEVBQWxCLEVBQXNCckIsTUFBdEIsRUFBOEJKLE1BQTlCLENBQWpCOztBQUNBLFFBQUlILG9CQUFKLEVBQTBCO0FBQ3hCLFdBQUtBLG9CQUFMLEdBQTRCQSxvQkFBNUI7QUFDRDtBQUNGO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7Ozs7O1dBQ0Usd0JBQWU2QixVQUFmLEVBQTJCO0FBQ3pCLFVBQU1DLEtBQUssR0FBRyxLQUFLM0IsTUFBTCxDQUFZNEIsSUFBWixDQUFpQixVQUFBQyxFQUFFO0FBQUEsZUFBSUEsRUFBRSxDQUFDdEMsT0FBRCxDQUFGLEtBQWdCbUMsVUFBcEI7QUFBQSxPQUFuQixDQUFkOztBQUNBLFdBQUtJLFdBQUwsQ0FBaUJKLFVBQWpCLEVBQTZCQyxLQUE3Qjs7QUFDQSxhQUFPQSxLQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7OztXQUNFLDJCQUFrQkQsVUFBbEIsRUFBOEI7QUFDNUIsVUFBTWxCLFFBQVEsR0FBRyxLQUFLUixNQUFMLENBQVkrQixTQUFaLENBQXNCLFVBQUFGLEVBQUU7QUFBQSxlQUFJQSxFQUFFLENBQUN0QyxPQUFELENBQUYsS0FBZ0JtQyxVQUFwQjtBQUFBLE9BQXhCLENBQWpCOztBQUNBLFdBQUtJLFdBQUwsQ0FBaUJKLFVBQWpCLEVBQTZCTSxPQUFPLENBQUN4QixRQUFRLEdBQUcsQ0FBQyxDQUFiLENBQXBDOztBQUNBLGFBQU9BLFFBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTs7OztXQUNFLGtCQUFTa0IsVUFBVCxFQUFxQk8sTUFBckIsRUFBNkI7QUFDM0IsVUFBTU4sS0FBSyxHQUFHLEtBQUtPLGNBQUwsQ0FBb0JSLFVBQXBCLENBQWQ7QUFDQSxhQUFPQyxLQUFLLEdBQUdBLEtBQUssQ0FBQ2hCLGFBQU4sQ0FBb0I7QUFBQ3dCLFFBQUFBLEtBQUssRUFBRUY7QUFBUixPQUFwQixDQUFILEdBQTBDLElBQXREO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7O1dBQ0UsMkJBQWtCekIsUUFBbEIsRUFBNEI0QixRQUE1QixFQUFzQztBQUNwQyxXQUFLcEMsTUFBTCxHQUFjcUMsTUFBTSxDQUFDQyxNQUFQLHFDQUFrQixLQUFLdEMsTUFBdkIsd0NBQWtDUSxRQUFsQyxFQUE2QzRCLFFBQTdDLEVBQWQ7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBOzs7O1dBQ0UsOEJBQXFCVixVQUFyQixFQUFpQztBQUMvQixVQUFNbEIsUUFBUSxHQUFHLEtBQUsrQixpQkFBTCxDQUF1QmIsVUFBdkIsQ0FBakI7O0FBQ0EsVUFBSWxCLFFBQVEsR0FBRyxDQUFmLEVBQWtCO0FBQ2hCLGVBQU8sSUFBUDtBQUNEOztBQUNELFVBQU1tQixLQUFLLEdBQUcsS0FBSzNCLE1BQUwsQ0FBWVEsUUFBWixDQUFkOztBQUNBLFVBQUltQixLQUFLLENBQUNhLGNBQU4sQ0FBcUIsYUFBckIsQ0FBSixFQUF5QztBQUN2QyxlQUFPYixLQUFLLENBQUNjLFdBQWI7QUFDRDs7QUFFRCxVQUFNQyxXQUFXLEdBQUcsS0FBS0MscUJBQUwsQ0FBMkJoQixLQUEzQixDQUFwQjs7QUFDQSxVQUFJLENBQUNlLFdBQUwsRUFBa0I7QUFDaEIsZUFBTyxJQUFQO0FBQ0Q7O0FBRUQsVUFBTUQsV0FBVyxHQUFHLGlDQUFlZCxLQUFmLEVBQXNCZSxXQUF0QixDQUFwQjs7QUFDQSxVQUFNTixRQUFRLG1DQUNUVCxLQURTO0FBRVpjLFFBQUFBLFdBQVcsRUFBWEE7QUFGWSxRQUFkOztBQUtBLFdBQUtHLGlCQUFMLENBQXVCcEMsUUFBdkIsRUFBaUM0QixRQUFqQztBQUVBLGFBQU9LLFdBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHFCQUFZSSxPQUFaLEVBQXFCQyxNQUFyQixFQUE2QkMsR0FBN0IsRUFBa0M7QUFBQTs7QUFBQSxVQUN6QmpELGFBRHlCLEdBQzJDLElBRDNDLENBQ3pCQSxhQUR5QjtBQUFBLFVBQ05NLE1BRE0sR0FDMkMsSUFEM0MsQ0FDVkYsRUFEVTtBQUFBLFVBQ2dCOEMsZUFEaEIsR0FDMkMsSUFEM0MsQ0FDRUMsWUFERjtBQUFBLFVBQ2lDakQsTUFEakMsR0FDMkMsSUFEM0MsQ0FDaUNBLE1BRGpDLEVBR2hDOztBQUNBLFVBQU1pRCxZQUFZLEdBQUcsa0NBQWdCN0MsTUFBaEIsRUFBd0J5QyxPQUF4QixFQUFpQ0UsR0FBRyxJQUFJLEVBQXhDLENBQXJCO0FBRUEsV0FBS0UsWUFBTCxHQUFvQkEsWUFBcEI7QUFDQSxXQUFLeEIsU0FBTCxHQUFpQix1Q0FBa0JvQixPQUFsQixFQUEyQnpDLE1BQTNCLEVBQW1DSixNQUFuQyxDQUFqQixDQVBnQyxDQVNoQzs7QUFFQSxVQUFJLENBQUM2QyxPQUFPLENBQUNLLE1BQWIsRUFBcUI7QUFDbkIsYUFBSzdCLGFBQUwsR0FBcUIsS0FBS0YsVUFBMUI7QUFDQSxhQUFLRyxzQkFBTCxHQUE4QixLQUFLSCxVQUFuQztBQUNBLGVBQU8sSUFBUDtBQUNEOztBQUVELFdBQUtnQyxjQUFMLEdBQXNCLDhCQUFZRixZQUFaLEVBQTBCRCxlQUExQixDQUF0QixDQWpCZ0MsQ0FtQmhDO0FBQ0E7QUFDQTs7QUFDQSxVQUFNSSxlQUFlLEdBQUdwQixPQUFPLENBQUMsS0FBS21CLGNBQUwsQ0FBb0JFLGFBQXJCLENBQS9CO0FBQ0EsVUFBTUMsY0FBYyxHQUFHdEIsT0FBTyxDQUFDLEtBQUttQixjQUFMLENBQW9CSSxHQUFyQixDQUE5QjtBQUVBLFVBQUlDLFlBQVksR0FBRyxFQUFuQjs7QUFDQSxVQUFJSixlQUFlLElBQUlFLGNBQXZCLEVBQXVDO0FBQ3JDLFlBQU1HLG9CQUFvQixHQUFHTCxlQUFlLEdBQUdILFlBQVksQ0FBQ0ksYUFBaEIsR0FBZ0MsSUFBNUU7QUFDQSxZQUFNSyxVQUFVLEdBQUdKLGNBQWMsR0FBR0wsWUFBWSxDQUFDTSxHQUFoQixHQUFzQixJQUF2RDtBQUVBLFlBQU1JLFdBQVcsR0FBR2QsT0FBTyxDQUFDZSxNQUFSLENBQWUsVUFBQ0MsR0FBRCxFQUFNQyxNQUFOLEVBQWlCO0FBQ2xELGNBQU1DLFVBQVUsR0FBRyxtREFBOEIsS0FBSSxDQUFDN0QsRUFBbkMsRUFBdUM0RCxNQUF2QyxDQUFuQjtBQUNBLGNBQU1uQyxLQUFLLEdBQUdvQyxVQUFVLEtBQUssQ0FBQyxDQUFoQixHQUFvQi9ELE1BQU0sQ0FBQytELFVBQUQsQ0FBMUIsR0FBeUMsSUFBdkQ7QUFFQSxpREFDS0YsR0FETCw0Q0FFR0MsTUFBTSxDQUFDNUQsRUFGVixFQUVlLG9DQUFrQnlCLEtBQWxCLEVBQXlCLEtBQUksQ0FBQ3pCLEVBQTlCLEVBQWtDNEQsTUFBbEMsRUFBMENoQixNQUExQyxFQUFrRGhELGFBQWxELENBRmY7QUFJRCxTQVJtQixFQVFqQixFQVJpQixDQUFwQjtBQVVBMEQsUUFBQUEsWUFBWSxHQUFHLDBDQUNiO0FBQUNDLFVBQUFBLG9CQUFvQixFQUFwQkEsb0JBQUQ7QUFBdUJDLFVBQUFBLFVBQVUsRUFBVkEsVUFBdkI7QUFBbUNDLFVBQUFBLFdBQVcsRUFBWEE7QUFBbkMsU0FEYSxFQUViN0QsYUFGYSxDQUFmO0FBSUQ7O0FBRUQsV0FBS3VCLGFBQUwsR0FBcUJtQyxZQUFZLENBQUNuQyxhQUFiLElBQThCLEtBQUtBLGFBQXhEO0FBQ0EsV0FBS0Msc0JBQUwsR0FDRWtDLFlBQVksQ0FBQ2xDLHNCQUFiLElBQXVDLEtBQUtBLHNCQUQ5QztBQUdBLGFBQU8sSUFBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OztXQUNFLHdCQUFldUIsT0FBZixFQUF3QkMsTUFBeEIsRUFBZ0M7QUFDOUIsVUFBTUMsR0FBRyxHQUFHO0FBQ1ZpQixRQUFBQSxPQUFPLEVBQUUsSUFEQztBQUVWQyxRQUFBQSxZQUFZLEVBQUU7QUFGSixPQUFaLENBRDhCLENBTTlCOztBQUNBLFVBQUksQ0FBQ3BCLE9BQU8sQ0FBQ0ssTUFBYixFQUFxQjtBQUNuQixhQUFLZ0IsY0FBTCxHQUFzQixLQUFLL0MsVUFBM0I7QUFDQSxhQUFLZ0QsZUFBTCxHQUF1QixrQ0FBZ0IsS0FBS2pFLEVBQXJCLEVBQXlCMkMsT0FBekIsRUFBa0NFLEdBQWxDLENBQXZCO0FBQ0EsZUFBTyxJQUFQO0FBQ0QsT0FYNkIsQ0FhOUI7OztBQUNBLFVBQUksQ0FBQ0YsT0FBTyxDQUFDakIsSUFBUixDQUFhLFVBQUF0QixDQUFDO0FBQUEsZUFBSUEsQ0FBQyxDQUFDOEQsR0FBTjtBQUFBLE9BQWQsQ0FBTCxFQUErQjtBQUM3QixhQUFLRixjQUFMLEdBQXNCLEtBQUs3QyxhQUEzQjtBQUNBLGFBQUs4QyxlQUFMLEdBQXVCLGtDQUFnQixLQUFLakUsRUFBckIsRUFBeUIyQyxPQUF6QixFQUFrQ0UsR0FBbEMsQ0FBdkI7QUFDQSxlQUFPLElBQVA7QUFDRCxPQWxCNkIsQ0FvQjlCOzs7QUFDQSxVQUFNc0IsTUFBTSxHQUFHQyxTQUFTLENBQUMsSUFBRCxDQUF4QjtBQUVBRCxNQUFBQSxNQUFNLENBQUNwQixZQUFQLEdBQXNCLEtBQUtrQixlQUEzQjtBQUNBRSxNQUFBQSxNQUFNLENBQUNoRCxhQUFQLEdBQXVCLEtBQUs2QyxjQUFMLElBQXVCLEVBQTlDO0FBRUEsVUFBTUssUUFBUSxHQUFHRixNQUFNLENBQUNHLFdBQVAsQ0FBbUIzQixPQUFuQixFQUE0QkMsTUFBNUIsRUFBb0NDLEdBQXBDLENBQWpCO0FBRUEsV0FBS21CLGNBQUwsR0FBc0JLLFFBQVEsQ0FBQ2xELGFBQS9CO0FBQ0EsV0FBSzhDLGVBQUwsR0FBdUJJLFFBQVEsQ0FBQ3RCLFlBQWhDO0FBRUEsYUFBTyxJQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTs7OztXQUNFLCtCQUFzQnRCLEtBQXRCLEVBQTZCO0FBQUEsVUFDcEI3QixhQURvQixHQUNILElBREcsQ0FDcEJBLGFBRG9CO0FBQUEsVUFFcEJhLGFBRm9CLEdBRUhnQixLQUZHLENBRXBCaEIsYUFGb0I7QUFJM0IsVUFBSThELE1BQUo7O0FBRUEsY0FBUTlDLEtBQUssQ0FBQ2IsSUFBZDtBQUNFLGFBQUtDLGlDQUFnQjJELElBQXJCO0FBQ0EsYUFBSzNELGlDQUFnQjRELE9BQXJCO0FBQ0U7QUFDQSxpQkFBTyx3Q0FBc0I3RSxhQUF0QixFQUFxQ2EsYUFBckMsQ0FBUDs7QUFFRixhQUFLSSwyQ0FBTDtBQUNFLGlCQUFPO0FBQUMwRCxZQUFBQSxNQUFNLEVBQUUsQ0FBQyxJQUFELEVBQU8sS0FBUDtBQUFULFdBQVA7O0FBRUYsYUFBSzFELGlDQUFnQjZELE1BQXJCO0FBQ0EsYUFBSzdELGlDQUFnQkUsSUFBckI7QUFDRXdELFVBQUFBLE1BQU0sR0FBRyxzQ0FBaUIzRSxhQUFqQixFQUFnQ2EsYUFBaEMsQ0FBVDtBQUNBLGlCQUFPO0FBQUM4RCxZQUFBQSxNQUFNLEVBQU5BO0FBQUQsV0FBUDs7QUFFRixhQUFLMUQsaUNBQWdCQyxTQUFyQjtBQUNFLGlCQUFPLDBDQUF3QmxCLGFBQXhCLEVBQXVDYSxhQUF2QyxDQUFQOztBQUVGO0FBQ0UsaUJBQU87QUFBQzhELFlBQUFBLE1BQU0sRUFBRSxzQ0FBaUIzRSxhQUFqQixFQUFnQ2EsYUFBaEM7QUFBVCxXQUFQO0FBbEJKO0FBb0JEO0FBRUQ7QUFDRjtBQUNBOzs7O1dBQ0UsOEJBQXFCZ0IsS0FBckIsRUFBNEJrRCxTQUE1QixFQUF1QztBQUFBLFVBQzlCL0UsYUFEOEIsR0FDVyxJQURYLENBQzlCQSxhQUQ4QjtBQUFBLFVBQ2Z3QixzQkFEZSxHQUNXLElBRFgsQ0FDZkEsc0JBRGU7O0FBR3JDLFVBQUksQ0FBQ3dELDZCQUFZRCxTQUFaLENBQUwsRUFBNkI7QUFDM0JFLHlCQUFRQyxLQUFSLHNCQUE0QkgsU0FBNUI7O0FBQ0EsZUFBTyxJQUFQO0FBQ0Q7O0FBTm9DLFVBUTlCbEUsYUFSOEIsR0FRYmdCLEtBUmEsQ0FROUJoQixhQVI4Qjs7QUFTckMsVUFBTXNFLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBcUIsQ0FBQTFFLENBQUM7QUFBQSxlQUFJSSxhQUFhLENBQUM7QUFBQ3dCLFVBQUFBLEtBQUssRUFBRTVCO0FBQVIsU0FBRCxDQUFqQjtBQUFBLE9BQTVCOztBQUNBLFVBQU0yRSxZQUFZLEdBQUcsbUNBQW1CdkQsS0FBSyxDQUFDYixJQUF6QixDQUFyQjs7QUFFQSxjQUFRK0QsU0FBUjtBQUNFLGFBQUtDLDZCQUFZSyxPQUFqQjtBQUNBLGFBQUtMLDZCQUFZTSxLQUFqQjtBQUNFO0FBQ0E7QUFDQSxpQkFBTyxzQ0FBaUJ0RixhQUFqQixFQUFnQ2EsYUFBaEMsQ0FBUDs7QUFFRixhQUFLbUUsNkJBQVlPLFFBQWpCO0FBQ0UsaUJBQU8sdUNBQWtCL0Qsc0JBQWxCLEVBQTBDMkQsa0JBQTFDLEVBQThEQyxZQUE5RCxDQUFQOztBQUVGLGFBQUtKLDZCQUFZUSxHQUFqQjtBQUNFLGlCQUFPLGtDQUFhaEUsc0JBQWIsRUFBcUMyRCxrQkFBckMsQ0FBUDs7QUFFRixhQUFLSCw2QkFBWVMsUUFBakI7QUFDQSxhQUFLVCw2QkFBWVUsTUFBakI7QUFDQSxhQUFLViw2QkFBWVcsSUFBakI7QUFDQTtBQUNFLGlCQUFPLHFDQUFnQm5FLHNCQUFoQixFQUF3QzJELGtCQUF4QyxDQUFQO0FBakJKO0FBbUJEO0FBRUQ7QUFDRjtBQUNBO0FBQ0U7O0FBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDRTtBQUVBOztBQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSxxQkFBWVMsU0FBWixFQUF1QkMsU0FBdkIsRUFBa0M7QUFDaEMsVUFBSSxDQUFDQSxTQUFMLEVBQWdCO0FBQ2RaLHlCQUFRQyxLQUFSLFdBQWlCVSxTQUFqQixzQ0FBc0QsS0FBS3hGLEVBQTNEO0FBQ0Q7QUFDRjs7O0tBR0g7OztBQUVPLFNBQVMwRix5QkFBVCxDQUFtQ0MsU0FBbkMsRUFBOENDLE1BQTlDLEVBQXNEO0FBQzNELFNBQU9ELFNBQVMsQ0FDYkUsT0FESSxDQUNJLElBQUlDLE1BQUosQ0FBV0YsTUFBWCxFQUFtQixJQUFuQixDQURKLEVBQzhCLEVBRDlCLEVBRUpDLE9BRkksQ0FFSSxTQUZKLEVBRWUsR0FGZixFQUdKRSxJQUhJLEVBQVA7QUFJRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTekUsbUJBQVQsQ0FBNkJ4QixNQUE3QixFQUFxQztBQUMxQyxNQUFNa0csUUFBUSxHQUFHbEcsTUFBTSxDQUFDSyxHQUFQLENBQVcsVUFBQUMsQ0FBQztBQUFBLFdBQUlBLENBQUMsQ0FBQ0csSUFBRixDQUFPMEYsV0FBUCxFQUFKO0FBQUEsR0FBWixDQUFqQixDQUQwQyxDQUcxQzs7QUFDQSxNQUFNdEMsR0FBRyxHQUFHLEVBQVo7QUFDQSxNQUFNdUMsTUFBTSxHQUFHRixRQUFRLENBQUN0QyxNQUFULENBQWdCLFVBQUN5QyxLQUFELEVBQVFYLFNBQVIsRUFBbUJZLEdBQW5CLEVBQTJCO0FBQ3hEO0FBRHdELCtDQUUvQkMsa0NBRitCO0FBQUE7O0FBQUE7QUFFeEQsMERBQTRDO0FBQUEsWUFBakNDLFVBQWlDOztBQUMxQztBQUNBLFlBQUlkLFNBQVMsQ0FBQ2UsUUFBVixDQUFtQkQsVUFBVSxDQUFDLENBQUQsQ0FBN0IsQ0FBSixFQUF1QztBQUFBO0FBQ3JDO0FBQ0EsZ0JBQU1FLFlBQVksR0FBRyxJQUFJVixNQUFKLFdBQWNRLFVBQVUsQ0FBQyxDQUFELENBQXhCLE9BQXJCO0FBQ0EsZ0JBQU1HLE9BQU8sR0FBR2pCLFNBQVMsQ0FBQ0ssT0FBVixDQUFrQlcsWUFBbEIsRUFBZ0NGLFVBQVUsQ0FBQyxDQUFELENBQTFDLENBQWhCO0FBRUEsZ0JBQU1JLFVBQVUsR0FBR1YsUUFBUSxDQUFDbkUsU0FBVCxDQUFtQixVQUFBOEUsQ0FBQztBQUFBLHFCQUFJQSxDQUFDLEtBQUtGLE9BQVY7QUFBQSxhQUFwQixDQUFuQjs7QUFDQSxnQkFBSUMsVUFBVSxHQUFHLENBQUMsQ0FBbEIsRUFBcUI7QUFDbkIsa0JBQU1FLFdBQVcsR0FBR2xCLHlCQUF5QixDQUFDRixTQUFELEVBQVljLFVBQVUsQ0FBQyxDQUFELENBQXRCLENBQTdDO0FBRUFILGNBQUFBLEtBQUssQ0FBQ1UsSUFBTixDQUFXO0FBQ1RELGdCQUFBQSxXQUFXLEVBQVhBLFdBRFM7QUFFVEUsZ0JBQUFBLElBQUksRUFBRTtBQUNKQyxrQkFBQUEsR0FBRyxFQUFFO0FBQ0h6RyxvQkFBQUEsUUFBUSxFQUFFOEYsR0FEUDtBQUVIWSxvQkFBQUEsS0FBSyxFQUFFbEgsTUFBTSxDQUFDc0csR0FBRCxDQUFOLENBQVk3RjtBQUZoQixtQkFERDtBQUtKMEcsa0JBQUFBLEdBQUcsRUFBRTtBQUNIM0csb0JBQUFBLFFBQVEsRUFBRW9HLFVBRFA7QUFFSE0sb0JBQUFBLEtBQUssRUFBRWxILE1BQU0sQ0FBQzRHLFVBQUQsQ0FBTixDQUFtQm5HO0FBRnZCO0FBTEQsaUJBRkc7QUFZVHFGLGdCQUFBQSxNQUFNLEVBQUVVO0FBWkMsZUFBWDtBQWNBO0FBQUEsbUJBQU9IO0FBQVA7QUFDRDtBQXhCb0M7O0FBQUE7QUF5QnRDO0FBQ0Y7QUE5QnVEO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBK0J4RCxXQUFPQSxLQUFQO0FBQ0QsR0FoQ2MsRUFnQ1p4QyxHQWhDWSxDQUFmLENBTDBDLENBdUMxQzs7QUFDQXVDLEVBQUFBLE1BQU0sQ0FBQ2dCLElBQVAsQ0FBWSxVQUFDQyxDQUFELEVBQUlDLENBQUosRUFBVTtBQUNwQixRQUFJRCxDQUFDLENBQUNQLFdBQUYsS0FBa0IsRUFBbEIsSUFBd0JPLENBQUMsQ0FBQ3ZCLE1BQUYsQ0FBUyxDQUFULE1BQWdCLFVBQTVDLEVBQXdELE9BQU8sQ0FBQyxDQUFSO0FBQ3hELFFBQUl3QixDQUFDLENBQUNSLFdBQUYsS0FBa0IsRUFBbEIsSUFBd0JRLENBQUMsQ0FBQ3hCLE1BQUYsQ0FBUyxDQUFULE1BQWdCLFVBQTVDLEVBQXdELE9BQU8sQ0FBUDtBQUN4RCxXQUFPLENBQVA7QUFDRCxHQUpEO0FBTUEsU0FBT00sTUFBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNtQixtQkFBVCxDQUE2QkMsT0FBN0IsRUFBc0NDLE1BQXRDLEVBQThDQyxJQUE5QyxFQUFvRDtBQUFBLE1BQ2xEdkcsVUFEa0QsR0FDYnFHLE9BRGEsQ0FDbERyRyxVQURrRDtBQUFBLE1BQ3RDbkIsTUFEc0MsR0FDYndILE9BRGEsQ0FDdEN4SCxNQURzQztBQUFBLE1BQzlCRixhQUQ4QixHQUNiMEgsT0FEYSxDQUM5QjFILGFBRDhCO0FBRXpELE1BQU1pRSxVQUFVLEdBQUcvRCxNQUFNLENBQUMrQixTQUFQLENBQWlCLFVBQUF6QixDQUFDO0FBQUEsV0FBSUEsQ0FBQyxDQUFDRyxJQUFGLEtBQVdnSCxNQUFmO0FBQUEsR0FBbEIsQ0FBbkI7O0FBQ0EsTUFBSTFELFVBQVUsR0FBRyxDQUFqQixFQUFvQjtBQUNsQixXQUFPeUQsT0FBUDtBQUNEOztBQUVELE1BQU1HLE1BQU0sR0FBR0MsNEJBQVdGLElBQVgsS0FBb0JFLDRCQUFXQyxTQUE5Qzs7QUFFQSxNQUFJRixNQUFNLEtBQUtDLDRCQUFXRSxNQUExQixFQUFrQztBQUNoQywyQ0FDS04sT0FETDtBQUVFTyxNQUFBQSxVQUFVLEVBQUUsRUFGZDtBQUdFQyxNQUFBQSxTQUFTLEVBQUU7QUFIYjtBQUtEOztBQUVELE1BQU05QyxZQUFZLEdBQUd5QyxNQUFNLEtBQUtDLDRCQUFXQyxTQUF0QixHQUFrQ0ksa0JBQWxDLEdBQThDQyxtQkFBbkU7QUFDQSxNQUFNRixTQUFTLEdBQUc3RyxVQUFVLENBQ3pCZ0gsS0FEZSxHQUVmZixJQUZlLENBRVYsVUFBQ0MsQ0FBRCxFQUFJQyxDQUFKO0FBQUEsV0FDSnBDLFlBQVksQ0FBQ3BGLGFBQWEsQ0FBQ3NJLE9BQWQsQ0FBc0JmLENBQXRCLEVBQXlCdEQsVUFBekIsQ0FBRCxFQUF1Q2pFLGFBQWEsQ0FBQ3NJLE9BQWQsQ0FBc0JkLENBQXRCLEVBQXlCdkQsVUFBekIsQ0FBdkMsQ0FEUjtBQUFBLEdBRlUsQ0FBbEI7QUFNQSx5Q0FDS3lELE9BREw7QUFFRU8sSUFBQUEsVUFBVSx1Q0FDUE4sTUFETyxFQUNFRSxNQURGLENBRlo7QUFLRUssSUFBQUEsU0FBUyxFQUFUQTtBQUxGO0FBT0Q7O0FBRU0sU0FBUzFELFNBQVQsQ0FBbUIrRCxRQUFuQixFQUE2QjtBQUNsQyxTQUFPaEcsTUFBTSxDQUFDQyxNQUFQLENBQWNELE1BQU0sQ0FBQ2lHLE1BQVAsQ0FBY2pHLE1BQU0sQ0FBQ2tHLGNBQVAsQ0FBc0JGLFFBQXRCLENBQWQsQ0FBZCxFQUE4REEsUUFBOUQsQ0FBUDtBQUNEOztBQUVNLFNBQVNHLGtCQUFULENBQTRCSCxRQUE1QixFQUFvRDtBQUFBLE1BQWRJLE9BQWMsdUVBQUosRUFBSTtBQUN6RCxTQUFPcEcsTUFBTSxDQUFDcUcsT0FBUCxDQUFlRCxPQUFmLEVBQXdCN0UsTUFBeEIsQ0FBK0IsVUFBQ0MsR0FBRCxFQUFNOEUsS0FBTixFQUFnQjtBQUNwRDlFLElBQUFBLEdBQUcsQ0FBQzhFLEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBSCxHQUFnQkEsS0FBSyxDQUFDLENBQUQsQ0FBckI7QUFDQSxXQUFPOUUsR0FBUDtBQUNELEdBSE0sRUFHSlMsU0FBUyxDQUFDK0QsUUFBRCxDQUhMLENBQVA7QUFJRDs7ZUFFYzdJLFciLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge2NvbnNvbGUgYXMgQ29uc29sZX0gZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHtUUklQX1BPSU5UX0ZJRUxEUywgU09SVF9PUkRFUn0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHthc2NlbmRpbmcsIGRlc2NlbmRpbmd9IGZyb20gJ2QzLWFycmF5JztcblxuLy8gaW1wb3J0IHt2YWxpZGF0ZUlucHV0RGF0YX0gZnJvbSAncHJvY2Vzc29ycy9kYXRhLXByb2Nlc3Nvcic7XG5pbXBvcnQge2dlbmVyYXRlSGFzaElkfSBmcm9tICd1dGlscy91dGlscyc7XG5pbXBvcnQge2dldEdwdUZpbHRlclByb3BzLCBnZXREYXRhc2V0RmllbGRJbmRleEZvckZpbHRlcn0gZnJvbSAndXRpbHMvZ3B1LWZpbHRlci11dGlscyc7XG5pbXBvcnQge1xuICBnZXRGaWx0ZXJQcm9wcyxcbiAgZ2V0RmlsdGVyUmVjb3JkLFxuICBkaWZmRmlsdGVycyxcbiAgZ2V0RmlsdGVyRnVuY3Rpb24sXG4gIGZpbHRlckRhdGFCeUZpbHRlclR5cGVzLFxuICBnZXROdW1lcmljRmllbGREb21haW4sXG4gIGdldFRpbWVzdGFtcEZpZWxkRG9tYWluXG59IGZyb20gJ3V0aWxzL2ZpbHRlci11dGlscyc7XG5pbXBvcnQge21heWJlVG9EYXRlLCBnZXRTb3J0aW5nRnVuY3Rpb259IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0UXVhbnRpbGVEb21haW4sXG4gIGdldE9yZGluYWxEb21haW4sXG4gIGdldExvZ0RvbWFpbixcbiAgZ2V0TGluZWFyRG9tYWluXG59IGZyb20gJ3V0aWxzL2RhdGEtc2NhbGUtdXRpbHMnO1xuXG5pbXBvcnQge0FMTF9GSUVMRF9UWVBFUywgU0NBTEVfVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcblxuaW1wb3J0IHtjcmVhdGVEYXRhQ29udGFpbmVyfSBmcm9tICcuL2RhdGEtY29udGFpbmVyLXV0aWxzJztcblxuLy8gVW5pcXVlIGlkZW50aWZpZXIgb2YgZWFjaCBmaWVsZFxuY29uc3QgRklEX0tFWSA9ICduYW1lJztcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoJy4va2VwbGVyLXRhYmxlJykuS2VwbGVyVGFibGV9IEtlcGxlclRhYmxlQ2xhc3N9ICovXG5cbi8qKlxuICogQHR5cGUge0tlcGxlclRhYmxlQ2xhc3N9XG4gKi9cbmNsYXNzIEtlcGxlclRhYmxlIHtcbiAgY29uc3RydWN0b3Ioe2luZm8gPSB7fSwgZGF0YSwgY29sb3IsIG1ldGFkYXRhLCBzdXBwb3J0ZWRGaWx0ZXJUeXBlc30pIHtcbiAgICAvLyBUT0RPIC0gd2hhdCB0byBkbyBpZiB2YWxpZGF0aW9uIGZhaWxzPyBDYW4ga2VwbGVyIGhhbmRsZSBleGNlcHRpb25zP1xuICAgIC8vIGNvbnN0IHZhbGlkYXRlZERhdGEgPSB2YWxpZGF0ZUlucHV0RGF0YShkYXRhKTtcbiAgICAvLyBpZiAoIXZhbGlkYXRlZERhdGEpIHtcbiAgICAvLyAgIHJldHVybiB0aGlzO1xuICAgIC8vIH1cblxuICAgIGNvbnN0IGRhdGFDb250YWluZXIgPSBjcmVhdGVEYXRhQ29udGFpbmVyKGRhdGEucm93cywge2ZpZWxkczogZGF0YS5maWVsZHN9KTtcblxuICAgIGNvbnN0IGRhdGFzZXRJbmZvID0ge1xuICAgICAgaWQ6IGdlbmVyYXRlSGFzaElkKDQpLFxuICAgICAgbGFiZWw6ICduZXcgZGF0YXNldCcsXG4gICAgICAuLi4oaW5mbyB8fCB7fSlcbiAgICB9O1xuICAgIGNvbnN0IGRhdGFJZCA9IGRhdGFzZXRJbmZvLmlkO1xuXG4gICAgY29uc3QgZmllbGRzID0gZGF0YS5maWVsZHMubWFwKChmLCBpKSA9PiAoe1xuICAgICAgLi4uZixcbiAgICAgIGZpZWxkSWR4OiBpLFxuICAgICAgaWQ6IGYubmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lOiBmLmRpc3BsYXlOYW1lIHx8IGYubmFtZSxcbiAgICAgIHZhbHVlQWNjZXNzb3I6IG1heWJlVG9EYXRlLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIC8vIGlzIHRpbWVcbiAgICAgICAgZi50eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wIHx8IGYudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLmRhdGUsXG4gICAgICAgIGksXG4gICAgICAgIGYuZm9ybWF0LFxuICAgICAgICBkYXRhQ29udGFpbmVyXG4gICAgICApXG4gICAgfSkpO1xuXG4gICAgY29uc3QgYWxsSW5kZXhlcyA9IGRhdGFDb250YWluZXIuZ2V0UGxhaW5JbmRleCgpO1xuXG4gICAgdGhpcy5pZCA9IGRhdGFzZXRJbmZvLmlkO1xuICAgIHRoaXMubGFiZWwgPSBkYXRhc2V0SW5mby5sYWJlbDtcbiAgICB0aGlzLmNvbG9yID0gY29sb3I7XG4gICAgdGhpcy5tZXRhZGF0YSA9IHtcbiAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgaWQ6IGRhdGFzZXRJbmZvLmlkLFxuICAgICAgbGFiZWw6IGRhdGFzZXRJbmZvLmxhYmVsXG4gICAgfTtcblxuICAgIHRoaXMuZGF0YUNvbnRhaW5lciA9IGRhdGFDb250YWluZXI7XG4gICAgdGhpcy5hbGxJbmRleGVzID0gYWxsSW5kZXhlcztcbiAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSBhbGxJbmRleGVzO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9IGFsbEluZGV4ZXM7XG4gICAgdGhpcy5maWVsZFBhaXJzID0gZmluZFBvaW50RmllbGRQYWlycyhmaWVsZHMpO1xuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xuICAgIHRoaXMuZ3B1RmlsdGVyID0gZ2V0R3B1RmlsdGVyUHJvcHMoW10sIGRhdGFJZCwgZmllbGRzKTtcbiAgICBpZiAoc3VwcG9ydGVkRmlsdGVyVHlwZXMpIHtcbiAgICAgIHRoaXMuc3VwcG9ydGVkRmlsdGVyVHlwZXMgPSBzdXBwb3J0ZWRGaWx0ZXJUeXBlcztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpZWxkXG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWVsZChjb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGZkID0+IGZkW0ZJRF9LRVldID09PSBjb2x1bW5OYW1lKTtcbiAgICB0aGlzLl9hc3NldEZpZWxkKGNvbHVtbk5hbWUsIGZpZWxkKTtcbiAgICByZXR1cm4gZmllbGQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpZWxkSWR4XG4gICAqIEBwYXJhbSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWVsZElkeChjb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgZmllbGRJZHggPSB0aGlzLmZpZWxkcy5maW5kSW5kZXgoZmQgPT4gZmRbRklEX0tFWV0gPT09IGNvbHVtbk5hbWUpO1xuICAgIHRoaXMuX2Fzc2V0RmllbGQoY29sdW1uTmFtZSwgQm9vbGVhbihmaWVsZElkeCA+IC0xKSk7XG4gICAgcmV0dXJuIGZpZWxkSWR4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgYSBjZWxsXG4gICAqL1xuICBnZXRWYWx1ZShjb2x1bW5OYW1lLCByb3dJZHgpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ2V0Q29sdW1uRmllbGQoY29sdW1uTmFtZSk7XG4gICAgcmV0dXJuIGZpZWxkID8gZmllbGQudmFsdWVBY2Nlc3Nvcih7aW5kZXg6IHJvd0lkeH0pIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGV4aXN0aW5nIGZpZWxkIHdpdGggYSBuZXcgb2JqZWN0XG4gICAqIEBwYXJhbSBmaWVsZElkeFxuICAgKiBAcGFyYW0gbmV3RmllbGRcbiAgICovXG4gIHVwZGF0ZUNvbHVtbkZpZWxkKGZpZWxkSWR4LCBuZXdGaWVsZCkge1xuICAgIHRoaXMuZmllbGRzID0gT2JqZWN0LmFzc2lnbihbLi4udGhpcy5maWVsZHNdLCB7W2ZpZWxkSWR4XTogbmV3RmllbGR9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGZpbHRlclByb3BzIHRvIGZpZWxkIGFuZCByZXRyaWV2ZSBpdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uTmFtZVxuICAgKi9cbiAgZ2V0Q29sdW1uRmlsdGVyUHJvcHMoY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IGZpZWxkSWR4ID0gdGhpcy5nZXRDb2x1bW5GaWVsZElkeChjb2x1bW5OYW1lKTtcbiAgICBpZiAoZmllbGRJZHggPCAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkc1tmaWVsZElkeF07XG4gICAgaWYgKGZpZWxkLmhhc093blByb3BlcnR5KCdmaWx0ZXJQcm9wcycpKSB7XG4gICAgICByZXR1cm4gZmllbGQuZmlsdGVyUHJvcHM7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGREb21haW4gPSB0aGlzLmdldENvbHVtbkZpbHRlckRvbWFpbihmaWVsZCk7XG4gICAgaWYgKCFmaWVsZERvbWFpbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyUHJvcHMgPSBnZXRGaWx0ZXJQcm9wcyhmaWVsZCwgZmllbGREb21haW4pO1xuICAgIGNvbnN0IG5ld0ZpZWxkID0ge1xuICAgICAgLi4uZmllbGQsXG4gICAgICBmaWx0ZXJQcm9wc1xuICAgIH07XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbkZpZWxkKGZpZWxkSWR4LCBuZXdGaWVsZCk7XG5cbiAgICByZXR1cm4gZmlsdGVyUHJvcHM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgZmlsdGVycyB0byBkYXRhc2V0LCByZXR1cm4gdGhlIGZpbHRlcmVkIGRhdGFzZXQgd2l0aCB1cGRhdGVkIGBncHVGaWx0ZXJgLCBgZmlsdGVyUmVjb3JkYCwgYGZpbHRlcmVkSW5kZXhgLCBgZmlsdGVyZWRJbmRleEZvckRvbWFpbmBcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogQHBhcmFtIGxheWVyc1xuICAgKiBAcGFyYW0gb3B0XG4gICAqL1xuICBmaWx0ZXJUYWJsZShmaWx0ZXJzLCBsYXllcnMsIG9wdCkge1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBpZDogZGF0YUlkLCBmaWx0ZXJSZWNvcmQ6IG9sZEZpbHRlclJlY29yZCwgZmllbGRzfSA9IHRoaXM7XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBubyBmaWx0ZXJzXG4gICAgY29uc3QgZmlsdGVyUmVjb3JkID0gZ2V0RmlsdGVyUmVjb3JkKGRhdGFJZCwgZmlsdGVycywgb3B0IHx8IHt9KTtcblxuICAgIHRoaXMuZmlsdGVyUmVjb3JkID0gZmlsdGVyUmVjb3JkO1xuICAgIHRoaXMuZ3B1RmlsdGVyID0gZ2V0R3B1RmlsdGVyUHJvcHMoZmlsdGVycywgZGF0YUlkLCBmaWVsZHMpO1xuXG4gICAgLy8gY29uc3QgbmV3RGF0YXNldCA9IHNldChbJ2ZpbHRlclJlY29yZCddLCBmaWx0ZXJSZWNvcmQsIGRhdGFzZXQpO1xuXG4gICAgaWYgKCFmaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gdGhpcy5hbGxJbmRleGVzO1xuICAgICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID0gdGhpcy5hbGxJbmRleGVzO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VkRmlsdGVycyA9IGRpZmZGaWx0ZXJzKGZpbHRlclJlY29yZCwgb2xkRmlsdGVyUmVjb3JkKTtcblxuICAgIC8vIGdlbmVyYXRlIDIgc2V0cyBvZiBmaWx0ZXIgcmVzdWx0XG4gICAgLy8gZmlsdGVyZWRJbmRleCB1c2VkIHRvIGNhbGN1bGF0ZSBsYXllciBkYXRhXG4gICAgLy8gZmlsdGVyZWRJbmRleEZvckRvbWFpbiB1c2VkIHRvIGNhbGN1bGF0ZSBsYXllciBEb21haW5cbiAgICBjb25zdCBzaG91bGRDYWxEb21haW4gPSBCb29sZWFuKHRoaXMuY2hhbmdlZEZpbHRlcnMuZHluYW1pY0RvbWFpbik7XG4gICAgY29uc3Qgc2hvdWxkQ2FsSW5kZXggPSBCb29sZWFuKHRoaXMuY2hhbmdlZEZpbHRlcnMuY3B1KTtcblxuICAgIGxldCBmaWx0ZXJSZXN1bHQgPSB7fTtcbiAgICBpZiAoc2hvdWxkQ2FsRG9tYWluIHx8IHNob3VsZENhbEluZGV4KSB7XG4gICAgICBjb25zdCBkeW5hbWljRG9tYWluRmlsdGVycyA9IHNob3VsZENhbERvbWFpbiA/IGZpbHRlclJlY29yZC5keW5hbWljRG9tYWluIDogbnVsbDtcbiAgICAgIGNvbnN0IGNwdUZpbHRlcnMgPSBzaG91bGRDYWxJbmRleCA/IGZpbHRlclJlY29yZC5jcHUgOiBudWxsO1xuXG4gICAgICBjb25zdCBmaWx0ZXJGdW5jcyA9IGZpbHRlcnMucmVkdWNlKChhY2MsIGZpbHRlcikgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZEluZGV4ID0gZ2V0RGF0YXNldEZpZWxkSW5kZXhGb3JGaWx0ZXIodGhpcy5pZCwgZmlsdGVyKTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZEluZGV4ICE9PSAtMSA/IGZpZWxkc1tmaWVsZEluZGV4XSA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2ZpbHRlci5pZF06IGdldEZpbHRlckZ1bmN0aW9uKGZpZWxkLCB0aGlzLmlkLCBmaWx0ZXIsIGxheWVycywgZGF0YUNvbnRhaW5lcilcbiAgICAgICAgfTtcbiAgICAgIH0sIHt9KTtcblxuICAgICAgZmlsdGVyUmVzdWx0ID0gZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMoXG4gICAgICAgIHtkeW5hbWljRG9tYWluRmlsdGVycywgY3B1RmlsdGVycywgZmlsdGVyRnVuY3N9LFxuICAgICAgICBkYXRhQ29udGFpbmVyXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyZWRJbmRleCA9IGZpbHRlclJlc3VsdC5maWx0ZXJlZEluZGV4IHx8IHRoaXMuZmlsdGVyZWRJbmRleDtcbiAgICB0aGlzLmZpbHRlcmVkSW5kZXhGb3JEb21haW4gPVxuICAgICAgZmlsdGVyUmVzdWx0LmZpbHRlcmVkSW5kZXhGb3JEb21haW4gfHwgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgZmlsdGVycyB0byBhIGRhdGFzZXQgYWxsIG9uIENQVSwgYXNzaWduIHRvIGBmaWx0ZXJlZElkeENQVWAsIGBmaWx0ZXJSZWNvcmRDUFVgXG4gICAqIEBwYXJhbSBmaWx0ZXJzXG4gICAqIEBwYXJhbSBsYXllcnNcbiAgICovXG4gIGZpbHRlclRhYmxlQ1BVKGZpbHRlcnMsIGxheWVycykge1xuICAgIGNvbnN0IG9wdCA9IHtcbiAgICAgIGNwdU9ubHk6IHRydWUsXG4gICAgICBpZ25vcmVEb21haW46IHRydWVcbiAgICB9O1xuXG4gICAgLy8gbm8gZmlsdGVyXG4gICAgaWYgKCFmaWx0ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZElkeENQVSA9IHRoaXMuYWxsSW5kZXhlcztcbiAgICAgIHRoaXMuZmlsdGVyUmVjb3JkQ1BVID0gZ2V0RmlsdGVyUmVjb3JkKHRoaXMuaWQsIGZpbHRlcnMsIG9wdCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBubyBncHUgZmlsdGVyXG4gICAgaWYgKCFmaWx0ZXJzLmZpbmQoZiA9PiBmLmdwdSkpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRJZHhDUFUgPSB0aGlzLmZpbHRlcmVkSW5kZXg7XG4gICAgICB0aGlzLmZpbHRlclJlY29yZENQVSA9IGdldEZpbHRlclJlY29yZCh0aGlzLmlkLCBmaWx0ZXJzLCBvcHQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBhIGNvcHkgZm9yIGNwdSBmaWx0ZXJpbmdcbiAgICBjb25zdCBjb3BpZWQgPSBjb3B5VGFibGUodGhpcyk7XG5cbiAgICBjb3BpZWQuZmlsdGVyUmVjb3JkID0gdGhpcy5maWx0ZXJSZWNvcmRDUFU7XG4gICAgY29waWVkLmZpbHRlcmVkSW5kZXggPSB0aGlzLmZpbHRlcmVkSWR4Q1BVIHx8IFtdO1xuXG4gICAgY29uc3QgZmlsdGVyZWQgPSBjb3BpZWQuZmlsdGVyVGFibGUoZmlsdGVycywgbGF5ZXJzLCBvcHQpO1xuXG4gICAgdGhpcy5maWx0ZXJlZElkeENQVSA9IGZpbHRlcmVkLmZpbHRlcmVkSW5kZXg7XG4gICAgdGhpcy5maWx0ZXJSZWNvcmRDUFUgPSBmaWx0ZXJlZC5maWx0ZXJSZWNvcmQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgZmllbGQgZG9tYWluIGJhc2VkIG9uIGZpZWxkIHR5cGUgYW5kIGRhdGFcbiAgICogZm9yIEZpbHRlclxuICAgKi9cbiAgZ2V0Q29sdW1uRmlsdGVyRG9tYWluKGZpZWxkKSB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXJ9ID0gdGhpcztcbiAgICBjb25zdCB7dmFsdWVBY2Nlc3Nvcn0gPSBmaWVsZDtcblxuICAgIGxldCBkb21haW47XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgICAvLyBjYWxjdWxhdGUgZG9tYWluIGFuZCBzdGVwXG4gICAgICAgIHJldHVybiBnZXROdW1lcmljRmllbGREb21haW4oZGF0YUNvbnRhaW5lciwgdmFsdWVBY2Nlc3Nvcik7XG5cbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW46XG4gICAgICAgIHJldHVybiB7ZG9tYWluOiBbdHJ1ZSwgZmFsc2VdfTtcblxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuZGF0ZTpcbiAgICAgICAgZG9tYWluID0gZ2V0T3JkaW5hbERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcbiAgICAgICAgcmV0dXJuIHtkb21haW59O1xuXG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA6XG4gICAgICAgIHJldHVybiBnZXRUaW1lc3RhbXBGaWVsZERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtkb21haW46IGdldE9yZGluYWxEb21haW4oZGF0YUNvbnRhaW5lciwgdmFsdWVBY2Nlc3Nvcil9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgR2V0IHRoZSBkb21haW4gb2YgdGhpcyBjb2x1bW4gYmFzZWQgb24gc2NhbGUgdHlwZVxuICAgKi9cbiAgZ2V0Q29sdW1uTGF5ZXJEb21haW4oZmllbGQsIHNjYWxlVHlwZSkge1xuICAgIGNvbnN0IHtkYXRhQ29udGFpbmVyLCBmaWx0ZXJlZEluZGV4Rm9yRG9tYWlufSA9IHRoaXM7XG5cbiAgICBpZiAoIVNDQUxFX1RZUEVTW3NjYWxlVHlwZV0pIHtcbiAgICAgIENvbnNvbGUuZXJyb3IoYHNjYWxlIHR5cGUgJHtzY2FsZVR5cGV9IG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHt2YWx1ZUFjY2Vzc29yfSA9IGZpZWxkO1xuICAgIGNvbnN0IGluZGV4VmFsdWVBY2Nlc3NvciA9IGkgPT4gdmFsdWVBY2Nlc3Nvcih7aW5kZXg6IGl9KTtcbiAgICBjb25zdCBzb3J0RnVuY3Rpb24gPSBnZXRTb3J0aW5nRnVuY3Rpb24oZmllbGQudHlwZSk7XG5cbiAgICBzd2l0Y2ggKHNjYWxlVHlwZSkge1xuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5vcmRpbmFsOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5wb2ludDpcbiAgICAgICAgLy8gZG8gbm90IHJlY2FsY3VsYXRlIG9yZGluYWwgZG9tYWluIGJhc2VkIG9uIGZpbHRlcmVkIGRhdGFcbiAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgb3JkaW5hbCBkb21haW4gZXZlcnkgdGltZVxuICAgICAgICByZXR1cm4gZ2V0T3JkaW5hbERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5xdWFudGlsZTpcbiAgICAgICAgcmV0dXJuIGdldFF1YW50aWxlRG9tYWluKGZpbHRlcmVkSW5kZXhGb3JEb21haW4sIGluZGV4VmFsdWVBY2Nlc3Nvciwgc29ydEZ1bmN0aW9uKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5sb2c6XG4gICAgICAgIHJldHVybiBnZXRMb2dEb21haW4oZmlsdGVyZWRJbmRleEZvckRvbWFpbiwgaW5kZXhWYWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5xdWFudGl6ZTpcbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMubGluZWFyOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5zcXJ0OlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGdldExpbmVhckRvbWFpbihmaWx0ZXJlZEluZGV4Rm9yRG9tYWluLCBpbmRleFZhbHVlQWNjZXNzb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzYW1wbGUgb2Ygcm93cyB0byBjYWxjdWxhdGUgbGF5ZXIgYm91bmRhcmllc1xuICAgKi9cbiAgLy8gZ2V0U2FtcGxlRGF0YShyb3dzKVxuXG4gIC8qKlxuICAgKiBQYXJzZSBjZWxsIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiB0eXBlIGFuZCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogVmFsdWUgdGhlIGZpZWxkIHZhbHVlLCB0eXBlIHRoZSBmaWVsZCB0eXBlXG4gICAqL1xuICAvLyBwYXJzZUZpZWxkVmFsdWUodmFsdWUsIHR5cGUpXG5cbiAgLy8gc29ydERhdGFzZXRCeUNvbHVtbigpXG5cbiAgLyoqXG4gICAqIEFzc2VydCB3aGV0aGVyIGZpZWxkIGV4aXN0XG4gICAqIEBwYXJhbSBmaWVsZE5hbWVcbiAgICogQHBhcmFtIGNvbmRpdGlvblxuICAgKi9cbiAgX2Fzc2V0RmllbGQoZmllbGROYW1lLCBjb25kaXRpb24pIHtcbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgQ29uc29sZS5lcnJvcihgJHtmaWVsZE5hbWV9IGRvZXNudCBleGlzdCBpbiBkYXRhc2V0ICR7dGhpcy5pZH1gKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OUyAoTUFJTkxZIEVYUE9SVEVEIEZPUiBURVNULi4uKVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU3VmZml4QW5kRGVsaW1pdGVycyhsYXllck5hbWUsIHN1ZmZpeCkge1xuICByZXR1cm4gbGF5ZXJOYW1lXG4gICAgLnJlcGxhY2UobmV3IFJlZ0V4cChzdWZmaXgsICdpZycpLCAnJylcbiAgICAucmVwbGFjZSgvW18sLl0rL2csICcgJylcbiAgICAudHJpbSgpO1xufVxuXG4vKipcbiAqIEZpbmQgcG9pbnQgZmllbGRzIHBhaXJzIGZyb20gZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHJldHVybnMgZm91bmQgcG9pbnQgZmllbGRzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi9rZXBsZXItdGFibGUnKS5maW5kUG9pbnRGaWVsZFBhaXJzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFBvaW50RmllbGRQYWlycyhmaWVsZHMpIHtcbiAgY29uc3QgYWxsTmFtZXMgPSBmaWVsZHMubWFwKGYgPT4gZi5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gIC8vIGdldCBsaXN0IG9mIGFsbCBmaWVsZHMgd2l0aCBtYXRjaGluZyBzdWZmaXhlc1xuICBjb25zdCBhY2MgPSBbXTtcbiAgY29uc3QgcmVzdWx0ID0gYWxsTmFtZXMucmVkdWNlKChjYXJyeSwgZmllbGROYW1lLCBpZHgpID0+IHtcbiAgICAvLyBUaGlzIHNlYXJjaCBmb3IgcGFpcnMgd2lsbCBlYXJseSBleGl0IGlmIGZvdW5kLlxuICAgIGZvciAoY29uc3Qgc3VmZml4UGFpciBvZiBUUklQX1BPSU5UX0ZJRUxEUykge1xuICAgICAgLy8gbWF0Y2ggZmlyc3Qgc3VmZml4YGBgXG4gICAgICBpZiAoZmllbGROYW1lLmVuZHNXaXRoKHN1ZmZpeFBhaXJbMF0pKSB7XG4gICAgICAgIC8vIG1hdGNoIHNlY29uZCBzdWZmaXhcbiAgICAgICAgY29uc3Qgb3RoZXJQYXR0ZXJuID0gbmV3IFJlZ0V4cChgJHtzdWZmaXhQYWlyWzBdfVxcJGApO1xuICAgICAgICBjb25zdCBwYXJ0bmVyID0gZmllbGROYW1lLnJlcGxhY2Uob3RoZXJQYXR0ZXJuLCBzdWZmaXhQYWlyWzFdKTtcblxuICAgICAgICBjb25zdCBwYXJ0bmVySWR4ID0gYWxsTmFtZXMuZmluZEluZGV4KGQgPT4gZCA9PT0gcGFydG5lcik7XG4gICAgICAgIGlmIChwYXJ0bmVySWR4ID4gLTEpIHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0TmFtZSA9IHJlbW92ZVN1ZmZpeEFuZERlbGltaXRlcnMoZmllbGROYW1lLCBzdWZmaXhQYWlyWzBdKTtcblxuICAgICAgICAgIGNhcnJ5LnB1c2goe1xuICAgICAgICAgICAgZGVmYXVsdE5hbWUsXG4gICAgICAgICAgICBwYWlyOiB7XG4gICAgICAgICAgICAgIGxhdDoge1xuICAgICAgICAgICAgICAgIGZpZWxkSWR4OiBpZHgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkc1tpZHhdLm5hbWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbG5nOiB7XG4gICAgICAgICAgICAgICAgZmllbGRJZHg6IHBhcnRuZXJJZHgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkc1twYXJ0bmVySWR4XS5uYW1lXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWZmaXg6IHN1ZmZpeFBhaXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9LCBhY2MpO1xuXG4gIC8vIHByaW9yaXRpemUgdGhlICdsYXRpdHVkZScvJ2xvbmdpdHVkZScgcGFpclxuICByZXN1bHQuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLmRlZmF1bHROYW1lID09PSAnJyAmJiBhLnN1ZmZpeFswXSA9PT0gJ2xhdGl0dWRlJykgcmV0dXJuIC0xO1xuICAgIGlmIChiLmRlZmF1bHROYW1lID09PSAnJyAmJiBiLnN1ZmZpeFswXSA9PT0gJ2xhdGl0dWRlJykgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcGFyYW0gbW9kZVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4va2VwbGVyLXRhYmxlJykuc29ydERhdGFzZXRCeUNvbHVtbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBtb2RlKSB7XG4gIGNvbnN0IHthbGxJbmRleGVzLCBmaWVsZHMsIGRhdGFDb250YWluZXJ9ID0gZGF0YXNldDtcbiAgY29uc3QgZmllbGRJbmRleCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gIGlmIChmaWVsZEluZGV4IDwgMCkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG5cbiAgY29uc3Qgc29ydEJ5ID0gU09SVF9PUkRFUlttb2RlXSB8fCBTT1JUX09SREVSLkFTQ0VORElORztcblxuICBpZiAoc29ydEJ5ID09PSBTT1JUX09SREVSLlVOU09SVCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kYXRhc2V0LFxuICAgICAgc29ydENvbHVtbjoge30sXG4gICAgICBzb3J0T3JkZXI6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgc29ydEZ1bmN0aW9uID0gc29ydEJ5ID09PSBTT1JUX09SREVSLkFTQ0VORElORyA/IGFzY2VuZGluZyA6IGRlc2NlbmRpbmc7XG4gIGNvbnN0IHNvcnRPcmRlciA9IGFsbEluZGV4ZXNcbiAgICAuc2xpY2UoKVxuICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgc29ydEZ1bmN0aW9uKGRhdGFDb250YWluZXIudmFsdWVBdChhLCBmaWVsZEluZGV4KSwgZGF0YUNvbnRhaW5lci52YWx1ZUF0KGIsIGZpZWxkSW5kZXgpKVxuICAgICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIHNvcnRDb2x1bW46IHtcbiAgICAgIFtjb2x1bW5dOiBzb3J0QnlcbiAgICB9LFxuICAgIHNvcnRPcmRlclxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlKG9yaWdpbmFsKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9yaWdpbmFsKSksIG9yaWdpbmFsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUFuZFVwZGF0ZShvcmlnaW5hbCwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhvcHRpb25zKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBhY2NbZW50cnlbMF1dID0gZW50cnlbMV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgY29weVRhYmxlKG9yaWdpbmFsKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtlcGxlclRhYmxlO1xuIl19
545
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy90YWJsZS11dGlscy9rZXBsZXItdGFibGUuanMiXSwibmFtZXMiOlsiRklEX0tFWSIsIktlcGxlclRhYmxlIiwiaW5mbyIsImRhdGEiLCJjb2xvciIsIm1ldGFkYXRhIiwic3VwcG9ydGVkRmlsdGVyVHlwZXMiLCJkYXRhQ29udGFpbmVyIiwicm93cyIsImZpZWxkcyIsImRhdGFzZXRJbmZvIiwiaWQiLCJsYWJlbCIsImRhdGFJZCIsIm1hcCIsImYiLCJpIiwiZmllbGRJZHgiLCJuYW1lIiwiZGlzcGxheU5hbWUiLCJ2YWx1ZUFjY2Vzc29yIiwibWF5YmVUb0RhdGUiLCJiaW5kIiwidHlwZSIsIkFMTF9GSUVMRF9UWVBFUyIsInRpbWVzdGFtcCIsImRhdGUiLCJmb3JtYXQiLCJhbGxJbmRleGVzIiwiZ2V0UGxhaW5JbmRleCIsImZpbHRlcmVkSW5kZXgiLCJmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIiwiZmllbGRQYWlycyIsImZpbmRQb2ludEZpZWxkUGFpcnMiLCJncHVGaWx0ZXIiLCJjb2x1bW5OYW1lIiwiZmllbGQiLCJmaW5kIiwiZmQiLCJfYXNzZXRGaWVsZCIsImZpbmRJbmRleCIsIkJvb2xlYW4iLCJyb3dJZHgiLCJnZXRDb2x1bW5GaWVsZCIsImluZGV4IiwibmV3RmllbGQiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRDb2x1bW5GaWVsZElkeCIsImhhc093blByb3BlcnR5IiwiZmlsdGVyUHJvcHMiLCJmaWVsZERvbWFpbiIsImdldENvbHVtbkZpbHRlckRvbWFpbiIsInVwZGF0ZUNvbHVtbkZpZWxkIiwiZmlsdGVycyIsImxheWVycyIsIm9wdCIsIm9sZEZpbHRlclJlY29yZCIsImZpbHRlclJlY29yZCIsImxlbmd0aCIsImNoYW5nZWRGaWx0ZXJzIiwic2hvdWxkQ2FsRG9tYWluIiwiZHluYW1pY0RvbWFpbiIsInNob3VsZENhbEluZGV4IiwiY3B1IiwiZmlsdGVyUmVzdWx0IiwiZHluYW1pY0RvbWFpbkZpbHRlcnMiLCJjcHVGaWx0ZXJzIiwiZmlsdGVyRnVuY3MiLCJyZWR1Y2UiLCJhY2MiLCJmaWx0ZXIiLCJmaWVsZEluZGV4IiwiY3B1T25seSIsImlnbm9yZURvbWFpbiIsImZpbHRlcmVkSWR4Q1BVIiwiZmlsdGVyUmVjb3JkQ1BVIiwiZ3B1IiwiY29waWVkIiwiY29weVRhYmxlIiwiZmlsdGVyZWQiLCJmaWx0ZXJUYWJsZSIsImRvbWFpbiIsInJlYWwiLCJpbnRlZ2VyIiwic3RyaW5nIiwic2NhbGVUeXBlIiwiU0NBTEVfVFlQRVMiLCJDb25zb2xlIiwiZXJyb3IiLCJpbmRleFZhbHVlQWNjZXNzb3IiLCJzb3J0RnVuY3Rpb24iLCJvcmRpbmFsIiwicG9pbnQiLCJoZXhDb2xvciIsInF1YW50aWxlIiwibG9nIiwicXVhbnRpemUiLCJsaW5lYXIiLCJzcXJ0IiwiZmllbGROYW1lIiwiY29uZGl0aW9uIiwicmVtb3ZlU3VmZml4QW5kRGVsaW1pdGVycyIsImxheWVyTmFtZSIsInN1ZmZpeCIsInJlcGxhY2UiLCJSZWdFeHAiLCJ0cmltIiwiYWxsTmFtZXMiLCJ0b0xvd2VyQ2FzZSIsInJlc3VsdCIsImNhcnJ5IiwiaWR4IiwiVFJJUF9QT0lOVF9GSUVMRFMiLCJzdWZmaXhQYWlyIiwiZW5kc1dpdGgiLCJvdGhlclBhdHRlcm4iLCJwYXJ0bmVyIiwicGFydG5lcklkeCIsImQiLCJkZWZhdWx0TmFtZSIsInB1c2giLCJwYWlyIiwibGF0IiwidmFsdWUiLCJsbmciLCJzb3J0IiwiYSIsImIiLCJzb3J0RGF0YXNldEJ5Q29sdW1uIiwiZGF0YXNldCIsImNvbHVtbiIsIm1vZGUiLCJzb3J0QnkiLCJTT1JUX09SREVSIiwiQVNDRU5ESU5HIiwiVU5TT1JUIiwic29ydENvbHVtbiIsInNvcnRPcmRlciIsImFzY2VuZGluZyIsImRlc2NlbmRpbmciLCJzbGljZSIsInZhbHVlQXQiLCJvcmlnaW5hbCIsImNyZWF0ZSIsImdldFByb3RvdHlwZU9mIiwiY29weVRhYmxlQW5kVXBkYXRlIiwib3B0aW9ucyIsImVudHJpZXMi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LENBQUNnRSxRQUFELENBSEwsQ0FBUDtBQUlEOztlQUVjOUksVyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMiBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQge1RSSVBfUE9JTlRfRklFTERTLCBTT1JUX09SREVSfSBmcm9tICdjb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncyc7XG5pbXBvcnQge2FzY2VuZGluZywgZGVzY2VuZGluZ30gZnJvbSAnZDMtYXJyYXknO1xuXG4vLyBpbXBvcnQge3ZhbGlkYXRlSW5wdXREYXRhfSBmcm9tICdwcm9jZXNzb3JzL2RhdGEtcHJvY2Vzc29yJztcbmltcG9ydCB7Z2VuZXJhdGVIYXNoSWR9IGZyb20gJ3V0aWxzL3V0aWxzJztcbmltcG9ydCB7Z2V0R3B1RmlsdGVyUHJvcHMsIGdldERhdGFzZXRGaWVsZEluZGV4Rm9yRmlsdGVyfSBmcm9tICd1dGlscy9ncHUtZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7XG4gIGdldEZpbHRlclByb3BzLFxuICBnZXRGaWx0ZXJSZWNvcmQsXG4gIGRpZmZGaWx0ZXJzLFxuICBnZXRGaWx0ZXJGdW5jdGlvbixcbiAgZmlsdGVyRGF0YUJ5RmlsdGVyVHlwZXMsXG4gIGdldE51bWVyaWNGaWVsZERvbWFpbixcbiAgZ2V0VGltZXN0YW1wRmllbGREb21haW5cbn0gZnJvbSAndXRpbHMvZmlsdGVyLXV0aWxzJztcbmltcG9ydCB7bWF5YmVUb0RhdGUsIGdldFNvcnRpbmdGdW5jdGlvbn0gZnJvbSAndXRpbHMvZGF0YS11dGlscyc7XG5pbXBvcnQge1xuICBnZXRRdWFudGlsZURvbWFpbixcbiAgZ2V0T3JkaW5hbERvbWFpbixcbiAgZ2V0TG9nRG9tYWluLFxuICBnZXRMaW5lYXJEb21haW5cbn0gZnJvbSAndXRpbHMvZGF0YS1zY2FsZS11dGlscyc7XG5cbmltcG9ydCB7QUxMX0ZJRUxEX1RZUEVTLCBTQ0FMRV9UWVBFU30gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuXG5pbXBvcnQge2NyZWF0ZURhdGFDb250YWluZXJ9IGZyb20gJy4vZGF0YS1jb250YWluZXItdXRpbHMnO1xuXG4vLyBVbmlxdWUgaWRlbnRpZmllciBvZiBlYWNoIGZpZWxkXG5jb25zdCBGSURfS0VZID0gJ25hbWUnO1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydCgnLi9rZXBsZXItdGFibGUnKS5LZXBsZXJUYWJsZX0gS2VwbGVyVGFibGVDbGFzc30gKi9cblxuLyoqXG4gKiBAdHlwZSB7S2VwbGVyVGFibGVDbGFzc31cbiAqL1xuY2xhc3MgS2VwbGVyVGFibGUge1xuICBjb25zdHJ1Y3Rvcih7aW5mbyA9IHt9LCBkYXRhLCBjb2xvciwgbWV0YWRhdGEsIHN1cHBvcnRlZEZpbHRlclR5cGVzfSkge1xuICAgIC8vIFRPRE8gLSB3aGF0IHRvIGRvIGlmIHZhbGlkYXRpb24gZmFpbHM/IENhbiBrZXBsZXIgaGFuZGxlIGV4Y2VwdGlvbnM/XG4gICAgLy8gY29uc3QgdmFsaWRhdGVkRGF0YSA9IHZhbGlkYXRlSW5wdXREYXRhKGRhdGEpO1xuICAgIC8vIGlmICghdmFsaWRhdGVkRGF0YSkge1xuICAgIC8vICAgcmV0dXJuIHRoaXM7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgZGF0YUNvbnRhaW5lciA9IGNyZWF0ZURhdGFDb250YWluZXIoZGF0YS5yb3dzLCB7ZmllbGRzOiBkYXRhLmZpZWxkc30pO1xuXG4gICAgY29uc3QgZGF0YXNldEluZm8gPSB7XG4gICAgICBpZDogZ2VuZXJhdGVIYXNoSWQoNCksXG4gICAgICBsYWJlbDogJ25ldyBkYXRhc2V0JyxcbiAgICAgIC4uLihpbmZvIHx8IHt9KVxuICAgIH07XG4gICAgY29uc3QgZGF0YUlkID0gZGF0YXNldEluZm8uaWQ7XG5cbiAgICBjb25zdCBmaWVsZHMgPSBkYXRhLmZpZWxkcy5tYXAoKGYsIGkpID0+ICh7XG4gICAgICAuLi5mLFxuICAgICAgZmllbGRJZHg6IGksXG4gICAgICBpZDogZi5uYW1lLFxuICAgICAgZGlzcGxheU5hbWU6IGYuZGlzcGxheU5hbWUgfHwgZi5uYW1lLFxuICAgICAgdmFsdWVBY2Nlc3NvcjogbWF5YmVUb0RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgLy8gaXMgdGltZVxuICAgICAgICBmLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXAgfHwgZi50eXBlID09PSBBTExfRklFTERfVFlQRVMuZGF0ZSxcbiAgICAgICAgaSxcbiAgICAgICAgZi5mb3JtYXQsXG4gICAgICAgIGRhdGFDb250YWluZXJcbiAgICAgIClcbiAgICB9KSk7XG5cbiAgICBjb25zdCBhbGxJbmRleGVzID0gZGF0YUNvbnRhaW5lci5nZXRQbGFpbkluZGV4KCk7XG5cbiAgICB0aGlzLmlkID0gZGF0YXNldEluZm8uaWQ7XG4gICAgdGhpcy5sYWJlbCA9IGRhdGFzZXRJbmZvLmxhYmVsO1xuICAgIHRoaXMuY29sb3IgPSBjb2xvcjtcbiAgICB0aGlzLm1ldGFkYXRhID0ge1xuICAgICAgLi4ubWV0YWRhdGEsXG4gICAgICBpZDogZGF0YXNldEluZm8uaWQsXG4gICAgICBsYWJlbDogZGF0YXNldEluZm8ubGFiZWxcbiAgICB9O1xuXG4gICAgdGhpcy5kYXRhQ29udGFpbmVyID0gZGF0YUNvbnRhaW5lcjtcbiAgICB0aGlzLmFsbEluZGV4ZXMgPSBhbGxJbmRleGVzO1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleCA9IGFsbEluZGV4ZXM7XG4gICAgdGhpcy5maWx0ZXJlZEluZGV4Rm9yRG9tYWluID0gYWxsSW5kZXhlcztcbiAgICB0aGlzLmZpZWxkUGFpcnMgPSBmaW5kUG9pbnRGaWVsZFBhaXJzKGZpZWxkcyk7XG4gICAgdGhpcy5maWVsZHMgPSBmaWVsZHM7XG4gICAgdGhpcy5ncHVGaWx0ZXIgPSBnZXRHcHVGaWx0ZXJQcm9wcyhbXSwgZGF0YUlkLCBmaWVsZHMpO1xuICAgIGlmIChzdXBwb3J0ZWRGaWx0ZXJUeXBlcykge1xuICAgICAgdGhpcy5zdXBwb3J0ZWRGaWx0ZXJUeXBlcyA9IHN1cHBvcnRlZEZpbHRlclR5cGVzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmllbGRcbiAgICogQHBhcmFtIGNvbHVtbk5hbWVcbiAgICovXG4gIGdldENvbHVtbkZpZWxkKGNvbHVtbk5hbWUpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoZmQgPT4gZmRbRklEX0tFWV0gPT09IGNvbHVtbk5hbWUpO1xuICAgIHRoaXMuX2Fzc2V0RmllbGQoY29sdW1uTmFtZSwgZmllbGQpO1xuICAgIHJldHVybiBmaWVsZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmllbGRJZHhcbiAgICogQHBhcmFtIGNvbHVtbk5hbWVcbiAgICovXG4gIGdldENvbHVtbkZpZWxkSWR4KGNvbHVtbk5hbWUpIHtcbiAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuZmllbGRzLmZpbmRJbmRleChmZCA9PiBmZFtGSURfS0VZXSA9PT0gY29sdW1uTmFtZSk7XG4gICAgdGhpcy5fYXNzZXRGaWVsZChjb2x1bW5OYW1lLCBCb29sZWFuKGZpZWxkSWR4ID4gLTEpKTtcbiAgICByZXR1cm4gZmllbGRJZHg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiBhIGNlbGxcbiAgICovXG4gIGdldFZhbHVlKGNvbHVtbk5hbWUsIHJvd0lkeCkge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5nZXRDb2x1bW5GaWVsZChjb2x1bW5OYW1lKTtcbiAgICByZXR1cm4gZmllbGQgPyBmaWVsZC52YWx1ZUFjY2Vzc29yKHtpbmRleDogcm93SWR4fSkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgZXhpc3RpbmcgZmllbGQgd2l0aCBhIG5ldyBvYmplY3RcbiAgICogQHBhcmFtIGZpZWxkSWR4XG4gICAqIEBwYXJhbSBuZXdGaWVsZFxuICAgKi9cbiAgdXBkYXRlQ29sdW1uRmllbGQoZmllbGRJZHgsIG5ld0ZpZWxkKSB7XG4gICAgdGhpcy5maWVsZHMgPSBPYmplY3QuYXNzaWduKFsuLi50aGlzLmZpZWxkc10sIHtbZmllbGRJZHhdOiBuZXdGaWVsZH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgZmlsdGVyUHJvcHMgdG8gZmllbGQgYW5kIHJldHJpZXZlIGl0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW5OYW1lXG4gICAqL1xuICBnZXRDb2x1bW5GaWx0ZXJQcm9wcyhjb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgZmllbGRJZHggPSB0aGlzLmdldENvbHVtbkZpZWxkSWR4KGNvbHVtbk5hbWUpO1xuICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzW2ZpZWxkSWR4XTtcbiAgICBpZiAoZmllbGQuaGFzT3duUHJvcGVydHkoJ2ZpbHRlclByb3BzJykpIHtcbiAgICAgIHJldHVybiBmaWVsZC5maWx0ZXJQcm9wcztcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZERvbWFpbiA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyRG9tYWluKGZpZWxkKTtcbiAgICBpZiAoIWZpZWxkRG9tYWluKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJQcm9wcyA9IGdldEZpbHRlclByb3BzKGZpZWxkLCBmaWVsZERvbWFpbik7XG4gICAgY29uc3QgbmV3RmllbGQgPSB7XG4gICAgICAuLi5maWVsZCxcbiAgICAgIGZpbHRlclByb3BzXG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlQ29sdW1uRmllbGQoZmllbGRJZHgsIG5ld0ZpZWxkKTtcblxuICAgIHJldHVybiBmaWx0ZXJQcm9wcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBmaWx0ZXJzIHRvIGRhdGFzZXQsIHJldHVybiB0aGUgZmlsdGVyZWQgZGF0YXNldCB3aXRoIHVwZGF0ZWQgYGdwdUZpbHRlcmAsIGBmaWx0ZXJSZWNvcmRgLCBgZmlsdGVyZWRJbmRleGAsIGBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluYFxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBAcGFyYW0gbGF5ZXJzXG4gICAqIEBwYXJhbSBvcHRcbiAgICovXG4gIGZpbHRlclRhYmxlKGZpbHRlcnMsIGxheWVycywgb3B0KSB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXIsIGlkOiBkYXRhSWQsIGZpbHRlclJlY29yZDogb2xkRmlsdGVyUmVjb3JkLCBmaWVsZHN9ID0gdGhpcztcblxuICAgIC8vIGlmIHRoZXJlIGlzIG5vIGZpbHRlcnNcbiAgICBjb25zdCBmaWx0ZXJSZWNvcmQgPSBnZXRGaWx0ZXJSZWNvcmQoZGF0YUlkLCBmaWx0ZXJzLCBvcHQgfHwge30pO1xuXG4gICAgdGhpcy5maWx0ZXJSZWNvcmQgPSBmaWx0ZXJSZWNvcmQ7XG4gICAgdGhpcy5ncHVGaWx0ZXIgPSBnZXRHcHVGaWx0ZXJQcm9wcyhmaWx0ZXJzLCBkYXRhSWQsIGZpZWxkcyk7XG5cbiAgICAvLyBjb25zdCBuZXdEYXRhc2V0ID0gc2V0KFsnZmlsdGVyUmVjb3JkJ10sIGZpbHRlclJlY29yZCwgZGF0YXNldCk7XG5cbiAgICBpZiAoIWZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSW5kZXggPSB0aGlzLmFsbEluZGV4ZXM7XG4gICAgICB0aGlzLmZpbHRlcmVkSW5kZXhGb3JEb21haW4gPSB0aGlzLmFsbEluZGV4ZXM7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZWRGaWx0ZXJzID0gZGlmZkZpbHRlcnMoZmlsdGVyUmVjb3JkLCBvbGRGaWx0ZXJSZWNvcmQpO1xuXG4gICAgLy8gZ2VuZXJhdGUgMiBzZXRzIG9mIGZpbHRlciByZXN1bHRcbiAgICAvLyBmaWx0ZXJlZEluZGV4IHVzZWQgdG8gY2FsY3VsYXRlIGxheWVyIGRhdGFcbiAgICAvLyBmaWx0ZXJlZEluZGV4Rm9yRG9tYWluIHVzZWQgdG8gY2FsY3VsYXRlIGxheWVyIERvbWFpblxuICAgIGNvbnN0IHNob3VsZENhbERvbWFpbiA9IEJvb2xlYW4odGhpcy5jaGFuZ2VkRmlsdGVycy5keW5hbWljRG9tYWluKTtcbiAgICBjb25zdCBzaG91bGRDYWxJbmRleCA9IEJvb2xlYW4odGhpcy5jaGFuZ2VkRmlsdGVycy5jcHUpO1xuXG4gICAgbGV0IGZpbHRlclJlc3VsdCA9IHt9O1xuICAgIGlmIChzaG91bGRDYWxEb21haW4gfHwgc2hvdWxkQ2FsSW5kZXgpIHtcbiAgICAgIGNvbnN0IGR5bmFtaWNEb21haW5GaWx0ZXJzID0gc2hvdWxkQ2FsRG9tYWluID8gZmlsdGVyUmVjb3JkLmR5bmFtaWNEb21haW4gOiBudWxsO1xuICAgICAgY29uc3QgY3B1RmlsdGVycyA9IHNob3VsZENhbEluZGV4ID8gZmlsdGVyUmVjb3JkLmNwdSA6IG51bGw7XG5cbiAgICAgIGNvbnN0IGZpbHRlckZ1bmNzID0gZmlsdGVycy5yZWR1Y2UoKGFjYywgZmlsdGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkSW5kZXggPSBnZXREYXRhc2V0RmllbGRJbmRleEZvckZpbHRlcih0aGlzLmlkLCBmaWx0ZXIpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IGZpZWxkSW5kZXggIT09IC0xID8gZmllbGRzW2ZpZWxkSW5kZXhdIDogbnVsbDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICBbZmlsdGVyLmlkXTogZ2V0RmlsdGVyRnVuY3Rpb24oZmllbGQsIHRoaXMuaWQsIGZpbHRlciwgbGF5ZXJzLCBkYXRhQ29udGFpbmVyKVxuICAgICAgICB9O1xuICAgICAgfSwge30pO1xuXG4gICAgICBmaWx0ZXJSZXN1bHQgPSBmaWx0ZXJEYXRhQnlGaWx0ZXJUeXBlcyhcbiAgICAgICAge2R5bmFtaWNEb21haW5GaWx0ZXJzLCBjcHVGaWx0ZXJzLCBmaWx0ZXJGdW5jc30sXG4gICAgICAgIGRhdGFDb250YWluZXJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJlZEluZGV4ID0gZmlsdGVyUmVzdWx0LmZpbHRlcmVkSW5kZXggfHwgdGhpcy5maWx0ZXJlZEluZGV4O1xuICAgIHRoaXMuZmlsdGVyZWRJbmRleEZvckRvbWFpbiA9XG4gICAgICBmaWx0ZXJSZXN1bHQuZmlsdGVyZWRJbmRleEZvckRvbWFpbiB8fCB0aGlzLmZpbHRlcmVkSW5kZXhGb3JEb21haW47XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBmaWx0ZXJzIHRvIGEgZGF0YXNldCBhbGwgb24gQ1BVLCBhc3NpZ24gdG8gYGZpbHRlcmVkSWR4Q1BVYCwgYGZpbHRlclJlY29yZENQVWBcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogQHBhcmFtIGxheWVyc1xuICAgKi9cbiAgZmlsdGVyVGFibGVDUFUoZmlsdGVycywgbGF5ZXJzKSB7XG4gICAgY29uc3Qgb3B0ID0ge1xuICAgICAgY3B1T25seTogdHJ1ZSxcbiAgICAgIGlnbm9yZURvbWFpbjogdHJ1ZVxuICAgIH07XG5cbiAgICAvLyBubyBmaWx0ZXJcbiAgICBpZiAoIWZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSWR4Q1BVID0gdGhpcy5hbGxJbmRleGVzO1xuICAgICAgdGhpcy5maWx0ZXJSZWNvcmRDUFUgPSBnZXRGaWx0ZXJSZWNvcmQodGhpcy5pZCwgZmlsdGVycywgb3B0KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIG5vIGdwdSBmaWx0ZXJcbiAgICBpZiAoIWZpbHRlcnMuZmluZChmID0+IGYuZ3B1KSkge1xuICAgICAgdGhpcy5maWx0ZXJlZElkeENQVSA9IHRoaXMuZmlsdGVyZWRJbmRleDtcbiAgICAgIHRoaXMuZmlsdGVyUmVjb3JkQ1BVID0gZ2V0RmlsdGVyUmVjb3JkKHRoaXMuaWQsIGZpbHRlcnMsIG9wdCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBtYWtlIGEgY29weSBmb3IgY3B1IGZpbHRlcmluZ1xuICAgIGNvbnN0IGNvcGllZCA9IGNvcHlUYWJsZSh0aGlzKTtcblxuICAgIGNvcGllZC5maWx0ZXJSZWNvcmQgPSB0aGlzLmZpbHRlclJlY29yZENQVTtcbiAgICBjb3BpZWQuZmlsdGVyZWRJbmRleCA9IHRoaXMuZmlsdGVyZWRJZHhDUFUgfHwgW107XG5cbiAgICBjb25zdCBmaWx0ZXJlZCA9IGNvcGllZC5maWx0ZXJUYWJsZShmaWx0ZXJzLCBsYXllcnMsIG9wdCk7XG5cbiAgICB0aGlzLmZpbHRlcmVkSWR4Q1BVID0gZmlsdGVyZWQuZmlsdGVyZWRJbmRleDtcbiAgICB0aGlzLmZpbHRlclJlY29yZENQVSA9IGZpbHRlcmVkLmZpbHRlclJlY29yZDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBmaWVsZCBkb21haW4gYmFzZWQgb24gZmllbGQgdHlwZSBhbmQgZGF0YVxuICAgKiBmb3IgRmlsdGVyXG4gICAqL1xuICBnZXRDb2x1bW5GaWx0ZXJEb21haW4oZmllbGQpIHtcbiAgICBjb25zdCB7ZGF0YUNvbnRhaW5lcn0gPSB0aGlzO1xuICAgIGNvbnN0IHt2YWx1ZUFjY2Vzc29yfSA9IGZpZWxkO1xuXG4gICAgbGV0IGRvbWFpbjtcblxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBkb21haW4gYW5kIHN0ZXBcbiAgICAgICAgcmV0dXJuIGdldE51bWVyaWNGaWVsZERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBBTExfRklFTERfVFlQRVMuYm9vbGVhbjpcbiAgICAgICAgcmV0dXJuIHtkb21haW46IFt0cnVlLCBmYWxzZV19O1xuXG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc6XG4gICAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgICAgICBkb21haW4gPSBnZXRPcmRpbmFsRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuICAgICAgICByZXR1cm4ge2RvbWFpbn07XG5cbiAgICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgICAgcmV0dXJuIGdldFRpbWVzdGFtcEZpZWxkRG9tYWluKGRhdGFDb250YWluZXIsIHZhbHVlQWNjZXNzb3IpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge2RvbWFpbjogZ2V0T3JkaW5hbERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKX07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBHZXQgdGhlIGRvbWFpbiBvZiB0aGlzIGNvbHVtbiBiYXNlZCBvbiBzY2FsZSB0eXBlXG4gICAqL1xuICBnZXRDb2x1bW5MYXllckRvbWFpbihmaWVsZCwgc2NhbGVUeXBlKSB7XG4gICAgY29uc3Qge2RhdGFDb250YWluZXIsIGZpbHRlcmVkSW5kZXhGb3JEb21haW59ID0gdGhpcztcblxuICAgIGlmICghU0NBTEVfVFlQRVNbc2NhbGVUeXBlXSkge1xuICAgICAgQ29uc29sZS5lcnJvcihgc2NhbGUgdHlwZSAke3NjYWxlVHlwZX0gbm90IHN1cHBvcnRlZGApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qge3ZhbHVlQWNjZXNzb3J9ID0gZmllbGQ7XG4gICAgY29uc3QgaW5kZXhWYWx1ZUFjY2Vzc29yID0gaSA9PiB2YWx1ZUFjY2Vzc29yKHtpbmRleDogaX0pO1xuICAgIGNvbnN0IHNvcnRGdW5jdGlvbiA9IGdldFNvcnRpbmdGdW5jdGlvbihmaWVsZC50eXBlKTtcblxuICAgIHN3aXRjaCAoc2NhbGVUeXBlKSB7XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLm9yZGluYWw6XG4gICAgICBjYXNlIFNDQUxFX1RZUEVTLnBvaW50OlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5oZXhDb2xvcjpcbiAgICAgICAgLy8gZG8gbm90IHJlY2FsY3VsYXRlIG9yZGluYWwgZG9tYWluIGJhc2VkIG9uIGZpbHRlcmVkIGRhdGFcbiAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byB1cGRhdGUgb3JkaW5hbCBkb21haW4gZXZlcnkgdGltZVxuICAgICAgICByZXR1cm4gZ2V0T3JkaW5hbERvbWFpbihkYXRhQ29udGFpbmVyLCB2YWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5xdWFudGlsZTpcbiAgICAgICAgcmV0dXJuIGdldFF1YW50aWxlRG9tYWluKGZpbHRlcmVkSW5kZXhGb3JEb21haW4sIGluZGV4VmFsdWVBY2Nlc3Nvciwgc29ydEZ1bmN0aW9uKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5sb2c6XG4gICAgICAgIHJldHVybiBnZXRMb2dEb21haW4oZmlsdGVyZWRJbmRleEZvckRvbWFpbiwgaW5kZXhWYWx1ZUFjY2Vzc29yKTtcblxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5xdWFudGl6ZTpcbiAgICAgIGNhc2UgU0NBTEVfVFlQRVMubGluZWFyOlxuICAgICAgY2FzZSBTQ0FMRV9UWVBFUy5zcXJ0OlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGdldExpbmVhckRvbWFpbihmaWx0ZXJlZEluZGV4Rm9yRG9tYWluLCBpbmRleFZhbHVlQWNjZXNzb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzYW1wbGUgb2Ygcm93cyB0byBjYWxjdWxhdGUgbGF5ZXIgYm91bmRhcmllc1xuICAgKi9cbiAgLy8gZ2V0U2FtcGxlRGF0YShyb3dzKVxuXG4gIC8qKlxuICAgKiBQYXJzZSBjZWxsIHZhbHVlIGJhc2VkIG9uIGNvbHVtbiB0eXBlIGFuZCByZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogVmFsdWUgdGhlIGZpZWxkIHZhbHVlLCB0eXBlIHRoZSBmaWVsZCB0eXBlXG4gICAqL1xuICAvLyBwYXJzZUZpZWxkVmFsdWUodmFsdWUsIHR5cGUpXG5cbiAgLy8gc29ydERhdGFzZXRCeUNvbHVtbigpXG5cbiAgLyoqXG4gICAqIEFzc2VydCB3aGV0aGVyIGZpZWxkIGV4aXN0XG4gICAqIEBwYXJhbSBmaWVsZE5hbWVcbiAgICogQHBhcmFtIGNvbmRpdGlvblxuICAgKi9cbiAgX2Fzc2V0RmllbGQoZmllbGROYW1lLCBjb25kaXRpb24pIHtcbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgQ29uc29sZS5lcnJvcihgJHtmaWVsZE5hbWV9IGRvZXNudCBleGlzdCBpbiBkYXRhc2V0ICR7dGhpcy5pZH1gKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OUyAoTUFJTkxZIEVYUE9SVEVEIEZPUiBURVNULi4uKVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU3VmZml4QW5kRGVsaW1pdGVycyhsYXllck5hbWUsIHN1ZmZpeCkge1xuICByZXR1cm4gbGF5ZXJOYW1lXG4gICAgLnJlcGxhY2UobmV3IFJlZ0V4cChzdWZmaXgsICdpZycpLCAnJylcbiAgICAucmVwbGFjZSgvW18sLl0rL2csICcgJylcbiAgICAudHJpbSgpO1xufVxuXG4vKipcbiAqIEZpbmQgcG9pbnQgZmllbGRzIHBhaXJzIGZyb20gZmllbGRzXG4gKlxuICogQHBhcmFtIGZpZWxkc1xuICogQHJldHVybnMgZm91bmQgcG9pbnQgZmllbGRzXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydCgnLi9rZXBsZXItdGFibGUnKS5maW5kUG9pbnRGaWVsZFBhaXJzfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFBvaW50RmllbGRQYWlycyhmaWVsZHMpIHtcbiAgY29uc3QgYWxsTmFtZXMgPSBmaWVsZHMubWFwKGYgPT4gZi5uYW1lLnRvTG93ZXJDYXNlKCkpO1xuXG4gIC8vIGdldCBsaXN0IG9mIGFsbCBmaWVsZHMgd2l0aCBtYXRjaGluZyBzdWZmaXhlc1xuICBjb25zdCBhY2MgPSBbXTtcbiAgY29uc3QgcmVzdWx0ID0gYWxsTmFtZXMucmVkdWNlKChjYXJyeSwgZmllbGROYW1lLCBpZHgpID0+IHtcbiAgICAvLyBUaGlzIHNlYXJjaCBmb3IgcGFpcnMgd2lsbCBlYXJseSBleGl0IGlmIGZvdW5kLlxuICAgIGZvciAoY29uc3Qgc3VmZml4UGFpciBvZiBUUklQX1BPSU5UX0ZJRUxEUykge1xuICAgICAgLy8gbWF0Y2ggZmlyc3Qgc3VmZml4YGBgXG4gICAgICBpZiAoZmllbGROYW1lLmVuZHNXaXRoKHN1ZmZpeFBhaXJbMF0pKSB7XG4gICAgICAgIC8vIG1hdGNoIHNlY29uZCBzdWZmaXhcbiAgICAgICAgY29uc3Qgb3RoZXJQYXR0ZXJuID0gbmV3IFJlZ0V4cChgJHtzdWZmaXhQYWlyWzBdfVxcJGApO1xuICAgICAgICBjb25zdCBwYXJ0bmVyID0gZmllbGROYW1lLnJlcGxhY2Uob3RoZXJQYXR0ZXJuLCBzdWZmaXhQYWlyWzFdKTtcblxuICAgICAgICBjb25zdCBwYXJ0bmVySWR4ID0gYWxsTmFtZXMuZmluZEluZGV4KGQgPT4gZCA9PT0gcGFydG5lcik7XG4gICAgICAgIGlmIChwYXJ0bmVySWR4ID4gLTEpIHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0TmFtZSA9IHJlbW92ZVN1ZmZpeEFuZERlbGltaXRlcnMoZmllbGROYW1lLCBzdWZmaXhQYWlyWzBdKTtcblxuICAgICAgICAgIGNhcnJ5LnB1c2goe1xuICAgICAgICAgICAgZGVmYXVsdE5hbWUsXG4gICAgICAgICAgICBwYWlyOiB7XG4gICAgICAgICAgICAgIGxhdDoge1xuICAgICAgICAgICAgICAgIGZpZWxkSWR4OiBpZHgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkc1tpZHhdLm5hbWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbG5nOiB7XG4gICAgICAgICAgICAgICAgZmllbGRJZHg6IHBhcnRuZXJJZHgsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZpZWxkc1twYXJ0bmVySWR4XS5uYW1lXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWZmaXg6IHN1ZmZpeFBhaXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gY2Fycnk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9LCBhY2MpO1xuXG4gIC8vIHByaW9yaXRpemUgdGhlICdsYXRpdHVkZScvJ2xvbmdpdHVkZScgcGFpclxuICByZXN1bHQuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLmRlZmF1bHROYW1lID09PSAnJyAmJiBhLnN1ZmZpeFswXSA9PT0gJ2xhdGl0dWRlJykgcmV0dXJuIC0xO1xuICAgIGlmIChiLmRlZmF1bHROYW1lID09PSAnJyAmJiBiLnN1ZmZpeFswXSA9PT0gJ2xhdGl0dWRlJykgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBkYXRhc2V0XG4gKiBAcGFyYW0gY29sdW1uXG4gKiBAcGFyYW0gbW9kZVxuICogQHR5cGUge3R5cGVvZiBpbXBvcnQoJy4va2VwbGVyLXRhYmxlJykuc29ydERhdGFzZXRCeUNvbHVtbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvcnREYXRhc2V0QnlDb2x1bW4oZGF0YXNldCwgY29sdW1uLCBtb2RlKSB7XG4gIGNvbnN0IHthbGxJbmRleGVzLCBmaWVsZHMsIGRhdGFDb250YWluZXJ9ID0gZGF0YXNldDtcbiAgY29uc3QgZmllbGRJbmRleCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGNvbHVtbik7XG4gIGlmIChmaWVsZEluZGV4IDwgMCkge1xuICAgIHJldHVybiBkYXRhc2V0O1xuICB9XG5cbiAgY29uc3Qgc29ydEJ5ID0gU09SVF9PUkRFUlttb2RlXSB8fCBTT1JUX09SREVSLkFTQ0VORElORztcblxuICBpZiAoc29ydEJ5ID09PSBTT1JUX09SREVSLlVOU09SVCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kYXRhc2V0LFxuICAgICAgc29ydENvbHVtbjoge30sXG4gICAgICBzb3J0T3JkZXI6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgc29ydEZ1bmN0aW9uID0gc29ydEJ5ID09PSBTT1JUX09SREVSLkFTQ0VORElORyA/IGFzY2VuZGluZyA6IGRlc2NlbmRpbmc7XG4gIGNvbnN0IHNvcnRPcmRlciA9IGFsbEluZGV4ZXNcbiAgICAuc2xpY2UoKVxuICAgIC5zb3J0KChhLCBiKSA9PlxuICAgICAgc29ydEZ1bmN0aW9uKGRhdGFDb250YWluZXIudmFsdWVBdChhLCBmaWVsZEluZGV4KSwgZGF0YUNvbnRhaW5lci52YWx1ZUF0KGIsIGZpZWxkSW5kZXgpKVxuICAgICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhc2V0LFxuICAgIHNvcnRDb2x1bW46IHtcbiAgICAgIFtjb2x1bW5dOiBzb3J0QnlcbiAgICB9LFxuICAgIHNvcnRPcmRlclxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weVRhYmxlKG9yaWdpbmFsKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9yaWdpbmFsKSksIG9yaWdpbmFsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlUYWJsZUFuZFVwZGF0ZShvcmlnaW5hbCwgb3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhvcHRpb25zKS5yZWR1Y2UoKGFjYywgZW50cnkpID0+IHtcbiAgICBhY2NbZW50cnlbMF1dID0gZW50cnlbMV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgY29weVRhYmxlKG9yaWdpbmFsKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtlcGxlclRhYmxlO1xuIl19
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@carto/kepler.gl",
3
3
  "author": "CARTO",
4
4
  "homepage": "https://github.com/CartoDB/carto-kepler#readme",
5
- "version": "0.0.70-alpha.hackaton-vite",
5
+ "version": "0.0.71-alpha.1",
6
6
  "description": "kepler.gl is a webgl based application to visualize large scale location data in the browser",
7
7
  "license": "MIT",
8
8
  "main": "dist/index.js",
@@ -136,7 +136,7 @@
136
136
  "react-redux": "^7.1.3",
137
137
  "react-sortable-hoc": "^1.8.3",
138
138
  "react-tooltip": "^4.2.10",
139
- "react-virtualized": "^9.21.1",
139
+ "react-virtualized": "git+https://git@github.com/remorses/react-virtualized-fixed-import.git#9.22.3",
140
140
  "react-vis": "^1.8.0",
141
141
  "redux": "^4.0.5",
142
142
  "redux-actions": "^2.2.1",
@@ -169,7 +169,7 @@
169
169
  "@probe.gl/test-utils": "^3.0.1",
170
170
  "@testing-library/react-hooks": "^3.4.2",
171
171
  "@types/d3-array": "^2.0.0",
172
- "@types/d3-scale": "^3.2.2",
172
+ "@types/d3-scale": "^4.0.0",
173
173
  "@types/geojson": "^7946.0.7",
174
174
  "babel-eslint": "^10.1.0",
175
175
  "babel-loader": "^8.0.0",
@@ -228,7 +228,7 @@
228
228
  "webpack-stats-plugin": "^0.2.1"
229
229
  },
230
230
  "resolutions": {
231
- "d3-scale": "^3.2.3",
231
+ "d3-scale": "^4.0.0",
232
232
  "dot-prop": "6.0.0",
233
233
  "kind-of": "6.0.3",
234
234
  "jpeg-js": "0.4.2",
@@ -277,4 +277,4 @@
277
277
  "volta": {
278
278
  "node": "12.19.0"
279
279
  }
280
- }
280
+ }
@@ -41,7 +41,7 @@ import TextLabelPanelFactory from './text-label-panel';
41
41
 
42
42
  import {capitalizeFirstLetter} from 'utils/utils';
43
43
 
44
- import {CHANNEL_SCALES, CHANNEL_SCALE_SUPPORTED_FIELDS} from 'constants/default-settings';
44
+ import {CHANNEL_SCALES, CHANNEL_SCALE_SUPPORTED_FIELDS, SCALE_TYPES} from 'constants/default-settings';
45
45
  import {LAYER_TYPES} from 'layers/types';
46
46
  import {injectIntl} from 'react-intl';
47
47
  import ColorDimensionScaleSelectorFactory from './color-dimension-scale-selector';
@@ -963,6 +963,7 @@ export default function LayerConfiguratorFactory(
963
963
  const layerConfiguratorProps = getLayerConfiguratorProps(this.props);
964
964
  const layerChannelConfigProps = getLayerChannelConfigProps(this.props);
965
965
  const dataset = getLayerDataset(datasets, layer);
966
+ // TODO
966
967
  const renderTemplate = layer.type && `_render${capitalizeFirstLetter(layer.type)}LayerConfig`;
967
968
 
968
969
  return (
@@ -1109,26 +1110,44 @@ LayerColorRangeSelectorFactory.deps = [ColorSelectorFactory];
1109
1110
  export function LayerColorRangeSelectorFactory(ColorSelector) {
1110
1111
  class LayerColorRangeSelector extends Component {
1111
1112
  render() {
1112
- const {layer, onChange, property = 'colorRange', setColorUI} = this.props;
1113
+ const {
1114
+ layer,
1115
+ onChange,
1116
+ property = 'colorRange',
1117
+ scaleProperty = 'colorScale',
1118
+ domain = 'colorDomain',
1119
+ setColorUI
1120
+ } = this.props;
1121
+
1122
+ const colorSets = [
1123
+ {
1124
+ selectedColor: layer.config.visConfig[property],
1125
+ isRange: true,
1126
+ setColor: colorRange => {
1127
+ const {colorMap} = layer.config.visConfig[property];
1128
+ const colorRangeUpdated = colorMap
1129
+ ? layer.updateColorMap(property, colorMap, colorRange)
1130
+ : colorRange;
1131
+ onChange({[property]: colorRangeUpdated});
1132
+ }
1133
+ }
1134
+ ];
1135
+
1136
+ const scale = layer.config[scaleProperty];
1137
+ // TODO
1138
+ if (scale === SCALE_TYPES.hexColor) {
1139
+ colorSets[0].selectedColor = {
1140
+ colors: layer.config[domain]
1141
+ };
1142
+ }
1143
+
1113
1144
  return (
1114
1145
  <SidePanelSection>
1115
1146
  <PanelLabel>
1116
1147
  <FormattedMessage id="layer.colorRange" />
1117
1148
  </PanelLabel>
1118
1149
  <ColorSelector
1119
- colorSets={[
1120
- {
1121
- selectedColor: layer.config.visConfig[property],
1122
- isRange: true,
1123
- setColor: colorRange => {
1124
- const {colorMap} = layer.config.visConfig[property];
1125
- const colorRangeUpdated = colorMap
1126
- ? layer.updateColorMap(property, colorMap, colorRange)
1127
- : colorRange;
1128
- onChange({[property]: colorRangeUpdated});
1129
- }
1130
- }
1131
- ]}
1150
+ colorSets={colorSets}
1132
1151
  colorUI={layer.config.colorUI[property]}
1133
1152
  setColorUI={newConfig => setColorUI(property, newConfig)}
1134
1153
  />
@@ -144,12 +144,14 @@ function VisConfigByFieldSelectorFactory(InfoHelper, FieldSelector, ColorDimensi
144
144
  defaultMessage={label}
145
145
  />
146
146
  }
147
+ layerId={this.props.id}
147
148
  scaleType={this.props.scaleType}
148
149
  options={scaleOptions}
149
150
  domain={domain}
150
151
  range={range}
151
152
  onSelect={this.props.updateScale}
152
153
  onSetCustomPalette={this.props.updateCustomPalette}
154
+ fields={this.props.fields}
153
155
  />
154
156
  </div>
155
157
  )}
@@ -45,6 +45,7 @@ import {
45
45
  import {getHTMLMapModeTileUrl} from 'utils/utils';
46
46
  import {TOOLTIP_FORMAT_TYPES} from './tooltip';
47
47
  import {LAYER_TYPES} from 'layers/types';
48
+ import {scaleHexColor} from 'utils/custom-scale';
48
49
 
49
50
  export const ACTION_PREFIX = '@@kepler.gl/';
50
51
  export const CLOUDFRONT = 'https://d1a3f4spazzrp4.cloudfront.net/kepler.gl';
@@ -310,7 +311,9 @@ export const SCALE_TYPES = keyMirror({
310
311
  point: null,
311
312
  custom: null,
312
313
  // UI-only type, resolving as custom
313
- logarithmic: null
314
+ logarithmic: null,
315
+ // Scale for HexColor column initiative
316
+ hexColor: null
314
317
  });
315
318
 
316
319
  export const SCALE_FUNC = {
@@ -321,7 +324,8 @@ export const SCALE_FUNC = {
321
324
  [SCALE_TYPES.sqrt]: scaleSqrt,
322
325
  [SCALE_TYPES.log]: scaleLog,
323
326
  [SCALE_TYPES.point]: scalePoint,
324
- [SCALE_TYPES.custom]: scaleThreshold
327
+ [SCALE_TYPES.custom]: scaleThreshold,
328
+ [SCALE_TYPES.hexColor]: scaleHexColor
325
329
  };
326
330
 
327
331
  export const ALL_FIELD_TYPES = keyMirror({
@@ -435,8 +439,7 @@ export const CHANNEL_SCALES = keyMirror({
435
439
  size: null,
436
440
  customMarker: null,
437
441
  colorAggr: null,
438
- sizeAggr: null,
439
- identity: null
442
+ sizeAggr: null
440
443
  });
441
444
 
442
445
  export const AGGREGATION_TYPES = {
@@ -554,11 +557,10 @@ export const linearFieldAggrScaleFunctions = {
554
557
  };
555
558
 
556
559
  export const ordinalFieldScaleFunctions = {
557
- [CHANNEL_SCALES.color]: [SCALE_TYPES.ordinal],
560
+ [CHANNEL_SCALES.color]: [SCALE_TYPES.ordinal, SCALE_TYPES.hexColor],
558
561
  [CHANNEL_SCALES.radius]: [SCALE_TYPES.point],
559
562
  [CHANNEL_SCALES.size]: [SCALE_TYPES.point],
560
- [CHANNEL_SCALES.customMarker]: [SCALE_TYPES.ordinal],
561
- [CHANNEL_SCALES.identity]: []
563
+ [CHANNEL_SCALES.customMarker]: [SCALE_TYPES.ordinal]
562
564
  };
563
565
 
564
566
  export const ordinalFieldAggrScaleFunctions = {
@@ -21,7 +21,7 @@
21
21
  import {console as Console} from 'global/window';
22
22
  import keymirror from 'keymirror';
23
23
  import {CollisionFilterExtension, DataFilterExtension} from '@deck.gl/extensions';
24
- import {COORDINATE_SYSTEM, Layer as DeckLayer} from '@deck.gl/core';
24
+ import {COORDINATE_SYSTEM} from '@deck.gl/core';
25
25
  import {_PointLabelLayer as PointLabelLayer} from '@deck.gl/carto';
26
26
  import DefaultLayerIcon from './default-layer-icon';
27
27
  import {diffUpdateTriggers} from './layer-update';
@@ -76,7 +76,6 @@ const collisionFilterExtension = new CollisionFilterExtension();
76
76
 
77
77
  const defaultDataAccessor = dc => d => d;
78
78
  const defaultGetFieldValue = (field, d) => field.valueAccessor(d);
79
- const scaleIdentity = v => v;
80
79
 
81
80
  export const OVERLAY_TYPE = keymirror({
82
81
  deckgl: null,
@@ -902,9 +901,7 @@ class Layer {
902
901
  const aggregationValue = this.config.visConfig[aggregation];
903
902
 
904
903
  const scaleFunction =
905
- channelScaleType === CHANNEL_SCALES.identity
906
- ? scaleIdentity
907
- : channelScaleType === CHANNEL_SCALES.color
904
+ channelScaleType === CHANNEL_SCALES.color
908
905
  ? this.getColorScale(...args)
909
906
  : channelScaleType === CHANNEL_SCALES.customMarker
910
907
  ? this.getCustomMarkersScale(
@@ -914,13 +911,13 @@ class Layer {
914
911
  : this.getVisChannelScale(...args, isFixed);
915
912
 
916
913
  attributeAccessors[accessor] = d =>
917
- this.getEncodedChannelValue(
918
- scaleFunction,
919
- dataAccessor(dataContainer)(d),
920
- fieldConfig,
921
- aggregationValue,
914
+ this.getEncodedChannelValue({
915
+ scale: scaleFunction,
916
+ data: dataAccessor(dataContainer)(d),
917
+ field: fieldConfig,
918
+ aggregation: aggregationValue,
922
919
  nullValue
923
- );
920
+ });
924
921
  } else if (typeof getAttributeValue === 'function') {
925
922
  attributeAccessors[accessor] = getAttributeValue(this.config);
926
923
  } else {
@@ -937,7 +934,7 @@ class Layer {
937
934
  }
938
935
 
939
936
  getVisChannelScale(scale, domain, range, fixed) {
940
- if (scale === SCALE_TYPES.ordinal) {
937
+ if (scale === SCALE_TYPES.ordinal || scale === SCALE_TYPES.hexColor) {
941
938
  // @ts-ignore d3-scale type
942
939
  return SCALE_FUNC[scale]()
943
940
  .domain(domain.slice(0, range.length))
@@ -990,15 +987,15 @@ class Layer {
990
987
  return triggerChanged;
991
988
  }
992
989
 
993
- getEncodedChannelValue(
990
+ getEncodedChannelValue({
994
991
  scale,
995
992
  data,
996
993
  field,
997
994
  // In builder we overwrite the getValue function and we use the _aggregation parameter in spatial index layers as the QuadkeyLayer.
998
- _aggregation,
995
+ aggregation,
999
996
  nullValue = NO_VALUE_COLOR,
1000
997
  getValue = defaultGetFieldValue
1001
- ) {
998
+ }) {
1002
999
  const {type} = field;
1003
1000
  const value = getValue(field, data);
1004
1001
 
@@ -1108,6 +1105,7 @@ class Layer {
1108
1105
  if (!newFilter || scaleType !== SCALE_TYPES.ordinal) {
1109
1106
  const {domain} = channel;
1110
1107
  const updatedDomain = this.calculateLayerDomain(table, channel);
1108
+ console.log(this.name, updatedDomain, domain);
1111
1109
  this.updateLayerConfig({[domain]: updatedDomain});
1112
1110
  }
1113
1111
  });
@@ -1251,9 +1249,8 @@ class Layer {
1251
1249
 
1252
1250
  if (!radiusChannel || this.config[radiusChannel.field]) {
1253
1251
  return 1;
1254
- } else {
1255
- return this.config.visConfig.radius;
1256
1252
  }
1253
+ return this.config.visConfig.radius;
1257
1254
  }
1258
1255
 
1259
1256
  getMaxMarkerSize() {
@@ -1315,7 +1312,7 @@ class Layer {
1315
1312
  {getPosition, getRadius, radiusScale, updateTriggers, sharedProps},
1316
1313
  renderOpts
1317
1314
  ) {
1318
- const {data, mapState} = renderOpts;
1315
+ const {data} = renderOpts;
1319
1316
  const {textLabel, visibilityByZoom} = this.config;
1320
1317
  const extensions = [...sharedProps.extensions, collisionFilterExtension];
1321
1318
 
@@ -0,0 +1,22 @@
1
+ import {hexToRgb} from './color-utils';
2
+
3
+ export function scaleHexColor() {
4
+ let unknown;
5
+ function scale(x) {
6
+ return x === null ? unknown : hexToRgb(x);
7
+ }
8
+
9
+ scale.invert = scale;
10
+
11
+ scale.domain = scale.range = scaleHexColor;
12
+
13
+ scale.unknown = u => {
14
+ if (u) {
15
+ unknown = u;
16
+ }
17
+
18
+ return scale;
19
+ };
20
+
21
+ return scale;
22
+ }
@@ -324,6 +324,7 @@ class KeplerTable {
324
324
  switch (scaleType) {
325
325
  case SCALE_TYPES.ordinal:
326
326
  case SCALE_TYPES.point:
327
+ case SCALE_TYPES.hexColor:
327
328
  // do not recalculate ordinal domain based on filtered data
328
329
  // don't need to update ordinal domain every time
329
330
  return getOrdinalDomain(dataContainer, valueAccessor);
package/src/.DS_Store DELETED
Binary file