@kepler.gl/utils 3.0.0-alpha.1 → 3.0.0-alpha.2

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.
Files changed (46) hide show
  1. package/dist/aggregate-utils.js +1 -21
  2. package/dist/arrow-data-container.d.ts +54 -0
  3. package/dist/arrow-data-container.js +360 -0
  4. package/dist/color-utils.d.ts +4 -0
  5. package/dist/color-utils.js +12 -21
  6. package/dist/data-container-interface.d.ts +18 -0
  7. package/dist/data-container-interface.js +0 -20
  8. package/dist/data-container-utils.d.ts +1 -0
  9. package/dist/data-container-utils.js +10 -22
  10. package/dist/data-row.js +7 -22
  11. package/dist/data-scale-utils.js +7 -22
  12. package/dist/data-utils.js +3 -21
  13. package/dist/dataset-utils.d.ts +2 -2
  14. package/dist/dataset-utils.js +15 -28
  15. package/dist/dom-to-image.js +7 -22
  16. package/dist/dom-utils.js +6 -22
  17. package/dist/effect-utils.d.ts +12 -2
  18. package/dist/effect-utils.js +122 -55
  19. package/dist/export-map-html.js +7 -23
  20. package/dist/export-utils.js +1 -21
  21. package/dist/filter-utils.js +6 -21
  22. package/dist/format.js +6 -22
  23. package/dist/gl-utils.js +1 -21
  24. package/dist/h3-utils.js +6 -22
  25. package/dist/index.d.ts +4 -3
  26. package/dist/index.js +43 -26
  27. package/dist/indexed-data-container.js +1 -21
  28. package/dist/locale-utils.js +1 -21
  29. package/dist/map-info-utils.js +6 -22
  30. package/dist/map-style-utils/mapbox-gl-style-editor.js +1 -21
  31. package/dist/map-style-utils/mapbox-utils.js +7 -22
  32. package/dist/map-utils.js +1 -21
  33. package/dist/mapbox-utils.js +7 -22
  34. package/dist/noop.js +3 -21
  35. package/dist/notifications-utils.js +1 -21
  36. package/dist/observe-dimensions.d.ts +1 -1
  37. package/dist/observe-dimensions.js +5 -25
  38. package/dist/plot.js +7 -22
  39. package/dist/projection-utils.js +6 -22
  40. package/dist/row-data-container.js +1 -21
  41. package/dist/searcher-utils.js +7 -22
  42. package/dist/split-map-utils.js +1 -21
  43. package/dist/time.js +6 -22
  44. package/dist/utils.d.ts +6 -0
  45. package/dist/utils.js +28 -22
  46. package/package.json +10 -9
package/dist/dom-utils.js CHANGED
@@ -1,23 +1,3 @@
1
- // Copyright (c) 2023 Uber Technologies, Inc.
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to deal
5
- // in the Software without restriction, including without limitation the rights
6
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- // copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- // THE SOFTWARE.
20
-
21
1
  "use strict";
22
2
 
23
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -54,7 +34,11 @@ var _window = _interopRequireDefault(require("global/window"));
54
34
 
55
35
  var _document = _interopRequireDefault(require("global/document"));
56
36
 
