@kepler.gl/components 3.2.5 → 3.3.0-alpha.0

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 (224) hide show
  1. package/dist/bottom-widget.d.ts +4 -4
  2. package/dist/common/action-panel.d.ts +3 -3
  3. package/dist/common/animation-control/animation-control.d.ts +1 -1
  4. package/dist/common/animation-control/playback-controls.d.ts +1 -1
  5. package/dist/common/color-legend.d.ts +4 -4
  6. package/dist/common/column-stats-chart.d.ts +3 -3
  7. package/dist/common/data-table/button.d.ts +1 -1
  8. package/dist/common/data-table/canvas.d.ts +0 -1
  9. package/dist/common/data-table/cell-size.d.ts +2 -2
  10. package/dist/common/data-table/display-format.d.ts +1 -1
  11. package/dist/common/data-table/header-cell.d.ts +2 -2
  12. package/dist/common/data-table/index.d.ts +7 -9
  13. package/dist/common/data-table/index.js +1 -1
  14. package/dist/common/data-table/option-dropdown.d.ts +1 -1
  15. package/dist/common/field-selector.d.ts +5 -5
  16. package/dist/common/field-token.d.ts +1 -1
  17. package/dist/common/file-uploader/file-drop.d.ts +1 -1
  18. package/dist/common/file-uploader/file-upload-progress.d.ts +1 -1
  19. package/dist/common/file-uploader/file-upload.d.ts +1 -1
  20. package/dist/common/flex-container.d.ts +2 -3
  21. package/dist/common/histogram-plot.d.ts +1 -1
  22. package/dist/common/icon-button.d.ts +16 -16
  23. package/dist/common/icons/base.d.ts +1 -1
  24. package/dist/common/icons/close.js +7 -6
  25. package/dist/common/icons/effects/distance-fog.d.ts +14 -0
  26. package/dist/common/icons/effects/distance-fog.js +79 -0
  27. package/dist/common/icons/effects/surface-fog.d.ts +14 -0
  28. package/dist/common/icons/effects/surface-fog.js +86 -0
  29. package/dist/common/icons/index.d.ts +3 -0
  30. package/dist/common/icons/index.js +22 -1
  31. package/dist/common/icons/zoom-out.d.ts +10 -0
  32. package/dist/common/icons/zoom-out.js +48 -0
  33. package/dist/common/item-selector/chickleted-input.d.ts +4 -4
  34. package/dist/common/item-selector/dropdown-list.d.ts +3 -3
  35. package/dist/common/item-selector/dropdown-select.d.ts +7 -7
  36. package/dist/common/item-selector/item-selector.d.ts +2 -2
  37. package/dist/common/item-selector/typeahead.d.ts +3 -3
  38. package/dist/common/loading-spinner.d.ts +2 -2
  39. package/dist/common/modal.d.ts +5 -5
  40. package/dist/common/portaled.d.ts +8 -25
  41. package/dist/common/progress-bar.d.ts +1 -1
  42. package/dist/common/radius-legend.d.ts +1 -1
  43. package/dist/common/range-brush.d.ts +1 -1
  44. package/dist/common/range-plot.d.ts +1 -1
  45. package/dist/common/slider/mouse-event.d.ts +1 -1
  46. package/dist/common/slider/slider-bar-handle.d.ts +2 -2
  47. package/dist/common/slider/slider-handle.d.ts +3 -3
  48. package/dist/common/slider/slider.d.ts +2 -2
  49. package/dist/common/styled-components.d.ts +157 -158
  50. package/dist/common/sync-timeline-control.d.ts +3 -3
  51. package/dist/common/time-range-slider-time-title.d.ts +1 -1
  52. package/dist/common/time-range-slider.d.ts +2 -2
  53. package/dist/common/timeline-slider.d.ts +1 -1
  54. package/dist/common/tippy-tooltip.d.ts +1 -1
  55. package/dist/common/toolbar-item.d.ts +1 -1
  56. package/dist/common/toolbar.d.ts +1 -1
  57. package/dist/common/vertical-toolbar.d.ts +2 -3
  58. package/dist/container.d.ts +6 -6
  59. package/dist/context.d.ts +3 -3
  60. package/dist/dnd-context.d.ts +2 -2
  61. package/dist/editor/editor.d.ts +1 -1
  62. package/dist/editor/editor.js +1 -1
  63. package/dist/editor/feature-action-panel.d.ts +1 -1
  64. package/dist/editor/feature-action-panel.js +1 -1
  65. package/dist/effects/compact-color-picker.d.ts +1 -1
  66. package/dist/effects/effect-configurator.d.ts +2 -2
  67. package/dist/effects/effect-configurator.js +52 -14
  68. package/dist/effects/effect-list.d.ts +1 -1
  69. package/dist/effects/effect-manager.d.ts +3 -3
  70. package/dist/effects/effect-manager.js +9 -2
  71. package/dist/effects/effect-panel-header.d.ts +2 -2
  72. package/dist/effects/effect-panel-header.js +2 -2
  73. package/dist/effects/effect-panel.d.ts +2 -2
  74. package/dist/effects/effect-time-configurator.d.ts +1 -1
  75. package/dist/effects/effect-time-selector.d.ts +1 -1
  76. package/dist/effects/effect-time-slider.d.ts +3 -3
  77. package/dist/effects/effect-type-dropdown-list.d.ts +2 -2
  78. package/dist/effects/effect-type-list-item.d.ts +1 -1
  79. package/dist/effects/effect-type-selector.d.ts +2 -2
  80. package/dist/effects/side-panel-title.d.ts +1 -1
  81. package/dist/effects/timezone-selector.d.ts +1 -1
  82. package/dist/filters/components.d.ts +2 -3
  83. package/dist/filters/filter-panels/types.d.ts +4 -4
  84. package/dist/filters/types.d.ts +8 -8
  85. package/dist/geocoder/geocoder.d.ts +3 -3
  86. package/dist/geocoder/geocoder.js +5 -1
  87. package/dist/geocoder-panel.d.ts +10 -2
  88. package/dist/geocoder-panel.js +3 -3
  89. package/dist/hooks/use-cloud-list-provider.d.ts +1 -1
  90. package/dist/hooks/use-dnd-effects.d.ts +1 -1
  91. package/dist/hooks/use-dnd-layers.d.ts +1 -1
  92. package/dist/hooks/use-feature-flags.d.ts +1 -1
  93. package/dist/hooks/use-fetch-raster-tile-metadata.d.ts +3 -3
  94. package/dist/hooks/use-fetch-vector-tile-metadata.d.ts +2 -2
  95. package/dist/hooks/use-legend-position.d.ts +8 -6
  96. package/dist/hooks/use-legend-position.js +27 -4
  97. package/dist/injector.d.ts +5 -5
  98. package/dist/kepler-gl.d.ts +55 -64
  99. package/dist/loading-indicator.d.ts +4 -4
  100. package/dist/loading-indicator.js +33 -8
  101. package/dist/map/effects/effect-control.d.ts +1 -1
  102. package/dist/map/layer-hover-info.d.ts +3 -3
  103. package/dist/map/layer-hover-info.js +8 -3
  104. package/dist/map/layer-selector-panel.d.ts +1 -1
  105. package/dist/map/lazy-tippy.js +3 -3
  106. package/dist/map/locale-panel.d.ts +1 -1
  107. package/dist/map/map-control-panel.d.ts +1 -1
  108. package/dist/map/map-control-toolbar.d.ts +6 -7
  109. package/dist/map/map-control-tooltip.d.ts +1 -1
  110. package/dist/map/map-control.d.ts +3 -2
  111. package/dist/map/map-control.js +1 -1
  112. package/dist/map/map-draw-panel.d.ts +1 -1
  113. package/dist/map/map-legend-panel.d.ts +4 -3
  114. package/dist/map/map-legend-panel.js +22 -9
  115. package/dist/map/map-legend.d.ts +10 -8
  116. package/dist/map/map-legend.js +37 -7
  117. package/dist/map/map-popover-content.d.ts +2 -2
  118. package/dist/map/map-popover.d.ts +2 -2
  119. package/dist/map/split-map-button.d.ts +1 -1
  120. package/dist/map/toggle-3d-button.d.ts +1 -1
  121. package/dist/map-container.d.ts +2 -2
  122. package/dist/map-container.js +50 -25
  123. package/dist/map-view-state-context.d.ts +9 -2
  124. package/dist/map-view-state-context.js +1 -1
  125. package/dist/modal-container.d.ts +3 -6
  126. package/dist/modals/cloud-components/cloud-header.d.ts +1 -1
  127. package/dist/modals/cloud-components/provider-select.d.ts +1 -1
  128. package/dist/modals/cloud-tile.d.ts +1 -1
  129. package/dist/modals/data-table-modal.d.ts +1 -1
  130. package/dist/modals/export-data-modal.js +2 -2
  131. package/dist/modals/export-image-modal.d.ts +1 -1
  132. package/dist/modals/export-image-modal.js +75 -7
  133. package/dist/modals/export-map-modal/components.d.ts +1 -1
  134. package/dist/modals/export-map-modal/export-html-map.d.ts +1 -1
  135. package/dist/modals/export-map-modal/export-html-map.js +3 -1
  136. package/dist/modals/export-map-modal/export-json-map.d.ts +1 -1
  137. package/dist/modals/image-modal-container.d.ts +1 -1
  138. package/dist/modals/load-data-modal.d.ts +2 -2
  139. package/dist/modals/modal-dialog.d.ts +0 -2
  140. package/dist/modals/overwrite-map-modal.d.ts +1 -1
  141. package/dist/modals/save-map-modal.d.ts +3 -3
  142. package/dist/modals/share-map-modal.d.ts +1 -1
  143. package/dist/modals/tilesets-modals/common.d.ts +3 -3
  144. package/dist/modals/tilesets-modals/common.js +1 -1
  145. package/dist/modals/tilesets-modals/load-data-footer.d.ts +1 -1
  146. package/dist/modals/tilesets-modals/load-tileset.d.ts +1 -1
  147. package/dist/modals/tilesets-modals/load-tileset.js +8 -2
  148. package/dist/modals/tilesets-modals/tileset-icon.d.ts +1 -1
  149. package/dist/modals/tilesets-modals/tileset-raster-form.d.ts +2 -2
  150. package/dist/modals/tilesets-modals/tileset-tile3d-form.d.ts +12 -0
  151. package/dist/modals/tilesets-modals/tileset-tile3d-form.js +388 -0
  152. package/dist/modals/tilesets-modals/tileset-vector-form.d.ts +3 -3
  153. package/dist/modals/tilesets-modals/tileset-wms-form.d.ts +1 -1
  154. package/dist/modals/tilesets-modals/tileset-wms-form.js +53 -10
  155. package/dist/plot-container.js +82 -11
  156. package/dist/side-panel/add-by-dataset-button.d.ts +1 -1
  157. package/dist/side-panel/common/dataset-info.d.ts +2 -2
  158. package/dist/side-panel/common/dataset-info.js +2 -2
  159. package/dist/side-panel/common/dataset-tag.d.ts +2 -2
  160. package/dist/side-panel/common/dataset-title.d.ts +2 -2
  161. package/dist/side-panel/common/source-data-catalog.d.ts +3 -3
  162. package/dist/side-panel/common/types.d.ts +8 -8
  163. package/dist/side-panel/custom-panel.d.ts +2 -2
  164. package/dist/side-panel/filter-manager.d.ts +3 -3
  165. package/dist/side-panel/filter-panel/add-filter-button.d.ts +1 -1
  166. package/dist/side-panel/filter-panel/filter-panel-header.d.ts +2 -2
  167. package/dist/side-panel/interaction-manager.d.ts +1 -1
  168. package/dist/side-panel/interaction-panel/brush-config.d.ts +1 -1
  169. package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +3 -3
  170. package/dist/side-panel/interaction-panel/tooltip-config.d.ts +1 -1
  171. package/dist/side-panel/layer-manager.d.ts +2 -2
  172. package/dist/side-panel/layer-panel/add-layer-button.d.ts +1 -1
  173. package/dist/side-panel/layer-panel/channel-by-value-selector.d.ts +1 -1
  174. package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +4 -4
  175. package/dist/side-panel/layer-panel/color-palette-preset.d.ts +1 -1
  176. package/dist/side-panel/layer-panel/color-palette.d.ts +2 -2
  177. package/dist/side-panel/layer-panel/color-range-selector.d.ts +3 -3
  178. package/dist/side-panel/layer-panel/color-scale-selector.d.ts +4 -4
  179. package/dist/side-panel/layer-panel/color-selector.d.ts +3 -3
  180. package/dist/side-panel/layer-panel/column-selector.d.ts +1 -1
  181. package/dist/side-panel/layer-panel/custom-palette.d.ts +10 -10
  182. package/dist/side-panel/layer-panel/custom-picker.d.ts +1 -1
  183. package/dist/side-panel/layer-panel/dataset-layer-group.d.ts +1 -1
  184. package/dist/side-panel/layer-panel/dataset-layer-section.d.ts +1 -1
  185. package/dist/side-panel/layer-panel/dataset-section.d.ts +2 -2
  186. package/dist/side-panel/layer-panel/dimension-scale-selector.d.ts +1 -1
  187. package/dist/side-panel/layer-panel/how-to-button.d.ts +1 -1
  188. package/dist/side-panel/layer-panel/layer-color-selector.d.ts +3 -3
  189. package/dist/side-panel/layer-panel/layer-column-config.d.ts +1 -1
  190. package/dist/side-panel/layer-panel/layer-column-mode-config.d.ts +3 -3
  191. package/dist/side-panel/layer-panel/layer-config-group.d.ts +5 -5
  192. package/dist/side-panel/layer-panel/layer-configurator.d.ts +2 -2
  193. package/dist/side-panel/layer-panel/layer-configurator.js +27 -17
  194. package/dist/side-panel/layer-panel/layer-error-message.d.ts +1 -1
  195. package/dist/side-panel/layer-panel/layer-list.d.ts +2 -2
  196. package/dist/side-panel/layer-panel/layer-panel-header.d.ts +6 -5
  197. package/dist/side-panel/layer-panel/layer-panel-header.js +15 -5
  198. package/dist/side-panel/layer-panel/layer-panel.d.ts +1 -1
  199. package/dist/side-panel/layer-panel/layer-type-dropdown-list.d.ts +2 -2
  200. package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +2 -2
  201. package/dist/side-panel/layer-panel/layer-type-selector.d.ts +1 -1
  202. package/dist/side-panel/layer-panel/radius-by-zoom-input.d.ts +1 -1
  203. package/dist/side-panel/layer-panel/raster-tile-layer-configurator.d.ts +1 -1
  204. package/dist/side-panel/layer-panel/single-color-palette.d.ts +1 -1
  205. package/dist/side-panel/layer-panel/text-label-panel.d.ts +1 -1
  206. package/dist/side-panel/layer-panel/vector-tile-layer-configurator.d.ts +2 -2
  207. package/dist/side-panel/layer-panel/vis-config-by-field-selector.d.ts +1 -1
  208. package/dist/side-panel/layer-panel/vis-config-slider.d.ts +1 -1
  209. package/dist/side-panel/layer-panel/vis-config-switch.d.ts +1 -1
  210. package/dist/side-panel/map-manager.d.ts +1 -1
  211. package/dist/side-panel/map-style-panel/map-layer-group-color-picker.d.ts +1 -1
  212. package/dist/side-panel/map-style-panel/map-layer-group-item.d.ts +2 -2
  213. package/dist/side-panel/map-style-panel/map-layer-selector.d.ts +1 -1
  214. package/dist/side-panel/map-style-panel/map-style-selector.d.ts +1 -1
  215. package/dist/side-panel/panel-header-action.d.ts +1 -1
  216. package/dist/side-panel/panel-header.d.ts +12 -12
  217. package/dist/side-panel/panel-tab.d.ts +4 -4
  218. package/dist/side-panel/panel-title.d.ts +1 -1
  219. package/dist/side-panel/panel-toggle.d.ts +1 -1
  220. package/dist/side-panel/panel-view-list-toggle.d.ts +3 -3
  221. package/dist/side-panel/side-bar.d.ts +2 -2
  222. package/dist/side-panel.d.ts +1 -1
  223. package/dist/types.d.ts +3 -3
  224. package/package.json +23 -22
@@ -19,9 +19,10 @@ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/hel
19
19
  var _react = _interopRequireWildcard(require("react"));
20
20
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
21
  var _reactMapGl = require("react-map-gl");
22
+ var _core = require("@deck.gl/core");
22
23
  var _react2 = _interopRequireDefault(require("@deck.gl/react"));
23
24
  var _reselect = require("reselect");
24
- var _core = require("@dnd-kit/core");
25
+ var _core2 = require("@dnd-kit/core");
25
26
  var _debounce = _interopRequireDefault(require("lodash/debounce"));
26
27
  var _mapPopover = _interopRequireDefault(require("./map/map-popover"));
27
28
  var _mapControl = _interopRequireDefault(require("./map/map-control"));
@@ -35,7 +36,6 @@ var _dndLayerItems = require("./common/dnd-layer-items");
35
36
  var _mapViewStateContext = require("./map-view-state-context");
36
37
  var _errorBoundary = _interopRequireDefault(require("./common/error-boundary"));
37
38
  var _localization = require("@kepler.gl/localization");
38
- var _core2 = require("@deck.gl/core");
39
39
  var _reducers = require("@kepler.gl/reducers");
40
40
  var _loadingIndicator = _interopRequireDefault(require("./loading-indicator"));
41
41
  var _templateObject, _templateObject2; // SPDX-License-Identifier: MIT
@@ -109,7 +109,7 @@ var isSplitSelector = exports.isSplitSelector = function isSplitSelector(props)
109
109
  };
110
110
  var Droppable = exports.Droppable = function Droppable(_ref3) {
111
111
  var containerId = _ref3.containerId;
112
- var _useDroppable = (0, _core.useDroppable)({
112
+ var _useDroppable = (0, _core2.useDroppable)({
113
113
  id: containerId,
114
114
  data: {
115
115
  type: _dndLayerItems.DROPPABLE_MAP_CONTAINER_TYPE,
@@ -304,10 +304,17 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
304
304
  _this.props.visStateActions.onLayerHover(info, _this.props.index);
305
305
  });
306
306
  (0, _defineProperty2["default"])(_this, "_onLayerSetDomain", function (idx, value) {
307
- _this.props.visStateActions.layerConfigChange(_this.props.visState.layers[idx], {
307
+ // deck.gl 9 native aggregation layers (Grid, Hexagon) pass [min, max],
308
+ // while ClusterLayer's CPUAggregator still passes {domain, aggregatedBins}.
309
+ var config = Array.isArray(value) ? {
310
+ colorDomain: value
311
+ } : {
308
312
  colorDomain: value.domain,
309
313
  aggregatedBins: value.aggregatedBins
310
- });
314
+ };
315
+ var layer = _this.props.visState.layers[idx];
316
+ if (!layer) return;
317
+ _this.props.visStateActions.layerConfigChange(layer, config);
311
318
  });
312
319
  (0, _defineProperty2["default"])(_this, "_onRedrawNeeded", function (_idx) {
313
320
  // updateMapUpdater always returns a new state object reference, which triggers re-render
@@ -316,6 +323,9 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
316
323
  index = _this$props2.index;
317
324
  mapStateActions.updateMap({}, index);
318
325
  });
326
+ (0, _defineProperty2["default"])(_this, "_onFitBounds", function (_idx, bounds) {
327
+ _this.props.mapStateActions.fitBounds(bounds);
328
+ });
319
329
  (0, _defineProperty2["default"])(_this, "_onLayerFilteredItemsChange", function (idx, event) {
320
330
  _this.props.visStateActions.layerFilteredItemsChange(_this.props.visState.layers[idx], event);
321
331
  });
@@ -375,9 +385,8 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
375
385
  _this.props.getMapboxRef(mapRef, _this.props.index);
376
386
  }
377
387
  });
378
- (0, _defineProperty2["default"])(_this, "_onBeforeRender", function (_ref6) {
379
- var gl = _ref6.gl;
380
- (0, _utils.setLayerBlending)(gl, _this.props.visState.layerBlending);
388
+ (0, _defineProperty2["default"])(_this, "_onBeforeRender", function () {
389
+ // no-op
381
390
  });
382
391
  (0, _defineProperty2["default"])(_this, "_onDeckError", function (error, layer) {
383
392
  var errorMessage = (error === null || error === void 0 ? void 0 : error.message) || 'unknown-error';
@@ -441,12 +450,19 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
441
450
  change: 0
442
451
  });
443
452
  }, DEBOUNCE_LOADING_STATE_PROPAGATE));
453
+ (0, _defineProperty2["default"])(_this, "_handleToggleLayerVisibility", function (layer) {
454
+ var visStateActions = _this.props.visStateActions;
455
+ visStateActions.layerConfigChange(layer, {
456
+ isVisible: !layer.config.isVisible
457
+ });
458
+ });
444
459
  (0, _defineProperty2["default"])(_this, "_toggleMapControl", function (panelId) {
445
460
  var _this$props4 = _this.props,
446
461
  index = _this$props4.index,
447
462
  uiStateActions = _this$props4.uiStateActions;
448
463
  uiStateActions.toggleMapControl(panelId, Number(index));
449
464
  });
465
+ (0, _utils.patchDeckRendererForPostProcessing)();
450
466
  return _this;
451
467
  }
452
468
  (0, _inherits2["default"])(MapContainer, _Component);
@@ -474,9 +490,9 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
474
490
  }
475
491
  }, {
476
492
  key: "_onDeckInitialized",
477
- value: function _onDeckInitialized(gl) {
493
+ value: function _onDeckInitialized(device) {
478
494
  if (this.props.onDeckInitialized) {
479
- this.props.onDeckInitialized(this._deck, gl);
495
+ this.props.onDeckInitialized(this._deck, device);
480
496
  }
481
497
  }
482
498
 
@@ -625,9 +641,9 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
625
641
 
626
642
  // disable double click zoom when editor is in any draw mode
627
643
  var mapDraw = mapControls.mapDraw;
628
- var _ref7 = mapDraw || {},
629
- _ref7$active = _ref7.active,
630
- editorMenuActive = _ref7$active === void 0 ? false : _ref7$active;
644
+ var _ref6 = mapDraw || {},
645
+ _ref6$active = _ref6.active,
646
+ editorMenuActive = _ref6$active === void 0 ? false : _ref6$active;
631
647
  var isEditorDrawingMode = _layers.EditorLayerUtils.isDrawingActive(editorMenuActive, editor.mode);
632
648
  var internalViewState = (_this$context2 = this.context) === null || _this$context2 === void 0 ? void 0 : _this$context2.getInternalViewState(index);
633
649
  var internalMapState = _objectSpread(_objectSpread({}, mapState), internalViewState);
@@ -664,19 +680,25 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
664
680
  onSetLayerDomain: this._onLayerSetDomain,
665
681
  onFilteredItemsChange: this._onLayerFilteredItemsChange,
666
682
  onWMSFeatureInfo: this._onWMSFeatureInfo,
667
- onRedrawNeeded: this._onRedrawNeeded
683
+ onRedrawNeeded: this._onRedrawNeeded,
684
+ onFitBounds: this._onFitBounds
668
685
  }, deckGlProps);
669
686
  var extraDeckParams = {};
