kepler.gl 3.1.0 → 3.1.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.
- package/README.md +27 -132
- package/dist/src/common-utils/src/data-type.d.ts +9 -1
- package/dist/src/components/src/common/data-table/header-cell.d.ts +1 -0
- package/dist/src/components/src/common/data-table/index.d.ts +1 -0
- package/dist/src/components/src/common/file-uploader/file-drop.d.ts +1 -32
- package/dist/src/components/src/common/item-selector/dropdown-list.d.ts +2 -2
- package/dist/src/components/src/common/item-selector/item-selector.d.ts +1 -1
- package/dist/src/components/src/common/item-selector/typeahead.d.ts +1 -1
- package/dist/src/components/src/geocoder/geocoder.d.ts +7 -0
- package/dist/src/components/src/geocoder-panel.d.ts +2 -2
- package/dist/src/components/src/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
- package/dist/src/constants/src/default-settings.d.ts +14 -1
- package/dist/src/deckgl-arrow-layers/src/constants.d.ts +0 -12
- package/dist/src/deckgl-arrow-layers/src/index.d.ts +0 -1
- package/dist/src/deckgl-arrow-layers/src/utils/utils.d.ts +12 -1
- package/dist/src/duckdb/src/components/preview-data-panel.d.ts +7 -2
- package/dist/src/duckdb/src/components/schema-panel.d.ts +12 -3
- package/dist/src/duckdb/src/processors/data-processor.d.ts +1 -0
- package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +106 -0
- package/dist/src/duckdb/src/table/duckdb-table.d.ts +5 -3
- package/dist/src/processors/src/data-processor.d.ts +15 -1
- package/dist/src/reducers/src/provider-state-updaters.d.ts +1 -0
- package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -1
- package/dist/src/table/src/dataset-utils.d.ts +1 -1
- package/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
- package/dist/src/utils/src/application-config.d.ts +4 -3
- package/dist/src/utils/src/data-utils.d.ts +9 -3
- package/dist/src/utils/src/indexed-data-container.d.ts +2 -2
- package/dist/src/utils/src/map-style-utils/mapbox-utils.d.ts +1 -1
- package/dist/src/utils/src/map-utils.d.ts +1 -1
- package/dist/src/utils/src/plot.d.ts +2 -2
- package/package.json +5 -5
- package/src/actions/package.json +8 -8
- package/src/ai-assistant/dist/components/ai-assistant-component.js +2 -1
- package/src/ai-assistant/package.json +7 -7
- package/src/ai-assistant/src/components/ai-assistant-component.tsx +1 -0
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/dist/data-type.d.ts +9 -1
- package/src/common-utils/dist/data-type.js +50 -1
- package/src/common-utils/package.json +3 -3
- package/src/common-utils/src/data-type.ts +49 -1
- package/src/components/dist/common/data-table/header-cell.d.ts +1 -0
- package/src/components/dist/common/data-table/header-cell.js +2 -2
- package/src/components/dist/common/data-table/index.d.ts +1 -0
- package/src/components/dist/common/data-table/index.js +5 -1
- package/src/components/dist/common/file-uploader/file-drop.d.ts +1 -32
- package/src/components/dist/common/file-uploader/file-drop.js +152 -167
- package/src/components/dist/common/item-selector/dropdown-list.d.ts +2 -2
- package/src/components/dist/common/item-selector/dropdown-list.js +2 -3
- package/src/components/dist/common/item-selector/item-selector.d.ts +1 -1
- package/src/components/dist/common/item-selector/typeahead.d.ts +1 -1
- package/src/components/dist/common/range-brush.js +3 -3
- package/src/components/dist/geocoder/geocoder.d.ts +7 -0
- package/src/components/dist/geocoder/geocoder.js +19 -11
- package/src/components/dist/geocoder-panel.d.ts +2 -2
- package/src/components/dist/geocoder-panel.js +64 -91
- package/src/components/dist/hooks/use-fetch-vector-tile-metadata.d.ts +4 -3
- package/src/components/dist/hooks/use-fetch-vector-tile-metadata.js +35 -26
- package/src/components/dist/hooks/use-legend-position.js +8 -4
- package/src/components/dist/map/map-legend-panel.js +2 -3
- package/src/components/dist/modal-container.js +8 -8
- package/src/components/dist/modals/tilesets-modals/tileset-vector-form.js +31 -12
- package/src/components/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
- package/src/components/dist/side-panel/layer-panel/color-range-selector.js +10 -11
- package/src/components/dist/side-panel/layer-panel/color-selector.js +3 -3
- package/src/components/dist/side-panel/layer-panel/custom-palette.js +1 -2
- package/src/components/dist/side-panel/layer-panel/layer-configurator.js +6 -8
- package/src/components/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +1 -2
- package/src/components/package.json +16 -16
- package/src/components/src/common/data-table/header-cell.tsx +2 -1
- package/src/components/src/common/data-table/index.tsx +4 -0
- package/src/components/src/common/file-uploader/file-drop.tsx +186 -161
- package/src/components/src/common/item-selector/dropdown-list.tsx +1 -6
- package/src/components/src/common/range-brush.tsx +2 -2
- package/src/components/src/geocoder/geocoder.tsx +16 -8
- package/src/components/src/geocoder-panel.tsx +95 -85
- package/src/components/src/hooks/use-fetch-vector-tile-metadata.ts +27 -25
- package/src/components/src/hooks/use-legend-position.ts +5 -2
- package/src/components/src/map/map-legend-panel.tsx +1 -2
- package/src/components/src/modal-container.tsx +7 -7
- package/src/components/src/modals/tilesets-modals/tileset-vector-form.tsx +12 -3
- package/src/components/src/side-panel/layer-panel/color-palette-preset.tsx +1 -1
- package/src/components/src/side-panel/layer-panel/color-range-selector.tsx +6 -11
- package/src/components/src/side-panel/layer-panel/color-selector.tsx +2 -2
- package/src/components/src/side-panel/layer-panel/custom-palette.tsx +0 -1
- package/src/components/src/side-panel/layer-panel/layer-configurator.tsx +23 -33
- package/src/components/src/side-panel/layer-panel/vector-tile-layer-configurator.tsx +0 -1
- package/src/constants/dist/default-settings.d.ts +14 -1
- package/src/constants/dist/default-settings.js +20 -5
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/91/4f/6c65f3a1eba584ffd2d892cabc25ab5804d4a9ef53694c98707372a83e56343a274bec04f15927a6fe7602615f0f23f73ccf599f524ef97ad6c77c8832ea +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/a6/b2/5424aa4477192fb44cc90fd80892efdc96731f2ff0f48e8f28abf64243cc +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/src/default-settings.ts +16 -1
- package/src/constants/umd/keplergl.min.js +2 -2
- package/src/deckgl-arrow-layers/dist/constants.d.ts +0 -12
- package/src/deckgl-arrow-layers/dist/constants.js +4 -15
- package/src/deckgl-arrow-layers/dist/index.d.ts +0 -1
- package/src/deckgl-arrow-layers/dist/index.js +1 -8
- package/src/deckgl-arrow-layers/dist/layers/geo-arrow-scatterplot-layer.js +4 -4
- package/src/deckgl-arrow-layers/dist/layers/geo-arrow-text-layer.js +5 -5
- package/src/deckgl-arrow-layers/dist/utils/utils.d.ts +12 -1
- package/src/deckgl-arrow-layers/dist/utils/utils.js +7 -5
- package/src/deckgl-arrow-layers/package.json +2 -1
- package/src/deckgl-arrow-layers/src/constants.ts +0 -13
- package/src/deckgl-arrow-layers/src/index.ts +0 -2
- package/src/deckgl-arrow-layers/src/layers/geo-arrow-scatterplot-layer.ts +5 -3
- package/src/deckgl-arrow-layers/src/layers/geo-arrow-text-layer.ts +8 -4
- package/src/deckgl-arrow-layers/src/utils/utils.ts +7 -5
- package/src/deckgl-layers/dist/deckgl-extensions/filter-arrow-layer.d.ts +1 -1
- package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.d.ts +1 -1
- package/src/deckgl-layers/dist/deckgl-extensions/filter-shader-module.js +3 -3
- package/src/deckgl-layers/package.json +5 -5
- package/src/deckgl-layers/src/deckgl-extensions/filter-shader-module.ts +4 -3
- package/src/duckdb/dist/components/monaco-editor.js +4 -5
- package/src/duckdb/dist/components/preview-data-panel.d.ts +7 -2
- package/src/duckdb/dist/components/preview-data-panel.js +7 -8
- package/src/duckdb/dist/components/schema-panel.d.ts +12 -3
- package/src/duckdb/dist/components/schema-panel.js +41 -24
- package/src/duckdb/dist/components/sql-panel.js +245 -56
- package/src/duckdb/dist/init.js +20 -14
- package/src/duckdb/dist/processors/data-processor.d.ts +1 -0
- package/src/duckdb/dist/processors/data-processor.js +4 -4
- package/src/duckdb/dist/table/duckdb-table-utils.d.ts +106 -0
- package/src/duckdb/dist/table/duckdb-table-utils.js +493 -2
- package/src/duckdb/dist/table/duckdb-table.d.ts +5 -3
- package/src/duckdb/dist/table/duckdb-table.js +153 -261
- package/src/duckdb/package.json +6 -6
- package/src/duckdb/src/components/monaco-editor.tsx +3 -3
- package/src/duckdb/src/components/preview-data-panel.tsx +15 -8
- package/src/duckdb/src/components/schema-panel.tsx +92 -21
- package/src/duckdb/src/components/sql-panel.tsx +160 -22
- package/src/duckdb/src/init.ts +4 -1
- package/src/duckdb/src/processors/data-processor.ts +2 -2
- package/src/duckdb/src/table/duckdb-table-utils.ts +407 -1
- package/src/duckdb/src/table/duckdb-table.ts +61 -92
- package/src/effects/package.json +5 -5
- package/src/layers/dist/arc-layer/arc-layer.d.ts +1 -1
- package/src/layers/dist/arc-layer/arc-layer.js +2 -3
- package/src/layers/dist/base-layer.d.ts +7 -6
- package/src/layers/dist/base-layer.js +36 -19
- package/src/layers/dist/geojson-layer/geojson-layer.js +4 -2
- package/src/layers/dist/geojson-layer/geojson-utils.js +10 -3
- package/src/layers/dist/heatmap-layer/heatmap-layer.d.ts +2 -0
- package/src/layers/dist/heatmap-layer/heatmap-layer.js +16 -9
- package/src/layers/dist/icon-layer/icon-layer.d.ts +6 -3
- package/src/layers/dist/icon-layer/icon-layer.js +19 -11
- package/src/layers/dist/index.d.ts +1 -1
- package/src/layers/dist/index.js +1 -1
- package/src/layers/dist/layer-text-label.d.ts +9 -0
- package/src/layers/dist/layer-text-label.js +51 -6
- package/src/layers/dist/layer-utils.d.ts +39 -30
- package/src/layers/dist/layer-utils.js +69 -9
- package/src/layers/dist/line-layer/line-layer.d.ts +1 -1
- package/src/layers/dist/line-layer/line-layer.js +2 -3
- package/src/layers/dist/point-layer/point-layer.d.ts +10 -7
- package/src/layers/dist/point-layer/point-layer.js +16 -8
- package/src/layers/dist/trip-layer/trip-layer.d.ts +2 -2
- package/src/layers/dist/trip-layer/trip-layer.js +4 -2
- package/src/layers/dist/vector-tile/abstract-tile-layer.d.ts +3 -7
- package/src/layers/dist/vector-tile/abstract-tile-layer.js +7 -6
- package/src/layers/dist/vector-tile/vector-tile-layer.d.ts +5 -7
- package/src/layers/dist/vector-tile/vector-tile-layer.js +23 -2
- package/src/layers/package.json +11 -10
- package/src/layers/src/arc-layer/arc-layer.ts +1 -1
- package/src/layers/src/base-layer.ts +50 -9
- package/src/layers/src/geojson-layer/geojson-layer.ts +3 -1
- package/src/layers/src/geojson-layer/geojson-utils.ts +4 -1
- package/src/layers/src/heatmap-layer/heatmap-layer.ts +17 -12
- package/src/layers/src/icon-layer/icon-layer.ts +7 -3
- package/src/layers/src/index.ts +1 -2
- package/src/layers/src/layer-text-label.ts +53 -4
- package/src/layers/src/layer-utils.ts +88 -9
- package/src/layers/src/line-layer/line-layer.ts +1 -1
- package/src/layers/src/point-layer/point-layer.ts +15 -11
- package/src/layers/src/trip-layer/trip-layer.ts +4 -2
- package/src/layers/src/vector-tile/abstract-tile-layer.ts +11 -5
- package/src/layers/src/vector-tile/vector-tile-layer.ts +33 -4
- package/src/localization/package.json +1 -1
- package/src/processors/dist/data-processor.d.ts +15 -1
- package/src/processors/dist/data-processor.js +104 -11
- package/src/processors/package.json +8 -7
- package/src/processors/src/data-processor.ts +116 -13
- package/src/reducers/dist/export-utils.js +2 -2
- package/src/reducers/dist/layer-utils.js +1 -1
- package/src/reducers/dist/provider-state-updaters.d.ts +1 -0
- package/src/reducers/dist/provider-state-updaters.js +5 -2
- package/src/reducers/dist/vis-state-updaters.d.ts +1 -1
- package/src/reducers/dist/vis-state-updaters.js +23 -12
- package/src/reducers/package.json +16 -16
- package/src/reducers/src/export-utils.ts +1 -1
- package/src/reducers/src/layer-utils.ts +2 -1
- package/src/reducers/src/provider-state-updaters.ts +4 -1
- package/src/reducers/src/vis-state-updaters.ts +45 -10
- package/src/schemas/dist/dataset-schema.js +35 -6
- package/src/schemas/package.json +7 -7
- package/src/schemas/src/dataset-schema.ts +36 -8
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/a3/a9/7f26bbc52905b0e21e9366a30ef0ba98f4ccf9aa8dd8326d90ba90191ba2e305323f505bf134c825356156c793bf9386ed2cef2aeb48eb327c26d106f69a +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/7e/51/b8756555a0e2e696d944445ac23f7febf769006013fbc8419f39a701649d +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +2 -2
- package/src/table/dist/dataset-utils.js +23 -14
- package/src/table/dist/src/table/src/dataset-utils.d.ts +1 -1
- package/src/table/dist/src/table/src/tileset/vector-tile-utils.d.ts +17 -1
- package/src/table/dist/tileset/vector-tile-utils.js +122 -2
- package/src/table/package.json +5 -5
- package/src/table/src/dataset-utils.ts +16 -6
- package/src/table/src/tileset/vector-tile-utils.ts +131 -8
- package/src/tasks/package.json +2 -2
- package/src/types/actions.d.ts +1 -0
- package/src/types/layers.d.ts +1 -0
- package/src/types/package.json +1 -1
- package/src/types/types.d.ts +17 -0
- package/src/utils/dist/application-config.d.ts +4 -3
- package/src/utils/dist/application-config.js +3 -2
- package/src/utils/dist/data-scale-utils.js +4 -4
- package/src/utils/dist/data-utils.d.ts +9 -3
- package/src/utils/dist/data-utils.js +40 -7
- package/src/utils/dist/dataset-utils.js +23 -8
- package/src/utils/dist/indexed-data-container.d.ts +2 -2
- package/src/utils/dist/indexed-data-container.js +1 -1
- package/src/utils/dist/map-style-utils/mapbox-utils.d.ts +1 -1
- package/src/utils/dist/map-style-utils/mapbox-utils.js +3 -3
- package/src/utils/dist/plot.d.ts +2 -2
- package/src/utils/dist/plot.js +6 -6
- package/src/utils/map-utils.spec.js +1 -2
- package/src/utils/package.json +5 -4
- package/src/utils/src/application-config.ts +11 -8
- package/src/utils/src/data-scale-utils.ts +3 -3
- package/src/utils/src/data-utils.ts +36 -7
- package/src/utils/src/dataset-utils.ts +41 -9
- package/src/utils/src/indexed-data-container.ts +1 -1
- package/src/utils/src/map-style-utils/mapbox-utils.ts +2 -2
- package/src/utils/src/plot.ts +5 -5
- package/umd/keplergl.min.js +1279 -1295
|
@@ -9,26 +9,24 @@ exports.KeplerGlDuckDbTable = void 0;
|
|
|
9
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
11
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
12
13
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
14
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
14
15
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
15
16
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
16
17
|
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
17
18
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
18
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
19
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
20
20
|
var arrow = _interopRequireWildcard(require("apache-arrow"));
|
|
21
21
|
var _constants = require("@kepler.gl/constants");
|
|
22
|
-
var _table = require("@kepler.gl/table");
|
|
23
22
|
var _processors = require("@kepler.gl/processors");
|
|
23
|
+
var _table = require("@kepler.gl/table");
|
|
24
24
|
var _init = require("../init");
|
|
25
25
|
var _dataProcessor = require("../processors/data-processor");
|
|
26
26
|
var _duckdbTableUtils = require("./duckdb-table-utils");
|
|
27
|
+
var _duckdbTableUtils2 = require("../table/duckdb-table-utils");
|
|
27
28
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
28
29
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
29
|
-
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
30
|
-
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
31
|
-
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
32
30
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
33
31
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
34
32
|
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
@@ -53,46 +51,7 @@ var KEPLER_GEOM_FROM_GEOJSON_COLUMN = '_geojson';
|
|
|
53
51
|
/**
|
|
54
52
|
* Names of columns that most likely contain binary wkb geometry
|
|
55
53
|
*/
|
|
56
|
-
var SUGGESTED_GEOM_COLUMNS = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, KEPLER_GEOM_FROM_GEOJSON_COLUMN,
|
|
57
|
-
/**
|
|
58
|
-
* Creates an arrow table from arrow vectors and fields.
|
|
59
|
-
* @param columns An array of arrow vectors.
|
|
60
|
-
* @param fields An array of fields per arrow vector.
|
|
61
|
-
* @returns An arrow table.
|
|
62
|
-
*/
|
|
63
|
-
// TODO: consider using original drag&dropped arrow table, as it could contain extra metadata, not passed to the fields.
|
|
64
|
-
var restoreArrowTable = function restoreArrowTable(columns, fields) {
|
|
65
|
-
var creaOpts = {};
|
|
66
|
-
fields.map(function (field, index) {
|
|
67
|
-
creaOpts[field.name] = columns[index];
|
|
68
|
-
});
|
|
69
|
-
return new arrow.Table(creaOpts);
|
|
70
|
-
};
|
|
71
|
-
var dropIfTableExists = /*#__PURE__*/function () {
|
|
72
|
-
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(c, tableName) {
|
|
73
|
-
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
74
|
-
while (1) switch (_context.prev = _context.next) {
|
|
75
|
-
case 0:
|
|
76
|
-
_context.prev = 0;
|
|
77
|
-
_context.next = 3;
|
|
78
|
-
return c.query("DROP TABLE IF EXISTS \"".concat(tableName, "\";"));
|
|
79
|
-
case 3:
|
|
80
|
-
_context.next = 8;
|
|
81
|
-
break;
|
|
82
|
-
case 5:
|
|
83
|
-
_context.prev = 5;
|
|
84
|
-
_context.t0 = _context["catch"](0);
|
|
85
|
-
console.error('Dropping table failed', tableName, _context.t0);
|
|
86
|
-
case 8:
|
|
87
|
-
case "end":
|
|
88
|
-
return _context.stop();
|
|
89
|
-
}
|
|
90
|
-
}, _callee, null, [[0, 5]]);
|
|
91
|
-
}));
|
|
92
|
-
return function dropIfTableExists(_x, _x2) {
|
|
93
|
-
return _ref.apply(this, arguments);
|
|
94
|
-
};
|
|
95
|
-
}();
|
|
54
|
+
var SUGGESTED_GEOM_COLUMNS = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, KEPLER_GEOM_FROM_GEOJSON_COLUMN, _constants.GEOARROW_EXTENSIONS.WKB), DUCKDB_GEOM_COLUMN, _constants.GEOARROW_EXTENSIONS.WKB), "geometry", _constants.GEOARROW_EXTENSIONS.WKB);
|
|
96
55
|
var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_KeplerTable) {
|
|
97
56
|
function KeplerGlDuckDbTable(props) {
|
|
98
57
|
(0, _classCallCheck2["default"])(this, KeplerGlDuckDbTable);
|
|
@@ -102,13 +61,13 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
102
61
|
return (0, _createClass2["default"])(KeplerGlDuckDbTable, [{
|
|
103
62
|
key: "importRowData",
|
|
104
63
|
value: function () {
|
|
105
|
-
var _importRowData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function
|
|
64
|
+
var _importRowData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) {
|
|
106
65
|
var data, db, c, fields, rows, rowsForDb, columns, createTableSql;
|
|
107
|
-
return _regenerator["default"].wrap(function
|
|
108
|
-
while (1) switch (
|
|
66
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
67
|
+
while (1) switch (_context.prev = _context.next) {
|
|
109
68
|
case 0:
|
|
110
|
-
data =
|
|
111
|
-
|
|
69
|
+
data = _ref.data, db = _ref.db, c = _ref.c;
|
|
70
|
+
_context.prev = 1;
|
|
112
71
|
fields = data.fields, rows = data.rows; // DATASET_FORMATS.keplergl loads data as any[][] instead of [{}]
|
|
113
72
|
// TODO potential memory usage explosion: original data, new object and then DuckDb table
|
|
114
73
|
rowsForDb = Array.isArray(rows[0]) ? rows.map(function (row) {
|
|
@@ -118,7 +77,7 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
118
77
|
});
|
|
119
78
|
return newRow;
|
|
120
79
|
}) : rows;
|
|
121
|
-
|
|
80
|
+
_context.next = 6;
|
|
122
81
|
return db.registerFileText(this.id, JSON.stringify(rowsForDb));
|
|
123
82
|
case 6:
|
|
124
83
|
columns = fields.reduce(function (acc, field, index) {
|
|
@@ -126,22 +85,22 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
126
85
|
return "".concat(acc).concat(index > 0 ? ',' : '', " '").concat(field.name, "': '").concat(field.duckDBColumnType, "'");
|
|
127
86
|
}, '');
|
|
128
87
|
createTableSql = "\n CREATE TABLE '".concat(this.label, "' AS\n SELECT *\n FROM read_json('").concat(this.id, "',\n columns = {").concat(columns, "});\n ");
|
|
129
|
-
|
|
88
|
+
_context.next = 10;
|
|
130
89
|
return c.query(createTableSql);
|
|
131
90
|
case 10:
|
|
132
|
-
|
|
91
|
+
_context.next = 15;
|
|
133
92
|
break;
|
|
134
93
|
case 12:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
console.log('importRowData',
|
|
94
|
+
_context.prev = 12;
|
|
95
|
+
_context.t0 = _context["catch"](1);
|
|
96
|
+
console.log('importRowData', _context.t0);
|
|
138
97
|
case 15:
|
|
139
98
|
case "end":
|
|
140
|
-
return
|
|
99
|
+
return _context.stop();
|
|
141
100
|
}
|
|
142
|
-
},
|
|
101
|
+
}, _callee, this, [[1, 12]]);
|
|
143
102
|
}));
|
|
144
|
-
function importRowData(
|
|
103
|
+
function importRowData(_x) {
|
|
145
104
|
return _importRowData.apply(this, arguments);
|
|
146
105
|
}
|
|
147
106
|
return importRowData;
|
|
@@ -149,38 +108,39 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
149
108
|
}, {
|
|
150
109
|
key: "importGeoJsonData",
|
|
151
110
|
value: function () {
|
|
152
|
-
var _importGeoJsonData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function
|
|
111
|
+
var _importGeoJsonData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref2) {
|
|
153
112
|
var data, db, c, rows, createTableSql;
|
|
154
|
-
return _regenerator["default"].wrap(function
|
|
155
|
-
while (1) switch (
|
|
113
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
114
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
156
115
|
case 0:
|
|
157
|
-
data =
|
|
158
|
-
|
|
116
|
+
data = _ref2.data, db = _ref2.db, c = _ref2.c;
|
|
117
|
+
_context2.prev = 1;
|
|
159
118
|
rows = data.rows;
|
|
160
|
-
|
|
119
|
+
_context2.next = 5;
|
|
161
120
|
return db.registerFileText(this.id, JSON.stringify(rows));
|
|
162
121
|
case 5:
|
|
163
122
|
createTableSql = "\n install spatial;\n load spatial;\n CREATE TABLE '".concat(this.label, "' AS \n SELECT *\n FROM ST_READ('").concat(this.id, "', keep_wkb = TRUE);\n ALTER TABLE '").concat(this.label, "' RENAME '").concat(DUCKDB_WKB_COLUMN, "' TO '").concat(KEPLER_GEOM_FROM_GEOJSON_COLUMN, "';\n ");
|
|
164
|
-
|
|
123
|
+
_context2.next = 8;
|
|
165
124
|
return c.query(createTableSql);
|
|
166
125
|
case 8:
|
|
167
|
-
|
|
126
|
+
_context2.next = 13;
|
|
168
127
|
break;
|
|
169
128
|
case 10:
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
console.error('importGeoJsonData',
|
|
129
|
+
_context2.prev = 10;
|
|
130
|
+
_context2.t0 = _context2["catch"](1);
|
|
131
|
+
console.error('importGeoJsonData', _context2.t0);
|
|
173
132
|
case 13:
|
|
174
|
-
return
|
|
175
|
-
|
|
133
|
+
return _context2.abrupt("return", {
|
|
134
|
+
// _geojson column is created from geometry with keep_wkb flag and contains valid WKB data.
|
|
135
|
+
geoarrowMetadata: (0, _defineProperty2["default"])({}, KEPLER_GEOM_FROM_GEOJSON_COLUMN, _constants.GEOARROW_EXTENSIONS.WKB)
|
|
176
136
|
});
|
|
177
137
|
case 14:
|
|
178
138
|
case "end":
|
|
179
|
-
return
|
|
139
|
+
return _context2.stop();
|
|
180
140
|
}
|
|
181
|
-
},
|
|
141
|
+
}, _callee2, this, [[1, 10]]);
|
|
182
142
|
}));
|
|
183
|
-
function importGeoJsonData(
|
|
143
|
+
function importGeoJsonData(_x2) {
|
|
184
144
|
return _importGeoJsonData.apply(this, arguments);
|
|
185
145
|
}
|
|
186
146
|
return importGeoJsonData;
|
|
@@ -188,46 +148,50 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
188
148
|
}, {
|
|
189
149
|
key: "importArrowData",
|
|
190
150
|
value: function () {
|
|
191
|
-
var _importArrowData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function
|
|
192
|
-
var data,
|
|
193
|
-
return _regenerator["default"].wrap(function
|
|
194
|
-
while (1) switch (
|
|
151
|
+
var _importArrowData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref3) {
|
|
152
|
+
var data, c, adjustedMetadata, arrowTable, setupSql;
|
|
153
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
154
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
195
155
|
case 0:
|
|
196
|
-
data =
|
|
197
|
-
|
|
156
|
+
data = _ref3.data, c = _ref3.c;
|
|
157
|
+
adjustedMetadata = {};
|
|
158
|
+
_context3.prev = 2;
|
|
198
159
|
// 1) data.rows contains an arrow table created by Add to Map data from DuckDb query.
|
|
199
160
|
// 2) arrow table is in cols & fields when a file is dragged & dropped into Add Data To Map dialog.
|
|
200
|
-
arrowTable = data.rows instanceof arrow.Table ? data.rows : restoreArrowTable(data.cols || [], data.fields);
|
|
161
|
+
arrowTable = data.rows instanceof arrow.Table ? data.rows : (0, _duckdbTableUtils2.restoreArrowTable)(data.cols || [], data.fields, data.arrowSchema); // remove unsupported extensions from an arrow table that throw exceptions in DuckDB.
|
|
162
|
+
adjustedMetadata = (0, _duckdbTableUtils2.removeUnsupportedExtensions)(arrowTable);
|
|
201
163
|
setupSql = "\n install spatial;\n load spatial;\n ";
|
|
202
|
-
|
|
164
|
+
_context3.next = 8;
|
|
203
165
|
return c.query(setupSql);
|
|
204
|
-
case
|
|
205
|
-
|
|
166
|
+
case 8:
|
|
167
|
+
_context3.next = 10;
|
|
206
168
|
return c.insertArrowTable(arrowTable, {
|
|
207
169
|
name: this.label
|
|
208
170
|
});
|
|
209
|
-
case 8:
|
|
210
|
-
_context4.next = 13;
|
|
211
|
-
break;
|
|
212
171
|
case 10:
|
|
213
|
-
|
|
214
|
-
|
|
172
|
+
// restore unsupported extensions that throw exceptions in DuckDb
|
|
173
|
+
(0, _duckdbTableUtils2.restoreUnsupportedExtensions)(arrowTable, adjustedMetadata);
|
|
174
|
+
_context3.next = 16;
|
|
175
|
+
break;
|
|
176
|
+
case 13:
|
|
177
|
+
_context3.prev = 13;
|
|
178
|
+
_context3.t0 = _context3["catch"](2);
|
|
215
179
|
// Known issues:
|
|
216
180
|
// 1) Arrow Type with extension name: geoarrow.point and format: +w:2 is not currently supported in DuckDB.
|
|
217
|
-
console.error('importArrowData',
|
|
218
|
-
case
|
|
219
|
-
return
|
|
220
|
-
|
|
221
|
-
// use
|
|
181
|
+
console.error('importArrowData', _context3.t0);
|
|
182
|
+
case 16:
|
|
183
|
+
return _context3.abrupt("return", {
|
|
184
|
+
geoarrowMetadata: _objectSpread(_objectSpread({}, SUGGESTED_GEOM_COLUMNS), adjustedMetadata),
|
|
185
|
+
// use fields generated from the created arrow table
|
|
222
186
|
useNewFields: true
|
|
223
187
|
});
|
|
224
|
-
case
|
|
188
|
+
case 17:
|
|
225
189
|
case "end":
|
|
226
|
-
return
|
|
190
|
+
return _context3.stop();
|
|
227
191
|
}
|
|
228
|
-
},
|
|
192
|
+
}, _callee3, this, [[2, 13]]);
|
|
229
193
|
}));
|
|
230
|
-
function importArrowData(
|
|
194
|
+
function importArrowData(_x3) {
|
|
231
195
|
return _importArrowData.apply(this, arguments);
|
|
232
196
|
}
|
|
233
197
|
return importArrowData;
|
|
@@ -240,22 +204,22 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
240
204
|
}, {
|
|
241
205
|
key: "createTableAndGetArrow",
|
|
242
206
|
value: (function () {
|
|
243
|
-
var _createTableAndGetArrow = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function
|
|
244
|
-
var db, c, tableName, format, _data$rows, _data$rows2, _data$rows3, _data$cols, importDetails, fields, cols, _data$fields,
|
|
245
|
-
return _regenerator["default"].wrap(function
|
|
246
|
-
while (1) switch (
|
|
207
|
+
var _createTableAndGetArrow = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(data) {
|
|
208
|
+
var db, c, tableName, format, _data$rows, _data$rows2, _data$rows3, _data$cols, importDetails, fields, cols, _data$fields, _ref4, _ref4$geoarrowMetadat, geoarrowMetadata, _ref4$useNewFields, useNewFields, duckDbColumns, tableDuckDBTypes, columnsToConvertToWKB, adjustedQuery, arrowResult;
|
|
209
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
210
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
247
211
|
case 0:
|
|
248
|
-
|
|
212
|
+
_context4.next = 2;
|
|
249
213
|
return (0, _init.getDuckDB)();
|
|
250
214
|
case 2:
|
|
251
|
-
db =
|
|
252
|
-
|
|
215
|
+
db = _context4.sent;
|
|
216
|
+
_context4.next = 5;
|
|
253
217
|
return db.connect();
|
|
254
218
|
case 5:
|
|
255
|
-
c =
|
|
219
|
+
c = _context4.sent;
|
|
256
220
|
tableName = this.label;
|
|
257
|
-
|
|
258
|
-
return
|
|
221
|
+
_context4.next = 9;
|
|
222
|
+
return (0, _duckdbTableUtils2.dropTableIfExists)(c, tableName);
|
|
259
223
|
case 9:
|
|
260
224
|
format = this.metadata.format;
|
|
261
225
|
if (!format) {
|
|
@@ -269,98 +233,96 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
269
233
|
}
|
|
270
234
|
}
|
|
271
235
|
if (!(format === _constants.DATASET_FORMATS.row)) {
|
|
272
|
-
|
|
236
|
+
_context4.next = 16;
|
|
273
237
|
break;
|
|
274
238
|
}
|
|
275
|
-
|
|
239
|
+
_context4.next = 14;
|
|
276
240
|
return this.importRowData({
|
|
277
241
|
data: data,
|
|
278
242
|
db: db,
|
|
279
243
|
c: c
|
|
280
244
|
});
|
|
281
245
|
case 14:
|
|
282
|
-
|
|
246
|
+
_context4.next = 29;
|
|
283
247
|
break;
|
|
284
248
|
case 16:
|
|
285
249
|
if (!(format === _constants.DATASET_FORMATS.geojson)) {
|
|
286
|
-
|
|
250
|
+
_context4.next = 22;
|
|
287
251
|
break;
|
|
288
252
|
}
|
|
289
|
-
|
|
253
|
+
_context4.next = 19;
|
|
290
254
|
return this.importGeoJsonData({
|
|
291
255
|
data: data,
|
|
292
256
|
db: db,
|
|
293
257
|
c: c
|
|
294
258
|
});
|
|
295
259
|
case 19:
|
|
296
|
-
importDetails =
|
|
297
|
-
|
|
260
|
+
importDetails = _context4.sent;
|
|
261
|
+
_context4.next = 29;
|
|
298
262
|
break;
|
|
299
263
|
case 22:
|
|
300
264
|
if (!(format === _constants.DATASET_FORMATS.arrow)) {
|
|
301
|
-
|
|
265
|
+
_context4.next = 28;
|
|
302
266
|
break;
|
|
303
267
|
}
|
|
304
|
-
|
|
268
|
+
_context4.next = 25;
|
|
305
269
|
return this.importArrowData({
|
|
306
270
|
data: data,
|
|
307
271
|
db: db,
|
|
308
272
|
c: c
|
|
309
273
|
});
|
|
310
274
|
case 25:
|
|
311
|
-
importDetails =
|
|
312
|
-
|
|
275
|
+
importDetails = _context4.sent;
|
|
276
|
+
_context4.next = 29;
|
|
313
277
|
break;
|
|
314
278
|
case 28:
|
|
315
279
|
console.error('Unrecognized format', format);
|
|
316
280
|
case 29:
|
|
317
281
|
fields = [];
|
|
318
282
|
cols = [];
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
return tryST_AsWKB({
|
|
324
|
-
tableName: tableName,
|
|
325
|
-
c: c
|
|
326
|
-
});
|
|
283
|
+
_context4.prev = 31;
|
|
284
|
+
_ref4 = importDetails || {}, _ref4$geoarrowMetadat = _ref4.geoarrowMetadata, geoarrowMetadata = _ref4$geoarrowMetadat === void 0 ? {} : _ref4$geoarrowMetadat, _ref4$useNewFields = _ref4.useNewFields, useNewFields = _ref4$useNewFields === void 0 ? false : _ref4$useNewFields;
|
|
285
|
+
_context4.next = 35;
|
|
286
|
+
return (0, _duckdbTableUtils2.getDuckDBColumnTypes)(c, tableName);
|
|
327
287
|
case 35:
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
288
|
+
duckDbColumns = _context4.sent;
|
|
289
|
+
tableDuckDBTypes = (0, _duckdbTableUtils2.getDuckDBColumnTypesMap)(duckDbColumns);
|
|
290
|
+
columnsToConvertToWKB = (0, _duckdbTableUtils2.getGeometryColumns)(duckDbColumns);
|
|
291
|
+
adjustedQuery = (0, _duckdbTableUtils2.constructST_asWKBQuery)(tableName, columnsToConvertToWKB);
|
|
292
|
+
_context4.next = 41;
|
|
293
|
+
return c.query(adjustedQuery);
|
|
294
|
+
case 41:
|
|
295
|
+
arrowResult = _context4.sent;
|
|
296
|
+
// TODO if format is an arrow table then just use the original one, instead of the new table from the query?
|
|
297
|
+
|
|
298
|
+
restoreGeoarrowMetadata(arrowResult, geoarrowMetadata);
|
|
299
|
+
fields = useNewFields ? (0, _processors.arrowSchemaToFields)(arrowResult, tableDuckDBTypes) : (_data$fields = data.fields) !== null && _data$fields !== void 0 ? _data$fields : (0, _processors.arrowSchemaToFields)(arrowResult, tableDuckDBTypes);
|
|
336
300
|
cols = (0, _toConsumableArray2["default"])(Array(arrowResult.numCols).keys()).map(function (i) {
|
|
337
301
|
return arrowResult.getChildAt(i);
|
|
338
302
|
}).filter(function (col) {
|
|
339
303
|
return col;
|
|
340
304
|
});
|
|
341
|
-
|
|
305
|
+
_context4.next = 50;
|
|
342
306
|
break;
|
|
343
|
-
case
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
// 1) ST_AsWKB binder error, no type match
|
|
348
|
-
console.error('DuckDb table: binary geometry column to wkb', _context5.t0);
|
|
349
|
-
case 48:
|
|
350
|
-
_context5.next = 50;
|
|
351
|
-
return c.close();
|
|
307
|
+
case 47:
|
|
308
|
+
_context4.prev = 47;
|
|
309
|
+
_context4.t0 = _context4["catch"](31);
|
|
310
|
+
console.error('DuckDB table: createTableAndGetArrow', _context4.t0);
|
|
352
311
|
case 50:
|
|
353
|
-
|
|
312
|
+
_context4.next = 52;
|
|
313
|
+
return c.close();
|
|
314
|
+
case 52:
|
|
315
|
+
return _context4.abrupt("return", {
|
|
354
316
|
fields: fields,
|
|
355
317
|
cols: cols
|
|
356
318
|
});
|
|
357
|
-
case
|
|
319
|
+
case 53:
|
|
358
320
|
case "end":
|
|
359
|
-
return
|
|
321
|
+
return _context4.stop();
|
|
360
322
|
}
|
|
361
|
-
},
|
|
323
|
+
}, _callee4, this, [[31, 47]]);
|
|
362
324
|
}));
|
|
363
|
-
function createTableAndGetArrow(
|
|
325
|
+
function createTableAndGetArrow(_x4) {
|
|
364
326
|
return _createTableAndGetArrow.apply(this, arguments);
|
|
365
327
|
}
|
|
366
328
|
return createTableAndGetArrow;
|
|
@@ -368,14 +330,14 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
368
330
|
}, {
|
|
369
331
|
key: "importData",
|
|
370
332
|
value: function () {
|
|
371
|
-
var _importData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function
|
|
333
|
+
var _importData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(_ref5) {
|
|
372
334
|
var data, _yield$this$createTab, fields, cols;
|
|
373
|
-
return _regenerator["default"].wrap(function
|
|
374
|
-
while (1) switch (
|
|
335
|
+
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
336
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
375
337
|
case 0:
|
|
376
|
-
data =
|
|
338
|
+
data = _ref5.data;
|
|
377
339
|
if (!(this.type === _constants.DatasetType.VECTOR_TILE)) {
|
|
378
|
-
|
|
340
|
+
_context5.next = 4;
|
|
379
341
|
break;
|
|
380
342
|
}
|
|
381
343
|
_superPropGet(KeplerGlDuckDbTable, "importData", this, 3)([{
|
|
@@ -383,12 +345,12 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
383
345
|
rows: []
|
|
384
346
|
})
|
|
385
347
|
}]);
|
|
386
|
-
return
|
|
348
|
+
return _context5.abrupt("return");
|
|
387
349
|
case 4:
|
|
388
|
-
|
|
350
|
+
_context5.next = 6;
|
|
389
351
|
return this.createTableAndGetArrow(data);
|
|
390
352
|
case 6:
|
|
391
|
-
_yield$this$createTab =
|
|
353
|
+
_yield$this$createTab = _context5.sent;
|
|
392
354
|
fields = _yield$this$createTab.fields;
|
|
393
355
|
cols = _yield$this$createTab.cols;
|
|
394
356
|
_superPropGet(KeplerGlDuckDbTable, "importData", this, 3)([{
|
|
@@ -400,11 +362,11 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
400
362
|
}]);
|
|
401
363
|
case 10:
|
|
402
364
|
case "end":
|
|
403
|
-
return
|
|
365
|
+
return _context5.stop();
|
|
404
366
|
}
|
|
405
|
-
},
|
|
367
|
+
}, _callee5, this);
|
|
406
368
|
}));
|
|
407
|
-
function importData(
|
|
369
|
+
function importData(_x5) {
|
|
408
370
|
return _importData.apply(this, arguments);
|
|
409
371
|
}
|
|
410
372
|
return importData;
|
|
@@ -412,37 +374,37 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
412
374
|
}, {
|
|
413
375
|
key: "update",
|
|
414
376
|
value: function () {
|
|
415
|
-
var _update = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function
|
|
377
|
+
var _update = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(data) {
|
|
416
378
|
var _yield$this$createTab2, cols;
|
|
417
|
-
return _regenerator["default"].wrap(function
|
|
418
|
-
while (1) switch (
|
|
379
|
+
return _regenerator["default"].wrap(function _callee6$(_context6) {
|
|
380
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
419
381
|
case 0:
|
|
420
382
|
if (!(this.type === _constants.DatasetType.VECTOR_TILE)) {
|
|
421
|
-
|
|
383
|
+
_context6.next = 3;
|
|
422
384
|
break;
|
|
423
385
|
}
|
|
424
386
|
_superPropGet(KeplerGlDuckDbTable, "importData", this, 3)([{
|
|
425
387
|
data: data
|
|
426
388
|
}]);
|
|
427
|
-
return
|
|
389
|
+
return _context6.abrupt("return", this);
|
|
428
390
|
case 3:
|
|
429
|
-
|
|
391
|
+
_context6.next = 5;
|
|
430
392
|
return this.createTableAndGetArrow(data);
|
|
431
393
|
case 5:
|
|
432
|
-
_yield$this$createTab2 =
|
|
394
|
+
_yield$this$createTab2 = _context6.sent;
|
|
433
395
|
cols = _yield$this$createTab2.cols;
|
|
434
|
-
return
|
|
396
|
+
return _context6.abrupt("return", _superPropGet(KeplerGlDuckDbTable, "update", this, 3)([{
|
|
435
397
|
cols: cols,
|
|
436
398
|
rows: [],
|
|
437
399
|
fields: []
|
|
438
400
|
}]));
|
|
439
401
|
case 8:
|
|
440
402
|
case "end":
|
|
441
|
-
return
|
|
403
|
+
return _context6.stop();
|
|
442
404
|
}
|
|
443
|
-
},
|
|
405
|
+
}, _callee6, this);
|
|
444
406
|
}));
|
|
445
|
-
function update(
|
|
407
|
+
function update(_x6) {
|
|
446
408
|
return _update.apply(this, arguments);
|
|
447
409
|
}
|
|
448
410
|
return update;
|
|
@@ -453,15 +415,13 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
453
415
|
* Try to restore geoarrow metadata lost during DuckDb ingestion.
|
|
454
416
|
* Note that this function can generate wrong geometry types.
|
|
455
417
|
* @param arrowTable Arrow table to update.
|
|
456
|
-
* @param
|
|
457
|
-
* @param addWKBMetadata A map with field names that usually used to store WKB geometry.
|
|
418
|
+
* @param geoarrowMetadata A map with field names that usually used to store geoarrow geometry.
|
|
458
419
|
*/
|
|
459
420
|
(0, _defineProperty2["default"])(KeplerGlDuckDbTable, "getFileProcessor", function (data, inputFormat) {
|
|
460
421
|
var processor;
|
|
461
422
|
var format;
|
|
462
423
|
if (inputFormat === _constants.DATASET_FORMATS.arrow || (0, _processors.isArrowData)(data)) {
|
|
463
424
|
format = _constants.DATASET_FORMATS.arrow;
|
|
464
|
-
// TODO injest arrow files from disk without loaders
|
|
465
425
|
processor = _processors.processArrowBatches;
|
|
466
426
|
} else if (inputFormat === _constants.DATASET_FORMATS.keplergl || (0, _processors.isKeplerGlMap)(data)) {
|
|
467
427
|
format = _constants.DATASET_FORMATS.keplergl;
|
|
@@ -480,109 +440,41 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
480
440
|
};
|
|
481
441
|
});
|
|
482
442
|
(0, _defineProperty2["default"])(KeplerGlDuckDbTable, "getInputDataValidator", function () {
|
|
443
|
+
// In DuckDB mode data is validated later during import.
|
|
483
444
|
return function (d) {
|
|
484
445
|
return d;
|
|
485
446
|
};
|
|
486
447
|
});
|
|
487
448
|
var restoreGeoarrowMetadata = /*#__PURE__*/function () {
|
|
488
|
-
var
|
|
489
|
-
return _regenerator["default"].wrap(function
|
|
490
|
-
while (1) switch (
|
|
449
|
+
var _ref6 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(arrowTable, geoarrowMetadata) {
|
|
450
|
+
return _regenerator["default"].wrap(function _callee7$(_context7) {
|
|
451
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
491
452
|
case 0:
|
|
492
453
|
arrowTable.schema.fields.forEach(function (f) {
|
|
493
|
-
if (arrow.DataType.isBinary(f.type) &&
|
|
494
|
-
f.metadata.set(
|
|
454
|
+
if (arrow.DataType.isBinary(f.type) && geoarrowMetadata[f.name]) {
|
|
455
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, geoarrowMetadata[f.name]);
|
|
495
456
|
} else if ((0, _duckdbTableUtils.isGeoArrowPoint)(f.type)) {
|
|
496
|
-
f.metadata.set(
|
|
457
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.POINT);
|
|
497
458
|
} else if ((0, _duckdbTableUtils.isGeoArrowLineString)(f.type)) {
|
|
498
|
-
f.metadata.set(
|
|
459
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.LINESTRING);
|
|
499
460
|
} else if ((0, _duckdbTableUtils.isGeoArrowPolygon)(f.type)) {
|
|
500
|
-
f.metadata.set(
|
|
461
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.POLYGON);
|
|
501
462
|
} else if ((0, _duckdbTableUtils.isGeoArrowMultiPoint)(f.type)) {
|
|
502
|
-
f.metadata.set(
|
|
463
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.MULTIPOINT);
|
|
503
464
|
} else if ((0, _duckdbTableUtils.isGeoArrowMultiLineString)(f.type)) {
|
|
504
|
-
f.metadata.set(
|
|
465
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.MULTILINESTRING);
|
|
505
466
|
} else if ((0, _duckdbTableUtils.isGeoArrowMultiPolygon)(f.type)) {
|
|
506
|
-
f.metadata.set(
|
|
467
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.MULTIPOLYGON);
|
|
507
468
|
}
|
|
508
469
|
});
|
|
509
470
|
case 1:
|
|
510
471
|
case "end":
|
|
511
|
-
return
|
|
512
|
-
}
|
|
513
|
-
}, _callee8);
|
|
514
|
-
}));
|
|
515
|
-
return function restoreGeoarrowMetadata(_x9, _x10, _x11) {
|
|
516
|
-
return _ref7.apply(this, arguments);
|
|
517
|
-
};
|
|
518
|
-
}();
|
|
519
|
-
|
|
520
|
-
/**
|
|
521
|
-
* For all binary columns tries to transform geometry from DuckDB's internal format into proper WKB.
|
|
522
|
-
* @param props
|
|
523
|
-
* @returns A map of fields that should be transformed to valid WKB.
|
|
524
|
-
*/
|
|
525
|
-
var tryST_AsWKB = /*#__PURE__*/function () {
|
|
526
|
-
var _ref8 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(props) {
|
|
527
|
-
var c, tableName, resultWithSchema, binaryColumns, canCastST_asWKB, _iterator, _step, column, columnName, query;
|
|
528
|
-
return _regenerator["default"].wrap(function _callee9$(_context9) {
|
|
529
|
-
while (1) switch (_context9.prev = _context9.next) {
|
|
530
|
-
case 0:
|
|
531
|
-
c = props.c, tableName = props.tableName;
|
|
532
|
-
_context9.next = 3;
|
|
533
|
-
return c.query("\n SELECT * FROM '".concat(tableName, "' LIMIT 0;\n "));
|
|
534
|
-
case 3:
|
|
535
|
-
resultWithSchema = _context9.sent;
|
|
536
|
-
binaryColumns = resultWithSchema.schema.fields.filter(function (f) {
|
|
537
|
-
return arrow.DataType.isBinary(f.type);
|
|
538
|
-
});
|
|
539
|
-
canCastST_asWKB = {};
|
|
540
|
-
_iterator = _createForOfIteratorHelper(binaryColumns);
|
|
541
|
-
_context9.prev = 7;
|
|
542
|
-
_iterator.s();
|
|
543
|
-
case 9:
|
|
544
|
-
if ((_step = _iterator.n()).done) {
|
|
545
|
-
_context9.next = 24;
|
|
546
|
-
break;
|
|
547
|
-
}
|
|
548
|
-
column = _step.value;
|
|
549
|
-
_context9.prev = 11;
|
|
550
|
-
columnName = column.name;
|
|
551
|
-
query = "SELECT * EXCLUDE ".concat(columnName, ", ST_AsWKB(").concat(columnName, ") as ").concat(columnName, " FROM '").concat(tableName, "' LIMIT 1;");
|
|
552
|
-
_context9.next = 16;
|
|
553
|
-
return c.query(query);
|
|
554
|
-
case 16:
|
|
555
|
-
canCastST_asWKB[column.name] = true;
|
|
556
|
-
_context9.next = 22;
|
|
557
|
-
break;
|
|
558
|
-
case 19:
|
|
559
|
-
_context9.prev = 19;
|
|
560
|
-
_context9.t0 = _context9["catch"](11);
|
|
561
|
-
canCastST_asWKB[column.name] = false;
|
|
562
|
-
case 22:
|
|
563
|
-
_context9.next = 9;
|
|
564
|
-
break;
|
|
565
|
-
case 24:
|
|
566
|
-
_context9.next = 29;
|
|
567
|
-
break;
|
|
568
|
-
case 26:
|
|
569
|
-
_context9.prev = 26;
|
|
570
|
-
_context9.t1 = _context9["catch"](7);
|
|
571
|
-
_iterator.e(_context9.t1);
|
|
572
|
-
case 29:
|
|
573
|
-
_context9.prev = 29;
|
|
574
|
-
_iterator.f();
|
|
575
|
-
return _context9.finish(29);
|
|
576
|
-
case 32:
|
|
577
|
-
return _context9.abrupt("return", canCastST_asWKB);
|
|
578
|
-
case 33:
|
|
579
|
-
case "end":
|
|
580
|
-
return _context9.stop();
|
|
472
|
+
return _context7.stop();
|
|
581
473
|
}
|
|
582
|
-
},
|
|
474
|
+
}, _callee7);
|
|
583
475
|
}));
|
|
584
|
-
return function
|
|
585
|
-
return
|
|
476
|
+
return function restoreGeoarrowMetadata(_x7, _x8) {
|
|
477
|
+
return _ref6.apply(this, arguments);
|
|
586
478
|
};
|
|
587
479
|
}();
|
|
588
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfdGFibGUiLCJfcHJvY2Vzc29ycyIsIl9pbml0IiwiX2RhdGFQcm9jZXNzb3IiLCJfZHVja2RiVGFibGVVdGlscyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiRFVDS0RCX0dFT01fQ09MVU1OIiwiRFVDS0RCX1dLQl9DT0xVTU4iLCJLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OIiwiU1VHR0VTVEVEX0dFT01fQ09MVU1OUyIsInJlc3RvcmVBcnJvd1RhYmxlIiwiY29sdW1ucyIsImZpZWxkcyIsImNyZWFPcHRzIiwibWFwIiwiZmllbGQiLCJpbmRleCIsIlRhYmxlIiwiZHJvcElmVGFibGVFeGlzdHMiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJjIiwidGFibGVOYW1lIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwicXVlcnkiLCJjb25jYXQiLCJ0MCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsIl94MiIsIktlcGxlckdsRHVja0RiVGFibGUiLCJleHBvcnRzIiwiX0tlcGxlclRhYmxlIiwicHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJfaW1wb3J0Um93RGF0YSIsIl9jYWxsZWUyIiwiX3JlZjIiLCJkYXRhIiwiZGIiLCJyb3dzIiwicm93c0ZvckRiIiwiY3JlYXRlVGFibGVTcWwiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJyb3ciLCJuZXdSb3ciLCJyZWdpc3RlckZpbGVUZXh0IiwiaWQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVkdWNlIiwiYWNjIiwiZHVja0RCQ29sdW1uVHlwZSIsImxhYmVsIiwibG9nIiwiaW1wb3J0Um93RGF0YSIsIl94MyIsIl9pbXBvcnRHZW9Kc29uRGF0YSIsIl9jYWxsZWUzIiwiX3JlZjMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJhYnJ1cHQiLCJhZGRXS0JNZXRhZGF0YSIsImltcG9ydEdlb0pzb25EYXRhIiwiX3g0IiwiX2ltcG9ydEFycm93RGF0YSIsIl9jYWxsZWU0IiwiX3JlZjQiLCJhcnJvd1RhYmxlIiwic2V0dXBTcWwiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJjb2xzIiwiaW5zZXJ0QXJyb3dUYWJsZSIsInVzZU5ld0ZpZWxkcyIsImltcG9ydEFycm93RGF0YSIsIl94NSIsIl9jcmVhdGVUYWJsZUFuZEdldEFycm93IiwiX2NhbGxlZTUiLCJmb3JtYXQiLCJfZGF0YSRyb3dzIiwiX2RhdGEkcm93czIiLCJfZGF0YSRyb3dzMyIsIl9kYXRhJGNvbHMiLCJpbXBvcnREZXRhaWxzIiwiX2RhdGEkZmllbGRzIiwiX3JlZjUiLCJfcmVmNSRhZGRXS0JNZXRhZGF0YSIsIl9yZWY1JHVzZU5ld0ZpZWxkcyIsImNhbkNhc3RTVF9hc1dLQiIsImdldEFycm93UXVlcnkiLCJhcnJvd1Jlc3VsdCIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsImdldER1Y2tEQiIsInNlbnQiLCJjb25uZWN0IiwibWV0YWRhdGEiLCJfdHlwZW9mMiIsIkRBVEFTRVRfRk9STUFUUyIsInR5cGUiLCJnZW9qc29uIiwiVmVjdG9yIiwidHJ5U1RfQXNXS0IiLCJyZXN0b3JlR2VvYXJyb3dNZXRhZGF0YSIsImFycm93U2NoZW1hVG9GaWVsZHMiLCJzY2hlbWEiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwibnVtQ29scyIsImdldENoaWxkQXQiLCJjb2wiLCJjbG9zZSIsImNyZWF0ZVRhYmxlQW5kR2V0QXJyb3ciLCJfeDYiLCJfaW1wb3J0RGF0YSIsIl9jYWxsZWU2IiwiX3JlZjYiLCJfeWllbGQkdGhpcyRjcmVhdGVUYWIiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJEYXRhc2V0VHlwZSIsIlZFQ1RPUl9USUxFIiwiaW1wb3J0RGF0YSIsIl94NyIsIl91cGRhdGUiLCJfY2FsbGVlNyIsIl95aWVsZCR0aGlzJGNyZWF0ZVRhYjIiLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJ1cGRhdGUiLCJfeDgiLCJLZXBsZXJUYWJsZSIsImlucHV0Rm9ybWF0IiwicHJvY2Vzc29yIiwiaXNBcnJvd0RhdGEiLCJwcm9jZXNzQXJyb3dCYXRjaGVzIiwia2VwbGVyZ2wiLCJpc0tlcGxlckdsTWFwIiwicHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYiIsImlzUm93T2JqZWN0IiwicHJvY2Vzc0NzdlJvd09iamVjdCIsImlzR2VvSnNvbiIsInByb2Nlc3NHZW9qc29uIiwiZCIsIl9yZWY3IiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJEYXRhVHlwZSIsImlzQmluYXJ5IiwiaXNHZW9BcnJvd1BvaW50IiwiaXNHZW9BcnJvd0xpbmVTdHJpbmciLCJpc0dlb0Fycm93UG9seWdvbiIsImlzR2VvQXJyb3dNdWx0aVBvaW50IiwiaXNHZW9BcnJvd011bHRpTGluZVN0cmluZyIsImlzR2VvQXJyb3dNdWx0aVBvbHlnb24iLCJfeDkiLCJfeDEwIiwiX3gxMSIsIl9yZWY4IiwiX2NhbGxlZTkiLCJyZXN1bHRXaXRoU2NoZW1hIiwiYmluYXJ5Q29sdW1ucyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY29sdW1uIiwiY29sdW1uTmFtZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsInQxIiwiZmluaXNoIiwiX3gxMiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YWJsZS9kdWNrZGItdGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCB7QXN5bmNEdWNrREIsIEFzeW5jRHVja0RCQ29ubmVjdGlvbn0gZnJvbSAnQGR1Y2tkYi9kdWNrZGItd2FzbSc7XG5cbmltcG9ydCB7RGF0YXNldFR5cGUsIERBVEFTRVRfRk9STUFUU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge0ZpZWxkLCBQcm90b0RhdGFzZXRGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBhcnJvd1NjaGVtYVRvRmllbGRzLFxuICBpc0Fycm93RGF0YSxcbiAgaXNHZW9Kc29uLFxuICBpc0tlcGxlckdsTWFwLFxuICBpc1Jvd09iamVjdCxcbiAgcHJvY2Vzc0Fycm93QmF0Y2hlc1xufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge2dldER1Y2tEQn0gZnJvbSAnLi4vaW5pdCc7XG5pbXBvcnQge1xuICBwcm9jZXNzQ3N2Um93T2JqZWN0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYixcbiAgUHJvY2Vzc29yUmVzdWx0XG59IGZyb20gJy4uL3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuXG5pbXBvcnQge1xuICBpc0dlb0Fycm93UG9pbnQsXG4gIGlzR2VvQXJyb3dMaW5lU3RyaW5nLFxuICBpc0dlb0Fycm93UG9seWdvbixcbiAgaXNHZW9BcnJvd011bHRpUG9pbnQsXG4gIGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcsXG4gIGlzR2VvQXJyb3dNdWx0aVBvbHlnb25cbn0gZnJvbSAnLi9kdWNrZGItdGFibGUtdXRpbHMnO1xuXG4vLyBUT0RPIHVzZSBmaWxlcyBmcm9tIGRpc2sgb3IgdXJsIGRpcmVjdGx5LCB3aXRob3V0IHBhcnNpbmcgYnkgbG9hZGVycyBhbmQgdGhlbiBpbmdlY3Rpb24gaW50byBEZWNrRGJcblxuLyoqXG4gKiBEZWZhdWx0IER1Y2tEYiBnZW9tZXRyeSBjb2x1bW5zIGNyZWF0ZWQgYnkgU1RfUkVBRFxuICovXG5jb25zdCBEVUNLREJfR0VPTV9DT0xVTU4gPSAnZ2VvbSc7XG5jb25zdCBEVUNLREJfV0tCX0NPTFVNTiA9ICd3a2JfZ2VvbWV0cnknO1xuXG4vKipcbiBEZWZhdWx0IGNvbHVtbiBuYW1lIGZvciBwcm9jZXNzZWQgZ2VvanNvbiBpbiBLZXBsZXIuXG4gVXNlIHRoaXMgbmFtZSB0byByZW5hbWUgZGVmYXVsdCAnZ2VvbScgY29sdW1uIGZyb20gRHVja0RiXG4gaW4gb3JkZXIgdG8gc3VwcG9ydCBLZXBsZXIgbWFwcyBzYXZlZCBiZWZvcmUgaW50cm9kdWN0aW9uIG9mIER1Y2tEYiBwbHVnaW4uXG4gKi9cbmNvbnN0IEtFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU4gPSAnX2dlb2pzb24nO1xuXG4vKipcbiAqIE5hbWVzIG9mIGNvbHVtbnMgdGhhdCBtb3N0IGxpa2VseSBjb250YWluIGJpbmFyeSB3a2IgZ2VvbWV0cnlcbiAqL1xuY29uc3QgU1VHR0VTVEVEX0dFT01fQ09MVU1OUyA9IHtcbiAgW0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU5dOiB0cnVlLFxuICBbRFVDS0RCX0dFT01fQ09MVU1OXTogdHJ1ZSxcbiAgZ2VvbWV0cnk6IHRydWVcbn07XG5cbnR5cGUgSW1wb3J0RGF0YVRvRHVja1Byb3BzID0ge1xuICBkYXRhOiBQcm9jZXNzb3JSZXN1bHQ7XG4gIGRiOiBBc3luY0R1Y2tEQjtcbiAgYzogQXN5bmNEdWNrREJDb25uZWN0aW9uO1xufTtcblxudHlwZSBJbXBvcnREYXRhVG9EdWNrUmVzdWx0ID0ge1xuICAvLyBEdWNrRGIgZHJvcHMgZ2VvYXJyb3cgbWV0YWRhdGEsIHNvIHRyeSB0byBwcmVzZXJ2ZSBzb21ldGluZ1xuICBhZGRXS0JNZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAvLyBVc2UgZmllbGRzIGZyb20gYXJyb3cgdGFibGUgZXZlbiBpZiBmaWVsZHMgYXJlIHByb3ZpZGVkXG4gIHVzZU5ld0ZpZWxkcz86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyb3cgdGFibGUgZnJvbSBhcnJvdyB2ZWN0b3JzIGFuZCBmaWVsZHMuXG4gKiBAcGFyYW0gY29sdW1ucyBBbiBhcnJheSBvZiBhcnJvdyB2ZWN0b3JzLlxuICogQHBhcmFtIGZpZWxkcyBBbiBhcnJheSBvZiBmaWVsZHMgcGVyIGFycm93IHZlY3Rvci5cbiAqIEByZXR1cm5zIEFuIGFycm93IHRhYmxlLlxuICovXG4vLyBUT0RPOiBjb25zaWRlciB1c2luZyBvcmlnaW5hbCBkcmFnJmRyb3BwZWQgYXJyb3cgdGFibGUsIGFzIGl0IGNvdWxkIGNvbnRhaW4gZXh0cmEgbWV0YWRhdGEsIG5vdCBwYXNzZWQgdG8gdGhlIGZpZWxkcy5cbmNvbnN0IHJlc3RvcmVBcnJvd1RhYmxlID0gKGNvbHVtbnM6IGFycm93LlZlY3RvcltdLCBmaWVsZHM6IFByb3RvRGF0YXNldEZpZWxkW10pID0+IHtcbiAgY29uc3QgY3JlYU9wdHMgPSB7fTtcbiAgZmllbGRzLm1hcCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgY3JlYU9wdHNbZmllbGQubmFtZV0gPSBjb2x1bW5zW2luZGV4XTtcbiAgfSk7XG4gIHJldHVybiBuZXcgYXJyb3cuVGFibGUoY3JlYU9wdHMpO1xufTtcblxuY29uc3QgZHJvcElmVGFibGVFeGlzdHMgPSBhc3luYyAoYzogQXN5bmNEdWNrREJDb25uZWN0aW9uLCB0YWJsZU5hbWU6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGF3YWl0IGMucXVlcnkoYERST1AgVEFCTEUgSUYgRVhJU1RTIFwiJHt0YWJsZU5hbWV9XCI7YCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRHJvcHBpbmcgdGFibGUgZmFpbGVkJywgdGFibGVOYW1lLCBlcnJvcik7XG4gIH1cbn07XG5cbmV4cG9ydCBjbGFzcyBLZXBsZXJHbER1Y2tEYlRhYmxlIGV4dGVuZHMgS2VwbGVyVGFibGUge1xuICBkZWNsYXJlIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIGRlY2xhcmUgbGFiZWw6IHN0cmluZztcbiAgZGVjbGFyZSB0eXBlOiBzdHJpbmc7XG4gIGRlY2xhcmUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBhc3luYyBpbXBvcnRSb3dEYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7ZmllbGRzLCByb3dzfSA9IGRhdGE7XG5cbiAgICAgIC8vIERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbCBsb2FkcyBkYXRhIGFzIGFueVtdW10gaW5zdGVhZCBvZiBbe31dXG4gICAgICAvLyBUT0RPIHBvdGVudGlhbCBtZW1vcnkgdXNhZ2UgZXhwbG9zaW9uOiBvcmlnaW5hbCBkYXRhLCBuZXcgb2JqZWN0IGFuZCB0aGVuIER1Y2tEYiB0YWJsZVxuICAgICAgY29uc3Qgcm93c0ZvckRiID0gQXJyYXkuaXNBcnJheShyb3dzWzBdKVxuICAgICAgICA/IHJvd3MubWFwKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7fTtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkc1tpbmRleF0ubmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgICB9KVxuICAgICAgICA6IHJvd3M7XG5cbiAgICAgIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQodGhpcy5pZCwgSlNPTi5zdHJpbmdpZnkocm93c0ZvckRiKSk7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBmaWVsZHMucmVkdWNlKChhY2MsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE8gZXh0ZW5kIGZpZWxkcyB0byBjb250YWluIGR1Y2tEQkNvbHVtblR5cGVcbiAgICAgICAgcmV0dXJuIGAke2FjY30ke2luZGV4ID4gMCA/ICcsJyA6ICcnfSAnJHtmaWVsZC5uYW1lfSc6ICcke2ZpZWxkLmR1Y2tEQkNvbHVtblR5cGV9J2A7XG4gICAgICB9LCAnJyk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIEFTXG4gICAgICAgIFNFTEVDVCAqXG4gICAgICAgIEZST00gcmVhZF9qc29uKCcke3RoaXMuaWR9JyxcbiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IHske2NvbHVtbnN9fSk7XG4gICAgICBgO1xuICAgICAgYXdhaXQgYy5xdWVyeShjcmVhdGVUYWJsZVNxbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdpbXBvcnRSb3dEYXRhJywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGltcG9ydEdlb0pzb25EYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8SW1wb3J0RGF0YVRvRHVja1Jlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7cm93c30gPSBkYXRhO1xuICAgICAgYXdhaXQgZGIucmVnaXN0ZXJGaWxlVGV4dCh0aGlzLmlkLCBKU09OLnN0cmluZ2lmeShyb3dzKSk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBpbnN0YWxsIHNwYXRpYWw7XG4gICAgICAgIGxvYWQgc3BhdGlhbDtcbiAgICAgICAgQ1JFQVRFIFRBQkxFICcke3RoaXMubGFiZWx9JyBBUyBcbiAgICAgICAgU0VMRUNUICpcbiAgICAgICAgRlJPTSBTVF9SRUFEKCcke3RoaXMuaWR9Jywga2VlcF93a2IgPSBUUlVFKTtcbiAgICAgICAgQUxURVIgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIFJFTkFNRSAnJHtEVUNLREJfV0tCX0NPTFVNTn0nIFRPICcke0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU59JztcbiAgICAgIGA7XG4gICAgICBhd2FpdCBjLnF1ZXJ5KGNyZWF0ZVRhYmxlU3FsKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignaW1wb3J0R2VvSnNvbkRhdGEnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZFdLQk1ldGFkYXRhOiB7W0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU5dOiB0cnVlfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBpbXBvcnRBcnJvd0RhdGEoe2RhdGEsIGRiLCBjfTogSW1wb3J0RGF0YVRvRHVja1Byb3BzKTogUHJvbWlzZTxJbXBvcnREYXRhVG9EdWNrUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIDEpIGRhdGEucm93cyBjb250YWlucyBhbiBhcnJvdyB0YWJsZSBjcmVhdGVkIGJ5IEFkZCB0byBNYXAgZGF0YSBmcm9tIER1Y2tEYiBxdWVyeS5cbiAgICAgIC8vIDIpIGFycm93IHRhYmxlIGlzIGluIGNvbHMgJiBmaWVsZHMgd2hlbiBhIGZpbGUgaXMgZHJhZ2dlZCAmIGRyb3BwZWQgaW50byBBZGQgRGF0YSBUbyBNYXAgZGlhbG9nLlxuICAgICAgY29uc3QgYXJyb3dUYWJsZSA9XG4gICAgICAgIGRhdGEucm93cyBpbnN0YW5jZW9mIGFycm93LlRhYmxlXG4gICAgICAgICAgPyBkYXRhLnJvd3NcbiAgICAgICAgICA6IHJlc3RvcmVBcnJvd1RhYmxlKGRhdGEuY29scyB8fCBbXSwgZGF0YS5maWVsZHMpO1xuXG4gICAgICBjb25zdCBzZXR1cFNxbCA9IGBcbiAgICAgICAgaW5zdGFsbCBzcGF0aWFsO1xuICAgICAgICBsb2FkIHNwYXRpYWw7XG4gICAgICBgO1xuICAgICAgYXdhaXQgYy5xdWVyeShzZXR1cFNxbCk7XG4gICAgICBhd2FpdCBjLmluc2VydEFycm93VGFibGUoYXJyb3dUYWJsZSwge25hbWU6IHRoaXMubGFiZWx9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gS25vd24gaXNzdWVzOlxuICAgICAgLy8gMSkgQXJyb3cgVHlwZSB3aXRoIGV4dGVuc2lvbiBuYW1lOiBnZW9hcnJvdy5wb2ludCBhbmQgZm9ybWF0OiArdzoyIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIER1Y2tEQi5cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ltcG9ydEFycm93RGF0YScsIGVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWRkV0tCTWV0YWRhdGE6IHsuLi5TVUdHRVNURURfR0VPTV9DT0xVTU5TfSxcbiAgICAgIC8vIHVzZSBtZXRhZGF0YSBmcm9tIGFycm93IHRhYmxlXG4gICAgICB1c2VOZXdGaWVsZHM6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSBmcm9tIGRhdGEsIHJldHVybnMgYW4gYXJyb3cgdGFibGUgd2l0aCB0aGUgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZmllbGRzOiBGaWVsZFtdLCBjb2xzOiBhbnlbXX0+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk6IFByb21pc2U8e2ZpZWxkczogYW55W107IGNvbHM6IGFycm93LlZlY3RvcltdfT4ge1xuICAgIGNvbnN0IGRiID0gYXdhaXQgZ2V0RHVja0RCKCk7XG4gICAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRoaXMubGFiZWw7XG4gICAgYXdhaXQgZHJvcElmVGFibGVFeGlzdHMoYywgdGFibGVOYW1lKTtcblxuICAgIGxldCBmb3JtYXQgPSB0aGlzLm1ldGFkYXRhLmZvcm1hdDtcbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgLy8gZm9ybWF0IGlzIG1pc3Npbmcgd2hlbiB3ZSBsb2FkIEtlcGxlci5nbCBleGFtcGxlc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5yb3dzPy5bMF0pIHx8IHR5cGVvZiBkYXRhLnJvd3M/LlswXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLnJvdztcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5yb3dzPy50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5nZW9qc29uO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmNvbHM/LlswXSBpbnN0YW5jZW9mIGFycm93LlZlY3Rvcikge1xuICAgICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGltcG9ydERldGFpbHM6IEltcG9ydERhdGFUb0R1Y2tSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLnJvdykge1xuICAgICAgYXdhaXQgdGhpcy5pbXBvcnRSb3dEYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbikge1xuICAgICAgaW1wb3J0RGV0YWlscyA9IGF3YWl0IHRoaXMuaW1wb3J0R2VvSnNvbkRhdGEoe2RhdGEsIGRiLCBjfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5hcnJvdykge1xuICAgICAgaW1wb3J0RGV0YWlscyA9IGF3YWl0IHRoaXMuaW1wb3J0QXJyb3dEYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbnJlY29nbml6ZWQgZm9ybWF0JywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBsZXQgZmllbGRzOiBGaWVsZFtdID0gW107XG4gICAgbGV0IGNvbHM6IGFycm93LlZlY3RvcltdID0gW107XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge2FkZFdLQk1ldGFkYXRhID0ge30sIHVzZU5ld0ZpZWxkcyA9IGZhbHNlfSA9IGltcG9ydERldGFpbHMgfHwge307XG5cbiAgICAgIC8vIFRyeSB0byBmaWd1cmUgb3V0IHdoZXRoZXIgZ2VvbWV0cnkgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIGJ5IFNUX0FzV0tCXG4gICAgICAvLyBUT0RPIGlmIGNhbkNhc3RTVF9hc1dLQiBjb250YWlucyBhbnkga2V5cyB0aGVuIGFkZCBTVF9Bc1dLQiB0byB0aGUgZm9sbG93aW5nIHF1ZXJ5XG4gICAgICBjb25zdCBjYW5DYXN0U1RfYXNXS0IgPSBhd2FpdCB0cnlTVF9Bc1dLQih7dGFibGVOYW1lLCBjfSk7XG5cbiAgICAgIGNvbnN0IGdldEFycm93UXVlcnkgPSBgU0VMRUNUICogRlJPTSAnJHt0YWJsZU5hbWV9JztgO1xuICAgICAgY29uc3QgYXJyb3dSZXN1bHQgPSBhd2FpdCBjLnF1ZXJ5KGdldEFycm93UXVlcnkpO1xuXG4gICAgICByZXN0b3JlR2VvYXJyb3dNZXRhZGF0YShhcnJvd1Jlc3VsdCwgY2FuQ2FzdFNUX2FzV0tCLCBhZGRXS0JNZXRhZGF0YSk7XG5cbiAgICAgIGZpZWxkcyA9IHVzZU5ld0ZpZWxkc1xuICAgICAgICA/IGFycm93U2NoZW1hVG9GaWVsZHMoYXJyb3dSZXN1bHQuc2NoZW1hKVxuICAgICAgICA6IGRhdGEuZmllbGRzID8/IGFycm93U2NoZW1hVG9GaWVsZHMoYXJyb3dSZXN1bHQuc2NoZW1hKTtcbiAgICAgIGNvbHMgPSBbLi4uQXJyYXkoYXJyb3dSZXN1bHQubnVtQ29scykua2V5cygpXVxuICAgICAgICAubWFwKGkgPT4gYXJyb3dSZXN1bHQuZ2V0Q2hpbGRBdChpKSlcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sKSBhcyBhcnJvdy5WZWN0b3JbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gS25vd24gaXNzdWVzOlxuICAgICAgLy8gMSkgU1RfQXNXS0IgYmluZGVyIGVycm9yLCBubyB0eXBlIG1hdGNoXG4gICAgICBjb25zb2xlLmVycm9yKCdEdWNrRGIgdGFibGU6IGJpbmFyeSBnZW9tZXRyeSBjb2x1bW4gdG8gd2tiJywgZXJyb3IpO1xuICAgIH1cblxuICAgIGF3YWl0IGMuY2xvc2UoKTtcblxuICAgIHJldHVybiB7ZmllbGRzLCBjb2xzfTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydERhdGEoe2RhdGF9OiB7ZGF0YTogUHJvY2Vzc29yUmVzdWx0fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFZlY3RvclRpbGUgaXMgYSBzcGVjaWFsIGNhc2UsIGlnbm9yZSBmb3Igbm93XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gRGF0YXNldFR5cGUuVkVDVE9SX1RJTEUpIHtcbiAgICAgIHN1cGVyLmltcG9ydERhdGEoe2RhdGE6IHsuLi5kYXRhLCByb3dzOiBbXX19KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7ZmllbGRzLCBjb2xzfSA9IGF3YWl0IHRoaXMuY3JlYXRlVGFibGVBbmRHZXRBcnJvdyhkYXRhKTtcblxuICAgIHN1cGVyLmltcG9ydERhdGEoe2RhdGE6IHtmaWVsZHMsIGNvbHMsIHJvd3M6IFtdfX0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKGRhdGEpIHtcbiAgICAvLyBWZWN0b3JUaWxlIGlzIGEgc3BlY2lhbCBjYXNlLCBpZ25vcmUgZm9yIG5vd1xuICAgIGlmICh0aGlzLnR5cGUgPT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFKSB7XG4gICAgICBzdXBlci5pbXBvcnREYXRhKHtkYXRhfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCB7Y29sc30gPSBhd2FpdCB0aGlzLmNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk7XG5cbiAgICByZXR1cm4gc3VwZXIudXBkYXRlKHtjb2xzLCByb3dzOiBbXSwgZmllbGRzOiBbXX0pO1xuICB9XG5cbiAgc3RhdGljIGdldEZpbGVQcm9jZXNzb3IgPSBmdW5jdGlvbiAoZGF0YTogYW55LCBpbnB1dEZvcm1hdD86IHN0cmluZykge1xuICAgIGxldCBwcm9jZXNzb3I7XG4gICAgbGV0IGZvcm1hdDtcbiAgICBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5hcnJvdyB8fCBpc0Fycm93RGF0YShkYXRhKSkge1xuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmFycm93O1xuICAgICAgLy8gVE9ETyBpbmplc3QgYXJyb3cgZmlsZXMgZnJvbSBkaXNrIHdpdGhvdXQgbG9hZGVyc1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0Fycm93QmF0Y2hlcztcbiAgICB9IGVsc2UgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2wgfHwgaXNLZXBsZXJHbE1hcChkYXRhKSkge1xuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmtlcGxlcmdsO1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYjtcbiAgICB9IGVsc2UgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMucm93IHx8IGlzUm93T2JqZWN0KGRhdGEpKSB7XG4gICAgICAvLyBjc3YgZmlsZSBnb2VzIGhlcmVcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5yb3c7XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzQ3N2Um93T2JqZWN0OyAvLyBkaXJlY3RseSBpbXBvcnQganNvbiBvYmplY3QgaW50byBkdWNrZGItd2FzbVxuICAgIH0gZWxzZSBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5nZW9qc29uIHx8IGlzR2VvSnNvbihkYXRhKSkge1xuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmdlb2pzb247XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzR2VvanNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHtwcm9jZXNzb3IsIGZvcm1hdH07XG4gIH07XG5cbiAgc3RhdGljIGdldElucHV0RGF0YVZhbGlkYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZCA9PiBkO1xuICB9O1xufVxuXG4vKipcbiAqIFRyeSB0byByZXN0b3JlIGdlb2Fycm93IG1ldGFkYXRhIGxvc3QgZHVyaW5nIER1Y2tEYiBpbmdlc3Rpb24uXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gZ2VuZXJhdGUgd3JvbmcgZ2VvbWV0cnkgdHlwZXMuXG4gKiBAcGFyYW0gYXJyb3dUYWJsZSBBcnJvdyB0YWJsZSB0byB1cGRhdGUuXG4gKiBAcGFyYW0gY2FuQ2FzdFNUX2FzV0tCIEEgbWFwIHdpdGggZmllbGRzIHRoYXQgYXJlIGxpa2VseSBpbiBEZWNrREIncyBpbnRlcm5hbCBXQksgZm9ybWF0LlxuICogQHBhcmFtIGFkZFdLQk1ldGFkYXRhIEEgbWFwIHdpdGggZmllbGQgbmFtZXMgdGhhdCB1c3VhbGx5IHVzZWQgdG8gc3RvcmUgV0tCIGdlb21ldHJ5LlxuICovXG5jb25zdCByZXN0b3JlR2VvYXJyb3dNZXRhZGF0YSA9IGFzeW5jIChcbiAgYXJyb3dUYWJsZTogYXJyb3cuVGFibGUsXG4gIGNhbkNhc3RTVF9hc1dLQjogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gIGFkZFdLQk1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPlxuKSA9PiB7XG4gIGFycm93VGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGYgPT4ge1xuICAgIGlmIChhcnJvdy5EYXRhVHlwZS5pc0JpbmFyeShmLnR5cGUpICYmIChhZGRXS0JNZXRhZGF0YVtmLm5hbWVdIHx8IGNhbkNhc3RTVF9hc1dLQltmLm5hbWVdKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoJ0FSUk9XOmV4dGVuc2lvbjpuYW1lJywgJ2dlb2Fycm93LndrYicpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd1BvaW50KGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KCdBUlJPVzpleHRlbnNpb246bmFtZScsICdnZW9hcnJvdy5wb2ludCcpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd0xpbmVTdHJpbmcoZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoJ0FSUk9XOmV4dGVuc2lvbjpuYW1lJywgJ2dlb2Fycm93LmxpbmVzdHJpbmcnKTtcbiAgICB9IGVsc2UgaWYgKGlzR2VvQXJyb3dQb2x5Z29uKGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KCdBUlJPVzpleHRlbnNpb246bmFtZScsICdnZW9hcnJvdy5wb2x5Z29uJyk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlQb2ludChmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldCgnQVJST1c6ZXh0ZW5zaW9uOm5hbWUnLCAnZ2VvYXJyb3cubXVsdGlwb2ludCcpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd011bHRpTGluZVN0cmluZyhmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldCgnQVJST1c6ZXh0ZW5zaW9uOm5hbWUnLCAnZ2VvYXJyb3cubXVsdGlsaW5lc3RyaW5nJyk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlQb2x5Z29uKGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KCdBUlJPVzpleHRlbnNpb246bmFtZScsICdnZW9hcnJvdy5tdWx0aXBvbHlnb24nKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBGb3IgYWxsIGJpbmFyeSBjb2x1bW5zIHRyaWVzIHRvIHRyYW5zZm9ybSBnZW9tZXRyeSBmcm9tIER1Y2tEQidzIGludGVybmFsIGZvcm1hdCBpbnRvIHByb3BlciBXS0IuXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zIEEgbWFwIG9mIGZpZWxkcyB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB0byB2YWxpZCBXS0IuXG4gKi9cbmNvbnN0IHRyeVNUX0FzV0tCID0gYXN5bmMgKHByb3BzOiB7dGFibGVOYW1lOiBzdHJpbmc7IGM6IEFzeW5jRHVja0RCQ29ubmVjdGlvbn0pID0+IHtcbiAgY29uc3Qge2MsIHRhYmxlTmFtZX0gPSBwcm9wcztcblxuICBjb25zdCByZXN1bHRXaXRoU2NoZW1hID0gYXdhaXQgYy5xdWVyeShgXG4gICAgICAgIFNFTEVDVCAqIEZST00gJyR7dGFibGVOYW1lfScgTElNSVQgMDtcbiAgICAgIGApO1xuICBjb25zdCBiaW5hcnlDb2x1bW5zID0gcmVzdWx0V2l0aFNjaGVtYS5zY2hlbWEuZmllbGRzLmZpbHRlcihmID0+IGFycm93LkRhdGFUeXBlLmlzQmluYXJ5KGYudHlwZSkpO1xuXG4gIGNvbnN0IGNhbkNhc3RTVF9hc1dLQjogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgYmluYXJ5Q29sdW1ucykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb2x1bW5OYW1lID0gY29sdW1uLm5hbWU7XG4gICAgICBjb25zdCBxdWVyeSA9IGBTRUxFQ1QgKiBFWENMVURFICR7Y29sdW1uTmFtZX0sIFNUX0FzV0tCKCR7Y29sdW1uTmFtZX0pIGFzICR7Y29sdW1uTmFtZX0gRlJPTSAnJHt0YWJsZU5hbWV9JyBMSU1JVCAxO2A7XG4gICAgICBhd2FpdCBjLnF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgY2FuQ2FzdFNUX2FzV0tCW2NvbHVtbi5uYW1lXSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNhbkNhc3RTVF9hc1dLQltjb2x1bW4ubmFtZV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2FuQ2FzdFNUX2FzV0tCO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLFdBQUEsR0FBQUgsT0FBQTtBQVNBLElBQUFJLEtBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGNBQUEsR0FBQUwsT0FBQTtBQU9BLElBQUFNLGlCQUFBLEdBQUFOLE9BQUE7QUFPOEIsU0FBQU8seUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEs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
|
|
480
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbml0IiwiX2RhdGFQcm9jZXNzb3IiLCJfZHVja2RiVGFibGVVdGlscyIsIl9kdWNrZGJUYWJsZVV0aWxzMiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJEVUNLREJfR0VPTV9DT0xVTU4iLCJEVUNLREJfV0tCX0NPTFVNTiIsIktFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU4iLCJTVUdHRVNURURfR0VPTV9DT0xVTU5TIiwiR0VPQVJST1dfRVhURU5TSU9OUyIsIldLQiIsIktlcGxlckdsRHVja0RiVGFibGUiLCJleHBvcnRzIiwiX0tlcGxlclRhYmxlIiwicHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsIl9pbXBvcnRSb3dEYXRhIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJfcmVmIiwiZGF0YSIsImRiIiwiYyIsImZpZWxkcyIsInJvd3MiLCJyb3dzRm9yRGIiLCJjb2x1bW5zIiwiY3JlYXRlVGFibGVTcWwiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwicm93IiwibmV3Um93IiwiaW5kZXgiLCJuYW1lIiwicmVnaXN0ZXJGaWxlVGV4dCIsImlkIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwiY29uY2F0IiwiZHVja0RCQ29sdW1uVHlwZSIsImxhYmVsIiwicXVlcnkiLCJ0MCIsImNvbnNvbGUiLCJsb2ciLCJzdG9wIiwiaW1wb3J0Um93RGF0YSIsIl94IiwiX2ltcG9ydEdlb0pzb25EYXRhIiwiX2NhbGxlZTIiLCJfcmVmMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImVycm9yIiwiYWJydXB0IiwiZ2VvYXJyb3dNZXRhZGF0YSIsImltcG9ydEdlb0pzb25EYXRhIiwiX3gyIiwiX2ltcG9ydEFycm93RGF0YSIsIl9jYWxsZWUzIiwiX3JlZjMiLCJhZGp1c3RlZE1ldGFkYXRhIiwiYXJyb3dUYWJsZSIsInNldHVwU3FsIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiVGFibGUiLCJyZXN0b3JlQXJyb3dUYWJsZSIsImNvbHMiLCJhcnJvd1NjaGVtYSIsInJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyIsImluc2VydEFycm93VGFibGUiLCJyZXN0b3JlVW5zdXBwb3J0ZWRFeHRlbnNpb25zIiwidXNlTmV3RmllbGRzIiwiaW1wb3J0QXJyb3dEYXRhIiwiX3gzIiwiX2NyZWF0ZVRhYmxlQW5kR2V0QXJyb3ciLCJfY2FsbGVlNCIsInRhYmxlTmFtZSIsImZvcm1hdCIsIl9kYXRhJHJvd3MiLCJfZGF0YSRyb3dzMiIsIl9kYXRhJHJvd3MzIiwiX2RhdGEkY29scyIsImltcG9ydERldGFpbHMiLCJfZGF0YSRmaWVsZHMiLCJfcmVmNCIsIl9yZWY0JGdlb2Fycm93TWV0YWRhdCIsIl9yZWY0JHVzZU5ld0ZpZWxkcyIsImR1Y2tEYkNvbHVtbnMiLCJ0YWJsZUR1Y2tEQlR5cGVzIiwiY29sdW1uc1RvQ29udmVydFRvV0tCIiwiYWRqdXN0ZWRRdWVyeSIsImFycm93UmVzdWx0IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0RHVja0RCIiwic2VudCIsImNvbm5lY3QiLCJkcm9wVGFibGVJZkV4aXN0cyIsIm1ldGFkYXRhIiwiX3R5cGVvZjIiLCJEQVRBU0VUX0ZPUk1BVFMiLCJ0eXBlIiwiZ2VvanNvbiIsIlZlY3RvciIsImdldER1Y2tEQkNvbHVtblR5cGVzIiwiZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAiLCJnZXRHZW9tZXRyeUNvbHVtbnMiLCJjb25zdHJ1Y3RTVF9hc1dLQlF1ZXJ5IiwicmVzdG9yZUdlb2Fycm93TWV0YWRhdGEiLCJhcnJvd1NjaGVtYVRvRmllbGRzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm51bUNvbHMiLCJnZXRDaGlsZEF0IiwiY29sIiwiY2xvc2UiLCJjcmVhdGVUYWJsZUFuZEdldEFycm93IiwiX3g0IiwiX2ltcG9ydERhdGEiLCJfY2FsbGVlNSIsIl9yZWY1IiwiX3lpZWxkJHRoaXMkY3JlYXRlVGFiIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiRGF0YXNldFR5cGUiLCJWRUNUT1JfVElMRSIsImltcG9ydERhdGEiLCJfeDUiLCJfdXBkYXRlIiwiX2NhbGxlZTYiLCJfeWllbGQkdGhpcyRjcmVhdGVUYWIyIiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwidXBkYXRlIiwiX3g2IiwiS2VwbGVyVGFibGUiLCJpbnB1dEZvcm1hdCIsInByb2Nlc3NvciIsImlzQXJyb3dEYXRhIiwicHJvY2Vzc0Fycm93QmF0Y2hlcyIsImtlcGxlcmdsIiwiaXNLZXBsZXJHbE1hcCIsInByb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGIiLCJpc1Jvd09iamVjdCIsInByb2Nlc3NDc3ZSb3dPYmplY3QiLCJpc0dlb0pzb24iLCJwcm9jZXNzR2VvanNvbiIsImQiLCJfcmVmNiIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3Iiwic2NoZW1hIiwiZiIsIkRhdGFUeXBlIiwiaXNCaW5hcnkiLCJHRU9BUlJPV19NRVRBREFUQV9LRVkiLCJpc0dlb0Fycm93UG9pbnQiLCJQT0lOVCIsImlzR2VvQXJyb3dMaW5lU3RyaW5nIiwiTElORVNUUklORyIsImlzR2VvQXJyb3dQb2x5Z29uIiwiUE9MWUdPTiIsImlzR2VvQXJyb3dNdWx0aVBvaW50IiwiTVVMVElQT0lOVCIsImlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmciLCJNVUxUSUxJTkVTVFJJTkciLCJpc0dlb0Fycm93TXVsdGlQb2x5Z29uIiwiTVVMVElQT0xZR09OIiwiX3g3IiwiX3g4Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RhYmxlL2R1Y2tkYi10YWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IHtBc3luY0R1Y2tEQiwgQXN5bmNEdWNrREJDb25uZWN0aW9ufSBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldFR5cGUsXG4gIERBVEFTRVRfRk9STUFUUyxcbiAgR0VPQVJST1dfRVhURU5TSU9OUyxcbiAgR0VPQVJST1dfTUVUQURBVEFfS0VZXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIGFycm93U2NoZW1hVG9GaWVsZHMsXG4gIGlzQXJyb3dEYXRhLFxuICBpc0dlb0pzb24sXG4gIGlzS2VwbGVyR2xNYXAsXG4gIGlzUm93T2JqZWN0LFxuICBwcm9jZXNzQXJyb3dCYXRjaGVzXG59IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge2dldER1Y2tEQn0gZnJvbSAnLi4vaW5pdCc7XG5pbXBvcnQge1xuICBwcm9jZXNzQ3N2Um93T2JqZWN0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYixcbiAgUHJvY2Vzc29yUmVzdWx0XG59IGZyb20gJy4uL3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuXG5pbXBvcnQge1xuICBpc0dlb0Fycm93UG9pbnQsXG4gIGlzR2VvQXJyb3dMaW5lU3RyaW5nLFxuICBpc0dlb0Fycm93UG9seWdvbixcbiAgaXNHZW9BcnJvd011bHRpUG9pbnQsXG4gIGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcsXG4gIGlzR2VvQXJyb3dNdWx0aVBvbHlnb25cbn0gZnJvbSAnLi9kdWNrZGItdGFibGUtdXRpbHMnO1xuXG5pbXBvcnQge1xuICBjb25zdHJ1Y3RTVF9hc1dLQlF1ZXJ5LFxuICBkcm9wVGFibGVJZkV4aXN0cyxcbiAgZ2V0RHVja0RCQ29sdW1uVHlwZXMsXG4gIGdldER1Y2tEQkNvbHVtblR5cGVzTWFwLFxuICBnZXRHZW9tZXRyeUNvbHVtbnMsXG4gIHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyxcbiAgcmVzdG9yZUFycm93VGFibGUsXG4gIHJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnNcbn0gZnJvbSAnLi4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcblxuLy8gVE9ETyB1c2UgZmlsZXMgZnJvbSBkaXNrIG9yIHVybCBkaXJlY3RseSwgd2l0aG91dCBwYXJzaW5nIGJ5IGxvYWRlcnMgYW5kIHRoZW4gaW5nZWN0aW9uIGludG8gRGVja0RiXG5cbi8qKlxuICogRGVmYXVsdCBEdWNrRGIgZ2VvbWV0cnkgY29sdW1ucyBjcmVhdGVkIGJ5IFNUX1JFQURcbiAqL1xuY29uc3QgRFVDS0RCX0dFT01fQ09MVU1OID0gJ2dlb20nO1xuY29uc3QgRFVDS0RCX1dLQl9DT0xVTU4gPSAnd2tiX2dlb21ldHJ5JztcblxuLyoqXG4gRGVmYXVsdCBjb2x1bW4gbmFtZSBmb3IgcHJvY2Vzc2VkIGdlb2pzb24gaW4gS2VwbGVyLlxuIFVzZSB0aGlzIG5hbWUgdG8gcmVuYW1lIGRlZmF1bHQgJ2dlb20nIGNvbHVtbiBmcm9tIER1Y2tEYlxuIGluIG9yZGVyIHRvIHN1cHBvcnQgS2VwbGVyIG1hcHMgc2F2ZWQgYmVmb3JlIGludHJvZHVjdGlvbiBvZiBEdWNrRGIgcGx1Z2luLlxuICovXG5jb25zdCBLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OID0gJ19nZW9qc29uJztcblxuLyoqXG4gKiBOYW1lcyBvZiBjb2x1bW5zIHRoYXQgbW9zdCBsaWtlbHkgY29udGFpbiBiaW5hcnkgd2tiIGdlb21ldHJ5XG4gKi9cbmNvbnN0IFNVR0dFU1RFRF9HRU9NX0NPTFVNTlMgPSB7XG4gIFtLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OXTogR0VPQVJST1dfRVhURU5TSU9OUy5XS0IsXG4gIFtEVUNLREJfR0VPTV9DT0xVTU5dOiBHRU9BUlJPV19FWFRFTlNJT05TLldLQixcbiAgZ2VvbWV0cnk6IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCXG59O1xuXG50eXBlIEltcG9ydERhdGFUb0R1Y2tQcm9wcyA9IHtcbiAgZGF0YTogUHJvY2Vzc29yUmVzdWx0ICYge2Fycm93U2NoZW1hOiBhcnJvdy5TY2hlbWF9O1xuICBkYjogQXN5bmNEdWNrREI7XG4gIGM6IEFzeW5jRHVja0RCQ29ubmVjdGlvbjtcbn07XG5cbnR5cGUgSW1wb3J0RGF0YVRvRHVja1Jlc3VsdCA9IHtcbiAgLy8gRHVja0RiIGRyb3BzIGdlb2Fycm93IG1ldGFkYXRhLCBzbyB0cnkgdG8gcHJlc2VydmUgYW5kIHRoZW4gcmVzdG9yZSB0aGUgZXh0ZW5zaW9uIG5hbWVcbiAgZ2VvYXJyb3dNZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8vIFVzZSBmaWVsZHMgZnJvbSBhcnJvdyB0YWJsZSBldmVuIGlmIGZpZWxkcyBhcmUgcHJvdmlkZWRcbiAgdXNlTmV3RmllbGRzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBLZXBsZXJHbER1Y2tEYlRhYmxlIGV4dGVuZHMgS2VwbGVyVGFibGUge1xuICBkZWNsYXJlIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIGRlY2xhcmUgbGFiZWw6IHN0cmluZztcbiAgZGVjbGFyZSB0eXBlOiBzdHJpbmc7XG4gIGRlY2xhcmUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBhc3luYyBpbXBvcnRSb3dEYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7ZmllbGRzLCByb3dzfSA9IGRhdGE7XG5cbiAgICAgIC8vIERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbCBsb2FkcyBkYXRhIGFzIGFueVtdW10gaW5zdGVhZCBvZiBbe31dXG4gICAgICAvLyBUT0RPIHBvdGVudGlhbCBtZW1vcnkgdXNhZ2UgZXhwbG9zaW9uOiBvcmlnaW5hbCBkYXRhLCBuZXcgb2JqZWN0IGFuZCB0aGVuIER1Y2tEYiB0YWJsZVxuICAgICAgY29uc3Qgcm93c0ZvckRiID0gQXJyYXkuaXNBcnJheShyb3dzWzBdKVxuICAgICAgICA/IHJvd3MubWFwKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7fTtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkc1tpbmRleF0ubmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgICB9KVxuICAgICAgICA6IHJvd3M7XG5cbiAgICAgIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQodGhpcy5pZCwgSlNPTi5zdHJpbmdpZnkocm93c0ZvckRiKSk7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBmaWVsZHMucmVkdWNlKChhY2MsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE8gZXh0ZW5kIGZpZWxkcyB0byBjb250YWluIGR1Y2tEQkNvbHVtblR5cGVcbiAgICAgICAgcmV0dXJuIGAke2FjY30ke2luZGV4ID4gMCA/ICcsJyA6ICcnfSAnJHtmaWVsZC5uYW1lfSc6ICcke2ZpZWxkLmR1Y2tEQkNvbHVtblR5cGV9J2A7XG4gICAgICB9LCAnJyk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIEFTXG4gICAgICAgIFNFTEVDVCAqXG4gICAgICAgIEZST00gcmVhZF9qc29uKCcke3RoaXMuaWR9JyxcbiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IHske2NvbHVtbnN9fSk7XG4gICAgICBgO1xuICAgICAgYXdhaXQgYy5xdWVyeShjcmVhdGVUYWJsZVNxbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdpbXBvcnRSb3dEYXRhJywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGltcG9ydEdlb0pzb25EYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8SW1wb3J0RGF0YVRvRHVja1Jlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7cm93c30gPSBkYXRhO1xuICAgICAgYXdhaXQgZGIucmVnaXN0ZXJGaWxlVGV4dCh0aGlzLmlkLCBKU09OLnN0cmluZ2lmeShyb3dzKSk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBpbnN0YWxsIHNwYXRpYWw7XG4gICAgICAgIGxvYWQgc3BhdGlhbDtcbiAgICAgICAgQ1JFQVRFIFRBQkxFICcke3RoaXMubGFiZWx9JyBBUyBcbiAgICAgICAgU0VMRUNUICpcbiAgICAgICAgRlJPTSBTVF9SRUFEKCcke3RoaXMuaWR9Jywga2VlcF93a2IgPSBUUlVFKTtcbiAgICAgICAgQUxURVIgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIFJFTkFNRSAnJHtEVUNLREJfV0tCX0NPTFVNTn0nIFRPICcke0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU59JztcbiAgICAgIGA7XG4gICAgICBhd2FpdCBjLnF1ZXJ5KGNyZWF0ZVRhYmxlU3FsKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignaW1wb3J0R2VvSnNvbkRhdGEnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIF9nZW9qc29uIGNvbHVtbiBpcyBjcmVhdGVkIGZyb20gZ2VvbWV0cnkgd2l0aCBrZWVwX3drYiBmbGFnIGFuZCBjb250YWlucyB2YWxpZCBXS0IgZGF0YS5cbiAgICAgIGdlb2Fycm93TWV0YWRhdGE6IHtbS0VQTEVSX0dFT01fRlJPTV9HRU9KU09OX0NPTFVNTl06IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBpbXBvcnRBcnJvd0RhdGEoe2RhdGEsIGN9OiBJbXBvcnREYXRhVG9EdWNrUHJvcHMpOiBQcm9taXNlPEltcG9ydERhdGFUb0R1Y2tSZXN1bHQ+IHtcbiAgICBsZXQgYWRqdXN0ZWRNZXRhZGF0YSA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyAxKSBkYXRhLnJvd3MgY29udGFpbnMgYW4gYXJyb3cgdGFibGUgY3JlYXRlZCBieSBBZGQgdG8gTWFwIGRhdGEgZnJvbSBEdWNrRGIgcXVlcnkuXG4gICAgICAvLyAyKSBhcnJvdyB0YWJsZSBpcyBpbiBjb2xzICYgZmllbGRzIHdoZW4gYSBmaWxlIGlzIGRyYWdnZWQgJiBkcm9wcGVkIGludG8gQWRkIERhdGEgVG8gTWFwIGRpYWxvZy5cbiAgICAgIGNvbnN0IGFycm93VGFibGUgPVxuICAgICAgICBkYXRhLnJvd3MgaW5zdGFuY2VvZiBhcnJvdy5UYWJsZVxuICAgICAgICAgID8gZGF0YS5yb3dzXG4gICAgICAgICAgOiByZXN0b3JlQXJyb3dUYWJsZShkYXRhLmNvbHMgfHwgW10sIGRhdGEuZmllbGRzLCBkYXRhLmFycm93U2NoZW1hKTtcblxuICAgICAgLy8gcmVtb3ZlIHVuc3VwcG9ydGVkIGV4dGVuc2lvbnMgZnJvbSBhbiBhcnJvdyB0YWJsZSB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW4gRHVja0RCLlxuICAgICAgYWRqdXN0ZWRNZXRhZGF0YSA9IHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyhhcnJvd1RhYmxlKTtcblxuICAgICAgY29uc3Qgc2V0dXBTcWwgPSBgXG4gICAgICAgIGluc3RhbGwgc3BhdGlhbDtcbiAgICAgICAgbG9hZCBzcGF0aWFsO1xuICAgICAgYDtcbiAgICAgIGF3YWl0IGMucXVlcnkoc2V0dXBTcWwpO1xuICAgICAgYXdhaXQgYy5pbnNlcnRBcnJvd1RhYmxlKGFycm93VGFibGUsIHtuYW1lOiB0aGlzLmxhYmVsfSk7XG5cbiAgICAgIC8vIHJlc3RvcmUgdW5zdXBwb3J0ZWQgZXh0ZW5zaW9ucyB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW4gRHVja0RiXG4gICAgICByZXN0b3JlVW5zdXBwb3J0ZWRFeHRlbnNpb25zKGFycm93VGFibGUsIGFkanVzdGVkTWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBLbm93biBpc3N1ZXM6XG4gICAgICAvLyAxKSBBcnJvdyBUeXBlIHdpdGggZXh0ZW5zaW9uIG5hbWU6IGdlb2Fycm93LnBvaW50IGFuZCBmb3JtYXQ6ICt3OjIgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gRHVja0RCLlxuICAgICAgY29uc29sZS5lcnJvcignaW1wb3J0QXJyb3dEYXRhJywgZXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBnZW9hcnJvd01ldGFkYXRhOiB7Li4uU1VHR0VTVEVEX0dFT01fQ09MVU1OUywgLi4uYWRqdXN0ZWRNZXRhZGF0YX0sXG4gICAgICAvLyB1c2UgZmllbGRzIGdlbmVyYXRlZCBmcm9tIHRoZSBjcmVhdGVkIGFycm93IHRhYmxlXG4gICAgICB1c2VOZXdGaWVsZHM6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSBmcm9tIGRhdGEsIHJldHVybnMgYW4gYXJyb3cgdGFibGUgd2l0aCB0aGUgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZmllbGRzOiBGaWVsZFtdLCBjb2xzOiBhbnlbXX0+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk6IFByb21pc2U8e2ZpZWxkczogYW55W107IGNvbHM6IGFycm93LlZlY3RvcltdfT4ge1xuICAgIGNvbnN0IGRiID0gYXdhaXQgZ2V0RHVja0RCKCk7XG4gICAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRoaXMubGFiZWw7XG4gICAgYXdhaXQgZHJvcFRhYmxlSWZFeGlzdHMoYywgdGFibGVOYW1lKTtcblxuICAgIGxldCBmb3JtYXQgPSB0aGlzLm1ldGFkYXRhLmZvcm1hdDtcbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgLy8gZm9ybWF0IGlzIG1pc3Npbmcgd2hlbiB3ZSBsb2FkIEtlcGxlci5nbCBleGFtcGxlc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5yb3dzPy5bMF0pIHx8IHR5cGVvZiBkYXRhLnJvd3M/LlswXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLnJvdztcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5yb3dzPy50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5nZW9qc29uO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmNvbHM/LlswXSBpbnN0YW5jZW9mIGFycm93LlZlY3Rvcikge1xuICAgICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGltcG9ydERldGFpbHM6IEltcG9ydERhdGFUb0R1Y2tSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLnJvdykge1xuICAgICAgYXdhaXQgdGhpcy5pbXBvcnRSb3dEYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbikge1xuICAgICAgaW1wb3J0RGV0YWlscyA9IGF3YWl0IHRoaXMuaW1wb3J0R2VvSnNvbkRhdGEoe2RhdGEsIGRiLCBjfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5hcnJvdykge1xuICAgICAgaW1wb3J0RGV0YWlscyA9IGF3YWl0IHRoaXMuaW1wb3J0QXJyb3dEYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbnJlY29nbml6ZWQgZm9ybWF0JywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBsZXQgZmllbGRzOiBGaWVsZFtdID0gW107XG4gICAgbGV0IGNvbHM6IGFycm93LlZlY3RvcltdID0gW107XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge2dlb2Fycm93TWV0YWRhdGEgPSB7fSwgdXNlTmV3RmllbGRzID0gZmFsc2V9ID0gaW1wb3J0RGV0YWlscyB8fCB7fTtcblxuICAgICAgY29uc3QgZHVja0RiQ29sdW1ucyA9IGF3YWl0IGdldER1Y2tEQkNvbHVtblR5cGVzKGMsIHRhYmxlTmFtZSk7XG4gICAgICBjb25zdCB0YWJsZUR1Y2tEQlR5cGVzID0gZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAoZHVja0RiQ29sdW1ucyk7XG4gICAgICBjb25zdCBjb2x1bW5zVG9Db252ZXJ0VG9XS0IgPSBnZXRHZW9tZXRyeUNvbHVtbnMoZHVja0RiQ29sdW1ucyk7XG4gICAgICBjb25zdCBhZGp1c3RlZFF1ZXJ5ID0gY29uc3RydWN0U1RfYXNXS0JRdWVyeSh0YWJsZU5hbWUsIGNvbHVtbnNUb0NvbnZlcnRUb1dLQik7XG4gICAgICBjb25zdCBhcnJvd1Jlc3VsdCA9IGF3YWl0IGMucXVlcnkoYWRqdXN0ZWRRdWVyeSk7XG5cbiAgICAgIC8vIFRPRE8gaWYgZm9ybWF0IGlzIGFuIGFycm93IHRhYmxlIHRoZW4ganVzdCB1c2UgdGhlIG9yaWdpbmFsIG9uZSwgaW5zdGVhZCBvZiB0aGUgbmV3IHRhYmxlIGZyb20gdGhlIHF1ZXJ5P1xuXG4gICAgICByZXN0b3JlR2VvYXJyb3dNZXRhZGF0YShhcnJvd1Jlc3VsdCwgZ2VvYXJyb3dNZXRhZGF0YSk7XG5cbiAgICAgIGZpZWxkcyA9IHVzZU5ld0ZpZWxkc1xuICAgICAgICA/IGFycm93U2NoZW1hVG9GaWVsZHMoYXJyb3dSZXN1bHQsIHRhYmxlRHVja0RCVHlwZXMpXG4gICAgICAgIDogZGF0YS5maWVsZHMgPz8gYXJyb3dTY2hlbWFUb0ZpZWxkcyhhcnJvd1Jlc3VsdCwgdGFibGVEdWNrREJUeXBlcyk7XG4gICAgICBjb2xzID0gWy4uLkFycmF5KGFycm93UmVzdWx0Lm51bUNvbHMpLmtleXMoKV1cbiAgICAgICAgLm1hcChpID0+IGFycm93UmVzdWx0LmdldENoaWxkQXQoaSkpXG4gICAgICAgIC5maWx0ZXIoY29sID0+IGNvbCkgYXMgYXJyb3cuVmVjdG9yW107XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0R1Y2tEQiB0YWJsZTogY3JlYXRlVGFibGVBbmRHZXRBcnJvdycsIGVycm9yKTtcbiAgICB9XG5cbiAgICBhd2FpdCBjLmNsb3NlKCk7XG5cbiAgICByZXR1cm4ge2ZpZWxkcywgY29sc307XG4gIH1cblxuICBhc3luYyBpbXBvcnREYXRhKHtkYXRhfToge2RhdGE6IFByb2Nlc3NvclJlc3VsdH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBWZWN0b3JUaWxlIGlzIGEgc3BlY2lhbCBjYXNlLCBpZ25vcmUgZm9yIG5vd1xuICAgIGlmICh0aGlzLnR5cGUgPT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFKSB7XG4gICAgICBzdXBlci5pbXBvcnREYXRhKHtkYXRhOiB7Li4uZGF0YSwgcm93czogW119fSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2ZpZWxkcywgY29sc30gPSBhd2FpdCB0aGlzLmNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk7XG5cbiAgICBzdXBlci5pbXBvcnREYXRhKHtkYXRhOiB7ZmllbGRzLCBjb2xzLCByb3dzOiBbXX19KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShkYXRhKSB7XG4gICAgLy8gVmVjdG9yVGlsZSBpcyBhIHNwZWNpYWwgY2FzZSwgaWdub3JlIGZvciBub3dcbiAgICBpZiAodGhpcy50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRSkge1xuICAgICAgc3VwZXIuaW1wb3J0RGF0YSh7ZGF0YX0pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3Qge2NvbHN9ID0gYXdhaXQgdGhpcy5jcmVhdGVUYWJsZUFuZEdldEFycm93KGRhdGEpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnVwZGF0ZSh7Y29scywgcm93czogW10sIGZpZWxkczogW119KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRGaWxlUHJvY2Vzc29yID0gZnVuY3Rpb24gKGRhdGE6IGFueSwgaW5wdXRGb3JtYXQ/OiBzdHJpbmcpIHtcbiAgICBsZXQgcHJvY2Vzc29yO1xuICAgIGxldCBmb3JtYXQ7XG4gICAgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3cgfHwgaXNBcnJvd0RhdGEoZGF0YSkpIHtcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5hcnJvdztcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NBcnJvd0JhdGNoZXM7XG4gICAgfSBlbHNlIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmtlcGxlcmdsIHx8IGlzS2VwbGVyR2xNYXAoZGF0YSkpIHtcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbDtcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGI7XG4gICAgfSBlbHNlIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLnJvdyB8fCBpc1Jvd09iamVjdChkYXRhKSkge1xuICAgICAgLy8gY3N2IGZpbGUgZ29lcyBoZXJlXG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMucm93O1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0NzdlJvd09iamVjdDsgLy8gZGlyZWN0bHkgaW1wb3J0IGpzb24gb2JqZWN0IGludG8gZHVja2RiLXdhc21cbiAgICB9IGVsc2UgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbiB8fCBpc0dlb0pzb24oZGF0YSkpIHtcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5nZW9qc29uO1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0dlb2pzb247XG4gICAgfVxuICAgIHJldHVybiB7cHJvY2Vzc29yLCBmb3JtYXR9O1xuICB9O1xuXG4gIHN0YXRpYyBnZXRJbnB1dERhdGFWYWxpZGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gSW4gRHVja0RCIG1vZGUgZGF0YSBpcyB2YWxpZGF0ZWQgbGF0ZXIgZHVyaW5nIGltcG9ydC5cbiAgICByZXR1cm4gZCA9PiBkO1xuICB9O1xufVxuXG4vKipcbiAqIFRyeSB0byByZXN0b3JlIGdlb2Fycm93IG1ldGFkYXRhIGxvc3QgZHVyaW5nIER1Y2tEYiBpbmdlc3Rpb24uXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gZ2VuZXJhdGUgd3JvbmcgZ2VvbWV0cnkgdHlwZXMuXG4gKiBAcGFyYW0gYXJyb3dUYWJsZSBBcnJvdyB0YWJsZSB0byB1cGRhdGUuXG4gKiBAcGFyYW0gZ2VvYXJyb3dNZXRhZGF0YSBBIG1hcCB3aXRoIGZpZWxkIG5hbWVzIHRoYXQgdXN1YWxseSB1c2VkIHRvIHN0b3JlIGdlb2Fycm93IGdlb21ldHJ5LlxuICovXG5jb25zdCByZXN0b3JlR2VvYXJyb3dNZXRhZGF0YSA9IGFzeW5jIChcbiAgYXJyb3dUYWJsZTogYXJyb3cuVGFibGUsXG4gIGdlb2Fycm93TWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikgPT4ge1xuICBhcnJvd1RhYmxlLnNjaGVtYS5maWVsZHMuZm9yRWFjaChmID0+IHtcbiAgICBpZiAoYXJyb3cuRGF0YVR5cGUuaXNCaW5hcnkoZi50eXBlKSAmJiBnZW9hcnJvd01ldGFkYXRhW2YubmFtZV0pIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgZ2VvYXJyb3dNZXRhZGF0YVtmLm5hbWVdKTtcbiAgICB9IGVsc2UgaWYgKGlzR2VvQXJyb3dQb2ludChmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuUE9JTlQpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd0xpbmVTdHJpbmcoZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBHRU9BUlJPV19FWFRFTlNJT05TLkxJTkVTVFJJTkcpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd1BvbHlnb24oZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBHRU9BUlJPV19FWFRFTlNJT05TLlBPTFlHT04pO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd011bHRpUG9pbnQoZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBHRU9BUlJPV19FWFRFTlNJT05TLk1VTFRJUE9JTlQpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd011bHRpTGluZVN0cmluZyhmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTVVMVElMSU5FU1RSSU5HKTtcbiAgICB9IGVsc2UgaWYgKGlzR2VvQXJyb3dNdWx0aVBvbHlnb24oZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBHRU9BUlJPV19FWFRFTlNJT05TLk1VTFRJUE9MWUdPTik7XG4gICAgfVxuICB9KTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFNQSxJQUFBRSxXQUFBLEdBQUFGLE9BQUE7QUFRQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFHQSxJQUFBSSxLQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxjQUFBLEdBQUFMLE9BQUE7QUFPQSxJQUFBTSxpQkFBQSxHQUFBTixPQUFBO0FBU0EsSUFBQU8sa0JBQUEsR0FBQVAsT0FBQTtBQVNxQyxTQUFBUSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFB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
|