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

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 (64) hide show
  1. package/dist/cjs/common/data-table/grid.js +2 -2
  2. package/dist/cjs/common/data-table/index.js +3 -3
  3. package/dist/cjs/common/file-uploader/file-upload.js +250 -40
  4. package/dist/cjs/common/icons/circle.js +54 -0
  5. package/dist/cjs/common/icons/index.js +8 -1
  6. package/dist/cjs/common/item-selector/item-selector.js +2 -2
  7. package/dist/cjs/common/portaled.js +3 -3
  8. package/dist/cjs/common/time-range-slider.js +2 -2
  9. package/dist/cjs/common/timeline-slider.js +2 -2
  10. package/dist/cjs/editor/editor.js +2 -2
  11. package/dist/cjs/filters/filter-panels/polygon-filter-panel.js +2 -2
  12. package/dist/cjs/filters/time-widget.js +2 -2
  13. package/dist/cjs/map/layer-hover-info.js +2 -2
  14. package/dist/cjs/map/map-control.js +2 -2
  15. package/dist/cjs/map/map-draw-panel.js +10 -1
  16. package/dist/cjs/map-container.js +2 -2
  17. package/dist/cjs/map-view-state-context.js +3 -3
  18. package/dist/cjs/modal-container.js +2 -2
  19. package/dist/cjs/modals/cloud-components/cloud-storage-disclaimer.js +24 -0
  20. package/dist/cjs/modals/cloud-tile.js +39 -10
  21. package/dist/cjs/modals/image-modal-container.js +2 -2
  22. package/dist/cjs/modals/load-data-modal.js +3 -3
  23. package/dist/cjs/modals/load-storage-map.js +9 -6
  24. package/dist/cjs/modals/save-map-modal.js +4 -3
  25. package/dist/cjs/modals/share-map-modal.js +5 -4
  26. package/dist/cjs/modals/swipe-export-video-preview.js +2 -2
  27. package/dist/cjs/plot-container.js +12 -5
  28. package/dist/cjs/side-panel/common/dataset-info.js +2 -2
  29. package/dist/cjs/side-panel/filter-panel/filter-panel.js +2 -2
  30. package/dist/cjs/side-panel/layer-panel/custom-palette.js +2 -2
  31. package/dist/common/icons/circle.d.ts +10 -0
  32. package/dist/common/icons/index.d.ts +1 -0
  33. package/dist/esm/common/data-table/grid.js +2 -2
  34. package/dist/esm/common/data-table/index.js +3 -3
  35. package/dist/esm/common/file-uploader/file-upload.js +251 -41
  36. package/dist/esm/common/icons/circle.js +48 -0
  37. package/dist/esm/common/icons/index.js +2 -1
  38. package/dist/esm/common/item-selector/item-selector.js +2 -2
  39. package/dist/esm/common/portaled.js +3 -3
  40. package/dist/esm/common/time-range-slider.js +2 -2
  41. package/dist/esm/common/timeline-slider.js +2 -2
  42. package/dist/esm/editor/editor.js +2 -2
  43. package/dist/esm/filters/filter-panels/polygon-filter-panel.js +2 -2
  44. package/dist/esm/filters/time-widget.js +2 -2
  45. package/dist/esm/map/layer-hover-info.js +2 -2
  46. package/dist/esm/map/map-control.js +2 -2
  47. package/dist/esm/map/map-draw-panel.js +11 -2
  48. package/dist/esm/map-container.js +2 -2
  49. package/dist/esm/map-view-state-context.js +3 -3
  50. package/dist/esm/modal-container.js +2 -2
  51. package/dist/esm/modals/cloud-components/cloud-storage-disclaimer.js +19 -0
  52. package/dist/esm/modals/cloud-tile.js +39 -10
  53. package/dist/esm/modals/image-modal-container.js +2 -2
  54. package/dist/esm/modals/load-data-modal.js +3 -3
  55. package/dist/esm/modals/load-storage-map.js +8 -3
  56. package/dist/esm/modals/save-map-modal.js +4 -3
  57. package/dist/esm/modals/share-map-modal.js +5 -4
  58. package/dist/esm/modals/swipe-export-video-preview.js +2 -2
  59. package/dist/esm/plot-container.js +12 -5
  60. package/dist/esm/side-panel/common/dataset-info.js +2 -2
  61. package/dist/esm/side-panel/filter-panel/filter-panel.js +2 -2
  62. package/dist/esm/side-panel/layer-panel/custom-palette.js +2 -2
  63. package/dist/modals/cloud-components/cloud-storage-disclaimer.d.ts +2 -0
  64. package/package.json +17 -18
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = exports.WarningMsg = exports.FileUpload = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
9
11
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -21,21 +23,24 @@ var _uploadButton = _interopRequireDefault(require("./upload-button"));
21
23
  var _icons = require("../icons");
22
24
  var _fileUploadProgress = _interopRequireDefault(require("./file-upload-progress"));
23
25
  var _fileDrop = _interopRequireDefault(require("./file-drop"));
24
- var _utils = require("@kepler.gl/utils");
25
26
  var _constants = require("@kepler.gl/constants");
26
- var _markdownToJsx = _interopRequireDefault(require("markdown-to-jsx"));
27
27
  var _localization = require("@kepler.gl/localization");
28
+ var _processors = require("@kepler.gl/processors");
28
29
  var _styles = require("@kepler.gl/styles");
30
+ var _utils = require("@kepler.gl/utils");
31
+ var _markdownToJsx = _interopRequireDefault(require("markdown-to-jsx"));
32
+ var _styledComponents2 = require("../styled-components");
29
33
  var _linkRenderer = _interopRequireDefault(require("../link-renderer"));
30
34
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject0, _templateObject1, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16; // SPDX-License-Identifier: MIT
31
35
  // Copyright contributors to the kepler.gl project
32
- // Breakpoints
33
36
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
34
37
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
35
38
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
36
39
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
37
40
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
38
41
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
42
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
43
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
39
44
  var fileIconColor = '#D3D8E0';
40
45
  var StyledUploadMessage = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-size: 14px;\n margin-bottom: 12px;\n\n ", ";\n"])), function (props) {
41
46
  return props.theme.textColorLT;
@@ -43,22 +48,53 @@ var StyledUploadMessage = _styledComponents["default"].div(_templateObject || (_
43
48
  var WarningMsg = exports.WarningMsg = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n margin-top: 10px;\n color: ", ";\n font-weight: 500;\n"])), function (props) {
44
49
  return props.theme.errorColor;
45
50
  });
46
- var StyledFileDrop = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: white;\n border-radius: 4px;\n border-style: ", ";\n border-width: 1px;\n border-color: ", ";\n text-align: center;\n width: 100%;\n padding: 48px 8px 0;\n height: 360px;\n\n .file-upload-or {\n color: ", ";\n padding-right: 4px;\n }\n\n .file-type-row {\n opacity: 0.5;\n }\n ", ";\n"])), function (props) {
51
+ var StyledFileDrop = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: white;\n border-radius: 4px;\n border-style: ", ";\n border-width: 1px;\n border-color: ", ";\n text-align: center;\n width: 100%;\n min-height: 360px;\n padding: 24px 12px 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .file-type-row {\n opacity: 0.5;\n }\n ", ";\n"])), function (props) {
47
52
  return props.$dragOver ? 'solid' : 'dashed';
48
53
  }, function (props) {
49
54
  return props.$dragOver ? props.theme.textColorLT : props.theme.subtextColorLT;
55
+ }, _styles.media.portable(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 16px 8px 12px;\n min-height: 280px;\n "]))));
56
+ var StyledDropBody = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n flex: 1;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-evenly;\n"])));
57
+ var StyledActionLine = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n\n .upload-button {\n font-size: 14px;\n font-weight: 600;\n color: ", ";\n text-decoration: none;\n }\n"])), function (props) {
58
+ return props.theme.modalTitleColor;
50
59
  }, function (props) {
51
60
  return props.theme.linkBtnColor;
52
- }, _styles.media.portable(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 16px 4px 0;\n "]))));
53
- var MsgWrapper = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-size: 20px;\n height: 36px;\n"])), function (props) {
54
- return props.theme.modalTitleColor;
55
61
  });
56
- var StyledDragNDropIcon = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n margin-bottom: 48px;\n\n display: flex;\n justify-content: center;\n\n ", ";\n ", ";\n"])), fileIconColor, _styles.media.portable(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 16px;\n "]))), _styles.media.palm(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 8px;\n "]))));
57
- var StyledFileTypeFow = _styledComponents["default"].div(_templateObject0 || (_templateObject0 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 24px;\n ", ";\n ", ";\n"])), _styles.media.portable(_templateObject1 || (_templateObject1 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 16px;\n "]))), _styles.media.palm(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 8px;\n "]))));
58
- var StyledFileUpload = _styledComponents["default"].div(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["\n .file-drop {\n position: relative;\n }\n"])));
59
- var StyledMessage = _styledComponents["default"].div(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: 32px;\n\n .loading-action {\n margin-right: 10px;\n }\n .loading-spinner {\n margin-left: 10px;\n }\n"])));
60
- var StyledDragFileWrapper = _styledComponents["default"].div(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 32px;\n ", ";\n ", ";\n"])), _styles.media.portable(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 24px;\n "]))), _styles.media.portable(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["\n margin-bottom: 16px;\n "]))));
61
- var StyledDisclaimer = (0, _styledComponents["default"])(StyledMessage)(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteral2["default"])(["\n margin: 0 auto;\n"])));
62
+ var StyledDragNDropIcon = _styledComponents["default"].div(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n"])), fileIconColor);
63
+ var StyledFileTypeFow = _styledComponents["default"].div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n"])));
64
+ var StyledFileUpload = _styledComponents["default"].div(_templateObject0 || (_templateObject0 = (0, _taggedTemplateLiteral2["default"])(["\n .file-drop {\n position: relative;\n }\n"])));
65
+ var StyledMessage = _styledComponents["default"].div(_templateObject1 || (_templateObject1 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: center;\n align-items: center;\n margin-bottom: 32px;\n\n .loading-action {\n margin-right: 10px;\n }\n .loading-spinner {\n margin-left: 10px;\n }\n"])));
66
+ var StyledDragFileWrapper = _styledComponents["default"].div(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n"])));
67
+ var StyledDisclaimer = (0, _styledComponents["default"])(StyledMessage)(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["\n flex-shrink: 0;\n margin: 12px 12px 0;\n"])));
68
+ var StyledRemoteUrlForm = _styledComponents["default"].div(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n width: 100%;\n max-width: 420px;\n margin: 8px auto 0;\n"])));
69
+ var StyledRemoteUrlRow = _styledComponents["default"].div(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n gap: 8px;\n align-items: stretch;\n justify-content: center;\n width: 100%;\n"])));
70
+ var StyledRemoteUrlInput = (0, _styledComponents["default"])(_styledComponents2.InputLight)(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2["default"])(["\n flex: 1;\n min-width: 0;\n max-width: 300px;\n"])));
71
+ var StyledRemoteFormatSelect = _styledComponents["default"].select(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n width: 88px;\n flex-shrink: 0;\n height: auto;\n box-sizing: border-box;\n padding: 0 6px;\n cursor: pointer;\n"])), function (props) {
72
+ return props.theme.inputLT;
73
+ });
74
+ var StyledRemoteFetchButton = (0, _styledComponents["default"])(_styledComponents2.Button)(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteral2["default"])(["\n height: auto;\n box-sizing: border-box;\n padding: 0 12px;\n flex-shrink: 0;\n"])));
75
+ var REMOTE_DOWNLOAD_SHARE = 0.85;
76
+ function scaleFileProgress(progress, start, end) {
77
+ return Object.keys(progress).reduce(function (accu, key) {
78
+ var item = progress[key];
79
+ accu[key] = _objectSpread(_objectSpread({}, item), {}, {
80
+ percent: start + (item.percent || 0) * (end - start)
81
+ });
82
+ return accu;
83
+ }, {});
84
+ }
85
+ function getCombinedLoadProgress(_ref) {
86
+ var fileLoading = _ref.fileLoading,
87
+ fileLoadingProgress = _ref.fileLoadingProgress,
88
+ remoteProgress = _ref.remoteProgress;
89
+ var isRemoteFetch = Object.keys(remoteProgress).length > 0;
90
+ if (!isRemoteFetch) {
91
+ return fileLoadingProgress;
92
+ }
93
+ if (fileLoading) {
94
+ return scaleFileProgress(fileLoadingProgress, REMOTE_DOWNLOAD_SHARE, 1);
95
+ }
96
+ return scaleFileProgress(remoteProgress, 0, REMOTE_DOWNLOAD_SHARE);
97
+ }
62
98
  function FileUploadFactory() {
63
99
  /** @augments {Component<FileUploadProps>} */
64
100
  var FileUpload = /*#__PURE__*/function (_Component) {
@@ -73,7 +109,12 @@ function FileUploadFactory() {
73
109
  dragOver: false,
74
110
  fileLoading: false,
75
111
  files: [],
76
- errorFiles: []
112
+ errorFiles: [],
113
+ remoteUrl: '',
114
+ remoteFormat: 'auto',
115
+ remoteError: null,
116
+ remoteLoading: false,
117
+ remoteProgress: {}
77
118
  });
78
119
  (0, _defineProperty2["default"])(_this, "frame", /*#__PURE__*/(0, _react.createRef)());
79
120
  (0, _defineProperty2["default"])(_this, "_isValidFileType", function (filename) {
@@ -126,6 +167,122 @@ function FileUploadFactory() {
126
167
  dragOver: newState
127
168
  });
128
169
  });