57
- var _constants = require("@kepler.gl/constants");function processClone(original, clone) {
37
+ var _constants = require("@kepler.gl/constants");
38
+
39
+ // SPDX-License-Identifier: MIT
40
+ // Copyright contributors to the kepler.gl project
41
+ function processClone(original, clone) {
58
42
  if (!(clone instanceof _window["default"].Element)) {
59
43
  return clone;
60
44
  }
@@ -447,4 +431,4 @@ function toStyleSheet(text) {
447
431
  doc.body.appendChild(styleElement);
448
432
  return styleElement.sheet;
449
433
  }
450
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb20tdXRpbHMudHMiXSwibmFtZXMiOlsicHJvY2Vzc0Nsb25lIiwib3JpZ2luYWwiLCJjbG9uZSIsIndpbmRvdyIsIkVsZW1lbnQiLCJjb3B5UHJvcGVydGllcyIsInNvdXJjZVN0eWxlIiwidGFyZ2V0U3R5bGUiLCJwcm9wZXJ0eUtleXMiLCJhc0FycmF5IiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eVByaW9yaXR5IiwiY29weVN0eWxlIiwic291cmNlIiwidGFyZ2V0IiwiY3NzVGV4dCIsImZvbnQiLCJjbG9uZVN0eWxlIiwib2ciLCJjbG4iLCJvcmlnaW5hbFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlIiwiZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlIiwiZWxtIiwic3RsIiwiZm9ybWF0Q3NzVGV4dCIsInN0bDEiLCJjbnQiLCJmb3JtYXRQcm9wZXJ0eSIsImZvcm1hdENzc1Byb3BlcnRpZXMiLCJzdGwyIiwibWFwIiwiam9pbiIsInNlbGVjdG9yIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsb25lUHNldWRvRWxlbWVudCIsIm9yZyIsImVsZW1lbnQiLCJjb250ZW50IiwiY2xhc3NOYW1lIiwidWlkIiwic3R5bGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVQc2V1ZG9FbGVtZW50cyIsImNvcHlVc2VySW5wdXQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZml4U3ZnIiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiYXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZW5ndGgiLCJpIiwicHVzaCIsImZvdXJSYW5kb21DaGFycyIsIk1hdGgiLCJyYW5kb20iLCJwb3ciLCJ0b1N0cmluZyIsInNsaWNlIiwiaW5kZXgiLCJtYWtlSW1hZ2UiLCJ1cmkiLCJyZWplY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwib25lcnJvciIsImVyciIsIm1lc3NhZ2UiLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwiZGF0YVVyaSIsIkNvbnNvbGUiLCJsb2ciLCJldmVudCIsInNyYyIsImlzRGF0YVVybCIsInVybCIsInNlYXJjaCIsInBhcnNlRXh0ZW5zaW9uIiwibWF0Y2giLCJleGVjIiwibWltZXMiLCJXT0ZGIiwiSlBFRyIsIndvZmYiLCJ3b2ZmMiIsInR0ZiIsImVvdCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJ0aWZmIiwic3ZnIiwibWltZVR5cGUiLCJleHRlbnNpb24iLCJ0b0xvd2VyQ2FzZSIsImRhdGFBc1VybCIsInR5cGUiLCJlc2NhcGUiLCJzdHJpbmciLCJyZXBsYWNlIiwiZGVsYXkiLCJtcyIsImFyZyIsInNldFRpbWVvdXQiLCJpc1NyY0FzRGF0YVVybCIsInRleHQiLCJEQVRBX1VSTF9SRUdFWCIsImN2VG9CbG9iIiwiY2FudmFzIiwiYmluYXJ5U3RyaW5nIiwiYXRvYiIsInRvRGF0YVVSTCIsInNwbGl0IiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjYW52YXNUb0Jsb2IiLCJ0b0Jsb2IiLCJlc2NhcGVYaHRtbCIsImdldFdpZHRoIiwibm9kZSIsImxlZnRCb3JkZXIiLCJweCIsInJpZ2h0Qm9yZGVyIiwic2Nyb2xsV2lkdGgiLCJnZXRIZWlnaHQiLCJ0b3BCb3JkZXIiLCJib3R0b21Cb3JkZXIiLCJzY3JvbGxIZWlnaHQiLCJzdHlsZVByb3BlcnR5IiwicGFyc2VGbG9hdCIsInJlc29sdmVVcmwiLCJiYXNlVXJsIiwiZG9jIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJiYXNlIiwiaGVhZCIsImEiLCJib2R5IiwiaHJlZiIsImdldEFuZEVuY29kZSIsIm9wdGlvbnMiLCJUSU1FT1VUIiwiY2FjaGVCdXN0IiwidGVzdCIsIkRhdGUiLCJnZXRUaW1lIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiZG9uZSIsIm9udGltZW91dCIsInRpbWVvdXQiLCJyZXNwb25zZVR5cGUiLCJvcGVuIiwic2VuZCIsInBsYWNlaG9sZGVyIiwiaW1hZ2VQbGFjZWhvbGRlciIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJmYWlsIiwiZW5jb2RlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwicmVzcG9uc2UiLCJlcnJvciIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJVUkwiLCJzZXRTdHlsZVNoZWV0QmFzZUhyZWYiLCJhZGRCYXNlSHJlZlRvVXJsIiwicDEiLCJ0b1N0eWxlU2hlZXQiLCJ0ZXh0Q29udGVudCIsInNoZWV0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT08sU0FBU0EsWUFBVCxDQUFzQkMsUUFBdEIsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQzVDLE1BQUksRUFBRUEsS0FBSyxZQUFZQyxtQkFBT0MsT0FBMUIsQ0FBSixFQUF3QztBQUN0QyxXQUFPRixLQUFQO0FBQ0Q7O0FBRUQsV0FBU0csY0FBVCxDQUF3QkMsV0FBeEIsRUFBcUNDLFdBQXJDLEVBQWtEO0FBQ2hELFFBQU1DLFlBQVksR0FBR0MsT0FBTyxDQUFDSCxXQUFELENBQTVCO0FBQ0FFLElBQUFBLFlBQVksQ0FBQ0UsT0FBYixDQUFxQixVQUFBQyxJQUFJLEVBQUk7QUFDM0JKLE1BQUFBLFdBQVcsQ0FBQ0ssV0FBWixDQUNFRCxJQURGLEVBRUVMLFdB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NEIsRUFBZCxJQUFvQkEsRUFBcEIsR0FBeUJKLG1CQUFtQixDQUFDakMsSUFBRCxFQUFPcUMsRUFBUCxDQUF4RDtBQUNBLDBCQUFlcEcsR0FBZjtBQUNEOztBQUNELFNBQU84QixjQUFjLENBQUNDLElBQUQsQ0FBZCxHQUNIQSxJQURHLEdBRUhBLElBQUksQ0FBQ04sT0FBTCxDQUFhLDZCQUFiLEVBQTRDMEUsZ0JBQTVDLENBRko7QUFHRDs7QUFFTSxTQUFTRSxZQUFULENBQXNCdEUsSUFBdEIsRUFBNEI7QUFDakMsTUFBTTZCLEdBQUcsR0FBR2xILHFCQUFTbUgsY0FBVCxDQUF3QkMsa0JBQXhCLENBQTJDLEVBQTNDLENBQVo7O0FBQ0EsTUFBTTVHLFlBQVksR0FBR1IscUJBQVNTLGFBQVQsQ0FBdUIsT0FBdkIsQ0FBckI7O0FBRUFELEVBQUFBLFlBQVksQ0FBQ29KLFdBQWIsR0FBMkJ2RSxJQUEzQjtBQUNBNkIsRUFBQUEsR0FBRyxDQUFDTSxJQUFKLENBQVM5RyxXQUFULENBQXFCRixZQUFyQjtBQUVBLFNBQU9BLFlBQVksQ0FBQ3FKLEtBQXBCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjMgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQgd2luZG93IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGRvY3VtZW50IGZyb20gJ2dsb2JhbC9kb2N1bWVudCc7XG5pbXBvcnQge0lNQUdFX0VYUE9SVF9FUlJPUlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDbG9uZShvcmlnaW5hbCwgY2xvbmUpIHtcbiAgaWYgKCEoY2xvbmUgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2VTdHlsZSwgdGFyZ2V0U3R5bGUpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUtleXMgPSBhc0FycmF5KHNvdXJjZVN0eWxlKTtcbiAgICBwcm9wZXJ0eUtleXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIHRhcmdldFN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBuYW1lLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY29weVN0eWxlKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgaWYgKHNvdXJjZS5jc3NUZXh0KSB7XG4gICAgICB0YXJnZXQuY3NzVGV4dCA9IHNvdXJjZS5jc3NUZXh0O1xuICAgICAgLy8gYWRkIGFkZGl0aW9uYWwgY29weSBvZiBjb21wb3NpdGUgc3R5bGVzXG4gICAgICBpZiAoc291cmNlLmZvbnQpIHtcbiAgICAgICAgdGFyZ2V0LmZvbnQgPSBzb3VyY2UuZm9udDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29weVByb3BlcnRpZXMoc291cmNlLCB0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lU3R5bGUob2csIGNsbikge1xuICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvZyk7XG4gICAgY29weVN0eWxlKG9yaWdpbmFsU3R5bGUsIGNsbi5zdHlsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xuLCBlbG0sIHN0bCkge1xuICAgIGNvbnN0IGZvcm1hdENzc1RleHQgPSBzdGwxID0+IHtcbiAgICAgIGNvbnN0IGNudCA9IHN0bDEuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuICAgICAgcmV0dXJuIGAke3N0bC5jc3NUZXh0fSBjb250ZW50OiAke2NudH07YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0UHJvcGVydHkgPSBuYW1lID0+IHtcbiAgICAgIHJldHVybiBgJHtuYW1lfToke3N0bC5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpfSR7XG4gICAgICAgIHN0bC5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpID8gJyAhaW1wb3J0YW50JyA6ICcnXG4gICAgICB9YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0Q3NzUHJvcGVydGllcyA9IHN0bDIgPT4ge1xuICAgICAgcmV0dXJuIGAke2FzQXJyYXkoc3RsMilcbiAgICAgICAgLm1hcChmb3JtYXRQcm9wZXJ0eSlcbiAgICAgICAgLmpvaW4oJzsgJyl9O2A7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC4ke2Nsbn06JHtlbG19YDtcbiAgICBjb25zdCBjc3NUZXh0ID0gc3RsLmNzc1RleHQgPyBmb3JtYXRDc3NUZXh0KHN0bCkgOiBmb3JtYXRDc3NQcm9wZXJ0aWVzKHN0bCk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7c2VsZWN0b3J9eyR7Y3NzVGV4dH19YCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnQob3JnLCBjbG4sIGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9yZywgZWxlbWVudCk7XG4gICAgY29uc3QgY29udGVudCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcblxuICAgIGlmIChjb250ZW50ID09PSAnJyB8fCBjb250ZW50ID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB1aWQoKTtcbiAgICBjbG4uY2xhc3NOYW1lID0gYCR7Y2xuLmNsYXNzTmFtZX0gJHtjbGFzc05hbWV9YDtcbiAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xhc3NOYW1lLCBlbGVtZW50LCBzdHlsZSkpO1xuICAgIGNsbi5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVQc2V1ZG9FbGVtZW50cyhbb2csIGNsbl0pIHtcbiAgICBbJzpiZWZvcmUnLCAnOmFmdGVyJ10uZm9yRWFjaChlbGVtZW50ID0+IGNsb25lUHNldWRvRWxlbWVudChvZywgY2xuLCBlbGVtZW50KSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5VXNlcklucHV0KFtvZywgY2xuXSkge1xuICAgIGlmIChvZyBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MVGV4dEFyZWFFbGVtZW50KSBjbG4uaW5uZXJIVE1MID0gb2cudmFsdWU7XG4gICAgaWYgKG9nIGluc3RhbmNlb2Ygd2luZG93LkhUTUxJbnB1dEVsZW1lbnQpIGNsbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb2cudmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZml4U3ZnKGNsbikge1xuICAgIGlmICghKGNsbiBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50KSkgcmV0dXJuO1xuICAgIGNsbi5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyk7XG5cbiAgICBpZiAoIShjbG4gaW5zdGFuY2VvZiB3aW5kb3cuU1ZHUmVjdEVsZW1lbnQpKSByZXR1cm47XG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNsbi5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgY2xuLnN0eWxlLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbb3JpZ2luYWwsIGNsb25lXSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjbG9uZVN0eWxlKG9nLCBjbG4pO1xuICAgICAgcmV0dXJuIFtvZywgY2xuXTtcbiAgICB9KVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNsb25lUHNldWRvRWxlbWVudHMoW29nLCBjbG5dKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjb3B5VXNlcklucHV0KFtvZywgY2xuXSk7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4ge1xuICAgICAgZml4U3ZnKGNsbik7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4gY2xuKTtcbn1cblxuLyoqKipcbiAqIFVUSUxTXG4gKioqKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5KGFycmF5TGlrZSkge1xuICBjb25zdCBhcnJheTogYW55W10gPSBbXTtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaChhcnJheUxpa2VbaV0pO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VyUmFuZG9tQ2hhcnMoKSB7XG4gIHJldHVybiBgMDAwMCR7KChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMzYsIDQpKSA8PCAwKS50b1N0cmluZygzNil9YC5zbGljZSgtNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1aWQoKSB7XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIGB1JHtmb3VyUmFuZG9tQ2hhcnMoKX0ke2luZGV4Kyt9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJbWFnZSh1cmkpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9O1xuICAgIGltYWdlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IElNQUdFX0VYUE9SVF9FUlJPUlMuZGF0YVVyaTtcbiAgICAgIENvbnNvbGUubG9nKHVyaSk7XG4gICAgICAvLyBlcnJvciBpcyBhbiBFdmVudCBPYmplY3RcbiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvb2JqX2V2ZW50LmFzcFxuICAgICAgcmVqZWN0KHtldmVudDogZXJyLCBtZXNzYWdlfSk7XG4gICAgfTtcbiAgICBpbWFnZS5zcmMgPSB1cmk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVXJsKHVybCkge1xuICByZXR1cm4gdXJsLnNlYXJjaCgvXihkYXRhOikvKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9uKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9cXC4oW15cXC5cXC9dKj8pJC9nLmV4ZWModXJsKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbWltZXMoKSB7XG4gIC8qXG4gICAqIE9ubHkgV09GRiBhbmQgRU9UIG1pbWUgdHlwZXMgZm9yIGZvbnRzIGFyZSAncmVhbCdcbiAgICogc2VlIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWxcbiAgICovXG4gIGNvbnN0IFdPRkYgPSAnYXBwbGljYXRpb24vZm9udC13b2ZmJztcbiAgY29uc3QgSlBFRyA9ICdpbWFnZS9qcGVnJztcblxuICByZXR1cm4ge1xuICAgIHdvZmY6IFdPRkYsXG4gICAgd29mZjI6IFdPRkYsXG4gICAgdHRmOiAnYXBwbGljYXRpb24vZm9udC10cnVldHlwZScsXG4gICAgZW90OiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLFxuICAgIHBuZzogJ2ltYWdlL3BuZycsXG4gICAganBnOiBKUEVHLFxuICAgIGpwZWc6IEpQRUcsXG4gICAgZ2lmOiAnaW1hZ2UvZ2lmJyxcbiAgICB0aWZmOiAnaW1hZ2UvdGlmZicsXG4gICAgc3ZnOiAnaW1hZ2Uvc3ZnK3htbCdcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbWVUeXBlKHVybCkge1xuICBjb25zdCBleHRlbnNpb24gPSBwYXJzZUV4dGVuc2lvbih1cmwpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBtaW1lcygpW2V4dGVuc2lvbl0gfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhQXNVcmwoY29udGVudCwgdHlwZSkge1xuICByZXR1cm4gYGRhdGE6JHt0eXBlfTtiYXNlNjQsJHtjb250ZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/XiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gYXJnID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoYXJnKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3JjQXNEYXRhVXJsKHRleHQpIHtcbiAgY29uc3QgREFUQV9VUkxfUkVHRVggPSAvdXJsXFwoWydcIl0/KGRhdGE6KShbXidcIl0rPylbJ1wiXT9cXCkvO1xuICByZXR1cm4gdGV4dC5zZWFyY2goREFUQV9VUkxfUkVHRVgpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gY3ZUb0Jsb2IoY2FudmFzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSB3aW5kb3cuYXRvYihjYW52YXMudG9EYXRhVVJMKCkuc3BsaXQoJywnKVsxXSk7XG4gICAgY29uc3QgbGVuZ3RoID0gYmluYXJ5U3RyaW5nLmxlbmd0aDtcbiAgICBjb25zdCBiaW5hcnlBcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBiaW5hcnlBcnJheVtpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoW2JpbmFyeUFycmF5XSwge3R5cGU6ICdpbWFnZS9wbmcnfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMpIHtcbiAgaWYgKGNhbnZhcy50b0Jsb2IpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY2FudmFzLnRvQmxvYihyZXNvbHZlKTtcbiAgICB9KTtcblxuICByZXR1cm4gY3ZUb0Jsb2IoY2FudmFzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhodG1sKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyMvZywgJyUyMycpLnJlcGxhY2UoL1xcbi9nLCAnJTBBJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWR0aChub2RlKSB7XG4gIGNvbnN0IGxlZnRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbiAgY29uc3QgcmlnaHRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJyk7XG4gIHJldHVybiBub2RlLnNjcm9sbFdpZHRoICsgbGVmdEJvcmRlciArIHJpZ2h0Qm9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVpZ2h0KG5vZGUpIHtcbiAgY29uc3QgdG9wQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbiAgY29uc3QgYm90dG9tQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci1ib3R0b20td2lkdGgnKTtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsSGVpZ2h0ICsgdG9wQm9yZGVyICsgYm90dG9tQm9yZGVyO1xufVxuXG5mdW5jdGlvbiBweChub2RlLCBzdHlsZVByb3BlcnR5KSB7XG4gIGNvbnN0IHZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncHgnLCAnJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7XG4gIGNvbnN0IGJhc2UgPSBkb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICBkb2MuaGVhZC5hcHBlbmRDaGlsZChiYXNlKTtcbiAgY29uc3QgYSA9IGRvYy5jcmVhdGVFbGVtZW50KCdhJyk7XG4gIGRvYy5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICBiYXNlLmhyZWYgPSBiYXNlVXJsO1xuICBhLmhyZWYgPSB1cmw7XG4gIHJldHVybiBhLmhyZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmRFbmNvZGUodXJsLCBvcHRpb25zKSB7XG4gIGNvbnN0IFRJTUVPVVQgPSAzMDAwMDtcbiAgaWYgKG9wdGlvbnMuY2FjaGVCdXN0KSB7XG4gICAgLy8gQ2FjaGUgYnlwYXNzIHNvIHdlIGRvbnQgaGF2ZSBDT1JTIGlzc3VlcyB3aXRoIGNhY2hlZCBpbWFnZXNcbiAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdCNCeXBhc3NpbmdfdGhlX2NhY2hlXG4gICAgdXJsICs9ICgvXFw/Ly50ZXN0KHVybCkgPyAnJicgOiAnPycpICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZG9uZTtcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IHRpbWVvdXQ7XG4gICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgcmVxdWVzdC50aW1lb3V0ID0gVElNRU9VVDtcbiAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gICAgcmVxdWVzdC5zZW5kKCk7XG5cbiAgICBsZXQgcGxhY2Vob2xkZXI7XG4gICAgaWYgKG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcikge1xuICAgICAgY29uc3Qgc3BsaXQgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXIuc3BsaXQoLywvKTtcbiAgICAgIGlmIChzcGxpdCAmJiBzcGxpdFsxXSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHNwbGl0WzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG5cbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICAgIHJlc29sdmUocGxhY2Vob2xkZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZhaWwoYGNhbm5vdCBmZXRjaCByZXNvdXJjZTogJHt1cmx9LCBzdGF0dXM6ICR7cmVxdWVzdC5zdGF0dXN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcbiAgICAgIGVuY29kZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZW5jb2Rlci5yZXN1bHQuc3BsaXQoLywvKVsxXTtcbiAgICAgICAgcmVzb2x2ZShjb250ZW50KTtcbiAgICAgIH07XG4gICAgICBlbmNvZGVyLnJlYWRBc0RhdGFVUkwocmVxdWVzdC5yZXNwb25zZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGltZW91dCgpIHtcbiAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICByZXNvbHZlKHBsYWNlaG9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWwoYHRpbWVvdXQgb2YgJHtUSU1FT1VUfW1zIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIHJlc291cmNlOiAke3VybH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICByZXNvbHZlKCcnKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCB1cmwpIHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsLCBiYXNlKS5ocmVmO1xufVxuXG4vLyBTZXQgcmVsYXRpdmUgVVJMIGluIHN0eWxlc2hlZXQgdG8gYWJzb2x1dGUgdXJsXG5leHBvcnQgZnVuY3Rpb24gc2V0U3R5bGVTaGVldEJhc2VIcmVmKHRleHQsIGJhc2UpIHtcbiAgZnVuY3Rpb24gYWRkQmFzZUhyZWZUb1VybChtYXRjaCwgcDEpIHtcbiAgICBjb25zdCB1cmwgPSAvXmh0dHAvaS50ZXN0KHAxKSA/IHAxIDogY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCBwMSk7XG4gICAgcmV0dXJuIGB1cmwoJyR7dXJsfScpYDtcbiAgfVxuICByZXR1cm4gaXNTcmNBc0RhdGFVcmwodGV4dClcbiAgICA/IHRleHRcbiAgICA6IHRleHQucmVwbGFjZSgvdXJsXFwoWydcIl0/KFteJ1wiXSs/KVsnXCJdP1xcKS9nLCBhZGRCYXNlSHJlZlRvVXJsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3R5bGVTaGVldCh0ZXh0KSB7XG4gIGNvbnN0IGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnJyk7XG4gIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcblxuICByZXR1cm4gc3R5bGVFbGVtZW50LnNoZWV0O1xufVxuIl19
434
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb20tdXRpbHMudHMiXSwibmFtZXMiOlsicHJvY2Vzc0Nsb25lIiwib3JpZ2luYWwiLCJjbG9uZSIsIndpbmRvdyIsIkVsZW1lbnQiLCJjb3B5UHJvcGVydGllcyIsInNvdXJjZVN0eWxlIiwidGFyZ2V0U3R5bGUiLCJwcm9wZXJ0eUtleXMiLCJhc0FycmF5IiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eVByaW9yaXR5IiwiY29weVN0eWxlIiwic291cmNlIiwidGFyZ2V0IiwiY3NzVGV4dCIsImZvbnQiLCJjbG9uZVN0eWxlIiwib2ciLCJjbG4iLCJvcmlnaW5hbFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlIiwiZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlIiwiZWxtIiwic3RsIiwiZm9ybWF0Q3NzVGV4dCIsInN0bDEiLCJjbnQiLCJmb3JtYXRQcm9wZXJ0eSIsImZvcm1hdENzc1Byb3BlcnRpZXMiLCJzdGwyIiwibWFwIiwiam9pbiIsInNlbGVjdG9yIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsb25lUHNldWRvRWxlbWVudCIsIm9yZyIsImVsZW1lbnQiLCJjb250ZW50IiwiY2xhc3NOYW1lIiwidWlkIiwic3R5bGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVQc2V1ZG9FbGVtZW50cyIsImNvcHlVc2VySW5wdXQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZml4U3ZnIiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiYXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZW5ndGgiLCJpIiwicHVzaCIsImZvdXJSYW5kb21DaGFycyIsIk1hdGgiLCJyYW5kb20iLCJwb3ciLCJ0b1N0cmluZyIsInNsaWNlIiwiaW5kZXgiLCJtYWtlSW1hZ2UiLCJ1cmkiLCJyZWplY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwib25lcnJvciIsImVyciIsIm1lc3NhZ2UiLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwiZGF0YVVyaSIsIkNvbnNvbGUiLCJsb2ciLCJldmVudCIsInNyYyIsImlzRGF0YVVybCIsInVybCIsInNlYXJjaCIsInBhcnNlRXh0ZW5zaW9uIiwibWF0Y2giLCJleGVjIiwibWltZXMiLCJXT0ZGIiwiSlBFRyIsIndvZmYiLCJ3b2ZmMiIsInR0ZiIsImVvdCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJ0aWZmIiwic3ZnIiwibWltZVR5cGUiLCJleHRlbnNpb24iLCJ0b0xvd2VyQ2FzZSIsImRhdGFBc1VybCIsInR5cGUiLCJlc2NhcGUiLCJzdHJpbmciLCJyZXBsYWNlIiwiZGVsYXkiLCJtcyIsImFyZyIsInNldFRpbWVvdXQiLCJpc1NyY0FzRGF0YVVybCIsInRleHQiLCJEQVRBX1VSTF9SRUdFWCIsImN2VG9CbG9iIiwiY2FudmFzIiwiYmluYXJ5U3RyaW5nIiwiYXRvYiIsInRvRGF0YVVSTCIsInNwbGl0IiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjYW52YXNUb0Jsb2IiLCJ0b0Jsb2IiLCJlc2NhcGVYaHRtbCIsImdldFdpZHRoIiwibm9kZSIsImxlZnRCb3JkZXIiLCJweCIsInJpZ2h0Qm9yZGVyIiwic2Nyb2xsV2lkdGgiLCJnZXRIZWlnaHQiLCJ0b3BCb3JkZXIiLCJib3R0b21Cb3JkZXIiLCJzY3JvbGxIZWlnaHQiLCJzdHlsZVByb3BlcnR5IiwicGFyc2VGbG9hdCIsInJlc29sdmVVcmwiLCJiYXNlVXJsIiwiZG9jIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJiYXNlIiwiaGVhZCIsImEiLCJib2R5IiwiaHJlZiIsImdldEFuZEVuY29kZSIsIm9wdGlvbnMiLCJUSU1FT1VUIiwiY2FjaGVCdXN0IiwidGVzdCIsIkRhdGUiLCJnZXRUaW1lIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiZG9uZSIsIm9udGltZW91dCIsInRpbWVvdXQiLCJyZXNwb25zZVR5cGUiLCJvcGVuIiwic2VuZCIsInBsYWNlaG9sZGVyIiwiaW1hZ2VQbGFjZWhvbGRlciIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJmYWlsIiwiZW5jb2RlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwicmVzcG9uc2UiLCJlcnJvciIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJVUkwiLCJzZXRTdHlsZVNoZWV0QmFzZUhyZWYiLCJhZGRCYXNlSHJlZlRvVXJsIiwicDEiLCJ0b1N0eWxlU2hlZXQiLCJ0ZXh0Q29udGVudCIsInNoZWV0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFOQTtBQUNBO0FBT08sU0FBU0EsWUFBVCxDQUFzQkMsUUFBdEIsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQzVDLE1BQUksRUFBRUEsS0FBSyxZQUFZQyxtQkFBT0MsT0FBMUIsQ0FBSixFQUF3QztBQUN0QyxXQUFPRixLQUFQO0FBQ0Q7O0FBRUQsV0FBU0csY0FBVCxDQUF3QkMsV0FBeEIsRUFBcUNDLFdBQXJDLEVBQWtEO0FBQ2hELFFBQU1DLFlBQVksR0FBR0MsT0FBTyxDQUFDSCxXQUFELENBQTVCO0FBQ0FFLElBQUFBLFlBQVksQ0FBQ0UsT0FBYixDQUFxQixVQUFBQyxJQUFJLEVBQUk7QUFDM0JKLE1BQUFBLFdBQVcsQ0FBQ0ssV0FBWixDQUNFRCxJQURGLEVBRUVMLFdBQVcsQ0FBQ08sZ0JBQVosQ0FBNkJGLElBQTdCLENBRkYsRUFHRUwsV0FBVyxDQUFDUSxtQkFBWixDQUFnQ0gsSUFBaEMsQ0FIRjtBQUtELEtBTkQ7QUFP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OztBQUNELFNBQU84QixjQUFjLENBQUNDLElBQUQsQ0FBZCxHQUNIQSxJQURHLEdBRUhBLElBQUksQ0FBQ04sT0FBTCxDQUFhLDZCQUFiLEVBQTRDMEUsZ0JBQTVDLENBRko7QUFHRDs7QUFFTSxTQUFTRSxZQUFULENBQXNCdEUsSUFBdEIsRUFBNEI7QUFDakMsTUFBTTZCLEdBQUcsR0FBR2xILHFCQUFTbUgsY0FBVCxDQUF3QkMsa0JBQXhCLENBQTJDLEVBQTNDLENBQVo7O0FBQ0EsTUFBTTVHLFlBQVksR0FBR1IscUJBQVNTLGFBQVQsQ0FBdUIsT0FBdkIsQ0FBckI7O0FBRUFELEVBQUFBLFlBQVksQ0FBQ29KLFdBQWIsR0FBMkJ2RSxJQUEzQjtBQUNBNkIsRUFBQUEsR0FBRyxDQUFDTSxJQUFKLENBQVM5RyxXQUFULENBQXFCRixZQUFyQjtBQUVBLFNBQU9BLFlBQVksQ0FBQ3FKLEtBQXBCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQgd2luZG93IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGRvY3VtZW50IGZyb20gJ2dsb2JhbC9kb2N1bWVudCc7XG5pbXBvcnQge0lNQUdFX0VYUE9SVF9FUlJPUlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDbG9uZShvcmlnaW5hbCwgY2xvbmUpIHtcbiAgaWYgKCEoY2xvbmUgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2VTdHlsZSwgdGFyZ2V0U3R5bGUpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUtleXMgPSBhc0FycmF5KHNvdXJjZVN0eWxlKTtcbiAgICBwcm9wZXJ0eUtleXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIHRhcmdldFN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBuYW1lLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY29weVN0eWxlKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgaWYgKHNvdXJjZS5jc3NUZXh0KSB7XG4gICAgICB0YXJnZXQuY3NzVGV4dCA9IHNvdXJjZS5jc3NUZXh0O1xuICAgICAgLy8gYWRkIGFkZGl0aW9uYWwgY29weSBvZiBjb21wb3NpdGUgc3R5bGVzXG4gICAgICBpZiAoc291cmNlLmZvbnQpIHtcbiAgICAgICAgdGFyZ2V0LmZvbnQgPSBzb3VyY2UuZm9udDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29weVByb3BlcnRpZXMoc291cmNlLCB0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lU3R5bGUob2csIGNsbikge1xuICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvZyk7XG4gICAgY29weVN0eWxlKG9yaWdpbmFsU3R5bGUsIGNsbi5zdHlsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xuLCBlbG0sIHN0bCkge1xuICAgIGNvbnN0IGZvcm1hdENzc1RleHQgPSBzdGwxID0+IHtcbiAgICAgIGNvbnN0IGNudCA9IHN0bDEuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuICAgICAgcmV0dXJuIGAke3N0bC5jc3NUZXh0fSBjb250ZW50OiAke2NudH07YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0UHJvcGVydHkgPSBuYW1lID0+IHtcbiAgICAgIHJldHVybiBgJHtuYW1lfToke3N0bC5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpfSR7XG4gICAgICAgIHN0bC5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpID8gJyAhaW1wb3J0YW50JyA6ICcnXG4gICAgICB9YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0Q3NzUHJvcGVydGllcyA9IHN0bDIgPT4ge1xuICAgICAgcmV0dXJuIGAke2FzQXJyYXkoc3RsMilcbiAgICAgICAgLm1hcChmb3JtYXRQcm9wZXJ0eSlcbiAgICAgICAgLmpvaW4oJzsgJyl9O2A7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC4ke2Nsbn06JHtlbG19YDtcbiAgICBjb25zdCBjc3NUZXh0ID0gc3RsLmNzc1RleHQgPyBmb3JtYXRDc3NUZXh0KHN0bCkgOiBmb3JtYXRDc3NQcm9wZXJ0aWVzKHN0bCk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7c2VsZWN0b3J9eyR7Y3NzVGV4dH19YCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnQob3JnLCBjbG4sIGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9yZywgZWxlbWVudCk7XG4gICAgY29uc3QgY29udGVudCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcblxuICAgIGlmIChjb250ZW50ID09PSAnJyB8fCBjb250ZW50ID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB1aWQoKTtcbiAgICBjbG4uY2xhc3NOYW1lID0gYCR7Y2xuLmNsYXNzTmFtZX0gJHtjbGFzc05hbWV9YDtcbiAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xhc3NOYW1lLCBlbGVtZW50LCBzdHlsZSkpO1xuICAgIGNsbi5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVQc2V1ZG9FbGVtZW50cyhbb2csIGNsbl0pIHtcbiAgICBbJzpiZWZvcmUnLCAnOmFmdGVyJ10uZm9yRWFjaChlbGVtZW50ID0+IGNsb25lUHNldWRvRWxlbWVudChvZywgY2xuLCBlbGVtZW50KSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5VXNlcklucHV0KFtvZywgY2xuXSkge1xuICAgIGlmIChvZyBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MVGV4dEFyZWFFbGVtZW50KSBjbG4uaW5uZXJIVE1MID0gb2cudmFsdWU7XG4gICAgaWYgKG9nIGluc3RhbmNlb2Ygd2luZG93LkhUTUxJbnB1dEVsZW1lbnQpIGNsbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb2cudmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZml4U3ZnKGNsbikge1xuICAgIGlmICghKGNsbiBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50KSkgcmV0dXJuO1xuICAgIGNsbi5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyk7XG5cbiAgICBpZiAoIShjbG4gaW5zdGFuY2VvZiB3aW5kb3cuU1ZHUmVjdEVsZW1lbnQpKSByZXR1cm47XG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNsbi5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgY2xuLnN0eWxlLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbb3JpZ2luYWwsIGNsb25lXSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjbG9uZVN0eWxlKG9nLCBjbG4pO1xuICAgICAgcmV0dXJuIFtvZywgY2xuXTtcbiAgICB9KVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNsb25lUHNldWRvRWxlbWVudHMoW29nLCBjbG5dKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjb3B5VXNlcklucHV0KFtvZywgY2xuXSk7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4ge1xuICAgICAgZml4U3ZnKGNsbik7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4gY2xuKTtcbn1cblxuLyoqKipcbiAqIFVUSUxTXG4gKioqKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5KGFycmF5TGlrZSkge1xuICBjb25zdCBhcnJheTogYW55W10gPSBbXTtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaChhcnJheUxpa2VbaV0pO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VyUmFuZG9tQ2hhcnMoKSB7XG4gIHJldHVybiBgMDAwMCR7KChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMzYsIDQpKSA8PCAwKS50b1N0cmluZygzNil9YC5zbGljZSgtNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1aWQoKSB7XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIGB1JHtmb3VyUmFuZG9tQ2hhcnMoKX0ke2luZGV4Kyt9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJbWFnZSh1cmkpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9O1xuICAgIGltYWdlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IElNQUdFX0VYUE9SVF9FUlJPUlMuZGF0YVVyaTtcbiAgICAgIENvbnNvbGUubG9nKHVyaSk7XG4gICAgICAvLyBlcnJvciBpcyBhbiBFdmVudCBPYmplY3RcbiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvb2JqX2V2ZW50LmFzcFxuICAgICAgcmVqZWN0KHtldmVudDogZXJyLCBtZXNzYWdlfSk7XG4gICAgfTtcbiAgICBpbWFnZS5zcmMgPSB1cmk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVXJsKHVybCkge1xuICByZXR1cm4gdXJsLnNlYXJjaCgvXihkYXRhOikvKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9uKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9cXC4oW15cXC5cXC9dKj8pJC9nLmV4ZWModXJsKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbWltZXMoKSB7XG4gIC8qXG4gICAqIE9ubHkgV09GRiBhbmQgRU9UIG1pbWUgdHlwZXMgZm9yIGZvbnRzIGFyZSAncmVhbCdcbiAgICogc2VlIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWxcbiAgICovXG4gIGNvbnN0IFdPRkYgPSAnYXBwbGljYXRpb24vZm9udC13b2ZmJztcbiAgY29uc3QgSlBFRyA9ICdpbWFnZS9qcGVnJztcblxuICByZXR1cm4ge1xuICAgIHdvZmY6IFdPRkYsXG4gICAgd29mZjI6IFdPRkYsXG4gICAgdHRmOiAnYXBwbGljYXRpb24vZm9udC10cnVldHlwZScsXG4gICAgZW90OiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLFxuICAgIHBuZzogJ2ltYWdlL3BuZycsXG4gICAganBnOiBKUEVHLFxuICAgIGpwZWc6IEpQRUcsXG4gICAgZ2lmOiAnaW1hZ2UvZ2lmJyxcbiAgICB0aWZmOiAnaW1hZ2UvdGlmZicsXG4gICAgc3ZnOiAnaW1hZ2Uvc3ZnK3htbCdcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbWVUeXBlKHVybCkge1xuICBjb25zdCBleHRlbnNpb24gPSBwYXJzZUV4dGVuc2lvbih1cmwpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBtaW1lcygpW2V4dGVuc2lvbl0gfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhQXNVcmwoY29udGVudCwgdHlwZSkge1xuICByZXR1cm4gYGRhdGE6JHt0eXBlfTtiYXNlNjQsJHtjb250ZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/XiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gYXJnID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoYXJnKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3JjQXNEYXRhVXJsKHRleHQpIHtcbiAgY29uc3QgREFUQV9VUkxfUkVHRVggPSAvdXJsXFwoWydcIl0/KGRhdGE6KShbXidcIl0rPylbJ1wiXT9cXCkvO1xuICByZXR1cm4gdGV4dC5zZWFyY2goREFUQV9VUkxfUkVHRVgpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gY3ZUb0Jsb2IoY2FudmFzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSB3aW5kb3cuYXRvYihjYW52YXMudG9EYXRhVVJMKCkuc3BsaXQoJywnKVsxXSk7XG4gICAgY29uc3QgbGVuZ3RoID0gYmluYXJ5U3RyaW5nLmxlbmd0aDtcbiAgICBjb25zdCBiaW5hcnlBcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBiaW5hcnlBcnJheVtpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoW2JpbmFyeUFycmF5XSwge3R5cGU6ICdpbWFnZS9wbmcnfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMpIHtcbiAgaWYgKGNhbnZhcy50b0Jsb2IpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY2FudmFzLnRvQmxvYihyZXNvbHZlKTtcbiAgICB9KTtcblxuICByZXR1cm4gY3ZUb0Jsb2IoY2FudmFzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhodG1sKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyMvZywgJyUyMycpLnJlcGxhY2UoL1xcbi9nLCAnJTBBJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWR0aChub2RlKSB7XG4gIGNvbnN0IGxlZnRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbiAgY29uc3QgcmlnaHRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJyk7XG4gIHJldHVybiBub2RlLnNjcm9sbFdpZHRoICsgbGVmdEJvcmRlciArIHJpZ2h0Qm9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVpZ2h0KG5vZGUpIHtcbiAgY29uc3QgdG9wQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbiAgY29uc3QgYm90dG9tQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci1ib3R0b20td2lkdGgnKTtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsSGVpZ2h0ICsgdG9wQm9yZGVyICsgYm90dG9tQm9yZGVyO1xufVxuXG5mdW5jdGlvbiBweChub2RlLCBzdHlsZVByb3BlcnR5KSB7XG4gIGNvbnN0IHZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncHgnLCAnJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7XG4gIGNvbnN0IGJhc2UgPSBkb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICBkb2MuaGVhZC5hcHBlbmRDaGlsZChiYXNlKTtcbiAgY29uc3QgYSA9IGRvYy5jcmVhdGVFbGVtZW50KCdhJyk7XG4gIGRvYy5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICBiYXNlLmhyZWYgPSBiYXNlVXJsO1xuICBhLmhyZWYgPSB1cmw7XG4gIHJldHVybiBhLmhyZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmRFbmNvZGUodXJsLCBvcHRpb25zKSB7XG4gIGNvbnN0IFRJTUVPVVQgPSAzMDAwMDtcbiAgaWYgKG9wdGlvbnMuY2FjaGVCdXN0KSB7XG4gICAgLy8gQ2FjaGUgYnlwYXNzIHNvIHdlIGRvbnQgaGF2ZSBDT1JTIGlzc3VlcyB3aXRoIGNhY2hlZCBpbWFnZXNcbiAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdCNCeXBhc3NpbmdfdGhlX2NhY2hlXG4gICAgdXJsICs9ICgvXFw/Ly50ZXN0KHVybCkgPyAnJicgOiAnPycpICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZG9uZTtcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IHRpbWVvdXQ7XG4gICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgcmVxdWVzdC50aW1lb3V0ID0gVElNRU9VVDtcbiAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gICAgcmVxdWVzdC5zZW5kKCk7XG5cbiAgICBsZXQgcGxhY2Vob2xkZXI7XG4gICAgaWYgKG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcikge1xuICAgICAgY29uc3Qgc3BsaXQgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXIuc3BsaXQoLywvKTtcbiAgICAgIGlmIChzcGxpdCAmJiBzcGxpdFsxXSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHNwbGl0WzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG5cbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICAgIHJlc29sdmUocGxhY2Vob2xkZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZhaWwoYGNhbm5vdCBmZXRjaCByZXNvdXJjZTogJHt1cmx9LCBzdGF0dXM6ICR7cmVxdWVzdC5zdGF0dXN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcbiAgICAgIGVuY29kZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZW5jb2Rlci5yZXN1bHQuc3BsaXQoLywvKVsxXTtcbiAgICAgICAgcmVzb2x2ZShjb250ZW50KTtcbiAgICAgIH07XG4gICAgICBlbmNvZGVyLnJlYWRBc0RhdGFVUkwocmVxdWVzdC5yZXNwb25zZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGltZW91dCgpIHtcbiAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICByZXNvbHZlKHBsYWNlaG9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWwoYHRpbWVvdXQgb2YgJHtUSU1FT1VUfW1zIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIHJlc291cmNlOiAke3VybH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICByZXNvbHZlKCcnKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCB1cmwpIHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsLCBiYXNlKS5ocmVmO1xufVxuXG4vLyBTZXQgcmVsYXRpdmUgVVJMIGluIHN0eWxlc2hlZXQgdG8gYWJzb2x1dGUgdXJsXG5leHBvcnQgZnVuY3Rpb24gc2V0U3R5bGVTaGVldEJhc2VIcmVmKHRleHQsIGJhc2UpIHtcbiAgZnVuY3Rpb24gYWRkQmFzZUhyZWZUb1VybChtYXRjaCwgcDEpIHtcbiAgICBjb25zdCB1cmwgPSAvXmh0dHAvaS50ZXN0KHAxKSA/IHAxIDogY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCBwMSk7XG4gICAgcmV0dXJuIGB1cmwoJyR7dXJsfScpYDtcbiAgfVxuICByZXR1cm4gaXNTcmNBc0RhdGFVcmwodGV4dClcbiAgICA/IHRleHRcbiAgICA6IHRleHQucmVwbGFjZSgvdXJsXFwoWydcIl0/KFteJ1wiXSs/KVsnXCJdP1xcKS9nLCBhZGRCYXNlSHJlZlRvVXJsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3R5bGVTaGVldCh0ZXh0KSB7XG4gIGNvbnN0IGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnJyk7XG4gIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcblxuICByZXR1cm4gc3R5bGVFbGVtZW50LnNoZWV0O1xufVxuIl19
@@ -1,13 +1,23 @@
1
1
  import { PostProcessEffect } from '@deck.gl/core/typed';
2
2
  import { VisState } from '@kepler.gl/schemas';
3
- import { MapState, EffectParams, Effect } from '@kepler.gl/types';
3
+ import { MapState, Effect, EffectProps, EffectDescription } from '@kepler.gl/types';
4
4
  export declare function computeDeckEffects({ visState, mapState }: {
5
5
  visState: VisState;
6
6
  mapState: MapState;
7
7
  }): PostProcessEffect[];
8
- export declare function mergeEffectParams(params: Partial<EffectParams>, extraParams: Partial<EffectParams>): Partial<EffectParams>;
9
8
  /**
10
9
  * Always keep light & shadow effect at the top
11
10
  */
12
11
  export declare const fixEffectOrder: (effects: Effect[], effectOrder: string[]) => string[];
13
12
  export declare function reorderEffectOrder(effectOrder: string[], originEffectId: string, destinationEffectId: string): string[];
13
+ /**
14
+ * Validates parameters for an effect, clamps numbers to allowed ranges
15
+ * or applies default values in case of wrong non-numeric values.
16
+ * All unknown properties aren't modified.
17
+ * @param parameters Parameters candidate for an effect.
18
+ * @param effectDescription Description of an effect.
19
+ * @returns
20
+ */
21
+ export declare function validateEffectParameters(parameters: {
22
+ [key: string]: any;
23
+ } | undefined, effectDescription: EffectDescription['parameters']): EffectProps['parameters'];
@@ -1,23 +1,3 @@
1
- // Copyright (c) 2023 Uber Technologies, Inc.
2
- //
3
- // Permission is hereby granted, free of charge, to any person obtaining a copy
4
- // of this software and associated documentation files (the "Software"), to deal
5
- // in the Software without restriction, including without limitation the rights
6
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- // copies of the Software, and to permit persons to whom the Software is
8
- // furnished to do so, subject to the following conditions:
9
- //
10
- // The above copyright notice and this permission notice shall be included in
11
- // all copies or substantial portions of the Software.
12
- //
13
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- // THE SOFTWARE.
20
-
21
1
  "use strict";
22
2
 
23
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -26,57 +6,43 @@ Object.defineProperty(exports, "__esModule", {
26
6
  value: true
27
7
  });
28
8
  exports.computeDeckEffects = computeDeckEffects;
29
- exports.mergeEffectParams = mergeEffectParams;
30
9
  exports.reorderEffectOrder = reorderEffectOrder;
10
+ exports.validateEffectParameters = validateEffectParameters;
31
11
  exports.fixEffectOrder = void 0;
32
12
 
33
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
34
-
35
13
  var _sortable = require("@dnd-kit/sortable");
36
14
 
37
15
  var _suncalc = _interopRequireDefault(require("suncalc"));
38
16
 
17
+ var _lodash = _interopRequireDefault(require("lodash.clonedeep"));
18
+
39
19
  var _constants = require("@kepler.gl/constants");
40
20
 
41
21
  var _utils = require("./utils");
42
22
 
43
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
44
-
45
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
23
+ var _dataUtils = require("./data-utils");
46
24
 
25
+ // SPDX-License-Identifier: MIT
26
+ // Copyright contributors to the kepler.gl project
47
27
  function computeDeckEffects(_ref) {
48
28
  var visState = _ref.visState,
49
29
  mapState = _ref.mapState;
50
- var effects = visState.effectOrder.map(function (effectId) {
51
- return (0, _utils.findById)(effectId)(visState.effects);
52
- }).filter(function (effect) {
53
- return Boolean(effect && effect.config.isEnabled && effect.deckEffect);
54
- });
55
- var lightShadowEffect = effects.find(function (effect) {
56
- return effect.type === _constants.LIGHT_AND_SHADOW_EFFECT.type;
57
- });
58
-
59
- if (lightShadowEffect) {
60
- var timestamp = lightShadowEffect.config.params.timestamp;
61
-
62
- if (!isDaytime(mapState.latitude, mapState.longitude, timestamp)) {
63
- // TODO: interpolate for dusk/dawn
64
- // TODO: Should we avoid mutating the effect? (didn't work when tried defensive copying)
65
- lightShadowEffect.deckEffect.shadowColor[3] = 0;
30
+ // TODO: 1) deck effects per deck context 2) preserved between draws
31
+ return visState.effectOrder.map(function (effectId) {
32
+ var effect = (0, _utils.findById)(effectId)(visState.effects);
33
+
34
+ if (effect !== null && effect !== void 0 && effect.isEnabled && effect.deckEffect) {
35
+ updateEffect({
36
+ visState: visState,
37
+ mapState: mapState,
38
+ effect: effect
39
+ });
40
+ return effect.deckEffect;
66
41
  }
67
- }
68
-
69
- return effects.map(function (effect) {
70
- return effect.deckEffect;
71
- });
72
- }
73
42
 
74
- function mergeEffectParams(params, extraParams) {
75
- var p1 = params || {};
76
- var p2 = extraParams || {};
77
- return _objectSpread(_objectSpread(_objectSpread({}, p1), p2), {}, {
78
- // @ts-expect-error
79
- config: _objectSpread(_objectSpread({}, p1.config || {}), p2.config || {})
43
+ return null;
44
+ }).filter(function (effect) {
45
+ return effect;
80
46
  });
81
47
  }
82
48
  /**
@@ -126,4 +92,105 @@ function isDaytime(lat, lon, timestamp) {
126
92
 
127
93
  return date >= sunrise && date <= sunset;
128
94
  }
129
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lZmZlY3QtdXRpbHMudHMiXSwibmFtZXMiOlsiY29tcHV0ZURlY2tFZmZlY3RzIiwidmlzU3RhdGUiLCJtYXBTdGF0ZSIsImVmZmVjdHMiLCJlZmZlY3RPcmRlciIsIm1hcCIsImVmZmVjdElkIiwiZmlsdGVyIiwiZWZmZWN0IiwiQm9vbGVhbiIsImNvbmZpZyIsImlzRW5hYmxlZCIsImRlY2tFZmZlY3QiLCJsaWdodFNoYWRvd0VmZmVjdCIsImZpbmQiLCJ0eXBlIiwiTElHSFRfQU5EX1NIQURPV19FRkZFQ1QiLCJ0aW1lc3RhbXAiLCJwYXJhbXMiLCJpc0RheXRpbWUiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsInNoYWRvd0NvbG9yIiwibWVyZ2VFZmZlY3RQYXJhbXMiLCJleHRyYVBhcmFtcyIsInAxIiwicDIiLCJmaXhFZmZlY3RPcmRlciIsImluZCIsImluZGV4T2YiLCJpZCIsInNwbGljZSIsInVuc2hpZnQiLCJyZW9yZGVyRWZmZWN0T3JkZXIiLCJvcmlnaW5FZmZlY3RJZCIsImRlc3RpbmF0aW9uRWZmZWN0SWQiLCJhY3RpdmVJbmRleCIsIm92ZXJJbmRleCIsImxhdCIsImxvbiIsImRhdGUiLCJEYXRlIiwiU3VuQ2FsYyIsImdldFRpbWVzIiwic3VucmlzZSIsInN1bnNldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFJQTs7QUFDQTs7Ozs7O0FBSU8sU0FBU0Esa0JBQVQsT0FNaUI7QUFBQSxNQUx0QkMsUUFLc0IsUUFMdEJBLFFBS3NCO0FBQUEsTUFKdEJDLFFBSXNCLFFBSnRCQSxRQUlzQjtBQUN0QixNQUFJQyxPQUFPLEdBQUdGLFFBQVEsQ0FBQ0csV0FBVCxDQUNYQyxHQURXLENBQ1AsVUFBQUMsUUFBUSxFQUFJO0FBQ2YsV0FBTyxxQkFBU0EsUUFBVCxFQUFtQkwsUUFBUSxDQUFDRSxPQUE1QixDQUFQO0FBQ0QsR0FIVyxFQUlYSSxNQUpXLENBSUosVUFBQUMsTUFBTTtBQUFBLFdBQUlDLE9B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cUJBRS9CQSxPQUYrQjtBQUFBLE1BRXRCQyxNQUZzQixxQkFFdEJBLE1BRnNCOztBQUd0QyxTQUFPTCxJQUFJLElBQUlJLE9BQVIsSUFBbUJKLElBQUksSUFBSUssTUFBbEM7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXJyYXlNb3ZlfSBmcm9tICdAZG5kLWtpdC9zb3J0YWJsZSc7XG5pbXBvcnQgU3VuQ2FsYyBmcm9tICdzdW5jYWxjJztcblxuaW1wb3J0IHtQb3N0UHJvY2Vzc0VmZmVjdH0gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5cbmltcG9ydCB7TElHSFRfQU5EX1NIQURPV19FRkZFQ1R9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7ZmluZEJ5SWR9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcbmltcG9ydCB7TWFwU3RhdGUsIEVmZmVjdFBhcmFtcywgRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVEZWNrRWZmZWN0cyh7XG4gIHZpc1N0YXRlLFxuICBtYXBTdGF0ZVxufToge1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbn0pOiBQb3N0UHJvY2Vzc0VmZmVjdFtdIHtcbiAgbGV0IGVmZmVjdHMgPSB2aXNTdGF0ZS5lZmZlY3RPcmRlclxuICAgIC5tYXAoZWZmZWN0SWQgPT4ge1xuICAgICAgcmV0dXJuIGZpbmRCeUlkKGVmZmVjdElkKSh2aXNTdGF0ZS5lZmZlY3RzKTtcbiAgICB9KVxuICAgIC5maWx0ZXIoZWZmZWN0ID0+IEJvb2xlYW4oZWZmZWN0ICYmIGVmZmVjdC5jb25maWcuaXNFbmFibGVkICYmIGVmZmVjdC5kZWNrRWZmZWN0KSkgYXMgRWZmZWN0W107XG5cbiAgY29uc3QgbGlnaHRTaGFkb3dFZmZlY3QgPSBlZmZlY3RzLmZpbmQoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKTtcbiAgaWYgKGxpZ2h0U2hhZG93RWZmZWN0KSB7XG4gICAgY29uc3Qge3RpbWVzdGFtcH0gPSBsaWdodFNoYWRvd0VmZmVjdC5jb25maWcucGFyYW1zO1xuICAgIGlmICghaXNEYXl0aW1lKG1hcFN0YXRlLmxhdGl0dWRlLCBtYXBTdGF0ZS5sb25naXR1ZGUsIHRpbWVzdGFtcCkpIHtcbiAgICAgIC8vIFRPRE86IGludGVycG9sYXRlIGZvciBkdXNrL2Rhd25cbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSBhdm9pZCBtdXRhdGluZyB0aGUgZWZmZWN0PyAoZGlkbid0IHdvcmsgd2hlbiB0cmllZCBkZWZlbnNpdmUgY29weWluZylcbiAgICAgIGxpZ2h0U2hhZG93RWZmZWN0LmRlY2tFZmZlY3Quc2hhZG93Q29sb3JbM10gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWZmZWN0cy5tYXAoZWZmZWN0ID0+IGVmZmVjdC5kZWNrRWZmZWN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRWZmZWN0UGFyYW1zKFxuICBwYXJhbXM6IFBhcnRpYWw8RWZmZWN0UGFyYW1zPixcbiAgZXh0cmFQYXJhbXM6IFBhcnRpYWw8RWZmZWN0UGFyYW1zPlxuKTogUGFydGlhbDxFZmZlY3RQYXJhbXM+IHtcbiAgY29uc3QgcDEgPSBwYXJhbXMgfHwge307XG4gIGNvbnN0IHAyID0gZXh0cmFQYXJhbXMgfHwge307XG4gIHJldHVybiB7XG4gICAgLi4ucDEsXG4gICAgLi4ucDIsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGNvbmZpZzoge1xuICAgICAgLi4uKHAxLmNvbmZpZyB8fCB7fSksXG4gICAgICAuLi4ocDIuY29uZmlnIHx8IHt9KVxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBbHdheXMga2VlcCBsaWdodCAmIHNoYWRvdyBlZmZlY3QgYXQgdGhlIHRvcFxuICovXG5leHBvcnQgY29uc3QgZml4RWZmZWN0T3JkZXIgPSAoZWZmZWN0czogRWZmZWN0W10sIGVmZmVjdE9yZGVyOiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgbGlnaHRTaGFkb3dFZmZlY3QgPSBlZmZlY3RzLmZpbmQoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKTtcbiAgaWYgKGxpZ2h0U2hhZG93RWZmZWN0KSB7XG4gICAgY29uc3QgaW5kID0gZWZmZWN0T3JkZXIuaW5kZXhPZihsaWdodFNoYWRvd0VmZmVjdC5pZCk7XG4gICAgaWYgKGluZCA+IDApIHtcbiAgICAgIGVmZmVjdE9yZGVyLnNwbGljZShpbmQsIDEpO1xuICAgICAgZWZmZWN0T3JkZXIudW5zaGlmdChsaWdodFNoYWRvd0VmZmVjdC5pZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlZmZlY3RPcmRlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZW9yZGVyRWZmZWN0T3JkZXIoXG4gIGVmZmVjdE9yZGVyOiBzdHJpbmdbXSxcbiAgb3JpZ2luRWZmZWN0SWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25FZmZlY3RJZDogc3RyaW5nXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGFjdGl2ZUluZGV4ID0gZWZmZWN0T3JkZXIuaW5kZXhPZihvcmlnaW5FZmZlY3RJZCk7XG4gIGNvbnN0IG92ZXJJbmRleCA9IGVmZmVjdE9yZGVyLmluZGV4T2YoZGVzdGluYXRpb25FZmZlY3RJZCk7XG4gIHJldHVybiBhcnJheU1vdmUoZWZmZWN0T3JkZXIsIGFjdGl2ZUluZGV4LCBvdmVySW5kZXgpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRpbWUgaXMgZGF5dGltZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBsYXQgTGF0aXR1ZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb24gTG9uZ2l0dWRlXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZXN0YW1wIE1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaFxuICogQHJldHVybnMgYm9vbGVhblxuICovXG5mdW5jdGlvbiBpc0RheXRpbWUobGF0LCBsb24sIHRpbWVzdGFtcCkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wKTtcbiAgY29uc3Qge3N1bnJpc2UsIHN1bnNldH0gPSBTdW5DYWxjLmdldFRpbWVzKGRhdGUsIGxhdCwgbG9uKTtcbiAgcmV0dXJuIGRhdGUgPj0gc3VucmlzZSAmJiBkYXRlIDw9IHN1bnNldDtcbn1cbiJdfQ==
95
+ /**
96
+ * Update effect to match latest vis and map states
97
+ */
98
+
99
+
100
+ function updateEffect(_ref2) {
101
+ var visState = _ref2.visState,
102
+ mapState = _ref2.mapState,
103
+ effect = _ref2.effect;
104
+
105
+ if (effect.type === _constants.LIGHT_AND_SHADOW_EFFECT.type) {
106
+ var _effect$parameters = effect.parameters,
107
+ timestamp = _effect$parameters.timestamp,
108
+ timeMode = _effect$parameters.timeMode;
109
+ var sunLight = effect.deckEffect.directionalLights[0]; // set timestamp for shadow
110
+
111
+ if (timeMode === _constants.LIGHT_AND_SHADOW_EFFECT_TIME_MODES.current) {
112
+ timestamp = Date.now();
113
+ sunLight.timestamp = timestamp;
114
+ } else if (timeMode === _constants.LIGHT_AND_SHADOW_EFFECT_TIME_MODES.animation) {
115
+ var _visState$animationCo;
116
+
117
+ timestamp = (_visState$animationCo = visState.animationConfig.currentTime) !== null && _visState$animationCo !== void 0 ? _visState$animationCo : 0;
118
+
119
+ if (!timestamp) {
120
+ var filter = visState.filters.find(function (filter) {
121
+ return filter.type === _constants.FILTER_TYPES.timeRange && (filter.view === _constants.FILTER_VIEW_TYPES.enlarged || filter.syncedWithLayerTimeline);
122
+ });
123
+
124
+ if (filter) {
125
+ var _filter$value$, _filter$value;
126
+
127
+ timestamp = (_filter$value$ = (_filter$value = filter.value) === null || _filter$value === void 0 ? void 0 : _filter$value[0]) !== null && _filter$value$ !== void 0 ? _filter$value$ : 0;
128
+ }
129
+ }
130
+
131
+ sunLight.timestamp = timestamp;
132
+ } // output uniform shadow during nighttime
133
+
134
+
135
+ if (isDaytime(mapState.latitude, mapState.longitude, timestamp)) {
136
+ effect.deckEffect.outputUniformShadow = false;
137
+ sunLight.intensity = effect.parameters.sunLightIntensity;
138
+ } else {
139
+ effect.deckEffect.outputUniformShadow = true;
140
+ sunLight.intensity = 0;
141
+ }
142
+ }
143
+ }
144
+ /**
145
+ * Validates parameters for an effect, clamps numbers to allowed ranges
146
+ * or applies default values in case of wrong non-numeric values.
147
+ * All unknown properties aren't modified.
148
+ * @param parameters Parameters candidate for an effect.
149
+ * @param effectDescription Description of an effect.
150
+ * @returns
151
+ */
152
+
153
+
154
+ function validateEffectParameters() {
155
+ var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
156
+ var effectDescription = arguments.length > 1 ? arguments[1] : undefined;
157
+ var result = (0, _lodash["default"])(parameters);
158
+ effectDescription.forEach(function (description) {
159
+ var defaultValue = description.defaultValue,
160
+ name = description.name,
161
+ type = description.type,
162
+ min = description.min,
163
+ max = description.max;
164
+ if (!result.hasOwnProperty(name)) return;
165
+ var property = result[name];
166
+
167
+ if (type === 'color' || type === 'array') {
168
+ if (!Array.isArray(defaultValue)) return;
169
+
170
+ if (property.length !== (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.length)) {
171
+ result[name] = defaultValue;
172
+ return;
173
+ }
174
+
175
+ defaultValue.forEach(function (v, i) {
176
+ var _defaultValue$i;
177
+
178
+ var value = property[i];
179
+ value = Number.isFinite(value) ? (0, _dataUtils.clamp)([min, max], value) : (_defaultValue$i = defaultValue[i]) !== null && _defaultValue$i !== void 0 ? _defaultValue$i : min;
180
+
181
+ if (value !== undefined) {
182
+ property[i] = value;
183
+ }
184
+ });
185
+ return;
186
+ }
187
+
188
+ var value = Number.isFinite(property) ? (0, _dataUtils.clamp)([min, max], property) : defaultValue !== null && defaultValue !== void 0 ? defaultValue : min;
189
+
190
+ if (value !== undefined) {
191
+ result[name] = value;
192
+ }
193
+ });
194
+ return result;
195
+ }
196
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lZmZlY3QtdXRpbHMudHMiXSwibmFtZXMiOlsiY29tcHV0ZURlY2tFZmZlY3RzIiwidmlzU3RhdGUiLCJtYXBTdGF0ZSIsImVmZmVjdE9yZGVyIiwibWFwIiwiZWZmZWN0SWQiLCJlZmZlY3QiLCJlZmZlY3RzIiwiaXNFbmFibGVkIiwiZGVja0VmZmVjdCIsInVwZGF0ZUVmZmVjdCIsImZpbHRlciIsImZpeEVmZmVjdE9yZGVyIiwibGlnaHRTaGFkb3dFZmZlY3QiLCJmaW5kIiwidHlwZSIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUIiwiaW5kIiwiaW5kZXhPZiIsImlkIiwic3BsaWNlIiwidW5zaGlmdCIsInJlb3JkZXJFZmZlY3RPcmRlciIsIm9yaWdpbkVmZmVjdElkIiwiZGVzdGluYXRpb25FZmZlY3RJZCIsImFjdGl2ZUluZGV4Iiwib3ZlckluZGV4IiwiaXNEYXl0aW1lIiwibGF0IiwibG9uIiwidGltZXN0YW1wIiwiZGF0ZSIsIkRhdGUiLCJTdW5DYWxjIiwiZ2V0VGltZXMiLCJzdW5yaXNlIiwic3Vuc2V0IiwicGFyYW1ldGVycyIsInRpbWVNb2RlIiwic3VuTGlnaHQiLCJkaXJlY3Rpb25hbExpZ2h0cyIsIkxJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMiLCJjdXJyZW50Iiwibm93IiwiYW5pbWF0aW9uIiwiYW5pbWF0aW9uQ29uZmlnIiwiY3VycmVudFRpbWUiLCJmaWx0ZXJzIiwiRklMVEVSX1RZUEVTIiwidGltZVJhbmdlIiwidmlldyIsIkZJTFRFUl9WSUVXX1RZUEVTIiwiZW5sYXJnZWQiLCJzeW5jZWRXaXRoTGF5ZXJUaW1lbGluZSIsInZhbHVlIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJvdXRwdXRVbmlmb3JtU2hhZG93IiwiaW50ZW5zaXR5Iiwic3VuTGlnaHRJbnRlbnNpdHkiLCJ2YWxpZGF0ZUVmZmVjdFBhcmFtZXRlcnMiLCJlZmZlY3REZXNjcmlwdGlvbiIsInJlc3VsdCIsImZvckVhY2giLCJkZXNjcmlwdGlvbiIsImRlZmF1bHRWYWx1ZSIsIm5hbWUiLCJtaW4iLCJtYXgiLCJoYXNPd25Qcm9wZXJ0eSIsInByb3BlcnR5IiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidiIsImkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBUUE7O0FBQ0E7O0FBbEJBO0FBQ0E7QUFtQk8sU0FBU0Esa0JBQVQsT0FNaUI7QUFBQSxNQUx0QkMsUUFLc0IsUUFMdEJBLFFBS3NCO0FBQUEsTUFKdEJDLFFBSXNCLFFBSnRCQSxRQUlzQjtBQUN0QjtBQUNBLFNBQU9ELFFBQVEsQ0FBQ0UsV0FBVCxDQUNKQyxHQURJLENBQ0EsVUFBQUMsUUFBUSxFQUFJO0FBQ2YsUUFBTUMsTUFBTSxHQUFHLHFCQUFTRCxRQUFULEVBQW1CSixRQUFRLENBQUNNLE9BQTVCLENBQWY7O0FBQ0EsUUFBSUQsTUFBTSxTQUFOLElBQUFBLE1BQU0sV0FBTixJQUFBQSxNQUFNLENBQUVFLFNBQVIsSUFBcUJGLE1BQU0sQ0FBQ0csVUFBaEMsRUFBNEM7QUFDMUNDLE1BQUFBLFlBQVksQ0FBQztBQUFDVCxRQUFBQSxRQUFRLEVBQVJBLFFBQUQ7QUFBV0MsUUFBQUEsUUFBUSxFQUFSQSxRQUFYO0FBQXFCSSxRQUFBQSxNQUFNLEVBQU5BO0FBQXJCLE9BQUQsQ0FBWjtBQUNBLGFBQU9BLE1BQU0sQ0FBQ0csVUFBZDtBQUNEOztBQUNELFdBQU8sSUFBUDtBQUNELEdBUkksRUFTSkUsTUFUSSxDQVNHLFVBQUFMLE1BQU07QUFBQSxXQUFJQSxNQUFKO0FBQUEsR0FUVCxDQUFQO0FBVUQ7QUFFRDtBQUNBO0FBQ0E7OztBQUNPLElBQU1NLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsQ0FBQ0wsT0FBRCxFQUFvQkosV0FBcEIsRUFBd0Q7QUFDcEYsTUFBTVUsaUJBQWlCLEdBQUdOLE9BQU8sQ0FBQ08sSUFBUixDQUFhLFVBQUFSLE1BQU07QUFBQSxX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RSxHQUF4Rjs7QUFFQSxRQUFJYixLQUFLLEtBQUt3QixTQUFkLEVBQXlCO0FBQ3ZCaEIsTUFBQUEsTUFBTSxDQUFDSSxJQUFELENBQU4sR0FBZVosS0FBZjtBQUNEO0FBQ0YsR0EzQkQ7QUE0QkEsU0FBT1EsTUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHthcnJheU1vdmV9IGZyb20gJ0BkbmQta2l0L3NvcnRhYmxlJztcbmltcG9ydCBTdW5DYWxjIGZyb20gJ3N1bmNhbGMnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2guY2xvbmVkZWVwJztcblxuaW1wb3J0IHtQb3N0UHJvY2Vzc0VmZmVjdH0gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5cbmltcG9ydCB7XG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTLFxuICBGSUxURVJfVFlQRVMsXG4gIEZJTFRFUl9WSUVXX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5pbXBvcnQge01hcFN0YXRlLCBFZmZlY3QsIEVmZmVjdFByb3BzLCBFZmZlY3REZXNjcmlwdGlvbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge2ZpbmRCeUlkfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7Y2xhbXB9IGZyb20gJy4vZGF0YS11dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlRGVja0VmZmVjdHMoe1xuICB2aXNTdGF0ZSxcbiAgbWFwU3RhdGVcbn06IHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICBtYXBTdGF0ZTogTWFwU3RhdGU7XG59KTogUG9zdFByb2Nlc3NFZmZlY3RbXSB7XG4gIC8vIFRPRE86IDEpIGRlY2sgZWZmZWN0cyBwZXIgZGVjayBjb250ZXh0IDIpIHByZXNlcnZlZCBiZXR3ZWVuIGRyYXdzXG4gIHJldHVybiB2aXNTdGF0ZS5lZmZlY3RPcmRlclxuICAgIC5tYXAoZWZmZWN0SWQgPT4ge1xuICAgICAgY29uc3QgZWZmZWN0ID0gZmluZEJ5SWQoZWZmZWN0SWQpKHZpc1N0YXRlLmVmZmVjdHMpIGFzIEVmZmVjdCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlZmZlY3Q/LmlzRW5hYmxlZCAmJiBlZmZlY3QuZGVja0VmZmVjdCkge1xuICAgICAgICB1cGRhdGVFZmZlY3Qoe3Zpc1N0YXRlLCBtYXBTdGF0ZSwgZWZmZWN0fSk7XG4gICAgICAgIHJldHVybiBlZmZlY3QuZGVja0VmZmVjdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pXG4gICAgLmZpbHRlcihlZmZlY3QgPT4gZWZmZWN0KTtcbn1cblxuLyoqXG4gKiBBbHdheXMga2VlcCBsaWdodCAmIHNoYWRvdyBlZmZlY3QgYXQgdGhlIHRvcFxuICovXG5leHBvcnQgY29uc3QgZml4RWZmZWN0T3JkZXIgPSAoZWZmZWN0czogRWZmZWN0W10sIGVmZmVjdE9yZGVyOiBzdHJpbmdbXSk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgbGlnaHRTaGFkb3dFZmZlY3QgPSBlZmZlY3RzLmZpbmQoZWZmZWN0ID0+IGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKTtcbiAgaWYgKGxpZ2h0U2hhZG93RWZmZWN0KSB7XG4gICAgY29uc3QgaW5kID0gZWZmZWN0T3JkZXIuaW5kZXhPZihsaWdodFNoYWRvd0VmZmVjdC5pZCk7XG4gICAgaWYgKGluZCA+IDApIHtcbiAgICAgIGVmZmVjdE9yZGVyLnNwbGljZShpbmQsIDEpO1xuICAgICAgZWZmZWN0T3JkZXIudW5zaGlmdChsaWdodFNoYWRvd0VmZmVjdC5pZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlZmZlY3RPcmRlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZW9yZGVyRWZmZWN0T3JkZXIoXG4gIGVmZmVjdE9yZGVyOiBzdHJpbmdbXSxcbiAgb3JpZ2luRWZmZWN0SWQ6IHN0cmluZyxcbiAgZGVzdGluYXRpb25FZmZlY3RJZDogc3RyaW5nXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGFjdGl2ZUluZGV4ID0gZWZmZWN0T3JkZXIuaW5kZXhPZihvcmlnaW5FZmZlY3RJZCk7XG4gIGNvbnN0IG92ZXJJbmRleCA9IGVmZmVjdE9yZGVyLmluZGV4T2YoZGVzdGluYXRpb25FZmZlY3RJZCk7XG4gIHJldHVybiBhcnJheU1vdmUoZWZmZWN0T3JkZXIsIGFjdGl2ZUluZGV4LCBvdmVySW5kZXgpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHRpbWUgaXMgZGF5dGltZSBhdCB0aGUgZ2l2ZW4gbG9jYXRpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBsYXQgTGF0aXR1ZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb24gTG9uZ2l0dWRlXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZXN0YW1wIE1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgVW5peCBFcG9jaFxuICogQHJldHVybnMgYm9vbGVhblxuICovXG5mdW5jdGlvbiBpc0RheXRpbWUobGF0LCBsb24sIHRpbWVzdGFtcCkge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodGltZXN0YW1wKTtcbiAgY29uc3Qge3N1bnJpc2UsIHN1bnNldH0gPSBTdW5DYWxjLmdldFRpbWVzKGRhdGUsIGxhdCwgbG9uKTtcbiAgcmV0dXJuIGRhdGUgPj0gc3VucmlzZSAmJiBkYXRlIDw9IHN1bnNldDtcbn1cblxuLyoqXG4gKiBVcGRhdGUgZWZmZWN0IHRvIG1hdGNoIGxhdGVzdCB2aXMgYW5kIG1hcCBzdGF0ZXNcbiAqL1xuZnVuY3Rpb24gdXBkYXRlRWZmZWN0KHt2aXNTdGF0ZSwgbWFwU3RhdGUsIGVmZmVjdH0pIHtcbiAgaWYgKGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlKSB7XG4gICAgbGV0IHt0aW1lc3RhbXAsIHRpbWVNb2RlfSA9IGVmZmVjdC5wYXJhbWV0ZXJzO1xuICAgIGNvbnN0IHN1bkxpZ2h0ID0gZWZmZWN0LmRlY2tFZmZlY3QuZGlyZWN0aW9uYWxMaWdodHNbMF07XG5cbiAgICAvLyBzZXQgdGltZXN0YW1wIGZvciBzaGFkb3dcbiAgICBpZiAodGltZU1vZGUgPT09IExJR0hUX0FORF9TSEFET1dfRUZGRUNUX1RJTUVfTU9ERVMuY3VycmVudCkge1xuICAgICAgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgIHN1bkxpZ2h0LnRpbWVzdGFtcCA9IHRpbWVzdGFtcDtcbiAgICB9IGVsc2UgaWYgKHRpbWVNb2RlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVF9USU1FX01PREVTLmFuaW1hdGlvbikge1xuICAgICAgdGltZXN0YW1wID0gdmlzU3RhdGUuYW5pbWF0aW9uQ29uZmlnLmN1cnJlbnRUaW1lID8/IDA7XG4gICAgICBpZiAoIXRpbWVzdGFtcCkge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB2aXNTdGF0ZS5maWx0ZXJzLmZpbmQoXG4gICAgICAgICAgZmlsdGVyID0+XG4gICAgICAgICAgICBmaWx0ZXIudHlwZSA9PT0gRklMVEVSX1RZUEVTLnRpbWVSYW5nZSAmJlxuICAgICAgICAgICAgKGZpbHRlci52aWV3ID09PSBGSUxURVJfVklFV19UWVBFUy5lbmxhcmdlZCB8fCBmaWx0ZXIuc3luY2VkV2l0aExheWVyVGltZWxpbmUpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICB0aW1lc3RhbXAgPSBmaWx0ZXIudmFsdWU/LlswXSA/PyAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdW5MaWdodC50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG4gICAgfVxuXG4gICAgLy8gb3V0cHV0IHVuaWZvcm0gc2hhZG93IGR1cmluZyBuaWdodHRpbWVcbiAgICBpZiAoaXNEYXl0aW1lKG1hcFN0YXRlLmxhdGl0dWRlLCBtYXBTdGF0ZS5sb25naXR1ZGUsIHRpbWVzdGFtcCkpIHtcbiAgICAgIGVmZmVjdC5kZWNrRWZmZWN0Lm91dHB1dFVuaWZvcm1TaGFkb3cgPSBmYWxzZTtcbiAgICAgIHN1bkxpZ2h0LmludGVuc2l0eSA9IGVmZmVjdC5wYXJhbWV0ZXJzLnN1bkxpZ2h0SW50ZW5zaXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBlZmZlY3QuZGVja0VmZmVjdC5vdXRwdXRVbmlmb3JtU2hhZG93ID0gdHJ1ZTtcbiAgICAgIHN1bkxpZ2h0LmludGVuc2l0eSA9IDA7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHBhcmFtZXRlcnMgZm9yIGFuIGVmZmVjdCwgY2xhbXBzIG51bWJlcnMgdG8gYWxsb3dlZCByYW5nZXNcbiAqIG9yIGFwcGxpZXMgZGVmYXVsdCB2YWx1ZXMgaW4gY2FzZSBvZiB3cm9uZyBub24tbnVtZXJpYyB2YWx1ZXMuXG4gKiBBbGwgdW5rbm93biBwcm9wZXJ0aWVzIGFyZW4ndCBtb2RpZmllZC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFBhcmFtZXRlcnMgY2FuZGlkYXRlIGZvciBhbiBlZmZlY3QuXG4gKiBAcGFyYW0gZWZmZWN0RGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgYW4gZWZmZWN0LlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRWZmZWN0UGFyYW1ldGVycyhcbiAgcGFyYW1ldGVyczogRWZmZWN0UHJvcHNbJ3BhcmFtZXRlcnMnXSA9IHt9LFxuICBlZmZlY3REZXNjcmlwdGlvbjogRWZmZWN0RGVzY3JpcHRpb25bJ3BhcmFtZXRlcnMnXVxuKTogRWZmZWN0UHJvcHNbJ3BhcmFtZXRlcnMnXSB7XG4gIGNvbnN0IHJlc3VsdCA9IGNsb25lRGVlcChwYXJhbWV0ZXJzKTtcbiAgZWZmZWN0RGVzY3JpcHRpb24uZm9yRWFjaChkZXNjcmlwdGlvbiA9PiB7XG4gICAgY29uc3Qge2RlZmF1bHRWYWx1ZSwgbmFtZSwgdHlwZSwgbWluLCBtYXh9ID0gZGVzY3JpcHRpb247XG5cbiAgICBpZiAoIXJlc3VsdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgcmV0dXJuO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcmVzdWx0W25hbWVdO1xuXG4gICAgaWYgKHR5cGUgPT09ICdjb2xvcicgfHwgdHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSkpIHJldHVybjtcbiAgICAgIGlmIChwcm9wZXJ0eS5sZW5ndGggIT09IGRlZmF1bHRWYWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVmYXVsdFZhbHVlLmZvckVhY2goKHYsIGkpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gcHJvcGVydHlbaV07XG4gICAgICAgIHZhbHVlID0gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IGNsYW1wKFttaW4sIG1heF0sIHZhbHVlKSA6IGRlZmF1bHRWYWx1ZVtpXSA/PyBtaW47XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJvcGVydHlbaV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBOdW1iZXIuaXNGaW5pdGUocHJvcGVydHkpID8gY2xhbXAoW21pbiwgbWF4XSwgcHJvcGVydHkpIDogZGVmYXVsdFZhbHVlID8/IG1pbjtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuIl19