@kepler.gl/components 3.3.0-alpha.6 → 3.3.0-alpha.7

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 (121) hide show
  1. package/dist/cjs/common/data-table/cell-size.js +40 -23
  2. package/dist/cjs/common/data-table/column-statistics-categoric.js +40 -0
  3. package/dist/cjs/common/data-table/column-statistics-components.js +65 -0
  4. package/dist/cjs/common/data-table/column-statistics-numeric.js +87 -0
  5. package/dist/cjs/common/data-table/column-statistics-time.js +69 -0
  6. package/dist/cjs/common/data-table/header-cell.js +123 -44
  7. package/dist/cjs/common/data-table/index.js +102 -29
  8. package/dist/cjs/common/histogram-plot.js +1 -1
  9. package/dist/cjs/common/icons/{arrow-down-solid.js → draw-point.js} +21 -11
  10. package/dist/cjs/common/icons/index.js +15 -1
  11. package/dist/cjs/common/icons/line-string.js +60 -0
  12. package/dist/cjs/common/toolbar-item.js +24 -3
  13. package/dist/cjs/editor/editor.js +26 -8
  14. package/dist/cjs/editor/feature-action-panel.js +34 -12
  15. package/dist/cjs/editor/feature-properties-editor.js +215 -0
  16. package/dist/cjs/editor/filter-feature-badges.js +92 -0
  17. package/dist/cjs/index.js +33 -1
  18. package/dist/cjs/kepler-gl.js +20 -3
  19. package/dist/cjs/map/map-control-toolbar.js +2 -2
  20. package/dist/cjs/map/map-control.js +13 -7
  21. package/dist/cjs/map/map-draw-panel.js +65 -15
  22. package/dist/cjs/map/theme-toggle-button.js +64 -0
  23. package/dist/cjs/map-container.js +16 -5
  24. package/dist/cjs/modal-container.js +2 -1
  25. package/dist/cjs/modals/cloud-components/cloud-item.js +55 -7
  26. package/dist/cjs/modals/cloud-components/cloud-item.spec.js +75 -3
  27. package/dist/cjs/modals/cloud-components/cloud-maps.js +2 -1
  28. package/dist/cjs/modals/cloud-tile.js +52 -38
  29. package/dist/cjs/modals/data-table-modal.js +37 -25
  30. package/dist/cjs/modals/export-video-modal.js +28 -1
  31. package/dist/cjs/modals/export-video-modal.spec.js +56 -10
  32. package/dist/cjs/modals/globe-export-video-container.js +19 -3
  33. package/dist/cjs/modals/globe-export-video-preview.js +25 -7
  34. package/dist/cjs/modals/hubble-utils.js +8 -3
  35. package/dist/cjs/modals/swipe-composite-utils.js +9 -1
  36. package/dist/cjs/modals/swipe-composite-utils.spec.js +69 -0
  37. package/dist/cjs/modals/swipe-export-video-preview.js +9 -5
  38. package/dist/cjs/side-panel/layer-manager.js +11 -3
  39. package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +11 -3
  40. package/dist/cjs/side-panel/layer-panel/layer-configurator.js +74 -31
  41. package/dist/cjs/side-panel/map-style-panel/globe-config-panel.js +90 -25
  42. package/dist/common/data-table/column-statistics-categoric.d.ts +9 -0
  43. package/dist/common/data-table/column-statistics-components.d.ts +31 -0
  44. package/dist/common/data-table/column-statistics-numeric.d.ts +18 -0
  45. package/dist/common/data-table/column-statistics-time.d.ts +19 -0
  46. package/dist/common/data-table/header-cell.d.ts +7 -5
  47. package/dist/common/data-table/index.d.ts +7 -24
  48. package/dist/common/histogram-plot.d.ts +24 -1
  49. package/dist/common/icons/{arrow-down-solid.d.ts → draw-point.d.ts} +2 -1
  50. package/dist/common/icons/index.d.ts +2 -0
  51. package/dist/common/icons/line-string.d.ts +10 -0
  52. package/dist/common/toolbar-item.d.ts +2 -0
  53. package/dist/editor/editor.d.ts +1 -0
  54. package/dist/editor/feature-action-panel.d.ts +1 -0
  55. package/dist/editor/feature-properties-editor.d.ts +8 -0
  56. package/dist/editor/filter-feature-badges.d.ts +12 -0
  57. package/dist/esm/common/data-table/cell-size.js +40 -23
  58. package/dist/esm/common/data-table/column-statistics-categoric.js +33 -0
  59. package/dist/esm/common/data-table/column-statistics-components.js +59 -0
  60. package/dist/esm/common/data-table/column-statistics-numeric.js +78 -0
  61. package/dist/esm/common/data-table/column-statistics-time.js +60 -0
  62. package/dist/esm/common/data-table/header-cell.js +125 -46
  63. package/dist/esm/common/data-table/index.js +102 -29
  64. package/dist/esm/common/histogram-plot.js +1 -1
  65. package/dist/esm/common/icons/draw-point.js +44 -0
  66. package/dist/esm/common/icons/index.js +3 -1
  67. package/dist/esm/common/icons/line-string.js +54 -0
  68. package/dist/esm/common/toolbar-item.js +24 -3
  69. package/dist/esm/editor/editor.js +26 -8
  70. package/dist/esm/editor/feature-action-panel.js +37 -15
  71. package/dist/esm/editor/feature-properties-editor.js +208 -0
  72. package/dist/esm/editor/filter-feature-badges.js +85 -0
  73. package/dist/esm/index.js +5 -1
  74. package/dist/esm/kepler-gl.js +20 -3
  75. package/dist/esm/map/map-control-toolbar.js +2 -2
  76. package/dist/esm/map/map-control.js +13 -7
  77. package/dist/esm/map/map-draw-panel.js +63 -11
  78. package/dist/esm/map/theme-toggle-button.js +55 -0
  79. package/dist/esm/map-container.js +16 -5
  80. package/dist/esm/modal-container.js +2 -1
  81. package/dist/esm/modals/cloud-components/cloud-item.js +53 -7
  82. package/dist/esm/modals/cloud-components/cloud-item.spec.js +76 -4
  83. package/dist/esm/modals/cloud-components/cloud-maps.js +2 -1
  84. package/dist/esm/modals/cloud-tile.js +52 -38
  85. package/dist/esm/modals/data-table-modal.js +38 -26
  86. package/dist/esm/modals/export-video-modal.js +29 -2
  87. package/dist/esm/modals/export-video-modal.spec.js +56 -10
  88. package/dist/esm/modals/globe-export-video-container.js +20 -4
  89. package/dist/esm/modals/globe-export-video-preview.js +26 -8
  90. package/dist/esm/modals/hubble-utils.js +8 -3
  91. package/dist/esm/modals/swipe-composite-utils.js +9 -1
  92. package/dist/esm/modals/swipe-composite-utils.spec.js +67 -0
  93. package/dist/esm/modals/swipe-export-video-preview.js +8 -4
  94. package/dist/esm/side-panel/layer-manager.js +11 -3
  95. package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +11 -3
  96. package/dist/esm/side-panel/layer-panel/layer-configurator.js +74 -31
  97. package/dist/esm/side-panel/map-style-panel/globe-config-panel.js +90 -25
  98. package/dist/index.d.ts +8 -0
  99. package/dist/kepler-gl.d.ts +3 -0
  100. package/dist/map/map-control.d.ts +6 -2
  101. package/dist/map/map-draw-panel.d.ts +1 -0
  102. package/dist/map/theme-toggle-button.d.ts +18 -0
  103. package/dist/map-container.d.ts +1 -0
  104. package/dist/modals/cloud-components/cloud-item.d.ts +2 -1
  105. package/dist/modals/data-table-modal.d.ts +1 -0
  106. package/dist/modals/globe-export-video-container.d.ts +2 -0
  107. package/dist/modals/globe-export-video-preview.d.ts +3 -0
  108. package/dist/modals/hubble-utils.d.ts +2 -1
  109. package/dist/modals/swipe-composite-utils.d.ts +1 -1
  110. package/dist/modals/swipe-composite-utils.spec.d.ts +1 -0
  111. package/package.json +20 -20
  112. package/dist/cjs/modals/cloud-components/provider-loading.js +0 -20
  113. package/dist/cjs/modals/storage-map-viewer.js +0 -98
  114. package/dist/cjs/side-panel/cloud-storage-dropdown.js +0 -40
  115. package/dist/esm/common/icons/arrow-down-solid.js +0 -34
  116. package/dist/esm/modals/cloud-components/provider-loading.js +0 -15
  117. package/dist/esm/modals/storage-map-viewer.js +0 -93
  118. package/dist/esm/side-panel/cloud-storage-dropdown.js +0 -33
  119. package/dist/modals/cloud-components/provider-loading.d.ts +0 -2
  120. package/dist/modals/storage-map-viewer.d.ts +0 -21
  121. package/dist/side-panel/cloud-storage-dropdown.d.ts +0 -6
@@ -313,6 +313,33 @@ var ExportVideoModalFactory = function ExportVideoModalFactory() {
313
313
  // itself; the flat maplibre base map must be disabled so it doesn't render a
314
314
  // 2D Mercator map behind/around the globe.
315
315
  var isGlobeEnabled = Boolean(mapState === null || mapState === void 0 || (_mapState$globe = mapState.globe) === null || _mapState$globe === void 0 ? void 0 : _mapState$globe.enabled);
316
+ (0, _react.useEffect)(function () {
317
+ // Same freeze as before: hubble.gl writes window.devicePixelRatio to scale
318
+ // the preview, then sets it to 1 during animated preview, which desyncs
319
+ // MapLibre from the Deck overlay. Pin to the *export* scale (not native DPR)
320
+ // so preview stays aligned and recording still uses the selected quality.
321
+ if (isSwipeMode || isGlobeEnabled) return undefined;
322
+ var _getResolutionSetting = (0, _hubbleUtils.getResolutionSetting)(videoConfiguration.resolution || ''),
323
+ width = _getResolutionSetting.width;
324
+ var scaledDpr = exportVideoWidth ? Math.max(1, width / exportVideoWidth) : 1;
325
+ var descriptor = Object.getOwnPropertyDescriptor(window, 'devicePixelRatio');
326
+ Object.defineProperty(window, 'devicePixelRatio', {
327
+ configurable: true,
328
+ get: function get() {
329
+ return scaledDpr;
330
+ },
331
+ set: function set() {
332
+ // no-op: ignore hubble.gl dropping DPR to 1 during preview
333
+ }
334
+ });
335
+ return function () {
336
+ if (descriptor) {
337
+ Object.defineProperty(window, 'devicePixelRatio', descriptor);
338
+ } else {
339
+ delete window.devicePixelRatio;
340
+ }
341
+ };
342
+ }, [isSwipeMode, isGlobeEnabled, videoConfiguration.resolution, exportVideoWidth]);
316
343
  var onFilterFrameUpdate = (0, _react.useCallback)(function (filterIdx, name, value) {
317
344
  visStateActions.setFilterAnimationTime(filterIdx, name, value);
318
345
  }, [visStateActions]);
@@ -410,4 +437,4 @@ var ExportVideoModalFactory = function ExportVideoModalFactory() {
410
437
  return ExportVideoModal;
411
438
  };
412
439
  var _default = exports["default"] = ExportVideoModalFactory;
413
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb25zdGFudHMiLCJfbG9jYWxpemF0aW9uIiwiX3V0aWxzIiwiX2VmZmVjdHMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29tbW9uIiwiX2l0ZW1TZWxlY3RvciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc2xpZGVyIiwiX2xvYWRpbmdTcGlubmVyIiwiX2h1YmJsZVV0aWxzIiwiX2ZvZ0hlaWdodEFuaW1hdGlvbiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJXZWFrTWFwIiwibiIsIl9fZXNNb2R1bGUiLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YyIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfaHViYmxlTW9kdWxlIiwiX2h1YmJsZVByb21pc2UiLCJfc3dpcGVDb250YWluZXIiLCJfZ2xvYmVDb250YWluZXIiLCJsb2FkSHViYmxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwibW9kIiwic3dpcGVNb2QiLCJnbG9iZU1vZCIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJzZW50IiwiU3dpcGVFeHBvcnRWaWRlb1BhbmVsQ29udGFpbmVyIiwidDAiLCJHbG9iZUV4cG9ydFZpZGVvUGFuZWxDb250YWluZXIiLCJ0MSIsImFicnVwdCIsInN0b3AiLCJfeCIsImVyciIsIkRFRkFVTFRfRklMRU5BTUUiLCJFeHBvcnRWaWRlb01vZGFsVGFic0ZhY3RvcnkiLCJNb2RhbFRhYnMiLCJfcmVmMiIsImN1cnJlbnRNZXRob2QiLCJ0b2dnbGVNZXRob2QiLCJsb2FkaW5nTWV0aG9kcyIsImNyZWF0ZUVsZW1lbnQiLCJTdHlsZWRNb2RhbFRhYiIsIm1hcCIsIm1ldGhvZCIsIlN0eWxlZFRhYkl0ZW0iLCJrZXkiLCJpZCIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJGb3JtYXR0ZWRNZXNzYWdlIiwibGFiZWwiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJib3JkZXJDb2xvckxUIiwic3VidGV4dENvbG9yTFQiLCJ0ZXh0Q29sb3JMVCIsIkxpZ2h0SXRlbVNlbGVjdG9yIiwiX2V4dGVuZHMyIiwiaW5wdXRUaGVtZSIsIlNMSURFUl9MSUdIVF9PVkVSUklERVMiLCJzbGlkZXJCYXJDb2xvciIsInNsaWRlckJhckJnZCIsInNsaWRlckJhckhvdmVyQ29sb3IiLCJzbGlkZXJIYW5kbGVDb2xvciIsInNsaWRlckhhbmRsZUhvdmVyQ29sb3IiLCJzbGlkZXJJbmFjdGl2ZUJvcmRlckNvbG9yIiwic2xpZGVySGFuZGxlVGV4dENvbG9yIiwic2xpZGVySGFuZGxlU2hhZG93IiwiTGlnaHRTbGlkZXIiLCJ1c2VUaGVtZSIsImxpZ2h0VGhlbWUiLCJ1c2VNZW1vIiwiVGhlbWVQcm92aWRlciIsIktFUExFUl9VSSIsIkJ1dHRvbiIsIkljb25zIiwiSW5wdXQiLCJJbnB1dExpZ2h0IiwiSXRlbVNlbGVjdG9yIiwiU2xpZGVyIiwiTG9hZGluZ1NwaW5uZXIiLCJNb2RhbFRhYnNGYWN0b3J5IiwiU3R5bGVkRXhwb3J0VmlkZW9Nb2RhbENvbnRlbnQiLCJTdHlsZWRNb2RhbENvbnRlbnQiLCJwcmltYXJ5QnRuQWN0QmdkIiwiSFVCQkxFX1BBTkVMX09WRVJIRUFEIiwiRVhQT1JUX1ZJREVPX01PREFMX01BWF9XSURUSCIsIk1PREFMX0hPUklaT05UQUxfUEFERElORyIsIkV4cG9ydFZpZGVvTW9kYWxGYWN0b3J5IiwiRXhwb3J0VmlkZW9Nb2RhbCIsIl9yZWYzIiwiX21hcFN0YXRlJGdsb2JlIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJfcmVmMyRtYXBib3hBcGlVcmwiLCJtYXBib3hBcGlVcmwiLCJERUZBVUxUX01BUEJPWF9BUElfVVJMIiwibWFwU3RhdGUiLCJtYXBTdHlsZSIsInZpc1N0YXRlIiwiZXhwb3J0VmlkZW8iLCJjb250YWluZXJXIiwidmlzU3RhdGVBY3Rpb25zIiwidWlTdGF0ZUFjdGlvbnMiLCJvbkNsb3NlIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiaHViYmxlIiwic2V0SHViYmxlIiwic2hhZG93Q29tcG9zaXRpbmdSZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJwYXRjaERlY2tSZW5kZXJlckZvclBvc3RQcm9jZXNzaW5nIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJodWJibGVFcnJvciIsInNldEh1YmJsZUVycm9yIiwibWVzc2FnZSIsImN1cnJlbnQiLCJjbGVhbnVwIiwiZXhwb3J0VmlkZW9XaWR0aCIsIm1vZGFsSW5uZXJXIiwiTWF0aCIsIm1pbiIsIm1heCIsImtlcGxlclN0YXRlIiwic3R5bGVUeXBlIiwiTk9fTUFQX0lEIiwiX21hcFN0eWxlJG1hcFN0eWxlcyIsIm5vTWFwRW50cnkiLCJtYXBTdHlsZXMiLCJ1cmwiLCJiZyIsImJhY2tncm91bmRDb2xvciIsImJnU3R5bGUiLCJFTVBUWV9NQVBCT1hfU1RZTEUiLCJsYXllcnMiLCJ0eXBlIiwicGFpbnQiLCJjb25jYXQiLCJlbXB0eVN0eWxlVXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIm9uVXBkYXRlTWFwIiwidXNlQ2FsbGJhY2siLCJ2aWV3UG9ydCIsInNldEV4cG9ydFZpZGVvU2V0dGluZyIsImh1YmJsZURlY2tHbFByb3BzIiwiZ2V0SHViYmxlRGVja0dsUHJvcHMiLCJfdXNlU3RhdGU1IiwiZWZmZWN0cyIsImVmZmVjdCIsImNsb25lIiwiX3VzZVN0YXRlNiIsInZpZGVvRWZmZWN0cyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwidmlkZW9Db25maWd1cmF0aW9uIiwic2V0VmlkZW9Db25maWd1cmF0aW9uIiwib25VcGRhdGVWaWRlb0NvbmZpZ3VyYXRpb24iLCJ2YWx1ZXMiLCJzd2lwZVN0YXJ0UGN0IiwidW5kZWZpbmVkIiwic3dpcGVFbmRQY3QiLCJzd2lwZUVhc2luZyIsImh1YmJsZUNvbnRhaW5lclJlZiIsInVzZUZvZ0hlaWdodEFuaW1hdGlvbiIsImRlY2tFZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJjb21wdXRlRGVja0VmZmVjdHMiLCJpc0V4cG9ydCIsImhhc1NoYWRvdyIsInNvbWUiLCJzaGFkb3ciLCJoYXNQb3N0UHJvY2VzcyIsInBvc3RSZW5kZXIiLCJEZWNrU2hhZG93Q29tcG9zaXRpbmdFZmZlY3QiLCJkZWNrUHJvcHNXaXRoRWZmZWN0cyIsIl9pc0V4cG9ydCIsIm9uVmlld0NoYW5nZSIsInZpZXdTdGF0ZSIsIm9uVmlld1BvcnRDaGFuZ2UiLCJzdGF0aWNNYXBQcm9wcyIsImdldFN0YXRpY01hcFByb3BzIiwiaXNTd2lwZU1vZGUiLCJtYXBTcGxpdE1vZGUiLCJNYXBTcGxpdE1vZGUiLCJTV0lQRV9DT01QQVJFIiwiaXNTcGxpdCIsImlzR2xvYmVFbmFibGVkIiwiQm9vbGVhbiIsImdsb2JlIiwiZW5hYmxlZCIsIm9uRmlsdGVyRnJhbWVVcGRhdGUiLCJmaWx0ZXJJZHgiLCJuYW1lIiwidmFsdWUiLCJzZXRGaWx0ZXJBbmltYXRpb25UaW1lIiwib25UcmlwRnJhbWVVcGRhdGUiLCJzZXRMYXllckFuaW1hdGlvblRpbWUiLCJ0b3BMYXllciIsImdldEJlZm9yZUxheWVySWQiLCJ0b3BNYXBTdHlsZSIsImJvdHRvbU1hcFN0eWxlIiwiYW5pbWF0YWJsZUZpbHRlcnMiLCJnZXRBbmltYXRhYmxlRmlsdGVycyIsInN0eWxlIiwicGFkZGluZyIsInRleHRBbGlnbiIsImNvbG9yIiwiRXhwb3J0VmlkZW9QYW5lbENvbnRhaW5lciIsIktlcGxlclVJQ29udGV4dCIsIlN3aXBlQ29udGFpbmVyIiwiR2xvYmVDb250YWluZXIiLCJQcm92aWRlciIsImluaXRpYWxTdGF0ZSIsIm1hcERhdGEiLCJvblNldHRpbmdzQ2hhbmdlIiwiaGVhZGVyIiwiaGFuZGxlQ2xvc2UiLCJkZWNrUHJvcHMiLCJtYXBQcm9wcyIsImRpc2FibGVCYXNlTWFwIiwibWFwYm94TGF5ZXJCZWZvcmVJZCIsImRlZmF1bHRGaWxlTmFtZSIsImdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcyIsInJlZiIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RhbHMvZXhwb3J0LXZpZGVvLW1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7VGhlbWVQcm92aWRlciwgdXNlVGhlbWV9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtcbiAgREVGQVVMVF9NQVBCT1hfQVBJX1VSTCxcbiAgTk9fTUFQX0lELFxuICBFTVBUWV9NQVBCT1hfU1RZTEUsXG4gIE1hcFNwbGl0TW9kZVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7Vmlld3BvcnQsIEV4cG9ydFZpZGVvLCBFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtcbiAgb25WaWV3UG9ydENoYW5nZSxcbiAgY29tcHV0ZURlY2tFZmZlY3RzLFxuICBwYXRjaERlY2tSZW5kZXJlckZvclBvc3RQcm9jZXNzaW5nXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtEZWNrU2hhZG93Q29tcG9zaXRpbmdFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge01hcFN0eWxlfSBmcm9tICdAa2VwbGVyLmdsL3JlZHVjZXJzJztcbmltcG9ydCB7VUlTdGF0ZUFjdGlvbnMsIFZpc1N0YXRlQWN0aW9uc30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuaW1wb3J0IHtTdHlsZWRNb2RhbENvbnRlbnQsIElucHV0TGlnaHR9IGZyb20gJy4uL2NvbW1vbi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge0J1dHRvbiwgSWNvbnN9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgSXRlbVNlbGVjdG9yIGZyb20gJy4uL2NvbW1vbi9pdGVtLXNlbGVjdG9yL2l0ZW0tc2VsZWN0b3InO1xuaW1wb3J0IFNsaWRlciBmcm9tICcuLi9jb21tb24vc2xpZGVyL3NsaWRlcic7XG5pbXBvcnQgTG9hZGluZ1NwaW5uZXIgZnJvbSAnLi4vY29tbW9uL2xvYWRpbmctc3Bpbm5lcic7XG5cbmltcG9ydCB7XG4gIGdldFN0YXRpY01hcFByb3BzLFxuICBnZXRCZWZvcmVMYXllcklkLFxuICBnZXRIdWJibGVEZWNrR2xQcm9wcyxcbiAgZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzLFxuICBnZXRBbmltYXRhYmxlRmlsdGVyc1xufSBmcm9tICcuL2h1YmJsZS11dGlscyc7XG5pbXBvcnQge3VzZUZvZ0hlaWdodEFuaW1hdGlvbn0gZnJvbSAnLi9mb2ctaGVpZ2h0LWFuaW1hdGlvbic7XG5cbnR5cGUgU3dpcGVDb250YWluZXJUeXBlID0gUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+O1xuXG50eXBlIEh1YmJsZU1vZHVsZSA9IHtcbiAgRXhwb3J0VmlkZW9QYW5lbENvbnRhaW5lcjogUmVhY3QuQ29tcG9uZW50VHlwZTxhbnk+O1xuICBLZXBsZXJVSUNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8YW55Pjtcbn07XG5cbmxldCBfaHViYmxlTW9kdWxlOiBIdWJibGVNb2R1bGUgfCBudWxsID0gbnVsbDtcbmxldCBfaHViYmxlUHJvbWlzZTogUHJvbWlzZTxIdWJibGVNb2R1bGU+IHwgbnVsbCA9IG51bGw7XG5sZXQgX3N3aXBlQ29udGFpbmVyOiBTd2lwZUNvbnRhaW5lclR5cGUgfCBudWxsID0gbnVsbDtcbmxldCBfZ2xvYmVDb250YWluZXI6IFN3aXBlQ29udGFpbmVyVHlwZSB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBsb2FkSHViYmxlKCk6IFByb21pc2U8SHViYmxlTW9kdWxlPiB7XG4gIGlmIChfaHViYmxlTW9kdWxlKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKF9odWJibGVNb2R1bGUpO1xuICBpZiAoX2h1YmJsZVByb21pc2UpIHJldHVybiBfaHViYmxlUHJvbWlzZTtcbiAgX2h1YmJsZVByb21pc2UgPSBpbXBvcnQoJ0BodWJibGUuZ2wvcmVhY3QnKS50aGVuKFxuICAgIGFzeW5jIG1vZCA9PiB7XG4gICAgICBfaHViYmxlTW9kdWxlID0gbW9kIGFzIHVua25vd24gYXMgSHViYmxlTW9kdWxlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3dpcGVNb2QgPSBhd2FpdCBpbXBvcnQoJy4vc3dpcGUtZXhwb3J0LXZpZGVvLWNvbnRhaW5lcicpO1xuICAgICAgICBfc3dpcGVDb250YWluZXIgPSBzd2lwZU1vZC5Td2lwZUV4cG9ydFZpZGVvUGFuZWxDb250YWluZXI7XG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgIC8vIHN3aXBlIGV4cG9ydCB1bmF2YWlsYWJsZTsgcmVndWxhciBleHBvcnQgc3RpbGwgd29ya3NcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGdsb2JlTW9kID0gYXdhaXQgaW1wb3J0KCcuL2dsb2JlLWV4cG9ydC12aWRlby1jb250YWluZXInKTtcbiAgICAgICAgX2dsb2JlQ29udGFpbmVyID0gZ2xvYmVNb2QuR2xvYmVFeHBvcnRWaWRlb1BhbmVsQ29udGFpbmVyO1xuICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAvLyBnbG9iZSBleHBvcnQgY29udGFpbmVyIHVuYXZhaWxhYmxlOyBmYWxscyBiYWNrIHRvIGh1YmJsZSdzIGNvbnRhaW5lclxuICAgICAgfVxuICAgICAgcmV0dXJuIF9odWJibGVNb2R1bGU7XG4gICAgfSxcbiAgICBlcnIgPT4ge1xuICAgICAgX2h1YmJsZVByb21pc2UgPSBudWxsO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgKTtcbiAgcmV0dXJuIF9odWJibGVQcm9taXNlO1xufVxuXG5jb25zdCBERUZBVUxUX0ZJTEVOQU1FID0gJ2tlcGxlci5nbCc7XG5cbmZ1bmN0aW9uIEV4cG9ydFZpZGVvTW9kYWxUYWJzRmFjdG9yeSgpIHtcbiAgY29uc3QgTW9kYWxUYWJzOiBSZWFjdC5GQzx7XG4gICAgY3VycmVudE1ldGhvZDogc3RyaW5nO1xuICAgIHRvZ2dsZU1ldGhvZDogKG1ldGhvZDoge2lkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmd9KSA9PiB2b2lkO1xuICAgIGxvYWRpbmdNZXRob2RzOiBBcnJheTx7aWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZ30+O1xuICB9PiA9ICh7Y3VycmVudE1ldGhvZCwgdG9nZ2xlTWV0aG9kLCBsb2FkaW5nTWV0aG9kc30pID0+IChcbiAgICA8U3R5bGVkTW9kYWxUYWI+XG4gICAgICB7bG9hZGluZ01ldGhvZHMubWFwKG1ldGhvZCA9PiAoXG4gICAgICAgIDxTdHlsZWRUYWJJdGVtXG4gICAgICAgICAga2V5PXttZXRob2QuaWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtjdXJyZW50TWV0aG9kID09PSBtZXRob2QuaWQgPyAnYWN0aXZlJyA6ICcnfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRvZ2dsZU1ldGhvZChtZXRob2QpfVxuICAgICAgICA+XG4gICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e21ldGhvZC5sYWJlbH0gLz5cbiAgICAgICAgPC9TdHlsZWRUYWJJdGVtPlxuICAgICAgKSl9XG4gICAgPC9TdHlsZWRNb2RhbFRhYj5cbiAgKTtcblxuICByZXR1cm4gTW9kYWxUYWJzO1xufVxuXG5jb25zdCBTdHlsZWRNb2RhbFRhYiA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLmJvcmRlckNvbG9yTFR9O1xuICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuYDtcblxuY29uc3QgU3R5bGVkVGFiSXRlbSA9IHN0eWxlZC5kaXZgXG4gIHBhZGRpbmc6IDhweCAxNnB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3VidGV4dENvbG9yTFR9O1xuICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cbiAgJi5hY3RpdmUge1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckxUfTtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS50ZXh0Q29sb3JMVH07XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckxUfTtcbiAgfVxuYDtcblxuY29uc3QgTGlnaHRJdGVtU2VsZWN0b3I6IFJlYWN0LkZDPGFueT4gPSBwcm9wcyA9PiA8SXRlbVNlbGVjdG9yIHsuLi5wcm9wc30gaW5wdXRUaGVtZT1cImxpZ2h0XCIgLz47XG5cbmNvbnN0IFNMSURFUl9MSUdIVF9PVkVSUklERVMgPSB7XG4gIHNsaWRlckJhckNvbG9yOiAnI0EwQTdCNCcsXG4gIHNsaWRlckJhckJnZDogJyNEM0Q4RTAnLFxuICBzbGlkZXJCYXJIb3ZlckNvbG9yOiAnIzkzOUJBOCcsXG4gIHNsaWRlckhhbmRsZUNvbG9yOiAnI0Y3RjdGNycsXG4gIHNsaWRlckhhbmRsZUhvdmVyQ29sb3I6ICcjRjdGN0Y3JyxcbiAgc2xpZGVySW5hY3RpdmVCb3JkZXJDb2xvcjogJyNGN0Y3RjcnLFxuICBzbGlkZXJIYW5kbGVUZXh0Q29sb3I6ICcjRjdGN0Y3JyxcbiAgc2xpZGVySGFuZGxlU2hhZG93OiAnMCAycHggNHB4IDAgcmdiYSgwLDAsMCwwLjIwKSdcbn07XG5cbmNvbnN0IExpZ2h0U2xpZGVyOiBSZWFjdC5GQzxhbnk+ID0gcHJvcHMgPT4ge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGxpZ2h0VGhlbWUgPSB1c2VNZW1vKCgpID0+ICh7Li4udGhlbWUsIC4uLlNMSURFUl9MSUdIVF9PVkVSUklERVN9KSwgW3RoZW1lXSk7XG4gIHJldHVybiAoXG4gICAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e2xpZ2h0VGhlbWV9PlxuICAgICAgPFNsaWRlciB7Li4ucHJvcHN9IC8+XG4gICAgPC9UaGVtZVByb3ZpZGVyPlxuICApO1xufTtcblxuY29uc3QgS0VQTEVSX1VJOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHtcbiAgQnV0dG9uLFxuICBJY29ucyxcbiAgSW5wdXQ6IElucHV0TGlnaHQsXG4gIEl0ZW1TZWxlY3RvcjogTGlnaHRJdGVtU2VsZWN0b3IsXG4gIFNsaWRlcjogTGlnaHRTbGlkZXIsXG4gIExvYWRpbmdTcGlubmVyLFxuICBNb2RhbFRhYnNGYWN0b3J5OiBFeHBvcnRWaWRlb01vZGFsVGFic0ZhY3Rvcnlcbn07XG5cbmNvbnN0IFN0eWxlZEV4cG9ydFZpZGVvTW9kYWxDb250ZW50ID0gc3R5bGVkKFN0eWxlZE1vZGFsQ29udGVudClgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdyaWQtcm93LWdhcDogMzJweDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICAuZXhwb3J0LXZpZGVvLXBhbmVsIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuICAuZXhwb3J0LXZpZGVvLXBhbmVsX19ib2R5IHtcbiAgICBncmlkLWNvbHVtbi1nYXA6IDI0cHg7XG4gIH1cbiAgLmRhdGEtZXgtaWNvbnMtcGxheSA+IHBhdGg6bGFzdC1jaGlsZCxcbiAgLmRhdGEtZXgtaWNvbnMtc3RvcCA+IHBhdGg6bGFzdC1jaGlsZCB7XG4gICAgZmlsbDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSAhaW1wb3J0YW50O1xuICAgIHN0cm9rZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5wcmltYXJ5QnRuQWN0QmdkfTtcbiAgICBzdHJva2Utd2lkdGg6IDNweDtcbiAgfVxuICAuZGF0YS1leC1pY29ucy1wbGF5ID4gcGF0aDpsYXN0LWNoaWxkOmhvdmVyLFxuICAuZGF0YS1leC1pY29ucy1zdG9wID4gcGF0aDpsYXN0LWNoaWxkOmhvdmVyIHtcbiAgICBmaWxsOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnByaW1hcnlCdG5BY3RCZ2R9ICFpbXBvcnRhbnQ7XG4gIH1cbiAgI2RlY2stY2FudmFzOjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpKVxuICAgICAgICBuby1yZXBlYXQgY2VudGVyIC8gMXB4IDEwMCUsXG4gICAgICBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSkgbm8tcmVwZWF0XG4gICAgICAgIGNlbnRlciAvIDEwMCUgMXB4O1xuICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuNikpO1xuICB9XG5gO1xuXG5leHBvcnQgdHlwZSBWaWRlb0NvbmZpZ3VyYXRpb24gPSB7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgY2FtZXJhUHJlc2V0Pzogc3RyaW5nO1xuICBmaWxlTmFtZT86IHN0cmluZztcbiAgcmVzb2x1dGlvbj86IHN0cmluZztcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgc3dpcGVTdGFydFBjdD86IG51bWJlcjtcbiAgc3dpcGVFbmRQY3Q/OiBudW1iZXI7XG4gIHN3aXBlRWFzaW5nPzogJ2xpbmVhcicgfCAnZWFzZS1pbi1vdXQnO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRWaWRlb01vZGFsUHJvcHMge1xuICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogc3RyaW5nO1xuICBtYXBib3hBcGlVcmw/OiBzdHJpbmc7XG4gIG1hcFN0YXRlOiBhbnk7XG4gIG1hcFN0eWxlOiBNYXBTdHlsZTtcbiAgdmlzU3RhdGU6IGFueTtcbiAgZXhwb3J0VmlkZW86IEV4cG9ydFZpZGVvO1xuICBjb250YWluZXJXOiBudW1iZXI7XG4gIHZpc1N0YXRlQWN0aW9uczogdHlwZW9mIFZpc1N0YXRlQWN0aW9ucztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbn1cblxuY29uc3QgSFVCQkxFX1BBTkVMX09WRVJIRUFEID0gMiAqIDMyICsgMjQgKyAyODA7XG5jb25zdCBFWFBPUlRfVklERU9fTU9EQUxfTUFYX1dJRFRIID0gMTA4MDtcbmNvbnN0IE1PREFMX0hPUklaT05UQUxfUEFERElORyA9IDE0NDtcblxuY29uc3QgRXhwb3J0VmlkZW9Nb2RhbEZhY3RvcnkgPSAoKSA9PiB7XG4gIGNvbnN0IEV4cG9ydFZpZGVvTW9kYWw6IFJlYWN0LkZDPEV4cG9ydFZpZGVvTW9kYWxQcm9wcz4gPSAoe1xuICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgIG1hcGJveEFwaVVybCA9IERFRkFVTFRfTUFQQk9YX0FQSV9VUkwsXG4gICAgbWFwU3RhdGUsXG4gICAgbWFwU3R5bGUsXG4gICAgdmlzU3RhdGUsXG4gICAgZXhwb3J0VmlkZW8sXG4gICAgY29udGFpbmVyVyxcbiAgICB2aXNTdGF0ZUFjdGlvbnMsXG4gICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgb25DbG9zZVxuICB9KSA9PiB7XG4gICAgY29uc3QgW2h1YmJsZSwgc2V0SHViYmxlXSA9IHVzZVN0YXRlPEh1YmJsZU1vZHVsZSB8IG51bGw+KF9odWJibGVNb2R1bGUpO1xuICAgIGNvbnN0IHNoYWRvd0NvbXBvc2l0aW5nUmVmID0gdXNlUmVmPEluc3RhbmNlVHlwZTx0eXBlb2YgRGVja1NoYWRvd0NvbXBvc2l0aW5nRWZmZWN0PiB8IG51bGw+KFxuICAgICAgbnVsbFxuICAgICk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgcGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZygpO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IFtodWJibGVFcnJvciwgc2V0SHViYmxlRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKCFodWJibGUgJiYgIWh1YmJsZUVycm9yKSB7XG4gICAgICAgIGxvYWRIdWJibGUoKVxuICAgICAgICAgIC50aGVuKHNldEh1YmJsZSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHNldEh1YmJsZUVycm9yKGVycj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxvYWQgdmlkZW8gZXhwb3J0IG1vZHVsZScpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIFtodWJibGUsIGh1YmJsZUVycm9yXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKHNoYWRvd0NvbXBvc2l0aW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBzaGFkb3dDb21wb3NpdGluZ1JlZi5jdXJyZW50LmNsZWFudXAoKTtcbiAgICAgICAgICBzaGFkb3dDb21wb3NpdGluZ1JlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBleHBvcnRWaWRlb1dpZHRoID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCBtb2RhbElubmVyVyA9XG4gICAgICAgIE1hdGgubWluKEVYUE9SVF9WSURFT19NT0RBTF9NQVhfV0lEVEgsIGNvbnRhaW5lclcgKiAwLjcsIGNvbnRhaW5lclcpIC1cbiAgICAgICAgTU9EQUxfSE9SSVpPTlRBTF9QQURESU5HO1xuICAgICAgcmV0dXJuIE1hdGgubWF4KDMyMCwgTWF0aC5taW4oNTQwLCBtb2RhbElubmVyVyAtIEhVQkJMRV9QQU5FTF9PVkVSSEVBRCkpO1xuICAgIH0sIFtjb250YWluZXJXXSk7XG5cbiAgICBjb25zdCBrZXBsZXJTdGF0ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgaWYgKG1hcFN0eWxlPy5zdHlsZVR5cGUgPT09IE5PX01BUF9JRCkge1xuICAgICAgICBjb25zdCBub01hcEVudHJ5ID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bTk9fTUFQX0lEXTtcbiAgICAgICAgaWYgKG5vTWFwRW50cnkgJiYgIW5vTWFwRW50cnkudXJsKSB7XG4gICAgICAgICAgY29uc3QgYmcgPSBtYXBTdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgY29uc3QgYmdTdHlsZSA9IHtcbiAgICAgICAgICAgIC4uLkVNUFRZX01BUEJPWF9TVFlMRSxcbiAgICAgICAgICAgIGxheWVyczogYmdcbiAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiAnYmFja2dyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdiYWNrZ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGByZ2IoJHtiZ1swXX0sJHtiZ1sxXX0sJHtiZ1syXX0pYFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICA6IFtdXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBlbXB0eVN0eWxlVXJsID0gYGRhdGE6YXBwbGljYXRpb24vanNvbiwke2VuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGJnU3R5bGUpXG4gICAgICAgICAgKX1gO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgICAgIG1hcFN0YXRlLFxuICAgICAgICAgICAgbWFwU3R5bGU6IHtcbiAgICAgICAgICAgICAgLi4ubWFwU3R5bGUsXG4gICAgICAgICAgICAgIG1hcFN0eWxlczoge1xuICAgICAgICAgICAgICAgIC4uLm1hcFN0eWxlLm1hcFN0eWxlcyxcbiAgICAgICAgICAgICAgICBbTk9fTUFQX0lEXTogey4uLm5vTWFwRW50cnksIHVybDogZW1wdHlTdHlsZVVybH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7dmlzU3RhdGUsIG1hcFN0YXRlLCBtYXBTdHlsZX07XG4gICAgfSwgW3Zpc1N0YXRlLCBtYXBTdGF0ZSwgbWFwU3R5bGVdKTtcblxuICAgIGNvbnN0IG9uVXBkYXRlTWFwID0gdXNlQ2FsbGJhY2soXG4gICAgICAodmlld1BvcnQ6IFZpZXdwb3J0KSA9PiB7XG4gICAgICAgIHVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydFZpZGVvU2V0dGluZyh2aWV3UG9ydCBhcyBhbnkpO1xuICAgICAgfSxcbiAgICAgIFt1aVN0YXRlQWN0aW9uc11cbiAgICApO1xuXG4gICAgY29uc3QgaHViYmxlRGVja0dsUHJvcHMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gZ2V0SHViYmxlRGVja0dsUHJvcHMoa2VwbGVyU3RhdGUsIG1hcGJveEFwaUFjY2Vzc1Rva2VuLCBtYXBib3hBcGlVcmwpLFxuICAgICAgW2tlcGxlclN0YXRlLCBtYXBib3hBcGlBY2Nlc3NUb2tlbiwgbWFwYm94QXBpVXJsXVxuICAgICk7XG5cbiAgICBjb25zdCBbdmlkZW9FZmZlY3RzXSA9IHVzZVN0YXRlPEVmZmVjdFtdPigoKSA9PlxuICAgICAgKHZpc1N0YXRlLmVmZmVjdHMgfHwgW10pLm1hcCgoZWZmZWN0OiBFZmZlY3QpID0+IGVmZmVjdC5jbG9uZSgpKVxuICAgICk7XG5cbiAgICBjb25zdCBbdmlkZW9Db25maWd1cmF0aW9uLCBzZXRWaWRlb0NvbmZpZ3VyYXRpb25dID0gdXNlU3RhdGU8VmlkZW9Db25maWd1cmF0aW9uPih7XG4gICAgICAuLi5leHBvcnRWaWRlb1xuICAgIH0pO1xuICAgIGNvbnN0IG9uVXBkYXRlVmlkZW9Db25maWd1cmF0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgICAodmFsdWVzOiBWaWRlb0NvbmZpZ3VyYXRpb24pID0+IHtcbiAgICAgICAgc2V0VmlkZW9Db25maWd1cmF0aW9uKHByZXYgPT4gKHsuLi5wcmV2LCAuLi52YWx1ZXN9KSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWx1ZXMuc3dpcGVTdGFydFBjdCAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgdmFsdWVzLnN3aXBlRW5kUGN0ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICB2YWx1ZXMuc3dpcGVFYXNpbmcgIT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB1aVN0YXRlQWN0aW9ucy5zZXRFeHBvcnRWaWRlb1NldHRpbmcodmFsdWVzIGFzIGFueSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbdWlTdGF0ZUFjdGlvbnNdXG4gICAgKTtcblxuICAgIGNvbnN0IGh1YmJsZUNvbnRhaW5lclJlZiA9IHVzZVJlZjxhbnk+KG51bGwpO1xuXG4gICAgdXNlRm9nSGVpZ2h0QW5pbWF0aW9uKHZpZGVvRWZmZWN0cywgaHViYmxlQ29udGFpbmVyUmVmKTtcblxuICAgIGNvbnN0IGRlY2tFZmZlY3RzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAodmlkZW9FZmZlY3RzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgY29uc3QgZWZmZWN0T3JkZXIgPSB2aXNTdGF0ZS5lZmZlY3RPcmRlciB8fCB2aWRlb0VmZmVjdHMubWFwKChlOiBFZmZlY3QpID0+IGUuaWQpO1xuICAgICAgY29uc3QgZWZmZWN0cyA9IGNvbXB1dGVEZWNrRWZmZWN0cyh7XG4gICAgICAgIHZpc1N0YXRlOiB7Li4udmlzU3RhdGUsIGVmZmVjdHM6IHZpZGVvRWZmZWN0cywgZWZmZWN0T3JkZXJ9LFxuICAgICAgICBtYXBTdGF0ZSxcbiAgICAgICAgaXNFeHBvcnQ6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBoYXNTaGFkb3cgPSBlZmZlY3RzLnNvbWUoKGU6IGFueSkgPT4gZS5zaGFkb3cgPT09IHRydWUpO1xuICAgICAgY29uc3QgaGFzUG9zdFByb2Nlc3MgPSBlZmZlY3RzLnNvbWUoKGU6IGFueSkgPT4gdHlwZW9mIGUucG9zdFJlbmRlciA9PT0gJ2Z1bmN0aW9uJyk7XG4gICAgICBpZiAoaGFzU2hhZG93ICYmICFoYXNQb3N0UHJvY2Vzcykge1xuICAgICAgICBpZiAoIXNoYWRvd0NvbXBvc2l0aW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBzaGFkb3dDb21wb3NpdGluZ1JlZi5jdXJyZW50ID0gbmV3IERlY2tTaGFkb3dDb21wb3NpdGluZ0VmZmVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVmZmVjdHMucHVzaChzaGFkb3dDb21wb3NpdGluZ1JlZi5jdXJyZW50IGFzIGFueSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlZmZlY3RzO1xuICAgIH0sIFt2aXNTdGF0ZSwgdmlkZW9FZmZlY3RzLCBtYXBTdGF0ZV0pO1xuXG4gICAgY29uc3QgZGVja1Byb3BzV2l0aEVmZmVjdHMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgLi4uaHViYmxlRGVja0dsUHJvcHMsXG4gICAgICAgIF9pc0V4cG9ydDogdHJ1ZSxcbiAgICAgICAgZWZmZWN0czogZGVja0VmZmVjdHNcbiAgICAgIH0pLFxuICAgICAgW2h1YmJsZURlY2tHbFByb3BzLCBkZWNrRWZmZWN0c11cbiAgICApO1xuXG4gICAgY29uc3Qgb25WaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgICAodmlld1N0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PlxuICAgICAgICBvblZpZXdQb3J0Q2hhbmdlKHZpZXdTdGF0ZSBhcyBWaWV3cG9ydCwgb25VcGRhdGVNYXAgYXMgYW55KSxcbiAgICAgIFtvblVwZGF0ZU1hcF1cbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGljTWFwUHJvcHMgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gZ2V0U3RhdGljTWFwUHJvcHMoa2VwbGVyU3RhdGUsIG9uVmlld0NoYW5nZSwgbWFwYm94QXBpQWNjZXNzVG9rZW4sIG1hcGJveEFwaVVybCksXG4gICAgICBba2VwbGVyU3RhdGUsIG9uVmlld0NoYW5nZSwgbWFwYm94QXBpQWNjZXNzVG9rZW4sIG1hcGJveEFwaVVybF1cbiAgICApO1xuXG4gICAgY29uc3QgaXNTd2lwZU1vZGUgPSBtYXBTdGF0ZS5tYXBTcGxpdE1vZGUgPT09IE1hcFNwbGl0TW9kZS5TV0lQRV9DT01QQVJFICYmIG1hcFN0YXRlLmlzU3BsaXQ7XG5cbiAgICAvLyBJbiBnbG9iZSBtb2RlIHRoZSBkZWNrLmdsIEdsb2JlVmlldyByZW5kZXJzIHRoZSBwbGFuZXQgKGFuZCBiYXNlbWFwIHRpbGVzKVxuICAgIC8vIGl0c2VsZjsgdGhlIGZsYXQgbWFwbGlicmUgYmFzZSBtYXAgbXVzdCBiZSBkaXNhYmxlZCBzbyBpdCBkb2Vzbid0IHJlbmRlciBhXG4gICAgLy8gMkQgTWVyY2F0b3IgbWFwIGJlaGluZC9hcm91bmQgdGhlIGdsb2JlLlxuICAgIGNvbnN0IGlzR2xvYmVFbmFibGVkID0gQm9vbGVhbihtYXBTdGF0ZT8uZ2xvYmU/LmVuYWJsZWQpO1xuXG4gICAgY29uc3Qgb25GaWx0ZXJGcmFtZVVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGZpbHRlcklkeDogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdmlzU3RhdGVBY3Rpb25zLnNldEZpbHRlckFuaW1hdGlvblRpbWUoZmlsdGVySWR4LCBuYW1lLCB2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgW3Zpc1N0YXRlQWN0aW9uc11cbiAgICApO1xuXG4gICAgY29uc3Qgb25UcmlwRnJhbWVVcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucy5zZXRMYXllckFuaW1hdGlvblRpbWUodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIFt2aXNTdGF0ZUFjdGlvbnNdXG4gICAgKTtcblxuICAgIGNvbnN0IHRvcExheWVyID0gdXNlTWVtbyhcbiAgICAgICgpID0+IGdldEJlZm9yZUxheWVySWQobWFwU3R5bGU/LnRvcE1hcFN0eWxlLCBtYXBTdHlsZT8uYm90dG9tTWFwU3R5bGUpLFxuICAgICAgW21hcFN0eWxlPy50b3BNYXBTdHlsZSwgbWFwU3R5bGU/LmJvdHRvbU1hcFN0eWxlXVxuICAgICk7XG5cbiAgICBjb25zdCBhbmltYXRhYmxlRmlsdGVycyA9IHVzZU1lbW8oKCkgPT4gZ2V0QW5pbWF0YWJsZUZpbHRlcnMoa2VwbGVyU3RhdGUpLCBba2VwbGVyU3RhdGVdKTtcblxuICAgIGlmICghaHViYmxlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkRXhwb3J0VmlkZW9Nb2RhbENvbnRlbnQgY2xhc3NOYW1lPVwiZXhwb3J0LXZpZGVvLW1vZGFsXCI+XG4gICAgICAgICAge2h1YmJsZUVycm9yID8gKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17e3BhZGRpbmc6ICcyMHB4JywgdGV4dEFsaWduOiAnY2VudGVyJywgY29sb3I6ICcjZDk1MzRmJ319PlxuICAgICAgICAgICAgICA8cD57aHViYmxlRXJyb3J9PC9wPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0SHViYmxlRXJyb3IobnVsbCk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFJldHJ5XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU3R5bGVkRXhwb3J0VmlkZW9Nb2RhbENvbnRlbnQ+XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHtFeHBvcnRWaWRlb1BhbmVsQ29udGFpbmVyLCBLZXBsZXJVSUNvbnRleHR9ID0gaHViYmxlO1xuXG4gICAgY29uc3QgU3dpcGVDb250YWluZXIgPSBfc3dpcGVDb250YWluZXI7XG4gICAgY29uc3QgR2xvYmVDb250YWluZXIgPSBfZ2xvYmVDb250YWluZXI7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPEtlcGxlclVJQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17S0VQTEVSX1VJfT5cbiAgICAgICAgPFN0eWxlZEV4cG9ydFZpZGVvTW9kYWxDb250ZW50IGNsYXNzTmFtZT1cImV4cG9ydC12aWRlby1tb2RhbFwiPlxuICAgICAgICAgIHtpc1N3aXBlTW9kZSAmJiBTd2lwZUNvbnRhaW5lciA/IChcbiAgICAgICAgICAgIDxTd2lwZUNvbnRhaW5lclxuICAgICAgICAgICAgICBpbml0aWFsU3RhdGU9e3ZpZGVvQ29uZmlndXJhdGlvbn1cbiAgICAgICAgICAgICAgbWFwRGF0YT17a2VwbGVyU3RhdGV9XG4gICAgICAgICAgICAgIG9uU2V0dGluZ3NDaGFuZ2U9e29uVXBkYXRlVmlkZW9Db25maWd1cmF0aW9ufVxuICAgICAgICAgICAgICBoZWFkZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICBoYW5kbGVDbG9zZT17b25DbG9zZX1cbiAgICAgICAgICAgICAgZXhwb3J0VmlkZW9XaWR0aD17ZXhwb3J0VmlkZW9XaWR0aH1cbiAgICAgICAgICAgICAgb25GaWx0ZXJGcmFtZVVwZGF0ZT17b25GaWx0ZXJGcmFtZVVwZGF0ZX1cbiAgICAgICAgICAgICAgb25UcmlwRnJhbWVVcGRhdGU9e29uVHJpcEZyYW1lVXBkYXRlfVxuICAgICAgICAgICAgICBkZWNrUHJvcHM9e2RlY2tQcm9wc1dpdGhFZmZlY3RzfVxuICAgICAgICAgICAgICBtYXBQcm9wcz17c3RhdGljTWFwUHJvcHN9XG4gICAgICAgICAgICAgIGRpc2FibGVCYXNlTWFwPXtpc0dsb2JlRW5hYmxlZH1cbiAgICAgICAgICAgICAgbWFwYm94TGF5ZXJCZWZvcmVJZD17dG9wTGF5ZXI/LmlkfVxuICAgICAgICAgICAgICBkZWZhdWx0RmlsZU5hbWU9e0RFRkFVTFRfRklMRU5BTUV9XG4gICAgICAgICAgICAgIGFuaW1hdGFibGVGaWx0ZXJzPXthbmltYXRhYmxlRmlsdGVyc31cbiAgICAgICAgICAgICAgZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzPXtnZXRUaW1lUmFuZ2VGaWx0ZXJLZXlmcmFtZXN9XG4gICAgICAgICAgICAgIHN3aXBlU3RhcnRQY3Q9e2V4cG9ydFZpZGVvLnN3aXBlU3RhcnRQY3R9XG4gICAgICAgICAgICAgIHN3aXBlRW5kUGN0PXtleHBvcnRWaWRlby5zd2lwZUVuZFBjdH1cbiAgICAgICAgICAgICAgc3dpcGVFYXNpbmc9e2V4cG9ydFZpZGVvLnN3aXBlRWFzaW5nfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogaXNHbG9iZUVuYWJsZWQgJiYgR2xvYmVDb250YWluZXIgPyAoXG4gICAgICAgICAgICAvLyBHbG9iZSAobm9uLXN3aXBlKSBleHBvcnQgdXNlcyBhIGRlZGljYXRlZCBjb250YWluZXIgdGhhdCBkcml2ZXMgaXRzXG4gICAgICAgICAgICAvLyBvd24gY2FwdHVyZSBsb29wLiBodWJibGUncyBidWlsdC1pbiBjb250YWluZXIgb25seSBhZHZhbmNlcyBmcmFtZXNcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIG1hcGJveCBiYXNlIG1hcCdzIHJlbmRlciBldmVudCwgd2hpY2ggZG9lc24ndCBmaXJlIGluXG4gICAgICAgICAgICAvLyBnbG9iZSBtb2RlIChiYXNlIG1hcCBkaXNhYmxlZCksIHNvIGl0cyBleHBvcnQgd291bGQgaGFuZy5cbiAgICAgICAgICAgIDxHbG9iZUNvbnRhaW5lclxuICAgICAgICAgICAgICByZWY9e2h1YmJsZUNvbnRhaW5lclJlZn1cbiAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlPXt2aWRlb0NvbmZpZ3VyYXRpb259XG4gICAgICAgICAgICAgIG1hcERhdGE9e2tlcGxlclN0YXRlfVxuICAgICAgICAgICAgICBvblNldHRpbmdzQ2hhbmdlPXtvblVwZGF0ZVZpZGVvQ29uZmlndXJhdGlvbn1cbiAgICAgICAgICAgICAgaGVhZGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgaGFuZGxlQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIGV4cG9ydFZpZGVvV2lkdGg9e2V4cG9ydFZpZGVvV2lkdGh9XG4gICAgICAgICAgICAgIG9uRmlsdGVyRnJhbWVVcGRhdGU9e29uRmlsdGVyRnJhbWVVcGRhdGV9XG4gICAgICAgICAgICAgIG9uVHJpcEZyYW1lVXBkYXRlPXtvblRyaXBGcmFtZVVwZGF0ZX1cbiAgICAgICAgICAgICAgZGVja1Byb3BzPXtkZWNrUHJvcHNXaXRoRWZmZWN0c31cbiAgICAgICAgICAgICAgbWFwUHJvcHM9e3N0YXRpY01hcFByb3BzfVxuICAgICAgICAgICAgICBkZWZhdWx0RmlsZU5hbWU9e0RFRkFVTFRfRklMRU5BTUV9XG4gICAgICAgICAgICAgIGFuaW1hdGFibGVGaWx0ZXJzPXthbmltYXRhYmxlRmlsdGVyc31cbiAgICAgICAgICAgICAgZ2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzPXtnZXRUaW1lUmFuZ2VGaWx0ZXJLZXlmcmFtZXN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8RXhwb3J0VmlkZW9QYW5lbENvbnRhaW5lclxuICAgICAgICAgICAgICByZWY9e2h1YmJsZUNvbnRhaW5lclJlZn1cbiAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlPXt2aWRlb0NvbmZpZ3VyYXRpb259XG4gICAgICAgICAgICAgIG1hcERhdGE9e2tlcGxlclN0YXRlfVxuICAgICAgICAgICAgICBvblNldHRpbmdzQ2hhbmdlPXtvblVwZGF0ZVZpZGVvQ29uZmlndXJhdGlvbn1cbiAgICAgICAgICAgICAgaGVhZGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgaGFuZGxlQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIGV4cG9ydFZpZGVvV2lkdGg9e2V4cG9ydFZpZGVvV2lkdGh9XG4gICAgICAgICAgICAgIG9uRmlsdGVyRnJhbWVVcGRhdGU9e29uRmlsdGVyRnJhbWVVcGRhdGV9XG4gICAgICAgICAgICAgIG9uVHJpcEZyYW1lVXBkYXRlPXtvblRyaXBGcmFtZVVwZGF0ZX1cbiAgICAgICAgICAgICAgZGVja1Byb3BzPXtkZWNrUHJvcHNXaXRoRWZmZWN0c31cbiAgICAgICAgICAgICAgbWFwUHJvcHM9e3N0YXRpY01hcFByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlQmFzZU1hcD17aXNHbG9iZUVuYWJsZWR9XG4gICAgICAgICAgICAgIG1hcGJveExheWVyQmVmb3JlSWQ9e3RvcExheWVyPy5pZH1cbiAgICAgICAgICAgICAgZGVmYXVsdEZpbGVOYW1lPXtERUZBVUxUX0ZJTEVOQU1FfVxuICAgICAgICAgICAgICBhbmltYXRhYmxlRmlsdGVycz17YW5pbWF0YWJsZUZpbHRlcnN9XG4gICAgICAgICAgICAgIGdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcz17Z2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1N0eWxlZEV4cG9ydFZpZGVvTW9kYWxDb250ZW50PlxuICAgICAgPC9LZXBsZXJVSUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gRXhwb3J0VmlkZW9Nb2RhbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEV4cG9ydFZpZGVvTW9kYWxGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFGLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFNQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFLQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFJQSxJQUFBTSxrQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsYUFBQSxHQUFBQyxzQkFBQSxDQUFBVCxPQUFBO0FBQ0EsSUFBQVUsT0FBQSxHQUFBRCxzQkFBQSxDQUFBVCxPQUFBO0FBQ0EsSUFBQVcsZUFBQSxHQUFBRixzQkFBQSxDQUFBVCxPQUFBO0FBRUEsSUFBQVksWUFBQSxHQUFBWixPQUFBO0FBT0EsSUFBQWEsbUJBQUEsR0FBQWIsT0FBQTtBQUE2RCxJQUFBYyxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBO0FBQUEsU0FBQUMsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQWxCLENBQUEsRUFBQUcsTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFILE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLEdBQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBRSxNQUFBLENBQUFnQixjQUFBLENBQUFuQixDQUFBLEVBQUFDLENBQUEsRUFBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBTixDQUFBLEVBQUFELENBQUEsaUJBQUFELENBQUE7QUFBQSxTQUFBbkIsd0JBQUFtQixDQUFBLEVBQUFFLENBQUEsNkJBQUFrQixPQUFBLE1BQUFuQixDQUFBLE9BQUFtQixPQUFBLElBQUFDLENBQUEsT0FBQUQsT0FBQSxZQUFBdkMsdUJBQUEsWUFBQUEsd0JBQUFtQixDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQXNCLFVBQUEsU0FBQXRCLENBQUEsTUFBQU0sQ0FBQSxFQUFBaUIsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUF6QixDQUFBLGlCQUFBQSxDQUFBLG9CQUFBMEIsUUFBQSxhQUFBMUIsQ0FBQSwwQkFBQUEsQ0FBQSxTQUFBd0IsQ0FBQSxNQUFBbEIsQ0FBQSxHQUFBSixDQUFBLEdBQUFtQixDQUFBLEdBQUFwQixDQUFBLFFBQUFLLENBQUEsQ0FBQXFCLEdBQUEsQ0FBQTNCLENBQUEsVUFBQU0sQ0FBQSxDQUFBc0IsR0FBQSxDQUFBNUIsQ0FBQSxHQUFBTSxDQUFBLENBQUF1QixHQUFBLENBQUE3QixDQUFBLEVBQUF3QixDQUFBLGNBQUFNLEVBQUEsSUFBQTlCLENBQUEsZ0JBQUE4QixFQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEMsQ0FBQSxFQUFBOEIsRUFBQSxPQUFBUCxDQUFBLElBQUFqQixDQUFBLEdBQUFILE1BQUEsQ0FBQWdCLGNBQUEsS0FBQWhCLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBOEIsRUFBQSxPQUFBUCxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUF2QixDQUFBLENBQUFrQixDQUFBLEVBQUFNLEVBQUEsRUFBQVAsQ0FBQSxJQUFBQyxDQUFBLENBQUFNLEVBQUEsSUFBQTlCLENBQUEsQ0FBQThCLEVBQUEsV0FBQU4sQ0FBQSxLQUFBeEIsQ0FBQSxFQUFBRSxDQUFBLEtBcEM3RDtBQUNBO0FBNENBLElBQUkrQixhQUFrQyxHQUFHLElBQUk7QUFDN0MsSUFBSUMsY0FBNEMsR0FBRyxJQUFJO0FBQ3ZELElBQUlDLGVBQTBDLEdBQUcsSUFBSTtBQUNyRCxJQUFJQyxlQUEwQyxHQUFHLElBQUk7QUFFckQsU0FBU0MsVUFBVUEsQ0FBQSxFQUEwQjtFQUMzQyxJQUFJSixhQUFhLEVBQUUsT0FBT0ssT0FBTyxDQUFDQyxPQUFPLENBQUNOLGFBQWEsQ0FBQztFQUN4RCxJQUFJQyxjQUFjLEVBQUUsT0FBT0EsY0FBYztFQUN6Q0EsY0FBYyxHQUFHSSxPQUFBLENBQUFDLE9BQUEsR0FBQUMsSUFBQTtJQUFBLE9BQUEzRCx1QkFBQSxDQUFBQyxPQUFBLENBQU8sa0JBQWtCO0VBQUEsR0FBRTBELElBQUk7SUFBQSxJQUFBQyxJQUFBLE9BQUFDLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FDOUMsU0FBQUMsUUFBTUMsR0FBRztNQUFBLElBQUFDLFFBQUEsRUFBQUMsUUFBQTtNQUFBLE9BQUFMLFlBQUEsWUFBQU0sSUFBQSxVQUFBQyxTQUFBQyxRQUFBO1FBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7VUFBQTtZQUNQcEIsYUFBYSxHQUFHYSxHQUE4QjtZQUFDSyxRQUFBLENBQUFDLElBQUE7WUFBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUEsT0FBQWYsT0FBQSxDQUFBQyxPQUFBLEdBQUFDLElBQUE7Y0FBQSxPQUFBM0QsdUJBQUEsQ0FBQUMsT0FBQSxDQUVmLGdDQUFnQztZQUFBO1VBQUE7WUFBeERpRSxRQUFRLEdBQUFJLFFBQUEsQ0FBQUcsSUFBQTtZQUNkbkIsZUFBZSxHQUFHWSxRQUFRLENBQUNRLDhCQUE4QjtZQUFDSixRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1lBQUFGLFFBQUEsQ0FBQUMsSUFBQTtZQUFBRCxRQUFBLENBQUFLLEVBQUEsR0FBQUwsUUFBQTtVQUFBO1lBQUFBLFFBQUEsQ0FBQUMsSUFBQTtZQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQSxPQUFBZixPQUFBLENBQUFDLE9BQUEsR0FBQUMsSUFBQTtjQUFBLE9BQUEzRCx1QkFBQSxDQUFBQyxPQUFBLENBSzVCLGdDQUFnQztZQUFBO1VBQUE7WUFBeERrRSxRQUFRLEdBQUFHLFFBQUEsQ0FBQUcsSUFBQTtZQUNkbEIsZUFBZSxHQUFHWSxRQUFRLENBQUNTLDhCQUE4QjtZQUFDTixRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1lBQUFGLFFBQUEsQ0FBQUMsSUFBQTtZQUFBRCxRQUFBLENBQUFPLEVBQUEsR0FBQVAsUUFBQTtVQUFBO1lBQUEsT0FBQUEsUUFBQSxDQUFBUSxNQUFBLFdBSXJEMUIsYUFBYTtVQUFBO1VBQUE7WUFBQSxPQUFBa0IsUUFBQSxDQUFBUyxJQUFBO1FBQUE7TUFBQSxHQUFBZixPQUFBO0lBQUEsQ0FDckI7SUFBQSxpQkFBQWdCLEVBQUE7TUFBQSxPQUFBcEIsSUFBQSxDQUFBOUIsS0FBQSxPQUFBRSxTQUFBO0lBQUE7RUFBQSxLQUNELFVBQUFpRCxHQUFHLEVBQUk7SUFDTDVCLGNBQWMsR0FBRyxJQUFJO0lBQ3JCLE1BQU00QixHQUFHO0VBQ1gsQ0FDRixDQUFDO0VBQ0QsT0FBTzVCLGNBQWM7QUFDdkI7QUFFQSxJQUFNNkIsZ0JBQWdCLEdBQUcsV0FBVztBQUVwQyxTQUFTQywyQkFBMkJBLENBQUEsRUFBRztFQUNyQyxJQUFNQyxTQUlKLEdBQUcsU0FKQ0EsU0FJSkEsQ0FBQUMsS0FBQTtJQUFBLElBQUtDLGFBQWEsR0FBQUQsS0FBQSxDQUFiQyxhQUFhO01BQUVDLFlBQVksR0FBQUYsS0FBQSxDQUFaRSxZQUFZO01BQUVDLGNBQWMsR0FBQUgsS0FBQSxDQUFkRyxjQUFjO0lBQUEsb0JBQ2hEekYsTUFBQSxZQUFBMEYsYUFBQSxDQUFDQyxjQUFjLFFBQ1pGLGNBQWMsQ0FBQ0csR0FBRyxDQUFDLFVBQUFDLE1BQU07TUFBQSxvQkFDeEI3RixNQUFBLFlBQUEwRixhQUFBLENBQUNJLGFBQWE7UUFDWkMsR0FBRyxFQUFFRixNQUFNLENBQUNHLEVBQUc7UUFDZkMsU0FBUyxFQUFFVixhQUFhLEtBQUtNLE1BQU0sQ0FBQ0csRUFBRSxHQUFHLFFBQVEsR0FBRyxFQUFHO1FBQ3ZERSxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVFWLFlBQVksQ0FBQ0ssTUFBTSxDQUFDO1FBQUE7TUFBQyxnQkFFcEM3RixNQUFBLFlBQUEwRixhQUFBLENBQUNyRixhQUFBLENBQUE4RixnQkFBZ0I7UUFBQ0gsRUFBRSxFQUFFSCxNQUFNLENBQUNPO01BQU0sQ0FBRSxDQUN4QixDQUFDO0lBQUEsQ0FDakIsQ0FDYSxDQUFDO0VBQUEsQ0FDbEI7RUFFRCxPQUFPZixTQUFTO0FBQ2xCO0FBRUEsSUFBTU0sY0FBYyxHQUFHVSw0QkFBTSxDQUFDQyxHQUFHLENBQUF0RixlQUFBLEtBQUFBLGVBQUEsT0FBQXVGLHVCQUFBLG1HQUVKLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0MsYUFBYTtBQUFBLEVBRTlEO0FBRUQsSUFBTVosYUFBYSxHQUFHTyw0QkFBTSxDQUFDQyxHQUFHLENBQUFyRixnQkFBQSxLQUFBQSxnQkFBQSxPQUFBc0YsdUJBQUEsc1JBSXJCLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0UsY0FBYztBQUFBLEdBSWpDLFVBQUFILEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ0csV0FBVztBQUFBLEdBQ2QsVUFBQUosS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRyxXQUFXO0FBQUEsR0FLbEQsVUFBQUosS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDRyxXQUFXO0FBQUEsRUFFNUM7QUFFRCxJQUFNQyxpQkFBZ0MsR0FBRyxTQUFuQ0EsaUJBQWdDQSxDQUFHTCxLQUFLO0VBQUEsb0JBQUl4RyxNQUFBLFlBQUEwRixhQUFBLENBQUNoRixhQUFBLFdBQVksTUFBQW9HLFNBQUEsaUJBQUtOLEtBQUs7SUFBRU8sVUFBVSxFQUFDO0VBQU8sRUFBRSxDQUFDO0FBQUE7QUFFaEcsSUFBTUMsc0JBQXNCLEdBQUc7RUFDN0JDLGNBQWMsRUFBRSxTQUFTO0VBQ3pCQyxZQUFZLEVBQUUsU0FBUztFQUN2QkMsbUJBQW1CLEVBQUUsU0FBUztFQUM5QkMsaUJBQWlCLEVBQUUsU0FBUztFQUM1QkMsc0JBQXNCLEVBQUUsU0FBUztFQUNqQ0MseUJBQXlCLEVBQUUsU0FBUztFQUNwQ0MscUJBQXFCLEVBQUUsU0FBUztFQUNoQ0Msa0JBQWtCLEVBQUU7QUFDdEIsQ0FBQztBQUVELElBQU1DLFdBQTBCLEdBQUcsU0FBN0JBLFdBQTBCQSxDQUFHakIsS0FBSyxFQUFJO0VBQzFDLElBQU1DLEtBQUssR0FBRyxJQUFBaUIsMEJBQVEsRUFBQyxDQUFDO0VBQ3hCLElBQU1DLFVBQVUsR0FBRyxJQUFBQyxjQUFPLEVBQUM7SUFBQSxPQUFBNUYsYUFBQSxDQUFBQSxhQUFBLEtBQVd5RSxLQUFLLEdBQUtPLHNCQUFzQjtFQUFBLENBQUUsRUFBRSxDQUFDUCxLQUFLLENBQUMsQ0FBQztFQUNsRixvQkFDRXpHLE1BQUEsWUFBQTBGLGFBQUEsQ0FBQ3ZGLGlCQUFBLENBQUEwSCxhQUFhO0lBQUNwQixLQUFLLEVBQUVrQjtFQUFXLGdCQUMvQjNILE1BQUEsWUFBQTBGLGFBQUEsQ0FBQzlFLE9BQUEsV0FBTSxFQUFLNEYsS0FBUSxDQUNQLENBQUM7QUFFcEIsQ0FBQztBQUVELElBQU1zQixTQUErQixHQUFHO0VBQ3RDQyxNQUFNLEVBQU5BLGNBQU07RUFDTkMsS0FBSyxFQUFMQSxhQUFLO0VBQ0xDLEtBQUssRUFBRUMsNkJBQVU7RUFDakJDLFlBQVksRUFBRXRCLGlCQUFpQjtFQUMvQnVCLE1BQU0sRUFBRVgsV0FBVztFQUNuQlksY0FBYyxFQUFkQSwwQkFBYztFQUNkQyxnQkFBZ0IsRUFBRWxEO0FBQ3BCLENBQUM7QUFFRCxJQUFNbUQsNkJBQTZCLEdBQUcsSUFBQWxDLDRCQUFNLEVBQUNtQyxxQ0FBa0IsQ0FBQyxDQUFBdEgsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQXFGLHVCQUFBLG9tQ0FnQmxELFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ2dDLGdCQUFnQjtBQUFBLEdBS3ZDLFVBQUFqQyxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNnQyxnQkFBZ0I7QUFBQSxFQWtCaEQ7QUEwQkQsSUFBTUMscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRztBQUMvQyxJQUFNQyw0QkFBNEIsR0FBRyxJQUFJO0FBQ3pDLElBQU1DLHdCQUF3QixHQUFHLEdBQUc7QUFFcEMsSUFBTUMsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FBQSxFQUFTO0VBQ3BDLElBQU1DLGdCQUFpRCxHQUFHLFNBQXBEQSxnQkFBaURBLENBQUFDLEtBQUEsRUFXakQ7SUFBQSxJQUFBQyxlQUFBO0lBQUEsSUFWSkMsb0JBQW9CLEdBQUFGLEtBQUEsQ0FBcEJFLG9CQUFvQjtNQUFBQyxrQkFBQSxHQUFBSCxLQUFBLENBQ3BCSSxZQUFZO01BQVpBLFlBQVksR0FBQUQsa0JBQUEsY0FBR0UsaUNBQXNCLEdBQUFGLGtCQUFBO01BQ3JDRyxRQUFRLEdBQUFOLEtBQUEsQ0FBUk0sUUFBUTtNQUNSQyxRQUFRLEdBQUFQLEtBQUEsQ0FBUk8sUUFBUTtNQUNSQyxRQUFRLEdBQUFSLEtBQUEsQ0FBUlEsUUFBUTtNQUNSQyxXQUFXLEdBQUFULEtBQUEsQ0FBWFMsV0FBVztNQUNYQyxVQUFVLEdBQUFWLEtBQUEsQ0FBVlUsVUFBVTtNQUNWQyxlQUFlLEdBQUFYLEtBQUEsQ0FBZlcsZUFBZTtNQUNmQyxjQUFjLEdBQUFaLEtBQUEsQ0FBZFksY0FBYztNQUNkQyxPQUFPLEdBQUFiLEtBQUEsQ0FBUGEsT0FBTztJQUVQLElBQUFDLFNBQUEsR0FBNEIsSUFBQUMsZUFBUSxFQUFzQnpHLGFBQWEsQ0FBQztNQUFBMEcsVUFBQSxPQUFBQyxlQUFBLGFBQUFILFNBQUE7TUFBakVJLE1BQU0sR0FBQUYsVUFBQTtNQUFFRyxTQUFTLEdBQUFILFVBQUE7SUFDeEIsSUFBTUksb0JBQW9CLEdBQUcsSUFBQUMsYUFBTSxFQUNqQyxJQUNGLENBQUM7SUFFRCxJQUFBQyxnQkFBUyxFQUFDLFlBQU07TUFDZCxJQUFBQyx5Q0FBa0MsRUFBQyxDQUFDO0lBQ3RDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFFTixJQUFBQyxVQUFBLEdBQXNDLElBQUFULGVBQVEsRUFBZ0IsSUFBSSxDQUFDO01BQUFVLFVBQUEsT0FBQVIsZUFBQSxhQUFBTyxVQUFBO01BQTVERSxXQUFXLEdBQUFELFVBQUE7TUFBRUUsY0FBYyxHQUFBRixVQUFBO0lBRWxDLElBQUFILGdCQUFTLEVBQUMsWUFBTTtNQUNkLElBQUksQ0FBQ0osTUFBTSxJQUFJLENBQUNRLFdBQVcsRUFBRTtRQUMzQmhILFVBQVUsQ0FBQyxDQUFDLENBQ1RHLElBQUksQ0FBQ3NHLFNBQVMsQ0FBQyxTQUNWLENBQUMsVUFBQWhGLEdBQUcsRUFBSTtVQUNad0YsY0FBYyxDQUFDLENBQUF4RixHQUFHLGFBQUhBLEdBQUcsdUJBQUhBLEdBQUcsQ0FBRXlGLE9BQU8sS0FBSSxvQ0FBb0MsQ0FBQztRQUN0RSxDQUFDLENBQUM7TUFDTjtJQUNGLENBQUMsRUFBRSxDQUFDVixNQUFNLEVBQUVRLFdBQVcsQ0FBQyxDQUFDO0lBRXpCLElBQUFKLGdCQUFTLEVBQUMsWUFBTTtNQUNkLE9BQU8sWUFBTTtRQUNYLElBQUlGLG9CQUFvQixDQUFDUyxPQUFPLEVBQUU7VUFDaENULG9CQUFvQixDQUFDUyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1VBQ3RDVixvQkFBb0IsQ0FBQ1MsT0FBTyxHQUFHLElBQUk7UUFDckM7TUFDRixDQUFDO0lBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUVOLElBQU1FLGdCQUFnQixHQUFHLElBQUFsRCxjQUFPLEVBQUMsWUFBTTtNQUNyQyxJQUFNbUQsV0FBVyxHQUNmQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ3RDLDRCQUE0QixFQUFFYyxVQUFVLEdBQUcsR0FBRyxFQUFFQSxVQUFVLENBQUMsR0FDcEViLHdCQUF3QjtNQUMxQixPQUFPb0MsSUFBSSxDQUFDRSxHQUFHLENBQUMsR0FBRyxFQUFFRixJQUFJLENBQUNDLEdBQUcsQ0FBQyxHQUFHLEVBQUVGLFdBQVcsR0FBR3JDLHFCQUFxQixDQUFDLENBQUM7SUFDMUUsQ0FBQyxFQUFFLENBQUNlLFVBQVUsQ0FBQyxDQUFDO0lBRWhCLElBQU0wQixXQUFXLEdBQUcsSUFBQXZELGNBQU8sRUFBQyxZQUFNO01BQ2hDLElBQUksQ0FBQTBCLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFOEIsU0FBUyxNQUFLQyxvQkFBUyxFQUFFO1FBQUEsSUFBQUMsbUJBQUE7UUFDckMsSUFBTUMsVUFBVSxJQUFBRCxtQkFBQSxHQUFHaEMsUUFBUSxDQUFDa0MsU0FBUyxjQUFBRixtQkFBQSx1QkFBbEJBLG1CQUFBLENBQXFCRCxvQkFBUyxDQUFDO1FBQ2xELElBQUlFLFVBQVUsSUFBSSxDQUFDQSxVQUFVLENBQUNFLEdBQUcsRUFBRTtVQUNqQyxJQUFNQyxFQUFFLEdBQUdwQyxRQUFRLENBQUNxQyxlQUFlO1VBQ25DLElBQU1DLE9BQU8sR0FBQTVKLGFBQUEsQ0FBQUEsYUFBQSxLQUNSNkosNkJBQWtCO1lBQ3JCQyxNQUFNLEVBQUVKLEVBQUUsR0FDTixDQUNFO2NBQ0UxRixFQUFFLEVBQUUsWUFBWTtjQUNoQitGLElBQUksRUFBRSxZQUFZO2NBQ2xCQyxLQUFLLEVBQUU7Z0JBQ0wsa0JBQWtCLFNBQUFDLE1BQUEsQ0FBU1AsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFBTyxNQUFBLENBQUlQLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBQU8sTUFBQSxDQUFJUCxFQUFFLENBQUMsQ0FBQyxDQUFDO2NBQ3BEO1lBQ0YsQ0FBQyxDQUNGLEdBQ0Q7VUFBRSxFQUNQO1VBQ0QsSUFBTVEsYUFBYSw0QkFBQUQsTUFBQSxDQUE0QkUsa0JBQWtCLENBQy9EQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1QsT0FBTyxDQUN4QixDQUFDLENBQUU7VUFDSCxPQUFPO1lBQ0xyQyxRQUFRLEVBQVJBLFFBQVE7WUFDUkYsUUFBUSxFQUFSQSxRQUFRO1lBQ1JDLFFBQVEsRUFBQXRILGFBQUEsQ0FBQUEsYUFBQSxLQUNIc0gsUUFBUTtjQUNYa0MsU0FBUyxFQUFBeEosYUFBQSxDQUFBQSxhQUFBLEtBQ0pzSCxRQUFRLENBQUNrQyxTQUFTLFdBQUFwSixnQkFBQSxpQkFDcEJpSixvQkFBUyxFQUFBckosYUFBQSxDQUFBQSxhQUFBLEtBQU91SixVQUFVO2dCQUFFRSxHQUFHLEVBQUVTO2NBQWE7WUFDaEQ7VUFFTCxDQUFDO1FBQ0g7TUFDRjtNQUNBLE9BQU87UUFBQzNDLFFBQVEsRUFBUkEsUUFBUTtRQUFFRixRQUFRLEVBQVJBLFFBQVE7UUFBRUMsUUFBUSxFQUFSQTtNQUFRLENBQUM7SUFDdkMsQ0FBQyxFQUFFLENBQUNDLFFBQVEsRUFBRUYsUUFBUSxFQUFFQyxRQUFRLENBQUMsQ0FBQztJQUVsQyxJQUFNZ0QsV0FBVyxHQUFHLElBQUFDLGtCQUFXLEVBQzdCLFVBQUNDLFFBQWtCLEVBQUs7TUFDdEI3QyxjQUFjLENBQUM4QyxxQkFBcUIsQ0FBQ0QsUUFBZSxDQUFDO0lBQ3ZELENBQUMsRUFDRCxDQUFDN0MsY0FBYyxDQUNqQixDQUFDO0lBRUQsSUFBTStDLGlCQUFpQixHQUFHLElBQUE5RSxjQUFPLEVBQy9CO01BQUEsT0FBTSxJQUFBK0UsaUNBQW9CLEVBQUN4QixXQUFXLEVBQUVsQyxvQkFBb0IsRUFBRUUsWUFBWSxDQUFDO0lBQUEsR0FDM0UsQ0FBQ2dDLFdBQVcsRUFBRWxDLG9CQUFvQixFQUFFRSxZQUFZLENBQ2xELENBQUM7SUFFRCxJQUFBeUQsVUFBQSxHQUF1QixJQUFBOUMsZUFBUSxFQUFXO1FBQUEsT0FDeEMsQ0FBQ1AsUUFBUSxDQUFDc0QsT0FBTyxJQUFJLEVBQUUsRUFBRWpILEdBQUcsQ0FBQyxVQUFDa0gsTUFBYztVQUFBLE9BQUtBLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDLENBQUM7UUFBQSxFQUFDO01BQUEsQ0FDbEUsQ0FBQztNQUFBQyxVQUFBLE9BQUFoRCxlQUFBLGFBQUE0QyxVQUFBO01BRk1LLFlBQVksR0FBQUQsVUFBQTtJQUluQixJQUFBRSxVQUFBLEdBQW9ELElBQUFwRCxlQUFRLEVBQUE5SCxhQUFBLEtBQ3ZEd0gsV0FBVyxDQUNmLENBQUM7TUFBQTJELFVBQUEsT0FBQW5ELGVBQUEsYUFBQWtELFVBQUE7TUFGS0Usa0JBQWtCLEdBQUFELFVBQUE7TUFBRUUscUJBQXFCLEdBQUFGLFVBQUE7SUFHaEQsSUFBTUcsMEJBQTBCLEdBQUcsSUFBQWYsa0JBQVcsRUFDNUMsVUFBQ2dCLE1BQTBCLEVBQUs7TUFDOUJGLHFCQUFxQixDQUFDLFVBQUE3SSxJQUFJO1FBQUEsT0FBQXhDLGFBQUEsQ0FBQUEsYUFBQSxLQUFTd0MsSUFBSSxHQUFLK0ksTUFBTTtNQUFBLENBQUUsQ0FBQztNQUNyRCxJQUNFQSxNQUFNLENBQUNDLGFBQWEsS0FBS0MsU0FBUyxJQUNsQ0YsTUFBTSxDQUFDRyxXQUFXLEtBQUtELFNBQVMsSUFDaENGLE1BQU0sQ0FBQ0ksV0FBVyxLQUFLRixTQUFTLEVBQ2hDO1FBQ0E5RCxjQUFjLENBQUM4QyxxQkFBcUIsQ0FBQ2MsTUFBYSxDQUFDO01BQ3JEO0lBQ0YsQ0FBQyxFQUNELENBQUM1RCxjQUFjLENBQ2pCLENBQUM7SUFFRCxJQUFNaUUsa0JBQWtCLEdBQUcsSUFBQXhELGFBQU0sRUFBTSxJQUFJLENBQUM7SUFFNUMsSUFBQXlELHlDQUFxQixFQUFDWixZQUFZLEVBQUVXLGtCQUFrQixDQUFDO0lBRXZELElBQU1FLFdBQVcsR0FBRyxJQUFBbEcsY0FBTyxFQUFDLFlBQU07TUFDaEMsSUFBSXFGLFlBQVksQ0FBQy9LLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFO01BQ3hDLElBQU02TCxXQUFXLEdBQUd4RSxRQUFRLENBQUN3RSxXQUFXLElBQUlkLFlBQVksQ0FBQ3JILEdBQUcsQ0FBQyxVQUFDeEUsQ0FBUztRQUFBLE9BQUtBLENBQUMsQ0FBQzRFLEVBQUU7TUFBQSxFQUFDO01BQ2pGLElBQU02RyxPQUFPLEdBQUcsSUFBQW1CLHlCQUFrQixFQUFDO1FBQ2pDekUsUUFBUSxFQUFBdkgsYUFBQSxDQUFBQSxhQUFBLEtBQU11SCxRQUFRO1VBQUVzRCxPQUFPLEVBQUVJLFlBQVk7VUFBRWMsV0FBVyxFQUFYQTtRQUFXLEVBQUM7UUFDM0QxRSxRQUFRLEVBQVJBLFFBQVE7UUFDUjRFLFFBQVEsRUFBRTtNQUNaLENBQUMsQ0FBQztNQUVGLElBQU1DLFNBQVMsR0FBR3JCLE9BQU8sQ0FBQ3NCLElBQUksQ0FBQyxVQUFDL00sQ0FBTTtRQUFBLE9BQUtBLENBQUMsQ0FBQ2dOLE1BQU0sS0FBSyxJQUFJO01BQUEsRUFBQztNQUM3RCxJQUFNQyxjQUFjLEdBQUd4QixPQUFPLENBQUNzQixJQUFJLENBQUMsVUFBQy9NLENBQU07UUFBQSxPQUFLLE9BQU9BLENBQUMsQ0FBQ2tOLFVBQVUsS0FBSyxVQUFVO01BQUEsRUFBQztNQUNuRixJQUFJSixTQUFTLElBQUksQ0FBQ0csY0FBYyxFQUFFO1FBQ2hDLElBQUksQ0FBQ2xFLG9CQUFvQixDQUFDUyxPQUFPLEVBQUU7VUFDakNULG9CQUFvQixDQUFDUyxPQUFPLEdBQUcsSUFBSTJELG9DQUEyQixDQUFDLENBQUM7UUFDbEU7UUFDQTFCLE9BQU8sQ0FBQy9LLElBQUksQ0FBQ3FJLG9CQUFvQixDQUFDUyxPQUFjLENBQUM7TUFDbkQ7TUFFQSxPQUFPaUMsT0FBTztJQUNoQixDQUFDLEVBQUUsQ0FBQ3RELFFBQVEsRUFBRTBELFlBQVksRUFBRTVELFFBQVEsQ0FBQyxDQUFDO0lBRXRDLElBQU1tRixvQkFBb0IsR0FBRyxJQUFBNUcsY0FBTyxFQUNsQztNQUFBLE9BQUE1RixhQUFBLENBQUFBLGFBQUEsS0FDSzBLLGlCQUFpQjtRQUNwQitCLFNBQVMsRUFBRSxJQUFJO1FBQ2Y1QixPQUFPLEVBQUVpQjtNQUFXO0lBQUEsQ0FDcEIsRUFDRixDQUFDcEIsaUJBQWlCLEVBQUVvQixXQUFXLENBQ2pDLENBQUM7SUFFRCxJQUFNWSxZQUFZLEdBQUcsSUFBQW5DLGtCQUFXLEVBQzlCLFVBQUNvQyxTQUE4QjtNQUFBLE9BQzdCLElBQUFDLHVCQUFnQixFQUFDRCxTQUFTLEVBQWNyQyxXQUFrQixDQUFDO0lBQUEsR0FDN0QsQ0FBQ0EsV0FBVyxDQUNkLENBQUM7SUFFRCxJQUFNdUMsY0FBYyxHQUFHLElBQUFqSCxjQUFPLEVBQzVCO01BQUEsT0FBTSxJQUFBa0gsOEJBQWlCLEVBQUMzRCxXQUFXLEVBQUV1RCxZQUFZLEVBQUV6RixvQkFBb0IsRUFBRUUsWUFBWSxDQUFDO0lBQUEsR0FDdEYsQ0FBQ2dDLFdBQVcsRUFBRXVELFlBQVksRUFBRXpGLG9CQUFvQixFQUFFRSxZQUFZLENBQ2hFLENBQUM7SUFFRCxJQUFNNEYsV0FBVyxHQUFHMUYsUUFBUSxDQUFDMkYsWUFBWSxLQUFLQyx1QkFBWSxDQUFDQyxhQUFhLElBQUk3RixRQUFRLENBQUM4RixPQUFPOztJQUU1RjtJQUNBO0lBQ0E7SUFDQSxJQUFNQyxjQUFjLEdBQUdDLE9BQU8sQ0FBQ2hHLFFBQVEsYUFBUkEsUUFBUSxnQkFBQUwsZUFBQSxHQUFSSyxRQUFRLENBQUVpRyxLQUFLLGNBQUF0RyxlQUFBLHVCQUFmQSxlQUFBLENBQWlCdUcsT0FBTyxDQUFDO0lBRXhELElBQU1DLG1CQUFtQixHQUFHLElBQUFqRCxrQkFBVyxFQUNyQyxVQUFDa0QsU0FBaUIsRUFBRUMsSUFBWSxFQUFFQyxLQUFVLEVBQUs7TUFDL0NqRyxlQUFlLENBQUNrRyxzQkFBc0IsQ0FBQ0gsU0FBUyxFQUFFQyxJQUFJLEVBQUVDLEtBQUssQ0FBQztJQUNoRSxDQUFDLEVBQ0QsQ0FBQ2pHLGVBQWUsQ0FDbEIsQ0FBQztJQUVELElBQU1tRyxpQkFBaUIsR0FBRyxJQUFBdEQsa0JBQVcsRUFDbkMsVUFBQ29ELEtBQVUsRUFBSztNQUNkakcsZUFBZSxDQUFDb0cscUJBQXFCLENBQUNILEtBQUssQ0FBQztJQUM5QyxDQUFDLEVBQ0QsQ0FBQ2pHLGVBQWUsQ0FDbEIsQ0FBQztJQUVELElBQU1xRyxRQUFRLEdBQUcsSUFBQW5JLGNBQU8sRUFDdEI7TUFBQSxPQUFNLElBQUFvSSw2QkFBZ0IsRUFBQzFHLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFMkcsV0FBVyxFQUFFM0csUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUU0RyxjQUFjLENBQUM7SUFBQSxHQUN2RSxDQUFDNUcsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUUyRyxXQUFXLEVBQUUzRyxRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRTRHLGNBQWMsQ0FDbEQsQ0FBQztJQUVELElBQU1DLGlCQUFpQixHQUFHLElBQUF2SSxjQUFPLEVBQUM7TUFBQSxPQUFNLElBQUF3SSxpQ0FBb0IsRUFBQ2pGLFdBQVcsQ0FBQztJQUFBLEdBQUUsQ0FBQ0EsV0FBVyxDQUFDLENBQUM7SUFFekYsSUFBSSxDQUFDbEIsTUFBTSxFQUFFO01BQ1gsb0JBQ0VqSyxNQUFBLFlBQUEwRixhQUFBLENBQUM2Qyw2QkFBNkI7UUFBQ3RDLFNBQVMsRUFBQztNQUFvQixHQUMxRHdFLFdBQVcsZ0JBQ1Z6SyxNQUFBLFlBQUEwRixhQUFBO1FBQUsySyxLQUFLLEVBQUU7VUFBQ0MsT0FBTyxFQUFFLE1BQU07VUFBRUMsU0FBUyxFQUFFLFFBQVE7VUFBRUMsS0FBSyxFQUFFO1FBQVM7TUFBRSxnQkFDbkV4USxNQUFBLFlBQUEwRixhQUFBLFlBQUkrRSxXQUFlLENBQUMsZUFDcEJ6SyxNQUFBLFlBQUEwRixhQUFBLENBQUNqRixPQUFBLENBQUFzSCxNQUFNO1FBQ0w3QixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFRO1VBQ2J3RSxjQUFjLENBQUMsSUFBSSxDQUFDO1FBQ3RCO01BQUUsR0FDSCxPQUVPLENBQ0wsQ0FBQyxnQkFFTjFLLE1BQUEsWUFBQTBGLGFBQUEsQ0FBQzdFLGVBQUEsV0FBYyxNQUFFLENBRVUsQ0FBQztJQUVwQztJQUVBLElBQU80UCx5QkFBeUIsR0FBcUJ4RyxNQUFNLENBQXBEd0cseUJBQXlCO01BQUVDLGVBQWUsR0FBSXpHLE1BQU0sQ0FBekJ5RyxlQUFlO0lBRWpELElBQU1DLGNBQWMsR0FBR3BOLGVBQWU7SUFDdEMsSUFBTXFOLGNBQWMsR0FBR3BOLGVBQWU7SUFFdEMsb0JBQ0V4RCxNQUFBLFlBQUEwRixhQUFBLENBQUNnTCxlQUFlLENBQUNHLFFBQVE7TUFBQ2xCLEtBQUssRUFBRTdIO0lBQVUsZ0JBQ3pDOUgsTUFBQSxZQUFBMEYsYUFBQSxDQUFDNkMsNkJBQTZCO01BQUN0QyxTQUFTLEVBQUM7SUFBb0IsR0FDMUQ4SSxXQUFXLElBQUk0QixjQUFjLGdCQUM1QjNRLE1BQUEsWUFBQTBGLGFBQUEsQ0FBQ2lMLGNBQWM7TUFDYkcsWUFBWSxFQUFFMUQsa0JBQW1CO01BQ2pDMkQsT0FBTyxFQUFFNUYsV0FBWTtNQUNyQjZGLGdCQUFnQixFQUFFMUQsMEJBQTJCO01BQzdDMkQsTUFBTSxFQUFFLEtBQU07TUFDZEMsV0FBVyxFQUFFdEgsT0FBUTtNQUNyQmtCLGdCQUFnQixFQUFFQSxnQkFBaUI7TUFDbkMwRSxtQkFBbUIsRUFBRUEsbUJBQW9CO01BQ3pDSyxpQkFBaUIsRUFBRUEsaUJBQWtCO01BQ3JDc0IsU0FBUyxFQUFFM0Msb0JBQXFCO01BQ2hDNEMsUUFBUSxFQUFFdkMsY0FBZTtNQUN6QndDLGNBQWMsRUFBRWpDLGNBQWU7TUFDL0JrQyxtQkFBbUIsRUFBRXZCLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFL0osRUFBRztNQUNsQ3VMLGVBQWUsRUFBRXBNLGdCQUFpQjtNQUNsQ2dMLGlCQUFpQixFQUFFQSxpQkFBa0I7TUFDckNxQiwyQkFBMkIsRUFBRUEsd0NBQTRCO01BQ3pEaEUsYUFBYSxFQUFFaEUsV0FBVyxDQUFDZ0UsYUFBYztNQUN6Q0UsV0FBVyxFQUFFbEUsV0FBVyxDQUFDa0UsV0FBWTtNQUNyQ0MsV0FBVyxFQUFFbkUsV0FBVyxDQUFDbUU7SUFBWSxDQUN0QyxDQUFDLEdBQ0F5QixjQUFjLElBQUl3QixjQUFjO0lBQUE7SUFDbEM7SUFDQTtJQUNBO0lBQ0E7SUFDQTVRLE1BQUEsWUFBQTBGLGFBQUEsQ0FBQ2tMLGNBQWM7TUFDYmEsR0FBRyxFQUFFN0Qsa0JBQW1CO01BQ3hCa0QsWUFBWSxFQUFFMUQsa0JBQW1CO01BQ2pDMkQsT0FBTyxFQUFFNUYsV0FBWTtNQUNyQjZGLGdCQUFnQixFQUFFMUQsMEJBQTJCO01BQzdDMkQsTUFBTSxFQUFFLEtBQU07TUFDZEMsV0FBVyxFQUFFdEgsT0FBUTtNQUNyQmtCLGdCQUFnQixFQUFFQSxnQkFBaUI7TUFDbkMwRSxtQkFBbUIsRUFBRUEsbUJBQW9CO01BQ3pDSyxpQkFBaUIsRUFBRUEsaUJBQWtCO01BQ3JDc0IsU0FBUyxFQUFFM0Msb0JBQXFCO01BQ2hDNEMsUUFBUSxFQUFFdkMsY0FBZTtNQUN6QjBDLGVBQWUsRUFBRXBNLGdCQUFpQjtNQUNsQ2dMLGlCQUFpQixFQUFFQSxpQkFBa0I7TUFDckNxQiwyQkFBMkIsRUFBRUE7SUFBNEIsQ0FDMUQsQ0FBQyxnQkFFRnhSLE1BQUEsWUFBQTBGLGFBQUEsQ0FBQytLLHlCQUF5QjtNQUN4QmdCLEdBQUcsRUFBRTdELGtCQUFtQjtNQUN4QmtELFlBQVksRUFBRTFELGtCQUFtQjtNQUNqQzJELE9BQU8sRUFBRTVGLFdBQVk7TUFDckI2RixnQkFBZ0IsRUFBRTFELDBCQUEyQjtNQUM3QzJELE1BQU0sRUFBRSxLQUFNO01BQ2RDLFdBQVcsRUFBRXRILE9BQVE7TUFDckJrQixnQkFBZ0IsRUFBRUEsZ0JBQWlCO01BQ25DMEUsbUJBQW1CLEVBQUVBLG1CQUFvQjtNQUN6Q0ssaUJBQWlCLEVBQUVBLGlCQUFrQjtNQUNyQ3NCLFNBQVMsRUFBRTNDLG9CQUFxQjtNQUNoQzRDLFFBQVEsRUFBRXZDLGNBQWU7TUFDekJ3QyxjQUFjLEVBQUVqQyxjQUFlO01BQy9Ca0MsbUJBQW1CLEVBQUV2QixRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRS9KLEVBQUc7TUFDbEN1TCxlQUFlLEVBQUVwTSxnQkFBaUI7TUFDbENnTCxpQkFBaUIsRUFBRUEsaUJBQWtCO01BQ3JDcUIsMkJBQTJCLEVBQUVBO0lBQTRCLENBQzFELENBRTBCLENBQ1AsQ0FBQztFQUUvQixDQUFDO0VBRUQsT0FBTzFJLGdCQUFnQjtBQUN6QixDQUFDO0FBQUMsSUFBQTRJLFFBQUEsR0FBQUMsT0FBQSxjQUVhOUksdUJBQXVCIiwiaWdub3JlTGlzdCI6W119
440
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb25zdGFudHMiLCJfbG9jYWxpemF0aW9uIiwiX3V0aWxzIiwiX2VmZmVjdHMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29tbW9uIiwiX2l0ZW1TZWxlY3RvciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc2xpZGVyIiwiX2xvYWRpbmdTcGlubmVyIiwiX2h1YmJsZVV0aWxzIiwiX2ZvZ0hlaWdodEFuaW1hdGlvbiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJXZWFrTWFwIiwibiIsIl9fZXNNb2R1bGUiLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YyIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfaHViYmxlTW9kdWxlIiwiX2h1YmJsZVByb21pc2UiLCJfc3dpcGVDb250YWluZXIiLCJfZ2xvYmVDb250YWluZXIiLCJsb2FkSHViYmxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwibW9kIiwic3dpcGVNb2QiLCJnbG9iZU1vZCIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJzZW50IiwiU3dpcGVFeHBvcnRWaWRlb1BhbmVsQ29udGFpbmVyIiwidDAiLCJHbG9iZUV4cG9ydFZpZGVvUGFuZWxDb250YWluZXIiLCJ0MSIsImFicnVwdCIsInN0b3AiLCJfeCIsImVyciIsIkRFRkFVTFRfRklMRU5BTUUiLCJFeHBvcnRWaWRlb01vZGFsVGFic0ZhY3RvcnkiLCJNb2RhbFRhYnMiLCJfcmVmMiIsImN1cnJlbnRNZXRob2QiLCJ0b2dnbGVNZXRob2QiLCJsb2FkaW5nTWV0aG9kcyIsImNyZWF0ZUVsZW1lbnQiLCJTdHlsZWRNb2RhbFRhYiIsIm1hcCIsIm1ldGhvZCIsIlN0eWxlZFRhYkl0ZW0iLCJrZXkiLCJpZCIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJGb3JtYXR0ZWRNZXNzYWdlIiwibGFiZWwiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJib3JkZXJDb2xvckxUIiwic3VidGV4dENvbG9yTFQiLCJ0ZXh0Q29sb3JMVCIsIkxpZ2h0SXRlbVNlbGVjdG9yIiwiX2V4dGVuZHMyIiwiaW5wdXRUaGVtZSIsIlNMSURFUl9MSUdIVF9PVkVSUklERVMiLCJzbGlkZXJCYXJDb2xvciIsInNsaWRlckJhckJnZCIsInNsaWRlckJhckhvdmVyQ29sb3IiLCJzbGlkZXJIYW5kbGVDb2xvciIsInNsaWRlckhhbmRsZUhvdmVyQ29sb3IiLCJzbGlkZXJJbmFjdGl2ZUJvcmRlckNvbG9yIiwic2xpZGVySGFuZGxlVGV4dENvbG9yIiwic2xpZGVySGFuZGxlU2hhZG93IiwiTGlnaHRTbGlkZXIiLCJ1c2VUaGVtZSIsImxpZ2h0VGhlbWUiLCJ1c2VNZW1vIiwiVGhlbWVQcm92aWRlciIsIktFUExFUl9VSSIsIkJ1dHRvbiIsIkljb25zIiwiSW5wdXQiLCJJbnB1dExpZ2h0IiwiSXRlbVNlbGVjdG9yIiwiU2xpZGVyIiwiTG9hZGluZ1NwaW5uZXIiLCJNb2RhbFRhYnNGYWN0b3J5IiwiU3R5bGVkRXhwb3J0VmlkZW9Nb2RhbENvbnRlbnQiLCJTdHlsZWRNb2RhbENvbnRlbnQiLCJwcmltYXJ5QnRuQWN0QmdkIiwiSFVCQkxFX1BBTkVMX09WRVJIRUFEIiwiRVhQT1JUX1ZJREVPX01PREFMX01BWF9XSURUSCIsIk1PREFMX0hPUklaT05UQUxfUEFERElORyIsIkV4cG9ydFZpZGVvTW9kYWxGYWN0b3J5IiwiRXhwb3J0VmlkZW9Nb2RhbCIsIl9yZWYzIiwiX21hcFN0YXRlJGdsb2JlIiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJfcmVmMyRtYXBib3hBcGlVcmwiLCJtYXBib3hBcGlVcmwiLCJERUZBVUxUX01BUEJPWF9BUElfVVJMIiwibWFwU3RhdGUiLCJtYXBTdHlsZSIsInZpc1N0YXRlIiwiZXhwb3J0VmlkZW8iLCJjb250YWluZXJXIiwidmlzU3RhdGVBY3Rpb25zIiwidWlTdGF0ZUFjdGlvbnMiLCJvbkNsb3NlIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiaHViYmxlIiwic2V0SHViYmxlIiwic2hhZG93Q29tcG9zaXRpbmdSZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJwYXRjaERlY2tSZW5kZXJlckZvclBvc3RQcm9jZXNzaW5nIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJodWJibGVFcnJvciIsInNldEh1YmJsZUVycm9yIiwibWVzc2FnZSIsImN1cnJlbnQiLCJjbGVhbnVwIiwiZXhwb3J0VmlkZW9XaWR0aCIsIm1vZGFsSW5uZXJXIiwiTWF0aCIsIm1pbiIsIm1heCIsImtlcGxlclN0YXRlIiwic3R5bGVUeXBlIiwiTk9fTUFQX0lEIiwiX21hcFN0eWxlJG1hcFN0eWxlcyIsIm5vTWFwRW50cnkiLCJtYXBTdHlsZXMiLCJ1cmwiLCJiZyIsImJhY2tncm91bmRDb2xvciIsImJnU3R5bGUiLCJFTVBUWV9NQVBCT1hfU1RZTEUiLCJsYXllcnMiLCJ0eXBlIiwicGFpbnQiLCJjb25jYXQiLCJlbXB0eVN0eWxlVXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIm9uVXBkYXRlTWFwIiwidXNlQ2FsbGJhY2siLCJ2aWV3UG9ydCIsInNldEV4cG9ydFZpZGVvU2V0dGluZyIsImh1YmJsZURlY2tHbFByb3BzIiwiZ2V0SHViYmxlRGVja0dsUHJvcHMiLCJfdXNlU3RhdGU1IiwiZWZmZWN0cyIsImVmZmVjdCIsImNsb25lIiwiX3VzZVN0YXRlNiIsInZpZGVvRWZmZWN0cyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwidmlkZW9Db25maWd1cmF0aW9uIiwic2V0VmlkZW9Db25maWd1cmF0aW9uIiwib25VcGRhdGVWaWRlb0NvbmZpZ3VyYXRpb24iLCJ2YWx1ZXMiLCJzd2lwZVN0YXJ0UGN0IiwidW5kZWZpbmVkIiwic3dpcGVFbmRQY3QiLCJzd2lwZUVhc2luZyIsImh1YmJsZUNvbnRhaW5lclJlZiIsInVzZUZvZ0hlaWdodEFuaW1hdGlvbiIsImRlY2tFZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJjb21wdXRlRGVja0VmZmVjdHMiLCJpc0V4cG9ydCIsImhhc1NoYWRvdyIsInNvbWUiLCJzaGFkb3ciLCJoYXNQb3N0UHJvY2VzcyIsInBvc3RSZW5kZXIiLCJEZWNrU2hhZG93Q29tcG9zaXRpbmdFZmZlY3QiLCJkZWNrUHJvcHNXaXRoRWZmZWN0cyIsIl9pc0V4cG9ydCIsIm9uVmlld0NoYW5nZSIsInZpZXdTdGF0ZSIsIm9uVmlld1BvcnRDaGFuZ2UiLCJzdGF0aWNNYXBQcm9wcyIsImdldFN0YXRpY01hcFByb3BzIiwiaXNTd2lwZU1vZGUiLCJtYXBTcGxpdE1vZGUiLCJNYXBTcGxpdE1vZGUiLCJTV0lQRV9DT01QQVJFIiwiaXNTcGxpdCIsImlzR2xvYmVFbmFibGVkIiwiQm9vbGVhbiIsImdsb2JlIiwiZW5hYmxlZCIsIl9nZXRSZXNvbHV0aW9uU2V0dGluZyIsImdldFJlc29sdXRpb25TZXR0aW5nIiwicmVzb2x1dGlvbiIsIndpZHRoIiwic2NhbGVkRHByIiwiZGVzY3JpcHRvciIsIndpbmRvdyIsImNvbmZpZ3VyYWJsZSIsImRldmljZVBpeGVsUmF0aW8iLCJvbkZpbHRlckZyYW1lVXBkYXRlIiwiZmlsdGVySWR4IiwibmFtZSIsInZhbHVlIiwic2V0RmlsdGVyQW5pbWF0aW9uVGltZSIsIm9uVHJpcEZyYW1lVXBkYXRlIiwic2V0TGF5ZXJBbmltYXRpb25UaW1lIiwidG9wTGF5ZXIiLCJnZXRCZWZvcmVMYXllcklkIiwidG9wTWFwU3R5bGUiLCJib3R0b21NYXBTdHlsZSIsImFuaW1hdGFibGVGaWx0ZXJzIiwiZ2V0QW5pbWF0YWJsZUZpbHRlcnMiLCJzdHlsZSIsInBhZGRpbmciLCJ0ZXh0QWxpZ24iLCJjb2xvciIsIkV4cG9ydFZpZGVvUGFuZWxDb250YWluZXIiLCJLZXBsZXJVSUNvbnRleHQiLCJTd2lwZUNvbnRhaW5lciIsIkdsb2JlQ29udGFpbmVyIiwiUHJvdmlkZXIiLCJpbml0aWFsU3RhdGUiLCJtYXBEYXRhIiwib25TZXR0aW5nc0NoYW5nZSIsImhlYWRlciIsImhhbmRsZUNsb3NlIiwiZGVja1Byb3BzIiwibWFwUHJvcHMiLCJkaXNhYmxlQmFzZU1hcCIsIm1hcGJveExheWVyQmVmb3JlSWQiLCJkZWZhdWx0RmlsZU5hbWUiLCJnZXRUaW1lUmFuZ2VGaWx0ZXJLZXlmcmFtZXMiLCJyZWYiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kYWxzL2V4cG9ydC12aWRlby1tb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCwge1RoZW1lUHJvdmlkZXIsIHVzZVRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7XG4gIERFRkFVTFRfTUFQQk9YX0FQSV9VUkwsXG4gIE5PX01BUF9JRCxcbiAgRU1QVFlfTUFQQk9YX1NUWUxFLFxuICBNYXBTcGxpdE1vZGVcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1ZpZXdwb3J0LCBFeHBvcnRWaWRlbywgRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIG9uVmlld1BvcnRDaGFuZ2UsXG4gIGNvbXB1dGVEZWNrRWZmZWN0cyxcbiAgcGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZ1xufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7RGVja1NoYWRvd0NvbXBvc2l0aW5nRWZmZWN0fSBmcm9tICdAa2VwbGVyLmdsL2VmZmVjdHMnO1xuaW1wb3J0IHtNYXBTdHlsZX0gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge1VJU3RhdGVBY3Rpb25zLCBWaXNTdGF0ZUFjdGlvbnN9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbmltcG9ydCB7U3R5bGVkTW9kYWxDb250ZW50LCBJbnB1dExpZ2h0fSBmcm9tICcuLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtCdXR0b24sIEljb25zfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IEl0ZW1TZWxlY3RvciBmcm9tICcuLi9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yJztcbmltcG9ydCBTbGlkZXIgZnJvbSAnLi4vY29tbW9uL3NsaWRlci9zbGlkZXInO1xuaW1wb3J0IExvYWRpbmdTcGlubmVyIGZyb20gJy4uL2NvbW1vbi9sb2FkaW5nLXNwaW5uZXInO1xuXG5pbXBvcnQge1xuICBnZXRTdGF0aWNNYXBQcm9wcyxcbiAgZ2V0QmVmb3JlTGF5ZXJJZCxcbiAgZ2V0SHViYmxlRGVja0dsUHJvcHMsXG4gIGdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcyxcbiAgZ2V0QW5pbWF0YWJsZUZpbHRlcnMsXG4gIGdldFJlc29sdXRpb25TZXR0aW5nXG59IGZyb20gJy4vaHViYmxlLXV0aWxzJztcbmltcG9ydCB7dXNlRm9nSGVpZ2h0QW5pbWF0aW9ufSBmcm9tICcuL2ZvZy1oZWlnaHQtYW5pbWF0aW9uJztcblxudHlwZSBTd2lwZUNvbnRhaW5lclR5cGUgPSBSZWFjdC5Db21wb25lbnRUeXBlPGFueT47XG5cbnR5cGUgSHViYmxlTW9kdWxlID0ge1xuICBFeHBvcnRWaWRlb1BhbmVsQ29udGFpbmVyOiBSZWFjdC5Db21wb25lbnRUeXBlPGFueT47XG4gIEtlcGxlclVJQ29udGV4dDogUmVhY3QuQ29udGV4dDxhbnk+O1xufTtcblxubGV0IF9odWJibGVNb2R1bGU6IEh1YmJsZU1vZHVsZSB8IG51bGwgPSBudWxsO1xubGV0IF9odWJibGVQcm9taXNlOiBQcm9taXNlPEh1YmJsZU1vZHVsZT4gfCBudWxsID0gbnVsbDtcbmxldCBfc3dpcGVDb250YWluZXI6IFN3aXBlQ29udGFpbmVyVHlwZSB8IG51bGwgPSBudWxsO1xubGV0IF9nbG9iZUNvbnRhaW5lcjogU3dpcGVDb250YWluZXJUeXBlIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGxvYWRIdWJibGUoKTogUHJvbWlzZTxIdWJibGVNb2R1bGU+IHtcbiAgaWYgKF9odWJibGVNb2R1bGUpIHJldHVybiBQcm9taXNlLnJlc29sdmUoX2h1YmJsZU1vZHVsZSk7XG4gIGlmIChfaHViYmxlUHJvbWlzZSkgcmV0dXJuIF9odWJibGVQcm9taXNlO1xuICBfaHViYmxlUHJvbWlzZSA9IGltcG9ydCgnQGh1YmJsZS5nbC9yZWFjdCcpLnRoZW4oXG4gICAgYXN5bmMgbW9kID0+IHtcbiAgICAgIF9odWJibGVNb2R1bGUgPSBtb2QgYXMgdW5rbm93biBhcyBIdWJibGVNb2R1bGU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzd2lwZU1vZCA9IGF3YWl0IGltcG9ydCgnLi9zd2lwZS1leHBvcnQtdmlkZW8tY29udGFpbmVyJyk7XG4gICAgICAgIF9zd2lwZUNvbnRhaW5lciA9IHN3aXBlTW9kLlN3aXBlRXhwb3J0VmlkZW9QYW5lbENvbnRhaW5lcjtcbiAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgLy8gc3dpcGUgZXhwb3J0IHVuYXZhaWxhYmxlOyByZWd1bGFyIGV4cG9ydCBzdGlsbCB3b3Jrc1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZ2xvYmVNb2QgPSBhd2FpdCBpbXBvcnQoJy4vZ2xvYmUtZXhwb3J0LXZpZGVvLWNvbnRhaW5lcicpO1xuICAgICAgICBfZ2xvYmVDb250YWluZXIgPSBnbG9iZU1vZC5HbG9iZUV4cG9ydFZpZGVvUGFuZWxDb250YWluZXI7XG4gICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgIC8vIGdsb2JlIGV4cG9ydCBjb250YWluZXIgdW5hdmFpbGFibGU7IGZhbGxzIGJhY2sgdG8gaHViYmxlJ3MgY29udGFpbmVyXG4gICAgICB9XG4gICAgICByZXR1cm4gX2h1YmJsZU1vZHVsZTtcbiAgICB9LFxuICAgIGVyciA9PiB7XG4gICAgICBfaHViYmxlUHJvbWlzZSA9IG51bGw7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICApO1xuICByZXR1cm4gX2h1YmJsZVByb21pc2U7XG59XG5cbmNvbnN0IERFRkFVTFRfRklMRU5BTUUgPSAna2VwbGVyLmdsJztcblxuZnVuY3Rpb24gRXhwb3J0VmlkZW9Nb2RhbFRhYnNGYWN0b3J5KCkge1xuICBjb25zdCBNb2RhbFRhYnM6IFJlYWN0LkZDPHtcbiAgICBjdXJyZW50TWV0aG9kOiBzdHJpbmc7XG4gICAgdG9nZ2xlTWV0aG9kOiAobWV0aG9kOiB7aWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZ30pID0+IHZvaWQ7XG4gICAgbG9hZGluZ01ldGhvZHM6IEFycmF5PHtpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nfT47XG4gIH0+ID0gKHtjdXJyZW50TWV0aG9kLCB0b2dnbGVNZXRob2QsIGxvYWRpbmdNZXRob2RzfSkgPT4gKFxuICAgIDxTdHlsZWRNb2RhbFRhYj5cbiAgICAgIHtsb2FkaW5nTWV0aG9kcy5tYXAobWV0aG9kID0+IChcbiAgICAgICAgPFN0eWxlZFRhYkl0ZW1cbiAgICAgICAgICBrZXk9e21ldGhvZC5pZH1cbiAgICAgICAgICBjbGFzc05hbWU9e2N1cnJlbnRNZXRob2QgPT09IG1ldGhvZC5pZCA/ICdhY3RpdmUnIDogJyd9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlTWV0aG9kKG1ldGhvZCl9XG4gICAgICAgID5cbiAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17bWV0aG9kLmxhYmVsfSAvPlxuICAgICAgICA8L1N0eWxlZFRhYkl0ZW0+XG4gICAgICApKX1cbiAgICA8L1N0eWxlZE1vZGFsVGFiPlxuICApO1xuXG4gIHJldHVybiBNb2RhbFRhYnM7XG59XG5cbmNvbnN0IFN0eWxlZE1vZGFsVGFiID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm9yZGVyQ29sb3JMVH07XG4gIG1hcmdpbi1ib3R0b206IDI0cHg7XG5gO1xuXG5jb25zdCBTdHlsZWRUYWJJdGVtID0gc3R5bGVkLmRpdmBcbiAgcGFkZGluZzogOHB4IDE2cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3JMVH07XG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcblxuICAmLmFjdGl2ZSB7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yTFR9O1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckxUfTtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yTFR9O1xuICB9XG5gO1xuXG5jb25zdCBMaWdodEl0ZW1TZWxlY3RvcjogUmVhY3QuRkM8YW55PiA9IHByb3BzID0+IDxJdGVtU2VsZWN0b3Igey4uLnByb3BzfSBpbnB1dFRoZW1lPVwibGlnaHRcIiAvPjtcblxuY29uc3QgU0xJREVSX0xJR0hUX09WRVJSSURFUyA9IHtcbiAgc2xpZGVyQmFyQ29sb3I6ICcjQTBBN0I0JyxcbiAgc2xpZGVyQmFyQmdkOiAnI0QzRDhFMCcsXG4gIHNsaWRlckJhckhvdmVyQ29sb3I6ICcjOTM5QkE4JyxcbiAgc2xpZGVySGFuZGxlQ29sb3I6ICcjRjdGN0Y3JyxcbiAgc2xpZGVySGFuZGxlSG92ZXJDb2xvcjogJyNGN0Y3RjcnLFxuICBzbGlkZXJJbmFjdGl2ZUJvcmRlckNvbG9yOiAnI0Y3RjdGNycsXG4gIHNsaWRlckhhbmRsZVRleHRDb2xvcjogJyNGN0Y3RjcnLFxuICBzbGlkZXJIYW5kbGVTaGFkb3c6ICcwIDJweCA0cHggMCByZ2JhKDAsMCwwLDAuMjApJ1xufTtcblxuY29uc3QgTGlnaHRTbGlkZXI6IFJlYWN0LkZDPGFueT4gPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgbGlnaHRUaGVtZSA9IHVzZU1lbW8oKCkgPT4gKHsuLi50aGVtZSwgLi4uU0xJREVSX0xJR0hUX09WRVJSSURFU30pLCBbdGhlbWVdKTtcbiAgcmV0dXJuIChcbiAgICA8VGhlbWVQcm92aWRlciB0aGVtZT17bGlnaHRUaGVtZX0+XG4gICAgICA8U2xpZGVyIHsuLi5wcm9wc30gLz5cbiAgICA8L1RoZW1lUHJvdmlkZXI+XG4gICk7XG59O1xuXG5jb25zdCBLRVBMRVJfVUk6IHtba2V5OiBzdHJpbmddOiBhbnl9ID0ge1xuICBCdXR0b24sXG4gIEljb25zLFxuICBJbnB1dDogSW5wdXRMaWdodCxcbiAgSXRlbVNlbGVjdG9yOiBMaWdodEl0ZW1TZWxlY3RvcixcbiAgU2xpZGVyOiBMaWdodFNsaWRlcixcbiAgTG9hZGluZ1NwaW5uZXIsXG4gIE1vZGFsVGFic0ZhY3Rvcnk6IEV4cG9ydFZpZGVvTW9kYWxUYWJzRmFjdG9yeVxufTtcblxuY29uc3QgU3R5bGVkRXhwb3J0VmlkZW9Nb2RhbENvbnRlbnQgPSBzdHlsZWQoU3R5bGVkTW9kYWxDb250ZW50KWBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ3JpZC1yb3ctZ2FwOiAzMnB4O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIC5leHBvcnQtdmlkZW8tcGFuZWwge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG4gIC5leHBvcnQtdmlkZW8tcGFuZWxfX2JvZHkge1xuICAgIGdyaWQtY29sdW1uLWdhcDogMjRweDtcbiAgfVxuICAuZGF0YS1leC1pY29ucy1wbGF5ID4gcGF0aDpsYXN0LWNoaWxkLFxuICAuZGF0YS1leC1pY29ucy1zdG9wID4gcGF0aDpsYXN0LWNoaWxkIHtcbiAgICBmaWxsOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDApICFpbXBvcnRhbnQ7XG4gICAgc3Ryb2tlOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnByaW1hcnlCdG5BY3RCZ2R9O1xuICAgIHN0cm9rZS13aWR0aDogM3B4O1xuICB9XG4gIC5kYXRhLWV4LWljb25zLXBsYXkgPiBwYXRoOmxhc3QtY2hpbGQ6aG92ZXIsXG4gIC5kYXRhLWV4LWljb25zLXN0b3AgPiBwYXRoOmxhc3QtY2hpbGQ6aG92ZXIge1xuICAgIGZpbGw6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUucHJpbWFyeUJ0bkFjdEJnZH0gIWltcG9ydGFudDtcbiAgfVxuICAjZGVjay1jYW52YXM6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogNTAlO1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCkpXG4gICAgICAgIG5vLXJlcGVhdCBjZW50ZXIgLyAxcHggMTAwJSxcbiAgICAgIGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpKSBuby1yZXBlYXRcbiAgICAgICAgY2VudGVyIC8gMTAwJSAxcHg7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC42KSk7XG4gIH1cbmA7XG5cbmV4cG9ydCB0eXBlIFZpZGVvQ29uZmlndXJhdGlvbiA9IHtcbiAgbWVkaWFUeXBlPzogc3RyaW5nO1xuICBjYW1lcmFQcmVzZXQ/OiBzdHJpbmc7XG4gIGZpbGVOYW1lPzogc3RyaW5nO1xuICByZXNvbHV0aW9uPzogc3RyaW5nO1xuICBkdXJhdGlvbk1zPzogbnVtYmVyO1xuICBzd2lwZVN0YXJ0UGN0PzogbnVtYmVyO1xuICBzd2lwZUVuZFBjdD86IG51bWJlcjtcbiAgc3dpcGVFYXNpbmc/OiAnbGluZWFyJyB8ICdlYXNlLWluLW91dCc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydFZpZGVvTW9kYWxQcm9wcyB7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybD86IHN0cmluZztcbiAgbWFwU3RhdGU6IGFueTtcbiAgbWFwU3R5bGU6IE1hcFN0eWxlO1xuICB2aXNTdGF0ZTogYW55O1xuICBleHBvcnRWaWRlbzogRXhwb3J0VmlkZW87XG4gIGNvbnRhaW5lclc6IG51bWJlcjtcbiAgdmlzU3RhdGVBY3Rpb25zOiB0eXBlb2YgVmlzU3RhdGVBY3Rpb25zO1xuICB1aVN0YXRlQWN0aW9uczogdHlwZW9mIFVJU3RhdGVBY3Rpb25zO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xufVxuXG5jb25zdCBIVUJCTEVfUEFORUxfT1ZFUkhFQUQgPSAyICogMzIgKyAyNCArIDI4MDtcbmNvbnN0IEVYUE9SVF9WSURFT19NT0RBTF9NQVhfV0lEVEggPSAxMDgwO1xuY29uc3QgTU9EQUxfSE9SSVpPTlRBTF9QQURESU5HID0gMTQ0O1xuXG5jb25zdCBFeHBvcnRWaWRlb01vZGFsRmFjdG9yeSA9ICgpID0+IHtcbiAgY29uc3QgRXhwb3J0VmlkZW9Nb2RhbDogUmVhY3QuRkM8RXhwb3J0VmlkZW9Nb2RhbFByb3BzPiA9ICh7XG4gICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgbWFwYm94QXBpVXJsID0gREVGQVVMVF9NQVBCT1hfQVBJX1VSTCxcbiAgICBtYXBTdGF0ZSxcbiAgICBtYXBTdHlsZSxcbiAgICB2aXNTdGF0ZSxcbiAgICBleHBvcnRWaWRlbyxcbiAgICBjb250YWluZXJXLFxuICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICBvbkNsb3NlXG4gIH0pID0+IHtcbiAgICBjb25zdCBbaHViYmxlLCBzZXRIdWJibGVdID0gdXNlU3RhdGU8SHViYmxlTW9kdWxlIHwgbnVsbD4oX2h1YmJsZU1vZHVsZSk7XG4gICAgY29uc3Qgc2hhZG93Q29tcG9zaXRpbmdSZWYgPSB1c2VSZWY8SW5zdGFuY2VUeXBlPHR5cGVvZiBEZWNrU2hhZG93Q29tcG9zaXRpbmdFZmZlY3Q+IHwgbnVsbD4oXG4gICAgICBudWxsXG4gICAgKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBwYXRjaERlY2tSZW5kZXJlckZvclBvc3RQcm9jZXNzaW5nKCk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgW2h1YmJsZUVycm9yLCBzZXRIdWJibGVFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIWh1YmJsZSAmJiAhaHViYmxlRXJyb3IpIHtcbiAgICAgICAgbG9hZEh1YmJsZSgpXG4gICAgICAgICAgLnRoZW4oc2V0SHViYmxlKVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgc2V0SHViYmxlRXJyb3IoZXJyPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbG9hZCB2aWRlbyBleHBvcnQgbW9kdWxlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgW2h1YmJsZSwgaHViYmxlRXJyb3JdKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoc2hhZG93Q29tcG9zaXRpbmdSZWYuY3VycmVudCkge1xuICAgICAgICAgIHNoYWRvd0NvbXBvc2l0aW5nUmVmLmN1cnJlbnQuY2xlYW51cCgpO1xuICAgICAgICAgIHNoYWRvd0NvbXBvc2l0aW5nUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGV4cG9ydFZpZGVvV2lkdGggPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IG1vZGFsSW5uZXJXID1cbiAgICAgICAgTWF0aC5taW4oRVhQT1JUX1ZJREVPX01PREFMX01BWF9XSURUSCwgY29udGFpbmVyVyAqIDAuNywgY29udGFpbmVyVykgLVxuICAgICAgICBNT0RBTF9IT1JJWk9OVEFMX1BBRERJTkc7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoMzIwLCBNYXRoLm1pbig1NDAsIG1vZGFsSW5uZXJXIC0gSFVCQkxFX1BBTkVMX09WRVJIRUFEKSk7XG4gICAgfSwgW2NvbnRhaW5lclddKTtcblxuICAgIGNvbnN0IGtlcGxlclN0YXRlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAobWFwU3R5bGU/LnN0eWxlVHlwZSA9PT0gTk9fTUFQX0lEKSB7XG4gICAgICAgIGNvbnN0IG5vTWFwRW50cnkgPSBtYXBTdHlsZS5tYXBTdHlsZXM/LltOT19NQVBfSURdO1xuICAgICAgICBpZiAobm9NYXBFbnRyeSAmJiAhbm9NYXBFbnRyeS51cmwpIHtcbiAgICAgICAgICBjb25zdCBiZyA9IG1hcFN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICBjb25zdCBiZ1N0eWxlID0ge1xuICAgICAgICAgICAgLi4uRU1QVFlfTUFQQk9YX1NUWUxFLFxuICAgICAgICAgICAgbGF5ZXJzOiBiZ1xuICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdiYWNrZ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2JhY2tncm91bmQnLFxuICAgICAgICAgICAgICAgICAgICBwYWludDoge1xuICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogYHJnYigke2JnWzBdfSwke2JnWzFdfSwke2JnWzJdfSlgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIDogW11cbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGVtcHR5U3R5bGVVcmwgPSBgZGF0YTphcHBsaWNhdGlvbi9qc29uLCR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYmdTdHlsZSlcbiAgICAgICAgICApfWA7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZpc1N0YXRlLFxuICAgICAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgICAgICBtYXBTdHlsZToge1xuICAgICAgICAgICAgICAuLi5tYXBTdHlsZSxcbiAgICAgICAgICAgICAgbWFwU3R5bGVzOiB7XG4gICAgICAgICAgICAgICAgLi4ubWFwU3R5bGUubWFwU3R5bGVzLFxuICAgICAgICAgICAgICAgIFtOT19NQVBfSURdOiB7Li4ubm9NYXBFbnRyeSwgdXJsOiBlbXB0eVN0eWxlVXJsfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt2aXNTdGF0ZSwgbWFwU3RhdGUsIG1hcFN0eWxlfTtcbiAgICB9LCBbdmlzU3RhdGUsIG1hcFN0YXRlLCBtYXBTdHlsZV0pO1xuXG4gICAgY29uc3Qgb25VcGRhdGVNYXAgPSB1c2VDYWxsYmFjayhcbiAgICAgICh2aWV3UG9ydDogVmlld3BvcnQpID0+IHtcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMuc2V0RXhwb3J0VmlkZW9TZXR0aW5nKHZpZXdQb3J0IGFzIGFueSk7XG4gICAgICB9LFxuICAgICAgW3VpU3RhdGVBY3Rpb25zXVxuICAgICk7XG5cbiAgICBjb25zdCBodWJibGVEZWNrR2xQcm9wcyA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiBnZXRIdWJibGVEZWNrR2xQcm9wcyhrZXBsZXJTdGF0ZSwgbWFwYm94QXBpQWNjZXNzVG9rZW4sIG1hcGJveEFwaVVybCksXG4gICAgICBba2VwbGVyU3RhdGUsIG1hcGJveEFwaUFjY2Vzc1Rva2VuLCBtYXBib3hBcGlVcmxdXG4gICAgKTtcblxuICAgIGNvbnN0IFt2aWRlb0VmZmVjdHNdID0gdXNlU3RhdGU8RWZmZWN0W10+KCgpID0+XG4gICAgICAodmlzU3RhdGUuZWZmZWN0cyB8fCBbXSkubWFwKChlZmZlY3Q6IEVmZmVjdCkgPT4gZWZmZWN0LmNsb25lKCkpXG4gICAgKTtcblxuICAgIGNvbnN0IFt2aWRlb0NvbmZpZ3VyYXRpb24sIHNldFZpZGVvQ29uZmlndXJhdGlvbl0gPSB1c2VTdGF0ZTxWaWRlb0NvbmZpZ3VyYXRpb24+KHtcbiAgICAgIC4uLmV4cG9ydFZpZGVvXG4gICAgfSk7XG4gICAgY29uc3Qgb25VcGRhdGVWaWRlb0NvbmZpZ3VyYXRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAgICh2YWx1ZXM6IFZpZGVvQ29uZmlndXJhdGlvbikgPT4ge1xuICAgICAgICBzZXRWaWRlb0NvbmZpZ3VyYXRpb24ocHJldiA9PiAoey4uLnByZXYsIC4uLnZhbHVlc30pKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZhbHVlcy5zd2lwZVN0YXJ0UGN0ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICB2YWx1ZXMuc3dpcGVFbmRQY3QgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIHZhbHVlcy5zd2lwZUVhc2luZyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHVpU3RhdGVBY3Rpb25zLnNldEV4cG9ydFZpZGVvU2V0dGluZyh2YWx1ZXMgYXMgYW55KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFt1aVN0YXRlQWN0aW9uc11cbiAgICApO1xuXG4gICAgY29uc3QgaHViYmxlQ29udGFpbmVyUmVmID0gdXNlUmVmPGFueT4obnVsbCk7XG5cbiAgICB1c2VGb2dIZWlnaHRBbmltYXRpb24odmlkZW9FZmZlY3RzLCBodWJibGVDb250YWluZXJSZWYpO1xuXG4gICAgY29uc3QgZGVja0VmZmVjdHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICh2aWRlb0VmZmVjdHMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gICAgICBjb25zdCBlZmZlY3RPcmRlciA9IHZpc1N0YXRlLmVmZmVjdE9yZGVyIHx8IHZpZGVvRWZmZWN0cy5tYXAoKGU6IEVmZmVjdCkgPT4gZS5pZCk7XG4gICAgICBjb25zdCBlZmZlY3RzID0gY29tcHV0ZURlY2tFZmZlY3RzKHtcbiAgICAgICAgdmlzU3RhdGU6IHsuLi52aXNTdGF0ZSwgZWZmZWN0czogdmlkZW9FZmZlY3RzLCBlZmZlY3RPcmRlcn0sXG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBpc0V4cG9ydDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhhc1NoYWRvdyA9IGVmZmVjdHMuc29tZSgoZTogYW55KSA9PiBlLnNoYWRvdyA9PT0gdHJ1ZSk7XG4gICAgICBjb25zdCBoYXNQb3N0UHJvY2VzcyA9IGVmZmVjdHMuc29tZSgoZTogYW55KSA9PiB0eXBlb2YgZS5wb3N0UmVuZGVyID09PSAnZnVuY3Rpb24nKTtcbiAgICAgIGlmIChoYXNTaGFkb3cgJiYgIWhhc1Bvc3RQcm9jZXNzKSB7XG4gICAgICAgIGlmICghc2hhZG93Q29tcG9zaXRpbmdSZWYuY3VycmVudCkge1xuICAgICAgICAgIHNoYWRvd0NvbXBvc2l0aW5nUmVmLmN1cnJlbnQgPSBuZXcgRGVja1NoYWRvd0NvbXBvc2l0aW5nRWZmZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWZmZWN0cy5wdXNoKHNoYWRvd0NvbXBvc2l0aW5nUmVmLmN1cnJlbnQgYXMgYW55KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVmZmVjdHM7XG4gICAgfSwgW3Zpc1N0YXRlLCB2aWRlb0VmZmVjdHMsIG1hcFN0YXRlXSk7XG5cbiAgICBjb25zdCBkZWNrUHJvcHNXaXRoRWZmZWN0cyA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiAoe1xuICAgICAgICAuLi5odWJibGVEZWNrR2xQcm9wcyxcbiAgICAgICAgX2lzRXhwb3J0OiB0cnVlLFxuICAgICAgICBlZmZlY3RzOiBkZWNrRWZmZWN0c1xuICAgICAgfSksXG4gICAgICBbaHViYmxlRGVja0dsUHJvcHMsIGRlY2tFZmZlY3RzXVxuICAgICk7XG5cbiAgICBjb25zdCBvblZpZXdDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgICh2aWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+XG4gICAgICAgIG9uVmlld1BvcnRDaGFuZ2Uodmlld1N0YXRlIGFzIFZpZXdwb3J0LCBvblVwZGF0ZU1hcCBhcyBhbnkpLFxuICAgICAgW29uVXBkYXRlTWFwXVxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0aWNNYXBQcm9wcyA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiBnZXRTdGF0aWNNYXBQcm9wcyhrZXBsZXJTdGF0ZSwgb25WaWV3Q2hhbmdlLCBtYXBib3hBcGlBY2Nlc3NUb2tlbiwgbWFwYm94QXBpVXJsKSxcbiAgICAgIFtrZXBsZXJTdGF0ZSwgb25WaWV3Q2hhbmdlLCBtYXBib3hBcGlBY2Nlc3NUb2tlbiwgbWFwYm94QXBpVXJsXVxuICAgICk7XG5cbiAgICBjb25zdCBpc1N3aXBlTW9kZSA9IG1hcFN0YXRlLm1hcFNwbGl0TW9kZSA9PT0gTWFwU3BsaXRNb2RlLlNXSVBFX0NPTVBBUkUgJiYgbWFwU3RhdGUuaXNTcGxpdDtcblxuICAgIC8vIEluIGdsb2JlIG1vZGUgdGhlIGRlY2suZ2wgR2xvYmVWaWV3IHJlbmRlcnMgdGhlIHBsYW5ldCAoYW5kIGJhc2VtYXAgdGlsZXMpXG4gICAgLy8gaXRzZWxmOyB0aGUgZmxhdCBtYXBsaWJyZSBiYXNlIG1hcCBtdXN0IGJlIGRpc2FibGVkIHNvIGl0IGRvZXNuJ3QgcmVuZGVyIGFcbiAgICAvLyAyRCBNZXJjYXRvciBtYXAgYmVoaW5kL2Fyb3VuZCB0aGUgZ2xvYmUuXG4gICAgY29uc3QgaXNHbG9iZUVuYWJsZWQgPSBCb29sZWFuKG1hcFN0YXRlPy5nbG9iZT8uZW5hYmxlZCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gU2FtZSBmcmVlemUgYXMgYmVmb3JlOiBodWJibGUuZ2wgd3JpdGVzIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHRvIHNjYWxlXG4gICAgICAvLyB0aGUgcHJldmlldywgdGhlbiBzZXRzIGl0IHRvIDEgZHVyaW5nIGFuaW1hdGVkIHByZXZpZXcsIHdoaWNoIGRlc3luY3NcbiAgICAgIC8vIE1hcExpYnJlIGZyb20gdGhlIERlY2sgb3ZlcmxheS4gUGluIHRvIHRoZSAqZXhwb3J0KiBzY2FsZSAobm90IG5hdGl2ZSBEUFIpXG4gICAgICAvLyBzbyBwcmV2aWV3IHN0YXlzIGFsaWduZWQgYW5kIHJlY29yZGluZyBzdGlsbCB1c2VzIHRoZSBzZWxlY3RlZCBxdWFsaXR5LlxuICAgICAgaWYgKGlzU3dpcGVNb2RlIHx8IGlzR2xvYmVFbmFibGVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCB7d2lkdGh9ID0gZ2V0UmVzb2x1dGlvblNldHRpbmcodmlkZW9Db25maWd1cmF0aW9uLnJlc29sdXRpb24gfHwgJycpO1xuICAgICAgY29uc3Qgc2NhbGVkRHByID0gZXhwb3J0VmlkZW9XaWR0aCA/IE1hdGgubWF4KDEsIHdpZHRoIC8gZXhwb3J0VmlkZW9XaWR0aCkgOiAxO1xuICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnZGV2aWNlUGl4ZWxSYXRpbycpO1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnZGV2aWNlUGl4ZWxSYXRpbycsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6ICgpID0+IHNjYWxlZERwcixcbiAgICAgICAgc2V0OiAoKSA9PiB7XG4gICAgICAgICAgLy8gbm8tb3A6IGlnbm9yZSBodWJibGUuZ2wgZHJvcHBpbmcgRFBSIHRvIDEgZHVyaW5nIHByZXZpZXdcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ2RldmljZVBpeGVsUmF0aW8nLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgKHdpbmRvdyBhcyB7ZGV2aWNlUGl4ZWxSYXRpbz86IG51bWJlcn0pLmRldmljZVBpeGVsUmF0aW87XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSwgW2lzU3dpcGVNb2RlLCBpc0dsb2JlRW5hYmxlZCwgdmlkZW9Db25maWd1cmF0aW9uLnJlc29sdXRpb24sIGV4cG9ydFZpZGVvV2lkdGhdKTtcblxuICAgIGNvbnN0IG9uRmlsdGVyRnJhbWVVcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAgIChmaWx0ZXJJZHg6IG51bWJlciwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucy5zZXRGaWx0ZXJBbmltYXRpb25UaW1lKGZpbHRlcklkeCwgbmFtZSwgdmFsdWUpO1xuICAgICAgfSxcbiAgICAgIFt2aXNTdGF0ZUFjdGlvbnNdXG4gICAgKTtcblxuICAgIGNvbnN0IG9uVHJpcEZyYW1lVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgICAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB2aXNTdGF0ZUFjdGlvbnMuc2V0TGF5ZXJBbmltYXRpb25UaW1lKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBbdmlzU3RhdGVBY3Rpb25zXVxuICAgICk7XG5cbiAgICBjb25zdCB0b3BMYXllciA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiBnZXRCZWZvcmVMYXllcklkKG1hcFN0eWxlPy50b3BNYXBTdHlsZSwgbWFwU3R5bGU/LmJvdHRvbU1hcFN0eWxlKSxcbiAgICAgIFttYXBTdHlsZT8udG9wTWFwU3R5bGUsIG1hcFN0eWxlPy5ib3R0b21NYXBTdHlsZV1cbiAgICApO1xuXG4gICAgY29uc3QgYW5pbWF0YWJsZUZpbHRlcnMgPSB1c2VNZW1vKCgpID0+IGdldEFuaW1hdGFibGVGaWx0ZXJzKGtlcGxlclN0YXRlKSwgW2tlcGxlclN0YXRlXSk7XG5cbiAgICBpZiAoIWh1YmJsZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZEV4cG9ydFZpZGVvTW9kYWxDb250ZW50IGNsYXNzTmFtZT1cImV4cG9ydC12aWRlby1tb2RhbFwiPlxuICAgICAgICAgIHtodWJibGVFcnJvciA/IChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3twYWRkaW5nOiAnMjBweCcsIHRleHRBbGlnbjogJ2NlbnRlcicsIGNvbG9yOiAnI2Q5NTM0Zid9fT5cbiAgICAgICAgICAgICAgPHA+e2h1YmJsZUVycm9yfTwvcD5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldEh1YmJsZUVycm9yKG51bGwpO1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBSZXRyeVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8TG9hZGluZ1NwaW5uZXIgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1N0eWxlZEV4cG9ydFZpZGVvTW9kYWxDb250ZW50PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7RXhwb3J0VmlkZW9QYW5lbENvbnRhaW5lciwgS2VwbGVyVUlDb250ZXh0fSA9IGh1YmJsZTtcblxuICAgIGNvbnN0IFN3aXBlQ29udGFpbmVyID0gX3N3aXBlQ29udGFpbmVyO1xuICAgIGNvbnN0IEdsb2JlQ29udGFpbmVyID0gX2dsb2JlQ29udGFpbmVyO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxLZXBsZXJVSUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e0tFUExFUl9VSX0+XG4gICAgICAgIDxTdHlsZWRFeHBvcnRWaWRlb01vZGFsQ29udGVudCBjbGFzc05hbWU9XCJleHBvcnQtdmlkZW8tbW9kYWxcIj5cbiAgICAgICAgICB7aXNTd2lwZU1vZGUgJiYgU3dpcGVDb250YWluZXIgPyAoXG4gICAgICAgICAgICA8U3dpcGVDb250YWluZXJcbiAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlPXt2aWRlb0NvbmZpZ3VyYXRpb259XG4gICAgICAgICAgICAgIG1hcERhdGE9e2tlcGxlclN0YXRlfVxuICAgICAgICAgICAgICBvblNldHRpbmdzQ2hhbmdlPXtvblVwZGF0ZVZpZGVvQ29uZmlndXJhdGlvbn1cbiAgICAgICAgICAgICAgaGVhZGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgaGFuZGxlQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIGV4cG9ydFZpZGVvV2lkdGg9e2V4cG9ydFZpZGVvV2lkdGh9XG4gICAgICAgICAgICAgIG9uRmlsdGVyRnJhbWVVcGRhdGU9e29uRmlsdGVyRnJhbWVVcGRhdGV9XG4gICAgICAgICAgICAgIG9uVHJpcEZyYW1lVXBkYXRlPXtvblRyaXBGcmFtZVVwZGF0ZX1cbiAgICAgICAgICAgICAgZGVja1Byb3BzPXtkZWNrUHJvcHNXaXRoRWZmZWN0c31cbiAgICAgICAgICAgICAgbWFwUHJvcHM9e3N0YXRpY01hcFByb3BzfVxuICAgICAgICAgICAgICBkaXNhYmxlQmFzZU1hcD17aXNHbG9iZUVuYWJsZWR9XG4gICAgICAgICAgICAgIG1hcGJveExheWVyQmVmb3JlSWQ9e3RvcExheWVyPy5pZH1cbiAgICAgICAgICAgICAgZGVmYXVsdEZpbGVOYW1lPXtERUZBVUxUX0ZJTEVOQU1FfVxuICAgICAgICAgICAgICBhbmltYXRhYmxlRmlsdGVycz17YW5pbWF0YWJsZUZpbHRlcnN9XG4gICAgICAgICAgICAgIGdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcz17Z2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzfVxuICAgICAgICAgICAgICBzd2lwZVN0YXJ0UGN0PXtleHBvcnRWaWRlby5zd2lwZVN0YXJ0UGN0fVxuICAgICAgICAgICAgICBzd2lwZUVuZFBjdD17ZXhwb3J0VmlkZW8uc3dpcGVFbmRQY3R9XG4gICAgICAgICAgICAgIHN3aXBlRWFzaW5nPXtleHBvcnRWaWRlby5zd2lwZUVhc2luZ31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IGlzR2xvYmVFbmFibGVkICYmIEdsb2JlQ29udGFpbmVyID8gKFxuICAgICAgICAgICAgLy8gR2xvYmUgKG5vbi1zd2lwZSkgZXhwb3J0IHVzZXMgYSBkZWRpY2F0ZWQgY29udGFpbmVyIHRoYXQgZHJpdmVzIGl0c1xuICAgICAgICAgICAgLy8gb3duIGNhcHR1cmUgbG9vcC4gaHViYmxlJ3MgYnVpbHQtaW4gY29udGFpbmVyIG9ubHkgYWR2YW5jZXMgZnJhbWVzXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSBtYXBib3ggYmFzZSBtYXAncyByZW5kZXIgZXZlbnQsIHdoaWNoIGRvZXNuJ3QgZmlyZSBpblxuICAgICAgICAgICAgLy8gZ2xvYmUgbW9kZSAoYmFzZSBtYXAgZGlzYWJsZWQpLCBzbyBpdHMgZXhwb3J0IHdvdWxkIGhhbmcuXG4gICAgICAgICAgICA8R2xvYmVDb250YWluZXJcbiAgICAgICAgICAgICAgcmVmPXtodWJibGVDb250YWluZXJSZWZ9XG4gICAgICAgICAgICAgIGluaXRpYWxTdGF0ZT17dmlkZW9Db25maWd1cmF0aW9ufVxuICAgICAgICAgICAgICBtYXBEYXRhPXtrZXBsZXJTdGF0ZX1cbiAgICAgICAgICAgICAgb25TZXR0aW5nc0NoYW5nZT17b25VcGRhdGVWaWRlb0NvbmZpZ3VyYXRpb259XG4gICAgICAgICAgICAgIGhlYWRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgIGhhbmRsZUNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBleHBvcnRWaWRlb1dpZHRoPXtleHBvcnRWaWRlb1dpZHRofVxuICAgICAgICAgICAgICBvbkZpbHRlckZyYW1lVXBkYXRlPXtvbkZpbHRlckZyYW1lVXBkYXRlfVxuICAgICAgICAgICAgICBvblRyaXBGcmFtZVVwZGF0ZT17b25UcmlwRnJhbWVVcGRhdGV9XG4gICAgICAgICAgICAgIGRlY2tQcm9wcz17ZGVja1Byb3BzV2l0aEVmZmVjdHN9XG4gICAgICAgICAgICAgIG1hcFByb3BzPXtzdGF0aWNNYXBQcm9wc31cbiAgICAgICAgICAgICAgZGVmYXVsdEZpbGVOYW1lPXtERUZBVUxUX0ZJTEVOQU1FfVxuICAgICAgICAgICAgICBhbmltYXRhYmxlRmlsdGVycz17YW5pbWF0YWJsZUZpbHRlcnN9XG4gICAgICAgICAgICAgIGdldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lcz17Z2V0VGltZVJhbmdlRmlsdGVyS2V5ZnJhbWVzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEV4cG9ydFZpZGVvUGFuZWxDb250YWluZXJcbiAgICAgICAgICAgICAgcmVmPXtodWJibGVDb250YWluZXJSZWZ9XG4gICAgICAgICAgICAgIGluaXRpYWxTdGF0ZT17dmlkZW9Db25maWd1cmF0aW9ufVxuICAgICAgICAgICAgICBtYXBEYXRhPXtrZXBsZXJTdGF0ZX1cbiAgICAgICAgICAgICAgb25TZXR0aW5nc0NoYW5nZT17b25VcGRhdGVWaWRlb0NvbmZpZ3VyYXRpb259XG4gICAgICAgICAgICAgIGhlYWRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgIGhhbmRsZUNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBleHBvcnRWaWRlb1dpZHRoPXtleHBvcnRWaWRlb1dpZHRofVxuICAgICAgICAgICAgICBvbkZpbHRlckZyYW1lVXBkYXRlPXtvbkZpbHRlckZyYW1lVXBkYXRlfVxuICAgICAgICAgICAgICBvblRyaXBGcmFtZVVwZGF0ZT17b25UcmlwRnJhbWVVcGRhdGV9XG4gICAgICAgICAgICAgIGRlY2tQcm9wcz17ZGVja1Byb3BzV2l0aEVmZmVjdHN9XG4gICAgICAgICAgICAgIG1hcFByb3BzPXtzdGF0aWNNYXBQcm9wc31cbiAgICAgICAgICAgICAgZGlzYWJsZUJhc2VNYXA9e2lzR2xvYmVFbmFibGVkfVxuICAgICAgICAgICAgICBtYXBib3hMYXllckJlZm9yZUlkPXt0b3BMYXllcj8uaWR9XG4gICAgICAgICAgICAgIGRlZmF1bHRGaWxlTmFtZT17REVGQVVMVF9GSUxFTkFNRX1cbiAgICAgICAgICAgICAgYW5pbWF0YWJsZUZpbHRlcnM9e2FuaW1hdGFibGVGaWx0ZXJzfVxuICAgICAgICAgICAgICBnZXRUaW1lUmFuZ2VGaWx0ZXJLZXlmcmFtZXM9e2dldFRpbWVSYW5nZUZpbHRlcktleWZyYW1lc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TdHlsZWRFeHBvcnRWaWRlb01vZGFsQ29udGVudD5cbiAgICAgIDwvS2VwbGVyVUlDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIEV4cG9ydFZpZGVvTW9kYWw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFeHBvcnRWaWRlb01vZGFsRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBRix1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUUsVUFBQSxHQUFBRixPQUFBO0FBTUEsSUFBQUcsYUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBS0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBSUEsSUFBQU0sa0JBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLE9BQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGFBQUEsR0FBQUMsc0JBQUEsQ0FBQVQsT0FBQTtBQUNBLElBQUFVLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQVQsT0FBQTtBQUNBLElBQUFXLGVBQUEsR0FBQUYsc0JBQUEsQ0FBQVQsT0FBQTtBQUVBLElBQUFZLFlBQUEsR0FBQVosT0FBQTtBQVFBLElBQUFhLG1CQUFBLEdBQUFiLE9BQUE7QUFBNkQsSUFBQWMsZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQTtBQUFBLFNBQUFDLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxX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