170
+ (0, _defineProperty2["default"])(_this, "_onRemoteUrlChange", function (event) {
171
+ var remoteUrl = event.target.value;
172
+ _this.setState({
173
+ remoteUrl: remoteUrl,
174
+ remoteError: remoteUrl && !(0, _processors.isRemoteDatasetUrl)(remoteUrl) ? {
175
+ message: 'Incorrect URL'
176
+ } : null
177
+ });
178
+ });
179
+ (0, _defineProperty2["default"])(_this, "_onRemoteFormatChange", function (event) {
180
+ _this.setState({
181
+ remoteFormat: event.target.value
182
+ });
183
+ });
184
+ (0, _defineProperty2["default"])(_this, "_onRemoteUrlKeyDown", function (event) {
185
+ if (event.key === 'Enter') {
186
+ event.preventDefault();
187
+ _this._handleLoadRemoteFile();
188
+ }
189
+ });
190
+ (0, _defineProperty2["default"])(_this, "_handleLoadRemoteFile", /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
191
+ var _this$state, remoteUrl, remoteFormat, remoteError, intl, showFormatSelector, format, fileName, downloading, lastUpdate, file;
192
+ return _regenerator["default"].wrap(function _callee$(_context) {
193
+ while (1) switch (_context.prev = _context.next) {
194
+ case 0:
195
+ _this$state = _this.state, remoteUrl = _this$state.remoteUrl, remoteFormat = _this$state.remoteFormat, remoteError = _this$state.remoteError;
196
+ intl = _this.props.intl;
197
+ showFormatSelector = (0, _utils.getApplicationConfig)().enableRemoteFileFormatSelector;
198
+ format = showFormatSelector && remoteFormat !== 'auto' ? remoteFormat : undefined;
199
+ if (!(!remoteUrl || remoteError || _this.state.remoteLoading)) {
200
+ _context.next = 7;
201
+ break;
202
+ }
203
+ if (!remoteUrl) {
204
+ _this.setState({
205
+ remoteError: {
206
+ message: 'Incorrect URL'
207
+ }
208
+ });
209
+ }
210
+ return _context.abrupt("return");
211
+ case 7:
212
+ if ((0, _processors.isRemoteDatasetUrl)(remoteUrl)) {
213
+ _context.next = 10;
214
+ break;
215
+ }
216
+ _this.setState({
217
+ remoteError: {
218
+ message: 'Incorrect URL'
219
+ }
220
+ });
221
+ return _context.abrupt("return");
222
+ case 10:
223
+ fileName = (0, _processors.getFileNameForRemoteUrl)(remoteUrl, format);
224
+ downloading = intl.formatMessage({
225
+ id: 'fileUploader.downloading'
226
+ });
227
+ _this.setState({
228
+ remoteLoading: true,
229
+ remoteError: null,
230
+ remoteProgress: (0, _defineProperty2["default"])({}, fileName, {
231
+ fileName: fileName,
232
+ percent: 0,
233
+ message: downloading,
234
+ error: null
235
+ })
236
+ });
237
+ _context.prev = 13;
238
+ lastUpdate = 0;
239
+ _context.next = 17;
240
+ return (0, _processors.fetchRemoteFileAsKeplerFile)(remoteUrl, format, function (_ref3) {
241
+ var percent = _ref3.percent;
242
+ var now = Date.now();
243
+ if (percent < 1 && now - lastUpdate < 100) {
244
+ return;
245
+ }
246
+ lastUpdate = now;
247
+ _this.setState(function (prev) {
248
+ var name = Object.keys(prev.remoteProgress)[0] || fileName;
249
+ return {
250
+ remoteProgress: (0, _defineProperty2["default"])({}, name, {
251
+ fileName: name,
252
+ percent: percent,
253
+ message: downloading,
254
+ error: null
255
+ })
256
+ };
257
+ });
258
+ });
259
+ case 17:
260
+ file = _context.sent;
261
+ _this.setState({
262
+ files: [file],
263
+ errorFiles: [],
264
+ dragOver: false
265
+ }, function () {
266
+ return _this.props.onFileUpload([file]);
267
+ });
268
+ _context.next = 24;
269
+ break;
270
+ case 21:
271
+ _context.prev = 21;
272
+ _context.t0 = _context["catch"](13);
273
+ _this.setState({
274
+ remoteLoading: false,
275
+ remoteProgress: {},
276
+ remoteError: {
277
+ message: _context.t0 instanceof Error ? _context.t0.message : "Failed to load ".concat(remoteUrl)
278
+ }
279
+ });
280
+ case 24:
281
+ case "end":
282
+ return _context.stop();
283
+ }
284
+ }, _callee, null, [[13, 21]]);
285
+ })));
129
286
  return _this;
130
287
  }
131
288
  (0, _inherits2["default"])(FileUpload, _Component);
@@ -133,10 +290,15 @@ function FileUploadFactory() {
133
290
  key: "render",
134
291
  value: function render() {
135
292
  var _this2 = this;
136
- var _this$state = this.state,
137
- dragOver = _this$state.dragOver,
138
- files = _this$state.files,
139
- errorFiles = _this$state.errorFiles;
293
+ var _this$state2 = this.state,
294
+ dragOver = _this$state2.dragOver,
295
+ files = _this$state2.files,
296
+ errorFiles = _this$state2.errorFiles,
297
+ remoteUrl = _this$state2.remoteUrl,
298
+ remoteFormat = _this$state2.remoteFormat,
299
+ remoteError = _this$state2.remoteError,
300
+ remoteLoading = _this$state2.remoteLoading,
301
+ remoteProgress = _this$state2.remoteProgress;
140
302
  var _this$props = this.props,
141
303
  fileLoading = _this$props.fileLoading,
142
304
  fileLoadingProgress = _this$props.fileLoadingProgress,
@@ -147,6 +309,7 @@ function FileUploadFactory() {
147
309
  fileExtensions = _this$props2$fileExte === void 0 ? [] : _this$props2$fileExte,
148
310
  _this$props2$fileForm = _this$props2.fileFormatNames,
149
311
  fileFormatNames = _this$props2$fileForm === void 0 ? [] : _this$props2$fileForm;
312
+ var showFormatSelector = (0, _utils.getApplicationConfig)().enableRemoteFileFormatSelector;
150
313
  var fileUploadInfoText = "".concat(intl.formatMessage({
151
314
  id: 'fileUploader.configUploadMessage'
152
315
  }, {
@@ -179,7 +342,7 @@ function FileUploadFactory() {
179
342
  }
180
343
  }, fileUploadInfoText)), /*#__PURE__*/_react["default"].createElement(StyledFileDrop, {
181
344
  $dragOver: dragOver
182
- }, /*#__PURE__*/_react["default"].createElement(StyledFileTypeFow, {
345
+ }, /*#__PURE__*/_react["default"].createElement(StyledDropBody, null, /*#__PURE__*/_react["default"].createElement(StyledFileTypeFow, {
183
346
  className: "file-type-row"
184
347
  }, fileExtensions.map(function (ext) {
185
348
  return /*#__PURE__*/_react["default"].createElement(_icons.FileType, {
@@ -188,34 +351,77 @@ function FileUploadFactory() {
188
351
  height: "50px",
189
352
  fontSize: "9px"
190
353
  });
191
- })), fileLoading ? /*#__PURE__*/_react["default"].createElement(_fileUploadProgress["default"], {
192
- fileLoadingProgress: fileLoadingProgress,
354
+ })), fileLoading || remoteLoading ? /*#__PURE__*/_react["default"].createElement(_fileUploadProgress["default"], {
355
+ fileLoadingProgress: getCombinedLoadProgress({
356
+ fileLoading: fileLoading,
357
+ fileLoadingProgress: fileLoadingProgress,
358
+ remoteProgress: remoteProgress
359
+ }),
193
360
  theme: theme
194
- }) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
361
+ }) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(StyledDragNDropIcon, {
195
362
  style: {
196
363
  opacity: dragOver ? 0.5 : 1
197
364
  },
198
365
  className: "file-upload-display-message"
199
- }, /*#__PURE__*/_react["default"].createElement(StyledDragNDropIcon, null, /*#__PURE__*/_react["default"].createElement(_icons.DragNDrop, {
200
- height: "44px"
201
- })), errorFiles.length ? /*#__PURE__*/_react["default"].createElement(WarningMsg, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
366
+ }, /*#__PURE__*/_react["default"].createElement(_icons.DragNDrop, {
367
+ height: "36px"
368
+ }), errorFiles.length ? /*#__PURE__*/_react["default"].createElement(WarningMsg, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
202
369
  id: 'fileUploader.fileNotSupported',
203
370
  values: {
204
371
  errorFiles: errorFiles.join(', ')
205
372
  }
206
- })) : null), !files.length ? /*#__PURE__*/_react["default"].createElement(StyledDragFileWrapper, null, /*#__PURE__*/_react["default"].createElement(MsgWrapper, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
207
- id: 'fileUploader.message'
208
- })), /*#__PURE__*/_react["default"].createElement("span", {
209
- className: "file-upload-or"
210
- }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
211
- id: 'fileUploader.or'
212
- })), /*#__PURE__*/_react["default"].createElement(_uploadButton["default"], {
213
- onUpload: this._handleFileInput
373
+ })) : null), !files.length ? /*#__PURE__*/_react["default"].createElement(StyledDragFileWrapper, null, /*#__PURE__*/_react["default"].createElement(StyledActionLine, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
374
+ id: 'fileUploader.dropMessage',
375
+ values: {
376
+ browse: /*#__PURE__*/_react["default"].createElement(_uploadButton["default"], {
377
+ key: "browse",
378
+ onUpload: this._handleFileInput
379
+ }, intl.formatMessage({
380
+ id: 'fileUploader.browseFiles'
381
+ }))
382
+ }
383
+ })), /*#__PURE__*/_react["default"].createElement(StyledRemoteUrlForm, {
384
+ className: "file-uploader__remote-url",
385
+ onClick: function onClick(event) {
386
+ return event.stopPropagation();
387
+ }
388
+ }, /*#__PURE__*/_react["default"].createElement(StyledRemoteUrlRow, null, /*#__PURE__*/_react["default"].createElement(StyledRemoteUrlInput, {
389
+ type: "url",
390
+ value: remoteUrl,
391
+ "aria-label": intl.formatMessage({
392
+ id: 'fileUploader.urlPlaceholder'
393
+ }),
394
+ placeholder: intl.formatMessage({
395
+ id: 'fileUploader.urlPlaceholder'
396
+ }),
397
+ onChange: this._onRemoteUrlChange,
398
+ onKeyDown: this._onRemoteUrlKeyDown,
399
+ disabled: remoteLoading
400
+ }), showFormatSelector ? /*#__PURE__*/_react["default"].createElement(StyledRemoteFormatSelect, {
401
+ "aria-label": intl.formatMessage({
402
+ id: 'fileUploader.format'
403
+ }),
404
+ value: remoteFormat,
405
+ onChange: this._onRemoteFormatChange,
406
+ disabled: remoteLoading
407
+ }, _constants.REMOTE_FILE_FORMATS.map(function (format) {
408
+ return /*#__PURE__*/_react["default"].createElement("option", {
409
+ key: format,
410
+ value: format
411
+ }, format === 'auto' ? intl.formatMessage({
412
+ id: 'fileUploader.formatAuto'
413
+ }) : format.toUpperCase());
414
+ })) : null, /*#__PURE__*/_react["default"].createElement(StyledRemoteFetchButton, {
415
+ type: "button",
416
+ cta: true,
417
+ small: true,
418
+ disabled: !remoteUrl || remoteLoading,
419
+ onClick: this._handleLoadRemoteFile
214
420
  }, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
215
- id: 'fileUploader.browseFiles'
216
- }))) : null, /*#__PURE__*/_react["default"].createElement(StyledDisclaimer, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
421
+ id: 'fileUploader.fetch'
422
+ }))), remoteError ? /*#__PURE__*/_react["default"].createElement(WarningMsg, null, remoteError.message) : null)) : null)), fileLoading || remoteLoading ? null : /*#__PURE__*/_react["default"].createElement(StyledDisclaimer, null, /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
217
423
  id: 'fileUploader.disclaimer'
218
- }))))) : null, /*#__PURE__*/_react["default"].createElement(WarningMsg, null, (0, _utils.isChrome)() ? /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
424
+ })))) : null, /*#__PURE__*/_react["default"].createElement(WarningMsg, null, (0, _utils.isChrome)() ? /*#__PURE__*/_react["default"].createElement(_localization.FormattedMessage, {
219
425
  id: 'fileUploader.chromeMessage'
220
426
  }) : ''));
