@kepler.gl/components 3.3.0-alpha.1 → 3.3.0-alpha.3

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 (126) hide show
  1. package/dist/common/action-panel.js +1 -1
  2. package/dist/common/color-legend.d.ts +1 -1
  3. package/dist/common/data-table/canvas.d.ts +1 -1
  4. package/dist/common/data-table/index.d.ts +1 -1
  5. package/dist/common/dnd-layer-items.d.ts +4 -0
  6. package/dist/common/dnd-layer-items.js +6 -2
  7. package/dist/common/error-boundary.d.ts +1 -1
  8. package/dist/common/file-uploader/file-upload.d.ts +1 -1
  9. package/dist/common/flex-container.d.ts +15 -7
  10. package/dist/common/icon-button.d.ts +53 -6
  11. package/dist/common/icons/arrow-down-full.d.ts +2 -1
  12. package/dist/common/icons/arrow-down-full.js +1 -1
  13. package/dist/common/icons/folder.d.ts +10 -0
  14. package/dist/common/icons/folder.js +51 -0
  15. package/dist/common/icons/index.d.ts +1 -0
  16. package/dist/common/icons/index.js +8 -1
  17. package/dist/common/icons/timeline-marker.d.ts +2 -1
  18. package/dist/common/icons/timeline-marker.js +1 -1
  19. package/dist/common/item-selector/dropdown-list.d.ts +1 -1
  20. package/dist/common/item-selector/dropdown-list.js +1 -1
  21. package/dist/common/item-selector/dropdown-select.d.ts +13 -7
  22. package/dist/common/item-selector/item-selector.d.ts +1 -1
  23. package/dist/common/item-selector/item-selector.js +1 -1
  24. package/dist/common/item-selector/typeahead.d.ts +4 -4
  25. package/dist/common/item-selector/typeahead.js +1 -3
  26. package/dist/common/layout-splitter.d.ts +45 -0
  27. package/dist/common/layout-splitter.js +231 -0
  28. package/dist/common/line-chart.d.ts +7 -3
  29. package/dist/common/line-chart.js +179 -59
  30. package/dist/common/modal.d.ts +11 -5
  31. package/dist/common/modal.js +1 -1
  32. package/dist/common/portaled.d.ts +17 -17
  33. package/dist/common/range-slider.js +1 -3
  34. package/dist/common/slider/mouse-event.d.ts +1 -1
  35. package/dist/common/slider/mouse-event.js +1 -2
  36. package/dist/common/slider/slider-bar-handle.d.ts +1 -1
  37. package/dist/common/slider/slider-bar-handle.js +1 -1
  38. package/dist/common/slider/slider-handle.d.ts +3 -3
  39. package/dist/common/slider/slider-handle.js +1 -1
  40. package/dist/common/slider/slider.d.ts +4 -4
  41. package/dist/common/slider/slider.js +1 -1
  42. package/dist/common/styled-components.d.ts +627 -177
  43. package/dist/common/vertical-toolbar.d.ts +12 -2
  44. package/dist/container.d.ts +3 -2
  45. package/dist/container.js +2 -2
  46. package/dist/context.d.ts +1 -1
  47. package/dist/context.js +1 -1
  48. package/dist/dnd-context.d.ts +4 -3
  49. package/dist/dnd-context.js +64 -9
  50. package/dist/effects/compact-color-picker.d.ts +1 -1
  51. package/dist/effects/effect-configurator.d.ts +2 -4
  52. package/dist/effects/effect-time-configurator.js +1 -1
  53. package/dist/effects/effect-type-list-item.d.ts +1 -1
  54. package/dist/filters/components.d.ts +7 -5
  55. package/dist/filters/filter-panels/filter-synced-dataset-panel.d.ts +6 -2
  56. package/dist/geocoder-panel.d.ts +2 -2
  57. package/dist/geocoder-panel.js +6 -7
  58. package/dist/hooks/use-dnd-layers.d.ts +4 -3
  59. package/dist/hooks/use-dnd-layers.js +103 -42
  60. package/dist/index.d.ts +3 -2
  61. package/dist/index.js +38 -9
  62. package/dist/injector.d.ts +1 -1
  63. package/dist/kepler-gl.d.ts +167 -27
  64. package/dist/kepler-gl.js +3 -2
  65. package/dist/loading-indicator.d.ts +1 -1
  66. package/dist/map/layer-hover-info.d.ts +7 -3
  67. package/dist/map/layer-hover-info.js +58 -22
  68. package/dist/map/map-control-panel.js +3 -2
  69. package/dist/map/map-control-toolbar.d.ts +29 -4
  70. package/dist/map/map-control.d.ts +11 -4
  71. package/dist/map/map-control.js +7 -6
  72. package/dist/map/map-legend-panel.d.ts +11 -2
  73. package/dist/map/map-legend-panel.js +19 -2
  74. package/dist/map/map-legend.d.ts +19 -2
  75. package/dist/map/map-legend.js +141 -27
  76. package/dist/map/split-map-button.d.ts +6 -1
  77. package/dist/map/split-map-button.js +113 -19
  78. package/dist/map-container.js +20 -3
  79. package/dist/maps-layout.d.ts +3 -0
  80. package/dist/maps-layout.js +86 -26
  81. package/dist/modal-container.d.ts +1 -1
  82. package/dist/modals/cloud-tile.d.ts +1 -2
  83. package/dist/modals/export-map-modal/components.d.ts +9 -5
  84. package/dist/modals/export-video-modal.d.ts +3 -0
  85. package/dist/modals/export-video-modal.js +79 -46
  86. package/dist/modals/export-video-modal.spec.js +2 -2
  87. package/dist/modals/hubble-utils.d.ts +16 -0
  88. package/dist/modals/hubble-utils.js +98 -1
  89. package/dist/modals/modal-dialog.d.ts +1 -1
  90. package/dist/modals/share-map-modal.d.ts +2 -4
  91. package/dist/modals/swipe-composite-utils.d.ts +10 -0
  92. package/dist/modals/swipe-composite-utils.js +108 -0
  93. package/dist/modals/swipe-export-settings.d.ts +24 -0
  94. package/dist/modals/swipe-export-settings.js +370 -0
  95. package/dist/modals/swipe-export-video-container.d.ts +122 -0
  96. package/dist/modals/swipe-export-video-container.js +630 -0
  97. package/dist/modals/swipe-export-video-preview.d.ts +68 -0
  98. package/dist/modals/swipe-export-video-preview.js +339 -0
  99. package/dist/modals/tilesets-modals/tileset-raster-form.js +1 -5
  100. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +7 -3
  101. package/dist/side-panel/layer-manager.d.ts +5 -4
  102. package/dist/side-panel/layer-manager.js +16 -4
  103. package/dist/side-panel/layer-panel/color-selector.d.ts +6 -4
  104. package/dist/side-panel/layer-panel/custom-palette.d.ts +3 -5
  105. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +2 -1
  106. package/dist/side-panel/layer-panel/dataset-layer-group.js +1 -1
  107. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +2 -1
  108. package/dist/side-panel/layer-panel/dataset-layer-section.js +1 -1
  109. package/dist/side-panel/layer-panel/layer-config-group.d.ts +5 -11
  110. package/dist/side-panel/layer-panel/layer-configurator.js +130 -82
  111. package/dist/side-panel/layer-panel/layer-group-header.d.ts +15 -0
  112. package/dist/side-panel/layer-panel/layer-group-header.js +179 -0
  113. package/dist/side-panel/layer-panel/layer-list.d.ts +9 -4
  114. package/dist/side-panel/layer-panel/layer-list.js +197 -40
  115. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +2 -10
  116. package/dist/side-panel/panel-tab.d.ts +1 -3
  117. package/dist/side-panel/panel-view-list-toggle.d.ts +4 -4
  118. package/dist/side-panel/side-bar.d.ts +1 -6
  119. package/dist/side-panel.d.ts +1 -1
  120. package/dist/types.d.ts +2 -2
  121. package/dist/types.js +1 -1
  122. package/package.json +32 -36
  123. package/dist/map/layer-selector-panel.d.ts +0 -21
  124. package/dist/map/layer-selector-panel.js +0 -85
  125. package/dist/side-panel/layer-panel/radius-by-zoom-input.d.ts +0 -11
  126. package/dist/side-panel/layer-panel/radius-by-zoom-input.js +0 -220
