@carto/kepler.gl 0.0.71-alpha.3 → 0.0.71

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 (43) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/components/common/item-selector/accessor.js +2 -2
  3. package/dist/components/common/item-selector/dropdown-list.js +8 -10
  4. package/dist/components/common/item-selector/item-selector.js +2 -2
  5. package/dist/components/common/styled-components.js +13 -21
  6. package/dist/components/kepler-gl.js +2 -2
  7. package/dist/components/map-container.js +22 -148
  8. package/dist/components/plot-container.js +6 -10
  9. package/dist/components/side-panel/layer-panel/color-range-selector.js +8 -43
  10. package/dist/components/side-panel/layer-panel/color-selector.js +1 -7
  11. package/dist/components/side-panel/layer-panel/layer-configurator.js +10 -35
  12. package/dist/constants/color-ranges.js +2 -12
  13. package/dist/constants/default-settings.js +4 -7
  14. package/dist/layers/base-layer.js +45 -139
  15. package/dist/layers/point-layer/point-layer.js +3 -2
  16. package/dist/localization/en.js +2 -5
  17. package/dist/reducers/vis-state-merger.js +2 -16
  18. package/dist/schemas/vis-state-schema.js +2 -2
  19. package/dist/utils/dom-to-image.js +6 -1
  20. package/package.json +2 -1
  21. package/src/components/common/item-selector/accessor.js +1 -1
  22. package/src/components/common/item-selector/dropdown-list.js +15 -24
  23. package/src/components/common/item-selector/item-selector.js +1 -1
  24. package/src/components/common/styled-components.js +2 -33
  25. package/src/components/kepler-gl.js +0 -4
  26. package/src/components/map-container.js +22 -152
  27. package/src/components/plot-container.js +3 -14
  28. package/src/components/side-panel/layer-panel/color-range-selector.js +8 -37
  29. package/src/components/side-panel/layer-panel/color-selector.js +0 -7
  30. package/src/components/side-panel/layer-panel/layer-configurator.js +7 -60
  31. package/src/constants/color-ranges.js +0 -9
  32. package/src/constants/default-settings.js +2 -5
  33. package/src/layers/base-layer.js +27 -93
  34. package/src/layers/layer-factory.d.ts +0 -1
  35. package/src/layers/point-layer/point-layer.js +1 -1
  36. package/src/localization/en.js +1 -4
  37. package/src/reducers/vis-state-merger.js +1 -13
  38. package/src/schemas/vis-state-schema.js +1 -1
  39. package/src/utils/dom-to-image.js +5 -0
  40. package/dist/components/side-panel/layer-panel/hex-column-config.js +0 -84
  41. package/dist/utils/custom-scales.js +0 -28
  42. package/src/components/side-panel/layer-panel/hex-column-config.js +0 -40
  43. package/src/utils/custom-scales.js +0 -20
@@ -538,6 +538,11 @@ function newImages() {
538
538
  return Promise.resolve(nd);
539
539
  }
540
540
 