670
687
  if (primaryMap) {
688
+ // Omit hover updates when the pointer position is invalid, ie. over UI overlays or
689
+ // outside the map container. In those cases x/y may be < 0
671
690
  extraDeckParams.getTooltip = function (info) {
691
+ var x = Number(info === null || info === void 0 ? void 0 : info.x);
692
+ var y = Number(info === null || info === void 0 ? void 0 : info.y);
693
+ if (Number.isNaN(x) || Number.isNaN(y) || x < 0 || y < 0) return null;
672
694
  return _layers.EditorLayerUtils.getTooltip(info, {
673
695
  editorMenuActive: editorMenuActive,
674
696
  editor: editor,
675
697
  theme: theme
676
698
  });
677
699
  };
678
- extraDeckParams.getCursor = function (_ref8) {
679
- var isDragging = _ref8.isDragging;
700
+ extraDeckParams.getCursor = function (_ref7) {
701
+ var isDragging = _ref7.isDragging;
680
702
  var editorCursor = _layers.EditorLayerUtils.getCursor({
681
703
  editorMenuActive: editorMenuActive,
682
704
  editor: editor,
@@ -690,16 +712,18 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
690
712
  }
691
713
  var effects = this._isOKToRenderEffects(index) ? (0, _utils.computeDeckEffects)({
692
714
  visState: visState,
693
- mapState: mapState
715
+ mapState: mapState,
716
+ isExport: this.props.isExport
694
717
  }) : [];
695
- var views = deckGlProps !== null && deckGlProps !== void 0 && deckGlProps.views ? deckGlProps === null || deckGlProps === void 0 ? void 0 : deckGlProps.views() : new _core2.MapView({
718
+ var views = deckGlProps !== null && deckGlProps !== void 0 && deckGlProps.views ? deckGlProps === null || deckGlProps === void 0 ? void 0 : deckGlProps.views() : new _core.MapView({
696
719
  legacyMeterSizes: true
697
720
  });
698
721
  var allDeckGlProps = _objectSpread(_objectSpread({}, deckGlProps), {}, {
699
722
  pickingRadius: _constants.DEFAULT_PICKING_RADIUS,
700
723
  views: views,
701
724
  layers: deckGlLayers,
702
- effects: effects
725
+ effects: effects,
726
+ parameters: (0, _utils.getLayerBlendingParameters)(visState.layerBlending)
703
727
  });
704
728
  if (typeof (deckRenderCallbacks === null || deckRenderCallbacks === void 0 ? void 0 : deckRenderCallbacks.onDeckRender) === 'function') {
705
729
  allDeckGlProps = deckRenderCallbacks.onDeckRender(allDeckGlProps);
@@ -763,8 +787,8 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
763
787
  _this2._deck = comp.deck;
764
788
  }
765
789
  },
766
- onWebGLInitialized: function onWebGLInitialized(gl) {
767
- return _this2._onDeckInitialized(gl);
790
+ onDeviceInitialized: function onDeviceInitialized(device) {
791
+ return _this2._onDeckInitialized(device);
768
792
  },
769
793
  onAfterRender: function onAfterRender() {
770
794
  if (typeof (deckRenderCallbacks === null || deckRenderCallbacks === void 0 ? void 0 : deckRenderCallbacks.onDeckAfterRender) === 'function') {
@@ -799,7 +823,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
799
823
  key: "_renderMap",
800
824
  value: /* eslint-disable complexity */
801
825
  function _renderMap() {
802
- var _mapStyle$mapStyles, _getApplicationConfig, _this$context3, _mapStyle$bottomMapSt;
826
+ var _mapStyle$mapStyles, _getApplicationConfig, _this$context3, _this$props$isExport, _mapStyle$bottomMapSt;
803
827
  var _this$props7 = this.props,
804
828
  visState = _this$props7.visState,
805
829
  mapState = _this$props7.mapState,
@@ -838,7 +862,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
838
862
  var baseMapLibraryConfig = (_getApplicationConfig = (0, _utils.getApplicationConfig)().baseMapLibraryConfig) === null || _getApplicationConfig === void 0 ? void 0 : _getApplicationConfig[baseMapLibraryName];
839
863
  var internalViewState = (_this$context3 = this.context) === null || _this$context3 === void 0 ? void 0 : _this$context3.getInternalViewState(index);
840
864
  var mapProps = _objectSpread(_objectSpread({}, internalViewState), {}, {
841
- preserveDrawingBuffer: true,
865
+ preserveDrawingBuffer: (_this$props$isExport = this.props.isExport) !== null && _this$props$isExport !== void 0 ? _this$props$isExport : false,
842
866
  mapboxAccessToken: (currentStyle === null || currentStyle === void 0 ? void 0 : currentStyle.accessToken) || mapboxApiAccessToken,
843
867
  // baseApiUrl: mapboxApiUrl,
844
868
  mapLib: baseMapLibraryConfig.getMapLib(),
@@ -891,6 +915,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
891
915
  onSetLocale: uiStateActions.setLocale,
892
916
  onToggleEditorVisibility: visStateActions.toggleEditorVisibility,
893
917
  onLayerVisConfigChange: visStateActions.layerVisConfigChange,
918
+ onToggleLayerVisibility: this._handleToggleLayerVisibility,
894
919
  mapHeight: mapState.height,
895
920
  setMapControlSettings: uiStateActions.setMapControlSettings,
896
921
  activeSidePanel: activeSidePanel
@@ -922,7 +947,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
922
947
  }, topMapContainerProps)) : null, hasGeocoderLayer ? this._renderDeckOverlay((0, _defineProperty2["default"])({}, _constants.GEOCODER_LAYER_ID, hasGeocoderLayer), {
923
948
  primaryMap: false,
924
949
  isInteractive: false
925
- }) : null, this._renderMapPopover(), primary !== isSplit ? /*#__PURE__*/_react["default"].createElement(_loadingIndicator["default"], {
950
+ }) : null, this._renderMapPopover(), !isExport && primary !== isSplit ? /*#__PURE__*/_react["default"].createElement(_loadingIndicator["default"], {
926
951
  isVisible: Boolean(isLoadingIndicatorVisible || this.anyActiveLayerLoading),
927
952
  activeSidePanel: Boolean(activeSidePanel),
928
953
  sidePanelWidth: sidePanelWidth
@@ -970,4 +995,4 @@ function MapContainerFactory(MapPopover, MapControl, Editor) {
970
995
  });
971
996
  return (0, _styledComponents.withTheme)(MapContainer);
972
997
  }
973
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZWFjdE1hcEdsIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVzZWxlY3QiLCJfY29yZSIsIl9kZWJvdW5jZSIsIl9tYXBQb3BvdmVyIiwiX21hcENvbnRyb2wiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfZWRpdG9yIiwiX2xheWVycyIsIl91dGlscyIsIl9zdHlsZXMiLCJfY29uc3RhbnRzIiwiX2RuZExheWVySXRlbXMiLCJfbWFwVmlld1N0YXRlQ29udGV4dCIsIl9lcnJvckJvdW5kYXJ5IiwiX2xvY2FsaXphdGlvbiIsIl9jb3JlMiIsIl9yZWR1Y2VycyIsIl9sb2FkaW5nSW5kaWNhdG9yIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUiLCJERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSIsIk1BUF9TVFlMRSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwicG9pbnRlckV2ZW50cyIsIkxPQ0FMRV9DT0RFU19BUlJBWSIsIkxPQ0FMRV9DT0RFUyIsIlN0eWxlZE1hcCIsInN0eWxlZCIsIlN0eWxlZE1hcENvbnRhaW5lciIsIl9yZWYiLCJfcmVmJCRtaXhCbGVuZE1vZGUiLCIkbWl4QmxlbmRNb2RlIiwiJG1hcExpYkNzc0NsYXNzIiwiY29uY2F0IiwiTUFQQk9YR0xfU1RZTEVfVVBEQVRFIiwiTUFQQk9YR0xfUkVOREVSIiwibm9wIiwiTWFwTGliTG9nbyIsIl9yZWYyIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtYXJnaW5MZWZ0IiwibWFwTGliQ3NzQ2xhc3MiLCJ0YXJnZXQiLCJyZWwiLCJocmVmIiwibWFwTGliVXJsIiwibWFwTGliTmFtZSIsIlN0eWxlZERyb3BwYWJsZSIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJpc092ZXIiLCJ0aGVtZSIsImRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJpc1NwbGl0U2VsZWN0b3IiLCJleHBvcnRzIiwidmlzU3RhdGUiLCJzcGxpdE1hcHMiLCJEcm9wcGFibGUiLCJfcmVmMyIsImNvbnRhaW5lcklkIiwiX3VzZURyb3BwYWJsZSIsInVzZURyb3BwYWJsZSIsImlkIiwiZGF0YSIsInR5cGUiLCJEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFIiwiaW5kZXgiLCJkaXNhYmxlZCIsInNldE5vZGVSZWYiLCJyZWYiLCJTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyIiwiaXNQYWxtIiwibGFiZWxDb2xvciIsIkRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfcmVmNCIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJGcmFnbWVudCIsIm1hcCIsImRzIiwiaWR4IiwiX2V4dGVuZHMyIiwidXJsIiwia2V5IiwidGl0bGUiLCJBdHRyaWJ1dGlvbiIsIl9yZWY1IiwiX3JlZjUkc2hvd0Jhc2VNYXBMaWJMIiwic2hvd0Jhc2VNYXBMaWJMb2dvIiwiX3JlZjUkc2hvd09zbUJhc2VtYXBBIiwic2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbiIsImhhc01vYmlsZVdpZHRoIiwiYnJlYWtQb2ludFZhbHVlcyIsIm1lbW9pemVkQ29tcG9uZW50cyIsInVzZU1lbW8iLCJTdHlsZWRBdHRyaWJ1dGlvbiIsIm1hcExpYkF0dHJpYnV0aW9uQ3NzQ2xhc3MiLCJFbmRIb3Jpem9udGFsRmxleGJveCIsIk1hcENvbnRhaW5lckZhY3RvcnkiLCJkZXBzIiwiTWFwUG9wb3ZlckZhY3RvcnkiLCJNYXBDb250cm9sRmFjdG9yeSIsIkVkaXRvckZhY3RvcnkiLCJNYXBQb3BvdmVyIiwiTWFwQ29udHJvbCIsIkVkaXRvciIsIk1hcENvbnRhaW5lciIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJzaG93QmFzZU1hcEF0dHJpYnV0aW9uIiwiY3JlYXRlUmVmIiwiZGltZW5zaW9ucyIsIl90aGlzJHByb3BzIiwicHJpbWFyeSIsIm1hcFN0YXRlQWN0aW9ucyIsInVwZGF0ZU1hcCIsImxheWVycyIsImxheWVyRGF0YSIsImNyZWF0ZVNlbGVjdG9yIiwic3BsaXRNYXBTZWxlY3RvciIsInNwbGl0TWFwSW5kZXhTZWxlY3RvciIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJsYXllck9yZGVyIiwibGF5ZXJzU2VsZWN0b3IiLCJsYXllckRhdGFTZWxlY3RvciIsIm1hcExheWVyc1NlbGVjdG9yIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJmaWx0ZXJzIiwiZmlsdGVyc1NlbGVjdG9yIiwiZiIsIkZJTFRFUl9UWVBFUyIsInBvbHlnb24iLCJlbmFibGVkIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJwb2x5Z29uRmlsdGVyc1NlbGVjdG9yIiwiZmVhdHVyZXNTZWxlY3RvciIsInBvbHlnb25GaWx0ZXJzIiwidmFsdWUiLCJmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yIiwic2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IiLCJjb2xsZWN0aW9uIiwiZmluZEluZGV4IiwiX3Byb3BzJGdlbmVyYXRlTWFwYm94IiwiZ2VuZXJhdGVNYXBib3hMYXllcnMiLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yIiwibGF5ZXIiLCJsYXllcnNUb1JlbmRlciIsImdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QiLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsImJhY2tncm91bmRDb2xvciIsIm1hcFN0eWxlVHlwZVNlbGVjdG9yIiwibWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciIsIk5PX01BUF9JRCIsInJnYlRvSGV4IiwidmlzU3RhdGVBY3Rpb25zIiwib25MYXllckNsaWNrIiwiX2lkeCIsImluZm8iLCJvbkxheWVySG92ZXIiLCJsYXllckNvbmZpZ0NoYW5nZSIsImNvbG9yRG9tYWluIiwiZG9tYWluIiwiYWdncmVnYXRlZEJpbnMiLCJfdGhpcyRwcm9wczIiLCJldmVudCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIndtc0ZlYXR1cmVJbmZvIiwiZmVhdHVyZUluZm8iLCJjb29yZGluYXRlIiwibGF5ZXJJZCIsIl90aGlzJHByb3BzMyIsIl90aGlzJHByb3BzMyRpbmRleCIsIm1hcEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJ1cGRhdGUiLCJwcmV2aW91c0xheWVycyIsIl91cGRhdGVNYXBib3hMYXllcnMiLCJzZXRTdGF0ZSIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwiaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzIiwib25NYXBTdHlsZUxvYWRlZCIsIl9tYXAiLCJtYXBSZWYiLCJnZXRNYXAiLCJfdGhpcyRfbWFwIiwiX3RoaXMkX21hcDIiLCJvZmYiLCJvbiIsIl9vbk1hcGJveFN0eWxlVXBkYXRlIiwib25NYXBSZW5kZXIiLCJnZXRNYXBib3hSZWYiLCJfcmVmNiIsImdsIiwic2V0TGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJlcnJvciIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJsYXllck1lc3NhZ2UiLCJlcnJvck1lc3NhZ2VGdWxsIiwibGFzdFNob3duIiwiX2RlY2tHTEVycm9yc0VsYXBzZWQiLCJEYXRlIiwibm93IiwiVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUiLCJleHRyYUxheWVyTWVzc2FnZSIsIl90b3BNb3N0TGF5ZXIkcHJvcHMiLCJ0b3BNb3N0TGF5ZXIiLCJwYXJlbnQiLCJsYXllclNldElzVmFsaWQiLCJ1aVN0YXRlQWN0aW9ucyIsImFkZE5vdGlmaWNhdGlvbiIsImVycm9yTm90aWZpY2F0aW9uIiwiZGVib3VuY2UiLCJfdGhpcyRjb250ZXh0Iiwidmlld1N0YXRlIiwiY29udGV4dCIsImdldEludGVybmFsVmlld1N0YXRlIiwib25WaWV3UG9ydENoYW5nZSIsIm9uVmlld1N0YXRlQ2hhbmdlIiwidmlld3BvcnQiLCJpc0V4cG9ydCIsInNldEludGVybmFsVmlld1N0YXRlIiwiX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQiLCJvbk1vdXNlTW92ZSIsIm5vcm1hbGl6ZUV2ZW50Iiwic2V0TG9hZGluZ0luZGljYXRvciIsImNoYW5nZSIsInBhbmVsSWQiLCJfdGhpcyRwcm9wczQiLCJ0b2dnbGVNYXBDb250cm9sIiwiTnVtYmVyIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJjb21wb25lbnREaWRNb3VudCIsImN1cnJlbnQiLCJvYnNlcnZlRGltZW5zaW9ucyIsIl9oYW5kbGVSZXNpemUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsIl90aGlzJF9tYXAzIiwiX3RoaXMkX21hcDQiLCJ1bm9ic2VydmVEaW1lbnNpb25zIiwiX29uRGVja0luaXRpYWxpemVkIiwib25EZWNrSW5pdGlhbGl6ZWQiLCJfZGVjayIsIl9pc09LVG9SZW5kZXJFZmZlY3RzIiwidmlld0luZGV4IiwiX3RoaXMkX2RlY2siLCJ2aWV3TWFuYWdlciIsIl92aWV3cG9ydHMiLCJfcmVuZGVyTWFwUG9wb3ZlciIsIl90aGlzJHByb3BzJHZpc1N0YXRlJCIsImhvdmVySW5mbyIsIl90aGlzJHByb3BzNSIsIm1hcFN0YXRlIiwiX3RoaXMkcHJvcHM1JHZpc1N0YXRlIiwiY2xpY2tlZCIsImRhdGFzZXRzIiwiaW50ZXJhY3Rpb25Db25maWciLCJhbmltYXRpb25Db25maWciLCJfdGhpcyRwcm9wczUkdmlzU3RhdGUyIiwibW91c2VQb3MiLCJtb3VzZVBvc2l0aW9uIiwicGlubmVkIiwidG9vbHRpcCIsImxheWVySG92ZXJQcm9wIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJjb21wYXJlTW9kZSIsImNvbmZpZyIsInBpbm5lZFBvc2l0aW9uIiwieCIsInkiLCJsYXllclBpbm5lZFByb3AiLCJnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZSIsImxuZ0xhdCIsIl9nZXRIb3ZlclhZIiwicHJpbWFyeURhdGEiLCJjb21wYXJlVHlwZSIsImNvbW1vblByb3AiLCJvbkNsb3NlIiwiX29uQ2xvc2VNYXBQb3BvdmVyIiwiem9vbSIsImNhbnZhcyIsInVuZGVmaW5lZCIsImZyb3plbiIsImlzQmFzZSIsIm9uU2V0RmVhdHVyZXMiLCJzZXRGZWF0dXJlcyIsInNldFNlbGVjdGVkRmVhdHVyZSIsImZlYXR1cmVDb2xsZWN0aW9uIiwic2NyZWVuQ29vcmQiLCJwcm9qZWN0IiwiX3JlbmRlckRlY2tPdmVybGF5IiwibGF5ZXJzRm9yRGVjayIsIl90aGlzJGNvbnRleHQyIiwiX3RoaXMyIiwib3B0aW9ucyIsInByaW1hcnlNYXAiLCJfdGhpcyRwcm9wczYiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsImRlY2tHbFByb3BzIiwibWFwQ29udHJvbHMiLCJkZWNrUmVuZGVyQ2FsbGJhY2tzIiwiZ2VuZXJhdGVEZWNrR0xMYXllcnMiLCJpc0ludGVyYWN0aXZlIiwiY2hpbGRyZW4iLCJtYXBEcmF3IiwiX3JlZjciLCJfcmVmNyRhY3RpdmUiLCJhY3RpdmUiLCJlZGl0b3JNZW51QWN0aXZlIiwiaXNFZGl0b3JEcmF3aW5nTW9kZSIsIkVkaXRvckxheWVyVXRpbHMiLCJpc0RyYXdpbmdBY3RpdmUiLCJtb2RlIiwiaW50ZXJuYWxWaWV3U3RhdGUiLCJpbnRlcm5hbE1hcFN0YXRlIiwiZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXgiLCJzZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yIiwiZ2VuZXJhdGVEZWNrR0xMYXllcnNNZXRob2QiLCJjb21wdXRlRGVja0xheWVycyIsImRlY2tHbExheWVycyIsImVkaXRvckluZm8iLCJzZWxlY3RlZEZlYXR1cmVJbmRleGVzIiwic2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yIiwiX29uTGF5ZXJIb3ZlciIsIm9uU2V0TGF5ZXJEb21haW4iLCJfb25MYXllclNldERvbWFpbiIsIm9uRmlsdGVyZWRJdGVtc0NoYW5nZSIsIl9vbkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIm9uV01TRmVhdHVyZUluZm8iLCJfb25XTVNGZWF0dXJlSW5mbyIsIm9uUmVkcmF3TmVlZGVkIiwiX29uUmVkcmF3TmVlZGVkIiwiZXh0cmFEZWNrUGFyYW1zIiwiZ2V0VG9vbHRpcCIsImdldEN1cnNvciIsIl9yZWY4IiwiaXNEcmFnZ2luZyIsImVkaXRvckN1cnNvciIsImVmZmVjdHMiLCJjb21wdXRlRGVja0VmZmVjdHMiLCJ2aWV3cyIsIk1hcFZpZXciLCJsZWdhY3lNZXRlclNpemVzIiwiYWxsRGVja0dsUHJvcHMiLCJwaWNraW5nUmFkaXVzIiwiREVGQVVMVF9QSUNLSU5HX1JBRElVUyIsIm9uRGVja1JlbmRlciIsIl9vbk1vdXNlTW92ZURlYm91bmNlZCIsIm9uTG9hZCIsIm9uRGVja0xvYWQiLCJjb250cm9sbGVyIiwiZG91YmxlQ2xpY2tab29tIiwiZHJhZ1JvdGF0ZSIsImluaXRpYWxWaWV3U3RhdGUiLCJvbkJlZm9yZVJlbmRlciIsIl9vbkJlZm9yZVJlbmRlciIsIl9vblZpZXdwb3J0Q2hhbmdlIiwib25Ib3ZlciIsInJlcyIsIl9vbkxheWVySG92ZXJEZWJvdW5jZWQiLCJvbkNsaWNrIiwic3JjRXZlbnQiLCJvbkVycm9yIiwiX29uRGVja0Vycm9yIiwiY29tcCIsImRlY2siLCJvbldlYkdMSW5pdGlhbGl6ZWQiLCJvbkFmdGVyUmVuZGVyIiwib25EZWNrQWZ0ZXJSZW5kZXIiLCJhbnlBY3RpdmVMYXllckxvYWRpbmciLCJhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyIsIl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlIiwibWFwYm94TGF5ZXJzIiwibWFwYm94TGF5ZXJzU2VsZWN0b3IiLCJ1cGRhdGVNYXBib3hMYXllcnMiLCJfcmVuZGVyTWFwYm94T3ZlcmxheXMiLCJpc1N0eWxlTG9hZGVkIiwiX3JlbmRlck1hcCIsIl9tYXBTdHlsZSRtYXBTdHlsZXMiLCJfZ2V0QXBwbGljYXRpb25Db25maWciLCJfdGhpcyRjb250ZXh0MyIsIl9tYXBTdHlsZSRib3R0b21NYXBTdCIsIl90aGlzJHByb3BzNyIsIl90aGlzJHByb3BzNyRNYXBDb21wbyIsIk1hcENvbXBvbmVudCIsIk1hcCIsImxvY2FsZSIsImJvdHRvbU1hcENvbnRhaW5lclByb3BzIiwidG9wTWFwQ29udGFpbmVyUHJvcHMiLCJfdGhpcyRwcm9wczckZGF0YXNldEEiLCJfdGhpcyRwcm9wczckY29udGFpbmUiLCJpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlIiwiYWN0aXZlU2lkZVBhbmVsIiwic2lkZVBhbmVsV2lkdGgiLCJsYXllcnNGb3JEZWNrU2VsZWN0b3IiLCJjdXJyZW50U3R5bGUiLCJtYXBTdHlsZXMiLCJiYXNlTWFwTGlicmFyeU5hbWUiLCJnZXRCYXNlTWFwTGlicmFyeSIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwibWFwUHJvcHMiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJtYXBib3hBY2Nlc3NUb2tlbiIsImFjY2Vzc1Rva2VuIiwibWFwTGliIiwiZ2V0TWFwTGliIiwidHJhbnNmb3JtUmVxdWVzdCIsImhhc0dlb2NvZGVyTGF5ZXIiLCJmaW5kIiwibCIsIkdFT0NPREVSX0xBWUVSX0lEIiwiaXNTcGxpdCIsImJvdHRvbU1hcFN0eWxlIiwiRU1QVFlfTUFQQk9YX1NUWUxFIiwiX3NldE1hcFJlZiIsImF2YWlsYWJsZUxvY2FsZXMiLCJyZWFkT25seSIsInNjYWxlIiwibG9nb0NvbXBvbmVudCIsImdlb2NvZGVyIiwibWFwQ29udHJvbFRvcCIsIm9uVG9nZ2xlUGVyc3BlY3RpdmUiLCJ0b2dnbGVQZXJzcGVjdGl2ZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvblNldEVkaXRvck1vZGUiLCJzZXRFZGl0b3JNb2RlIiwib25TZXRMb2NhbGUiLCJzZXRMb2NhbGUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5Iiwib25MYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzQ29uZmlnQ2hhbmdlIiwibWFwSGVpZ2h0Iiwic2V0TWFwQ29udHJvbFNldHRpbmdzIiwib25EZWxldGVGZWF0dXJlIiwiZGVsZXRlRmVhdHVyZSIsIm9uU2VsZWN0Iiwib25Ub2dnbGVQb2x5Z29uRmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckxheWVyIiwidmlzaWJsZSIsInRvcE1hcFN0eWxlIiwiaXNWaXNpYmxlIiwic3RhdGUiLCJyZW5kZXIiLCJfbWFwU3R5bGUkbWFwU3R5bGVzMiIsIl9nZXRBcHBsaWNhdGlvbkNvbmZpZzIiLCJfdGhpcyRwcm9wczgiLCJtYXBDb250ZW50Iiwic3R5bGVTZWxlY3RvciIsIm9uQ29udGV4dE1lbnUiLCJwcmV2ZW50RGVmYXVsdCIsIm92ZXJsYXlCbGVuZGluZyIsIkNvbXBvbmVudCIsIk1hcFZpZXdTdGF0ZUNvbnRleHQiLCJ3aXRoVGhlbWUiXSwic291cmNlcyI6WyIuLi9zcmMvbWFwLWNvbnRhaW5lci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gbGlicmFyaWVzXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZiwgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge3dpdGhUaGVtZX0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtNYXAsIE1hcFJlZn0gZnJvbSAncmVhY3QtbWFwLWdsJztcbmltcG9ydCB7UGlja0luZm99IGZyb20gJ0BkZWNrLmdsL2NvcmUvbGliL2RlY2snO1xuaW1wb3J0IERlY2tHTCBmcm9tICdAZGVjay5nbC9yZWFjdCc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yLCBTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHt1c2VEcm9wcGFibGV9IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5cbmltcG9ydCB7VmlzU3RhdGVBY3Rpb25zLCBNYXBTdGF0ZUFjdGlvbnMsIFVJU3RhdGVBY3Rpb25zfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgTWFwUG9wb3ZlckZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXBvcG92ZXInO1xuaW1wb3J0IE1hcENvbnRyb2xGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1jb250cm9sJztcbmltcG9ydCB7XG4gIFN0eWxlZE1hcENvbnRhaW5lcixcbiAgU3R5bGVkQXR0cmlidXRpb24sXG4gIEVuZEhvcml6b250YWxGbGV4Ym94XG59IGZyb20gJy4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IEVkaXRvckZhY3RvcnkgZnJvbSAnLi9lZGl0b3IvZWRpdG9yJztcblxuLy8gdXRpbHNcbmltcG9ydCB7XG4gIGdlbmVyYXRlTWFwYm94TGF5ZXJzLFxuICB1cGRhdGVNYXBib3hMYXllcnMsXG4gIExheWVyQmFzZUNvbmZpZyxcbiAgVmlzdWFsQ2hhbm5lbERvbWFpbixcbiAgRWRpdG9yTGF5ZXJVdGlscyxcbiAgQWdncmVnYXRlZEJpblxufSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBEYXRhc2V0QXR0cmlidXRpb24sXG4gIE1hcFN0YXRlLFxuICBNYXBDb250cm9scyxcbiAgVmlld3BvcnQsXG4gIFNwbGl0TWFwLFxuICBTcGxpdE1hcExheWVyc1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBzZXRMYXllckJsZW5kaW5nLFxuICBpc1N0eWxlVXNpbmdNYXBib3hUaWxlcyxcbiAgaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzLFxuICBnZXRCYXNlTWFwTGlicmFyeSxcbiAgQmFzZU1hcExpYnJhcnlDb25maWcsXG4gIHRyYW5zZm9ybVJlcXVlc3QsXG4gIG9ic2VydmVEaW1lbnNpb25zLFxuICB1bm9ic2VydmVEaW1lbnNpb25zLFxuICBoYXNNb2JpbGVXaWR0aCxcbiAgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyxcbiAgb25WaWV3UG9ydENoYW5nZSxcbiAgZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUsXG4gIG5vcm1hbGl6ZUV2ZW50LFxuICByZ2JUb0hleCxcbiAgY29tcHV0ZURlY2tFZmZlY3RzLFxuICBnZXRBcHBsaWNhdGlvbkNvbmZpZyxcbiAgR2V0TWFwUmVmXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHticmVha1BvaW50VmFsdWVzfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5cbi8vIGRlZmF1bHQtc2V0dGluZ3NcbmltcG9ydCB7XG4gIEZJTFRFUl9UWVBFUyxcbiAgR0VPQ09ERVJfTEFZRVJfSUQsXG4gIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FLFxuICBERUZBVUxUX1BJQ0tJTkdfUkFESVVTLFxuICBOT19NQVBfSUQsXG4gIEVNUFRZX01BUEJPWF9TVFlMRVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5cbmltcG9ydCB7RFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRX0gZnJvbSAnLi9jb21tb24vZG5kLWxheWVyLWl0ZW1zJztcbi8vIENvbnRleHRzXG5pbXBvcnQge01hcFZpZXdTdGF0ZUNvbnRleHR9IGZyb20gJy4vbWFwLXZpZXctc3RhdGUtY29udGV4dCc7XG5cbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJy4vY29tbW9uL2Vycm9yLWJvdW5kYXJ5JztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge01hcFZpZXd9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtcbiAgTWFwU3R5bGUsXG4gIGFyZUFueURlY2tMYXllcnNMb2FkaW5nLFxuICBjb21wdXRlRGVja0xheWVycyxcbiAgZ2V0TGF5ZXJIb3ZlclByb3AsXG4gIExheWVySG92ZXJQcm9wLFxuICBwcmVwYXJlTGF5ZXJzRm9yRGVjayxcbiAgcHJlcGFyZUxheWVyc1RvUmVuZGVyLFxuICBMYXllcnNUb1JlbmRlclxufSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbmltcG9ydCB7VmlzU3RhdGV9IGZyb20gJ0BrZXBsZXIuZ2wvc2NoZW1hcyc7XG5cbmltcG9ydCBMb2FkaW5nSW5kaWNhdG9yIGZyb20gJy4vbG9hZGluZy1pbmRpY2F0b3InO1xuXG4vLyBEZWJvdW5jZSB0aGUgcHJvcGFnYXRpb24gb2Ygdmlld3BvcnQgY2hhbmdlIGFuZCBtb3VzZSBtb3ZlcyB0byByZWR1eCBzdG9yZS5cbi8vIFRoaXMgaXMgdG8gYXZvaWQgdG9vIG1hbnkgcmVuZGVycyBvZiBvdGhlciBjb21wb25lbnRzIHdoZW4gdGhlIG1hcCBpc1xuLy8gYmVpbmcgcGFubmVkL3pvb21lZCAobGVhZGluZyB0byBsYWdneSBiYXNlbWFwL2RlY2sgc3luY2luZykuXG5jb25zdCBERUJPVU5DRV9WSUVXUE9SVF9QUk9QQUdBVEUgPSAxMDtcbmNvbnN0IERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFID0gMTA7XG5cbi8vIEhvdyBsb25nIHNob3VsZCB3ZSB3YWl0IGJldHdlZW4gbGF5ZXIgbG9hZGluZyBzdGF0ZSBjaGFuZ2VzIGJlZm9yZSB0cmlnZ2VyaW5nIGEgVUkgdXBkYXRlXG5jb25zdCBERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSA9IDEwMDtcblxuY29uc3QgTUFQX1NUWUxFOiB7W2tleTogc3RyaW5nXTogUmVhY3QuQ1NTUHJvcGVydGllc30gPSB7XG4gIGNvbnRhaW5lcjoge1xuICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJSdcbiAgfSxcbiAgdG9wOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnXG4gIH1cbn07XG5cbmNvbnN0IExPQ0FMRV9DT0RFU19BUlJBWSA9IE9iamVjdC5rZXlzKExPQ0FMRV9DT0RFUyk7XG5cbmludGVyZmFjZSBTdHlsZWRNYXBDb250YWluZXJQcm9wcyB7XG4gICRtaXhCbGVuZE1vZGU/OiBzdHJpbmc7XG4gICRtYXBMaWJDc3NDbGFzczogc3RyaW5nO1xufVxuXG5jb25zdCBTdHlsZWRNYXAgPSBzdHlsZWQoU3R5bGVkTWFwQ29udGFpbmVyKTxTdHlsZWRNYXBDb250YWluZXJQcm9wcz4oXG4gICh7JG1peEJsZW5kTW9kZSA9ICdub3JtYWwnLCAkbWFwTGliQ3NzQ2xhc3N9KSA9PiBgXG4gICNkZWZhdWx0LWRlY2tnbC1vdmVybGF5IHtcbiAgICBtaXgtYmxlbmQtbW9kZTogJHskbWl4QmxlbmRNb2RlfTtcbiAgfTtcbiAgKlskeyRtYXBMaWJDc3NDbGFzc30tY2hpbGRyZW5dIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIH1cbmBcbik7XG5cbmNvbnN0IE1BUEJPWEdMX1NUWUxFX1VQREFURSA9ICdzdHlsZS5sb2FkJztcbmNvbnN0IE1BUEJPWEdMX1JFTkRFUiA9ICdyZW5kZXInO1xuY29uc3Qgbm9wID0gKCkgPT4ge1xuICByZXR1cm47XG59O1xuXG50eXBlIE1hcExpYkxvZ29Qcm9wcyA9IHtcbiAgYmFzZU1hcExpYnJhcnlDb25maWc6IEJhc2VNYXBMaWJyYXJ5Q29uZmlnO1xufTtcblxuY29uc3QgTWFwTGliTG9nbyA9ICh7YmFzZU1hcExpYnJhcnlDb25maWd9OiBNYXBMaWJMb2dvUHJvcHMpID0+IChcbiAgPGRpdiBjbGFzc05hbWU9XCJhdHRyaXRpb24tbG9nb1wiPlxuICAgIEJhc2VtYXAgYnk6XG4gICAgPGFcbiAgICAgIHN0eWxlPXt7bWFyZ2luTGVmdDogJzVweCd9fVxuICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc30tY3RybC1sb2dvYH1cbiAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgIGhyZWY9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYlVybH1cbiAgICAgIGFyaWEtbGFiZWw9e2Ake2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYk5hbWV9IGxvZ29gfVxuICAgIC8+XG4gIDwvZGl2PlxuKTtcblxuaW50ZXJmYWNlIFN0eWxlZERyb3BwYWJsZVByb3BzIHtcbiAgaXNPdmVyOiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWREcm9wcGFibGUgPSBzdHlsZWQuZGl2PFN0eWxlZERyb3BwYWJsZVByb3BzPmBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuaXNPdmVyID8gcHJvcHMudGhlbWUuZG5kT3ZlckJhY2tncm91bmRDb2xvciA6ICdub25lJyl9O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAxO1xuYDtcblxuZXhwb3J0IGNvbnN0IGlzU3BsaXRTZWxlY3RvciA9IHByb3BzID0+XG4gIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcyAmJiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMTtcblxuZXhwb3J0IGNvbnN0IERyb3BwYWJsZSA9ICh7Y29udGFpbmVySWR9KSA9PiB7XG4gIGNvbnN0IHtpc092ZXIsIHNldE5vZGVSZWZ9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZDogY29udGFpbmVySWQsXG4gICAgZGF0YToge3R5cGU6IERST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEUsIGluZGV4OiBjb250YWluZXJJZH0sXG4gICAgZGlzYWJsZWQ6ICFjb250YWluZXJJZFxuICB9KTtcblxuICByZXR1cm4gPFN0eWxlZERyb3BwYWJsZSByZWY9e3NldE5vZGVSZWZ9IGlzT3Zlcj17aXNPdmVyfSAvPjtcbn07XG5cbmludGVyZmFjZSBTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyUHJvcHMge1xuICBpc1BhbG06IGJvb2xlYW47XG59XG5cbmNvbnN0IFN0eWxlZERhdGFzZXRBdHRyaWJ1dGlvbnNDb250YWluZXIgPSBzdHlsZWQuZGl2PFN0eWxlZERhdGFzZXRBdHRyaWJ1dGlvbnNDb250YWluZXJQcm9wcz5gXG4gIG1heC13aWR0aDogJHtwcm9wcyA9PiAocHJvcHMuaXNQYWxtID8gJzIwMHB4JyA6ICczMDBweCcpfTtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxhYmVsQ29sb3J9O1xuICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgbWFyZ2luLWJvdHRvbTogMXB4O1xuICBsaW5lLWhlaWdodDogJHtwcm9wcyA9PiAocHJvcHMuaXNQYWxtID8gJzFlbScgOiAnMS40ZW0nKX07XG5cbiAgJjpob3ZlciB7XG4gICAgd2hpdGUtc3BhY2U6IGluaGVyaXQ7XG4gIH1cbmA7XG5cbmNvbnN0IERhdGFzZXRBdHRyaWJ1dGlvbnMgPSAoe1xuICBkYXRhc2V0QXR0cmlidXRpb25zLFxuICBpc1BhbG1cbn06IHtcbiAgZGF0YXNldEF0dHJpYnV0aW9uczogRGF0YXNldEF0dHJpYnV0aW9uW107XG4gIGlzUGFsbTogYm9vbGVhbjtcbn0pID0+IChcbiAgPD5cbiAgICB7ZGF0YXNldEF0dHJpYnV0aW9ucz8ubGVuZ3RoID8gKFxuICAgICAgPFN0eWxlZERhdGFzZXRBdHRyaWJ1dGlvbnNDb250YWluZXIgaXNQYWxtPXtpc1BhbG19PlxuICAgICAgICB7ZGF0YXNldEF0dHJpYnV0aW9ucy5tYXAoKGRzLCBpZHgpID0+IChcbiAgICAgICAgICA8YVxuICAgICAgICAgICAgey4uLihkcy51cmwgPyB7aHJlZjogZHMudXJsfSA6IG51bGwpfVxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAga2V5PXtgJHtkcy50aXRsZX1fJHtpZHh9YH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZHMudGl0bGV9XG4gICAgICAgICAgICB7aWR4ICE9PSBkYXRhc2V0QXR0cmlidXRpb25zLmxlbmd0aCAtIDEgPyAnLCAnIDogbnVsbH1cbiAgICAgICAgICA8L2E+XG4gICAgICAgICkpfVxuICAgICAgPC9TdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyPlxuICAgICkgOiBudWxsfVxuICA8Lz5cbik7XG5cbnR5cGUgQXR0cmlidXRpb25Qcm9wcyA9IHtcbiAgc2hvd0Jhc2VNYXBMaWJMb2dvOiBib29sZWFuO1xuICBzaG93T3NtQmFzZW1hcEF0dHJpYnV0aW9uOiBib29sZWFuO1xuICBkYXRhc2V0QXR0cmlidXRpb25zOiBEYXRhc2V0QXR0cmlidXRpb25bXTtcbiAgYmFzZU1hcExpYnJhcnlDb25maWc6IEJhc2VNYXBMaWJyYXJ5Q29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0aW9uOiBSZWFjdC5GQzxBdHRyaWJ1dGlvblByb3BzPiA9ICh7XG4gIHNob3dCYXNlTWFwTGliTG9nbyA9IHRydWUsXG4gIHNob3dPc21CYXNlbWFwQXR0cmlidXRpb24gPSBmYWxzZSxcbiAgZGF0YXNldEF0dHJpYnV0aW9ucyxcbiAgYmFzZU1hcExpYnJhcnlDb25maWdcbn06IEF0dHJpYnV0aW9uUHJvcHMpID0+IHtcbiAgY29uc3QgaXNQYWxtID0gaGFzTW9iaWxlV2lkdGgoYnJlYWtQb2ludFZhbHVlcyk7XG5cbiAgY29uc3QgbWVtb2l6ZWRDb21wb25lbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzaG93QmFzZU1hcExpYkxvZ28pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRBdHRyaWJ1dGlvblxuICAgICAgICAgIG1hcExpYkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc31cbiAgICAgICAgICBtYXBMaWJBdHRyaWJ1dGlvbkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJBdHRyaWJ1dGlvbkNzc0NsYXNzfVxuICAgICAgICA+XG4gICAgICAgICAgPEVuZEhvcml6b250YWxGbGV4Ym94PlxuICAgICAgICAgICAgPERhdGFzZXRBdHRyaWJ1dGlvbnMgZGF0YXNldEF0dHJpYnV0aW9ucz17ZGF0YXNldEF0dHJpYnV0aW9uc30gaXNQYWxtPXtpc1BhbG19IC8+XG4gICAgICAgICAgICB7c2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbiA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhdHRyaXRpb24tbGlua1wiPlxuICAgICAgICAgICAgICAgIHtkYXRhc2V0QXR0cmlidXRpb25zPy5sZW5ndGggPyA8c3BhbiBjbGFzc05hbWU9XCJwaXBlLXNlcGFyYXRvclwiPnw8L3NwYW4+IDogbnVsbH1cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICDCqSBPcGVuU3RyZWV0TWFwXG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvRW5kSG9yaXpvbnRhbEZsZXhib3g+XG4gICAgICAgIDwvU3R5bGVkQXR0cmlidXRpb24+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkQXR0cmlidXRpb25cbiAgICAgICAgbWFwTGliQ3NzQ2xhc3M9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYkNzc0NsYXNzfVxuICAgICAgICBtYXBMaWJBdHRyaWJ1dGlvbkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJBdHRyaWJ1dGlvbkNzc0NsYXNzfVxuICAgICAgPlxuICAgICAgICA8RW5kSG9yaXpvbnRhbEZsZXhib3g+XG4gICAgICAgICAgPERhdGFzZXRBdHRyaWJ1dGlvbnMgZGF0YXNldEF0dHJpYnV0aW9ucz17ZGF0YXNldEF0dHJpYnV0aW9uc30gaXNQYWxtPXtpc1BhbG19IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhdHRyaXRpb24tbGlua1wiPlxuICAgICAgICAgICAge2RhdGFzZXRBdHRyaWJ1dGlvbnM/Lmxlbmd0aCA/IDxzcGFuIGNsYXNzTmFtZT1cInBpcGUtc2VwYXJhdG9yXCI+fDwvc3Bhbj4gOiBudWxsfVxuICAgICAgICAgICAge2lzUGFsbSA/IDxNYXBMaWJMb2dvIGJhc2VNYXBMaWJyYXJ5Q29uZmlnPXtiYXNlTWFwTGlicmFyeUNvbmZpZ30gLz4gOiBudWxsfVxuICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8va2VwbGVyLmdsL3BvbGljeS9cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgICAgICAgIMKpIGtlcGxlci5nbCB8eycgJ31cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIHshaXNQYWxtID8gPE1hcExpYkxvZ28gYmFzZU1hcExpYnJhcnlDb25maWc9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnfSAvPiA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvRW5kSG9yaXpvbnRhbEZsZXhib3g+XG4gICAgICA8L1N0eWxlZEF0dHJpYnV0aW9uPlxuICAgICk7XG4gIH0sIFtcbiAgICBzaG93QmFzZU1hcExpYkxvZ28sXG4gICAgc2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbixcbiAgICBkYXRhc2V0QXR0cmlidXRpb25zLFxuICAgIGlzUGFsbSxcbiAgICBiYXNlTWFwTGlicmFyeUNvbmZpZ1xuICBdKTtcblxuICByZXR1cm4gbWVtb2l6ZWRDb21wb25lbnRzO1xufTtcblxuTWFwQ29udGFpbmVyRmFjdG9yeS5kZXBzID0gW01hcFBvcG92ZXJGYWN0b3J5LCBNYXBDb250cm9sRmFjdG9yeSwgRWRpdG9yRmFjdG9yeV07XG5cbnR5cGUgTWFwYm94U3R5bGUgPSBzdHJpbmcgfCBvYmplY3QgfCB1bmRlZmluZWQ7XG50eXBlIFByb3BTZWxlY3RvcjxSPiA9IFNlbGVjdG9yPE1hcENvbnRhaW5lclByb3BzLCBSPjtcblxuZXhwb3J0IGludGVyZmFjZSBNYXBDb250YWluZXJQcm9wcyB7XG4gIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbiAgbWFwU3RhdGU6IE1hcFN0YXRlO1xuICBtYXBDb250cm9sczogTWFwQ29udHJvbHM7XG4gIG1hcFN0eWxlOiB7Ym90dG9tTWFwU3R5bGU/OiBNYXBib3hTdHlsZTsgdG9wTWFwU3R5bGU/OiBNYXBib3hTdHlsZX0gJiBNYXBTdHlsZTtcbiAgbWFwYm94QXBpQWNjZXNzVG9rZW46IHN0cmluZztcbiAgbWFwYm94QXBpVXJsOiBzdHJpbmc7XG4gIHZpc1N0YXRlQWN0aW9uczogdHlwZW9mIFZpc1N0YXRlQWN0aW9ucztcbiAgbWFwU3RhdGVBY3Rpb25zOiB0eXBlb2YgTWFwU3RhdGVBY3Rpb25zO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuXG4gIC8vIG9wdGlvbmFsXG4gIHByaW1hcnk/OiBib29sZWFuOyAvLyBwcmltYXJ5IG9uZSB3aWxsIGJlIHJlcG9ydGluZyBpdHMgc2l6ZSB0byBhcHBTdGF0ZVxuICByZWFkT25seT86IGJvb2xlYW47XG4gIGlzRXhwb3J0PzogYm9vbGVhbjtcbiAgLy8gb25NYXBTdHlsZUxvYWRlZD86IChtYXA6IG1hcGxpYnJlZ2wuTWFwIHwgUmV0dXJuVHlwZTxNYXBSZWZbJ2dldE1hcCddPiB8IG51bGwpID0+IHZvaWQ7XG4gIG9uTWFwU3R5bGVMb2FkZWQ/OiAobWFwOiBHZXRNYXBSZWYgfCBudWxsKSA9PiB2b2lkO1xuICBvbk1hcFJlbmRlcj86IChtYXA6IEdldE1hcFJlZiB8IG51bGwpID0+IHZvaWQ7XG4gIGdldE1hcGJveFJlZj86IChtYXBib3g/OiBNYXBSZWYgfCBudWxsLCBpbmRleD86IG51bWJlcikgPT4gdm9pZDtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIGRlbGV0ZU1hcExhYmVscz86IChjb250YWluZXJJZDogc3RyaW5nLCBsYXllcklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNvbnRhaW5lcklkPzogbnVtYmVyO1xuXG4gIGlzTG9hZGluZ0luZGljYXRvclZpc2libGU/OiBib29sZWFuO1xuICBhY3RpdmVTaWRlUGFuZWw6IHN0cmluZyB8IG51bGw7XG4gIHNpZGVQYW5lbFdpZHRoPzogbnVtYmVyO1xuXG4gIGxvY2FsZT86IGFueTtcbiAgdGhlbWU/OiBhbnk7XG4gIGVkaXRvcj86IGFueTtcbiAgTWFwQ29tcG9uZW50PzogdHlwZW9mIE1hcDtcbiAgZGVja0dsUHJvcHM/OiBhbnk7XG4gIG9uRGVja0luaXRpYWxpemVkPzogKGE6IGFueSwgYjogYW55KSA9PiB2b2lkO1xuICBvblZpZXdTdGF0ZUNoYW5nZT86ICh2aWV3cG9ydDogVmlld3BvcnQpID0+IHZvaWQ7XG5cbiAgdG9wTWFwQ29udGFpbmVyUHJvcHM6IGFueTtcbiAgYm90dG9tTWFwQ29udGFpbmVyUHJvcHM6IGFueTtcbiAgdHJhbnNmb3JtUmVxdWVzdD86ICh1cmw6IHN0cmluZywgcmVzb3VyY2VUeXBlPzogc3RyaW5nKSA9PiB7dXJsOiBzdHJpbmd9O1xuXG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnM/OiBEYXRhc2V0QXR0cmlidXRpb25bXTtcblxuICBnZW5lcmF0ZU1hcGJveExheWVycz86IHR5cGVvZiBnZW5lcmF0ZU1hcGJveExheWVycztcbiAgZ2VuZXJhdGVEZWNrR0xMYXllcnM/OiB0eXBlb2YgY29tcHV0ZURlY2tMYXllcnM7XG5cbiAgb25Nb3VzZU1vdmU/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQgJiB7bG5nTGF0PzogW251bWJlciwgbnVtYmVyXX0pID0+IHZvaWQ7XG5cbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGRlY2tSZW5kZXJDYWxsYmFja3M/OiB7XG4gICAgb25EZWNrTG9hZD86ICgpID0+IHZvaWQ7XG4gICAgb25EZWNrUmVuZGVyPzogKGRlY2tQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbDtcbiAgICBvbkRlY2tBZnRlclJlbmRlcj86IChkZWNrUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBhbnk7XG4gIH07XG5cbiAgLy8gT3B0aW9uYWw6IG92ZXJyaWRlIGxlZ2VuZCBoZWFkZXIgbG9nbyBpbiBtYXAgY29udHJvbHMgKHVzZWQgYnkgaW1hZ2UgZXhwb3J0KVxuICBsb2dvQ29tcG9uZW50PzogUmVhY3QuRkMgfCBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1hcENvbnRhaW5lckZhY3RvcnkoXG4gIE1hcFBvcG92ZXI6IFJldHVyblR5cGU8dHlwZW9mIE1hcFBvcG92ZXJGYWN0b3J5PixcbiAgTWFwQ29udHJvbDogUmV0dXJuVHlwZTx0eXBlb2YgTWFwQ29udHJvbEZhY3Rvcnk+LFxuICBFZGl0b3I6IFJldHVyblR5cGU8dHlwZW9mIEVkaXRvckZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPE1hcENvbnRhaW5lclByb3BzPiB7XG4gIGNsYXNzIE1hcENvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudDxNYXBDb250YWluZXJQcm9wcz4ge1xuICAgIGRpc3BsYXlOYW1lID0gJ01hcENvbnRhaW5lcic7XG5cbiAgICBwcml2YXRlIGFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgc3RhdGljIGNvbnRleHRUeXBlID0gTWFwVmlld1N0YXRlQ29udGV4dDtcblxuICAgIGRlY2xhcmUgY29udGV4dDogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE1hcFZpZXdTdGF0ZUNvbnRleHQ+O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIE1hcENvbXBvbmVudDogTWFwLFxuICAgICAgZGVja0dsUHJvcHM6IHt9LFxuICAgICAgaW5kZXg6IDAsXG4gICAgICBwcmltYXJ5OiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICBzdXBlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgc3RhdGUgPSB7XG4gICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgYXR0cmlidXRpb24gc2hvdWxkIGJlIHZpc2libGUgYmFzZWQgdGhlIHJlc3VsdCBvZiBsb2FkaW5nIHRoZSBtYXAgc3R5bGVcbiAgICAgIHNob3dCYXNlTWFwQXR0cmlidXRpb246IHRydWVcbiAgICB9O1xuXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAoIXRoaXMuX3JlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50LCB0aGlzLl9oYW5kbGVSZXNpemUpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgLy8gdW5iaW5kIG1hcGJveGdsIGV2ZW50IGxpc3RlbmVyXG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcD8ub2ZmKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgbm9wKTtcbiAgICAgICAgdGhpcy5fbWFwPy5vZmYoTUFQQk9YR0xfUkVOREVSLCBub3ApO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9yZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1bm9ic2VydmVEaW1lbnNpb25zKHRoaXMuX3JlZi5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBfZGVjazogYW55ID0gbnVsbDtcbiAgICBfbWFwOiBHZXRNYXBSZWYgfCBudWxsID0gbnVsbDtcbiAgICBfcmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICAgIF9kZWNrR0xFcnJvcnNFbGFwc2VkOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9ID0ge307XG5cbiAgICBwcmV2aW91c0xheWVycyA9IHtcbiAgICAgIC8vIFtsYXllcnMuaWRdOiBtYXBib3hMYXllckNvbmZpZ1xuICAgIH07XG5cbiAgICBfaGFuZGxlUmVzaXplID0gZGltZW5zaW9ucyA9PiB7XG4gICAgICBjb25zdCB7cHJpbWFyeSwgaW5kZXh9ID0gdGhpcy5wcm9wcztcbiAgICAgIGlmIChwcmltYXJ5KSB7XG4gICAgICAgIGNvbnN0IHttYXBTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKGRpbWVuc2lvbnMgJiYgZGltZW5zaW9ucy53aWR0aCA+IDAgJiYgZGltZW5zaW9ucy5oZWlnaHQgPiAwKSB7XG4gICAgICAgICAgbWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcChkaW1lbnNpb25zLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGF5ZXJzU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJzJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJzO1xuICAgIGxheWVyRGF0YVNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVycyddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVyRGF0YTtcbiAgICBzcGxpdE1hcFNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8U3BsaXRNYXBbXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHM7XG4gICAgc3BsaXRNYXBJbmRleFNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8bnVtYmVyIHwgdW5kZWZpbmVkPiA9IHByb3BzID0+IHByb3BzLmluZGV4O1xuICAgIG1hcExheWVyc1NlbGVjdG9yOiBQcm9wU2VsZWN0b3I8U3BsaXRNYXBMYXllcnMgfCBudWxsIHwgdW5kZWZpbmVkPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5zcGxpdE1hcFNlbGVjdG9yLFxuICAgICAgdGhpcy5zcGxpdE1hcEluZGV4U2VsZWN0b3IsXG4gICAgICBnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzXG4gICAgKTtcbiAgICBsYXllck9yZGVyU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJPcmRlciddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVyT3JkZXI7XG4gICAgbGF5ZXJzVG9SZW5kZXJTZWxlY3RvcjogUHJvcFNlbGVjdG9yPExheWVyc1RvUmVuZGVyPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICB0aGlzLm1hcExheWVyc1NlbGVjdG9yLFxuICAgICAgcHJlcGFyZUxheWVyc1RvUmVuZGVyXG4gICAgKTtcbiAgICBsYXllcnNGb3JEZWNrU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgcHJlcGFyZUxheWVyc0ZvckRlY2tcbiAgICApO1xuICAgIGZpbHRlcnNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmZpbHRlcnM7XG4gICAgcG9seWdvbkZpbHRlcnNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKHRoaXMuZmlsdGVyc1NlbGVjdG9yLCBmaWx0ZXJzID0+XG4gICAgICBmaWx0ZXJzLmZpbHRlcihmID0+IGYudHlwZSA9PT0gRklMVEVSX1RZUEVTLnBvbHlnb24gJiYgZi5lbmFibGVkICE9PSBmYWxzZSlcbiAgICApO1xuICAgIGZlYXR1cmVzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5lZGl0b3IuZmVhdHVyZXM7XG4gICAgc2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5lZGl0b3Iuc2VsZWN0ZWRGZWF0dXJlO1xuICAgIGZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMucG9seWdvbkZpbHRlcnNTZWxlY3RvcixcbiAgICAgIHRoaXMuZmVhdHVyZXNTZWxlY3RvcixcbiAgICAgIChwb2x5Z29uRmlsdGVycywgZmVhdHVyZXMpID0+ICh7XG4gICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgIGZlYXR1cmVzOiBmZWF0dXJlcy5jb25jYXQocG9seWdvbkZpbHRlcnMubWFwKGYgPT4gZi52YWx1ZSkpXG4gICAgICB9KVxuICAgICk7XG4gICAgLy8gQHRzLWlnbm9yZSAtIE5vIG92ZXJsb2FkIG1hdGNoZXMgdGhpcyBjYWxsXG4gICAgc2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yLFxuICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVTZWxlY3RvcixcbiAgICAgIChjb2xsZWN0aW9uLCBzZWxlY3RlZEZlYXR1cmUpID0+XG4gICAgICAgIGNvbGxlY3Rpb24uZmVhdHVyZXMuZmluZEluZGV4KGYgPT4gZi5pZCA9PT0gc2VsZWN0ZWRGZWF0dXJlPy5pZClcbiAgICApO1xuICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4QXJyYXlTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlLFxuICAgICAgdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gW10gOiBbdmFsdWVdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5nZW5lcmF0ZU1hcGJveExheWVycyA/PyBnZW5lcmF0ZU1hcGJveExheWVycztcblxuICAgIG1hcGJveExheWVyc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJPcmRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yLFxuICAgICAgdGhpcy5nZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kU2VsZWN0b3IsXG4gICAgICAobGF5ZXIsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgbGF5ZXJzVG9SZW5kZXIsIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QpID0+XG4gICAgICAgIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QobGF5ZXIsIGxheWVyRGF0YSwgbGF5ZXJPcmRlciwgbGF5ZXJzVG9SZW5kZXIpXG4gICAgKTtcblxuICAgIC8vIG1lcmdlIGluIGEgYmFja2dyb3VuZC1jb2xvciBzdHlsZSBpZiB0aGUgYmFzZW1hcCBjaG9pY2UgaXMgTk9fTUFQX0lEXG4gICAgLy8gdXNlZCBieSA8U3R5bGVkTWFwPiBpbmxpbmUgc3R5bGUgcHJvcFxuICAgIG1hcFN0eWxlVHlwZVNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlO1xuICAgIG1hcFN0eWxlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBTdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgc3R5bGVTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5tYXBTdHlsZVR5cGVTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvcixcbiAgICAgIChzdHlsZVR5cGUsIGJhY2tncm91bmRDb2xvcikgPT4gKHtcbiAgICAgICAgLi4uTUFQX1NUWUxFLmNvbnRhaW5lcixcbiAgICAgICAgLi4uKHN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEID8ge2JhY2tncm91bmRDb2xvcjogcmdiVG9IZXgoYmFja2dyb3VuZENvbG9yKX0gOiB7fSlcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8qIGNvbXBvbmVudCBwcml2YXRlIGZ1bmN0aW9ucyAqL1xuICAgIF9vbkNsb3NlTWFwUG9wb3ZlciA9ICgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJDbGljayhudWxsKTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJIb3ZlciA9IChfaWR4OiBudW1iZXIsIGluZm86IFBpY2tJbmZvPGFueT4gfCBudWxsKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVySG92ZXIoaW5mbywgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVyU2V0RG9tYWluID0gKFxuICAgICAgaWR4OiBudW1iZXIsXG4gICAgICB2YWx1ZToge2RvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjsgYWdncmVnYXRlZEJpbnM6IEFnZ3JlZ2F0ZWRCaW5bXX1cbiAgICApID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sIHtcbiAgICAgICAgY29sb3JEb21haW46IHZhbHVlLmRvbWFpbixcbiAgICAgICAgYWdncmVnYXRlZEJpbnM6IHZhbHVlLmFnZ3JlZ2F0ZWRCaW5zXG4gICAgICB9IGFzIFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPik7XG4gICAgfTtcblxuICAgIF9vblJlZHJhd05lZWRlZCA9IChfaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIC8vIHVwZGF0ZU1hcFVwZGF0ZXIgYWx3YXlzIHJldHVybnMgYSBuZXcgc3RhdGUgb2JqZWN0IHJlZmVyZW5jZSwgd2hpY2ggdHJpZ2dlcnMgcmUtcmVuZGVyXG4gICAgICBjb25zdCB7bWFwU3RhdGVBY3Rpb25zLCBpbmRleH0gPSB0aGlzLnByb3BzO1xuICAgICAgbWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcCh7fSwgaW5kZXgpO1xuICAgIH07XG5cbiAgICBfb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UgPSAoaWR4LCBldmVudCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMubGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlKHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sIGV2ZW50KTtcbiAgICB9O1xuXG4gICAgX29uV01TRmVhdHVyZUluZm8gPSAoXG4gICAgICBpZHg6IG51bWJlcixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZmVhdHVyZUluZm86IEFycmF5PHtuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmd9PiB8IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGNvb3JkaW5hdGU/OiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbDtcbiAgICAgIH1cbiAgICApID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLndtc0ZlYXR1cmVJbmZvKFxuICAgICAgICB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdLFxuICAgICAgICBkYXRhLmZlYXR1cmVJbmZvLFxuICAgICAgICBkYXRhLmNvb3JkaW5hdGVcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9oYW5kbGVNYXBUb2dnbGVMYXllciA9IGxheWVySWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4OiBtYXBJbmRleCA9IDAsIHZpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKTtcbiAgICB9O1xuXG4gICAgX29uTWFwYm94U3R5bGVVcGRhdGUgPSB1cGRhdGUgPT4ge1xuICAgICAgLy8gZm9yY2UgcmVmcmVzaCBtYXBib3hnbCBsYXllcnNcbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSB7fTtcbiAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuXG4gICAgICBpZiAodXBkYXRlICYmIHVwZGF0ZS5zdHlsZSkge1xuICAgICAgICAvLyBObyBhdHRyaWJ1dGlvbnMgYXJlIG5lZWRlZCBpZiB0aGUgc3R5bGUgZG9lc24ndCByZWZlcmVuY2UgTWFwYm94IHNvdXJjZXNcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2hvd0Jhc2VNYXBBdHRyaWJ1dGlvbjpcbiAgICAgICAgICAgIGlzU3R5bGVVc2luZ01hcGJveFRpbGVzKHVwZGF0ZS5zdHlsZSkgfHwgIWlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyh1cGRhdGUuc3R5bGUpXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBTdHlsZUxvYWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQodGhpcy5fbWFwKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3NldE1hcFJlZiA9IG1hcFJlZiA9PiB7XG4gICAgICAvLyBIYW5kbGUgY2hhbmdlIG9mIHRoZSBtYXAgbGlicmFyeVxuICAgICAgaWYgKHRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgY29uc3QgbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICBpZiAobWFwICYmIHRoaXMuX21hcCAhPT0gbWFwKSB7XG4gICAgICAgICAgdGhpcy5fbWFwPy5vZmYoTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCBub3ApO1xuICAgICAgICAgIHRoaXMuX21hcD8ub2ZmKE1BUEJPWEdMX1JFTkRFUiwgbm9wKTtcbiAgICAgICAgICB0aGlzLl9tYXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fbWFwICYmIG1hcFJlZikge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXBSZWYuZ2V0TWFwKCk7XG4gICAgICAgIC8vIGkgbm90aWNlZCBpbiBjZXJ0YWluIGNvbnRleHQgd2UgZG9uJ3QgYWNjZXNzIHRoZSBhY3R1YWwgbWFwIGVsZW1lbnRcbiAgICAgICAgaWYgKCF0aGlzLl9tYXApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gYmluZCBtYXBib3hnbCBldmVudCBsaXN0ZW5lclxuICAgICAgICB0aGlzLl9tYXAub24oTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCB0aGlzLl9vbk1hcGJveFN0eWxlVXBkYXRlKTtcblxuICAgICAgICB0aGlzLl9tYXAub24oTUFQQk9YR0xfUkVOREVSLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uTWFwUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uTWFwUmVuZGVyKHRoaXMuX21hcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuZ2V0TWFwYm94UmVmKSB7XG4gICAgICAgIC8vIFRoZSBwYXJlbnQgY29tcG9uZW50IGNhbiBnYWluIGFjY2VzcyB0byBvdXIgTWFwYm94R2xNYXAgYnlcbiAgICAgICAgLy8gcHJvdmlkaW5nIHRoaXMgY2FsbGJhY2suIE5vdGUgdGhhdCAnbWFwYm94JyB3aWxsIGJlIG51bGwgd2hlbiB0aGVcbiAgICAgICAgLy8gcmVmIGlzIHVuc2V0IChlLmcuIHdoZW4gYSBzcGxpdCBtYXAgaXMgY2xvc2VkKS5cbiAgICAgICAgdGhpcy5wcm9wcy5nZXRNYXBib3hSZWYobWFwUmVmLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX29uRGVja0luaXRpYWxpemVkKGdsKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5vbkRlY2tJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLnByb3BzLm9uRGVja0luaXRpYWxpemVkKHRoaXMuX2RlY2ssIGdsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAxKSBBbGxvdyBlZmZlY3RzIG9ubHkgZm9yIHRoZSBmaXJzdCB2aWV3LlxuICAgICAqIDIpIFByZXZlbnQgZWZmZWN0OnByZVJlbmRlciBjYWxsIHdpdGhvdXQgdmFsaWQgZ2VuZXJhdGVkIHZpZXdwb3J0cy5cbiAgICAgKiBAcGFyYW0gdmlld0luZGV4IFZpZXcgaW5kZXguXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGVmZmVjdHMgY2FuIGJlIHVzZWQuXG4gICAgICovXG4gICAgX2lzT0tUb1JlbmRlckVmZmVjdHModmlld0luZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIXZpZXdJbmRleCAmJiBCb29sZWFuKHRoaXMuX2RlY2s/LnZpZXdNYW5hZ2VyPy5fdmlld3BvcnRzPy5sZW5ndGgpO1xuICAgIH1cblxuICAgIF9vbkJlZm9yZVJlbmRlciA9ICh7Z2x9KSA9PiB7XG4gICAgICBzZXRMYXllckJsZW5kaW5nKGdsLCB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyQmxlbmRpbmcpO1xuICAgIH07XG5cbiAgICBfb25EZWNrRXJyb3IgPSAoZXJyb3IsIGxheWVyKSA9PiB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvcj8ubWVzc2FnZSB8fCAndW5rbm93bi1lcnJvcic7XG4gICAgICBjb25zdCBsYXllck1lc3NhZ2UgPSBsYXllcj8uaWQgPyBgIGluICR7bGF5ZXIuaWR9IGxheWVyYCA6ICcnO1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlRnVsbCA9XG4gICAgICAgIGVycm9yTWVzc2FnZSA9PT0gJ1dlYkdMIGNvbnRleHQgaXMgbG9zdCdcbiAgICAgICAgICA/ICdZb3VyIEdQVSB3YXMgZGlzY29ubmVjdGVkLiBUaGlzIGNhbiBoYXBwZW4gaWYgeW91ciBjb21wdXRlciBnb2VzIHRvIHNsZWVwLiBJdCBjYW4gYWxzbyBvY2N1ciBmb3Igb3RoZXIgcmVhc29ucywgc3VjaCBhcyBpZiB5b3UgYXJlIHJ1bm5pbmcgdG9vIG1hbnkgR1BVIGFwcGxpY2F0aW9ucy4nXG4gICAgICAgICAgOiBgQW4gZXJyb3IgaW4gZGVjay5nbDogJHtlcnJvck1lc3NhZ2V9JHtsYXllck1lc3NhZ2V9LmA7XG5cbiAgICAgIC8vIFRocm90dGxlIGVycm9yIG5vdGlmaWNhdGlvbnMsIGFzIFJlYWN0IGRvZXNuJ3QgbGlrZSB0b28gbWFueSBzdGF0ZSBjaGFuZ2VzIGZyb20gaGVyZS5cbiAgICAgIGNvbnN0IGxhc3RTaG93biA9IHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbZXJyb3JNZXNzYWdlRnVsbF07XG4gICAgICBpZiAoIWxhc3RTaG93biB8fCBsYXN0U2hvd24gPCBEYXRlLm5vdygpIC0gVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUpIHtcbiAgICAgICAgdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtlcnJvck1lc3NhZ2VGdWxsXSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgLy8gTWFyayBsYXllciBhcyBpbnZhbGlkXG4gICAgICAgIGxldCBleHRyYUxheWVyTWVzc2FnZSA9ICcnO1xuICAgICAgICBjb25zdCB7dmlzU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChsYXllcikge1xuICAgICAgICAgIGxldCB0b3BNb3N0TGF5ZXIgPSBsYXllcjtcbiAgICAgICAgICB3aGlsZSAodG9wTW9zdExheWVyLnBhcmVudCkge1xuICAgICAgICAgICAgdG9wTW9zdExheWVyID0gdG9wTW9zdExheWVyLnBhcmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRvcE1vc3RMYXllci5wcm9wcz8uaWQpIHtcbiAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucy5sYXllclNldElzVmFsaWQodG9wTW9zdExheWVyLCBmYWxzZSk7XG4gICAgICAgICAgICBleHRyYUxheWVyTWVzc2FnZSA9ICdUaGUgbGF5ZXIgaGFzIGJlZW4gZGlzYWJsZWQgYW5kIGhpZ2hsaWdodGVkLic7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBlcnJvciBub3RpZmljYXRpb24gb3IgdXBkYXRlIGV4aXN0aW5nIG9uZSB3aXRoIHNhbWUgaWQuXG4gICAgICAgIC8vIFVwZGF0ZSBpcyByZXF1aXJlZCB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2Ygbm90aWZpY2F0aW9ucyBhcyB0aGV5IHByb2JhYmx5IGFyZSBnb2luZyB0byBcImp1bXBcIiBiYXNlZCBvbiBvcmRlciBvZiBlcnJvcnMuXG4gICAgICAgIGNvbnN0IHt1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICB1aVN0YXRlQWN0aW9ucy5hZGROb3RpZmljYXRpb24oXG4gICAgICAgICAgZXJyb3JOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgbWVzc2FnZTogYCR7ZXJyb3JNZXNzYWdlRnVsbH0gJHtleHRyYUxheWVyTWVzc2FnZX1gLFxuICAgICAgICAgICAgaWQ6IGVycm9yTWVzc2FnZUZ1bGwgLy8gdHJlYXQgdGhlIGVycm9yIG1lc3NhZ2UgYXMgaWRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKiBjb21wb25lbnQgcmVuZGVyIGZ1bmN0aW9ucyAqL1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXBQb3BvdmVyKCkge1xuICAgICAgLy8gdGhpcyBjaGVjayBpcyBmb3IgbGltaXRpbmcgdGhlIGRpc3BsYXkgb2YgdGhlIGA8TWFwUG9wb3Zlcj5gIHRvIHRoZSBgPE1hcENvbnRhaW5lcj5gIHRoZSB1c2VyIGlzIGludGVyYWN0aW5nIHdpdGhcbiAgICAgIC8vIHRoZSBEZWNrR0wgb25Ib3ZlciBldmVudCBoYW5kbGVyIGFkZHMgYSBgbWFwSW5kZXhgIHByb3BlcnR5IHdoaWNoIGlzIGF2YWlsYWJsZSBpbiB0aGUgYGhvdmVySW5mb2Agb2JqZWN0IG9mIGB2aXNTdGF0ZWBcbiAgICAgIGlmICh0aGlzLnByb3BzLmluZGV4ICE9PSB0aGlzLnByb3BzLnZpc1N0YXRlLmhvdmVySW5mbz8ubWFwSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IG1vdmUgdGhpcyBpbnRvIHJlZHVjZXIgc28gaXQgY2FuIGJlIHRlc3RlZFxuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGU6IHtcbiAgICAgICAgICBob3ZlckluZm8sXG4gICAgICAgICAgY2xpY2tlZCxcbiAgICAgICAgICBkYXRhc2V0cyxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgIG1vdXNlUG9zOiB7bW91c2VQb3NpdGlvbiwgY29vcmRpbmF0ZSwgcGlubmVkfVxuICAgICAgICB9XG4gICAgICB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGxheWVyc1RvUmVuZGVyID0gdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBpZiAoIW1vdXNlUG9zaXRpb24gfHwgIWludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxheWVySG92ZXJQcm9wID0gZ2V0TGF5ZXJIb3ZlclByb3Aoe1xuICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICBob3ZlckluZm8sXG4gICAgICAgIGxheWVycyxcbiAgICAgICAgbGF5ZXJzVG9SZW5kZXIsXG4gICAgICAgIGRhdGFzZXRzXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29tcGFyZU1vZGUgPSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZ1xuICAgICAgICA/IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmNvbXBhcmVNb2RlXG4gICAgICAgIDogZmFsc2U7XG5cbiAgICAgIGxldCBwaW5uZWRQb3NpdGlvbiA9IHt4OiAwLCB5OiAwfTtcbiAgICAgIGxldCBsYXllclBpbm5lZFByb3A6IExheWVySG92ZXJQcm9wIHwgbnVsbCA9IG51bGw7XG4gICAgICBpZiAocGlubmVkIHx8IGNsaWNrZWQpIHtcbiAgICAgICAgLy8gcHJvamVjdCBsbmdsYXQgdG8gc2NyZWVuIHNvIHRoYXQgdG9vbHRpcCBmb2xsb3dzIHRoZSBvYmplY3Qgb24gem9vbVxuICAgICAgICBjb25zdCB2aWV3cG9ydCA9IGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlKG1hcFN0YXRlKTtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gY2xpY2tlZCA/IGNsaWNrZWQuY29vcmRpbmF0ZSA6IHBpbm5lZC5jb29yZGluYXRlO1xuICAgICAgICBwaW5uZWRQb3NpdGlvbiA9IHRoaXMuX2dldEhvdmVyWFkodmlld3BvcnQsIGxuZ0xhdCk7XG4gICAgICAgIGxheWVyUGlubmVkUHJvcCA9IGdldExheWVySG92ZXJQcm9wKHtcbiAgICAgICAgICBhbmltYXRpb25Db25maWcsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgaG92ZXJJbmZvOiBjbGlja2VkLFxuICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICBsYXllcnNUb1JlbmRlcixcbiAgICAgICAgICBkYXRhc2V0c1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxheWVySG92ZXJQcm9wICYmIGxheWVyUGlubmVkUHJvcCkge1xuICAgICAgICAgIGxheWVySG92ZXJQcm9wLnByaW1hcnlEYXRhID0gbGF5ZXJQaW5uZWRQcm9wLmRhdGE7XG4gICAgICAgICAgbGF5ZXJIb3ZlclByb3AuY29tcGFyZVR5cGUgPSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5jb21wYXJlVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21tb25Qcm9wID0ge1xuICAgICAgICBvbkNsb3NlOiB0aGlzLl9vbkNsb3NlTWFwUG9wb3ZlcixcbiAgICAgICAgem9vbTogbWFwU3RhdGUuem9vbSxcbiAgICAgICAgY29udGFpbmVyOiB0aGlzLl9kZWNrID8gdGhpcy5fZGVjay5jYW52YXMgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxFcnJvckJvdW5kYXJ5PlxuICAgICAgICAgIHtsYXllclBpbm5lZFByb3AgJiYgKFxuICAgICAgICAgICAgPE1hcFBvcG92ZXJcbiAgICAgICAgICAgICAgey4uLnBpbm5lZFBvc2l0aW9ufVxuICAgICAgICAgICAgICB7Li4uY29tbW9uUHJvcH1cbiAgICAgICAgICAgICAgbGF5ZXJIb3ZlclByb3A9e2xheWVyUGlubmVkUHJvcH1cbiAgICAgICAgICAgICAgY29vcmRpbmF0ZT17aW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkICYmIChwaW5uZWQgfHwge30pLmNvb3JkaW5hdGV9XG4gICAgICAgICAgICAgIGZyb3plbj17dHJ1ZX1cbiAgICAgICAgICAgICAgaXNCYXNlPXtjb21wYXJlTW9kZX1cbiAgICAgICAgICAgICAgb25TZXRGZWF0dXJlcz17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0RmVhdHVyZXN9XG4gICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZT17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbj17dGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtsYXllckhvdmVyUHJvcCAmJiAoIWxheWVyUGlubmVkUHJvcCB8fCBjb21wYXJlTW9kZSkgJiYgKFxuICAgICAgICAgICAgPE1hcFBvcG92ZXJcbiAgICAgICAgICAgICAgeD17bW91c2VQb3NpdGlvblswXX1cbiAgICAgICAgICAgICAgeT17bW91c2VQb3NpdGlvblsxXX1cbiAgICAgICAgICAgICAgey4uLmNvbW1vblByb3B9XG4gICAgICAgICAgICAgIGxheWVySG92ZXJQcm9wPXtsYXllckhvdmVyUHJvcH1cbiAgICAgICAgICAgICAgZnJvemVuPXtmYWxzZX1cbiAgICAgICAgICAgICAgY29vcmRpbmF0ZT17aW50ZXJhY3Rpb25Db25maWcuY29vcmRpbmF0ZS5lbmFibGVkICYmIGNvb3JkaW5hdGV9XG4gICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldEZlYXR1cmVzfVxuICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmU9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb249e3RoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9FcnJvckJvdW5kYXJ5PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGNvbXBsZXhpdHkgKi9cblxuICAgIF9nZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpIHtcbiAgICAgIGNvbnN0IHNjcmVlbkNvb3JkID0gIXZpZXdwb3J0IHx8ICFsbmdMYXQgPyBudWxsIDogdmlld3BvcnQucHJvamVjdChsbmdMYXQpO1xuICAgICAgcmV0dXJuIHNjcmVlbkNvb3JkICYmIHt4OiBzY3JlZW5Db29yZFswXSwgeTogc2NyZWVuQ29vcmRbMV19O1xuICAgIH1cblxuICAgIF9yZW5kZXJEZWNrT3ZlcmxheShcbiAgICAgIGxheWVyc0ZvckRlY2ssXG4gICAgICBvcHRpb25zOiB7cHJpbWFyeU1hcDogYm9vbGVhbjsgaXNJbnRlcmFjdGl2ZT86IGJvb2xlYW47IGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlfSA9IHtcbiAgICAgICAgcHJpbWFyeU1hcDogZmFsc2VcbiAgICAgIH1cbiAgICApIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIHZpc1N0YXRlLFxuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgbWFwYm94QXBpVXJsLFxuICAgICAgICBkZWNrR2xQcm9wcyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIG1hcENvbnRyb2xzLFxuICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLFxuICAgICAgICB0aGVtZSxcbiAgICAgICAgZ2VuZXJhdGVEZWNrR0xMYXllcnMsXG4gICAgICAgIG9uTW91c2VNb3ZlXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3Qge2hvdmVySW5mbywgZWRpdG9yfSA9IHZpc1N0YXRlO1xuICAgICAgY29uc3Qge3ByaW1hcnlNYXAsIGlzSW50ZXJhY3RpdmUsIGNoaWxkcmVufSA9IG9wdGlvbnM7XG5cbiAgICAgIC8vIGRpc2FibGUgZG91YmxlIGNsaWNrIHpvb20gd2hlbiBlZGl0b3IgaXMgaW4gYW55IGRyYXcgbW9kZVxuICAgICAgY29uc3Qge21hcERyYXd9ID0gbWFwQ29udHJvbHM7XG4gICAgICBjb25zdCB7YWN0aXZlOiBlZGl0b3JNZW51QWN0aXZlID0gZmFsc2V9ID0gbWFwRHJhdyB8fCB7fTtcbiAgICAgIGNvbnN0IGlzRWRpdG9yRHJhd2luZ01vZGUgPSBFZGl0b3JMYXllclV0aWxzLmlzRHJhd2luZ0FjdGl2ZShlZGl0b3JNZW51QWN0aXZlLCBlZGl0b3IubW9kZSk7XG5cbiAgICAgIGNvbnN0IGludGVybmFsVmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZShpbmRleCk7XG4gICAgICBjb25zdCBpbnRlcm5hbE1hcFN0YXRlID0gey4uLm1hcFN0YXRlLCAuLi5pbnRlcm5hbFZpZXdTdGF0ZX07XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlKGludGVybmFsTWFwU3RhdGUpO1xuXG4gICAgICBjb25zdCBlZGl0b3JGZWF0dXJlU2VsZWN0ZWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgY29uc3Qge3NldEZlYXR1cmVzLCBvbkxheWVyQ2xpY2ssIHNldFNlbGVjdGVkRmVhdHVyZX0gPSB2aXNTdGF0ZUFjdGlvbnM7XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kID0gZ2VuZXJhdGVEZWNrR0xMYXllcnMgPz8gY29tcHV0ZURlY2tMYXllcnM7XG4gICAgICBjb25zdCBkZWNrR2xMYXllcnMgPSBnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZChcbiAgICAgICAge1xuICAgICAgICAgIHZpc1N0YXRlLFxuICAgICAgICAgIG1hcFN0YXRlOiBpbnRlcm5hbE1hcFN0YXRlLFxuICAgICAgICAgIG1hcFN0eWxlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtYXBJbmRleDogaW5kZXgsXG4gICAgICAgICAgcHJpbWFyeU1hcCxcbiAgICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgICAgbGF5ZXJzRm9yRGVjayxcbiAgICAgICAgICBlZGl0b3JJbmZvOiBwcmltYXJ5TWFwXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICBvblNldEZlYXR1cmVzOiBzZXRGZWF0dXJlcyxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbjogdGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4ZXM6IHRoaXMuc2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICd1bmtub3duJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbnVtYmVyJy5cbiAgICAgICAgICAgICAgICAgIGVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25MYXllckhvdmVyOiB0aGlzLl9vbkxheWVySG92ZXIsXG4gICAgICAgICAgb25TZXRMYXllckRvbWFpbjogdGhpcy5fb25MYXllclNldERvbWFpbixcbiAgICAgICAgICBvbkZpbHRlcmVkSXRlbXNDaGFuZ2U6IHRoaXMuX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlLFxuICAgICAgICAgIG9uV01TRmVhdHVyZUluZm86IHRoaXMuX29uV01TRmVhdHVyZUluZm8sXG4gICAgICAgICAgb25SZWRyYXdOZWVkZWQ6IHRoaXMuX29uUmVkcmF3TmVlZGVkXG4gICAgICAgIH0sXG4gICAgICAgIGRlY2tHbFByb3BzXG4gICAgICApO1xuXG4gICAgICBjb25zdCBleHRyYURlY2tQYXJhbXM6IHtcbiAgICAgICAgZ2V0VG9vbHRpcD86IChpbmZvOiBhbnkpID0+IG9iamVjdCB8IG51bGw7XG4gICAgICAgIGdldEN1cnNvcj86ICh7aXNEcmFnZ2luZ306IHtpc0RyYWdnaW5nOiBib29sZWFufSkgPT4gc3RyaW5nO1xuICAgICAgfSA9IHt9O1xuICAgICAgaWYgKHByaW1hcnlNYXApIHtcbiAgICAgICAgZXh0cmFEZWNrUGFyYW1zLmdldFRvb2x0aXAgPSBpbmZvID0+XG4gICAgICAgICAgRWRpdG9yTGF5ZXJVdGlscy5nZXRUb29sdGlwKGluZm8sIHtcbiAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICB0aGVtZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGV4dHJhRGVja1BhcmFtcy5nZXRDdXJzb3IgPSAoe2lzRHJhZ2dpbmd9OiB7aXNEcmFnZ2luZzogYm9vbGVhbn0pID0+IHtcbiAgICAgICAgICBjb25zdCBlZGl0b3JDdXJzb3IgPSBFZGl0b3JMYXllclV0aWxzLmdldEN1cnNvcih7XG4gICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgaG92ZXJJbmZvXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGVkaXRvckN1cnNvcikgcmV0dXJuIGVkaXRvckN1cnNvcjtcblxuICAgICAgICAgIGlmIChpc0RyYWdnaW5nKSByZXR1cm4gJ2dyYWJiaW5nJztcbiAgICAgICAgICBpZiAoaG92ZXJJbmZvPy5sYXllcikgcmV0dXJuICdwb2ludGVyJztcbiAgICAgICAgICByZXR1cm4gJ2dyYWInO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZmZlY3RzID0gdGhpcy5faXNPS1RvUmVuZGVyRWZmZWN0cyhpbmRleClcbiAgICAgICAgPyBjb21wdXRlRGVja0VmZmVjdHMoe3Zpc1N0YXRlLCBtYXBTdGF0ZX0pXG4gICAgICAgIDogW107XG5cbiAgICAgIGNvbnN0IHZpZXdzID0gZGVja0dsUHJvcHM/LnZpZXdzXG4gICAgICAgID8gZGVja0dsUHJvcHM/LnZpZXdzKClcbiAgICAgICAgOiBuZXcgTWFwVmlldyh7bGVnYWN5TWV0ZXJTaXplczogdHJ1ZX0pO1xuXG4gICAgICBsZXQgYWxsRGVja0dsUHJvcHMgPSB7XG4gICAgICAgIC4uLmRlY2tHbFByb3BzLFxuICAgICAgICBwaWNraW5nUmFkaXVzOiBERUZBVUxUX1BJQ0tJTkdfUkFESVVTLFxuICAgICAgICB2aWV3cyxcbiAgICAgICAgbGF5ZXJzOiBkZWNrR2xMYXllcnMsXG4gICAgICAgIGVmZmVjdHNcbiAgICAgIH07XG5cbiAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGFsbERlY2tHbFByb3BzID0gZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tSZW5kZXIoYWxsRGVja0dsUHJvcHMpO1xuICAgICAgICBpZiAoIWFsbERlY2tHbFByb3BzKSB7XG4gICAgICAgICAgLy8gaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbCwgZG8gbm90IHJlbmRlciBkZWNrLmdsXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHsuLi4oaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgb25Nb3VzZU1vdmU6IHByaW1hcnlNYXBcbiAgICAgICAgICAgICAgICAgID8gZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIG9uTW91c2VNb3ZlPy4oZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uTW91c2VNb3ZlRGVib3VuY2VkKGV2ZW50LCB2aWV3cG9ydCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge3N0eWxlOiB7cG9pbnRlckV2ZW50czogJ25vbmUnfX0pfVxuICAgICAgICA+XG4gICAgICAgICAgPERlY2tHTFxuICAgICAgICAgICAgaWQ9XCJkZWZhdWx0LWRlY2tnbC1vdmVybGF5XCJcbiAgICAgICAgICAgIG9uTG9hZD17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja0xvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja0xvYWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHsuLi5hbGxEZWNrR2xQcm9wc31cbiAgICAgICAgICAgIGNvbnRyb2xsZXI9e1xuICAgICAgICAgICAgICBpc0ludGVyYWN0aXZlXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGRvdWJsZUNsaWNrWm9vbTogIWlzRWRpdG9yRHJhd2luZ01vZGUsXG4gICAgICAgICAgICAgICAgICAgIGRyYWdSb3RhdGU6IHRoaXMucHJvcHMubWFwU3RhdGUuZHJhZ1JvdGF0ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluaXRpYWxWaWV3U3RhdGU9e2ludGVybmFsVmlld1N0YXRlfVxuICAgICAgICAgICAgb25CZWZvcmVSZW5kZXI9e3RoaXMuX29uQmVmb3JlUmVuZGVyfVxuICAgICAgICAgICAgb25WaWV3U3RhdGVDaGFuZ2U9e2lzSW50ZXJhY3RpdmUgPyB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgey4uLmV4dHJhRGVja1BhcmFtc31cbiAgICAgICAgICAgIG9uSG92ZXI9e1xuICAgICAgICAgICAgICBpc0ludGVyYWN0aXZlXG4gICAgICAgICAgICAgICAgPyBkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gRWRpdG9yTGF5ZXJVdGlscy5vbkhvdmVyKGRhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICBob3ZlckluZm9cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbkxheWVySG92ZXJEZWJvdW5jZWQoZGF0YSwgaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25DbGljaz17KGRhdGEsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgbm9ybWFsaXplRXZlbnQoZXZlbnQuc3JjRXZlbnQsIHZpZXdwb3J0KTtcbiAgICAgICAgICAgICAgY29uc3QgcmVzID0gRWRpdG9yTGF5ZXJVdGlscy5vbkNsaWNrKGRhdGEsIGV2ZW50LCB7XG4gICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgb25MYXllckNsaWNrLFxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICBtYXBJbmRleDogaW5kZXhcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChyZXMpIHJldHVybjtcblxuICAgICAgICAgICAgICB2aXNTdGF0ZUFjdGlvbnMub25MYXllckNsaWNrKGRhdGEpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uRXJyb3I9e3RoaXMuX29uRGVja0Vycm9yfVxuICAgICAgICAgICAgcmVmPXtjb21wID0+IHtcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBpZiAoY29tcCAmJiBjb21wLmRlY2sgJiYgIXRoaXMuX2RlY2spIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVjayA9IGNvbXAuZGVjaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uV2ViR0xJbml0aWFsaXplZD17Z2wgPT4gdGhpcy5fb25EZWNrSW5pdGlhbGl6ZWQoZ2wpfVxuICAgICAgICAgICAgb25BZnRlclJlbmRlcj17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja0FmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tBZnRlclJlbmRlcihhbGxEZWNrR2xQcm9wcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBhbnlBY3RpdmVMYXllckxvYWRpbmcgPSBhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyhhbGxEZWNrR2xQcm9wcy5sYXllcnMpO1xuICAgICAgICAgICAgICBpZiAoYW55QWN0aXZlTGF5ZXJMb2FkaW5nICE9PSB0aGlzLmFueUFjdGl2ZUxheWVyTG9hZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX29uTGF5ZXJMb2FkaW5nU3RhdGVDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGFueUFjdGl2ZUxheWVyTG9hZGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9EZWNrR0w+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTWFwYm94TGF5ZXJzKCkge1xuICAgICAgY29uc3QgbWFwYm94TGF5ZXJzID0gdGhpcy5tYXBib3hMYXllcnNTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGlmICghT2JqZWN0LmtleXMobWFwYm94TGF5ZXJzKS5sZW5ndGggJiYgIU9iamVjdC5rZXlzKHRoaXMucHJldmlvdXNMYXllcnMpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZU1hcGJveExheWVycyh0aGlzLl9tYXAsIG1hcGJveExheWVycywgdGhpcy5wcmV2aW91c0xheWVycyk7XG5cbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSBtYXBib3hMYXllcnM7XG4gICAgfVxuXG4gICAgX3JlbmRlck1hcGJveE92ZXJsYXlzKCkge1xuICAgICAgaWYgKHRoaXMuX21hcCAmJiB0aGlzLl9tYXAuaXNTdHlsZUxvYWRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuICAgICAgfVxuICAgIH1cbiAgICBfb25WaWV3cG9ydENoYW5nZVByb3BhZ2F0ZURlYm91bmNlZCA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIGNvbnN0IHZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUodGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICBvblZpZXdQb3J0Q2hhbmdlKFxuICAgICAgICB2aWV3U3RhdGUsXG4gICAgICAgIHRoaXMucHJvcHMubWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcCxcbiAgICAgICAgdGhpcy5wcm9wcy5vblZpZXdTdGF0ZUNoYW5nZSxcbiAgICAgICAgdGhpcy5wcm9wcy5wcmltYXJ5LFxuICAgICAgICB0aGlzLnByb3BzLmluZGV4XG4gICAgICApO1xuICAgIH0sIERFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSk7XG5cbiAgICBfb25WaWV3cG9ydENoYW5nZSA9IHZpZXdwb3J0ID0+IHtcbiAgICAgIGNvbnN0IHt2aWV3U3RhdGV9ID0gdmlld3BvcnQ7XG4gICAgICBpZiAodGhpcy5wcm9wcy5pc0V4cG9ydCkge1xuICAgICAgICAvLyBJbWFnZSBleHBvcnQgbWFwIHNob3VsZG4ndCBiZSBpbnRlcmFjdGl2ZSAob3RoZXJ3aXNlIHRoaXMgY2FsbGJhY2sgY2FuXG4gICAgICAgIC8vIGxlYWQgdG8gaW5hZHZlcnRlbnQgY2hhbmdlcyB0byB0aGUgc3RhdGUgb2YgdGhlIG1haW4gbWFwKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7c2V0SW50ZXJuYWxWaWV3U3RhdGV9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIHRoaXMuX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQoKTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJIb3ZlckRlYm91bmNlZCA9IGRlYm91bmNlKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckhvdmVyKGRhdGEsIGluZGV4KTtcbiAgICB9LCBERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSk7XG5cbiAgICBfb25Nb3VzZU1vdmVEZWJvdW5jZWQgPSBkZWJvdW5jZSgoZXZlbnQsIHZpZXdwb3J0KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbk1vdXNlTW92ZShub3JtYWxpemVFdmVudChldmVudCwgdmlld3BvcnQpKTtcbiAgICB9LCBERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSk7XG5cbiAgICBfb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgIC8vIHRyaWdnZXIgbG9hZGluZyBpbmRpY2F0b3IgdXBkYXRlIHdpdGhvdXQgYW55IGNoYW5nZSB0byB1cGRhdGUgVUlcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldExvYWRpbmdJbmRpY2F0b3Ioe2NoYW5nZTogMH0pO1xuICAgIH0sIERFQk9VTkNFX0xPQURJTkdfU1RBVEVfUFJPUEFHQVRFKTtcblxuICAgIF90b2dnbGVNYXBDb250cm9sID0gcGFuZWxJZCA9PiB7XG4gICAgICBjb25zdCB7aW5kZXgsIHVpU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIHVpU3RhdGVBY3Rpb25zLnRvZ2dsZU1hcENvbnRyb2wocGFuZWxJZCwgTnVtYmVyKGluZGV4KSk7XG4gICAgfTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbiAgICBfcmVuZGVyTWFwKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIG1hcFN0eWxlLFxuICAgICAgICBtYXBTdGF0ZUFjdGlvbnMsXG4gICAgICAgIE1hcENvbXBvbmVudCA9IE1hcCxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIC8vIG1hcGJveEFwaVVybCxcbiAgICAgICAgbWFwQ29udHJvbHMsXG4gICAgICAgIGlzRXhwb3J0LFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIHVpU3RhdGVBY3Rpb25zLFxuICAgICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBwcmltYXJ5LFxuICAgICAgICBib3R0b21NYXBDb250YWluZXJQcm9wcyxcbiAgICAgICAgdG9wTWFwQ29udGFpbmVyUHJvcHMsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBkYXRhc2V0QXR0cmlidXRpb25zID0gW10sXG4gICAgICAgIGNvbnRhaW5lcklkID0gMCxcbiAgICAgICAgaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSxcbiAgICAgICAgYWN0aXZlU2lkZVBhbmVsLFxuICAgICAgICBzaWRlUGFuZWxXaWR0aFxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IHtsYXllcnMsIGRhdGFzZXRzLCBlZGl0b3IsIGludGVyYWN0aW9uQ29uZmlnfSA9IHZpc1N0YXRlO1xuXG4gICAgICBjb25zdCBsYXllcnNUb1JlbmRlciA9IHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIGNvbnN0IGxheWVyc0ZvckRlY2sgPSB0aGlzLmxheWVyc0ZvckRlY2tTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgLy8gQ3VycmVudCBzdHlsZSBjYW4gYmUgYSBjdXN0b20gc3R5bGUsIGZyb20gd2hpY2ggd2UgcHVsbCB0aGUgbWFwYm94IEFQSSBhY2NjZXNzIHRva2VuXG4gICAgICBjb25zdCBjdXJyZW50U3R5bGUgPSBtYXBTdHlsZS5tYXBTdHlsZXM/LlttYXBTdHlsZS5zdHlsZVR5cGVdO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlOYW1lID0gZ2V0QmFzZU1hcExpYnJhcnkoY3VycmVudFN0eWxlKTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5Q29uZmlnID1cbiAgICAgICAgZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZz8uW2Jhc2VNYXBMaWJyYXJ5TmFtZV07XG5cbiAgICAgIGNvbnN0IGludGVybmFsVmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZShpbmRleCk7XG4gICAgICBjb25zdCBtYXBQcm9wcyA9IHtcbiAgICAgICAgLi4uaW50ZXJuYWxWaWV3U3RhdGUsXG4gICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdHJ1ZSxcbiAgICAgICAgbWFwYm94QWNjZXNzVG9rZW46IGN1cnJlbnRTdHlsZT8uYWNjZXNzVG9rZW4gfHwgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIC8vIGJhc2VBcGlVcmw6IG1hcGJveEFwaVVybCxcbiAgICAgICAgbWFwTGliOiBiYXNlTWFwTGlicmFyeUNvbmZpZy5nZXRNYXBMaWIoKSxcbiAgICAgICAgdHJhbnNmb3JtUmVxdWVzdDpcbiAgICAgICAgICB0aGlzLnByb3BzLnRyYW5zZm9ybVJlcXVlc3QgfHxcbiAgICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0KGN1cnJlbnRTdHlsZT8uYWNjZXNzVG9rZW4gfHwgbWFwYm94QXBpQWNjZXNzVG9rZW4pXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBoYXNHZW9jb2RlckxheWVyID0gQm9vbGVhbihsYXllcnMuZmluZChsID0+IGwuaWQgPT09IEdFT0NPREVSX0xBWUVSX0lEKSk7XG4gICAgICBjb25zdCBpc1NwbGl0ID0gQm9vbGVhbihtYXBTdGF0ZS5pc1NwbGl0KTtcblxuICAgICAgY29uc3QgZGVjayA9IHRoaXMuX3JlbmRlckRlY2tPdmVybGF5KGxheWVyc0ZvckRlY2ssIHtcbiAgICAgICAgcHJpbWFyeU1hcDogdHJ1ZSxcbiAgICAgICAgaXNJbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IChcbiAgICAgICAgICA8TWFwQ29tcG9uZW50XG4gICAgICAgICAgICBrZXk9e2Bib3R0b20tJHtiYXNlTWFwTGlicmFyeU5hbWV9YH1cbiAgICAgICAgICAgIHsuLi5tYXBQcm9wc31cbiAgICAgICAgICAgIG1hcFN0eWxlPXttYXBTdHlsZS5ib3R0b21NYXBTdHlsZSA/PyBFTVBUWV9NQVBCT1hfU1RZTEV9XG4gICAgICAgICAgICB7Li4uYm90dG9tTWFwQ29udGFpbmVyUHJvcHN9XG4gICAgICAgICAgICByZWY9e3RoaXMuX3NldE1hcFJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9KTtcbiAgICAgIGlmICghZGVjaykge1xuICAgICAgICAvLyBkZWNrT3ZlcmxheSBjYW4gYmUgbnVsbCBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsXG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHJlbmRlciB0aGUgbWFwXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8TWFwQ29udHJvbFxuICAgICAgICAgICAgbWFwU3RhdGU9e21hcFN0YXRlfVxuICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcz17TE9DQUxFX0NPREVTX0FSUkFZfVxuICAgICAgICAgICAgZHJhZ1JvdGF0ZT17bWFwU3RhdGUuZHJhZ1JvdGF0ZX1cbiAgICAgICAgICAgIGlzU3BsaXQ9e2lzU3BsaXR9XG4gICAgICAgICAgICBwcmltYXJ5PXtCb29sZWFuKHByaW1hcnkpfVxuICAgICAgICAgICAgaXNFeHBvcnQ9e2lzRXhwb3J0fVxuICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICBsYXllcnNUb1JlbmRlcj17bGF5ZXJzVG9SZW5kZXJ9XG4gICAgICAgICAgICBtYXBJbmRleD17aW5kZXggfHwgMH1cbiAgICAgICAgICAgIG1hcENvbnRyb2xzPXttYXBDb250cm9sc31cbiAgICAgICAgICAgIHJlYWRPbmx5PXt0aGlzLnByb3BzLnJlYWRPbmx5fVxuICAgICAgICAgICAgc2NhbGU9e21hcFN0YXRlLnNjYWxlIHx8IDF9XG4gICAgICAgICAgICBsb2dvQ29tcG9uZW50PXt0aGlzLnByb3BzLmxvZ29Db21wb25lbnR9XG4gICAgICAgICAgICB0b3A9e1xuICAgICAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2RlciAmJiBpbnRlcmFjdGlvbkNvbmZpZy5nZW9jb2Rlci5lbmFibGVkXG4gICAgICAgICAgICAgICAgPyB0aGVtZS5tYXBDb250cm9sVG9wXG4gICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgb25Ub2dnbGVQZXJzcGVjdGl2ZT17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVBlcnNwZWN0aXZlfVxuICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwfVxuICAgICAgICAgICAgb25NYXBUb2dnbGVMYXllcj17dGhpcy5faGFuZGxlTWFwVG9nZ2xlTGF5ZXJ9XG4gICAgICAgICAgICBvblRvZ2dsZU1hcENvbnRyb2w9e3RoaXMuX3RvZ2dsZU1hcENvbnRyb2x9XG4gICAgICAgICAgICBvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQ9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVTcGxpdE1hcFZpZXdwb3J0fVxuICAgICAgICAgICAgb25TZXRFZGl0b3JNb2RlPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RWRpdG9yTW9kZX1cbiAgICAgICAgICAgIG9uU2V0TG9jYWxlPXt1aVN0YXRlQWN0aW9ucy5zZXRMb2NhbGV9XG4gICAgICAgICAgICBvblRvZ2dsZUVkaXRvclZpc2liaWxpdHk9e3Zpc1N0YXRlQWN0aW9ucy50b2dnbGVFZGl0b3JWaXNpYmlsaXR5fVxuICAgICAgICAgICAgb25MYXllclZpc0NvbmZpZ0NoYW5nZT17dmlzU3RhdGVBY3Rpb25zLmxheWVyVmlzQ29uZmlnQ2hhbmdlfVxuICAgICAgICAgICAgbWFwSGVpZ2h0PXttYXBTdGF0ZS5oZWlnaHR9XG4gICAgICAgICAgICBzZXRNYXBDb250cm9sU2V0dGluZ3M9e3VpU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xTZXR0aW5nc31cbiAgICAgICAgICAgIGFjdGl2ZVNpZGVQYW5lbD17YWN0aXZlU2lkZVBhbmVsfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2lzU3BsaXRTZWxlY3Rvcih0aGlzLnByb3BzKSAmJiA8RHJvcHBhYmxlIGNvbnRhaW5lcklkPXtjb250YWluZXJJZH0gLz59XG5cbiAgICAgICAgICB7ZGVja31cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwYm94T3ZlcmxheXMoKX1cbiAgICAgICAgICA8RWRpdG9yXG4gICAgICAgICAgICBpbmRleD17aW5kZXggfHwgMH1cbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgICAgZmlsdGVycz17dGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICBvbkRlbGV0ZUZlYXR1cmU9e3Zpc1N0YXRlQWN0aW9ucy5kZWxldGVGZWF0dXJlfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICBvblRvZ2dsZVBvbHlnb25GaWx0ZXI9e3Zpc1N0YXRlQWN0aW9ucy5zZXRQb2x5Z29uRmlsdGVyTGF5ZXJ9XG4gICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ2FsbCcsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBkaXNwbGF5OiBlZGl0b3IudmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZSdcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICB7bWFwU3R5bGUudG9wTWFwU3R5bGUgPyAoXG4gICAgICAgICAgICA8TWFwQ29tcG9uZW50XG4gICAgICAgICAgICAgIGtleT17YHRvcC0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgICB2aWV3U3RhdGU9e2ludGVybmFsVmlld1N0YXRlfVxuICAgICAgICAgICAgICBtYXBTdHlsZT17bWFwU3R5bGUudG9wTWFwU3R5bGV9XG4gICAgICAgICAgICAgIHN0eWxlPXtNQVBfU1RZTEUudG9wfVxuICAgICAgICAgICAgICBtYXBib3hBY2Nlc3NUb2tlbj17bWFwUHJvcHMubWFwYm94QWNjZXNzVG9rZW59XG4gICAgICAgICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q9e21hcFByb3BzLnRyYW5zZm9ybVJlcXVlc3R9XG4gICAgICAgICAgICAgIG1hcExpYj17YmFzZU1hcExpYnJhcnlDb25maWcuZ2V0TWFwTGliKCl9XG4gICAgICAgICAgICAgIHsuLi50b3BNYXBDb250YWluZXJQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7aGFzR2VvY29kZXJMYXllclxuICAgICAgICAgICAgPyB0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheShcbiAgICAgICAgICAgICAgICB7W0dFT0NPREVSX0xBWUVSX0lEXTogaGFzR2VvY29kZXJMYXllcn0sXG4gICAgICAgICAgICAgICAge3ByaW1hcnlNYXA6IGZhbHNlLCBpc0ludGVyYWN0aXZlOiBmYWxzZX1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJNYXBQb3BvdmVyKCl9XG4gICAgICAgICAge3ByaW1hcnkgIT09IGlzU3BsaXQgPyAoXG4gICAgICAgICAgICA8TG9hZGluZ0luZGljYXRvclxuICAgICAgICAgICAgICBpc1Zpc2libGU9e0Jvb2xlYW4oaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSB8fCB0aGlzLmFueUFjdGl2ZUxheWVyTG9hZGluZyl9XG4gICAgICAgICAgICAgIGFjdGl2ZVNpZGVQYW5lbD17Qm9vbGVhbihhY3RpdmVTaWRlUGFuZWwpfVxuICAgICAgICAgICAgICBzaWRlUGFuZWxXaWR0aD17c2lkZVBhbmVsV2lkdGh9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHt0aGlzLnByb3BzLnByaW1hcnkgPyAoXG4gICAgICAgICAgICA8QXR0cmlidXRpb25cbiAgICAgICAgICAgICAgc2hvd0Jhc2VNYXBMaWJMb2dvPXt0aGlzLnN0YXRlLnNob3dCYXNlTWFwQXR0cmlidXRpb259XG4gICAgICAgICAgICAgIHNob3dPc21CYXNlbWFwQXR0cmlidXRpb249e3RydWV9XG4gICAgICAgICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnM9e2RhdGFzZXRBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5Q29uZmlnPXtiYXNlTWFwTGlicmFyeUNvbmZpZ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7dmlzU3RhdGUsIG1hcFN0eWxlfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBtYXBDb250ZW50ID0gdGhpcy5fcmVuZGVyTWFwKCk7XG4gICAgICBpZiAoIW1hcENvbnRlbnQpIHtcbiAgICAgICAgLy8gbWFwQ29udGVudCBjYW4gYmUgbnVsbCBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsXG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHJlbmRlciB0aGUgbWFwXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50U3R5bGUgPSBtYXBTdHlsZS5tYXBTdHlsZXM/LlttYXBTdHlsZS5zdHlsZVR5cGVdO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlOYW1lID0gZ2V0QmFzZU1hcExpYnJhcnkoY3VycmVudFN0eWxlKTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5Q29uZmlnID1cbiAgICAgICAgZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZz8uW2Jhc2VNYXBMaWJyYXJ5TmFtZV07XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRNYXBcbiAgICAgICAgICByZWY9e3RoaXMuX3JlZn1cbiAgICAgICAgICBzdHlsZT17dGhpcy5zdHlsZVNlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgIG9uQ29udGV4dE1lbnU9e2V2ZW50ID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCl9XG4gICAgICAgICAgJG1peEJsZW5kTW9kZT17dmlzU3RhdGUub3ZlcmxheUJsZW5kaW5nfVxuICAgICAgICAgICRtYXBMaWJDc3NDbGFzcz17YmFzZU1hcExpYnJhcnlDb25maWcubWFwTGliQ3NzQ2xhc3N9XG4gICAgICAgID5cbiAgICAgICAgICB7bWFwQ29udGVudH1cbiAgICAgICAgPC9TdHlsZWRNYXA+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aXRoVGhlbWUoTWFwQ29udGFpbmVyKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUYsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLFNBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLEtBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQUgsc0JBQUEsQ0FBQUosT0FBQTtBQUtBLElBQUFRLFdBQUEsR0FBQUosc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFTLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFVLGtCQUFBLEdBQUFWLE9BQUE7QUFNQSxJQUFBVyxPQUFBLEdBQUFQ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
998
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9yZWFjdE1hcEdsIiwiX2NvcmUiLCJfcmVhY3QyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZXNlbGVjdCIsIl9jb3JlMiIsIl9kZWJvdW5jZSIsIl9tYXBQb3BvdmVyIiwiX21hcENvbnRyb2wiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfZWRpdG9yIiwiX2xheWVycyIsIl91dGlscyIsIl9zdHlsZXMiLCJfY29uc3RhbnRzIiwiX2RuZExheWVySXRlbXMiLCJfbWFwVmlld1N0YXRlQ29udGV4dCIsIl9lcnJvckJvdW5kYXJ5IiwiX2xvY2FsaXphdGlvbiIsIl9yZWR1Y2VycyIsIl9sb2FkaW5nSW5kaWNhdG9yIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUiLCJERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSIsIk1BUF9TVFlMRSIsImNvbnRhaW5lciIsImRpc3BsYXkiLCJwb3NpdGlvbiIsIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwicG9pbnRlckV2ZW50cyIsIkxPQ0FMRV9DT0RFU19BUlJBWSIsIkxPQ0FMRV9DT0RFUyIsIlN0eWxlZE1hcCIsInN0eWxlZCIsIlN0eWxlZE1hcENvbnRhaW5lciIsIl9yZWYiLCJfcmVmJCRtaXhCbGVuZE1vZGUiLCIkbWl4QmxlbmRNb2RlIiwiJG1hcExpYkNzc0NsYXNzIiwiY29uY2F0IiwiTUFQQk9YR0xfU1RZTEVfVVBEQVRFIiwiTUFQQk9YR0xfUkVOREVSIiwibm9wIiwiTWFwTGliTG9nbyIsIl9yZWYyIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJtYXJnaW5MZWZ0IiwibWFwTGliQ3NzQ2xhc3MiLCJ0YXJnZXQiLCJyZWwiLCJocmVmIiwibWFwTGliVXJsIiwibWFwTGliTmFtZSIsIlN0eWxlZERyb3BwYWJsZSIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJpc092ZXIiLCJ0aGVtZSIsImRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJpc1NwbGl0U2VsZWN0b3IiLCJleHBvcnRzIiwidmlzU3RhdGUiLCJzcGxpdE1hcHMiLCJEcm9wcGFibGUiLCJfcmVmMyIsImNvbnRhaW5lcklkIiwiX3VzZURyb3BwYWJsZSIsInVzZURyb3BwYWJsZSIsImlkIiwiZGF0YSIsInR5cGUiLCJEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFIiwiaW5kZXgiLCJkaXNhYmxlZCIsInNldE5vZGVSZWYiLCJyZWYiLCJTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyIiwiaXNQYWxtIiwibGFiZWxDb2xvciIsIkRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfcmVmNCIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJGcmFnbWVudCIsIm1hcCIsImRzIiwiaWR4IiwiX2V4dGVuZHMyIiwidXJsIiwia2V5IiwidGl0bGUiLCJBdHRyaWJ1dGlvbiIsIl9yZWY1IiwiX3JlZjUkc2hvd0Jhc2VNYXBMaWJMIiwic2hvd0Jhc2VNYXBMaWJMb2dvIiwiX3JlZjUkc2hvd09zbUJhc2VtYXBBIiwic2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbiIsImhhc01vYmlsZVdpZHRoIiwiYnJlYWtQb2ludFZhbHVlcyIsIm1lbW9pemVkQ29tcG9uZW50cyIsInVzZU1lbW8iLCJTdHlsZWRBdHRyaWJ1dGlvbiIsIm1hcExpYkF0dHJpYnV0aW9uQ3NzQ2xhc3MiLCJFbmRIb3Jpem9udGFsRmxleGJveCIsIk1hcENvbnRhaW5lckZhY3RvcnkiLCJkZXBzIiwiTWFwUG9wb3ZlckZhY3RvcnkiLCJNYXBDb250cm9sRmFjdG9yeSIsIkVkaXRvckZhY3RvcnkiLCJNYXBQb3BvdmVyIiwiTWFwQ29udHJvbCIsIkVkaXRvciIsIk1hcENvbnRhaW5lciIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJzaG93QmFzZU1hcEF0dHJpYnV0aW9uIiwiY3JlYXRlUmVmIiwiZGltZW5zaW9ucyIsIl90aGlzJHByb3BzIiwicHJpbWFyeSIsIm1hcFN0YXRlQWN0aW9ucyIsInVwZGF0ZU1hcCIsImxheWVycyIsImxheWVyRGF0YSIsImNyZWF0ZVNlbGVjdG9yIiwic3BsaXRNYXBTZWxlY3RvciIsInNwbGl0TWFwSW5kZXhTZWxlY3RvciIsImdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMiLCJsYXllck9yZGVyIiwibGF5ZXJzU2VsZWN0b3IiLCJsYXllckRhdGFTZWxlY3RvciIsIm1hcExheWVyc1NlbGVjdG9yIiwicHJlcGFyZUxheWVyc1RvUmVuZGVyIiwicHJlcGFyZUxheWVyc0ZvckRlY2siLCJmaWx0ZXJzIiwiZmlsdGVyc1NlbGVjdG9yIiwiZiIsIkZJTFRFUl9UWVBFUyIsInBvbHlnb24iLCJlbmFibGVkIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJwb2x5Z29uRmlsdGVyc1NlbGVjdG9yIiwiZmVhdHVyZXNTZWxlY3RvciIsInBvbHlnb25GaWx0ZXJzIiwidmFsdWUiLCJmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yIiwic2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IiLCJjb2xsZWN0aW9uIiwiZmluZEluZGV4IiwiX3Byb3BzJGdlbmVyYXRlTWFwYm94IiwiZ2VuZXJhdGVNYXBib3hMYXllcnMiLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yIiwibGF5ZXIiLCJsYXllcnNUb1JlbmRlciIsImdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QiLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsImJhY2tncm91bmRDb2xvciIsIm1hcFN0eWxlVHlwZVNlbGVjdG9yIiwibWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciIsIk5PX01BUF9JRCIsInJnYlRvSGV4IiwidmlzU3RhdGVBY3Rpb25zIiwib25MYXllckNsaWNrIiwiX2lkeCIsImluZm8iLCJvbkxheWVySG92ZXIiLCJjb25maWciLCJBcnJheSIsImlzQXJyYXkiLCJjb2xvckRvbWFpbiIsImRvbWFpbiIsImFnZ3JlZ2F0ZWRCaW5zIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJfdGhpcyRwcm9wczIiLCJib3VuZHMiLCJmaXRCb3VuZHMiLCJldmVudCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIndtc0ZlYXR1cmVJbmZvIiwiZmVhdHVyZUluZm8iLCJjb29yZGluYXRlIiwibGF5ZXJJZCIsIl90aGlzJHByb3BzMyIsIl90aGlzJHByb3BzMyRpbmRleCIsIm1hcEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJ1cGRhdGUiLCJwcmV2aW91c0xheWVycyIsIl91cGRhdGVNYXBib3hMYXllcnMiLCJzZXRTdGF0ZSIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwiaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzIiwib25NYXBTdHlsZUxvYWRlZCIsIl9tYXAiLCJtYXBSZWYiLCJnZXRNYXAiLCJfdGhpcyRfbWFwIiwiX3RoaXMkX21hcDIiLCJvZmYiLCJvbiIsIl9vbk1hcGJveFN0eWxlVXBkYXRlIiwib25NYXBSZW5kZXIiLCJnZXRNYXBib3hSZWYiLCJlcnJvciIsImVycm9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJsYXllck1lc3NhZ2UiLCJlcnJvck1lc3NhZ2VGdWxsIiwibGFzdFNob3duIiwiX2RlY2tHTEVycm9yc0VsYXBzZWQiLCJEYXRlIiwibm93IiwiVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUiLCJleHRyYUxheWVyTWVzc2FnZSIsIl90b3BNb3N0TGF5ZXIkcHJvcHMiLCJ0b3BNb3N0TGF5ZXIiLCJwYXJlbnQiLCJsYXllclNldElzVmFsaWQiLCJ1aVN0YXRlQWN0aW9ucyIsImFkZE5vdGlmaWNhdGlvbiIsImVycm9yTm90aWZpY2F0aW9uIiwiZGVib3VuY2UiLCJfdGhpcyRjb250ZXh0Iiwidmlld1N0YXRlIiwiY29udGV4dCIsImdldEludGVybmFsVmlld1N0YXRlIiwib25WaWV3UG9ydENoYW5nZSIsIm9uVmlld1N0YXRlQ2hhbmdlIiwidmlld3BvcnQiLCJpc0V4cG9ydCIsInNldEludGVybmFsVmlld1N0YXRlIiwiX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQiLCJvbk1vdXNlTW92ZSIsIm5vcm1hbGl6ZUV2ZW50Iiwic2V0TG9hZGluZ0luZGljYXRvciIsImNoYW5nZSIsImlzVmlzaWJsZSIsInBhbmVsSWQiLCJfdGhpcyRwcm9wczQiLCJ0b2dnbGVNYXBDb250cm9sIiwiTnVtYmVyIiwicGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZyIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwiY29tcG9uZW50RGlkTW91bnQiLCJjdXJyZW50Iiwib2JzZXJ2ZURpbWVuc2lvbnMiLCJfaGFuZGxlUmVzaXplIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJfdGhpcyRfbWFwMyIsIl90aGlzJF9tYXA0IiwidW5vYnNlcnZlRGltZW5zaW9ucyIsIl9vbkRlY2tJbml0aWFsaXplZCIsImRldmljZSIsIm9uRGVja0luaXRpYWxpemVkIiwiX2RlY2siLCJfaXNPS1RvUmVuZGVyRWZmZWN0cyIsInZpZXdJbmRleCIsIl90aGlzJF9kZWNrIiwidmlld01hbmFnZXIiLCJfdmlld3BvcnRzIiwiX3JlbmRlck1hcFBvcG92ZXIiLCJfdGhpcyRwcm9wcyR2aXNTdGF0ZSQiLCJob3ZlckluZm8iLCJfdGhpcyRwcm9wczUiLCJtYXBTdGF0ZSIsIl90aGlzJHByb3BzNSR2aXNTdGF0ZSIsImNsaWNrZWQiLCJkYXRhc2V0cyIsImludGVyYWN0aW9uQ29uZmlnIiwiYW5pbWF0aW9uQ29uZmlnIiwiX3RoaXMkcHJvcHM1JHZpc1N0YXRlMiIsIm1vdXNlUG9zIiwibW91c2VQb3NpdGlvbiIsInBpbm5lZCIsInRvb2x0aXAiLCJsYXllckhvdmVyUHJvcCIsImdldExheWVySG92ZXJQcm9wIiwiY29tcGFyZU1vZGUiLCJwaW5uZWRQb3NpdGlvbiIsIngiLCJ5IiwibGF5ZXJQaW5uZWRQcm9wIiwiZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUiLCJsbmdMYXQiLCJfZ2V0SG92ZXJYWSIsInByaW1hcnlEYXRhIiwiY29tcGFyZVR5cGUiLCJjb21tb25Qcm9wIiwib25DbG9zZSIsIl9vbkNsb3NlTWFwUG9wb3ZlciIsInpvb20iLCJjYW52YXMiLCJ1bmRlZmluZWQiLCJmcm96ZW4iLCJpc0Jhc2UiLCJvblNldEZlYXR1cmVzIiwic2V0RmVhdHVyZXMiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJmZWF0dXJlQ29sbGVjdGlvbiIsInNjcmVlbkNvb3JkIiwicHJvamVjdCIsIl9yZW5kZXJEZWNrT3ZlcmxheSIsImxheWVyc0ZvckRlY2siLCJfdGhpcyRjb250ZXh0MiIsIl90aGlzMiIsIm9wdGlvbnMiLCJwcmltYXJ5TWFwIiwiX3RoaXMkcHJvcHM2IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJkZWNrR2xQcm9wcyIsIm1hcENvbnRyb2xzIiwiZGVja1JlbmRlckNhbGxiYWNrcyIsImdlbmVyYXRlRGVja0dMTGF5ZXJzIiwiaXNJbnRlcmFjdGl2ZSIsImNoaWxkcmVuIiwibWFwRHJhdyIsIl9yZWY2IiwiX3JlZjYkYWN0aXZlIiwiYWN0aXZlIiwiZWRpdG9yTWVudUFjdGl2ZSIsImlzRWRpdG9yRHJhd2luZ01vZGUiLCJFZGl0b3JMYXllclV0aWxzIiwiaXNEcmF3aW5nQWN0aXZlIiwibW9kZSIsImludGVybmFsVmlld1N0YXRlIiwiaW50ZXJuYWxNYXBTdGF0ZSIsImVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3RvciIsImdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kIiwiY29tcHV0ZURlY2tMYXllcnMiLCJkZWNrR2xMYXllcnMiLCJlZGl0b3JJbmZvIiwic2VsZWN0ZWRGZWF0dXJlSW5kZXhlcyIsInNlbGVjdGVkRmVhdHVyZUluZGV4QXJyYXlTZWxlY3RvciIsIl9vbkxheWVySG92ZXIiLCJvblNldExheWVyRG9tYWluIiwiX29uTGF5ZXJTZXREb21haW4iLCJvbkZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJfb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJvbldNU0ZlYXR1cmVJbmZvIiwiX29uV01TRmVhdHVyZUluZm8iLCJvblJlZHJhd05lZWRlZCIsIl9vblJlZHJhd05lZWRlZCIsIm9uRml0Qm91bmRzIiwiX29uRml0Qm91bmRzIiwiZXh0cmFEZWNrUGFyYW1zIiwiZ2V0VG9vbHRpcCIsImlzTmFOIiwiZ2V0Q3Vyc29yIiwiX3JlZjciLCJpc0RyYWdnaW5nIiwiZWRpdG9yQ3Vyc29yIiwiZWZmZWN0cyIsImNvbXB1dGVEZWNrRWZmZWN0cyIsInZpZXdzIiwiTWFwVmlldyIsImxlZ2FjeU1ldGVyU2l6ZXMiLCJhbGxEZWNrR2xQcm9wcyIsInBpY2tpbmdSYWRpdXMiLCJERUZBVUxUX1BJQ0tJTkdfUkFESVVTIiwicGFyYW1ldGVycyIsImdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzIiwibGF5ZXJCbGVuZGluZyIsIm9uRGVja1JlbmRlciIsIl9vbk1vdXNlTW92ZURlYm91bmNlZCIsIm9uTG9hZCIsIm9uRGVja0xvYWQiLCJjb250cm9sbGVyIiwiZG91YmxlQ2xpY2tab29tIiwiZHJhZ1JvdGF0ZSIsImluaXRpYWxWaWV3U3RhdGUiLCJvbkJlZm9yZVJlbmRlciIsIl9vbkJlZm9yZVJlbmRlciIsIl9vblZpZXdwb3J0Q2hhbmdlIiwib25Ib3ZlciIsInJlcyIsIl9vbkxheWVySG92ZXJEZWJvdW5jZWQiLCJvbkNsaWNrIiwic3JjRXZlbnQiLCJvbkVycm9yIiwiX29uRGVja0Vycm9yIiwiY29tcCIsImRlY2siLCJvbkRldmljZUluaXRpYWxpemVkIiwib25BZnRlclJlbmRlciIsIm9uRGVja0FmdGVyUmVuZGVyIiwiYW55QWN0aXZlTGF5ZXJMb2FkaW5nIiwiYXJlQW55RGVja0xheWVyc0xvYWRpbmciLCJfb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSIsIm1hcGJveExheWVycyIsIm1hcGJveExheWVyc1NlbGVjdG9yIiwidXBkYXRlTWFwYm94TGF5ZXJzIiwiX3JlbmRlck1hcGJveE92ZXJsYXlzIiwiaXNTdHlsZUxvYWRlZCIsIl9yZW5kZXJNYXAiLCJfbWFwU3R5bGUkbWFwU3R5bGVzIiwiX2dldEFwcGxpY2F0aW9uQ29uZmlnIiwiX3RoaXMkY29udGV4dDMiLCJfdGhpcyRwcm9wcyRpc0V4cG9ydCIsIl9tYXBTdHlsZSRib3R0b21NYXBTdCIsIl90aGlzJHByb3BzNyIsIl90aGlzJHByb3BzNyRNYXBDb21wbyIsIk1hcENvbXBvbmVudCIsIk1hcCIsImxvY2FsZSIsImJvdHRvbU1hcENvbnRhaW5lclByb3BzIiwidG9wTWFwQ29udGFpbmVyUHJvcHMiLCJfdGhpcyRwcm9wczckZGF0YXNldEEiLCJfdGhpcyRwcm9wczckY29udGFpbmUiLCJpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlIiwiYWN0aXZlU2lkZVBhbmVsIiwic2lkZVBhbmVsV2lkdGgiLCJsYXllcnNGb3JEZWNrU2VsZWN0b3IiLCJjdXJyZW50U3R5bGUiLCJtYXBTdHlsZXMiLCJiYXNlTWFwTGlicmFyeU5hbWUiLCJnZXRCYXNlTWFwTGlicmFyeSIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwibWFwUHJvcHMiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJtYXBib3hBY2Nlc3NUb2tlbiIsImFjY2Vzc1Rva2VuIiwibWFwTGliIiwiZ2V0TWFwTGliIiwidHJhbnNmb3JtUmVxdWVzdCIsImhhc0dlb2NvZGVyTGF5ZXIiLCJmaW5kIiwibCIsIkdFT0NPREVSX0xBWUVSX0lEIiwiaXNTcGxpdCIsImJvdHRvbU1hcFN0eWxlIiwiRU1QVFlfTUFQQk9YX1NUWUxFIiwiX3NldE1hcFJlZiIsImF2YWlsYWJsZUxvY2FsZXMiLCJyZWFkT25seSIsInNjYWxlIiwibG9nb0NvbXBvbmVudCIsImdlb2NvZGVyIiwibWFwQ29udHJvbFRvcCIsIm9uVG9nZ2xlUGVyc3BlY3RpdmUiLCJ0b2dnbGVQZXJzcGVjdGl2ZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvblNldEVkaXRvck1vZGUiLCJzZXRFZGl0b3JNb2RlIiwib25TZXRMb2NhbGUiLCJzZXRMb2NhbGUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5Iiwib25MYXllclZpc0NvbmZpZ0NoYW5nZSIsImxheWVyVmlzQ29uZmlnQ2hhbmdlIiwib25Ub2dnbGVMYXllclZpc2liaWxpdHkiLCJfaGFuZGxlVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5IiwibWFwSGVpZ2h0Iiwic2V0TWFwQ29udHJvbFNldHRpbmdzIiwib25EZWxldGVGZWF0dXJlIiwiZGVsZXRlRmVhdHVyZSIsIm9uU2VsZWN0Iiwib25Ub2dnbGVQb2x5Z29uRmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckxheWVyIiwidmlzaWJsZSIsInRvcE1hcFN0eWxlIiwic3RhdGUiLCJyZW5kZXIiLCJfbWFwU3R5bGUkbWFwU3R5bGVzMiIsIl9nZXRBcHBsaWNhdGlvbkNvbmZpZzIiLCJfdGhpcyRwcm9wczgiLCJtYXBDb250ZW50Iiwic3R5bGVTZWxlY3RvciIsIm9uQ29udGV4dE1lbnUiLCJwcmV2ZW50RGVmYXVsdCIsIm92ZXJsYXlCbGVuZGluZyIsIkNvbXBvbmVudCIsIk1hcFZpZXdTdGF0ZUNvbnRleHQiLCJ3aXRoVGhlbWUiXSwic291cmNlcyI6WyIuLi9zcmMvbWFwLWNvbnRhaW5lci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gbGlicmFyaWVzXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZiwgdXNlTWVtb30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge3dpdGhUaGVtZX0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtNYXAsIE1hcFJlZn0gZnJvbSAncmVhY3QtbWFwLWdsJztcbmltcG9ydCB7UGlja2luZ0luZm8sIE1hcFZpZXd9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IERlY2tHTCBmcm9tICdAZGVjay5nbC9yZWFjdCc7XG5pbXBvcnQge2NyZWF0ZVNlbGVjdG9yLCBTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHt1c2VEcm9wcGFibGV9IGZyb20gJ0BkbmQta2l0L2NvcmUnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5cbmltcG9ydCB7VmlzU3RhdGVBY3Rpb25zLCBNYXBTdGF0ZUFjdGlvbnMsIFVJU3RhdGVBY3Rpb25zfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgTWFwUG9wb3ZlckZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLXBvcG92ZXInO1xuaW1wb3J0IE1hcENvbnRyb2xGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1jb250cm9sJztcbmltcG9ydCB7XG4gIFN0eWxlZE1hcENvbnRhaW5lcixcbiAgU3R5bGVkQXR0cmlidXRpb24sXG4gIEVuZEhvcml6b250YWxGbGV4Ym94XG59IGZyb20gJy4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IEVkaXRvckZhY3RvcnkgZnJvbSAnLi9lZGl0b3IvZWRpdG9yJztcblxuLy8gdXRpbHNcbmltcG9ydCB7XG4gIGdlbmVyYXRlTWFwYm94TGF5ZXJzLFxuICB1cGRhdGVNYXBib3hMYXllcnMsXG4gIExheWVyLFxuICBMYXllckJhc2VDb25maWcsXG4gIFZpc3VhbENoYW5uZWxEb21haW4sXG4gIEVkaXRvckxheWVyVXRpbHMsXG4gIEFnZ3JlZ2F0ZWRCaW5cbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgRGF0YXNldEF0dHJpYnV0aW9uLFxuICBNYXBTdGF0ZSxcbiAgTWFwQ29udHJvbHMsXG4gIFZpZXdwb3J0LFxuICBTcGxpdE1hcCxcbiAgU3BsaXRNYXBMYXllcnNcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBlcnJvck5vdGlmaWNhdGlvbixcbiAgaXNTdHlsZVVzaW5nTWFwYm94VGlsZXMsXG4gIGlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyxcbiAgZ2V0QmFzZU1hcExpYnJhcnksXG4gIEJhc2VNYXBMaWJyYXJ5Q29uZmlnLFxuICB0cmFuc2Zvcm1SZXF1ZXN0LFxuICBvYnNlcnZlRGltZW5zaW9ucyxcbiAgdW5vYnNlcnZlRGltZW5zaW9ucyxcbiAgaGFzTW9iaWxlV2lkdGgsXG4gIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsXG4gIG9uVmlld1BvcnRDaGFuZ2UsXG4gIGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlLFxuICBub3JtYWxpemVFdmVudCxcbiAgcmdiVG9IZXgsXG4gIGNvbXB1dGVEZWNrRWZmZWN0cyxcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIEdldE1hcFJlZixcbiAgZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnMsXG4gIHBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3Npbmdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge2JyZWFrUG9pbnRWYWx1ZXN9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcblxuLy8gZGVmYXVsdC1zZXR0aW5nc1xuaW1wb3J0IHtcbiAgRklMVEVSX1RZUEVTLFxuICBHRU9DT0RFUl9MQVlFUl9JRCxcbiAgVEhST1RUTEVfTk9USUZJQ0FUSU9OX1RJTUUsXG4gIERFRkFVTFRfUElDS0lOR19SQURJVVMsXG4gIE5PX01BUF9JRCxcbiAgRU1QVFlfTUFQQk9YX1NUWUxFXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFfSBmcm9tICcuL2NvbW1vbi9kbmQtbGF5ZXItaXRlbXMnO1xuLy8gQ29udGV4dHNcbmltcG9ydCB7TWFwVmlld1N0YXRlQ29udGV4dH0gZnJvbSAnLi9tYXAtdmlldy1zdGF0ZS1jb250ZXh0JztcblxuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAnLi9jb21tb24vZXJyb3ItYm91bmRhcnknO1xuaW1wb3J0IHtMT0NBTEVfQ09ERVN9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7XG4gIE1hcFN0eWxlLFxuICBhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyxcbiAgY29tcHV0ZURlY2tMYXllcnMsXG4gIGdldExheWVySG92ZXJQcm9wLFxuICBMYXllckhvdmVyUHJvcCxcbiAgcHJlcGFyZUxheWVyc0ZvckRlY2ssXG4gIHByZXBhcmVMYXllcnNUb1JlbmRlcixcbiAgTGF5ZXJzVG9SZW5kZXJcbn0gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQgTG9hZGluZ0luZGljYXRvciBmcm9tICcuL2xvYWRpbmctaW5kaWNhdG9yJztcblxuLy8gRGVib3VuY2UgdGhlIHByb3BhZ2F0aW9uIG9mIHZpZXdwb3J0IGNoYW5nZSBhbmQgbW91c2UgbW92ZXMgdG8gcmVkdXggc3RvcmUuXG4vLyBUaGlzIGlzIHRvIGF2b2lkIHRvbyBtYW55IHJlbmRlcnMgb2Ygb3RoZXIgY29tcG9uZW50cyB3aGVuIHRoZSBtYXAgaXNcbi8vIGJlaW5nIHBhbm5lZC96b29tZWQgKGxlYWRpbmcgdG8gbGFnZ3kgYmFzZW1hcC9kZWNrIHN5bmNpbmcpLlxuY29uc3QgREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFID0gMTA7XG5jb25zdCBERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSA9IDEwO1xuXG4vLyBIb3cgbG9uZyBzaG91bGQgd2Ugd2FpdCBiZXR3ZWVuIGxheWVyIGxvYWRpbmcgc3RhdGUgY2hhbmdlcyBiZWZvcmUgdHJpZ2dlcmluZyBhIFVJIHVwZGF0ZVxuY29uc3QgREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUgPSAxMDA7XG5cbmNvbnN0IE1BUF9TVFlMRToge1trZXk6IHN0cmluZ106IFJlYWN0LkNTU1Byb3BlcnRpZXN9ID0ge1xuICBjb250YWluZXI6IHtcbiAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnXG4gIH0sXG4gIHRvcDoge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJ1xuICB9XG59O1xuXG5jb25zdCBMT0NBTEVfQ09ERVNfQVJSQVkgPSBPYmplY3Qua2V5cyhMT0NBTEVfQ09ERVMpO1xuXG5pbnRlcmZhY2UgU3R5bGVkTWFwQ29udGFpbmVyUHJvcHMge1xuICAkbWl4QmxlbmRNb2RlPzogc3RyaW5nO1xuICAkbWFwTGliQ3NzQ2xhc3M6IHN0cmluZztcbn1cblxuY29uc3QgU3R5bGVkTWFwID0gc3R5bGVkKFN0eWxlZE1hcENvbnRhaW5lcik8U3R5bGVkTWFwQ29udGFpbmVyUHJvcHM+KFxuICAoeyRtaXhCbGVuZE1vZGUgPSAnbm9ybWFsJywgJG1hcExpYkNzc0NsYXNzfSkgPT4gYFxuICAjZGVmYXVsdC1kZWNrZ2wtb3ZlcmxheSB7XG4gICAgbWl4LWJsZW5kLW1vZGU6ICR7JG1peEJsZW5kTW9kZX07XG4gIH07XG4gICpbJHskbWFwTGliQ3NzQ2xhc3N9LWNoaWxkcmVuXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICB9XG5gXG4pO1xuXG5jb25zdCBNQVBCT1hHTF9TVFlMRV9VUERBVEUgPSAnc3R5bGUubG9hZCc7XG5jb25zdCBNQVBCT1hHTF9SRU5ERVIgPSAncmVuZGVyJztcbmNvbnN0IG5vcCA9ICgpID0+IHtcbiAgcmV0dXJuO1xufTtcblxudHlwZSBNYXBMaWJMb2dvUHJvcHMgPSB7XG4gIGJhc2VNYXBMaWJyYXJ5Q29uZmlnOiBCYXNlTWFwTGlicmFyeUNvbmZpZztcbn07XG5cbmNvbnN0IE1hcExpYkxvZ28gPSAoe2Jhc2VNYXBMaWJyYXJ5Q29uZmlnfTogTWFwTGliTG9nb1Byb3BzKSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPVwiYXR0cml0aW9uLWxvZ29cIj5cbiAgICBCYXNlbWFwIGJ5OlxuICAgIDxhXG4gICAgICBzdHlsZT17e21hcmdpbkxlZnQ6ICc1cHgnfX1cbiAgICAgIGNsYXNzTmFtZT17YCR7YmFzZU1hcExpYnJhcnlDb25maWcubWFwTGliQ3NzQ2xhc3N9LWN0cmwtbG9nb2B9XG4gICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBocmVmPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJVcmx9XG4gICAgICBhcmlhLWxhYmVsPXtgJHtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJOYW1lfSBsb2dvYH1cbiAgICAvPlxuICA8L2Rpdj5cbik7XG5cbmludGVyZmFjZSBTdHlsZWREcm9wcGFibGVQcm9wcyB7XG4gIGlzT3ZlcjogYm9vbGVhbjtcbn1cblxuY29uc3QgU3R5bGVkRHJvcHBhYmxlID0gc3R5bGVkLmRpdjxTdHlsZWREcm9wcGFibGVQcm9wcz5gXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLmlzT3ZlciA/IHByb3BzLnRoZW1lLmRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IgOiAnbm9uZScpfTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XG5cbmV4cG9ydCBjb25zdCBpc1NwbGl0U2VsZWN0b3IgPSBwcm9wcyA9PlxuICBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMgJiYgcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDE7XG5cbmV4cG9ydCBjb25zdCBEcm9wcGFibGUgPSAoe2NvbnRhaW5lcklkfSkgPT4ge1xuICBjb25zdCB7aXNPdmVyLCBzZXROb2RlUmVmfSA9IHVzZURyb3BwYWJsZSh7XG4gICAgaWQ6IGNvbnRhaW5lcklkLFxuICAgIGRhdGE6IHt0eXBlOiBEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFLCBpbmRleDogY29udGFpbmVySWR9LFxuICAgIGRpc2FibGVkOiAhY29udGFpbmVySWRcbiAgfSk7XG5cbiAgcmV0dXJuIDxTdHlsZWREcm9wcGFibGUgcmVmPXtzZXROb2RlUmVmfSBpc092ZXI9e2lzT3Zlcn0gLz47XG59O1xuXG5pbnRlcmZhY2UgU3R5bGVkRGF0YXNldEF0dHJpYnV0aW9uc0NvbnRhaW5lclByb3BzIHtcbiAgaXNQYWxtOiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyID0gc3R5bGVkLmRpdjxTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyUHJvcHM+YFxuICBtYXgtd2lkdGg6ICR7cHJvcHMgPT4gKHByb3BzLmlzUGFsbSA/ICcyMDBweCcgOiAnMzAwcHgnKX07XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5sYWJlbENvbG9yfTtcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XG4gIG1hcmdpbi1ib3R0b206IDFweDtcbiAgbGluZS1oZWlnaHQ6ICR7cHJvcHMgPT4gKHByb3BzLmlzUGFsbSA/ICcxZW0nIDogJzEuNGVtJyl9O1xuXG4gICY6aG92ZXIge1xuICAgIHdoaXRlLXNwYWNlOiBpbmhlcml0O1xuICB9XG5gO1xuXG5jb25zdCBEYXRhc2V0QXR0cmlidXRpb25zID0gKHtcbiAgZGF0YXNldEF0dHJpYnV0aW9ucyxcbiAgaXNQYWxtXG59OiB7XG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnM6IERhdGFzZXRBdHRyaWJ1dGlvbltdO1xuICBpc1BhbG06IGJvb2xlYW47XG59KSA9PiAoXG4gIDw+XG4gICAge2RhdGFzZXRBdHRyaWJ1dGlvbnM/Lmxlbmd0aCA/IChcbiAgICAgIDxTdHlsZWREYXRhc2V0QXR0cmlidXRpb25zQ29udGFpbmVyIGlzUGFsbT17aXNQYWxtfT5cbiAgICAgICAge2RhdGFzZXRBdHRyaWJ1dGlvbnMubWFwKChkcywgaWR4KSA9PiAoXG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIHsuLi4oZHMudXJsID8ge2hyZWY6IGRzLnVybH0gOiBudWxsKX1cbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgIGtleT17YCR7ZHMudGl0bGV9XyR7aWR4fWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2RzLnRpdGxlfVxuICAgICAgICAgICAge2lkeCAhPT0gZGF0YXNldEF0dHJpYnV0aW9ucy5sZW5ndGggLSAxID8gJywgJyA6IG51bGx9XG4gICAgICAgICAgPC9hPlxuICAgICAgICApKX1cbiAgICAgIDwvU3R5bGVkRGF0YXNldEF0dHJpYnV0aW9uc0NvbnRhaW5lcj5cbiAgICApIDogbnVsbH1cbiAgPC8+XG4pO1xuXG50eXBlIEF0dHJpYnV0aW9uUHJvcHMgPSB7XG4gIHNob3dCYXNlTWFwTGliTG9nbzogYm9vbGVhbjtcbiAgc2hvd09zbUJhc2VtYXBBdHRyaWJ1dGlvbjogYm9vbGVhbjtcbiAgZGF0YXNldEF0dHJpYnV0aW9uczogRGF0YXNldEF0dHJpYnV0aW9uW107XG4gIGJhc2VNYXBMaWJyYXJ5Q29uZmlnOiBCYXNlTWFwTGlicmFyeUNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGlvbjogUmVhY3QuRkM8QXR0cmlidXRpb25Qcm9wcz4gPSAoe1xuICBzaG93QmFzZU1hcExpYkxvZ28gPSB0cnVlLFxuICBzaG93T3NtQmFzZW1hcEF0dHJpYnV0aW9uID0gZmFsc2UsXG4gIGRhdGFzZXRBdHRyaWJ1dGlvbnMsXG4gIGJhc2VNYXBMaWJyYXJ5Q29uZmlnXG59OiBBdHRyaWJ1dGlvblByb3BzKSA9PiB7XG4gIGNvbnN0IGlzUGFsbSA9IGhhc01vYmlsZVdpZHRoKGJyZWFrUG9pbnRWYWx1ZXMpO1xuXG4gIGNvbnN0IG1lbW9pemVkQ29tcG9uZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2hvd0Jhc2VNYXBMaWJMb2dvKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkQXR0cmlidXRpb25cbiAgICAgICAgICBtYXBMaWJDc3NDbGFzcz17YmFzZU1hcExpYnJhcnlDb25maWcubWFwTGliQ3NzQ2xhc3N9XG4gICAgICAgICAgbWFwTGliQXR0cmlidXRpb25Dc3NDbGFzcz17YmFzZU1hcExpYnJhcnlDb25maWcubWFwTGliQXR0cmlidXRpb25Dc3NDbGFzc31cbiAgICAgICAgPlxuICAgICAgICAgIDxFbmRIb3Jpem9udGFsRmxleGJveD5cbiAgICAgICAgICAgIDxEYXRhc2V0QXR0cmlidXRpb25zIGRhdGFzZXRBdHRyaWJ1dGlvbnM9e2RhdGFzZXRBdHRyaWJ1dGlvbnN9IGlzUGFsbT17aXNQYWxtfSAvPlxuICAgICAgICAgICAge3Nob3dPc21CYXNlbWFwQXR0cmlidXRpb24gPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXR0cml0aW9uLWxpbmtcIj5cbiAgICAgICAgICAgICAgICB7ZGF0YXNldEF0dHJpYnV0aW9ucz8ubGVuZ3RoID8gPHNwYW4gY2xhc3NOYW1lPVwicGlwZS1zZXBhcmF0b3JcIj58PC9zcGFuPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGhyZWY9XCJodHRwOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgwqkgT3BlblN0cmVldE1hcFxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L0VuZEhvcml6b250YWxGbGV4Ym94PlxuICAgICAgICA8L1N0eWxlZEF0dHJpYnV0aW9uPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZEF0dHJpYnV0aW9uXG4gICAgICAgIG1hcExpYkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc31cbiAgICAgICAgbWFwTGliQXR0cmlidXRpb25Dc3NDbGFzcz17YmFzZU1hcExpYnJhcnlDb25maWcubWFwTGliQXR0cmlidXRpb25Dc3NDbGFzc31cbiAgICAgID5cbiAgICAgICAgPEVuZEhvcml6b250YWxGbGV4Ym94PlxuICAgICAgICAgIDxEYXRhc2V0QXR0cmlidXRpb25zIGRhdGFzZXRBdHRyaWJ1dGlvbnM9e2RhdGFzZXRBdHRyaWJ1dGlvbnN9IGlzUGFsbT17aXNQYWxtfSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYXR0cml0aW9uLWxpbmtcIj5cbiAgICAgICAgICAgIHtkYXRhc2V0QXR0cmlidXRpb25zPy5sZW5ndGggPyA8c3BhbiBjbGFzc05hbWU9XCJwaXBlLXNlcGFyYXRvclwiPnw8L3NwYW4+IDogbnVsbH1cbiAgICAgICAgICAgIHtpc1BhbG0gPyA8TWFwTGliTG9nbyBiYXNlTWFwTGlicmFyeUNvbmZpZz17YmFzZU1hcExpYnJhcnlDb25maWd9IC8+IDogbnVsbH1cbiAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2tlcGxlci5nbC9wb2xpY3kvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPlxuICAgICAgICAgICAgICDCqSBrZXBsZXIuZ2wgfHsnICd9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICB7IWlzUGFsbSA/IDxNYXBMaWJMb2dvIGJhc2VNYXBMaWJyYXJ5Q29uZmlnPXtiYXNlTWFwTGlicmFyeUNvbmZpZ30gLz4gOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0VuZEhvcml6b250YWxGbGV4Ym94PlxuICAgICAgPC9TdHlsZWRBdHRyaWJ1dGlvbj5cbiAgICApO1xuICB9LCBbXG4gICAgc2hvd0Jhc2VNYXBMaWJMb2dvLFxuICAgIHNob3dPc21CYXNlbWFwQXR0cmlidXRpb24sXG4gICAgZGF0YXNldEF0dHJpYnV0aW9ucyxcbiAgICBpc1BhbG0sXG4gICAgYmFzZU1hcExpYnJhcnlDb25maWdcbiAgXSk7XG5cbiAgcmV0dXJuIG1lbW9pemVkQ29tcG9uZW50cztcbn07XG5cbk1hcENvbnRhaW5lckZhY3RvcnkuZGVwcyA9IFtNYXBQb3BvdmVyRmFjdG9yeSwgTWFwQ29udHJvbEZhY3RvcnksIEVkaXRvckZhY3RvcnldO1xuXG50eXBlIE1hcGJveFN0eWxlID0gc3RyaW5nIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xudHlwZSBQcm9wU2VsZWN0b3I8Uj4gPSBTZWxlY3RvcjxNYXBDb250YWluZXJQcm9wcywgUj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwQ29udGFpbmVyUHJvcHMge1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgbWFwQ29udHJvbHM6IE1hcENvbnRyb2xzO1xuICBtYXBTdHlsZToge2JvdHRvbU1hcFN0eWxlPzogTWFwYm94U3R5bGU7IHRvcE1hcFN0eWxlPzogTWFwYm94U3R5bGV9ICYgTWFwU3R5bGU7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybDogc3RyaW5nO1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcblxuICAvLyBvcHRpb25hbFxuICBwcmltYXJ5PzogYm9vbGVhbjsgLy8gcHJpbWFyeSBvbmUgd2lsbCBiZSByZXBvcnRpbmcgaXRzIHNpemUgdG8gYXBwU3RhdGVcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpc0V4cG9ydD86IGJvb2xlYW47XG4gIC8vIG9uTWFwU3R5bGVMb2FkZWQ/OiAobWFwOiBtYXBsaWJyZWdsLk1hcCB8IFJldHVyblR5cGU8TWFwUmVmWydnZXRNYXAnXT4gfCBudWxsKSA9PiB2b2lkO1xuICBvbk1hcFN0eWxlTG9hZGVkPzogKG1hcDogR2V0TWFwUmVmIHwgbnVsbCkgPT4gdm9pZDtcbiAgb25NYXBSZW5kZXI/OiAobWFwOiBHZXRNYXBSZWYgfCBudWxsKSA9PiB2b2lkO1xuICBnZXRNYXBib3hSZWY/OiAobWFwYm94PzogTWFwUmVmIHwgbnVsbCwgaW5kZXg/OiBudW1iZXIpID0+IHZvaWQ7XG4gIGluZGV4PzogbnVtYmVyO1xuICBkZWxldGVNYXBMYWJlbHM/OiAoY29udGFpbmVySWQ6IHN0cmluZywgbGF5ZXJJZDogc3RyaW5nKSA9PiB2b2lkO1xuICBjb250YWluZXJJZD86IG51bWJlcjtcblxuICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlPzogYm9vbGVhbjtcbiAgYWN0aXZlU2lkZVBhbmVsOiBzdHJpbmcgfCBudWxsO1xuICBzaWRlUGFuZWxXaWR0aD86IG51bWJlcjtcblxuICBsb2NhbGU/OiBhbnk7XG4gIHRoZW1lPzogYW55O1xuICBlZGl0b3I/OiBhbnk7XG4gIE1hcENvbXBvbmVudD86IHR5cGVvZiBNYXA7XG4gIGRlY2tHbFByb3BzPzogYW55O1xuICBvbkRlY2tJbml0aWFsaXplZD86IChhOiBhbnksIGI6IGFueSkgPT4gdm9pZDtcbiAgb25WaWV3U3RhdGVDaGFuZ2U/OiAodmlld3BvcnQ6IFZpZXdwb3J0KSA9PiB2b2lkO1xuXG4gIHRvcE1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIHRyYW5zZm9ybVJlcXVlc3Q/OiAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IHN0cmluZykgPT4ge3VybDogc3RyaW5nfTtcblxuICBkYXRhc2V0QXR0cmlidXRpb25zPzogRGF0YXNldEF0dHJpYnV0aW9uW107XG5cbiAgZ2VuZXJhdGVNYXBib3hMYXllcnM/OiB0eXBlb2YgZ2VuZXJhdGVNYXBib3hMYXllcnM7XG4gIGdlbmVyYXRlRGVja0dMTGF5ZXJzPzogdHlwZW9mIGNvbXB1dGVEZWNrTGF5ZXJzO1xuXG4gIG9uTW91c2VNb3ZlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50ICYge2xuZ0xhdD86IFtudW1iZXIsIG51bWJlcl19KSA9PiB2b2lkO1xuXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBkZWNrUmVuZGVyQ2FsbGJhY2tzPzoge1xuICAgIG9uRGVja0xvYWQ/OiAoKSA9PiB2b2lkO1xuICAgIG9uRGVja1JlbmRlcj86IChkZWNrUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw7XG4gICAgb25EZWNrQWZ0ZXJSZW5kZXI/OiAoZGVja1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gYW55O1xuICB9O1xuXG4gIC8vIE9wdGlvbmFsOiBvdmVycmlkZSBsZWdlbmQgaGVhZGVyIGxvZ28gaW4gbWFwIGNvbnRyb2xzICh1c2VkIGJ5IGltYWdlIGV4cG9ydClcbiAgbG9nb0NvbXBvbmVudD86IFJlYWN0LkZDIHwgUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNYXBDb250YWluZXJGYWN0b3J5KFxuICBNYXBQb3BvdmVyOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBQb3BvdmVyRmFjdG9yeT4sXG4gIE1hcENvbnRyb2w6IFJldHVyblR5cGU8dHlwZW9mIE1hcENvbnRyb2xGYWN0b3J5PixcbiAgRWRpdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBFZGl0b3JGYWN0b3J5PlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxNYXBDb250YWluZXJQcm9wcz4ge1xuICBjbGFzcyBNYXBDb250YWluZXIgZXh0ZW5kcyBDb21wb25lbnQ8TWFwQ29udGFpbmVyUHJvcHM+IHtcbiAgICBkaXNwbGF5TmFtZSA9ICdNYXBDb250YWluZXInO1xuXG4gICAgcHJpdmF0ZSBhbnlBY3RpdmVMYXllckxvYWRpbmcgPSBmYWxzZTtcblxuICAgIHN0YXRpYyBjb250ZXh0VHlwZSA9IE1hcFZpZXdTdGF0ZUNvbnRleHQ7XG5cbiAgICBkZWNsYXJlIGNvbnRleHQ6IFJlYWN0LkNvbnRleHRUeXBlPHR5cGVvZiBNYXBWaWV3U3RhdGVDb250ZXh0PjtcblxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgICBNYXBDb21wb25lbnQ6IE1hcCxcbiAgICAgIGRlY2tHbFByb3BzOiB7fSxcbiAgICAgIGluZGV4OiAwLFxuICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgcGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZygpO1xuICAgIH1cblxuICAgIHN0YXRlID0ge1xuICAgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGF0dHJpYnV0aW9uIHNob3VsZCBiZSB2aXNpYmxlIGJhc2VkIHRoZSByZXN1bHQgb2YgbG9hZGluZyB0aGUgbWFwIHN0eWxlXG4gICAgICBzaG93QmFzZU1hcEF0dHJpYnV0aW9uOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKCF0aGlzLl9yZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBvYnNlcnZlRGltZW5zaW9ucyh0aGlzLl9yZWYuY3VycmVudCwgdGhpcy5faGFuZGxlUmVzaXplKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIC8vIHVuYmluZCBtYXBib3hnbCBldmVudCBsaXN0ZW5lclxuICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXA/Lm9mZihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIG5vcCk7XG4gICAgICAgIHRoaXMuX21hcD8ub2ZmKE1BUEJPWEdMX1JFTkRFUiwgbm9wKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdW5vYnNlcnZlRGltZW5zaW9ucyh0aGlzLl9yZWYuY3VycmVudCk7XG4gICAgfVxuXG4gICAgX2RlY2s6IGFueSA9IG51bGw7XG4gICAgX21hcDogR2V0TWFwUmVmIHwgbnVsbCA9IG51bGw7XG4gICAgX3JlZiA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcbiAgICBfZGVja0dMRXJyb3JzRWxhcHNlZDoge1tpZDogc3RyaW5nXTogbnVtYmVyfSA9IHt9O1xuXG4gICAgcHJldmlvdXNMYXllcnMgPSB7XG4gICAgICAvLyBbbGF5ZXJzLmlkXTogbWFwYm94TGF5ZXJDb25maWdcbiAgICB9O1xuXG4gICAgX2hhbmRsZVJlc2l6ZSA9IGRpbWVuc2lvbnMgPT4ge1xuICAgICAgY29uc3Qge3ByaW1hcnksIGluZGV4fSA9IHRoaXMucHJvcHM7XG4gICAgICBpZiAocHJpbWFyeSkge1xuICAgICAgICBjb25zdCB7bWFwU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChkaW1lbnNpb25zICYmIGRpbWVuc2lvbnMud2lkdGggPiAwICYmIGRpbWVuc2lvbnMuaGVpZ2h0ID4gMCkge1xuICAgICAgICAgIG1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAoZGltZW5zaW9ucywgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxheWVyc1NlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVycyddPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmxheWVycztcbiAgICBsYXllckRhdGFTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllcnMnXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllckRhdGE7XG4gICAgc3BsaXRNYXBTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFNwbGl0TWFwW10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuc3BsaXRNYXBzO1xuICAgIHNwbGl0TWFwSW5kZXhTZWxlY3RvcjogUHJvcFNlbGVjdG9yPG51bWJlciB8IHVuZGVmaW5lZD4gPSBwcm9wcyA9PiBwcm9wcy5pbmRleDtcbiAgICBtYXBMYXllcnNTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFNwbGl0TWFwTGF5ZXJzIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuc3BsaXRNYXBTZWxlY3RvcixcbiAgICAgIHRoaXMuc3BsaXRNYXBJbmRleFNlbGVjdG9yLFxuICAgICAgZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwc1xuICAgICk7XG4gICAgbGF5ZXJPcmRlclNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8VmlzU3RhdGVbJ2xheWVyT3JkZXInXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllck9yZGVyO1xuICAgIGxheWVyc1RvUmVuZGVyU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxMYXllcnNUb1JlbmRlcj4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgdGhpcy5tYXBMYXllcnNTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNUb1JlbmRlclxuICAgICk7XG4gICAgbGF5ZXJzRm9yRGVja1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHByZXBhcmVMYXllcnNGb3JEZWNrXG4gICAgKTtcbiAgICBmaWx0ZXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5maWx0ZXJzO1xuICAgIHBvbHlnb25GaWx0ZXJzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcih0aGlzLmZpbHRlcnNTZWxlY3RvciwgZmlsdGVycyA9PlxuICAgICAgZmlsdGVycy5maWx0ZXIoZiA9PiBmLnR5cGUgPT09IEZJTFRFUl9UWVBFUy5wb2x5Z29uICYmIGYuZW5hYmxlZCAhPT0gZmFsc2UpXG4gICAgKTtcbiAgICBmZWF0dXJlc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZWRpdG9yLmZlYXR1cmVzO1xuICAgIHNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZWRpdG9yLnNlbGVjdGVkRmVhdHVyZTtcbiAgICBmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLnBvbHlnb25GaWx0ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmZlYXR1cmVzU2VsZWN0b3IsXG4gICAgICAocG9seWdvbkZpbHRlcnMsIGZlYXR1cmVzKSA9PiAoe1xuICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICBmZWF0dXJlczogZmVhdHVyZXMuY29uY2F0KHBvbHlnb25GaWx0ZXJzLm1hcChmID0+IGYudmFsdWUpKVxuICAgICAgfSlcbiAgICApO1xuICAgIC8vIEB0cy1pZ25vcmUgLSBObyBvdmVybG9hZCBtYXRjaGVzIHRoaXMgY2FsbFxuICAgIHNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvcixcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IsXG4gICAgICAoY29sbGVjdGlvbiwgc2VsZWN0ZWRGZWF0dXJlKSA9PlxuICAgICAgICBjb2xsZWN0aW9uLmZlYXR1cmVzLmZpbmRJbmRleChmID0+IGYuaWQgPT09IHNlbGVjdGVkRmVhdHVyZT8uaWQpXG4gICAgKTtcbiAgICBzZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgICh2YWx1ZTogbnVtYmVyKSA9PiB2YWx1ZSxcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgMCA/IFtdIDogW3ZhbHVlXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMuZ2VuZXJhdGVNYXBib3hMYXllcnMgPz8gZ2VuZXJhdGVNYXBib3hMYXllcnM7XG5cbiAgICBtYXBib3hMYXllcnNTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyT3JkZXJTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yLFxuICAgICAgKGxheWVyLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGxheWVyc1RvUmVuZGVyLCBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kKSA9PlxuICAgICAgICBnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kKGxheWVyLCBsYXllckRhdGEsIGxheWVyT3JkZXIsIGxheWVyc1RvUmVuZGVyKVxuICAgICk7XG5cbiAgICAvLyBtZXJnZSBpbiBhIGJhY2tncm91bmQtY29sb3Igc3R5bGUgaWYgdGhlIGJhc2VtYXAgY2hvaWNlIGlzIE5PX01BUF9JRFxuICAgIC8vIHVzZWQgYnkgPFN0eWxlZE1hcD4gaW5saW5lIHN0eWxlIHByb3BcbiAgICBtYXBTdHlsZVR5cGVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZTtcbiAgICBtYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3R5bGUuYmFja2dyb3VuZENvbG9yO1xuICAgIHN0eWxlU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubWFwU3R5bGVUeXBlU2VsZWN0b3IsXG4gICAgICB0aGlzLm1hcFN0eWxlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IsXG4gICAgICAoc3R5bGVUeXBlLCBiYWNrZ3JvdW5kQ29sb3IpID0+ICh7XG4gICAgICAgIC4uLk1BUF9TVFlMRS5jb250YWluZXIsXG4gICAgICAgIC4uLihzdHlsZVR5cGUgPT09IE5PX01BUF9JRCA/IHtiYWNrZ3JvdW5kQ29sb3I6IHJnYlRvSGV4KGJhY2tncm91bmRDb2xvcil9IDoge30pXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvKiBjb21wb25lbnQgcHJpdmF0ZSBmdW5jdGlvbnMgKi9cbiAgICBfb25DbG9zZU1hcFBvcG92ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2sobnVsbCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXIgPSAoX2lkeDogbnVtYmVyLCBpbmZvOiBQaWNraW5nSW5mbzxhbnk+IHwgbnVsbCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckhvdmVyKGluZm8sIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgIH07XG5cbiAgICBfb25MYXllclNldERvbWFpbiA9IChcbiAgICAgIGlkeDogbnVtYmVyLFxuICAgICAgdmFsdWU6IG51bWJlcltdIHwge2RvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjsgYWdncmVnYXRlZEJpbnM6IEFnZ3JlZ2F0ZWRCaW5bXX1cbiAgICApID0+IHtcbiAgICAgIC8vIGRlY2suZ2wgOSBuYXRpdmUgYWdncmVnYXRpb24gbGF5ZXJzIChHcmlkLCBIZXhhZ29uKSBwYXNzIFttaW4sIG1heF0sXG4gICAgICAvLyB3aGlsZSBDbHVzdGVyTGF5ZXIncyBDUFVBZ2dyZWdhdG9yIHN0aWxsIHBhc3NlcyB7ZG9tYWluLCBhZ2dyZWdhdGVkQmluc30uXG4gICAgICBjb25zdCBjb25maWcgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHtjb2xvckRvbWFpbjogdmFsdWUgYXMgVmlzdWFsQ2hhbm5lbERvbWFpbn1cbiAgICAgICAgOiB7Y29sb3JEb21haW46IHZhbHVlLmRvbWFpbiwgYWdncmVnYXRlZEJpbnM6IHZhbHVlLmFnZ3JlZ2F0ZWRCaW5zfTtcblxuICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdO1xuICAgICAgaWYgKCFsYXllcikgcmV0dXJuO1xuXG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZShsYXllciwgY29uZmlnIGFzIFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPik7XG4gICAgfTtcblxuICAgIF9vblJlZHJhd05lZWRlZCA9IChfaWR4OiBudW1iZXIpID0+IHtcbiAgICAgIC8vIHVwZGF0ZU1hcFVwZGF0ZXIgYWx3YXlzIHJldHVybnMgYSBuZXcgc3RhdGUgb2JqZWN0IHJlZmVyZW5jZSwgd2hpY2ggdHJpZ2dlcnMgcmUtcmVuZGVyXG4gICAgICBjb25zdCB7bWFwU3RhdGVBY3Rpb25zLCBpbmRleH0gPSB0aGlzLnByb3BzO1xuICAgICAgbWFwU3RhdGVBY3Rpb25zLnVwZGF0ZU1hcCh7fSwgaW5kZXgpO1xuICAgIH07XG5cbiAgICBfb25GaXRCb3VuZHMgPSAoX2lkeDogbnVtYmVyLCBib3VuZHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLm1hcFN0YXRlQWN0aW9ucy5maXRCb3VuZHMoYm91bmRzKTtcbiAgICB9O1xuXG4gICAgX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlID0gKGlkeCwgZXZlbnQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSh0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdLCBldmVudCk7XG4gICAgfTtcblxuICAgIF9vbldNU0ZlYXR1cmVJbmZvID0gKFxuICAgICAgaWR4OiBudW1iZXIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZlYXR1cmVJbmZvOiBBcnJheTx7bmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nfT4gfCBzdHJpbmcgfCBudWxsO1xuICAgICAgICBjb29yZGluYXRlPzogW251bWJlciwgbnVtYmVyXSB8IG51bGw7XG4gICAgICB9XG4gICAgKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy53bXNGZWF0dXJlSW5mbyhcbiAgICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZS5sYXllcnNbaWR4XSxcbiAgICAgICAgZGF0YS5mZWF0dXJlSW5mbyxcbiAgICAgICAgZGF0YS5jb29yZGluYXRlXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIgPSBsYXllcklkID0+IHtcbiAgICAgIGNvbnN0IHtpbmRleDogbWFwSW5kZXggPSAwLCB2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgIHZpc1N0YXRlQWN0aW9ucy50b2dnbGVMYXllckZvck1hcChtYXBJbmRleCwgbGF5ZXJJZCk7XG4gICAgfTtcblxuICAgIF9vbk1hcGJveFN0eWxlVXBkYXRlID0gdXBkYXRlID0+IHtcbiAgICAgIC8vIGZvcmNlIHJlZnJlc2ggbWFwYm94Z2wgbGF5ZXJzXG4gICAgICB0aGlzLnByZXZpb3VzTGF5ZXJzID0ge307XG4gICAgICB0aGlzLl91cGRhdGVNYXBib3hMYXllcnMoKTtcblxuICAgICAgaWYgKHVwZGF0ZSAmJiB1cGRhdGUuc3R5bGUpIHtcbiAgICAgICAgLy8gTm8gYXR0cmlidXRpb25zIGFyZSBuZWVkZWQgaWYgdGhlIHN0eWxlIGRvZXNuJ3QgcmVmZXJlbmNlIE1hcGJveCBzb3VyY2VzXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIHNob3dCYXNlTWFwQXR0cmlidXRpb246XG4gICAgICAgICAgICBpc1N0eWxlVXNpbmdNYXBib3hUaWxlcyh1cGRhdGUuc3R5bGUpIHx8ICFpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXModXBkYXRlLnN0eWxlKVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbk1hcFN0eWxlTG9hZGVkKHRoaXMuX21hcCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9zZXRNYXBSZWYgPSBtYXBSZWYgPT4ge1xuICAgICAgLy8gSGFuZGxlIGNoYW5nZSBvZiB0aGUgbWFwIGxpYnJhcnlcbiAgICAgIGlmICh0aGlzLl9tYXAgJiYgbWFwUmVmKSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IG1hcFJlZi5nZXRNYXAoKTtcbiAgICAgICAgaWYgKG1hcCAmJiB0aGlzLl9tYXAgIT09IG1hcCkge1xuICAgICAgICAgIHRoaXMuX21hcD8ub2ZmKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgbm9wKTtcbiAgICAgICAgICB0aGlzLl9tYXA/Lm9mZihNQVBCT1hHTF9SRU5ERVIsIG5vcCk7XG4gICAgICAgICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICAvLyBpIG5vdGljZWQgaW4gY2VydGFpbiBjb250ZXh0IHdlIGRvbid0IGFjY2VzcyB0aGUgYWN0dWFsIG1hcCBlbGVtZW50XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJpbmQgbWFwYm94Z2wgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgdGhpcy5fbWFwLm9uKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgdGhpcy5fb25NYXBib3hTdHlsZVVwZGF0ZSk7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKE1BUEJPWEdMX1JFTkRFUiwgKCkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbk1hcFJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vbk1hcFJlbmRlcih0aGlzLl9tYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmdldE1hcGJveFJlZikge1xuICAgICAgICAvLyBUaGUgcGFyZW50IGNvbXBvbmVudCBjYW4gZ2FpbiBhY2Nlc3MgdG8gb3VyIE1hcGJveEdsTWFwIGJ5XG4gICAgICAgIC8vIHByb3ZpZGluZyB0aGlzIGNhbGxiYWNrLiBOb3RlIHRoYXQgJ21hcGJveCcgd2lsbCBiZSBudWxsIHdoZW4gdGhlXG4gICAgICAgIC8vIHJlZiBpcyB1bnNldCAoZS5nLiB3aGVuIGEgc3BsaXQgbWFwIGlzIGNsb3NlZCkuXG4gICAgICAgIHRoaXMucHJvcHMuZ2V0TWFwYm94UmVmKG1hcFJlZiwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9vbkRlY2tJbml0aWFsaXplZChkZXZpY2UpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLm9uRGVja0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQodGhpcy5fZGVjaywgZGV2aWNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAxKSBBbGxvdyBlZmZlY3RzIG9ubHkgZm9yIHRoZSBmaXJzdCB2aWV3LlxuICAgICAqIDIpIFByZXZlbnQgZWZmZWN0OnByZVJlbmRlciBjYWxsIHdpdGhvdXQgdmFsaWQgZ2VuZXJhdGVkIHZpZXdwb3J0cy5cbiAgICAgKiBAcGFyYW0gdmlld0luZGV4IFZpZXcgaW5kZXguXG4gICAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGVmZmVjdHMgY2FuIGJlIHVzZWQuXG4gICAgICovXG4gICAgX2lzT0tUb1JlbmRlckVmZmVjdHModmlld0luZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gIXZpZXdJbmRleCAmJiBCb29sZWFuKHRoaXMuX2RlY2s/LnZpZXdNYW5hZ2VyPy5fdmlld3BvcnRzPy5sZW5ndGgpO1xuICAgIH1cblxuICAgIF9vbkJlZm9yZVJlbmRlciA9ICgpID0+IHtcbiAgICAgIC8vIG5vLW9wXG4gICAgfTtcblxuICAgIF9vbkRlY2tFcnJvciA9IChlcnJvciwgbGF5ZXIpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5tZXNzYWdlIHx8ICd1bmtub3duLWVycm9yJztcbiAgICAgIGNvbnN0IGxheWVyTWVzc2FnZSA9IGxheWVyPy5pZCA/IGAgaW4gJHtsYXllci5pZH0gbGF5ZXJgIDogJyc7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2VGdWxsID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSAnV2ViR0wgY29udGV4dCBpcyBsb3N0J1xuICAgICAgICAgID8gJ1lvdXIgR1BVIHdhcyBkaXNjb25uZWN0ZWQuIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3VyIGNvbXB1dGVyIGdvZXMgdG8gc2xlZXAuIEl0IGNhbiBhbHNvIG9jY3VyIGZvciBvdGhlciByZWFzb25zLCBzdWNoIGFzIGlmIHlvdSBhcmUgcnVubmluZyB0b28gbWFueSBHUFUgYXBwbGljYXRpb25zLidcbiAgICAgICAgICA6IGBBbiBlcnJvciBpbiBkZWNrLmdsOiAke2Vycm9yTWVzc2FnZX0ke2xheWVyTWVzc2FnZX0uYDtcblxuICAgICAgLy8gVGhyb3R0bGUgZXJyb3Igbm90aWZpY2F0aW9ucywgYXMgUmVhY3QgZG9lc24ndCBsaWtlIHRvbyBtYW55IHN0YXRlIGNoYW5nZXMgZnJvbSBoZXJlLlxuICAgICAgY29uc3QgbGFzdFNob3duID0gdGhpcy5fZGVja0dMRXJyb3JzRWxhcHNlZFtlcnJvck1lc3NhZ2VGdWxsXTtcbiAgICAgIGlmICghbGFzdFNob3duIHx8IGxhc3RTaG93biA8IERhdGUubm93KCkgLSBUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSkge1xuICAgICAgICB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkW2Vycm9yTWVzc2FnZUZ1bGxdID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBNYXJrIGxheWVyIGFzIGludmFsaWRcbiAgICAgICAgbGV0IGV4dHJhTGF5ZXJNZXNzYWdlID0gJyc7XG4gICAgICAgIGNvbnN0IHt2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgaWYgKGxheWVyKSB7XG4gICAgICAgICAgbGV0IHRvcE1vc3RMYXllciA9IGxheWVyO1xuICAgICAgICAgIHdoaWxlICh0b3BNb3N0TGF5ZXIucGFyZW50KSB7XG4gICAgICAgICAgICB0b3BNb3N0TGF5ZXIgPSB0b3BNb3N0TGF5ZXIucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodG9wTW9zdExheWVyLnByb3BzPy5pZCkge1xuICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zLmxheWVyU2V0SXNWYWxpZCh0b3BNb3N0TGF5ZXIsIGZhbHNlKTtcbiAgICAgICAgICAgIGV4dHJhTGF5ZXJNZXNzYWdlID0gJ1RoZSBsYXllciBoYXMgYmVlbiBkaXNhYmxlZCBhbmQgaGlnaGxpZ2h0ZWQuJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgbmV3IGVycm9yIG5vdGlmaWNhdGlvbiBvciB1cGRhdGUgZXhpc3Rpbmcgb25lIHdpdGggc2FtZSBpZC5cbiAgICAgICAgLy8gVXBkYXRlIGlzIHJlcXVpcmVkIHRvIHByZXNlcnZlIHRoZSBvcmRlciBvZiBub3RpZmljYXRpb25zIGFzIHRoZXkgcHJvYmFibHkgYXJlIGdvaW5nIHRvIFwianVtcFwiIGJhc2VkIG9uIG9yZGVyIG9mIGVycm9ycy5cbiAgICAgICAgY29uc3Qge3VpU3RhdGVBY3Rpb25zfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHVpU3RhdGVBY3Rpb25zLmFkZE5vdGlmaWNhdGlvbihcbiAgICAgICAgICBlcnJvck5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICBtZXNzYWdlOiBgJHtlcnJvck1lc3NhZ2VGdWxsfSAke2V4dHJhTGF5ZXJNZXNzYWdlfWAsXG4gICAgICAgICAgICBpZDogZXJyb3JNZXNzYWdlRnVsbCAvLyB0cmVhdCB0aGUgZXJyb3IgbWVzc2FnZSBhcyBpZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb25zICovXG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcFBvcG92ZXIoKSB7XG4gICAgICAvLyB0aGlzIGNoZWNrIGlzIGZvciBsaW1pdGluZyB0aGUgZGlzcGxheSBvZiB0aGUgYDxNYXBQb3BvdmVyPmAgdG8gdGhlIGA8TWFwQ29udGFpbmVyPmAgdGhlIHVzZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aFxuICAgICAgLy8gdGhlIERlY2tHTCBvbkhvdmVyIGV2ZW50IGhhbmRsZXIgYWRkcyBhIGBtYXBJbmRleGAgcHJvcGVydHkgd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSBgaG92ZXJJbmZvYCBvYmplY3Qgb2YgYHZpc1N0YXRlYFxuICAgICAgaWYgKHRoaXMucHJvcHMuaW5kZXggIT09IHRoaXMucHJvcHMudmlzU3RhdGUuaG92ZXJJbmZvPy5tYXBJbmRleCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogbW92ZSB0aGlzIGludG8gcmVkdWNlciBzbyBpdCBjYW4gYmUgdGVzdGVkXG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICB2aXNTdGF0ZToge1xuICAgICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgICBjbGlja2VkLFxuICAgICAgICAgIGRhdGFzZXRzLFxuICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgbW91c2VQb3M6IHttb3VzZVBvc2l0aW9uLCBjb29yZGluYXRlLCBwaW5uZWR9XG4gICAgICAgIH1cbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbGF5ZXJzVG9SZW5kZXIgPSB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGlmICghbW91c2VQb3NpdGlvbiB8fCAhaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGF5ZXJIb3ZlclByb3AgPSBnZXRMYXllckhvdmVyUHJvcCh7XG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgIGhvdmVySW5mbyxcbiAgICAgICAgbGF5ZXJzLFxuICAgICAgICBsYXllcnNUb1JlbmRlcixcbiAgICAgICAgZGF0YXNldHNcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjb21wYXJlTW9kZSA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnXG4gICAgICAgID8gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuY29tcGFyZU1vZGVcbiAgICAgICAgOiBmYWxzZTtcblxuICAgICAgbGV0IHBpbm5lZFBvc2l0aW9uID0ge3g6IDAsIHk6IDB9O1xuICAgICAgbGV0IGxheWVyUGlubmVkUHJvcDogTGF5ZXJIb3ZlclByb3AgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChwaW5uZWQgfHwgY2xpY2tlZCkge1xuICAgICAgICAvLyBwcm9qZWN0IGxuZ2xhdCB0byBzY3JlZW4gc28gdGhhdCB0b29sdGlwIGZvbGxvd3MgdGhlIG9iamVjdCBvbiB6b29tXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUobWFwU3RhdGUpO1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBjbGlja2VkID8gY2xpY2tlZC5jb29yZGluYXRlIDogcGlubmVkLmNvb3JkaW5hdGU7XG4gICAgICAgIHBpbm5lZFBvc2l0aW9uID0gdGhpcy5fZ2V0SG92ZXJYWSh2aWV3cG9ydCwgbG5nTGF0KTtcbiAgICAgICAgbGF5ZXJQaW5uZWRQcm9wID0gZ2V0TGF5ZXJIb3ZlclByb3Aoe1xuICAgICAgICAgIGFuaW1hdGlvbkNvbmZpZyxcbiAgICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICBob3ZlckluZm86IGNsaWNrZWQsXG4gICAgICAgICAgbGF5ZXJzLFxuICAgICAgICAgIGxheWVyc1RvUmVuZGVyLFxuICAgICAgICAgIGRhdGFzZXRzXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobGF5ZXJIb3ZlclByb3AgJiYgbGF5ZXJQaW5uZWRQcm9wKSB7XG4gICAgICAgICAgbGF5ZXJIb3ZlclByb3AucHJpbWFyeURhdGEgPSBsYXllclBpbm5lZFByb3AuZGF0YTtcbiAgICAgICAgICBsYXllckhvdmVyUHJvcC5jb21wYXJlVHlwZSA9IGludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAuY29uZmlnLmNvbXBhcmVUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbW1vblByb3AgPSB7XG4gICAgICAgIG9uQ2xvc2U6IHRoaXMuX29uQ2xvc2VNYXBQb3BvdmVyLFxuICAgICAgICB6b29tOiBtYXBTdGF0ZS56b29tLFxuICAgICAgICBjb250YWluZXI6IHRoaXMuX2RlY2sgPyB0aGlzLl9kZWNrLmNhbnZhcyA6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPEVycm9yQm91bmRhcnk+XG4gICAgICAgICAge2xheWVyUGlubmVkUHJvcCAmJiAoXG4gICAgICAgICAgICA8TWFwUG9wb3ZlclxuICAgICAgICAgICAgICB7Li4ucGlubmVkUG9zaXRpb259XG4gICAgICAgICAgICAgIHsuLi5jb21tb25Qcm9wfVxuICAgICAgICAgICAgICBsYXllckhvdmVyUHJvcD17bGF5ZXJQaW5uZWRQcm9wfVxuICAgICAgICAgICAgICBjb29yZGluYXRlPXtpbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWQgJiYgKHBpbm5lZCB8fCB7fSkuY29vcmRpbmF0ZX1cbiAgICAgICAgICAgICAgZnJvemVuPXt0cnVlfVxuICAgICAgICAgICAgICBpc0Jhc2U9e2NvbXBhcmVNb2RlfVxuICAgICAgICAgICAgICBvblNldEZlYXR1cmVzPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRGZWF0dXJlc31cbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAnUmVhZG9ubHk8TWFwQ29udGFpbmVyUHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uPXt0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2xheWVySG92ZXJQcm9wICYmICghbGF5ZXJQaW5uZWRQcm9wIHx8IGNvbXBhcmVNb2RlKSAmJiAoXG4gICAgICAgICAgICA8TWFwUG9wb3ZlclxuICAgICAgICAgICAgICB4PXttb3VzZVBvc2l0aW9uWzBdfVxuICAgICAgICAgICAgICB5PXttb3VzZVBvc2l0aW9uWzFdfVxuICAgICAgICAgICAgICB7Li4uY29tbW9uUHJvcH1cbiAgICAgICAgICAgICAgbGF5ZXJIb3ZlclByb3A9e2xheWVySG92ZXJQcm9wfVxuICAgICAgICAgICAgICBmcm96ZW49e2ZhbHNlfVxuICAgICAgICAgICAgICBjb29yZGluYXRlPXtpbnRlcmFjdGlvbkNvbmZpZy5jb29yZGluYXRlLmVuYWJsZWQgJiYgY29vcmRpbmF0ZX1cbiAgICAgICAgICAgICAgb25TZXRGZWF0dXJlcz17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0RmVhdHVyZXN9XG4gICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZT17dGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbj17dGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8qIGVzbGludC1lbmFibGUgY29tcGxleGl0eSAqL1xuXG4gICAgX2dldEhvdmVyWFkodmlld3BvcnQsIGxuZ0xhdCkge1xuICAgICAgY29uc3Qgc2NyZWVuQ29vcmQgPSAhdmlld3BvcnQgfHwgIWxuZ0xhdCA/IG51bGwgOiB2aWV3cG9ydC5wcm9qZWN0KGxuZ0xhdCk7XG4gICAgICByZXR1cm4gc2NyZWVuQ29vcmQgJiYge3g6IHNjcmVlbkNvb3JkWzBdLCB5OiBzY3JlZW5Db29yZFsxXX07XG4gICAgfVxuXG4gICAgX3JlbmRlckRlY2tPdmVybGF5KFxuICAgICAgbGF5ZXJzRm9yRGVjayxcbiAgICAgIG9wdGlvbnM6IHtwcmltYXJ5TWFwOiBib29sZWFuOyBpc0ludGVyYWN0aXZlPzogYm9vbGVhbjsgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGV9ID0ge1xuICAgICAgICBwcmltYXJ5TWFwOiBmYWxzZVxuICAgICAgfVxuICAgICkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICBtYXBib3hBcGlVcmwsXG4gICAgICAgIGRlY2tHbFByb3BzLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgbWFwQ29udHJvbHMsXG4gICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3MsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBnZW5lcmF0ZURlY2tHTExheWVycyxcbiAgICAgICAgb25Nb3VzZU1vdmVcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCB7aG92ZXJJbmZvLCBlZGl0b3J9ID0gdmlzU3RhdGU7XG4gICAgICBjb25zdCB7cHJpbWFyeU1hcCwgaXNJbnRlcmFjdGl2ZSwgY2hpbGRyZW59ID0gb3B0aW9ucztcblxuICAgICAgLy8gZGlzYWJsZSBkb3VibGUgY2xpY2sgem9vbSB3aGVuIGVkaXRvciBpcyBpbiBhbnkgZHJhdyBtb2RlXG4gICAgICBjb25zdCB7bWFwRHJhd30gPSBtYXBDb250cm9scztcbiAgICAgIGNvbnN0IHthY3RpdmU6IGVkaXRvck1lbnVBY3RpdmUgPSBmYWxzZX0gPSBtYXBEcmF3IHx8IHt9O1xuICAgICAgY29uc3QgaXNFZGl0b3JEcmF3aW5nTW9kZSA9IEVkaXRvckxheWVyVXRpbHMuaXNEcmF3aW5nQWN0aXZlKGVkaXRvck1lbnVBY3RpdmUsIGVkaXRvci5tb2RlKTtcblxuICAgICAgY29uc3QgaW50ZXJuYWxWaWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKGluZGV4KTtcbiAgICAgIGNvbnN0IGludGVybmFsTWFwU3RhdGUgPSB7Li4ubWFwU3RhdGUsIC4uLmludGVybmFsVmlld1N0YXRlfTtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUoaW50ZXJuYWxNYXBTdGF0ZSk7XG5cbiAgICAgIGNvbnN0IGVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4ID0gdGhpcy5zZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICBjb25zdCB7c2V0RmVhdHVyZXMsIG9uTGF5ZXJDbGljaywgc2V0U2VsZWN0ZWRGZWF0dXJlfSA9IHZpc1N0YXRlQWN0aW9ucztcblxuICAgICAgY29uc3QgZ2VuZXJhdGVEZWNrR0xMYXllcnNNZXRob2QgPSBnZW5lcmF0ZURlY2tHTExheWVycyA/PyBjb21wdXRlRGVja0xheWVycztcbiAgICAgIGNvbnN0IGRlY2tHbExheWVycyA9IGdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kKFxuICAgICAgICB7XG4gICAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgICAgbWFwU3RhdGU6IGludGVybmFsTWFwU3RhdGUsXG4gICAgICAgICAgbWFwU3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1hcEluZGV4OiBpbmRleCxcbiAgICAgICAgICBwcmltYXJ5TWFwLFxuICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgICBsYXllcnNGb3JEZWNrLFxuICAgICAgICAgIGVkaXRvckluZm86IHByaW1hcnlNYXBcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM6IHNldEZlYXR1cmVzLFxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ1JlYWRvbmx5PE1hcENvbnRhaW5lclByb3BzPicgaXMgbm90IGFzc2lnbmFibGUgdG8gcGFyYW1ldGVyIG9mIHR5cGUgJ25ldmVyJ1xuICAgICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uOiB0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhlczogdGhpcy5zZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIEFyZ3VtZW50IG9mIHR5cGUgJ3Vua25vd24nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICdudW1iZXInLlxuICAgICAgICAgICAgICAgICAgZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXhcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHZpZXdwb3J0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvbkxheWVySG92ZXI6IHRoaXMuX29uTGF5ZXJIb3ZlcixcbiAgICAgICAgICBvblNldExheWVyRG9tYWluOiB0aGlzLl9vbkxheWVyU2V0RG9tYWluLFxuICAgICAgICAgIG9uRmlsdGVyZWRJdGVtc0NoYW5nZTogdGhpcy5fb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UsXG4gICAgICAgICAgb25XTVNGZWF0dXJlSW5mbzogdGhpcy5fb25XTVNGZWF0dXJlSW5mbyxcbiAgICAgICAgICBvblJlZHJhd05lZWRlZDogdGhpcy5fb25SZWRyYXdOZWVkZWQsXG4gICAgICAgICAgb25GaXRCb3VuZHM6IHRoaXMuX29uRml0Qm91bmRzXG4gICAgICAgIH0sXG4gICAgICAgIGRlY2tHbFByb3BzXG4gICAgICApO1xuXG4gICAgICBjb25zdCBleHRyYURlY2tQYXJhbXM6IHtcbiAgICAgICAgZ2V0VG9vbHRpcD86IChpbmZvOiBhbnkpID0+IG9iamVjdCB8IG51bGw7XG4gICAgICAgIGdldEN1cnNvcj86ICh7aXNEcmFnZ2luZ306IHtpc0RyYWdnaW5nOiBib29sZWFufSkgPT4gc3RyaW5nO1xuICAgICAgfSA9IHt9O1xuICAgICAgaWYgKHByaW1hcnlNYXApIHtcbiAgICAgICAgLy8gT21pdCBob3ZlciB1cGRhdGVzIHdoZW4gdGhlIHBvaW50ZXIgcG9zaXRpb24gaXMgaW52YWxpZCwgaWUuIG92ZXIgVUkgb3ZlcmxheXMgb3JcbiAgICAgICAgLy8gb3V0c2lkZSB0aGUgbWFwIGNvbnRhaW5lci4gSW4gdGhvc2UgY2FzZXMgeC95IG1heSBiZSA8IDBcbiAgICAgICAgZXh0cmFEZWNrUGFyYW1zLmdldFRvb2x0aXAgPSBpbmZvID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gTnVtYmVyKGluZm8/LngpO1xuICAgICAgICAgIGNvbnN0IHkgPSBOdW1iZXIoaW5mbz8ueSk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih4KSB8fCBOdW1iZXIuaXNOYU4oeSkgfHwgeCA8IDAgfHwgeSA8IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuIEVkaXRvckxheWVyVXRpbHMuZ2V0VG9vbHRpcChpbmZvLCB7XG4gICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBleHRyYURlY2tQYXJhbXMuZ2V0Q3Vyc29yID0gKHtpc0RyYWdnaW5nfToge2lzRHJhZ2dpbmc6IGJvb2xlYW59KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yQ3Vyc29yID0gRWRpdG9yTGF5ZXJVdGlscy5nZXRDdXJzb3Ioe1xuICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIGhvdmVySW5mb1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChlZGl0b3JDdXJzb3IpIHJldHVybiBlZGl0b3JDdXJzb3I7XG5cbiAgICAgICAgICBpZiAoaXNEcmFnZ2luZykgcmV0dXJuICdncmFiYmluZyc7XG4gICAgICAgICAgaWYgKGhvdmVySW5mbz8ubGF5ZXIpIHJldHVybiAncG9pbnRlcic7XG4gICAgICAgICAgcmV0dXJuICdncmFiJztcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWZmZWN0cyA9IHRoaXMuX2lzT0tUb1JlbmRlckVmZmVjdHMoaW5kZXgpXG4gICAgICAgID8gY29tcHV0ZURlY2tFZmZlY3RzKHt2aXNTdGF0ZSwgbWFwU3RhdGUsIGlzRXhwb3J0OiB0aGlzLnByb3BzLmlzRXhwb3J0fSlcbiAgICAgICAgOiBbXTtcblxuICAgICAgY29uc3Qgdmlld3MgPSBkZWNrR2xQcm9wcz8udmlld3NcbiAgICAgICAgPyBkZWNrR2xQcm9wcz8udmlld3MoKVxuICAgICAgICA6IG5ldyBNYXBWaWV3KHtsZWdhY3lNZXRlclNpemVzOiB0cnVlfSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIE1hcFZpZXc+WzBdICYge1xuICAgICAgICAgICAgbGVnYWN5TWV0ZXJTaXplczogYm9vbGVhbjtcbiAgICAgICAgICB9KTtcblxuICAgICAgbGV0IGFsbERlY2tHbFByb3BzID0ge1xuICAgICAgICAuLi5kZWNrR2xQcm9wcyxcbiAgICAgICAgcGlja2luZ1JhZGl1czogREVGQVVMVF9QSUNLSU5HX1JBRElVUyxcbiAgICAgICAgdmlld3MsXG4gICAgICAgIGxheWVyczogZGVja0dsTGF5ZXJzLFxuICAgICAgICBlZmZlY3RzLFxuICAgICAgICBwYXJhbWV0ZXJzOiBnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyh2aXNTdGF0ZS5sYXllckJsZW5kaW5nKVxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYWxsRGVja0dsUHJvcHMgPSBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja1JlbmRlcihhbGxEZWNrR2xQcm9wcyk7XG4gICAgICAgIGlmICghYWxsRGVja0dsUHJvcHMpIHtcbiAgICAgICAgICAvLyBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsLCBkbyBub3QgcmVuZGVyIGRlY2suZ2xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgey4uLihpc0ludGVyYWN0aXZlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBvbk1vdXNlTW92ZTogcHJpbWFyeU1hcFxuICAgICAgICAgICAgICAgICAgPyBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZU1vdmU/LihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Nb3VzZU1vdmVEZWJvdW5jZWQoZXZlbnQsIHZpZXdwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7c3R5bGU6IHtwb2ludGVyRXZlbnRzOiAnbm9uZSd9fSl9XG4gICAgICAgID5cbiAgICAgICAgICA8RGVja0dMXG4gICAgICAgICAgICBpZD1cImRlZmF1bHQtZGVja2dsLW92ZXJsYXlcIlxuICAgICAgICAgICAgb25Mb2FkPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrTG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrTG9hZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgey4uLmFsbERlY2tHbFByb3BzfVxuICAgICAgICAgICAgY29udHJvbGxlcj17XG4gICAgICAgICAgICAgIGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgZG91YmxlQ2xpY2tab29tOiAhaXNFZGl0b3JEcmF3aW5nTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgZHJhZ1JvdGF0ZTogdGhpcy5wcm9wcy5tYXBTdGF0ZS5kcmFnUm90YXRlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5pdGlhbFZpZXdTdGF0ZT17aW50ZXJuYWxWaWV3U3RhdGV9XG4gICAgICAgICAgICBvbkJlZm9yZVJlbmRlcj17dGhpcy5fb25CZWZvcmVSZW5kZXJ9XG4gICAgICAgICAgICBvblZpZXdTdGF0ZUNoYW5nZT17aXNJbnRlcmFjdGl2ZSA/IHRoaXMuX29uVmlld3BvcnRDaGFuZ2UgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICB7Li4uZXh0cmFEZWNrUGFyYW1zfVxuICAgICAgICAgICAgb25Ib3Zlcj17XG4gICAgICAgICAgICAgIGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgICA/IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBFZGl0b3JMYXllclV0aWxzLm9uSG92ZXIoZGF0YSwge1xuICAgICAgICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGhvdmVySW5mb1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uTGF5ZXJIb3ZlckRlYm91bmNlZChkYXRhLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZGF0YSwgZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBub3JtYWxpemVFdmVudChldmVudC5zcmNFdmVudCwgdmlld3BvcnQpO1xuICAgICAgICAgICAgICBjb25zdCByZXMgPSBFZGl0b3JMYXllclV0aWxzLm9uQ2xpY2soZGF0YSwgZXZlbnQsIHtcbiAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICBvbkxheWVyQ2xpY2ssXG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgICAgICAgICAgIG1hcEluZGV4OiBpbmRleFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKHJlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2soZGF0YSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25FcnJvcj17dGhpcy5fb25EZWNrRXJyb3J9XG4gICAgICAgICAgICByZWY9e2NvbXAgPT4ge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIGlmIChjb21wICYmIGNvbXAuZGVjayAmJiAhdGhpcy5fZGVjaykge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWNrID0gY29tcC5kZWNrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25EZXZpY2VJbml0aWFsaXplZD17ZGV2aWNlID0+IHRoaXMuX29uRGVja0luaXRpYWxpemVkKGRldmljZSl9XG4gICAgICAgICAgICBvbkFmdGVyUmVuZGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVja1JlbmRlckNhbGxiYWNrcz8ub25EZWNrQWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkZWNrUmVuZGVyQ2FsbGJhY2tzLm9uRGVja0FmdGVyUmVuZGVyKGFsbERlY2tHbFByb3BzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGFyZUFueURlY2tMYXllcnNMb2FkaW5nKGFsbERlY2tHbFByb3BzLmxheWVycyk7XG4gICAgICAgICAgICAgIGlmIChhbnlBY3RpdmVMYXllckxvYWRpbmcgIT09IHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gYW55QWN0aXZlTGF5ZXJMb2FkaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICA8L0RlY2tHTD5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cblxuICAgIF91cGRhdGVNYXBib3hMYXllcnMoKSB7XG4gICAgICBjb25zdCBtYXBib3hMYXllcnMgPSB0aGlzLm1hcGJveExheWVyc1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgaWYgKCFPYmplY3Qua2V5cyhtYXBib3hMYXllcnMpLmxlbmd0aCAmJiAhT2JqZWN0LmtleXModGhpcy5wcmV2aW91c0xheWVycykubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlTWFwYm94TGF5ZXJzKHRoaXMuX21hcCwgbWFwYm94TGF5ZXJzLCB0aGlzLnByZXZpb3VzTGF5ZXJzKTtcblxuICAgICAgdGhpcy5wcmV2aW91c0xheWVycyA9IG1hcGJveExheWVycztcbiAgICB9XG5cbiAgICBfcmVuZGVyTWFwYm94T3ZlcmxheXMoKSB7XG4gICAgICBpZiAodGhpcy5fbWFwICYmIHRoaXMuX21hcC5pc1N0eWxlTG9hZGVkKCkpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWFwYm94TGF5ZXJzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIF9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgY29uc3Qgdmlld1N0YXRlID0gdGhpcy5jb250ZXh0Py5nZXRJbnRlcm5hbFZpZXdTdGF0ZSh0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIG9uVmlld1BvcnRDaGFuZ2UoXG4gICAgICAgIHZpZXdTdGF0ZSxcbiAgICAgICAgdGhpcy5wcm9wcy5tYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwLFxuICAgICAgICB0aGlzLnByb3BzLm9uVmlld1N0YXRlQ2hhbmdlLFxuICAgICAgICB0aGlzLnByb3BzLnByaW1hcnksXG4gICAgICAgIHRoaXMucHJvcHMuaW5kZXhcbiAgICAgICk7XG4gICAgfSwgREVCT1VOQ0VfVklFV1BPUlRfUFJPUEFHQVRFKTtcblxuICAgIF9vblZpZXdwb3J0Q2hhbmdlID0gdmlld3BvcnQgPT4ge1xuICAgICAgY29uc3Qge3ZpZXdTdGF0ZX0gPSB2aWV3cG9ydDtcbiAgICAgIGlmICh0aGlzLnByb3BzLmlzRXhwb3J0KSB7XG4gICAgICAgIC8vIEltYWdlIGV4cG9ydCBtYXAgc2hvdWxkbid0IGJlIGludGVyYWN0aXZlIChvdGhlcndpc2UgdGhpcyBjYWxsYmFjayBjYW5cbiAgICAgICAgLy8gbGVhZCB0byBpbmFkdmVydGVudCBjaGFuZ2VzIHRvIHRoZSBzdGF0ZSBvZiB0aGUgbWFpbiBtYXApXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtzZXRJbnRlcm5hbFZpZXdTdGF0ZX0gPSB0aGlzLmNvbnRleHQ7XG4gICAgICBzZXRJbnRlcm5hbFZpZXdTdGF0ZSh2aWV3U3RhdGUsIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgdGhpcy5fb25WaWV3cG9ydENoYW5nZVByb3BhZ2F0ZURlYm91bmNlZCgpO1xuICAgIH07XG5cbiAgICBfb25MYXllckhvdmVyRGVib3VuY2VkID0gZGVib3VuY2UoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVySG92ZXIoZGF0YSwgaW5kZXgpO1xuICAgIH0sIERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFKTtcblxuICAgIF9vbk1vdXNlTW92ZURlYm91bmNlZCA9IGRlYm91bmNlKChldmVudCwgdmlld3BvcnQpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTW91c2VNb3ZlKG5vcm1hbGl6ZUV2ZW50KGV2ZW50LCB2aWV3cG9ydCkpO1xuICAgIH0sIERFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFKTtcblxuICAgIF9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgLy8gdHJpZ2dlciBsb2FkaW5nIGluZGljYXRvciB1cGRhdGUgd2l0aG91dCBhbnkgY2hhbmdlIHRvIHVwZGF0ZSBVSVxuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMuc2V0TG9hZGluZ0luZGljYXRvcih7Y2hhbmdlOiAwfSk7XG4gICAgfSwgREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUpO1xuXG4gICAgX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eSA9IChsYXllcjogTGF5ZXIpID0+IHtcbiAgICAgIGNvbnN0IHt2aXNTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgIHZpc1N0YXRlQWN0aW9ucy5sYXllckNvbmZpZ0NoYW5nZShsYXllciwge2lzVmlzaWJsZTogIWxheWVyLmNvbmZpZy5pc1Zpc2libGV9KTtcbiAgICB9O1xuXG4gICAgX3RvZ2dsZU1hcENvbnRyb2wgPSBwYW5lbElkID0+IHtcbiAgICAgIGNvbnN0IHtpbmRleCwgdWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcblxuICAgICAgdWlTdGF0ZUFjdGlvbnMudG9nZ2xlTWFwQ29udHJvbChwYW5lbElkLCBOdW1iZXIoaW5kZXgpKTtcbiAgICB9O1xuXG4gICAgLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuICAgIF9yZW5kZXJNYXAoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZpc1N0YXRlLFxuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgbWFwU3R5bGUsXG4gICAgICAgIG1hcFN0YXRlQWN0aW9ucyxcbiAgICAgICAgTWFwQ29tcG9uZW50ID0gTWFwLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gbWFwYm94QXBpVXJsLFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgaXNFeHBvcnQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHByaW1hcnksXG4gICAgICAgIGJvdHRvbU1hcENvbnRhaW5lclByb3BzLFxuICAgICAgICB0b3BNYXBDb250YWluZXJQcm9wcyxcbiAgICAgICAgdGhlbWUsXG4gICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnMgPSBbXSxcbiAgICAgICAgY29udGFpbmVySWQgPSAwLFxuICAgICAgICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlLFxuICAgICAgICBhY3RpdmVTaWRlUGFuZWwsXG4gICAgICAgIHNpZGVQYW5lbFdpZHRoXG4gICAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgY29uc3Qge2xheWVycywgZGF0YXNldHMsIGVkaXRvciwgaW50ZXJhY3Rpb25Db25maWd9ID0gdmlzU3RhdGU7XG5cbiAgICAgIGNvbnN0IGxheWVyc1RvUmVuZGVyID0gdGhpcy5sYXllcnNUb1JlbmRlclNlbGVjdG9yKHRoaXMucHJvcHMpO1xuICAgICAgY29uc3QgbGF5ZXJzRm9yRGVjayA9IHRoaXMubGF5ZXJzRm9yRGVja1NlbGVjdG9yKHRoaXMucHJvcHMpO1xuXG4gICAgICAvLyBDdXJyZW50IHN0eWxlIGNhbiBiZSBhIGN1c3RvbSBzdHlsZSwgZnJvbSB3aGljaCB3ZSBwdWxsIHRoZSBtYXBib3ggQVBJIGFjY2Nlc3MgdG9rZW5cbiAgICAgIGNvbnN0IGN1cnJlbnRTdHlsZSA9IG1hcFN0eWxlLm1hcFN0eWxlcz8uW21hcFN0eWxlLnN0eWxlVHlwZV07XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeU5hbWUgPSBnZXRCYXNlTWFwTGlicmFyeShjdXJyZW50U3R5bGUpO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlDb25maWcgPVxuICAgICAgICBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnPy5bYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgY29uc3QgaW50ZXJuYWxWaWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKGluZGV4KTtcbiAgICAgIGNvbnN0IG1hcFByb3BzID0ge1xuICAgICAgICAuLi5pbnRlcm5hbFZpZXdTdGF0ZSxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByb3BzLmlzRXhwb3J0ID8/IGZhbHNlLFxuICAgICAgICBtYXBib3hBY2Nlc3NUb2tlbjogY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gYmFzZUFwaVVybDogbWFwYm94QXBpVXJsLFxuICAgICAgICBtYXBMaWI6IGJhc2VNYXBMaWJyYXJ5Q29uZmlnLmdldE1hcExpYigpLFxuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0OlxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNmb3JtUmVxdWVzdCB8fFxuICAgICAgICAgIHRyYW5zZm9ybVJlcXVlc3QoY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbilcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhc0dlb2NvZGVyTGF5ZXIgPSBCb29sZWFuKGxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gR0VPQ09ERVJfTEFZRVJfSUQpKTtcbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBCb29sZWFuKG1hcFN0YXRlLmlzU3BsaXQpO1xuXG4gICAgICBjb25zdCBkZWNrID0gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkobGF5ZXJzRm9yRGVjaywge1xuICAgICAgICBwcmltYXJ5TWFwOiB0cnVlLFxuICAgICAgICBpc0ludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogKFxuICAgICAgICAgIDxNYXBDb21wb25lbnRcbiAgICAgICAgICAgIGtleT17YGJvdHRvbS0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgey4uLm1hcFByb3BzfVxuICAgICAgICAgICAgbWFwU3R5bGU9e21hcFN0eWxlLmJvdHRvbU1hcFN0eWxlID8/IEVNUFRZX01BUEJPWF9TVFlMRX1cbiAgICAgICAgICAgIHsuLi5ib3R0b21NYXBDb250YWluZXJQcm9wc31cbiAgICAgICAgICAgIHJlZj17dGhpcy5fc2V0TWFwUmVmfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkZWNrKSB7XG4gICAgICAgIC8vIGRlY2tPdmVybGF5IGNhbiBiZSBudWxsIGlmIG9uRGVja1JlbmRlciByZXR1cm5zIG51bGxcbiAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlIGRvbid0IHdhbnQgdG8gcmVuZGVyIHRoZSBtYXBcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxNYXBDb250cm9sXG4gICAgICAgICAgICBtYXBTdGF0ZT17bWFwU3RhdGV9XG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBhdmFpbGFibGVMb2NhbGVzPXtMT0NBTEVfQ09ERVNfQVJSQVl9XG4gICAgICAgICAgICBkcmFnUm90YXRlPXttYXBTdGF0ZS5kcmFnUm90YXRlfVxuICAgICAgICAgICAgaXNTcGxpdD17aXNTcGxpdH1cbiAgICAgICAgICAgIHByaW1hcnk9e0Jvb2xlYW4ocHJpbWFyeSl9XG4gICAgICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICAgIGxheWVyc1RvUmVuZGVyPXtsYXllcnNUb1JlbmRlcn1cbiAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgbWFwQ29udHJvbHM9e21hcENvbnRyb2xzfVxuICAgICAgICAgICAgcmVhZE9ubHk9e3RoaXMucHJvcHMucmVhZE9ubHl9XG4gICAgICAgICAgICBzY2FsZT17bWFwU3RhdGUuc2NhbGUgfHwgMX1cbiAgICAgICAgICAgIGxvZ29Db21wb25lbnQ9e3RoaXMucHJvcHMubG9nb0NvbXBvbmVudH1cbiAgICAgICAgICAgIHRvcD17XG4gICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWRcbiAgICAgICAgICAgICAgICA/IHRoZW1lLm1hcENvbnRyb2xUb3BcbiAgICAgICAgICAgICAgICA6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgICAgbG9jYWxlPXtsb2NhbGV9XG4gICAgICAgICAgICBvblRvZ2dsZVBlcnNwZWN0aXZlPXttYXBTdGF0ZUFjdGlvbnMudG9nZ2xlUGVyc3BlY3RpdmV9XG4gICAgICAgICAgICBvblRvZ2dsZVNwbGl0TWFwPXttYXBTdGF0ZUFjdGlvbnMudG9nZ2xlU3BsaXRNYXB9XG4gICAgICAgICAgICBvbk1hcFRvZ2dsZUxheWVyPXt0aGlzLl9oYW5kbGVNYXBUb2dnbGVMYXllcn1cbiAgICAgICAgICAgIG9uVG9nZ2xlTWFwQ29udHJvbD17dGhpcy5fdG9nZ2xlTWFwQ29udHJvbH1cbiAgICAgICAgICAgIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwVmlld3BvcnR9XG4gICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgb25TZXRMb2NhbGU9e3VpU3RhdGVBY3Rpb25zLnNldExvY2FsZX1cbiAgICAgICAgICAgIG9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eT17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUVkaXRvclZpc2liaWxpdHl9XG4gICAgICAgICAgICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPXt2aXNTdGF0ZUFjdGlvbnMubGF5ZXJWaXNDb25maWdDaGFuZ2V9XG4gICAgICAgICAgICBvblRvZ2dsZUxheWVyVmlzaWJpbGl0eT17dGhpcy5faGFuZGxlVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5fVxuICAgICAgICAgICAgbWFwSGVpZ2h0PXttYXBTdGF0ZS5oZWlnaHR9XG4gICAgICAgICAgICBzZXRNYXBDb250cm9sU2V0dGluZ3M9e3VpU3RhdGVBY3Rpb25zLnNldE1hcENvbnRyb2xTZXR0aW5nc31cbiAgICAgICAgICAgIGFjdGl2ZVNpZGVQYW5lbD17YWN0aXZlU2lkZVBhbmVsfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2lzU3BsaXRTZWxlY3Rvcih0aGlzLnByb3BzKSAmJiA8RHJvcHBhYmxlIGNvbnRhaW5lcklkPXtjb250YWluZXJJZH0gLz59XG5cbiAgICAgICAgICB7ZGVja31cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwYm94T3ZlcmxheXMoKX1cbiAgICAgICAgICA8RWRpdG9yXG4gICAgICAgICAgICBpbmRleD17aW5kZXggfHwgMH1cbiAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgIGVkaXRvcj17ZWRpdG9yfVxuICAgICAgICAgICAgZmlsdGVycz17dGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICBvbkRlbGV0ZUZlYXR1cmU9e3Zpc1N0YXRlQWN0aW9ucy5kZWxldGVGZWF0dXJlfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICBvblRvZ2dsZVBvbHlnb25GaWx0ZXI9e3Zpc1N0YXRlQWN0aW9ucy5zZXRQb2x5Z29uRmlsdGVyTGF5ZXJ9XG4gICAgICAgICAgICBvblNldEVkaXRvck1vZGU9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JNb2RlfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ2FsbCcsXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBkaXNwbGF5OiBlZGl0b3IudmlzaWJsZSA/ICdibG9jaycgOiAnbm9uZSdcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICB7bWFwU3R5bGUudG9wTWFwU3R5bGUgPyAoXG4gICAgICAgICAgICA8TWFwQ29tcG9uZW50XG4gICAgICAgICAgICAgIGtleT17YHRvcC0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgICB2aWV3U3RhdGU9e2ludGVybmFsVmlld1N0YXRlfVxuICAgICAgICAgICAgICBtYXBTdHlsZT17bWFwU3R5bGUudG9wTWFwU3R5bGV9XG4gICAgICAgICAgICAgIHN0eWxlPXtNQVBfU1RZTEUudG9wfVxuICAgICAgICAgICAgICBtYXBib3hBY2Nlc3NUb2tlbj17bWFwUHJvcHMubWFwYm94QWNjZXNzVG9rZW59XG4gICAgICAgICAgICAgIHRyYW5zZm9ybVJlcXVlc3Q9e21hcFByb3BzLnRyYW5zZm9ybVJlcXVlc3R9XG4gICAgICAgICAgICAgIG1hcExpYj17YmFzZU1hcExpYnJhcnlDb25maWcuZ2V0TWFwTGliKCl9XG4gICAgICAgICAgICAgIHsuLi50b3BNYXBDb250YWluZXJQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7aGFzR2VvY29kZXJMYXllclxuICAgICAgICAgICAgPyB0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheShcbiAgICAgICAgICAgICAgICB7W0dFT0NPREVSX0xBWUVSX0lEXTogaGFzR2VvY29kZXJMYXllcn0sXG4gICAgICAgICAgICAgICAge3ByaW1hcnlNYXA6IGZhbHNlLCBpc0ludGVyYWN0aXZlOiBmYWxzZX1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJNYXBQb3BvdmVyKCl9XG4gICAgICAgICAgeyFpc0V4cG9ydCAmJiBwcmltYXJ5ICE9PSBpc1NwbGl0ID8gKFxuICAgICAgICAgICAgPExvYWRpbmdJbmRpY2F0b3JcbiAgICAgICAgICAgICAgaXNWaXNpYmxlPXtCb29sZWFuKGlzTG9hZGluZ0luZGljYXRvclZpc2libGUgfHwgdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcpfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e0Jvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKX1cbiAgICAgICAgICAgICAgc2lkZVBhbmVsV2lkdGg9e3NpZGVQYW5lbFdpZHRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wcmltYXJ5ID8gKFxuICAgICAgICAgICAgPEF0dHJpYnV0aW9uXG4gICAgICAgICAgICAgIHNob3dCYXNlTWFwTGliTG9nbz17dGhpcy5zdGF0ZS5zaG93QmFzZU1hcEF0dHJpYnV0aW9ufVxuICAgICAgICAgICAgICBzaG93T3NtQmFzZW1hcEF0dHJpYnV0aW9uPXt0cnVlfVxuICAgICAgICAgICAgICBkYXRhc2V0QXR0cmlidXRpb25zPXtkYXRhc2V0QXR0cmlidXRpb25zfVxuICAgICAgICAgICAgICBiYXNlTWFwTGlicmFyeUNvbmZpZz17YmFzZU1hcExpYnJhcnlDb25maWd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlLCBtYXBTdHlsZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbWFwQ29udGVudCA9IHRoaXMuX3JlbmRlck1hcCgpO1xuICAgICAgaWYgKCFtYXBDb250ZW50KSB7XG4gICAgICAgIC8vIG1hcENvbnRlbnQgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9XG4gICAgICAgIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWc/LltiYXNlTWFwTGlicmFyeU5hbWVdO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTWFwXG4gICAgICAgICAgcmVmPXt0aGlzLl9yZWZ9XG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGVTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICBvbkNvbnRleHRNZW51PXtldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICAgICRtaXhCbGVuZE1vZGU9e3Zpc1N0YXRlLm92ZXJsYXlCbGVuZGluZ31cbiAgICAgICAgICAkbWFwTGliQ3NzQ2xhc3M9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYkNzc0NsYXNzfVxuICAgICAgICA+XG4gICAgICAgICAge21hcENvbnRlbnR9XG4gICAgICAgIDwvU3R5bGVkTWFwPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFRoZW1lKE1hcENvbnRhaW5lcik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFGLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxXQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFDLHNCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBTSxTQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxTQUFBLEdBQUFILHNCQUFBLENBQUFMLE9BQUE7QUFLQSxJQUFBUyxXQUFBLEdBQUFKLHNCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBVSxXQUFBLEdBQUFMLHNCQUFBLENBQUFMLE9BQUE7QUFDQSxJQUFBVyxrQkFBQSxHQUFBWCxPQUFBO0FBTUEsSUFBQVksT0FBQSxHQUFBUCxzQkFBQSxDQUFBTCxPQUFBO0FBR0EsSUFBQWEsT0FBQSxHQUFBYixPQUFBO0FBaUJBLElBQUFjLE1BQUEsR0FBQWQsT0FBQTtBQXFCQSxJQUFBZSxPQUFBLEdBQUFmLE9BQUE7QUFHQSxJQUFBZ0IsVUFBQSxHQUFBaEIsT0FBQTtBQVNBLElBQUFpQixjQUFBLEdBQUFqQixPQUFB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