@@ -6,17 +6,61 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
11
  var _react = _interopRequireWildcard(require("react"));
10
12
  var _classnames = _interopRequireDefault(require("classnames"));
11
- var _styledComponents = require("../common/styled-components");
13
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
14
+ var _styledComponents2 = require("../common/styled-components");
12
15
  var _icons = require("../common/icons");
13
16
  var _mapControlTooltip = _interopRequireDefault(require("./map-control-tooltip"));
17
+ var _constants = require("@kepler.gl/constants");
18
+ var _templateObject, _templateObject2; // SPDX-License-Identifier: MIT
19
+ // Copyright contributors to the kepler.gl project
14
20
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
21
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
16
- // SPDX-License-Identifier: MIT
17
- // Copyright contributors to the kepler.gl project
18
-
19
22
  SplitMapButtonFactory.deps = [_mapControlTooltip["default"]];
23
+ var StyledSplitModeMenu = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n top: 0;\n left: -160px;\n background: ", ";\n border-radius: 4px;\n box-shadow: 0 6px 12px 0 rgba(0, 0, 0, 0.16);\n padding: 4px 0;\n z-index: 1000;\n min-width: 140px;\n"])), function (props) {
24
+ return props.theme.dropdownListBgd || '#3A414C';
25
+ });
26
+ var StyledMenuItem = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 8px 16px;\n color: ", ";\n cursor: pointer;\n font-size: 12px;\n font-weight: ", ";\n &:hover {\n background: ", ";\n color: ", ";\n }\n"])), function (props) {
27
+ return props.$active ? props.theme.activeColor || '#1FBAD6' : props.theme.textColor || '#A0A7B4';
28
+ }, function (props) {
29
+ return props.$active ? 500 : 400;
30
+ }, function (props) {
31
+ return props.theme.dropdownListHighlightBg || '#4B5464';
32
+ }, function (props) {
33
+ return props.theme.textColorHl || '#FFFFFF';
34
+ });
35
+ var SwipeCompareIcon = function SwipeCompareIcon(_ref) {
36
+ var _ref$height = _ref.height,
37
+ height = _ref$height === void 0 ? '18px' : _ref$height;
38
+ return /*#__PURE__*/_react["default"].createElement("svg", {
39
+ height: height,
40
+ viewBox: "0 0 16 16",
41
+ fill: "currentColor"
42
+ }, /*#__PURE__*/_react["default"].createElement("path", {
43
+ fillRule: "evenodd",
44
+ clipRule: "evenodd",
45
+ d: "M2 2h12v12H2V2zm1 1v10h10V3H3z"
46
+ }), /*#__PURE__*/_react["default"].createElement("path", {
47
+ d: "M7.5 3v10h1V3z"
48
+ }), /*#__PURE__*/_react["default"].createElement("path", {
49
+ d: "M5 8l2-2v4l-2-2z"
50
+ }), /*#__PURE__*/_react["default"].createElement("path", {
51
+ d: "M11 8l-2-2v4l2-2z"
52
+ }));
53
+ };
54
+ var SPLIT_MODE_OPTIONS = [{
55
+ id: _constants.MapSplitMode.SINGLE_MAP,
56
+ label: 'Single'
57
+ }, {
58
+ id: _constants.MapSplitMode.DUAL_MAP,
59
+ label: 'Dual'
60
+ }, {
61
+ id: _constants.MapSplitMode.SWIPE_COMPARE,
62
+ label: 'Swipe'
63
+ }];
20
64
  function SplitMapButtonFactory(MapControlTooltip) {
21
65
  var defaultActionIcons = {
22
66
  "delete": _icons.Delete,
@@ -24,42 +68,92 @@ function SplitMapButtonFactory(MapControlTooltip) {
24
68
  };
25
69
 
26
70
  /** @type {import('./split-map-button').SplitMapButtonComponent} */
27
- var SplitMapButton = function SplitMapButton(_ref) {
28
- var isSplit = _ref.isSplit,
29
- mapIndex = _ref.mapIndex,
30
- onToggleSplitMap = _ref.onToggleSplitMap,
31
- _ref$actionIcons = _ref.actionIcons,
32
- actionIcons = _ref$actionIcons === void 0 ? defaultActionIcons : _ref$actionIcons,
33
- mapControls = _ref.mapControls,
34
- readOnly = _ref.readOnly;
71
+ var SplitMapButton = function SplitMapButton(_ref2) {
72
+ var isSplit = _ref2.isSplit,
73
+ mapIndex = _ref2.mapIndex,
74
+ onToggleSplitMap = _ref2.onToggleSplitMap,
75
+ onSetMapSplitMode = _ref2.onSetMapSplitMode,
76
+ _ref2$actionIcons = _ref2.actionIcons,
77
+ actionIcons = _ref2$actionIcons === void 0 ? defaultActionIcons : _ref2$actionIcons,
78
+ mapControls = _ref2.mapControls,
79
+ readOnly = _ref2.readOnly,
80
+ mapState = _ref2.mapState;
35
81
  var splitMap = (mapControls === null || mapControls === void 0 ? void 0 : mapControls.splitMap) || {};
82
+ var _useState = (0, _react.useState)(false),
83
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
84
+ menuOpen = _useState2[0],
85
+ setMenuOpen = _useState2[1];
86
+ var menuRef = (0, _react.useRef)(null);
87
+ var currentMode = (mapState === null || mapState === void 0 ? void 0 : mapState.mapSplitMode) || _constants.MapSplitMode.SINGLE_MAP;
36
88
  var onClick = (0, _react.useCallback)(function (event) {
37
89
  event.preventDefault();
38
- onToggleSplitMap(isSplit ? mapIndex : undefined);
39
- }, [isSplit, mapIndex, onToggleSplitMap]);
90
+ if (onSetMapSplitMode) {
91
+ setMenuOpen(function (prev) {
92
+ return !prev;
93
+ });
94
+ } else {
95
+ onToggleSplitMap(isSplit ? mapIndex : undefined);
96
+ }
97
+ }, [isSplit, mapIndex, onToggleSplitMap, onSetMapSplitMode]);
98
+ var handleModeSelect = (0, _react.useCallback)(function (mode) {
99
+ if (onSetMapSplitMode) {
100
+ onSetMapSplitMode({
101
+ mapSplitMode: mode
102
+ });
103
+ }
104
+ setMenuOpen(false);
105
+ }, [onSetMapSplitMode]);
106
+ (0, _react.useEffect)(function () {
107
+ var handleClickOutside = function handleClickOutside(event) {
108
+ if (menuRef.current && !menuRef.current.contains(event.target)) {
109
+ setMenuOpen(false);
110
+ }
111
+ };
112
+ if (menuOpen) {
113
+ document.addEventListener('mousedown', handleClickOutside);
114
+ }
115
+ return function () {
116
+ document.removeEventListener('mousedown', handleClickOutside);
117
+ };
118
+ }, [menuOpen]);
40
119
  var isVisible = (0, _react.useMemo)(function () {
41
120
  return splitMap.show && readOnly !== true;
42
121
  }, [splitMap.show, readOnly]);
43
122
  if (!splitMap.show) {
44
123
  return null;
45
124
  }
46
- return isVisible ? /*#__PURE__*/_react["default"].createElement(MapControlTooltip, {
125
+ return isVisible ? /*#__PURE__*/_react["default"].createElement("div", {
126
+ style: {
127
+ position: 'relative'
128
+ },
129
+ ref: menuRef
130
+ }, /*#__PURE__*/_react["default"].createElement(MapControlTooltip, {
47
131
  id: "action-toggle",
48
- message: isSplit ? 'tooltip.closePanel' : 'tooltip.switchToDualView'
49
- }, /*#__PURE__*/_react["default"].createElement(_styledComponents.MapControlButton, {
132
+ message: onSetMapSplitMode ? 'tooltip.selectSplitMode' : isSplit ? 'tooltip.closePanel' : 'tooltip.switchToDualView'
133
+ }, /*#__PURE__*/_react["default"].createElement(_styledComponents2.MapControlButton, {
50
134
  active: isSplit,
51
135
  onClick: onClick,
52
136
  className: (0, _classnames["default"])('map-control-button', 'split-map', {
53
137
  'close-map': isSplit
54
138
  })
55
- }, isSplit ? /*#__PURE__*/_react["default"].createElement(actionIcons["delete"], {
139
+ }, currentMode === _constants.MapSplitMode.SWIPE_COMPARE ? /*#__PURE__*/_react["default"].createElement(SwipeCompareIcon, {
140
+ height: "18px"
141
+ }) : isSplit ? /*#__PURE__*/_react["default"].createElement(actionIcons["delete"], {
56
142
  height: "18px"
57
143
  }) : /*#__PURE__*/_react["default"].createElement(actionIcons.split, {
58
144
  height: "18px"
145
+ }))), menuOpen && onSetMapSplitMode && /*#__PURE__*/_react["default"].createElement(StyledSplitModeMenu, null, SPLIT_MODE_OPTIONS.map(function (option) {
146
+ return /*#__PURE__*/_react["default"].createElement(StyledMenuItem, {
147
+ key: option.id,
148
+ $active: currentMode === option.id,
149
+ onClick: function onClick() {
150
+ return handleModeSelect(option.id);
151
+ }
152
+ }, option.label);
59
153
  }))) : null;
60
154
  };
61
155
  SplitMapButton.displayName = 'SplitMapButton';
62
156
  return /*#__PURE__*/_react["default"].memo(SplitMapButton);
63
157
  }
64
158
  var _default = exports["default"] = SplitMapButtonFactory;
65
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pY29ucyIsIl9tYXBDb250cm9sVG9vbHRpcCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlNwbGl0TWFwQnV0dG9uRmFjdG9yeSIsImRlcHMiLCJNYXBDb250cm9sVG9vbHRpcEZhY3RvcnkiLCJNYXBDb250cm9sVG9vbHRpcCIsImRlZmF1bHRBY3Rpb25JY29ucyIsIkRlbGV0ZSIsInNwbGl0IiwiU3BsaXQiLCJTcGxpdE1hcEJ1dHRvbiIsIl9yZWYiLCJpc1NwbGl0IiwibWFwSW5kZXgiLCJvblRvZ2dsZVNwbGl0TWFwIiwiX3JlZiRhY3Rpb25JY29ucyIsImFjdGlvbkljb25zIiwibWFwQ29udHJvbHMiLCJyZWFkT25seSIsInNwbGl0TWFwIiwib25DbGljayIsInVzZUNhbGxiYWNrIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInVuZGVmaW5lZCIsImlzVmlzaWJsZSIsInVzZU1lbW8iLCJzaG93IiwiY3JlYXRlRWxlbWVudCIsImlkIiwibWVzc2FnZSIsIk1hcENvbnRyb2xCdXR0b24iLCJhY3RpdmUiLCJjbGFzc05hbWUiLCJjbGFzc25hbWVzIiwiaGVpZ2h0IiwiZGlzcGxheU5hbWUiLCJSZWFjdCIsIm1lbW8iLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFwL3NwbGl0LW1hcC1idXR0b24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudFR5cGUsIHVzZUNhbGxiYWNrLCB1c2VNZW1vfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7TWFwQ29udHJvbEJ1dHRvbn0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7RGVsZXRlLCBTcGxpdH0gZnJvbSAnLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCBNYXBDb250cm9sVG9vbHRpcEZhY3RvcnkgZnJvbSAnLi9tYXAtY29udHJvbC10b29sdGlwJztcbmltcG9ydCB7TWFwQ29udHJvbEl0ZW0sIE1hcENvbnRyb2xzfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuU3BsaXRNYXBCdXR0b25GYWN0b3J5LmRlcHMgPSBbTWFwQ29udHJvbFRvb2x0aXBGYWN0b3J5XTtcblxuaW50ZXJmYWNlIFNwbGl0TWFwQnV0dG9uSWNvbnMge1xuICBkZWxldGU6IENvbXBvbmVudFR5cGU8YW55PjtcbiAgc3BsaXQ6IENvbXBvbmVudFR5cGU8YW55Pjtcbn1cblxuZXhwb3J0IHR5cGUgU3BsaXRNYXBCdXR0b25Qcm9wcyA9IHtcbiAgaXNTcGxpdDogYm9vbGVhbjtcbiAgbWFwSW5kZXg6IG51bWJlcjtcbiAgb25Ub2dnbGVTcGxpdE1hcDogKGluZGV4PzogbnVtYmVyKSA9PiB2b2lkO1xuICBhY3Rpb25JY29uczogU3BsaXRNYXBCdXR0b25JY29ucztcbiAgcmVhZE9ubHk6IGJvb2xlYW47XG4gIG1hcENvbnRyb2xzOiBNYXBDb250cm9scztcbn07XG5cbmZ1bmN0aW9uIFNwbGl0TWFwQnV0dG9uRmFjdG9yeShNYXBDb250cm9sVG9vbHRpcCkge1xuICBjb25zdCBkZWZhdWx0QWN0aW9uSWNvbnMgPSB7XG4gICAgZGVsZXRlOiBEZWxldGUsXG4gICAgc3BsaXQ6IFNwbGl0XG4gIH07XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vc3BsaXQtbWFwLWJ1dHRvbicpLlNwbGl0TWFwQnV0dG9uQ29tcG9uZW50fSAqL1xuICBjb25zdCBTcGxpdE1hcEJ1dHRvbjogUmVhY3QuRkM8U3BsaXRNYXBCdXR0b25Qcm9wcz4gPSAoe1xuICAgIGlzU3BsaXQsXG4gICAgbWFwSW5kZXgsXG4gICAgb25Ub2dnbGVTcGxpdE1hcCxcbiAgICBhY3Rpb25JY29ucyA9IGRlZmF1bHRBY3Rpb25JY29ucyxcbiAgICBtYXBDb250cm9scyxcbiAgICByZWFkT25seVxuICB9KSA9PiB7XG4gICAgY29uc3Qgc3BsaXRNYXAgPSBtYXBDb250cm9scz8uc3BsaXRNYXAgfHwgKHt9IGFzIE1hcENvbnRyb2xJdGVtKTtcbiAgICBjb25zdCBvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgICBldmVudCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIG9uVG9nZ2xlU3BsaXRNYXAoaXNTcGxpdCA/IG1hcEluZGV4IDogdW5kZWZpbmVkKTtcbiAgICAgIH0sXG4gICAgICBbaXNTcGxpdCwgbWFwSW5kZXgsIG9uVG9nZ2xlU3BsaXRNYXBdXG4gICAgKTtcblxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IHVzZU1lbW8oKCkgPT4gc3BsaXRNYXAuc2hvdyAmJiByZWFkT25seSAhPT0gdHJ1ZSwgW3NwbGl0TWFwLnNob3csIHJlYWRPbmx5XSk7XG5cbiAgICBpZiAoIXNwbGl0TWFwLnNob3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaXNWaXNpYmxlID8gKFxuICAgICAgPE1hcENvbnRyb2xUb29sdGlwXG4gICAgICAgIGlkPVwiYWN0aW9uLXRvZ2dsZVwiXG4gICAgICAgIG1lc3NhZ2U9e2lzU3BsaXQgPyAndG9vbHRpcC5jbG9zZVBhbmVsJyA6ICd0b29sdGlwLnN3aXRjaFRvRHVhbFZpZXcnfVxuICAgICAgPlxuICAgICAgICA8TWFwQ29udHJvbEJ1dHRvblxuICAgICAgICAgIGFjdGl2ZT17aXNTcGxpdH1cbiAgICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnbWFwLWNvbnRyb2wtYnV0dG9uJywgJ3NwbGl0LW1hcCcsIHsnY2xvc2UtbWFwJzogaXNTcGxpdH0pfVxuICAgICAgICA+XG4gICAgICAgICAge2lzU3BsaXQgPyA8YWN0aW9uSWNvbnMuZGVsZXRlIGhlaWdodD1cIjE4cHhcIiAvPiA6IDxhY3Rpb25JY29ucy5zcGxpdCBoZWlnaHQ9XCIxOHB4XCIgLz59XG4gICAgICAgIDwvTWFwQ29udHJvbEJ1dHRvbj5cbiAgICAgIDwvTWFwQ29udHJvbFRvb2x0aXA+XG4gICAgKSA6IG51bGw7XG4gIH07XG5cbiAgU3BsaXRNYXBCdXR0b24uZGlzcGxheU5hbWUgPSAnU3BsaXRNYXBCdXR0b24nO1xuICByZXR1cm4gUmVhY3QubWVtbyhTcGxpdE1hcEJ1dHRvbik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNwbGl0TWFwQnV0dG9uRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUE2RCxTQUFBTSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQVIsd0JBQUFRLENBQUEs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
159
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9pY29ucyIsIl9tYXBDb250cm9sVG9vbHRpcCIsIl9jb25zdGFudHMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3BsaXRNYXBCdXR0b25GYWN0b3J5IiwiZGVwcyIsIk1hcENvbnRyb2xUb29sdGlwRmFjdG9yeSIsIlN0eWxlZFNwbGl0TW9kZU1lbnUiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJkcm9wZG93bkxpc3RCZ2QiLCJTdHlsZWRNZW51SXRlbSIsIiRhY3RpdmUiLCJhY3RpdmVDb2xvciIsInRleHRDb2xvciIsImRyb3Bkb3duTGlzdEhpZ2hsaWdodEJnIiwidGV4dENvbG9ySGwiLCJTd2lwZUNvbXBhcmVJY29uIiwiX3JlZiIsIl9yZWYkaGVpZ2h0IiwiaGVpZ2h0IiwiY3JlYXRlRWxlbWVudCIsInZpZXdCb3giLCJmaWxsIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSIsImQiLCJTUExJVF9NT0RFX09QVElPTlMiLCJpZCIsIk1hcFNwbGl0TW9kZSIsIlNJTkdMRV9NQVAiLCJsYWJlbCIsIkRVQUxfTUFQIiwiU1dJUEVfQ09NUEFSRSIsIk1hcENvbnRyb2xUb29sdGlwIiwiZGVmYXVsdEFjdGlvbkljb25zIiwiRGVsZXRlIiwic3BsaXQiLCJTcGxpdCIsIlNwbGl0TWFwQnV0dG9uIiwiX3JlZjIiLCJpc1NwbGl0IiwibWFwSW5kZXgiLCJvblRvZ2dsZVNwbGl0TWFwIiwib25TZXRNYXBTcGxpdE1vZGUiLCJfcmVmMiRhY3Rpb25JY29ucyIsImFjdGlvbkljb25zIiwibWFwQ29udHJvbHMiLCJyZWFkT25seSIsIm1hcFN0YXRlIiwic3BsaXRNYXAiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJtZW51T3BlbiIsInNldE1lbnVPcGVuIiwibWVudVJlZiIsInVzZVJlZiIsImN1cnJlbnRNb2RlIiwibWFwU3BsaXRNb2RlIiwib25DbGljayIsInVzZUNhbGxiYWNrIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInByZXYiLCJ1bmRlZmluZWQiLCJoYW5kbGVNb2RlU2VsZWN0IiwibW9kZSIsInVzZUVmZmVjdCIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImN1cnJlbnQiLCJjb250YWlucyIsInRhcmdldCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJpc1Zpc2libGUiLCJ1c2VNZW1vIiwic2hvdyIsInN0eWxlIiwicG9zaXRpb24iLCJyZWYiLCJtZXNzYWdlIiwiTWFwQ29udHJvbEJ1dHRvbiIsImFjdGl2ZSIsImNsYXNzTmFtZSIsImNsYXNzbmFtZXMiLCJtYXAiLCJvcHRpb24iLCJrZXkiLCJkaXNwbGF5TmFtZSIsIlJlYWN0IiwibWVtbyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXAvc3BsaXQtbWFwLWJ1dHRvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50VHlwZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7TWFwQ29udHJvbEJ1dHRvbn0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7RGVsZXRlLCBTcGxpdH0gZnJvbSAnLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCBNYXBDb250cm9sVG9vbHRpcEZhY3RvcnkgZnJvbSAnLi9tYXAtY29udHJvbC10b29sdGlwJztcbmltcG9ydCB7TWFwQ29udHJvbEl0ZW0sIE1hcENvbnRyb2xzLCBNYXBTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge01hcFNwbGl0TW9kZX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5TcGxpdE1hcEJ1dHRvbkZhY3RvcnkuZGVwcyA9IFtNYXBDb250cm9sVG9vbHRpcEZhY3RvcnldO1xuXG5pbnRlcmZhY2UgU3BsaXRNYXBCdXR0b25JY29ucyB7XG4gIGRlbGV0ZTogQ29tcG9uZW50VHlwZTxhbnk+O1xuICBzcGxpdDogQ29tcG9uZW50VHlwZTxhbnk+O1xufVxuXG5leHBvcnQgdHlwZSBTcGxpdE1hcEJ1dHRvblByb3BzID0ge1xuICBpc1NwbGl0OiBib29sZWFuO1xuICBtYXBJbmRleDogbnVtYmVyO1xuICBvblRvZ2dsZVNwbGl0TWFwOiAoaW5kZXg/OiBudW1iZXIpID0+IHZvaWQ7XG4gIG9uU2V0TWFwU3BsaXRNb2RlPzogKHBheWxvYWQ6IHttYXBTcGxpdE1vZGU6IE1hcFNwbGl0TW9kZX0pID0+IHZvaWQ7XG4gIGFjdGlvbkljb25zOiBTcGxpdE1hcEJ1dHRvbkljb25zO1xuICByZWFkT25seTogYm9vbGVhbjtcbiAgbWFwQ29udHJvbHM6IE1hcENvbnRyb2xzO1xuICBtYXBTdGF0ZT86IE1hcFN0YXRlO1xufTtcblxuY29uc3QgU3R5bGVkU3BsaXRNb2RlTWVudSA9IHN0eWxlZC5kaXZgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAtMTYwcHg7XG4gIGJhY2tncm91bmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZHJvcGRvd25MaXN0QmdkIHx8ICcjM0E0MTRDJ307XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYm94LXNoYWRvdzogMCA2cHggMTJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNik7XG4gIHBhZGRpbmc6IDRweCAwO1xuICB6LWluZGV4OiAxMDAwO1xuICBtaW4td2lkdGg6IDE0MHB4O1xuYDtcblxuY29uc3QgU3R5bGVkTWVudUl0ZW0gPSBzdHlsZWQuZGl2PHskYWN0aXZlPzogYm9vbGVhbn0+YFxuICBwYWRkaW5nOiA4cHggMTZweDtcbiAgY29sb3I6ICR7cHJvcHMgPT5cbiAgICBwcm9wcy4kYWN0aXZlXG4gICAgICA/IHByb3BzLnRoZW1lLmFjdGl2ZUNvbG9yIHx8ICcjMUZCQUQ2J1xuICAgICAgOiBwcm9wcy50aGVtZS50ZXh0Q29sb3IgfHwgJyNBMEE3QjQnfTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiAke3Byb3BzID0+IChwcm9wcy4kYWN0aXZlID8gNTAwIDogNDAwKX07XG4gICY6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZHJvcGRvd25MaXN0SGlnaGxpZ2h0QmcgfHwgJyM0QjU0NjQnfTtcbiAgICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JIbCB8fCAnI0ZGRkZGRid9O1xuICB9XG5gO1xuXG5jb25zdCBTd2lwZUNvbXBhcmVJY29uOiBSZWFjdC5GQzx7aGVpZ2h0Pzogc3RyaW5nfT4gPSAoe2hlaWdodCA9ICcxOHB4J30pID0+IChcbiAgPHN2ZyBoZWlnaHQ9e2hlaWdodH0gdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cbiAgICA8cGF0aFxuICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICBkPVwiTTIgMmgxMnYxMkgyVjJ6bTEgMXYxMGgxMFYzSDN6XCJcbiAgICAvPlxuICAgIDxwYXRoIGQ9XCJNNy41IDN2MTBoMVYzelwiIC8+XG4gICAgPHBhdGggZD1cIk01IDhsMi0ydjRsLTItMnpcIiAvPlxuICAgIDxwYXRoIGQ9XCJNMTEgOGwtMi0ydjRsMi0yelwiIC8+XG4gIDwvc3ZnPlxuKTtcblxuY29uc3QgU1BMSVRfTU9ERV9PUFRJT05TID0gW1xuICB7aWQ6IE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQLCBsYWJlbDogJ1NpbmdsZSd9LFxuICB7aWQ6IE1hcFNwbGl0TW9kZS5EVUFMX01BUCwgbGFiZWw6ICdEdWFsJ30sXG4gIHtpZDogTWFwU3BsaXRNb2RlLlNXSVBFX0NPTVBBUkUsIGxhYmVsOiAnU3dpcGUnfVxuXTtcblxuZnVuY3Rpb24gU3BsaXRNYXBCdXR0b25GYWN0b3J5KE1hcENvbnRyb2xUb29sdGlwKSB7XG4gIGNvbnN0IGRlZmF1bHRBY3Rpb25JY29ucyA9IHtcbiAgICBkZWxldGU6IERlbGV0ZSxcbiAgICBzcGxpdDogU3BsaXRcbiAgfTtcblxuICAvKiogQHR5cGUge2ltcG9ydCgnLi9zcGxpdC1tYXAtYnV0dG9uJykuU3BsaXRNYXBCdXR0b25Db21wb25lbnR9ICovXG4gIGNvbnN0IFNwbGl0TWFwQnV0dG9uOiBSZWFjdC5GQzxTcGxpdE1hcEJ1dHRvblByb3BzPiA9ICh7XG4gICAgaXNTcGxpdCxcbiAgICBtYXBJbmRleCxcbiAgICBvblRvZ2dsZVNwbGl0TWFwLFxuICAgIG9uU2V0TWFwU3BsaXRNb2RlLFxuICAgIGFjdGlvbkljb25zID0gZGVmYXVsdEFjdGlvbkljb25zLFxuICAgIG1hcENvbnRyb2xzLFxuICAgIHJlYWRPbmx5LFxuICAgIG1hcFN0YXRlXG4gIH0pID0+IHtcbiAgICBjb25zdCBzcGxpdE1hcCA9IG1hcENvbnRyb2xzPy5zcGxpdE1hcCB8fCAoe30gYXMgTWFwQ29udHJvbEl0ZW0pO1xuICAgIGNvbnN0IFttZW51T3Blbiwgc2V0TWVudU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gICAgY29uc3QgY3VycmVudE1vZGUgPSBtYXBTdGF0ZT8ubWFwU3BsaXRNb2RlIHx8IE1hcFNwbGl0TW9kZS5TSU5HTEVfTUFQO1xuXG4gICAgY29uc3Qgb25DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAob25TZXRNYXBTcGxpdE1vZGUpIHtcbiAgICAgICAgICBzZXRNZW51T3BlbihwcmV2ID0+ICFwcmV2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvblRvZ2dsZVNwbGl0TWFwKGlzU3BsaXQgPyBtYXBJbmRleCA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbaXNTcGxpdCwgbWFwSW5kZXgsIG9uVG9nZ2xlU3BsaXRNYXAsIG9uU2V0TWFwU3BsaXRNb2RlXVxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVNb2RlU2VsZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgICAobW9kZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChvblNldE1hcFNwbGl0TW9kZSkge1xuICAgICAgICAgIG9uU2V0TWFwU3BsaXRNb2RlKHttYXBTcGxpdE1vZGU6IG1vZGUgYXMgTWFwU3BsaXRNb2RlfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0TWVudU9wZW4oZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIFtvblNldE1hcFNwbGl0TW9kZV1cbiAgICApO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAobWVudVJlZi5jdXJyZW50ICYmICFtZW51UmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICAgICAgc2V0TWVudU9wZW4oZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKG1lbnVPcGVuKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpO1xuICAgICAgfTtcbiAgICB9LCBbbWVudU9wZW5dKTtcblxuICAgIGNvbnN0IGlzVmlzaWJsZSA9IHVzZU1lbW8oKCkgPT4gc3BsaXRNYXAuc2hvdyAmJiByZWFkT25seSAhPT0gdHJ1ZSwgW3NwbGl0TWFwLnNob3csIHJlYWRPbmx5XSk7XG5cbiAgICBpZiAoIXNwbGl0TWFwLnNob3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaXNWaXNpYmxlID8gKFxuICAgICAgPGRpdiBzdHlsZT17e3Bvc2l0aW9uOiAncmVsYXRpdmUnfX0gcmVmPXttZW51UmVmfT5cbiAgICAgICAgPE1hcENvbnRyb2xUb29sdGlwXG4gICAgICAgICAgaWQ9XCJhY3Rpb24tdG9nZ2xlXCJcbiAgICAgICAgICBtZXNzYWdlPXtcbiAgICAgICAgICAgIG9uU2V0TWFwU3BsaXRNb2RlXG4gICAgICAgICAgICAgID8gJ3Rvb2x0aXAuc2VsZWN0U3BsaXRNb2RlJ1xuICAgICAgICAgICAgICA6IGlzU3BsaXRcbiAgICAgICAgICAgICAgPyAndG9vbHRpcC5jbG9zZVBhbmVsJ1xuICAgICAgICAgICAgICA6ICd0b29sdGlwLnN3aXRjaFRvRHVhbFZpZXcnXG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPE1hcENvbnRyb2xCdXR0b25cbiAgICAgICAgICAgIGFjdGl2ZT17aXNTcGxpdH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzbmFtZXMoJ21hcC1jb250cm9sLWJ1dHRvbicsICdzcGxpdC1tYXAnLCB7J2Nsb3NlLW1hcCc6IGlzU3BsaXR9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y3VycmVudE1vZGUgPT09IE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFID8gKFxuICAgICAgICAgICAgICA8U3dpcGVDb21wYXJlSWNvbiBoZWlnaHQ9XCIxOHB4XCIgLz5cbiAgICAgICAgICAgICkgOiBpc1NwbGl0ID8gKFxuICAgICAgICAgICAgICA8YWN0aW9uSWNvbnMuZGVsZXRlIGhlaWdodD1cIjE4cHhcIiAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPGFjdGlvbkljb25zLnNwbGl0IGhlaWdodD1cIjE4cHhcIiAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L01hcENvbnRyb2xCdXR0b24+XG4gICAgICAgIDwvTWFwQ29udHJvbFRvb2x0aXA+XG4gICAgICAgIHttZW51T3BlbiAmJiBvblNldE1hcFNwbGl0TW9kZSAmJiAoXG4gICAgICAgICAgPFN0eWxlZFNwbGl0TW9kZU1lbnU+XG4gICAgICAgICAgICB7U1BMSVRfTU9ERV9PUFRJT05TLm1hcChvcHRpb24gPT4gKFxuICAgICAgICAgICAgICA8U3R5bGVkTWVudUl0ZW1cbiAgICAgICAgICAgICAgICBrZXk9e29wdGlvbi5pZH1cbiAgICAgICAgICAgICAgICAkYWN0aXZlPXtjdXJyZW50TW9kZSA9PT0gb3B0aW9uLmlkfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU1vZGVTZWxlY3Qob3B0aW9uLmlkKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIDwvU3R5bGVkTWVudUl0ZW0+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1N0eWxlZFNwbGl0TW9kZU1lbnU+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApIDogbnVsbDtcbiAgfTtcblxuICBTcGxpdE1hcEJ1dHRvbi5kaXNwbGF5TmFtZSA9ICdTcGxpdE1hcEJ1dHRvbic7XG4gIHJldHVybiBSZWFjdC5tZW1vKFNwbGl0TWFwQnV0dG9uKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU3BsaXRNYXBCdXR0b25GYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsaUJBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLGtCQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxrQkFBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBQWtELElBQUFRLGVBQUEsRUFBQUMsZ0JBQUEsRUFWbEQ7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBWix3QkFBQVksQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENB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