541
+ if (background.search(/url\("data:image\/svg\+xml[^"]*"\)/) !== -1) {
542
+ nd.style.removeProperty('background');
543
+ return Promise.resolve(nd);
544
+ }
545
+
541
546
  return inliner.inlineAll(background).then(function (inlined) {
542
547
  nd.style.setProperty('background', inlined, nd.style.getPropertyPriority('background'));
543
548
  }).then(function () {
@@ -549,4 +554,4 @@ function newImages() {
549
554
 
550
555
  var _default = domtoimage;
551
556
  exports["default"] = _default;
552
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kb20tdG8taW1hZ2UuanMiXSwibmFtZXMiOlsiaW5saW5lciIsIm5ld0lubGluZXIiLCJmb250RmFjZXMiLCJuZXdGb250RmFjZXMiLCJpbWFnZXMiLCJuZXdJbWFnZXMiLCJkZWZhdWx0T3B0aW9ucyIsImltYWdlUGxhY2Vob2xkZXIiLCJ1bmRlZmluZWQiLCJjYWNoZUJ1c3QiLCJkb210b2ltYWdlIiwidG9TdmciLCJ0b1BuZyIsInRvSnBlZyIsInRvQmxvYiIsInRvUGl4ZWxEYXRhIiwiaW1wbCIsIm9wdGlvbnMiLCJub2RlIiwiY29weU9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJuZCIsImNsb25lTm9kZSIsImZpbHRlciIsImVtYmVkRm9udHMiLCJpbmxpbmVJbWFnZXMiLCJhcHBseU9wdGlvbnMiLCJjbG9uZSIsIm1ha2VTdmdEYXRhVXJpIiwid2lkdGgiLCJoZWlnaHQiLCJiZ2NvbG9yIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3BlcnR5IiwiZHJhdyIsImNhbnZhcyIsImdldENvbnRleHQiLCJnZXRJbWFnZURhdGEiLCJkYXRhIiwidG9EYXRhVVJMIiwicXVhbGl0eSIsImNhbnZhc1RvQmxvYiIsImRvbU5vZGUiLCJtYWtlSW1hZ2UiLCJpbWFnZSIsIm5ld0NhbnZhcyIsImRyYXdJbWFnZSIsImROb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJyb290IiwibWFrZU5vZGVDb3B5IiwiY2xvbmVDaGlsZHJlbiIsIndpbmRvdyIsIkhUTUxDYW52YXNFbGVtZW50IiwiY2xvbmVDaGlsZHJlbkluT3JkZXIiLCJwYXJlbnQiLCJhcnJDaGlsZHJlbiIsImZsdCIsImRvbmUiLCJjaGlsZCIsImNoaWxkQ2xvbmUiLCJhcHBlbmRDaGlsZCIsIm9yaWdpbmFsIiwiY2hpbGRyZW4iLCJjaGlsZE5vZGVzIiwibGVuZ3RoIiwicmVzb2x2ZUFsbCIsImNzc1RleHQiLCJzdHlsZU5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImlubGluZUFsbCIsInNldEF0dHJpYnV0ZSIsInNlcmlhbGl6ZWRTdHJpbmciLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJ4aHRtbCIsImZvcmVpZ25PYmplY3QiLCJzdmdTdHIiLCJVUkxfUkVHRVgiLCJzaG91bGRQcm9jZXNzIiwicmVhZFVybHMiLCJpbmxpbmUiLCJzdHJpbmciLCJzZWFyY2giLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiLCJwdXNoIiwidXJsIiwidXJsQXNSZWdleCIsInVybDAiLCJSZWdFeHAiLCJiYXNlVXJsIiwiZ2V0IiwidWwiLCJkYXRhVXJsIiwicmVwbGFjZSIsInVybHMiLCJzdHIiLCJyZWFkQWxsIiwid2ViRm9udHMiLCJhbGwiLCJtYXAiLCJ3ZWJGb250IiwiY3NzU3RyaW5ncyIsImpvaW4iLCJzdHlsZVNoZWV0cyIsImxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzIiwiZ2V0Q3NzUnVsZXMiLCJzZWxlY3RXZWJGb250UnVsZXMiLCJydWxlcyIsIm5ld1dlYkZvbnQiLCJjc3NSdWxlcyIsInJ1bGUiLCJ0eXBlIiwiQ1NTUnVsZSIsIkZPTlRfRkFDRV9SVUxFIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNoZWV0IiwiaHJlZiIsImNhY2hlIiwiaW5jbHVkZXMiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwicmVzcG9uc2UiLCJ0ZXh0Iiwic2V0QmFzZUhyZWYiLCJ0b1N0eWxlU2hlZXQiLCJlcnIiLCJjb25zb2xlIiwid2FybiIsIklNQUdFX0VYUE9SVF9FUlJPUlMiLCJzdHlsZVNoZWV0IiwibG9nIiwiYmFzZSIsInNwbGl0IiwicG9wIiwiYWRkQmFzZUhyZWZUb1VybCIsInAxIiwidGVzdCIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJjb25jYXQiLCJ1cmwxIiwidXJsMiIsInVybDMiLCJpIiwibCIsImRvYyIsImltcGxlbWVudGF0aW9uIiwiY3JlYXRlSFRNTERvY3VtZW50Iiwic3R5bGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJib2R5IiwiZSIsImJpbmQiLCJ3ZWJGb250UnVsZSIsInBhcmVudFN0eWxlU2hlZXQiLCJzcmMiLCJuZXdJbWFnZSIsImVsZW1lbnQiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwiRWxlbWVudCIsImlubGluZUJhY2tncm91bmQiLCJIVE1MSW1hZ2VFbGVtZW50IiwiYmFja2dyb3VuZCIsImlubGluZWQiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5UHJpb3JpdHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBeUJBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQTlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQXlCQSxJQUFNQSxPQUFPLEdBQUdDLFVBQVUsRUFBMUI7QUFDQSxJQUFNQyxTQUFTLEdBQUdDLFlBQVksRUFBOUI7QUFDQSxJQUFNQyxNQUFNLEdBQUdDLFNBQVMsRUFBeEIsQyxDQUNBOztBQUNBLElBQU1DLGNBQWMsR0FBRztBQUNyQjtBQUNBQyxFQUFBQSxnQkFBZ0IsRUFBRUMsU0FGRztBQUdyQjtBQUNBQyxFQUFBQSxTQUFTLEVBQUU7QUFKVSxDQUF2QjtBQU9BLElBQU1DLFVBQVUsR0FBRztBQUNqQkMsRUFBQUEsS0FBSyxFQUFMQSxLQURpQjtBQUVqQkMsRUFBQUEsS0FBSyxFQUFMQSxLQUZpQjtBQUdqQkMsRUFBQUEsTUFBTSxFQUFOQSxNQUhpQjtBQUlqQkMsRUFBQUEsTUFBTSxFQUFOQSxNQUppQjtBQUtqQkMsRUFBQUEsV0FBVyxFQUFYQSxXQUxpQjtBQU1qQkMsRUFBQUEsSUFBSSxFQUFFO0FBQ0pkLElBQUFBLFNBQVMsRUFBVEEsU0FESTtBQUVKRSxJQUFBQSxNQUFNLEVBQU5BLE1BRkk7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UDs7QUFPQSxhQUFTeUcsZ0JBQVQsQ0FBMEJ2SixFQUExQixFQUE4QjtBQUM1QixVQUFNeUosVUFBVSxHQUFHekosRUFBRSxDQUFDVyxLQUFILENBQVM2RixnQkFBVCxDQUEwQixZQUExQixDQUFuQjs7QUFFQSxVQUFJLENBQUNpRCxVQUFMLEVBQWlCO0FBQ2YsZUFBTzVKLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsRUFBaEIsQ0FBUDtBQUNEOztBQUVELGFBQU92QixPQUFPLENBQ1hnRixTQURJLENBQ01nRyxVQUROLEVBRUoxSixJQUZJLENBRUMsVUFBQTJKLE9BQU8sRUFBSTtBQUNmMUosUUFBQUEsRUFBRSxDQUFDVyxLQUFILENBQVNnSixXQUFULENBQXFCLFlBQXJCLEVBQW1DRCxPQUFuQyxFQUE0QzFKLEVBQUUsQ0FBQ1csS0FBSCxDQUFTaUosbUJBQVQsQ0FBNkIsWUFBN0IsQ0FBNUM7QUFDRCxPQUpJLEVBS0o3SixJQUxJLENBS0M7QUFBQSxlQUFNQyxFQUFOO0FBQUEsT0FMRCxDQUFQO0FBTUQ7QUFDRjtBQUNGOztlQUVjYixVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuLyoqXG4gKiBUaGlzIGZpbGUgaXMgY29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3RzYXllbi9kb20tdG8taW1hZ2VcbiAqIE1vZGlmaWVkIGJ5IGhlc2hhbjAxMzEgdG8gYWxsb3cgbG9hZGluZyBleHRlcm5hbCBzdHlsZXNoZWV0cyBhbmQgaW5saW5lIHdlYmZvbnRzXG4gKi9cblxuaW1wb3J0IHdpbmRvdyBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBkb2N1bWVudCBmcm9tICdnbG9iYWwvZG9jdW1lbnQnO1xuaW1wb3J0IGNvbnNvbGUgZnJvbSAnZ2xvYmFsL2NvbnNvbGUnO1xuaW1wb3J0IHN2Z1RvTWluaURhdGFVUkkgZnJvbSAnbWluaS1zdmctZGF0YS11cmknO1xuaW1wb3J0IHtJTUFHRV9FWFBPUlRfRVJST1JTfSBmcm9tICdjb25zdGFudHMvdXNlci1mZWVkYmFja3MnO1xuaW1wb3J0IHtcbiAgY2FudmFzVG9CbG9iLFxuICBlc2NhcGUsXG4gIGVzY2FwZVhodG1sLFxuICBkZWxheSxcbiAgcHJvY2Vzc0Nsb25lLFxuICBhc0FycmF5LFxuICBtYWtlSW1hZ2UsXG4gIG1pbWVUeXBlLFxuICBkYXRhQXNVcmwsXG4gIGlzRGF0YVVybCxcbiAgaXNTcmNBc0RhdGFVcmwsXG4gIHJlc29sdmVVcmwsXG4gIGdldFdpZHRoLFxuICBnZXRIZWlnaHQsXG4gIGdldEFuZEVuY29kZVxufSBmcm9tICcuL2RvbS11dGlscyc7XG5cbmNvbnN0IGlubGluZXIgPSBuZXdJbmxpbmVyKCk7XG5jb25zdCBmb250RmFjZXMgPSBuZXdGb250RmFjZXMoKTtcbmNvbnN0IGltYWdlcyA9IG5ld0ltYWdlcygpO1xuLy8gRGVmYXVsdCBpbXBsIG9wdGlvbnNcbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAvLyBEZWZhdWx0IGlzIHRvIGZhaWwgb24gZXJyb3IsIG5vIHBsYWNlaG9sZGVyXG4gIGltYWdlUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgLy8gRGVmYXVsdCBjYWNoZSBidXN0IGlzIGZhbHNlLCBpdCB3aWxsIHVzZSB0aGUgY2FjaGVcbiAgY2FjaGVCdXN0OiBmYWxzZVxufTtcblxuY29uc3QgZG9tdG9pbWFnZSA9IHtcbiAgdG9TdmcsXG4gIHRvUG5nLFxuICB0b0pwZWcsXG4gIHRvQmxvYixcbiAgdG9QaXhlbERhdGEsXG4gIGltcGw6IHtcbiAgICBmb250RmFjZXMsXG4gICAgaW1hZ2VzLFxuICAgIGlubGluZXIsXG4gICAgb3B0aW9uczoge31cbiAgfVxufTtcblxuLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSAtIFNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwYXNzZWQgbm9kZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dFxuICAgKiAgICAgICAgICAoZXhjbHVkaW5nIG5vZGUgbWVhbnMgZXhjbHVkaW5nIGl0J3MgY2hpbGRyZW4gYXMgd2VsbCkuIE5vdCBjYWxsZWQgb24gdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmJnY29sb3JdIC0gY29sb3IgZm9yIHRoZSBiYWNrZ3JvdW5kLCBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlLlxuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMud2lkdGhdIC0gd2lkdGggdG8gYmUgYXBwbGllZCB0byBub2RlIGJlZm9yZSByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5oZWlnaHRdIC0gaGVpZ2h0IHRvIGJlIGFwcGxpZWQgdG8gbm9kZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuc3R5bGVdIC0gYW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIG5vZGUncyBzdHlsZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMucXVhbGl0eV0gLSBhIE51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5IChhcHBsaWNhYmxlIHRvIEpQRUcgb25seSksXG4gICAgICAgICAgICAgIGRlZmF1bHRzIHRvIDEuMC5cbiAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyXSAtIGRhdGFVUkwgdG8gdXNlIGFzIGEgcGxhY2Vob2xkZXIgZm9yIGZhaWxlZCBpbWFnZXMsIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGZhaWwgZmFzdCBvbiBpbWFnZXMgd2UgY2FuJ3QgZmV0Y2hcbiAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuY2FjaGVCdXN0XSAtIHNldCB0byB0cnVlIHRvIGNhY2hlIGJ1c3QgYnkgYXBwZW5kaW5nIHRoZSB0aW1lIHRvIHRoZSByZXF1ZXN0IHVybFxuICAgICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFNWRyBpbWFnZSBkYXRhIFVSTFxuICAgICogKi9cbmZ1bmN0aW9uIHRvU3ZnKG5vZGUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGNvcHlPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpXG4gICAgLnRoZW4obmQgPT4gY2xvbmVOb2RlKG5kLCBvcHRpb25zLmZpbHRlciwgdHJ1ZSkpXG4gICAgLnRoZW4oZW1iZWRGb250cylcbiAgICAudGhlbihpbmxpbmVJbWFnZXMpXG4gICAgLnRoZW4oYXBwbHlPcHRpb25zKVxuICAgIC50aGVuKGNsb25lID0+XG4gICAgICBtYWtlU3ZnRGF0YVVyaShjbG9uZSwgb3B0aW9ucy53aWR0aCB8fCBnZXRXaWR0aChub2RlKSwgb3B0aW9ucy5oZWlnaHQgfHwgZ2V0SGVpZ2h0KG5vZGUpKVxuICAgICk7XG5cbiAgZnVuY3Rpb24gYXBwbHlPcHRpb25zKGNsb25lKSB7XG4gICAgaWYgKG9wdGlvbnMuYmdjb2xvcikgY2xvbmUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iZ2NvbG9yO1xuXG4gICAgaWYgKG9wdGlvbnMud2lkdGgpIGNsb25lLnN0eWxlLndpZHRoID0gYCR7b3B0aW9ucy53aWR0aH1weGA7XG4gICAgaWYgKG9wdGlvbnMuaGVpZ2h0KSBjbG9uZS5zdHlsZS5oZWlnaHQgPSBgJHtvcHRpb25zLmhlaWdodH1weGA7XG5cbiAgICBpZiAob3B0aW9ucy5zdHlsZSlcbiAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMuc3R5bGUpLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICBjbG9uZS5zdHlsZVtwcm9wZXJ0eV0gPSBvcHRpb25zLnN0eWxlW3Byb3BlcnR5XTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBVaW50OEFycmF5IGNvbnRhaW5pbmcgUkdCQSBwaXhlbCBkYXRhLlxuICogKi9cbmZ1bmN0aW9uIHRvUGl4ZWxEYXRhKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihcbiAgICBjYW52YXMgPT4gY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKDAsIDAsIGdldFdpZHRoKG5vZGUpLCBnZXRIZWlnaHQobm9kZSkpLmRhdGFcbiAgKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFBORyBpbWFnZSBkYXRhIFVSTFxuICogKi9cbmZ1bmN0aW9uIHRvUG5nKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihjYW52YXMgPT4gY2FudmFzLnRvRGF0YVVSTCgpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIEpQRUcgaW1hZ2UgZGF0YSBVUkxcbiAqICovXG5mdW5jdGlvbiB0b0pwZWcobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucykudGhlbihjYW52YXMgPT4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIG9wdGlvbnMucXVhbGl0eSB8fCAxLjApKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFBORyBpbWFnZSBibG9iXG4gKiAqL1xuZnVuY3Rpb24gdG9CbG9iKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSkudGhlbihjYW52YXNUb0Jsb2IpO1xufVxuXG5mdW5jdGlvbiBjb3B5T3B0aW9ucyhvcHRpb25zKSB7XG4gIC8vIENvcHkgb3B0aW9ucyB0byBpbXBsIG9wdGlvbnMgZm9yIHVzZSBpbiBpbXBsXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyID09PSAndW5kZWZpbmVkJykge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmltYWdlUGxhY2Vob2xkZXIgPSBkZWZhdWx0T3B0aW9ucy5pbWFnZVBsYWNlaG9sZGVyO1xuICB9IGVsc2Uge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmltYWdlUGxhY2Vob2xkZXIgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXI7XG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbnMuY2FjaGVCdXN0ID09PSAndW5kZWZpbmVkJykge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmNhY2hlQnVzdCA9IGRlZmF1bHRPcHRpb25zLmNhY2hlQnVzdDtcbiAgfSBlbHNlIHtcbiAgICBkb210b2ltYWdlLmltcGwub3B0aW9ucy5jYWNoZUJ1c3QgPSBvcHRpb25zLmNhY2hlQnVzdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkcmF3KGRvbU5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvU3ZnKGRvbU5vZGUsIG9wdGlvbnMpXG4gICAgLnRoZW4obWFrZUltYWdlKVxuICAgIC50aGVuKGRlbGF5KDEwMCkpXG4gICAgLnRoZW4oaW1hZ2UgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gbmV3Q2FudmFzKGRvbU5vZGUpO1xuICAgICAgY2FudmFzLmdldENvbnRleHQoJzJkJykuZHJhd0ltYWdlKGltYWdlLCAwLCAwKTtcbiAgICAgIHJldHVybiBjYW52YXM7XG4gICAgfSk7XG5cbiAgZnVuY3Rpb24gbmV3Q2FudmFzKGROb2RlKSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY2FudmFzLndpZHRoID0gb3B0aW9ucy53aWR0aCB8fCBnZXRXaWR0aChkTm9kZSk7XG4gICAgY2FudmFzLmhlaWdodCA9IG9wdGlvbnMuaGVpZ2h0IHx8IGdldEhlaWdodChkTm9kZSk7XG5cbiAgICBpZiAob3B0aW9ucy5iZ2NvbG9yKSB7XG4gICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmJnY29sb3I7XG4gICAgICBjdHguZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FudmFzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lTm9kZShub2RlLCBmaWx0ZXIsIHJvb3QpIHtcbiAgaWYgKCFyb290ICYmIGZpbHRlciAmJiAhZmlsdGVyKG5vZGUpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKVxuICAgIC50aGVuKG1ha2VOb2RlQ29weSlcbiAgICAudGhlbihjbG9uZSA9PiBjbG9uZUNoaWxkcmVuKG5vZGUsIGNsb25lLCBmaWx0ZXIpKVxuICAgIC50aGVuKGNsb25lID0+IHByb2Nlc3NDbG9uZShub2RlLCBjbG9uZSkpO1xuXG4gIGZ1bmN0aW9uIG1ha2VOb2RlQ29weShuZCkge1xuICAgIGlmIChuZCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudCkge1xuICAgICAgcmV0dXJuIG1ha2VJbWFnZShuZC50b0RhdGFVUkwoKSk7XG4gICAgfVxuICAgIHJldHVybiBuZC5jbG9uZU5vZGUoZmFsc2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbkluT3JkZXIocGFyZW50LCBhcnJDaGlsZHJlbiwgZmx0KSB7XG4gICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBhcnJDaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGRvbmUgPSBkb25lXG4gICAgICAgIC50aGVuKCgpID0+IGNsb25lTm9kZShjaGlsZCwgZmx0KSlcbiAgICAgICAgLnRoZW4oY2hpbGRDbG9uZSA9PiB7XG4gICAgICAgICAgaWYgKGNoaWxkQ2xvbmUpIHtcbiAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChjaGlsZENsb25lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbihvcmlnaW5hbCwgY2xvbmUsIGZsdCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gb3JpZ2luYWwuY2hpbGROb2RlcztcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNsb25lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVDaGlsZHJlbkluT3JkZXIoY2xvbmUsIGFzQXJyYXkoY2hpbGRyZW4pLCBmbHQpLnRoZW4oKCkgPT4gY2xvbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtYmVkRm9udHMobm9kZSkge1xuICByZXR1cm4gZm9udEZhY2VzLnJlc29sdmVBbGwoKS50aGVuKGNzc1RleHQgPT4ge1xuICAgIGNvbnN0IHN0eWxlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgbm9kZS5hcHBlbmRDaGlsZChzdHlsZU5vZGUpO1xuICAgIHN0eWxlTm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3NUZXh0KSk7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbmxpbmVJbWFnZXMobm9kZSkge1xuICByZXR1cm4gaW1hZ2VzLmlubGluZUFsbChub2RlKS50aGVuKCgpID0+IG5vZGUpO1xufVxuXG5mdW5jdGlvbiBtYWtlU3ZnRGF0YVVyaShub2RlLCB3aWR0aCwgaGVpZ2h0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSkudGhlbihuZCA9PiB7XG4gICAgbmQuc2V0QXR0cmlidXRlKCd4bWxucycsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFN0cmluZyA9IG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKG5kKTtcblxuICAgIGNvbnN0IHhodG1sID0gZXNjYXBlWGh0bWwoc2VyaWFsaXplZFN0cmluZyk7XG4gICAgY29uc3QgZm9yZWlnbk9iamVjdCA9IGA8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPiR7eGh0bWx9PC9mb3JlaWduT2JqZWN0PmA7XG4gICAgY29uc3Qgc3ZnU3RyID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiJHt3aWR0aH1cIiBoZWlnaHQ9XCIke2hlaWdodH1cIj4ke2ZvcmVpZ25PYmplY3R9PC9zdmc+YDtcblxuICAgIC8vIE9wdGltaXppbmcgU1ZHcyBpbiBkYXRhIFVSSXNcbiAgICAvLyBzZWUgaHR0cHM6Ly9jb2RlcGVuLmlvL3RpZ3QvcG9zdC9vcHRpbWl6aW5nLXN2Z3MtaW4tZGF0YS11cmlzXG4gICAgLy8gdGhlIGJlc3Qgd2F5IG9mIGVuY29kaW5nIFNWRyBpbiBhIGRhdGE6IFVSSSBpcyBkYXRhOmltYWdlL3N2Zyt4bWwsW2FjdHVhbCBkYXRhXS5cbiAgICAvLyBXZSBkb27igJl0IG5lZWQgdGhlIDtjaGFyc2V0PXV0Zi04IHBhcmFtZXRlciBiZWNhdXNlIHRoZSBnaXZlbiBTVkcgaXMgQVNDSUkuXG4gICAgcmV0dXJuIHN2Z1RvTWluaURhdGFVUkkoc3ZnU3RyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5ld0lubGluZXIoKSB7XG4gIGNvbnN0IFVSTF9SRUdFWCA9IC91cmxcXChbJ1wiXT8oW14nXCJdKz8pWydcIl0/XFwpL2c7XG5cbiAgcmV0dXJuIHtcbiAgICBpbmxpbmVBbGwsXG4gICAgc2hvdWxkUHJvY2VzcyxcbiAgICBpbXBsOiB7XG4gICAgICByZWFkVXJscyxcbiAgICAgIGlubGluZVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBzaG91bGRQcm9jZXNzKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcuc2VhcmNoKFVSTF9SRUdFWCkgIT09IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZFVybHMoc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IG1hdGNoO1xuICAgIHdoaWxlICgobWF0Y2ggPSBVUkxfUkVHRVguZXhlYyhzdHJpbmcpKSAhPT0gbnVsbCkge1xuICAgICAgcmVzdWx0LnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LmZpbHRlcih1cmwgPT4ge1xuICAgICAgcmV0dXJuICFpc0RhdGFVcmwodXJsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVybEFzUmVnZXgodXJsMCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGAodXJsXFxcXChbXFwnXCJdPykoJHtlc2NhcGUodXJsMCl9KShbXFwnXCJdP1xcXFwpKWAsICdnJyk7XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmUoc3RyaW5nLCB1cmwsIGJhc2VVcmwsIGdldCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXJsKVxuICAgICAgLnRoZW4odWwgPT4gKGJhc2VVcmwgPyByZXNvbHZlVXJsKHVsLCBiYXNlVXJsKSA6IHVsKSlcbiAgICAgIC50aGVuKHVsID0+ICh0eXBlb2YgZ2V0ID09PSAnZnVuY3Rpb24nID8gZ2V0KHVsKSA6IGdldEFuZEVuY29kZSh1bCwgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMpKSlcbiAgICAgIC50aGVuKGRhdGEgPT4gZGF0YUFzVXJsKGRhdGEsIG1pbWVUeXBlKHVybCkpKVxuICAgICAgLnRoZW4oZGF0YVVybCA9PiBzdHJpbmcucmVwbGFjZSh1cmxBc1JlZ2V4KHVybCksIGAkMSR7ZGF0YVVybH0kM2ApKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlubGluZUFsbChzdHJpbmcsIGJhc2VVcmwsIGdldCkge1xuICAgIGlmICghc2hvdWxkUHJvY2VzcyhzdHJpbmcpIHx8IGlzU3JjQXNEYXRhVXJsKHN0cmluZykpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdHJpbmcpXG4gICAgICAudGhlbihyZWFkVXJscylcbiAgICAgIC50aGVuKHVybHMgPT4ge1xuICAgICAgICBsZXQgZG9uZSA9IFByb21pc2UucmVzb2x2ZShzdHJpbmcpO1xuICAgICAgICB1cmxzLmZvckVhY2godXJsID0+IHtcbiAgICAgICAgICBkb25lID0gZG9uZS50aGVuKHN0ciA9PiBpbmxpbmUoc3RyLCB1cmwsIGJhc2VVcmwsIGdldCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRvbmU7XG4gICAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBuZXdGb250RmFjZXMoKSB7XG4gIHJldHVybiB7XG4gICAgcmVzb2x2ZUFsbCxcbiAgICBpbXBsOiB7cmVhZEFsbH1cbiAgfTtcblxuICBmdW5jdGlvbiByZXNvbHZlQWxsKCkge1xuICAgIHJldHVybiByZWFkQWxsKClcbiAgICAgIC50aGVuKHdlYkZvbnRzID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHdlYkZvbnRzLm1hcCh3ZWJGb250ID0+IHdlYkZvbnQucmVzb2x2ZSgpKSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oY3NzU3RyaW5ncyA9PiBjc3NTdHJpbmdzLmpvaW4oJ1xcbicpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBbGwoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhc0FycmF5KGRvY3VtZW50LnN0eWxlU2hlZXRzKSlcbiAgICAgIC50aGVuKGxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzKVxuICAgICAgLnRoZW4oZ2V0Q3NzUnVsZXMpXG4gICAgICAudGhlbihzZWxlY3RXZWJGb250UnVsZXMpXG4gICAgICAudGhlbihydWxlcyA9PiBydWxlcy5tYXAobmV3V2ViRm9udCkpO1xuXG4gICAgZnVuY3Rpb24gc2VsZWN0V2ViRm9udFJ1bGVzKGNzc1J1bGVzKSB7XG4gICAgICByZXR1cm4gY3NzUnVsZXNcbiAgICAgICAgLmZpbHRlcihydWxlID0+IHJ1bGUudHlwZSA9PT0gd2luZG93LkNTU1J1bGUuRk9OVF9GQUNFX1JVTEUpXG4gICAgICAgIC5maWx0ZXIocnVsZSA9PiBpbmxpbmVyLnNob3VsZFByb2Nlc3MocnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzKHN0eWxlU2hlZXRzKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgIHN0eWxlU2hlZXRzLm1hcChzaGVldCA9PiB7XG4gICAgICAgICAgaWYgKHNoZWV0LmhyZWYpIHtcbiAgICAgICAgICAgIC8vIGNsb3VkZm9udCBkb2Vzbid0IGhhdmUgYWxsb3cgb3JpZ2luIGhlYWRlciBwcm9wZXJseSBzZXRcbiAgICAgICAgICAgIC8vIGVycm9yIHJlc3BvbnNlIHdpbGwgcmVtYWluIGluIGNhY2hlXG4gICAgICAgICAgICBjb25zdCBjYWNoZSA9IHNoZWV0LmhyZWYuaW5jbHVkZXMoJ3ViZXItZm9udHMnKSA/ICduby1jYWNoZScgOiAnZGVmYXVsdCc7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93XG4gICAgICAgICAgICAgIC5mZXRjaChzaGVldC5ocmVmLCB7Y3JlZGVudGlhbHM6ICdvbWl0JywgY2FjaGV9KVxuICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS50ZXh0KCkpXG4gICAgICAgICAgICAgIC50aGVuKHNldEJhc2VIcmVmKHNoZWV0LmhyZWYpKVxuICAgICAgICAgICAgICAudGhlbih0b1N0eWxlU2hlZXQpXG4gICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhbnkgZXJyb3IgdGhhdCBvY2N1cnJlZCBpbiBhbnkgb2YgdGhlIHByZXZpb3VzXG4gICAgICAgICAgICAgICAgLy8gcHJvbWlzZXMgaW4gdGhlIGNoYWluLiBzdHlsZXNoZWV0IGZhaWxlZCB0byBsb2FkIHNob3VsZCBub3Qgc3RvcFxuICAgICAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzLCBoZW5jZSByZXN1bHQgaW4gb25seSBhIHdhcm5pbmcsIGluc3RlYWQgb2YgcmVqZWN0XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKElNQUdFX0VYUE9SVF9FUlJPUlMuc3R5bGVTaGVldCwgc2hlZXQuaHJlZik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNoZWV0KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGZ1bmN0aW9uIHNldEJhc2VIcmVmKGJhc2UpIHtcbiAgICAgICAgYmFzZSA9IGJhc2Uuc3BsaXQoJy8nKTtcbiAgICAgICAgYmFzZS5wb3AoKTtcbiAgICAgICAgYmFzZSA9IGJhc2Uuam9pbignLycpO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZEJhc2VIcmVmVG9VcmwobWF0Y2gsIHAxKSB7XG4gICAgICAgICAgY29uc3QgdXJsID0gL15odHRwL2kudGVzdChwMSkgPyBwMSA6IGNvbmNhdEFuZFJlc29sdmVVcmwoYmFzZSwgcDEpO1xuICAgICAgICAgIHJldHVybiBgdXJsKCcke3VybH0nKWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTb3VyY2U6IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NzYyMzEvMzc4Njg1NlxuICAgICAgICBmdW5jdGlvbiBjb25jYXRBbmRSZXNvbHZlVXJsKHVybCwgY29uY2F0KSB7XG4gICAgICAgICAgY29uc3QgdXJsMSA9IHVybC5zcGxpdCgnLycpO1xuICAgICAgICAgIGNvbnN0IHVybDIgPSBjb25jYXQuc3BsaXQoJy8nKTtcbiAgICAgICAgICBjb25zdCB1cmwzID0gW107XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB1cmwxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKHVybDFbaV0gPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgdXJsMy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsMVtpXSAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgIHVybDMucHVzaCh1cmwxW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSB1cmwyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKHVybDJbaV0gPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgdXJsMy5wb3AoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsMltpXSAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgIHVybDMucHVzaCh1cmwyW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHVybDMuam9pbignLycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHQgPT4ge1xuICAgICAgICAgIHJldHVybiBpc1NyY0FzRGF0YVVybCh0ZXh0KVxuICAgICAgICAgICAgPyB0ZXh0XG4gICAgICAgICAgICA6IHRleHQucmVwbGFjZSgvdXJsXFwoWydcIl0/KFteJ1wiXSs/KVsnXCJdP1xcKS9nLCBhZGRCYXNlSHJlZlRvVXJsKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdG9TdHlsZVNoZWV0KHRleHQpIHtcbiAgICAgICAgY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCcnKTtcbiAgICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblxuICAgICAgICBzdHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuXG4gICAgICAgIHJldHVybiBzdHlsZUVsZW1lbnQuc2hlZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q3NzUnVsZXMoc3R5bGVTaGVldHMpIHtcbiAgICAgIGNvbnN0IGNzc1J1bGVzID0gW107XG4gICAgICBzdHlsZVNoZWV0cy5mb3JFYWNoKHNoZWV0ID0+IHtcbiAgICAgICAgLy8gdHJ5Li4uY2F0Y2ggYmVjYXVzZSBicm93c2VyIG1heSBub3QgYWJsZSB0byBlbnVtZXJhdGUgcnVsZXMgZm9yIGNyb3NzLWRvbWFpbiBzaGVldHNcbiAgICAgICAgaWYgKCFzaGVldCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcnVsZXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVsZXMgPSBzaGVldC5ydWxlcyB8fCBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAnQ2FuJ3QgcmVhZCB0aGUgY3NzIHJ1bGVzIG9mOiAke3NoZWV0LmhyZWZ9YCwgZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJ1bGVzICYmIHR5cGVvZiBydWxlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXNBcnJheShydWxlcyB8fCBbXSkuZm9yRWFjaChjc3NSdWxlcy5wdXNoLmJpbmQoY3NzUnVsZXMpKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3Igd2hpbGUgcmVhZGluZyBDU1MgcnVsZXMgZnJvbSAke3NoZWV0LmhyZWZ9YCwgZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdnZXRDc3NSdWxlcyBjYW4gbm90IGZpbmQgY3NzUnVsZXMnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY3NzUnVsZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV3V2ViRm9udCh3ZWJGb250UnVsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb2x2ZTogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSAod2ViRm9udFJ1bGUucGFyZW50U3R5bGVTaGVldCB8fCB7fSkuaHJlZjtcbiAgICAgICAgICByZXR1cm4gaW5saW5lci5pbmxpbmVBbGwod2ViRm9udFJ1bGUuY3NzVGV4dCwgYmFzZVVybCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNyYzogKCkgPT4gd2ViRm9udFJ1bGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnc3JjJylcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG5ld0ltYWdlcygpIHtcbiAgcmV0dXJuIHtcbiAgICBpbmxpbmVBbGwsXG4gICAgaW1wbDoge1xuICAgICAgbmV3SW1hZ2VcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gbmV3SW1hZ2UoZWxlbWVudCkge1xuICAgIGZ1bmN0aW9uIGlubGluZShnZXQpIHtcbiAgICAgIGlmIChpc0RhdGFVcmwoZWxlbWVudC5zcmMpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZWxlbWVudC5zcmMpXG4gICAgICAgIC50aGVuKHVsID0+XG4gICAgICAgICAgdHlwZW9mIGdldCA9PT0gJ2Z1bmN0aW9uJyA/IGdldCh1bCkgOiBnZXRBbmRFbmNvZGUodWwsIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zKVxuICAgICAgICApXG4gICAgICAgIC50aGVuKGRhdGEgPT4gZGF0YUFzVXJsKGRhdGEsIG1pbWVUeXBlKGVsZW1lbnQuc3JjKSkpXG4gICAgICAgIC50aGVuKFxuICAgICAgICAgIGRhdGFVcmwgPT5cbiAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgZWxlbWVudC5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICBlbGVtZW50Lm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gZGF0YVVybDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlubGluZVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbmxpbmVBbGwobm9kZSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5saW5lQmFja2dyb3VuZChub2RlKS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gbmV3SW1hZ2Uobm9kZSkuaW5saW5lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoYXNBcnJheShub2RlLmNoaWxkTm9kZXMpLm1hcChjaGlsZCA9PiBpbmxpbmVBbGwoY2hpbGQpKSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBpbmxpbmVCYWNrZ3JvdW5kKG5kKSB7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZCcpO1xuXG4gICAgICBpZiAoIWJhY2tncm91bmQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmxpbmVyXG4gICAgICAgIC5pbmxpbmVBbGwoYmFja2dyb3VuZClcbiAgICAgICAgLnRoZW4oaW5saW5lZCA9PiB7XG4gICAgICAgICAgbmQuc3R5bGUuc2V0UHJvcGVydHkoJ2JhY2tncm91bmQnLCBpbmxpbmVkLCBuZC5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KCdiYWNrZ3JvdW5kJykpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiBuZCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRvbXRvaW1hZ2U7XG4iXX0=
557
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kb20tdG8taW1hZ2UuanMiXSwibmFtZXMiOlsiaW5saW5lciIsIm5ld0lubGluZXIiLCJmb250RmFjZXMiLCJuZXdGb250RmFjZXMiLCJpbWFnZXMiLCJuZXdJbWFnZXMiLCJkZWZhdWx0T3B0aW9ucyIsImltYWdlUGxhY2Vob2xkZXIiLCJ1bmRlZmluZWQiLCJjYWNoZUJ1c3QiLCJkb210b2ltYWdlIiwidG9TdmciLCJ0b1BuZyIsInRvSnBlZyIsInRvQmxvYiIsInRvUGl4ZWxEYXRhIiwiaW1wbCIsIm9wdGlvbnMiLCJub2RlIiwiY29weU9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJuZCIsImNsb25lTm9kZSIsImZpbHRlciIsImVtYmVkRm9udHMiLCJpbmxpbmVJbWFnZXMiLCJhcHBseU9wdGlvbnMiLCJjbG9uZSIsIm1ha2VTdmdEYXRhVXJpIiwid2lkdGgiLCJoZWlnaHQiLCJiZ2NvbG9yIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3BlcnR5IiwiZHJhdyIsImNhbnZhcyIsImdldENvbnRleHQiLCJnZXRJbWFnZURhdGEiLCJkYXRhIiwidG9EYXRhVVJMIiwicXVhbGl0eSIsImNhbnZhc1RvQmxvYiIsImRvbU5vZGUiLCJtYWtlSW1hZ2UiLCJpbWFnZSIsIm5ld0NhbnZhcyIsImRyYXdJbWFnZSIsImROb2RlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJyb290IiwibWFrZU5vZGVDb3B5IiwiY2xvbmVDaGlsZHJlbiIsIndpbmRvdyIsIkhUTUxDYW52YXNFbGVtZW50IiwiY2xvbmVDaGlsZHJlbkluT3JkZXIiLCJwYXJlbnQiLCJhcnJDaGlsZHJlbiIsImZsdCIsImRvbmUiLCJjaGlsZCIsImNoaWxkQ2xvbmUiLCJhcHBlbmRDaGlsZCIsIm9yaWdpbmFsIiwiY2hpbGRyZW4iLCJjaGlsZE5vZGVzIiwibGVuZ3RoIiwicmVzb2x2ZUFsbCIsImNzc1RleHQiLCJzdHlsZU5vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImlubGluZUFsbCIsInNldEF0dHJpYnV0ZSIsInNlcmlhbGl6ZWRTdHJpbmciLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJ4aHRtbCIsImZvcmVpZ25PYmplY3QiLCJzdmdTdHIiLCJVUkxfUkVHRVgiLCJzaG91bGRQcm9jZXNzIiwicmVhZFVybHMiLCJpbmxpbmUiLCJzdHJpbmciLCJzZWFyY2giLCJyZXN1bHQiLCJtYXRjaCIsImV4ZWMiLCJwdXNoIiwidXJsIiwidXJsQXNSZWdleCIsInVybDAiLCJSZWdFeHAiLCJiYXNlVXJsIiwiZ2V0IiwidWwiLCJkYXRhVXJsIiwicmVwbGFjZSIsInVybHMiLCJzdHIiLCJyZWFkQWxsIiwid2ViRm9udHMiLCJhbGwiLCJtYXAiLCJ3ZWJGb250IiwiY3NzU3RyaW5ncyIsImpvaW4iLCJzdHlsZVNoZWV0cyIsImxvYWRFeHRlcm5hbFN0eWxlU2hlZXRzIiwiZ2V0Q3NzUnVsZXMiLCJzZWxlY3RXZWJGb250UnVsZXMiLCJydWxlcyIsIm5ld1dlYkZvbnQiLCJjc3NSdWxlcyIsInJ1bGUiLCJ0eXBlIiwiQ1NTUnVsZSIsIkZPTlRfRkFDRV9SVUxFIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNoZWV0IiwiaHJlZiIsImNhY2hlIiwiaW5jbHVkZXMiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwicmVzcG9uc2UiLCJ0ZXh0Iiwic2V0QmFzZUhyZWYiLCJ0b1N0eWxlU2hlZXQiLCJlcnIiLCJjb25zb2xlIiwid2FybiIsIklNQUdFX0VYUE9SVF9FUlJPUlMiLCJzdHlsZVNoZWV0IiwibG9nIiwiYmFzZSIsInNwbGl0IiwicG9wIiwiYWRkQmFzZUhyZWZUb1VybCIsInAxIiwidGVzdCIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJjb25jYXQiLCJ1cmwxIiwidXJsMiIsInVybDMiLCJpIiwibCIsImRvYyIsImltcGxlbWVudGF0aW9uIiwiY3JlYXRlSFRNTERvY3VtZW50Iiwic3R5bGVFbGVtZW50IiwidGV4dENvbnRlbnQiLCJib2R5IiwiZSIsImJpbmQiLCJ3ZWJGb250UnVsZSIsInBhcmVudFN0eWxlU2hlZXQiLCJzcmMiLCJuZXdJbWFnZSIsImVsZW1lbnQiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwiRWxlbWVudCIsImlubGluZUJhY2tncm91bmQiLCJIVE1MSW1hZ2VFbGVtZW50IiwiYmFja2dyb3VuZCIsInJlbW92ZVByb3BlcnR5IiwiaW5saW5lZCIsInNldFByb3BlcnR5IiwiZ2V0UHJvcGVydHlQcmlvcml0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUF5QkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBeUJBLElBQU1BLE9BQU8sR0FBR0MsVUFBVSxFQUExQjtBQUNBLElBQU1DLFNBQVMsR0FBR0MsWUFBWSxFQUE5QjtBQUNBLElBQU1DLE1BQU0sR0FBR0MsU0FBUyxFQUF4QixDLENBQ0E7O0FBQ0EsSUFBTUMsY0FBYyxHQUFHO0FBQ3JCO0FBQ0FDLEVBQUFBLGdCQUFnQixFQUFFQyxTQUZHO0FBR3JCO0FBQ0FDLEVBQUFBLFNBQVMsRUFBRTtBQUpVLENBQXZCO0FBT0EsSUFBTUMsVUFBVSxHQUFHO0FBQ2pCQyxFQUFBQSxLQUFLLEVBQUxBLEtBRGlCO0FBRWpCQyxFQUFBQSxLQUFLLEVBQUxBLEtBRmlCO0FBR2pCQyxFQUFBQSxNQUFNLEVBQU5BLE1BSGlCO0FBSWpCQyxFQUFBQSxNQUFNLEVBQU5BLE1BSmlCO0FBS2pCQyxFQUFBQSxXQUFXLEVBQVhBLFdBTGlCO0FBTWpCQyxFQUFBQSxJQUFJLEVBQUU7QUFDSmQsSUFBQUEsU0FBUyxFQUFUQSxTQURJO0FBRUpFLElBQUFB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QUFQO0FBQ0QsS0FMTSxDQUFQOztBQU9BLGFBQVN5RyxnQkFBVCxDQUEwQnZKLEVBQTFCLEVBQThCO0FBQzVCLFVBQU15SixVQUFVLEdBQUd6SixFQUFFLENBQUNXLEtBQUgsQ0FBUzZGLGdCQUFULENBQTBCLFlBQTFCLENBQW5COztBQUVBLFVBQUksQ0FBQ2lELFVBQUwsRUFBaUI7QUFDZixlQUFPNUosT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxFQUFoQixDQUFQO0FBQ0Q7O0FBRUQsVUFBSXlKLFVBQVUsQ0FBQ25GLE1BQVgsQ0FBa0Isb0NBQWxCLE1BQTRELENBQUMsQ0FBakUsRUFBb0U7QUFDbEV0RSxRQUFBQSxFQUFFLENBQUNXLEtBQUgsQ0FBUytJLGNBQVQsQ0FBd0IsWUFBeEI7QUFDQSxlQUFPN0osT0FBTyxDQUFDQyxPQUFSLENBQWdCRSxFQUFoQixDQUFQO0FBQ0Q7O0FBRUQsYUFBT3ZCLE9BQU8sQ0FDWGdGLFNBREksQ0FDTWdHLFVBRE4sRUFFSjFKLElBRkksQ0FFQyxVQUFBNEosT0FBTyxFQUFJO0FBQ2YzSixRQUFBQSxFQUFFLENBQUNXLEtBQUgsQ0FBU2lKLFdBQVQsQ0FBcUIsWUFBckIsRUFBbUNELE9BQW5DLEVBQTRDM0osRUFBRSxDQUFDVyxLQUFILENBQVNrSixtQkFBVCxDQUE2QixZQUE3QixDQUE1QztBQUNELE9BSkksRUFLSjlKLElBTEksQ0FLQztBQUFBLGVBQU1DLEVBQU47QUFBQSxPQUxELENBQVA7QUFNRDtBQUNGO0FBQ0Y7O2VBRWNiLFUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjIgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG4vKipcbiAqIFRoaXMgZmlsZSBpcyBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdHNheWVuL2RvbS10by1pbWFnZVxuICogTW9kaWZpZWQgYnkgaGVzaGFuMDEzMSB0byBhbGxvdyBsb2FkaW5nIGV4dGVybmFsIHN0eWxlc2hlZXRzIGFuZCBpbmxpbmUgd2ViZm9udHNcbiAqL1xuXG5pbXBvcnQgd2luZG93IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGRvY3VtZW50IGZyb20gJ2dsb2JhbC9kb2N1bWVudCc7XG5pbXBvcnQgY29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQgc3ZnVG9NaW5pRGF0YVVSSSBmcm9tICdtaW5pLXN2Zy1kYXRhLXVyaSc7XG5pbXBvcnQge0lNQUdFX0VYUE9SVF9FUlJPUlN9IGZyb20gJ2NvbnN0YW50cy91c2VyLWZlZWRiYWNrcyc7XG5pbXBvcnQge1xuICBjYW52YXNUb0Jsb2IsXG4gIGVzY2FwZSxcbiAgZXNjYXBlWGh0bWwsXG4gIGRlbGF5LFxuICBwcm9jZXNzQ2xvbmUsXG4gIGFzQXJyYXksXG4gIG1ha2VJbWFnZSxcbiAgbWltZVR5cGUsXG4gIGRhdGFBc1VybCxcbiAgaXNEYXRhVXJsLFxuICBpc1NyY0FzRGF0YVVybCxcbiAgcmVzb2x2ZVVybCxcbiAgZ2V0V2lkdGgsXG4gIGdldEhlaWdodCxcbiAgZ2V0QW5kRW5jb2RlXG59IGZyb20gJy4vZG9tLXV0aWxzJztcblxuY29uc3QgaW5saW5lciA9IG5ld0lubGluZXIoKTtcbmNvbnN0IGZvbnRGYWNlcyA9IG5ld0ZvbnRGYWNlcygpO1xuY29uc3QgaW1hZ2VzID0gbmV3SW1hZ2VzKCk7XG4vLyBEZWZhdWx0IGltcGwgb3B0aW9uc1xuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIC8vIERlZmF1bHQgaXMgdG8gZmFpbCBvbiBlcnJvciwgbm8gcGxhY2Vob2xkZXJcbiAgaW1hZ2VQbGFjZWhvbGRlcjogdW5kZWZpbmVkLFxuICAvLyBEZWZhdWx0IGNhY2hlIGJ1c3QgaXMgZmFsc2UsIGl0IHdpbGwgdXNlIHRoZSBjYWNoZVxuICBjYWNoZUJ1c3Q6IGZhbHNlXG59O1xuXG5jb25zdCBkb210b2ltYWdlID0ge1xuICB0b1N2ZyxcbiAgdG9QbmcsXG4gIHRvSnBlZyxcbiAgdG9CbG9iLFxuICB0b1BpeGVsRGF0YSxcbiAgaW1wbDoge1xuICAgIGZvbnRGYWNlcyxcbiAgICBpbWFnZXMsXG4gICAgaW5saW5lcixcbiAgICBvcHRpb25zOiB7fVxuICB9XG59O1xuXG4vKipcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIC0gU2hvdWxkIHJldHVybiB0cnVlIGlmIHBhc3NlZCBub2RlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0XG4gICAqICAgICAgICAgIChleGNsdWRpbmcgbm9kZSBtZWFucyBleGNsdWRpbmcgaXQncyBjaGlsZHJlbiBhcyB3ZWxsKS4gTm90IGNhbGxlZCBvbiB0aGUgcm9vdCBub2RlLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMuYmdjb2xvcl0gLSBjb2xvciBmb3IgdGhlIGJhY2tncm91bmQsIGFueSB2YWxpZCBDU1MgY29sb3IgdmFsdWUuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy53aWR0aF0gLSB3aWR0aCB0byBiZSBhcHBsaWVkIHRvIG5vZGUgYmVmb3JlIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmhlaWdodF0gLSBoZWlnaHQgdG8gYmUgYXBwbGllZCB0byBub2RlIGJlZm9yZSByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5zdHlsZV0gLSBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gbm9kZSdzIHN0eWxlIGJlZm9yZSByZW5kZXJpbmcuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5xdWFsaXR5XSAtIGEgTnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGltYWdlIHF1YWxpdHkgKGFwcGxpY2FibGUgdG8gSlBFRyBvbmx5KSxcbiAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gMS4wLlxuICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmltYWdlUGxhY2Vob2xkZXJdIC0gZGF0YVVSTCB0byB1c2UgYXMgYSBwbGFjZWhvbGRlciBmb3IgZmFpbGVkIGltYWdlcywgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gZmFpbCBmYXN0IG9uIGltYWdlcyB3ZSBjYW4ndCBmZXRjaFxuICAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5jYWNoZUJ1c3RdIC0gc2V0IHRvIHRydWUgdG8gY2FjaGUgYnVzdCBieSBhcHBlbmRpbmcgdGhlIHRpbWUgdG8gdGhlIHJlcXVlc3QgdXJsXG4gICAgKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgU1ZHIGltYWdlIGRhdGEgVVJMXG4gICAgKiAqL1xuZnVuY3Rpb24gdG9Tdmcobm9kZSwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY29weU9wdGlvbnMob3B0aW9ucyk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSlcbiAgICAudGhlbihuZCA9PiBjbG9uZU5vZGUobmQsIG9wdGlvbnMuZmlsdGVyLCB0cnVlKSlcbiAgICAudGhlbihlbWJlZEZvbnRzKVxuICAgIC50aGVuKGlubGluZUltYWdlcylcbiAgICAudGhlbihhcHBseU9wdGlvbnMpXG4gICAgLnRoZW4oY2xvbmUgPT5cbiAgICAgIG1ha2VTdmdEYXRhVXJpKGNsb25lLCBvcHRpb25zLndpZHRoIHx8IGdldFdpZHRoKG5vZGUpLCBvcHRpb25zLmhlaWdodCB8fCBnZXRIZWlnaHQobm9kZSkpXG4gICAgKTtcblxuICBmdW5jdGlvbiBhcHBseU9wdGlvbnMoY2xvbmUpIHtcbiAgICBpZiAob3B0aW9ucy5iZ2NvbG9yKSBjbG9uZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJnY29sb3I7XG5cbiAgICBpZiAob3B0aW9ucy53aWR0aCkgY2xvbmUuc3R5bGUud2lkdGggPSBgJHtvcHRpb25zLndpZHRofXB4YDtcbiAgICBpZiAob3B0aW9ucy5oZWlnaHQpIGNsb25lLnN0eWxlLmhlaWdodCA9IGAke29wdGlvbnMuaGVpZ2h0fXB4YDtcblxuICAgIGlmIChvcHRpb25zLnN0eWxlKVxuICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5zdHlsZSkuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICAgIGNsb25lLnN0eWxlW3Byb3BlcnR5XSA9IG9wdGlvbnMuc3R5bGVbcHJvcGVydHldO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFVpbnQ4QXJyYXkgY29udGFpbmluZyBSR0JBIHBpeGVsIGRhdGEuXG4gKiAqL1xuZnVuY3Rpb24gdG9QaXhlbERhdGEobm9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zIHx8IHt9KS50aGVuKFxuICAgIGNhbnZhcyA9PiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5nZXRJbWFnZURhdGEoMCwgMCwgZ2V0V2lkdGgobm9kZSksIGdldEhlaWdodChub2RlKSkuZGF0YVxuICApO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgUE5HIGltYWdlIGRhdGEgVVJMXG4gKiAqL1xuZnVuY3Rpb24gdG9Qbmcobm9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zIHx8IHt9KS50aGVuKGNhbnZhcyA9PiBjYW52YXMudG9EYXRhVVJMKCkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgSlBFRyBpbWFnZSBkYXRhIFVSTFxuICogKi9cbmZ1bmN0aW9uIHRvSnBlZyhub2RlLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zKS50aGVuKGNhbnZhcyA9PiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgb3B0aW9ucy5xdWFsaXR5IHx8IDEuMCkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgUE5HIGltYWdlIGJsb2JcbiAqICovXG5mdW5jdGlvbiB0b0Jsb2Iobm9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zIHx8IHt9KS50aGVuKGNhbnZhc1RvQmxvYik7XG59XG5cbmZ1bmN0aW9uIGNvcHlPcHRpb25zKG9wdGlvbnMpIHtcbiAgLy8gQ29weSBvcHRpb25zIHRvIGltcGwgb3B0aW9ucyBmb3IgdXNlIGluIGltcGxcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlciA9IGRlZmF1bHRPcHRpb25zLmltYWdlUGxhY2Vob2xkZXI7XG4gIH0gZWxzZSB7XG4gICAgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlciA9IG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcjtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jYWNoZUJ1c3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMuY2FjaGVCdXN0ID0gZGVmYXVsdE9wdGlvbnMuY2FjaGVCdXN0O1xuICB9IGVsc2Uge1xuICAgIGRvbXRvaW1hZ2UuaW1wbC5vcHRpb25zLmNhY2hlQnVzdCA9IG9wdGlvbnMuY2FjaGVCdXN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRyYXcoZG9tTm9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9TdmcoZG9tTm9kZSwgb3B0aW9ucylcbiAgICAudGhlbihtYWtlSW1hZ2UpXG4gICAgLnRoZW4oZGVsYXkoMTAwKSlcbiAgICAudGhlbihpbWFnZSA9PiB7XG4gICAgICBjb25zdCBjYW52YXMgPSBuZXdDYW52YXMoZG9tTm9kZSk7XG4gICAgICBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDApO1xuICAgICAgcmV0dXJuIGNhbnZhcztcbiAgICB9KTtcblxuICBmdW5jdGlvbiBuZXdDYW52YXMoZE5vZGUpIHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMud2lkdGggPSBvcHRpb25zLndpZHRoIHx8IGdldFdpZHRoKGROb2RlKTtcbiAgICBjYW52YXMuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgZ2V0SGVpZ2h0KGROb2RlKTtcblxuICAgIGlmIChvcHRpb25zLmJnY29sb3IpIHtcbiAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IG9wdGlvbnMuYmdjb2xvcjtcbiAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjYW52YXM7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVOb2RlKG5vZGUsIGZpbHRlciwgcm9vdCkge1xuICBpZiAoIXJvb3QgJiYgZmlsdGVyICYmICFmaWx0ZXIobm9kZSkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpXG4gICAgLnRoZW4obWFrZU5vZGVDb3B5KVxuICAgIC50aGVuKGNsb25lID0+IGNsb25lQ2hpbGRyZW4obm9kZSwgY2xvbmUsIGZpbHRlcikpXG4gICAgLnRoZW4oY2xvbmUgPT4gcHJvY2Vzc0Nsb25lKG5vZGUsIGNsb25lKSk7XG5cbiAgZnVuY3Rpb24gbWFrZU5vZGVDb3B5KG5kKSB7XG4gICAgaWYgKG5kIGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50KSB7XG4gICAgICByZXR1cm4gbWFrZUltYWdlKG5kLnRvRGF0YVVSTCgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5kLmNsb25lTm9kZShmYWxzZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZUNoaWxkcmVuSW5PcmRlcihwYXJlbnQsIGFyckNoaWxkcmVuLCBmbHQpIHtcbiAgICBsZXQgZG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGFyckNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgZG9uZSA9IGRvbmVcbiAgICAgICAgLnRoZW4oKCkgPT4gY2xvbmVOb2RlKGNoaWxkLCBmbHQpKVxuICAgICAgICAudGhlbihjaGlsZENsb25lID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGRDbG9uZSkge1xuICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGNoaWxkQ2xvbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZUNoaWxkcmVuKG9yaWdpbmFsLCBjbG9uZSwgZmx0KSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBvcmlnaW5hbC5jaGlsZE5vZGVzO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xvbmUpO1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZUNoaWxkcmVuSW5PcmRlcihjbG9uZSwgYXNBcnJheShjaGlsZHJlbiksIGZsdCkudGhlbigoKSA9PiBjbG9uZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW1iZWRGb250cyhub2RlKSB7XG4gIHJldHVybiBmb250RmFjZXMucmVzb2x2ZUFsbCgpLnRoZW4oY3NzVGV4dCA9PiB7XG4gICAgY29uc3Qgc3R5bGVOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBub2RlLmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7XG4gICAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlubGluZUltYWdlcyhub2RlKSB7XG4gIHJldHVybiBpbWFnZXMuaW5saW5lQWxsKG5vZGUpLnRoZW4oKCkgPT4gbm9kZSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VTdmdEYXRhVXJpKG5vZGUsIHdpZHRoLCBoZWlnaHQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKS50aGVuKG5kID0+IHtcbiAgICBuZC5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkU3RyaW5nID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcobmQpO1xuXG4gICAgY29uc3QgeGh0bWwgPSBlc2NhcGVYaHRtbChzZXJpYWxpemVkU3RyaW5nKTtcbiAgICBjb25zdCBmb3JlaWduT2JqZWN0ID0gYDxmb3JlaWduT2JqZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+JHt4aHRtbH08L2ZvcmVpZ25PYmplY3Q+YDtcbiAgICBjb25zdCBzdmdTdHIgPSBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIiR7aGVpZ2h0fVwiPiR7Zm9yZWlnbk9iamVjdH08L3N2Zz5gO1xuXG4gICAgLy8gT3B0aW1pemluZyBTVkdzIGluIGRhdGEgVVJJc1xuICAgIC8vIHNlZSBodHRwczovL2NvZGVwZW4uaW8vdGlndC9wb3N0L29wdGltaXppbmctc3Zncy1pbi1kYXRhLXVyaXNcbiAgICAvLyB0aGUgYmVzdCB3YXkgb2YgZW5jb2RpbmcgU1ZHIGluIGEgZGF0YTogVVJJIGlzIGRhdGE6aW1hZ2Uvc3ZnK3htbCxbYWN0dWFsIGRhdGFdLlxuICAgIC8vIFdlIGRvbuKAmXQgbmVlZCB0aGUgO2NoYXJzZXQ9dXRmLTggcGFyYW1ldGVyIGJlY2F1c2UgdGhlIGdpdmVuIFNWRyBpcyBBU0NJSS5cbiAgICByZXR1cm4gc3ZnVG9NaW5pRGF0YVVSSShzdmdTdHIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbmV3SW5saW5lcigpIHtcbiAgY29uc3QgVVJMX1JFR0VYID0gL3VybFxcKFsnXCJdPyhbXidcIl0rPylbJ1wiXT9cXCkvZztcblxuICByZXR1cm4ge1xuICAgIGlubGluZUFsbCxcbiAgICBzaG91bGRQcm9jZXNzLFxuICAgIGltcGw6IHtcbiAgICAgIHJlYWRVcmxzLFxuICAgICAgaW5saW5lXG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHNob3VsZFByb2Nlc3Moc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5zZWFyY2goVVJMX1JFR0VYKSAhPT0gLTE7XG4gIH1cblxuICBmdW5jdGlvbiByZWFkVXJscyhzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgbWF0Y2g7XG4gICAgd2hpbGUgKChtYXRjaCA9IFVSTF9SRUdFWC5leGVjKHN0cmluZykpICE9PSBudWxsKSB7XG4gICAgICByZXN1bHQucHVzaChtYXRjaFsxXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuZmlsdGVyKHVybCA9PiB7XG4gICAgICByZXR1cm4gIWlzRGF0YVVybCh1cmwpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXJsQXNSZWdleCh1cmwwKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYCh1cmxcXFxcKFtcXCdcIl0/KSgke2VzY2FwZSh1cmwwKX0pKFtcXCdcIl0/XFxcXCkpYCwgJ2cnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlubGluZShzdHJpbmcsIHVybCwgYmFzZVVybCwgZ2V0KSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1cmwpXG4gICAgICAudGhlbih1bCA9PiAoYmFzZVVybCA/IHJlc29sdmVVcmwodWwsIGJhc2VVcmwpIDogdWwpKVxuICAgICAgLnRoZW4odWwgPT4gKHR5cGVvZiBnZXQgPT09ICdmdW5jdGlvbicgPyBnZXQodWwpIDogZ2V0QW5kRW5jb2RlKHVsLCBkb210b2ltYWdlLmltcGwub3B0aW9ucykpKVxuICAgICAgLnRoZW4oZGF0YSA9PiBkYXRhQXNVcmwoZGF0YSwgbWltZVR5cGUodXJsKSkpXG4gICAgICAudGhlbihkYXRhVXJsID0+IHN0cmluZy5yZXBsYWNlKHVybEFzUmVnZXgodXJsKSwgYCQxJHtkYXRhVXJsfSQzYCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5saW5lQWxsKHN0cmluZywgYmFzZVVybCwgZ2V0KSB7XG4gICAgaWYgKCFzaG91bGRQcm9jZXNzKHN0cmluZykgfHwgaXNTcmNBc0RhdGFVcmwoc3RyaW5nKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0cmluZylcbiAgICAgIC50aGVuKHJlYWRVcmxzKVxuICAgICAgLnRoZW4odXJscyA9PiB7XG4gICAgICAgIGxldCBkb25lID0gUHJvbWlzZS5yZXNvbHZlKHN0cmluZyk7XG4gICAgICAgIHVybHMuZm9yRWFjaCh1cmwgPT4ge1xuICAgICAgICAgIGRvbmUgPSBkb25lLnRoZW4oc3RyID0+IGlubGluZShzdHIsIHVybCwgYmFzZVVybCwgZ2V0KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZG9uZTtcbiAgICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5ld0ZvbnRGYWNlcygpIHtcbiAgcmV0dXJuIHtcbiAgICByZXNvbHZlQWxsLFxuICAgIGltcGw6IHtyZWFkQWxsfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHJlc29sdmVBbGwoKSB7XG4gICAgcmV0dXJuIHJlYWRBbGwoKVxuICAgICAgLnRoZW4od2ViRm9udHMgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwod2ViRm9udHMubWFwKHdlYkZvbnQgPT4gd2ViRm9udC5yZXNvbHZlKCkpKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihjc3NTdHJpbmdzID0+IGNzc1N0cmluZ3Muam9pbignXFxuJykpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEFsbCgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFzQXJyYXkoZG9jdW1lbnQuc3R5bGVTaGVldHMpKVxuICAgICAgLnRoZW4obG9hZEV4dGVybmFsU3R5bGVTaGVldHMpXG4gICAgICAudGhlbihnZXRDc3NSdWxlcylcbiAgICAgIC50aGVuKHNlbGVjdFdlYkZvbnRSdWxlcylcbiAgICAgIC50aGVuKHJ1bGVzID0+IHJ1bGVzLm1hcChuZXdXZWJGb250KSk7XG5cbiAgICBmdW5jdGlvbiBzZWxlY3RXZWJGb250UnVsZXMoY3NzUnVsZXMpIHtcbiAgICAgIHJldHVybiBjc3NSdWxlc1xuICAgICAgICAuZmlsdGVyKHJ1bGUgPT4gcnVsZS50eXBlID09PSB3aW5kb3cuQ1NTUnVsZS5GT05UX0ZBQ0VfUlVMRSlcbiAgICAgICAgLmZpbHRlcihydWxlID0+IGlubGluZXIuc2hvdWxkUHJvY2VzcyhydWxlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3NyYycpKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZEV4dGVybmFsU3R5bGVTaGVldHMoc3R5bGVTaGVldHMpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgc3R5bGVTaGVldHMubWFwKHNoZWV0ID0+IHtcbiAgICAgICAgICBpZiAoc2hlZXQuaHJlZikge1xuICAgICAgICAgICAgLy8gY2xvdWRmb250IGRvZXNuJ3QgaGF2ZSBhbGxvdyBvcmlnaW4gaGVhZGVyIHByb3Blcmx5IHNldFxuICAgICAgICAgICAgLy8gZXJyb3IgcmVzcG9uc2Ugd2lsbCByZW1haW4gaW4gY2FjaGVcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gc2hlZXQuaHJlZi5pbmNsdWRlcygndWJlci1mb250cycpID8gJ25vLWNhY2hlJyA6ICdkZWZhdWx0JztcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3dcbiAgICAgICAgICAgICAgLmZldGNoKHNoZWV0LmhyZWYsIHtjcmVkZW50aWFsczogJ29taXQnLCBjYWNoZX0pXG4gICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgICAgICAgICAgLnRoZW4oc2V0QmFzZUhyZWYoc2hlZXQuaHJlZikpXG4gICAgICAgICAgICAgIC50aGVuKHRvU3R5bGVTaGVldClcbiAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIGFueSBlcnJvciB0aGF0IG9jY3VycmVkIGluIGFueSBvZiB0aGUgcHJldmlvdXNcbiAgICAgICAgICAgICAgICAvLyBwcm9taXNlcyBpbiB0aGUgY2hhaW4uIHN0eWxlc2hlZXQgZmFpbGVkIHRvIGxvYWQgc2hvdWxkIG5vdCBzdG9wXG4gICAgICAgICAgICAgICAgLy8gdGhlIHByb2Nlc3MsIGhlbmNlIHJlc3VsdCBpbiBvbmx5IGEgd2FybmluZywgaW5zdGVhZCBvZiByZWplY3RcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oSU1BR0VfRVhQT1JUX0VSUk9SUy5zdHlsZVNoZWV0LCBzaGVldC5ocmVmKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc2hlZXQpO1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgZnVuY3Rpb24gc2V0QmFzZUhyZWYoYmFzZSkge1xuICAgICAgICBiYXNlID0gYmFzZS5zcGxpdCgnLycpO1xuICAgICAgICBiYXNlLnBvcCgpO1xuICAgICAgICBiYXNlID0gYmFzZS5qb2luKCcvJyk7XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkQmFzZUhyZWZUb1VybChtYXRjaCwgcDEpIHtcbiAgICAgICAgICBjb25zdCB1cmwgPSAvXmh0dHAvaS50ZXN0KHAxKSA/IHAxIDogY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCBwMSk7XG4gICAgICAgICAgcmV0dXJuIGB1cmwoJyR7dXJsfScpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNvdXJjZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY3NjIzMS8zNzg2ODU2XG4gICAgICAgIGZ1bmN0aW9uIGNvbmNhdEFuZFJlc29sdmVVcmwodXJsLCBjb25jYXQpIHtcbiAgICAgICAgICBjb25zdCB1cmwxID0gdXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgY29uc3QgdXJsMiA9IGNvbmNhdC5zcGxpdCgnLycpO1xuICAgICAgICAgIGNvbnN0IHVybDMgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHVybDEubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodXJsMVtpXSA9PT0gJy4uJykge1xuICAgICAgICAgICAgICB1cmwzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwxW2ldICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgdXJsMy5wdXNoKHVybDFbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHVybDIubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodXJsMltpXSA9PT0gJy4uJykge1xuICAgICAgICAgICAgICB1cmwzLnBvcCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwyW2ldICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgdXJsMy5wdXNoKHVybDJbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdXJsMy5qb2luKCcvJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGlzU3JjQXNEYXRhVXJsKHRleHQpXG4gICAgICAgICAgICA/IHRleHRcbiAgICAgICAgICAgIDogdGV4dC5yZXBsYWNlKC91cmxcXChbJ1wiXT8oW14nXCJdKz8pWydcIl0/XFwpL2csIGFkZEJhc2VIcmVmVG9VcmwpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB0b1N0eWxlU2hlZXQodGV4dCkge1xuICAgICAgICBjb25zdCBkb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJycpO1xuICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXG4gICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7XG4gICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC5zaGVldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDc3NSdWxlcyhzdHlsZVNoZWV0cykge1xuICAgICAgY29uc3QgY3NzUnVsZXMgPSBbXTtcbiAgICAgIHN0eWxlU2hlZXRzLmZvckVhY2goc2hlZXQgPT4ge1xuICAgICAgICAvLyB0cnkuLi5jYXRjaCBiZWNhdXNlIGJyb3dzZXIgbWF5IG5vdCBhYmxlIHRvIGVudW1lcmF0ZSBydWxlcyBmb3IgY3Jvc3MtZG9tYWluIHNoZWV0c1xuICAgICAgICBpZiAoIXNoZWV0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBydWxlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydWxlcyA9IHNoZWV0LnJ1bGVzIHx8IHNoZWV0LmNzc1J1bGVzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCdDYW4ndCByZWFkIHRoZSBjc3MgcnVsZXMgb2Y6ICR7c2hlZXQuaHJlZn1gLCBlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnVsZXMgJiYgdHlwZW9mIHJ1bGVzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhc0FycmF5KHJ1bGVzIHx8IFtdKS5mb3JFYWNoKGNzc1J1bGVzLnB1c2guYmluZChjc3NSdWxlcykpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFcnJvciB3aGlsZSByZWFkaW5nIENTUyBydWxlcyBmcm9tICR7c2hlZXQuaHJlZn1gLCBlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2dldENzc1J1bGVzIGNhbiBub3QgZmluZCBjc3NSdWxlcycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjc3NSdWxlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdXZWJGb250KHdlYkZvbnRSdWxlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNvbHZlOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9ICh3ZWJGb250UnVsZS5wYXJlbnRTdHlsZVNoZWV0IHx8IHt9KS5ocmVmO1xuICAgICAgICAgIHJldHVybiBpbmxpbmVyLmlubGluZUFsbCh3ZWJGb250UnVsZS5jc3NUZXh0LCBiYXNlVXJsKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3JjOiAoKSA9PiB3ZWJGb250UnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKVxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV3SW1hZ2VzKCkge1xuICByZXR1cm4ge1xuICAgIGlubGluZUFsbCxcbiAgICBpbXBsOiB7XG4gICAgICBuZXdJbWFnZVxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBuZXdJbWFnZShlbGVtZW50KSB7XG4gICAgZnVuY3Rpb24gaW5saW5lKGdldCkge1xuICAgICAgaWYgKGlzRGF0YVVybChlbGVtZW50LnNyYykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbGVtZW50LnNyYylcbiAgICAgICAgLnRoZW4odWwgPT5cbiAgICAgICAgICB0eXBlb2YgZ2V0ID09PSAnZnVuY3Rpb24nID8gZ2V0KHVsKSA6IGdldEFuZEVuY29kZSh1bCwgZG9tdG9pbWFnZS5pbXBsLm9wdGlvbnMpXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4oZGF0YSA9PiBkYXRhQXNVcmwoZGF0YSwgbWltZVR5cGUoZWxlbWVudC5zcmMpKSlcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgZGF0YVVybCA9PlxuICAgICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBlbGVtZW50Lm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgICAgICAgIGVsZW1lbnQub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgZWxlbWVudC5zcmMgPSBkYXRhVXJsO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5saW5lXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlubGluZUFsbChub2RlKSB7XG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBpbmxpbmVCYWNrZ3JvdW5kKG5vZGUpLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBuZXdJbWFnZShub2RlKS5pbmxpbmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChhc0FycmF5KG5vZGUuY2hpbGROb2RlcykubWFwKGNoaWxkID0+IGlubGluZUFsbChjaGlsZCkpKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGlubGluZUJhY2tncm91bmQobmQpIHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kJyk7XG5cbiAgICAgIGlmICghYmFja2dyb3VuZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5kKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJhY2tncm91bmQuc2VhcmNoKC91cmxcXChcImRhdGE6aW1hZ2VcXC9zdmdcXCt4bWxbXlwiXSpcIlxcKS8pICE9PSAtMSkge1xuICAgICAgICBuZC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnYmFja2dyb3VuZCcpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5kKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlubGluZXJcbiAgICAgICAgLmlubGluZUFsbChiYWNrZ3JvdW5kKVxuICAgICAgICAudGhlbihpbmxpbmVkID0+IHtcbiAgICAgICAgICBuZC5zdHlsZS5zZXRQcm9wZXJ0eSgnYmFja2dyb3VuZCcsIGlubGluZWQsIG5kLnN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkoJ2JhY2tncm91bmQnKSk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IG5kKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZG9tdG9pbWFnZTtcbiJdfQ==
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@carto/kepler.gl",
3
3
  "author": "CARTO",
4
4
  "homepage": "https://github.com/CartoDB/carto-kepler#readme",
5
- "version": "0.0.71-alpha.3",
5
+ "version": "0.0.71",
6
6
  "description": "kepler.gl is a webgl based application to visualize large scale location data in the browser",
7
7
  "license": "MIT",
8
8
  "main": "dist/index.js",
@@ -96,6 +96,7 @@
96
96
  "d3-hexbin": "^0.2.2",
97
97
  "d3-request": "^1.0.6",
98
98
  "d3-scale": "^3.2.3",
99
+ "d3-time": "^3.1.0",
99
100
  "decimal.js": "^10.2.0",
100
101
  "exenv": "^1.2.2",
101
102
  "fuzzy": "^0.1.3",
@@ -19,7 +19,7 @@
19
19
  // THE SOFTWARE.
20
20
 
21
21
  const Accessor = {
22
- IDENTITY_FN: input => input.value || input,
22
+ IDENTITY_FN: input => input,
23
23
 
24
24
  generateAccessor: field => object => object[field],
25
25
 
@@ -35,13 +35,7 @@ export const classList = {
35
35
  listItemAnchor: 'list__item__anchor'
36
36
  };
37
37
 
38
- const defaultDisplay = d => d.value || d;
39
-
40
- const Divider = styled.div`
41
- border-top: 1px solid rgba(44, 48, 50, 0.12);
42
- margin: 8px 0;
43
- `;
44
-
38
+ const defaultDisplay = d => d;
45
39
  export const ListItem = ({value, displayOption = defaultDisplay}) => (
46
40
  <span className={classList.listItemAnchor}>{displayOption(value)}</span>
47
41
  );
@@ -118,7 +112,7 @@ export default class DropdownList extends Component {
118
112
  submenuPosition: {}
119
113
  };
120
114
 
121
- hasSubOptions = !!this.props.subOptions;
115
+ hasSubOptions = !!this.props.subOptions
122
116
 
123
117
  ref = createRef();
124
118
 
@@ -209,22 +203,19 @@ export default class DropdownList extends Component {
209
203
  ) : null}
210
204
 
211
205
  {this.props.options.map((value, i) => (
212
- <>
213
- {value.divider && <Divider />}
214
- <Item
215
- className={classNames(classList.listItem, {
216
- active: this.props.selectionIndex === i + valueOffset,
217
- hover: value.id && (this.state.currentOption?.id === value.id)
218
- })}
219
- key={`${display(value)}_${i}`}
220
- onMouseDown={e => !this.hasSubOptions && this._onClick(value, null, e)}
221
- onClick={e => !this.hasSubOptions && this._onClick(value, null, e)}
222
- onMouseEnter={e => this._onMouseOver(value, e)}
223
- >
224
- <this.props.customListItemComponent value={value} displayOption={display} />
225
- {this.props.withSubOptions && value.aggregators && <ChevronRight />}
226
- </Item>
227
- </>
206
+ <Item
207
+ className={classNames(classList.listItem, {
208
+ active: this.props.selectionIndex === i + valueOffset,
209
+ hover: value.id && (this.state.currentOption?.id === value.id)
210
+ })}
211
+ key={`${display(value)}_${i}`}
212
+ onMouseDown={e => !this.hasSubOptions && this._onClick(value, null, e)}
213
+ onClick={e => !this.hasSubOptions && this._onClick(value, null, e)}
214
+ onMouseEnter={e => this._onMouseOver(value, e)}
215
+ >
216
+ <this.props.customListItemComponent value={value} displayOption={display} />
217
+ {this.props.withSubOptions && value.aggregators && <ChevronRight />}
218
+ </Item>
228
219
  ))}
229
220
  </div>
230
221
  </DropdownListWrapper>
@@ -92,7 +92,7 @@ const DropdownSelectActionRight = styled.div`
92
92
 
93
93
  const DropdownWrapper = styled.div`
94
94
  border: 0;
95
- width: auto;
95
+ width: 100%;
96
96
  left: 0;
97
97
  z-index: ${props => props.theme.dropdownWrapperZ};
98
98
  position: absolute;
@@ -478,41 +478,10 @@ export const StyledModalInputFootnote = styled.div.attrs({
478
478
  export const StyledMapContainer = styled.div`
479
479
  width: 100%;
480
480
  height: 100%;
481
- .mapboxgl-map {
482
- .mapboxgl-missing-css {
481
+ .maplibregl-ctrl {
482
+ &.maplibregl-ctrl-attrib {
483
483
  display: none;
484
484
  }
485
- .mapboxgl-ctrl-attrib {
486
- display: none;
487
- }
488
- }
489
- `;
490
-
491
- export const StyledAttrbution = styled.div.attrs({
492
- className: 'mapbox-attribution-container'
493
- })`
494
- bottom: 0;
495
- right: 0;
496
- position: absolute;
497
- display: block;
498
- margin: 0 10px 2px;
499
- z-index: 0;
500
-
501
- .attrition-logo {
502
- display: flex;
503
- font-size: 10px;
504
- justify-content: flex-end;
505
- align-items: center;
506
- color: ${props => props.theme.labelColor};
507
- margin-bottom: -4px;
508
-
509
- a.mapboxgl-ctrl-logo {
510
- width: 72px;
511
- margin-left: 6px;
512
- }
513
- }
514
- a {
515
- font-size: 10px;
516
485
  }
517
486
  `;
518
487
 
@@ -88,10 +88,6 @@ const GlobalStyle = styled.div`
88
88
  text-decoration: none;
89
89
  color: ${props => props.theme.labelColor};
90
90
  }
91
-
92
- .mapboxgl-ctrl .mapboxgl-ctrl-logo {
93
- display: none;
94
- }
95
91
  `;
96
92
 
97
93
  const BottomWidgetOuter = styled.div(