221
427
  }
@@ -225,12 +431,16 @@ function FileUploadFactory() {
225
431
  if (state.fileLoading && props.fileLoading === false && state.files.length) {
226
432
  return {
227
433
  files: [],
228
- fileLoading: props.fileLoading
434
+ fileLoading: props.fileLoading,
435
+ remoteLoading: false,
436
+ remoteProgress: {}
229
437
  };
230
438
  }
231
- return {
439
+ return _objectSpread({
232
440
  fileLoading: props.fileLoading
233
- };
441
+ }, props.fileLoading ? {
442
+ remoteLoading: false
443
+ } : {});
234
444
  }
235
445
  }]);
236
446
  }(_react.Component);
@@ -238,4 +448,4 @@ function FileUploadFactory() {
238
448
  }
239
449
  var _default = exports["default"] = FileUploadFactory;
240
450
  var FileUpload = exports.FileUpload = FileUploadFactory();
241
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX3VwbG9hZEJ1dHRvbiIsIl9pY29ucyIsIl9maWxlVXBsb2FkUHJvZ3Jlc3MiLCJfZmlsZURyb3AiLCJfdXRpbHMiLCJfY29uc3RhbnRzIiwiX21hcmtkb3duVG9Kc3giLCJfbG9jYWxpemF0aW9uIiwiX3N0eWxlcyIsIl9saW5rUmVuZGVyZXIiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfdGVtcGxhdGVPYmplY3Q1IiwiX3RlbXBsYXRlT2JqZWN0NiIsIl90ZW1wbGF0ZU9iamVjdDciLCJfdGVtcGxhdGVPYmplY3Q4IiwiX3RlbXBsYXRlT2JqZWN0OSIsIl90ZW1wbGF0ZU9iamVjdDAiLCJfdGVtcGxhdGVPYmplY3QxIiwiX3RlbXBsYXRlT2JqZWN0MTAiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl90ZW1wbGF0ZU9iamVjdDEyIiwiX3RlbXBsYXRlT2JqZWN0MTMiLCJfdGVtcGxhdGVPYmplY3QxNCIsIl90ZW1wbGF0ZU9iamVjdDE1IiwiX3RlbXBsYXRlT2JqZWN0MTYiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiVHlwZUVycm9yIiwiYSIsInUiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsImZpbGVJY29uQ29sb3IiLCJTdHlsZWRVcGxvYWRNZXNzYWdlIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsInRoZW1lIiwidGV4dENvbG9yTFQiLCJtZWRpYSIsInBvcnRhYmxlIiwiV2FybmluZ01zZyIsImV4cG9ydHMiLCJzcGFuIiwiZXJyb3JDb2xvciIsIlN0eWxlZEZpbGVEcm9wIiwiJGRyYWdPdmVyIiwic3VidGV4dENvbG9yTFQiLCJsaW5rQnRuQ29sb3IiLCJNc2dXcmFwcGVyIiwibW9kYWxUaXRsZUNvbG9yIiwiU3R5bGVkRHJhZ05Ecm9wSWNvbiIsInBhbG0iLCJTdHlsZWRGaWxlVHlwZUZvdyIsIlN0eWxlZEZpbGVVcGxvYWQiLCJTdHlsZWRNZXNzYWdlIiwiU3R5bGVkRHJhZ0ZpbGVXcmFwcGVyIiwiU3R5bGVkRGlzY2xhaW1lciIsIkZpbGVVcGxvYWRGYWN0b3J5IiwiRmlsZVVwbG9hZCIsIl9Db21wb25lbnQiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJndW1lbnRzIiwiYXJncyIsIl9rZXkiLCJjb25jYXQiLCJfZGVmaW5lUHJvcGVydHkyIiwiZHJhZ092ZXIiLCJmaWxlTG9hZGluZyIsImZpbGVzIiwiZXJyb3JGaWxlcyIsImNyZWF0ZVJlZiIsImZpbGVuYW1lIiwiX3RoaXMkcHJvcHMkZmlsZUV4dGVuIiwiZmlsZUV4dGVuc2lvbnMiLCJmaWxlRXh0IiwiZmluZCIsImV4dCIsImVuZHNXaXRoIiwiZmlsZUxpc3QiLCJldmVudCIsInN0b3BQcm9wYWdhdGlvbiIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJmaWx0ZXIiLCJfdGhpcyRwcm9wcyRkaXNhYmxlRXgiLCJkaXNhYmxlRXh0ZW5zaW9uRmlsdGVyIiwiZmlsZXNUb0xvYWQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImZpbGUiLCJfaXNWYWxpZEZpbGVUeXBlIiwicHVzaCIsImVyciIsIm5leHRTdGF0ZSIsInNldFN0YXRlIiwib25GaWxlVXBsb2FkIiwibmV3U3RhdGUiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInJlbmRlciIsIl90aGlzMiIsIl90aGlzJHN0YXRlIiwic3RhdGUiLCJfdGhpcyRwcm9wcyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJpbnRsIiwiX3RoaXMkcHJvcHMyIiwiX3RoaXMkcHJvcHMyJGZpbGVFeHRlIiwiX3RoaXMkcHJvcHMyJGZpbGVGb3JtIiwiZmlsZUZvcm1hdE5hbWVzIiwiZmlsZVVwbG9hZEluZm9UZXh0IiwiZm9ybWF0TWVzc2FnZSIsImlkIiwibWFwIiwiZm9ybWF0Iiwiam9pbiIsIkdVSURFU19GSUxFX0ZPUk1BVF9ET0MiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicmVmIiwiZnJhbWUiLCJGaWxlRHJvcCIsImN1cnJlbnQiLCJkb2N1bWVudCIsIm9uRHJhZ092ZXIiLCJfdG9nZ2xlRHJhZ1N0YXRlIiwib25EcmFnTGVhdmUiLCJvbkRyb3AiLCJfaGFuZGxlRmlsZUlucHV0Iiwib3B0aW9ucyIsIm92ZXJyaWRlcyIsImNvbXBvbmVudCIsIkxpbmtSZW5kZXJlciIsIkZpbGVUeXBlIiwiaGVpZ2h0IiwiZm9udFNpemUiLCJGcmFnbWVudCIsInN0eWxlIiwib3BhY2l0eSIsIkRyYWdORHJvcCIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJ2YWx1ZXMiLCJvblVwbG9hZCIsImlzQ2hyb21lIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiQ29tcG9uZW50IiwiaW5qZWN0SW50bCIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1vbi9maWxlLXVwbG9hZGVyL2ZpbGUtdXBsb2FkLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIGNyZWF0ZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge2luamVjdEludGwsIFdyYXBwZWRDb21wb25lbnRQcm9wc30gZnJvbSAncmVhY3QtaW50bCc7XG5pbXBvcnQgVXBsb2FkQnV0dG9uIGZyb20gJy4vdXBsb2FkLWJ1dHRvbic7XG5pbXBvcnQge0RyYWdORHJvcCwgRmlsZVR5cGV9IGZyb20gJy4uL2ljb25zJztcbmltcG9ydCBGaWxlVXBsb2FkUHJvZ3Jlc3MgZnJvbSAnLi9maWxlLXVwbG9hZC1wcm9ncmVzcyc7XG5pbXBvcnQgRmlsZURyb3AgZnJvbSAnLi9maWxlLWRyb3AnO1xuaW1wb3J0IHtGaWxlTG9hZGluZywgRmlsZUxvYWRpbmdQcm9ncmVzc30gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5cbmltcG9ydCB7aXNDaHJvbWV9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IHtHVUlERVNfRklMRV9GT1JNQVRfRE9DfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQgTWFya2Rvd24gZnJvbSAnbWFya2Rvd24tdG8tanN4Jztcbi8vIEJyZWFrcG9pbnRzXG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7bWVkaWF9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcblxuaW1wb3J0IExpbmtSZW5kZXJlciBmcm9tICcuLi9saW5rLXJlbmRlcmVyJztcblxuY29uc3QgZmlsZUljb25Db2xvciA9ICcjRDNEOEUwJztcblxuY29uc3QgU3R5bGVkVXBsb2FkTWVzc2FnZSA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRleHRDb2xvckxUfTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuXG4gICR7bWVkaWEucG9ydGFibGVgXG4gICAgZm9udC1zaXplOiAxMnB4O1xuICBgfTtcbmA7XG5cbmV4cG9ydCBjb25zdCBXYXJuaW5nTXNnID0gc3R5bGVkLnNwYW5gXG4gIG1hcmdpbi10b3A6IDEwcHg7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVycm9yQ29sb3J9O1xuICBmb250LXdlaWdodDogNTAwO1xuYDtcblxuaW50ZXJmYWNlIFN0eWxlZEZpbGVEcm9wUHJvcHMge1xuICAkZHJhZ092ZXI/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRGaWxlRHJvcCA9IHN0eWxlZC5kaXY8U3R5bGVkRmlsZURyb3BQcm9wcz5gXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJvcmRlci1zdHlsZTogJHtwcm9wcyA9PiAocHJvcHMuJGRyYWdPdmVyID8gJ3NvbGlkJyA6ICdkYXNoZWQnKX07XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItY29sb3I6ICR7cHJvcHMgPT4gKHByb3BzLiRkcmFnT3ZlciA/IHByb3BzLnRoZW1lLnRleHRDb2xvckxUIDogcHJvcHMudGhlbWUuc3VidGV4dENvbG9yTFQpfTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogNDhweCA4cHggMDtcbiAgaGVpZ2h0OiAzNjBweDtcblxuICAuZmlsZS11cGxvYWQtb3Ige1xuICAgIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmxpbmtCdG5Db2xvcn07XG4gICAgcGFkZGluZy1yaWdodDogNHB4O1xuICB9XG5cbiAgLmZpbGUtdHlwZS1yb3cge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgfVxuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIHBhZGRpbmc6IDE2cHggNHB4IDA7XG4gIGB9O1xuYDtcblxuY29uc3QgTXNnV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1vZGFsVGl0bGVDb2xvcn07XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgaGVpZ2h0OiAzNnB4O1xuYDtcblxuY29uc3QgU3R5bGVkRHJhZ05Ecm9wSWNvbiA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiAke2ZpbGVJY29uQ29sb3J9O1xuICBtYXJnaW4tYm90dG9tOiA0OHB4O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICR7bWVkaWEucG9ydGFibGVgXG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgYH07XG4gICR7bWVkaWEucGFsbWBcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gIGB9O1xuYDtcblxuY29uc3QgU3R5bGVkRmlsZVR5cGVGb3cgPSBzdHlsZWQuZGl2YFxuICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gIGB9O1xuICAke21lZGlhLnBhbG1gXG4gICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICBgfTtcbmA7XG5cbmNvbnN0IFN0eWxlZEZpbGVVcGxvYWQgPSBzdHlsZWQuZGl2YFxuICAuZmlsZS1kcm9wIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZE1lc3NhZ2UgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWFyZ2luLWJvdHRvbTogMzJweDtcblxuICAubG9hZGluZy1hY3Rpb24ge1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxuICAubG9hZGluZy1zcGlubmVyIHtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkRHJhZ0ZpbGVXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgJHttZWRpYS5wb3J0YWJsZWBcbiAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICBgfTtcbiAgJHttZWRpYS5wb3J0YWJsZWBcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICBgfTtcbmA7XG5cbmNvbnN0IFN0eWxlZERpc2NsYWltZXIgPSBzdHlsZWQoU3R5bGVkTWVzc2FnZSlgXG4gIG1hcmdpbjogMCBhdXRvO1xuYDtcblxudHlwZSBGaWxlVXBsb2FkUHJvcHMgPSB7XG4gIG9uRmlsZVVwbG9hZDogKGZpbGVzOiBGaWxlW10pID0+IHZvaWQ7XG4gIGZpbGVMb2FkaW5nOiBGaWxlTG9hZGluZyB8IGZhbHNlO1xuICBmaWxlTG9hZGluZ1Byb2dyZXNzOiBGaWxlTG9hZGluZ1Byb2dyZXNzO1xuICB0aGVtZTogb2JqZWN0O1xuICAvKiogQSBsaXN0IG9mIG5hbWVzIG9mIHN1cHBvcnRlZCBmb3JtYXRzIHN1aXRhYmxlIHRvIHByZXNlbnQgdG8gdXNlciAqL1xuICBmaWxlRm9ybWF0TmFtZXM/OiBzdHJpbmdbXTtcbiAgLyoqIEEgbGlzdCBvZiB0eXBpY2FsbHkgMyBsZXR0ZXIgZXh0ZW5zaW9ucyAod2l0aG91dCAnLicpIGZvciBmaWxlIG1hdGNoaW5nICovXG4gIGZpbGVFeHRlbnNpb25zPzogc3RyaW5nW107XG4gIC8qKiBTZXQgdG8gdHJ1ZSBpZiBhcHAgd2FudHMgdG8gZG8gaXRzIG93biBmaWxlIGZpbHRlcmluZyAqL1xuICBkaXNhYmxlRXh0ZW5zaW9uRmlsdGVyPzogYm9vbGVhbjtcbn0gJiBXcmFwcGVkQ29tcG9uZW50UHJvcHM7XG5cbmZ1bmN0aW9uIEZpbGVVcGxvYWRGYWN0b3J5KCkge1xuICAvKiogQGF1Z21lbnRzIHtDb21wb25lbnQ8RmlsZVVwbG9hZFByb3BzPn0gKi9cbiAgY2xhc3MgRmlsZVVwbG9hZCBleHRlbmRzIENvbXBvbmVudDxGaWxlVXBsb2FkUHJvcHM+IHtcbiAgICBzdGF0ZSA9IHtcbiAgICAgIGRyYWdPdmVyOiBmYWxzZSxcbiAgICAgIGZpbGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGZpbGVzOiBbXSxcbiAgICAgIGVycm9yRmlsZXM6IFtdXG4gICAgfTtcblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICBpZiAoc3RhdGUuZmlsZUxvYWRpbmcgJiYgcHJvcHMuZmlsZUxvYWRpbmcgPT09IGZhbHNlICYmIHN0YXRlLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbGVzOiBbXSxcbiAgICAgICAgICBmaWxlTG9hZGluZzogcHJvcHMuZmlsZUxvYWRpbmdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVMb2FkaW5nOiBwcm9wcy5maWxlTG9hZGluZ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmcmFtZSA9IGNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcblxuICAgIF9pc1ZhbGlkRmlsZVR5cGUgPSBmaWxlbmFtZSA9PiB7XG4gICAgICBjb25zdCB7ZmlsZUV4dGVuc2lvbnMgPSBbXX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgZmlsZUV4dCA9IGZpbGVFeHRlbnNpb25zLmZpbmQoZXh0ID0+IGZpbGVuYW1lLmVuZHNXaXRoKGV4dCkpO1xuXG4gICAgICByZXR1cm4gQm9vbGVhbihmaWxlRXh0KTtcbiAgICB9O1xuXG4gICAgLyoqIEBwYXJhbSB7RmlsZUxpc3R9IGZpbGVMaXN0ICovXG4gICAgX2hhbmRsZUZpbGVJbnB1dCA9IChmaWxlTGlzdDogRmlsZUxpc3QsIGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZXMgPSBbLi4uZmlsZUxpc3RdLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgY29uc3Qge2Rpc2FibGVFeHRlbnNpb25GaWx0ZXIgPSBmYWxzZX0gPSB0aGlzLnByb3BzO1xuXG4gICAgICAvLyBUT0RPIC0gbW92ZSB0aGlzIGNvZGUgb3V0IG9mIHRoZSBjb21wb25lbnRcbiAgICAgIGNvbnN0IGZpbGVzVG9Mb2FkOiBGaWxlW10gPSBbXTtcbiAgICAgIGNvbnN0IGVycm9yRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgaWYgKGRpc2FibGVFeHRlbnNpb25GaWx0ZXIgfHwgdGhpcy5faXNWYWxpZEZpbGVUeXBlKGZpbGUubmFtZSkpIHtcbiAgICAgICAgICBmaWxlc1RvTG9hZC5wdXNoKGZpbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yRmlsZXMucHVzaChmaWxlLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHtmaWxlczogZmlsZXNUb0xvYWQsIGVycm9yRmlsZXMsIGRyYWdPdmVyOiBmYWxzZX07XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCAoKSA9PlxuICAgICAgICBuZXh0U3RhdGUuZmlsZXMubGVuZ3RoID8gdGhpcy5wcm9wcy5vbkZpbGVVcGxvYWQobmV4dFN0YXRlLmZpbGVzKSA6IG51bGxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF90b2dnbGVEcmFnU3RhdGUgPSBuZXdTdGF0ZSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtkcmFnT3ZlcjogbmV3U3RhdGV9KTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2RyYWdPdmVyLCBmaWxlcywgZXJyb3JGaWxlc30gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3Qge2ZpbGVMb2FkaW5nLCBmaWxlTG9hZGluZ1Byb2dyZXNzLCB0aGVtZSwgaW50bH0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3Qge2ZpbGVFeHRlbnNpb25zID0gW10sIGZpbGVGb3JtYXROYW1lcyA9IFtdfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBmaWxlVXBsb2FkSW5mb1RleHQgPSBgJHtpbnRsLmZvcm1hdE1lc3NhZ2UoXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2ZpbGVVcGxvYWRlci5jb25maWdVcGxvYWRNZXNzYWdlJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmlsZUZvcm1hdE5hbWVzOiBmaWxlRm9ybWF0TmFtZXMubWFwKGZvcm1hdCA9PiBgKioke2Zvcm1hdH0qKmApLmpvaW4oJywgJylcbiAgICAgICAgfVxuICAgICAgKX0oJHtHVUlERVNfRklMRV9GT1JNQVRfRE9DfSkuYDtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTdHlsZWRGaWxlVXBsb2FkIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkZXJcIiByZWY9e3RoaXMuZnJhbWV9PlxuICAgICAgICAgIHtGaWxlRHJvcCA/IChcbiAgICAgICAgICAgIDxGaWxlRHJvcFxuICAgICAgICAgICAgICBmcmFtZT17dGhpcy5mcmFtZS5jdXJyZW50IHx8IGRvY3VtZW50fVxuICAgICAgICAgICAgICBvbkRyYWdPdmVyPXsoKSA9PiB0aGlzLl90b2dnbGVEcmFnU3RhdGUodHJ1ZSl9XG4gICAgICAgICAgICAgIG9uRHJhZ0xlYXZlPXsoKSA9PiB0aGlzLl90b2dnbGVEcmFnU3RhdGUoZmFsc2UpfVxuICAgICAgICAgICAgICBvbkRyb3A9e3RoaXMuX2hhbmRsZUZpbGVJbnB1dH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmlsZS11cGxvYWRlcl9fZmlsZS1kcm9wXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFN0eWxlZFVwbG9hZE1lc3NhZ2UgY2xhc3NOYW1lPVwiZmlsZS11cGxvYWRfX21lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3tcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBMaW5rUmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2ZpbGVVcGxvYWRJbmZvVGV4dH1cbiAgICAgICAgICAgICAgICA8L01hcmtkb3duPlxuICAgICAgICAgICAgICA8L1N0eWxlZFVwbG9hZE1lc3NhZ2U+XG4gICAgICAgICAgICAgIDxTdHlsZWRGaWxlRHJvcCAkZHJhZ092ZXI9e2RyYWdPdmVyfT5cbiAgICAgICAgICAgICAgICA8U3R5bGVkRmlsZVR5cGVGb3cgY2xhc3NOYW1lPVwiZmlsZS10eXBlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAge2ZpbGVFeHRlbnNpb25zLm1hcChleHQgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8RmlsZVR5cGUga2V5PXtleHR9IGV4dD17ZXh0fSBoZWlnaHQ9XCI1MHB4XCIgZm9udFNpemU9XCI5cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRGaWxlVHlwZUZvdz5cbiAgICAgICAgICAgICAgICB7ZmlsZUxvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8RmlsZVVwbG9hZFByb2dyZXNzIGZpbGVMb2FkaW5nUHJvZ3Jlc3M9e2ZpbGVMb2FkaW5nUHJvZ3Jlc3N9IHRoZW1lPXt0aGVtZX0gLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7b3BhY2l0eTogZHJhZ092ZXIgPyAwLjUgOiAxfX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmaWxlLXVwbG9hZC1kaXNwbGF5LW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZERyYWdORHJvcEljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJhZ05Ecm9wIGhlaWdodD1cIjQ0cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRHJhZ05Ecm9wSWNvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIHtlcnJvckZpbGVzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxXYXJuaW5nTXNnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXsnZmlsZVVwbG9hZGVyLmZpbGVOb3RTdXBwb3J0ZWQnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17e2Vycm9yRmlsZXM6IGVycm9yRmlsZXMuam9pbignLCAnKX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1dhcm5pbmdNc2c+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7IWZpbGVzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkRHJhZ0ZpbGVXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1zZ1dyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnZmlsZVVwbG9hZGVyLm1lc3NhZ2UnfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Nc2dXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmlsZS11cGxvYWQtb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydmaWxlVXBsb2FkZXIub3InfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFVwbG9hZEJ1dHRvbiBvblVwbG9hZD17dGhpcy5faGFuZGxlRmlsZUlucHV0fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydmaWxlVXBsb2FkZXIuYnJvd3NlRmlsZXMnfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9VcGxvYWRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWREcmFnRmlsZVdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWREaXNjbGFpbWVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXsnZmlsZVVwbG9hZGVyLmRpc2NsYWltZXInfSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1N0eWxlZERpc2NsYWltZXI+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1N0eWxlZEZpbGVEcm9wPlxuICAgICAgICAgICAgPC9GaWxlRHJvcD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIDxXYXJuaW5nTXNnPlxuICAgICAgICAgICAge2lzQ2hyb21lKCkgPyA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2ZpbGVVcGxvYWRlci5jaHJvbWVNZXNzYWdlJ30gLz4gOiAnJ31cbiAgICAgICAgICA8L1dhcm5pbmdNc2c+XG4gICAgICAgIDwvU3R5bGVkRmlsZVVwbG9hZD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluamVjdEludGwoRmlsZVVwbG9hZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVVcGxvYWRGYWN0b3J5O1xuZXhwb3J0IGNvbnN0IEZpbGVVcGxvYWQgPSBGaWxlVXBsb2FkRmFjdG9yeSgpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLGFBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLE1BQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLG1CQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxTQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFHQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxVQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxjQUFBLEdBQUFSLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBVyxhQUFBLEdBQUFYLE9BQUE7QUFDQSxJQUFBWSxPQUFBLEdBQUFaLE9BQUE7QUFFQSxJQUFBYSxhQUFBLEdBQUFYLHNCQUFBLENBQUFGLE9BQUE7QUFBNEMsSUFBQWMsZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxF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
451
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX3VwbG9hZEJ1dHRvbiIsIl9pY29ucyIsIl9maWxlVXBsb2FkUHJvZ3Jlc3MiLCJfZmlsZURyb3AiLCJfY29uc3RhbnRzIiwiX2xvY2FsaXphdGlvbiIsIl9wcm9jZXNzb3JzIiwiX3N0eWxlcyIsIl91dGlscyIsIl9tYXJrZG93blRvSnN4IiwiX3N0eWxlZENvbXBvbmVudHMyIiwiX2xpbmtSZW5kZXJlciIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MCIsIl90ZW1wbGF0ZU9iamVjdDEiLCJfdGVtcGxhdGVPYmplY3QxMCIsIl90ZW1wbGF0ZU9iamVjdDExIiwiX3RlbXBsYXRlT2JqZWN0MTIiLCJfdGVtcGxhdGVPYmplY3QxMyIsIl90ZW1wbGF0ZU9iamVjdDE0IiwiX3RlbXBsYXRlT2JqZWN0MTUiLCJfdGVtcGxhdGVPYmplY3QxNiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJUeXBlRXJyb3IiLCJhIiwidSIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZmlsZUljb25Db2xvciIsIlN0eWxlZFVwbG9hZE1lc3NhZ2UiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJ0ZXh0Q29sb3JMVCIsIm1lZGlhIiwicG9ydGFibGUiLCJXYXJuaW5nTXNnIiwiZXhwb3J0cyIsInNwYW4iLCJlcnJvckNvbG9yIiwiU3R5bGVkRmlsZURyb3AiLCIkZHJhZ092ZXIiLCJzdWJ0ZXh0Q29sb3JMVCIsIlN0eWxlZERyb3BCb2R5IiwiU3R5bGVkQWN0aW9uTGluZSIsIm1vZGFsVGl0bGVDb2xvciIsImxpbmtCdG5Db2xvciIsIlN0eWxlZERyYWdORHJvcEljb24iLCJTdHlsZWRGaWxlVHlwZUZvdyIsIlN0eWxlZEZpbGVVcGxvYWQiLCJTdHlsZWRNZXNzYWdlIiwiU3R5bGVkRHJhZ0ZpbGVXcmFwcGVyIiwiU3R5bGVkRGlzY2xhaW1lciIsIlN0eWxlZFJlbW90ZVVybEZvcm0iLCJTdHlsZWRSZW1vdGVVcmxSb3ciLCJTdHlsZWRSZW1vdGVVcmxJbnB1dCIsIklucHV0TGlnaHQiLCJTdHlsZWRSZW1vdGVGb3JtYXRTZWxlY3QiLCJzZWxlY3QiLCJpbnB1dExUIiwiU3R5bGVkUmVtb3RlRmV0Y2hCdXR0b24iLCJCdXR0b24iLCJSRU1PVEVfRE9XTkxPQURfU0hBUkUiLCJzY2FsZUZpbGVQcm9ncmVzcyIsInByb2dyZXNzIiwic3RhcnQiLCJlbmQiLCJyZWR1Y2UiLCJhY2N1Iiwia2V5IiwiaXRlbSIsInBlcmNlbnQiLCJnZXRDb21iaW5lZExvYWRQcm9ncmVzcyIsIl9yZWYiLCJmaWxlTG9hZGluZyIsImZpbGVMb2FkaW5nUHJvZ3Jlc3MiLCJyZW1vdGVQcm9ncmVzcyIsImlzUmVtb3RlRmV0Y2giLCJGaWxlVXBsb2FkRmFjdG9yeSIsIkZpbGVVcGxvYWQiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiY29uY2F0IiwiZHJhZ092ZXIiLCJmaWxlcyIsImVycm9yRmlsZXMiLCJyZW1vdGVVcmwiLCJyZW1vdGVGb3JtYXQiLCJyZW1vdGVFcnJvciIsInJlbW90ZUxvYWRpbmciLCJjcmVhdGVSZWYiLCJmaWxlbmFtZSIsIl90aGlzJHByb3BzJGZpbGVFeHRlbiIsImZpbGVFeHRlbnNpb25zIiwiZmlsZUV4dCIsImZpbmQiLCJleHQiLCJlbmRzV2l0aCIsImZpbGVMaXN0IiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiX3RoaXMkcHJvcHMkZGlzYWJsZUV4IiwiZGlzYWJsZUV4dGVuc2lvbkZpbHRlciIsImZpbGVzVG9Mb2FkIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJmaWxlIiwiX2lzVmFsaWRGaWxlVHlwZSIsImVyciIsIm5leHRTdGF0ZSIsInNldFN0YXRlIiwib25GaWxlVXBsb2FkIiwibmV3U3RhdGUiLCJ0YXJnZXQiLCJpc1JlbW90ZURhdGFzZXRVcmwiLCJtZXNzYWdlIiwicHJldmVudERlZmF1bHQiLCJfaGFuZGxlTG9hZFJlbW90ZUZpbGUiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl90aGlzJHN0YXRlIiwiaW50bCIsInNob3dGb3JtYXRTZWxlY3RvciIsImZvcm1hdCIsImZpbGVOYW1lIiwiZG93bmxvYWRpbmciLCJsYXN0VXBkYXRlIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2Iiwic3RhdGUiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImVuYWJsZVJlbW90ZUZpbGVGb3JtYXRTZWxlY3RvciIsInVuZGVmaW5lZCIsImFicnVwdCIsImdldEZpbGVOYW1lRm9yUmVtb3RlVXJsIiwiZm9ybWF0TWVzc2FnZSIsImlkIiwiZXJyb3IiLCJmZXRjaFJlbW90ZUZpbGVBc0tlcGxlckZpbGUiLCJfcmVmMyIsIm5vdyIsIkRhdGUiLCJzZW50IiwidDAiLCJFcnJvciIsInN0b3AiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsInJlbmRlciIsIl90aGlzMiIsIl90aGlzJHN0YXRlMiIsIl90aGlzJHByb3BzIiwiX3RoaXMkcHJvcHMyIiwiX3RoaXMkcHJvcHMyJGZpbGVFeHRlIiwiX3RoaXMkcHJvcHMyJGZpbGVGb3JtIiwiZmlsZUZvcm1hdE5hbWVzIiwiZmlsZVVwbG9hZEluZm9UZXh0IiwibWFwIiwiam9pbiIsIkdVSURFU19GSUxFX0ZPUk1BVF9ET0MiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicmVmIiwiZnJhbWUiLCJGaWxlRHJvcCIsImN1cnJlbnQiLCJkb2N1bWVudCIsIm9uRHJhZ092ZXIiLCJfdG9nZ2xlRHJhZ1N0YXRlIiwib25EcmFnTGVhdmUiLCJvbkRyb3AiLCJfaGFuZGxlRmlsZUlucHV0Iiwib3B0aW9ucyIsIm92ZXJyaWRlcyIsImNvbXBvbmVudCIsIkxpbmtSZW5kZXJlciIsIkZpbGVUeXBlIiwiaGVpZ2h0IiwiZm9udFNpemUiLCJGcmFnbWVudCIsInN0eWxlIiwib3BhY2l0eSIsIkRyYWdORHJvcCIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJ2YWx1ZXMiLCJicm93c2UiLCJvblVwbG9hZCIsIm9uQ2xpY2siLCJ0eXBlIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsIl9vblJlbW90ZVVybENoYW5nZSIsIm9uS2V5RG93biIsIl9vblJlbW90ZVVybEtleURvd24iLCJkaXNhYmxlZCIsIl9vblJlbW90ZUZvcm1hdENoYW5nZSIsIlJFTU9URV9GSUxFX0ZPUk1BVFMiLCJ0b1VwcGVyQ2FzZSIsImN0YSIsInNtYWxsIiwiaXNDaHJvbWUiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJDb21wb25lbnQiLCJpbmplY3RJbnRsIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tbW9uL2ZpbGUtdXBsb2FkZXIvZmlsZS11cGxvYWQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgY3JlYXRlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7aW5qZWN0SW50bCwgV3JhcHBlZENvbXBvbmVudFByb3BzfSBmcm9tICdyZWFjdC1pbnRsJztcbmltcG9ydCBVcGxvYWRCdXR0b24gZnJvbSAnLi91cGxvYWQtYnV0dG9uJztcbmltcG9ydCB7RHJhZ05Ecm9wLCBGaWxlVHlwZX0gZnJvbSAnLi4vaWNvbnMnO1xuaW1wb3J0IEZpbGVVcGxvYWRQcm9ncmVzcyBmcm9tICcuL2ZpbGUtdXBsb2FkLXByb2dyZXNzJztcbmltcG9ydCBGaWxlRHJvcCBmcm9tICcuL2ZpbGUtZHJvcCc7XG5pbXBvcnQge0ZpbGVMb2FkaW5nLCBGaWxlTG9hZGluZ1Byb2dyZXNzfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuaW1wb3J0IHtHVUlERVNfRklMRV9GT1JNQVRfRE9DLCBSRU1PVEVfRklMRV9GT1JNQVRTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0Zvcm1hdHRlZE1lc3NhZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7XG4gIGZldGNoUmVtb3RlRmlsZUFzS2VwbGVyRmlsZSxcbiAgZ2V0RmlsZU5hbWVGb3JSZW1vdGVVcmwsXG4gIGlzUmVtb3RlRGF0YXNldFVybFxufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHttZWRpYX0gZnJvbSAnQGtlcGxlci5nbC9zdHlsZXMnO1xuaW1wb3J0IHtpc0Nocm9tZSwgZ2V0QXBwbGljYXRpb25Db25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuaW1wb3J0IE1hcmtkb3duIGZyb20gJ21hcmtkb3duLXRvLWpzeCc7XG5cbmltcG9ydCB7QnV0dG9uLCBJbnB1dExpZ2h0fSBmcm9tICcuLi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgTGlua1JlbmRlcmVyIGZyb20gJy4uL2xpbmstcmVuZGVyZXInO1xuXG5jb25zdCBmaWxlSWNvbkNvbG9yID0gJyNEM0Q4RTAnO1xuXG5jb25zdCBTdHlsZWRVcGxvYWRNZXNzYWdlID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yTFR9O1xuICBmb250LXNpemU6IDE0cHg7XG4gIG1hcmdpbi1ib3R0b206IDEycHg7XG5cbiAgJHttZWRpYS5wb3J0YWJsZWBcbiAgICBmb250LXNpemU6IDEycHg7XG4gIGB9O1xuYDtcblxuZXhwb3J0IGNvbnN0IFdhcm5pbmdNc2cgPSBzdHlsZWQuc3BhbmBcbiAgbWFyZ2luLXRvcDogMTBweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZXJyb3JDb2xvcn07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG5gO1xuXG5pbnRlcmZhY2UgU3R5bGVkRmlsZURyb3BQcm9wcyB7XG4gICRkcmFnT3Zlcj86IGJvb2xlYW47XG59XG5cbmNvbnN0IFN0eWxlZEZpbGVEcm9wID0gc3R5bGVkLmRpdjxTdHlsZWRGaWxlRHJvcFByb3BzPmBcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLXN0eWxlOiAke3Byb3BzID0+IChwcm9wcy4kZHJhZ092ZXIgPyAnc29saWQnIDogJ2Rhc2hlZCcpfTtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuJGRyYWdPdmVyID8gcHJvcHMudGhlbWUudGV4dENvbG9yTFQgOiBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3JMVCl9O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAzNjBweDtcbiAgcGFkZGluZzogMjRweCAxMnB4IDE2cHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgLmZpbGUtdHlwZS1yb3cge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgfVxuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIHBhZGRpbmc6IDE2cHggOHB4IDEycHg7XG4gICAgbWluLWhlaWdodDogMjgwcHg7XG4gIGB9O1xuYDtcblxuY29uc3QgU3R5bGVkRHJvcEJvZHkgPSBzdHlsZWQuZGl2YFxuICBmbGV4OiAxO1xuICB3aWR0aDogMTAwJTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XG5gO1xuXG5jb25zdCBTdHlsZWRBY3Rpb25MaW5lID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubW9kYWxUaXRsZUNvbG9yfTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LXdlaWdodDogNjAwO1xuICBsaW5lLWhlaWdodDogMjBweDtcblxuICAudXBsb2FkLWJ1dHRvbiB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGlua0J0bkNvbG9yfTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZERyYWdORHJvcEljb24gPSBzdHlsZWQuZGl2YFxuICBjb2xvcjogJHtmaWxlSWNvbkNvbG9yfTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5jb25zdCBTdHlsZWRGaWxlVHlwZUZvdyA9IHN0eWxlZC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuYDtcblxuY29uc3QgU3R5bGVkRmlsZVVwbG9hZCA9IHN0eWxlZC5kaXZgXG4gIC5maWxlLWRyb3Age1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkTWVzc2FnZSA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuXG4gIC5sb2FkaW5nLWFjdGlvbiB7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICB9XG4gIC5sb2FkaW5nLXNwaW5uZXIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWREcmFnRmlsZVdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB3aWR0aDogMTAwJTtcbmA7XG5cbmNvbnN0IFN0eWxlZERpc2NsYWltZXIgPSBzdHlsZWQoU3R5bGVkTWVzc2FnZSlgXG4gIGZsZXgtc2hyaW5rOiAwO1xuICBtYXJnaW46IDEycHggMTJweCAwO1xuYDtcblxuY29uc3QgU3R5bGVkUmVtb3RlVXJsRm9ybSA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNHB4O1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiA0MjBweDtcbiAgbWFyZ2luOiA4cHggYXV0byAwO1xuYDtcblxuY29uc3QgU3R5bGVkUmVtb3RlVXJsUm93ID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiA4cHg7XG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG5gO1xuXG5jb25zdCBTdHlsZWRSZW1vdGVVcmxJbnB1dCA9IHN0eWxlZChJbnB1dExpZ2h0KWBcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiAwO1xuICBtYXgtd2lkdGg6IDMwMHB4O1xuYDtcblxuY29uc3QgU3R5bGVkUmVtb3RlRm9ybWF0U2VsZWN0ID0gc3R5bGVkLnNlbGVjdGBcbiAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dExUfTtcbiAgd2lkdGg6IDg4cHg7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBoZWlnaHQ6IGF1dG87XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDAgNnB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5gO1xuXG5jb25zdCBTdHlsZWRSZW1vdGVGZXRjaEJ1dHRvbiA9IHN0eWxlZChCdXR0b24pYFxuICBoZWlnaHQ6IGF1dG87XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDAgMTJweDtcbiAgZmxleC1zaHJpbms6IDA7XG5gO1xuXG5jb25zdCBSRU1PVEVfRE9XTkxPQURfU0hBUkUgPSAwLjg1O1xuXG5mdW5jdGlvbiBzY2FsZUZpbGVQcm9ncmVzcyhcbiAgcHJvZ3Jlc3M6IEZpbGVMb2FkaW5nUHJvZ3Jlc3MsXG4gIHN0YXJ0OiBudW1iZXIsXG4gIGVuZDogbnVtYmVyXG4pOiBGaWxlTG9hZGluZ1Byb2dyZXNzIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHByb2dyZXNzKS5yZWR1Y2U8RmlsZUxvYWRpbmdQcm9ncmVzcz4oKGFjY3UsIGtleSkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSBwcm9ncmVzc1trZXldO1xuICAgIGFjY3Vba2V5XSA9IHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBwZXJjZW50OiBzdGFydCArIChpdGVtLnBlcmNlbnQgfHwgMCkgKiAoZW5kIC0gc3RhcnQpXG4gICAgfTtcbiAgICByZXR1cm4gYWNjdTtcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBnZXRDb21iaW5lZExvYWRQcm9ncmVzcyh7XG4gIGZpbGVMb2FkaW5nLFxuICBmaWxlTG9hZGluZ1Byb2dyZXNzLFxuICByZW1vdGVQcm9ncmVzc1xufToge1xuICBmaWxlTG9hZGluZzogRmlsZUxvYWRpbmcgfCBmYWxzZTtcbiAgZmlsZUxvYWRpbmdQcm9ncmVzczogRmlsZUxvYWRpbmdQcm9ncmVzcztcbiAgcmVtb3RlUHJvZ3Jlc3M6IEZpbGVMb2FkaW5nUHJvZ3Jlc3M7XG59KTogRmlsZUxvYWRpbmdQcm9ncmVzcyB7XG4gIGNvbnN0IGlzUmVtb3RlRmV0Y2ggPSBPYmplY3Qua2V5cyhyZW1vdGVQcm9ncmVzcykubGVuZ3RoID4gMDtcbiAgaWYgKCFpc1JlbW90ZUZldGNoKSB7XG4gICAgcmV0dXJuIGZpbGVMb2FkaW5nUHJvZ3Jlc3M7XG4gIH1cbiAgaWYgKGZpbGVMb2FkaW5nKSB7XG4gICAgcmV0dXJuIHNjYWxlRmlsZVByb2dyZXNzKGZpbGVMb2FkaW5nUHJvZ3Jlc3MsIFJFTU9URV9ET1dOTE9BRF9TSEFSRSwgMSk7XG4gIH1cbiAgcmV0dXJuIHNjYWxlRmlsZVByb2dyZXNzKHJlbW90ZVByb2dyZXNzLCAwLCBSRU1PVEVfRE9XTkxPQURfU0hBUkUpO1xufVxuXG50eXBlIEZpbGVVcGxvYWRQcm9wcyA9IHtcbiAgb25GaWxlVXBsb2FkOiAoZmlsZXM6IEZpbGVbXSkgPT4gdm9pZDtcbiAgZmlsZUxvYWRpbmc6IEZpbGVMb2FkaW5nIHwgZmFsc2U7XG4gIGZpbGVMb2FkaW5nUHJvZ3Jlc3M6IEZpbGVMb2FkaW5nUHJvZ3Jlc3M7XG4gIHRoZW1lOiBvYmplY3Q7XG4gIC8qKiBBIGxpc3Qgb2YgbmFtZXMgb2Ygc3VwcG9ydGVkIGZvcm1hdHMgc3VpdGFibGUgdG8gcHJlc2VudCB0byB1c2VyICovXG4gIGZpbGVGb3JtYXROYW1lcz86IHN0cmluZ1tdO1xuICAvKiogQSBsaXN0IG9mIHR5cGljYWxseSAzIGxldHRlciBleHRlbnNpb25zICh3aXRob3V0ICcuJykgZm9yIGZpbGUgbWF0Y2hpbmcgKi9cbiAgZmlsZUV4dGVuc2lvbnM/OiBzdHJpbmdbXTtcbiAgLyoqIFNldCB0byB0cnVlIGlmIGFwcCB3YW50cyB0byBkbyBpdHMgb3duIGZpbGUgZmlsdGVyaW5nICovXG4gIGRpc2FibGVFeHRlbnNpb25GaWx0ZXI/OiBib29sZWFuO1xufSAmIFdyYXBwZWRDb21wb25lbnRQcm9wcztcblxudHlwZSBGaWxlVXBsb2FkU3RhdGUgPSB7XG4gIGRyYWdPdmVyOiBib29sZWFuO1xuICBmaWxlTG9hZGluZzogRmlsZUxvYWRpbmcgfCBmYWxzZTtcbiAgZmlsZXM6IEZpbGVbXTtcbiAgZXJyb3JGaWxlczogc3RyaW5nW107XG4gIHJlbW90ZVVybDogc3RyaW5nO1xuICByZW1vdGVGb3JtYXQ6IHN0cmluZztcbiAgcmVtb3RlRXJyb3I6IHttZXNzYWdlOiBzdHJpbmd9IHwgbnVsbDtcbiAgcmVtb3RlTG9hZGluZzogYm9vbGVhbjtcbiAgcmVtb3RlUHJvZ3Jlc3M6IEZpbGVMb2FkaW5nUHJvZ3Jlc3M7XG59O1xuXG5mdW5jdGlvbiBGaWxlVXBsb2FkRmFjdG9yeSgpIHtcbiAgLyoqIEBhdWdtZW50cyB7Q29tcG9uZW50PEZpbGVVcGxvYWRQcm9wcz59ICovXG4gIGNsYXNzIEZpbGVVcGxvYWQgZXh0ZW5kcyBDb21wb25lbnQ8RmlsZVVwbG9hZFByb3BzLCBGaWxlVXBsb2FkU3RhdGU+IHtcbiAgICBzdGF0ZTogRmlsZVVwbG9hZFN0YXRlID0ge1xuICAgICAgZHJhZ092ZXI6IGZhbHNlLFxuICAgICAgZmlsZUxvYWRpbmc6IGZhbHNlLFxuICAgICAgZmlsZXM6IFtdLFxuICAgICAgZXJyb3JGaWxlczogW10sXG4gICAgICByZW1vdGVVcmw6ICcnLFxuICAgICAgcmVtb3RlRm9ybWF0OiAnYXV0bycsXG4gICAgICByZW1vdGVFcnJvcjogbnVsbCxcbiAgICAgIHJlbW90ZUxvYWRpbmc6IGZhbHNlLFxuICAgICAgcmVtb3RlUHJvZ3Jlc3M6IHt9XG4gICAgfTtcblxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICBpZiAoc3RhdGUuZmlsZUxvYWRpbmcgJiYgcHJvcHMuZmlsZUxvYWRpbmcgPT09IGZhbHNlICYmIHN0YXRlLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpbGVzOiBbXSxcbiAgICAgICAgICBmaWxlTG9hZGluZzogcHJvcHMuZmlsZUxvYWRpbmcsXG4gICAgICAgICAgcmVtb3RlTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgcmVtb3RlUHJvZ3Jlc3M6IHt9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlTG9hZGluZzogcHJvcHMuZmlsZUxvYWRpbmcsXG4gICAgICAgIC4uLihwcm9wcy5maWxlTG9hZGluZyA/IHtyZW1vdGVMb2FkaW5nOiBmYWxzZX0gOiB7fSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnJhbWUgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICBfaXNWYWxpZEZpbGVUeXBlID0gZmlsZW5hbWUgPT4ge1xuICAgICAgY29uc3Qge2ZpbGVFeHRlbnNpb25zID0gW119ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IGZpbGVFeHQgPSBmaWxlRXh0ZW5zaW9ucy5maW5kKGV4dCA9PiBmaWxlbmFtZS5lbmRzV2l0aChleHQpKTtcblxuICAgICAgcmV0dXJuIEJvb2xlYW4oZmlsZUV4dCk7XG4gICAgfTtcblxuICAgIC8qKiBAcGFyYW0ge0ZpbGVMaXN0fSBmaWxlTGlzdCAqL1xuICAgIF9oYW5kbGVGaWxlSW5wdXQgPSAoZmlsZUxpc3Q6IEZpbGVMaXN0LCBldmVudDogYW55KSA9PiB7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVzID0gWy4uLmZpbGVMaXN0XS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgIGNvbnN0IHtkaXNhYmxlRXh0ZW5zaW9uRmlsdGVyID0gZmFsc2V9ID0gdGhpcy5wcm9wcztcblxuICAgICAgLy8gVE9ETyAtIG1vdmUgdGhpcyBjb2RlIG91dCBvZiB0aGUgY29tcG9uZW50XG4gICAgICBjb25zdCBmaWxlc1RvTG9hZDogRmlsZVtdID0gW107XG4gICAgICBjb25zdCBlcnJvckZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmIChkaXNhYmxlRXh0ZW5zaW9uRmlsdGVyIHx8IHRoaXMuX2lzVmFsaWRGaWxlVHlwZShmaWxlLm5hbWUpKSB7XG4gICAgICAgICAgZmlsZXNUb0xvYWQucHVzaChmaWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvckZpbGVzLnB1c2goZmlsZS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0U3RhdGUgPSB7ZmlsZXM6IGZpbGVzVG9Mb2FkLCBlcnJvckZpbGVzLCBkcmFnT3ZlcjogZmFsc2V9O1xuXG4gICAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSwgKCkgPT5cbiAgICAgICAgbmV4dFN0YXRlLmZpbGVzLmxlbmd0aCA/IHRoaXMucHJvcHMub25GaWxlVXBsb2FkKG5leHRTdGF0ZS5maWxlcykgOiBudWxsXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfdG9nZ2xlRHJhZ1N0YXRlID0gbmV3U3RhdGUgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7ZHJhZ092ZXI6IG5ld1N0YXRlfSk7XG4gICAgfTtcblxuICAgIF9vblJlbW90ZVVybENoYW5nZSA9IChldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IHJlbW90ZVVybCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICByZW1vdGVVcmwsXG4gICAgICAgIHJlbW90ZUVycm9yOiByZW1vdGVVcmwgJiYgIWlzUmVtb3RlRGF0YXNldFVybChyZW1vdGVVcmwpID8ge21lc3NhZ2U6ICdJbmNvcnJlY3QgVVJMJ30gOiBudWxsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX29uUmVtb3RlRm9ybWF0Q2hhbmdlID0gKGV2ZW50OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MU2VsZWN0RWxlbWVudD4pID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe3JlbW90ZUZvcm1hdDogZXZlbnQudGFyZ2V0LnZhbHVlfSk7XG4gICAgfTtcblxuICAgIF9vblJlbW90ZVVybEtleURvd24gPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlTG9hZFJlbW90ZUZpbGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX2hhbmRsZUxvYWRSZW1vdGVGaWxlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qge3JlbW90ZVVybCwgcmVtb3RlRm9ybWF0LCByZW1vdGVFcnJvcn0gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3Qge2ludGx9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHNob3dGb3JtYXRTZWxlY3RvciA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlUmVtb3RlRmlsZUZvcm1hdFNlbGVjdG9yO1xuICAgICAgY29uc3QgZm9ybWF0ID1cbiAgICAgICAgc2hvd0Zvcm1hdFNlbGVjdG9yICYmIHJlbW90ZUZvcm1hdCAhPT0gJ2F1dG8nID8gcmVtb3RlRm9ybWF0IDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFyZW1vdGVVcmwgfHwgcmVtb3RlRXJyb3IgfHwgdGhpcy5zdGF0ZS5yZW1vdGVMb2FkaW5nKSB7XG4gICAgICAgIGlmICghcmVtb3RlVXJsKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cmVtb3RlRXJyb3I6IHttZXNzYWdlOiAnSW5jb3JyZWN0IFVSTCd9fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1JlbW90ZURhdGFzZXRVcmwocmVtb3RlVXJsKSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtyZW1vdGVFcnJvcjoge21lc3NhZ2U6ICdJbmNvcnJlY3QgVVJMJ319KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWxlTmFtZSA9IGdldEZpbGVOYW1lRm9yUmVtb3RlVXJsKHJlbW90ZVVybCwgZm9ybWF0KTtcbiAgICAgIGNvbnN0IGRvd25sb2FkaW5nID0gaW50bC5mb3JtYXRNZXNzYWdlKHtpZDogJ2ZpbGVVcGxvYWRlci5kb3dubG9hZGluZyd9KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICByZW1vdGVMb2FkaW5nOiB0cnVlLFxuICAgICAgICByZW1vdGVFcnJvcjogbnVsbCxcbiAgICAgICAgcmVtb3RlUHJvZ3Jlc3M6IHtcbiAgICAgICAgICBbZmlsZU5hbWVdOiB7XG4gICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgIHBlcmNlbnQ6IDAsXG4gICAgICAgICAgICBtZXNzYWdlOiBkb3dubG9hZGluZyxcbiAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGxhc3RVcGRhdGUgPSAwO1xuICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZmV0Y2hSZW1vdGVGaWxlQXNLZXBsZXJGaWxlKHJlbW90ZVVybCwgZm9ybWF0LCAoe3BlcmNlbnR9KSA9PiB7XG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBpZiAocGVyY2VudCA8IDEgJiYgbm93IC0gbGFzdFVwZGF0ZSA8IDEwMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsYXN0VXBkYXRlID0gbm93O1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUocHJldiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gT2JqZWN0LmtleXMocHJldi5yZW1vdGVQcm9ncmVzcylbMF0gfHwgZmlsZU5hbWU7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICByZW1vdGVQcm9ncmVzczoge1xuICAgICAgICAgICAgICAgIFtuYW1lXToge1xuICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICBwZXJjZW50LFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZG93bmxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZXM6IFtmaWxlXSxcbiAgICAgICAgICAgIGVycm9yRmlsZXM6IFtdLFxuICAgICAgICAgICAgZHJhZ092ZXI6IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB0aGlzLnByb3BzLm9uRmlsZVVwbG9hZChbZmlsZV0pXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICByZW1vdGVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICByZW1vdGVQcm9ncmVzczoge30sXG4gICAgICAgICAgcmVtb3RlRXJyb3I6IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogYEZhaWxlZCB0byBsb2FkICR7cmVtb3RlVXJsfWBcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7ZHJhZ092ZXIsIGZpbGVzLCBlcnJvckZpbGVzLCByZW1vdGVVcmwsIHJlbW90ZUZvcm1hdCwgcmVtb3RlRXJyb3IsIHJlbW90ZUxvYWRpbmcsIHJlbW90ZVByb2dyZXNzfSA9XG4gICAgICAgIHRoaXMuc3RhdGU7XG4gICAgICBjb25zdCB7ZmlsZUxvYWRpbmcsIGZpbGVMb2FkaW5nUHJvZ3Jlc3MsIHRoZW1lLCBpbnRsfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCB7ZmlsZUV4dGVuc2lvbnMgPSBbXSwgZmlsZUZvcm1hdE5hbWVzID0gW119ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHNob3dGb3JtYXRTZWxlY3RvciA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlUmVtb3RlRmlsZUZvcm1hdFNlbGVjdG9yO1xuICAgICAgY29uc3QgZmlsZVVwbG9hZEluZm9UZXh0ID0gYCR7aW50bC5mb3JtYXRNZXNzYWdlKFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdmaWxlVXBsb2FkZXIuY29uZmlnVXBsb2FkTWVzc2FnZSdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVGb3JtYXROYW1lczogZmlsZUZvcm1hdE5hbWVzLm1hcChmb3JtYXQgPT4gYCoqJHtmb3JtYXR9KipgKS5qb2luKCcsICcpXG4gICAgICAgIH1cbiAgICAgICl9KCR7R1VJREVTX0ZJTEVfRk9STUFUX0RPQ30pLmA7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkRmlsZVVwbG9hZCBjbGFzc05hbWU9XCJmaWxlLXVwbG9hZGVyXCIgcmVmPXt0aGlzLmZyYW1lfT5cbiAgICAgICAgICB7RmlsZURyb3AgPyAoXG4gICAgICAgICAgICA8RmlsZURyb3BcbiAgICAgICAgICAgICAgZnJhbWU9e3RoaXMuZnJhbWUuY3VycmVudCB8fCBkb2N1bWVudH1cbiAgICAgICAgICAgICAgb25EcmFnT3Zlcj17KCkgPT4gdGhpcy5fdG9nZ2xlRHJhZ1N0YXRlKHRydWUpfVxuICAgICAgICAgICAgICBvbkRyYWdMZWF2ZT17KCkgPT4gdGhpcy5fdG9nZ2xlRHJhZ1N0YXRlKGZhbHNlKX1cbiAgICAgICAgICAgICAgb25Ecm9wPXt0aGlzLl9oYW5kbGVGaWxlSW5wdXR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkZXJfX2ZpbGUtZHJvcFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxTdHlsZWRVcGxvYWRNZXNzYWdlIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkX19tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgPE1hcmtkb3duXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXt7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogTGlua1JlbmRlcmVyXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtmaWxlVXBsb2FkSW5mb1RleHR9XG4gICAgICAgICAgICAgICAgPC9NYXJrZG93bj5cbiAgICAgICAgICAgICAgPC9TdHlsZWRVcGxvYWRNZXNzYWdlPlxuICAgICAgICAgICAgICA8U3R5bGVkRmlsZURyb3AgJGRyYWdPdmVyPXtkcmFnT3Zlcn0+XG4gICAgICAgICAgICAgICAgPFN0eWxlZERyb3BCb2R5PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZEZpbGVUeXBlRm93IGNsYXNzTmFtZT1cImZpbGUtdHlwZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAge2ZpbGVFeHRlbnNpb25zLm1hcChleHQgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxGaWxlVHlwZSBrZXk9e2V4dH0gZXh0PXtleHR9IGhlaWdodD1cIjUwcHhcIiBmb250U2l6ZT1cIjlweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRGaWxlVHlwZUZvdz5cbiAgICAgICAgICAgICAgICAgIHtmaWxlTG9hZGluZyB8fCByZW1vdGVMb2FkaW5nID8gKFxuICAgICAgICAgICAgICAgICAgICA8RmlsZVVwbG9hZFByb2dyZXNzXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZUxvYWRpbmdQcm9ncmVzcz17Z2V0Q29tYmluZWRMb2FkUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTG9hZGluZ1Byb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIDxTdHlsZWREcmFnTkRyb3BJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e29wYWNpdHk6IGRyYWdPdmVyID8gMC41IDogMX19XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmaWxlLXVwbG9hZC1kaXNwbGF5LW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxEcmFnTkRyb3AgaGVpZ2h0PVwiMzZweFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZXJyb3JGaWxlcy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxXYXJuaW5nTXNnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17J2ZpbGVVcGxvYWRlci5maWxlTm90U3VwcG9ydGVkJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17e2Vycm9yRmlsZXM6IGVycm9yRmlsZXMuam9pbignLCAnKX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9XYXJuaW5nTXNnPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWREcmFnTkRyb3BJY29uPlxuICAgICAgICAgICAgICAgICAgICAgIHshZmlsZXMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZERyYWdGaWxlV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZEFjdGlvbkxpbmU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXsnZmlsZVVwbG9hZGVyLmRyb3BNZXNzYWdlJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm93c2U6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VXBsb2FkQnV0dG9uIGtleT1cImJyb3dzZVwiIG9uVXBsb2FkPXt0aGlzLl9oYW5kbGVGaWxlSW5wdXR9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6ICdmaWxlVXBsb2FkZXIuYnJvd3NlRmlsZXMnfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9VcGxvYWRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRBY3Rpb25MaW5lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkUmVtb3RlVXJsRm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkZXJfX3JlbW90ZS11cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZFJlbW90ZVVybFJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdHlsZWRSZW1vdGVVcmxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3JlbW90ZVVybH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17aW50bC5mb3JtYXRNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2ZpbGVVcGxvYWRlci51cmxQbGFjZWhvbGRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbnRsLmZvcm1hdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZmlsZVVwbG9hZGVyLnVybFBsYWNlaG9sZGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuX29uUmVtb3RlVXJsQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbktleURvd249e3RoaXMuX29uUmVtb3RlVXJsS2V5RG93bn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3JlbW90ZUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3Nob3dGb3JtYXRTZWxlY3RvciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0eWxlZFJlbW90ZUZvcm1hdFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6ICdmaWxlVXBsb2FkZXIuZm9ybWF0J30pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtyZW1vdGVGb3JtYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuX29uUmVtb3RlRm9ybWF0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtyZW1vdGVMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1JFTU9URV9GSUxFX0ZPUk1BVFMubWFwKGZvcm1hdCA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17Zm9ybWF0fSB2YWx1ZT17Zm9ybWF0fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdCA9PT0gJ2F1dG8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbnRsLmZvcm1hdE1lc3NhZ2Uoe2lkOiAnZmlsZVVwbG9hZGVyLmZvcm1hdEF1dG8nfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdC50b1VwcGVyQ2FzZSgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkUmVtb3RlRm9ybWF0U2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U3R5bGVkUmVtb3RlRmV0Y2hCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IXJlbW90ZVVybCB8fCByZW1vdGVMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLl9oYW5kbGVMb2FkUmVtb3RlRmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9eydmaWxlVXBsb2FkZXIuZmV0Y2gnfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRSZW1vdGVGZXRjaEJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0eWxlZFJlbW90ZVVybFJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmVtb3RlRXJyb3IgPyA8V2FybmluZ01zZz57cmVtb3RlRXJyb3IubWVzc2FnZX08L1dhcm5pbmdNc2c+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWRSZW1vdGVVcmxGb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdHlsZWREcmFnRmlsZVdyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L1N0eWxlZERyb3BCb2R5PlxuICAgICAgICAgICAgICAgIHtmaWxlTG9hZGluZyB8fCByZW1vdGVMb2FkaW5nID8gbnVsbCA6IChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWREaXNjbGFpbWVyPlxuICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2ZpbGVVcGxvYWRlci5kaXNjbGFpbWVyJ30gLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRGlzY2xhaW1lcj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1N0eWxlZEZpbGVEcm9wPlxuICAgICAgICAgICAgPC9GaWxlRHJvcD5cbiAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgIDxXYXJuaW5nTXNnPlxuICAgICAgICAgICAge2lzQ2hyb21lKCkgPyA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17J2ZpbGVVcGxvYWRlci5jaHJvbWVNZXNzYWdlJ30gLz4gOiAnJ31cbiAgICAgICAgICA8L1dhcm5pbmdNc2c+XG4gICAgICAgIDwvU3R5bGVkRmlsZVVwbG9hZD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluamVjdEludGwoRmlsZVVwbG9hZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVVcGxvYWRGYWN0b3J5O1xuZXhwb3J0IGNvbnN0IEZpbGVVcGxvYWQgPSBGaWxlVXBsb2FkRmFjdG9yeSgpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksYUFBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sbUJBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFRLFVBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLGFBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFdBQUEsR0FBQVYsT0FBQTtBQUtBLElBQUFXLE9BQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLE1BQUEsR0FBQVosT0FB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VyxnQkFBR3ZLLE1BQUEsWUFBQW9QLGFBQUEsQ0FBQ3JJLFVBQVUsUUFBRXdELFdBQVcsQ0FBQzRCLE9BQW9CLENBQUMsR0FBRyxJQUM3QyxDQUNBLENBQUMsR0FDdEIsSUFDSixDQUVVLENBQUMsRUFDaEI5QyxXQUFXLElBQUltQixhQUFhLEdBQUcsSUFBSSxnQkFDbEN4SyxNQUFBLFlBQUFvUCxhQUFBLENBQUNySCxnQkFBZ0IscUJBQ2YvSCxNQUFBLFlBQUFvUCxhQUFBLENBQUN6TyxhQUFBLENBQUFnUSxnQkFBZ0I7VUFBQy9DLEVBQUUsRUFBRTtRQUEwQixDQUFFLENBQ2xDLENBRU4sQ0FDUixDQUFDLEdBQ1QsSUFBSSxlQUVSNU4sTUFBQSxZQUFBb1AsYUFBQSxDQUFDckksVUFBVSxRQUNSLElBQUE2SyxlQUFRLEVBQUMsQ0FBQyxnQkFBRzVSLE1BQUEsWUFBQW9QLGFBQUEsQ0FBQ3pPLGFBQUEsQ0FBQWdRLGdCQUFnQjtVQUFDL0MsRUFBRSxFQUFFO1FBQTZCLENBQUUsQ0FBQyxHQUFHLEVBQzdELENBQ0ksQ0FBQztNQUV2QjtJQUFDO01BQUE1RSxHQUFBO01BQUE3RSxLQUFBLEVBeFNELFNBQU8wTix3QkFBd0JBLENBQUNuTCxLQUFLLEVBQUUyRyxLQUFLLEVBQUU7UUFDNUMsSUFBSUEsS0FBSyxDQUFDaEUsV0FBVyxJQUFJM0MsS0FBSyxDQUFDMkMsV0FBVyxLQUFLLEtBQUssSUFBSWdFLEtBQUssQ0FBQ2xELEtBQUssQ0FBQ3JHLE1BQU0sRUFBRTtVQUMxRSxPQUFPO1lBQ0xxRyxLQUFLLEVBQUUsRUFBRTtZQUNUZCxXQUFXLEVBQUUzQyxLQUFLLENBQUMyQyxXQUFXO1lBQzlCbUIsYUFBYSxFQUFFLEtBQUs7WUFDcEJqQixjQUFjLEVBQUUsQ0FBQztVQUNuQixDQUFDO1FBQ0g7UUFDQSxPQUFBeEQsYUFBQTtVQUNFc0QsV0FBVyxFQUFFM0MsS0FBSyxDQUFDMkM7UUFBVyxHQUMxQjNDLEtBQUssQ0FBQzJDLFdBQVcsR0FBRztVQUFDbUIsYUFBYSxFQUFFO1FBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUV2RDtJQUFDO0VBQUEsRUExQnNCc0gsZ0JBQVM7RUF3VGxDLE9BQU8sSUFBQUMscUJBQVUsRUFBQ3JJLFVBQVUsQ0FBQztBQUMvQjtBQUFDLElBQUFzSSxRQUFBLEdBQUFoTCxPQUFBLGNBRWN5QyxpQkFBaUI7QUFDekIsSUFBTUMsVUFBVSxHQUFBMUMsT0FBQSxDQUFBMEMsVUFBQSxHQUFHRCxpQkFBaUIsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119